From ec68367227f5c4fd6a59fcab928af0584673a016 Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Thu, 7 Sep 2017 13:39:11 +0100 Subject: [PATCH] Initial commit --- .dockerignore | 6 + .gitignore | 7 + CLA.md | 32 + Dockerfile-devserver | 49 + Dockerfile-server | 48 + Dockerfile-server.cover | 22 + LICENSE | 202 ++ Makefile | 128 + NOTICES.txt | 100 + README.md | 51 + charts/mq-advancedserver/Chart.yaml | 19 + charts/mq-advancedserver/LICENSE | 2038 ++++++++++++++ .../LICENSE_locale/LICENSE_cs | 1141 ++++++++ .../LICENSE_locale/LICENSE_de | 1289 +++++++++ .../LICENSE_locale/LICENSE_el | 1171 +++++++++ .../LICENSE_locale/LICENSE_en | 2037 ++++++++++++++ .../LICENSE_locale/LICENSE_es | 1261 +++++++++ .../LICENSE_locale/LICENSE_fr | 1369 ++++++++++ .../LICENSE_locale/LICENSE_in | 1121 ++++++++ .../LICENSE_locale/LICENSE_it | 1215 +++++++++ .../LICENSE_locale/LICENSE_ja | 1073 ++++++++ .../LICENSE_locale/LICENSE_ko | 1061 ++++++++ .../LICENSE_locale/LICENSE_lt | 1183 +++++++++ .../LICENSE_locale/LICENSE_pl | 1173 +++++++++ .../LICENSE_locale/LICENSE_pt | 1213 +++++++++ .../LICENSE_locale/LICENSE_ru | 1173 +++++++++ .../LICENSE_locale/LICENSE_sl | 1141 ++++++++ .../LICENSE_locale/LICENSE_tr | 1173 +++++++++ .../LICENSE_locale/LICENSE_zh | 1157 ++++++++ .../LICENSE_locale/LICENSE_zh_TW | 1167 ++++++++ charts/mq-advancedserver/README.md | 74 + charts/mq-advancedserver/templates/NOTES.txt | 3 + .../mq-advancedserver/templates/_helpers.tpl | 29 + .../mq-advancedserver/templates/service.yaml | 32 + .../templates/stateful-set.yaml | 97 + charts/mq-advancedserver/templates/test.yaml | 40 + charts/mq-advancedserver/values.yaml | 49 + charts/mq-devserver/Chart.yaml | 19 + charts/mq-devserver/LICENSE | 737 ++++++ charts/mq-devserver/LICENSE_locale/LICENSE_cs | 266 ++ charts/mq-devserver/LICENSE_locale/LICENSE_de | 350 +++ charts/mq-devserver/LICENSE_locale/LICENSE_el | 280 ++ charts/mq-devserver/LICENSE_locale/LICENSE_en | 736 ++++++ charts/mq-devserver/LICENSE_locale/LICENSE_es | 326 +++ charts/mq-devserver/LICENSE_locale/LICENSE_fr | 380 +++ charts/mq-devserver/LICENSE_locale/LICENSE_in | 254 ++ charts/mq-devserver/LICENSE_locale/LICENSE_it | 302 +++ charts/mq-devserver/LICENSE_locale/LICENSE_ja | 230 ++ charts/mq-devserver/LICENSE_locale/LICENSE_ko | 224 ++ charts/mq-devserver/LICENSE_locale/LICENSE_lt | 284 ++ charts/mq-devserver/LICENSE_locale/LICENSE_pl | 284 ++ charts/mq-devserver/LICENSE_locale/LICENSE_pt | 302 +++ charts/mq-devserver/LICENSE_locale/LICENSE_ru | 280 ++ charts/mq-devserver/LICENSE_locale/LICENSE_sl | 266 ++ charts/mq-devserver/LICENSE_locale/LICENSE_tr | 280 ++ charts/mq-devserver/LICENSE_locale/LICENSE_zh | 258 ++ .../mq-devserver/LICENSE_locale/LICENSE_zh_TW | 260 ++ charts/mq-devserver/README.md | 74 + charts/mq-devserver/templates/NOTES.txt | 3 + charts/mq-devserver/templates/_helpers.tpl | 29 + charts/mq-devserver/templates/service.yaml | 32 + .../mq-devserver/templates/stateful-set.yaml | 81 + charts/mq-devserver/templates/test.yaml | 40 + charts/mq-devserver/values.yaml | 49 + cmd/chkmqhealthy/main.go | 55 + cmd/chkmqready/main.go | 31 + cmd/runmqserver/crtmqvol.go | 87 + cmd/runmqserver/main.go | 331 +++ cmd/runmqserver/main_test.go | 34 + cmd/runmqserver/mqconfig.go | 135 + glide.lock | 25 + glide.yaml | 27 + incubating/Dockerfile-sfbridge | 30 + incubating/mq-explorer/Dockerfile-mq-explorer | 38 + incubating/mq-explorer/README.md | 14 + install-mq.sh | 104 + pkg/name/name.go | 48 + pkg/name/name_test.go | 56 + test-image/20-config.mqsc | 19 + test-image/30-security.mqsc | 15 + test-image/Dockerfile | 18 + test/docker/Gopkg.lock | 57 + test/docker/Gopkg.toml | 20 + test/docker/docker_api_test.go | 178 ++ test/docker/docker_api_test_util.go | 265 ++ test/docker/main.go | 19 + test/kubernetes/Gopkg.lock | 225 ++ test/kubernetes/Gopkg.toml | 25 + test/kubernetes/helm_test.go | 146 + vendor/github.com/hpcloud/tail/.gitignore | 3 + vendor/github.com/hpcloud/tail/.travis.yml | 18 + vendor/github.com/hpcloud/tail/CHANGES.md | 63 + vendor/github.com/hpcloud/tail/Dockerfile | 19 + .../hpcloud/tail/Godeps/Godeps.json | 15 + vendor/github.com/hpcloud/tail/Godeps/Readme | 5 + vendor/github.com/hpcloud/tail/LICENSE.txt | 21 + vendor/github.com/hpcloud/tail/Makefile | 11 + vendor/github.com/hpcloud/tail/README.md | 28 + vendor/github.com/hpcloud/tail/appveyor.yml | 11 + .../hpcloud/tail/cmd/gotail/.gitignore | 1 + .../hpcloud/tail/cmd/gotail/Makefile | 4 + .../hpcloud/tail/cmd/gotail/gotail.go | 66 + .../hpcloud/tail/ratelimiter/Licence | 7 + .../hpcloud/tail/ratelimiter/leakybucket.go | 97 + .../tail/ratelimiter/leakybucket_test.go | 73 + .../hpcloud/tail/ratelimiter/memory.go | 58 + .../hpcloud/tail/ratelimiter/storage.go | 6 + vendor/github.com/hpcloud/tail/tail.go | 438 +++ vendor/github.com/hpcloud/tail/tail_posix.go | 11 + vendor/github.com/hpcloud/tail/tail_test.go | 521 ++++ .../github.com/hpcloud/tail/tail_windows.go | 12 + vendor/github.com/hpcloud/tail/util/util.go | 48 + .../vendor/gopkg.in/fsnotify.v1/.gitignore | 6 + .../vendor/gopkg.in/fsnotify.v1/.travis.yml | 20 + .../tail/vendor/gopkg.in/fsnotify.v1/AUTHORS | 34 + .../vendor/gopkg.in/fsnotify.v1/CHANGELOG.md | 267 ++ .../gopkg.in/fsnotify.v1/CONTRIBUTING.md | 77 + .../tail/vendor/gopkg.in/fsnotify.v1/LICENSE | 28 + .../vendor/gopkg.in/fsnotify.v1/README.md | 64 + .../vendor/gopkg.in/fsnotify.v1/fsnotify.go | 62 + .../vendor/gopkg.in/fsnotify.v1/inotify.go | 306 +++ .../gopkg.in/fsnotify.v1/inotify_poller.go | 186 ++ .../vendor/gopkg.in/fsnotify.v1/kqueue.go | 468 ++++ .../gopkg.in/fsnotify.v1/open_mode_bsd.go | 11 + .../gopkg.in/fsnotify.v1/open_mode_darwin.go | 12 + .../vendor/gopkg.in/fsnotify.v1/windows.go | 561 ++++ .../tail/vendor/gopkg.in/tomb.v1/LICENSE | 29 + .../tail/vendor/gopkg.in/tomb.v1/README.md | 4 + .../tail/vendor/gopkg.in/tomb.v1/tomb.go | 176 ++ .../hpcloud/tail/watch/filechanges.go | 36 + .../github.com/hpcloud/tail/watch/inotify.go | 128 + .../hpcloud/tail/watch/inotify_tracker.go | 260 ++ .../github.com/hpcloud/tail/watch/polling.go | 118 + vendor/github.com/hpcloud/tail/watch/watch.go | 20 + .../hpcloud/tail/winfile/winfile.go | 92 + vendor/github.com/sirupsen/logrus/.gitignore | 1 + vendor/github.com/sirupsen/logrus/.travis.yml | 15 + .../github.com/sirupsen/logrus/CHANGELOG.md | 113 + vendor/github.com/sirupsen/logrus/LICENSE | 21 + vendor/github.com/sirupsen/logrus/README.md | 505 ++++ vendor/github.com/sirupsen/logrus/alt_exit.go | 64 + .../sirupsen/logrus/alt_exit_test.go | 83 + .../github.com/sirupsen/logrus/appveyor.yml | 14 + vendor/github.com/sirupsen/logrus/doc.go | 26 + vendor/github.com/sirupsen/logrus/entry.go | 276 ++ .../github.com/sirupsen/logrus/entry_test.go | 77 + .../sirupsen/logrus/example_basic_test.go | 69 + .../sirupsen/logrus/example_hook_test.go | 35 + vendor/github.com/sirupsen/logrus/exported.go | 193 ++ .../github.com/sirupsen/logrus/formatter.go | 45 + .../sirupsen/logrus/formatter_bench_test.go | 101 + .../github.com/sirupsen/logrus/hook_test.go | 122 + vendor/github.com/sirupsen/logrus/hooks.go | 34 + .../sirupsen/logrus/hooks/syslog/README.md | 39 + .../sirupsen/logrus/hooks/syslog/syslog.go | 55 + .../logrus/hooks/syslog/syslog_test.go | 27 + .../sirupsen/logrus/hooks/test/test.go | 95 + .../sirupsen/logrus/hooks/test/test_test.go | 39 + .../sirupsen/logrus/json_formatter.go | 79 + .../sirupsen/logrus/json_formatter_test.go | 199 ++ vendor/github.com/sirupsen/logrus/logger.go | 317 +++ .../sirupsen/logrus/logger_bench_test.go | 61 + vendor/github.com/sirupsen/logrus/logrus.go | 143 + .../github.com/sirupsen/logrus/logrus_test.go | 386 +++ .../sirupsen/logrus/terminal_bsd.go | 10 + .../sirupsen/logrus/terminal_linux.go | 14 + .../sirupsen/logrus/text_formatter.go | 191 ++ .../sirupsen/logrus/text_formatter_test.go | 141 + vendor/github.com/sirupsen/logrus/writer.go | 62 + vendor/golang.org/x/crypto/.gitattributes | 10 + vendor/golang.org/x/crypto/.gitignore | 2 + vendor/golang.org/x/crypto/AUTHORS | 3 + vendor/golang.org/x/crypto/CONTRIBUTING.md | 31 + vendor/golang.org/x/crypto/CONTRIBUTORS | 3 + vendor/golang.org/x/crypto/LICENSE | 27 + vendor/golang.org/x/crypto/PATENTS | 22 + vendor/golang.org/x/crypto/README | 3 + vendor/golang.org/x/crypto/acme/acme.go | 944 +++++++ vendor/golang.org/x/crypto/acme/acme_test.go | 1185 +++++++++ .../x/crypto/acme/autocert/autocert.go | 776 ++++++ .../x/crypto/acme/autocert/autocert_test.go | 390 +++ .../x/crypto/acme/autocert/cache.go | 130 + .../x/crypto/acme/autocert/cache_test.go | 58 + .../x/crypto/acme/autocert/renewal.go | 125 + .../x/crypto/acme/autocert/renewal_test.go | 190 ++ vendor/golang.org/x/crypto/acme/jws.go | 153 ++ vendor/golang.org/x/crypto/acme/jws_test.go | 266 ++ vendor/golang.org/x/crypto/acme/types.go | 209 ++ vendor/golang.org/x/crypto/bcrypt/base64.go | 35 + vendor/golang.org/x/crypto/bcrypt/bcrypt.go | 294 +++ .../golang.org/x/crypto/bcrypt/bcrypt_test.go | 226 ++ vendor/golang.org/x/crypto/blowfish/block.go | 159 ++ .../x/crypto/blowfish/blowfish_test.go | 274 ++ vendor/golang.org/x/crypto/blowfish/cipher.go | 91 + vendor/golang.org/x/crypto/blowfish/const.go | 199 ++ vendor/golang.org/x/crypto/bn256/bn256.go | 404 +++ .../golang.org/x/crypto/bn256/bn256_test.go | 304 +++ vendor/golang.org/x/crypto/bn256/constants.go | 44 + vendor/golang.org/x/crypto/bn256/curve.go | 278 ++ .../golang.org/x/crypto/bn256/example_test.go | 43 + vendor/golang.org/x/crypto/bn256/gfp12.go | 200 ++ vendor/golang.org/x/crypto/bn256/gfp2.go | 219 ++ vendor/golang.org/x/crypto/bn256/gfp6.go | 296 +++ vendor/golang.org/x/crypto/bn256/optate.go | 395 +++ vendor/golang.org/x/crypto/bn256/twist.go | 249 ++ vendor/golang.org/x/crypto/cast5/cast5.go | 526 ++++ .../golang.org/x/crypto/cast5/cast5_test.go | 106 + vendor/golang.org/x/crypto/codereview.cfg | 1 + .../x/crypto/curve25519/const_amd64.s | 20 + .../x/crypto/curve25519/cswap_amd64.s | 88 + .../x/crypto/curve25519/curve25519.go | 841 ++++++ .../x/crypto/curve25519/curve25519_test.go | 29 + vendor/golang.org/x/crypto/curve25519/doc.go | 23 + .../x/crypto/curve25519/freeze_amd64.s | 94 + .../x/crypto/curve25519/ladderstep_amd64.s | 1398 ++++++++++ .../x/crypto/curve25519/mont25519_amd64.go | 240 ++ .../x/crypto/curve25519/mul_amd64.s | 191 ++ .../x/crypto/curve25519/square_amd64.s | 153 ++ vendor/golang.org/x/crypto/ed25519/ed25519.go | 181 ++ .../x/crypto/ed25519/ed25519_test.go | 183 ++ .../ed25519/internal/edwards25519/const.go | 1422 ++++++++++ .../internal/edwards25519/edwards25519.go | 1771 +++++++++++++ .../x/crypto/ed25519/testdata/sign.input.gz | Bin 0 -> 50330 bytes .../golang.org/x/crypto/hkdf/example_test.go | 61 + vendor/golang.org/x/crypto/hkdf/hkdf.go | 75 + vendor/golang.org/x/crypto/hkdf/hkdf_test.go | 370 +++ vendor/golang.org/x/crypto/md4/md4.go | 118 + vendor/golang.org/x/crypto/md4/md4_test.go | 71 + vendor/golang.org/x/crypto/md4/md4block.go | 89 + vendor/golang.org/x/crypto/nacl/box/box.go | 86 + .../golang.org/x/crypto/nacl/box/box_test.go | 78 + .../x/crypto/nacl/secretbox/example_test.go | 53 + .../x/crypto/nacl/secretbox/secretbox.go | 149 ++ .../x/crypto/nacl/secretbox/secretbox_test.go | 91 + vendor/golang.org/x/crypto/ocsp/ocsp.go | 714 +++++ vendor/golang.org/x/crypto/ocsp/ocsp_test.go | 778 ++++++ .../x/crypto/openpgp/armor/armor.go | 219 ++ .../x/crypto/openpgp/armor/armor_test.go | 95 + .../x/crypto/openpgp/armor/encode.go | 160 ++ .../x/crypto/openpgp/canonical_text.go | 59 + .../x/crypto/openpgp/canonical_text_test.go | 52 + .../x/crypto/openpgp/clearsign/clearsign.go | 376 +++ .../openpgp/clearsign/clearsign_test.go | 210 ++ .../x/crypto/openpgp/elgamal/elgamal.go | 122 + .../x/crypto/openpgp/elgamal/elgamal_test.go | 49 + .../x/crypto/openpgp/errors/errors.go | 72 + vendor/golang.org/x/crypto/openpgp/keys.go | 639 +++++ .../golang.org/x/crypto/openpgp/keys_test.go | 404 +++ .../x/crypto/openpgp/packet/compressed.go | 123 + .../crypto/openpgp/packet/compressed_test.go | 41 + .../x/crypto/openpgp/packet/config.go | 91 + .../x/crypto/openpgp/packet/encrypted_key.go | 199 ++ .../openpgp/packet/encrypted_key_test.go | 146 + .../x/crypto/openpgp/packet/literal.go | 89 + .../x/crypto/openpgp/packet/ocfb.go | 143 + .../x/crypto/openpgp/packet/ocfb_test.go | 46 + .../openpgp/packet/one_pass_signature.go | 73 + .../x/crypto/openpgp/packet/opaque.go | 162 ++ .../x/crypto/openpgp/packet/opaque_test.go | 67 + .../x/crypto/openpgp/packet/packet.go | 539 ++++ .../x/crypto/openpgp/packet/packet_test.go | 255 ++ .../x/crypto/openpgp/packet/private_key.go | 380 +++ .../crypto/openpgp/packet/private_key_test.go | 270 ++ .../x/crypto/openpgp/packet/public_key.go | 750 ++++++ .../crypto/openpgp/packet/public_key_test.go | 202 ++ .../x/crypto/openpgp/packet/public_key_v3.go | 280 ++ .../openpgp/packet/public_key_v3_test.go | 82 + .../x/crypto/openpgp/packet/reader.go | 76 + .../x/crypto/openpgp/packet/signature.go | 731 +++++ .../x/crypto/openpgp/packet/signature_test.go | 78 + .../x/crypto/openpgp/packet/signature_v3.go | 146 + .../openpgp/packet/signature_v3_test.go | 92 + .../openpgp/packet/symmetric_key_encrypted.go | 155 ++ .../packet/symmetric_key_encrypted_test.go | 103 + .../openpgp/packet/symmetrically_encrypted.go | 290 ++ .../packet/symmetrically_encrypted_test.go | 123 + .../x/crypto/openpgp/packet/userattribute.go | 91 + .../openpgp/packet/userattribute_test.go | 109 + .../x/crypto/openpgp/packet/userid.go | 160 ++ .../x/crypto/openpgp/packet/userid_test.go | 87 + vendor/golang.org/x/crypto/openpgp/read.go | 442 ++++ .../golang.org/x/crypto/openpgp/read_test.go | 613 +++++ vendor/golang.org/x/crypto/openpgp/s2k/s2k.go | 273 ++ .../x/crypto/openpgp/s2k/s2k_test.go | 137 + vendor/golang.org/x/crypto/openpgp/write.go | 378 +++ .../golang.org/x/crypto/openpgp/write_test.go | 273 ++ .../x/crypto/otr/libotr_test_helper.c | 197 ++ vendor/golang.org/x/crypto/otr/otr.go | 1408 ++++++++++ vendor/golang.org/x/crypto/otr/otr_test.go | 470 ++++ vendor/golang.org/x/crypto/otr/smp.go | 572 ++++ vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go | 77 + .../golang.org/x/crypto/pbkdf2/pbkdf2_test.go | 157 ++ .../golang.org/x/crypto/pkcs12/bmp-string.go | 50 + .../x/crypto/pkcs12/bmp-string_test.go | 63 + vendor/golang.org/x/crypto/pkcs12/crypto.go | 131 + .../golang.org/x/crypto/pkcs12/crypto_test.go | 125 + vendor/golang.org/x/crypto/pkcs12/errors.go | 23 + .../crypto/pkcs12/internal/rc2/bench_test.go | 27 + .../x/crypto/pkcs12/internal/rc2/rc2.go | 274 ++ .../x/crypto/pkcs12/internal/rc2/rc2_test.go | 93 + vendor/golang.org/x/crypto/pkcs12/mac.go | 45 + vendor/golang.org/x/crypto/pkcs12/mac_test.go | 42 + vendor/golang.org/x/crypto/pkcs12/pbkdf.go | 170 ++ .../golang.org/x/crypto/pkcs12/pbkdf_test.go | 34 + vendor/golang.org/x/crypto/pkcs12/pkcs12.go | 342 +++ .../golang.org/x/crypto/pkcs12/pkcs12_test.go | 138 + vendor/golang.org/x/crypto/pkcs12/safebags.go | 57 + .../golang.org/x/crypto/poly1305/poly1305.go | 32 + .../x/crypto/poly1305/poly1305_amd64.s | 133 + .../x/crypto/poly1305/poly1305_arm.s | 379 +++ .../x/crypto/poly1305/poly1305_test.go | 92 + .../golang.org/x/crypto/poly1305/sum_amd64.go | 24 + .../golang.org/x/crypto/poly1305/sum_arm.go | 24 + .../golang.org/x/crypto/poly1305/sum_ref.go | 1531 +++++++++++ .../x/crypto/ripemd160/ripemd160.go | 120 + .../x/crypto/ripemd160/ripemd160_test.go | 64 + .../x/crypto/ripemd160/ripemd160block.go | 161 ++ .../x/crypto/salsa20/salsa/hsalsa20.go | 144 + .../x/crypto/salsa20/salsa/salsa2020_amd64.s | 902 +++++++ .../x/crypto/salsa20/salsa/salsa208.go | 199 ++ .../x/crypto/salsa20/salsa/salsa20_amd64.go | 23 + .../x/crypto/salsa20/salsa/salsa20_ref.go | 234 ++ .../x/crypto/salsa20/salsa/salsa_test.go | 35 + vendor/golang.org/x/crypto/salsa20/salsa20.go | 54 + .../x/crypto/salsa20/salsa20_test.go | 139 + vendor/golang.org/x/crypto/scrypt/scrypt.go | 243 ++ .../golang.org/x/crypto/scrypt/scrypt_test.go | 160 ++ vendor/golang.org/x/crypto/sha3/doc.go | 66 + vendor/golang.org/x/crypto/sha3/hashes.go | 65 + vendor/golang.org/x/crypto/sha3/keccakf.go | 412 +++ .../golang.org/x/crypto/sha3/keccakf_amd64.go | 13 + .../golang.org/x/crypto/sha3/keccakf_amd64.s | 392 +++ vendor/golang.org/x/crypto/sha3/register.go | 18 + vendor/golang.org/x/crypto/sha3/sha3.go | 193 ++ vendor/golang.org/x/crypto/sha3/sha3_test.go | 306 +++ vendor/golang.org/x/crypto/sha3/shake.go | 60 + .../sha3/testdata/keccakKats.json.deflate | Bin 0 -> 521342 bytes vendor/golang.org/x/crypto/sha3/xor.go | 16 + .../golang.org/x/crypto/sha3/xor_generic.go | 28 + .../golang.org/x/crypto/sha3/xor_unaligned.go | 58 + .../golang.org/x/crypto/ssh/agent/client.go | 659 +++++ .../x/crypto/ssh/agent/client_test.go | 343 +++ .../x/crypto/ssh/agent/example_test.go | 40 + .../golang.org/x/crypto/ssh/agent/forward.go | 103 + .../golang.org/x/crypto/ssh/agent/keyring.go | 215 ++ .../x/crypto/ssh/agent/keyring_test.go | 76 + .../golang.org/x/crypto/ssh/agent/server.go | 451 ++++ .../x/crypto/ssh/agent/server_test.go | 207 ++ .../x/crypto/ssh/agent/testdata_test.go | 64 + .../golang.org/x/crypto/ssh/benchmark_test.go | 122 + vendor/golang.org/x/crypto/ssh/buffer.go | 98 + vendor/golang.org/x/crypto/ssh/buffer_test.go | 87 + vendor/golang.org/x/crypto/ssh/certs.go | 503 ++++ vendor/golang.org/x/crypto/ssh/certs_test.go | 216 ++ vendor/golang.org/x/crypto/ssh/channel.go | 633 +++++ vendor/golang.org/x/crypto/ssh/cipher.go | 579 ++++ vendor/golang.org/x/crypto/ssh/cipher_test.go | 127 + vendor/golang.org/x/crypto/ssh/client.go | 213 ++ vendor/golang.org/x/crypto/ssh/client_auth.go | 473 ++++ .../x/crypto/ssh/client_auth_test.go | 472 ++++ vendor/golang.org/x/crypto/ssh/client_test.go | 39 + vendor/golang.org/x/crypto/ssh/common.go | 356 +++ vendor/golang.org/x/crypto/ssh/connection.go | 143 + vendor/golang.org/x/crypto/ssh/doc.go | 18 + .../golang.org/x/crypto/ssh/example_test.go | 262 ++ vendor/golang.org/x/crypto/ssh/handshake.go | 460 ++++ .../golang.org/x/crypto/ssh/handshake_test.go | 486 ++++ vendor/golang.org/x/crypto/ssh/kex.go | 526 ++++ vendor/golang.org/x/crypto/ssh/kex_test.go | 50 + vendor/golang.org/x/crypto/ssh/keys.go | 880 +++++++ vendor/golang.org/x/crypto/ssh/keys_test.go | 456 ++++ vendor/golang.org/x/crypto/ssh/mac.go | 57 + .../golang.org/x/crypto/ssh/mempipe_test.go | 110 + vendor/golang.org/x/crypto/ssh/messages.go | 758 ++++++ .../golang.org/x/crypto/ssh/messages_test.go | 288 ++ vendor/golang.org/x/crypto/ssh/mux.go | 330 +++ vendor/golang.org/x/crypto/ssh/mux_test.go | 502 ++++ vendor/golang.org/x/crypto/ssh/server.go | 488 ++++ vendor/golang.org/x/crypto/ssh/session.go | 627 +++++ .../golang.org/x/crypto/ssh/session_test.go | 770 ++++++ vendor/golang.org/x/crypto/ssh/tcpip.go | 407 +++ vendor/golang.org/x/crypto/ssh/tcpip_test.go | 20 + .../x/crypto/ssh/terminal/terminal.go | 892 +++++++ .../x/crypto/ssh/terminal/terminal_test.go | 291 ++ .../golang.org/x/crypto/ssh/terminal/util.go | 133 + .../x/crypto/ssh/terminal/util_bsd.go | 12 + .../x/crypto/ssh/terminal/util_linux.go | 11 + .../x/crypto/ssh/terminal/util_plan9.go | 58 + .../x/crypto/ssh/terminal/util_solaris.go | 73 + .../x/crypto/ssh/terminal/util_windows.go | 174 ++ .../x/crypto/ssh/test/agent_unix_test.go | 59 + .../golang.org/x/crypto/ssh/test/cert_test.go | 47 + vendor/golang.org/x/crypto/ssh/test/doc.go | 7 + .../x/crypto/ssh/test/forward_unix_test.go | 160 ++ .../x/crypto/ssh/test/session_test.go | 365 +++ .../x/crypto/ssh/test/tcpip_test.go | 46 + .../x/crypto/ssh/test/test_unix_test.go | 268 ++ .../x/crypto/ssh/test/testdata_test.go | 64 + .../golang.org/x/crypto/ssh/testdata/doc.go | 8 + .../golang.org/x/crypto/ssh/testdata/keys.go | 120 + .../golang.org/x/crypto/ssh/testdata_test.go | 63 + vendor/golang.org/x/crypto/ssh/transport.go | 333 +++ .../golang.org/x/crypto/ssh/transport_test.go | 109 + vendor/golang.org/x/crypto/tea/cipher.go | 109 + vendor/golang.org/x/crypto/tea/tea_test.go | 93 + vendor/golang.org/x/crypto/twofish/twofish.go | 342 +++ .../x/crypto/twofish/twofish_test.go | 129 + vendor/golang.org/x/crypto/xtea/block.go | 66 + vendor/golang.org/x/crypto/xtea/cipher.go | 82 + vendor/golang.org/x/crypto/xtea/xtea_test.go | 229 ++ vendor/golang.org/x/crypto/xts/xts.go | 138 + vendor/golang.org/x/crypto/xts/xts_test.go | 85 + vendor/golang.org/x/sys/.gitattributes | 10 + vendor/golang.org/x/sys/.gitignore | 2 + vendor/golang.org/x/sys/AUTHORS | 3 + vendor/golang.org/x/sys/CONTRIBUTING.md | 31 + vendor/golang.org/x/sys/CONTRIBUTORS | 3 + vendor/golang.org/x/sys/LICENSE | 27 + vendor/golang.org/x/sys/PATENTS | 22 + vendor/golang.org/x/sys/README | 3 + vendor/golang.org/x/sys/codereview.cfg | 1 + vendor/golang.org/x/sys/plan9/asm.s | 8 + vendor/golang.org/x/sys/plan9/asm_plan9_386.s | 30 + .../golang.org/x/sys/plan9/asm_plan9_amd64.s | 30 + vendor/golang.org/x/sys/plan9/const_plan9.go | 70 + vendor/golang.org/x/sys/plan9/dir_plan9.go | 212 ++ vendor/golang.org/x/sys/plan9/env_plan9.go | 27 + vendor/golang.org/x/sys/plan9/env_unset.go | 14 + vendor/golang.org/x/sys/plan9/errors_plan9.go | 50 + vendor/golang.org/x/sys/plan9/mkall.sh | 138 + vendor/golang.org/x/sys/plan9/mkerrors.sh | 246 ++ vendor/golang.org/x/sys/plan9/mksyscall.pl | 319 +++ .../golang.org/x/sys/plan9/mksysnum_plan9.sh | 23 + .../golang.org/x/sys/plan9/pwd_go15_plan9.go | 21 + vendor/golang.org/x/sys/plan9/pwd_plan9.go | 23 + vendor/golang.org/x/sys/plan9/race.go | 30 + vendor/golang.org/x/sys/plan9/race0.go | 25 + vendor/golang.org/x/sys/plan9/str.go | 22 + vendor/golang.org/x/sys/plan9/syscall.go | 74 + .../golang.org/x/sys/plan9/syscall_plan9.go | 349 +++ vendor/golang.org/x/sys/plan9/syscall_test.go | 33 + .../x/sys/plan9/zsyscall_plan9_386.go | 292 ++ .../x/sys/plan9/zsyscall_plan9_amd64.go | 292 ++ .../golang.org/x/sys/plan9/zsysnum_plan9.go | 49 + vendor/golang.org/x/sys/unix/.gitignore | 1 + vendor/golang.org/x/sys/unix/README.md | 173 ++ vendor/golang.org/x/sys/unix/asm_darwin_386.s | 29 + .../golang.org/x/sys/unix/asm_darwin_amd64.s | 29 + vendor/golang.org/x/sys/unix/asm_darwin_arm.s | 30 + .../golang.org/x/sys/unix/asm_darwin_arm64.s | 30 + .../x/sys/unix/asm_dragonfly_amd64.s | 29 + .../golang.org/x/sys/unix/asm_freebsd_386.s | 29 + .../golang.org/x/sys/unix/asm_freebsd_amd64.s | 29 + .../golang.org/x/sys/unix/asm_freebsd_arm.s | 29 + vendor/golang.org/x/sys/unix/asm_linux_386.s | 35 + .../golang.org/x/sys/unix/asm_linux_amd64.s | 29 + vendor/golang.org/x/sys/unix/asm_linux_arm.s | 29 + .../golang.org/x/sys/unix/asm_linux_arm64.s | 24 + .../golang.org/x/sys/unix/asm_linux_mips64x.s | 28 + .../golang.org/x/sys/unix/asm_linux_mipsx.s | 31 + .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 28 + .../golang.org/x/sys/unix/asm_linux_s390x.s | 28 + vendor/golang.org/x/sys/unix/asm_netbsd_386.s | 29 + .../golang.org/x/sys/unix/asm_netbsd_amd64.s | 29 + vendor/golang.org/x/sys/unix/asm_netbsd_arm.s | 29 + .../golang.org/x/sys/unix/asm_openbsd_386.s | 29 + .../golang.org/x/sys/unix/asm_openbsd_amd64.s | 29 + .../golang.org/x/sys/unix/asm_solaris_amd64.s | 17 + .../golang.org/x/sys/unix/bluetooth_linux.go | 35 + vendor/golang.org/x/sys/unix/cap_freebsd.go | 195 ++ vendor/golang.org/x/sys/unix/constants.go | 13 + vendor/golang.org/x/sys/unix/creds_test.go | 121 + vendor/golang.org/x/sys/unix/dirent.go | 102 + vendor/golang.org/x/sys/unix/endian_big.go | 9 + vendor/golang.org/x/sys/unix/endian_little.go | 9 + vendor/golang.org/x/sys/unix/env_unix.go | 27 + vendor/golang.org/x/sys/unix/env_unset.go | 14 + vendor/golang.org/x/sys/unix/export_test.go | 9 + vendor/golang.org/x/sys/unix/file_unix.go | 27 + vendor/golang.org/x/sys/unix/flock.go | 24 + .../x/sys/unix/flock_linux_32bit.go | 13 + vendor/golang.org/x/sys/unix/gccgo.go | 46 + vendor/golang.org/x/sys/unix/gccgo_c.c | 41 + .../x/sys/unix/gccgo_linux_amd64.go | 20 + .../x/sys/unix/gccgo_linux_sparc64.go | 20 + vendor/golang.org/x/sys/unix/linux/Dockerfile | 48 + vendor/golang.org/x/sys/unix/linux/mkall.go | 379 +++ .../golang.org/x/sys/unix/linux/mksysnum.pl | 85 + vendor/golang.org/x/sys/unix/linux/types.go | 548 ++++ vendor/golang.org/x/sys/unix/mkall.sh | 179 ++ vendor/golang.org/x/sys/unix/mkerrors.sh | 558 ++++ vendor/golang.org/x/sys/unix/mkpost.go | 88 + vendor/golang.org/x/sys/unix/mksyscall.pl | 328 +++ .../x/sys/unix/mksyscall_solaris.pl | 289 ++ .../golang.org/x/sys/unix/mksysctl_openbsd.pl | 264 ++ .../golang.org/x/sys/unix/mksysnum_darwin.pl | 39 + .../x/sys/unix/mksysnum_dragonfly.pl | 50 + .../golang.org/x/sys/unix/mksysnum_freebsd.pl | 50 + .../golang.org/x/sys/unix/mksysnum_netbsd.pl | 58 + .../golang.org/x/sys/unix/mksysnum_openbsd.pl | 50 + .../golang.org/x/sys/unix/mmap_unix_test.go | 23 + .../golang.org/x/sys/unix/openbsd_pledge.go | 38 + vendor/golang.org/x/sys/unix/openbsd_test.go | 113 + vendor/golang.org/x/sys/unix/race.go | 30 + vendor/golang.org/x/sys/unix/race0.go | 25 + .../golang.org/x/sys/unix/sockcmsg_linux.go | 36 + vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 104 + vendor/golang.org/x/sys/unix/str.go | 26 + vendor/golang.org/x/sys/unix/syscall.go | 69 + vendor/golang.org/x/sys/unix/syscall_bsd.go | 614 +++++ .../golang.org/x/sys/unix/syscall_bsd_test.go | 62 + .../golang.org/x/sys/unix/syscall_darwin.go | 493 ++++ .../x/sys/unix/syscall_darwin_386.go | 77 + .../x/sys/unix/syscall_darwin_amd64.go | 79 + .../x/sys/unix/syscall_darwin_arm.go | 71 + .../x/sys/unix/syscall_darwin_arm64.go | 77 + .../x/sys/unix/syscall_dragonfly.go | 425 +++ .../x/sys/unix/syscall_dragonfly_amd64.go | 61 + .../golang.org/x/sys/unix/syscall_freebsd.go | 670 +++++ .../x/sys/unix/syscall_freebsd_386.go | 61 + .../x/sys/unix/syscall_freebsd_amd64.go | 61 + .../x/sys/unix/syscall_freebsd_arm.go | 61 + .../x/sys/unix/syscall_freebsd_test.go | 290 ++ vendor/golang.org/x/sys/unix/syscall_linux.go | 1459 ++++++++++ .../x/sys/unix/syscall_linux_386.go | 399 +++ .../x/sys/unix/syscall_linux_amd64.go | 152 ++ .../x/sys/unix/syscall_linux_amd64_gc.go | 13 + .../x/sys/unix/syscall_linux_arm.go | 263 ++ .../x/sys/unix/syscall_linux_arm64.go | 190 ++ .../x/sys/unix/syscall_linux_mips64x.go | 209 ++ .../x/sys/unix/syscall_linux_mipsx.go | 239 ++ .../x/sys/unix/syscall_linux_ppc64x.go | 135 + .../x/sys/unix/syscall_linux_s390x.go | 328 +++ .../x/sys/unix/syscall_linux_sparc64.go | 169 ++ .../x/sys/unix/syscall_linux_test.go | 227 ++ .../golang.org/x/sys/unix/syscall_netbsd.go | 476 ++++ .../x/sys/unix/syscall_netbsd_386.go | 42 + .../x/sys/unix/syscall_netbsd_amd64.go | 42 + .../x/sys/unix/syscall_netbsd_arm.go | 42 + .../golang.org/x/sys/unix/syscall_no_getwd.go | 11 + .../golang.org/x/sys/unix/syscall_openbsd.go | 287 ++ .../x/sys/unix/syscall_openbsd_386.go | 42 + .../x/sys/unix/syscall_openbsd_amd64.go | 42 + .../golang.org/x/sys/unix/syscall_solaris.go | 715 +++++ .../x/sys/unix/syscall_solaris_amd64.go | 35 + .../x/sys/unix/syscall_solaris_test.go | 34 + vendor/golang.org/x/sys/unix/syscall_test.go | 50 + vendor/golang.org/x/sys/unix/syscall_unix.go | 293 +++ .../golang.org/x/sys/unix/syscall_unix_gc.go | 15 + .../x/sys/unix/syscall_unix_test.go | 345 +++ vendor/golang.org/x/sys/unix/types_darwin.go | 250 ++ .../golang.org/x/sys/unix/types_dragonfly.go | 242 ++ vendor/golang.org/x/sys/unix/types_freebsd.go | 361 +++ vendor/golang.org/x/sys/unix/types_netbsd.go | 232 ++ vendor/golang.org/x/sys/unix/types_openbsd.go | 244 ++ vendor/golang.org/x/sys/unix/types_solaris.go | 269 ++ .../x/sys/unix/zerrors_darwin_386.go | 1576 +++++++++++ .../x/sys/unix/zerrors_darwin_amd64.go | 1576 +++++++++++ .../x/sys/unix/zerrors_darwin_arm.go | 1293 +++++++++ .../x/sys/unix/zerrors_darwin_arm64.go | 1576 +++++++++++ .../x/sys/unix/zerrors_dragonfly_amd64.go | 1568 +++++++++++ .../x/sys/unix/zerrors_freebsd_386.go | 1743 ++++++++++++ .../x/sys/unix/zerrors_freebsd_amd64.go | 1707 ++++++++++++ .../x/sys/unix/zerrors_freebsd_arm.go | 1729 ++++++++++++ .../x/sys/unix/zerrors_linux_386.go | 2180 +++++++++++++++ .../x/sys/unix/zerrors_linux_amd64.go | 2181 +++++++++++++++ .../x/sys/unix/zerrors_linux_arm.go | 2185 +++++++++++++++ .../x/sys/unix/zerrors_linux_arm64.go | 2170 +++++++++++++++ .../x/sys/unix/zerrors_linux_mips.go | 2189 +++++++++++++++ .../x/sys/unix/zerrors_linux_mips64.go | 2189 +++++++++++++++ .../x/sys/unix/zerrors_linux_mips64le.go | 2189 +++++++++++++++ .../x/sys/unix/zerrors_linux_mipsle.go | 2189 +++++++++++++++ .../x/sys/unix/zerrors_linux_ppc64.go | 2243 ++++++++++++++++ .../x/sys/unix/zerrors_linux_ppc64le.go | 2243 ++++++++++++++++ .../x/sys/unix/zerrors_linux_s390x.go | 2242 ++++++++++++++++ .../x/sys/unix/zerrors_linux_sparc64.go | 2142 +++++++++++++++ .../x/sys/unix/zerrors_netbsd_386.go | 1712 ++++++++++++ .../x/sys/unix/zerrors_netbsd_amd64.go | 1702 ++++++++++++ .../x/sys/unix/zerrors_netbsd_arm.go | 1688 ++++++++++++ .../x/sys/unix/zerrors_openbsd_386.go | 1584 +++++++++++ .../x/sys/unix/zerrors_openbsd_amd64.go | 1583 +++++++++++ .../x/sys/unix/zerrors_solaris_amd64.go | 1483 +++++++++++ .../x/sys/unix/zsyscall_darwin_386.go | 1394 ++++++++++ .../x/sys/unix/zsyscall_darwin_amd64.go | 1409 ++++++++++ .../x/sys/unix/zsyscall_darwin_arm.go | 1394 ++++++++++ .../x/sys/unix/zsyscall_darwin_arm64.go | 1394 ++++++++++ .../x/sys/unix/zsyscall_dragonfly_amd64.go | 1393 ++++++++++ .../x/sys/unix/zsyscall_freebsd_386.go | 1617 ++++++++++++ .../x/sys/unix/zsyscall_freebsd_amd64.go | 1663 ++++++++++++ .../x/sys/unix/zsyscall_freebsd_arm.go | 1617 ++++++++++++ .../x/sys/unix/zsyscall_linux_386.go | 1927 ++++++++++++++ .../x/sys/unix/zsyscall_linux_amd64.go | 2120 +++++++++++++++ .../x/sys/unix/zsyscall_linux_arm.go | 2029 ++++++++++++++ .../x/sys/unix/zsyscall_linux_arm64.go | 2003 ++++++++++++++ .../x/sys/unix/zsyscall_linux_mips.go | 2085 +++++++++++++++ .../x/sys/unix/zsyscall_linux_mips64.go | 2079 +++++++++++++++ .../x/sys/unix/zsyscall_linux_mips64le.go | 2079 +++++++++++++++ .../x/sys/unix/zsyscall_linux_mipsle.go | 2085 +++++++++++++++ .../x/sys/unix/zsyscall_linux_ppc64.go | 2131 +++++++++++++++ .../x/sys/unix/zsyscall_linux_ppc64le.go | 2131 +++++++++++++++ .../x/sys/unix/zsyscall_linux_s390x.go | 1911 ++++++++++++++ .../x/sys/unix/zsyscall_linux_sparc64.go | 1833 +++++++++++++ .../x/sys/unix/zsyscall_netbsd_386.go | 1299 +++++++++ .../x/sys/unix/zsyscall_netbsd_amd64.go | 1299 +++++++++ .../x/sys/unix/zsyscall_netbsd_arm.go | 1299 +++++++++ .../x/sys/unix/zsyscall_openbsd_386.go | 1357 ++++++++++ .../x/sys/unix/zsyscall_openbsd_amd64.go | 1357 ++++++++++ .../x/sys/unix/zsyscall_solaris_amd64.go | 1589 +++++++++++ .../golang.org/x/sys/unix/zsysctl_openbsd.go | 270 ++ .../x/sys/unix/zsysnum_darwin_386.go | 398 +++ .../x/sys/unix/zsysnum_darwin_amd64.go | 398 +++ .../x/sys/unix/zsysnum_darwin_arm.go | 358 +++ .../x/sys/unix/zsysnum_darwin_arm64.go | 398 +++ .../x/sys/unix/zsysnum_dragonfly_amd64.go | 315 +++ .../x/sys/unix/zsysnum_freebsd_386.go | 351 +++ .../x/sys/unix/zsysnum_freebsd_amd64.go | 353 +++ .../x/sys/unix/zsysnum_freebsd_arm.go | 351 +++ .../x/sys/unix/zsysnum_linux_386.go | 388 +++ .../x/sys/unix/zsysnum_linux_amd64.go | 341 +++ .../x/sys/unix/zsysnum_linux_arm.go | 361 +++ .../x/sys/unix/zsysnum_linux_arm64.go | 285 ++ .../x/sys/unix/zsysnum_linux_mips.go | 374 +++ .../x/sys/unix/zsysnum_linux_mips64.go | 334 +++ .../x/sys/unix/zsysnum_linux_mips64le.go | 334 +++ .../x/sys/unix/zsysnum_linux_mipsle.go | 374 +++ .../x/sys/unix/zsysnum_linux_ppc64.go | 369 +++ .../x/sys/unix/zsysnum_linux_ppc64le.go | 369 +++ .../x/sys/unix/zsysnum_linux_s390x.go | 331 +++ .../x/sys/unix/zsysnum_linux_sparc64.go | 348 +++ .../x/sys/unix/zsysnum_netbsd_386.go | 273 ++ .../x/sys/unix/zsysnum_netbsd_amd64.go | 273 ++ .../x/sys/unix/zsysnum_netbsd_arm.go | 273 ++ .../x/sys/unix/zsysnum_openbsd_386.go | 207 ++ .../x/sys/unix/zsysnum_openbsd_amd64.go | 207 ++ .../x/sys/unix/zsysnum_solaris_amd64.go | 13 + .../x/sys/unix/ztypes_darwin_386.go | 447 ++++ .../x/sys/unix/ztypes_darwin_amd64.go | 462 ++++ .../x/sys/unix/ztypes_darwin_arm.go | 449 ++++ .../x/sys/unix/ztypes_darwin_arm64.go | 457 ++++ .../x/sys/unix/ztypes_dragonfly_amd64.go | 443 ++++ .../x/sys/unix/ztypes_freebsd_386.go | 502 ++++ .../x/sys/unix/ztypes_freebsd_amd64.go | 510 ++++ .../x/sys/unix/ztypes_freebsd_arm.go | 497 ++++ .../golang.org/x/sys/unix/ztypes_linux_386.go | 685 +++++ .../x/sys/unix/ztypes_linux_amd64.go | 703 +++++ .../golang.org/x/sys/unix/ztypes_linux_arm.go | 674 +++++ .../x/sys/unix/ztypes_linux_arm64.go | 682 +++++ .../x/sys/unix/ztypes_linux_mips.go | 679 +++++ .../x/sys/unix/ztypes_linux_mips64.go | 684 +++++ .../x/sys/unix/ztypes_linux_mips64le.go | 684 +++++ .../x/sys/unix/ztypes_linux_mipsle.go | 679 +++++ .../x/sys/unix/ztypes_linux_ppc64.go | 692 +++++ .../x/sys/unix/ztypes_linux_ppc64le.go | 692 +++++ .../x/sys/unix/ztypes_linux_s390x.go | 709 +++++ .../x/sys/unix/ztypes_linux_sparc64.go | 666 +++++ .../x/sys/unix/ztypes_netbsd_386.go | 396 +++ .../x/sys/unix/ztypes_netbsd_amd64.go | 403 +++ .../x/sys/unix/ztypes_netbsd_arm.go | 401 +++ .../x/sys/unix/ztypes_openbsd_386.go | 441 ++++ .../x/sys/unix/ztypes_openbsd_amd64.go | 448 ++++ .../x/sys/unix/ztypes_solaris_amd64.go | 442 ++++ .../x/sys/windows/asm_windows_386.s | 13 + .../x/sys/windows/asm_windows_amd64.s | 13 + .../golang.org/x/sys/windows/dll_windows.go | 377 +++ vendor/golang.org/x/sys/windows/env_unset.go | 15 + .../golang.org/x/sys/windows/env_windows.go | 25 + vendor/golang.org/x/sys/windows/eventlog.go | 20 + .../golang.org/x/sys/windows/exec_windows.go | 97 + .../x/sys/windows/memory_windows.go | 26 + vendor/golang.org/x/sys/windows/mksyscall.go | 7 + vendor/golang.org/x/sys/windows/race.go | 30 + vendor/golang.org/x/sys/windows/race0.go | 25 + .../x/sys/windows/registry/export_test.go | 11 + .../golang.org/x/sys/windows/registry/key.go | 200 ++ .../x/sys/windows/registry/mksyscall.go | 7 + .../x/sys/windows/registry/registry_test.go | 756 ++++++ .../x/sys/windows/registry/syscall.go | 32 + .../x/sys/windows/registry/value.go | 384 +++ .../sys/windows/registry/zsyscall_windows.go | 120 + .../x/sys/windows/security_windows.go | 435 +++ vendor/golang.org/x/sys/windows/service.go | 164 ++ vendor/golang.org/x/sys/windows/str.go | 22 + .../golang.org/x/sys/windows/svc/debug/log.go | 56 + .../x/sys/windows/svc/debug/service.go | 45 + vendor/golang.org/x/sys/windows/svc/event.go | 48 + .../x/sys/windows/svc/eventlog/install.go | 80 + .../x/sys/windows/svc/eventlog/log.go | 70 + .../x/sys/windows/svc/eventlog/log_test.go | 51 + .../x/sys/windows/svc/example/beep.go | 22 + .../x/sys/windows/svc/example/install.go | 92 + .../x/sys/windows/svc/example/main.go | 76 + .../x/sys/windows/svc/example/manage.go | 62 + .../x/sys/windows/svc/example/service.go | 82 + vendor/golang.org/x/sys/windows/svc/go12.c | 24 + vendor/golang.org/x/sys/windows/svc/go12.go | 11 + vendor/golang.org/x/sys/windows/svc/go13.go | 31 + .../x/sys/windows/svc/mgr/config.go | 139 + .../golang.org/x/sys/windows/svc/mgr/mgr.go | 162 ++ .../x/sys/windows/svc/mgr/mgr_test.go | 169 ++ .../x/sys/windows/svc/mgr/service.go | 72 + .../golang.org/x/sys/windows/svc/security.go | 62 + .../golang.org/x/sys/windows/svc/service.go | 363 +++ .../golang.org/x/sys/windows/svc/svc_test.go | 118 + vendor/golang.org/x/sys/windows/svc/sys_386.s | 68 + .../golang.org/x/sys/windows/svc/sys_amd64.s | 42 + vendor/golang.org/x/sys/windows/syscall.go | 71 + .../golang.org/x/sys/windows/syscall_test.go | 33 + .../x/sys/windows/syscall_windows.go | 998 +++++++ .../x/sys/windows/syscall_windows_test.go | 107 + .../x/sys/windows/zsyscall_windows.go | 2342 +++++++++++++++++ .../x/sys/windows/ztypes_windows.go | 1235 +++++++++ .../x/sys/windows/ztypes_windows_386.go | 22 + .../x/sys/windows/ztypes_windows_amd64.go | 22 + vendor/gopkg.in/fsnotify.v1/.gitignore | 6 + vendor/gopkg.in/fsnotify.v1/.travis.yml | 20 + vendor/gopkg.in/fsnotify.v1/AUTHORS | 34 + vendor/gopkg.in/fsnotify.v1/CHANGELOG.md | 267 ++ vendor/gopkg.in/fsnotify.v1/CONTRIBUTING.md | 77 + vendor/gopkg.in/fsnotify.v1/LICENSE | 28 + vendor/gopkg.in/fsnotify.v1/README.md | 64 + vendor/gopkg.in/fsnotify.v1/example_test.go | 42 + vendor/gopkg.in/fsnotify.v1/fsnotify.go | 62 + vendor/gopkg.in/fsnotify.v1/inotify.go | 306 +++ vendor/gopkg.in/fsnotify.v1/inotify_poller.go | 186 ++ .../fsnotify.v1/inotify_poller_test.go | 228 ++ vendor/gopkg.in/fsnotify.v1/inotify_test.go | 292 ++ .../gopkg.in/fsnotify.v1/integration_test.go | 1135 ++++++++ vendor/gopkg.in/fsnotify.v1/kqueue.go | 468 ++++ vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go | 11 + .../gopkg.in/fsnotify.v1/open_mode_darwin.go | 12 + vendor/gopkg.in/fsnotify.v1/windows.go | 561 ++++ vendor/gopkg.in/tomb.v1/LICENSE | 29 + vendor/gopkg.in/tomb.v1/README.md | 4 + vendor/gopkg.in/tomb.v1/tomb.go | 176 ++ vendor/gopkg.in/tomb.v1/tomb_test.go | 114 + 735 files changed, 248651 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 CLA.md create mode 100644 Dockerfile-devserver create mode 100644 Dockerfile-server create mode 100644 Dockerfile-server.cover create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 NOTICES.txt create mode 100644 README.md create mode 100644 charts/mq-advancedserver/Chart.yaml create mode 100644 charts/mq-advancedserver/LICENSE create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_cs create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_de create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_el create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_en create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_es create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_fr create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_in create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_it create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_ja create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_ko create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_lt create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_pl create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_pt create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_ru create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_sl create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_tr create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_zh create mode 100644 charts/mq-advancedserver/LICENSE_locale/LICENSE_zh_TW create mode 100644 charts/mq-advancedserver/README.md create mode 100644 charts/mq-advancedserver/templates/NOTES.txt create mode 100644 charts/mq-advancedserver/templates/_helpers.tpl create mode 100644 charts/mq-advancedserver/templates/service.yaml create mode 100644 charts/mq-advancedserver/templates/stateful-set.yaml create mode 100644 charts/mq-advancedserver/templates/test.yaml create mode 100644 charts/mq-advancedserver/values.yaml create mode 100644 charts/mq-devserver/Chart.yaml create mode 100644 charts/mq-devserver/LICENSE create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_cs create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_de create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_el create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_en create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_es create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_fr create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_in create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_it create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_ja create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_ko create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_lt create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_pl create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_pt create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_ru create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_sl create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_tr create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_zh create mode 100644 charts/mq-devserver/LICENSE_locale/LICENSE_zh_TW create mode 100644 charts/mq-devserver/README.md create mode 100644 charts/mq-devserver/templates/NOTES.txt create mode 100644 charts/mq-devserver/templates/_helpers.tpl create mode 100644 charts/mq-devserver/templates/service.yaml create mode 100644 charts/mq-devserver/templates/stateful-set.yaml create mode 100644 charts/mq-devserver/templates/test.yaml create mode 100644 charts/mq-devserver/values.yaml create mode 100644 cmd/chkmqhealthy/main.go create mode 100644 cmd/chkmqready/main.go create mode 100644 cmd/runmqserver/crtmqvol.go create mode 100644 cmd/runmqserver/main.go create mode 100644 cmd/runmqserver/main_test.go create mode 100644 cmd/runmqserver/mqconfig.go create mode 100644 glide.lock create mode 100644 glide.yaml create mode 100644 incubating/Dockerfile-sfbridge create mode 100644 incubating/mq-explorer/Dockerfile-mq-explorer create mode 100644 incubating/mq-explorer/README.md create mode 100644 install-mq.sh create mode 100644 pkg/name/name.go create mode 100644 pkg/name/name_test.go create mode 100644 test-image/20-config.mqsc create mode 100644 test-image/30-security.mqsc create mode 100644 test-image/Dockerfile create mode 100644 test/docker/Gopkg.lock create mode 100644 test/docker/Gopkg.toml create mode 100644 test/docker/docker_api_test.go create mode 100644 test/docker/docker_api_test_util.go create mode 100644 test/docker/main.go create mode 100644 test/kubernetes/Gopkg.lock create mode 100644 test/kubernetes/Gopkg.toml create mode 100644 test/kubernetes/helm_test.go create mode 100644 vendor/github.com/hpcloud/tail/.gitignore create mode 100644 vendor/github.com/hpcloud/tail/.travis.yml create mode 100644 vendor/github.com/hpcloud/tail/CHANGES.md create mode 100644 vendor/github.com/hpcloud/tail/Dockerfile create mode 100644 vendor/github.com/hpcloud/tail/Godeps/Godeps.json create mode 100644 vendor/github.com/hpcloud/tail/Godeps/Readme create mode 100644 vendor/github.com/hpcloud/tail/LICENSE.txt create mode 100644 vendor/github.com/hpcloud/tail/Makefile create mode 100644 vendor/github.com/hpcloud/tail/README.md create mode 100644 vendor/github.com/hpcloud/tail/appveyor.yml create mode 100644 vendor/github.com/hpcloud/tail/cmd/gotail/.gitignore create mode 100644 vendor/github.com/hpcloud/tail/cmd/gotail/Makefile create mode 100644 vendor/github.com/hpcloud/tail/cmd/gotail/gotail.go create mode 100644 vendor/github.com/hpcloud/tail/ratelimiter/Licence create mode 100644 vendor/github.com/hpcloud/tail/ratelimiter/leakybucket.go create mode 100644 vendor/github.com/hpcloud/tail/ratelimiter/leakybucket_test.go create mode 100644 vendor/github.com/hpcloud/tail/ratelimiter/memory.go create mode 100644 vendor/github.com/hpcloud/tail/ratelimiter/storage.go create mode 100644 vendor/github.com/hpcloud/tail/tail.go create mode 100644 vendor/github.com/hpcloud/tail/tail_posix.go create mode 100644 vendor/github.com/hpcloud/tail/tail_test.go create mode 100644 vendor/github.com/hpcloud/tail/tail_windows.go create mode 100644 vendor/github.com/hpcloud/tail/util/util.go create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/.gitignore create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/.travis.yml create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/AUTHORS create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/CHANGELOG.md create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/CONTRIBUTING.md create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/LICENSE create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/README.md create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/fsnotify.go create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/inotify.go create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/inotify_poller.go create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/kqueue.go create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/windows.go create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/LICENSE create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/README.md create mode 100644 vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/tomb.go create mode 100644 vendor/github.com/hpcloud/tail/watch/filechanges.go create mode 100644 vendor/github.com/hpcloud/tail/watch/inotify.go create mode 100644 vendor/github.com/hpcloud/tail/watch/inotify_tracker.go create mode 100644 vendor/github.com/hpcloud/tail/watch/polling.go create mode 100644 vendor/github.com/hpcloud/tail/watch/watch.go create mode 100644 vendor/github.com/hpcloud/tail/winfile/winfile.go create mode 100644 vendor/github.com/sirupsen/logrus/.gitignore create mode 100644 vendor/github.com/sirupsen/logrus/.travis.yml create mode 100644 vendor/github.com/sirupsen/logrus/CHANGELOG.md create mode 100644 vendor/github.com/sirupsen/logrus/LICENSE create mode 100644 vendor/github.com/sirupsen/logrus/README.md create mode 100644 vendor/github.com/sirupsen/logrus/alt_exit.go create mode 100644 vendor/github.com/sirupsen/logrus/alt_exit_test.go create mode 100644 vendor/github.com/sirupsen/logrus/appveyor.yml create mode 100644 vendor/github.com/sirupsen/logrus/doc.go create mode 100644 vendor/github.com/sirupsen/logrus/entry.go create mode 100644 vendor/github.com/sirupsen/logrus/entry_test.go create mode 100644 vendor/github.com/sirupsen/logrus/example_basic_test.go create mode 100644 vendor/github.com/sirupsen/logrus/example_hook_test.go create mode 100644 vendor/github.com/sirupsen/logrus/exported.go create mode 100644 vendor/github.com/sirupsen/logrus/formatter.go create mode 100644 vendor/github.com/sirupsen/logrus/formatter_bench_test.go create mode 100644 vendor/github.com/sirupsen/logrus/hook_test.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/README.md create mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/test/test.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/test/test_test.go create mode 100644 vendor/github.com/sirupsen/logrus/json_formatter.go create mode 100644 vendor/github.com/sirupsen/logrus/json_formatter_test.go create mode 100644 vendor/github.com/sirupsen/logrus/logger.go create mode 100644 vendor/github.com/sirupsen/logrus/logger_bench_test.go create mode 100644 vendor/github.com/sirupsen/logrus/logrus.go create mode 100644 vendor/github.com/sirupsen/logrus/logrus_test.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_bsd.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_linux.go create mode 100644 vendor/github.com/sirupsen/logrus/text_formatter.go create mode 100644 vendor/github.com/sirupsen/logrus/text_formatter_test.go create mode 100644 vendor/github.com/sirupsen/logrus/writer.go create mode 100644 vendor/golang.org/x/crypto/.gitattributes create mode 100644 vendor/golang.org/x/crypto/.gitignore create mode 100644 vendor/golang.org/x/crypto/AUTHORS create mode 100644 vendor/golang.org/x/crypto/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/crypto/CONTRIBUTORS create mode 100644 vendor/golang.org/x/crypto/LICENSE create mode 100644 vendor/golang.org/x/crypto/PATENTS create mode 100644 vendor/golang.org/x/crypto/README create mode 100644 vendor/golang.org/x/crypto/acme/acme.go create mode 100644 vendor/golang.org/x/crypto/acme/acme_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/autocert.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/autocert_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/cache.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/cache_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/renewal.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/renewal_test.go create mode 100644 vendor/golang.org/x/crypto/acme/jws.go create mode 100644 vendor/golang.org/x/crypto/acme/jws_test.go create mode 100644 vendor/golang.org/x/crypto/acme/types.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/base64.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/bcrypt.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/bcrypt_test.go create mode 100644 vendor/golang.org/x/crypto/blowfish/block.go create mode 100644 vendor/golang.org/x/crypto/blowfish/blowfish_test.go create mode 100644 vendor/golang.org/x/crypto/blowfish/cipher.go create mode 100644 vendor/golang.org/x/crypto/blowfish/const.go create mode 100644 vendor/golang.org/x/crypto/bn256/bn256.go create mode 100644 vendor/golang.org/x/crypto/bn256/bn256_test.go create mode 100644 vendor/golang.org/x/crypto/bn256/constants.go create mode 100644 vendor/golang.org/x/crypto/bn256/curve.go create mode 100644 vendor/golang.org/x/crypto/bn256/example_test.go create mode 100644 vendor/golang.org/x/crypto/bn256/gfp12.go create mode 100644 vendor/golang.org/x/crypto/bn256/gfp2.go create mode 100644 vendor/golang.org/x/crypto/bn256/gfp6.go create mode 100644 vendor/golang.org/x/crypto/bn256/optate.go create mode 100644 vendor/golang.org/x/crypto/bn256/twist.go create mode 100644 vendor/golang.org/x/crypto/cast5/cast5.go create mode 100644 vendor/golang.org/x/crypto/cast5/cast5_test.go create mode 100644 vendor/golang.org/x/crypto/codereview.cfg create mode 100644 vendor/golang.org/x/crypto/curve25519/const_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/cswap_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/curve25519.go create mode 100644 vendor/golang.org/x/crypto/curve25519/curve25519_test.go create mode 100644 vendor/golang.org/x/crypto/curve25519/doc.go create mode 100644 vendor/golang.org/x/crypto/curve25519/freeze_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go create mode 100644 vendor/golang.org/x/crypto/curve25519/mul_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/square_amd64.s create mode 100644 vendor/golang.org/x/crypto/ed25519/ed25519.go create mode 100644 vendor/golang.org/x/crypto/ed25519/ed25519_test.go create mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go create mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go create mode 100644 vendor/golang.org/x/crypto/ed25519/testdata/sign.input.gz create mode 100644 vendor/golang.org/x/crypto/hkdf/example_test.go create mode 100644 vendor/golang.org/x/crypto/hkdf/hkdf.go create mode 100644 vendor/golang.org/x/crypto/hkdf/hkdf_test.go create mode 100644 vendor/golang.org/x/crypto/md4/md4.go create mode 100644 vendor/golang.org/x/crypto/md4/md4_test.go create mode 100644 vendor/golang.org/x/crypto/md4/md4block.go create mode 100644 vendor/golang.org/x/crypto/nacl/box/box.go create mode 100644 vendor/golang.org/x/crypto/nacl/box/box_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/example_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/secretbox.go create mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/secretbox_test.go create mode 100644 vendor/golang.org/x/crypto/ocsp/ocsp.go create mode 100644 vendor/golang.org/x/crypto/ocsp/ocsp_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/armor/armor.go create mode 100644 vendor/golang.org/x/crypto/openpgp/armor/armor_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/armor/encode.go create mode 100644 vendor/golang.org/x/crypto/openpgp/canonical_text.go create mode 100644 vendor/golang.org/x/crypto/openpgp/canonical_text_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go create mode 100644 vendor/golang.org/x/crypto/openpgp/clearsign/clearsign_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go create mode 100644 vendor/golang.org/x/crypto/openpgp/elgamal/elgamal_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/errors/errors.go create mode 100644 vendor/golang.org/x/crypto/openpgp/keys.go create mode 100644 vendor/golang.org/x/crypto/openpgp/keys_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/compressed.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/compressed_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/config.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/literal.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/ocfb.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/ocfb_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/opaque.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/opaque_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/packet.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/packet_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/private_key.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/private_key_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key_v3_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/reader.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userattribute.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userid.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userid_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/read.go create mode 100644 vendor/golang.org/x/crypto/openpgp/read_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/s2k/s2k.go create mode 100644 vendor/golang.org/x/crypto/openpgp/s2k/s2k_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/write.go create mode 100644 vendor/golang.org/x/crypto/openpgp/write_test.go create mode 100644 vendor/golang.org/x/crypto/otr/libotr_test_helper.c create mode 100644 vendor/golang.org/x/crypto/otr/otr.go create mode 100644 vendor/golang.org/x/crypto/otr/otr_test.go create mode 100644 vendor/golang.org/x/crypto/otr/smp.go create mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go create mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/bmp-string.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/crypto.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/crypto_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/errors.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/mac.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/mac_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pbkdf.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pkcs12.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/safebags.go create mode 100644 vendor/golang.org/x/crypto/poly1305/poly1305.go create mode 100644 vendor/golang.org/x/crypto/poly1305/poly1305_amd64.s create mode 100644 vendor/golang.org/x/crypto/poly1305/poly1305_arm.s create mode 100644 vendor/golang.org/x/crypto/poly1305/poly1305_test.go create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_amd64.go create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_arm.go create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_ref.go create mode 100644 vendor/golang.org/x/crypto/ripemd160/ripemd160.go create mode 100644 vendor/golang.org/x/crypto/ripemd160/ripemd160_test.go create mode 100644 vendor/golang.org/x/crypto/ripemd160/ripemd160block.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa2020_amd64.s create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa_test.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa20.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa20_test.go create mode 100644 vendor/golang.org/x/crypto/scrypt/scrypt.go create mode 100644 vendor/golang.org/x/crypto/scrypt/scrypt_test.go create mode 100644 vendor/golang.org/x/crypto/sha3/doc.go create mode 100644 vendor/golang.org/x/crypto/sha3/hashes.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.s create mode 100644 vendor/golang.org/x/crypto/sha3/register.go create mode 100644 vendor/golang.org/x/crypto/sha3/sha3.go create mode 100644 vendor/golang.org/x/crypto/sha3/sha3_test.go create mode 100644 vendor/golang.org/x/crypto/sha3/shake.go create mode 100644 vendor/golang.org/x/crypto/sha3/testdata/keccakKats.json.deflate create mode 100644 vendor/golang.org/x/crypto/sha3/xor.go create mode 100644 vendor/golang.org/x/crypto/sha3/xor_generic.go create mode 100644 vendor/golang.org/x/crypto/sha3/xor_unaligned.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/client.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/client_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/example_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/forward.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/keyring.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/keyring_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/server.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/server_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/testdata_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/benchmark_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/buffer.go create mode 100644 vendor/golang.org/x/crypto/ssh/buffer_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/certs.go create mode 100644 vendor/golang.org/x/crypto/ssh/certs_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/channel.go create mode 100644 vendor/golang.org/x/crypto/ssh/cipher.go create mode 100644 vendor/golang.org/x/crypto/ssh/cipher_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/client.go create mode 100644 vendor/golang.org/x/crypto/ssh/client_auth.go create mode 100644 vendor/golang.org/x/crypto/ssh/client_auth_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/client_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/common.go create mode 100644 vendor/golang.org/x/crypto/ssh/connection.go create mode 100644 vendor/golang.org/x/crypto/ssh/doc.go create mode 100644 vendor/golang.org/x/crypto/ssh/example_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/handshake.go create mode 100644 vendor/golang.org/x/crypto/ssh/handshake_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/kex.go create mode 100644 vendor/golang.org/x/crypto/ssh/kex_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/keys.go create mode 100644 vendor/golang.org/x/crypto/ssh/keys_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/mac.go create mode 100644 vendor/golang.org/x/crypto/ssh/mempipe_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/messages.go create mode 100644 vendor/golang.org/x/crypto/ssh/messages_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/mux.go create mode 100644 vendor/golang.org/x/crypto/ssh/mux_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/server.go create mode 100644 vendor/golang.org/x/crypto/ssh/session.go create mode 100644 vendor/golang.org/x/crypto/ssh/session_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/tcpip.go create mode 100644 vendor/golang.org/x/crypto/ssh/tcpip_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/terminal.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_linux.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_windows.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/agent_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/cert_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/doc.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/forward_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/session_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/tcpip_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/test_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/testdata_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/testdata/doc.go create mode 100644 vendor/golang.org/x/crypto/ssh/testdata/keys.go create mode 100644 vendor/golang.org/x/crypto/ssh/testdata_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/transport.go create mode 100644 vendor/golang.org/x/crypto/ssh/transport_test.go create mode 100644 vendor/golang.org/x/crypto/tea/cipher.go create mode 100644 vendor/golang.org/x/crypto/tea/tea_test.go create mode 100644 vendor/golang.org/x/crypto/twofish/twofish.go create mode 100644 vendor/golang.org/x/crypto/twofish/twofish_test.go create mode 100644 vendor/golang.org/x/crypto/xtea/block.go create mode 100644 vendor/golang.org/x/crypto/xtea/cipher.go create mode 100644 vendor/golang.org/x/crypto/xtea/xtea_test.go create mode 100644 vendor/golang.org/x/crypto/xts/xts.go create mode 100644 vendor/golang.org/x/crypto/xts/xts_test.go create mode 100644 vendor/golang.org/x/sys/.gitattributes create mode 100644 vendor/golang.org/x/sys/.gitignore create mode 100644 vendor/golang.org/x/sys/AUTHORS create mode 100644 vendor/golang.org/x/sys/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/sys/CONTRIBUTORS create mode 100644 vendor/golang.org/x/sys/LICENSE create mode 100644 vendor/golang.org/x/sys/PATENTS create mode 100644 vendor/golang.org/x/sys/README create mode 100644 vendor/golang.org/x/sys/codereview.cfg create mode 100644 vendor/golang.org/x/sys/plan9/asm.s create mode 100644 vendor/golang.org/x/sys/plan9/asm_plan9_386.s create mode 100644 vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s create mode 100644 vendor/golang.org/x/sys/plan9/const_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/dir_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/env_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/env_unset.go create mode 100644 vendor/golang.org/x/sys/plan9/errors_plan9.go create mode 100755 vendor/golang.org/x/sys/plan9/mkall.sh create mode 100755 vendor/golang.org/x/sys/plan9/mkerrors.sh create mode 100755 vendor/golang.org/x/sys/plan9/mksyscall.pl create mode 100755 vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh create mode 100644 vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/pwd_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/race.go create mode 100644 vendor/golang.org/x/sys/plan9/race0.go create mode 100644 vendor/golang.org/x/sys/plan9/str.go create mode 100644 vendor/golang.org/x/sys/plan9/syscall.go create mode 100644 vendor/golang.org/x/sys/plan9/syscall_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/syscall_test.go create mode 100644 vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go create mode 100644 vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go create mode 100644 vendor/golang.org/x/sys/plan9/zsysnum_plan9.go create mode 100644 vendor/golang.org/x/sys/unix/.gitignore create mode 100644 vendor/golang.org/x/sys/unix/README.md create mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_s390x.s create mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/bluetooth_linux.go create mode 100644 vendor/golang.org/x/sys/unix/cap_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/constants.go create mode 100644 vendor/golang.org/x/sys/unix/creds_test.go create mode 100644 vendor/golang.org/x/sys/unix/dirent.go create mode 100644 vendor/golang.org/x/sys/unix/endian_big.go create mode 100644 vendor/golang.org/x/sys/unix/endian_little.go create mode 100644 vendor/golang.org/x/sys/unix/env_unix.go create mode 100644 vendor/golang.org/x/sys/unix/env_unset.go create mode 100644 vendor/golang.org/x/sys/unix/export_test.go create mode 100644 vendor/golang.org/x/sys/unix/file_unix.go create mode 100644 vendor/golang.org/x/sys/unix/flock.go create mode 100644 vendor/golang.org/x/sys/unix/flock_linux_32bit.go create mode 100644 vendor/golang.org/x/sys/unix/gccgo.go create mode 100644 vendor/golang.org/x/sys/unix/gccgo_c.c create mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/linux/Dockerfile create mode 100644 vendor/golang.org/x/sys/unix/linux/mkall.go create mode 100755 vendor/golang.org/x/sys/unix/linux/mksysnum.pl create mode 100644 vendor/golang.org/x/sys/unix/linux/types.go create mode 100755 vendor/golang.org/x/sys/unix/mkall.sh create mode 100755 vendor/golang.org/x/sys/unix/mkerrors.sh create mode 100644 vendor/golang.org/x/sys/unix/mkpost.go create mode 100755 vendor/golang.org/x/sys/unix/mksyscall.pl create mode 100755 vendor/golang.org/x/sys/unix/mksyscall_solaris.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_darwin.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl create mode 100644 vendor/golang.org/x/sys/unix/mmap_unix_test.go create mode 100644 vendor/golang.org/x/sys/unix/openbsd_pledge.go create mode 100644 vendor/golang.org/x/sys/unix/openbsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/race.go create mode 100644 vendor/golang.org/x/sys/unix/race0.go create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_linux.go create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix.go create mode 100644 vendor/golang.org/x/sys/unix/str.go create mode 100644 vendor/golang.org/x/sys/unix/syscall.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_no_getwd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_gc.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_test.go create mode 100644 vendor/golang.org/x/sys/unix/types_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/types_dragonfly.go create mode 100644 vendor/golang.org/x/sys/unix/types_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/types_netbsd.go create mode 100644 vendor/golang.org/x/sys/unix/types_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/types_solaris.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/windows/asm_windows_386.s create mode 100644 vendor/golang.org/x/sys/windows/asm_windows_amd64.s create mode 100644 vendor/golang.org/x/sys/windows/dll_windows.go create mode 100644 vendor/golang.org/x/sys/windows/env_unset.go create mode 100644 vendor/golang.org/x/sys/windows/env_windows.go create mode 100644 vendor/golang.org/x/sys/windows/eventlog.go create mode 100644 vendor/golang.org/x/sys/windows/exec_windows.go create mode 100644 vendor/golang.org/x/sys/windows/memory_windows.go create mode 100644 vendor/golang.org/x/sys/windows/mksyscall.go create mode 100644 vendor/golang.org/x/sys/windows/race.go create mode 100644 vendor/golang.org/x/sys/windows/race0.go create mode 100644 vendor/golang.org/x/sys/windows/registry/export_test.go create mode 100644 vendor/golang.org/x/sys/windows/registry/key.go create mode 100644 vendor/golang.org/x/sys/windows/registry/mksyscall.go create mode 100644 vendor/golang.org/x/sys/windows/registry/registry_test.go create mode 100644 vendor/golang.org/x/sys/windows/registry/syscall.go create mode 100644 vendor/golang.org/x/sys/windows/registry/value.go create mode 100644 vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go create mode 100644 vendor/golang.org/x/sys/windows/security_windows.go create mode 100644 vendor/golang.org/x/sys/windows/service.go create mode 100644 vendor/golang.org/x/sys/windows/str.go create mode 100644 vendor/golang.org/x/sys/windows/svc/debug/log.go create mode 100644 vendor/golang.org/x/sys/windows/svc/debug/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/event.go create mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/install.go create mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/log.go create mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/beep.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/install.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/main.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/manage.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/go12.c create mode 100644 vendor/golang.org/x/sys/windows/svc/go12.go create mode 100644 vendor/golang.org/x/sys/windows/svc/go13.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/config.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/mgr.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/security.go create mode 100644 vendor/golang.org/x/sys/windows/svc/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/svc_test.go create mode 100644 vendor/golang.org/x/sys/windows/svc/sys_386.s create mode 100644 vendor/golang.org/x/sys/windows/svc/sys_amd64.s create mode 100644 vendor/golang.org/x/sys/windows/syscall.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_test.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_windows.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_windows_test.go create mode 100644 vendor/golang.org/x/sys/windows/zsyscall_windows.go create mode 100644 vendor/golang.org/x/sys/windows/ztypes_windows.go create mode 100644 vendor/golang.org/x/sys/windows/ztypes_windows_386.go create mode 100644 vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go create mode 100644 vendor/gopkg.in/fsnotify.v1/.gitignore create mode 100644 vendor/gopkg.in/fsnotify.v1/.travis.yml create mode 100644 vendor/gopkg.in/fsnotify.v1/AUTHORS create mode 100644 vendor/gopkg.in/fsnotify.v1/CHANGELOG.md create mode 100644 vendor/gopkg.in/fsnotify.v1/CONTRIBUTING.md create mode 100644 vendor/gopkg.in/fsnotify.v1/LICENSE create mode 100644 vendor/gopkg.in/fsnotify.v1/README.md create mode 100644 vendor/gopkg.in/fsnotify.v1/example_test.go create mode 100644 vendor/gopkg.in/fsnotify.v1/fsnotify.go create mode 100644 vendor/gopkg.in/fsnotify.v1/inotify.go create mode 100644 vendor/gopkg.in/fsnotify.v1/inotify_poller.go create mode 100644 vendor/gopkg.in/fsnotify.v1/inotify_poller_test.go create mode 100644 vendor/gopkg.in/fsnotify.v1/inotify_test.go create mode 100644 vendor/gopkg.in/fsnotify.v1/integration_test.go create mode 100644 vendor/gopkg.in/fsnotify.v1/kqueue.go create mode 100644 vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go create mode 100644 vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go create mode 100644 vendor/gopkg.in/fsnotify.v1/windows.go create mode 100644 vendor/gopkg.in/tomb.v1/LICENSE create mode 100644 vendor/gopkg.in/tomb.v1/README.md create mode 100644 vendor/gopkg.in/tomb.v1/tomb.go create mode 100644 vendor/gopkg.in/tomb.v1/tomb_test.go diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..8a5bdc2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +charts +cmd +downloads +pkg +test +vendor diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dba4816 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +test/docker/coverage +test/docker/vendor +test/kubernetes/vendor +build +coverage +downloads diff --git a/CLA.md b/CLA.md new file mode 100644 index 0000000..72be79a --- /dev/null +++ b/CLA.md @@ -0,0 +1,32 @@ +IBM Contributor License Agreement +================================= + +Version 1.0.0 January 14, 2014 + +In order for You (as defined below) to make intellectual property Contributions (as defined below) now or in the future to IBM GitHub repositories, +You must agree to this Contributor License Agreement ("CLA"). + +Please read this CLA carefully before accepting its terms. By accepting the CLA, You are agreeing to be bound by its terms. +If You submit a Pull Request against an IBM repository on GitHub You must include in the Pull Request a statement of Your acceptance of this CLA. + +As used in this CLA: +(i) "You" (or "Your") shall mean the entity that is making this Agreement with IBM; +(ii)"Contribution" shall mean any original work of authorship, including any modifications or additions to an existing work, that is submitted by You to IBM for inclusion in, +or documentation of, any of the IBM GitHub repositories; +(iii) "Submit" (or "Submitted") means any form of communication sent to IBM (e.g. the content You post in a GitHub Issue or submit as part of a GitHub Pull Request). + +This agreement applies to all Contributions You Submit. + +This CLA, and the license(s) associated with the particular IBM GitHub repositories You are contributing to, provides a license to Your Contributions to IBM and downstream consumers, +but You still own Your Contributions, and except for the licenses provided for in this CLA, You reserve all right, title and interest in Your Contributions. + +IBM requires that each Contribution You Submit now or in the future comply with the following four commitments. + +1) You will only Submit Contributions where You have authored 100% of the content. +2) You will only Submit Contributions to which You have the necessary rights. This means that if You are employed You have received the necessary permissions from Your employer to make the +Contributions. +3) Whatever content You Contribute will be provided under the license(s) associated with the particular IBM GitHub repository You are contributing to. +4) You understand and agree that IBM GitHub repositories and Your contributions are public, and that a record of the contribution (including all personal information You submit with it) +is maintained indefinitely and may be redistributed consistent with the license(s) involved. +You will promptly notify the Eclipse Foundation if You become aware of any facts or circumstances that would make these commitments inaccurate in any way. +To do so, please create an Issue in the appropriate GitHub repository. diff --git a/Dockerfile-devserver b/Dockerfile-devserver new file mode 100644 index 0000000..b9bbd23 --- /dev/null +++ b/Dockerfile-devserver @@ -0,0 +1,49 @@ +# © Copyright IBM Corporation 2015, 2017 +# +# 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. + +FROM ubuntu:16.04 + +LABEL "ProductID"="4486e8c4cc9146fd9b3ce1f14a2dfc5b" \ + "ProductName"="IBM MQ Advanced for Developers" \ + "ProductVersion"="9.0.3" + +# The URL to download the MQ installer from in tar.gz format +# This assumes an archive containing the MQ Debian (.deb) install packages +ARG MQ_URL=https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev903_ubuntu_x86-64.tar.gz + +# The MQ packages to install +ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-msg-.* ibmmq-samples ibmmq-ams" + +COPY install-mq.sh /usr/local/bin/ +RUN chmod u+x /usr/local/bin/install-mq.sh \ + && install-mq.sh + +COPY build/runmqserver /usr/local/bin/ +COPY build/chkmq* /usr/local/bin/ +COPY NOTICES.txt /opt/mqm/licenses/notices-container.txt + +# MQ default developer config +COPY dev/mq-dev-config /etc/mqm/mq-dev-config +COPY dev/mq-dev-config.sh /usr/local/bin/ +COPY dev/admin.json /etc/mqm/ + +RUN chmod +x /usr/local/bin/runmqserver \ + && chmod +x /usr/local/bin/chk* + +# Always use port 1414 +EXPOSE 1414 + +ENV LANG=en_US.UTF-8 AMQ_DIAGNOSTIC_MSG_SEVERITY=1 + +ENTRYPOINT ["runmqserver"] diff --git a/Dockerfile-server b/Dockerfile-server new file mode 100644 index 0000000..47895e3 --- /dev/null +++ b/Dockerfile-server @@ -0,0 +1,48 @@ +# © Copyright IBM Corporation 2015, 2017 +# +# 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. + +FROM ubuntu:16.04 + +ARG IBM_PRODUCT_ID +ARG IBM_PRODUCT_NAME +ARG IBM_PRODUCT_VERSION + +# The URL to download the MQ installer from in tar.gz format +# This assumes an archive containing the MQ Debian (.deb) install packages +ARG MQ_URL + +# The MQ packages to install +ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-msg-.* ibmmq-samples ibmmq-ams" + +LABEL "ProductID"=$IBM_PRODUCT_ID \ + "ProductName"=$IBM_PRODUCT_NAME \ + "ProductVersion"=$IBM_PRODUCT_VERSION + +COPY install-mq.sh /usr/local/bin/ +RUN chmod u+x /usr/local/bin/install-mq.sh \ + && install-mq.sh + +COPY build/runmqserver /usr/local/bin/ +COPY build/chkmq* /usr/local/bin/ +COPY NOTICES.txt /opt/mqm/licenses/notices-container.txt + +RUN chmod +x /usr/local/bin/runmqserver \ + && chmod +x /usr/local/bin/chkmq* + +# Always use port 1414 +EXPOSE 1414 + +ENV LANG=en_US.UTF-8 AMQ_DIAGNOSTIC_MSG_SEVERITY=1 + +ENTRYPOINT ["runmqserver"] diff --git a/Dockerfile-server.cover b/Dockerfile-server.cover new file mode 100644 index 0000000..6097fea --- /dev/null +++ b/Dockerfile-server.cover @@ -0,0 +1,22 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +FROM mqadvanced:latest-x86_64 + +# Copy in the version of the code instrumented for code coverage +COPY build/runmqserver.test /usr/local/bin/runmqserver.test +RUN chmod +x /usr/local/bin/runmqserver.test \ + && mkdir -p /var/coverage/ + +ENTRYPOINT ["runmqserver.test", "-test", "-test.coverprofile", "/var/coverage/coverage.cov"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7a4a3ea --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..aaf3632 --- /dev/null +++ b/Makefile @@ -0,0 +1,128 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +BUILD_SERVER_CONTAINER=build-server +export GOARCH=amd64 +# Don't set GOOS globally, so that tests can be run locally +DOCKER_TAG_ARCH=x86_64 + +.PHONY: default +default: build-devserver test + +# Build all components (except incubating ones) +.PHONY: all +all: build-devserver build-advancedserver + +# Build incubating components +.PHONY: incubating +incubating: build-explorer + +.PHONY: clean +clean: + rm -rf ./coverage + rm -rf ./build + rm -rf ./deps + +downloads/mqadv_dev903_ubuntu_x86-64.tar.gz: + mkdir -p downloads + cd build; curl -LO https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev903_ubuntu_x86-64.tar.gz + +.PHONY: downloads +downloads: downloads/mqadv_dev903_ubuntu_x86-64.tar.gz + +.PHONY: deps +deps: + glide install --strip-vendor + cd test/docker && dep ensure + cd test/kubernetes && dep ensure + +build/runmqserver: + mkdir -p build + cd build; GOOS=linux go build ../cmd/runmqserver/ + +build/chkmqready: + mkdir -p build + cd build; GOOS=linux go build ../cmd/chkmqready/ + +build/chkmqhealthy: + mkdir -p build + cd build; GOOS=linux go build ../cmd/chkmqhealthy/ + +.PHONY: build +build: build/runmqserver build/chkmqready build/chkmqhealthy + +.PHONY: build-cov +build-cov: + mkdir -p build + cd build; go test -c -covermode=count ../cmd/runmqserver + +.PHONY: test +test: build + cd pkg/name && go test + cd test/docker && go test + +define docker-build-mq + # Create a temporary network to use for the build + docker network create build + # Start a web server to host the MQ downloadable (tar.gz) file + docker run \ + --rm \ + --name $(BUILD_SERVER_CONTAINER) \ + --network build \ + --network-alias build \ + --volume "$(realpath ./downloads/)":/usr/share/nginx/html:ro \ + --detach \ + nginx:alpine + # Build the new image + docker build \ + --tag $1 \ + --file $2 \ + --network build \ + --build-arg MQ_URL=http://build:80/$3 \ + --build-arg IBM_PRODUCT_ID=$4 \ + --build-arg IBM_PRODUCT_NAME=$5 \ + --build-arg IBM_PRODUCT_VERSION=$6 \ + . + # Stop the web server (will also remove the container) + docker kill $(BUILD_SERVER_CONTAINER) + # Delete the temporary network + docker network rm build +endef + +.PHONY: build-advancedserver +build-advancedserver: build downloads/CNJR7ML.tar.gz + $(call docker-build-mq,mq-advancedserver:latest-$(DOCKER_TAG_ARCH),Dockerfile-server,CNJR7ML.tar.gz,"4486e8c4cc9146fd9b3ce1f14a2dfc5b","IBM MQ Advanced","9.0.3") + docker tag mq-advancedserver:latest-$(DOCKER_TAG_ARCH) mq-advancedserver:9.0.3-$(DOCKER_TAG_ARCH) + +.PHONY: build-devserver +build-devserver: build downloads/mqadv_dev903_ubuntu_x86-64.tar.gz + $(call docker-build-mq,mq-devserver:latest-$(DOCKER_TAG_ARCH),Dockerfile-server,mqadv_dev903_ubuntu_x86-64.tar.gz,"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)","9.0.3") + docker tag mq-devserver:latest-$(DOCKER_TAG_ARCH) mq-devserver:9.0.3-$(DOCKER_TAG_ARCH) + +# .PHONY: build-server +# build-server: build downloads/CNJR7ML.tar.gz +# $(call docker-build-mq,mq-server:latest-$(DOCKER_TAG_ARCH),Dockerfile-server,"79afd716d55b4f149a87bec52c9dc1aa","IBM MQ","9.0.3") +# docker tag mq-server:latest-$(DOCKER_TAG_ARCH) mq-server:9.0.3-$(DOCKER_TAG_ARCH) + +.PHONY: build-advancedserver-cover +build-advancedserver-cover: build-advanced-server build-cov + docker build -t mq-advancedserver:cover -f Dockerfile-server.cover . + +# .PHONY: build-web +# build-web: build downloads/CNJR7ML.tar.gz +# $(call docker-build-mq,mq-web:latest-$(DOCKER_TAG_ARCH),Dockerfile-mq-web) + +.PHONY: build-devserver +build-explorer: build downloads/mqadv_dev903_ubuntu_x86-64.tar.gz + $(call docker-build-mq,mq-explorer:latest-$(DOCKER_TAG_ARCH),incubating/mq-explorer/Dockerfile-mq-explorer,mqadv_dev903_ubuntu_x86-64.tar.gz,"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)","9.0.3") diff --git a/NOTICES.txt b/NOTICES.txt new file mode 100644 index 0000000..9acb7ff --- /dev/null +++ b/NOTICES.txt @@ -0,0 +1,100 @@ +=============================================================================== +THE FOLLOWING SECTIONS IDENTIFY VARIOUS COMPONENTS CONTAINED IN THE PROGRAM, AND SPECIFY CERTAIN NOTICES AND OTHER INFORMATION REGARDING THOSE COMPONENTS THAT IBM IS REQUIRED TO PROVIDE TO YOU. + +NOTWITHSTANDING ANY PROVISION CONTAINED IN ANY OF THE NOTICES AND OTHER INFORMATION SET FORTH BELOW, YOUR USE OF THESE PROGRAM COMPONENTS REMAINS SUBJECT TO THE TERMS AND CONDITIONS SET FORTH IN: + + (i) THE PROGRAM'S LICENSE INFORMATION DOCUMENT; AND +(ii) THE IBM LICENSE AGREEMENT SPECIFIED IN THAT LICENSE INFORMATION DOCUMENT. + +=============================================================================== + +============================================================================== +A. SUMMARY +=============================================================================== +Section B. below contains provisions relating to certain other components of the Program, as follows:- + +B.1 MIT license +Affected Components: +* github.com/hpcloud/tail + Copyright 2015 Hewlett Packard Enterprise Development LP + Copyright (c) 2014 ActiveState + +B.2 BSD 3-Clause license +Affected Components: +* golang.org/x/crypto + Copyright (c) 2009 The Go Authors. All rights reserved. +* golang.org/x/sys + Copyright (c) 2009 The Go Authors. All rights reserved. +* gopkg.in/fsnotify.v1 + Copyright (c) 2012 The Go Authors. All rights reserved. + Copyright (c) 2012 fsnotify Authors. All rights reserved. +* gopkg.in/tomb.v1 + Copyright (c) 2010-2011 - Gustavo Niemeyer . All rights reserved. + +=============================================================================== +END OF A. SUMMARY +=============================================================================== +========================================================================== +B. LICENSE FILES AND OTHER INFORMATION +========================================================================== +========================================================================== +B.1 MIT license +========================================================================== +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. +========================================================================== +END OF B.1 MIT license +========================================================================== + +========================================================================== +B.2 BSD 3-Clause license +========================================================================== +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================================================== +END OF B.2 BSD 3-Clause license +========================================================================== + +========================================================================== +END OF B. LICENSE FILES AND OTHER INFORMATION +========================================================================== + +=========================================================== +END OF NOTICES AND INFORMATION \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..52b2ceb --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +

+ +# Overview + +Run [IBM® MQ](http://www-03.ibm.com/software/products/en/ibm-mq) in a container. The supplied [Helm](https://helm.sh/) chart can be used to run the container on a [Kubernetes](https://kubernetes.io) cluster, such as [IBM Cloud private](https://www.ibm.com/cloud-computing/products/ibm-cloud-private/) or the [IBM Bluemix Container Service](https://www.ibm.com/cloud-computing/bluemix/containers). + +# Current status +This repository contains code under active development. **It is not yet ready for production use** + +# Build +After extracting the code from this repository, you can build an image with the latest version of MQ using the following command: + +## Building MQ Advanced +You can build an image for MQ Advanced, follow these steps: + +1. Clone this repository into the correct location in your [`GOPATH`](https://github.com/golang/go/wiki/GOPATH) +2. Create a directory called `downloads` under the cloned directory tree +3. Download the MQ Advanced for Ubuntu (debs) installer package file `CNJR7ML.tar.gz` into the `downloads` directory +4. Run `make build-advancedserver` + +# Usage +In order to use the image, it is necessary to accept the terms of the IBM MQ license. This is achieved by specifying the environment variable `LICENSE` equal to `accept` when running the image. You can also view the license terms by setting this variable to `view`. Failure to set the variable will result in the termination of the container with a usage statement. You can view the license in a different language by also setting the `LANG` environment variable. + + +## List of all Environment variables supported by this image + +* **LICENSE** - Set this to `accept` to agree to the MQ Advanced for Developers license. If you wish to see the license you can set this to `view`. +* **LANG** - Set this to the language you would like the license to be printed in. +* **MQ_QMGR_NAME** - Set this to the name you want your Queue Manager to be created with. +* **MQ_QMGR_CMDLEVEL** - Set this to the `CMDLEVEL` you wish your Queue Manager to be started with. + + +# Issues and contributions + +For issues relating specifically to the container image or Helm chart, please use the [GitHub issue tracker](https://github.com/ibm-messaging/mq-container/issues). If you do submit a Pull Request related to this Docker image, please indicate in the Pull Request that you accept and agree to be bound by the terms of the [IBM Contributor License Agreement](CLA.md). + + +# License + +The Dockerfiles and associated code and scripts are licensed under the [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html). +Licenses for the products installed within the images are as follows: + + - [IBM MQ Advanced for Developers](http://www14.software.ibm.com/cgi-bin/weblap/lap.pl?la_formnum=Z125-3301-14&li_formnum=L-APIG-AKHJY4) (International License Agreement for Non-Warranted Programs). This license may be viewed from an image using the `LICENSE=view` environment variable as described above or by following the link above. + - [IBM MQ Advanced](http://www14.software.ibm.com/cgi-bin/weblap/lap.pl?la_formnum=Z125-3301-14&li_formnum=L-APIG-AKHJJP) (International Program License Agreement). This license may be viewed from an image using the `LICENSE=view` environment variable as described above or by following the link above. + - License information for Ubuntu packages may be found in `/usr/share/doc/${package}/copyright` + +Note: The IBM MQ Advanced for Developers license does not permit further distribution and the terms restrict usage to a developer machine. + +# Copyright + +© Copyright IBM Corporation 2015, 2017 \ No newline at end of file diff --git a/charts/mq-advancedserver/Chart.yaml b/charts/mq-advancedserver/Chart.yaml new file mode 100644 index 0000000..8a08352 --- /dev/null +++ b/charts/mq-advancedserver/Chart.yaml @@ -0,0 +1,19 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +apiVersion: v1 +description: IBM MQ queue manager +name: mq-advancedserver +version: 1.0.0 +icon: https://developer.ibm.com/messaging/wp-content/uploads/sites/18/2017/07/IBM-MQ-Square-200.png diff --git a/charts/mq-advancedserver/LICENSE b/charts/mq-advancedserver/LICENSE new file mode 100644 index 0000000..465678f --- /dev/null +++ b/charts/mq-advancedserver/LICENSE @@ -0,0 +1,2038 @@ +NOTICE + +This document includes License Information documents below for multiple Programs. Each License Information document identifies the Program(s) to which it applies. Only those License Information documents for the Program(s) for which Licensee has acquired entitlements apply. + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name (Program Number): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +The following standard terms apply to Licensee's use of the Program. + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Supporting Programs + +The Program is licensed as a multi-product package and includes the Supporting Programs identified below. Licensee is authorized to install and use such Supporting Programs only to support Licensee's use of the Principal Program under this Agreement and within the limits of the Proofs of Entitlement for the Program (unless broader rights are provided elsewhere in this License Information document). The phrase "to support Licensee's use" would include only those uses that are necessary or otherwise directly related to a licensed use of the Principal Program or another Supporting Program. The Supporting Programs may not be used for any other purpose. Licensee is not authorized to transfer or remarket the Supporting Programs separate from the Principal Program. A Supporting Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Supporting Program. In the event of conflict, the terms in this License Information document supersede the Supporting Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Supporting Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Supporting Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Supporting Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Supporting Programs licensed with the Program: +IBM WebSphere Application Server Liberty V17.0 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name (Program Number): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Limited use right + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Specifications + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Supporting Programs + +The Program is licensed as a multi-product package and includes the Supporting Programs identified below. Licensee is authorized to install and use such Supporting Programs only to support Licensee's use of the Principal Program under this Agreement and within the limits of the Proofs of Entitlement for the Program (unless broader rights are provided elsewhere in this License Information document). The phrase "to support Licensee's use" would include only those uses that are necessary or otherwise directly related to a licensed use of the Principal Program or another Supporting Program. The Supporting Programs may not be used for any other purpose. Licensee is not authorized to transfer or remarket the Supporting Programs separate from the Principal Program. A Supporting Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Supporting Program. In the event of conflict, the terms in this License Information document supersede the Supporting Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Supporting Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Supporting Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Supporting Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Supporting Programs licensed with the Program: +IBM WebSphere Application Server Liberty V17.0 + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Redistributables + +If the Program includes components that are Redistributable, they will be identified in the REDIST file that accompanies the Program. In addition to the license rights granted in the Agreement, Licensee may distribute the Redistributables subject to the following terms: +1) Redistribution must be in object code form only and must conform to all directions, instruction and specifications in the Program's accompanying REDIST or documentation; +2) If the Program's accompanying documentation expressly allows Licensee to modify the Redistributables, such modification must conform to all directions, instruction and specifications in that documentation and these modifications, if any, must be treated as Redistributables; +3) Redistributables may be distributed only as part of Licensee's application that was developed using the Program ("Licensee's Application") and only to support Licensee's customers in connection with their use of Licensee's Application. Licensee's Application must constitute significant value add such that the Redistributables are not a substantial motivation for the acquisition by end users of Licensee's software product; +4) If the Redistributables include a Java Runtime Environment, Licensee must also include other non-Java Redistributables with Licensee's Application, unless the Application is designed to run only on general computer devices (for example, laptops, desktops and servers) and not on handheld or other pervasive devices (i.e., devices that contain a microprocessor but do not have computing as their primary purpose); +5) Licensee may not remove any copyright or notice files contained in the Redistributables; +6) Licensee must hold IBM, its suppliers or distributors harmless from and against any claim arising out of the use or distribution of Licensee's Application; +7) Licensee may not use the same path name as the original Redistributable files/modules; +8) Licensee may not use IBM's, its suppliers or distributors names or trademarks in connection with the marketing of Licensee's Application without IBM's or that supplier's or distributor's prior written consent; +9) IBM, its suppliers and distributors provide the Redistributables and related documentation without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE; +10) Licensee is responsible for all technical assistance for Licensee's Application and any modifications to the Redistributables; and +11) Licensee's license agreement with the end user of Licensee's Application must notify the end user that the Redistributables or their modifications may not be i) used for any purpose other than to enable Licensee's Application, ii) copied (except for backup purposes), iii) further distributed or transferred without Licensee's Application or iv) reverse assembled, reverse compiled, or otherwise translated except as specifically permitted by law and without the possibility of a contractual waiver. Furthermore, Licensee's license agreement must be at least as protective of IBM as the terms of this Agreement. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +For Source Components and Sample Materials listed in a Program's REDIST file, Licensee may redistribute modified versions of those Source Components or Sample Materials consistent with the terms of this license and any instructions in the REDIST file. + +The following units of measure may apply to Licensee's use of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +Virtual Processor Core + +Virtual Processor Core is a unit of measure by which the Program can be licensed. A Physical Server is a physical computer that is comprised of processing units, memory, and input/output capabilities and that executes requested procedures, commands, or applications for one or more users or client devices. Where racks, blade enclosures, or other similar equipment is being employed, each separable physical device (for example, a blade or a rack-mounted device) that has the required components is considered itself a separate Physical Server. A Virtual Server is either a virtual computer created by partitioning the resources available to a Physical Server or an unpartitioned Physical Server. A Processor Core (commonly called a processor or CPU) is a functional unit within a computing device that interprets and executes instructions. A Processor Core consists of at least an instruction control unit and one or more arithmetic or logic unit. A Virtual Processor Core is a Processor Core in an unpartitioned Physical Server, or a virtual core assigned to a Virtual Server. Licensee must obtain entitlement for each Virtual Processor Core made available to the Program. + +For each Physical Server, Licensee must have sufficient entitlements for the lesser of 1) the sum of all available Virtual Processor Cores on all Virtual Servers made available to the Program or 2) all available Processor Cores on the Physical Server. + +In addition to the above, the following terms apply to Licensee's use of the Program. + +Idle Standby configurations + +For the purposes of this section, an "Idle Standby" configuration is one where a copy of the Program is installed on a server which forms part of a high availability solution and is the server to which the Program will fail over in the event that the copy of the Program on the active server ceases to be usable. A server is only considered "idle" if, until a failover takes place, it is used exclusively for administrative actions that assist in failover scenarios. + +The Program may not be installed on an Idle Standby server except if appropriately licensed. + +If the Program is used in an Idle Standby configuration with the Multi-Instance Queue Manager feature, then a copy of the Program may reside for backup purposes on an Idle Standby server, and started, but must remain "idle" and not be used to carry out productive work of any kind unless the active server fails over on to the Idle Standby server, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +If the Program is used in an Idle Standby configuration with other High Availability systems, then a copy of the Program may reside for backup purposes on an Idle Standby server but not started (and therefore not be used to carry out productive work of any kind), but will be started automatically by the High Availability components in the event of the active server failing, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name (Program Number): +IBM MQ Advanced V9.0.3 (Evaluation) + +The following standard terms apply to Licensee's use of the Program. + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name (Program Number): +IBM MQ Advanced V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Limited use right + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Specifications + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +The following units of measure may apply to Licensee's use of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +Virtual Processor Core + +Virtual Processor Core is a unit of measure by which the Program can be licensed. A Physical Server is a physical computer that is comprised of processing units, memory, and input/output capabilities and that executes requested procedures, commands, or applications for one or more users or client devices. Where racks, blade enclosures, or other similar equipment is being employed, each separable physical device (for example, a blade or a rack-mounted device) that has the required components is considered itself a separate Physical Server. A Virtual Server is either a virtual computer created by partitioning the resources available to a Physical Server or an unpartitioned Physical Server. A Processor Core (commonly called a processor or CPU) is a functional unit within a computing device that interprets and executes instructions. A Processor Core consists of at least an instruction control unit and one or more arithmetic or logic unit. A Virtual Processor Core is a Processor Core in an unpartitioned Physical Server, or a virtual core assigned to a Virtual Server. Licensee must obtain entitlement for each Virtual Processor Core made available to the Program. + +For each Physical Server, Licensee must have sufficient entitlements for the lesser of 1) the sum of all available Virtual Processor Cores on all Virtual Servers made available to the Program or 2) all available Processor Cores on the Physical Server. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name (Program Number): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +The following standard terms apply to Licensee's use of the Program. + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ Idle Standby V9.0.3 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name (Program Number): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Limited use right + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Specifications + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ Idle Standby V9.0.3 + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +The following units of measure may apply to Licensee's use of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +In addition to the above, the following terms apply to Licensee's use of the Program. + +Idle Standby configurations + +For the purposes of this section, an "Idle Standby" configuration is one where a copy of the Program is installed on a server which forms part of a high availability solution and is the server to which the Program will fail over in the event that the copy of the Program on the active server ceases to be usable. A server is only considered "idle" if, until a failover takes place, it is used exclusively for administrative actions that assist in failover scenarios. + +The Program may not be installed on an Idle Standby server except if appropriately licensed. + +If the Program is used in an Idle Standby configuration with the Multi-Instance Queue Manager feature, then a copy of the Program may reside for backup purposes on an Idle Standby server, and started, but must remain "idle" and not be used to carry out productive work of any kind unless the active server fails over on to the Idle Standby server, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +If the Program is used in an Idle Standby configuration with other High Availability systems, then a copy of the Program may reside for backup purposes on an Idle Standby server but not started (and therefore not be used to carry out productive work of any kind), but will be started automatically by the High Availability components in the event of the active server failing, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name (Program Number): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +The following standard terms apply to Licensee's use of the Program. + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Developer Limitation + +If the Program is designated as for "Developers", the Program can only be deployed as part of Licensee's internal development and unit testing on a developer machine. A developer machine is a physical or virtual desktop environment, running a primary operating system and the Program, both of which are accessible and used by no more than one specified developer. Licensee is not authorized to use the Program for processing production workloads, simulating production workloads or testing scalability of any code, application or system. Licensee is not authorized to use any part of the Program for any other purposes without acquiring the appropriate production entitlements. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name (Program Number): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Limited use right + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Specifications + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Developer Limitation + +If the Program is designated as for "Developers", the Program can only be deployed as part of Licensee's internal development and unit testing on a developer machine. A developer machine is a physical or virtual desktop environment, running a primary operating system and the Program, both of which are accessible and used by no more than one specified developer. Licensee is not authorized to use the Program for processing production workloads, simulating production workloads or testing scalability of any code, application or system. Licensee is not authorized to use any part of the Program for any other purposes without acquiring the appropriate production entitlements. + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +The following units of measure may apply to Licensee's use of the Program. + +Install + +Install is a unit of measure by which the Program can be licensed. An Install is an installed copy of the Program on a physical or virtual disk made available to be executed on a computer. Licensee must obtain an entitlement for each Install of the Program. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name: IBM MQ Managed File Transfer Service V9.0.1 +Program Number: Evaluation + +Program Name: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Program Number: Evaluation + +Program Name: IBM MQ Managed File Transfer Agent V9.0.1 +Program Number: Evaluation + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name: IBM MQ Managed File Transfer Service V9.0.1 +Program Number: 5724-H72 + +Program Name: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Program Number: 5724-H72 + +Program Name: IBM MQ Managed File Transfer Agent V9.0.1 +Program Number: 5724-H72 + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Redistributables + +If the Program includes components that are Redistributable, they will be identified in the REDIST file that accompanies the Program. In addition to the license rights granted in the Agreement, Licensee may distribute the Redistributables subject to the following terms: +1) Redistribution must be in object code form only and must conform to all directions, instruction and specifications in the Program's accompanying REDIST or documentation; +2) If the Program's accompanying documentation expressly allows Licensee to modify the Redistributables, such modification must conform to all directions, instruction and specifications in that documentation and these modifications, if any, must be treated as Redistributables; +3) Redistributables may be distributed only as part of Licensee's application that was developed using the Program ("Licensee's Application") and only to support Licensee's customers in connection with their use of Licensee's Application. Licensee's Application must constitute significant value add such that the Redistributables are not a substantial motivation for the acquisition by end users of Licensee's software product; +4) If the Redistributables include a Java Runtime Environment, Licensee must also include other non-Java Redistributables with Licensee's Application, unless the Application is designed to run only on general computer devices (for example, laptops, desktops and servers) and not on handheld or other pervasive devices (i.e., devices that contain a microprocessor but do not have computing as their primary purpose); +5) Licensee may not remove any copyright or notice files contained in the Redistributables; +6) Licensee must hold IBM, its suppliers or distributors harmless from and against any claim arising out of the use or distribution of Licensee's Application; +7) Licensee may not use the same path name as the original Redistributable files/modules; +8) Licensee may not use IBM's, its suppliers or distributors names or trademarks in connection with the marketing of Licensee's Application without IBM's or that supplier's or distributor's prior written consent; +9) IBM, its suppliers and distributors provide the Redistributables and related documentation without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE; +10) Licensee is responsible for all technical assistance for Licensee's Application and any modifications to the Redistributables; and +11) Licensee's license agreement with the end user of Licensee's Application must notify the end user that the Redistributables or their modifications may not be i) used for any purpose other than to enable Licensee's Application, ii) copied (except for backup purposes), iii) further distributed or transferred without Licensee's Application or iv) reverse assembled, reverse compiled, or otherwise translated except as specifically permitted by law and without the possibility of a contractual waiver. Furthermore, Licensee's license agreement must be at least as protective of IBM as the terms of this Agreement. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +For Source Components and Sample Materials listed in a Program's REDIST file, Licensee may redistribute modified versions of those Source Components or Sample Materials consistent with the terms of this license and any instructions in the REDIST file. + +Install + +Install is a unit of measure by which the Program can be licensed. An Install is an installed copy of the Program on a physical or virtual disk made available to be executed on a computer. Licensee must obtain an entitlement for each Install of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +Program-unique Terms + +Idle Standby configurations + +For the purposes of this section, an "Idle Standby" configuration is one where a copy of the Program is installed on a server which forms part of a high availability solution and is the server to which the Program will fail over in the event that the copy of the Program on the active server ceases to be usable. A server is only considered "idle" if, until a failover takes place, it is used exclusively for administrative actions that assist in failover scenarios. + +The Program may not be installed on an Idle Standby server except if appropriately licensed. + +If the Program is used in an Idle Standby configuration with the Multi-Instance Queue Manager feature, then a copy of the Program may reside for backup purposes on an Idle Standby server, and started, but must remain "idle" and not be used to carry out productive work of any kind unless the active server fails over on to the Idle Standby server, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +If the Program is used in an Idle Standby configuration with other High Availability systems, then a copy of the Program may reside for backup purposes on an Idle Standby server but not started (and therefore not be used to carry out productive work of any kind), but will be started automatically by the High Availability components in the event of the active server failing, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name: IBM MQ Advanced Message Security V9.0.1 +Program Number: Evaluation + +Program Name: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Program Number: Evaluation + +Program Name: IBM MQ Telemetry V9.0.1 +Program Number: Evaluation + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name: IBM MQ Advanced Message Security V9.0.1 +Program Number: 5724-H72 + +Program Name: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Program Number: 5724-H72 + +Program Name: IBM MQ Telemetry V9.0.1 +Program Number: 5724-H72 + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +Install + +Install is a unit of measure by which the Program can be licensed. An Install is an installed copy of the Program on a physical or virtual disk made available to be executed on a computer. Licensee must obtain an entitlement for each Install of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +Program-unique Terms + +Idle Standby configurations + +For the purposes of this section, an "Idle Standby" configuration is one where a copy of the Program is installed on a server which forms part of a high availability solution and is the server to which the Program will fail over in the event that the copy of the Program on the active server ceases to be usable. A server is only considered "idle" if, until a failover takes place, it is used exclusively for administrative actions that assist in failover scenarios. + +The Program may not be installed on an Idle Standby server except if appropriately licensed. + +If the Program is used in an Idle Standby configuration with the Multi-Instance Queue Manager feature, then a copy of the Program may reside for backup purposes on an Idle Standby server, and started, but must remain "idle" and not be used to carry out productive work of any kind unless the active server fails over on to the Idle Standby server, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +If the Program is used in an Idle Standby configuration with other High Availability systems, then a copy of the Program may reside for backup purposes on an Idle Standby server but not started (and therefore not be used to carry out productive work of any kind), but will be started automatically by the High Availability components in the event of the active server failing, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + +International License Agreement for Evaluation of Programs + +Part 1 - General Terms + +BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, CLICKING ON AN "ACCEPT" BUTTON, OR OTHERWISE USING THE PROGRAM, LICENSEE AGREES TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCEPTING THESE TERMS ON BEHALF OF LICENSEE, YOU REPRESENT AND WARRANT THAT YOU HAVE FULL AUTHORITY TO BIND LICENSEE TO THESE TERMS. IF YOU DO NOT AGREE TO THESE TERMS, + +* DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, CLICK ON AN "ACCEPT" BUTTON, OR USE THE PROGRAM; AND + +* PROMPTLY RETURN THE UNUSED MEDIA AND DOCUMENTATION TO THE PARTY FROM WHOM IT WAS OBTAINED. IF THE PROGRAM WAS DOWNLOADED, DESTROY ALL COPIES OF THE PROGRAM. + +1. Definitions + +"Authorized Use" - the specified level at which Licensee is authorized to execute or run the Program. That level may be measured by number of users, millions of service units ("MSUs"), Processor Value Units ("PVUs"), or other level of use specified by IBM. + +"IBM" - International Business Machines Corporation or one of its subsidiaries. + +"License Information" ("LI") - a document that provides information and any additional terms specific to a Program. The Program's LI can be found in the Program's directory, by the use of a system command, or as a booklet included with the Program. + +"Program" - the following, including the original and all whole or partial copies: 1) machine-readable instructions and data, 2) components, files, and modules, 3) audio-visual content (such as images, text, recordings, or pictures), and 4) related licensed materials (such as keys and documentation). + +2. Agreement Structure + +This Agreement includes Part 1 - General Terms, Part 2 - Country-unique Terms (if any) and the LI and is the complete agreement between Licensee and IBM regarding the use of the Program. It replaces any prior oral or written communications between Licensee and IBM concerning Licensee's use of the Program. The terms of Part 2 may replace or modify those of Part 1. To the extent of any conflict, the LI prevails over both Parts. + +3. License Grant + +The Program is owned by IBM or an IBM supplier, and is copyrighted and licensed, not sold. + +IBM grants Licensee a limited, nonexclusive, nontransferable license to 1) download, install, and use the Program during the evaluation period up to the Authorized Use specified in the LI solely for internal evaluation, testing, or demonstration purposes on a trial basis; 2) make and install a reasonable number of copies to support such Authorized Use, and 3) make a backup copy, all provided that + +a. Licensee has lawfully obtained the Program and complies with the terms of this Agreement; + +b. the backup copy does not execute unless the backed-up Program cannot execute; + +c. Licensee reproduces all copyright notices and other legends of ownership on each copy, or partial copy, of the Program; + +d. Licensee maintains a record of all copies of the Program and ensures that anyone who uses the Program (accessed either locally or remotely) 1) does so only on Licensee's behalf and 2) complies with the terms of this Agreement; + +e. Licensee does not 1) use the Program for productive purposes or otherwise use, copy, modify, or distribute the Program except as expressly permitted in this Agreement; 2) reverse assemble, reverse compile, otherwise translate, or reverse engineer the Program, except as expressly permitted by law without the possibility of contractual waiver; 3) use any of the Program's components, files, modules, audio-visual content, or related licensed materials separately from that Program; 4) sublicense, rent, or lease the Program; or 5) use the Program for commercial application hosting; and + +f. if Licensee obtains this Program as a Supporting Program, Licensee uses this Program only to support the Principal Program and subject to any limitations in the license to the Principal Program, or, if Licensee obtains this Program as a Principal Program, Licensee uses all Supporting Programs only to support this Program, and subject to any limitations in this Agreement. For purposes of this Item "f," a "Supporting Program" is a Program that is part of another IBM Program ("Principal Program") and identified as a Supporting Program in the Principal Program's LI. (To obtain a separate license to a Supporting Program without these restrictions, Licensee should contact the party from whom Licensee obtained the Supporting Program.) + +This license applies to each copy of the Program that Licensee makes. + +3.1 Updates, Fixes, and Patches + +When Licensee receives an update, fix, or patch to a Program, Licensee accepts any additional or different terms that are applicable to such update, fix, or patch that are specified in its LI. If no additional or different terms are provided, then the update, fix, or patch is subject solely to this Agreement. If the Program is replaced by an update, Licensee agrees to promptly discontinue use of the replaced Program. + +3.2 Term and Termination + +The evaluation period begins on the date Licensee agrees to the terms of this Agreement and ends upon the earliest of 1) the end of the duration or the date specified by IBM in either the License Information or a transaction document or 2) the date on which the Program automatically disables itself. Licensee will destroy the Program and all copies made of it within ten days of the end of the evaluation period. If IBM specifies in the LI that Licensee may retain the Program, and Licensee elects to do so, then the Program will be subject to a different license agreement, which IBM will provide to Licensee. In addition, a charge may apply. + +IBM may terminate Licensee's license if Licensee fails to comply with the terms of this Agreement. If the license is terminated for any reason by either party, Licensee agrees to promptly discontinue use of and destroy all of Licensee's copies of the Program. Any terms of this Agreement that by their nature extend beyond termination of this Agreement remain in effect until fulfilled, and apply to both parties' respective successors and assignees. + +THE PROGRAM MAY CONTAIN A DISABLING DEVICE THAT WILL PREVENT IT FROM BEING USED AFTER THE EVALUATION PERIOD ENDS. LICENSEE AGREES NOT TO TAMPER WITH THE DISABLING DEVICE OR THE PROGRAM. LICENSEE SHOULD TAKE PRECAUTIONS TO AVOID ANY LOSS OF DATA THAT MIGHT RESULT WHEN THE PROGRAM CAN NO LONGER BE USED. + +4. Charges + +There is no charge for the use of the Program for the duration of the evaluation period. + +5. No Warranties + +SUBJECT TO ANY STATUTORY WARRANTIES THAT CANNOT BE EXCLUDED, IBM MAKES NO WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, REGARDING THE PROGRAM OR SUPPORT, IF ANY, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND TITLE, AND ANY WARRANTY OR CONDITION OF NON-INFRINGEMENT. + +SOME STATES OR JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF EXPRESS OR IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO LICENSEE. IN THAT EVENT, SUCH WARRANTIES ARE LIMITED IN DURATION TO THE MINIMUM PERIOD REQUIRED BY LAW. NO WARRANTIES APPLY AFTER THAT PERIOD. SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY LASTS, SO THE ABOVE LIMITATION MAY NOT APPLY TO LICENSEE. LICENSEE MAY HAVE OTHER RIGHTS THAT VARY FROM STATE TO STATE OR JURISDICTION TO JURISDICTION. + +THE DISCLAIMERS AND EXCLUSIONS IN THIS SECTION 5 ALSO APPLY TO ANY OF IBM'S PROGRAM DEVELOPERS AND SUPPLIERS. + +MANUFACTURERS, SUPPLIERS, OR PUBLISHERS OF NON-IBM PROGRAMS MAY PROVIDE THEIR OWN WARRANTIES. + +IBM DOES NOT PROVIDE SUPPORT OF ANY KIND, UNLESS IBM SPECIFIES OTHERWISE. IN SUCH EVENT, ANY SUPPORT PROVIDED BY IBM IS SUBJECT TO THE DISCLAIMERS AND EXCLUSIONS IN THIS SECTION 5. + +6. Licensee Data and Databases + +To assist Licensee in isolating the cause of a problem with the Program, IBM may request that Licensee 1) allow IBM to remotely access Licensee's system or 2) send Licensee information or system data to IBM. However, IBM is not obligated to provide such assistance unless IBM and Licensee enter a separate written agreement under which IBM agrees to provide to Licensee that type of support, which is beyond IBM's obligations in this Agreement. In any event, IBM uses information about errors and problems to improve its products and services, and assist with its provision of related support offerings. For these purposes, IBM may use IBM entities and subcontractors (including in one or more countries other than the one in which Licensee is located), and Licensee authorizes IBM to do so. + +Licensee remains responsible for 1) any data and the content of any database Licensee makes available to IBM, 2) the selection and implementation of procedures and controls regarding access, security, encryption, use, and transmission of data (including any personally-identifiable data), and 3) backup and recovery of any database and any stored data. Licensee will not send or provide IBM access to any personally-identifiable information, whether in data or any other form, and will be responsible for reasonable costs and other amounts that IBM may incur relating to any such information mistakenly provided to IBM or the loss or disclosure of such information by IBM, including those arising out of any third party claims. + +7. Limitation of Liability + +The limitations and exclusions in this Section 7 (Limitation of Liability) apply to the full extent they are not prohibited by applicable law without the possibility of contractual waiver. + +7.1 Items for Which IBM May Be Liable + +Circumstances may arise where, because of a default on IBM's part or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), IBM's entire liability for all claims in the aggregate arising from or related to each Program or otherwise arising under this Agreement will not exceed the amount of any 1) damages for bodily injury (including death) and damage to real property and tangible personal property and 2) other actual direct damages up to U.S. $10,000 (or equivalent in local currency). + +This limit also applies to any of IBM's Program developers and suppliers. It is the maximum for which IBM and its Program developers and suppliers are collectively responsible. + +7.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM, ITS PROGRAM DEVELOPERS OR SUPPLIERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: + +a. LOSS OF, OR DAMAGE TO, DATA; + +b. SPECIAL, INCIDENTAL, EXEMPLARY, OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; OR + +c. LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. + +8. Compliance Verification + +For purposes of this Section 8 (Compliance Verification), "Evaluation Program Terms" means 1) this Agreement and applicable amendments and transaction documents provided by IBM, and 2) IBM software policies that may be found at the IBM Software Policy website (www.ibm.com/softwarepolicies), including but not limited to those policies concerning backup, sub-capacity pricing, and migration. + +The rights and obligations set forth in this Section 8 remain in effect during the period the Program is licensed to Licensee, and for two years thereafter. + +8.1 Verification Process + +Licensee agrees to create, retain, and provide to IBM and its auditors accurate written records, system tool outputs, and other system information sufficient to provide auditable verification that Licensee's use of all Programs is in compliance with the Evaluation Program Terms, including, without limitation, all of IBM's applicable licensing and pricing qualification terms. Licensee is responsible for 1) ensuring that it does not exceed its Authorized Use, and 2) remaining in compliance with Evaluation Program Terms. + +Upon reasonable notice, IBM may verify Licensee's compliance with Evaluation Program Terms at all sites and for all environments in which Licensee uses (for any purpose) Programs subject to Evaluation Program Terms. Such verification will be conducted in a manner that minimizes disruption to Licensee's business, and may be conducted on Licensee's premises, during normal business hours. IBM may use an independent auditor to assist with such verification, provided IBM has a written confidentiality agreement in place with such auditor. + +8.2 Resolution + +IBM will notify Licensee in writing if any such verification indicates that Licensee has used any Program in excess of its Authorized Use or is otherwise not in compliance with the Evaluation Program Terms. Licensee agrees to promptly pay directly to IBM the charges that IBM specifies in an invoice for 1) any such excess use, 2) support for such excess use for the lesser of the duration of such excess use or two years, and 3) any additional charges and other liabilities determined as a result of such verification. + +9. Third Party Notices + +The Program may include third party code that IBM, not the third party, licenses to Licensee under this Agreement. Notices, if any, for the third party code ("Third Party Notices") are included for Licensee's information only. These notices can be found in the Program's NOTICES file(s). Information on how to obtain source code for certain third party code can be found in the Third Party Notices. If in the Third Party Notices IBM identifies third party code as "Modifiable Third Party Code," IBM authorizes Licensee to 1) modify the Modifiable Third Party Code and 2) reverse engineer the Program modules that directly interface with the Modifiable Third Party Code provided that it is only for the purpose of debugging Licensee's modifications to such third party code. IBM's service and support obligations, if any, apply only to the unmodified Program. + +10. General + +a. Nothing in this Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. + +b. If any provision of this Agreement is held to be invalid or unenforceable, the remaining provisions of this Agreement remain in full force and effect. + +c. Licensee is prohibited from exporting the Program. + +d. Licensee authorizes International Business Machines Corporation and its subsidiaries (and their successors and assigns, contractors and IBM Business Partners) to store and use Licensee's business contact information wherever they do business, in connection with IBM products and services, or in furtherance of IBM's business relationship with Licensee. + +e. Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. + +f. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation: 1) neither party will bring a legal action, regardless of form, for any claim arising out of or related to this Agreement more than two years after the cause of action arose; and 2) upon the expiration of such time limit, any such claim and all respective rights related to the claim lapse. + +g. Neither Licensee nor IBM is responsible for failure to fulfill any obligations due to causes beyond its control. + +h. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except as permitted in Subsection 7.1 (Items for Which IBM May Be Liable) above for bodily injury (including death) or damage to real or tangible personal property for which IBM is legally liable to that third party. + +i. In entering into this Agreement, neither party is relying on any representation not specified in this Agreement, including but not limited to any representation concerning: 1) the performance or function of the Program, other than as expressly warranted in Section 5 (No Warranties) above; 2) the experiences or recommendations of other parties; or 3) any results or savings that Licensee may achieve. + +j. IBM has signed agreements with certain organizations (called "IBM Business Partners") to promote, market, and support certain Programs. IBM Business Partners remain independent and separate from IBM. IBM is not responsible for the actions or statements of IBM Business Partners or obligations they have to Licensee. + +k. The license and intellectual property indemnification terms of Licensee's other agreements with IBM (such as the IBM Customer Agreement) do not apply to Program licenses granted under this Agreement. + +11. Geographic Scope and Governing Law + +11.1 Governing Law + +Both parties agree to the application of the laws of the country in which Licensee obtained the Program license to govern, interpret, and enforce all of Licensee's and IBM's respective rights, duties, and obligations arising from, or relating in any manner to, the subject matter of this Agreement, without regard to conflict of law principles. + +The United Nations Convention on Contracts for the International Sale of Goods does not apply. + +11.2 Jurisdiction + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license. + +Part 2 - Country-unique Terms + +For licenses granted in the countries specified below, the following terms replace or modify the referenced terms in Part 1. All terms in Part 1 that are not changed by these amendments remain unchanged and in effect. This Part 2 is organized as follows: + +* Multiple country amendments to Part 1, Section 11 (Governing Law and Jurisdiction); + +* Americas country amendments to other Agreement terms; + +* Asia Pacific country amendments to other Agreement terms; and + +* Europe, Middle East, and Africa country amendments to other Agreement terms. + +Multiple country amendments to Part 1, Section 11 (Governing Law and Jurisdiction) + +11.1 Governing Law + +The phrase "the laws of the country in which Licensee obtained the Program license" in the first paragraph of 11.1 Governing Law is replaced by the following phrases in the countries below: + +AMERICAS + +(1) In Canada: the laws in the Province of Ontario; + +(2) in Mexico: the federal laws of the Republic of Mexico; + +(3) in the United States, Anguilla, Antigua/Barbuda, Aruba, British Virgin Islands, Cayman Islands, Dominica, Grenada, Guyana, Saint Kitts and Nevis, Saint Lucia, Saint Maarten, and Saint Vincent and the Grenadines: the laws of the State of New York, United States; + +(4) in Venezuela: the laws of the Bolivarian Republic of Venezuela; + +ASIA PACIFIC + +(5) in Cambodia and Laos: the laws of the State of New York, United States; + +(6) in Australia: the laws of the State or Territory in which the transaction is performed; + +(7) in Hong Kong SAR and Macau SAR: the laws of Hong Kong Special Administrative Region ("SAR"); + +(8) in Taiwan: the laws of Taiwan; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: the laws of Austria; + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the laws of France; + +(11) in Estonia, Latvia, and Lithuania: the laws of Finland; + +(12) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the laws of England; and + +(13) in South Africa, Namibia, Lesotho, and Swaziland: the laws of the Republic of South Africa. + +11.2 Jurisdiction + +The following paragraph pertains to jurisdiction and replaces Subsection 11.2 (Jurisdiction) as it applies for those countries identified below: + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license except that in the countries identified below all disputes arising out of or related to this Agreement, including summary proceedings, will be brought before and subject to the exclusive jurisdiction of the following courts of competent jurisdiction: + +AMERICAS + +(1) In Argentina: the Ordinary Commercial Court of the city of Buenos Aires; + +(2) in Brazil: the court of Rio de Janeiro, RJ; + +(3) in Chile: the Civil Courts of Justice of Santiago; + +(4) in Ecuador: the civil judges of Quito for executory or summary proceedings (as applicable); + +(5) in Mexico: the courts located in Mexico City, Federal District; + +(6) in Peru: the judges and tribunals of the judicial district of Lima, Cercado; + +(7) in Uruguay: the courts of the city of Montevideo; + +(8) in Venezuela: the courts of the metropolitan area of the city of Caracas; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Austria: the court of law in Vienna, Austria (Inner-City); + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, France, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Monaco, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the Commercial Court of Paris; + +(11) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the English courts; + +(12) in South Africa, Namibia, Lesotho, and Swaziland: the High Court in Johannesburg; + +(13) in Greece: the competent court of Athens; + +(14) in Israel: the courts of Tel Aviv-Jaffa; + +(15) in Italy: the courts of Milan; + +(16) in Portugal: the courts of Lisbon; + +(17) in Spain: the courts of Madrid; and + +(18) in Turkey: the Istanbul Central Courts and Execution Directorates of Istanbul, the Republic of Turkey. + +11.3 Arbitration + +The following paragraph is added as a new Subsection 11.3 (Arbitration) as it applies for those countries identified below. The provisions of this Subsection 11.3 prevail over those of Subsection 11.2 (Jurisdiction) to the extent permitted by the applicable governing law and rules of procedure: + +ASIA PACIFIC + +(1) In Cambodia, India, Laos, Philippines, and Vietnam: + +Disputes arising out of or in connection with this Agreement will be finally settled by arbitration which will be held in Singapore in accordance with the Arbitration Rules of Singapore International Arbitration Center ("SIAC Rules") then in effect. The arbitration award will be final and binding for the parties without appeal and will be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators will be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties will appoint a third arbitrator who will act as chairman of the proceedings. Vacancies in the post of chairman will be filled by the president of the SIAC. Other vacancies will be filled by the respective nominating party. Proceedings will continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator will be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings will be conducted, including all documents presented in such proceedings, in the English language. The English language version of this Agreement prevails over any other language version. + +(2) In the People's Republic of China: + +In case no settlement can be reached, the disputes will be submitted to China International Economic and Trade Arbitration Commission for arbitration according to the then effective rules of the said Arbitration Commission. The arbitration will take place in Beijing and be conducted in Chinese. The arbitration award will be final and binding on both parties. During the course of arbitration, this agreement will continue to be performed except for the part which the parties are disputing and which is undergoing arbitration. + +(3) In Indonesia: + +Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation, i) neither party will bring a legal action, regardless of form, arising out of or related to this Agreement or any transaction under it more than two years after the cause of action arose; and ii) after such time limit, any legal action arising out of this Agreement or any transaction under it and all respective rights related to any such action lapse. + +Disputes arising out of or in connection with this Agreement shall be finally settled by arbitration that shall be held in Jakarta, Indonesia in accordance with the rules of Board of the Indonesian National Board of Arbitration (Badan Arbitrase Nasional Indonesia or "BANI") then in effect. The arbitration award shall be final and binding for the parties without appeal and shall be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators shall be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties shall appoint a third arbitrator who shall act as chairman of the proceedings. Vacancies in the post of chairman shall be filled by the chairman of the BANI. Other vacancies shall be filled by the respective nominating party. Proceedings shall continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator shall be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings shall be conducted, including all documents presented in such proceedings, in the English and/or Indonesian language. + +EUROPE, MIDDLE EAST, AND AFRICA + +(4) In Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: + +All disputes arising out of this Agreement or related to its violation, termination or nullity will be finally settled under the Rules of Arbitration and Conciliation of the International Arbitral Center of the Federal Economic Chamber in Vienna (Vienna Rules) by three arbitrators appointed in accordance with these rules. The arbitration will be held in Vienna, Austria, and the official language of the proceedings will be English. The decision of the arbitrators will be final and binding upon both parties. Therefore, pursuant to paragraph 598 (2) of the Austrian Code of Civil Procedure, the parties expressly waive the application of paragraph 595 (1) figure 7 of the Code. IBM may, however, institute proceedings in a competent court in the country of installation. + +(5) In Estonia, Latvia, and Lithuania: + +All disputes arising in connection with this Agreement will be finally settled in arbitration that will be held in Helsinki, Finland in accordance with the arbitration laws of Finland then in effect. Each party will appoint one arbitrator. The arbitrators will then jointly appoint the chairman. If arbitrators cannot agree on the chairman, then the Central Chamber of Commerce in Helsinki will appoint the chairman. + +AMERICAS COUNTRY AMENDMENTS + +CANADA + +7.1 Items for Which IBM May Be Liable + +The following replaces Item 1 in the first paragraph of this Subsection 7.1 (Items for Which IBM May Be Liable): + +1) damages for bodily injury (including death) and physical harm to real property and tangible personal property caused by IBM's negligence; and + +10. General + +The following replaces Item 10.h: + +h. No right or cause of action for any third party is created by this Agreement or any transaction under it, nor is IBM responsible for any third party claims against Licensee except as permitted by the Limitation of Liability section above for bodily injury (including death) or physical harm to real or tangible personal property caused by IBM's negligence for which IBM is legally liable to that third party. + +The following is added as Item 10.l: + +l. For purposes of this Item 10.l, "Personal Data" refers to information relating to an identified or identifiable individual made available by one of the parties, its personnel or any other individual to the other in connection with this Agreement. The following provisions apply in the event that one party makes Personal Data available to the other: + +(1) General + +(a) Each party is responsible for complying with any obligations applying to it under applicable Canadian data privacy laws and regulations ("Laws"). + +(b) Neither party will request Personal Data beyond what is necessary to fulfill the purpose(s) for which it is requested. The purpose(s) for requesting Personal Data must be reasonable. Each party will agree in advance as to the type of Personal Data that is required to be made available. + +(2) Security Safeguards + +(a) Each party acknowledges that it is solely responsible for determining and communicating to the other the appropriate technological, physical and organizational security measures required to protect Personal Data. + +(b) Each party will ensure that Personal Data is protected in accordance with the security safeguards communicated and agreed to by the other. + +(c) Each party will ensure that any third party to whom Personal Data is transferred is bound by the applicable terms of this section. + +(d) Additional or different services required to comply with the Laws will be deemed a request for new services. + +(3) Use + +Each party agrees that Personal Data will only be used, accessed, managed, transferred, disclosed to third parties or otherwise processed to fulfill the purpose(s) for which it was made available. + +(4) Access Requests + +(a) Each party agrees to reasonably cooperate with the other in connection with requests to access or amend Personal Data. + +(b) Each party agrees to reimburse the other for any reasonable charges incurred in providing each other assistance. + +(c) Each party agrees to amend Personal Data only upon receiving instructions to do so from the other party or its personnel. + +(5) Retention + +Each party will promptly return to the other or destroy all Personal Data that is no longer necessary to fulfill the purpose(s) for which it was made available, unless otherwise instructed by the other or its personnel or required by law. + +(6) Public Bodies Who Are Subject to Public Sector Privacy Legislation + +For Licensees who are public bodies subject to public sector privacy legislation, this Item 10.l applies only to Personal Data made available to Licensee in connection with this Agreement, and the obligations in this section apply only to Licensee, except that: 1) section (2)(a) applies only to IBM; 2) sections (1)(a) and (4)(a) apply to both parties; and 3) section (4)(b) and the last sentence in (1)(b) do not apply. + +PERU + +7. Limitation of Liability + +The following is added to the end of this Section 7 (Limitation of Liability): + +Except as expressly required by law without the possibility of contractual waiver, Licensee and IBM intend that the limitation of liability in this Limitation of Liability section applies to damages caused by all types of claims and causes of action. If any limitation on or exclusion from liability in this section is held by a court of competent jurisdiction to be unenforceable with respect to a particular claim or cause of action, the parties intend that it nonetheless apply to the maximum extent permitted by applicable law to all other claims and causes of action. + +7.1 Items for Which IBM May Be Liable + +The following is added to the end of this Subsection 7.1: + +In accordance with Article 1328 of the Peruvian Civil Code, the limitations and exclusions specified in this section will not apply to damages caused by IBM's willful misconduct ("dolo") or gross negligence ("culpa inexcusable"). + +UNITED STATES OF AMERICA + +10. General + +The following is added to Section 10 as Item 10.l: + +l. U.S. Government Users Restricted Rights - Use, duplication or disclosure is restricted by the GSA IT Schedule 70 Contract with the IBM Corporation. + +The following is added to Item 10.e: + +Each party waives any right to a jury trial in any proceeding arising out of or related to this Agreement. + +ASIA PACIFIC COUNTRY AMENDMENTS + +AUSTRALIA + +5. No Warranties + +The following is added to the first paragraph of Section 5 (No Warranties): + +Although IBM specifies that there are no warranties, Licensee may have certain rights under the Competition and Consumer Act 2010 or other legislation and are only limited to the extent permitted by the applicable legislation. + +7.1 Items for Which IBM May Be Liable + +The following is added to Subsection 7.1 (Items for Which IBM May Be Liable): + +Where IBM is in breach of a condition or warranty implied by the Competition and Consumer Act 2010, IBM's liability is limited to the repair or replacement of the goods, or the supply of equivalent goods. Where that condition or warranty relates to right to sell, quiet possession or clear title, or the goods are of a kind ordinarily obtained for personal, domestic or household use or consumption, then none of the limitations in this paragraph apply. + +HONG KONG SAR, MACAU SAR, AND TAIWAN + +As applies to licenses obtained in Taiwan and the special administrative regions, phrases throughout this Agreement containing the word "country" (for example, "the country in which the original Licensee was granted the license" and "the country in which Licensee obtained the Program license") are replaced with the following: + +(1) In Hong Kong SAR: "Hong Kong SAR" + +(2) In Macau SAR: "Macau SAR" except in the Governing Law clause (Section 11.1) + +(3) In Taiwan: "Taiwan." + +INDIA + +7.1 Items for Which IBM May Be Liable + +The following replaces the terms of Items 1 and 2 of the first paragraph: + +1) liability for bodily injury (including death) or damage to real property and tangible personal property will be limited to that caused by IBM's negligence; and 2) as to any other actual damage arising in any situation involving nonperformance by IBM pursuant to, or in any way related to the subject of this Agreement, IBM's liability will be limited to the charge paid by Licensee for the individual Program that is the subject of the claim. + +10. General + +The following replaces the terms of Item 10.f: + +f. If no suit or other legal action is brought, within three years after the cause of action arose, in respect of any claim that either party may have against the other, the rights of the concerned party in respect of such claim will be forfeited and the other party will stand released from its obligations in respect of such claim. + +INDONESIA + +3.2 Term and Termination + +The following is added to the last paragraph: + +Both parties waive the provision of article 1266 of the Indonesian Civil Code, to the extent the article provision requires such court decree for the termination of an agreement creating mutual obligations. + +JAPAN + +10. General + +The following is added as Item 10.l: + +l. Any doubts concerning this Agreement will be initially resolved between us in good faith and in accordance with the principle of mutual trust. + +MALAYSIA + +7.2 Items for Which IBM Is Not Liable + +The word "SPECIAL" in Item 7.2b is deleted. + +NEW ZEALAND + +5. No Warranties + +The following is added to the first paragraph of this Section 5 (No Warranties): + +Although IBM specifies that there are no warranties, Licensee may have certain rights under the Consumer Guarantees Act 1993 or other legislation which cannot be excluded or limited. The Consumer Guarantees Act 1993 will not apply in respect of any goods which IBM provides, if Licensee requires the goods for the purposes of a business as defined in that Act. + +7. Limitation of Liability + +The following is added: + +Where Programs are not obtained for the purposes of a business as defined in the Consumer Guarantees Act 1993, the limitations in this Section are subject to the limitations in that Act. + +PHILIPPINES + +7.2 Items for Which IBM Is Not Liable + +The following replaces the terms of Item 7.2b: + +b. special (including nominal and exemplary damages), moral, incidental, or indirect damages or for any economic consequential damages; or + +SINGAPORE + +7.2 Items for Which IBM Is Not Liable + +The words "SPECIAL" and "ECONOMIC" are deleted from Item 7.2b. + +10. General + +The following replaces the terms of Item 10.h: + +h. Subject to the rights provided to IBM's suppliers and Program developers as provided in Section 7 above (Limitation of Liability), a person who is not a party to this Agreement will have no right under the Contracts (Right of Third Parties) Act to enforce any of its terms. + +TAIWAN + +7.1 Items for Which IBM May Be Liable + +The following sentences are deleted: + +This limit also applies to any of IBM's subcontractors and Program developers. It is the maximum for which IBM and its subcontractors and Program developers are collectively responsible. + +EUROPE, MIDDLE EAST, AFRICA (EMEA) COUNTRY AMENDMENTS + +EUROPEAN UNION MEMBER STATES + +5. No Warranties + +The following is added to Section 5 (No Warranties): + +In the European Union ("EU"), consumers have legal rights under applicable national legislation governing the sale of consumer goods. Such rights are not affected by the provisions set out in this Section 5 (No Warranties). + +EU MEMBER STATES AND THE COUNTRIES IDENTIFIED BELOW + +Iceland, Liechtenstein, Norway, Switzerland, Turkey, and any other European country that has enacted local data privacy or protection legislation similar to the EU model. + +10. General + +The following replaces Item 10.d: + +(1) Definitions - For the purposes of this Item 10.d, the following additional definitions apply: + +(a) Business Contact Information - business-related contact information disclosed by Licensee to IBM, including names, job titles, business addresses, telephone numbers and email addresses of Licensee's employees and contractors. For Austria, Italy and Switzerland, Business Contact Information also includes information about Licensee and its contractors as legal entities (for example, Licensee's revenue data and other transactional information) + +(b) Business Contact Personnel - Licensee employees and contractors to whom the Business Contact Information relates. + +(c) Data Protection Authority - the authority established by the Data Protection and Electronic Communications Legislation in the applicable country or, for non-EU countries, the authority responsible for supervising the protection of personal data in that country, or (for any of the foregoing) any duly appointed successor entity thereto. + +(d) Data Protection & Electronic Communications Legislation - (i) the applicable local legislation and regulations in force implementing the requirements of EU Directive 95/46/EC (on the protection of individuals with regard to the processing of personal data and on the free movement of such data) and of EU Directive 2002/58/EC (concerning the processing of personal data and the protection of privacy in the electronic communications sector); or (ii) for non-EU countries, the legislation and/or regulations passed in the applicable country relating to the protection of personal data and the regulation of electronic communications involving personal data, including (for any of the foregoing) any statutory replacement or modification thereof. + +(e) IBM Group - International Business Machines Corporation of Armonk, New York, USA, its subsidiaries, and their respective Business Partners and subcontractors. + +(2) Licensee authorizes IBM: + +(a) to process and use Business Contact Information within IBM Group in support of Licensee including the provision of support services, and for the purpose of furthering the business relationship between Licensee and IBM Group, including, without limitation, contacting Business Contact Personnel (by email or otherwise) and marketing IBM Group products and services (the "Specified Purpose"); and + +(b) to disclose Business Contact Information to other members of IBM Group in pursuit of the Specified Purpose only. + +(3) IBM agrees that all Business Contact Information will be processed in accordance with the Data Protection & Electronic Communications Legislation and will be used only for the Specified Purpose. + +(4) To the extent required by the Data Protection & Electronic Communications Legislation, Licensee represents that (a) it has obtained (or will obtain) any consents from (and has issued (or will issue) any notices to) the Business Contact Personnel as are necessary in order to enable IBM Group to process and use the Business Contact Information for the Specified Purpose. + +(5) Licensee authorizes IBM to transfer Business Contact Information outside the European Economic Area, provided that the transfer is made on contractual terms approved by the Data Protection Authority or the transfer is otherwise permitted under the Data Protection & Electronic Communications Legislation. + +AUSTRIA + +7. Limitation of Liability + +The following is added: + +The following limitations and exclusions of IBM's liability do not apply for damages caused by gross negligence or willful misconduct. + +7.1 Items for Which IBM May Be Liable + +The following replaces the first sentence in the first paragraph: + +Circumstances may arise where, because of a default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. + +In the second sentence of the first paragraph, delete entirely the parenthetical phrase: + +"(including fundamental breach, negligence, misrepresentation, or other contract or tort claim)". + +7.2 Items for Which IBM Is Not Liable + +The following replaces Item 7.2b: + +b. indirect damages or consequential damages; or + +BELGIUM, FRANCE, ITALY, AND LUXEMBOURG + +7. Limitation of Liability + +The following replaces the terms of Section 7 (Limitation of Liability) in its entirety: + +Except as otherwise provided by mandatory law: + +7.1 Items for Which IBM May Be Liable + +IBM's entire liability for all claims in the aggregate for any damages and losses that may arise as a consequence of the fulfillment of its obligations under or in connection with this Agreement or due to any other cause related to this Agreement is limited to the compensation of only those damages and losses proved and actually arising as an immediate and direct consequence of the non-fulfillment of such obligations (if IBM is at fault) or of such cause, for a maximum of EUR 500,000 (five hundred thousand euro). + +The above limitation will not apply to damages for bodily injuries (including death) and damages to real property and tangible personal property for which IBM is legally liable. + +7.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM OR ANY OF ITS PROGRAM DEVELOPERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: 1) LOSS OF, OR DAMAGE TO, DATA; 2) INCIDENTAL, EXEMPLARY OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; AND / OR 3) LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS, EVEN IF THEY ARISE AS AN IMMEDIATE CONSEQUENCE OF THE EVENT THAT GENERATED THE DAMAGES. + +7.3 Suppliers and Program Developers + +The limitation and exclusion of liability herein agreed applies not only to the activities performed by IBM but also to the activities performed by its suppliers and Program developers, and represents the maximum amount for which IBM as well as its suppliers and Program developers are collectively responsible. + +GERMANY + +7. Limitation of Liability + +The following replaces this Section 7 (Limitation of Liability) in its entirety: + +a. IBM will be liable without limit for 1) loss or damage caused by a breach of an express guarantee; 2) damages or losses resulting in bodily injury (including death); and 3) damages caused intentionally or by gross negligence. + +b. In the event of loss, damage and frustrated expenditures caused by slight negligence or in breach of essential contractual obligations, IBM will be liable, regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), per claim only up to 500,000 euro for the Program that caused the loss or damage. A number of defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one default. + +c. In the event of loss, damage and frustrated expenditures caused by slight negligence, IBM will not be liable for indirect or consequential damages, even if IBM was informed about the possibility of such loss or damage. + +d. In case of delay on IBM's part: 1) IBM will pay to Licensee an amount not exceeding the loss or damage caused by IBM's delay and 2) IBM will be liable only in respect of the resulting damages that Licensee suffers, subject to the provisions of Items a and b above. + +10. General + +The following replaces the provisions of 10.f: + +f. Any claims resulting from this Agreement are subject to a limitation period of three years, except as stated in Section 5 (No Warranties) of this Agreement. + +The following replaces the provisions of 10.h: + +h. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except (to the extent permitted in Section 7 (Limitation of Liability)) for: i) bodily injury (including death); or ii) damage to real or tangible personal property for which (in either case) IBM is legally liable to that third party. + +IRELAND + +5. No Warranties + +The following paragraph is added to the second paragraph of this Section 5 (No Warranties): + +Except as expressly provided in these terms and conditions, or Section 12 of the Sale of Goods Act 1893 as amended by the Sale of Goods and Supply of Services Act, 1980 (the "1980 Act"), all conditions or warranties (express or implied, statutory or otherwise) are hereby excluded including, without limitation, any warranties implied by the Sale of Goods Act 1893 as amended by the 1980 Act (including, for the avoidance of doubt, Section 39 of the 1980 Act). + +IRELAND AND UNITED KINGDOM + +2. Agreement Structure + +The following sentence is added: + +Nothing in this paragraph shall have the effect of excluding or limiting liability for fraud. + +7.1 Items for Which IBM May Be Liable + +The following replaces the first paragraph of the Subsection: + +For the purposes of this section, a "Default" means any act, statement, omission or negligence on the part of IBM in connection with, or in relation to, the subject matter of an Agreement in respect of which IBM is legally liable to Licensee, whether in contract or in tort. A number of Defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one Default. + +Circumstances may arise where, because of a Default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM and except as expressly required by law without the possibility of contractual waiver, IBM's entire liability for any one Default will not exceed the amount of any direct damages, to the extent actually suffered by Licensee as an immediate and direct consequence of the Default, up to 500,000 euro (or the equivalent in local currency) for the Program that is the subject of the claim. Notwithstanding the foregoing, the amount of any damages for bodily injury (including death) and damage to real property and tangible personal property for which IBM is legally liable is not subject to such limitation. + +7.2 Items for Which IBM Is Not Liable + +The following replaces Items 7.2b and 7.2c: + +b. special, incidental, exemplary, or indirect damages or consequential damages; or + +c. wasted management time or lost profits, business, revenue, goodwill, or anticipated savings. + +Z125-5543-05 (07/2011) + + +International Program License Agreement + +Part 1 - General Terms + +BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, CLICKING ON AN "ACCEPT" BUTTON, OR OTHERWISE USING THE PROGRAM, LICENSEE AGREES TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCEPTING THESE TERMS ON BEHALF OF LICENSEE, YOU REPRESENT AND WARRANT THAT YOU HAVE FULL AUTHORITY TO BIND LICENSEE TO THESE TERMS. IF YOU DO NOT AGREE TO THESE TERMS, + +* DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, CLICK ON AN "ACCEPT" BUTTON, OR USE THE PROGRAM; AND + +* PROMPTLY RETURN THE UNUSED MEDIA, DOCUMENTATION, AND PROOF OF ENTITLEMENT TO THE PARTY FROM WHOM IT WAS OBTAINED FOR A REFUND OF THE AMOUNT PAID. IF THE PROGRAM WAS DOWNLOADED, DESTROY ALL COPIES OF THE PROGRAM. + +1. Definitions + +"Authorized Use" - the specified level at which Licensee is authorized to execute or run the Program. That level may be measured by number of users, millions of service units ("MSUs"), Processor Value Units ("PVUs"), or other level of use specified by IBM. + +"IBM" - International Business Machines Corporation or one of its subsidiaries. + +"License Information" ("LI") - a document that provides information and any additional terms specific to a Program. The Program's LI is available at www.ibm.com/software/sla. The LI can also be found in the Program's directory, by the use of a system command, or as a booklet included with the Program. + +"Program" - the following, including the original and all whole or partial copies: 1) machine-readable instructions and data, 2) components, files, and modules, 3) audio-visual content (such as images, text, recordings, or pictures), and 4) related licensed materials (such as keys and documentation). + +"Proof of Entitlement" ("PoE") - evidence of Licensee's Authorized Use. The PoE is also evidence of Licensee's eligibility for warranty, future update prices, if any, and potential special or promotional opportunities. If IBM does not provide Licensee with a PoE, then IBM may accept as the PoE the original paid sales receipt or other sales record from the party (either IBM or its reseller) from whom Licensee obtained the Program, provided that it specifies the Program name and Authorized Use obtained. + +"Warranty Period" - one year, starting on the date the original Licensee is granted the license. + +2. Agreement Structure + +This Agreement includes Part 1 - General Terms, Part 2 - Country-unique Terms (if any), the LI, and the PoE and is the complete agreement between Licensee and IBM regarding the use of the Program. It replaces any prior oral or written communications between Licensee and IBM concerning Licensee's use of the Program. The terms of Part 2 may replace or modify those of Part 1. To the extent of any conflict, the LI prevails over both Parts. + +3. License Grant + +The Program is owned by IBM or an IBM supplier, and is copyrighted and licensed, not sold. + +IBM grants Licensee a nonexclusive license to 1) use the Program up to the Authorized Use specified in the PoE, 2) make and install copies to support such Authorized Use, and 3) make a backup copy, all provided that + +a. Licensee has lawfully obtained the Program and complies with the terms of this Agreement; + +b. the backup copy does not execute unless the backed-up Program cannot execute; + +c. Licensee reproduces all copyright notices and other legends of ownership on each copy, or partial copy, of the Program; + +d. Licensee ensures that anyone who uses the Program (accessed either locally or remotely) 1) does so only on Licensee's behalf and 2) complies with the terms of this Agreement; + +e. Licensee does not 1) use, copy, modify, or distribute the Program except as expressly permitted in this Agreement; 2) reverse assemble, reverse compile, otherwise translate, or reverse engineer the Program, except as expressly permitted by law without the possibility of contractual waiver; 3) use any of the Program's components, files, modules, audio-visual content, or related licensed materials separately from that Program; or 4) sublicense, rent, or lease the Program; and + +f. if Licensee obtains this Program as a Supporting Program, Licensee uses this Program only to support the Principal Program and subject to any limitations in the license to the Principal Program, or, if Licensee obtains this Program as a Principal Program, Licensee uses all Supporting Programs only to support this Program, and subject to any limitations in this Agreement. For purposes of this Item "f," a "Supporting Program" is a Program that is part of another IBM Program ("Principal Program") and identified as a Supporting Program in the Principal Program's LI. (To obtain a separate license to a Supporting Program without these restrictions, Licensee should contact the party from whom Licensee obtained the Supporting Program.) + +This license applies to each copy of the Program that Licensee makes. + +3.1 Trade-ups, Updates, Fixes, and Patches + +3.1.1 Trade-ups + +If the Program is replaced by a trade-up Program, the replaced Program's license is promptly terminated. + +3.1.2 Updates, Fixes, and Patches + +When Licensee receives an update, fix, or patch to a Program, Licensee accepts any additional or different terms that are applicable to such update, fix, or patch that are specified in its LI. If no additional or different terms are provided, then the update, fix, or patch is subject solely to this Agreement. If the Program is replaced by an update, Licensee agrees to promptly discontinue use of the replaced Program. + +3.2 Fixed Term Licenses + +If IBM licenses the Program for a fixed term, Licensee's license is terminated at the end of the fixed term, unless Licensee and IBM agree to renew it. + +3.3 Term and Termination + +This Agreement is effective until terminated. + +IBM may terminate Licensee's license if Licensee fails to comply with the terms of this Agreement. + +If the license is terminated for any reason by either party, Licensee agrees to promptly discontinue use of and destroy all of Licensee's copies of the Program. Any terms of this Agreement that by their nature extend beyond termination of this Agreement remain in effect until fulfilled, and apply to both parties' respective successors and assignees. + +4. Charges + +Charges are based on Authorized Use obtained, which is specified in the PoE. IBM does not give credits or refunds for charges already due or paid, except as specified elsewhere in this Agreement. + +If Licensee wishes to increase its Authorized Use, Licensee must notify IBM or an authorized IBM reseller in advance and pay any applicable charges. + +5. Taxes + +If any authority imposes on the Program a duty, tax, levy, or fee, excluding those based on IBM's net income, then Licensee agrees to pay that amount, as specified in an invoice, or supply exemption documentation. Licensee is responsible for any personal property taxes for the Program from the date that Licensee obtains it. If any authority imposes a customs duty, tax, levy, or fee for the import into or the export, transfer, access, or use of the Program outside the country in which the original Licensee was granted the license, then Licensee agrees that it is responsible for, and will pay, any amount imposed. + +6. Money-back Guarantee + +If Licensee is dissatisfied with the Program for any reason and is the original Licensee, Licensee may terminate the license and obtain a refund of the amount Licensee paid for the Program, provided that Licensee returns the Program and PoE to the party from whom Licensee obtained it within 30 days of the date the PoE was issued to Licensee. If the license is for a fixed term that is subject to renewal, then Licensee may obtain a refund only if the Program and its PoE are returned within the first 30 days of the initial term. If Licensee downloaded the Program, Licensee should contact the party from whom Licensee obtained it for instructions on how to obtain the refund. + +7. Program Transfer + +Licensee may transfer the Program and all of Licensee's license rights and obligations to another party only if that party agrees to the terms of this Agreement. If the license is terminated for any reason by either party, Licensee is prohibited from transferring the Program to another party. Licensee may not transfer a portion of 1) the Program or 2) the Program's Authorized Use. When Licensee transfers the Program, Licensee must also transfer a hard copy of this Agreement, including the LI and PoE. Immediately after the transfer, Licensee's license terminates. + +8. Warranty and Exclusions + +8.1 Limited Warranty + +IBM warrants that the Program, when used in its specified operating environment, will conform to its specifications. The Program's specifications, and specified operating environment information, can be found in documentation accompanying the Program (such as a read-me file) or other information published by IBM (such as an announcement letter). Licensee agrees that such documentation and other Program content may be supplied only in the English language, unless otherwise required by local law without the possibility of contractual waiver or limitation. + +The warranty applies only to the unmodified portion of the Program. IBM does not warrant uninterrupted or error-free operation of the Program, or that IBM will correct all Program defects. Licensee is responsible for the results obtained from the use of the Program. + +During the Warranty Period, IBM provides Licensee with access to IBM databases containing information on known Program defects, defect corrections, restrictions, and bypasses at no additional charge. Consult the IBM Software Support Handbook for further information at www.ibm.com/software/support. + +If the Program does not function as warranted during the Warranty Period and the problem cannot be resolved with information available in the IBM databases, Licensee may return the Program and its PoE to the party (either IBM or its reseller) from whom Licensee obtained it and receive a refund of the amount Licensee paid. After returning the Program, Licensee's license terminates. If Licensee downloaded the Program, Licensee should contact the party from whom Licensee obtained it for instructions on how to obtain the refund. + +8.2 Exclusions + +THESE WARRANTIES ARE LICENSEE'S EXCLUSIVE WARRANTIES AND REPLACE ALL OTHER WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND ANY WARRANTY OR CONDITION OF NON-INFRINGEMENT. SOME STATES OR JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF EXPRESS OR IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO LICENSEE. IN THAT EVENT, SUCH WARRANTIES ARE LIMITED IN DURATION TO THE WARRANTY PERIOD. NO WARRANTIES APPLY AFTER THAT PERIOD. SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY LASTS, SO THE ABOVE LIMITATION MAY NOT APPLY TO LICENSEE. + +THESE WARRANTIES GIVE LICENSEE SPECIFIC LEGAL RIGHTS. LICENSEE MAY ALSO HAVE OTHER RIGHTS THAT VARY FROM STATE TO STATE OR JURISDICTION TO JURISDICTION. + +THE WARRANTIES IN THIS SECTION 8 (WARRANTY AND EXCLUSIONS) ARE PROVIDED SOLELY BY IBM. THE DISCLAIMERS IN THIS SUBSECTION 8.2 (EXCLUSIONS), HOWEVER, ALSO APPLY TO IBM'S SUPPLIERS OF THIRD PARTY CODE. THOSE SUPPLIERS PROVIDE SUCH CODE WITHOUT WARRANTIES OR CONDITION OF ANY KIND. THIS PARAGRAPH DOES NOT NULLIFY IBM'S WARRANTY OBLIGATIONS UNDER THIS AGREEMENT. + +9. Licensee Data and Databases + +To assist Licensee in isolating the cause of a problem with the Program, IBM may request that Licensee 1) allow IBM to remotely access Licensee's system or 2) send Licensee information or system data to IBM. However, IBM is not obligated to provide such assistance unless IBM and Licensee enter a separate written agreement under which IBM agrees to provide to Licensee that type of support, which is beyond IBM's warranty obligations in this Agreement. In any event, IBM uses information about errors and problems to improve its products and services, and assist with its provision of related support offerings. For these purposes, IBM may use IBM entities and subcontractors (including in one or more countries other than the one in which Licensee is located), and Licensee authorizes IBM to do so. + +Licensee remains responsible for 1) any data and the content of any database Licensee makes available to IBM, 2) the selection and implementation of procedures and controls regarding access, security, encryption, use, and transmission of data (including any personally-identifiable data), and 3) backup and recovery of any database and any stored data. Licensee will not send or provide IBM access to any personally-identifiable information, whether in data or any other form, and will be responsible for reasonable costs and other amounts that IBM may incur relating to any such information mistakenly provided to IBM or the loss or disclosure of such information by IBM, including those arising out of any third party claims. + +10. Limitation of Liability + +The limitations and exclusions in this Section 10 (Limitation of Liability) apply to the full extent they are not prohibited by applicable law without the possibility of contractual waiver. + +10.1 Items for Which IBM May Be Liable + +Circumstances may arise where, because of a default on IBM's part or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), IBM's entire liability for all claims in the aggregate arising from or related to each Program or otherwise arising under this Agreement will not exceed the amount of any 1) damages for bodily injury (including death) and damage to real property and tangible personal property and 2) other actual direct damages up to the charges (if the Program is subject to fixed term charges, up to twelve months' charges) Licensee paid for the Program that is the subject of the claim. + +This limit also applies to any of IBM's Program developers and suppliers. It is the maximum for which IBM and its Program developers and suppliers are collectively responsible. + +10.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM, ITS PROGRAM DEVELOPERS OR SUPPLIERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: + +a. LOSS OF, OR DAMAGE TO, DATA; + +b. SPECIAL, INCIDENTAL, EXEMPLARY, OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; OR + +c. LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. + +11. Compliance Verification + +For purposes of this Section 11 (Compliance Verification), "IPLA Program Terms" means 1) this Agreement and applicable amendments and transaction documents provided by IBM, and 2) IBM software policies that may be found at the IBM Software Policy website (www.ibm.com/softwarepolicies), including but not limited to those policies concerning backup, sub-capacity pricing, and migration. + +The rights and obligations set forth in this Section 11 remain in effect during the period the Program is licensed to Licensee, and for two years thereafter. + +11.1 Verification Process + +Licensee agrees to create, retain, and provide to IBM and its auditors accurate written records, system tool outputs, and other system information sufficient to provide auditable verification that Licensee's use of all Programs is in compliance with the IPLA Program Terms, including, without limitation, all of IBM's applicable licensing and pricing qualification terms. Licensee is responsible for 1) ensuring that it does not exceed its Authorized Use, and 2) remaining in compliance with IPLA Program Terms. + +Upon reasonable notice, IBM may verify Licensee's compliance with IPLA Program Terms at all sites and for all environments in which Licensee uses (for any purpose) Programs subject to IPLA Program Terms. Such verification will be conducted in a manner that minimizes disruption to Licensee's business, and may be conducted on Licensee's premises, during normal business hours. IBM may use an independent auditor to assist with such verification, provided IBM has a written confidentiality agreement in place with such auditor. + +11.2 Resolution + +IBM will notify Licensee in writing if any such verification indicates that Licensee has used any Program in excess of its Authorized Use or is otherwise not in compliance with the IPLA Program Terms. Licensee agrees to promptly pay directly to IBM the charges that IBM specifies in an invoice for 1) any such excess use, 2) support for such excess use for the lesser of the duration of such excess use or two years, and 3) any additional charges and other liabilities determined as a result of such verification. + +12. Third Party Notices + +The Program may include third party code that IBM, not the third party, licenses to Licensee under this Agreement. Notices, if any, for the third party code ("Third Party Notices") are included for Licensee's information only. These notices can be found in the Program's NOTICES file(s). Information on how to obtain source code for certain third party code can be found in the Third Party Notices. If in the Third Party Notices IBM identifies third party code as "Modifiable Third Party Code," IBM authorizes Licensee to 1) modify the Modifiable Third Party Code and 2) reverse engineer the Program modules that directly interface with the Modifiable Third Party Code provided that it is only for the purpose of debugging Licensee's modifications to such third party code. IBM's service and support obligations, if any, apply only to the unmodified Program. + +13. General + +a. Nothing in this Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. + +b. For Programs IBM provides to Licensee in tangible form, IBM fulfills its shipping and delivery obligations upon the delivery of such Programs to the IBM-designated carrier, unless otherwise agreed to in writing by Licensee and IBM. + +c. If any provision of this Agreement is held to be invalid or unenforceable, the remaining provisions of this Agreement remain in full force and effect. + +d. Licensee agrees to comply with all applicable export and import laws and regulations, including U.S. embargo and sanctions regulations and prohibitions on export for certain end uses or to certain users. + +e. Licensee authorizes International Business Machines Corporation and its subsidiaries (and their successors and assigns, contractors and IBM Business Partners) to store and use Licensee's business contact information wherever they do business, in connection with IBM products and services, or in furtherance of IBM's business relationship with Licensee. + +f. Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. + +g. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation: 1) neither party will bring a legal action, regardless of form, for any claim arising out of or related to this Agreement more than two years after the cause of action arose; and 2) upon the expiration of such time limit, any such claim and all respective rights related to the claim lapse. + +h. Neither Licensee nor IBM is responsible for failure to fulfill any obligations due to causes beyond its control. + +i. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except as permitted in Subsection 10.1 (Items for Which IBM May Be Liable) above for bodily injury (including death) or damage to real or tangible personal property for which IBM is legally liable to that third party. + +j. In entering into this Agreement, neither party is relying on any representation not specified in this Agreement, including but not limited to any representation concerning: 1) the performance or function of the Program, other than as expressly warranted in Section 8 (Warranty and Exclusions) above; 2) the experiences or recommendations of other parties; or 3) any results or savings that Licensee may achieve. + +k. IBM has signed agreements with certain organizations (called "IBM Business Partners") to promote, market, and support certain Programs. IBM Business Partners remain independent and separate from IBM. IBM is not responsible for the actions or statements of IBM Business Partners or obligations they have to Licensee. + +l. The license and intellectual property indemnification terms of Licensee's other agreements with IBM (such as the IBM Customer Agreement) do not apply to Program licenses granted under this Agreement. + +14. Geographic Scope and Governing Law + +14.1 Governing Law + +Both parties agree to the application of the laws of the country in which Licensee obtained the Program license to govern, interpret, and enforce all of Licensee's and IBM's respective rights, duties, and obligations arising from, or relating in any manner to, the subject matter of this Agreement, without regard to conflict of law principles. + +The United Nations Convention on Contracts for the International Sale of Goods does not apply. + +14.2 Jurisdiction + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license. + +Part 2 - Country-unique Terms + +For licenses granted in the countries specified below, the following terms replace or modify the referenced terms in Part 1. All terms in Part 1 that are not changed by these amendments remain unchanged and in effect. This Part 2 is organized as follows: + +* Multiple country amendments to Part 1, Section 14 (Governing Law and Jurisdiction); + +* Americas country amendments to other Agreement terms; + +* Asia Pacific country amendments to other Agreement terms; and + +* Europe, Middle East, and Africa country amendments to other Agreement terms. + +Multiple country amendments to Part 1, Section 14 (Governing Law and Jurisdiction) + +14.1 Governing Law + +The phrase "the laws of the country in which Licensee obtained the Program license" in the first paragraph of 14.1 Governing Law is replaced by the following phrases in the countries below: + +AMERICAS + +(1) In Canada: the laws in the Province of Ontario; + +(2) in Mexico: the federal laws of the Republic of Mexico; + +(3) in the United States, Anguilla, Antigua/Barbuda, Aruba, British Virgin Islands, Cayman Islands, Dominica, Grenada, Guyana, Saint Kitts and Nevis, Saint Lucia, Saint Maarten, and Saint Vincent and the Grenadines: the laws of the State of New York, United States; + +(4) in Venezuela: the laws of the Bolivarian Republic of Venezuela; + +ASIA PACIFIC + +(5) in Cambodia and Laos: the laws of the State of New York, United States; + +(6) in Australia: the laws of the State or Territory in which the transaction is performed; + +(7) in Hong Kong SAR and Macau SAR: the laws of Hong Kong Special Administrative Region ("SAR"); + +(8) in Taiwan: the laws of Taiwan; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: the laws of Austria; + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the laws of France; + +(11) in Estonia, Latvia, and Lithuania: the laws of Finland; + +(12) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the laws of England; and + +(13) in South Africa, Namibia, Lesotho, and Swaziland: the laws of the Republic of South Africa. + +14.2 Jurisdiction + +The following paragraph pertains to jurisdiction and replaces Subsection 14.2 (Jurisdiction) as it applies for those countries identified below: + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license except that in the countries identified below all disputes arising out of or related to this Agreement, including summary proceedings, will be brought before and subject to the exclusive jurisdiction of the following courts of competent jurisdiction: + +AMERICAS + +(1) In Argentina: the Ordinary Commercial Court of the city of Buenos Aires; + +(2) in Brazil: the court of Rio de Janeiro, RJ; + +(3) in Chile: the Civil Courts of Justice of Santiago; + +(4) in Ecuador: the civil judges of Quito for executory or summary proceedings (as applicable); + +(5) in Mexico: the courts located in Mexico City, Federal District; + +(6) in Peru: the judges and tribunals of the judicial district of Lima, Cercado; + +(7) in Uruguay: the courts of the city of Montevideo; + +(8) in Venezuela: the courts of the metropolitan area of the city of Caracas; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Austria: the court of law in Vienna, Austria (Inner-City); + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, France, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Monaco, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the Commercial Court of Paris; + +(11) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the English courts; + +(12) in South Africa, Namibia, Lesotho, and Swaziland: the High Court in Johannesburg; + +(13) in Greece: the competent court of Athens; + +(14) in Israel: the courts of Tel Aviv-Jaffa; + +(15) in Italy: the courts of Milan; + +(16) in Portugal: the courts of Lisbon; + +(17) in Spain: the courts of Madrid; and + +(18) in Turkey: the Istanbul Central Courts and Execution Directorates of Istanbul, the Republic of Turkey. + +14.3 Arbitration + +The following paragraph is added as a new Subsection 14.3 (Arbitration) as it applies for those countries identified below. The provisions of this Subsection 14.3 prevail over those of Subsection 14.2 (Jurisdiction) to the extent permitted by the applicable governing law and rules of procedure: + +ASIA PACIFIC + +(1) In Cambodia, India, Laos, Philippines, and Vietnam: + +Disputes arising out of or in connection with this Agreement will be finally settled by arbitration which will be held in Singapore in accordance with the Arbitration Rules of Singapore International Arbitration Center ("SIAC Rules") then in effect. The arbitration award will be final and binding for the parties without appeal and will be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators will be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties will appoint a third arbitrator who will act as chairman of the proceedings. Vacancies in the post of chairman will be filled by the president of the SIAC. Other vacancies will be filled by the respective nominating party. Proceedings will continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator will be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings will be conducted, including all documents presented in such proceedings, in the English language. The English language version of this Agreement prevails over any other language version. + +(2) In the People's Republic of China: + +In case no settlement can be reached, the disputes will be submitted to China International Economic and Trade Arbitration Commission for arbitration according to the then effective rules of the said Arbitration Commission. The arbitration will take place in Beijing and be conducted in Chinese. The arbitration award will be final and binding on both parties. During the course of arbitration, this agreement will continue to be performed except for the part which the parties are disputing and which is undergoing arbitration. + +(3) In Indonesia: + +Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation, i) neither party will bring a legal action, regardless of form, arising out of or related to this Agreement or any transaction under it more than two years after the cause of action arose; and ii) after such time limit, any legal action arising out of this Agreement or any transaction under it and all respective rights related to any such action lapse. + +Disputes arising out of or in connection with this Agreement shall be finally settled by arbitration that shall be held in Jakarta, Indonesia in accordance with the rules of Board of the Indonesian National Board of Arbitration (Badan Arbitrase Nasional Indonesia or "BANI") then in effect. The arbitration award shall be final and binding for the parties without appeal and shall be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators shall be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties shall appoint a third arbitrator who shall act as chairman of the proceedings. Vacancies in the post of chairman shall be filled by the chairman of the BANI. Other vacancies shall be filled by the respective nominating party. Proceedings shall continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator shall be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings shall be conducted, including all documents presented in such proceedings, in the English and/or Indonesian language. + +EUROPE, MIDDLE EAST, AND AFRICA + +(4) In Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: + +All disputes arising out of this Agreement or related to its violation, termination or nullity will be finally settled under the Rules of Arbitration and Conciliation of the International Arbitral Center of the Federal Economic Chamber in Vienna (Vienna Rules) by three arbitrators appointed in accordance with these rules. The arbitration will be held in Vienna, Austria, and the official language of the proceedings will be English. The decision of the arbitrators will be final and binding upon both parties. Therefore, pursuant to paragraph 598 (2) of the Austrian Code of Civil Procedure, the parties expressly waive the application of paragraph 595 (1) figure 7 of the Code. IBM may, however, institute proceedings in a competent court in the country of installation. + +(5) In Estonia, Latvia, and Lithuania: + +All disputes arising in connection with this Agreement will be finally settled in arbitration that will be held in Helsinki, Finland in accordance with the arbitration laws of Finland then in effect. Each party will appoint one arbitrator. The arbitrators will then jointly appoint the chairman. If arbitrators cannot agree on the chairman, then the Central Chamber of Commerce in Helsinki will appoint the chairman. + +AMERICAS COUNTRY AMENDMENTS + +CANADA + +10.1 Items for Which IBM May be Liable + +The following replaces Item 1 in the first paragraph of this Subsection 10.1 (Items for Which IBM May be Liable): + +1) damages for bodily injury (including death) and physical harm to real property and tangible personal property caused by IBM's negligence; and + +13. General + +The following replaces Item 13.d: + +d. Licensee agrees to comply with all applicable export and import laws and regulations, including those of that apply to goods of United States origin and that prohibit or limit export for certain uses or to certain users. + +The following replaces Item 13.i: + +i. No right or cause of action for any third party is created by this Agreement or any transaction under it, nor is IBM responsible for any third party claims against Licensee except as permitted by the Limitation of Liability section above for bodily injury (including death) or physical harm to real or tangible personal property caused by IBM's negligence for which IBM is legally liable to that third party. + +The following is added as Item 13.m: + +m. For purposes of this Item 13.m, "Personal Data" refers to information relating to an identified or identifiable individual made available by one of the parties, its personnel or any other individual to the other in connection with this Agreement. The following provisions apply in the event that one party makes Personal Data available to the other: + +(1) General + +(a) Each party is responsible for complying with any obligations applying to it under applicable Canadian data privacy laws and regulations ("Laws"). + +(b) Neither party will request Personal Data beyond what is necessary to fulfill the purpose(s) for which it is requested. The purpose(s) for requesting Personal Data must be reasonable. Each party will agree in advance as to the type of Personal Data that is required to be made available. + +(2) Security Safeguards + +(a) Each party acknowledges that it is solely responsible for determining and communicating to the other the appropriate technological, physical and organizational security measures required to protect Personal Data. + +(b) Each party will ensure that Personal Data is protected in accordance with the security safeguards communicated and agreed to by the other. + +(c) Each party will ensure that any third party to whom Personal Data is transferred is bound by the applicable terms of this section. + +(d) Additional or different services required to comply with the Laws will be deemed a request for new services. + +(3) Use + +Each party agrees that Personal Data will only be used, accessed, managed, transferred, disclosed to third parties or otherwise processed to fulfill the purpose(s) for which it was made available. + +(4) Access Requests + +(a) Each party agrees to reasonably cooperate with the other in connection with requests to access or amend Personal Data. + +(b) Each party agrees to reimburse the other for any reasonable charges incurred in providing each other assistance. + +(c) Each party agrees to amend Personal Data only upon receiving instructions to do so from the other party or its personnel. + +(5) Retention + +Each party will promptly return to the other or destroy all Personal Data that is no longer necessary to fulfill the purpose(s) for which it was made available, unless otherwise instructed by the other or its personnel or required by law. + +(6) Public Bodies Who Are Subject to Public Sector Privacy Legislation + +For Licensees who are public bodies subject to public sector privacy legislation, this Item 13.m applies only to Personal Data made available to Licensee in connection with this Agreement, and the obligations in this section apply only to Licensee, except that: 1) section (2)(a) applies only to IBM; 2) sections (1)(a) and (4)(a) apply to both parties; and 3) section (4)(b) and the last sentence in (1)(b) do not apply. + +PERU + +10. Limitation of Liability + +The following is added to the end of this Section 10 (Limitation of Liability): + +Except as expressly required by law without the possibility of contractual waiver, Licensee and IBM intend that the limitation of liability in this Limitation of Liability section applies to damages caused by all types of claims and causes of action. If any limitation on or exclusion from liability in this section is held by a court of competent jurisdiction to be unenforceable with respect to a particular claim or cause of action, the parties intend that it nonetheless apply to the maximum extent permitted by applicable law to all other claims and causes of action. + +10.1 Items for Which IBM May be Liable + +The following is added at the end of this Subsection 10.1: + +In accordance with Article 1328 of the Peruvian Civil Code, the limitations and exclusions specified in this section will not apply to damages caused by IBM's willful misconduct ("dolo") or gross negligence ("culpa inexcusable"). + +UNITED STATES OF AMERICA + +5. Taxes + +The following is added at the end of this Section 5 (Taxes) + +For Programs delivered electronically in the United States for which Licensee claims a state sales and use tax exemption, Licensee agrees not to receive any tangible personal property (e.g., media and publications) associated with the electronic program. + +Licensee agrees to be responsible for any sales and use tax liabilities that may arise as a result of Licensee's subsequent redistribution of Programs after delivery by IBM. + +13. General + +The following is added to Section 13 as Item 13.m: + +U.S. Government Users Restricted Rights - Use, duplication or disclosure is restricted by the GSA IT Schedule 70 Contract with the IBM Corporation. + +The following is added to Item 13.f: + +Each party waives any right to a jury trial in any proceeding arising out of or related to this Agreement. + +ASIA PACIFIC COUNTRY AMENDMENTS + +AUSTRALIA + +5. Taxes + +The following sentences replace the first two sentences of Section 5 (Taxes): + +If any government or authority imposes a duty, tax (other than income tax), levy, or fee, on this Agreement or on the Program itself, that is not otherwise provided for in the amount payable, Licensee agrees to pay it when IBM invoices Licensee. If the rate of GST changes, IBM may adjust the charge or other amount payable to take into account that change from the date the change becomes effective. + +8.1 Limited Warranty + +The following is added to Subsection 8.1 (Limited Warranty): + +The warranties specified this Section are in addition to any rights Licensee may have under the Competition and Consumer Act 2010 or other legislation and are only limited to the extent permitted by the applicable legislation. + +10.1 Items for Which IBM May be Liable + +The following is added to Subsection 10.1 (Items for Which IBM May be Liable): + +Where IBM is in breach of a condition or warranty implied by the Competition and Consumer Act 2010, IBM's liability is limited to the repair or replacement of the goods, or the supply of equivalent goods. Where that condition or warranty relates to right to sell, quiet possession or clear title, or the goods are of a kind ordinarily obtained for personal, domestic or household use or consumption, then none of the limitations in this paragraph apply. + +HONG KONG SAR, MACAU SAR, AND TAIWAN + +As applies to licenses obtained in Taiwan and the special administrative regions, phrases throughout this Agreement containing the word "country" (for example, "the country in which the original Licensee was granted the license" and "the country in which Licensee obtained the Program license") are replaced with the following: + +(1) In Hong Kong SAR: "Hong Kong SAR" + +(2) In Macau SAR: "Macau SAR" except in the Governing Law clause (Section 14.1) + +(3) In Taiwan: "Taiwan." + +INDIA + +10.1 Items for Which IBM May be Liable + +The following replaces the terms of Items 1 and 2 of the first paragraph: + +1) liability for bodily injury (including death) or damage to real property and tangible personal property will be limited to that caused by IBM's negligence; and 2) as to any other actual damage arising in any situation involving nonperformance by IBM pursuant to, or in any way related to the subject of this Agreement, IBM's liability will be limited to the charge paid by Licensee for the individual Program that is the subject of the claim. + +13. General + +The following replaces the terms of Item 13.g: + +If no suit or other legal action is brought, within three years after the cause of action arose, in respect of any claim that either party may have against the other, the rights of the concerned party in respect of such claim will be forfeited and the other party will stand released from its obligations in respect of such claim. + +INDONESIA + +3.3 Term and Termination + +The following is added to the last paragraph: + +Both parties waive the provision of article 1266 of the Indonesian Civil Code, to the extent the article provision requires such court decree for the termination of an agreement creating mutual obligations. + +JAPAN + +13. General + +The following is inserted after Item 13.f: + +Any doubts concerning this Agreement will be initially resolved between us in good faith and in accordance with the principle of mutual trust. + +MALAYSIA + +10.2 Items for Which IBM Is not Liable + +The word "SPECIAL" in Item 10.2b is deleted. + +NEW ZEALAND + +8.1 Limited Warranty + +The following is added: + +The warranties specified in this Section are in addition to any rights Licensee may have under the Consumer Guarantees Act 1993 or other legislation which cannot be excluded or limited. The Consumer Guarantees Act 1993 will not apply in respect of any goods which IBM provides, if Licensee requires the goods for the purposes of a business as defined in that Act. + +10. Limitation of Liability + +The following is added: + +Where Programs are not obtained for the purposes of a business as defined in the Consumer Guarantees Act 1993, the limitations in this Section are subject to the limitations in that Act. + +PEOPLE'S REPUBLIC OF CHINA + +4. Charges + +The following is added: + +All banking charges incurred in the People's Republic of China will be borne by Licensee and those incurred outside the People's Republic of China will be borne by IBM. + +PHILIPPINES + +10.2 Items for Which IBM Is not Liable + +The following replaces the terms of Item 10.2b: + +b. special (including nominal and exemplary damages), moral, incidental, or indirect damages or for any economic consequential damages; or + +SINGAPORE + +10.2 Items for Which IBM Is not Liable + +The words "SPECIAL" and "ECONOMIC" are deleted from Item 10.2b. + +13. General + +The following replaces the terms of Item 13.i: + +Subject to the rights provided to IBM's suppliers and Program developers as provided in Section 10 above (Limitation of Liability), a person who is not a party to this Agreement will have no right under the Contracts (Right of Third Parties) Act to enforce any of its terms. + +TAIWAN + +8.1 Limited Warranty + +The last paragraph is deleted. + +10.1 Items for Which IBM May Be Liable + +The following sentences are deleted: + +This limit also applies to any of IBM's subcontractors and Program developers. It is the maximum for which IBM and its subcontractors and Program developers are collectively responsible. + +EUROPE, MIDDLE EAST, AFRICA (EMEA) COUNTRY AMENDMENTS + +EUROPEAN UNION MEMBER STATES + +8. Warranty and Exclusions + +The following is added to Section 8 (Warranty and Exclusion): + +In the European Union ("EU"), consumers have legal rights under applicable national legislation governing the sale of consumer goods. Such rights are not affected by the provisions set out in this Section 8 (Warranty and Exclusions). The territorial scope of the Limited Warranty is worldwide. + +EU MEMBER STATES AND THE COUNTRIES IDENTIFIED BELOW + +Iceland, Liechtenstein, Norway, Switzerland, Turkey, and any other European country that has enacted local data privacy or protection legislation similar to the EU model. + +13. General + +The following replaces Item 13.e: + +(1) Definitions - For the purposes of this Item 13.e, the following additional definitions apply: + +(a) Business Contact Information - business-related contact information disclosed by Licensee to IBM, including names, job titles, business addresses, telephone numbers and email addresses of Licensee's employees and contractors. For Austria, Italy and Switzerland, Business Contact Information also includes information about Licensee and its contractors as legal entities (for example, Licensee's revenue data and other transactional information) + +(b) Business Contact Personnel - Licensee employees and contractors to whom the Business Contact Information relates. + +(c) Data Protection Authority - the authority established by the Data Protection and Electronic Communications Legislation in the applicable country or, for non-EU countries, the authority responsible for supervising the protection of personal data in that country, or (for any of the foregoing) any duly appointed successor entity thereto. + +(d) Data Protection & Electronic Communications Legislation - (i) the applicable local legislation and regulations in force implementing the requirements of EU Directive 95/46/EC (on the protection of individuals with regard to the processing of personal data and on the free movement of such data) and of EU Directive 2002/58/EC (concerning the processing of personal data and the protection of privacy in the electronic communications sector); or (ii) for non-EU countries, the legislation and/or regulations passed in the applicable country relating to the protection of personal data and the regulation of electronic communications involving personal data, including (for any of the foregoing) any statutory replacement or modification thereof. + +(e) IBM Group - International Business Machines Corporation of Armonk, New York, USA, its subsidiaries, and their respective Business Partners and subcontractors. + +(2) Licensee authorizes IBM: + +(a) to process and use Business Contact Information within IBM Group in support of Licensee including the provision of support services, and for the purpose of furthering the business relationship between Licensee and IBM Group, including, without limitation, contacting Business Contact Personnel (by email or otherwise) and marketing IBM Group products and services (the "Specified Purpose"); and + +(b) to disclose Business Contact Information to other members of IBM Group in pursuit of the Specified Purpose only. + +(3) IBM agrees that all Business Contact Information will be processed in accordance with the Data Protection & Electronic Communications Legislation and will be used only for the Specified Purpose. + +(4) To the extent required by the Data Protection & Electronic Communications Legislation, Licensee represents that (a) it has obtained (or will obtain) any consents from (and has issued (or will issue) any notices to) the Business Contact Personnel as are necessary in order to enable IBM Group to process and use the Business Contact Information for the Specified Purpose. + +(5) Licensee authorizes IBM to transfer Business Contact Information outside the European Economic Area, provided that the transfer is made on contractual terms approved by the Data Protection Authority or the transfer is otherwise permitted under the Data Protection & Electronic Communications Legislation. + +AUSTRIA + +8.2 Exclusions + +The following is deleted from the first paragraph: + +MERCHANTABILITY, SATISFACTORY QUALITY + +10. Limitation of Liability + +The following is added: + +The following limitations and exclusions of IBM's liability do not apply for damages caused by gross negligence or willful misconduct. + +10.1 Items for Which IBM May Be Liable + +The following replaces the first sentence in the first paragraph: + +Circumstances may arise where, because of a default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. + +In the second sentence of the first paragraph, delete entirely the parenthetical phrase: + +"(including fundamental breach, negligence, misrepresentation, or other contract or tort claim)". + +10.2 Items for Which IBM Is Not Liable + +The following replaces Item 10.2b: + +b. indirect damages or consequential damages; or + +BELGIUM, FRANCE, ITALY, AND LUXEMBOURG + +10. Limitation of Liability + +The following replaces the terms of Section 10 (Limitation of Liability) in its entirety: + +Except as otherwise provided by mandatory law: + +10.1 Items for Which IBM May Be Liable + +IBM's entire liability for all claims in the aggregate for any damages and losses that may arise as a consequence of the fulfillment of its obligations under or in connection with this Agreement or due to any other cause related to this Agreement is limited to the compensation of only those damages and losses proved and actually arising as an immediate and direct consequence of the non-fulfillment of such obligations (if IBM is at fault) or of such cause, for a maximum amount equal to the charges (if the Program is subject to fixed term charges, up to twelve months' charges) Licensee paid for the Program that has caused the damages. + +The above limitation will not apply to damages for bodily injuries (including death) and damages to real property and tangible personal property for which IBM is legally liable. + +10.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM OR ANY OF ITS PROGRAM DEVELOPERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: 1) LOSS OF, OR DAMAGE TO, DATA; 2) INCIDENTAL, EXEMPLARY OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; AND / OR 3) LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS, EVEN IF THEY ARISE AS AN IMMEDIATE CONSEQUENCE OF THE EVENT THAT GENERATED THE DAMAGES. + +10.3 Suppliers and Program Developers + +The limitation and exclusion of liability herein agreed applies not only to the activities performed by IBM but also to the activities performed by its suppliers and Program developers, and represents the maximum amount for which IBM as well as its suppliers and Program developers are collectively responsible. + +GERMANY + +8.1 Limited Warranty + +The following is inserted at the beginning of Section 8.1: + +The Warranty Period is twelve months from the date of delivery of the Program to the original Licensee. + +8.2 Exclusions + +Section 8.2 is deleted in its entirety and replaced with the following: + +Section 8.1 defines IBM's entire warranty obligations to Licensee except as otherwise required by applicable statutory law. + +10. Limitation of Liability + +The following replaces the Limitation of Liability section in its entirety: + +a. IBM will be liable without limit for 1) loss or damage caused by a breach of an express guarantee; 2) damages or losses resulting in bodily injury (including death); and 3) damages caused intentionally or by gross negligence. + +b. In the event of loss, damage and frustrated expenditures caused by slight negligence or in breach of essential contractual obligations, IBM will be liable, regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), per claim only up to the greater of 500,000 euro or the charges (if the Program is subject to fixed term charges, up to 12 months' charges) Licensee paid for the Program that caused the loss or damage. A number of defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one default. + +c. In the event of loss, damage and frustrated expenditures caused by slight negligence, IBM will not be liable for indirect or consequential damages, even if IBM was informed about the possibility of such loss or damage. + +d. In case of delay on IBM's part: 1) IBM will pay to Licensee an amount not exceeding the loss or damage caused by IBM's delay and 2) IBM will be liable only in respect of the resulting damages that Licensee suffers, subject to the provisions of Items a and b above. + +13. General + +The following replaces the provisions of 13.g: + +Any claims resulting from this Agreement are subject to a limitation period of three years, except as stated in Section 8.1 (Limited Warranty) of this Agreement. + +The following replaces the provisions of 13.i: + +No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except (to the extent permitted in Section 10 (Limitation of Liability)) for: i) bodily injury (including death); or ii) damage to real or tangible personal property for which (in either case) IBM is legally liable to that third party. + +IRELAND + +8.2 Exclusions + +The following paragraph is added: + +Except as expressly provided in these terms and conditions, or Section 12 of the Sale of Goods Act 1893 as amended by the Sale of Goods and Supply of Services Act, 1980 (the "1980 Act"), all conditions or warranties (express or implied, statutory or otherwise) are hereby excluded including, without limitation, any warranties implied by the Sale of Goods Act 1893 as amended by the 1980 Act (including, for the avoidance of doubt, Section 39 of the 1980 Act). + +IRELAND AND UNITED KINGDOM + +2. Agreement Structure + +The following sentence is added: + +Nothing in this paragraph shall have the effect of excluding or limiting liability for fraud. + +10.1 Items for Which IBM May Be Liable + +The following replaces the first paragraph of the Subsection: + +For the purposes of this section, a "Default" means any act, statement, omission or negligence on the part of IBM in connection with, or in relation to, the subject matter of an Agreement in respect of which IBM is legally liable to Licensee, whether in contract or in tort. A number of Defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one Default. + +Circumstances may arise where, because of a Default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM and except as expressly required by law without the possibility of contractual waiver, IBM's entire liability for any one Default will not exceed the amount of any direct damages, to the extent actually suffered by Licensee as an immediate and direct consequence of the default, up to the greater of (1) 500,000 euro (or the equivalent in local currency) or (2) 125% of the charges (if the Program is subject to fixed term charges, up to 12 months' charges) for the Program that is the subject of the claim. Notwithstanding the foregoing, the amount of any damages for bodily injury (including death) and damage to real property and tangible personal property for which IBM is legally liable is not subject to such limitation. + +10.2 Items for Which IBM is Not Liable + +The following replaces Items 10.2b and 10.2c: + +b. special, incidental, exemplary, or indirect damages or consequential damages; or + +c. wasted management time or lost profits, business, revenue, goodwill, or anticipated savings. + +Z125-3301-14 (07/2011) + + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_cs b/charts/mq-advancedserver/LICENSE_locale/LICENSE_cs new file mode 100644 index 0000000..90dac72 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_cs @@ -0,0 +1,1141 @@ +POZNÁMKA + +Tento dokument obsahuje ní¾e dokumenty Licenèní informace pro více Programù. V ka¾dém dokumentu Licenèní informace je uveden Program(y), k nìmu¾(nim¾) se daný dokument Licenèní informace vztahuje. Platné jsou pouze dokumenty Licenèní informace pro Program(y), k nim¾ si Dr¾itel licence zakoupil oprávnìní. + + +============================================== + + +DÙLE®ITÉ: ÈTÌTE POZORNÌ + +Ní¾e jsou uvedeny dvì licenèní smlouvy. + +1. Mezinárodní licenèní smlouva IBM pro zku¹ební verze programù +2. Mezinárodní licenèní smlouva IBM pro programy + +Jestli¾e Dr¾itel licence získá Program pro úèely produktivního u¾ívání (to znamená pro jiné úèely ne¾ k hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence Mezinárodní licenèní smlouvu IBM pro programy, a to bez jakýchkoliv zmìn. + +Jestli¾e Dr¾itel licence získá Program pro úèely hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace (spoleènì: "Hodnocení"): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence jak (i) Mezinárodní licenèní smlouvu IBM pro zku¹ební verze programù ("Licence na hodnocení"), tak i (ii) Mezinárodní licenèní smlouvu IBM pro programy (IPLA). Obì tyto smlouvy je povinen akceptovat bez jakýchkoliv zmìn. + +Licence na hodnocení bude platit po dobu Hodnocení provádìného Dr¾itelem licence. + +Smlouva IPLA vstoupí automaticky v platnost v pøípadì, ¾e se Dr¾itel licence rozhodne ponechat si Program i po Hodnocení (nebo si zakoupit dal¹í kopie Programu k u¾ívání následnì po období Hodnocení) a s tímto zámìrem uzavøe pøíslu¹nou smlouvu (napøíklad smlouvu IBM International Passport Advantage nebo IBM Passport Advantage Express). + +Licence na hodnocení a smlouva IPLA nenabývají právní úèinnosti soubì¾nì; ¾ádná z nich nemìní tu druhou a jsou na sobì navzájem nezávislé. + +Úplný text ka¾dé z tìchto dvou licenèních smluv je uveden ní¾e. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro zku¹ební verze programù (Z125-5543-05). + +Název Programu (Èíslo Programu): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Na pou¾ívání Programu Dr¾itelem licence se vztahují následující standardní podmínky. + +Období hodnocení + +Období hodnocení zaèíná datem, které si Dr¾itel sjedná dle podmínek této Smlouvy, a konèí po uplynutí 90 dní. + +Podpùrné programy + +Program je licencován jako multiprogramový balík zahrnující ní¾e identifikované Podpùrné programy. Dr¾itel licence je oprávnìn nainstalovat a u¾ívat tyto Podpùrné programy pouze k podpoøe u¾ívání Základního programu Dr¾itelem licence v souladu s touto Smlouvou a v rámci omezení stanovených dokumentem o oprávnìní (Proof of Entitlement), leda¾e by na jiném místì v tomto dokumentu Licenèní informace byl stanoven ¹ir¹í rozsah práv. Formulace "k podpoøe u¾ívání Dr¾itelem licence" bude zahrnovat pouze takové zpùsoby u¾ívání, které jsou nezbytné nebo jinak pøímo souvisejí s licencovaným u¾íváním Základního programu nebo jiného Podpùrného programu. Podpùrné programy nesmí být u¾ívány k ¾ádnému jinému úèelu. Dr¾itel licence není oprávnìn Podpùrné programy pøevádìt nebo dále prodávat nezávisle na Základním programu. K Podpùrnému programu mohou být pøipojeny licenèní podmínky. Tyto podmínky (pokud existují) platí pro u¾ívání tohoto Podpùrného programu Dr¾itelem licence. V pøípadì rozporu podmínek mají pøednost podmínky uvedené v tomto dokumentu Licenèní informace pøed podmínkami Podpùrného programu. Jestli¾e oprávnìní Dr¾itele licence na u¾ívání Programu skonèí, je Dr¾itel licence povinen pøestat pou¾ívat, znièit nebo bezodkladnì vrátit v¹echny kopie Podpùrných programù smluvní stranì, od ní¾ získal Program. Jestli¾e Dr¾itel licence stáhnul Podpùrné programy, je povinen kontaktovat smluvní stranu, od ní¾ zakoupil Program. Jestli¾e chce Dr¾itel licence Podpùrné programy licencovat pro jakékoli u¾ívání pøesahující vý¹e uvedené limity, musí se obrátit za úèelem poøízení pøíslu¹ných licencí na Obchodního zástupce IBM nebo na smluvní stranu, od které Program získal. + +S Programem jsou licencovány následující Podpùrné programy: +IBM WebSphere Application Server Liberty V17.0 + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro programy (Z125-3301-14). + +Název Programu (Èíslo Programu): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Na pou¾ívání Programu Dr¾itelem licence se vztahují následující standardní podmínky. + +?Omezená u¾ivatelská práva + +Jak je popsáno v Mezinárodní licenèní smlouvì IBM pro programy ("IPLA") a v tomto dokumentu Licenèní informace, IBM udìluje Dr¾iteli licence omezené právo k u¾ívání Programu. Toto právo je omezeno na úroveò Oprávnìného u¾ívání, jako je napøíklad Hodnotová jednotka procesoru ("Jednotka PVU"), Hodnotová jednotka prostøedku ("Jednotka RVU"), Hodnotová jednotka ("Jednotka VU"), nebo na jinou specifickou úroveò u¾ívání, za ní¾ Dr¾itel licence zaplatil, jak je dolo¾eno Dokumentem o oprávnìní. U¾ívání Dr¾itelem licence mù¾e být omezeno rovnì¾ na nìjaký specifikovaný stroj nebo na u¾ívání pouze jako Podpùrného programu nebo v souladu s jinými omezeními. Jeliko¾ Dr¾itel licence nezaplatil za celou ekonomickou hodnotu Programu, není povoleno ¾ádné jiné u¾ívání, leda¾e by byly zaplaceny dodateèné poplatky. Kromì toho není Dr¾itel licence oprávnìn u¾ívat Program k poskytování komerèních slu¾eb v oblasti IT jakékoli tøetí stranì nebo k poskytování komerèního hostingu nebo slu¾eb v oblasti sdílení èasu, ani není oprávnìn Program sublicencovat, pùjèovat nebo pronajímat, leda¾e by to bylo výslovnì uvedeno v pøíslu¹ných platných smlouvách, na jejich¾ základì získal Dr¾itel licence oprávnìní k u¾ívání Programu. Dr¾itel licence mù¾e mít na základì úhrady dodateèných poplatkù nebo na základì odli¹ných èi dodateèných podmínek dodateèná práva. IBM si vyhrazuje právo stanovit, zda budou Dr¾iteli licence taková dodateèná práva poskytnuta. + +?Specifikace + +Specifikace Programu naleznete ve souhrnných èláncích Popis a Technické informace, které jsou uvedeny v Oznamovacích letácích Programu. + +Podpùrné programy + +Program je licencován jako multiprogramový balík zahrnující ní¾e identifikované Podpùrné programy. Dr¾itel licence je oprávnìn nainstalovat a u¾ívat tyto Podpùrné programy pouze k podpoøe u¾ívání Základního programu Dr¾itelem licence v souladu s touto Smlouvou a v rámci omezení stanovených dokumentem o oprávnìní (Proof of Entitlement), leda¾e by na jiném místì v tomto dokumentu Licenèní informace byl stanoven ¹ir¹í rozsah práv. Formulace "k podpoøe u¾ívání Dr¾itelem licence" bude zahrnovat pouze takové zpùsoby u¾ívání, které jsou nezbytné nebo jinak pøímo souvisejí s licencovaným u¾íváním Základního programu nebo jiného Podpùrného programu. Podpùrné programy nesmí být u¾ívány k ¾ádnému jinému úèelu. Dr¾itel licence není oprávnìn Podpùrné programy pøevádìt nebo dále prodávat nezávisle na Základním programu. K Podpùrnému programu mohou být pøipojeny licenèní podmínky. Tyto podmínky (pokud existují) platí pro u¾ívání tohoto Podpùrného programu Dr¾itelem licence. V pøípadì rozporu podmínek mají pøednost podmínky uvedené v tomto dokumentu Licenèní informace pøed podmínkami Podpùrného programu. Jestli¾e oprávnìní Dr¾itele licence na u¾ívání Programu skonèí, je Dr¾itel licence povinen pøestat pou¾ívat, znièit nebo bezodkladnì vrátit v¹echny kopie Podpùrných programù smluvní stranì, od ní¾ získal Program. Jestli¾e Dr¾itel licence stáhnul Podpùrné programy, je povinen kontaktovat smluvní stranu, od ní¾ zakoupil Program. Jestli¾e chce Dr¾itel licence Podpùrné programy licencovat pro jakékoli u¾ívání pøesahující vý¹e uvedené limity, musí se obrátit za úèelem poøízení pøíslu¹ných licencí na Obchodního zástupce IBM nebo na smluvní stranu, od které Program získal. + +S Programem jsou licencovány následující Podpùrné programy: +IBM WebSphere Application Server Liberty V17.0 + +Komponenty nepou¾ívané k vytvoøení po¾adovaných oprávnìní + +Pøi urèování poètu oprávnìní, která Dr¾itel licence potøebuje pro instalaci nebo u¾ívání Programu, jsou rozhodující instalace nebo u¾ívání pouze následujících komponent Programu. Jinými slovy, Dr¾itel licence je oprávnìn nainstalovat a pou¾ívat na základì licenèních podmínek následující komponenty Programu, av¹ak tyto komponenty nejsou rozhodující pro stanovení poètu oprávnìní po¾adovaných pro Program. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Redistribuovatelné polo¾ky + +Jestli¾e Program obsahuje komponenty, které jsou Redistribuovatelnými polo¾kami, budou identifikovány v souboru REDIST, který je pøipojen k Programu. Kromì licenèních práv udìlených v této Smlouvì smí Dr¾itel licence distribuovat Redistribuovatelné polo¾ky v souladu s ní¾e uvedenými podmínkami: +1) Redistribuce musí být provádìna pouze ve formì objektového kódu a musí splòovat v¹echny pokyny, instrukce a specifikace obsa¾ené v souborech REDIST pøipojených k Programu nebo v dokumentaci; +2) V pøípadì, ¾e dokumentace pøilo¾ená k Programu výslovnì povoluje Dr¾iteli licence upravovat Redistribuovatelné polo¾ky, musí tyto úpravy dodr¾ovat v¹echny pokyny, instrukce a specifikace obsa¾ené v této dokumentaci a tyto pøípadné modifikace musí být pova¾ovány za Redistribuovatelné polo¾ky; +3) Redistribuovatelné polo¾ky mohou být distribuovány pouze v rámci aplikace Dr¾itele licence, která byla vyvinuta prostøednictvím Programu ("Aplikace Dr¾itele licence"), a to pouze k podpoøe zákazníkù Dr¾itele licence v souvislosti s jejich u¾íváním Aplikace Dr¾itele licence. Aplikace Dr¾itele licence musí tvoøit významnou pøidanou hodnotu, aby Redistribuovatelné polo¾ky nepøedstavovaly pro koncové u¾ivatele softwarových produktù Dr¾itele licence hlavní motivaci k nákupu; +4) Jestli¾e Redistribuovatelné polo¾ky zahrnují rozhraní Java Runtime Environment, musí Dr¾iteli licence do své Aplikace také zahrnout jiné ne¾ Redistribuovatelné Java polo¾ky, leda¾e je tato Aplikace urèena ke spou¹tìní pouze na klasických výpoèetních zaøízeních (napøíklad pøenosné poèítaèe, stolní poèítaèe a servery), nikoliv na pøenosných nebo jiných pervazivních zaøízeních (napøíklad zaøízení obsahující mikroprocesory, jejich¾ jejich primárním úèelem není výpoèetní zpracování); +5) Dr¾itel licence nesmí odstraòovat ¾ádné soubory obsahující copyrightové výhrady nebo soubory Notices obsa¾ené v Redistribuovatelných polo¾kách; +6) Dr¾itel licence musí IBM, její dodavatele nebo distributory zbavit odpovìdnosti v souvislosti se v¹emi nároky vzniklými na základì u¾ívání nebo distribuce Aplikace Dr¾itele licence; +7) Dr¾itel licence nesmí pou¾ívat stejnou cestu, jakou mají pùvodní Redistribuovatelné soubory/moduly; +8) Dr¾itel licence nesmí u¾ívat názvy nebo ochranné známky IBM nebo jejích dodavatelù èi distributorù ve spojení s marketingem Aplikace Dr¾itele licence, pokud k tomu pøedem nezíská písemný souhlas IBM nebo pøíslu¹ného dodavatele èi distributora; +9) IBM, její dodavatelé a distributoøi poskytují tyto Redistribuovatelné polo¾ky a související dokumentaci bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICKÉHO NÁROKU, NEPORU©ENÍ PRÁV TØETÍCH STRAN A VYPLÝVAJÍCÍCH ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL; +10) Dr¾itel licence odpovídá za ve¹kerou technickou asistenci pro své Aplikace a jakékoliv zmìny Redistribuovatelných polo¾ek; a +11) Licenèní smlouva, kterou uzavøel Dr¾itel licence s koncovým u¾ivatelem Aplikace Dr¾itele licence, musí informovat koncového u¾ivatele o tom, ¾e Redistribuovatelné polo¾ky nebo jejich modifikace nesmí být a) u¾ívány k jiným úèelùm ne¾ k aktivaci Aplikace Dr¾itele licence, ii) kopírovány (s výjimkou zálohování), iii) dále distribuovány nebo pøevádìny bez Aplikace Dr¾itele licence nebo iv) zpìtnì pøekládány, zpìtnì kompilovány nebo jiným zpùsobem pøekládány, pokud zákon výslovnì nepovoluje výjimky, a bez mo¾nosti smluvního zøeknutí se. Kromì toho musí licenèní smlouva Dr¾itele licence poskytovat IBM pøinejmen¹ím stejnou ochranu jako podmínky této Smlouvy. + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + +U Komponent ve zdrojovém kódu a Vzorových materiálù uvedených v souboru REDIST, který je souèástí Programu, mù¾e Dr¾itel licence redistribuovat upravené verze tìchto Komponent ve zdrojovém kódu nebo Vzorových materiálù v souladu s podmínkami této licence a s pokyny uvedenými v souboru REDIST. + +Na pou¾ívání Programu Dr¾itelem licence se mohou vztahovat následující mìrné jednotky. + +Jednotka PVU + +Jednotka PVU (Processor Value Unit) je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Poèet vy¾adovaných oprávnìní k jednotkám PVU je zalo¾en na technologii procesoru (definované v Tabulce PVU èlenìné podle Prodejce procesoru, Znaèky, Typu a Èísla modelu, která je uvedena na webové adrese http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) a na poètu procesorù zpøístupnìných pro Program. IBM i nadále definuje procesor pro úèely licencování na základì jednotek PVU jako ka¾dé procesorové jádro na èipu. Dvoujádrový procesorový èip má napøíklad dvì procesorová jádra. + +Dr¾itel licence mù¾e implementovat Program prostøednictvím licencování buï na základì Plné kapacity (Full Capacity), nebo Virtualizaèní kapacity (takzvané dílèí kapacity) v souladu s licenèními podmínkami Passport Advantage pro licencování na základì dílèí kapacity (viz ní¾e uvedené webové stránky). Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Plné kapacity, musí získat oprávnìní k jednotkám PVU postaèující pro pokrytí v¹ech aktivovaných procesorových jader* v prostøedí fyzického hardwaru, která jsou dostupná pro Program nebo která jsou spravována Programem, s výjimkou takových serverù, z nich¾ byl Program trvale odstranìn. Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Virtualizaèní kapacity, musí získat oprávnìní postaèující pro pokrytí v¹ech aktivovaných procesorových jader, která jsou pøístupná pro Program nebo jsou spravována Programem, jak je definováno v souladu s dokumentem Virtualization Capacity License Counting Rules, který je k dispozici na adrese http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivované procesorové jádro je takové procesorové jádro, které je dostupné pro u¾ívání v rámci fyzického nebo virtuálního serveru, pøièem¾ v obou pøípadech nezále¾í na tom, zda kapacita procesorových jader mù¾e být nebo je omezena prostøednictvím virtualizaèních technologií, pøíkazù operaèního systému, nastavení BIOS nebo podobnými omezeními. + +Virtuální jádro procesoru + +Virtuální jádro procesoru je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Fyzický server je fyzický poèítaè, který se skládá z procesních jednotek, pamìti a funkcí vstupu a výstupu, a který provádí po¾adované procedury, pøíkazy nebo aplikace pro jednoho èi nìkolik u¾ivatelù nebo klientských zaøízení. V pøípadech, kdy jsou vyu¾ívány stojany (rack), skøínì pro servery typu "blade" anebo jiné podobné vybavení, je ka¾dé samostatné fyzické zaøízení (napøíklad blade server nebo zaøízení montované do stojanu (rack)) obsahující po¾adované komponenty pova¾ováno za samostatný Fyzický server. Virtuální server je buï virtuální poèítaè vytvoøený prostøednictvím funkce pro rozdìlení Fyzického serveru na logické oddíly, nebo nerozdìlený Fyzický server. Jádro procesoru (bì¾nì nazývané jako procesor nebo CPU) je funkèní jednotka výpoèetního zaøízení, která interpretuje a provádí instrukce. Jádro procesoru tvoøí alespoò jedna øídící jednotka instrukcí a jedna nebo více aritmetických nebo logických jednotek. Virtuální jádro procesoru je Jádro procesoru nerozdìleného Fyzického serveru nebo virtuální jádro pøiøazené Virtuálnímu serveru. Dr¾itel licence je povinen získat oprávnìní pro ka¾dé Virtuální jádro procesoru, které je pro Program k dispozici. + +Pro ka¾dý Fyzický server musí Dr¾itel licence získat dostateèný poèet oprávnìní pro 1) souèet v¹ech dostupných Virtuálních jader procesoru na v¹ech Virtuálních serverech dostupných pro Program nebo 2) pro v¹echna dostupná Jádra procesoru na Fyzickém serveru, podle toho, který poèet je ni¾¹í. + +Kromì vý¹e uvedeného se na pou¾ití Programu Dr¾itelem licence vztahují následující podmínky. + +Konfigurace Neèinného pohotovostního re¾imu + +Pro úèely tohoto èlánku je konfigurací Neèinného pohotovostního re¾imu taková konfigurace, v ní¾ je kopie Programu nainstalována na serveru, který tvoøí souèást øe¹ení pro zaji¹tìní vysoké dostupnosti a na nìj¾ se Program pøepne v pøípadì, ¾e kopie Programu na aktivním serveru pøestane být pou¾itelná. Server je pova¾ován za server v "neèinném re¾imu" pouze v pøípadì, pokud je po dobu, ne¾ dojde k pøekonání selhání, pou¾íván výluènì k administraèním akcím slou¾ícím na podporu scénáøù pøekonání selhání. + +Program nesmí být instalován na serveru v Neèinném pohotovostním re¾imu s výjimkou pøípadu, kdy je k tomu øádnì licencován. + +Je-li Program u¾íván v konfiguraci Neèinného pohotovostního re¾imu s funkcí Multi-Instance Queue Manager, smí být kopie Programu pro úèely zálohování ulo¾ena a spu¹tìna na serveru v Neèinném pohotovostním re¾imu, ale musí zùstat v "neèinném re¾imu" a nesmí být u¾ívána k vykonávání produktivní èinnosti jakéhokoli druhu, leda¾e by do¹lo k pøepnutí aktivního serveru na server v Neèinném pohotovostním re¾imu (v rámci pøekonání selhání); v takovém pøípadì smí být k vykonávání produktivní èinnosti po dobu pøekonávání selhání pou¾ívána kopie pro Neèinný pohotovostní re¾im. + +Je-li Program u¾íván v konfiguraci Neèinného pohotovostního re¾imu s jinými systémy pro zaji¹tìní Vysoké dostupnosti, smí být kopie Programu pro úèely zálohování ulo¾ena na serveru v Neèinném pohotovostním re¾imu, nesmí v¹ak být spu¹tìna (a proto nesmí být u¾ívána k vykonávání produktivní èinnosti jakéhokoli druhu), bude v¹ak spou¹tìna automaticky prostøednictvím komponent pro zaji¹tìní Vysoké dostupnosti v pøípadì selhání aktivního serveru; v takovém pøípadì smí být k vykonávání produktivní èinnosti po dobu pøekonávání selhání pou¾ívána kopie pro Neèinný pohotovostní re¾im. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +DÙLE®ITÉ: ÈTÌTE POZORNÌ + +Ní¾e jsou uvedeny dvì licenèní smlouvy. + +1. Mezinárodní licenèní smlouva IBM pro zku¹ební verze programù +2. Mezinárodní licenèní smlouva IBM pro programy + +Jestli¾e Dr¾itel licence získá Program pro úèely produktivního u¾ívání (to znamená pro jiné úèely ne¾ k hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence Mezinárodní licenèní smlouvu IBM pro programy, a to bez jakýchkoliv zmìn. + +Jestli¾e Dr¾itel licence získá Program pro úèely hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace (spoleènì: "Hodnocení"): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence jak (i) Mezinárodní licenèní smlouvu IBM pro zku¹ební verze programù ("Licence na hodnocení"), tak i (ii) Mezinárodní licenèní smlouvu IBM pro programy (IPLA). Obì tyto smlouvy je povinen akceptovat bez jakýchkoliv zmìn. + +Licence na hodnocení bude platit po dobu Hodnocení provádìného Dr¾itelem licence. + +Smlouva IPLA vstoupí automaticky v platnost v pøípadì, ¾e se Dr¾itel licence rozhodne ponechat si Program i po Hodnocení (nebo si zakoupit dal¹í kopie Programu k u¾ívání následnì po období Hodnocení) a s tímto zámìrem uzavøe pøíslu¹nou smlouvu (napøíklad smlouvu IBM International Passport Advantage nebo IBM Passport Advantage Express). + +Licence na hodnocení a smlouva IPLA nenabývají právní úèinnosti soubì¾nì; ¾ádná z nich nemìní tu druhou a jsou na sobì navzájem nezávislé. + +Úplný text ka¾dé z tìchto dvou licenèních smluv je uveden ní¾e. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro zku¹ební verze programù (Z125-5543-05). + +Název Programu (Èíslo Programu): +IBM MQ Advanced V9.0.3 (Evaluation) + +Na pou¾ívání Programu Dr¾itelem licence se vztahují následující standardní podmínky. + +Období hodnocení + +Období hodnocení zaèíná datem, které si Dr¾itel sjedná dle podmínek této Smlouvy, a konèí po uplynutí 90 dní. + +Programy v balíku + +Program je licencován jako multiproduktový balík sestávající z ní¾e uvedených Programù v balíku. Dr¾itel licence je oprávnìn tyto Programy v balíku nainstalovat a pou¾ívat v souladu s omezeními uvedenými v dokumentech o oprávnìní (Proofs of Entitlement) pro Program a v tomto dokumentu Licenèní informace. Dr¾itel licence není oprávnìn Programy v balíku pøevádìt nebo dále prodávat oddìlenì od multiproduktového balíku. Program v balíku mohou doprovázet licenèní podmínky, a tyto pøípadné licenèní podmínky se pak vztahují na u¾ívání Programu v balíku Dr¾itelem licence. V pøípadì rozporu mají podmínky v tomto dokumentu Licenèní informace pøednost pøed podmínkami u¾ívání Programu v balíku. Poté, co právo Dr¾itele licence pou¾ívat Program skonèí nebo je ukonèeno, musí Dr¾itel licence pøestat pou¾ívat ve¹keré kopie Programù v balíku, znièit je nebo je okam¾itì vrátit stranì, od které Dr¾itel licence Program získal. Pokud Dr¾itel licence Programy v balíku stáhnul, mìl by Dr¾itel licence kontaktovat stranu, od které Dr¾itel licence Program získal. Pokud chce Dr¾itel licence Programy v balíku licencovat pro jakékoli pou¾ití nad rámec vý¹e uvedených omezení, kontaktujte za úèelem získání pøíslu¹né licence prodejního zástupce IBM nebo stranu, od které Dr¾itel licence Program získal. + +Spoleènì s Programem jsou licencovány následující Programy v balíku: +IBM MQ V9.0.3 + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro programy (Z125-3301-14). + +Název Programu (Èíslo Programu): +IBM MQ Advanced V9.0.3 (5724-H72) + +Na pou¾ívání Programu Dr¾itelem licence se vztahují následující standardní podmínky. + +?Omezená u¾ivatelská práva + +Jak je popsáno v Mezinárodní licenèní smlouvì IBM pro programy ("IPLA") a v tomto dokumentu Licenèní informace, IBM udìluje Dr¾iteli licence omezené právo k u¾ívání Programu. Toto právo je omezeno na úroveò Oprávnìného u¾ívání, jako je napøíklad Hodnotová jednotka procesoru ("Jednotka PVU"), Hodnotová jednotka prostøedku ("Jednotka RVU"), Hodnotová jednotka ("Jednotka VU"), nebo na jinou specifickou úroveò u¾ívání, za ní¾ Dr¾itel licence zaplatil, jak je dolo¾eno Dokumentem o oprávnìní. U¾ívání Dr¾itelem licence mù¾e být omezeno rovnì¾ na nìjaký specifikovaný stroj nebo na u¾ívání pouze jako Podpùrného programu nebo v souladu s jinými omezeními. Jeliko¾ Dr¾itel licence nezaplatil za celou ekonomickou hodnotu Programu, není povoleno ¾ádné jiné u¾ívání, leda¾e by byly zaplaceny dodateèné poplatky. Kromì toho není Dr¾itel licence oprávnìn u¾ívat Program k poskytování komerèních slu¾eb v oblasti IT jakékoli tøetí stranì nebo k poskytování komerèního hostingu nebo slu¾eb v oblasti sdílení èasu, ani není oprávnìn Program sublicencovat, pùjèovat nebo pronajímat, leda¾e by to bylo výslovnì uvedeno v pøíslu¹ných platných smlouvách, na jejich¾ základì získal Dr¾itel licence oprávnìní k u¾ívání Programu. Dr¾itel licence mù¾e mít na základì úhrady dodateèných poplatkù nebo na základì odli¹ných èi dodateèných podmínek dodateèná práva. IBM si vyhrazuje právo stanovit, zda budou Dr¾iteli licence taková dodateèná práva poskytnuta. + +?Specifikace + +Specifikace Programu naleznete ve souhrnných èláncích Popis a Technické informace, které jsou uvedeny v Oznamovacích letácích Programu. + +Programy v balíku + +Program je licencován jako multiproduktový balík sestávající z ní¾e uvedených Programù v balíku. Dr¾itel licence je oprávnìn tyto Programy v balíku nainstalovat a pou¾ívat v souladu s omezeními uvedenými v dokumentech o oprávnìní (Proofs of Entitlement) pro Program a v tomto dokumentu Licenèní informace. Dr¾itel licence není oprávnìn Programy v balíku pøevádìt nebo dále prodávat oddìlenì od multiproduktového balíku. Program v balíku mohou doprovázet licenèní podmínky, a tyto pøípadné licenèní podmínky se pak vztahují na u¾ívání Programu v balíku Dr¾itelem licence. V pøípadì rozporu mají podmínky v tomto dokumentu Licenèní informace pøednost pøed podmínkami u¾ívání Programu v balíku. Poté, co právo Dr¾itele licence pou¾ívat Program skonèí nebo je ukonèeno, musí Dr¾itel licence pøestat pou¾ívat ve¹keré kopie Programù v balíku, znièit je nebo je okam¾itì vrátit stranì, od které Dr¾itel licence Program získal. Pokud Dr¾itel licence Programy v balíku stáhnul, mìl by Dr¾itel licence kontaktovat stranu, od které Dr¾itel licence Program získal. Pokud chce Dr¾itel licence Programy v balíku licencovat pro jakékoli pou¾ití nad rámec vý¹e uvedených omezení, kontaktujte za úèelem získání pøíslu¹né licence prodejního zástupce IBM nebo stranu, od které Dr¾itel licence Program získal. + +Spoleènì s Programem jsou licencovány následující Programy v balíku: +IBM MQ V9.0.3 + +Komponenty nepou¾ívané k vytvoøení po¾adovaných oprávnìní + +Pøi urèování poètu oprávnìní, která Dr¾itel licence potøebuje pro instalaci nebo u¾ívání Programu, jsou rozhodující instalace nebo u¾ívání pouze následujících komponent Programu. Jinými slovy, Dr¾itel licence je oprávnìn nainstalovat a pou¾ívat na základì licenèních podmínek následující komponenty Programu, av¹ak tyto komponenty nejsou rozhodující pro stanovení poètu oprávnìní po¾adovaných pro Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + +Na pou¾ívání Programu Dr¾itelem licence se mohou vztahovat následující mìrné jednotky. + +Jednotka PVU + +Jednotka PVU (Processor Value Unit) je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Poèet vy¾adovaných oprávnìní k jednotkám PVU je zalo¾en na technologii procesoru (definované v Tabulce PVU èlenìné podle Prodejce procesoru, Znaèky, Typu a Èísla modelu, která je uvedena na webové adrese http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) a na poètu procesorù zpøístupnìných pro Program. IBM i nadále definuje procesor pro úèely licencování na základì jednotek PVU jako ka¾dé procesorové jádro na èipu. Dvoujádrový procesorový èip má napøíklad dvì procesorová jádra. + +Dr¾itel licence mù¾e implementovat Program prostøednictvím licencování buï na základì Plné kapacity (Full Capacity), nebo Virtualizaèní kapacity (takzvané dílèí kapacity) v souladu s licenèními podmínkami Passport Advantage pro licencování na základì dílèí kapacity (viz ní¾e uvedené webové stránky). Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Plné kapacity, musí získat oprávnìní k jednotkám PVU postaèující pro pokrytí v¹ech aktivovaných procesorových jader* v prostøedí fyzického hardwaru, která jsou dostupná pro Program nebo která jsou spravována Programem, s výjimkou takových serverù, z nich¾ byl Program trvale odstranìn. Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Virtualizaèní kapacity, musí získat oprávnìní postaèující pro pokrytí v¹ech aktivovaných procesorových jader, která jsou pøístupná pro Program nebo jsou spravována Programem, jak je definováno v souladu s dokumentem Virtualization Capacity License Counting Rules, který je k dispozici na adrese http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivované procesorové jádro je takové procesorové jádro, které je dostupné pro u¾ívání v rámci fyzického nebo virtuálního serveru, pøièem¾ v obou pøípadech nezále¾í na tom, zda kapacita procesorových jader mù¾e být nebo je omezena prostøednictvím virtualizaèních technologií, pøíkazù operaèního systému, nastavení BIOS nebo podobnými omezeními. + +Virtuální jádro procesoru + +Virtuální jádro procesoru je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Fyzický server je fyzický poèítaè, který se skládá z procesních jednotek, pamìti a funkcí vstupu a výstupu, a který provádí po¾adované procedury, pøíkazy nebo aplikace pro jednoho èi nìkolik u¾ivatelù nebo klientských zaøízení. V pøípadech, kdy jsou vyu¾ívány stojany (rack), skøínì pro servery typu "blade" anebo jiné podobné vybavení, je ka¾dé samostatné fyzické zaøízení (napøíklad blade server nebo zaøízení montované do stojanu (rack)) obsahující po¾adované komponenty pova¾ováno za samostatný Fyzický server. Virtuální server je buï virtuální poèítaè vytvoøený prostøednictvím funkce pro rozdìlení Fyzického serveru na logické oddíly, nebo nerozdìlený Fyzický server. Jádro procesoru (bì¾nì nazývané jako procesor nebo CPU) je funkèní jednotka výpoèetního zaøízení, která interpretuje a provádí instrukce. Jádro procesoru tvoøí alespoò jedna øídící jednotka instrukcí a jedna nebo více aritmetických nebo logických jednotek. Virtuální jádro procesoru je Jádro procesoru nerozdìleného Fyzického serveru nebo virtuální jádro pøiøazené Virtuálnímu serveru. Dr¾itel licence je povinen získat oprávnìní pro ka¾dé Virtuální jádro procesoru, které je pro Program k dispozici. + +Pro ka¾dý Fyzický server musí Dr¾itel licence získat dostateèný poèet oprávnìní pro 1) souèet v¹ech dostupných Virtuálních jader procesoru na v¹ech Virtuálních serverech dostupných pro Program nebo 2) pro v¹echna dostupná Jádra procesoru na Fyzickém serveru, podle toho, který poèet je ni¾¹í. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +DÙLE®ITÉ: ÈTÌTE POZORNÌ + +Ní¾e jsou uvedeny dvì licenèní smlouvy. + +1. Mezinárodní licenèní smlouva IBM pro zku¹ební verze programù +2. Mezinárodní licenèní smlouva IBM pro programy + +Jestli¾e Dr¾itel licence získá Program pro úèely produktivního u¾ívání (to znamená pro jiné úèely ne¾ k hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence Mezinárodní licenèní smlouvu IBM pro programy, a to bez jakýchkoliv zmìn. + +Jestli¾e Dr¾itel licence získá Program pro úèely hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace (spoleènì: "Hodnocení"): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence jak (i) Mezinárodní licenèní smlouvu IBM pro zku¹ební verze programù ("Licence na hodnocení"), tak i (ii) Mezinárodní licenèní smlouvu IBM pro programy (IPLA). Obì tyto smlouvy je povinen akceptovat bez jakýchkoliv zmìn. + +Licence na hodnocení bude platit po dobu Hodnocení provádìného Dr¾itelem licence. + +Smlouva IPLA vstoupí automaticky v platnost v pøípadì, ¾e se Dr¾itel licence rozhodne ponechat si Program i po Hodnocení (nebo si zakoupit dal¹í kopie Programu k u¾ívání následnì po období Hodnocení) a s tímto zámìrem uzavøe pøíslu¹nou smlouvu (napøíklad smlouvu IBM International Passport Advantage nebo IBM Passport Advantage Express). + +Licence na hodnocení a smlouva IPLA nenabývají právní úèinnosti soubì¾nì; ¾ádná z nich nemìní tu druhou a jsou na sobì navzájem nezávislé. + +Úplný text ka¾dé z tìchto dvou licenèních smluv je uveden ní¾e. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro zku¹ební verze programù (Z125-5543-05). + +Název Programu (Èíslo Programu): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Na pou¾ívání Programu Dr¾itelem licence se vztahují následující standardní podmínky. + +Období hodnocení + +Období hodnocení zaèíná datem, které si Dr¾itel sjedná dle podmínek této Smlouvy, a konèí po uplynutí 90 dní. + +Programy v balíku + +Program je licencován jako multiproduktový balík sestávající z ní¾e uvedených Programù v balíku. Dr¾itel licence je oprávnìn tyto Programy v balíku nainstalovat a pou¾ívat v souladu s omezeními uvedenými v dokumentech o oprávnìní (Proofs of Entitlement) pro Program a v tomto dokumentu Licenèní informace. Dr¾itel licence není oprávnìn Programy v balíku pøevádìt nebo dále prodávat oddìlenì od multiproduktového balíku. Program v balíku mohou doprovázet licenèní podmínky, a tyto pøípadné licenèní podmínky se pak vztahují na u¾ívání Programu v balíku Dr¾itelem licence. V pøípadì rozporu mají podmínky v tomto dokumentu Licenèní informace pøednost pøed podmínkami u¾ívání Programu v balíku. Poté, co právo Dr¾itele licence pou¾ívat Program skonèí nebo je ukonèeno, musí Dr¾itel licence pøestat pou¾ívat ve¹keré kopie Programù v balíku, znièit je nebo je okam¾itì vrátit stranì, od které Dr¾itel licence Program získal. Pokud Dr¾itel licence Programy v balíku stáhnul, mìl by Dr¾itel licence kontaktovat stranu, od které Dr¾itel licence Program získal. Pokud chce Dr¾itel licence Programy v balíku licencovat pro jakékoli pou¾ití nad rámec vý¹e uvedených omezení, kontaktujte za úèelem získání pøíslu¹né licence prodejního zástupce IBM nebo stranu, od které Dr¾itel licence Program získal. + +Spoleènì s Programem jsou licencovány následující Programy v balíku: +IBM MQ Idle Standby V9.0.3 + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro programy (Z125-3301-14). + +Název Programu (Èíslo Programu): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Na pou¾ívání Programu Dr¾itelem licence se vztahují následující standardní podmínky. + +?Omezená u¾ivatelská práva + +Jak je popsáno v Mezinárodní licenèní smlouvì IBM pro programy ("IPLA") a v tomto dokumentu Licenèní informace, IBM udìluje Dr¾iteli licence omezené právo k u¾ívání Programu. Toto právo je omezeno na úroveò Oprávnìného u¾ívání, jako je napøíklad Hodnotová jednotka procesoru ("Jednotka PVU"), Hodnotová jednotka prostøedku ("Jednotka RVU"), Hodnotová jednotka ("Jednotka VU"), nebo na jinou specifickou úroveò u¾ívání, za ní¾ Dr¾itel licence zaplatil, jak je dolo¾eno Dokumentem o oprávnìní. U¾ívání Dr¾itelem licence mù¾e být omezeno rovnì¾ na nìjaký specifikovaný stroj nebo na u¾ívání pouze jako Podpùrného programu nebo v souladu s jinými omezeními. Jeliko¾ Dr¾itel licence nezaplatil za celou ekonomickou hodnotu Programu, není povoleno ¾ádné jiné u¾ívání, leda¾e by byly zaplaceny dodateèné poplatky. Kromì toho není Dr¾itel licence oprávnìn u¾ívat Program k poskytování komerèních slu¾eb v oblasti IT jakékoli tøetí stranì nebo k poskytování komerèního hostingu nebo slu¾eb v oblasti sdílení èasu, ani není oprávnìn Program sublicencovat, pùjèovat nebo pronajímat, leda¾e by to bylo výslovnì uvedeno v pøíslu¹ných platných smlouvách, na jejich¾ základì získal Dr¾itel licence oprávnìní k u¾ívání Programu. Dr¾itel licence mù¾e mít na základì úhrady dodateèných poplatkù nebo na základì odli¹ných èi dodateèných podmínek dodateèná práva. IBM si vyhrazuje právo stanovit, zda budou Dr¾iteli licence taková dodateèná práva poskytnuta. + +?Specifikace + +Specifikace Programu naleznete ve souhrnných èláncích Popis a Technické informace, které jsou uvedeny v Oznamovacích letácích Programu. + +Programy v balíku + +Program je licencován jako multiproduktový balík sestávající z ní¾e uvedených Programù v balíku. Dr¾itel licence je oprávnìn tyto Programy v balíku nainstalovat a pou¾ívat v souladu s omezeními uvedenými v dokumentech o oprávnìní (Proofs of Entitlement) pro Program a v tomto dokumentu Licenèní informace. Dr¾itel licence není oprávnìn Programy v balíku pøevádìt nebo dále prodávat oddìlenì od multiproduktového balíku. Program v balíku mohou doprovázet licenèní podmínky, a tyto pøípadné licenèní podmínky se pak vztahují na u¾ívání Programu v balíku Dr¾itelem licence. V pøípadì rozporu mají podmínky v tomto dokumentu Licenèní informace pøednost pøed podmínkami u¾ívání Programu v balíku. Poté, co právo Dr¾itele licence pou¾ívat Program skonèí nebo je ukonèeno, musí Dr¾itel licence pøestat pou¾ívat ve¹keré kopie Programù v balíku, znièit je nebo je okam¾itì vrátit stranì, od které Dr¾itel licence Program získal. Pokud Dr¾itel licence Programy v balíku stáhnul, mìl by Dr¾itel licence kontaktovat stranu, od které Dr¾itel licence Program získal. Pokud chce Dr¾itel licence Programy v balíku licencovat pro jakékoli pou¾ití nad rámec vý¹e uvedených omezení, kontaktujte za úèelem získání pøíslu¹né licence prodejního zástupce IBM nebo stranu, od které Dr¾itel licence Program získal. + +Spoleènì s Programem jsou licencovány následující Programy v balíku: +IBM MQ Idle Standby V9.0.3 + +Komponenty nepou¾ívané k vytvoøení po¾adovaných oprávnìní + +Pøi urèování poètu oprávnìní, která Dr¾itel licence potøebuje pro instalaci nebo u¾ívání Programu, jsou rozhodující instalace nebo u¾ívání pouze následujících komponent Programu. Jinými slovy, Dr¾itel licence je oprávnìn nainstalovat a pou¾ívat na základì licenèních podmínek následující komponenty Programu, av¹ak tyto komponenty nejsou rozhodující pro stanovení poètu oprávnìní po¾adovaných pro Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + +Na pou¾ívání Programu Dr¾itelem licence se mohou vztahovat následující mìrné jednotky. + +Jednotka PVU + +Jednotka PVU (Processor Value Unit) je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Poèet vy¾adovaných oprávnìní k jednotkám PVU je zalo¾en na technologii procesoru (definované v Tabulce PVU èlenìné podle Prodejce procesoru, Znaèky, Typu a Èísla modelu, která je uvedena na webové adrese http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) a na poètu procesorù zpøístupnìných pro Program. IBM i nadále definuje procesor pro úèely licencování na základì jednotek PVU jako ka¾dé procesorové jádro na èipu. Dvoujádrový procesorový èip má napøíklad dvì procesorová jádra. + +Dr¾itel licence mù¾e implementovat Program prostøednictvím licencování buï na základì Plné kapacity (Full Capacity), nebo Virtualizaèní kapacity (takzvané dílèí kapacity) v souladu s licenèními podmínkami Passport Advantage pro licencování na základì dílèí kapacity (viz ní¾e uvedené webové stránky). Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Plné kapacity, musí získat oprávnìní k jednotkám PVU postaèující pro pokrytí v¹ech aktivovaných procesorových jader* v prostøedí fyzického hardwaru, která jsou dostupná pro Program nebo která jsou spravována Programem, s výjimkou takových serverù, z nich¾ byl Program trvale odstranìn. Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Virtualizaèní kapacity, musí získat oprávnìní postaèující pro pokrytí v¹ech aktivovaných procesorových jader, která jsou pøístupná pro Program nebo jsou spravována Programem, jak je definováno v souladu s dokumentem Virtualization Capacity License Counting Rules, který je k dispozici na adrese http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivované procesorové jádro je takové procesorové jádro, které je dostupné pro u¾ívání v rámci fyzického nebo virtuálního serveru, pøièem¾ v obou pøípadech nezále¾í na tom, zda kapacita procesorových jader mù¾e být nebo je omezena prostøednictvím virtualizaèních technologií, pøíkazù operaèního systému, nastavení BIOS nebo podobnými omezeními. + +Kromì vý¹e uvedeného se na pou¾ití Programu Dr¾itelem licence vztahují následující podmínky. + +Konfigurace Neèinného pohotovostního re¾imu + +Pro úèely tohoto èlánku je konfigurací Neèinného pohotovostního re¾imu taková konfigurace, v ní¾ je kopie Programu nainstalována na serveru, který tvoøí souèást øe¹ení pro zaji¹tìní vysoké dostupnosti a na nìj¾ se Program pøepne v pøípadì, ¾e kopie Programu na aktivním serveru pøestane být pou¾itelná. Server je pova¾ován za server v "neèinném re¾imu" pouze v pøípadì, pokud je po dobu, ne¾ dojde k pøekonání selhání, pou¾íván výluènì k administraèním akcím slou¾ícím na podporu scénáøù pøekonání selhání. + +Program nesmí být instalován na serveru v Neèinném pohotovostním re¾imu s výjimkou pøípadu, kdy je k tomu øádnì licencován. + +Je-li Program u¾íván v konfiguraci Neèinného pohotovostního re¾imu s funkcí Multi-Instance Queue Manager, smí být kopie Programu pro úèely zálohování ulo¾ena a spu¹tìna na serveru v Neèinném pohotovostním re¾imu, ale musí zùstat v "neèinném re¾imu" a nesmí být u¾ívána k vykonávání produktivní èinnosti jakéhokoli druhu, leda¾e by do¹lo k pøepnutí aktivního serveru na server v Neèinném pohotovostním re¾imu (v rámci pøekonání selhání); v takovém pøípadì smí být k vykonávání produktivní èinnosti po dobu pøekonávání selhání pou¾ívána kopie pro Neèinný pohotovostní re¾im. + +Je-li Program u¾íván v konfiguraci Neèinného pohotovostního re¾imu s jinými systémy pro zaji¹tìní Vysoké dostupnosti, smí být kopie Programu pro úèely zálohování ulo¾ena na serveru v Neèinném pohotovostním re¾imu, nesmí v¹ak být spu¹tìna (a proto nesmí být u¾ívána k vykonávání produktivní èinnosti jakéhokoli druhu), bude v¹ak spou¹tìna automaticky prostøednictvím komponent pro zaji¹tìní Vysoké dostupnosti v pøípadì selhání aktivního serveru; v takovém pøípadì smí být k vykonávání produktivní èinnosti po dobu pøekonávání selhání pou¾ívána kopie pro Neèinný pohotovostní re¾im. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +DÙLE®ITÉ: ÈTÌTE POZORNÌ + +Ní¾e jsou uvedeny dvì licenèní smlouvy. + +1. Mezinárodní licenèní smlouva IBM pro zku¹ební verze programù +2. Mezinárodní licenèní smlouva IBM pro programy + +Jestli¾e Dr¾itel licence získá Program pro úèely produktivního u¾ívání (to znamená pro jiné úèely ne¾ k hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence Mezinárodní licenèní smlouvu IBM pro programy, a to bez jakýchkoliv zmìn. + +Jestli¾e Dr¾itel licence získá Program pro úèely hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace (spoleènì: "Hodnocení"): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence jak (i) Mezinárodní licenèní smlouvu IBM pro zku¹ební verze programù ("Licence na hodnocení"), tak i (ii) Mezinárodní licenèní smlouvu IBM pro programy (IPLA). Obì tyto smlouvy je povinen akceptovat bez jakýchkoliv zmìn. + +Licence na hodnocení bude platit po dobu Hodnocení provádìného Dr¾itelem licence. + +Smlouva IPLA vstoupí automaticky v platnost v pøípadì, ¾e se Dr¾itel licence rozhodne ponechat si Program i po Hodnocení (nebo si zakoupit dal¹í kopie Programu k u¾ívání následnì po období Hodnocení) a s tímto zámìrem uzavøe pøíslu¹nou smlouvu (napøíklad smlouvu IBM International Passport Advantage nebo IBM Passport Advantage Express). + +Licence na hodnocení a smlouva IPLA nenabývají právní úèinnosti soubì¾nì; ¾ádná z nich nemìní tu druhou a jsou na sobì navzájem nezávislé. + +Úplný text ka¾dé z tìchto dvou licenèních smluv je uveden ní¾e. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro zku¹ební verze programù (Z125-5543-05). + +Název Programu (Èíslo Programu): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Na pou¾ívání Programu Dr¾itelem licence se vztahují následující standardní podmínky. + +Období hodnocení + +Období hodnocení zaèíná datem, které si Dr¾itel sjedná dle podmínek této Smlouvy, a konèí po uplynutí 90 dní. + +Programy v balíku + +Program je licencován jako multiproduktový balík sestávající z ní¾e uvedených Programù v balíku. Dr¾itel licence je oprávnìn tyto Programy v balíku nainstalovat a pou¾ívat v souladu s omezeními uvedenými v dokumentech o oprávnìní (Proofs of Entitlement) pro Program a v tomto dokumentu Licenèní informace. Dr¾itel licence není oprávnìn Programy v balíku pøevádìt nebo dále prodávat oddìlenì od multiproduktového balíku. Program v balíku mohou doprovázet licenèní podmínky, a tyto pøípadné licenèní podmínky se pak vztahují na u¾ívání Programu v balíku Dr¾itelem licence. V pøípadì rozporu mají podmínky v tomto dokumentu Licenèní informace pøednost pøed podmínkami u¾ívání Programu v balíku. Poté, co právo Dr¾itele licence pou¾ívat Program skonèí nebo je ukonèeno, musí Dr¾itel licence pøestat pou¾ívat ve¹keré kopie Programù v balíku, znièit je nebo je okam¾itì vrátit stranì, od které Dr¾itel licence Program získal. Pokud Dr¾itel licence Programy v balíku stáhnul, mìl by Dr¾itel licence kontaktovat stranu, od které Dr¾itel licence Program získal. Pokud chce Dr¾itel licence Programy v balíku licencovat pro jakékoli pou¾ití nad rámec vý¹e uvedených omezení, kontaktujte za úèelem získání pøíslu¹né licence prodejního zástupce IBM nebo stranu, od které Dr¾itel licence Program získal. + +Spoleènì s Programem jsou licencovány následující Programy v balíku: +IBM MQ V9.0.3 + +Omezení u¾ívání - pouze pro vývojáøe + +Je-li v názvu Programu uveden výraz "For Developers", mù¾e být Program implementován pouze v rámci interního vývoje a testování jednotek Dr¾itele licence na stroji vývojáøe. Stroj vývojáøe je prostøedí fyzického nebo virtuálního poèítaèe, na nìm¾ je provozován primární operaèní systém a Program, pøièem¾ jak tento operaèní systém, tak i Program jsou dostupné a u¾ívané nejvý¹e jedním urèeným vývojáøem. Dr¾itel licence není oprávnìn u¾ívat Program ke zpracování pracovních zátì¾í, simulování produktivních pracovních zátì¾í nebo k testování roz¹iøitelnosti jakéhokoliv kódu, aplikace nebo systému. Dr¾itel licence není oprávnìn u¾ívat ¾ádnou èást Programu k jakýmkoliv jiným úèelùm, leda¾e by si zakoupil pøíslu¹ná oprávnìní k u¾ívání v produktivním prostøedí. + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro programy (Z125-3301-14). + +Název Programu (Èíslo Programu): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Na pou¾ívání Programu Dr¾itelem licence se vztahují následující standardní podmínky. + +?Omezená u¾ivatelská práva + +Jak je popsáno v Mezinárodní licenèní smlouvì IBM pro programy ("IPLA") a v tomto dokumentu Licenèní informace, IBM udìluje Dr¾iteli licence omezené právo k u¾ívání Programu. Toto právo je omezeno na úroveò Oprávnìného u¾ívání, jako je napøíklad Hodnotová jednotka procesoru ("Jednotka PVU"), Hodnotová jednotka prostøedku ("Jednotka RVU"), Hodnotová jednotka ("Jednotka VU"), nebo na jinou specifickou úroveò u¾ívání, za ní¾ Dr¾itel licence zaplatil, jak je dolo¾eno Dokumentem o oprávnìní. U¾ívání Dr¾itelem licence mù¾e být omezeno rovnì¾ na nìjaký specifikovaný stroj nebo na u¾ívání pouze jako Podpùrného programu nebo v souladu s jinými omezeními. Jeliko¾ Dr¾itel licence nezaplatil za celou ekonomickou hodnotu Programu, není povoleno ¾ádné jiné u¾ívání, leda¾e by byly zaplaceny dodateèné poplatky. Kromì toho není Dr¾itel licence oprávnìn u¾ívat Program k poskytování komerèních slu¾eb v oblasti IT jakékoli tøetí stranì nebo k poskytování komerèního hostingu nebo slu¾eb v oblasti sdílení èasu, ani není oprávnìn Program sublicencovat, pùjèovat nebo pronajímat, leda¾e by to bylo výslovnì uvedeno v pøíslu¹ných platných smlouvách, na jejich¾ základì získal Dr¾itel licence oprávnìní k u¾ívání Programu. Dr¾itel licence mù¾e mít na základì úhrady dodateèných poplatkù nebo na základì odli¹ných èi dodateèných podmínek dodateèná práva. IBM si vyhrazuje právo stanovit, zda budou Dr¾iteli licence taková dodateèná práva poskytnuta. + +?Specifikace + +Specifikace Programu naleznete ve souhrnných èláncích Popis a Technické informace, které jsou uvedeny v Oznamovacích letácích Programu. + +Programy v balíku + +Program je licencován jako multiproduktový balík sestávající z ní¾e uvedených Programù v balíku. Dr¾itel licence je oprávnìn tyto Programy v balíku nainstalovat a pou¾ívat v souladu s omezeními uvedenými v dokumentech o oprávnìní (Proofs of Entitlement) pro Program a v tomto dokumentu Licenèní informace. Dr¾itel licence není oprávnìn Programy v balíku pøevádìt nebo dále prodávat oddìlenì od multiproduktového balíku. Program v balíku mohou doprovázet licenèní podmínky, a tyto pøípadné licenèní podmínky se pak vztahují na u¾ívání Programu v balíku Dr¾itelem licence. V pøípadì rozporu mají podmínky v tomto dokumentu Licenèní informace pøednost pøed podmínkami u¾ívání Programu v balíku. Poté, co právo Dr¾itele licence pou¾ívat Program skonèí nebo je ukonèeno, musí Dr¾itel licence pøestat pou¾ívat ve¹keré kopie Programù v balíku, znièit je nebo je okam¾itì vrátit stranì, od které Dr¾itel licence Program získal. Pokud Dr¾itel licence Programy v balíku stáhnul, mìl by Dr¾itel licence kontaktovat stranu, od které Dr¾itel licence Program získal. Pokud chce Dr¾itel licence Programy v balíku licencovat pro jakékoli pou¾ití nad rámec vý¹e uvedených omezení, kontaktujte za úèelem získání pøíslu¹né licence prodejního zástupce IBM nebo stranu, od které Dr¾itel licence Program získal. + +Spoleènì s Programem jsou licencovány následující Programy v balíku: +IBM MQ V9.0.3 + +Omezení u¾ívání - pouze pro vývojáøe + +Je-li v názvu Programu uveden výraz "For Developers", mù¾e být Program implementován pouze v rámci interního vývoje a testování jednotek Dr¾itele licence na stroji vývojáøe. Stroj vývojáøe je prostøedí fyzického nebo virtuálního poèítaèe, na nìm¾ je provozován primární operaèní systém a Program, pøièem¾ jak tento operaèní systém, tak i Program jsou dostupné a u¾ívané nejvý¹e jedním urèeným vývojáøem. Dr¾itel licence není oprávnìn u¾ívat Program ke zpracování pracovních zátì¾í, simulování produktivních pracovních zátì¾í nebo k testování roz¹iøitelnosti jakéhokoliv kódu, aplikace nebo systému. Dr¾itel licence není oprávnìn u¾ívat ¾ádnou èást Programu k jakýmkoliv jiným úèelùm, leda¾e by si zakoupil pøíslu¹ná oprávnìní k u¾ívání v produktivním prostøedí. + +Komponenty nepou¾ívané k vytvoøení po¾adovaných oprávnìní + +Pøi urèování poètu oprávnìní, která Dr¾itel licence potøebuje pro instalaci nebo u¾ívání Programu, jsou rozhodující instalace nebo u¾ívání pouze následujících komponent Programu. Jinými slovy, Dr¾itel licence je oprávnìn nainstalovat a pou¾ívat na základì licenèních podmínek následující komponenty Programu, av¹ak tyto komponenty nejsou rozhodující pro stanovení poètu oprávnìní po¾adovaných pro Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + +Na pou¾ívání Programu Dr¾itelem licence se mohou vztahovat následující mìrné jednotky. + +Instalace + +Instalace je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Instalace je kopie Programu, která je nainstalována na fyzickém nebo virtuálním disku a je dostupná ke spou¹tìní na poèítaèi. Dr¾itel licence je povinen opatøit si oprávnìní pro ka¾dou Instalaci Programu. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +DÙLE®ITÉ: ÈTÌTE POZORNÌ + +Ní¾e jsou uvedeny dvì licenèní smlouvy. + +1. Mezinárodní licenèní smlouva IBM pro zku¹ební verze programù +2. Mezinárodní licenèní smlouva IBM pro programy + +Jestli¾e Dr¾itel licence získá Program pro úèely produktivního u¾ívání (to znamená pro jiné úèely ne¾ k hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence Mezinárodní licenèní smlouvu IBM pro programy, a to bez jakýchkoliv zmìn. + +Jestli¾e Dr¾itel licence získá Program pro úèely hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace (spoleènì: "Hodnocení"): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence jak (i) Mezinárodní licenèní smlouvu IBM pro zku¹ební verze programù ("Licence na hodnocení"), tak i (ii) Mezinárodní licenèní smlouvu IBM pro programy (IPLA). Obì tyto smlouvy je povinen akceptovat bez jakýchkoliv zmìn. + +Licence na hodnocení bude platit po dobu Hodnocení provádìného Dr¾itelem licence. + +Smlouva IPLA vstoupí automaticky v platnost v pøípadì, ¾e se Dr¾itel licence rozhodne ponechat si Program i po Hodnocení (nebo si zakoupit dal¹í kopie Programu k u¾ívání následnì po období Hodnocení) a s tímto zámìrem uzavøe pøíslu¹nou smlouvu (napøíklad smlouvu IBM International Passport Advantage nebo IBM Passport Advantage Express). + +Licence na hodnocení a smlouva IPLA nenabývají právní úèinnosti soubì¾nì; ¾ádná z nich nemìní tu druhou a jsou na sobì navzájem nezávislé. + +Úplný text ka¾dé z tìchto dvou licenèních smluv je uveden ní¾e. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro zku¹ební verze programù (Z125-5543-05). + +Název Programu: IBM MQ Managed File Transfer Service V9.0.1 +Èíslo Programu: Evaluation + +Název Programu: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Èíslo Programu: Evaluation + +Název Programu: IBM MQ Managed File Transfer Agent V9.0.1 +Èíslo Programu: Evaluation + +Období hodnocení + +Období hodnocení zaèíná datem, které si Dr¾itel sjedná dle podmínek této Smlouvy, a konèí po uplynutí 90 dní. + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro programy (Z125-3301-14). + +Název Programu: IBM MQ Managed File Transfer Service V9.0.1 +Èíslo Programu: 5724-H72 + +Název Programu: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Èíslo Programu: 5724-H72 + +Název Programu: IBM MQ Managed File Transfer Agent V9.0.1 +Èíslo Programu: 5724-H72 + +Jak je popsáno v Mezinárodní licenèní smlouvì IBM pro programy ("IPLA") a v tomto dokumentu Licenèní informace, IBM udìluje Dr¾iteli licence omezené právo k u¾ívání Programu. Toto právo je omezeno na úroveò Oprávnìného u¾ívání, jako je napøíklad Hodnotová jednotka procesoru ("Jednotka PVU"), Hodnotová jednotka prostøedku ("Jednotka RVU"), Hodnotová jednotka ("Jednotka VU"), nebo na jinou specifickou úroveò u¾ívání, za ní¾ Dr¾itel licence zaplatil, jak je dolo¾eno Dokumentem o oprávnìní. U¾ívání Dr¾itelem licence mù¾e být omezeno rovnì¾ na nìjaký specifikovaný stroj nebo na u¾ívání pouze jako Podpùrného programu nebo v souladu s jinými omezeními. Jeliko¾ Dr¾itel licence nezaplatil za celou ekonomickou hodnotu Programu, není povoleno ¾ádné jiné u¾ívání, leda¾e by byly zaplaceny dodateèné poplatky. Kromì toho není Dr¾itel licence oprávnìn u¾ívat Program k poskytování komerèních slu¾eb v oblasti IT jakékoli tøetí stranì nebo k poskytování komerèního hostingu nebo slu¾eb v oblasti sdílení èasu, ani není oprávnìn Program sublicencovat, pùjèovat nebo pronajímat, leda¾e by to bylo výslovnì uvedeno v pøíslu¹ných platných smlouvách, na jejich¾ základì získal Dr¾itel licence oprávnìní k u¾ívání Programu. Dr¾itel licence mù¾e mít na základì úhrady dodateèných poplatkù nebo na základì odli¹ných èi dodateèných podmínek dodateèná práva. IBM si vyhrazuje právo stanovit, zda budou Dr¾iteli licence taková dodateèná práva poskytnuta. + +Specifikace Programu naleznete ve souhrnných èláncích Popis a Technické informace, které jsou uvedeny v Oznamovacích letácích Programu. + +Redistribuovatelné polo¾ky + +Jestli¾e Program obsahuje komponenty, které jsou Redistribuovatelnými polo¾kami, budou identifikovány v souboru REDIST, který je pøipojen k Programu. Kromì licenèních práv udìlených v této Smlouvì smí Dr¾itel licence distribuovat Redistribuovatelné polo¾ky v souladu s ní¾e uvedenými podmínkami: +1) Redistribuce musí být provádìna pouze ve formì objektového kódu a musí splòovat v¹echny pokyny, instrukce a specifikace obsa¾ené v souborech REDIST pøipojených k Programu nebo v dokumentaci; +2) V pøípadì, ¾e dokumentace pøilo¾ená k Programu výslovnì povoluje Dr¾iteli licence upravovat Redistribuovatelné polo¾ky, musí tyto úpravy dodr¾ovat v¹echny pokyny, instrukce a specifikace obsa¾ené v této dokumentaci a tyto pøípadné modifikace musí být pova¾ovány za Redistribuovatelné polo¾ky; +3) Redistribuovatelné polo¾ky mohou být distribuovány pouze v rámci aplikace Dr¾itele licence, která byla vyvinuta prostøednictvím Programu ("Aplikace Dr¾itele licence"), a to pouze k podpoøe zákazníkù Dr¾itele licence v souvislosti s jejich u¾íváním Aplikace Dr¾itele licence. Aplikace Dr¾itele licence musí tvoøit významnou pøidanou hodnotu, aby Redistribuovatelné polo¾ky nepøedstavovaly pro koncové u¾ivatele softwarových produktù Dr¾itele licence hlavní motivaci k nákupu; +4) Jestli¾e Redistribuovatelné polo¾ky zahrnují rozhraní Java Runtime Environment, musí Dr¾iteli licence do své Aplikace také zahrnout jiné ne¾ Redistribuovatelné Java polo¾ky, leda¾e je tato Aplikace urèena ke spou¹tìní pouze na klasických výpoèetních zaøízeních (napøíklad pøenosné poèítaèe, stolní poèítaèe a servery), nikoliv na pøenosných nebo jiných pervazivních zaøízeních (napøíklad zaøízení obsahující mikroprocesory, jejich¾ jejich primárním úèelem není výpoèetní zpracování); +5) Dr¾itel licence nesmí odstraòovat ¾ádné soubory obsahující copyrightové výhrady nebo soubory Notices obsa¾ené v Redistribuovatelných polo¾kách; +6) Dr¾itel licence musí IBM, její dodavatele nebo distributory zbavit odpovìdnosti v souvislosti se v¹emi nároky vzniklými na základì u¾ívání nebo distribuce Aplikace Dr¾itele licence; +7) Dr¾itel licence nesmí pou¾ívat stejnou cestu, jakou mají pùvodní Redistribuovatelné soubory/moduly; +8) Dr¾itel licence nesmí u¾ívat názvy nebo ochranné známky IBM nebo jejích dodavatelù èi distributorù ve spojení s marketingem Aplikace Dr¾itele licence, pokud k tomu pøedem nezíská písemný souhlas IBM nebo pøíslu¹ného dodavatele èi distributora; +9) IBM, její dodavatelé a distributoøi poskytují tyto Redistribuovatelné polo¾ky a související dokumentaci bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICKÉHO NÁROKU, NEPORU©ENÍ PRÁV TØETÍCH STRAN A VYPLÝVAJÍCÍCH ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL; +10) Dr¾itel licence odpovídá za ve¹kerou technickou asistenci pro své Aplikace a jakékoliv zmìny Redistribuovatelných polo¾ek; a +11) Licenèní smlouva, kterou uzavøel Dr¾itel licence s koncovým u¾ivatelem Aplikace Dr¾itele licence, musí informovat koncového u¾ivatele o tom, ¾e Redistribuovatelné polo¾ky nebo jejich modifikace nesmí být a) u¾ívány k jiným úèelùm ne¾ k aktivaci Aplikace Dr¾itele licence, ii) kopírovány (s výjimkou zálohování), iii) dále distribuovány nebo pøevádìny bez Aplikace Dr¾itele licence nebo iv) zpìtnì pøekládány, zpìtnì kompilovány nebo jiným zpùsobem pøekládány, pokud zákon výslovnì nepovoluje výjimky, a bez mo¾nosti smluvního zøeknutí se. Kromì toho musí licenèní smlouva Dr¾itele licence poskytovat IBM pøinejmen¹ím stejnou ochranu jako podmínky této Smlouvy. + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + +U Komponent ve zdrojovém kódu a Vzorových materiálù uvedených v souboru REDIST, který je souèástí Programu, mù¾e Dr¾itel licence redistribuovat upravené verze tìchto Komponent ve zdrojovém kódu nebo Vzorových materiálù v souladu s podmínkami této licence a s pokyny uvedenými v souboru REDIST. + +Instalace + +Instalace je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Instalace je kopie Programu, která je nainstalována na fyzickém nebo virtuálním disku a je dostupná ke spou¹tìní na poèítaèi. Dr¾itel licence je povinen opatøit si oprávnìní pro ka¾dou Instalaci Programu. + +Jednotka PVU + +Jednotka PVU (Processor Value Unit) je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Poèet vy¾adovaných oprávnìní k jednotkám PVU je zalo¾en na technologii procesoru (definované v Tabulce PVU èlenìné podle Prodejce procesoru, Znaèky, Typu a Èísla modelu, která je uvedena na webové adrese http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) a na poètu procesorù zpøístupnìných pro Program. IBM i nadále definuje procesor pro úèely licencování na základì jednotek PVU jako ka¾dé procesorové jádro na èipu. Dvoujádrový procesorový èip má napøíklad dvì procesorová jádra. + +Dr¾itel licence mù¾e implementovat Program prostøednictvím licencování buï na základì Plné kapacity (Full Capacity), nebo Virtualizaèní kapacity (takzvané dílèí kapacity) v souladu s licenèními podmínkami Passport Advantage pro licencování na základì dílèí kapacity (viz ní¾e uvedené webové stránky). Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Plné kapacity, musí získat oprávnìní k jednotkám PVU postaèující pro pokrytí v¹ech aktivovaných procesorových jader* v prostøedí fyzického hardwaru, která jsou dostupná pro Program nebo která jsou spravována Programem, s výjimkou takových serverù, z nich¾ byl Program trvale odstranìn. Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Virtualizaèní kapacity, musí získat oprávnìní postaèující pro pokrytí v¹ech aktivovaných procesorových jader, která jsou pøístupná pro Program nebo jsou spravována Programem, jak je definováno v souladu s dokumentem Virtualization Capacity License Counting Rules, který je k dispozici na adrese http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivované procesorové jádro je takové procesorové jádro, které je dostupné pro u¾ívání v rámci fyzického nebo virtuálního serveru, pøièem¾ v obou pøípadech nezále¾í na tom, zda kapacita procesorových jader mù¾e být nebo je omezena prostøednictvím virtualizaèních technologií, pøíkazù operaèního systému, nastavení BIOS nebo podobnými omezeními. + +Podmínky specifické pro Program + +Konfigurace Neèinného pohotovostního re¾imu + +Pro úèely tohoto èlánku je konfigurací Neèinného pohotovostního re¾imu taková konfigurace, v ní¾ je kopie Programu nainstalována na serveru, který tvoøí souèást øe¹ení pro zaji¹tìní vysoké dostupnosti a na nìj¾ se Program pøepne v pøípadì, ¾e kopie Programu na aktivním serveru pøestane být pou¾itelná. Server je pova¾ován za server v "neèinném re¾imu" pouze v pøípadì, pokud je po dobu, ne¾ dojde k pøekonání selhání, pou¾íván výluènì k administraèním akcím slou¾ícím na podporu scénáøù pøekonání selhání. + +Program nesmí být instalován na serveru v Neèinném pohotovostním re¾imu s výjimkou pøípadu, kdy je k tomu øádnì licencován. + +Je-li Program u¾íván v konfiguraci Neèinného pohotovostního re¾imu s funkcí Multi-Instance Queue Manager, smí být kopie Programu pro úèely zálohování ulo¾ena a spu¹tìna na serveru v Neèinném pohotovostním re¾imu, ale musí zùstat v "neèinném re¾imu" a nesmí být u¾ívána k vykonávání produktivní èinnosti jakéhokoli druhu, leda¾e by do¹lo k pøepnutí aktivního serveru na server v Neèinném pohotovostním re¾imu (v rámci pøekonání selhání); v takovém pøípadì smí být k vykonávání produktivní èinnosti po dobu pøekonávání selhání pou¾ívána kopie pro Neèinný pohotovostní re¾im. + +Je-li Program u¾íván v konfiguraci Neèinného pohotovostního re¾imu s jinými systémy pro zaji¹tìní Vysoké dostupnosti, smí být kopie Programu pro úèely zálohování ulo¾ena na serveru v Neèinném pohotovostním re¾imu, nesmí v¹ak být spu¹tìna (a proto nesmí být u¾ívána k vykonávání produktivní èinnosti jakéhokoli druhu), bude v¹ak spou¹tìna automaticky prostøednictvím komponent pro zaji¹tìní Vysoké dostupnosti v pøípadì selhání aktivního serveru; v takovém pøípadì smí být k vykonávání produktivní èinnosti po dobu pøekonávání selhání pou¾ívána kopie pro Neèinný pohotovostní re¾im. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +DÙLE®ITÉ: ÈTÌTE POZORNÌ + +Ní¾e jsou uvedeny dvì licenèní smlouvy. + +1. Mezinárodní licenèní smlouva IBM pro zku¹ební verze programù +2. Mezinárodní licenèní smlouva IBM pro programy + +Jestli¾e Dr¾itel licence získá Program pro úèely produktivního u¾ívání (to znamená pro jiné úèely ne¾ k hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence Mezinárodní licenèní smlouvu IBM pro programy, a to bez jakýchkoliv zmìn. + +Jestli¾e Dr¾itel licence získá Program pro úèely hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace (spoleènì: "Hodnocení"): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence jak (i) Mezinárodní licenèní smlouvu IBM pro zku¹ební verze programù ("Licence na hodnocení"), tak i (ii) Mezinárodní licenèní smlouvu IBM pro programy (IPLA). Obì tyto smlouvy je povinen akceptovat bez jakýchkoliv zmìn. + +Licence na hodnocení bude platit po dobu Hodnocení provádìného Dr¾itelem licence. + +Smlouva IPLA vstoupí automaticky v platnost v pøípadì, ¾e se Dr¾itel licence rozhodne ponechat si Program i po Hodnocení (nebo si zakoupit dal¹í kopie Programu k u¾ívání následnì po období Hodnocení) a s tímto zámìrem uzavøe pøíslu¹nou smlouvu (napøíklad smlouvu IBM International Passport Advantage nebo IBM Passport Advantage Express). + +Licence na hodnocení a smlouva IPLA nenabývají právní úèinnosti soubì¾nì; ¾ádná z nich nemìní tu druhou a jsou na sobì navzájem nezávislé. + +Úplný text ka¾dé z tìchto dvou licenèních smluv je uveden ní¾e. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro zku¹ební verze programù (Z125-5543-05). + +Název Programu: IBM MQ Advanced Message Security V9.0.1 +Èíslo Programu: Evaluation + +Název Programu: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Èíslo Programu: Evaluation + +Název Programu: IBM MQ Telemetry V9.0.1 +Èíslo Programu: Evaluation + +Období hodnocení + +Období hodnocení zaèíná datem, které si Dr¾itel sjedná dle podmínek této Smlouvy, a konèí po uplynutí 90 dní. + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + + + +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro programy (Z125-3301-14). + +Název Programu: IBM MQ Advanced Message Security V9.0.1 +Èíslo Programu: 5724-H72 + +Název Programu: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Èíslo Programu: 5724-H72 + +Název Programu: IBM MQ Telemetry V9.0.1 +Èíslo Programu: 5724-H72 + +Jak je popsáno v Mezinárodní licenèní smlouvì IBM pro programy ("IPLA") a v tomto dokumentu Licenèní informace, IBM udìluje Dr¾iteli licence omezené právo k u¾ívání Programu. Toto právo je omezeno na úroveò Oprávnìného u¾ívání, jako je napøíklad Hodnotová jednotka procesoru ("Jednotka PVU"), Hodnotová jednotka prostøedku ("Jednotka RVU"), Hodnotová jednotka ("Jednotka VU"), nebo na jinou specifickou úroveò u¾ívání, za ní¾ Dr¾itel licence zaplatil, jak je dolo¾eno Dokumentem o oprávnìní. U¾ívání Dr¾itelem licence mù¾e být omezeno rovnì¾ na nìjaký specifikovaný stroj nebo na u¾ívání pouze jako Podpùrného programu nebo v souladu s jinými omezeními. Jeliko¾ Dr¾itel licence nezaplatil za celou ekonomickou hodnotu Programu, není povoleno ¾ádné jiné u¾ívání, leda¾e by byly zaplaceny dodateèné poplatky. Kromì toho není Dr¾itel licence oprávnìn u¾ívat Program k poskytování komerèních slu¾eb v oblasti IT jakékoli tøetí stranì nebo k poskytování komerèního hostingu nebo slu¾eb v oblasti sdílení èasu, ani není oprávnìn Program sublicencovat, pùjèovat nebo pronajímat, leda¾e by to bylo výslovnì uvedeno v pøíslu¹ných platných smlouvách, na jejich¾ základì získal Dr¾itel licence oprávnìní k u¾ívání Programu. Dr¾itel licence mù¾e mít na základì úhrady dodateèných poplatkù nebo na základì odli¹ných èi dodateèných podmínek dodateèná práva. IBM si vyhrazuje právo stanovit, zda budou Dr¾iteli licence taková dodateèná práva poskytnuta. + +Specifikace Programu naleznete ve souhrnných èláncích Popis a Technické informace, které jsou uvedeny v Oznamovacích letácích Programu. + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + +Instalace + +Instalace je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Instalace je kopie Programu, která je nainstalována na fyzickém nebo virtuálním disku a je dostupná ke spou¹tìní na poèítaèi. Dr¾itel licence je povinen opatøit si oprávnìní pro ka¾dou Instalaci Programu. + +Jednotka PVU + +Jednotka PVU (Processor Value Unit) je mìrnou jednotkou, na jejím¾ základì mù¾e být Program licencován. Poèet vy¾adovaných oprávnìní k jednotkám PVU je zalo¾en na technologii procesoru (definované v Tabulce PVU èlenìné podle Prodejce procesoru, Znaèky, Typu a Èísla modelu, která je uvedena na webové adrese http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) a na poètu procesorù zpøístupnìných pro Program. IBM i nadále definuje procesor pro úèely licencování na základì jednotek PVU jako ka¾dé procesorové jádro na èipu. Dvoujádrový procesorový èip má napøíklad dvì procesorová jádra. + +Dr¾itel licence mù¾e implementovat Program prostøednictvím licencování buï na základì Plné kapacity (Full Capacity), nebo Virtualizaèní kapacity (takzvané dílèí kapacity) v souladu s licenèními podmínkami Passport Advantage pro licencování na základì dílèí kapacity (viz ní¾e uvedené webové stránky). Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Plné kapacity, musí získat oprávnìní k jednotkám PVU postaèující pro pokrytí v¹ech aktivovaných procesorových jader* v prostøedí fyzického hardwaru, která jsou dostupná pro Program nebo která jsou spravována Programem, s výjimkou takových serverù, z nich¾ byl Program trvale odstranìn. Jestli¾e Dr¾itel licence vyu¾ívá licencování na základì Virtualizaèní kapacity, musí získat oprávnìní postaèující pro pokrytí v¹ech aktivovaných procesorových jader, která jsou pøístupná pro Program nebo jsou spravována Programem, jak je definováno v souladu s dokumentem Virtualization Capacity License Counting Rules, který je k dispozici na adrese http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivované procesorové jádro je takové procesorové jádro, které je dostupné pro u¾ívání v rámci fyzického nebo virtuálního serveru, pøièem¾ v obou pøípadech nezále¾í na tom, zda kapacita procesorových jader mù¾e být nebo je omezena prostøednictvím virtualizaèních technologií, pøíkazù operaèního systému, nastavení BIOS nebo podobnými omezeními. + +Podmínky specifické pro Program + +Konfigurace Neèinného pohotovostního re¾imu + +Pro úèely tohoto èlánku je konfigurací Neèinného pohotovostního re¾imu taková konfigurace, v ní¾ je kopie Programu nainstalována na serveru, který tvoøí souèást øe¹ení pro zaji¹tìní vysoké dostupnosti a na nìj¾ se Program pøepne v pøípadì, ¾e kopie Programu na aktivním serveru pøestane být pou¾itelná. Server je pova¾ován za server v "neèinném re¾imu" pouze v pøípadì, pokud je po dobu, ne¾ dojde k pøekonání selhání, pou¾íván výluènì k administraèním akcím slou¾ícím na podporu scénáøù pøekonání selhání. + +Program nesmí být instalován na serveru v Neèinném pohotovostním re¾imu s výjimkou pøípadu, kdy je k tomu øádnì licencován. + +Je-li Program u¾íván v konfiguraci Neèinného pohotovostního re¾imu s funkcí Multi-Instance Queue Manager, smí být kopie Programu pro úèely zálohování ulo¾ena a spu¹tìna na serveru v Neèinném pohotovostním re¾imu, ale musí zùstat v "neèinném re¾imu" a nesmí být u¾ívána k vykonávání produktivní èinnosti jakéhokoli druhu, leda¾e by do¹lo k pøepnutí aktivního serveru na server v Neèinném pohotovostním re¾imu (v rámci pøekonání selhání); v takovém pøípadì smí být k vykonávání produktivní èinnosti po dobu pøekonávání selhání pou¾ívána kopie pro Neèinný pohotovostní re¾im. + +Je-li Program u¾íván v konfiguraci Neèinného pohotovostního re¾imu s jinými systémy pro zaji¹tìní Vysoké dostupnosti, smí být kopie Programu pro úèely zálohování ulo¾ena na serveru v Neèinném pohotovostním re¾imu, nesmí v¹ak být spu¹tìna (a proto nesmí být u¾ívána k vykonávání produktivní èinnosti jakéhokoli druhu), bude v¹ak spou¹tìna automaticky prostøednictvím komponent pro zaji¹tìní Vysoké dostupnosti v pøípadì selhání aktivního serveru; v takovém pøípadì smí být k vykonávání produktivní èinnosti po dobu pøekonávání selhání pou¾ívána kopie pro Neèinný pohotovostní re¾im. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +DÙLE®ITÉ: ÈTÌTE POZORNÌ + +Ní¾e jsou uvedeny dvì licenèní smlouvy. + +1. Mezinárodní licenèní smlouva IBM pro zku¹ební verze programù +2. Mezinárodní licenèní smlouva IBM pro programy + +Jestli¾e Dr¾itel licence získá Program pro úèely produktivního u¾ívání (to znamená pro jiné úèely ne¾ k hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence Mezinárodní licenèní smlouvu IBM pro programy, a to bez jakýchkoliv zmìn. + +Jestli¾e Dr¾itel licence získá Program pro úèely hodnocení, testování, vyzkou¹ení ("try or buy") nebo demonstrace (spoleènì: "Hodnocení"): Klepnutím na ní¾e uvedené tlaèítko "Pøijmout" akceptuje Dr¾itel licence jak (i) Mezinárodní licenèní smlouvu IBM pro zku¹ební verze programù ("Licence na hodnocení"), tak i (ii) Mezinárodní licenèní smlouvu IBM pro programy (IPLA). Obì tyto smlouvy je povinen akceptovat bez jakýchkoliv zmìn. + +Licence na hodnocení bude platit po dobu Hodnocení provádìného Dr¾itelem licence. + +Smlouva IPLA vstoupí automaticky v platnost v pøípadì, ¾e se Dr¾itel licence rozhodne ponechat si Program i po Hodnocení (nebo si zakoupit dal¹í kopie Programu k u¾ívání následnì po období Hodnocení) a s tímto zámìrem uzavøe pøíslu¹nou smlouvu (napøíklad smlouvu IBM International Passport Advantage nebo IBM Passport Advantage Express). + +Licence na hodnocení a smlouva IPLA nenabývají právní úèinnosti soubì¾nì; ¾ádná z nich nemìní tu druhou a jsou na sobì navzájem nezávislé. + +Úplný text ka¾dé z tìchto dvou licenèních smluv je uveden ní¾e. + + +Mezinárodní licenèní smlouva pro zku¹ební verze programù + +Èást 1 - Obecná ustanovení + +STA®ENÍM, INSTALACÍ, ZKOPÍROVÁNÍM, PØÍSTUPEM K PROGRAMU NEBO KLEPNUTÍM NA TLAÈÍTKO "SOUHLASÍM" NEBO JINÝM POU®ITÍM PROGRAMU VYJADØUJE DR®ITEL LICENCE SVÙJ SOUHLAS S TOUTO SMLOUVOU. JESTLI®E TYTO PODMÍNKY AKCEPTUJETE JMÉNEM DR®ITELE LICENCE, PROHLA©UJETE A ZARUÈUJETE, ®E JSTE ZMOCNÌNI VÁZAT DR®ITELE LICENCE TÌMITO PODMÍNKAMI. JESTLI®E S TÌMITO PODMÍNKAMI NESOUHLASÍTE: + +* NESTAHUJTE, NEINSTALUJTE, NEKOPÍRUJTE PROGRAM, NEPØISTUPUJTE K PROGRAMU, NEPOU®ÍVEJTE TLAÈÍTKO "SOUHLASÍM", ANI PROGRAM NEPOU®ÍVEJTE; A + +* NEPRODLENÌ VRA«TE NEPOU®ITÉ NOSIÈE A DOKUMENTACI STRANÌ, OD KTERÉ JSTE JE ZÍSKALI. POKUD BYL PROGRAM STA®EN, VE©KERÉ JEHO KOPIE ZNIÈTE. + +1. Definice + +"Oprávnìné u¾ívání" - stanovená úroveò oprávnìní Dr¾itele licence provádìt nebo spou¹tìt Program. Tuto úroveò lze mìøit na základì poètu u¾ivatelù, miliónù servisních jednotek ("jednotky MSU"), jednotek Processor Value Units ("jednotky PVU") nebo na základì jiné úrovnì u¾ívání, kterou stanoví IBM. + +"IBM" - spoleènost International Business Machines Corporation nebo nìkterá z jejích dceøiných spoleèností. + +"Licenèní informace" ("LI") - dokument uvádìjící informace a jakékoli dodateèné podmínky specifické pro Program. Dokument Licenèní informace k Programu lze rovnì¾ nalézt v adresáøi s Programem, prostøednictvím systémového pøíkazu nebo ve formì pøíruèky, kterou obdr¾íte s Programem. + +"Program" - ní¾e uvedené komponenty, vèetnì originálu a v¹ech úplných nebo dílèích kopií: 1) strojovì èitelné instrukce a data, 2) komponenty, soubory a moduly, 3) audiovizuální obsah (jako jsou obrazy, text, nahrávky nebo obrázky) a 4) související licenèní materiály (jako jsou licenèní klíèe a dokumentace). + +2. Struktura smlouvy + +Tato smlouva zahrnuje Èást 1 - Obecná ustanovení, Èást 2 - Podmínky specifické pro zemi (jsou-li nìjaká) a dokument Licenèní informace a pøedstavuje úplnou dohodu mezi Dr¾itelem licence a IBM ve vztahu k u¾ívání Programu. Nahrazuje ve¹kerá pøedchozí ústní nebo písemná ujednání mezi Dr¾itelem licence a IBM ohlednì jeho u¾ívání Programu. Podmínky Èásti 2 mohou nahrazovat nebo upravovat podmínky Èásti 1. V míøe, v ní¾ se vyskytne rozpor podmínek, mají podmínky dokumentu Licenèní informace pøednost pøed podmínkami obou Èástí. + +3. Udìlení licence + +Program je vlastnictvím IBM nebo dodavatele IBM, je chránìn autorskými právy a je k nìmu poskytováno právo u¾ívání, není prodáván. + +IBM udìluje Dr¾iteli licence omezenou, nevýhradní, nepøevoditelnou licenci na 1) stahování, instalaci a u¾ívání Programu bìhem období hodnocení a¾ do úrovnì Oprávnìného u¾ívání, která je uvedena v dokumentu Licenèní informace, výhradnì pro úèely interního hodnocení, testování nebo pro úèel demonstrace na zku¹ební bázi; 2) k vytvoøení a instalaci pøimìøeného poètu kopií na podporu takového Oprávnìného u¾ívání, a 3) k vytvoøení zálo¾ní kopie, to v¹e za pøedpokladu, ¾e: + +a. Dr¾itel licence získal Program zákonným zpùsobem a dodr¾uje podmínky této Smlouvy; + +b. zálo¾ní kopie není spou¹tìna, leda¾e nelze spustit zálohovaný Program; + +c. Dr¾itel licence uvádí v¹echna upozornìní o autorských právech a dal¹í výhrady vlastnických práv na ka¾dé kopii nebo dílèí kopii Programu; + +d. Dr¾itel licence bude udr¾ovat záznamy o v¹ech kopiích Programu a zajistí, aby ka¾dá osoba u¾ívající Program (a» u¾ prostøednictvím lokálního nebo vzdáleného pøístupu) 1) tak èinila pouze jménem Dr¾itele licence a 2) dodr¾ovala podmínky této Smlouvy; + +e. Dr¾itel licence nesmí 1) pou¾ívat Program pro produktivní úèely, ani nesmí pou¾ívat, kopírovat, upravovat nebo distribuovat Program jiným zpùsobem, ne¾ jak výslovnì dovoluje tato Smlouva; 2) zpìtnì sestavovat, zpìtnì kompilovat èi jakkoliv pøekládat Program, není-li to výslovnì povoleno zákonem bez mo¾nosti toto povolení smluvnì vylouèit; 3) u¾ívat kterékoli komponenty, soubory, moduly, audiovizuální obsah Programu nebo související licenèní materiály nezávisle na Programu; nebo 4) Program sublicencovat, pronajímat èi poskytovat formou leasingu; 5) u¾ívat Programu pro hostování komerèních aplikací; a + +f. jestli¾e Dr¾itel licence získá tento Program jako Podpùrný program, bude jej pou¾ívat pouze na podporu Základního programu a v souladu s ve¹kerými omezeními uvedenými v licenci na Základní program, nebo - jestli¾e Dr¾itel licence získá tento Program jako Základní program - bude pou¾ívat v¹echny Podpùrné programy pouze na podporu tohoto Programu a v souladu s ve¹kerými omezeními stanovenými v této Smlouvì. Pro úèely tohoto bodu "f" znamená "Podpùrný program" program, který je souèástí jiného programu IBM ("Základní program") a je v Licenèních informacích k Základnímu programu jako Podpùrný program uveden. (Chce-li Dr¾itel licence získat samostatnou licenci na neomezené u¾ívání Podpùrného programu, musí se obrátit na subjekt, od nìho¾ Podpùrný program zakoupil.) + +Tato licence se vztahuje na ka¾dou kopii Programu, kterou Dr¾itel licence vytvoøí. + +3.1 Aktualizace, opravy a záplaty + +Pokud Dr¾itel licence obdr¾í aktualizaci nebo opravu k Programu, akceptuje ve¹keré dodateèné nebo odli¹né podmínky, které jsou uvedeny v Licenèních informacích pro tuto aktualizaci nebo opravu. Nejsou-li k aktualizaci èi opravì dodateèné nebo odli¹né podmínky pøipojeny, pak se taková aktualizace èi oprava øídí výluènì podmínkami této Smlouvy. Dr¾itel licence se zavazuje, ¾e v pøípadì nahrazení Programu aktualizací pøestane pùvodní Program okam¾itì pou¾ívat. + +3.2 Doba trvání a ukonèení smlouvy + +Období hodnocení zaèíná dnem, kdy Dr¾itel licence vyjádøí souhlas s podmínkami této Smlouvy, a konèí (podle toho, která událost nastane døíve) 1) uplynutím smluvního období nebo k datu, které IBM buï uvedla v dokumentu Licenèní informace nebo v transakèním dokumentu, nebo 2) k datu, kdy se Program automaticky sám znepøístupní. Dr¾itel licence je povinen znièit Program a v¹echny kopie z nìj vytvoøené bìhem deseti dní od uplynutí období hodnocení. Jestli¾e IBM v dokumentu Licenèní informace stanoví, ¾e si Dr¾itel licence smí Program ponechat a Dr¾itel licence se pro tuto mo¾nost rozhodne, pak bude Program nadále podléhat jiné licenèní smlouvì, kterou IBM poskytne Dr¾iteli licence. Kromì toho mù¾e IBM vy¾adovat úhradu poplatku. + +IBM je oprávnìna ukonèit licenci Dr¾itele licence, jestli¾e tento nedodr¾uje podmínky této Smlouvy. Ukonèí-li kterákoli ze stran licenci z jakéhokoli dùvodu, Dr¾itel licence je povinen okam¾itì pøestat pou¾ívat a znièit v¹echny kopie Programu, které má ve svém dr¾ení. Podmínky této Smlouvy, je¾ svou povahou pøesahují dobu její platnosti, zùstávají plnì v platnosti a jsou úèinné a¾ do okam¾iku jejich splnìní a platí i pro pøípadné právní nástupce a postupníky smluvních stran. + +PROGRAM MÙ®E OBSAHOVAT BLOKOVACÍ ZAØÍZENÍ, KTERÉ ZABRÁNÍ V POU®ÍVÁNÍ PROGRAMU PO UPLYNUTÍ OBDOBÍ HODNOCENÍ. DR®ITEL LICENCE SE ZAVAZUJE, ®E BLOKOVACÍ ZAØÍZENÍ ANI PROGRAM ®ÁDNÝM ZPÙSOBEM NEPORU©Í. DR®ITEL LICENCE JE POVINEN PØIJMOUT PØÍSLU©NÁ OPATØENÍ, ABY ZABRÁNIL ZTRÁTÌ DAT, K NÍ® MÙ®E DOJÍT V OKAM®IKU, KDY PROGRAM JI® NADÁLE NEMÙ®E BÝT POU®ÍVÁN. + +4. Poplatky + +Na u¾ívání Programu bìhem období hodnocení se nevztahuje ¾ádný poplatek. + +5. Vylouèení záruk + +V SOULADU S VE©KERÝMI ZÁKONNÝMI ZÁRUKAMI, KTERÉ NELZE VYLOUÈIT, NEPOSKYTUJE IBM ®ÁDNÉ ZÁRUKY ÈI PODMÍNKY, VYJÁDØENÉ VÝSLOVNÌ NEBO VYPLÝVAJÍCÍ Z OKOLNOSTÍ, POKUD JDE O PROGRAM NEBO PODPORU (JE-LI NÌJAKÁ POSKYTOVÁNA), VÈETNÌ - A TO ZEJMÉNA - VE©KERÝCH ZÁRUK ÈI PODMÍNEK PRODEJNOSTI, USPOKOJIVÉ KVALITY, VHODNOSTI PRO URÈITÝ ÚÈEL A VLASTNICKÉHO NÁROKU, A JAKÉKOLI ZÁRUKY ÈI PODMÍNKY NEPORU©ENÍ PRÁV TØETÍCH STRAN. + +NÌKTERÉ STÁTY NEBO JURISDIKCE NEPØIPOU©TÌJÍ VYLOUÈENÍ ZÁRUK VYJÁDØENÝCH VÝSLOVNÌ NEBO VYPLÝVAJÍCÍCH Z OKOLNOSTÍ, A PROTO SE VÝ©E UVEDENÉ ZÁRUKY NEMUSÍ NA DR®ITELE LICENCE VZTAHOVAT. V TAKOVÉM PØÍPADÌ JSOU TAKOVÉ ZÁRUKY ÈASOVÌ OMEZENY POUZE NA MINIMÁLNÍ DOBU PO®ADOVANOU ZÁKONEM. PO UKONÈENÍ TÉTO DOBY IBM NEPOSKYTUJE ®ÁDNÉ DAL©Í ZÁRUKY. NÌKTERÉ STÁTY NEBO JURISDIKCE NEPØIPOU©TÌJÍ OMEZENÍ DOBY TRVÁNÍ ZÁRUK VYPLÝVAJÍCÍCH Z OKOLNOSTÍ, A PROTO SE VÝ©E UVEDENÉ OMEZENÍ NA DR®ITELE LICENCE NEMUSÍ VZTAHOVAT. DR®ITEL LICENCE MÙ®E MÍT I DAL©Í PRÁVA, KTERÁ SE LI©Í STÁT OD STÁTU NEBO JURISDIKCE OD JURISDIKCE. + +VYLOUÈENÍ ZÁRUK UVEDENÉ V TOMTO ODDÍLU 5 SE VZTAHUJE ROVNÌ® NA VE©KERÉ VÝVOJÁØE PROGRAMÙ A DODAVATELE IBM. + +VÝROBCI, DODAVATELÉ NEBO DISTRIBUTOØI PROGRAMÙ OD JINÝCH DODAVATELÙ MOHOU POSKYTOVAT SVÉ VLASTNÍ ZÁRUKY. + +NESTANOVÍ-LI IBM VÝSLOVNÌ JINAK, PAK IBM NEPOSKYTUJE PODPORU ®ÁDNÉHO DRUHU. V TAKOVÉM PØÍPADÌ SE NA JAKOUKOLI PODPORU POSKYTOVANOU SPOLEÈNOSTÍ IBM VZTAHUJÍ VYLOUÈENÍ ZÁRUKY UVEDENÁ V TOMTO ODDÍLU 5. + +6. Data a databáze Dr¾itele licence + +IBM mù¾e s cílem pomoci Dr¾iteli licence s urèením problému s Programem po¾adovat, aby Dr¾itel licence 1) umo¾nil IBM vzdálený pøístup k systému Dr¾itele licence, nebo 2) aby zaslal IBM pøíslu¹né údaje nebo systémová data. IBM v¹ak není povinna poskytnout takovou asistenci, pokud IBM a Dr¾itel licence neuzavøeli samostatnou písemnou dohodu, na jejím¾ základì se IBM zavazuje, ¾e bude Dr¾iteli licence poskytovat tento typ podpory, který pøesahuje povinnosti IBM vyplývající z této Smlouvy. IBM za v¹ech okolností pou¾ívá informace o chybách a problémech ke zdokonalování jejích produktù a slu¾eb a poskytuje klientùm asistenci prostøednictvím souvisejících nabídek podpory. K tomuto úèelu mù¾e IBM vyu¾ít slu¾eb subjektù a dodavatelù IBM (vèetnì subjektù a dodavatelù z jedné nebo více jiných zemí, ne¾ je zemì, v ní¾ má sídlo Dr¾itel licence) a Dr¾itel licence opravòuje IBM k takovému vyu¾ití slu¾eb subjektù a dodavatelù IBM. + +Dr¾itel licence zùstává odpovìdný za 1) ve¹kerá data a obsah jakékoli databáze, kterou pro IBM zpøístupní, 2) výbìr a implementaci postupù a kontrol týkajících se pøístupu, zabezpeèení, ¹ifrování, u¾ívání a pøenosu dat (vèetnì ve¹kerých osobních údajù), a 3) zálohování a obnovu jakékoli databáze a ve¹kerých ulo¾ených dat. Dr¾itel licence nesmí odeslat IBM ¾ádné osobní údaje nebo poskytnout IBM pøístup k ¾ádným osobním údajùm, a» u¾ ve formì dat nebo v nìjaké jiné formì, a nese odpovìdnost za ve¹keré pøimìøené náklady nebo jiné výdaje, které mohou IBM vzniknout v souvislosti s neoprávnìným poskytnutím takových informací IBM nebo v souvislosti se ztrátou èi zpøístupnìním informací ze strany IBM, vèetnì tìch zalo¾ených na nárocích tøetích stran. + +7. Omezení odpovìdnosti + +Omezení odpovìdnosti a vylouèení záruky v tomto oddíle 7 (Omezení odpovìdnosti) se aplikuje v plném rozsahu, pokud není zakázáno ze zákona, bez mo¾nosti smluvního zøeknutí se. + +7.1 Polo¾ky, za které IBM nese odpovìdnost + +Mohou nastat okolnosti, kdy má Dr¾itel licence z dùvodu neplnìní závazku na stranì IBM nebo jiné odpovìdnosti nárok na náhradu ¹kody od IBM. Bez ohledu na pøíèinu vzniku nároku Dr¾itele licence na náhradu ¹kody od IBM (vèetnì podstatného poru¹ení, nedbalosti, uvedení v omyl nebo jiného poru¹ení smluvního èi mimosmluvního nároku), odpovídá IBM pouze za nároky vzniklé nebo se vztahující ke ka¾dému Programu nebo za nároky jinak vzniklé na základì této Smlouvy a¾ do èástky, která v souhrnu nepøesáhne èástku odpovídající jakýmkoli 1) ¹kodám na zdraví (vèetnì smrti) a ¹kodám na nemovitém a movitém majetku, a 2) jiným skuteèným pøímým ¹kodám a¾ do vý¹e USD 10.000,- (nebo ekvivalentu v místní mìnì). + +Toto omezení se vztahuje rovnì¾ i na v¹echny vývojáøe a dodavatele Programù IBM. Jedná se o maximum, za které IBM a její vývojáøi a dodavatelé Programù spoleènì odpovídají. + +7.2 Polo¾ky, za které IBM nenese odpovìdnost + +VYJMA PØÍPADÙ, KDY JE TO VÝSLOVNÌ PO®ADOVÁNO PRÁVNÍMI PØEDPISY BEZ MO®NOSTI VZDÁNÍ SE PRÁVA SMLUVNÌ, NENESOU IBM, JEJÍ SUBDODAVATELÉ ANI VÝVOJÁØI PROGRAMÙ ZA ®ÁDNÝCH OKOLNOSTÍ ODPOVÌDNOST ZA NÁSLEDUJÍCÍ ©KODY, A TO ANI V PØÍPADÌ, ®E BYLI NA MO®NOST JEJICH VZNIKU PØEDEM UPOZORNÌNI: + +a. ZTRÁTA DAT NEBO ©KODA NA DATECH; + +b. ZVLÁ©TNÍ, NAHODILÉ NEBO NEPØÍMÉ ©KODY ÈI ZA NÁSLEDNÉ HOSPODÁØSKÉ ©KODY; NEBO + +c. U©LÝ ZISK, ZTRÁTA OBCHODNÍCH PØÍLE®ITOSTÍ, VÝNOSÙ, ÚJMA ZPÙSOBENÁ PO©KOZENÍM DOBRÉHO JMÉNA NEBO NEDOSA®ENÉ PØEDPOKLÁDANÉ ÚSPORY. + +8. Kontrola dodr¾ování podmínek + +Pro úèely tohoto oddílu 8 (Kontrola dodr¾ování podmínek), znamenají "Podmínky pro hodnocení programù" 1) tuto Smlouvu a pøíslu¹né dodatky a transakèní dokumenty poskytnuté IBM, a 2) softwarové postupy IBM, které jsou k dispozici na webových stránkách IBM Software Policy (www.ibm.com/softwarepolicies), vèetnì - a to zejména - postupù týkajících se zálohování, cen pro neúplný server a migrace. + +Práva a povinnosti uvedená dále v tomto oddílu 8 zùstávají v platnosti po dobu trvání licence a dva roky poté. + +8.1 Proces ovìøování + +Dr¾itel licence souhlasí, ¾e vytvoøí, bude uchovávat a poskytne IBM a jejím auditorùm pøesné písemné záznamy, výstupy systémových nástrojù a dal¹í systémové informace, které budou dostateèné k ovìøení, ¾e Dr¾itel licence u¾ívá v¹echny Programy v souladu s Podmínkami pro hodnocení programù, vèetnì v¹ech pøíslu¹ných podmínek IBM týkajících se licencování a cen. Dr¾itel licence nese odpovìdnost za 1) zaji¹tìní, ¾e nepøekroèí svou úroveò Oprávnìného u¾ívání, a 2) bude jednat v souladu s Podmínkami pro hodnocení programù. + +IBM je, na základì oznámení zaslaného v pøimìøené lhùtì pøedem, oprávnìna ovìøovat, zda Dr¾itel licence dodr¾uje Podmínky pro hodnocení programù na v¹ech pracovi¹tích a pro v¹echna prostøedí, v nich¾ pou¾ívá Programy (k jakémukoli úèelu) v souladu s Podmínkami pro hodnocení programù. Takové ovìøení bude provedeno zpùsobem, jen¾ bude v minimální mo¾né míøe naru¹ovat obchodní èinnosti Dr¾itele licence a smí být provedeno v prostorách Dr¾itele licence bìhem øádné pracovní doby. IBM je oprávnìna vyu¾ít k takové kontrole slu¾eb nezávislého auditora, za pøedpokladu, ¾e IBM s tímto auditorem uzavøe písemnou smlouvu o ochranì dùvìrných informací. + +8.2 Rozhodnutí + +Jestli¾e bude v rámci kontroly dodr¾ování podmínek zji¹tìno, ¾e Dr¾itel licence u¾ívá Program v rozsahu pøesahujícím úroveò jeho Oprávnìného u¾ívání nebo jinak nedodr¾uje Podmínky pro hodnocení programù, IBM o tom Dr¾itele licence písemnì informuje. Dr¾itel licence se zavazuje, ¾e neprodlenì uhradí pøímo IBM poplatky, které IBM uvede na faktuøe za 1) jakékoli takové nadmìrné u¾ívání, 2) podporu pro takové nadmìrné u¾ívání za dobu trvání takového nadmìrného u¾ívání nebo za dva roky (podle toho, které období je krat¹í), a 3) jakékoli dodateèné poplatky nebo jiné èástky, které budou stanoveny na základì výsledkù takové kontroly. + +9. Poznámky tøetích stran + +Program mù¾e zahrnovat kód tøetích stran, ke kterému Dr¾iteli licence poskytuje licenci na základì této Smlouvy IBM, nikoli tøetí strana. Jsou-li uvedeny jakékoli poznámky vztahující se ke kódu tøetích stran ("Poznámky tøetích stran"), pak jsou uvedeny pouze pro informaci Dr¾itele licence. Tyto poznámky mohou být uvedeny v souboru(ech) NOTICES k Programu. Informace o zpùsobu získání zdrojového kódu pro urèitý kód tøetích stran najdete v Poznámkách tøetích stran. Jestli¾e IBM v Poznámkách tøetích stran oznaèí kód tøetích stran za "Kód tøetích stran s mo¾ností modifikace", pak IBM opravòuje Dr¾itele licence k 1) modifikaci Kódu tøetích stran s mo¾ností modifikace a 2) ke zpìtné kompilaci Programových modulù, které mají pøímé rozhraní ke Kódu tøetích stran s mo¾ností modifikace, za pøedpokladu, ¾e tyto èinnosti budou slou¾it výhradnì k ladìní modifikací provádìných Dr¾itelem licence u takového Kódu tøetích stran. Závazek IBM týkající se servisu a podpory (je-li nìjaký) se vztahuje pouze na nemodifikovaný Program. + +10. V¹eobecná ustanovení + +a. Touto Smlouvou nejsou dotèena zákonná práva spotøebitelù, jich¾ se není mo¾no smluvnì zøíci nebo je¾ nemohou být smluvnì omezena. + +b. V pøípadì, ¾e by nìkteré ustanovení této Smlouvy bylo pova¾ováno za neplatné nebo nevymahatelné, zùstanou zbývající ustanovení této Smlouvy plnì platná a úèinná. + +c. Dr¾itel licence není oprávnìn Program exportovat. + +d. Dr¾itel licence souhlasí s tím, ¾e umo¾ní spoleènosti International Business Machines Corporation a jejím dceøiným spoleènostem (vèetnì jejich právních nástupcù, postupníkù, subdodavatelù a obchodních partnerù) ukládat a u¾ívat jeho kontaktní informace v¹ude, kde tito uskuteèòují svou obchodní èinnost související s produkty a slu¾bami IBM, nebo v rámci podpory obchodního vztahu mezi IBM a dr¾itelem Licence. + +e. Ka¾dá ze smluvních stran poskytne druhé stranì pøimìøenì mo¾nost nápravy pøedtím, ne¾ vùèi druhé stranì vznese nároky související s neplnìním jejích povinností vyplývajících z této Smlouvy. Smluvní strany se pokusí v dobré vùli vyøe¹it jakékoli spory, neshody èi nároky vztahující se k této Smlouvì. + +f. Nevy¾adují-li pøíslu¹né právní pøedpisy jinak, bez mo¾nosti smluvního zøeknutí se nebo omezení: 1) ¾ádná ze smluvních stran nezahájí právní úkon (bez ohledu na jeho formu) ohlednì jakéhokoli nároku vzniklého na základì této Smlouvy nebo ve spojení s touto Smlouvou pozdìji ne¾ dva roky od data vzniku pøíèiny takového právního úkonu; a 2) ve¹keré takové nároky a v¹echna pøíslu¹ná práva vztahující se k takovým nárokùm se po vypr¹ení takového èasového limitu pova¾ují za promlèené. + +g. ®ádná ze smluvních stran nenese odpovìdnost za nesplnìní jakýchkoli závazkù, pokud k takovému neplnìní do¹lo z dùvodù vzniklých nezávisle na její vùli. + +h. Tato Smlouva nezakládá pro ¾ádnou tøetí stranu ¾ádné právo nebo dùvod k ¾alobì a IBM nenese odpovìdnost za ¾ádné nároky tøetích stran vznesené vùèi Dr¾iteli licence, s výjimkou, jak uvádí odstavec 7.1 (Polo¾ky, za které IBM nenese odpovìdnost) vý¹e, ¹kody na zdraví (vèetnì smrti) nebo ¹kody na nemovitém nebo movitém majetku, za které je IBM vùèi takové tøetí stranì odpovìdná. + +i. Smluvní strany se dohodly, ¾e se po uzavøení toto Smlouvy nebudou opírat o ¾ádné prohlá¹ení, které není uvedeno v této Smlouvì, vèetnì jakéhokoli prohlá¹ení, které se týká: 1) výkonu èi fungování Programu jinak, ne¾ je výslovnì zaruèeno v oddílu 5 (Vylouèení záruk) vý¹e; 2) zku¹eností nebo doporuèení jiných stran; nebo 3) jakýchkoli výsledkù èi úspor, kterých mù¾e Dr¾itel licence dosáhnout. + +j. IBM uzavøela smlouvy s urèitými organizacemi (dále jen "Obchodní partneøi IBM") za úèelem nabízení, zprostøedkování prodeje a podpory vybraných Programù. Obchodní partneøi IBM zùstávají organizacemi nezávislými na IBM. IBM nenese odpovìdnost za jednání nebo prohlá¹ení Obchodních partnerù IBM, ani za jejich závazky vùèi Dr¾iteli licence. + +k. Licenèní podmínky a podmínky týkající se od¹kodnìní ve vztahu k právu du¹evního vlastnictví uvedené v jiných smlouvách, je¾ Dr¾itel licence uzavøel s IBM (jako je napøíklad smlouva IBM Customer Agreement), se nevztahují na licence na Program udìlené na základì této Smlouvy. + +11. Geografický rozsah a rozhodné právo + +11.1 Rozhodné právo + +Smluvní strany souhlasí s pou¾itím práva zemì, v ní¾ Dr¾itel licence zakoupil licenci na Program, podle kterého se budou øídit, vykládat a uplatòovat ve¹kerá práva, povinnosti a závazky Dr¾itele licence a IBM z této Smlouvy èi vztahující se k jejímu pøedmìtu a to bez ohledu na rozpor právních zásad. + +Úmluva OSN o smlouvách o mezinárodní koupi zbo¾í se neaplikuje. + +11.2 Jurisdikce + +V¹echna práva, povinnosti a závazky podléhají rozhodnutí pøíslu¹ných soudù zemì, v ní¾ Dr¾itel licence obdr¾el licenci na Program. + +Èást 2 - Podmínky specifické pro zemi + +Pro licence udìlené v Èeské republice platí, ¾e ní¾e uvedené podmínky nahrazují nebo mìní podmínky uvedené v Èásti 1. Ve¹keré podmínky uvedené v Èásti 1, které nejsou tìmito dodatky dotèeny, zùstávají v plné platnosti. + +DODATKY PRO ZEMÌ EVROPY, STØEDNÍHO VÝCHODU A AFRIKY (EMEA) + +ÈLENSKÉ STÁTY EVROPSKÉ UNIE + +5. Vylouèení záruk + +Ní¾e uvedený text se pøidává k oddílu 5 (Vylouèení záruk): + +Spotøebitelé z Evropské unie ("EU") mají zákonná práva, která vyplývají z platné národní legislativy vztahující se na prodej spotøebního zbo¾í. Tato práva nejsou dotèena ustanoveními tohoto oddílu 5 (Vylouèení záruk). + +ÈLENSKÉ STÁTY EU A ZEMÌ UVEDENÉ NÍ®E + +Jakákoliv evropská zemì, v které platí právní pøedpisy upravující ochranu osobních údajù a ochranu soukromí podobnì jako právní pøedpisy EU. + +10. V¹eobecná ustanovení + +Ní¾e uvedený text nahrazuje bod 10.d: + +(1) Definice: - Pro úèely tohoto bodu 10.d platí následující dodateèné definice: + +(a) Informace o obchodních kontaktech - kontaktní informace vztahující se k obchodním vztahùm, které Dr¾itel licence zpøístupní IBM, vèetnì jmen, funkcí, obchodních adres, telefonních èísel, e-mailových adres zamìstnancù a dodavatelù Dr¾itele licence. Pro Rakousko, Itálii a ©výcarsko zahrnují Informace o obchodních kontaktech rovnì¾ údaje o Dr¾iteli licence a jeho dodavatelích, kteøí jsou právnickými osobami (napøíklad údaje o pøíjmech Dr¾itele licence a dal¹í informace týkající se transakcí). + +(b) Obchodní kontakty: - zamìstnanci a dodavatelé Dr¾itele licence, jich¾ se týkají Informace o obchodních kontaktech. + +(c) Úøad na ochranu osobních údajù: - úøad zøízený dle zákona o ochranì osobních údajù a zákona o elektronických komunikacích pøíslu¹né zemì nebo (v zemích, je¾ nejsou èleny EU) úøad odpovìdný za kontrolu ochrany osobních údajù v této zemi, nebo (pro kteroukoli z vý¹e uvedených mo¾ností) øádnì jmenovaný právní nástupce takového úøadu. + +(d) Právní pøedpisy na ochranu osobních údajù a o elektronických komunikacích: - i) pøíslu¹né místní právní pøedpisy v platném znìní, které implementují po¾adavky Smìrnice Evropského parlamentu a Rady 95/46/ES (o ochranì fyzických osob v souvislosti se zpracováním osobních údajù a o volném pohybu tìchto údajù) a Smìrnice Evropského parlamentu a Rady 2002/58/ES (o zpracování osobních údajù a ochranì soukromí v odvìtví elektronických komunikací); nebo (ii) u zemí, je¾ nejsou èleny EU, právní pøedpisy schválené v pøíslu¹né zemi a týkající se ochrany osobních údajù a regulace elektronických komunikací, vèetnì (pro kteroukoli z vý¹e uvedených mo¾ností) jakékoli jejich zákonné náhrady nebo zmìny. + +(e) Skupina IBM - International Business Machines Corporation, Armonk, New York, USA, její dceøiné spoleènosti a jejich pøíslu¹ní Obchodní partneøi a subdodavatelé. + +(2) Dr¾itel licence opravòuje IBM: + +(a) ke zpracování a pou¾ívání Informací o obchodních kontaktech v rámci Skupiny IBM pro úèely poskytování podpory Dr¾iteli licence, vèetnì poskytování slu¾eb, a pro úèely podporování obchodních vztahù mezi Dr¾itelem licence a Skupinou IBM, vèetnì komunikace s Obchodními kontakty (e-mailem nebo jinak) a marketingu produktù a slu¾eb Skupiny IBM ("Uvedený úèel"); a + +(b) ke zpøístupnìní Informací o obchodních kontaktech ostatním èlenùm Skupiny IBM, a to pouze v souvislosti s Uvedeným úèelem. + +(3) IBM se zavazuje zpracovávat Informace o obchodních kontaktech v souladu s platnými právními pøedpisy na ochranu osobních údajù a o elektronických komunikacích a u¾ívat je pouze pro Uvedený úèel. + +(4) Dr¾itel licence prohla¹uje, ¾e získal (nebo získá), a to v rozsahu, v jakém to po¾adují právní pøedpisy na ochranu osobních údajù a o elektronických komunikacích, pøíslu¹né souhlasy od Obchodních kontaktù, které patøiènì o této skuteènosti informoval (nebo informuje), aby bylo Skupinì IBM umo¾nìno zpracovávat a u¾ívat Informace o obchodních kontaktech za úèelem komunikace s tìmito kontakty, vèetnì komunikace emailem, a to v souladu s Uvedeným úèelem. + +(5) Dr¾itel licence opravòuje IBM k pøená¹ení Informací o obchodních kontaktech mimo oblast Evropského hospodáøského prostoru za pøedpokladu, ¾e takový pøenos bude probíhat na základì smluvních podmínek schválených Úøadem na ochranu osobních údajù, pøípadnì, ¾e takový pøenos bude jinak povolen právními pøedpisy na ochranu osobních údajù a o elektronických komunikacích. + +Z125-5543-05 (07/2011) + + +Mezinárodní licenèní smlouva pro programy + +Èást 1 - Obecná ustanovení + +STA®ENÍM, INSTALACÍ, ZKOPÍROVÁNÍM, PØÍSTUPEM K PROGRAMU NEBO KLEPNUTÍM NA TLAÈÍTKO "SOUHLASÍM" NEBO JINÝM POU®ITÍM PROGRAMU VYJADØUJETE SVÙJ SOUHLAS S TOUTO SMLOUVOU. JESTLI®E S TÌMITO PODMÍNKAMI SOUHLASÍTE JMÉNEM DR®ITELE LICENCE, PROHLA©UJETE A ZARUÈUJETE, ®E JSTE PLNÌ ZMOCNÌNI VÁZAT DR®ITELE LICENCE TÌMITO PODMÍNKAMI. JESTLI®E S TÌMITO PODMÍNKAMI NESOUHLASÍTE: + +* NESTAHUJTE, NEINSTALUJTE, NEKOPÍRUJTE PROGRAM, NEPØISTUPUJTE K PROGRAMU, NEPOU®ÍVEJTE TLAÈÍTKO "SOUHLASÍM", ANI NEPOU®ÍVEJTE PROGRAM; A + +* BEZODKLADNÌ VRA«TE NEPOU®ITÉ NOSIÈE, DOKUMENTACI A DOKUMENT O OPRÁVNÌNÍ SUBJEKTU, OD KTERÉHO JSTE JE ZÍSKALI, A BUDE VÁM VRÁCENA ÈÁSTKA, KTEROU JSTE ZA NÌ ZAPLATILI. V PØÍPADÌ, ®E DO©LO KE STA®ENÍ PROGRAMU, ZNIÈTE V©ECHNY KOPIE PROGRAMU. + +1. Definice + +"Oprávnìné u¾ívání" - stanovená úroveò oprávnìní Dr¾itele licence provádìt nebo spou¹tìt Program. Tuto úroveò lze mìøit na základì poètu u¾ivatelù, miliónù servisních jednotek ("jednotky MSU"), jednotek Processor Value Units ("jednotky PVU") nebo na základì jiné úrovnì u¾ívání, kterou stanoví IBM. + +"IBM" je spoleènost International Business Machines Corporation nebo nìkterá z jejích dceøiných spoleèností. + +"Licenèní informace" ("LI") - dokument uvádìjící informace a ve¹keré dodateèné podmínky specifické pro Program. Licenèní informace k Programu jsou k dispozici na adrese www.ibm.com/software/sla. Dokument Licenèní informace je k dispozici rovnì¾ v adresáøi Programu - prostøednictvím systémového pøíkazu - nebo ve formì pøíruèky pøipojené k Programu. + +"Program" - ní¾e uvedené komponenty, vèetnì originálu a v¹ech úplných nebo dílèích kopií: 1) strojovì èitelné instrukce a data, 2) komponenty, soubory a moduly, 3) audiovizuální obsah (jako jsou obrazy, text, nahrávky nebo obrázky) a 4) související licenèní materiály (jako jsou licenèní klíèe a dokumentace). + +"Dokument o oprávnìní" ("PoE") - dùkaz o oprávnìném u¾ívání ze strany Dr¾itele licence. Dokument o oprávnìní je rovnì¾ dùkazem o nároku Dr¾itele licence na záruku, na ceny za budoucí pøechody na vy¹¹í verzi (budou-li nìjaké) a na potenciální zvlá¹tní nebo propagaèní pøíle¾itosti. Neposkytne-li IBM Dr¾iteli licence dokument o oprávnìní (Proof of Entitlement), pak IBM mù¾e akceptovat pùvodní stvrzenku o nákupu nebo jiný doklad o nákupu od subjektu (buï IBM, nebo její prodejce) od kterého Dr¾itel licence získal Program, za pøedpokladu, ¾e takový doklad uvádí název Programu a zakoupenou úroveò Oprávnìného u¾ívání. + +"Záruèní lhùta" - jeden rok, poèínaje datem, kdy byla pùvodnímu Dr¾iteli licence udìlena licence. + +2. Struktura smlouvy + +Tato Smlouva zahrnuje Èást 1 - Obecná ustanovení, Èást 2 - Podmínky specifické pro zemi (jsou-li nìjaká), dokument Licenèní informace a dokument o oprávnìní (Proof of Entitlement) a pøedstavuje úplnou dohodu mezi Dr¾itelem licence a IBM ohlednì u¾ívání Programu. Nahrazuje ve¹kerá pøedchozí ústní nebo písemná ujednání mezi Dr¾itelem licence a IBM ohlednì u¾ívání Programu Dr¾itelem licence. Podmínky Èásti 2 mohou nahrazovat nebo upravovat podmínky Èásti 1. V míøe, v ní¾ se vyskytne rozpor podmínek, mají podmínky dokumentu Licenèní informace pøednost pøed podmínkami obou Èástí. + +3. Udìlení licence + +Program je vlastnictvím IBM nebo dodavatele IBM, je chránìn autorskými právy a je k nìmu poskytováno právo u¾ívání, není prodáván. + +IBM udìluje Dr¾iteli licence nevýhradní licenci na 1) u¾ívání Programu a¾ do úrovnì Oprávnìného u¾ívání uvedené v dokumentu o oprávnìní (Proof of Entitlement), 2) vytvoøení a instalaci kopií na podporu takového Oprávnìného u¾ívání, a 3) vytvoøení zálo¾ní kopie, to v¹e za pøedpokladu, ¾e: + +a. Dr¾itel licence získal Program zákonným zpùsobem a dodr¾uje podmínky této Smlouvy; + +b. zálo¾ní kopie není spou¹tìna, leda¾e nelze spustit zálohovaný Program; + +c. Dr¾itel licence uvádí v¹echna upozornìní o autorských právech a dal¹í výhrady vlastnických práv na ka¾dé kopii nebo dílèí kopii Programu; + +d. Dr¾itel licence zajistí, aby ka¾dá osoba pou¾ívající Program (pøistupující lokálnì nebo vzdálenì) 1) tak èinila pouze jménem Dr¾itele licence, a 2) dodr¾ovala podmínky této Smlouvy; + +e. Dr¾itel licence nesmí 1) pou¾ívat, kopírovat, upravovat nebo distribuovat Program jinak, ne¾ je výslovnì dovoleno touto Smlouvou; 2) zpìtnì sestavovat, zpìtnì kompilovat èi jakkoliv pøekládat Program, není-li to výslovnì dovoleno zákonem bez mo¾nosti toto povolení smluvnì vylouèit; 3) u¾ívat kterékoli komponenty, soubory, moduly, audiovizuální obsah nebo související licenèní materiály nezávisle na Programu; nebo 4) Program sublicencovat, pronajímat èi poskytovat formou leasingu; a + +f. jestli¾e Dr¾itel licence získá tento Program jako Podpùrný program, bude jej pou¾ívat pouze na podporu Základního programu a v souladu s ve¹kerými omezeními uvedenými v licenci na Základní program, nebo - jestli¾e Dr¾itel licence získá tento program jako Základní program - bude pou¾ívat v¹echny Podpùrné programy pouze na podporu tohoto Programu a v souladu s ve¹kerými omezeními stanovenými v této Smlouvì. Pro úèely tohoto bodu "f" znamená "Podpùrný program" program, který je souèástí jiného programu IBM ("Základní program") a je v Licenèních informacích k Základnímu programu jako Podpùrný program uveden. (Chce-li Dr¾itel licence získat samostatnou licenci na neomezené u¾ívání Podpùrného programu, musí se obrátit na subjekt, od nìho¾ Podpùrný program zakoupil.) + +Tato licence se vztahuje na ka¾dou kopii Programu, kterou Dr¾itel licence vytvoøí. + +3.1 Pøechody typu Trade-up, aktualizace a opravy + +3.1.1 Pøechody typu Trade-up + +V pøípadì nahrazení Programu programem typu Trade-up platnost licence nahrazeného Programu okam¾itì konèí. + +3.1.2 Aktualizace a opravy + +Pokud Dr¾itel licence obdr¾í aktualizaci nebo opravu k Programu, akceptuje ve¹keré dodateèné nebo odli¹né podmínky, které jsou uvedeny v Licenèních informacích pro tuto aktualizaci nebo opravu. Nejsou-li k aktualizaci èi opravì dodateèné nebo odli¹né podmínky pøipojeny, pak se taková aktualizace èi oprava øídí výluènì podmínkami této Smlouvy. Dr¾itel licence se zavazuje, ¾e v pøípadì nahrazení Programu aktualizací pøestane pùvodní Program okam¾itì pou¾ívat. + +3.2 Licence na dobu urèitou + +Licencuje-li IBM Program na dobu urèitou, pak licenèní oprávnìní Dr¾itele licence konèí ke konci takové doby urèité. Výjimkou je pøípad, kdy se Dr¾itel licence a IBM dohodli na prodlou¾ení licence. + +3.3 Trvání a ukonèení Smlouvy + +Tato Smlouva je úèinná a¾ do jejího ukonèení. + +IBM je oprávnìna ukonèit licenci Dr¾itele licence, jestli¾e Dr¾itel licence nedodr¾í podmínky této Smlouvy. + +Ukonèí-li kterákoli ze stran licenci z jakéhokoli dùvodu, Dr¾itel licence je povinen okam¾itì pøestat pou¾ívat a znièit v¹echny kopie Programu, které má ve svém dr¾ení. Ve¹keré podmínky této Smlouvy, je¾ svou povahou pøetrvávají ukonèení této Smlouvy, zùstávají právnì úèinné a¾ do jejich splnìní a vztahují se rovnì¾ na právní nástupce a postupníky smluvních stran. + +4. Cena + +Poplatky jsou zalo¾eny na získané úrovni Oprávnìného u¾ívání, která je uvedena v dokumentu o oprávnìní (Proof of Entitlement). IBM nevrací ani jinak nerefunduje ji¾ splatné nebo zaplacené èástky, s výjimkou pøípadù, které jsou specifikovány jinde v této smlouvì. + +Pøeje-li si Dr¾itel licence úroveò Oprávnìného u¾ívání zvý¹it, je povinen o této skuteènosti pøedem informovat IBM nebo oprávnìného prodejce IBM a uhradit ve¹keré pøíslu¹né poplatky. + +5. Danì + +Bude-li na Program uvaleno orgánem k tomu oprávnìným clo, daò èi poplatek, vyjma tìch, které jsou zalo¾eny na èistém pøíjmu IBM, pak se Dr¾itel licence zavazuje, ¾e uhradí èástku uvedenou na faktuøe nebo pøedlo¾í potvrzení o osvobození od takové povinnosti. Od data obdr¾ení Programu je Dr¾itel licence odpovìdný za úhradu ve¹kerých pøípadných majetkových daní. Jestli¾e nìkterý úøad uvalí clo, daò èi poplatek na dovoz, vývoz, pøenos, pøístup nebo u¾ívání Programu mimo zemi, v ní¾ byla pùvodnímu Dr¾iteli licence udìlena licence, pak je Dr¾itel licence povinen uhradit jakoukoli takto stanovenou èástku. + +6. Záruka vrácení penìz + +Není-li Dr¾itel licence z nìjakého dùvodu spokojen s Programem a je pùvodním Dr¾itelem (nabyvatelem) licence, je oprávnìn licenci ukonèit a mù¾e mu být èástka, kterou za Program zaplatil, vrácena, av¹ak za pøedpokladu, ¾e Program a dokument o oprávnìní (Proof of Entitlement) subjektu, od kterého je získal, vrátí do 30 dní od data vystavení dokumentu o oprávnìní (Proof of Entitlement) pro Dr¾itele licence. Jedná-li se o licenci na dobu urèitou, kterou lze prodlou¾it, má Dr¾itel licence právo na refundaci pouze v pøípadì, ¾e Program a pøíslu¹ný dokument o oprávnìní (Proof of Entitlement) vrátí bìhem prvních 30 dní pùvodního období. Pokud Dr¾itel licence Program stáhnul, mìl by po¾ádat subjekt, od kterého jej získal, o pokyny, jak dosáhnout vrácení penìz. + +7. Pøevod programu + +Dr¾itel licence je oprávnìn pøevést Program a ve¹kerá licenèní práva a povinnosti Dr¾itele licence na jinou stranu pouze za pøedpokladu, ¾e daná strana akceptuje podmínky této Smlouvy. V pøípadì ukonèení licence kteroukoli smluvní stranou bez ohledu na dùvod nesmí Dr¾itel licence Program na jinou smluvní stranu pøevést. Dr¾itel licence není oprávnìn pøevádìt èást 1) Programu; nebo 2) Oprávnìné u¾ívání programu. S pøevodem Programu musí Dr¾itel licence pøedat rovnì¾ ti¹tìnou verzi této Smlouvy, vèetnì Licenèních informací a dokumentu o oprávnìní (Proof of Entitlement). Licenèní oprávnìní Dr¾itele licence Okam¾itì po pøevodu konèí. + +8. Záruka a vylouèení záruky + +8.1 Omezená záruka + +IBM zaruèuje, ¾e Program, pro který je poskytována záruka, je-li pou¾íván v urèeném operaèním prostøedí, bude odpovídat pøíslu¹ným Specifikacím. Specifikace k Programu a informace o urèeném provozním prostøedí jsou k dispozici v dokumentaci pøipojené k Programu (jako je napøíklad soubor Readme) nebo ve formì jiných informací zveøejnìných spoleèností IBM (jako je napøíklad oznamovací leták). Dr¾itel licence bere na vìdomí, ¾e tato dokumentace a dal¹í informace týkající se programu mohou být dodány pouze v anglickém jazyce, není-li to výslovnì stanoveno pøíslu¹nými právními pøedpisy bez mo¾nosti vzdání se nebo omezení práva smluvnì. + +Záruka se vztahuje pouze na nezmìnìnou èást Programu. IBM nezaruèuje nepøeru¹ený èi bezchybný provoz Programu, ani nezaruèuje, ¾e opraví ve¹keré chyby Programu. Za výsledky u¾ívání Programu nese odpovìdnost Dr¾itel licence. + +Bìhem záruèní doby poskytne IBM Dr¾iteli licence bezplatný pøístup k databázím IBM obsahujícím informace o známých chybách Programu, o opravách chyb, omezeních a zpùsobech, jak chyby obejít. Dal¹í informace najdete v pøíruèce IBM Software Support Handbook na adrese www.ibm.com/software/support. + +Nevykazuje-li Program bìhem Záruèní lhùty zaruèenou funkènost a problém nelze vyøe¹it prostøednictvím informací uvedených v databázích IBM, smí Dr¾itel licence vrátit Program a dokument o oprávnìní (Proof of Entitlement) subjektu (IBM nebo její prodejce), od kterého Program získal, a bude mu vrácena èástka, kterou zaplatil. Po vrácení Programu licenèní oprávnìní Dr¾itele licence konèí. Pokud Dr¾itel licence Program stáhnul, mìl by po¾ádat subjekt, od kterého jej získal, o pokyny, jak dosáhnout vrácení penìz. + +8.2 Vylouèení záruky + +TYTO ZÁRUKY JSOU JEDINÝMI ZÁRUKAMI DR®ITELE LICENCE A NAHRAZUJÍ VE©KERÉ OSTATNÍ ZÁRUKY ÈI PODMÍNKY, VYJÁDØENÉ VÝSLOVNÌ NEBO VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ - A TO ZEJMÉNA - ZÁRUK ÈI PODMÍNEK PRODEJNOSTI, USPOKOJIVÉ KVALITY, VHODNOSTI PRO URÈITÝ ÚÈEL, PRÁVNÍHO NÁROKU A JAKÉKOLI ZÁRUKY ÈI PODMÍNKY NEPORU©ENÍ PRÁV TØETÍCH STRAN. NÌKTERÉ STÁTY NEBO JURISDIKCE NEPØIPOU©TÌJÍ VYLOUÈENÍ VÝSLOVNÝCH NEBO IMPLICITNÍCH ZÁRUK, A PROTO SE NA VÁS VÝ©E UVEDENÉ VÝJIMKY A OMEZENÍ NEMUSÍ VZTAHOVAT. V TAKOVÉM PØÍPADÌ JE PLATNOST ZÁRUKY ÈASOVÌ OMEZENA POUZE NA UVEDENOU ZÁRUÈNÍ DOBU. PO UKONÈENÍ TÉTO DOBY IBM NEPOSKYTUJE ®ÁDNÉ DAL©Í ZÁRUKY. NÌKTERÉ STÁTY NEBO JURISDIKCE NEPØIPOU©TÌJÍ OMEZENÍ DOBY TRVÁNÍ IMPLICITNÍ ZÁRUKY, A PROTO SE VÝ©E UVEDENÉ OMEZENÍ NA DR®ITELE LICENCE NEMUSÍ VZTAHOVAT. + +TYTO ZÁRUKY POSKYTUJÍ DR®ITELI LICENCE SPECIFICKÁ ZÁKONNÁ PRÁVA. DR®ITEL LICENCE MÙ®E MÍT ROVNÌ® DAL©Í PRÁVA, KTERÁ SE LI©Í STÁT OD STÁTU NEBO JURISDIKCE OD JURISDIKCE. + +ZÁRUKY V TOMTO ODDÍLU 8 (ZÁRUKA A VYLOUÈENÍ ZÁRUKY) POSKYTUJE VÝHRADNÌ IBM. VYLOUÈENÍ V TOMTO BODU 8.2 (VYLOUÈENÍ ZÁRUKY) SE V©AK VZTAHUJE ROVNÌ® NA DODAVATELE IBM, KTEØÍ POSKYTUJÍ KÓD TØETÍCH STRAN. TAKOVÍ DODAVATELÉ POSKYTUJÍ DANÝ KÓD BEZ ZÁRUK ÈI PODMÍNEK JAKÉHOKOLI DRUHU. TENTO ODSTAVEC NERU©Í ZÁRUÈNÍ POVINNOSTI IBM VYPLÝVAJÍCÍ Z TÉTO SMLOUVY. + +9. Data a databáze Dr¾itele licence + +IBM mù¾e s cílem pomoci Dr¾iteli licence s urèením problému s Programem po¾adovat, aby Dr¾itel licence 1) umo¾nil IBM vzdálený pøístup k systému Dr¾itele licence, nebo 2) aby zaslal IBM pøíslu¹né údaje nebo systémová data. IBM v¹ak není povinna poskytnout takovou asistenci, pokud IBM a Dr¾itel licence neuzavøeli samostatnou písemnou dohodu, na jejím¾ základì se IBM zavazuje, ¾e bude Dr¾iteli licence poskytovat tento typ podpory, který pøesahuje záruèní povinnosti IBM vyplývající z této Smlouvy. IBM za v¹ech okolností pou¾ívá informace o chybách a problémech ke zdokonalování jejích produktù a slu¾eb a poskytuje klientùm asistenci prostøednictvím souvisejících nabídek podpory. K tomuto úèelu mù¾e IBM vyu¾ít slu¾eb subjektù a dodavatelù IBM (vèetnì subjektù a dodavatelù z jedné nebo více jiných zemí, ne¾ je zemì, v ní¾ má sídlo Dr¾itel licence) a Dr¾itel licence opravòuje IBM k takovému vyu¾ití slu¾eb subjektù a dodavatelù IBM. + +Dr¾itel licence zùstává odpovìdný za 1) ve¹kerá data a obsah jakékoli databáze, kterou pro IBM zpøístupní, 2) výbìr a implementaci postupù a kontrol týkajících se pøístupu, zabezpeèení, ¹ifrování, u¾ívání a pøenosu dat (vèetnì ve¹kerých osobních údajù), a 3) zálohování a obnovu jakékoli databáze a ve¹kerých ulo¾ených dat. Dr¾itel licence nesmí odeslat IBM ¾ádné osobní údaje nebo poskytnout IBM pøístup k ¾ádným osobním údajùm, a» u¾ ve formì dat nebo v nìjaké jiné formì, a nese odpovìdnost za ve¹keré pøimìøené náklady nebo jiné výdaje, které mohou IBM vzniknout v souvislosti s neoprávnìným poskytnutím takových informací IBM nebo v souvislosti se ztrátou èi zpøístupnìním informací ze strany IBM, vèetnì tìch zalo¾ených na nárocích tøetích stran. + +10. Omezení odpovìdnosti + +Omezení odpovìdnosti a vylouèení záruky v tomto oddíle 10 (Omezení odpovìdnosti) se aplikuje v plném rozsahu, pokud není zakázáno ze zákona, bez mo¾nosti smluvního zøeknutí se. + +10.1 Polo¾ky, za které IBM nese odpovìdnost + +Mohou nastat okolnosti, kdy má Dr¾itel licence z dùvodu neplnìní závazku na stranì IBM nebo jiné odpovìdnosti nárok na náhradu ¹kody od IBM. Bez ohledu na pøíèinu vzniku nároku Dr¾itele licence na náhradu ¹kody od IBM (vèetnì podstatného poru¹ení, nedbalosti, pøivedení v omyl nebo jiného poru¹ení závazkového èi mimozávazkového vztahu), odpovídá IBM pouze za nároky vzniklé na základì ka¾dého Programu nebo ve spojení s ním nebo za nároky jinak vzniklé na základì této Smlouvy, a tato odpovìdnost nesmí pøesáhnout èástku jakýchkoli 1) ¹kod na zdraví (vèetnì smrti) a ¹kod na nemovitém a osobním hmotném majetku, a 2) jiných skuteèných pøímých ¹kod a¾ do vý¹e poplatkù, které Dr¾itel licence zaplatil za Program, který je pøedmìtem nároku (pokud je Program licencován na dobu urèitou, pak do vý¹e poplatkù za dvanáct mìsícù). + +Tento limit se vztahuje rovnì¾ na ve¹keré vývojáøe a dodavatele Programù IBM. Jedná se o maximum, za které IBM a její vývojáøi a dodavatelé Programù spoleènì odpovídají. + +10.2 Polo¾ky, za které IBM nenese odpovìdnost + +VYJMA PØÍPADÙ, KDY JE TO VÝSLOVNÌ PO®ADOVÁNO PRÁVNÍMI PØEDPISY BEZ MO®NOSTI VZDÁNÍ SE PRÁVA SMLUVNÌ, NEBUDOU IBM, JEJÍ SUBDODAVATELÉ ANI VÝVOJÁØI PROGRAMÙ ZA ®ÁDNÝCH OKOLNOSTÍ ODPOVÌDNI ZA NÁSLEDUJÍCÍ, A TO V PØÍPADÌ, ®E BY IBM BYLA NA TAKOVOU MO®NOST UPOZORNÌNA: + +a. ZA ZTRÁTU DAT NEBO ©KODU NA DATECH; + +b. ZA ZVLÁ©TNÍ, NAHODILÉ NEBO NEPØÍMÉ ©KODY ÈI ZA NÁSLEDNÉ HOSPODÁØSKÉ ©KODY; NEBO + +c. ZA U©LÝ ZISK, ZTRÁTU OBCHODNÍCH PØÍLE®ITOSTÍ, U©LÉ PØÍJMY, ÚJMU ZPÙSOBENOU PO©KOZENÍM DOBRÉHO JMÉNA NEBO ZA NEDOSA®ENÉ PØEDPOKLÁDANÉ ÚSPORY. + +11. Kontrola dodr¾ování podmínek + +Pro úèely tohoto oddílu 11 (Kontrola dodr¾ování podmínek), znamenají "Podmínky IPLA" 1) tuto Smlouvu a pøíslu¹né dodatky a transakèní dokumenty dodané ze strany IBM, a 2) softwarové strategie IBM, které jsou k dispozici na webových stránkách IBM Software Policy (www.ibm.com/softwarepolicies), vèetnì - a to zejména - strategií týkajících se zálohování, cen pro neúplný server a migrace. + +Práva a povinnosti uvedená dále v tomto oddílu 11 zùstávají v platnosti po dobu trvání licence a dva roky poté. + +11.1 Proces ovìøování + +Dr¾itel licence souhlasí, ¾e vytvoøí, bude uchovávat a poskytne IBM a jejím auditorùm pøesné písemné záznamy, výstupy systémových nástrojù a dal¹í systémové informace, které budou dostateèné k ovìøení, ¾e Dr¾itel licence u¾ívá v¹echny Programy v souladu s podmínkami smlouvy IPLA vèetnì - a to zejména - v¹ech pøíslu¹ných podmínek IBM týkajících se licencování a cen. Dr¾itel licence je odpovìdný za to, ¾e 1) zajistí, ¾e nebude pøekroèena jeho úroveò Oprávnìného u¾ívání, a 2) bude jednat v souladu s podmínkami smlouvy IPLA. + +IBM je na základì oznámení zaslaného v pøimìøené dlouhé lhùtì pøedem oprávnìna zkontrolovat, zda Dr¾itel licence dodr¾uje podmínky smlouvy IPLA na v¹ech pracovi¹tích a pro v¹echna prostøedí, v nich¾ Dr¾itel licence pou¾ívá Programy (k jakémukoli úèelu) v souladu s podmínkami smlouvy IPLA. Takové ovìøení bude provedeno zpùsobem, jen¾ bude minimalizovat ru¹ení obchodní èinnosti Dr¾itele licence a smí být provedeno v prostorách Dr¾itele licence bìhem øádné pracovní doby. IBM je oprávnìna vyu¾ít k takové kontrole slu¾eb nezávislého auditora, a to za pøedpokladu, ¾e IBM s tímto auditorem uzavøe písemnou smlouvu o ochranì dùvìrných informací. + +11.2 Rozhodnutí + +IBM bude Dr¾itele písemnì informovat, jestli¾e bude v rámci kontroly dodr¾ování podmínek zji¹tìno, ¾e Dr¾itel licence u¾ívá Program v rozsahu pøesahujícím úroveò jeho Oprávnìného u¾ívání nebo jinak nedodr¾uje podmínky smlouvy IPLA. Dr¾itel licence se zavazuje, ¾e neprodlenì uhradí pøímo IBM poplatky, které IBM uvede na faktuøe za 1) jakékoli takové nadmìrné u¾ívání, 2) podporu pro takové nadmìrné u¾ívání za dobu trvání takového nadmìrného u¾ívání nebo za dva roky (podle toho, které období je krat¹í), a 3) jakékoli dodateèné poplatky nebo jiné èástky, které budou stanoveny na základì výsledkù takové kontroly. + +12. Poznámky tøetích stran + +Program mù¾e zahrnovat kód tøetích stran, ke kterému Dr¾iteli licence poskytuje licenci na základì této Smlouvy IBM, nikoli tøetí strana. Poznámky (jsou-li nìjaké) týkající se kódu tøetích stran ("Poznámky tøetích stran") jsou uvedeny pouze pro informaci Dr¾itele licence. Tyto poznámky mohou být uvedeny v souboru(ech) NOTICES k Programu. Informace o zpùsobu získání zdrojového kódu pro urèitý kód tøetích stran najdete v Poznámkách tøetích stran. Jestli¾e IBM v Poznámkách tøetích stran oznaèí kód tøetích stran za "Kód tøetích stran s mo¾ností modifikace", pak IBM opravòuje Dr¾itele licence k 1) modifikaci Kódu tøetích stran s mo¾ností modifikace a 2) ke zpìtné kompilaci Programových modulù, které mají pøímé rozhraní ke Kódu tøetích stran s mo¾ností modifikace, za pøedpokladu, ¾e tyto èinnosti budou slou¾it výhradnì k ladìní modifikací provádìných Dr¾itelem licence u takového Kódu tøetích stran. Závazek IBM týkající se servisu a podpory (je-li nìjaký) se vztahuje pouze na nemodifikovaný Program. + +13. V¹eobecná ustanovení + +a. Touto Smlouvou nejsou dotèena zákonná práva spotøebitelù, jich¾ se není mo¾no smluvnì zøíci nebo je¾ nemohou být smluvnì omezena. + +b. Není-li mezi Dr¾itelem licence a IBM písemnì dohodnuto jinak, splní IBM u Programù, které dodává Dr¾iteli licence v hmotné podobì, svùj závazek odeslat a dodat pøedmìtné Programy jejich pøedáním pøepravci urèenému IBM. + +c. V pøípadì, ¾e by nìkteré ustanovení této Smlouvy bylo pova¾ováno za neplatné nebo nevymahatelné, zùstanou zbývající ustanovení této Smlouvy v plné platnosti a úèinnosti. + +d. Ka¾dá ze smluvních stran bude postupovat v souladu s pøíslu¹nými vývozními a dovozními právními pøedpisy, vèetnì právních pøedpisù Spojených státù amerických, které zakazují èi omezují vývoz pro úèely urèitého pou¾ití èi pro urèité koncové u¾ivatele. Dr¾itel licence se zavazuje, ¾e bude postupovat v souladu s pøíslu¹nými vývozními a dovozními právními pøedpisy, vèetnì právních pøedpisù Spojených státù amerických, které zakazují èi omezují vývoz pro úèely urèitého pou¾ití èi pro urèité koncové u¾ivatele. + +e. Dr¾itel licence opravòuje spoleènost International Business Machines Corporation a její pøíbuzné spoleènosti (a jejich právní nástupce, postupníky, dodavatele a obchodní partnery IBM) k uchování a u¾ívání kontaktních informací Dr¾itele licence v¹ude, kde tito provádìjí svou obchodní èinnost ve spojení s produkty a slu¾bami IBM, nebo v rámci podpory obchodního vztahu IBM s dr¾itelem Licence. + +f. Ka¾dá ze smluvních stran poskytne druhé stranì pøimìøenì mo¾nost nápravy pøedtím, ne¾ vùèi druhé stranì vznese nároky související s neplnìním jejích povinností z této Smlouvy. Smluvní strany se pokusí v dobré vùli vyøe¹it jakékoli spory, neshody èi nároky vztahující se k této Smlouvì. + +g. Nevy¾adují-li pøíslu¹né právní pøedpisy jinak, bez mo¾nosti smluvního zøeknutí se nebo omezení: 1) ¾ádná ze smluvních stran nezahájí právní úkon (bez ohledu na jeho formu) ohlednì jakéhokoli nároku vzniklého na základì této Smlouvy nebo ve spojení s touto Smlouvou pozdìji ne¾ dva roky od data vzniku pøíèiny takového právního úkonu; a 2) ve¹keré takové nároky a v¹echna pøíslu¹ná práva vztahující se k takovým nárokùm se po vypr¹ení takového èasového limitu pova¾ují za promlèené. + +h. ®ádná ze smluvních stran nenese odpovìdnost za nesplnìní jakýchkoli závazkù, pokud k takovému neplnìní do¹lo z dùvodù vzniklých nezávisle na její vùli. + +i. Tato Smlouva nezakládá pro ¾ádnou tøetí stranu ¾ádné právo nebo dùvod k ¾alobì a IBM nenese odpovìdnost za ¾ádné nároky tøetích stran vznesené vùèi Dr¾iteli licence, s výjimkou, jak uvádí odstavec 10.1 (Polo¾ky, za které IBM nenese odpovìdnost) vý¹e, ¹kody na zdraví (vèetnì smrti) nebo ¹kody na nemovitém nebo hmotném osobním majetku, za které je IBM vùèi takové tøetí stranì právnì odpovìdná. + +j. Obì smluvní strany souhlasí, ¾e se po uzavøení toto Smlouvy nebudou opírat o ¾ádné prohlá¹ení, které není uvedeno v této Smlouvì vèetnì - a to zejména - jakéhokoli prohlá¹ení týkajícího se: 1) výkonu èi fungování Programu jinak, ne¾ je výslovnì zaruèeno v oddílu 8 (Záruka a vylouèení záruky) vý¹e; 2) zku¹enosti nebo doporuèení jiných stran; nebo 3) jakýchkoli výsledkù èi úspor, kterých mù¾e Dr¾itel licence dosáhnout. + +k. IBM uzavøela smlouvy s urèitými organizacemi (dále jen "Obchodní partneøi IBM") za úèelem nabízení, zprostøedkování prodeje a podpory vybraných Programù. Obchodní partneøi IBM zùstávají organizacemi nezávislými na IBM. IBM nenese odpovìdnost za jednání nebo prohlá¹ení Obchodních partnerù IBM, ani za jejich závazky vùèi Dr¾iteli licence. + +l. Licenèní podmínky a podmínky týkající se náhrady ¹kody v souvislosti s právem k du¹evnímu vlastnictví, které jsou zakotveny v jiných smlouvách, je¾ Dr¾itel licence uzavøel s IBM (jako je napøíklad smlouva IBM Customer Agreement), se nevztahují na licence na Program udìlené na základì této Smlouvy. + +14. Geografický rozsah a rozhodné právo + +14.1 Rozhodné právo + +Obì strany souhlasí s tím, ¾e se interpretace a vymáhání v¹ech práv, povinností a závazkù Dr¾itele licence i IBM, vyplývajících z této Smlouvy nebo se k ní nìjakým zpùsobem vztahujících, bez ohledu na konflikt právních principù, øídí právními pøedpisy zemì, v ní¾ Dr¾itel licence zakoupil licenci na Program. + +Úmluva OSN o smlouvách o mezinárodní koupi zbo¾í se neaplikuje. + +14.2 Jurisdikce + +V¹echna práva, povinnosti a závazky budou podléhat rozhodnutím pøíslu¹ných soudù zemì, v ní¾ Dr¾itel licence obdr¾el licenci na Program. + +Èást 2 - Podmínky specifické pro zemi + +Pro licence udìlené v Èeské republice platí, ¾e ní¾e uvedené podmínky nahrazují nebo mìní podmínky uvedené v Èásti 1. Ve¹keré podmínky uvedené v Èásti 1, které nejsou tímto dodatkem dotèeny, zùstávají v plné platnosti v pùvodním znìní. + +DODATKY PRO ZEMÌ EVROPY, STØEDNÍHO VÝCHODU A AFRIKY (EMEA) + +ÈLENSKÉ STÁTY EVROPSKÉ UNIE + +8. Záruka a vylouèení záruky + +Ní¾e uvedený text se pøidává k oddílu 8 (Záruka a vylouèení záruky): + +Spotøebitelé z Evropské unie ("EU") mají zákonná práva vyplývající z národní legislativy upravující prodej spotøebitelského zbo¾í. Taková práva nejsou dotèena ustanoveními uvedenými v tomto oddílu 8 Záruka a Vylouèení záruky. Územní rozsah Omezené záruky je celosvìtový. + +13. V¹eobecná ustanovení + +Ní¾e uvedený text nahrazuje bod 13.e: + +(1) Definice - Pro úèely tohoto bodu 13.e se aplikují následující dodateèné definice: + +(a) Informace o obchodních kontaktech - kontaktní informace vztahující se k obchodním vztahùm, které Dr¾itel licence sdìlí IBM, vèetnì jmen, funkcí, obchodních adres, telefonních èísel, e-mailových adres zamìstnancù a dodavatelù Dr¾itele licence. Pro Rakousko, Itálii a ©výcarsko zahrnují Obchodní kontaktní informace rovnì¾ údaje o Zákazníkovi a jeho dodavatelích jako právních subjektech (napøíklad údaje o pøíjmech Zákazníka a dal¹í transakèní informace). + +(b) Obchodní kontakty - zamìstnanci a dodavatelé Dr¾itele licence, jich¾ se týkají Informace o obchodních kontaktech. + +(c) Úøad na ochranu osobních údajù - úøad zøízený dle zákona o ochranì osobních údajù a zákona o elektronických komunikacích pøíslu¹né zemì nebo, u zemí, je¾ nejsou èleny EU, úøad odpovìdný za kontrolu ochrany osobních údajù v této zemi, nebo (pro kteroukoli z vý¹e uvedených mo¾ností) øádnì jmenovaný právní nástupce takového úøadu. + +(d) Právní pøedpisy na ochranu osobních údajù a o elektronických komunikacích - (i) pøíslu¹né místní právní pøedpisy a naøízení v platném znìní, které implementují po¾adavky Smìrnice Evropského parlamentu a Rady 95/46/ES (o ochranì fyzických osob v souvislosti se zpracováním osobních údajù a o volném pohybu tìchto údajù) a Smìrnice Evropského parlamentu a Rady 2002/58/ES (o zpracování osobních údajù a ochranì soukromí v odvìtví elektronických komunikací); nebo (ii) u zemí, je¾ nejsou èleny EU, právní pøedpisy a/nebo naøízení schválená v pøíslu¹né zemi a týkající se ochrany osobních údajù a regulace elektronických komunikací, vèetnì (pro kteroukoli z vý¹e uvedených mo¾ností) jakékoli jejich zákonné náhrady nebo zmìny. + +(e) Skupina IBM - spoleènost International Business Machines Corporation, Armonk, New York, USA, její dceøinné spoleènosti a jejich pøíslu¹ní Obchodní partneøi a subdodavatelé. + +(2) Dr¾itel licence opravòuje IBM: + +(a) ke zpracování a pou¾ívání Informací o obchodních kontaktech v rámci Skupiny IBM pro úèely poskytování podpory Dr¾iteli licence, vèetnì poskytování slu¾eb, a pro úèely podporování obchodních vztahù mezi Dr¾itelem licence a Skupinou IBM vèetnì, nikoli výhradnì, kontaktování Obchodních kontaktù (e-mailem nebo jinak) a marketingu produktù a slu¾eb Skupiny IBM ("Uvedený úèel"); a + +(b) k zpøístupnìní Informací o obchodních kontaktech v rámci Skupiny IBM pouze v souvislosti s Uvedeným úèelem. + +(3) IBM se zavazuje zpracovávat Informace o obchodních kontaktech v souladu s platnými právními pøedpisy na ochranu osobních údajù a o elektronických komunikacích a u¾ívat pouze pro Uvedený úèel. + +(4) Dr¾itel licence prohla¹uje, ¾e získal (nebo získá), a to v rozsahu, v jakém to po¾adují právní pøedpisy na ochranu osobních údajù a o elektronických komunikacích, pøíslu¹né souhlasy od Obchodních kontaktù, které patøiènì o této skuteènosti informoval (nebo informuje), aby bylo Skupinì IBM umo¾nìno zpracovávat a u¾ívat Informace o obchodních kontaktech za úèelem komunikace s tìmito kontakty, vèetnì komunikace emailem, a to v souladu s Uvedeným úèelem. + +(5) Dr¾itel licence souhlasí s tím, ¾e IBM mù¾e pøená¹et Informace o obchodních kontaktech mimo oblast Evropského hospodáøského prostoru za pøedpokladu, ¾e takový pøenos bude probíhat na základì smluvních podmínek schválených Úøadem na ochranu osobních údajù zaji¹»ujících odpovídající ochranu práv a svobod osob, kterých se tyto údaje týkají, nebo ¾e takový pøenos bude jinak povolen právními pøedpisy na ochranu osobních údajù a o elektronických komunikacích. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_de b/charts/mq-advancedserver/LICENSE_locale/LICENSE_de new file mode 100644 index 0000000..608ee37 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_de @@ -0,0 +1,1289 @@ +HINWEIS + +Dieses Dokument enthält weiter unten Lizenzinformationsdokumente für mehrere Programme. In jedem Lizenzinformationsdokument ist das Programm angegeben, auf das es sich bezieht, wobei auch mehrere Programme angegeben sein können. Es kommen nur die Lizenzinformationsdokumente für diejenigen Programme zur Anwendung, für die der Lizenznehmer Berechtigungen erworben hat. + + +============================================== + + +WICHTIG: BITTE AUFMERKSAM LESEN + +Es folgen zwei Lizenzvereinbarungen. + +1. IBM Internationale Nutzungsbedingungen für die Bewertung von Programmen +2. IBM Internationale Nutzungsbedingungen für Programmpakete + +Wenn der Lizenznehmer das Programm für die produktive Nutzung (nicht für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Wenn der Lizenznehmer das Programm für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum (gemeinsam als "Bewertung" bezeichnet) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer sowohl (i) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für die Bewertung von Programmen ("Probelizenz") als auch (ii) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Die Probelizenz gilt für die Dauer des Bewertungszeitraums. + +Die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen automatisch zur Anwendung, wenn der Lizenznehmer sich dafür entscheidet, das Programm nach dem Bewertungszeitraum zu behalten (oder zusätzliche Programmkopien zur Nutzung nach Ablauf des Bewertungszeitraums zu beziehen), indem er eine entsprechende Beschaffungsvereinbarung (z. B. den IBM International Passport Advantage-Vertrag oder den IBM Passport Advantage Express-Vertrag) abschließt. + +Die Probelizenz und die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen nicht gleichzeitig zur Anwendung; sie schränken sich weder gegenseitig ein, noch ergänzen sie sich gegenseitig und sind voneinander unabhängige Vereinbarungen. + +Der vollständige Text der beiden Lizenzvereinbarungen ist nachfolgend aufgeführt. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für die Bewertung von Programmen (Z125-5543-05) zur Anwendung. + +Programmname (Programmnummer): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Die folgenden Standardbedingungen gelten für die Programmnutzung durch den Lizenznehmer. + +Bewertungszeitraum + +Der Bewertungszeitraum beginnt mit dem Datum, an dem der Lizenznehmer den Bedingungen dieser Vereinbarung zustimmt, und endet nach 90 Tagen. + +Unterstützungsprogramme + +Das Programm wird als Multiproduktpaket lizenziert und enthält die nachfolgend aufgeführten Unterstützungsprogramme. Der Lizenznehmer darf die Unterstützungsprogramme unter dieser Vereinbarung und im Rahmen der Berechtigungsnachweise (Proofs of Entitlement = PoEs) für das Programm nur zur Unterstützung des Hauptprogramms installieren und nutzen (sofern an anderer Stelle in dieser Lizenzinformation keine weitergehenden Rechte erteilt werden). Der Ausdruck "nur zur Unterstützung" umfasst nur die erforderliche Nutzung oder diejenige Nutzung, die im direkten Zusammenhang mit der lizenzierten Nutzung des Hauptprogramms oder eines anderen Unterstützungsprogramms steht. Die Unterstützungsprogramme dürfen nicht für andere Zwecke verwendet werden. Der Lizenznehmer ist nicht berechtigt, die Unterstützungsprogramme ohne das Hauptprogramm zu übertragen oder weiterzuvertreiben. Einem Unterstützungsprogramm können Lizenzbedingungen beigefügt sein, denen die Nutzung des betreffenden Unterstützungsprogramms durch den Lizenznehmer unterliegt. Im Falle eines Widerspruchs haben die Bedingungen dieses Lizenzinformationsdokuments Vorrang vor den Bedingungen des Unterstützungsprogramms. Wenn das Recht des Lizenznehmers zur Nutzung des Programms abläuft oder erlischt, muss er die Nutzung der Unterstützungsprogramme einstellen und alle Kopien der Unterstützungsprogramme vernichten oder unverzüglich bei der Stelle zurückgeben, von der er das Programm bezogen hat. Hat der Lizenznehmer die Unterstützungsprogramme heruntergeladen, sollte er sich an die Stelle wenden, von der er das Programm bezogen hat. Um die Unterstützungsprogramme für eine Nutzung ohne die obigen Beschränkungen zu lizenzieren, sollte sich der Lizenznehmer bitte an seinen IBM Vertriebsbeauftragten oder an die Stelle wenden, von der er das Programm bezogen hat, um die entsprechende Lizenz zu erwerben. + +Diese Liste enthält die Unterstützungsprogramme, die mit dem Programm lizenziert werden: +IBM WebSphere Application Server Liberty V17.0 + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für Programmpakete (Z125-3301-14) zur Anwendung. + +Programmname (Programmnummer): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Die folgenden Standardbedingungen gelten für die Programmnutzung durch den Lizenznehmer. + +Eingeschränktes Nutzungsrecht + +Gemäß der Beschreibung in den Internationalen Nutzungsbedingungen für Programmpakete ("IPLA") und dieser Lizenzinformation gewährt IBM dem Lizenznehmer ein beschränktes Recht zur Nutzung des Programms. Dieses Recht ist auf die Art der Nutzungsberechtigung, z. B. Prozessor-Value-Unit ("PVU"), Ressourcen-Value-Unit ("RVU") oder Value-Unit ("VU"), oder eine andere angegebene Nutzungsstufe beschränkt, für die der Lizenznehmer laut Berechtigungsnachweis (Proof of Entitlement = PoE) bezahlt hat. Die Nutzung des Lizenznehmers kann außerdem auf eine bestimmte Maschine beschränkt sein, ggf. darf er das Programm nur als Unterstützungsprogramm verwenden oder die Nutzung kann sonstigen Beschränkungen unterliegen. Da der Lizenznehmer nicht für den gesamten wirtschaftlichen Wert des Programms bezahlt hat, sind andere Nutzungsarten ohne Zahlung zusätzlicher Gebühren untersagt. Ferner ist der Lizenznehmer nicht berechtigt, das Programm zur Bereitstellung kommerzieller IT-Services für Dritte, zur Bereitstellung kommerzieller Hosting-Services oder für kommerziell betriebenes Time-Sharing einzusetzen oder das Programm zu vermieten, zu verleasen oder Unterlizenzen für das Programm zu vergeben, sofern dies in den maßgeblichen Vereinbarungen, unter denen der Lizenznehmer die Berechtigungen zur Nutzung des Programms erworben hat, nicht ausdrücklich vorgesehen ist. Dem Lizenznehmer werden abhängig von der Zahlung zusätzlicher Gebühren oder unter abweichenden oder ergänzenden Bedingungen ggf. weitere Rechte eingeräumt. IBM behält sich das Recht vor, darüber zu entscheiden, ob dem Lizenznehmer weitere Rechte gewährt werden. + +Spezifikationen + +Die Programmspezifikationen sind in den Abschnitten "Description" und "Technical Information" der Ankündigungsschreiben des Programms zu finden. + +Unterstützungsprogramme + +Das Programm wird als Multiproduktpaket lizenziert und enthält die nachfolgend aufgeführten Unterstützungsprogramme. Der Lizenznehmer darf die Unterstützungsprogramme unter dieser Vereinbarung und im Rahmen der Berechtigungsnachweise (Proofs of Entitlement = PoEs) für das Programm nur zur Unterstützung des Hauptprogramms installieren und nutzen (sofern an anderer Stelle in dieser Lizenzinformation keine weitergehenden Rechte erteilt werden). Der Ausdruck "nur zur Unterstützung" umfasst nur die erforderliche Nutzung oder diejenige Nutzung, die im direkten Zusammenhang mit der lizenzierten Nutzung des Hauptprogramms oder eines anderen Unterstützungsprogramms steht. Die Unterstützungsprogramme dürfen nicht für andere Zwecke verwendet werden. Der Lizenznehmer ist nicht berechtigt, die Unterstützungsprogramme ohne das Hauptprogramm zu übertragen oder weiterzuvertreiben. Einem Unterstützungsprogramm können Lizenzbedingungen beigefügt sein, denen die Nutzung des betreffenden Unterstützungsprogramms durch den Lizenznehmer unterliegt. Im Falle eines Widerspruchs haben die Bedingungen dieses Lizenzinformationsdokuments Vorrang vor den Bedingungen des Unterstützungsprogramms. Wenn das Recht des Lizenznehmers zur Nutzung des Programms abläuft oder erlischt, muss er die Nutzung der Unterstützungsprogramme einstellen und alle Kopien der Unterstützungsprogramme vernichten oder unverzüglich bei der Stelle zurückgeben, von der er das Programm bezogen hat. Hat der Lizenznehmer die Unterstützungsprogramme heruntergeladen, sollte er sich an die Stelle wenden, von der er das Programm bezogen hat. Um die Unterstützungsprogramme für eine Nutzung ohne die obigen Beschränkungen zu lizenzieren, sollte sich der Lizenznehmer bitte an seinen IBM Vertriebsbeauftragten oder an die Stelle wenden, von der er das Programm bezogen hat, um die entsprechende Lizenz zu erwerben. + +Diese Liste enthält die Unterstützungsprogramme, die mit dem Programm lizenziert werden: +IBM WebSphere Application Server Liberty V17.0 + +Komponenten, die bei der Ermittlung der erforderlichen Berechtigungen nicht berücksichtigt werden + +Bei der Bestimmung der Anzahl der Berechtigungen, die für die Installation oder Nutzung des Programms durch den Lizenznehmer erforderlich sind, wird die Installation oder Nutzung der folgenden Programmkomponenten nicht berücksichtigt. Mit anderen Worten: Der Lizenznehmer darf die folgenden Programmkomponenten unter den Lizenzbedingungen installieren und nutzen, diese Komponenten werden bei der Bestimmung der erforderlichen Anzahl an Berechtigungen für das Programm aber nicht berücksichtigt. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Redistributables + +Wenn das Programm weiterverteilbare Komponenten (sog. Redistributables) enthält, sind diese in der REDIST-Datei aufgeführt, die zum Lieferumfang des Programms gehört. Zusätzlich zu den in der Vereinbarung gewährten Lizenzrechten darf der Lizenznehmer die Redistributables unter Einhaltung der folgenden Bedingungen weitergeben: +1) Die Weitergabe muss ausschließlich in Form von Objektcode erfolgen und bei der Weitergabe müssen sämtliche Anweisungen, Instruktionen und Spezifikationen eingehalten werden, die in der REDIST-Datei oder der Begleitdokumentation des Programms aufgeführt sind. +2) Wenn Bearbeitungen der Redistributables durch den Lizenznehmer gemäß der Begleitdokumentation des Programms ausdrücklich gestattet sind, müssen diese in Übereinstimmung mit sämtlichen dort aufgeführten Anweisungen, Instruktionen und Spezifikationen durchgeführt werden. Die Bearbeitungen müssen als Redistributables behandelt werden. +3) Die Redistributables dürfen nur als Teil der Anwendung des Lizenznehmers, die mithilfe des Programms entwickelt wurde ("Anwendung des Lizenznehmers"), und nur zur Unterstützung seiner Kunden bei der Nutzung seiner Anwendung weitergegeben werden. Die Anwendung des Lizenznehmers muss einen erheblichen Mehrwert darstellen, sodass die Redistributables nicht die Hauptmotivation für die Endbenutzer zum Erwerb des Softwareprodukts des Lizenznehmers sind. +4) Wenn die Redistributables eine Java Runtime Environment enthalten, muss der Lizenznehmer zusätzlich nicht auf Java basierende Redistributables in seine Anwendung aufnehmen, es sei denn, die Anwendung soll ausschließlich auf allgemeinen Computereinheiten (zum Beispiel Laptops, Desktops und Servern) ausgeführt werden und nicht auf mobilen Endgeräten oder sonstigen Einheiten für Pervasive Computing (zum Beispiel Einheiten, die einen Mikroprozessor enthalten, deren primärer Verwendungszweck aber nicht die Datenverarbeitung ist). +5) Der Lizenznehmer darf keine Copyright- oder Notice-Dateien entfernen, die in den Redistributables enthalten sind. +6) Der Lizenznehmer verpflichtet sich, IBM und die Lieferanten oder Distributoren von IBM in Bezug auf alle Ansprüche von Dritten und gegen Dritte, die aufgrund der Nutzung oder Weitergabe seiner Anwendung geltend gemacht werden, schadlos zu halten. +7) Der Lizenznehmer darf nicht denselben Pfadnamen wie für die Original-Redistributables (Dateien und Module) verwenden. +8) Der Lizenznehmer darf die Namen oder Marken von IBM oder der Lieferanten und Distributoren von IBM nur mit ihrer vorherigen schriftlichen Genehmigung in Verbindung mit der Vermarktung seiner Anwendung verwenden. +9) IBM sowie die Lieferanten und Distributoren von IBM stellen die Redistributables einschließlich der zugehörigen Dokumentation ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. +10) Für die technische Unterstützung seiner Anwendung und der Bearbeitungen der Redistributables ist der Lizenznehmer selbst verantwortlich. +11) In der Lizenzvereinbarung des Lizenznehmers mit dem Endbenutzer seiner Anwendung muss ein Hinweis enthalten sein, dass die Redistributables oder die davon erstellten Bearbeitungen i) nur zur Aktivierung seiner Anwendung verwendet werden dürfen, ii) nicht kopiert werden dürfen (außer für Sicherungszwecke), iii) nicht ohne seine Anwendung weitergegeben oder übertragen werden dürfen und iv) nicht rückumgewandelt (reverse assemble, reverse compile) oder in anderer Weise übersetzt werden dürfen, soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgeschrieben ist. Darüber hinaus sollte die Lizenzvereinbarung des Lizenznehmers die Rechte von IBM in mindestens demselben Maße schützen, wie sie durch die Bedingungen dieser Vereinbarung geschützt werden. + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + +Der Lizenznehmer darf bearbeitete Versionen der Quellenkomponenten und Mustermaterialien, die in der REDIST-Datei eines Programms aufgeführt sind, weitergeben, sofern die Weitergabe in Übereinstimmung mit den Bedingungen dieser Lizenz und den Anweisungen in der REDIST-Datei erfolgt. + +Die folgenden Maßeinheiten können für die Programmnutzung durch den Lizenznehmer gelten. + +Prozessor-Value-Unit (PVU) + +"Prozessor-Value-Unit" (PVU) ist eine Maßeinheit für die Lizenzierung des Programms. Die Anzahl der erforderlichen PVU-Berechtigungen basiert auf der Prozessortechnologie (siehe die PVU-Tabelle mit Unterteilung nach Vendor, Brand, Typ und Modellnummer des Prozessors unter http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) und der Anzahl der Prozessoren, die dem Programm zur Verfügung stehen. Nach der weiterhin gültigen Definition von IBM ist für die Zwecke der PVU-basierten Lizenzierung jeder Prozessorkern auf einem Chip ein Prozessor. Ein Doppelkernprozessorchip hat zum Beispiel zwei Prozessorkerne. + +Der Lizenznehmer kann das Programm entweder mit Lizenzierung auf Basis der vollständigen Kapazität (Full Capacity) oder mit Lizenzierung auf Basis der Virtualisierungskapazität (Sub-Capacity) gemäß den Passport Advantage Sub-Capacity-Lizenzbedingungen (siehe die Webseite unten) implementieren. Bei Full-Capacity-Lizenzierung muss der Lizenznehmer eine ausreichende Anzahl an PVU-Berechtigungen für alle aktivierten Prozessorkerne* in der physischen Hardwareumgebung erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden, mit Ausnahme der Server, auf denen das Programm permanent entfernt worden ist. Bei Lizenzierung auf Basis der Virtualisierungskapazität muss der Lizenznehmer gemäß der Definition in den "Virtualization Capacity License Counting Rules" unter http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html eine ausreichende Anzahl an Berechtigungen für alle aktivierten Prozessorkerne erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden. + +* Ein "aktivierter Prozessorkern" ist ein Prozessorkern, der in einem physischen oder in einem virtuellen Server genutzt werden kann, unabhängig davon, ob die Kapazität des Prozessorkerns über Virtualisierungstechnologien, Betriebssystembefehle, BIOS-Einstellungen oder vergleichbare Maßnahmen eingeschränkt werden kann oder eingeschränkt ist. + +Virtueller Prozessorkern + +"Virtueller Prozessorkern" ist eine Maßeinheit für die Lizenzierung des Programms. Ein physischer Server ist ein physischer Computer, der aus Verarbeitungseinheiten sowie Speicher und Ein-/Ausgabefunktionalität besteht und angeforderte Prozeduren, Befehle oder Anwendungen für einen oder mehrere Benutzer oder Clienteinheiten ausführt. Werden Racks, Bladegehäuse oder ähnliche Bauteile verwendet, wird jede individuelle physische Einheit (z. B. ein Blade oder eine in einem Rack installierte Einheit), die aus den erforderlichen Komponenten besteht, als separater physischer Server betrachtet. Ein virtueller Server ist entweder ein virtueller Computer, der durch Partitionierung der in einem physischen Server vorhandenen Ressourcen erstellt wird, oder ein nicht partitionierter physischer Server. Ein Prozessorkern (der häufig als Prozessor oder CPU bezeichnet wird) ist eine Funktionseinheit innerhalb einer Datenverarbeitungseinheit, die Instruktionen interpretiert und ausführt. Ein Prozessorkern besteht aus mindestens einem Steuerwerk und einem oder mehreren Rechenwerken für arithmetische und logische Operationen. Ein virtueller Prozessorkern ist ein Prozessorkern in einem nicht partitionierten physischen Server oder ein virtueller Kern, der einem virtuellen Server zugeordnet ist. Der Lizenznehmer muss für jeden virtuellen Prozessorkern, der dem Programm zur Verfügung steht, eine Berechtigung erwerben. + +Der Lizenznehmer muss für jeden physischen Server ausreichende Berechtigungen für 1) die Summe aller verfügbaren virtuellen Prozessorkerne auf allen virtuellen Servern, die dem Programm zur Verfügung stehen, oder 2) alle verfügbaren Prozessorkerne auf dem physischen Server erwerben, wobei der niedrigere Wert zur Anwendung kommt. + +Zusätzlich zu den obigen Bestimmungen gelten die folgenden Bedingungen für die Programmnutzung durch den Lizenznehmer. + +Idle-Standby-Konfigurationen + +Für die Zwecke dieses Abschnitts ist eine "Idle-Standby"-Konfiguration eine Konfiguration, in der eine Kopie des Programms auf einem Server installiert ist, der zu einer Hochverfügbarkeitslösung gehört und auf den ein Failover des Programms durchgeführt wird, falls die Kopie des Programms auf dem aktiven Server unbrauchbar wird. Ein Server wird als "idle" (inaktiv) angesehen, solange kein Failover stattfindet und er ausschließlich für Verwaltungsaktionen zur Unterstützung in Failoverszenarien eingesetzt wird. + +Das Programm darf nur auf einem Idle-Standby-Server installiert werden, wenn dieser ordnungsgemäß lizenziert ist. + +Wird das Programm in einer Idle-Standby-Konfiguration zusammen mit dem Feature Multi-Instance Queue Manager eingesetzt, dann darf eine Kopie des Programms für Sicherungszwecke auf einem Idle-Standby-Server vorhanden und gestartet sein, muss aber "idle" (inaktiv) bleiben und darf nicht in irgendeiner Weise produktiv genutzt werden, außer wenn der aktive Server ein Failover auf den Idle-Standby-Server durchführt. In diesem Fall darf die Idle-Standby-Kopie für die Dauer des Failover produktiv genutzt werden. + +Wird das Programm in einer Idle-Standby-Konfiguration mit anderen Hochverfügbarkeitssystemen eingesetzt, dann darf eine Kopie des Programms für Sicherungszwecke auf einem Idle-Standby-Server vorhanden, aber nicht gestartet sein (und daher nicht in irgendeiner Weise produktiv genutzt werden); sie wird aber von den Hochverfügbarkeitskomponenten automatisch gestartet, falls der aktive Server ausfällt. Wenn dieser Fall eintritt, darf die Idle-Standby-Kopie für die Dauer des Failover produktiv genutzt werden. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +WICHTIG: BITTE AUFMERKSAM LESEN + +Es folgen zwei Lizenzvereinbarungen. + +1. IBM Internationale Nutzungsbedingungen für die Bewertung von Programmen +2. IBM Internationale Nutzungsbedingungen für Programmpakete + +Wenn der Lizenznehmer das Programm für die produktive Nutzung (nicht für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Wenn der Lizenznehmer das Programm für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum (gemeinsam als "Bewertung" bezeichnet) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer sowohl (i) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für die Bewertung von Programmen ("Probelizenz") als auch (ii) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Die Probelizenz gilt für die Dauer des Bewertungszeitraums. + +Die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen automatisch zur Anwendung, wenn der Lizenznehmer sich dafür entscheidet, das Programm nach dem Bewertungszeitraum zu behalten (oder zusätzliche Programmkopien zur Nutzung nach Ablauf des Bewertungszeitraums zu beziehen), indem er eine entsprechende Beschaffungsvereinbarung (z. B. den IBM International Passport Advantage-Vertrag oder den IBM Passport Advantage Express-Vertrag) abschließt. + +Die Probelizenz und die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen nicht gleichzeitig zur Anwendung; sie schränken sich weder gegenseitig ein, noch ergänzen sie sich gegenseitig und sind voneinander unabhängige Vereinbarungen. + +Der vollständige Text der beiden Lizenzvereinbarungen ist nachfolgend aufgeführt. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für die Bewertung von Programmen (Z125-5543-05) zur Anwendung. + +Programmname (Programmnummer): +IBM MQ Advanced V9.0.3 (Evaluation) + +Die folgenden Standardbedingungen gelten für die Programmnutzung durch den Lizenznehmer. + +Bewertungszeitraum + +Der Bewertungszeitraum beginnt mit dem Datum, an dem der Lizenznehmer den Bedingungen dieser Vereinbarung zustimmt, und endet nach 90 Tagen. + +Gebündelte Programme + +Das Programm wird als Multiproduktpaket lizenziert, das aus den nachfolgend aufgeführten gebündelten Programmen (sog. Bundled Programs) besteht. Der Lizenznehmer ist berechtigt, diese gebündelten Programme im Rahmen der Berechtigungsnachweise (Proofs of Entitlement = PoEs) für das Programm und gemäß diesem Lizenzinformationsdokument zu installieren und zu verwenden. Der Lizenznehmer ist nicht berechtigt, die gebündelten Programme getrennt vom Multiproduktpaket zu übertragen oder weiterzuvertreiben. Einem gebündelten Programm können Lizenzbedingungen beigefügt sein, denen die Nutzung des betreffenden Programms durch den Lizenznehmer unterliegt. Im Falle eines Widerspruchs haben die Bedingungen dieses Lizenzinformationsdokuments Vorrang vor den Bedingungen des gebündelten Programms. Wenn das Recht des Lizenznehmers zur Nutzung des Programms abläuft oder erlischt, muss er die Nutzung einstellen und alle Kopien der gebündelten Programme löschen oder unverzüglich bei der Stelle zurückgeben, von der er das Programm bezogen hat. Hat der Lizenznehmer die gebündelten Programme heruntergeladen, sollte er sich an die Stelle wenden, von der er das Programm bezogen hat. Um die gebündelten Programme für eine Nutzung ohne die obigen Beschränkungen zu lizenzieren, sollte sich der Lizenznehmer bitte an einen IBM Vertriebsbeauftragten oder an die Stelle wenden, von der er das Programmpaket bezogen hat, um die entsprechende Lizenz zu erwerben. + +Dies sind die gebündelten Programme, die mit dem Programm lizenziert werden: +IBM MQ V9.0.3 + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für Programmpakete (Z125-3301-14) zur Anwendung. + +Programmname (Programmnummer): +IBM MQ Advanced V9.0.3 (5724-H72) + +Die folgenden Standardbedingungen gelten für die Programmnutzung durch den Lizenznehmer. + +Eingeschränktes Nutzungsrecht + +Gemäß der Beschreibung in den Internationalen Nutzungsbedingungen für Programmpakete ("IPLA") und dieser Lizenzinformation gewährt IBM dem Lizenznehmer ein beschränktes Recht zur Nutzung des Programms. Dieses Recht ist auf die Art der Nutzungsberechtigung, z. B. Prozessor-Value-Unit ("PVU"), Ressourcen-Value-Unit ("RVU") oder Value-Unit ("VU"), oder eine andere angegebene Nutzungsstufe beschränkt, für die der Lizenznehmer laut Berechtigungsnachweis (Proof of Entitlement = PoE) bezahlt hat. Die Nutzung des Lizenznehmers kann außerdem auf eine bestimmte Maschine beschränkt sein, ggf. darf er das Programm nur als Unterstützungsprogramm verwenden oder die Nutzung kann sonstigen Beschränkungen unterliegen. Da der Lizenznehmer nicht für den gesamten wirtschaftlichen Wert des Programms bezahlt hat, sind andere Nutzungsarten ohne Zahlung zusätzlicher Gebühren untersagt. Ferner ist der Lizenznehmer nicht berechtigt, das Programm zur Bereitstellung kommerzieller IT-Services für Dritte, zur Bereitstellung kommerzieller Hosting-Services oder für kommerziell betriebenes Time-Sharing einzusetzen oder das Programm zu vermieten, zu verleasen oder Unterlizenzen für das Programm zu vergeben, sofern dies in den maßgeblichen Vereinbarungen, unter denen der Lizenznehmer die Berechtigungen zur Nutzung des Programms erworben hat, nicht ausdrücklich vorgesehen ist. Dem Lizenznehmer werden abhängig von der Zahlung zusätzlicher Gebühren oder unter abweichenden oder ergänzenden Bedingungen ggf. weitere Rechte eingeräumt. IBM behält sich das Recht vor, darüber zu entscheiden, ob dem Lizenznehmer weitere Rechte gewährt werden. + +Spezifikationen + +Die Programmspezifikationen sind in den Abschnitten "Description" und "Technical Information" der Ankündigungsschreiben des Programms zu finden. + +Gebündelte Programme + +Das Programm wird als Multiproduktpaket lizenziert, das aus den nachfolgend aufgeführten gebündelten Programmen (sog. Bundled Programs) besteht. Der Lizenznehmer ist berechtigt, diese gebündelten Programme im Rahmen der Berechtigungsnachweise (Proofs of Entitlement = PoEs) für das Programm und gemäß diesem Lizenzinformationsdokument zu installieren und zu verwenden. Der Lizenznehmer ist nicht berechtigt, die gebündelten Programme getrennt vom Multiproduktpaket zu übertragen oder weiterzuvertreiben. Einem gebündelten Programm können Lizenzbedingungen beigefügt sein, denen die Nutzung des betreffenden Programms durch den Lizenznehmer unterliegt. Im Falle eines Widerspruchs haben die Bedingungen dieses Lizenzinformationsdokuments Vorrang vor den Bedingungen des gebündelten Programms. Wenn das Recht des Lizenznehmers zur Nutzung des Programms abläuft oder erlischt, muss er die Nutzung einstellen und alle Kopien der gebündelten Programme löschen oder unverzüglich bei der Stelle zurückgeben, von der er das Programm bezogen hat. Hat der Lizenznehmer die gebündelten Programme heruntergeladen, sollte er sich an die Stelle wenden, von der er das Programm bezogen hat. Um die gebündelten Programme für eine Nutzung ohne die obigen Beschränkungen zu lizenzieren, sollte sich der Lizenznehmer bitte an einen IBM Vertriebsbeauftragten oder an die Stelle wenden, von der er das Programmpaket bezogen hat, um die entsprechende Lizenz zu erwerben. + +Dies sind die gebündelten Programme, die mit dem Programm lizenziert werden: +IBM MQ V9.0.3 + +Komponenten, die bei der Ermittlung der erforderlichen Berechtigungen nicht berücksichtigt werden + +Bei der Bestimmung der Anzahl der Berechtigungen, die für die Installation oder Nutzung des Programms durch den Lizenznehmer erforderlich sind, wird die Installation oder Nutzung der folgenden Programmkomponenten nicht berücksichtigt. Mit anderen Worten: Der Lizenznehmer darf die folgenden Programmkomponenten unter den Lizenzbedingungen installieren und nutzen, diese Komponenten werden bei der Bestimmung der erforderlichen Anzahl an Berechtigungen für das Programm aber nicht berücksichtigt. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + +Die folgenden Maßeinheiten können für die Programmnutzung durch den Lizenznehmer gelten. + +Prozessor-Value-Unit (PVU) + +"Prozessor-Value-Unit" (PVU) ist eine Maßeinheit für die Lizenzierung des Programms. Die Anzahl der erforderlichen PVU-Berechtigungen basiert auf der Prozessortechnologie (siehe die PVU-Tabelle mit Unterteilung nach Vendor, Brand, Typ und Modellnummer des Prozessors unter http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) und der Anzahl der Prozessoren, die dem Programm zur Verfügung stehen. Nach der weiterhin gültigen Definition von IBM ist für die Zwecke der PVU-basierten Lizenzierung jeder Prozessorkern auf einem Chip ein Prozessor. Ein Doppelkernprozessorchip hat zum Beispiel zwei Prozessorkerne. + +Der Lizenznehmer kann das Programm entweder mit Lizenzierung auf Basis der vollständigen Kapazität (Full Capacity) oder mit Lizenzierung auf Basis der Virtualisierungskapazität (Sub-Capacity) gemäß den Passport Advantage Sub-Capacity-Lizenzbedingungen (siehe die Webseite unten) implementieren. Bei Full-Capacity-Lizenzierung muss der Lizenznehmer eine ausreichende Anzahl an PVU-Berechtigungen für alle aktivierten Prozessorkerne* in der physischen Hardwareumgebung erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden, mit Ausnahme der Server, auf denen das Programm permanent entfernt worden ist. Bei Lizenzierung auf Basis der Virtualisierungskapazität muss der Lizenznehmer gemäß der Definition in den "Virtualization Capacity License Counting Rules" unter http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html eine ausreichende Anzahl an Berechtigungen für alle aktivierten Prozessorkerne erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden. + +* Ein "aktivierter Prozessorkern" ist ein Prozessorkern, der in einem physischen oder in einem virtuellen Server genutzt werden kann, unabhängig davon, ob die Kapazität des Prozessorkerns über Virtualisierungstechnologien, Betriebssystembefehle, BIOS-Einstellungen oder vergleichbare Maßnahmen eingeschränkt werden kann oder eingeschränkt ist. + +Virtueller Prozessorkern + +"Virtueller Prozessorkern" ist eine Maßeinheit für die Lizenzierung des Programms. Ein physischer Server ist ein physischer Computer, der aus Verarbeitungseinheiten sowie Speicher und Ein-/Ausgabefunktionalität besteht und angeforderte Prozeduren, Befehle oder Anwendungen für einen oder mehrere Benutzer oder Clienteinheiten ausführt. Werden Racks, Bladegehäuse oder ähnliche Bauteile verwendet, wird jede individuelle physische Einheit (z. B. ein Blade oder eine in einem Rack installierte Einheit), die aus den erforderlichen Komponenten besteht, als separater physischer Server betrachtet. Ein virtueller Server ist entweder ein virtueller Computer, der durch Partitionierung der in einem physischen Server vorhandenen Ressourcen erstellt wird, oder ein nicht partitionierter physischer Server. Ein Prozessorkern (der häufig als Prozessor oder CPU bezeichnet wird) ist eine Funktionseinheit innerhalb einer Datenverarbeitungseinheit, die Instruktionen interpretiert und ausführt. Ein Prozessorkern besteht aus mindestens einem Steuerwerk und einem oder mehreren Rechenwerken für arithmetische und logische Operationen. Ein virtueller Prozessorkern ist ein Prozessorkern in einem nicht partitionierten physischen Server oder ein virtueller Kern, der einem virtuellen Server zugeordnet ist. Der Lizenznehmer muss für jeden virtuellen Prozessorkern, der dem Programm zur Verfügung steht, eine Berechtigung erwerben. + +Der Lizenznehmer muss für jeden physischen Server ausreichende Berechtigungen für 1) die Summe aller verfügbaren virtuellen Prozessorkerne auf allen virtuellen Servern, die dem Programm zur Verfügung stehen, oder 2) alle verfügbaren Prozessorkerne auf dem physischen Server erwerben, wobei der niedrigere Wert zur Anwendung kommt. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +WICHTIG: BITTE AUFMERKSAM LESEN + +Es folgen zwei Lizenzvereinbarungen. + +1. IBM Internationale Nutzungsbedingungen für die Bewertung von Programmen +2. IBM Internationale Nutzungsbedingungen für Programmpakete + +Wenn der Lizenznehmer das Programm für die produktive Nutzung (nicht für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Wenn der Lizenznehmer das Programm für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum (gemeinsam als "Bewertung" bezeichnet) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer sowohl (i) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für die Bewertung von Programmen ("Probelizenz") als auch (ii) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Die Probelizenz gilt für die Dauer des Bewertungszeitraums. + +Die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen automatisch zur Anwendung, wenn der Lizenznehmer sich dafür entscheidet, das Programm nach dem Bewertungszeitraum zu behalten (oder zusätzliche Programmkopien zur Nutzung nach Ablauf des Bewertungszeitraums zu beziehen), indem er eine entsprechende Beschaffungsvereinbarung (z. B. den IBM International Passport Advantage-Vertrag oder den IBM Passport Advantage Express-Vertrag) abschließt. + +Die Probelizenz und die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen nicht gleichzeitig zur Anwendung; sie schränken sich weder gegenseitig ein, noch ergänzen sie sich gegenseitig und sind voneinander unabhängige Vereinbarungen. + +Der vollständige Text der beiden Lizenzvereinbarungen ist nachfolgend aufgeführt. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für die Bewertung von Programmen (Z125-5543-05) zur Anwendung. + +Programmname (Programmnummer): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Die folgenden Standardbedingungen gelten für die Programmnutzung durch den Lizenznehmer. + +Bewertungszeitraum + +Der Bewertungszeitraum beginnt mit dem Datum, an dem der Lizenznehmer den Bedingungen dieser Vereinbarung zustimmt, und endet nach 90 Tagen. + +Gebündelte Programme + +Das Programm wird als Multiproduktpaket lizenziert, das aus den nachfolgend aufgeführten gebündelten Programmen (sog. Bundled Programs) besteht. Der Lizenznehmer ist berechtigt, diese gebündelten Programme im Rahmen der Berechtigungsnachweise (Proofs of Entitlement = PoEs) für das Programm und gemäß diesem Lizenzinformationsdokument zu installieren und zu verwenden. Der Lizenznehmer ist nicht berechtigt, die gebündelten Programme getrennt vom Multiproduktpaket zu übertragen oder weiterzuvertreiben. Einem gebündelten Programm können Lizenzbedingungen beigefügt sein, denen die Nutzung des betreffenden Programms durch den Lizenznehmer unterliegt. Im Falle eines Widerspruchs haben die Bedingungen dieses Lizenzinformationsdokuments Vorrang vor den Bedingungen des gebündelten Programms. Wenn das Recht des Lizenznehmers zur Nutzung des Programms abläuft oder erlischt, muss er die Nutzung einstellen und alle Kopien der gebündelten Programme löschen oder unverzüglich bei der Stelle zurückgeben, von der er das Programm bezogen hat. Hat der Lizenznehmer die gebündelten Programme heruntergeladen, sollte er sich an die Stelle wenden, von der er das Programm bezogen hat. Um die gebündelten Programme für eine Nutzung ohne die obigen Beschränkungen zu lizenzieren, sollte sich der Lizenznehmer bitte an einen IBM Vertriebsbeauftragten oder an die Stelle wenden, von der er das Programmpaket bezogen hat, um die entsprechende Lizenz zu erwerben. + +Dies sind die gebündelten Programme, die mit dem Programm lizenziert werden: +IBM MQ Idle Standby V9.0.3 + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für Programmpakete (Z125-3301-14) zur Anwendung. + +Programmname (Programmnummer): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Die folgenden Standardbedingungen gelten für die Programmnutzung durch den Lizenznehmer. + +Eingeschränktes Nutzungsrecht + +Gemäß der Beschreibung in den Internationalen Nutzungsbedingungen für Programmpakete ("IPLA") und dieser Lizenzinformation gewährt IBM dem Lizenznehmer ein beschränktes Recht zur Nutzung des Programms. Dieses Recht ist auf die Art der Nutzungsberechtigung, z. B. Prozessor-Value-Unit ("PVU"), Ressourcen-Value-Unit ("RVU") oder Value-Unit ("VU"), oder eine andere angegebene Nutzungsstufe beschränkt, für die der Lizenznehmer laut Berechtigungsnachweis (Proof of Entitlement = PoE) bezahlt hat. Die Nutzung des Lizenznehmers kann außerdem auf eine bestimmte Maschine beschränkt sein, ggf. darf er das Programm nur als Unterstützungsprogramm verwenden oder die Nutzung kann sonstigen Beschränkungen unterliegen. Da der Lizenznehmer nicht für den gesamten wirtschaftlichen Wert des Programms bezahlt hat, sind andere Nutzungsarten ohne Zahlung zusätzlicher Gebühren untersagt. Ferner ist der Lizenznehmer nicht berechtigt, das Programm zur Bereitstellung kommerzieller IT-Services für Dritte, zur Bereitstellung kommerzieller Hosting-Services oder für kommerziell betriebenes Time-Sharing einzusetzen oder das Programm zu vermieten, zu verleasen oder Unterlizenzen für das Programm zu vergeben, sofern dies in den maßgeblichen Vereinbarungen, unter denen der Lizenznehmer die Berechtigungen zur Nutzung des Programms erworben hat, nicht ausdrücklich vorgesehen ist. Dem Lizenznehmer werden abhängig von der Zahlung zusätzlicher Gebühren oder unter abweichenden oder ergänzenden Bedingungen ggf. weitere Rechte eingeräumt. IBM behält sich das Recht vor, darüber zu entscheiden, ob dem Lizenznehmer weitere Rechte gewährt werden. + +Spezifikationen + +Die Programmspezifikationen sind in den Abschnitten "Description" und "Technical Information" der Ankündigungsschreiben des Programms zu finden. + +Gebündelte Programme + +Das Programm wird als Multiproduktpaket lizenziert, das aus den nachfolgend aufgeführten gebündelten Programmen (sog. Bundled Programs) besteht. Der Lizenznehmer ist berechtigt, diese gebündelten Programme im Rahmen der Berechtigungsnachweise (Proofs of Entitlement = PoEs) für das Programm und gemäß diesem Lizenzinformationsdokument zu installieren und zu verwenden. Der Lizenznehmer ist nicht berechtigt, die gebündelten Programme getrennt vom Multiproduktpaket zu übertragen oder weiterzuvertreiben. Einem gebündelten Programm können Lizenzbedingungen beigefügt sein, denen die Nutzung des betreffenden Programms durch den Lizenznehmer unterliegt. Im Falle eines Widerspruchs haben die Bedingungen dieses Lizenzinformationsdokuments Vorrang vor den Bedingungen des gebündelten Programms. Wenn das Recht des Lizenznehmers zur Nutzung des Programms abläuft oder erlischt, muss er die Nutzung einstellen und alle Kopien der gebündelten Programme löschen oder unverzüglich bei der Stelle zurückgeben, von der er das Programm bezogen hat. Hat der Lizenznehmer die gebündelten Programme heruntergeladen, sollte er sich an die Stelle wenden, von der er das Programm bezogen hat. Um die gebündelten Programme für eine Nutzung ohne die obigen Beschränkungen zu lizenzieren, sollte sich der Lizenznehmer bitte an einen IBM Vertriebsbeauftragten oder an die Stelle wenden, von der er das Programmpaket bezogen hat, um die entsprechende Lizenz zu erwerben. + +Dies sind die gebündelten Programme, die mit dem Programm lizenziert werden: +IBM MQ Idle Standby V9.0.3 + +Komponenten, die bei der Ermittlung der erforderlichen Berechtigungen nicht berücksichtigt werden + +Bei der Bestimmung der Anzahl der Berechtigungen, die für die Installation oder Nutzung des Programms durch den Lizenznehmer erforderlich sind, wird die Installation oder Nutzung der folgenden Programmkomponenten nicht berücksichtigt. Mit anderen Worten: Der Lizenznehmer darf die folgenden Programmkomponenten unter den Lizenzbedingungen installieren und nutzen, diese Komponenten werden bei der Bestimmung der erforderlichen Anzahl an Berechtigungen für das Programm aber nicht berücksichtigt. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + +Die folgenden Maßeinheiten können für die Programmnutzung durch den Lizenznehmer gelten. + +Prozessor-Value-Unit (PVU) + +"Prozessor-Value-Unit" (PVU) ist eine Maßeinheit für die Lizenzierung des Programms. Die Anzahl der erforderlichen PVU-Berechtigungen basiert auf der Prozessortechnologie (siehe die PVU-Tabelle mit Unterteilung nach Vendor, Brand, Typ und Modellnummer des Prozessors unter http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) und der Anzahl der Prozessoren, die dem Programm zur Verfügung stehen. Nach der weiterhin gültigen Definition von IBM ist für die Zwecke der PVU-basierten Lizenzierung jeder Prozessorkern auf einem Chip ein Prozessor. Ein Doppelkernprozessorchip hat zum Beispiel zwei Prozessorkerne. + +Der Lizenznehmer kann das Programm entweder mit Lizenzierung auf Basis der vollständigen Kapazität (Full Capacity) oder mit Lizenzierung auf Basis der Virtualisierungskapazität (Sub-Capacity) gemäß den Passport Advantage Sub-Capacity-Lizenzbedingungen (siehe die Webseite unten) implementieren. Bei Full-Capacity-Lizenzierung muss der Lizenznehmer eine ausreichende Anzahl an PVU-Berechtigungen für alle aktivierten Prozessorkerne* in der physischen Hardwareumgebung erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden, mit Ausnahme der Server, auf denen das Programm permanent entfernt worden ist. Bei Lizenzierung auf Basis der Virtualisierungskapazität muss der Lizenznehmer gemäß der Definition in den "Virtualization Capacity License Counting Rules" unter http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html eine ausreichende Anzahl an Berechtigungen für alle aktivierten Prozessorkerne erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden. + +* Ein "aktivierter Prozessorkern" ist ein Prozessorkern, der in einem physischen oder in einem virtuellen Server genutzt werden kann, unabhängig davon, ob die Kapazität des Prozessorkerns über Virtualisierungstechnologien, Betriebssystembefehle, BIOS-Einstellungen oder vergleichbare Maßnahmen eingeschränkt werden kann oder eingeschränkt ist. + +Zusätzlich zu den obigen Bestimmungen gelten die folgenden Bedingungen für die Programmnutzung durch den Lizenznehmer. + +Idle-Standby-Konfigurationen + +Für die Zwecke dieses Abschnitts ist eine "Idle-Standby"-Konfiguration eine Konfiguration, in der eine Kopie des Programms auf einem Server installiert ist, der zu einer Hochverfügbarkeitslösung gehört und auf den ein Failover des Programms durchgeführt wird, falls die Kopie des Programms auf dem aktiven Server unbrauchbar wird. Ein Server wird als "idle" (inaktiv) angesehen, solange kein Failover stattfindet und er ausschließlich für Verwaltungsaktionen zur Unterstützung in Failoverszenarien eingesetzt wird. + +Das Programm darf nur auf einem Idle-Standby-Server installiert werden, wenn dieser ordnungsgemäß lizenziert ist. + +Wird das Programm in einer Idle-Standby-Konfiguration zusammen mit dem Feature Multi-Instance Queue Manager eingesetzt, dann darf eine Kopie des Programms für Sicherungszwecke auf einem Idle-Standby-Server vorhanden und gestartet sein, muss aber "idle" (inaktiv) bleiben und darf nicht in irgendeiner Weise produktiv genutzt werden, außer wenn der aktive Server ein Failover auf den Idle-Standby-Server durchführt. In diesem Fall darf die Idle-Standby-Kopie für die Dauer des Failover produktiv genutzt werden. + +Wird das Programm in einer Idle-Standby-Konfiguration mit anderen Hochverfügbarkeitssystemen eingesetzt, dann darf eine Kopie des Programms für Sicherungszwecke auf einem Idle-Standby-Server vorhanden, aber nicht gestartet sein (und daher nicht in irgendeiner Weise produktiv genutzt werden); sie wird aber von den Hochverfügbarkeitskomponenten automatisch gestartet, falls der aktive Server ausfällt. Wenn dieser Fall eintritt, darf die Idle-Standby-Kopie für die Dauer des Failover produktiv genutzt werden. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +WICHTIG: BITTE AUFMERKSAM LESEN + +Es folgen zwei Lizenzvereinbarungen. + +1. IBM Internationale Nutzungsbedingungen für die Bewertung von Programmen +2. IBM Internationale Nutzungsbedingungen für Programmpakete + +Wenn der Lizenznehmer das Programm für die produktive Nutzung (nicht für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Wenn der Lizenznehmer das Programm für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum (gemeinsam als "Bewertung" bezeichnet) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer sowohl (i) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für die Bewertung von Programmen ("Probelizenz") als auch (ii) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Die Probelizenz gilt für die Dauer des Bewertungszeitraums. + +Die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen automatisch zur Anwendung, wenn der Lizenznehmer sich dafür entscheidet, das Programm nach dem Bewertungszeitraum zu behalten (oder zusätzliche Programmkopien zur Nutzung nach Ablauf des Bewertungszeitraums zu beziehen), indem er eine entsprechende Beschaffungsvereinbarung (z. B. den IBM International Passport Advantage-Vertrag oder den IBM Passport Advantage Express-Vertrag) abschließt. + +Die Probelizenz und die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen nicht gleichzeitig zur Anwendung; sie schränken sich weder gegenseitig ein, noch ergänzen sie sich gegenseitig und sind voneinander unabhängige Vereinbarungen. + +Der vollständige Text der beiden Lizenzvereinbarungen ist nachfolgend aufgeführt. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für die Bewertung von Programmen (Z125-5543-05) zur Anwendung. + +Programmname (Programmnummer): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Die folgenden Standardbedingungen gelten für die Programmnutzung durch den Lizenznehmer. + +Bewertungszeitraum + +Der Bewertungszeitraum beginnt mit dem Datum, an dem der Lizenznehmer den Bedingungen dieser Vereinbarung zustimmt, und endet nach 90 Tagen. + +Gebündelte Programme + +Das Programm wird als Multiproduktpaket lizenziert, das aus den nachfolgend aufgeführten gebündelten Programmen (sog. Bundled Programs) besteht. Der Lizenznehmer ist berechtigt, diese gebündelten Programme im Rahmen der Berechtigungsnachweise (Proofs of Entitlement = PoEs) für das Programm und gemäß diesem Lizenzinformationsdokument zu installieren und zu verwenden. Der Lizenznehmer ist nicht berechtigt, die gebündelten Programme getrennt vom Multiproduktpaket zu übertragen oder weiterzuvertreiben. Einem gebündelten Programm können Lizenzbedingungen beigefügt sein, denen die Nutzung des betreffenden Programms durch den Lizenznehmer unterliegt. Im Falle eines Widerspruchs haben die Bedingungen dieses Lizenzinformationsdokuments Vorrang vor den Bedingungen des gebündelten Programms. Wenn das Recht des Lizenznehmers zur Nutzung des Programms abläuft oder erlischt, muss er die Nutzung einstellen und alle Kopien der gebündelten Programme löschen oder unverzüglich bei der Stelle zurückgeben, von der er das Programm bezogen hat. Hat der Lizenznehmer die gebündelten Programme heruntergeladen, sollte er sich an die Stelle wenden, von der er das Programm bezogen hat. Um die gebündelten Programme für eine Nutzung ohne die obigen Beschränkungen zu lizenzieren, sollte sich der Lizenznehmer bitte an einen IBM Vertriebsbeauftragten oder an die Stelle wenden, von der er das Programmpaket bezogen hat, um die entsprechende Lizenz zu erwerben. + +Dies sind die gebündelten Programme, die mit dem Programm lizenziert werden: +IBM MQ V9.0.3 + +Beschränkung auf Entwickler + +Wenn das Programm als "Developer"-Version ausgewiesen ist, darf es nur für interne Entwicklungszwecke und Komponententests auf einer Entwicklermaschine eingesetzt werden. Eine Entwicklermaschine ist eine physische oder virtuelle Desktopumgebung, in der ein primäres Betriebssystem und das Programm ausgeführt werden, die beide für maximal einen angegebenen Entwickler zugänglich und nutzbar sind. Der Lizenznehmer ist nicht berechtigt, das Programm zur Verarbeitung oder Simulation von Produktionsworkloads oder zum Testen der Skalierbarkeit von Code, Anwendungen oder Systemen zu nutzen. Der Lizenznehmer ist nicht berechtigt, irgendwelche Bestandteile des Programms für andere Zwecke zu nutzen, ohne die entsprechenden Produktionsberechtigungen zu erwerben. + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für Programmpakete (Z125-3301-14) zur Anwendung. + +Programmname (Programmnummer): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Die folgenden Standardbedingungen gelten für die Programmnutzung durch den Lizenznehmer. + +Eingeschränktes Nutzungsrecht + +Gemäß der Beschreibung in den Internationalen Nutzungsbedingungen für Programmpakete ("IPLA") und dieser Lizenzinformation gewährt IBM dem Lizenznehmer ein beschränktes Recht zur Nutzung des Programms. Dieses Recht ist auf die Art der Nutzungsberechtigung, z. B. Prozessor-Value-Unit ("PVU"), Ressourcen-Value-Unit ("RVU") oder Value-Unit ("VU"), oder eine andere angegebene Nutzungsstufe beschränkt, für die der Lizenznehmer laut Berechtigungsnachweis (Proof of Entitlement = PoE) bezahlt hat. Die Nutzung des Lizenznehmers kann außerdem auf eine bestimmte Maschine beschränkt sein, ggf. darf er das Programm nur als Unterstützungsprogramm verwenden oder die Nutzung kann sonstigen Beschränkungen unterliegen. Da der Lizenznehmer nicht für den gesamten wirtschaftlichen Wert des Programms bezahlt hat, sind andere Nutzungsarten ohne Zahlung zusätzlicher Gebühren untersagt. Ferner ist der Lizenznehmer nicht berechtigt, das Programm zur Bereitstellung kommerzieller IT-Services für Dritte, zur Bereitstellung kommerzieller Hosting-Services oder für kommerziell betriebenes Time-Sharing einzusetzen oder das Programm zu vermieten, zu verleasen oder Unterlizenzen für das Programm zu vergeben, sofern dies in den maßgeblichen Vereinbarungen, unter denen der Lizenznehmer die Berechtigungen zur Nutzung des Programms erworben hat, nicht ausdrücklich vorgesehen ist. Dem Lizenznehmer werden abhängig von der Zahlung zusätzlicher Gebühren oder unter abweichenden oder ergänzenden Bedingungen ggf. weitere Rechte eingeräumt. IBM behält sich das Recht vor, darüber zu entscheiden, ob dem Lizenznehmer weitere Rechte gewährt werden. + +Spezifikationen + +Die Programmspezifikationen sind in den Abschnitten "Description" und "Technical Information" der Ankündigungsschreiben des Programms zu finden. + +Gebündelte Programme + +Das Programm wird als Multiproduktpaket lizenziert, das aus den nachfolgend aufgeführten gebündelten Programmen (sog. Bundled Programs) besteht. Der Lizenznehmer ist berechtigt, diese gebündelten Programme im Rahmen der Berechtigungsnachweise (Proofs of Entitlement = PoEs) für das Programm und gemäß diesem Lizenzinformationsdokument zu installieren und zu verwenden. Der Lizenznehmer ist nicht berechtigt, die gebündelten Programme getrennt vom Multiproduktpaket zu übertragen oder weiterzuvertreiben. Einem gebündelten Programm können Lizenzbedingungen beigefügt sein, denen die Nutzung des betreffenden Programms durch den Lizenznehmer unterliegt. Im Falle eines Widerspruchs haben die Bedingungen dieses Lizenzinformationsdokuments Vorrang vor den Bedingungen des gebündelten Programms. Wenn das Recht des Lizenznehmers zur Nutzung des Programms abläuft oder erlischt, muss er die Nutzung einstellen und alle Kopien der gebündelten Programme löschen oder unverzüglich bei der Stelle zurückgeben, von der er das Programm bezogen hat. Hat der Lizenznehmer die gebündelten Programme heruntergeladen, sollte er sich an die Stelle wenden, von der er das Programm bezogen hat. Um die gebündelten Programme für eine Nutzung ohne die obigen Beschränkungen zu lizenzieren, sollte sich der Lizenznehmer bitte an einen IBM Vertriebsbeauftragten oder an die Stelle wenden, von der er das Programmpaket bezogen hat, um die entsprechende Lizenz zu erwerben. + +Dies sind die gebündelten Programme, die mit dem Programm lizenziert werden: +IBM MQ V9.0.3 + +Beschränkung auf Entwickler + +Wenn das Programm als "Developer"-Version ausgewiesen ist, darf es nur für interne Entwicklungszwecke und Komponententests auf einer Entwicklermaschine eingesetzt werden. Eine Entwicklermaschine ist eine physische oder virtuelle Desktopumgebung, in der ein primäres Betriebssystem und das Programm ausgeführt werden, die beide für maximal einen angegebenen Entwickler zugänglich und nutzbar sind. Der Lizenznehmer ist nicht berechtigt, das Programm zur Verarbeitung oder Simulation von Produktionsworkloads oder zum Testen der Skalierbarkeit von Code, Anwendungen oder Systemen zu nutzen. Der Lizenznehmer ist nicht berechtigt, irgendwelche Bestandteile des Programms für andere Zwecke zu nutzen, ohne die entsprechenden Produktionsberechtigungen zu erwerben. + +Komponenten, die bei der Ermittlung der erforderlichen Berechtigungen nicht berücksichtigt werden + +Bei der Bestimmung der Anzahl der Berechtigungen, die für die Installation oder Nutzung des Programms durch den Lizenznehmer erforderlich sind, wird die Installation oder Nutzung der folgenden Programmkomponenten nicht berücksichtigt. Mit anderen Worten: Der Lizenznehmer darf die folgenden Programmkomponenten unter den Lizenzbedingungen installieren und nutzen, diese Komponenten werden bei der Bestimmung der erforderlichen Anzahl an Berechtigungen für das Programm aber nicht berücksichtigt. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + +Die folgenden Maßeinheiten können für die Programmnutzung durch den Lizenznehmer gelten. + +Installation + +"Installation" ist eine Maßeinheit für die Lizenzierung des Programms. Eine Installation ist eine installierte Kopie des Programms auf einer physischen oder virtuellen Platte, die zur Ausführung auf einem Computer bereitgestellt wird. Der Lizenznehmer muss für jede Programminstallation eine Berechtigung erwerben. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +WICHTIG: BITTE AUFMERKSAM LESEN + +Es folgen zwei Lizenzvereinbarungen. + +1. IBM Internationale Nutzungsbedingungen für die Bewertung von Programmen +2. IBM Internationale Nutzungsbedingungen für Programmpakete + +Wenn der Lizenznehmer das Programm für die produktive Nutzung (nicht für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Wenn der Lizenznehmer das Programm für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum (gemeinsam als "Bewertung" bezeichnet) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer sowohl (i) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für die Bewertung von Programmen ("Probelizenz") als auch (ii) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Die Probelizenz gilt für die Dauer des Bewertungszeitraums. + +Die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen automatisch zur Anwendung, wenn der Lizenznehmer sich dafür entscheidet, das Programm nach dem Bewertungszeitraum zu behalten (oder zusätzliche Programmkopien zur Nutzung nach Ablauf des Bewertungszeitraums zu beziehen), indem er eine entsprechende Beschaffungsvereinbarung (z. B. den IBM International Passport Advantage-Vertrag oder den IBM Passport Advantage Express-Vertrag) abschließt. + +Die Probelizenz und die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen nicht gleichzeitig zur Anwendung; sie schränken sich weder gegenseitig ein, noch ergänzen sie sich gegenseitig und sind voneinander unabhängige Vereinbarungen. + +Der vollständige Text der beiden Lizenzvereinbarungen ist nachfolgend aufgeführt. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für die Bewertung von Programmen (Z125-5543-05) zur Anwendung. + +Programmname: IBM MQ Managed File Transfer Service V9.0.1 +Programmnummer: Evaluation + +Programmname: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Programmnummer: Evaluation + +Programmname: IBM MQ Managed File Transfer Agent V9.0.1 +Programmnummer: Evaluation + +Bewertungszeitraum + +Der Bewertungszeitraum beginnt mit dem Datum, an dem der Lizenznehmer den Bedingungen dieser Vereinbarung zustimmt, und endet nach 90 Tagen. + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für Programmpakete (Z125-3301-14) zur Anwendung. + +Programmname: IBM MQ Managed File Transfer Service V9.0.1 +Programmnummer: 5724-H72 + +Programmname: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Programmnummer: 5724-H72 + +Programmname: IBM MQ Managed File Transfer Agent V9.0.1 +Programmnummer: 5724-H72 + +Gemäß der Beschreibung in den Internationalen Nutzungsbedingungen für Programmpakete ("IPLA") und dieser Lizenzinformation gewährt IBM dem Lizenznehmer ein beschränktes Recht zur Nutzung des Programms. Dieses Recht ist auf die Art der Nutzungsberechtigung, z. B. Prozessor-Value-Unit ("PVU"), Ressourcen-Value-Unit ("RVU") oder Value-Unit ("VU"), oder eine andere angegebene Nutzungsstufe beschränkt, für die der Lizenznehmer laut Berechtigungsnachweis (Proof of Entitlement = PoE) bezahlt hat. Die Nutzung des Lizenznehmers kann außerdem auf eine bestimmte Maschine beschränkt sein, ggf. darf er das Programm nur als Unterstützungsprogramm verwenden oder die Nutzung kann sonstigen Beschränkungen unterliegen. Da der Lizenznehmer nicht für den gesamten wirtschaftlichen Wert des Programms bezahlt hat, sind andere Nutzungsarten ohne Zahlung zusätzlicher Gebühren untersagt. Ferner ist der Lizenznehmer nicht berechtigt, das Programm zur Bereitstellung kommerzieller IT-Services für Dritte, zur Bereitstellung kommerzieller Hosting-Services oder für kommerziell betriebenes Time-Sharing einzusetzen oder das Programm zu vermieten, zu verleasen oder Unterlizenzen für das Programm zu vergeben, sofern dies in den maßgeblichen Vereinbarungen, unter denen der Lizenznehmer die Berechtigungen zur Nutzung des Programms erworben hat, nicht ausdrücklich vorgesehen ist. Dem Lizenznehmer werden abhängig von der Zahlung zusätzlicher Gebühren oder unter abweichenden oder ergänzenden Bedingungen ggf. weitere Rechte eingeräumt. IBM behält sich das Recht vor, darüber zu entscheiden, ob dem Lizenznehmer weitere Rechte gewährt werden. + +Die Programmspezifikationen sind in den Abschnitten "Description" und "Technical Information" der Ankündigungsschreiben des Programms zu finden. + +Redistributables + +Wenn das Programm weiterverteilbare Komponenten (sog. Redistributables) enthält, sind diese in der REDIST-Datei aufgeführt, die zum Lieferumfang des Programms gehört. Zusätzlich zu den in der Vereinbarung gewährten Lizenzrechten darf der Lizenznehmer die Redistributables unter Einhaltung der folgenden Bedingungen weitergeben: +1) Die Weitergabe muss ausschließlich in Form von Objektcode erfolgen und bei der Weitergabe müssen sämtliche Anweisungen, Instruktionen und Spezifikationen eingehalten werden, die in der REDIST-Datei oder der Begleitdokumentation des Programms aufgeführt sind. +2) Wenn Bearbeitungen der Redistributables durch den Lizenznehmer gemäß der Begleitdokumentation des Programms ausdrücklich gestattet sind, müssen diese in Übereinstimmung mit sämtlichen dort aufgeführten Anweisungen, Instruktionen und Spezifikationen durchgeführt werden. Die Bearbeitungen müssen als Redistributables behandelt werden. +3) Die Redistributables dürfen nur als Teil der Anwendung des Lizenznehmers, die mithilfe des Programms entwickelt wurde ("Anwendung des Lizenznehmers"), und nur zur Unterstützung seiner Kunden bei der Nutzung seiner Anwendung weitergegeben werden. Die Anwendung des Lizenznehmers muss einen erheblichen Mehrwert darstellen, sodass die Redistributables nicht die Hauptmotivation für die Endbenutzer zum Erwerb des Softwareprodukts des Lizenznehmers sind. +4) Wenn die Redistributables eine Java Runtime Environment enthalten, muss der Lizenznehmer zusätzlich nicht auf Java basierende Redistributables in seine Anwendung aufnehmen, es sei denn, die Anwendung soll ausschließlich auf allgemeinen Computereinheiten (zum Beispiel Laptops, Desktops und Servern) ausgeführt werden und nicht auf mobilen Endgeräten oder sonstigen Einheiten für Pervasive Computing (zum Beispiel Einheiten, die einen Mikroprozessor enthalten, deren primärer Verwendungszweck aber nicht die Datenverarbeitung ist). +5) Der Lizenznehmer darf keine Copyright- oder Notice-Dateien entfernen, die in den Redistributables enthalten sind. +6) Der Lizenznehmer verpflichtet sich, IBM und die Lieferanten oder Distributoren von IBM in Bezug auf alle Ansprüche von Dritten und gegen Dritte, die aufgrund der Nutzung oder Weitergabe seiner Anwendung geltend gemacht werden, schadlos zu halten. +7) Der Lizenznehmer darf nicht denselben Pfadnamen wie für die Original-Redistributables (Dateien und Module) verwenden. +8) Der Lizenznehmer darf die Namen oder Marken von IBM oder der Lieferanten und Distributoren von IBM nur mit ihrer vorherigen schriftlichen Genehmigung in Verbindung mit der Vermarktung seiner Anwendung verwenden. +9) IBM sowie die Lieferanten und Distributoren von IBM stellen die Redistributables einschließlich der zugehörigen Dokumentation ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. +10) Für die technische Unterstützung seiner Anwendung und der Bearbeitungen der Redistributables ist der Lizenznehmer selbst verantwortlich. +11) In der Lizenzvereinbarung des Lizenznehmers mit dem Endbenutzer seiner Anwendung muss ein Hinweis enthalten sein, dass die Redistributables oder die davon erstellten Bearbeitungen i) nur zur Aktivierung seiner Anwendung verwendet werden dürfen, ii) nicht kopiert werden dürfen (außer für Sicherungszwecke), iii) nicht ohne seine Anwendung weitergegeben oder übertragen werden dürfen und iv) nicht rückumgewandelt (reverse assemble, reverse compile) oder in anderer Weise übersetzt werden dürfen, soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgeschrieben ist. Darüber hinaus sollte die Lizenzvereinbarung des Lizenznehmers die Rechte von IBM in mindestens demselben Maße schützen, wie sie durch die Bedingungen dieser Vereinbarung geschützt werden. + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + +Der Lizenznehmer darf bearbeitete Versionen der Quellenkomponenten und Mustermaterialien, die in der REDIST-Datei eines Programms aufgeführt sind, weitergeben, sofern die Weitergabe in Übereinstimmung mit den Bedingungen dieser Lizenz und den Anweisungen in der REDIST-Datei erfolgt. + +Installation + +"Installation" ist eine Maßeinheit für die Lizenzierung des Programms. Eine Installation ist eine installierte Kopie des Programms auf einer physischen oder virtuellen Platte, die zur Ausführung auf einem Computer bereitgestellt wird. Der Lizenznehmer muss für jede Programminstallation eine Berechtigung erwerben. + +Prozessor-Value-Unit (PVU) + +"Prozessor-Value-Unit" (PVU) ist eine Maßeinheit für die Lizenzierung des Programms. Die Anzahl der erforderlichen PVU-Berechtigungen basiert auf der Prozessortechnologie (siehe die PVU-Tabelle mit Unterteilung nach Vendor, Brand, Typ und Modellnummer des Prozessors unter http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) und der Anzahl der Prozessoren, die dem Programm zur Verfügung stehen. Nach der weiterhin gültigen Definition von IBM ist für die Zwecke der PVU-basierten Lizenzierung jeder Prozessorkern auf einem Chip ein Prozessor. Ein Doppelkernprozessorchip hat zum Beispiel zwei Prozessorkerne. + +Der Lizenznehmer kann das Programm entweder mit Lizenzierung auf Basis der vollständigen Kapazität (Full Capacity) oder mit Lizenzierung auf Basis der Virtualisierungskapazität (Sub-Capacity) gemäß den Passport Advantage Sub-Capacity-Lizenzbedingungen (siehe die Webseite unten) implementieren. Bei Full-Capacity-Lizenzierung muss der Lizenznehmer eine ausreichende Anzahl an PVU-Berechtigungen für alle aktivierten Prozessorkerne* in der physischen Hardwareumgebung erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden, mit Ausnahme der Server, auf denen das Programm permanent entfernt worden ist. Bei Lizenzierung auf Basis der Virtualisierungskapazität muss der Lizenznehmer gemäß der Definition in den "Virtualization Capacity License Counting Rules" unter http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html eine ausreichende Anzahl an Berechtigungen für alle aktivierten Prozessorkerne erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden. + +* Ein "aktivierter Prozessorkern" ist ein Prozessorkern, der in einem physischen oder in einem virtuellen Server genutzt werden kann, unabhängig davon, ob die Kapazität des Prozessorkerns über Virtualisierungstechnologien, Betriebssystembefehle, BIOS-Einstellungen oder vergleichbare Maßnahmen eingeschränkt werden kann oder eingeschränkt ist. + +Programmspezifische Bedingungen + +Idle-Standby-Konfigurationen + +Für die Zwecke dieses Abschnitts ist eine "Idle-Standby"-Konfiguration eine Konfiguration, in der eine Kopie des Programms auf einem Server installiert ist, der zu einer Hochverfügbarkeitslösung gehört und auf den ein Failover des Programms durchgeführt wird, falls die Kopie des Programms auf dem aktiven Server unbrauchbar wird. Ein Server wird als "idle" (inaktiv) angesehen, solange kein Failover stattfindet und er ausschließlich für Verwaltungsaktionen zur Unterstützung in Failoverszenarien eingesetzt wird. + +Das Programm darf nur auf einem Idle-Standby-Server installiert werden, wenn dieser ordnungsgemäß lizenziert ist. + +Wird das Programm in einer Idle-Standby-Konfiguration zusammen mit dem Feature Multi-Instance Queue Manager eingesetzt, dann darf eine Kopie des Programms für Sicherungszwecke auf einem Idle-Standby-Server vorhanden und gestartet sein, muss aber "idle" (inaktiv) bleiben und darf nicht in irgendeiner Weise produktiv genutzt werden, außer wenn der aktive Server ein Failover auf den Idle-Standby-Server durchführt. In diesem Fall darf die Idle-Standby-Kopie für die Dauer des Failover produktiv genutzt werden. + +Wird das Programm in einer Idle-Standby-Konfiguration mit anderen Hochverfügbarkeitssystemen eingesetzt, dann darf eine Kopie des Programms für Sicherungszwecke auf einem Idle-Standby-Server vorhanden, aber nicht gestartet sein (und daher nicht in irgendeiner Weise produktiv genutzt werden); sie wird aber von den Hochverfügbarkeitskomponenten automatisch gestartet, falls der aktive Server ausfällt. Wenn dieser Fall eintritt, darf die Idle-Standby-Kopie für die Dauer des Failover produktiv genutzt werden. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +WICHTIG: BITTE AUFMERKSAM LESEN + +Es folgen zwei Lizenzvereinbarungen. + +1. IBM Internationale Nutzungsbedingungen für die Bewertung von Programmen +2. IBM Internationale Nutzungsbedingungen für Programmpakete + +Wenn der Lizenznehmer das Programm für die produktive Nutzung (nicht für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Wenn der Lizenznehmer das Programm für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum (gemeinsam als "Bewertung" bezeichnet) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer sowohl (i) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für die Bewertung von Programmen ("Probelizenz") als auch (ii) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Die Probelizenz gilt für die Dauer des Bewertungszeitraums. + +Die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen automatisch zur Anwendung, wenn der Lizenznehmer sich dafür entscheidet, das Programm nach dem Bewertungszeitraum zu behalten (oder zusätzliche Programmkopien zur Nutzung nach Ablauf des Bewertungszeitraums zu beziehen), indem er eine entsprechende Beschaffungsvereinbarung (z. B. den IBM International Passport Advantage-Vertrag oder den IBM Passport Advantage Express-Vertrag) abschließt. + +Die Probelizenz und die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen nicht gleichzeitig zur Anwendung; sie schränken sich weder gegenseitig ein, noch ergänzen sie sich gegenseitig und sind voneinander unabhängige Vereinbarungen. + +Der vollständige Text der beiden Lizenzvereinbarungen ist nachfolgend aufgeführt. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für die Bewertung von Programmen (Z125-5543-05) zur Anwendung. + +Programmname: IBM MQ Advanced Message Security V9.0.1 +Programmnummer: Evaluation + +Programmname: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Programmnummer: Evaluation + +Programmname: IBM MQ Telemetry V9.0.1 +Programmnummer: Evaluation + +Bewertungszeitraum + +Der Bewertungszeitraum beginnt mit dem Datum, an dem der Lizenznehmer den Bedingungen dieser Vereinbarung zustimmt, und endet nach 90 Tagen. + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + + + +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für Programmpakete (Z125-3301-14) zur Anwendung. + +Programmname: IBM MQ Advanced Message Security V9.0.1 +Programmnummer: 5724-H72 + +Programmname: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Programmnummer: 5724-H72 + +Programmname: IBM MQ Telemetry V9.0.1 +Programmnummer: 5724-H72 + +Gemäß der Beschreibung in den Internationalen Nutzungsbedingungen für Programmpakete ("IPLA") und dieser Lizenzinformation gewährt IBM dem Lizenznehmer ein beschränktes Recht zur Nutzung des Programms. Dieses Recht ist auf die Art der Nutzungsberechtigung, z. B. Prozessor-Value-Unit ("PVU"), Ressourcen-Value-Unit ("RVU") oder Value-Unit ("VU"), oder eine andere angegebene Nutzungsstufe beschränkt, für die der Lizenznehmer laut Berechtigungsnachweis (Proof of Entitlement = PoE) bezahlt hat. Die Nutzung des Lizenznehmers kann außerdem auf eine bestimmte Maschine beschränkt sein, ggf. darf er das Programm nur als Unterstützungsprogramm verwenden oder die Nutzung kann sonstigen Beschränkungen unterliegen. Da der Lizenznehmer nicht für den gesamten wirtschaftlichen Wert des Programms bezahlt hat, sind andere Nutzungsarten ohne Zahlung zusätzlicher Gebühren untersagt. Ferner ist der Lizenznehmer nicht berechtigt, das Programm zur Bereitstellung kommerzieller IT-Services für Dritte, zur Bereitstellung kommerzieller Hosting-Services oder für kommerziell betriebenes Time-Sharing einzusetzen oder das Programm zu vermieten, zu verleasen oder Unterlizenzen für das Programm zu vergeben, sofern dies in den maßgeblichen Vereinbarungen, unter denen der Lizenznehmer die Berechtigungen zur Nutzung des Programms erworben hat, nicht ausdrücklich vorgesehen ist. Dem Lizenznehmer werden abhängig von der Zahlung zusätzlicher Gebühren oder unter abweichenden oder ergänzenden Bedingungen ggf. weitere Rechte eingeräumt. IBM behält sich das Recht vor, darüber zu entscheiden, ob dem Lizenznehmer weitere Rechte gewährt werden. + +Die Programmspezifikationen sind in den Abschnitten "Description" und "Technical Information" der Ankündigungsschreiben des Programms zu finden. + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + +Installation + +"Installation" ist eine Maßeinheit für die Lizenzierung des Programms. Eine Installation ist eine installierte Kopie des Programms auf einer physischen oder virtuellen Platte, die zur Ausführung auf einem Computer bereitgestellt wird. Der Lizenznehmer muss für jede Programminstallation eine Berechtigung erwerben. + +Prozessor-Value-Unit (PVU) + +"Prozessor-Value-Unit" (PVU) ist eine Maßeinheit für die Lizenzierung des Programms. Die Anzahl der erforderlichen PVU-Berechtigungen basiert auf der Prozessortechnologie (siehe die PVU-Tabelle mit Unterteilung nach Vendor, Brand, Typ und Modellnummer des Prozessors unter http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) und der Anzahl der Prozessoren, die dem Programm zur Verfügung stehen. Nach der weiterhin gültigen Definition von IBM ist für die Zwecke der PVU-basierten Lizenzierung jeder Prozessorkern auf einem Chip ein Prozessor. Ein Doppelkernprozessorchip hat zum Beispiel zwei Prozessorkerne. + +Der Lizenznehmer kann das Programm entweder mit Lizenzierung auf Basis der vollständigen Kapazität (Full Capacity) oder mit Lizenzierung auf Basis der Virtualisierungskapazität (Sub-Capacity) gemäß den Passport Advantage Sub-Capacity-Lizenzbedingungen (siehe die Webseite unten) implementieren. Bei Full-Capacity-Lizenzierung muss der Lizenznehmer eine ausreichende Anzahl an PVU-Berechtigungen für alle aktivierten Prozessorkerne* in der physischen Hardwareumgebung erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden, mit Ausnahme der Server, auf denen das Programm permanent entfernt worden ist. Bei Lizenzierung auf Basis der Virtualisierungskapazität muss der Lizenznehmer gemäß der Definition in den "Virtualization Capacity License Counting Rules" unter http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html eine ausreichende Anzahl an Berechtigungen für alle aktivierten Prozessorkerne erwerben, die dem Programm zur Verfügung stehen oder von dem Programm verwaltet werden. + +* Ein "aktivierter Prozessorkern" ist ein Prozessorkern, der in einem physischen oder in einem virtuellen Server genutzt werden kann, unabhängig davon, ob die Kapazität des Prozessorkerns über Virtualisierungstechnologien, Betriebssystembefehle, BIOS-Einstellungen oder vergleichbare Maßnahmen eingeschränkt werden kann oder eingeschränkt ist. + +Programmspezifische Bedingungen + +Idle-Standby-Konfigurationen + +Für die Zwecke dieses Abschnitts ist eine "Idle-Standby"-Konfiguration eine Konfiguration, in der eine Kopie des Programms auf einem Server installiert ist, der zu einer Hochverfügbarkeitslösung gehört und auf den ein Failover des Programms durchgeführt wird, falls die Kopie des Programms auf dem aktiven Server unbrauchbar wird. Ein Server wird als "idle" (inaktiv) angesehen, solange kein Failover stattfindet und er ausschließlich für Verwaltungsaktionen zur Unterstützung in Failoverszenarien eingesetzt wird. + +Das Programm darf nur auf einem Idle-Standby-Server installiert werden, wenn dieser ordnungsgemäß lizenziert ist. + +Wird das Programm in einer Idle-Standby-Konfiguration zusammen mit dem Feature Multi-Instance Queue Manager eingesetzt, dann darf eine Kopie des Programms für Sicherungszwecke auf einem Idle-Standby-Server vorhanden und gestartet sein, muss aber "idle" (inaktiv) bleiben und darf nicht in irgendeiner Weise produktiv genutzt werden, außer wenn der aktive Server ein Failover auf den Idle-Standby-Server durchführt. In diesem Fall darf die Idle-Standby-Kopie für die Dauer des Failover produktiv genutzt werden. + +Wird das Programm in einer Idle-Standby-Konfiguration mit anderen Hochverfügbarkeitssystemen eingesetzt, dann darf eine Kopie des Programms für Sicherungszwecke auf einem Idle-Standby-Server vorhanden, aber nicht gestartet sein (und daher nicht in irgendeiner Weise produktiv genutzt werden); sie wird aber von den Hochverfügbarkeitskomponenten automatisch gestartet, falls der aktive Server ausfällt. Wenn dieser Fall eintritt, darf die Idle-Standby-Kopie für die Dauer des Failover produktiv genutzt werden. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +WICHTIG: BITTE AUFMERKSAM LESEN + +Es folgen zwei Lizenzvereinbarungen. + +1. IBM Internationale Nutzungsbedingungen für die Bewertung von Programmen +2. IBM Internationale Nutzungsbedingungen für Programmpakete + +Wenn der Lizenznehmer das Programm für die produktive Nutzung (nicht für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Wenn der Lizenznehmer das Programm für Bewertungs-, Erprobungs- oder Vorführungszwecke oder für einen Probezeitraum (gemeinsam als "Bewertung" bezeichnet) bezieht: Durch Zustimmung per Mausklick bestätigt der Lizenznehmer sowohl (i) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für die Bewertung von Programmen ("Probelizenz") als auch (ii) die uneingeschränkte Geltung der IBM Internationalen Nutzungsbedingungen für Programmpakete (IPLA). + +Die Probelizenz gilt für die Dauer des Bewertungszeitraums. + +Die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen automatisch zur Anwendung, wenn der Lizenznehmer sich dafür entscheidet, das Programm nach dem Bewertungszeitraum zu behalten (oder zusätzliche Programmkopien zur Nutzung nach Ablauf des Bewertungszeitraums zu beziehen), indem er eine entsprechende Beschaffungsvereinbarung (z. B. den IBM International Passport Advantage-Vertrag oder den IBM Passport Advantage Express-Vertrag) abschließt. + +Die Probelizenz und die IBM Internationalen Nutzungsbedingungen für Programmpakete kommen nicht gleichzeitig zur Anwendung; sie schränken sich weder gegenseitig ein, noch ergänzen sie sich gegenseitig und sind voneinander unabhängige Vereinbarungen. + +Der vollständige Text der beiden Lizenzvereinbarungen ist nachfolgend aufgeführt. + + +Internationale Nutzungsbedingungen für die Bewertung von Programmen + +Teil 1 - Allgemeine Bedingungen + +Durch Herunterladen, Installieren oder Kopieren des Programms, die Zustimmung zur Vereinbarung per Mausklick, den Zugriff auf das Programm oder eine anderweitige Nutzung des Programms erklärt sich der Lizenznehmer mit den Bedingungen dieser Vereinbarung einverstanden. Wenn Sie diese Bedingungen im Namen des Lizenznehmers akzeptieren, gewährleisten und bestätigen Sie damit, dass Sie berechtigt sind, den Lizenznehmer zur Einhaltung dieser Bedingungen zu verpflichten. Wenn Sie mit diesen Bedingungen nicht einverstanden sind, + +* dürfen Sie das Programm nicht herunterladen, installieren, kopieren, die Vereinbarung per Mausklick akzeptieren, auf das Programm zugreifen oder das Programm nutzen und + +* müssen Sie die unbenutzten Datenträger und die Dokumentation unverzüglich bei der Stelle zurückgeben, von der Sie das Programm bezogen haben. Wurde das Programm heruntergeladen, müssen alle Kopien des Programms vernichtet werden. + +1. Begriffsbestimmungen + +"Berechtigte Nutzung" - die Nutzungsstufe, die festlegt, in welchem Umfang der Lizenznehmer zur Ausführung des Programms berechtigt ist. Die Nutzungsstufe kann anhand der Anzahl der Benutzer, der Millionen Serviceeinheiten pro Stunde (Millions of Service Units = "MSUs"), der Prozessor-Value-Units ("PVUs") oder einer anderen von IBM angegebenen Nutzungsstufe ermittelt werden. + +"IBM" - International Business Machines Corporation oder deren verbundene Unternehmen. + +"Lizenzinformation" ("LI") - ein Dokument, das Informationen und zusätzliche programmspezifische Bedingungen enthält. Die Lizenzinformation des Programms kann im Verzeichnis des Programms zur Verfügung gestellt oder über einen entsprechenden Systembefehl abgerufen werden oder ist dem Programm als Broschüre beigelegt. + +"Programm" - umfasst das Originalprogramm sowie vollständige oder Teilkopien hiervon und kann aus 1) maschinenlesbaren Instruktionen und Daten, 2) Komponenten, Dateien und Modulen, 3) audiovisuellen Inhalten (z. B. Abbildungen, Texte, Aufzeichnungen oder Bilder) und 4) zugehörigem Lizenzmaterial (z. B. Schlüssel und Dokumentation) bestehen. + +2. Struktur dieser Vereinbarung + +Diese Vereinbarung besteht aus Teil 1 - Allgemeine Bedingungen, Teil 2 - Länderspezifische Bedingungen (sofern vorhanden) und den Lizenzinformationen und stellt die vollständige Vereinbarung zwischen dem Lizenznehmer und IBM zur Nutzung des Programms dar. Sie ersetzt alle zuvor getroffenen mündlichen oder schriftlichen Absprachen zwischen dem Lizenznehmer und IBM in Bezug auf die Nutzung des Programms durch den Lizenznehmer. Die Bedingungen von Teil 2 können diejenigen in Teil 1 ersetzen oder ergänzen. Im Falle eines Widerspruchs haben die Lizenzinformationen Vorrang vor Teil 1 und Teil 2 dieser Vereinbarung. + +3. Lizenz + +Das Programm ist Eigentum von IBM oder eines IBM Lieferanten und wird urheberrechtlich geschützt und lizenziert, jedoch nicht verkauft. + +IBM erteilt dem Lizenznehmer eine eingeschränkte, nicht ausschließliche und nicht übertragbare Lizenz, 1) das Programm während des Bewertungszeitraums bis zu der in der Lizenzinformation angegebenen berechtigten Nutzung ausschließlich für interne Bewertungs-, Erprobungs- oder Vorführungszwecke zunächst auf Probe herunterzuladen, zu installieren und zu verwenden, 2) Kopien des Programms zur Unterstützung der berechtigten Nutzung in angemessener Anzahl zu erstellen und zu installieren und 3) eine Sicherungskopie zu erstellen, sofern + +a. der Lizenznehmer das Programm rechtmäßig bezogen hat und die Bedingungen dieser Vereinbarung einhält; + +b. die Sicherungskopie erst ausgeführt wird, wenn das gesicherte Programm nicht mehr ausführbar ist; + +c. der Lizenznehmer auf jeder Kopie oder Teilkopie des Programms alle Copyrightvermerke und sonstigen Eigentumshinweise anbringt; + +d. der Lizenznehmer ein Verzeichnis aller Programmkopien anlegt und sicherstellt, dass jeder Benutzer (unabhängig davon, ob der Zugriff lokal oder von einem fernen System aus erfolgt) das Programm 1) nur für Geschäftszwecke des Lizenznehmers nutzt und 2) die Bedingungen dieser Vereinbarung einhält; + +e. der Lizenznehmer sich verpflichtet, 1) das Programm nicht für produktive Zwecke oder anderweitig abweichend von den Bedingungen dieser Vereinbarung zu nutzen, zu kopieren, zu ändern oder weiterzugeben; 2) das Programm nicht rückumzuwandeln (reverse assemble, reverse compile) oder in anderer Weise zu übersetzen, soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgeschrieben ist; 3) die Komponenten, Dateien, Module, audiovisuellen Inhalte und das zugehörige Lizenzmaterial des Programms nicht ohne das Programm zu nutzen; 4) das Programm nicht in Unterlizenz zu vergeben, zu vermieten oder zu verleasen; oder 5) das Programm nicht für kommerzielles Anwendungshosting zu nutzen; und, + +f. wenn der Lizenznehmer dieses Programm als Unterstützungsprogramm erhält, dieses Programm nur zur Unterstützung des Hauptprogramms und unter Einhaltung sämtlicher Einschränkungen in der Lizenz für das Hauptprogramm zu nutzen, oder wenn der Lizenznehmer dieses Programm als Hauptprogramm erhält, alle Unterstützungsprogramme nur zur Unterstützung dieses Programms und unter Einhaltung sämtlicher Einschränkungen in dieser Vereinbarung zu nutzen. In diesem Abschnitt bezeichnet ein "Unterstützungsprogramm" ein Programm, das Teil eines anderen IBM Programms ("Hauptprogramm") ist und in der Lizenzinformation des Hauptprogramms als Unterstützungsprogramm aufgeführt wird. (Um eine separate Lizenz für das Unterstützungsprogramm ohne diese Einschränkungen zu erwerben, sollte sich der Lizenznehmer an die Stelle wenden, von der er das Unterstützungsprogramm bezogen hat.) + +Diese Lizenz gilt für jede Kopie des Programms, die der Lizenznehmer erstellt. + +3.1 Updates, Fixes und Patches + +Wenn der Lizenznehmer Updates, Fixes oder Patches für ein Programm erhält, dann akzeptiert er alle zusätzlichen oder abweichenden Bedingungen, die in der Lizenzinformation für die Updates, Fixes oder Patches aufgeführt sind. Werden keine zusätzlichen oder abweichenden Bedingungen bereitgestellt, unterliegen die Updates, Fixes oder Patches ausschließlich dieser Vereinbarung. Wird das Programm durch ein Update ersetzt, erklärt sich der Lizenznehmer damit einverstanden, die Nutzung des ersetzten Programms unverzüglich einzustellen. + +3.2 Laufzeit und Kündigung + +Der Bewertungszeitraum beginnt mit dem Datum, an dem der Lizenznehmer den Bedingungen dieser Vereinbarung zustimmt, und endet 1) bei Ablauf der Nutzungsdauer oder Erreichen des Ablaufdatums, das von IBM in der Lizenzinformation oder einem Auftragsdokument angegeben wurde, oder 2) mit dem Datum, an dem sich das Programm automatisch selbst inaktiviert. Es gilt das jeweils frühere Datum. Der Lizenznehmer wird das Programm und alle davon erstellten Kopien innerhalb von zehn Tagen nach Ablauf des Bewertungszeitraums vernichten. Falls in der Lizenzinformation vorgesehen ist, dass der Lizenznehmer das Programm behalten darf und er dieses Angebot annimmt, unterliegt das Programm danach einer anderen Lizenzvereinbarung, die IBM dem Lizenznehmer zur Verfügung stellen wird. Ferner können Gebühren anfallen. + +IBM kann die Lizenz des Lizenznehmers kündigen, wenn der Lizenznehmer die Bedingungen dieser Vereinbarung nicht erfüllt. Wird die Lizenz von einer der Vertragsparteien aus irgendeinem Grund gekündigt, erklärt sich der Lizenznehmer damit einverstanden, die Nutzung des Programms unverzüglich einzustellen und alle Programmkopien zu vernichten. Bedingungen, die sich ihrer Natur nach auf die Zeit nach einer Beendigung dieser Vereinbarung erstrecken, bleiben bis zu ihrer Erfüllung in Kraft und gelten auch für eventuelle Rechtsnachfolger und Zessionare. + +Das Programm kann eine Inaktivierungseinheit enthalten, die eine weitere Verwendung des Programms nach Ablauf des Bewertungszeitraums verhindert. Der Lizenznehmer erklärt sich damit einverstanden, weder diese Inaktivierungseinheit noch das Programm in irgendeiner Weise zu manipulieren. Der Lizenznehmer sollte entsprechende Vorkehrungen treffen, um Datenverluste zu vermeiden, falls das Programm nicht mehr ausgeführt werden kann. + +4. Gebühren + +Während des Bewertungszeitraums werden für die Nutzung des Programms keine Gebühren berechnet. + +5. Gewährleistungsausschluss + +Vorbehaltlich einer gesetzlichen Gewährleistung, die nicht ausgeschlossen werden kann, übernimmt IBM keine Gewährleistung (ausdrücklich oder stillschweigend) hinsichtlich des Programms oder der Unterstützung (sofern vorgesehen), einschließlich, aber nicht begrenzt auf die zufriedenstellende Qualität, Handelsüblichkeit, Verwendungsfähigkeit für einen bestimmten Zweck, Eigentumsrecht und die Freiheit von Rechten Dritter. + +Nach der Rechtsordnung bzw. Gerichtsbarkeit einiger Länder ist der Ausschluss oder die Begrenzung von ausdrücklichen und/oder stillschweigenden Zusicherungen/Gewährleistungen nicht erlaubt, sodass obige Einschränkungen und Ausschlüsse für den Lizenznehmer möglicherweise nicht anwendbar sind. In diesem Fall sind derartige Gewährleistungen auf die gesetzliche Mindestgewährleistungsdauer begrenzt. Nach Ablauf des Gewährleistungszeitraums wird keinerlei Gewährleistung mehr erbracht. Darüber hinaus ist nach der Rechtsordnung bzw. Gerichtsbarkeit einiger Länder die Verkürzung der gesetzlichen Gewährleistungsfrist nicht erlaubt, sodass obige Einschränkungen für den Lizenznehmer möglicherweise nicht anwendbar sind. Der Lizenznehmer kann gegebenenfalls weitere Rechte geltend machen, die abhängig vom jeweiligen Land und der jeweiligen Rechtsordnung bzw. Gerichtsbarkeit unterschiedlich sein können. + +Die Gewährleistungsausschlüsse und sonstigen Ausschlüsse in diesem Abschnitt 5 gelten auch für die Programmentwickler und Lieferanten von IBM. + +Für Nicht-IBM Programme können die Hersteller, Lieferanten und Herausgeber ihre eigenen Gewährleistungen mitliefern. + +IBM leistet nur Unterstützung, wenn dies ausdrücklich angegeben ist. Falls IBM Unterstützung leistet, unterliegt diese den Gewährleistungsausschlüssen und sonstigen Ausschlüssen in diesem Abschnitt 5. + +6. Daten und Datenbanken des Lizenznehmers + +Um den Lizenznehmer bei der Eingrenzung eines Problems mit dem Programm zu unterstützen, kann IBM den Lizenznehmer auffordern, 1) IBM Fernzugriff auf sein System zu gestatten oder 2) Informationen oder Systemdaten an IBM zu senden. IBM ist jedoch nicht zur Erbringung solcher Unterstützungsleistungen verpflichtet, es sei denn, IBM und der Lizenznehmer treffen eine separate schriftliche Vereinbarung, in der IBM sich bereit erklärt, Unterstützung für den Lizenznehmer in einem Umfang zu leisten, der die Verpflichtungen von IBM unter dieser Vereinbarung überschreitet. In jedem Fall wird IBM die Informationen über Fehler und Probleme zur Verbesserung der IBM Produkte und Services nutzen und Unterstützung durch die Bereitstellung entsprechender Unterstützungsangebote leisten. Zu diesem Zweck kann IBM andere IBM Organisationen und Subunternehmer (auch in Ländern außerhalb des Landes, in welchem der Lizenznehmer seinen Sitz hat) beauftragen, und der Lizenznehmer wird IBM dies gestatten. + +Der Lizenznehmer bleibt verantwortlich für 1) alle Daten und den Inhalt der Datenbanken, die er IBM zur Verfügung stellt, 2) die Auswahl und Implementierung von Prozeduren und Kontrollmechanismen im Hinblick auf Datenzugriff, -sicherheit, -verschlüsselung, -nutzung und -übertragung (einschließlich aller personenbezogenen Daten) und 3) die Sicherung und Wiederherstellung der Datenbanken und der gespeicherten Daten. Der Lizenznehmer wird IBM keine personenbezogenen Informationen, weder als Daten noch in anderer Form, senden oder Zugriff darauf erteilen und muss für alle angemessenen Kosten und sonstigen Ausgaben aufkommen, die IBM im Zusammenhang mit solchen Informationen entstehen, die versehentlich an IBM weitergegeben wurden oder deren Verlust oder Offenlegung durch IBM verursacht wurde, einschließlich der Aufwendungen, die sich aus den Ansprüchen Dritter ergeben. + +7. Haftungsbegrenzung + +Die Beschränkungen und Ausschlüsse in Abschnitt 7 gelten, soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgesehen ist. + +7.1 Fälle, in denen IBM haftbar gemacht werden kann + +Soweit IBM dem Lizenznehmer gegenüber schadenersatzpflichtig ist, hat er Anspruch auf Entschädigung durch IBM. Unabhängig vom Rechtsgrund, auf dem der an IBM gerichtete Schadensersatzanspruch des Lizenznehmers beruht (einschließlich Vertragsverletzung, Fahrlässigkeit, unrichtiger Angaben oder anderer Ansprüche aus dem Vertrag oder aufgrund unerlaubter Handlungen), ist die Gesamthaftung von IBM für sämtliche Ansprüche in Bezug auf ein einzelnes Programm oder andere Ansprüche, die aus dieser Vereinbarung entstehen, begrenzt auf 1) Personenschäden (einschließlich Tod) und Schäden an Immobilien und beweglichen Sachen und 2) bei anderen direkten Schäden auf einen Betrag von bis zu 10.000 Euro (oder den entsprechenden Betrag in der Landeswährung). + +Diese Haftungsbegrenzung gilt auch für alle Programmentwickler und Lieferanten von IBM. Dies ist der maximale Betrag, für den IBM und diese gemeinsam haftbar gemacht werden können. + +7.2 Fälle, in denen IBM nicht haftbar ist + +Auf keinen Fall sind IBM oder die Programmentwickler und Lieferanten von IBM in folgenden Fällen haftbar, auch wenn sie auf die Möglichkeit solcher Schäden hingewiesen wurden: + +a. Verlust oder Beschädigung von Daten; + +b. unmittelbare oder mittelbare Schäden oder sonstige wirtschaftliche Folgeschäden; oder + +c. entgangene Gewinne, Geschäftsabschlüsse, Umsätze, Schädigung des guten Namens oder Verlust erwarteter Einsparungen. + +8. Einsichts- und Prüfungsrecht + +In diesem Abschnitt 8 bezeichnet "Bewertungsbedingungen" 1) diese Vereinbarung sowie alle anwendbaren Anlagen und Auftragsdokumente, die von IBM bereitgestellt werden, und 2) IBM Softwarerichtlinien, die auf der IBM Software Policy Website (www.ibm.com/softwarepolicies) zu finden sind, einschließlich der Richtlinien, die sich auf Sicherungen, das Sub-Capacity-Preismodell und die Migration beziehen. + +Die Rechte und Verpflichtungen im Rahmen dieses Abschnitts 8 bleiben während der Lizenzlaufzeit und danach für weitere zwei Jahre in Kraft. + +8.1 Prüfungsprozess + +Der Lizenznehmer verpflichtet sich, korrekte schriftliche Aufzeichnungen, Ausgaben von Systemtools und sonstige Systemdaten zu erstellen, aufzubewahren und IBM sowie den beauftragten Prüfern bereitzustellen, um gegenüber IBM prüffähige Nachweise dafür zu erbringen, dass die Nutzung der Programme in Übereinstimmung mit den Bewertungsbedingungen erfolgt, einschließlich der angewandten IBM Lizenz- und Preisbedingungen. Der Lizenznehmer ist dafür verantwortlich, 1) sicherzustellen, dass die berechtigte Nutzung nicht überschritten wird und 2) die Bewertungsbedingungen eingehalten werden. + +Nach angemessener Vorankündigung ist IBM dazu berechtigt, die Einhaltung der Bewertungsbedingungen an allen Standorten des Lizenznehmers und für alle Umgebungen, an denen der Lizenznehmer die den Bewertungsbedingungen unterliegenden Programme (zu irgendeinem Zweck) nutzt, zu überprüfen. Die Prüfung findet während der üblichen Geschäftszeiten in den Räumlichkeiten des Lizenznehmers statt. IBM wird sich bemühen, den Geschäftsbetrieb des Lizenznehmers dabei so wenig wie möglich zu beeinträchtigen. IBM ist berechtigt, die Prüfung durch einen unabhängigen Prüfer durchführen zu lassen, soweit dieser durch eine schriftliche Vertraulichkeitsvereinbarung zur Geheimhaltung verpflichtet ist. + +8.2 Prüfergebnis + +IBM wird den Lizenznehmer schriftlich benachrichtigen, sofern eine solche Überprüfung ergibt, dass der Lizenznehmer die berechtigte Nutzung eines Programms überschritten hat oder der Lizenznehmer die ihm aus dieser Vereinbarung obliegenden Verpflichtungen nicht einhält. Der Lizenznehmer erklärt sich dazu bereit, die in einer Rechnung von IBM aufgeführten Gebühren für 1) die Nutzungsüberschreitung, 2) die Unterstützung während der Nutzungsüberschreitung entweder für die Dauer der Nutzungsüberschreitung oder für zwei Jahre, je nachdem, welcher Zeitraum kürzer ist, und 3) alle anfallenden zusätzlichen Gebühren und anderen Verbindlichkeiten, die sich aufgrund der Prüfung ergeben, unverzüglich direkt an IBM zu entrichten. + +9. Hinweise von Drittherstellern + +Das Programm kann Drittherstellercode enthalten, für den IBM und nicht der Dritthersteller dem Lizenznehmer eine Lizenz unter dieser Vereinbarung erteilt. Falls Hinweise auf den Drittherstellercode ("Third Party Notices") mitgeliefert werden, geschieht dies nur zu Informationszwecken. Diese Hinweise können in den NOTICES-Dateien des Programms enthalten sein. Informationen über den Erhalt des Quellcodes für einen bestimmten Drittherstellercode befinden sich in den Third Party Notices. Kennzeichnet IBM Drittherstellercode in den Third Party Notices als "Modifiable Third Party Code" (Drittherstellercode, der geändert werden kann), so erteilt IBM dem Lizenznehmer damit die Berechtigung, 1) den Modifiable Third Party Code zu verändern und 2) die Programmmodule rückzuentwickeln, die eine direkte Schnittstelle zu dem Modifiable Third Party Code darstellen, sofern dies ausschließlich zu dem Zweck erfolgt, die Änderungen des Lizenznehmers am Drittherstellercode per Debugging zu testen. Die Service- und Unterstützungsverpflichtungen von IBM (sofern verfügbar) beziehen sich nur auf das unveränderte Programm. + +10. Allgemeines + +a. Gesetzlich unabdingbare Verbraucherschutzrechte haben Vorrang vor den Bedingungen dieser Vereinbarung. + +b. Falls eine der Bedingungen dieser Vereinbarung im Rahmen des geltenden Rechts ungültig oder undurchführbar ist, sind die übrigen Bedingungen dieser Vereinbarung davon nicht betroffen und gelten weiterhin in vollem Umfang. + +c. Es ist dem Lizenznehmer untersagt, das Programm zu exportieren. + +d. Der Lizenznehmer ist damit einverstanden, dass International Business Machines Corporation und deren verbundene Unternehmen (sowie deren Rechtsnachfolger und Zessionare, Vertragspartner und IBM Business Partner) die Kontaktinformationen des Lizenznehmers in allen Ländern, in denen sie geschäftlich tätig sind, in Verbindung mit IBM Produkten und Services oder zur Förderung der Geschäftsbeziehung zwischen IBM und dem Lizenznehmer speichern und nutzen dürfen. + +e. Jede Vertragspartei wird der anderen Partei ausreichend Gelegenheit geben, ihren vertraglichen Verpflichtungen nachzukommen, bevor sie rechtliche Schritte wegen Nichterfüllung von Vertragsbedingungen unternimmt. Die Vertragsparteien werden versuchen, alle Streitfälle, Meinungsverschiedenheiten oder Ansprüche zwischen den Parteien in Bezug auf diese Vereinbarung einvernehmlich beizulegen. + +f. Soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgesehen ist, stimmen beide Vertragsparteien überein, 1) im Rahmen dieser Vereinbarung keine Klage später als zwei Jahre nach Auftreten des Klagegegenstands einzureichen, und 2) dass nach Ablauf dieser Frist alle Ansprüche und alle damit in Zusammenhang stehenden Rechte verjähren. + +g. Weder der Lizenznehmer noch IBM sind für die Nichterfüllung von vertraglichen Verpflichtungen aus Gründen haftbar, die von den Vertragsparteien nicht beeinflusst werden können. + +h. Aus dieser Vereinbarung ergibt sich kein Recht auf Klage oder Klagegegenstand für Dritte, und IBM ist nicht haftbar für Ansprüche Dritter gegen den Lizenznehmer, die nicht oben in Unterabschnitt 7.1 (Fälle, in denen IBM haftbar gemacht werden kann) für Personenschäden (einschließlich Tod) und Schäden an Immobilien und beweglichen Sachen aufgeführt sind, für die IBM nach den gesetzlichen Bestimmungen haftbar ist. + +i. Durch Anerkennung dieser Vereinbarung stimmen beide Vertragsparteien darin überein, sich nicht auf irgendwelche Darstellungen zu verlassen, die nicht auf dieser Vereinbarung beruhen, einschließlich 1) der Angaben zu Leistung oder Funktion des Programms, die von den ausdrücklichen Gewährleistungen in Abschnitt 5 (Gewährleistungsausschluss) oben abweichen; und 2) der Erfahrungen oder Empfehlungen Dritter; oder 3) der Ergebnisse oder Einsparungen, die der Lizenznehmer eventuell erzielen kann. + +j. IBM hat mit bestimmten Partnern ("IBM Business Partner" genannt) Vereinbarungen zur Vermarktung und Unterstützung bestimmter Programme geschlossen. IBM Business Partner sind eigenständig und von IBM unabhängig. IBM ist weder für die Geschäftstätigung der IBM Business Partner noch für deren Aussagen oder Verpflichtungen gegenüber dem Lizenznehmer verantwortlich. + +k. Die Lizenzbedingungen und Freistellungsregelungen in anderen (Rahmen-)Vereinbarungen zwischen dem Lizenznehmer und IBM (z. B. den Allgemeinen Geschäftsbedingungen von IBM) gelten nicht für Programmlizenzen, die unter dieser Vereinbarung erteilt werden. + +11. Geltungsbereich und geltendes Recht + +11.1 Geltendes Recht + +Beide Vertragsparteien sind damit einverstanden, dass die Gesetze des Landes zur Anwendung kommen, in dem der Lizenznehmer die Programmlizenz bezogen hat, um die Rechte, Pflichten und Verpflichtungen des Lizenznehmers und von IBM, die sich aus dem Inhalt dieser Vereinbarung ergeben oder in irgendeiner Weise damit in Zusammenhang stehen, zu regeln, zu interpretieren und durchzuführen, ungeachtet unterschiedlicher Rechtsgrundlagen. + +Die Vertragskonvention der Vereinten Nationen für den internationalen Warenverkauf kommt nicht zur Anwendung. + +11.2 Rechtsprechung + +Alle Rechte, Pflichten und Verpflichtungen unterliegen der Rechtsprechung des Landes, in dem der Lizenznehmer die Programmlizenz bezogen hat. + +Teil 2 - Länderspezifische Bedingungen + +Für Lizenzen, die in den unten aufgeführten Ländern erteilt werden, ersetzen oder ergänzen die nachfolgenden länderspezifischen Regelungen die betreffenden Bedingungen für die jeweiligen Länder in Teil 1. Alle Bedingungen in Teil 1, die von diesen Änderungen oder Ergänzungen nicht betroffen sind, bleiben unverändert und behalten ihre Gültigkeit. Teil 2 ist wie folgt aufgebaut: + +* Ergänzungen zu Teil 1, Abschnitt 11 (Geltendes Recht und Rechtsprechung), die für mehrere Länder gelten, und + +* Ergänzungen zu anderen Bedingungen dieser Vereinbarung, die für die EMEA-Länder (Europa, Naher/Mittlerer Osten und Afrika) gelten + +Ergänzungen zu Teil 1, Abschnitt 11 (Geltendes Recht und Rechtsprechung), die für mehrere Länder gelten + +11.2 Rechtsprechung + +Der folgende Absatz bezieht sich auf die Rechtsprechung und ersetzt Unterabschnitt 11.2 (Rechtsprechung) für Österreich: + +Alle Rechte, Pflichten und Verpflichtungen unterliegen der Rechtsprechung des Landes, in dem der Lizenznehmer die Programmlizenz bezogen hat, mit Ausnahme der unten aufgeführten Länder, in denen sämtliche Rechtsstreitigkeiten, die sich aus dieser Vereinbarung ergeben oder damit in Zusammenhang stehen, einschließlich etwaiger Schnellverfahren, ausschließlich in die Zuständigkeit der folgenden Gerichte fallen: + +des zuständigen Gerichts in Wien, Österreich (Innenstadt) + +ERGÄNZUNGEN FÜR DIE EMEA-LÄNDER + +MITGLIEDSSTAATEN DER EUROPÄISCHEN UNION + +5. Gewährleistungsausschluss + +Der folgende Text wird Abschnitt 5 (Gewährleistungsausschluss) hinzugefügt: + +In der Europäischen Union ("EU") sind für Verbraucher unter den geltenden nationalen rechtlichen Bestimmungen Rechte für den Verkauf von Verbrauchsgütern definiert. Diese Rechte sind von den Bestimmungen in Abschnitt 5 (Gewährleistungsausschluss) nicht betroffen. + +EU-MITGLIEDSSTAATEN UND DIE UNTEN AUFGEFÜHRTEN LÄNDER + +Liechtenstein, die Schweiz und alle anderen europäischen Länder, die nationale Datenschutzbestimmungen nach dem EU-Modell per Gesetz eingeführt haben. + +10. Allgemeines + +Der folgende Text ersetzt Abschnitt 10.d: + +(1) Begriffsbestimmungen - Für die Zwecke von Abschnitt 10.d kommen die folgenden zusätzlichen Begriffsbestimmungen zur Anwendung: + +(a) Kontaktinformationen - geschäftsbezogene Kontaktinformationen, die IBM vom Lizenznehmer zugänglich gemacht werden, dazu gehören u. a. Namen, Berufsbezeichnungen, Geschäftsadressen, Telefonnummern und E-Mail-Adressen von Mitarbeitern und Vertragspartnern des Lizenznehmers. In Österreich, Italien und der Schweiz umfassen die Kontaktinformationen ferner Angaben über den Lizenznehmer und seine Vertragspartner als juristische Personen (z. B. Umsatzdaten des Lizenznehmers und andere transaktionsorientierte Informationen). + +(b) Kontaktperson - Mitarbeiter und Vertragspartner des Lizenznehmers, auf die sich die Kontaktinformationen beziehen. + +(c) Datenschutzbehörde - die Behörde, die vom jeweiligen Land gemäß den Vorschriften zum Datenschutz und zur elektronischen Kommunikation eingerichtet wurde, oder bei Nicht-EU-Ländern die Behörde, die für die Überwachung des Datenschutzes bei personenbezogenen Daten im jeweiligen Land verantwortlich ist, oder eine zuständige Nachfolgebehörde (in Bezug auf eine der genannten Behörden). + +(d) Vorschriften zum Datenschutz und zur elektronischen Kommunikation - (i) die geltenden nationalen Gesetze und Verordnungen, die die Anforderungen der EU-Richtlinie 95/46/EC (zum Schutz natürlicher Personen bei der Verarbeitung personenbezogener Daten und zum freien Datenverkehr) und der EU-Richtlinie 2002/58/EC (über die Verarbeitung personenbezogener Daten und den Schutz der Privatsphäre in der elektronischen Kommunikation) umsetzen; oder (ii) in Nicht-EU-Ländern, die Gesetze und/oder Verordnungen, die in den betreffenden Ländern zum Schutz personenbezogener Daten und zur Regulierung der elektronischen Kommunikation unter Einbeziehung personenbezogener Daten erlassen wurden, einschließlich aller Ersatzgesetze oder Gesetzesänderungen (in Bezug auf die zuvor erwähnten Gesetze und Verordnungen). + +(e) IBM Unternehmen - International Business Machines Corporation mit Sitz in Armonk, New York (USA), deren verbundene Unternehmen und IBM Business Partner sowie deren Subunternehmer. + +(2) Der Lizenznehmer willigt ein, dass IBM + +(a) Kontaktinformationen zum Zwecke der Durchführung und Förderung der Geschäftsbeziehung, einschließlich der Bereitstellung von Unterstützungsleistungen, und zur Vermarktung der Produkte und Services der IBM Unternehmen (der "Verwendungszweck") zwischen Lizenznehmer und den IBM Unternehmen verarbeitet und nutzt; und + +(b) Kontaktinformationen im Rahmen des Verwendungszwecks den IBM Unternehmen zugänglich macht und die Kontaktinformationen durch diese verarbeitet und genutzt werden können. + +(3) IBM wird in diesem Zusammenhang sämtliche Kontaktinformationen im Rahmen der anwendbaren Vorschriften zum Datenschutz und zur elektronischen Kommunikation und nur im Rahmen des Verwendungszwecks verarbeiten und nutzen. + +(4) Sofern aufgrund der Vorschriften zum Datenschutz und zur elektronischen Kommunikation erforderlich, sichert der Lizenznehmer zu, die vorherige Zustimmung der Kontaktperson eingeholt zu haben bzw. einzuholen und diese entsprechend informiert zu haben bzw. zu informieren. Damit stellt der Lizenznehmer sicher, dass die IBM Unternehmen die Kontaktinformationen im Rahmen des Verwendungszwecks verarbeiten und nutzen und mit den Kontaktpersonen, z. B. auch per E-Mail, Kontakt aufnehmen können. + +(5) Der Lizenznehmer stimmt der Übermittlung von Kontaktinformationen in Länder außerhalb des Europäischen Wirtschaftsraums (EWR) unter der Maßgabe zu, dass eine solche Übermittlung nur im Rahmen einer von der zuständigen Datenschutzbehörde freigegebenen vertraglichen Vereinbarung erfolgt. + +ÖSTERREICH + +7. Haftungsbegrenzung + +Der folgende Text wird hinzugefügt: + +Die folgenden Beschränkungen und Ausschlüsse in Bezug auf die Haftung von IBM entfallen bei Schäden, die durch grobe Fahrlässigkeit oder Vorsatz verursacht werden. + +7.1 Fälle, in denen IBM haftbar gemacht werden kann + +Der folgende Text ersetzt den ersten Satz im ersten Absatz: + +Soweit IBM gegenüber dem Lizenznehmer aufgrund der Verpflichtungen aus dieser Vereinbarung schadenersatzpflichtig ist, hat er Anspruch auf Entschädigung durch IBM. + +Im zweiten Satz des ersten Absatzes wird der in Klammern stehende Ausdruck vollständig gelöscht: + +"(einschließlich Vertragsverletzung, Fahrlässigkeit, unrichtiger Angaben oder anderer Ansprüche aus dem Vertrag oder aufgrund unerlaubter Handlungen)" + +7.2 Fälle, in denen IBM nicht haftbar ist + +Der folgende Text ersetzt Abschnitt 7.2b: + +b. mittelbare Schäden oder Folgeschäden; oder + +DEUTSCHLAND + +7. Haftungsbegrenzung + +Abschnitt 7 (Haftungsbegrenzung) wird durch den folgenden Text vollständig ersetzt: + +a. IBM haftet für 1) Schäden, die durch Verletzung einer mit dem Abschluss des Vertrags übernommenen Garantie entstanden sind; 2) für Schäden bei Verletzungen von Leben, Körper oder Gesundheit; sowie 3) für Schäden, die IBM vorsätzlich oder grob fahrlässig verursacht hat, unbeschränkt. + +b. Bei leicht fahrlässiger Schadensverursachung haftet IBM, gleich aus welchem Rechtsgrund (einschließlich Ansprüchen aus Vertragsverletzung sowie unerlaubter Handlung), pro Schadensfall bis zu einem Höchstbetrag von EUR 500.000 (fünfhunderttausend Euro) für das schadensverursachende Programm. Dies umfasst auch den Ersatz vergeblicher Aufwendungen. Mehrere Pflichtverletzungen, die zusammen im Wesentlichen denselben Schaden verursachen oder zu ihm beitragen, werden als eine Pflichtverletzung behandelt. + +c. IBM haftet bei leicht fahrlässigem Verhalten nicht für mittelbare Schäden oder Folgeschäden, selbst wenn IBM über die Möglichkeit solcher Schäden informiert wurde. Dies umfasst auch den Ersatz vergeblicher Aufwendungen, sofern es sich hierbei um mittelbare oder Folgeschäden handelt. + +d. Im Falle des Verzugs erstattet IBM dem Lizenznehmer den durch den Verzug nachweislich entstandenen Schaden im Rahmen der Abschnitte 7.a und 7.b. + +10. Allgemeines + +Der folgende Text ersetzt die Bedingungen in Abschnitt 10.f: + +f. Alle Ansprüche aus dieser Vereinbarung unterliegen einer dreijährigen Verjährungsfrist, soweit in Abschnitt 5 (Gewährleistungsausschluss) dieser Vereinbarung nicht abweichend geregelt. + +Der folgende Text ersetzt die Bedingungen in Abschnitt 10.h: + +h. Aus dieser Vereinbarung ergibt sich kein Recht auf Klage oder Klagegegenstand für Dritte, und IBM ist nicht haftbar für Ansprüche Dritter gegen den Lizenznehmer, die nicht in Abschnitt 7 (Haftungsbegrenzung) für i) Personenschäden (einschließlich Tod) oder ii) Schäden an Immobilien und beweglichen Sachen aufgeführt sind, für die IBM (in beiden Fällen) nach den gesetzlichen Bestimmungen haftbar ist. + +Z125-5543-05 (07/2011) + + +Internationale Nutzungsbedingungen für Programmpakete + +Teil 1 - Allgemeine Bedingungen + +Durch Herunterladen, Installieren oder Kopieren des Programms, die Zustimmung zur Vereinbarung per Mausklick, den Zugriff auf das Programm oder eine anderweitige Nutzung des Programms erklärt sich der Lizenznehmer mit den Bedingungen dieser Vereinbarung einverstanden. Wenn Sie diese Bedingungen im Namen des Lizenznehmers akzeptieren, gewährleisten und bestätigen Sie damit, dass Sie berechtigt sind, den Lizenznehmer zur Einhaltung dieser Bedingungen zu verpflichten. Wenn Sie mit diesen Bedingungen nicht einverstanden sind, + +* dürfen Sie das Programm nicht herunterladen, installieren, kopieren, die Vereinbarung per Mausklick akzeptieren, auf das Programm zugreifen oder das Programm nutzen und + +* müssen Sie die unbenutzten Datenträger, die Dokumentation und den Berechtigungsnachweis unverzüglich bei der Stelle, von der Sie das Programm bezogen haben, gegen Rückerstattung des gezahlten Betrags zurückgeben. Wurde das Programm heruntergeladen, müssen alle Kopien des Programms vernichtet werden. + +1. Begriffsbestimmungen + +"Berechtigte Nutzung" - die Nutzungsstufe, die festlegt, in welchem Umfang der Lizenznehmer zur Ausführung des Programms berechtigt ist. Die Nutzungsstufe kann anhand der Anzahl der Benutzer, der Millionen Serviceeinheiten pro Stunde (Millions of Service Units = "MSUs"), der Prozessor-Value-Units ("PVUs") oder einer anderen von IBM angegebenen Nutzungsstufe ermittelt werden. + +"IBM" - International Business Machines Corporation oder deren verbundene Unternehmen. + +"Lizenzinformation" ("LI") - ein Dokument, das Informationen und zusätzliche programmspezifische Bedingungen enthält. Die Lizenzinformation eines Programms kann unter www.ibm.com/software/sla abgerufen werden. Darüber hinaus kann sie im Verzeichnis des Programms zur Verfügung gestellt oder über einen entsprechenden Systembefehl abgerufen werden oder ist dem Programm als Broschüre beigelegt. + +"Programm" - umfasst das Originalprogramm sowie vollständige oder Teilkopien hiervon und kann aus 1) maschinenlesbaren Instruktionen und Daten, 2) Komponenten, Dateien und Modulen, 3) audiovisuellen Inhalten (z. B. Abbildungen, Texte, Aufzeichnungen oder Bilder) und 4) zugehörigem Lizenzmaterial (z. B. Schlüssel und Dokumentation) bestehen. + +"Berechtigungsnachweis" (Proof of Entitlement = PoE) - Beleg für die berechtigte Nutzung des Lizenznehmers. Der Berechtigungsnachweis gibt darüber hinaus Aufschluss über den Anspruch des Lizenznehmers auf Gewährleistung, auf Preise für zukünftige Updates (sofern vorhanden) sowie auf mögliche Sonder- und Werbeaktionen. Wenn dem Lizenznehmer von IBM kein Berechtigungsnachweis zur Verfügung gestellt wird, akzeptiert IBM ggf. den Originalverkaufsbeleg oder einen gleichwertigen Verkaufsbeleg der Verkaufsstelle (entweder IBM oder ein IBM Reseller) für das Programm, vorausgesetzt, auf diesem ist der Name des Programms und die erworbene berechtigte Nutzung dokumentiert. + +"Gewährleistungszeitraum" - ein Jahr ab dem Datum der Lizenzerteilung an den ursprünglichen Lizenznehmer. + +2. Struktur dieser Vereinbarung + +Diese Vereinbarung besteht aus Teil 1 - Allgemeine Bedingungen, Teil 2 - Länderspezifische Bedingungen (sofern vorhanden), den Lizenzinformationen und dem Berechtigungsnachweis und stellt die vollständige Vereinbarung zwischen dem Lizenznehmer und IBM zur Nutzung des Programms dar. Sie ersetzt alle zuvor getroffenen mündlichen oder schriftlichen Absprachen zwischen dem Lizenznehmer und IBM in Bezug auf die Nutzung des Programms durch den Lizenznehmer. Die Bedingungen von Teil 2 können diejenigen in Teil 1 ersetzen oder ergänzen. Im Falle eines Widerspruchs haben die Lizenzinformationen Vorrang vor Teil 1 und Teil 2 dieser Vereinbarung. + +3. Lizenz + +Das Programm ist Eigentum von IBM oder eines IBM Lieferanten und wird urheberrechtlich geschützt und lizenziert, jedoch nicht verkauft. + +IBM erteilt dem Lizenznehmer eine nicht ausschließliche Lizenz, 1) das Programm bis zu der im Berechtigungsnachweis angegebenen berechtigten Nutzung zu verwenden, 2) Kopien des Programms zur Unterstützung der berechtigten Nutzung zu erstellen und zu installieren und 3) eine Sicherungskopie zu erstellen, sofern + +a. der Lizenznehmer das Programm rechtmäßig bezogen hat und die Bedingungen dieser Vereinbarung einhält; + +b. die Sicherungskopie erst ausgeführt wird, wenn das gesicherte Programm nicht mehr ausführbar ist; + +c. der Lizenznehmer auf jeder Kopie oder Teilkopie des Programms alle Copyrightvermerke und sonstigen Eigentumshinweise anbringt; + +d. der Lizenznehmer sicherstellt, dass jeder Benutzer (unabhängig davon, ob der Zugriff lokal oder von einem fernen System aus erfolgt) das Programm 1) nur für Geschäftszwecke des Lizenznehmers nutzt und 2) die Bedingungen dieser Vereinbarung einhält; + +e. der Lizenznehmer sich verpflichtet, 1) das Programm nicht abweichend von den Bedingungen dieser Vereinbarung zu nutzen, zu kopieren, zu ändern oder weiterzugeben; 2) das Programm nicht rückumzuwandeln (reverse assemble, reverse compile) oder in anderer Weise zu übersetzen, soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgeschrieben ist; 3) die Komponenten, Dateien, Module, audiovisuellen Inhalte und das zugehörige Lizenzmaterial des Programms nicht ohne das Programm zu nutzen; oder 4) das Programm nicht in Unterlizenz zu vergeben, zu vermieten oder zu verleasen; und, + +f. wenn der Lizenznehmer dieses Programm als Unterstützungsprogramm erhält, dieses Programm nur zur Unterstützung des Hauptprogramms und unter Einhaltung sämtlicher Einschränkungen in der Lizenz für das Hauptprogramm zu nutzen, oder wenn der Lizenznehmer dieses Programm als Hauptprogramm erhält, alle Unterstützungsprogramme nur zur Unterstützung dieses Programms und unter Einhaltung sämtlicher Einschränkungen in dieser Vereinbarung zu nutzen. In diesem Abschnitt bezeichnet ein "Unterstützungsprogramm" ein Programm, das Teil eines anderen IBM Programms ("Hauptprogramm") ist und in der Lizenzinformation des Hauptprogramms als Unterstützungsprogramm aufgeführt wird. (Um eine separate Lizenz für das Unterstützungsprogramm ohne diese Einschränkungen zu erwerben, sollte sich der Lizenznehmer an die Stelle wenden, von der er das Unterstützungsprogramm bezogen hat.) + +Diese Lizenz gilt für jede Kopie des Programms, die der Lizenznehmer erstellt. + +3.1 Trade-ups, Updates, Fixes und Patches + +3.1.1 Trade-ups + +Wird das Programm durch ein Trade-up-Programm ersetzt, dann erlischt die Lizenz des ersetzten Programms unverzüglich. + +3.1.2 Updates, Fixes und Patches + +Wenn der Lizenznehmer Updates, Fixes oder Patches für ein Programm erhält, dann akzeptiert er alle zusätzlichen oder abweichenden Bedingungen, die in der Lizenzinformation für die Updates, Fixes oder Patches aufgeführt sind. Werden keine zusätzlichen oder abweichenden Bedingungen bereitgestellt, unterliegen die Updates, Fixes oder Patches ausschließlich dieser Vereinbarung. Wird das Programm durch ein Update ersetzt, erklärt sich der Lizenznehmer damit einverstanden, die Nutzung des ersetzten Programms unverzüglich einzustellen. + +3.2 Lizenzen mit fester Laufzeit + +Wenn IBM das Programm für eine feste Laufzeit lizenziert, dann erlischt die Lizenz des Lizenznehmers mit dem Ablauf der festen Laufzeit, sofern der Lizenznehmer und IBM die Lizenz nicht in beidseitigem Einverständnis verlängern. + +3.3 Laufzeit und Kündigung + +Diese Vereinbarung bleibt bis zur Kündigung wirksam. + +IBM kann die Lizenz des Lizenznehmers kündigen, wenn der Lizenznehmer die Bedingungen dieser Vereinbarung nicht erfüllt. + +Wird die Lizenz von einer der Vertragsparteien aus irgendeinem Grund gekündigt, erklärt sich der Lizenznehmer damit einverstanden, die Nutzung des Programms unverzüglich einzustellen und alle Programmkopien zu vernichten. Bedingungen, die sich ihrer Natur nach auf die Zeit nach einer Beendigung dieser Vereinbarung erstrecken, bleiben bis zu ihrer Erfüllung in Kraft und gelten auch für eventuelle Rechtsnachfolger und Zessionare. + +4. Gebühren + +Die Gebühren basieren auf der erworbenen berechtigten Nutzung, die im Berechtigungsnachweis dokumentiert ist. IBM gewährt keine Gutschriften oder Rückerstattungen für bereits fällige oder gezahlte Gebühren, mit Ausnahme anderslautender Bestimmungen in dieser Vereinbarung. + +Wenn der Lizenznehmer die berechtigte Nutzung erhöhen will, wird er IBM oder einen autorisierten IBM Reseller vorab benachrichtigen und die anfallenden Gebühren bezahlen. + +5. Steuern + +Der Lizenznehmer trägt die mit dem Programm verbundenen und von IBM angegebenen Steuern, Abgaben und Gebühren (mit Ausnahme solcher auf den Ertrag von IBM) oder weist eine entsprechende Befreiung nach. Ab dem Datum, an dem der Lizenznehmer das Programm erhält, ist er für alle das Programm betreffenden Vermögenssteuern verantwortlich. Wenn durch den Import oder den Export des Programms, die Übertragung, den Zugriff auf das Programm oder die Nutzung des Programms außerhalb des Landes, in dem der ursprüngliche Lizenznehmer die Lizenz erhalten hat, Zölle, Steuern, Abgaben oder Gebühren auf das Programm erhoben werden, trägt der Lizenznehmer alle entsprechenden Steuern, Abgaben oder Gebühren und wird den in Rechnung gestellten Betrag bezahlen. + +6. Geld-zurück-Garantie + +Falls der Lizenznehmer aus irgendeinem Grund mit dem Programm nicht zufrieden ist und wenn er der ursprüngliche Lizenznehmer des Programms ist, kann er die Lizenz kündigen und sich den für das Programm gezahlten Betrag zurückerstatten lassen, sofern er das Programm und den Berechtigungsnachweis innerhalb von 30 Tagen nach dem Ausstellungsdatum des Berechtigungsnachweises an die Stelle zurückgibt, von der er das Programm bezogen hat. Wenn es sich um eine Lizenz mit fester Laufzeit handelt, die verlängert werden kann, kann der Lizenznehmer nur dann eine Rückerstattung anfordern, wenn er das Programm und den zugehörigen Berechtigungsnachweis in den ersten 30 Tagen der Erstlaufzeit zurückgibt. Wenn der Lizenznehmer das Programm heruntergeladen hat, erhält er von der Stelle, von der er das Programm bezogen hat, weitere Anweisungen zur Erstattung des gezahlten Betrags. + +7. Programmübertragung + +Der Lizenznehmer darf das Programm und alle Lizenzrechte und -pflichten nur an Dritte übertragen, wenn diese sich mit den Bedingungen dieser Vereinbarung einverstanden erklären. Wird die Lizenz von einer der Vertragsparteien aus irgendeinem Grund gekündigt, ist es dem Lizenznehmer untersagt, das Programm an Dritte weiterzugeben. Es ist dem Lizenznehmer nicht gestattet, einen Teil 1) des Programms oder 2) der berechtigten Nutzung des Programms zu übertragen. Wird das Programm übertragen, muss der Lizenznehmer auch eine Hardcopy dieser Vereinbarung einschließlich der Lizenzinformation und des Berechtigungsnachweises beifügen. Die Lizenz des Lizenznehmers erlischt mit der Übertragung. + +8. Gewährleistung und Ausschlüsse + +8.1 Begrenzte Gewährleistung + +IBM gewährleistet, dass das Programm bei Nutzung in der angegebenen Betriebsumgebung den Spezifikationen entspricht. Die Programmspezifikationen und die Angaben zur Betriebsumgebung befinden sich in der mit dem Programm gelieferten Dokumentation (z. B. in einer Readme-Datei) oder in anderen, von IBM veröffentlichten Informationen (z. B. in einem Ankündigungsschreiben). Der Lizenznehmer ist damit einverstanden, dass solche Dokumentationen und andere Programminhalte eventuell nur in englischer Sprache zur Verfügung gestellt werden, soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgeschrieben ist. + +Die Gewährleistung gilt nur für den unveränderten Teil des Programms. IBM gewährleistet keinen ununterbrochenen oder fehlerfreien Betrieb des Programms oder die Korrektur aller Programmfehler. Für die Ergebnisse der Nutzung des Programms ist der Lizenznehmer selbst verantwortlich. + +Während des Gewährleistungszeitraums stellt IBM dem Lizenznehmer kostenlosen Zugriff auf IBM Datenbanken mit Informationen zu bekannten Programmfehlern, Fehlerbehebungsmaßnahmen, Einschränkungen und Maßnahmen zur Fehlervermeidung zur Verfügung. Weitere Informationen hierzu enthält das IBM Software Support Handbook unter www.ibm.com/software/support. + +Wenn das Programm innerhalb des Gewährleistungszeitraums nicht wie zugesichert funktioniert und das Problem nicht mithilfe der in den IBM Datenbanken bereitgestellten Informationen behoben werden kann, ist der Lizenznehmer berechtigt, das Programm und den zugehörigen Berechtigungsnachweis bei der Stelle (IBM oder ein IBM Reseller) zurückzugeben, von der er das Programm bezogen hat, und sich den gezahlten Betrag zurückerstatten zu lassen. Nach der Rückgabe des Programms erlischt die Lizenz des Lizenznehmers. Wenn der Lizenznehmer das Programm heruntergeladen hat, erhält er von der Stelle, von der er das Programm bezogen hat, weitere Anweisungen zur Erstattung des gezahlten Betrags. + +8.2 Ausschlüsse + +Diese Gewährleistungsbedingungen sind abschließend und ersetzen sämtliche sonstigen eventuell bestehenden Gewährleistungsansprüche des Lizenznehmers, einschließlich, aber nicht begrenzt auf zufriedenstellende Qualität, Handelsüblichkeit, Verwendungsfähigkeit für einen bestimmten Zweck, Eigentumsrecht und die Freiheit von Rechten Dritter. Nach der Rechtsordnung bzw. Gerichtsbarkeit einiger Länder ist der Ausschluss oder die Begrenzung von ausdrücklichen und/oder stillschweigenden Zusicherungen/Gewährleistungen nicht erlaubt, sodass obige Einschränkungen und Ausschlüsse für den Lizenznehmer möglicherweise nicht anwendbar sind. In diesem Fall sind derartige Gewährleistungen auf die Dauer des Gewährleistungszeitraums begrenzt. Nach Ablauf des Gewährleistungszeitraums wird keinerlei Gewährleistung mehr erbracht. Darüber hinaus ist nach der Rechtsordnung bzw. Gerichtsbarkeit einiger Länder die Verkürzung der gesetzlichen Gewährleistungsfrist nicht erlaubt, sodass obige Einschränkungen für den Lizenznehmer möglicherweise nicht anwendbar sind. + +Diese Gewährleistungen ermöglichen dem Lizenznehmer die Geltendmachung spezifischer juristischer Rechte, die abhängig vom jeweiligen Land und der jeweiligen Rechtsordnung bzw. Gerichtsbarkeit unterschiedlich sein können. + +Die Gewährleistungen in Abschnitt 8 werden nur von IBM angeboten. Die Haftungsausschlüsse in Unterabschnitt 8.2 gelten jedoch auch für die IBM Lieferanten von Drittherstellercode. Diese Lieferanten stellen den betreffenden Code ohne jegliche Gewährleistung zur Verfügung. Mit diesem Absatz werden die Gewährleistungsverpflichtungen von IBM im Rahmen dieser Vereinbarung nicht aufgehoben. + +9. Daten und Datenbanken des Lizenznehmers + +Um den Lizenznehmer bei der Eingrenzung eines Problems mit dem Programm zu unterstützen, kann IBM den Lizenznehmer auffordern, 1) IBM Fernzugriff auf sein System zu gestatten oder 2) Informationen oder Systemdaten an IBM zu senden. IBM ist jedoch nicht zur Erbringung solcher Unterstützungsleistungen verpflichtet, es sei denn, IBM und der Lizenznehmer treffen eine separate schriftliche Vereinbarung, in der IBM sich bereit erklärt, Unterstützung für den Lizenznehmer in einem Umfang zu leisten, der die Gewährleistungsverpflichtungen von IBM unter dieser Vereinbarung überschreitet. In jedem Fall wird IBM die Informationen über Fehler und Probleme zur Verbesserung der IBM Produkte und Services nutzen und Unterstützung durch die Bereitstellung entsprechender Unterstützungsangebote leisten. Zu diesem Zweck kann IBM andere IBM Organisationen und Subunternehmer (auch in Ländern außerhalb des Landes, in welchem der Lizenznehmer seinen Sitz hat) beauftragen, und der Lizenznehmer wird IBM dies gestatten. + +Der Lizenznehmer bleibt verantwortlich für 1) alle Daten und den Inhalt der Datenbanken, die er IBM zur Verfügung stellt, 2) die Auswahl und Implementierung von Prozeduren und Kontrollmechanismen im Hinblick auf Datenzugriff, -sicherheit, -verschlüsselung, -nutzung und -übertragung (einschließlich aller personenbezogenen Daten) und 3) die Sicherung und Wiederherstellung der Datenbanken und der gespeicherten Daten. Der Lizenznehmer wird IBM keine personenbezogenen Informationen, weder als Daten noch in anderer Form, senden oder Zugriff darauf erteilen und muss für alle angemessenen Kosten und sonstigen Ausgaben aufkommen, die IBM im Zusammenhang mit solchen Informationen entstehen, die versehentlich an IBM weitergegeben wurden oder deren Verlust oder Offenlegung durch IBM verursacht wurde, einschließlich der Aufwendungen, die sich aus den Ansprüchen Dritter ergeben. + +10. Haftungsbegrenzung + +Die Beschränkungen und Ausschlüsse in Abschnitt 10 gelten, soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgesehen ist. + +10.1 Fälle, in denen IBM haftbar gemacht werden kann + +Soweit IBM dem Lizenznehmer gegenüber schadenersatzpflichtig ist, hat er Anspruch auf Entschädigung durch IBM. Unabhängig vom Rechtsgrund, auf dem der an IBM gerichtete Schadensersatzanspruch des Lizenznehmers beruht (einschließlich Vertragsverletzung, Fahrlässigkeit, unrichtiger Angaben oder anderer Ansprüche aus dem Vertrag oder aufgrund unerlaubter Handlungen), ist die Gesamthaftung von IBM für sämtliche Ansprüche in Bezug auf ein einzelnes Programm oder andere Ansprüche, die aus dieser Vereinbarung entstehen, begrenzt auf 1) Personenschäden (einschließlich Tod) und Schäden an Immobilien und beweglichen Sachen und 2) bei anderen direkten Schäden auf maximal die Gebühren (maximal zwölf Monatsgebühren, wenn die Gebühren für das Programm nach einer festen Laufzeit berechnet werden), die der Lizenznehmer für das Programm entrichtet hat, das die Grundlage des Rechtsanspruches ist. + +Diese Haftungsbegrenzung gilt auch für alle Programmentwickler und Lieferanten von IBM. Dies ist der maximale Betrag, für den IBM und diese gemeinsam haftbar gemacht werden können. + +10.2 Fälle, in denen IBM nicht haftbar ist + +Auf keinen Fall sind IBM oder die Programmentwickler und Lieferanten von IBM in folgenden Fällen haftbar, auch wenn sie auf die Möglichkeit solcher Schäden hingewiesen wurden: + +a. Verlust oder Beschädigung von Daten; + +b. unmittelbare oder mittelbare Schäden oder sonstige wirtschaftliche Folgeschäden; oder + +c. entgangene Gewinne, Geschäftsabschlüsse, Umsätze, Schädigung des guten Namens oder Verlust erwarteter Einsparungen. + +11. Einsichts- und Prüfungsrecht + +In diesem Abschnitt 11 bezeichnet "Nutzungsbedingungen" 1) diese Vereinbarung sowie alle anwendbaren Anlagen und Auftragsdokumente, die von IBM bereitgestellt werden, und 2) IBM Softwarerichtlinien, die auf der IBM Software Policy Website (www.ibm.com/softwarepolicies) zu finden sind, einschließlich der Richtlinien, die sich auf Sicherungen, das Sub-Capacity-Preismodell und die Migration beziehen. + +Die Rechte und Verpflichtungen im Rahmen dieses Abschnitts 11 bleiben während der Lizenzlaufzeit und danach für weitere zwei Jahre in Kraft. + +11.1 Prüfungsprozess + +Der Lizenznehmer verpflichtet sich, korrekte schriftliche Aufzeichnungen, Ausgaben von Systemtools und sonstige Systemdaten zu erstellen, aufzubewahren und IBM sowie den beauftragten Prüfern bereitzustellen, um gegenüber IBM prüffähige Nachweise dafür zu erbringen, dass die Nutzung der Programme in Übereinstimmung mit den Nutzungsbedingungen erfolgt, einschließlich der angewandten IBM Lizenz- und Preisbedingungen. Der Lizenznehmer ist dafür verantwortlich, 1) sicherzustellen, dass die berechtigte Nutzung nicht überschritten wird und 2) die Nutzungsbedingungen eingehalten werden. + +Nach angemessener Vorankündigung ist IBM dazu berechtigt, die Einhaltung der Nutzungsbedingungen an allen Standorten des Lizenznehmers und für alle Umgebungen, an denen der Lizenznehmer die den Nutzungsbedingungen unterliegenden Programme (zu irgendeinem Zweck) nutzt, zu überprüfen. Die Prüfung findet während der üblichen Geschäftszeiten in den Räumlichkeiten des Lizenznehmers statt. IBM wird sich bemühen, den Geschäftsbetrieb des Lizenznehmers dabei so wenig wie möglich zu beeinträchtigen. IBM ist berechtigt, die Prüfung durch einen unabhängigen Prüfer durchführen zu lassen, soweit dieser durch eine schriftliche Vertraulichkeitsvereinbarung zur Geheimhaltung verpflichtet ist. + +11.2 Prüfergebnis + +IBM wird den Lizenznehmer schriftlich benachrichtigen, sofern eine solche Überprüfung ergibt, dass der Lizenznehmer die berechtigte Nutzung eines Programms überschritten hat oder der Lizenznehmer die ihm aus dieser Vereinbarung obliegenden Verpflichtungen nicht einhält. Der Lizenznehmer erklärt sich dazu bereit, die in einer Rechnung von IBM aufgeführten Gebühren für 1) die Nutzungsüberschreitung, 2) die Unterstützung während der Nutzungsüberschreitung entweder für die Dauer der Nutzungsüberschreitung oder für zwei Jahre, je nachdem, welcher Zeitraum kürzer ist, und 3) alle anfallenden zusätzlichen Gebühren und anderen Verbindlichkeiten, die sich aufgrund der Prüfung ergeben, unverzüglich direkt an IBM zu entrichten. + +12. Hinweise von Drittherstellern + +Das Programm kann Drittherstellercode enthalten, für den IBM und nicht der Dritthersteller dem Lizenznehmer eine Lizenz unter dieser Vereinbarung erteilt. Falls Hinweise auf den Drittherstellercode ("Third Party Notices") mitgeliefert werden, geschieht dies nur zu Informationszwecken. Diese Hinweise können in den NOTICES-Dateien des Programms enthalten sein. Informationen über den Erhalt des Quellcodes für einen bestimmten Drittherstellercode befinden sich in den Third Party Notices. Kennzeichnet IBM Drittherstellercode in den Third Party Notices als "Modifiable Third Party Code" (Drittherstellercode, der geändert werden kann), so erteilt IBM dem Lizenznehmer damit die Berechtigung, 1) den Modifiable Third Party Code zu verändern und 2) die Programmmodule rückzuentwickeln, die eine direkte Schnittstelle zu dem Modifiable Third Party Code darstellen, sofern dies ausschließlich zu dem Zweck erfolgt, die Änderungen des Lizenznehmers am Drittherstellercode per Debugging zu testen. Die Service- und Unterstützungsverpflichtungen von IBM (sofern verfügbar) beziehen sich nur auf das unveränderte Programm. + +13. Allgemeines + +a. Gesetzlich unabdingbare Verbraucherschutzrechte haben Vorrang vor den Bedingungen dieser Vereinbarung. + +b. Werden die Programme auf Datenträgern an den Lizenznehmer geliefert, geht - sofern nicht zwischen den Parteien etwas Abweichendes schriftlich vereinbart wurde - die Gefahr auf den Lizenznehmer über, sobald IBM den Datenträger an den von IBM bestimmten Spediteur/Frachtführer oder die sonst zur Ausführung der Auslieferung bestimmte Person oder Anstalt ausgeliefert hat. + +c. Falls eine der Bedingungen dieser Vereinbarung im Rahmen des geltenden Rechts ungültig oder undurchführbar ist, sind die übrigen Bedingungen dieser Vereinbarung davon nicht betroffen und gelten weiterhin in vollem Umfang. + +d. Der Lizenznehmer verpflichtet sich zur Einhaltung aller anwendbaren Export- und Importgesetze und -bestimmungen, einschließlich der US-Embargo- und Sanktionsbestimmungen sowie des Exportverbots für bestimmte Verwendungszwecke oder an bestimmte Personen. + +e. Der Lizenznehmer ist damit einverstanden, dass International Business Machines Corporation und deren verbundene Unternehmen (sowie deren Rechtsnachfolger und Zessionare, Vertragspartner und IBM Business Partner) die Kontaktinformationen des Lizenznehmers in allen Ländern, in denen sie geschäftlich tätig sind, in Verbindung mit IBM Produkten und Services oder zur Förderung der Geschäftsbeziehung zwischen IBM und dem Lizenznehmer speichern und nutzen dürfen. + +f. Jede Vertragspartei wird der anderen Partei ausreichend Gelegenheit geben, ihren vertraglichen Verpflichtungen nachzukommen, bevor sie rechtliche Schritte wegen Nichterfüllung von Vertragsbedingungen unternimmt. Die Vertragsparteien werden versuchen, alle Streitfälle, Meinungsverschiedenheiten oder Ansprüche zwischen den Parteien in Bezug auf diese Vereinbarung einvernehmlich beizulegen. + +g. Soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgesehen ist, stimmen beide Vertragsparteien überein, 1) im Rahmen dieser Vereinbarung keine Klage später als zwei Jahre nach Auftreten des Klagegegenstands einzureichen, und 2) dass nach Ablauf dieser Frist alle Ansprüche und alle damit in Zusammenhang stehenden Rechte verjähren. + +h. Weder der Lizenznehmer noch IBM sind für die Nichterfüllung von vertraglichen Verpflichtungen aus Gründen haftbar, die von den Vertragsparteien nicht beeinflusst werden können. + +i. Aus dieser Vereinbarung ergibt sich kein Recht auf Klage oder Klagegegenstand für Dritte, und IBM ist nicht haftbar für Ansprüche Dritter gegen den Lizenznehmer, die nicht oben in Unterabschnitt 10.1 (Fälle, in denen IBM haftbar gemacht werden kann) für Personenschäden (einschließlich Tod) und Schäden an Immobilien und beweglichen Sachen aufgeführt sind, für die IBM nach den gesetzlichen Bestimmungen haftbar ist. + +j. Durch Anerkennung dieser Vereinbarung stimmen beide Vertragsparteien darin überein, sich nicht auf irgendwelche Darstellungen zu verlassen, die nicht auf dieser Vereinbarung beruhen, einschließlich 1) der Angaben zu Leistung oder Funktion des Programms, die von den ausdrücklichen Gewährleistungen in Abschnitt 8 (Gewährleistung und Ausschlüsse) oben abweichen; und 2) der Erfahrungen oder Empfehlungen Dritter; oder 3) der Ergebnisse oder Einsparungen, die der Lizenznehmer eventuell erzielen kann. + +k. IBM hat mit bestimmten Partnern ("IBM Business Partner" genannt) Vereinbarungen zur Vermarktung und Unterstützung bestimmter Programme geschlossen. IBM Business Partner sind eigenständig und von IBM unabhängig. IBM ist weder für die Geschäftstätigung der IBM Business Partner noch für deren Aussagen oder Verpflichtungen gegenüber dem Lizenznehmer verantwortlich. + +l. Die Lizenzbedingungen und Freistellungsregelungen in anderen (Rahmen-)Vereinbarungen zwischen dem Lizenznehmer und IBM (z. B. den Allgemeinen Geschäftsbedingungen von IBM) gelten nicht für Programmlizenzen, die unter dieser Vereinbarung erteilt werden. + +14. Geltungsbereich und geltendes Recht + +14.1 Geltendes Recht + +Beide Vertragsparteien sind damit einverstanden, dass die Gesetze des Landes zur Anwendung kommen, in dem der Lizenznehmer die Programmlizenz erworben hat, um die Rechte, Pflichten und Verpflichtungen des Lizenznehmers und von IBM, die sich aus dem Inhalt dieser Vereinbarung ergeben oder in irgendeiner Weise damit in Zusammenhang stehen, zu regeln, zu interpretieren und durchzuführen, ungeachtet unterschiedlicher Rechtsgrundlagen. + +Die Vertragskonvention der Vereinten Nationen für den internationalen Warenverkauf kommt nicht zur Anwendung. + +14.2 Rechtsprechung + +Alle Rechte, Pflichten und Verpflichtungen unterliegen der Rechtsprechung des Landes, in dem der Lizenznehmer die Programmlizenz erworben hat. + +Teil 2 - Länderspezifische Bedingungen + +Für Lizenzen, die in den unten aufgeführten Ländern erteilt werden, ersetzen oder ergänzen die nachfolgenden länderspezifischen Regelungen die betreffenden Bedingungen für die jeweiligen Länder in Teil 1. Alle Bedingungen in Teil 1, die von diesen Änderungen oder Ergänzungen nicht betroffen sind, bleiben unverändert und behalten ihre Gültigkeit. Teil 2 ist wie folgt aufgebaut: + +* Ergänzungen zu Teil 1, Abschnitt 14 (Geltendes Recht und Rechtsprechung), die für mehrere Länder gelten, und + +* Ergänzungen zu anderen Bedingungen dieser Vereinbarung, die für die EMEA-Länder (Europa, Naher/Mittlerer Osten und Afrika) gelten + +Ergänzungen zu Teil 1, Abschnitt 14 (Geltendes Recht und Rechtsprechung), die für mehrere Länder gelten + +14.2 Rechtsprechung + +Der folgende Absatz bezieht sich auf die Rechtsprechung und ersetzt Unterabschnitt 14.2 (Rechtsprechung) für diejenigen Länder, die unten angegeben sind: + +Alle Rechte, Pflichten und Verpflichtungen unterliegen der Rechtsprechung des Landes, in dem der Lizenznehmer die Programmlizenz erworben hat, mit Ausnahme der unten aufgeführten Länder, in denen sämtliche Rechtsstreitigkeiten, die sich aus dieser Vereinbarung ergeben oder damit in Zusammenhang stehen, einschließlich etwaiger Schnellverfahren, ausschließlich in die Zuständigkeit der folgenden Gerichte fallen: + +EUROPA, NAHER/MITTLERER OSTEN UND AFRIKA + +in Österreich: das zuständige Gericht in Wien, Österreich (Innenstadt); + +ERGÄNZUNGEN FÜR DIE EMEA-LÄNDER + +MITGLIEDSSTAATEN DER EUROPÄISCHEN UNION + +8. Gewährleistung und Ausschlüsse + +Der folgende Text wird Abschnitt 8 (Gewährleistung und Ausschlüsse) hinzugefügt: + +In der Europäischen Union ("EU") sind für Verbraucher unter den geltenden nationalen rechtlichen Bestimmungen Rechte für den Verkauf von Verbrauchsgütern definiert. Diese Rechte sind von den Bestimmungen in Abschnitt 8 (Gewährleistung und Ausschlüsse) nicht betroffen. Der räumliche Geltungsbereich der begrenzten Gewährleistung ist weltweit. + +EU-MITGLIEDSSTAATEN UND DIE UNTEN AUFGEFÜHRTEN LÄNDER + +Liechtenstein, die Schweiz und alle anderen europäischen Länder, die nationale Datenschutzbestimmungen nach dem EU-Modell per Gesetz eingeführt haben. + +13. Allgemeines + +Der folgende Text ersetzt Abschnitt 13.e: + +(1) Begriffsbestimmungen - Für die Zwecke von Abschnitt 13.e kommen die folgenden zusätzlichen Begriffsbestimmungen zur Anwendung: + +(a) Kontaktinformationen - geschäftsbezogene Kontaktinformationen, die IBM vom Lizenznehmer zugänglich gemacht werden, dazu gehören u. a. Namen, Berufsbezeichnungen, Geschäftsadressen, Telefonnummern und E-Mail-Adressen von Mitarbeitern und Vertragspartnern des Lizenznehmers. In Österreich, Italien und der Schweiz umfassen die Kontaktinformationen ferner Angaben über den Lizenznehmer und seine Vertragspartner als juristische Personen (z. B. Umsatzdaten des Lizenznehmers und andere transaktionsorientierte Informationen). + +(b) Kontaktperson - Mitarbeiter und Vertragspartner des Lizenznehmers, auf die sich die Kontaktinformationen beziehen. + +(c) Datenschutzbehörde - die Behörde, die vom jeweiligen Land gemäß der Vorschriften zum Datenschutz und zur elektronischen Kommunikation eingerichtet wurde, oder bei Nicht-EU-Ländern die Behörde, die für die Überwachung des Datenschutzes bei personenbezogenen Daten im jeweiligen Land verantwortlich ist, oder eine zuständige Nachfolgebehörde (in Bezug auf eine der genannten Behörden). + +(d) Vorschriften zum Datenschutz und zur elektronischen Kommunikation - (i) die geltenden nationalen Gesetze und Verordnungen, die die Anforderungen der EU-Richtlinie 95/46/EC (zum Schutz natürlicher Personen bei der Verarbeitung personenbezogener Daten und zum freien Datenverkehr) und der EU-Richtlinie 2002/58/EC (über die Verarbeitung personenbezogener Daten und den Schutz der Privatsphäre in der elektronischen Kommunikation) umsetzen; oder (ii) in Nicht-EU-Ländern, die Gesetze und/oder Verordnungen, die in den betreffenden Ländern zum Schutz personenbezogener Daten und zur Regulierung der elektronischen Kommunikation unter Einbeziehung personenbezogener Daten erlassen wurden, einschließlich aller Ersatzgesetze oder Gesetzesänderungen (in Bezug auf die zuvor erwähnten Gesetze und Verordnungen). + +(e) IBM Unternehmen - International Business Machines Corporation mit Sitz in Armonk, New York (USA), deren verbundene Unternehmen und IBM Business Partner sowie deren Subunternehmer. + +(2) Der Lizenznehmer willigt ein, dass IBM + +(a) Kontaktinformationen zum Zwecke der Durchführung und Förderung der Geschäftsbeziehung, einschließlich der Bereitstellung von Unterstützungsleistungen, und zur Vermarktung der Produkte und Services der IBM Unternehmen (der "Verwendungszweck") zwischen Lizenznehmer und den IBM Unternehmen verarbeitet und nutzt; und + +(b) Kontaktinformationen im Rahmen des Verwendungszwecks den IBM Unternehmen zugänglich macht und die Kontaktinformationen durch diese verarbeitet und genutzt werden können. + +(3) IBM wird in diesem Zusammenhang sämtliche Kontaktinformationen im Rahmen der anwendbaren Vorschriften zum Datenschutz und zur elektronischen Kommunikation und nur im Rahmen des Verwendungszwecks verarbeiten und nutzen. + +(4) Sofern aufgrund der Vorschriften zum Datenschutz und zur elektronischen Kommunikation erforderlich, sichert der Lizenznehmer zu, die vorherige Zustimmung der Kontaktperson eingeholt zu haben bzw. einzuholen und diese entsprechend informiert zu haben bzw. zu informieren. Damit stellt der Lizenznehmer sicher, dass die IBM Unternehmen die Kontaktinformationen im Rahmen des Verwendungszwecks verarbeiten und nutzen und mit den Kontaktpersonen, z. B. auch per E-Mail, Kontakt aufnehmen können. + +(5) Der Lizenznehmer stimmt der Übermittlung von Kontaktinformationen in Länder außerhalb des Europäischen Wirtschaftsraums (EWR) unter der Maßgabe zu, dass eine solche Übermittlung nur im Rahmen einer von der zuständigen Datenschutzbehörde freigegebenen vertraglichen Vereinbarung erfolgt. + +ÖSTERREICH + +8.2 Ausschlüsse + +Der folgende Text wird im ersten Absatz gelöscht: + +zufriedenstellende Qualität, Handelsüblichkeit + +10. Haftungsbegrenzung + +Der folgende Text wird hinzugefügt: + +Die folgenden Beschränkungen und Ausschlüsse in Bezug auf die Haftung von IBM entfallen bei Schäden, die durch grobe Fahrlässigkeit oder Vorsatz verursacht werden. + +10.1 Fälle, in denen IBM haftbar gemacht werden kann + +Der folgende Text ersetzt den ersten Satz im ersten Absatz: + +Soweit IBM gegenüber dem Lizenznehmer aufgrund der Verpflichtungen aus dieser Vereinbarung schadenersatzpflichtig ist, hat er Anspruch auf Entschädigung durch IBM. + +Im zweiten Satz des ersten Absatzes wird der in Klammern stehende Ausdruck vollständig gelöscht: + +"(einschließlich Vertragsverletzung, Fahrlässigkeit, unrichtiger Angaben oder anderer Ansprüche aus dem Vertrag oder aufgrund unerlaubter Handlungen)" + +10.2 Fälle, in denen IBM nicht haftbar ist + +Der folgende Text ersetzt Abschnitt 10.2b: + +b. mittelbare Schäden oder Folgenschäden; oder + +DEUTSCHLAND + +8.1 Begrenzte Gewährleistung + +Der folgende Text wird am Anfang von Abschnitt 8.1 eingefügt: + +Der Gewährleistungszeitraum beträgt 12 Monate ab dem Datum der Lieferung des Programms an den ursprünglichen Lizenznehmer. + +8.2 Ausschlüsse + +Abschnitt 8.2 wird vollständig gelöscht und durch den folgenden Text ersetzt: + +Vorbehaltlich anderslautender gesetzlicher Bestimmungen sind in Abschnitt 8.1 sämtliche Gewährleistungsverpflichtungen von IBM gegenüber dem Lizenznehmer definiert. + +10. Haftungsbegrenzung + +Die Bedingungen in Abschnitt 10 (Haftungsbegrenzung) werden durch den folgenden Text vollständig ersetzt: + +a. IBM haftet für 1) Schäden, die durch Verletzung einer mit dem Abschluss des Vertrags übernommenen Garantie entstanden sind; 2) für Schäden bei Verletzungen von Leben, Körper oder Gesundheit; sowie 3) für Schäden, die IBM vorsätzlich oder grob fahrlässig verursacht hat, unbeschränkt. + +b. Bei leicht fahrlässiger Schadensverursachung haftet IBM, gleich aus welchem Rechtsgrund (einschließlich Ansprüchen aus Vertragsverletzung sowie unerlaubter Handlung), pro Schadensfall bis zu einem Höchstbetrag von EUR 500.000 (fünfhunderttausend Euro) oder bis zur Höhe des Preises (maximal zwölf Monatsgebühren, wenn die Gebühren für das Programm nach einer festen Laufzeit berechnet werden) für das schadensverursachende Programm. Dies umfasst auch den Ersatz vergeblicher Aufwendungen. Mehrere Pflichtverletzungen, die zusammen im Wesentlichen denselben Schaden verursachen oder zu ihm beitragen, werden als eine Pflichtverletzung behandelt. + +c. IBM haftet bei leicht fahrlässigem Verhalten nicht für mittelbare Schäden oder Folgeschäden, selbst wenn IBM über die Möglichkeit solcher Schäden informiert wurde. Dies umfasst auch den Ersatz vergeblicher Aufwendungen, sofern es sich hierbei um mittelbare oder Folgeschäden handelt. + +d. Im Falle des Verzugs erstattet IBM dem Lizenznehmer den durch den Verzug nachweislich entstandenen Schaden im Rahmen der Abschnitte 10.a und 10.b. + +13. Allgemeines + +Der folgende Text ersetzt die Bedingungen in Abschnitt 13.g: + +Alle Ansprüche aus dieser Vereinbarung unterliegen einer dreijährigen Verjährungsfrist, soweit in Abschnitt 8.1 (Begrenzte Gewährleistung) dieser Vereinbarung nicht abweichend geregelt. + +Der folgende Text ersetzt die Bedingungen in Abschnitt 13.i: + +Aus dieser Vereinbarung ergibt sich kein Recht auf Klage oder Klagegegenstand für Dritte, und IBM ist nicht haftbar für Ansprüche Dritter gegen den Lizenznehmer, die nicht in Abschnitt 10 (Haftungsbegrenzung) für i) Personenschäden (einschließlich Tod) oder ii) Schäden an Immobilien und beweglichen Sachen aufgeführt sind, für die IBM (in beiden Fällen) nach den gesetzlichen Bestimmungen haftbar ist. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_el b/charts/mq-advancedserver/LICENSE_locale/LICENSE_el new file mode 100644 index 0000000..53c33cc --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_el @@ -0,0 +1,1171 @@ +ÅÉÄÏÐÏÉÇÓÇ + +Ôï ðáñüí Ýããñáöï ðåñéëáìâÜíåé ôá ðáñáêÜôù Ýããñáöá "Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò" ãéá ðåñéóóüôåñá áðü Ýíá ÐñïãñÜììáôá. Óå êÜèå Ýããñáöï "Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò" ðñïóäéïñßæåôáé ôï Ðñüãñáììá Þ ôá ÐñïãñÜììáôá óôá ïðïßá áíáöÝñåôáé ôï óõãêåêñéìÝíï Ýããñáöï. Éó÷ýïõí ìüíï ôá Ýããñáöá "Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò" ãéá ôï (ôá) Ðñüãñáììá(ôá) ãéá ôï (ôá) ïðïßï(-á) ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò Ý÷åé áðïêôÞóåé äéêáéþìáôá ÷ñÞóçò. + + +============================================== + + +ÓÇÌÁÍÔÉÊÏ: ÄÉÁÂÁÓÔÅ ÐÑÏÓÅÊÔÉÊÁ ÔÉÓ ÁÊÏËÏÕÈÅÓ ÐËÇÑÏÖÏÑÉÅÓ + +ÐáñáêÜôù ðáñïõóéÜæïíôáé äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + +1. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí +2. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò (Licensee) áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò ðáñáãùãéêÞò ÷ñÞóçò (äçëáäÞ ãéá óêïðïýò ðÝñáí áðü ôçí áîéïëüãçóç, Ýëåã÷ï, äïêéìÞ ôýðïõ "try or buy" Þ åðßäåéîç): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôçò Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM, ÷ùñßò ôñïðïðïéÞóåéò. + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò áîéïëüãçóçò, åëÝã÷ïõ, äïêéìÞò ôýðïõ "try or buy" Þ åðßäåéîçò (óõëëïãéêÜ "Áîéïëüãçóç"): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôüóï ôçò (i) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí ("¶äåéá ×ñÞóçò Áîéïëüãçóçò"), üóï êáé ôçò (ii) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM ("Óýìâáóç IPLA"), ÷ùñßò ôñïðïðïéÞóåéò. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò èá éó÷ýåé ãéá ôç äéÜñêåéá ôçò Áîéïëüãçóçò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ç Óýìâáóç IPLA èá ôåèåß áõôüìáôá óå éó÷ý åöüóïí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéëÝîåé íá äéáôçñÞóåé ôï Ðñüãñáììá ìåôÜ ôçí ÁîéïëüãçóÞ ôïõ (Þ íá áðïêôÞóåé ðñüóèåôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ãéá ÷ñÞóç ìåôÜ ôçí Áîéïëüãçóç) óõíÜðôïíôáò ìéá óýìâáóç ðñïìÞèåéáò (ð.÷. ôç ÄéåèíÞ Óýìâáóç Passport Advantage ôçò IBM Þ ôç ÄéåèíÞ Óýìâáóç Passport Advantage Express ôçò IBM) ìå ôçí IBM. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò êáé ç Óýìâáóç IPLA äåí èá éó÷ýïõí ôáõôü÷ñïíá êáé äåí ôñïðïðïéåß ç ìßá ôçí Üëëç. ÊÜèå ìßá áðü áõôÝò åßíáé áíåîÜñôçôç áðü ôçí Üëëç. + +Áêïëïõèåß ôï ðëÞñåò êåßìåíï êÜèå ìßáò áðü ôéò äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí (Z125-5543-05). + +¼íïìá ÐñïãñÜììáôïò (Áñéèìüò ÐñïãñÜììáôïò): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Ïé áêüëïõèïé âáóéêïß üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ðåñßïäïò Áîéïëüãçóçò + +Ç ðåñßïäïò áîéïëüãçóçò áñ÷ßæåé êáôÜ ôçí çìåñïìçíßá ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò êáé ôåñìáôßæåôáé ìåôÜ ôçí ðáñÝëåõóç 90 çìåñþí. + +ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá + +Ôï Ðñüãñáììá äéáôßèåôáé ìå Üäåéá ÷ñÞóçò ùò ðáêÝôï ðïëëáðëþí ðñïúüíôùí êáé ðåñéëáìâÜíåé ôá ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åãêáèéóôÜ êáé íá ÷ñçóéìïðïéåß ôá åí ëüãù ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá ìüíï ãéá ôçí õðïóôÞñéîç ôçò åê ìÝñïõò ôïõ ÷ñÞóçò ôïõ Êýñéïõ ÐñïãñÜììáôïò âÜóåé ôùí üñùí ôçò ðáñïýóáò Óýìâáóçò êáé åíôüò ôùí ïñßùí ôùí Áðïäåßîåùí Äéêáéþìáôïò ãéá ôï Ðñüãñáììá (åêôüò åÜí ðáñÝ÷ïíôáé åõñýôåñá äéêáéþìáôá óå Üëëï óçìåßï ôïõ ðáñüíôïò åããñÜöïõ ìå ôßôëï Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò). Ç öñÜóç "ãéá ôçí õðïóôÞñéîç ôçò åê ìÝñïõò ôïõ ÷ñÞóçò" ðåñéëáìâÜíåé ìüíï åêåßíåò ôéò ÷ñÞóåéò ïé ïðïßåò åßíáé áðáñáßôçôåò Þ êáôÜ Üëëïí ôñüðï Üìåóá óõíäåäåìÝíåò ìå ìéá åîïõóéïäïôçìÝíç ÷ñÞóç ôïõ Êýñéïõ ÐñïãñÜììáôïò Þ êÜðïéïõ Üëëïõ Õðïóôçñéêôéêïý ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Äåí åðéôñÝðåôáé ç ÷ñÞóç ôùí Õðïóôçñéêôéêþí ÐñïãñáììÜôùí ãéá ïðïéïíäÞðïôå Üëëï óêïðü. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé åîïõóéïäüôçóç ãéá ôç ìåôáâßâáóç Þ ìåôáðþëçóç ôùí Õðïóôçñéêôéêþí ÐñïãñáììÜôùí ÷ùñéóôÜ áðü ôï Êýñéï Ðñüãñáììá. ¸íá Õðïóôçñéêôéêü Ðñüãñáììá ìðïñåß íá óõíïäåýåôáé áðü üñïõò Üäåéáò ÷ñÞóçò êáé ïé åí ëüãù üñïé, åÜí õðÜñ÷ïõí, äéÝðïõí ôç ÷ñÞóç ôïõ åí ëüãù Õðïóôçñéêôéêïý ÐñïãñÜììáôïò áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Óå ðåñßðôùóç áíôßèåóçò ìåôáîý ôùí üñùí, ïé üñïé ôïõ ðáñüíôïò åããñÜöïõ Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ãéá ôï Õðïóôçñéêôéêü Ðñüãñáììá. ¼ôáí ôï äéêáßùìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ëÞîåé Þ êáôáããåëèåß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá äéáêüøåé ôç ÷ñÞóç êáé íá êáôáóôñÝøåé Þ íá åðéóôñÝøåé Üìåóá üëá ôá áíôßãñáöá ôùí Õðïóôçñéêôéêþí ÐñïãñáììÜôùí óôï ìÝñïò áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáöüñôùóå (download) ôá ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá, èá ðñÝðåé íá åðéêïéíùíÞóåé ìå ôç íïìéêÞ ïíôüôçôá áðü ôçí ïðïßá áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èÝëåé íá ôïõ ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôùí Õðïóôçñéêôéêþí ÐñïãñáììÜôùí ãéá ÷ñÞóç ðÝñáí ôùí ïñßùí ðïõ êáèïñßæïíôáé áíùôÝñù, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå Ýíáí Åêðñüóùðï ÐùëÞóåùí ôçò IBM Þ ìå ôç íïìéêÞ ïíôüôçôá áðü ôçí ïðïßá áðÝêôçóå ôï Ðñüãñáììá, þóôå íá ôïõ ÷ïñçãçèåß ç áðáéôïýìåíç Üäåéá ÷ñÞóçò. + +Ôá áêüëïõèá ðñïãñÜììáôá åßíáé ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá ãéá ôá ïðïßá ÷ïñçãåßôáé Üäåéá ÷ñÞóçò ìå ôï Ðñüãñáììá: +IBM WebSphere Application Server Liberty V17.0 + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (Z125-3301-14). + +¼íïìá ÐñïãñÜììáôïò (Áñéèìüò ÐñïãñÜììáôïò): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Ïé áêüëïõèïé âáóéêïß üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Äéêáßùìá ðåñéïñéóìÝíçò ÷ñÞóçò + +¼ðùò ðåñéãñÜöåôáé óôç ÄéåèíÞ Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (International Program License Agreement - "Óýìâáóç IPLA") êáé óôéò ðáñïýóåò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò, ç IBM åê÷ùñåß óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò Ýíá ðåñéïñéóìÝíï äéêáßùìá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ôï åí ëüãù äéêáßùìá ðåñéïñßæåôáé óôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò, ôï ïðïßï ïñßæåôáé óå ÌïíÜäåò Áîßáò Åðåîåñãáóôþí (Processor Value Units - "ÌïíÜäåò PVU"), ÌïíÜäåò Áîßáò Ðüñùí (Resource Value Units - "ÌïíÜäåò RVU"), ÌïíÜäåò Áîßáò (Value Units - "ÌïíÜäåò VU") Þ ùò ïðïéïäÞðïôå Üëëï êáèïñéóìÝíï åðßðåäï ÷ñÞóçò, ãéá ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáôÝâáëå ôçí áðáéôïýìåíç ðëçñùìÞ, üðùò ôåêìçñéþíåôáé óôçí Áðüäåéîç Äéêáéþìáôïò. Ç ÷ñÞóç áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ìðïñåß åðßóçò íá ðåñéïñßæåôáé óå ìéá óõãêåêñéìÝíç ìç÷áíÞ, Þ óå ÷ñÞóç ôïõ ÐñïãñÜììáôïò ìüíï ùò Õðïóôçñéêôéêïý ÐñïãñÜììáôïò, Þ íá õðüêåéôáé óå Üëëïõò ðåñéïñéóìïýò. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé êáôáâÜëåé ðëçñùìÞ ãéá ôï óýíïëï ôçò ïéêïíïìéêÞò áîßáò ôïõ ÐñïãñÜììáôïò, äåí åðéôñÝðåôáé Üëëç ÷ñÞóç ôïõ ÐñïãñÜììáôïò ÷ùñßò ôçí êáôáâïëÞ ðñüóèåôùí ÷ñåþóåùí. ÅðéðëÝïí, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ãéá ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí ðëçñïöïñéêÞò óå ïðïéïäÞðïôå ôñßôï ìÝñïò, ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí "öéëïîåíßáò" (hosting) Þ ÷ñïíïìåñéóôéêÞò ìßóèùóçò (timesharing), Þ ôçí ðåñáéôÝñù ÷ïñÞãçóç áäåéþí ÷ñÞóçò óå ôñßôïõò, ôçí åíïéêßáóç Þ ôçí åêìßóèùóç ôïõ ÐñïãñÜììáôïò, åêôüò åÜí ðñïâëÝðåôáé ñçôþò óôéò éó÷ýïõóåò óõìâÜóåéò âÜóåé ôùí ïðïßùí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÜ ôéò åîïõóéïäïôÞóåéò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá. Ìðïñåß íá äéáôßèåíôáé ðñüóèåôá äéêáéþìáôá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò õðü ôçí ðñïûðüèåóç ôçò êáôáâïëÞò ðñüóèåôùí ÷ñåþóåùí Þ âÜóåé äéáöïñåôéêþí Þ óõìðëçñùìáôéêþí üñùí. Ç IBM äéáôçñåß ôï äéêáßùìá íá êáèïñßóåé áí ôá åí ëüãù ðñüóèåôá äéêáéþìáôá èá êáèßóôáíôáé äéáèÝóéìá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +ÐñïäéáãñáöÝò + +Ïé ðñïäéáãñáöÝò ôïõ ÐñïãñÜììáôïò äéáôßèåíôáé óôéò åíüôçôåò Description êáé Technical Information ôùí åðéóôïëþí áíáêïßíùóçò ôïõ ÐñïãñÜììáôïò. + +ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá + +Ôï Ðñüãñáììá äéáôßèåôáé ìå Üäåéá ÷ñÞóçò ùò ðáêÝôï ðïëëáðëþí ðñïúüíôùí êáé ðåñéëáìâÜíåé ôá ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åãêáèéóôÜ êáé íá ÷ñçóéìïðïéåß ôá åí ëüãù ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá ìüíï ãéá ôçí õðïóôÞñéîç ôçò åê ìÝñïõò ôïõ ÷ñÞóçò ôïõ Êýñéïõ ÐñïãñÜììáôïò âÜóåé ôùí üñùí ôçò ðáñïýóáò Óýìâáóçò êáé åíôüò ôùí ïñßùí ôùí Áðïäåßîåùí Äéêáéþìáôïò ãéá ôï Ðñüãñáììá (åêôüò åÜí ðáñÝ÷ïíôáé åõñýôåñá äéêáéþìáôá óå Üëëï óçìåßï ôïõ ðáñüíôïò åããñÜöïõ ìå ôßôëï Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò). Ç öñÜóç "ãéá ôçí õðïóôÞñéîç ôçò åê ìÝñïõò ôïõ ÷ñÞóçò" ðåñéëáìâÜíåé ìüíï åêåßíåò ôéò ÷ñÞóåéò ïé ïðïßåò åßíáé áðáñáßôçôåò Þ êáôÜ Üëëïí ôñüðï Üìåóá óõíäåäåìÝíåò ìå ìéá åîïõóéïäïôçìÝíç ÷ñÞóç ôïõ Êýñéïõ ÐñïãñÜììáôïò Þ êÜðïéïõ Üëëïõ Õðïóôçñéêôéêïý ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Äåí åðéôñÝðåôáé ç ÷ñÞóç ôùí Õðïóôçñéêôéêþí ÐñïãñáììÜôùí ãéá ïðïéïíäÞðïôå Üëëï óêïðü. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé åîïõóéïäüôçóç ãéá ôç ìåôáâßâáóç Þ ìåôáðþëçóç ôùí Õðïóôçñéêôéêþí ÐñïãñáììÜôùí ÷ùñéóôÜ áðü ôï Êýñéï Ðñüãñáììá. ¸íá Õðïóôçñéêôéêü Ðñüãñáììá ìðïñåß íá óõíïäåýåôáé áðü üñïõò Üäåéáò ÷ñÞóçò êáé ïé åí ëüãù üñïé, åÜí õðÜñ÷ïõí, äéÝðïõí ôç ÷ñÞóç ôïõ åí ëüãù Õðïóôçñéêôéêïý ÐñïãñÜììáôïò áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Óå ðåñßðôùóç áíôßèåóçò ìåôáîý ôùí üñùí, ïé üñïé ôïõ ðáñüíôïò åããñÜöïõ Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ãéá ôï Õðïóôçñéêôéêü Ðñüãñáììá. ¼ôáí ôï äéêáßùìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ëÞîåé Þ êáôáããåëèåß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá äéáêüøåé ôç ÷ñÞóç êáé íá êáôáóôñÝøåé Þ íá åðéóôñÝøåé Üìåóá üëá ôá áíôßãñáöá ôùí Õðïóôçñéêôéêþí ÐñïãñáììÜôùí óôï ìÝñïò áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáöüñôùóå (download) ôá ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá, èá ðñÝðåé íá åðéêïéíùíÞóåé ìå ôç íïìéêÞ ïíôüôçôá áðü ôçí ïðïßá áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èÝëåé íá ôïõ ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôùí Õðïóôçñéêôéêþí ÐñïãñáììÜôùí ãéá ÷ñÞóç ðÝñáí ôùí ïñßùí ðïõ êáèïñßæïíôáé áíùôÝñù, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå Ýíáí Åêðñüóùðï ÐùëÞóåùí ôçò IBM Þ ìå ôç íïìéêÞ ïíôüôçôá áðü ôçí ïðïßá áðÝêôçóå ôï Ðñüãñáììá, þóôå íá ôïõ ÷ïñçãçèåß ç áðáéôïýìåíç Üäåéá ÷ñÞóçò. + +Ôá áêüëïõèá ðñïãñÜììáôá åßíáé ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá ãéá ôá ïðïßá ÷ïñçãåßôáé Üäåéá ÷ñÞóçò ìå ôï Ðñüãñáììá: +IBM WebSphere Application Server Liberty V17.0 + +ËåéôïõñãéêÜ ÔìÞìáôá ðïõ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôùí Áðáéôïýìåíùí ÄéêáéùìÜôùí ×ñÞóçò + +ÊáôÜ ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôçí åãêáôÜóôáóç Þ ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, äåí ëáìâÜíåôáé õðüøç ç åãêáôÜóôáóç Þ ÷ñÞóç ôùí áêüëïõèùí ëåéôïõñãéêþí ôìçìÜôùí ôïõ ÐñïãñÜììáôïò. Ìå Üëëá ëüãéá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá åãêáèéóôÜ êáé íá ÷ñçóéìïðïéåß ôá áêüëïõèá ëåéôïõñãéêÜ ôìÞìáôá ôïõ ÐñïãñÜììáôïò, âÜóåé ôùí üñùí ôçò Üäåéáò ÷ñÞóçò, áëëÜ ôá ëåéôïõñãéêÜ ôìÞìáôá áõôÜ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôï Ðñüãñáììá. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +ÁíáäéáíåìçôÝá Óôïé÷åßá + +ÅÜí ôï Ðñüãñáììá ðåñéëáìâÜíåé ëåéôïõñãéêÜ ôìÞìáôá ðïõ åßíáé ÁíáäéáíåìçôÝá, ôüôå áõôÜ èá ðñïóäéïñßæïíôáé óôï áñ÷åßï REDIST ðïõ óõíïäåýåé ôï Ðñüãñáììá. ÅðéðëÝïí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ÷ïñçãïýíôáé óôç Óýìâáóç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá äéáíÝìåé ôá ÁíáäéáíåìçôÝá Óôïé÷åßá õðü ôïõò áêüëïõèïõò üñïõò: +1) Ç áíáäéáíïìÞ ðñÝðåé íá ãßíåôáé ìüíï óå ìïñöÞ êþäéêá áíôéêåéìÝíïõ (object code) êáé íá óõììïñöþíåôáé ìå üëåò ôéò êáôåõèõíôÞñéåò ãñáììÝò, ïäçãßåò êáé ðñïäéáãñáöÝò ðïõ ðáñÝ÷ïíôáé óôï áñ÷åßï REDIST Þ óôçí ôåêìçñßùóç ðïõ óõíïäåýåé ôï Ðñüãñáììá, +2) ÅÜí óôçí ôåêìçñßùóç ðïõ óõíïäåýåé ôï Ðñüãñáììá åðéôñÝðåôáé ñçôþò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò íá ôñïðïðïéåß ôá ÁíáäéáíåìçôÝá Óôïé÷åßá, ç åí ëüãù ôñïðïðïßçóç ðñÝðåé íá óõììïñöþíåôáé ìå üëåò ôéò êáôåõèõíôÞñéåò ãñáììÝò, ïäçãßåò êáé ðñïäéáãñáöÝò ðïõ ðáñÝ÷ïíôáé óôçí åí ëüãù ôåêìçñßùóç êáé ôÝôïéåò ôñïðïðïéÞóåéò, åÜí ðñáãìáôïðïéïýíôáé, ðñÝðåé íá áíôéìåôùðßæïíôáé ùò ÁíáäéáíåìçôÝá Óôïé÷åßá, +3) Ôá ÁíáäéáíåìçôÝá Óôïé÷åßá åðéôñÝðåôáé íá äéáíÝìïíôáé ìüíï ùò ôìÞìá ôçò åöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ðïõ áíáðôý÷èçêå ìå ÷ñÞóç ôïõ ÐñïãñÜììáôïò ("ÅöáñìïãÞ ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò") êáé ìüíï ãéá ôçí õðïóôÞñéîç ôùí ðåëáôþí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óå óõíÜñôçóç ìå ôçí åê ìÝñïõò ôïõò ÷ñÞóç ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Ç EöáñìïãÞ ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ðñÝðåé íá áíôéðñïóùðåýåé ìéá óçìáíôéêÞ ðñïóôéèÝìåíç áîßá óôï âáèìü ðïõ ôá ÁíáäéáíåìçôÝá Óôïé÷åßá äåí áðïôåëïýí ïõóéáóôéêü êßíçôñï ãéá ôçí áðüêôçóç ôïõ ðñïúüíôïò ëïãéóìéêïý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò áðü ôåëéêïýò ÷ñÞóôåò, +4) ÅÜí óôá ÁíáäéáíåìçôÝá Óôïé÷åßá ðåñéëáìâÜíåôáé Ýíá ðåñéâÜëëïí JRE (Java Runtime Environment), ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá ðåñéëáìâÜíåé åðßóçò Üëëá ÁíáäéáíåìçôÝá Óôïé÷åßá ìç-Java óôçí ÅöáñìïãÞ ôïõ, åêôüò åÜí ç ÅöáñìïãÞ Ý÷åé ó÷åäéáóôåß ìüíï ãéá åêôÝëåóç óå õðïëïãéóôéêÝò óõóêåõÝò ãåíéêÞò ÷ñÞóçò (ãéá ðáñÜäåéãìá: óå öïñçôïýò õðïëïãéóôÝò, åðéôñáðÝæéïõò õðïëïãéóôÝò êáé åîõðçñåôçôÞò) êáé ü÷é óå óõóêåõÝò ÷åéñüò êáé Üëëåò åöáñìïóìÝíåò (pervasive) óõóêåõÝò (äçëáäÞ, óõóêåõÝò ðïõ ðåñéëáìâÜíïõí ìéêñïåðåîåñãáóôÞ áëëÜ äåí Ý÷ïõí ùò êýñéï óêïðü ôçí åêôÝëåóç ëåéôïõñãéþí õðïëïãéóôÞ), +5) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åðéôñÝðåôáé íá áöáéñÝóåé áñ÷åßá ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ÁíáäéáíåìçôÝá Óôïé÷åßá, +6) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá êáëýðôåé ôçí IBM, ôïõò ðñïìçèåõôÝò ôçò êáé ôïõò äéáíïìåßò ôçò Ýíáíôé ïðïéáóäÞðïôå áîßùóçò ðïõ áðïññÝåé áðü ôç ÷ñÞóç Þ ôç äéáíïìÞ ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, +7) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåß ôï ßäéï üíïìá äéáäñïìÞò (path name) ìå ôá ðñùôüôõðá ÁíáäéáíåìçôÝá áñ÷åßá/åíüôçôåò, +8) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåß åðùíõìßåò Þ åìðïñéêÜ óÞìáôá ôçò IBM, ôùí ðñïìçèåõôþí ôçò Þ ôùí äéáíïìÝùí ôçò óå óõíÜñôçóç ìå ôçí ðñïþèçóç ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ÷ùñßò ôçí åê ôùí ðñïôÝñùí Ýããñáöç óõãêáôÜèåóç ôçò IBM Þ ôïõ åí ëüãù ðñïìçèåõôÞ Þ äéáíïìÝá, +9) Ç IBM, ïé ðñïìçèåõôÝò ôçò êáé ïé äéáíïìåßò ôçò ðáñÝ÷ïõí ôá ÁíáäéáíåìçôÝá Óôïé÷åßá êáé ôç ó÷åôéêÞ ôåêìçñßùóç ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ, +10) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé õðåýèõíïò ãéá ôçí ðáñï÷Þ ïðïéáóäÞðïôå ôå÷íéêÞò õðïóôÞñéîçò ãéá ôçí ÅöáñìïãÞ ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, êáèþò êáé ãéá ïðïéåóäÞðïôå ôñïðïðïéÞóåéò óôá ÁíáäéáíåìçôÝá Óôïé÷åßá, êáé +11) Óôç óýìâáóç Üäåéáò ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ìå ôïí ôåëéêü ÷ñÞóôç ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, ï ôåëéêüò ÷ñÞóôçò ðñÝðåé íá åéäïðïéåßôáé üôé ôá ÁíáäéáíåìçôÝá Óôïé÷åßá Þ ïé ôñïðïðïéÞóåéò ôïõò äåí åðéôñÝðåôáé i) íá ÷ñçóéìïðïéïýíôáé ãéá ïðïéïíäÞðïôå Üëëï óêïðü ðáñÜ ìüíï ãéá íá êáèéóôïýí äõíáôÞ ôç ÷ñÞóç ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, ii) íá áíôéãñÜöïíôáé (ðáñÜ ìüíï ãéá ëüãïõò åöåäñéêÞò áðïèÞêåõóçò), iii) íá äéáíÝìïíôáé Þ íá ìåôáâéâÜæïíôáé ðåñáéôÝñù ÷ùñßò ôçí ÅöáñìïãÞ ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, Þ iv) íá õößóôáíôáé áíôßóôñïöç óõìâïëïìåôÜöñáóç (reverse assembly), áíôßóôñïöç ìåôáãëþôôéóç (reverse compilation) Þ Üëëïõ åßäïõò ìåôÜöñáóç, ðáñÜ ìüíï óôï âáèìü ðïõ åðéôñÝðåôáé ñçôþò áðü ôï åöáñìïóôÝï äßêáéï ÷ùñßò íá õðÜñ÷åé ç äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò áðü áõôü ôï äéêáßùìá. ÅðéðëÝïí, ç óýìâáóç Üäåéáò ÷ñÞóçò ðñÝðåé íá ðáñÝ÷åé ôïõëÜ÷éóôïí éóïäýíáìç ðñïóôáóßá ôùí äéêáéùìÜôùí ôçò ÉÂÌ ìå áõôÞ ðïõ ðáñÝ÷åôáé áðü ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + +Ãéá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ ÕëéêÜ ÄåéãìÜôùí ðïõ ðåñéëáìâÜíïíôáé óôç ëßóôá ôïõ áñ÷åßïõ REDIST åíüò ÐñïãñÜììáôïò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá ðñïâáßíåé óôçí áíáäéáíïìÞ ôñïðïðïéçìÝíùí åêäï÷þí ôùí åí ëüãù Ëåéôïõñãéêþí ÔìçìÜôùí Ðçãáßïõ Êþäéêá Þ ÕëéêÜ ÄåéãìÜôùí óýìöùíá ìå ôïõò üñïõò ôçò ðáñïýóáò Üäåéáò ÷ñÞóçò êáé óýìöùíá ìå ïðïéåóäÞðïôå ïäçãßåò óôï áñ÷åßï REDIST. + +Ïé áêüëïõèåò ìïíÜäåò ìÝôñçóçò ìðïñåß íá äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (ÌïíÜäá PVU) + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (Processor Value Unit - "ÌïíÜäá PVU") åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ï áñéèìüò ôùí áðáéôïýìåíùí äéêáéùìÜôùí åðß ìïíÜäùí PVU âáóßæåôáé óôç ÷ñçóéìïðïéïýìåíç ôå÷íïëïãßá åðåîåñãáóôþí (ç ïðïßá ïñßæåôáé óôïí Ðßíáêá PVU áíÜ ÐñïìçèåõôÞ ÅðåîåñãáóôÞ, Êáôçãïñßá Ðñïúüíôïò (Brand), Ôýðï êáé Êùäéêü ÌïíôÝëïõ óôç äéåýèõíóç http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) êáé óôïí áñéèìü ôùí åðåîåñãáóôþí ðïõ êáèßóôáíôáé äéáèÝóéìïé óôï Ðñüãñáììá. Ãéá ôïõò óêïðïýò ôçò ÷ïñÞãçóçò áäåéþí ÷ñÞóçò âÜóåé ìïíÜäùí PVU, ç ÉÂÌ åîáêïëïõèåß íá ïñßæåé ôïí üñï "åðåîåñãáóôÞò" ùò ôïí êÜèå ðõñÞíá åðåîåñãáóôÞ (processor core) óå Ýíá ïëïêëçñùìÝíï êýêëùìá (chip). Ãéá ðáñÜäåéãìá, Ýíá ïëïêëçñùìÝíï êýêëùìá åðåîåñãáóôÞ äéðëïý ðõñÞíá (dual-core) äéáèÝôåé äýï ðõñÞíåò åðåîåñãáóôÞ. + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá èÝóåé ôï Ðñüãñáììá óå åöáñìïãÞ ÷ñçóéìïðïéþíôáò åßôå Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò (Full Capacity) åßôå Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò (Virtualization Capacity) Þ ÌåéùìÝíçò Äõíáìéêüôçôáò (Sub-Capacity), óýìöùíá ìå ôïõò ¼ñïõò ×ïñÞãçóçò Áäåéþí ×ñÞóçò ÌåéùìÝíçò Äõíáìéêüôçôáò Passport Advantage (âë. ôçí ðáñáêÜôù éóôïóåëßäá). ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá åðß ìïíÜäùí PVU þóôå íá êáëýðôïíôáé üëïé ïé åíåñãïðïéçìÝíïé* ðõñÞíåò åðåîåñãáóôþí óôï öõóéêü ðåñéâÜëëïí õëéêïý åîïðëéóìïý ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, ìå ôçí åîáßñåóç ôùí åîõðçñåôçôþí áðü ôïõò ïðïßïõò ôï Ðñüãñáììá Ý÷åé áöáéñåèåß ìïíßìùò. ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá ãéá ôçí êÜëõøç üëôùí ôùí åíåñãïðïéçìÝíùí ðõñÞíùí åðåîåñãáóôþí ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, üðùò ïñßæåôáé óýìöùíá ìå ôïõò Êáíüíåò ÊáôáìÝôñçóçò Áäåéþí ×ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò óôçí éóôïóåëßäá http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* ÅíåñãïðïéçìÝíïò ðõñÞíáò åðåîåñãáóôÞ åßíáé Ýíáò ðõñÞíáò åðåîåñãáóôÞ ðïõ åßíáé äéáèÝóéìïò ãéá ÷ñÞóç óå Ýíáí õëéêü Þ åéêïíéêü åîõðçñåôçôÞ, áíåîÜñôçôá áðü ôï åÜí ç äõíáìéêüôçôá ôïõ ðõñÞíá åðåîåñãáóôÞ ìðïñåß íá ðåñéïñéóôåß Þ ðåñéïñßæåôáé ìå ôç ÷ñÞóç ôå÷íïëïãéþí åéêïíéêïðïßçóçò (virtualization), åíôïëþí ôïõ ëåéôïõñãéêïý óõóôÞìáôïò, ðáñáìåôñïðïßçóçò ôïõ BIOS Þ ðáñüìïéùí ðåñéïñéóôéêþí ñõèìßóåùí. + +Åéêïíéêüò ÐõñÞíáò ÅðåîåñãáóôÞ + +Åéêïíéêüò ÐõñÞíáò ÅðåîåñãáóôÞ (Virtual Processor Core) åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Öõóéêüò ÅîõðçñåôçôÞò (Physical Server) åßíáé Ýíáò öõóéêüò õðïëïãéóôÞò ðïõ áðïôåëåßôáé áðü ìïíÜäåò åðåîåñãáóßáò, ìíÞìç êáé äõíáôüôçôåò åéóüäïõ/åîüäïõ ðëçñïöïñéþí (I/O) êáé åêôåëåß æçôïýìåíåò äéáäéêáóßåò, åíôïëÝò Þ åöáñìïãÝò ãéá Ýíáí Þ ðåñéóóüôåñïõò ÷ñÞóôåò Þ óõóêåõÝò ðåëÜôç (client devices). ¼ôáí ÷ñçóéìïðïéïýíôáé éêñéþìáôá (racks), äéáôÜîåéò blade (blade enclosures) Þ Üëëïò ðáñüìïéïò åîïðëéóìüò, ôüôå êÜèå ÷ùñéóôÞ öõóéêÞ óõóêåõÞ (ãéá ðáñÜäåéãìá, Ýíá blade Þ ìéá óõóêåõÞ ðïõ Ý÷åé ôïðïèåôçèåß óå éêñßùìá) ðïõ Ý÷åé ôá áðáéôïýìåíá ëåéôïõñãéêÜ ôìÞìáôá èåùñåßôáé ÷ùñéóôüò Öõóéêüò ÅîõðçñåôçôÞò. Åéêïíéêüò ÅîõðçñåôçôÞò (Virtual Server) åßíáé åßôå Ýíáò åéêïíéêüò õðïëïãéóôÞò ðïõ äçìéïõñãÞèçêå ìÝóù ôïõ äéá÷ùñéóìïý ôùí ðüñùí ðïõ åßíáé äéáèÝóéìïé óå Ýíá Öõóéêü ÅîõðçñåôçôÞ óå ëïãéêÜ ôìÞìáôá (partitions) åßôå Ýíáò Öõóéêüò ÅîõðçñåôçôÞò ðïõ äåí äéá÷ùñßóôçêå óå ëïãéêÜ ôìÞìáôá. ÐõñÞíáò ÅðåîåñãáóôÞ (Processor Core) (êïéíþò êáëïýìåíïò åðåîåñãáóôÞò Þ ìïíáäá CPU) åßíáé ìéá ëåéôïõñãéêÞ ìïíÜäá óå Ýíáí õðïëïãéóôÞ ç ïðïßá åñìçíåýåé êáé åêôåëåß ïäçãßåò. ¸íáò ÐõñÞíáò ÅðåîåñãáóôÞ áðïôåëåßôáé áðü ôïõëÜ÷éóôïí ìßá ìïíÜäá åëÝã÷ïõ ïäçãéþí êáé ìßá Þ ðåñéóóüôåñåò áñéèìçôéêÝò Þ ëïãéêÝò ìïíÜäåò. Åéêïíéêüò ÐõñÞíáò ÅðåîåñãáóôÞ åßíáé Ýíáò ÐõñÞíáò ÅðåîåñãáóôÞ óå Ýíá Öõóéêü ÅîõðçñåôçôÞ ðïõ äåí äéá÷ùñßóôçêå óå ëïãéêÜ ôìÞìáôá (partitions) Þ Ýíáò åéêïíéêüò ðõñÞíáò ðïõ óõó÷åôßóôçêå ìå Ýíáí Åéêïíéêü ÅîõðçñåôçôÞ. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé ÷ùñéóôü äéêáßùìá ÷ñÞóçò ãéá êÜèå Åéêïíéêü ÐõñÞíá ÅðåîåñãáóôÞ ðïõ êáèßóôáôáé äéáèÝóéìïò óôï Ðñüãñáììá. + +Ãéá êÜèå Öõóéêü ÅîõðçñåôçôÞ, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá äéáèÝôåé åðáñêÞ äéêáéþìáôá ãéá ôï ìéêñüôåñï ôùí åîÞò áèñïéóìÜôùí: 1) ôï Üèñïéóìá üëùí ôùí äéáèÝóéìùí Åéêïíéêþí ÐõñÞíùí ÅðåîåñãáóôÞ óå üëïõò ôïõò Åéêïíéêïýò ÅîõðçñåôçôÝò ðïõ Ý÷ïõí êáôáóôåß äéáèÝóéìïé óôï Ðñüãñáììá Þ 2) ôï Üèñïéóìá üëùí ôùí äéáèÝóéìùí ÐõñÞíùí ÅðåîåñãáóôÞ óôï Öõóéêü ÅîõðçñåôçôÞ. + +ÅðéðëÝïí ôùí áíùôÝñù, ïé áêüëïõèïé üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +ÄéáôÜîåéò Idle Standby + +Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò Üñèñïõ, ìéá äéÜôáîç "Idle Standby" åßíáé ìéá äéÜôáîç üðïõ Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò åßíáé åãêáôåóôçìÝíï óå Ýíáí åîõðçñåôçôÞ ðïõ áðïôåëåß ìÝñïò ìéáò ëýóçò õøçëÞò äéáèåóéìüôçôáò êáé åßíáé ï åîõðçñåôçôÞò óôïí ïðïßï ãßíåôáé áõôüìáôç ìåôáãùãÞ ôïõ ÐñïãñÜììáôïò óå ðåñßðôùóç ðïõ ðÜøåé íá åßíáé äõíáôÞ ç ÷ñÞóç ôïõ áíôéãñÜöïõ ôïõ ÐñïãñÜììáôïò ðïõ åßíáé åãêáôåóôçìÝíï óôïí åíåñãü åîõðçñåôçôÞ. ¸íáò åîõðçñåôçôÞò èåùñåßôáé "áäñáíÞò" (idle) ìüíï åÜí, ìÝ÷ñé íá ðñáãìáôïðïéçèåß ìéá áõôüìáôç ìåôáãùãÞ (failover), ÷ñçóéìïðïéåßôáé áðïêëåéóôéêÜ ãéá ôçí åêôÝëåóç äéá÷åéñéóôéêþí åíåñãåéþí ðïõ ðáñÝ÷ïõí õðïóôÞñéîç óå óåíÜñéá áõôüìáôçò ìåôáãùãÞò. + +Äåí åðéôñÝðåôáé ç åãêáôÜóôáóç ôïõ ÐñïãñÜììáôïò óå Ýíáí åîõðçñåôçôÞ Idle Standby åêôüò åÜí Ý÷åé áðïêôçèåß ç êáôÜëëçëç Üäåéá ÷ñÞóçò. + +ÅÜí ôï Ðñüãñáììá ÷ñçóéìïðïéåßôáé óå ìéá äéÜôáîç Idle Standby ìå ôç ëåéôïõñãßá Multi-Instance Queue Manager, ôüôå åðéôñÝðåôáé íá åßíáé åãêáôåóôçìÝíï, êáé íá âñßóêåôáé óå ëåéôïõñãßá, Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò ãéá óêïðïýò åöåäñéêÞò õðïóôÞñéîçò óå Ýíáí åîõðçñåôçôÞ Idle Standby, áëëÜ ôï Ðñüãñáììá ðñÝðåé íá ðáñáìÝíåé "áíåíåñãü" (idle) êáé äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ïðïéïõäÞðïôå åßäïõò, åêôüò åÜí ãßíåé áõôüìáôç ìåôáãùãÞ (failover) ôïõ åíåñãïý åîõðçñåôçôÞ óôïí åîõðçñåôçôÞ Idle Standby, óôçí ïðïßá ðåñßðôùóç åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ôï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óôïí åîõðçñåôçôÞ Idle Standby ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ãéá ôç äéÜñêåéá ôçò ðåñéüäïõ ìåôáãùãÞò. + +ÅÜí ôï Ðñüãñáììá ÷ñçóéìïðïéåßôáé óå ìéá äéÜôáîç Idle Standby ìå Üëëá óõóôÞìáôá ÕøçëÞò Äéáèåóéìüôçôáò (High Availability), ôüôå Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò åðéôñÝðåôáé íá åßíáé åãêáôåóôçìÝíï ãéá óêïðïýò åöåäñéêÞò õðïóôÞñéîçò óå Ýíáí åîõðçñåôçôÞ Idle Standby, áëëÜ äåí åðéôñÝðåôáé íá âñßóêåôáé óå ëåéôïõñãßá (êáé êáôÜ óõíÝðåéá äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ïðïéïõäÞðïôå åßäïõò), áëëÜ èá åíåñãïðïéçèåß áõôüìáôá áðü ôá ëåéôïõñãéêÜ ôìÞìáôá ôçò ëýóçò ÕøçëÞò Äéáèåóéìüôçôáò óå ðåñßðôùóç äõóëåéôïõñãßáò ôïõ åíåñãïý åîõðçñåôçôÞ, óôçí ïðïßá ðåñßðôùóç åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ôï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óôïí åîõðçñåôçôÞ Idle Standby ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ãéá ôç äéÜñêåéá ôçò ðåñéüäïõ ìåôáãùãÞò. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +ÓÇÌÁÍÔÉÊÏ: ÄÉÁÂÁÓÔÅ ÐÑÏÓÅÊÔÉÊÁ ÔÉÓ ÁÊÏËÏÕÈÅÓ ÐËÇÑÏÖÏÑÉÅÓ + +ÐáñáêÜôù ðáñïõóéÜæïíôáé äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + +1. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí +2. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò (Licensee) áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò ðáñáãùãéêÞò ÷ñÞóçò (äçëáäÞ ãéá óêïðïýò ðÝñáí áðü ôçí áîéïëüãçóç, Ýëåã÷ï, äïêéìÞ ôýðïõ "try or buy" Þ åðßäåéîç): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôçò Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM, ÷ùñßò ôñïðïðïéÞóåéò. + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò áîéïëüãçóçò, åëÝã÷ïõ, äïêéìÞò ôýðïõ "try or buy" Þ åðßäåéîçò (óõëëïãéêÜ "Áîéïëüãçóç"): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôüóï ôçò (i) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí ("¶äåéá ×ñÞóçò Áîéïëüãçóçò"), üóï êáé ôçò (ii) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM ("Óýìâáóç IPLA"), ÷ùñßò ôñïðïðïéÞóåéò. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò èá éó÷ýåé ãéá ôç äéÜñêåéá ôçò Áîéïëüãçóçò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ç Óýìâáóç IPLA èá ôåèåß áõôüìáôá óå éó÷ý åöüóïí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéëÝîåé íá äéáôçñÞóåé ôï Ðñüãñáììá ìåôÜ ôçí ÁîéïëüãçóÞ ôïõ (Þ íá áðïêôÞóåé ðñüóèåôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ãéá ÷ñÞóç ìåôÜ ôçí Áîéïëüãçóç) óõíÜðôïíôáò ìéá óýìâáóç ðñïìÞèåéáò (ð.÷. ôç ÄéåèíÞ Óýìâáóç Passport Advantage ôçò IBM Þ ôç ÄéåèíÞ Óýìâáóç Passport Advantage Express ôçò IBM) ìå ôçí IBM. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò êáé ç Óýìâáóç IPLA äåí èá éó÷ýïõí ôáõôü÷ñïíá êáé äåí ôñïðïðïéåß ç ìßá ôçí Üëëç. ÊÜèå ìßá áðü áõôÝò åßíáé áíåîÜñôçôç áðü ôçí Üëëç. + +Áêïëïõèåß ôï ðëÞñåò êåßìåíï êÜèå ìßáò áðü ôéò äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí (Z125-5543-05). + +¼íïìá ÐñïãñÜììáôïò (Áñéèìüò ÐñïãñÜììáôïò): +IBM MQ Advanced V9.0.3 (Evaluation) + +Ïé áêüëïõèïé âáóéêïß üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ðåñßïäïò Áîéïëüãçóçò + +Ç ðåñßïäïò áîéïëüãçóçò áñ÷ßæåé êáôÜ ôçí çìåñïìçíßá ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò êáé ôåñìáôßæåôáé ìåôÜ ôçí ðáñÝëåõóç 90 çìåñþí. + +ÐñïãñÜììáôá ÄÝóìçò + +Ôï Ðñüãñáììá äéáôßèåôáé ìå Üäåéá ÷ñÞóçò ùò ðáêÝôï ðïëëáðëþí ðñïúüíôùí ðïõ áðïôåëåßôáé áðü ôç ÄÝóìç ÐñïãñáììÜôùí ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åãêáôáóôÞóåé êáé íá ÷ñçóéìïðïéåß ôá ÐñïãñÜììáôá ôçò åí ëüãù ÄÝóìçò ÐñïãñáììÜôùí åíôüò ôùí ïñßùí ðïõ ôßèåíôáé óôéò Áðïäåßîåéò Äéêáéþìáôïò (Proof of Entitlement) ãéá ôï Ðñüãñáììá êáé üðùò ïñßæåôáé óôï ðáñüí Ýããñáöï Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé åîïõóéïäüôçóç ãéá ôç ìåôáâßâáóç Þ ìåôáðþëçóç ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÷ùñéóôÜ áðü ôï ðáêÝôï ðïëëáðëþí ðñïúüíôùí. ¸íá Ðñüãñáììá ðïõ ðåñéëáìâÜíåôáé óå ÄÝóìç ÐñïãñáììÜôùí ìðïñåß íá óõíïäåýåôáé áðü üñïõò Üäåéáò ÷ñÞóçò êáé ïé åí ëüãù üñïé, åÜí õðÜñ÷ïõí, äéÝðïõí ôç ÷ñÞóç ôïõ åí ëüãù ÐñïãñÜììáôïò ôçò ÄÝóìçò ÐñïãñáììÜôùí áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Óå ðåñßðôùóç áíôßèåóçò ìåôáîý ôùí üñùí, ïé üñïé ôïõ ðáñüíôïò åããñÜöïõ Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ãéá ôï Ðñüãñáììá ôçò ÄÝóìçò ÐñïãñáììÜôùí. ¼ôáí ôï äéêáßùìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ëÞîåé Þ êáôáããåëèåß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá äéáêüøåé ôç ÷ñÞóç êáé íá êáôáóôñÝøåé Þ íá åðéóôñÝøåé Üìåóá üëá ôá áíôßãñáöá ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí óôï ìÝñïò áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáöüñôùóå (download) ôá ÐñïãñÜììáôá ôçò ÄÝóìçò ÐñïãñáììÜôùí, èá ðñÝðåé íá åðéêïéíùíÞóåé ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èÝëåé íá ôïõ ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí ãéá ÷ñÞóç ðÝñáí ôùí ïñßùí ðïõ êáèïñßæïíôáé áíùôÝñù, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå Ýíáí Åêðñüóùðï ÐùëÞóåùí ôçò IBM Þ ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá, þóôå íá ôïõ ÷ïñçãçèåß ç áðáéôïýìåíç Üäåéá ÷ñÞóçò. + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôç ÄÝóìç ÐñïãñáììÜôùí ãéá ôá ïðïßá ÷ïñçãåßôáé Üäåéá ÷ñÞóçò ìå ôï Ðñüãñáììá åßíáé ôá åîÞò: +IBM MQ V9.0.3 + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (Z125-3301-14). + +¼íïìá ÐñïãñÜììáôïò (Áñéèìüò ÐñïãñÜììáôïò): +IBM MQ Advanced V9.0.3 (5724-H72) + +Ïé áêüëïõèïé âáóéêïß üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Äéêáßùìá ðåñéïñéóìÝíçò ÷ñÞóçò + +¼ðùò ðåñéãñÜöåôáé óôç ÄéåèíÞ Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (International Program License Agreement - "Óýìâáóç IPLA") êáé óôéò ðáñïýóåò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò, ç IBM åê÷ùñåß óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò Ýíá ðåñéïñéóìÝíï äéêáßùìá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ôï åí ëüãù äéêáßùìá ðåñéïñßæåôáé óôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò, ôï ïðïßï ïñßæåôáé óå ÌïíÜäåò Áîßáò Åðåîåñãáóôþí (Processor Value Units - "ÌïíÜäåò PVU"), ÌïíÜäåò Áîßáò Ðüñùí (Resource Value Units - "ÌïíÜäåò RVU"), ÌïíÜäåò Áîßáò (Value Units - "ÌïíÜäåò VU") Þ ùò ïðïéïäÞðïôå Üëëï êáèïñéóìÝíï åðßðåäï ÷ñÞóçò, ãéá ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáôÝâáëå ôçí áðáéôïýìåíç ðëçñùìÞ, üðùò ôåêìçñéþíåôáé óôçí Áðüäåéîç Äéêáéþìáôïò. Ç ÷ñÞóç áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ìðïñåß åðßóçò íá ðåñéïñßæåôáé óå ìéá óõãêåêñéìÝíç ìç÷áíÞ, Þ óå ÷ñÞóç ôïõ ÐñïãñÜììáôïò ìüíï ùò Õðïóôçñéêôéêïý ÐñïãñÜììáôïò, Þ íá õðüêåéôáé óå Üëëïõò ðåñéïñéóìïýò. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé êáôáâÜëåé ðëçñùìÞ ãéá ôï óýíïëï ôçò ïéêïíïìéêÞò áîßáò ôïõ ÐñïãñÜììáôïò, äåí åðéôñÝðåôáé Üëëç ÷ñÞóç ôïõ ÐñïãñÜììáôïò ÷ùñßò ôçí êáôáâïëÞ ðñüóèåôùí ÷ñåþóåùí. ÅðéðëÝïí, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ãéá ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí ðëçñïöïñéêÞò óå ïðïéïäÞðïôå ôñßôï ìÝñïò, ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí "öéëïîåíßáò" (hosting) Þ ÷ñïíïìåñéóôéêÞò ìßóèùóçò (timesharing), Þ ôçí ðåñáéôÝñù ÷ïñÞãçóç áäåéþí ÷ñÞóçò óå ôñßôïõò, ôçí åíïéêßáóç Þ ôçí åêìßóèùóç ôïõ ÐñïãñÜììáôïò, åêôüò åÜí ðñïâëÝðåôáé ñçôþò óôéò éó÷ýïõóåò óõìâÜóåéò âÜóåé ôùí ïðïßùí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÜ ôéò åîïõóéïäïôÞóåéò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá. Ìðïñåß íá äéáôßèåíôáé ðñüóèåôá äéêáéþìáôá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò õðü ôçí ðñïûðüèåóç ôçò êáôáâïëÞò ðñüóèåôùí ÷ñåþóåùí Þ âÜóåé äéáöïñåôéêþí Þ óõìðëçñùìáôéêþí üñùí. Ç IBM äéáôçñåß ôï äéêáßùìá íá êáèïñßóåé áí ôá åí ëüãù ðñüóèåôá äéêáéþìáôá èá êáèßóôáíôáé äéáèÝóéìá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +ÐñïäéáãñáöÝò + +Ïé ðñïäéáãñáöÝò ôïõ ÐñïãñÜììáôïò äéáôßèåíôáé óôéò åíüôçôåò Description êáé Technical Information ôùí åðéóôïëþí áíáêïßíùóçò ôïõ ÐñïãñÜììáôïò. + +ÐñïãñÜììáôá ÄÝóìçò + +Ôï Ðñüãñáììá äéáôßèåôáé ìå Üäåéá ÷ñÞóçò ùò ðáêÝôï ðïëëáðëþí ðñïúüíôùí ðïõ áðïôåëåßôáé áðü ôç ÄÝóìç ÐñïãñáììÜôùí ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åãêáôáóôÞóåé êáé íá ÷ñçóéìïðïéåß ôá ÐñïãñÜììáôá ôçò åí ëüãù ÄÝóìçò ÐñïãñáììÜôùí åíôüò ôùí ïñßùí ðïõ ôßèåíôáé óôéò Áðïäåßîåéò Äéêáéþìáôïò (Proof of Entitlement) ãéá ôï Ðñüãñáììá êáé üðùò ïñßæåôáé óôï ðáñüí Ýããñáöï Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé åîïõóéïäüôçóç ãéá ôç ìåôáâßâáóç Þ ìåôáðþëçóç ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÷ùñéóôÜ áðü ôï ðáêÝôï ðïëëáðëþí ðñïúüíôùí. ¸íá Ðñüãñáììá ðïõ ðåñéëáìâÜíåôáé óå ÄÝóìç ÐñïãñáììÜôùí ìðïñåß íá óõíïäåýåôáé áðü üñïõò Üäåéáò ÷ñÞóçò êáé ïé åí ëüãù üñïé, åÜí õðÜñ÷ïõí, äéÝðïõí ôç ÷ñÞóç ôïõ åí ëüãù ÐñïãñÜììáôïò ôçò ÄÝóìçò ÐñïãñáììÜôùí áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Óå ðåñßðôùóç áíôßèåóçò ìåôáîý ôùí üñùí, ïé üñïé ôïõ ðáñüíôïò åããñÜöïõ Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ãéá ôï Ðñüãñáììá ôçò ÄÝóìçò ÐñïãñáììÜôùí. ¼ôáí ôï äéêáßùìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ëÞîåé Þ êáôáããåëèåß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá äéáêüøåé ôç ÷ñÞóç êáé íá êáôáóôñÝøåé Þ íá åðéóôñÝøåé Üìåóá üëá ôá áíôßãñáöá ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí óôï ìÝñïò áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáöüñôùóå (download) ôá ÐñïãñÜììáôá ôçò ÄÝóìçò ÐñïãñáììÜôùí, èá ðñÝðåé íá åðéêïéíùíÞóåé ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èÝëåé íá ôïõ ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí ãéá ÷ñÞóç ðÝñáí ôùí ïñßùí ðïõ êáèïñßæïíôáé áíùôÝñù, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå Ýíáí Åêðñüóùðï ÐùëÞóåùí ôçò IBM Þ ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá, þóôå íá ôïõ ÷ïñçãçèåß ç áðáéôïýìåíç Üäåéá ÷ñÞóçò. + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôç ÄÝóìç ÐñïãñáììÜôùí ãéá ôá ïðïßá ÷ïñçãåßôáé Üäåéá ÷ñÞóçò ìå ôï Ðñüãñáììá åßíáé ôá åîÞò: +IBM MQ V9.0.3 + +ËåéôïõñãéêÜ ÔìÞìáôá ðïõ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôùí Áðáéôïýìåíùí ÄéêáéùìÜôùí ×ñÞóçò + +ÊáôÜ ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôçí åãêáôÜóôáóç Þ ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, äåí ëáìâÜíåôáé õðüøç ç åãêáôÜóôáóç Þ ÷ñÞóç ôùí áêüëïõèùí ëåéôïõñãéêþí ôìçìÜôùí ôïõ ÐñïãñÜììáôïò. Ìå Üëëá ëüãéá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá åãêáèéóôÜ êáé íá ÷ñçóéìïðïéåß ôá áêüëïõèá ëåéôïõñãéêÜ ôìÞìáôá ôïõ ÐñïãñÜììáôïò, âÜóåé ôùí üñùí ôçò Üäåéáò ÷ñÞóçò, áëëÜ ôá ëåéôïõñãéêÜ ôìÞìáôá áõôÜ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôï Ðñüãñáììá. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + +Ïé áêüëïõèåò ìïíÜäåò ìÝôñçóçò ìðïñåß íá äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (ÌïíÜäá PVU) + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (Processor Value Unit - "ÌïíÜäá PVU") åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ï áñéèìüò ôùí áðáéôïýìåíùí äéêáéùìÜôùí åðß ìïíÜäùí PVU âáóßæåôáé óôç ÷ñçóéìïðïéïýìåíç ôå÷íïëïãßá åðåîåñãáóôþí (ç ïðïßá ïñßæåôáé óôïí Ðßíáêá PVU áíÜ ÐñïìçèåõôÞ ÅðåîåñãáóôÞ, Êáôçãïñßá Ðñïúüíôïò (Brand), Ôýðï êáé Êùäéêü ÌïíôÝëïõ óôç äéåýèõíóç http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) êáé óôïí áñéèìü ôùí åðåîåñãáóôþí ðïõ êáèßóôáíôáé äéáèÝóéìïé óôï Ðñüãñáììá. Ãéá ôïõò óêïðïýò ôçò ÷ïñÞãçóçò áäåéþí ÷ñÞóçò âÜóåé ìïíÜäùí PVU, ç ÉÂÌ åîáêïëïõèåß íá ïñßæåé ôïí üñï "åðåîåñãáóôÞò" ùò ôïí êÜèå ðõñÞíá åðåîåñãáóôÞ (processor core) óå Ýíá ïëïêëçñùìÝíï êýêëùìá (chip). Ãéá ðáñÜäåéãìá, Ýíá ïëïêëçñùìÝíï êýêëùìá åðåîåñãáóôÞ äéðëïý ðõñÞíá (dual-core) äéáèÝôåé äýï ðõñÞíåò åðåîåñãáóôÞ. + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá èÝóåé ôï Ðñüãñáììá óå åöáñìïãÞ ÷ñçóéìïðïéþíôáò åßôå Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò (Full Capacity) åßôå Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò (Virtualization Capacity) Þ ÌåéùìÝíçò Äõíáìéêüôçôáò (Sub-Capacity), óýìöùíá ìå ôïõò ¼ñïõò ×ïñÞãçóçò Áäåéþí ×ñÞóçò ÌåéùìÝíçò Äõíáìéêüôçôáò Passport Advantage (âë. ôçí ðáñáêÜôù éóôïóåëßäá). ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá åðß ìïíÜäùí PVU þóôå íá êáëýðôïíôáé üëïé ïé åíåñãïðïéçìÝíïé* ðõñÞíåò åðåîåñãáóôþí óôï öõóéêü ðåñéâÜëëïí õëéêïý åîïðëéóìïý ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, ìå ôçí åîáßñåóç ôùí åîõðçñåôçôþí áðü ôïõò ïðïßïõò ôï Ðñüãñáììá Ý÷åé áöáéñåèåß ìïíßìùò. ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá ãéá ôçí êÜëõøç üëôùí ôùí åíåñãïðïéçìÝíùí ðõñÞíùí åðåîåñãáóôþí ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, üðùò ïñßæåôáé óýìöùíá ìå ôïõò Êáíüíåò ÊáôáìÝôñçóçò Áäåéþí ×ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò óôçí éóôïóåëßäá http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* ÅíåñãïðïéçìÝíïò ðõñÞíáò åðåîåñãáóôÞ åßíáé Ýíáò ðõñÞíáò åðåîåñãáóôÞ ðïõ åßíáé äéáèÝóéìïò ãéá ÷ñÞóç óå Ýíáí õëéêü Þ åéêïíéêü åîõðçñåôçôÞ, áíåîÜñôçôá áðü ôï åÜí ç äõíáìéêüôçôá ôïõ ðõñÞíá åðåîåñãáóôÞ ìðïñåß íá ðåñéïñéóôåß Þ ðåñéïñßæåôáé ìå ôç ÷ñÞóç ôå÷íïëïãéþí åéêïíéêïðïßçóçò (virtualization), åíôïëþí ôïõ ëåéôïõñãéêïý óõóôÞìáôïò, ðáñáìåôñïðïßçóçò ôïõ BIOS Þ ðáñüìïéùí ðåñéïñéóôéêþí ñõèìßóåùí. + +Åéêïíéêüò ÐõñÞíáò ÅðåîåñãáóôÞ + +Åéêïíéêüò ÐõñÞíáò ÅðåîåñãáóôÞ (Virtual Processor Core) åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Öõóéêüò ÅîõðçñåôçôÞò (Physical Server) åßíáé Ýíáò öõóéêüò õðïëïãéóôÞò ðïõ áðïôåëåßôáé áðü ìïíÜäåò åðåîåñãáóßáò, ìíÞìç êáé äõíáôüôçôåò åéóüäïõ/åîüäïõ ðëçñïöïñéþí (I/O) êáé åêôåëåß æçôïýìåíåò äéáäéêáóßåò, åíôïëÝò Þ åöáñìïãÝò ãéá Ýíáí Þ ðåñéóóüôåñïõò ÷ñÞóôåò Þ óõóêåõÝò ðåëÜôç (client devices). ¼ôáí ÷ñçóéìïðïéïýíôáé éêñéþìáôá (racks), äéáôÜîåéò blade (blade enclosures) Þ Üëëïò ðáñüìïéïò åîïðëéóìüò, ôüôå êÜèå ÷ùñéóôÞ öõóéêÞ óõóêåõÞ (ãéá ðáñÜäåéãìá, Ýíá blade Þ ìéá óõóêåõÞ ðïõ Ý÷åé ôïðïèåôçèåß óå éêñßùìá) ðïõ Ý÷åé ôá áðáéôïýìåíá ëåéôïõñãéêÜ ôìÞìáôá èåùñåßôáé ÷ùñéóôüò Öõóéêüò ÅîõðçñåôçôÞò. Åéêïíéêüò ÅîõðçñåôçôÞò (Virtual Server) åßíáé åßôå Ýíáò åéêïíéêüò õðïëïãéóôÞò ðïõ äçìéïõñãÞèçêå ìÝóù ôïõ äéá÷ùñéóìïý ôùí ðüñùí ðïõ åßíáé äéáèÝóéìïé óå Ýíá Öõóéêü ÅîõðçñåôçôÞ óå ëïãéêÜ ôìÞìáôá (partitions) åßôå Ýíáò Öõóéêüò ÅîõðçñåôçôÞò ðïõ äåí äéá÷ùñßóôçêå óå ëïãéêÜ ôìÞìáôá. ÐõñÞíáò ÅðåîåñãáóôÞ (Processor Core) (êïéíþò êáëïýìåíïò åðåîåñãáóôÞò Þ ìïíáäá CPU) åßíáé ìéá ëåéôïõñãéêÞ ìïíÜäá óå Ýíáí õðïëïãéóôÞ ç ïðïßá åñìçíåýåé êáé åêôåëåß ïäçãßåò. ¸íáò ÐõñÞíáò ÅðåîåñãáóôÞ áðïôåëåßôáé áðü ôïõëÜ÷éóôïí ìßá ìïíÜäá åëÝã÷ïõ ïäçãéþí êáé ìßá Þ ðåñéóóüôåñåò áñéèìçôéêÝò Þ ëïãéêÝò ìïíÜäåò. Åéêïíéêüò ÐõñÞíáò ÅðåîåñãáóôÞ åßíáé Ýíáò ÐõñÞíáò ÅðåîåñãáóôÞ óå Ýíá Öõóéêü ÅîõðçñåôçôÞ ðïõ äåí äéá÷ùñßóôçêå óå ëïãéêÜ ôìÞìáôá (partitions) Þ Ýíáò åéêïíéêüò ðõñÞíáò ðïõ óõó÷åôßóôçêå ìå Ýíáí Åéêïíéêü ÅîõðçñåôçôÞ. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé ÷ùñéóôü äéêáßùìá ÷ñÞóçò ãéá êÜèå Åéêïíéêü ÐõñÞíá ÅðåîåñãáóôÞ ðïõ êáèßóôáôáé äéáèÝóéìïò óôï Ðñüãñáììá. + +Ãéá êÜèå Öõóéêü ÅîõðçñåôçôÞ, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá äéáèÝôåé åðáñêÞ äéêáéþìáôá ãéá ôï ìéêñüôåñï ôùí åîÞò áèñïéóìÜôùí: 1) ôï Üèñïéóìá üëùí ôùí äéáèÝóéìùí Åéêïíéêþí ÐõñÞíùí ÅðåîåñãáóôÞ óå üëïõò ôïõò Åéêïíéêïýò ÅîõðçñåôçôÝò ðïõ Ý÷ïõí êáôáóôåß äéáèÝóéìïé óôï Ðñüãñáììá Þ 2) ôï Üèñïéóìá üëùí ôùí äéáèÝóéìùí ÐõñÞíùí ÅðåîåñãáóôÞ óôï Öõóéêü ÅîõðçñåôçôÞ. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +ÓÇÌÁÍÔÉÊÏ: ÄÉÁÂÁÓÔÅ ÐÑÏÓÅÊÔÉÊÁ ÔÉÓ ÁÊÏËÏÕÈÅÓ ÐËÇÑÏÖÏÑÉÅÓ + +ÐáñáêÜôù ðáñïõóéÜæïíôáé äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + +1. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí +2. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò (Licensee) áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò ðáñáãùãéêÞò ÷ñÞóçò (äçëáäÞ ãéá óêïðïýò ðÝñáí áðü ôçí áîéïëüãçóç, Ýëåã÷ï, äïêéìÞ ôýðïõ "try or buy" Þ åðßäåéîç): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôçò Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM, ÷ùñßò ôñïðïðïéÞóåéò. + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò áîéïëüãçóçò, åëÝã÷ïõ, äïêéìÞò ôýðïõ "try or buy" Þ åðßäåéîçò (óõëëïãéêÜ "Áîéïëüãçóç"): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôüóï ôçò (i) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí ("¶äåéá ×ñÞóçò Áîéïëüãçóçò"), üóï êáé ôçò (ii) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM ("Óýìâáóç IPLA"), ÷ùñßò ôñïðïðïéÞóåéò. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò èá éó÷ýåé ãéá ôç äéÜñêåéá ôçò Áîéïëüãçóçò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ç Óýìâáóç IPLA èá ôåèåß áõôüìáôá óå éó÷ý åöüóïí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéëÝîåé íá äéáôçñÞóåé ôï Ðñüãñáììá ìåôÜ ôçí ÁîéïëüãçóÞ ôïõ (Þ íá áðïêôÞóåé ðñüóèåôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ãéá ÷ñÞóç ìåôÜ ôçí Áîéïëüãçóç) óõíÜðôïíôáò ìéá óýìâáóç ðñïìÞèåéáò (ð.÷. ôç ÄéåèíÞ Óýìâáóç Passport Advantage ôçò IBM Þ ôç ÄéåèíÞ Óýìâáóç Passport Advantage Express ôçò IBM) ìå ôçí IBM. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò êáé ç Óýìâáóç IPLA äåí èá éó÷ýïõí ôáõôü÷ñïíá êáé äåí ôñïðïðïéåß ç ìßá ôçí Üëëç. ÊÜèå ìßá áðü áõôÝò åßíáé áíåîÜñôçôç áðü ôçí Üëëç. + +Áêïëïõèåß ôï ðëÞñåò êåßìåíï êÜèå ìßáò áðü ôéò äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí (Z125-5543-05). + +¼íïìá ÐñïãñÜììáôïò (Áñéèìüò ÐñïãñÜììáôïò): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Ïé áêüëïõèïé âáóéêïß üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ðåñßïäïò Áîéïëüãçóçò + +Ç ðåñßïäïò áîéïëüãçóçò áñ÷ßæåé êáôÜ ôçí çìåñïìçíßá ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò êáé ôåñìáôßæåôáé ìåôÜ ôçí ðáñÝëåõóç 90 çìåñþí. + +ÐñïãñÜììáôá ÄÝóìçò + +Ôï Ðñüãñáììá äéáôßèåôáé ìå Üäåéá ÷ñÞóçò ùò ðáêÝôï ðïëëáðëþí ðñïúüíôùí ðïõ áðïôåëåßôáé áðü ôç ÄÝóìç ÐñïãñáììÜôùí ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åãêáôáóôÞóåé êáé íá ÷ñçóéìïðïéåß ôá ÐñïãñÜììáôá ôçò åí ëüãù ÄÝóìçò ÐñïãñáììÜôùí åíôüò ôùí ïñßùí ðïõ ôßèåíôáé óôéò Áðïäåßîåéò Äéêáéþìáôïò (Proof of Entitlement) ãéá ôï Ðñüãñáììá êáé üðùò ïñßæåôáé óôï ðáñüí Ýããñáöï Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé åîïõóéïäüôçóç ãéá ôç ìåôáâßâáóç Þ ìåôáðþëçóç ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÷ùñéóôÜ áðü ôï ðáêÝôï ðïëëáðëþí ðñïúüíôùí. ¸íá Ðñüãñáììá ðïõ ðåñéëáìâÜíåôáé óå ÄÝóìç ÐñïãñáììÜôùí ìðïñåß íá óõíïäåýåôáé áðü üñïõò Üäåéáò ÷ñÞóçò êáé ïé åí ëüãù üñïé, åÜí õðÜñ÷ïõí, äéÝðïõí ôç ÷ñÞóç ôïõ åí ëüãù ÐñïãñÜììáôïò ôçò ÄÝóìçò ÐñïãñáììÜôùí áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Óå ðåñßðôùóç áíôßèåóçò ìåôáîý ôùí üñùí, ïé üñïé ôïõ ðáñüíôïò åããñÜöïõ Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ãéá ôï Ðñüãñáììá ôçò ÄÝóìçò ÐñïãñáììÜôùí. ¼ôáí ôï äéêáßùìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ëÞîåé Þ êáôáããåëèåß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá äéáêüøåé ôç ÷ñÞóç êáé íá êáôáóôñÝøåé Þ íá åðéóôñÝøåé Üìåóá üëá ôá áíôßãñáöá ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí óôï ìÝñïò áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáöüñôùóå (download) ôá ÐñïãñÜììáôá ôçò ÄÝóìçò ÐñïãñáììÜôùí, èá ðñÝðåé íá åðéêïéíùíÞóåé ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èÝëåé íá ôïõ ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí ãéá ÷ñÞóç ðÝñáí ôùí ïñßùí ðïõ êáèïñßæïíôáé áíùôÝñù, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå Ýíáí Åêðñüóùðï ÐùëÞóåùí ôçò IBM Þ ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá, þóôå íá ôïõ ÷ïñçãçèåß ç áðáéôïýìåíç Üäåéá ÷ñÞóçò. + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôç ÄÝóìç ÐñïãñáììÜôùí ãéá ôá ïðïßá ÷ïñçãåßôáé Üäåéá ÷ñÞóçò ìå ôï Ðñüãñáììá åßíáé ôá åîÞò: +IBM MQ Idle Standby V9.0.3 + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (Z125-3301-14). + +¼íïìá ÐñïãñÜììáôïò (Áñéèìüò ÐñïãñÜììáôïò): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Ïé áêüëïõèïé âáóéêïß üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Äéêáßùìá ðåñéïñéóìÝíçò ÷ñÞóçò + +¼ðùò ðåñéãñÜöåôáé óôç ÄéåèíÞ Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (International Program License Agreement - "Óýìâáóç IPLA") êáé óôéò ðáñïýóåò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò, ç IBM åê÷ùñåß óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò Ýíá ðåñéïñéóìÝíï äéêáßùìá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ôï åí ëüãù äéêáßùìá ðåñéïñßæåôáé óôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò, ôï ïðïßï ïñßæåôáé óå ÌïíÜäåò Áîßáò Åðåîåñãáóôþí (Processor Value Units - "ÌïíÜäåò PVU"), ÌïíÜäåò Áîßáò Ðüñùí (Resource Value Units - "ÌïíÜäåò RVU"), ÌïíÜäåò Áîßáò (Value Units - "ÌïíÜäåò VU") Þ ùò ïðïéïäÞðïôå Üëëï êáèïñéóìÝíï åðßðåäï ÷ñÞóçò, ãéá ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáôÝâáëå ôçí áðáéôïýìåíç ðëçñùìÞ, üðùò ôåêìçñéþíåôáé óôçí Áðüäåéîç Äéêáéþìáôïò. Ç ÷ñÞóç áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ìðïñåß åðßóçò íá ðåñéïñßæåôáé óå ìéá óõãêåêñéìÝíç ìç÷áíÞ, Þ óå ÷ñÞóç ôïõ ÐñïãñÜììáôïò ìüíï ùò Õðïóôçñéêôéêïý ÐñïãñÜììáôïò, Þ íá õðüêåéôáé óå Üëëïõò ðåñéïñéóìïýò. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé êáôáâÜëåé ðëçñùìÞ ãéá ôï óýíïëï ôçò ïéêïíïìéêÞò áîßáò ôïõ ÐñïãñÜììáôïò, äåí åðéôñÝðåôáé Üëëç ÷ñÞóç ôïõ ÐñïãñÜììáôïò ÷ùñßò ôçí êáôáâïëÞ ðñüóèåôùí ÷ñåþóåùí. ÅðéðëÝïí, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ãéá ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí ðëçñïöïñéêÞò óå ïðïéïäÞðïôå ôñßôï ìÝñïò, ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí "öéëïîåíßáò" (hosting) Þ ÷ñïíïìåñéóôéêÞò ìßóèùóçò (timesharing), Þ ôçí ðåñáéôÝñù ÷ïñÞãçóç áäåéþí ÷ñÞóçò óå ôñßôïõò, ôçí åíïéêßáóç Þ ôçí åêìßóèùóç ôïõ ÐñïãñÜììáôïò, åêôüò åÜí ðñïâëÝðåôáé ñçôþò óôéò éó÷ýïõóåò óõìâÜóåéò âÜóåé ôùí ïðïßùí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÜ ôéò åîïõóéïäïôÞóåéò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá. Ìðïñåß íá äéáôßèåíôáé ðñüóèåôá äéêáéþìáôá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò õðü ôçí ðñïûðüèåóç ôçò êáôáâïëÞò ðñüóèåôùí ÷ñåþóåùí Þ âÜóåé äéáöïñåôéêþí Þ óõìðëçñùìáôéêþí üñùí. Ç IBM äéáôçñåß ôï äéêáßùìá íá êáèïñßóåé áí ôá åí ëüãù ðñüóèåôá äéêáéþìáôá èá êáèßóôáíôáé äéáèÝóéìá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +ÐñïäéáãñáöÝò + +Ïé ðñïäéáãñáöÝò ôïõ ÐñïãñÜììáôïò äéáôßèåíôáé óôéò åíüôçôåò Description êáé Technical Information ôùí åðéóôïëþí áíáêïßíùóçò ôïõ ÐñïãñÜììáôïò. + +ÐñïãñÜììáôá ÄÝóìçò + +Ôï Ðñüãñáììá äéáôßèåôáé ìå Üäåéá ÷ñÞóçò ùò ðáêÝôï ðïëëáðëþí ðñïúüíôùí ðïõ áðïôåëåßôáé áðü ôç ÄÝóìç ÐñïãñáììÜôùí ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åãêáôáóôÞóåé êáé íá ÷ñçóéìïðïéåß ôá ÐñïãñÜììáôá ôçò åí ëüãù ÄÝóìçò ÐñïãñáììÜôùí åíôüò ôùí ïñßùí ðïõ ôßèåíôáé óôéò Áðïäåßîåéò Äéêáéþìáôïò (Proof of Entitlement) ãéá ôï Ðñüãñáììá êáé üðùò ïñßæåôáé óôï ðáñüí Ýããñáöï Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé åîïõóéïäüôçóç ãéá ôç ìåôáâßâáóç Þ ìåôáðþëçóç ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÷ùñéóôÜ áðü ôï ðáêÝôï ðïëëáðëþí ðñïúüíôùí. ¸íá Ðñüãñáììá ðïõ ðåñéëáìâÜíåôáé óå ÄÝóìç ÐñïãñáììÜôùí ìðïñåß íá óõíïäåýåôáé áðü üñïõò Üäåéáò ÷ñÞóçò êáé ïé åí ëüãù üñïé, åÜí õðÜñ÷ïõí, äéÝðïõí ôç ÷ñÞóç ôïõ åí ëüãù ÐñïãñÜììáôïò ôçò ÄÝóìçò ÐñïãñáììÜôùí áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Óå ðåñßðôùóç áíôßèåóçò ìåôáîý ôùí üñùí, ïé üñïé ôïõ ðáñüíôïò åããñÜöïõ Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ãéá ôï Ðñüãñáììá ôçò ÄÝóìçò ÐñïãñáììÜôùí. ¼ôáí ôï äéêáßùìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ëÞîåé Þ êáôáããåëèåß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá äéáêüøåé ôç ÷ñÞóç êáé íá êáôáóôñÝøåé Þ íá åðéóôñÝøåé Üìåóá üëá ôá áíôßãñáöá ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí óôï ìÝñïò áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáöüñôùóå (download) ôá ÐñïãñÜììáôá ôçò ÄÝóìçò ÐñïãñáììÜôùí, èá ðñÝðåé íá åðéêïéíùíÞóåé ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èÝëåé íá ôïõ ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí ãéá ÷ñÞóç ðÝñáí ôùí ïñßùí ðïõ êáèïñßæïíôáé áíùôÝñù, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå Ýíáí Åêðñüóùðï ÐùëÞóåùí ôçò IBM Þ ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá, þóôå íá ôïõ ÷ïñçãçèåß ç áðáéôïýìåíç Üäåéá ÷ñÞóçò. + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôç ÄÝóìç ÐñïãñáììÜôùí ãéá ôá ïðïßá ÷ïñçãåßôáé Üäåéá ÷ñÞóçò ìå ôï Ðñüãñáììá åßíáé ôá åîÞò: +IBM MQ Idle Standby V9.0.3 + +ËåéôïõñãéêÜ ÔìÞìáôá ðïõ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôùí Áðáéôïýìåíùí ÄéêáéùìÜôùí ×ñÞóçò + +ÊáôÜ ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôçí åãêáôÜóôáóç Þ ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, äåí ëáìâÜíåôáé õðüøç ç åãêáôÜóôáóç Þ ÷ñÞóç ôùí áêüëïõèùí ëåéôïõñãéêþí ôìçìÜôùí ôïõ ÐñïãñÜììáôïò. Ìå Üëëá ëüãéá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá åãêáèéóôÜ êáé íá ÷ñçóéìïðïéåß ôá áêüëïõèá ëåéôïõñãéêÜ ôìÞìáôá ôïõ ÐñïãñÜììáôïò, âÜóåé ôùí üñùí ôçò Üäåéáò ÷ñÞóçò, áëëÜ ôá ëåéôïõñãéêÜ ôìÞìáôá áõôÜ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôï Ðñüãñáììá. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + +Ïé áêüëïõèåò ìïíÜäåò ìÝôñçóçò ìðïñåß íá äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (ÌïíÜäá PVU) + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (Processor Value Unit - "ÌïíÜäá PVU") åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ï áñéèìüò ôùí áðáéôïýìåíùí äéêáéùìÜôùí åðß ìïíÜäùí PVU âáóßæåôáé óôç ÷ñçóéìïðïéïýìåíç ôå÷íïëïãßá åðåîåñãáóôþí (ç ïðïßá ïñßæåôáé óôïí Ðßíáêá PVU áíÜ ÐñïìçèåõôÞ ÅðåîåñãáóôÞ, Êáôçãïñßá Ðñïúüíôïò (Brand), Ôýðï êáé Êùäéêü ÌïíôÝëïõ óôç äéåýèõíóç http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) êáé óôïí áñéèìü ôùí åðåîåñãáóôþí ðïõ êáèßóôáíôáé äéáèÝóéìïé óôï Ðñüãñáììá. Ãéá ôïõò óêïðïýò ôçò ÷ïñÞãçóçò áäåéþí ÷ñÞóçò âÜóåé ìïíÜäùí PVU, ç ÉÂÌ åîáêïëïõèåß íá ïñßæåé ôïí üñï "åðåîåñãáóôÞò" ùò ôïí êÜèå ðõñÞíá åðåîåñãáóôÞ (processor core) óå Ýíá ïëïêëçñùìÝíï êýêëùìá (chip). Ãéá ðáñÜäåéãìá, Ýíá ïëïêëçñùìÝíï êýêëùìá åðåîåñãáóôÞ äéðëïý ðõñÞíá (dual-core) äéáèÝôåé äýï ðõñÞíåò åðåîåñãáóôÞ. + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá èÝóåé ôï Ðñüãñáììá óå åöáñìïãÞ ÷ñçóéìïðïéþíôáò åßôå Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò (Full Capacity) åßôå Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò (Virtualization Capacity) Þ ÌåéùìÝíçò Äõíáìéêüôçôáò (Sub-Capacity), óýìöùíá ìå ôïõò ¼ñïõò ×ïñÞãçóçò Áäåéþí ×ñÞóçò ÌåéùìÝíçò Äõíáìéêüôçôáò Passport Advantage (âë. ôçí ðáñáêÜôù éóôïóåëßäá). ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá åðß ìïíÜäùí PVU þóôå íá êáëýðôïíôáé üëïé ïé åíåñãïðïéçìÝíïé* ðõñÞíåò åðåîåñãáóôþí óôï öõóéêü ðåñéâÜëëïí õëéêïý åîïðëéóìïý ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, ìå ôçí åîáßñåóç ôùí åîõðçñåôçôþí áðü ôïõò ïðïßïõò ôï Ðñüãñáììá Ý÷åé áöáéñåèåß ìïíßìùò. ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá ãéá ôçí êÜëõøç üëôùí ôùí åíåñãïðïéçìÝíùí ðõñÞíùí åðåîåñãáóôþí ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, üðùò ïñßæåôáé óýìöùíá ìå ôïõò Êáíüíåò ÊáôáìÝôñçóçò Áäåéþí ×ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò óôçí éóôïóåëßäá http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* ÅíåñãïðïéçìÝíïò ðõñÞíáò åðåîåñãáóôÞ åßíáé Ýíáò ðõñÞíáò åðåîåñãáóôÞ ðïõ åßíáé äéáèÝóéìïò ãéá ÷ñÞóç óå Ýíáí õëéêü Þ åéêïíéêü åîõðçñåôçôÞ, áíåîÜñôçôá áðü ôï åÜí ç äõíáìéêüôçôá ôïõ ðõñÞíá åðåîåñãáóôÞ ìðïñåß íá ðåñéïñéóôåß Þ ðåñéïñßæåôáé ìå ôç ÷ñÞóç ôå÷íïëïãéþí åéêïíéêïðïßçóçò (virtualization), åíôïëþí ôïõ ëåéôïõñãéêïý óõóôÞìáôïò, ðáñáìåôñïðïßçóçò ôïõ BIOS Þ ðáñüìïéùí ðåñéïñéóôéêþí ñõèìßóåùí. + +ÅðéðëÝïí ôùí áíùôÝñù, ïé áêüëïõèïé üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +ÄéáôÜîåéò Idle Standby + +Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò Üñèñïõ, ìéá äéÜôáîç "Idle Standby" åßíáé ìéá äéÜôáîç üðïõ Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò åßíáé åãêáôåóôçìÝíï óå Ýíáí åîõðçñåôçôÞ ðïõ áðïôåëåß ìÝñïò ìéáò ëýóçò õøçëÞò äéáèåóéìüôçôáò êáé åßíáé ï åîõðçñåôçôÞò óôïí ïðïßï ãßíåôáé áõôüìáôç ìåôáãùãÞ ôïõ ÐñïãñÜììáôïò óå ðåñßðôùóç ðïõ ðÜøåé íá åßíáé äõíáôÞ ç ÷ñÞóç ôïõ áíôéãñÜöïõ ôïõ ÐñïãñÜììáôïò ðïõ åßíáé åãêáôåóôçìÝíï óôïí åíåñãü åîõðçñåôçôÞ. ¸íáò åîõðçñåôçôÞò èåùñåßôáé "áäñáíÞò" (idle) ìüíï åÜí, ìÝ÷ñé íá ðñáãìáôïðïéçèåß ìéá áõôüìáôç ìåôáãùãÞ (failover), ÷ñçóéìïðïéåßôáé áðïêëåéóôéêÜ ãéá ôçí åêôÝëåóç äéá÷åéñéóôéêþí åíåñãåéþí ðïõ ðáñÝ÷ïõí õðïóôÞñéîç óå óåíÜñéá áõôüìáôçò ìåôáãùãÞò. + +Äåí åðéôñÝðåôáé ç åãêáôÜóôáóç ôïõ ÐñïãñÜììáôïò óå Ýíáí åîõðçñåôçôÞ Idle Standby åêôüò åÜí Ý÷åé áðïêôçèåß ç êáôÜëëçëç Üäåéá ÷ñÞóçò. + +ÅÜí ôï Ðñüãñáììá ÷ñçóéìïðïéåßôáé óå ìéá äéÜôáîç Idle Standby ìå ôç ëåéôïõñãßá Multi-Instance Queue Manager, ôüôå åðéôñÝðåôáé íá åßíáé åãêáôåóôçìÝíï, êáé íá âñßóêåôáé óå ëåéôïõñãßá, Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò ãéá óêïðïýò åöåäñéêÞò õðïóôÞñéîçò óå Ýíáí åîõðçñåôçôÞ Idle Standby, áëëÜ ôï Ðñüãñáììá ðñÝðåé íá ðáñáìÝíåé "áíåíåñãü" (idle) êáé äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ïðïéïõäÞðïôå åßäïõò, åêôüò åÜí ãßíåé áõôüìáôç ìåôáãùãÞ (failover) ôïõ åíåñãïý åîõðçñåôçôÞ óôïí åîõðçñåôçôÞ Idle Standby, óôçí ïðïßá ðåñßðôùóç åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ôï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óôïí åîõðçñåôçôÞ Idle Standby ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ãéá ôç äéÜñêåéá ôçò ðåñéüäïõ ìåôáãùãÞò. + +ÅÜí ôï Ðñüãñáììá ÷ñçóéìïðïéåßôáé óå ìéá äéÜôáîç Idle Standby ìå Üëëá óõóôÞìáôá ÕøçëÞò Äéáèåóéìüôçôáò (High Availability), ôüôå Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò åðéôñÝðåôáé íá åßíáé åãêáôåóôçìÝíï ãéá óêïðïýò åöåäñéêÞò õðïóôÞñéîçò óå Ýíáí åîõðçñåôçôÞ Idle Standby, áëëÜ äåí åðéôñÝðåôáé íá âñßóêåôáé óå ëåéôïõñãßá (êáé êáôÜ óõíÝðåéá äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ïðïéïõäÞðïôå åßäïõò), áëëÜ èá åíåñãïðïéçèåß áõôüìáôá áðü ôá ëåéôïõñãéêÜ ôìÞìáôá ôçò ëýóçò ÕøçëÞò Äéáèåóéìüôçôáò óå ðåñßðôùóç äõóëåéôïõñãßáò ôïõ åíåñãïý åîõðçñåôçôÞ, óôçí ïðïßá ðåñßðôùóç åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ôï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óôïí åîõðçñåôçôÞ Idle Standby ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ãéá ôç äéÜñêåéá ôçò ðåñéüäïõ ìåôáãùãÞò. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +ÓÇÌÁÍÔÉÊÏ: ÄÉÁÂÁÓÔÅ ÐÑÏÓÅÊÔÉÊÁ ÔÉÓ ÁÊÏËÏÕÈÅÓ ÐËÇÑÏÖÏÑÉÅÓ + +ÐáñáêÜôù ðáñïõóéÜæïíôáé äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + +1. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí +2. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò (Licensee) áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò ðáñáãùãéêÞò ÷ñÞóçò (äçëáäÞ ãéá óêïðïýò ðÝñáí áðü ôçí áîéïëüãçóç, Ýëåã÷ï, äïêéìÞ ôýðïõ "try or buy" Þ åðßäåéîç): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôçò Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM, ÷ùñßò ôñïðïðïéÞóåéò. + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò áîéïëüãçóçò, åëÝã÷ïõ, äïêéìÞò ôýðïõ "try or buy" Þ åðßäåéîçò (óõëëïãéêÜ "Áîéïëüãçóç"): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôüóï ôçò (i) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí ("¶äåéá ×ñÞóçò Áîéïëüãçóçò"), üóï êáé ôçò (ii) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM ("Óýìâáóç IPLA"), ÷ùñßò ôñïðïðïéÞóåéò. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò èá éó÷ýåé ãéá ôç äéÜñêåéá ôçò Áîéïëüãçóçò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ç Óýìâáóç IPLA èá ôåèåß áõôüìáôá óå éó÷ý åöüóïí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéëÝîåé íá äéáôçñÞóåé ôï Ðñüãñáììá ìåôÜ ôçí ÁîéïëüãçóÞ ôïõ (Þ íá áðïêôÞóåé ðñüóèåôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ãéá ÷ñÞóç ìåôÜ ôçí Áîéïëüãçóç) óõíÜðôïíôáò ìéá óýìâáóç ðñïìÞèåéáò (ð.÷. ôç ÄéåèíÞ Óýìâáóç Passport Advantage ôçò IBM Þ ôç ÄéåèíÞ Óýìâáóç Passport Advantage Express ôçò IBM) ìå ôçí IBM. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò êáé ç Óýìâáóç IPLA äåí èá éó÷ýïõí ôáõôü÷ñïíá êáé äåí ôñïðïðïéåß ç ìßá ôçí Üëëç. ÊÜèå ìßá áðü áõôÝò åßíáé áíåîÜñôçôç áðü ôçí Üëëç. + +Áêïëïõèåß ôï ðëÞñåò êåßìåíï êÜèå ìßáò áðü ôéò äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí (Z125-5543-05). + +¼íïìá ÐñïãñÜììáôïò (Áñéèìüò ÐñïãñÜììáôïò): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Ïé áêüëïõèïé âáóéêïß üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ðåñßïäïò Áîéïëüãçóçò + +Ç ðåñßïäïò áîéïëüãçóçò áñ÷ßæåé êáôÜ ôçí çìåñïìçíßá ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò êáé ôåñìáôßæåôáé ìåôÜ ôçí ðáñÝëåõóç 90 çìåñþí. + +ÐñïãñÜììáôá ÄÝóìçò + +Ôï Ðñüãñáììá äéáôßèåôáé ìå Üäåéá ÷ñÞóçò ùò ðáêÝôï ðïëëáðëþí ðñïúüíôùí ðïõ áðïôåëåßôáé áðü ôç ÄÝóìç ÐñïãñáììÜôùí ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åãêáôáóôÞóåé êáé íá ÷ñçóéìïðïéåß ôá ÐñïãñÜììáôá ôçò åí ëüãù ÄÝóìçò ÐñïãñáììÜôùí åíôüò ôùí ïñßùí ðïõ ôßèåíôáé óôéò Áðïäåßîåéò Äéêáéþìáôïò (Proof of Entitlement) ãéá ôï Ðñüãñáììá êáé üðùò ïñßæåôáé óôï ðáñüí Ýããñáöï Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé åîïõóéïäüôçóç ãéá ôç ìåôáâßâáóç Þ ìåôáðþëçóç ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÷ùñéóôÜ áðü ôï ðáêÝôï ðïëëáðëþí ðñïúüíôùí. ¸íá Ðñüãñáììá ðïõ ðåñéëáìâÜíåôáé óå ÄÝóìç ÐñïãñáììÜôùí ìðïñåß íá óõíïäåýåôáé áðü üñïõò Üäåéáò ÷ñÞóçò êáé ïé åí ëüãù üñïé, åÜí õðÜñ÷ïõí, äéÝðïõí ôç ÷ñÞóç ôïõ åí ëüãù ÐñïãñÜììáôïò ôçò ÄÝóìçò ÐñïãñáììÜôùí áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Óå ðåñßðôùóç áíôßèåóçò ìåôáîý ôùí üñùí, ïé üñïé ôïõ ðáñüíôïò åããñÜöïõ Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ãéá ôï Ðñüãñáììá ôçò ÄÝóìçò ÐñïãñáììÜôùí. ¼ôáí ôï äéêáßùìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ëÞîåé Þ êáôáããåëèåß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá äéáêüøåé ôç ÷ñÞóç êáé íá êáôáóôñÝøåé Þ íá åðéóôñÝøåé Üìåóá üëá ôá áíôßãñáöá ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí óôï ìÝñïò áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáöüñôùóå (download) ôá ÐñïãñÜììáôá ôçò ÄÝóìçò ÐñïãñáììÜôùí, èá ðñÝðåé íá åðéêïéíùíÞóåé ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èÝëåé íá ôïõ ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí ãéá ÷ñÞóç ðÝñáí ôùí ïñßùí ðïõ êáèïñßæïíôáé áíùôÝñù, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå Ýíáí Åêðñüóùðï ÐùëÞóåùí ôçò IBM Þ ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá, þóôå íá ôïõ ÷ïñçãçèåß ç áðáéôïýìåíç Üäåéá ÷ñÞóçò. + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôç ÄÝóìç ÐñïãñáììÜôùí ãéá ôá ïðïßá ÷ïñçãåßôáé Üäåéá ÷ñÞóçò ìå ôï Ðñüãñáììá åßíáé ôá åîÞò: +IBM MQ V9.0.3 + +×ñÞóç ìüíï áðü Õðåõèýíïõò ÁíÜðôõîçò + +ÅÜí ôï Ðñüãñáììá ðñïóäéïñßæåôáé ùò Ðñüãñáììá ðïõ ðñïïñßæåôáé ãéá "Õðåõèýíïõò ÁíÜðôõîçò" (Developers), ôï Ðñüãñáììá ìðïñåß íá ÷ñçóéìïðïéçèåß ìüíï óôá ðëáßóéá ôïõ ðåñéâÜëëïíôïò åóùôåñéêÞò áíÜðôõîçò êáé äéåíÝñãåéáò äïêéìþí óå åðßðåäï ìïíÜäáò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óå ìéá ìç÷áíÞ áíÜðôõîçò. Ìå ôïí üñï ìç÷áíÞ áíÜðôõîçò (developer machine) íïåßôáé Ýíá öõóéêü Þ åéêïíéêü ðåñéâÜëëïí åðéöÜíåéáò åñãáóßáò óôï ïðïßï åêôåëïýíôáé Ýíá êýñéï ëåéôïõñãéêü óýóôçìá êáé ôï Ðñüãñáììá, üðïõ ôï åí ëüãù ëåéôïõñãéêü óýóôçìá êáé ôï Ðñüãñáììá äåí èá åßíáé ðñïóâÜóéìá êáé äåí èá ÷ñçóéìïðïéïýíôáé áðü ðåñéóóüôåñïõò áðü Ýíáí êáèïñéóìÝíïõò õðåõèýíïõò áíÜðôõîçò (developers). Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ãéá ôçí åðåîåñãáóßá öïñôßùí åñãáóßáò ôïõ ðåñéâÜëëïíôïò ðáñáãùãÞò, ôçí ðñïóïìïßùóç öïñôßùí åñãáóßáò ôïõ ðåñéâÜëëïíôïò ðáñáãùãÞò Þ ôç äïêéìÞ ôçò åðåêôáóéìüôçôáò (scalability) ïðïéïõäÞðïôå êþäéêá, åöáñìïãÞò Þ óõóôÞìáôïò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ïðïéïäÞðïôå ôìÞìá ôïõ ÐñïãñÜììáôïò ãéá ïðïéïíäÞðïôå Üëëï óêïðü ÷ùñßò íá Ý÷åé áðïêôÞóåé ôá áðáéôïýìåíá äéêáéþìáôá ÷ñÞóçò óå ðåñéâÜëëïí ðáñáãùãÞò. + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (Z125-3301-14). + +¼íïìá ÐñïãñÜììáôïò (Áñéèìüò ÐñïãñÜììáôïò): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Ïé áêüëïõèïé âáóéêïß üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Äéêáßùìá ðåñéïñéóìÝíçò ÷ñÞóçò + +¼ðùò ðåñéãñÜöåôáé óôç ÄéåèíÞ Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (International Program License Agreement - "Óýìâáóç IPLA") êáé óôéò ðáñïýóåò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò, ç IBM åê÷ùñåß óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò Ýíá ðåñéïñéóìÝíï äéêáßùìá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ôï åí ëüãù äéêáßùìá ðåñéïñßæåôáé óôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò, ôï ïðïßï ïñßæåôáé óå ÌïíÜäåò Áîßáò Åðåîåñãáóôþí (Processor Value Units - "ÌïíÜäåò PVU"), ÌïíÜäåò Áîßáò Ðüñùí (Resource Value Units - "ÌïíÜäåò RVU"), ÌïíÜäåò Áîßáò (Value Units - "ÌïíÜäåò VU") Þ ùò ïðïéïäÞðïôå Üëëï êáèïñéóìÝíï åðßðåäï ÷ñÞóçò, ãéá ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáôÝâáëå ôçí áðáéôïýìåíç ðëçñùìÞ, üðùò ôåêìçñéþíåôáé óôçí Áðüäåéîç Äéêáéþìáôïò. Ç ÷ñÞóç áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ìðïñåß åðßóçò íá ðåñéïñßæåôáé óå ìéá óõãêåêñéìÝíç ìç÷áíÞ, Þ óå ÷ñÞóç ôïõ ÐñïãñÜììáôïò ìüíï ùò Õðïóôçñéêôéêïý ÐñïãñÜììáôïò, Þ íá õðüêåéôáé óå Üëëïõò ðåñéïñéóìïýò. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé êáôáâÜëåé ðëçñùìÞ ãéá ôï óýíïëï ôçò ïéêïíïìéêÞò áîßáò ôïõ ÐñïãñÜììáôïò, äåí åðéôñÝðåôáé Üëëç ÷ñÞóç ôïõ ÐñïãñÜììáôïò ÷ùñßò ôçí êáôáâïëÞ ðñüóèåôùí ÷ñåþóåùí. ÅðéðëÝïí, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ãéá ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí ðëçñïöïñéêÞò óå ïðïéïäÞðïôå ôñßôï ìÝñïò, ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí "öéëïîåíßáò" (hosting) Þ ÷ñïíïìåñéóôéêÞò ìßóèùóçò (timesharing), Þ ôçí ðåñáéôÝñù ÷ïñÞãçóç áäåéþí ÷ñÞóçò óå ôñßôïõò, ôçí åíïéêßáóç Þ ôçí åêìßóèùóç ôïõ ÐñïãñÜììáôïò, åêôüò åÜí ðñïâëÝðåôáé ñçôþò óôéò éó÷ýïõóåò óõìâÜóåéò âÜóåé ôùí ïðïßùí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÜ ôéò åîïõóéïäïôÞóåéò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá. Ìðïñåß íá äéáôßèåíôáé ðñüóèåôá äéêáéþìáôá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò õðü ôçí ðñïûðüèåóç ôçò êáôáâïëÞò ðñüóèåôùí ÷ñåþóåùí Þ âÜóåé äéáöïñåôéêþí Þ óõìðëçñùìáôéêþí üñùí. Ç IBM äéáôçñåß ôï äéêáßùìá íá êáèïñßóåé áí ôá åí ëüãù ðñüóèåôá äéêáéþìáôá èá êáèßóôáíôáé äéáèÝóéìá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +ÐñïäéáãñáöÝò + +Ïé ðñïäéáãñáöÝò ôïõ ÐñïãñÜììáôïò äéáôßèåíôáé óôéò åíüôçôåò Description êáé Technical Information ôùí åðéóôïëþí áíáêïßíùóçò ôïõ ÐñïãñÜììáôïò. + +ÐñïãñÜììáôá ÄÝóìçò + +Ôï Ðñüãñáììá äéáôßèåôáé ìå Üäåéá ÷ñÞóçò ùò ðáêÝôï ðïëëáðëþí ðñïúüíôùí ðïõ áðïôåëåßôáé áðü ôç ÄÝóìç ÐñïãñáììÜôùí ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åãêáôáóôÞóåé êáé íá ÷ñçóéìïðïéåß ôá ÐñïãñÜììáôá ôçò åí ëüãù ÄÝóìçò ÐñïãñáììÜôùí åíôüò ôùí ïñßùí ðïõ ôßèåíôáé óôéò Áðïäåßîåéò Äéêáéþìáôïò (Proof of Entitlement) ãéá ôï Ðñüãñáììá êáé üðùò ïñßæåôáé óôï ðáñüí Ýããñáöï Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé åîïõóéïäüôçóç ãéá ôç ìåôáâßâáóç Þ ìåôáðþëçóç ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÷ùñéóôÜ áðü ôï ðáêÝôï ðïëëáðëþí ðñïúüíôùí. ¸íá Ðñüãñáììá ðïõ ðåñéëáìâÜíåôáé óå ÄÝóìç ÐñïãñáììÜôùí ìðïñåß íá óõíïäåýåôáé áðü üñïõò Üäåéáò ÷ñÞóçò êáé ïé åí ëüãù üñïé, åÜí õðÜñ÷ïõí, äéÝðïõí ôç ÷ñÞóç ôïõ åí ëüãù ÐñïãñÜììáôïò ôçò ÄÝóìçò ÐñïãñáììÜôùí áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Óå ðåñßðôùóç áíôßèåóçò ìåôáîý ôùí üñùí, ïé üñïé ôïõ ðáñüíôïò åããñÜöïõ Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ãéá ôï Ðñüãñáììá ôçò ÄÝóìçò ÐñïãñáììÜôùí. ¼ôáí ôï äéêáßùìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ëÞîåé Þ êáôáããåëèåß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá äéáêüøåé ôç ÷ñÞóç êáé íá êáôáóôñÝøåé Þ íá åðéóôñÝøåé Üìåóá üëá ôá áíôßãñáöá ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí óôï ìÝñïò áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáöüñôùóå (download) ôá ÐñïãñÜììáôá ôçò ÄÝóìçò ÐñïãñáììÜôùí, èá ðñÝðåé íá åðéêïéíùíÞóåé ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èÝëåé íá ôïõ ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí ãéá ÷ñÞóç ðÝñáí ôùí ïñßùí ðïõ êáèïñßæïíôáé áíùôÝñù, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå Ýíáí Åêðñüóùðï ÐùëÞóåùí ôçò IBM Þ ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá, þóôå íá ôïõ ÷ïñçãçèåß ç áðáéôïýìåíç Üäåéá ÷ñÞóçò. + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôç ÄÝóìç ÐñïãñáììÜôùí ãéá ôá ïðïßá ÷ïñçãåßôáé Üäåéá ÷ñÞóçò ìå ôï Ðñüãñáììá åßíáé ôá åîÞò: +IBM MQ V9.0.3 + +×ñÞóç ìüíï áðü Õðåõèýíïõò ÁíÜðôõîçò + +ÅÜí ôï Ðñüãñáììá ðñïóäéïñßæåôáé ùò Ðñüãñáììá ðïõ ðñïïñßæåôáé ãéá "Õðåõèýíïõò ÁíÜðôõîçò" (Developers), ôï Ðñüãñáììá ìðïñåß íá ÷ñçóéìïðïéçèåß ìüíï óôá ðëáßóéá ôïõ ðåñéâÜëëïíôïò åóùôåñéêÞò áíÜðôõîçò êáé äéåíÝñãåéáò äïêéìþí óå åðßðåäï ìïíÜäáò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óå ìéá ìç÷áíÞ áíÜðôõîçò. Ìå ôïí üñï ìç÷áíÞ áíÜðôõîçò (developer machine) íïåßôáé Ýíá öõóéêü Þ åéêïíéêü ðåñéâÜëëïí åðéöÜíåéáò åñãáóßáò óôï ïðïßï åêôåëïýíôáé Ýíá êýñéï ëåéôïõñãéêü óýóôçìá êáé ôï Ðñüãñáììá, üðïõ ôï åí ëüãù ëåéôïõñãéêü óýóôçìá êáé ôï Ðñüãñáììá äåí èá åßíáé ðñïóâÜóéìá êáé äåí èá ÷ñçóéìïðïéïýíôáé áðü ðåñéóóüôåñïõò áðü Ýíáí êáèïñéóìÝíïõò õðåõèýíïõò áíÜðôõîçò (developers). Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ãéá ôçí åðåîåñãáóßá öïñôßùí åñãáóßáò ôïõ ðåñéâÜëëïíôïò ðáñáãùãÞò, ôçí ðñïóïìïßùóç öïñôßùí åñãáóßáò ôïõ ðåñéâÜëëïíôïò ðáñáãùãÞò Þ ôç äïêéìÞ ôçò åðåêôáóéìüôçôáò (scalability) ïðïéïõäÞðïôå êþäéêá, åöáñìïãÞò Þ óõóôÞìáôïò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ïðïéïäÞðïôå ôìÞìá ôïõ ÐñïãñÜììáôïò ãéá ïðïéïíäÞðïôå Üëëï óêïðü ÷ùñßò íá Ý÷åé áðïêôÞóåé ôá áðáéôïýìåíá äéêáéþìáôá ÷ñÞóçò óå ðåñéâÜëëïí ðáñáãùãÞò. + +ËåéôïõñãéêÜ ÔìÞìáôá ðïõ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôùí Áðáéôïýìåíùí ÄéêáéùìÜôùí ×ñÞóçò + +ÊáôÜ ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôçí åãêáôÜóôáóç Þ ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, äåí ëáìâÜíåôáé õðüøç ç åãêáôÜóôáóç Þ ÷ñÞóç ôùí áêüëïõèùí ëåéôïõñãéêþí ôìçìÜôùí ôïõ ÐñïãñÜììáôïò. Ìå Üëëá ëüãéá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá åãêáèéóôÜ êáé íá ÷ñçóéìïðïéåß ôá áêüëïõèá ëåéôïõñãéêÜ ôìÞìáôá ôïõ ÐñïãñÜììáôïò, âÜóåé ôùí üñùí ôçò Üäåéáò ÷ñÞóçò, áëëÜ ôá ëåéôïõñãéêÜ ôìÞìáôá áõôÜ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôï Ðñüãñáììá. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + +Ïé áêüëïõèåò ìïíÜäåò ìÝôñçóçò ìðïñåß íá äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +ÅãêáôÜóôáóç + +ÅãêáôÜóôáóç (Install) åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. ÅãêáôÜóôáóç åßíáé Ýíá åãêáôåóôçìÝíï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óå Ýíá öõóéêü Þ åéêïíéêü äßóêï ðïõ äéáôßèåôáé ãéá åêôÝëåóç óå Ýíáí õðïëïãéóôÞ. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé ÷ùñéóôü äéêáßùìá ÷ñÞóçò ãéá êÜèå ÅãêáôÜóôáóç ôïõ ÐñïãñÜììáôïò. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +ÓÇÌÁÍÔÉÊÏ: ÄÉÁÂÁÓÔÅ ÐÑÏÓÅÊÔÉÊÁ ÔÉÓ ÁÊÏËÏÕÈÅÓ ÐËÇÑÏÖÏÑÉÅÓ + +ÐáñáêÜôù ðáñïõóéÜæïíôáé äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + +1. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí +2. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò (Licensee) áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò ðáñáãùãéêÞò ÷ñÞóçò (äçëáäÞ ãéá óêïðïýò ðÝñáí áðü ôçí áîéïëüãçóç, Ýëåã÷ï, äïêéìÞ ôýðïõ "try or buy" Þ åðßäåéîç): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôçò Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM, ÷ùñßò ôñïðïðïéÞóåéò. + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò áîéïëüãçóçò, åëÝã÷ïõ, äïêéìÞò ôýðïõ "try or buy" Þ åðßäåéîçò (óõëëïãéêÜ "Áîéïëüãçóç"): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôüóï ôçò (i) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí ("¶äåéá ×ñÞóçò Áîéïëüãçóçò"), üóï êáé ôçò (ii) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM ("Óýìâáóç IPLA"), ÷ùñßò ôñïðïðïéÞóåéò. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò èá éó÷ýåé ãéá ôç äéÜñêåéá ôçò Áîéïëüãçóçò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ç Óýìâáóç IPLA èá ôåèåß áõôüìáôá óå éó÷ý åöüóïí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéëÝîåé íá äéáôçñÞóåé ôï Ðñüãñáììá ìåôÜ ôçí ÁîéïëüãçóÞ ôïõ (Þ íá áðïêôÞóåé ðñüóèåôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ãéá ÷ñÞóç ìåôÜ ôçí Áîéïëüãçóç) óõíÜðôïíôáò ìéá óýìâáóç ðñïìÞèåéáò (ð.÷. ôç ÄéåèíÞ Óýìâáóç Passport Advantage ôçò IBM Þ ôç ÄéåèíÞ Óýìâáóç Passport Advantage Express ôçò IBM) ìå ôçí IBM. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò êáé ç Óýìâáóç IPLA äåí èá éó÷ýïõí ôáõôü÷ñïíá êáé äåí ôñïðïðïéåß ç ìßá ôçí Üëëç. ÊÜèå ìßá áðü áõôÝò åßíáé áíåîÜñôçôç áðü ôçí Üëëç. + +Áêïëïõèåß ôï ðëÞñåò êåßìåíï êÜèå ìßáò áðü ôéò äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí (Z125-5543-05). + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Managed File Transfer Service V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: Evaluation + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: Evaluation + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Managed File Transfer Agent V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: Evaluation + +Ðåñßïäïò Áîéïëüãçóçò + +Ç ðåñßïäïò áîéïëüãçóçò áñ÷ßæåé êáôÜ ôçí çìåñïìçíßá ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò êáé ôåñìáôßæåôáé ìåôÜ ôçí ðáñÝëåõóç 90 çìåñþí. + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (Z125-3301-14). + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Managed File Transfer Service V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: 5724-H72 + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: 5724-H72 + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Managed File Transfer Agent V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: 5724-H72 + +¼ðùò ðåñéãñÜöåôáé óôç ÄéåèíÞ Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (International Program License Agreement - "Óýìâáóç IPLA") êáé óôéò ðáñïýóåò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò, ç IBM åê÷ùñåß óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò Ýíá ðåñéïñéóìÝíï äéêáßùìá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ôï åí ëüãù äéêáßùìá ðåñéïñßæåôáé óôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò, ôï ïðïßï ïñßæåôáé óå ÌïíÜäåò Áîßáò Åðåîåñãáóôþí (Processor Value Units - "ÌïíÜäåò PVU"), ÌïíÜäåò Áîßáò Ðüñùí (Resource Value Units - "ÌïíÜäåò RVU"), ÌïíÜäåò Áîßáò (Value Units - "ÌïíÜäåò VU") Þ ùò ïðïéïäÞðïôå Üëëï êáèïñéóìÝíï åðßðåäï ÷ñÞóçò, ãéá ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáôÝâáëå ôçí áðáéôïýìåíç ðëçñùìÞ, üðùò ôåêìçñéþíåôáé óôçí Áðüäåéîç Äéêáéþìáôïò. Ç ÷ñÞóç áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ìðïñåß åðßóçò íá ðåñéïñßæåôáé óå ìéá óõãêåêñéìÝíç ìç÷áíÞ, Þ óå ÷ñÞóç ôïõ ÐñïãñÜììáôïò ìüíï ùò Õðïóôçñéêôéêïý ÐñïãñÜììáôïò, Þ íá õðüêåéôáé óå Üëëïõò ðåñéïñéóìïýò. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé êáôáâÜëåé ðëçñùìÞ ãéá ôï óýíïëï ôçò ïéêïíïìéêÞò áîßáò ôïõ ÐñïãñÜììáôïò, äåí åðéôñÝðåôáé Üëëç ÷ñÞóç ôïõ ÐñïãñÜììáôïò ÷ùñßò ôçí êáôáâïëÞ ðñüóèåôùí ÷ñåþóåùí. ÅðéðëÝïí, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ãéá ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí ðëçñïöïñéêÞò óå ïðïéïäÞðïôå ôñßôï ìÝñïò, ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí "öéëïîåíßáò" (hosting) Þ ÷ñïíïìåñéóôéêÞò ìßóèùóçò (timesharing), Þ ôçí ðåñáéôÝñù ÷ïñÞãçóç áäåéþí ÷ñÞóçò óå ôñßôïõò, ôçí åíïéêßáóç Þ ôçí åêìßóèùóç ôïõ ÐñïãñÜììáôïò, åêôüò åÜí ðñïâëÝðåôáé ñçôþò óôéò éó÷ýïõóåò óõìâÜóåéò âÜóåé ôùí ïðïßùí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÜ ôéò åîïõóéïäïôÞóåéò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá. Ìðïñåß íá äéáôßèåíôáé ðñüóèåôá äéêáéþìáôá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò õðü ôçí ðñïûðüèåóç ôçò êáôáâïëÞò ðñüóèåôùí ÷ñåþóåùí Þ âÜóåé äéáöïñåôéêþí Þ óõìðëçñùìáôéêþí üñùí. Ç IBM äéáôçñåß ôï äéêáßùìá íá êáèïñßóåé áí ôá åí ëüãù ðñüóèåôá äéêáéþìáôá èá êáèßóôáíôáé äéáèÝóéìá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +Ïé ðñïäéáãñáöÝò ôïõ ÐñïãñÜììáôïò äéáôßèåíôáé óôéò åíüôçôåò Description êáé Technical Information ôùí åðéóôïëþí áíáêïßíùóçò ôïõ ÐñïãñÜììáôïò. + +ÁíáäéáíåìçôÝá Óôïé÷åßá + +ÅÜí ôï Ðñüãñáììá ðåñéëáìâÜíåé ëåéôïõñãéêÜ ôìÞìáôá ðïõ åßíáé ÁíáäéáíåìçôÝá, ôüôå áõôÜ èá ðñïóäéïñßæïíôáé óôï áñ÷åßï REDIST ðïõ óõíïäåýåé ôï Ðñüãñáììá. ÅðéðëÝïí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ÷ïñçãïýíôáé óôç Óýìâáóç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá äéáíÝìåé ôá ÁíáäéáíåìçôÝá Óôïé÷åßá õðü ôïõò áêüëïõèïõò üñïõò: +1) Ç áíáäéáíïìÞ ðñÝðåé íá ãßíåôáé ìüíï óå ìïñöÞ êþäéêá áíôéêåéìÝíïõ (object code) êáé íá óõììïñöþíåôáé ìå üëåò ôéò êáôåõèõíôÞñéåò ãñáììÝò, ïäçãßåò êáé ðñïäéáãñáöÝò ðïõ ðáñÝ÷ïíôáé óôï áñ÷åßï REDIST Þ óôçí ôåêìçñßùóç ðïõ óõíïäåýåé ôï Ðñüãñáììá, +2) ÅÜí óôçí ôåêìçñßùóç ðïõ óõíïäåýåé ôï Ðñüãñáììá åðéôñÝðåôáé ñçôþò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò íá ôñïðïðïéåß ôá ÁíáäéáíåìçôÝá Óôïé÷åßá, ç åí ëüãù ôñïðïðïßçóç ðñÝðåé íá óõììïñöþíåôáé ìå üëåò ôéò êáôåõèõíôÞñéåò ãñáììÝò, ïäçãßåò êáé ðñïäéáãñáöÝò ðïõ ðáñÝ÷ïíôáé óôçí åí ëüãù ôåêìçñßùóç êáé ôÝôïéåò ôñïðïðïéÞóåéò, åÜí ðñáãìáôïðïéïýíôáé, ðñÝðåé íá áíôéìåôùðßæïíôáé ùò ÁíáäéáíåìçôÝá Óôïé÷åßá, +3) Ôá ÁíáäéáíåìçôÝá Óôïé÷åßá åðéôñÝðåôáé íá äéáíÝìïíôáé ìüíï ùò ôìÞìá ôçò åöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ðïõ áíáðôý÷èçêå ìå ÷ñÞóç ôïõ ÐñïãñÜììáôïò ("ÅöáñìïãÞ ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò") êáé ìüíï ãéá ôçí õðïóôÞñéîç ôùí ðåëáôþí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óå óõíÜñôçóç ìå ôçí åê ìÝñïõò ôïõò ÷ñÞóç ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Ç EöáñìïãÞ ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ðñÝðåé íá áíôéðñïóùðåýåé ìéá óçìáíôéêÞ ðñïóôéèÝìåíç áîßá óôï âáèìü ðïõ ôá ÁíáäéáíåìçôÝá Óôïé÷åßá äåí áðïôåëïýí ïõóéáóôéêü êßíçôñï ãéá ôçí áðüêôçóç ôïõ ðñïúüíôïò ëïãéóìéêïý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò áðü ôåëéêïýò ÷ñÞóôåò, +4) ÅÜí óôá ÁíáäéáíåìçôÝá Óôïé÷åßá ðåñéëáìâÜíåôáé Ýíá ðåñéâÜëëïí JRE (Java Runtime Environment), ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá ðåñéëáìâÜíåé åðßóçò Üëëá ÁíáäéáíåìçôÝá Óôïé÷åßá ìç-Java óôçí ÅöáñìïãÞ ôïõ, åêôüò åÜí ç ÅöáñìïãÞ Ý÷åé ó÷åäéáóôåß ìüíï ãéá åêôÝëåóç óå õðïëïãéóôéêÝò óõóêåõÝò ãåíéêÞò ÷ñÞóçò (ãéá ðáñÜäåéãìá: óå öïñçôïýò õðïëïãéóôÝò, åðéôñáðÝæéïõò õðïëïãéóôÝò êáé åîõðçñåôçôÞò) êáé ü÷é óå óõóêåõÝò ÷åéñüò êáé Üëëåò åöáñìïóìÝíåò (pervasive) óõóêåõÝò (äçëáäÞ, óõóêåõÝò ðïõ ðåñéëáìâÜíïõí ìéêñïåðåîåñãáóôÞ áëëÜ äåí Ý÷ïõí ùò êýñéï óêïðü ôçí åêôÝëåóç ëåéôïõñãéþí õðïëïãéóôÞ), +5) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åðéôñÝðåôáé íá áöáéñÝóåé áñ÷åßá ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ÁíáäéáíåìçôÝá Óôïé÷åßá, +6) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá êáëýðôåé ôçí IBM, ôïõò ðñïìçèåõôÝò ôçò êáé ôïõò äéáíïìåßò ôçò Ýíáíôé ïðïéáóäÞðïôå áîßùóçò ðïõ áðïññÝåé áðü ôç ÷ñÞóç Þ ôç äéáíïìÞ ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, +7) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåß ôï ßäéï üíïìá äéáäñïìÞò (path name) ìå ôá ðñùôüôõðá ÁíáäéáíåìçôÝá áñ÷åßá/åíüôçôåò, +8) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåß åðùíõìßåò Þ åìðïñéêÜ óÞìáôá ôçò IBM, ôùí ðñïìçèåõôþí ôçò Þ ôùí äéáíïìÝùí ôçò óå óõíÜñôçóç ìå ôçí ðñïþèçóç ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ÷ùñßò ôçí åê ôùí ðñïôÝñùí Ýããñáöç óõãêáôÜèåóç ôçò IBM Þ ôïõ åí ëüãù ðñïìçèåõôÞ Þ äéáíïìÝá, +9) Ç IBM, ïé ðñïìçèåõôÝò ôçò êáé ïé äéáíïìåßò ôçò ðáñÝ÷ïõí ôá ÁíáäéáíåìçôÝá Óôïé÷åßá êáé ôç ó÷åôéêÞ ôåêìçñßùóç ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ, +10) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé õðåýèõíïò ãéá ôçí ðáñï÷Þ ïðïéáóäÞðïôå ôå÷íéêÞò õðïóôÞñéîçò ãéá ôçí ÅöáñìïãÞ ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, êáèþò êáé ãéá ïðïéåóäÞðïôå ôñïðïðïéÞóåéò óôá ÁíáäéáíåìçôÝá Óôïé÷åßá, êáé +11) Óôç óýìâáóç Üäåéáò ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ìå ôïí ôåëéêü ÷ñÞóôç ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, ï ôåëéêüò ÷ñÞóôçò ðñÝðåé íá åéäïðïéåßôáé üôé ôá ÁíáäéáíåìçôÝá Óôïé÷åßá Þ ïé ôñïðïðïéÞóåéò ôïõò äåí åðéôñÝðåôáé i) íá ÷ñçóéìïðïéïýíôáé ãéá ïðïéïíäÞðïôå Üëëï óêïðü ðáñÜ ìüíï ãéá íá êáèéóôïýí äõíáôÞ ôç ÷ñÞóç ôçò ÅöáñìïãÞò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, ii) íá áíôéãñÜöïíôáé (ðáñÜ ìüíï ãéá ëüãïõò åöåäñéêÞò áðïèÞêåõóçò), iii) íá äéáíÝìïíôáé Þ íá ìåôáâéâÜæïíôáé ðåñáéôÝñù ÷ùñßò ôçí ÅöáñìïãÞ ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, Þ iv) íá õößóôáíôáé áíôßóôñïöç óõìâïëïìåôÜöñáóç (reverse assembly), áíôßóôñïöç ìåôáãëþôôéóç (reverse compilation) Þ Üëëïõ åßäïõò ìåôÜöñáóç, ðáñÜ ìüíï óôï âáèìü ðïõ åðéôñÝðåôáé ñçôþò áðü ôï åöáñìïóôÝï äßêáéï ÷ùñßò íá õðÜñ÷åé ç äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò áðü áõôü ôï äéêáßùìá. ÅðéðëÝïí, ç óýìâáóç Üäåéáò ÷ñÞóçò ðñÝðåé íá ðáñÝ÷åé ôïõëÜ÷éóôïí éóïäýíáìç ðñïóôáóßá ôùí äéêáéùìÜôùí ôçò ÉÂÌ ìå áõôÞ ðïõ ðáñÝ÷åôáé áðü ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + +Ãéá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ ÕëéêÜ ÄåéãìÜôùí ðïõ ðåñéëáìâÜíïíôáé óôç ëßóôá ôïõ áñ÷åßïõ REDIST åíüò ÐñïãñÜììáôïò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá ðñïâáßíåé óôçí áíáäéáíïìÞ ôñïðïðïéçìÝíùí åêäï÷þí ôùí åí ëüãù Ëåéôïõñãéêþí ÔìçìÜôùí Ðçãáßïõ Êþäéêá Þ ÕëéêÜ ÄåéãìÜôùí óýìöùíá ìå ôïõò üñïõò ôçò ðáñïýóáò Üäåéáò ÷ñÞóçò êáé óýìöùíá ìå ïðïéåóäÞðïôå ïäçãßåò óôï áñ÷åßï REDIST. + +ÅãêáôÜóôáóç + +ÅãêáôÜóôáóç (Install) åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. ÅãêáôÜóôáóç åßíáé Ýíá åãêáôåóôçìÝíï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óå Ýíá öõóéêü Þ åéêïíéêü äßóêï ðïõ äéáôßèåôáé ãéá åêôÝëåóç óå Ýíáí õðïëïãéóôÞ. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé ÷ùñéóôü äéêáßùìá ÷ñÞóçò ãéá êÜèå ÅãêáôÜóôáóç ôïõ ÐñïãñÜììáôïò. + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (ÌïíÜäá PVU) + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (Processor Value Unit - "ÌïíÜäá PVU") åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ï áñéèìüò ôùí áðáéôïýìåíùí äéêáéùìÜôùí åðß ìïíÜäùí PVU âáóßæåôáé óôç ÷ñçóéìïðïéïýìåíç ôå÷íïëïãßá åðåîåñãáóôþí (ç ïðïßá ïñßæåôáé óôïí Ðßíáêá PVU áíÜ ÐñïìçèåõôÞ ÅðåîåñãáóôÞ, Êáôçãïñßá Ðñïúüíôïò (Brand), Ôýðï êáé Êùäéêü ÌïíôÝëïõ óôç äéåýèõíóç http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) êáé óôïí áñéèìü ôùí åðåîåñãáóôþí ðïõ êáèßóôáíôáé äéáèÝóéìïé óôï Ðñüãñáììá. Ãéá ôïõò óêïðïýò ôçò ÷ïñÞãçóçò áäåéþí ÷ñÞóçò âÜóåé ìïíÜäùí PVU, ç ÉÂÌ åîáêïëïõèåß íá ïñßæåé ôïí üñï "åðåîåñãáóôÞò" ùò ôïí êÜèå ðõñÞíá åðåîåñãáóôÞ (processor core) óå Ýíá ïëïêëçñùìÝíï êýêëùìá (chip). Ãéá ðáñÜäåéãìá, Ýíá ïëïêëçñùìÝíï êýêëùìá åðåîåñãáóôÞ äéðëïý ðõñÞíá (dual-core) äéáèÝôåé äýï ðõñÞíåò åðåîåñãáóôÞ. + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá èÝóåé ôï Ðñüãñáììá óå åöáñìïãÞ ÷ñçóéìïðïéþíôáò åßôå Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò (Full Capacity) åßôå Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò (Virtualization Capacity) Þ ÌåéùìÝíçò Äõíáìéêüôçôáò (Sub-Capacity), óýìöùíá ìå ôïõò ¼ñïõò ×ïñÞãçóçò Áäåéþí ×ñÞóçò ÌåéùìÝíçò Äõíáìéêüôçôáò Passport Advantage (âë. ôçí ðáñáêÜôù éóôïóåëßäá). ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá åðß ìïíÜäùí PVU þóôå íá êáëýðôïíôáé üëïé ïé åíåñãïðïéçìÝíïé* ðõñÞíåò åðåîåñãáóôþí óôï öõóéêü ðåñéâÜëëïí õëéêïý åîïðëéóìïý ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, ìå ôçí åîáßñåóç ôùí åîõðçñåôçôþí áðü ôïõò ïðïßïõò ôï Ðñüãñáììá Ý÷åé áöáéñåèåß ìïíßìùò. ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá ãéá ôçí êÜëõøç üëôùí ôùí åíåñãïðïéçìÝíùí ðõñÞíùí åðåîåñãáóôþí ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, üðùò ïñßæåôáé óýìöùíá ìå ôïõò Êáíüíåò ÊáôáìÝôñçóçò Áäåéþí ×ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò óôçí éóôïóåëßäá http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* ÅíåñãïðïéçìÝíïò ðõñÞíáò åðåîåñãáóôÞ åßíáé Ýíáò ðõñÞíáò åðåîåñãáóôÞ ðïõ åßíáé äéáèÝóéìïò ãéá ÷ñÞóç óå Ýíáí õëéêü Þ åéêïíéêü åîõðçñåôçôÞ, áíåîÜñôçôá áðü ôï åÜí ç äõíáìéêüôçôá ôïõ ðõñÞíá åðåîåñãáóôÞ ìðïñåß íá ðåñéïñéóôåß Þ ðåñéïñßæåôáé ìå ôç ÷ñÞóç ôå÷íïëïãéþí åéêïíéêïðïßçóçò (virtualization), åíôïëþí ôïõ ëåéôïõñãéêïý óõóôÞìáôïò, ðáñáìåôñïðïßçóçò ôïõ BIOS Þ ðáñüìïéùí ðåñéïñéóôéêþí ñõèìßóåùí. + +¼ñïé ãéá ôï ÓõãêåêñéìÝíï Ðñüãñáììá + +ÄéáôÜîåéò Idle Standby + +Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò Üñèñïõ, ìéá äéÜôáîç "Idle Standby" åßíáé ìéá äéÜôáîç üðïõ Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò åßíáé åãêáôåóôçìÝíï óå Ýíáí åîõðçñåôçôÞ ðïõ áðïôåëåß ìÝñïò ìéáò ëýóçò õøçëÞò äéáèåóéìüôçôáò êáé åßíáé ï åîõðçñåôçôÞò óôïí ïðïßï ãßíåôáé áõôüìáôç ìåôáãùãÞ ôïõ ÐñïãñÜììáôïò óå ðåñßðôùóç ðïõ ðÜøåé íá åßíáé äõíáôÞ ç ÷ñÞóç ôïõ áíôéãñÜöïõ ôïõ ÐñïãñÜììáôïò ðïõ åßíáé åãêáôåóôçìÝíï óôïí åíåñãü åîõðçñåôçôÞ. ¸íáò åîõðçñåôçôÞò èåùñåßôáé "áäñáíÞò" (idle) ìüíï åÜí, ìÝ÷ñé íá ðñáãìáôïðïéçèåß ìéá áõôüìáôç ìåôáãùãÞ (failover), ÷ñçóéìïðïéåßôáé áðïêëåéóôéêÜ ãéá ôçí åêôÝëåóç äéá÷åéñéóôéêþí åíåñãåéþí ðïõ ðáñÝ÷ïõí õðïóôÞñéîç óå óåíÜñéá áõôüìáôçò ìåôáãùãÞò. + +Äåí åðéôñÝðåôáé ç åãêáôÜóôáóç ôïõ ÐñïãñÜììáôïò óå Ýíáí åîõðçñåôçôÞ Idle Standby åêôüò åÜí Ý÷åé áðïêôçèåß ç êáôÜëëçëç Üäåéá ÷ñÞóçò. + +ÅÜí ôï Ðñüãñáììá ÷ñçóéìïðïéåßôáé óå ìéá äéÜôáîç Idle Standby ìå ôç ëåéôïõñãßá Multi-Instance Queue Manager, ôüôå åðéôñÝðåôáé íá åßíáé åãêáôåóôçìÝíï, êáé íá âñßóêåôáé óå ëåéôïõñãßá, Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò ãéá óêïðïýò åöåäñéêÞò õðïóôÞñéîçò óå Ýíáí åîõðçñåôçôÞ Idle Standby, áëëÜ ôï Ðñüãñáììá ðñÝðåé íá ðáñáìÝíåé "áíåíåñãü" (idle) êáé äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ïðïéïõäÞðïôå åßäïõò, åêôüò åÜí ãßíåé áõôüìáôç ìåôáãùãÞ (failover) ôïõ åíåñãïý åîõðçñåôçôÞ óôïí åîõðçñåôçôÞ Idle Standby, óôçí ïðïßá ðåñßðôùóç åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ôï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óôïí åîõðçñåôçôÞ Idle Standby ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ãéá ôç äéÜñêåéá ôçò ðåñéüäïõ ìåôáãùãÞò. + +ÅÜí ôï Ðñüãñáììá ÷ñçóéìïðïéåßôáé óå ìéá äéÜôáîç Idle Standby ìå Üëëá óõóôÞìáôá ÕøçëÞò Äéáèåóéìüôçôáò (High Availability), ôüôå Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò åðéôñÝðåôáé íá åßíáé åãêáôåóôçìÝíï ãéá óêïðïýò åöåäñéêÞò õðïóôÞñéîçò óå Ýíáí åîõðçñåôçôÞ Idle Standby, áëëÜ äåí åðéôñÝðåôáé íá âñßóêåôáé óå ëåéôïõñãßá (êáé êáôÜ óõíÝðåéá äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ïðïéïõäÞðïôå åßäïõò), áëëÜ èá åíåñãïðïéçèåß áõôüìáôá áðü ôá ëåéôïõñãéêÜ ôìÞìáôá ôçò ëýóçò ÕøçëÞò Äéáèåóéìüôçôáò óå ðåñßðôùóç äõóëåéôïõñãßáò ôïõ åíåñãïý åîõðçñåôçôÞ, óôçí ïðïßá ðåñßðôùóç åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ôï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óôïí åîõðçñåôçôÞ Idle Standby ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ãéá ôç äéÜñêåéá ôçò ðåñéüäïõ ìåôáãùãÞò. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +ÓÇÌÁÍÔÉÊÏ: ÄÉÁÂÁÓÔÅ ÐÑÏÓÅÊÔÉÊÁ ÔÉÓ ÁÊÏËÏÕÈÅÓ ÐËÇÑÏÖÏÑÉÅÓ + +ÐáñáêÜôù ðáñïõóéÜæïíôáé äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + +1. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí +2. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò (Licensee) áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò ðáñáãùãéêÞò ÷ñÞóçò (äçëáäÞ ãéá óêïðïýò ðÝñáí áðü ôçí áîéïëüãçóç, Ýëåã÷ï, äïêéìÞ ôýðïõ "try or buy" Þ åðßäåéîç): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôçò Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM, ÷ùñßò ôñïðïðïéÞóåéò. + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò áîéïëüãçóçò, åëÝã÷ïõ, äïêéìÞò ôýðïõ "try or buy" Þ åðßäåéîçò (óõëëïãéêÜ "Áîéïëüãçóç"): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôüóï ôçò (i) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí ("¶äåéá ×ñÞóçò Áîéïëüãçóçò"), üóï êáé ôçò (ii) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM ("Óýìâáóç IPLA"), ÷ùñßò ôñïðïðïéÞóåéò. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò èá éó÷ýåé ãéá ôç äéÜñêåéá ôçò Áîéïëüãçóçò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ç Óýìâáóç IPLA èá ôåèåß áõôüìáôá óå éó÷ý åöüóïí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéëÝîåé íá äéáôçñÞóåé ôï Ðñüãñáììá ìåôÜ ôçí ÁîéïëüãçóÞ ôïõ (Þ íá áðïêôÞóåé ðñüóèåôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ãéá ÷ñÞóç ìåôÜ ôçí Áîéïëüãçóç) óõíÜðôïíôáò ìéá óýìâáóç ðñïìÞèåéáò (ð.÷. ôç ÄéåèíÞ Óýìâáóç Passport Advantage ôçò IBM Þ ôç ÄéåèíÞ Óýìâáóç Passport Advantage Express ôçò IBM) ìå ôçí IBM. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò êáé ç Óýìâáóç IPLA äåí èá éó÷ýïõí ôáõôü÷ñïíá êáé äåí ôñïðïðïéåß ç ìßá ôçí Üëëç. ÊÜèå ìßá áðü áõôÝò åßíáé áíåîÜñôçôç áðü ôçí Üëëç. + +Áêïëïõèåß ôï ðëÞñåò êåßìåíï êÜèå ìßáò áðü ôéò äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí (Z125-5543-05). + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Advanced Message Security V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: Evaluation + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: Evaluation + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Telemetry V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: Evaluation + +Ðåñßïäïò Áîéïëüãçóçò + +Ç ðåñßïäïò áîéïëüãçóçò áñ÷ßæåé êáôÜ ôçí çìåñïìçíßá ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò êáé ôåñìáôßæåôáé ìåôÜ ôçí ðáñÝëåõóç 90 çìåñþí. + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + + + +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (Z125-3301-14). + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Advanced Message Security V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: 5724-H72 + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: 5724-H72 + +¼íïìá ÐñïãñÜììáôïò: IBM MQ Telemetry V9.0.1 +Áñéèìüò ÐñïãñÜììáôïò: 5724-H72 + +¼ðùò ðåñéãñÜöåôáé óôç ÄéåèíÞ Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò (International Program License Agreement - "Óýìâáóç IPLA") êáé óôéò ðáñïýóåò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò, ç IBM åê÷ùñåß óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò Ýíá ðåñéïñéóìÝíï äéêáßùìá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ôï åí ëüãù äéêáßùìá ðåñéïñßæåôáé óôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò, ôï ïðïßï ïñßæåôáé óå ÌïíÜäåò Áîßáò Åðåîåñãáóôþí (Processor Value Units - "ÌïíÜäåò PVU"), ÌïíÜäåò Áîßáò Ðüñùí (Resource Value Units - "ÌïíÜäåò RVU"), ÌïíÜäåò Áîßáò (Value Units - "ÌïíÜäåò VU") Þ ùò ïðïéïäÞðïôå Üëëï êáèïñéóìÝíï åðßðåäï ÷ñÞóçò, ãéá ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáôÝâáëå ôçí áðáéôïýìåíç ðëçñùìÞ, üðùò ôåêìçñéþíåôáé óôçí Áðüäåéîç Äéêáéþìáôïò. Ç ÷ñÞóç áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ìðïñåß åðßóçò íá ðåñéïñßæåôáé óå ìéá óõãêåêñéìÝíç ìç÷áíÞ, Þ óå ÷ñÞóç ôïõ ÐñïãñÜììáôïò ìüíï ùò Õðïóôçñéêôéêïý ÐñïãñÜììáôïò, Þ íá õðüêåéôáé óå Üëëïõò ðåñéïñéóìïýò. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé êáôáâÜëåé ðëçñùìÞ ãéá ôï óýíïëï ôçò ïéêïíïìéêÞò áîßáò ôïõ ÐñïãñÜììáôïò, äåí åðéôñÝðåôáé Üëëç ÷ñÞóç ôïõ ÐñïãñÜììáôïò ÷ùñßò ôçí êáôáâïëÞ ðñüóèåôùí ÷ñåþóåùí. ÅðéðëÝïí, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ãéá ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí ðëçñïöïñéêÞò óå ïðïéïäÞðïôå ôñßôï ìÝñïò, ôçí ðáñï÷Þ åìðïñéêþí õðçñåóéþí "öéëïîåíßáò" (hosting) Þ ÷ñïíïìåñéóôéêÞò ìßóèùóçò (timesharing), Þ ôçí ðåñáéôÝñù ÷ïñÞãçóç áäåéþí ÷ñÞóçò óå ôñßôïõò, ôçí åíïéêßáóç Þ ôçí åêìßóèùóç ôïõ ÐñïãñÜììáôïò, åêôüò åÜí ðñïâëÝðåôáé ñçôþò óôéò éó÷ýïõóåò óõìâÜóåéò âÜóåé ôùí ïðïßùí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÜ ôéò åîïõóéïäïôÞóåéò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá. Ìðïñåß íá äéáôßèåíôáé ðñüóèåôá äéêáéþìáôá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò õðü ôçí ðñïûðüèåóç ôçò êáôáâïëÞò ðñüóèåôùí ÷ñåþóåùí Þ âÜóåé äéáöïñåôéêþí Þ óõìðëçñùìáôéêþí üñùí. Ç IBM äéáôçñåß ôï äéêáßùìá íá êáèïñßóåé áí ôá åí ëüãù ðñüóèåôá äéêáéþìáôá èá êáèßóôáíôáé äéáèÝóéìá óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +Ïé ðñïäéáãñáöÝò ôïõ ÐñïãñÜììáôïò äéáôßèåíôáé óôéò åíüôçôåò Description êáé Technical Information ôùí åðéóôïëþí áíáêïßíùóçò ôïõ ÐñïãñÜììáôïò. + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + +ÅãêáôÜóôáóç + +ÅãêáôÜóôáóç (Install) åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. ÅãêáôÜóôáóç åßíáé Ýíá åãêáôåóôçìÝíï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óå Ýíá öõóéêü Þ åéêïíéêü äßóêï ðïõ äéáôßèåôáé ãéá åêôÝëåóç óå Ýíáí õðïëïãéóôÞ. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé ÷ùñéóôü äéêáßùìá ÷ñÞóçò ãéá êÜèå ÅãêáôÜóôáóç ôïõ ÐñïãñÜììáôïò. + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (ÌïíÜäá PVU) + +ÌïíÜäá Áîßáò ÅðåîåñãáóôÞ (Processor Value Unit - "ÌïíÜäá PVU") åßíáé ìéá ìïíÜäá ìÝôñçóçò âÜóåé ôçò ïðïßáò ìðïñåß íá ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. Ï áñéèìüò ôùí áðáéôïýìåíùí äéêáéùìÜôùí åðß ìïíÜäùí PVU âáóßæåôáé óôç ÷ñçóéìïðïéïýìåíç ôå÷íïëïãßá åðåîåñãáóôþí (ç ïðïßá ïñßæåôáé óôïí Ðßíáêá PVU áíÜ ÐñïìçèåõôÞ ÅðåîåñãáóôÞ, Êáôçãïñßá Ðñïúüíôïò (Brand), Ôýðï êáé Êùäéêü ÌïíôÝëïõ óôç äéåýèõíóç http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) êáé óôïí áñéèìü ôùí åðåîåñãáóôþí ðïõ êáèßóôáíôáé äéáèÝóéìïé óôï Ðñüãñáììá. Ãéá ôïõò óêïðïýò ôçò ÷ïñÞãçóçò áäåéþí ÷ñÞóçò âÜóåé ìïíÜäùí PVU, ç ÉÂÌ åîáêïëïõèåß íá ïñßæåé ôïí üñï "åðåîåñãáóôÞò" ùò ôïí êÜèå ðõñÞíá åðåîåñãáóôÞ (processor core) óå Ýíá ïëïêëçñùìÝíï êýêëùìá (chip). Ãéá ðáñÜäåéãìá, Ýíá ïëïêëçñùìÝíï êýêëùìá åðåîåñãáóôÞ äéðëïý ðõñÞíá (dual-core) äéáèÝôåé äýï ðõñÞíåò åðåîåñãáóôÞ. + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá èÝóåé ôï Ðñüãñáììá óå åöáñìïãÞ ÷ñçóéìïðïéþíôáò åßôå Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò (Full Capacity) åßôå Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò (Virtualization Capacity) Þ ÌåéùìÝíçò Äõíáìéêüôçôáò (Sub-Capacity), óýìöùíá ìå ôïõò ¼ñïõò ×ïñÞãçóçò Áäåéþí ×ñÞóçò ÌåéùìÝíçò Äõíáìéêüôçôáò Passport Advantage (âë. ôçí ðáñáêÜôù éóôïóåëßäá). ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò ÐëÞñïõò Äõíáìéêüôçôáò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá åðß ìïíÜäùí PVU þóôå íá êáëýðôïíôáé üëïé ïé åíåñãïðïéçìÝíïé* ðõñÞíåò åðåîåñãáóôþí óôï öõóéêü ðåñéâÜëëïí õëéêïý åîïðëéóìïý ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, ìå ôçí åîáßñåóç ôùí åîõðçñåôçôþí áðü ôïõò ïðïßïõò ôï Ðñüãñáììá Ý÷åé áöáéñåèåß ìïíßìùò. ÅÜí ÷ñçóéìïðïéåß Üäåéåò ÷ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá áðïêôÞóåé åðáñêÞ äéêáéþìáôá ãéá ôçí êÜëõøç üëôùí ôùí åíåñãïðïéçìÝíùí ðõñÞíùí åðåîåñãáóôþí ïé ïðïßïé Ý÷ïõí ôåèåß óôç äéÜèåóç ôïõ ÐñïãñÜììáôïò Þ ôïõò ïðïßïõò äéá÷åéñßæåôáé ôï Ðñüãñáììá, üðùò ïñßæåôáé óýìöùíá ìå ôïõò Êáíüíåò ÊáôáìÝôñçóçò Áäåéþí ×ñÞóçò Äõíáìéêüôçôáò Åéêïíéêïðïßçóçò óôçí éóôïóåëßäá http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* ÅíåñãïðïéçìÝíïò ðõñÞíáò åðåîåñãáóôÞ åßíáé Ýíáò ðõñÞíáò åðåîåñãáóôÞ ðïõ åßíáé äéáèÝóéìïò ãéá ÷ñÞóç óå Ýíáí õëéêü Þ åéêïíéêü åîõðçñåôçôÞ, áíåîÜñôçôá áðü ôï åÜí ç äõíáìéêüôçôá ôïõ ðõñÞíá åðåîåñãáóôÞ ìðïñåß íá ðåñéïñéóôåß Þ ðåñéïñßæåôáé ìå ôç ÷ñÞóç ôå÷íïëïãéþí åéêïíéêïðïßçóçò (virtualization), åíôïëþí ôïõ ëåéôïõñãéêïý óõóôÞìáôïò, ðáñáìåôñïðïßçóçò ôïõ BIOS Þ ðáñüìïéùí ðåñéïñéóôéêþí ñõèìßóåùí. + +¼ñïé ãéá ôï ÓõãêåêñéìÝíï Ðñüãñáììá + +ÄéáôÜîåéò Idle Standby + +Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò Üñèñïõ, ìéá äéÜôáîç "Idle Standby" åßíáé ìéá äéÜôáîç üðïõ Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò åßíáé åãêáôåóôçìÝíï óå Ýíáí åîõðçñåôçôÞ ðïõ áðïôåëåß ìÝñïò ìéáò ëýóçò õøçëÞò äéáèåóéìüôçôáò êáé åßíáé ï åîõðçñåôçôÞò óôïí ïðïßï ãßíåôáé áõôüìáôç ìåôáãùãÞ ôïõ ÐñïãñÜììáôïò óå ðåñßðôùóç ðïõ ðÜøåé íá åßíáé äõíáôÞ ç ÷ñÞóç ôïõ áíôéãñÜöïõ ôïõ ÐñïãñÜììáôïò ðïõ åßíáé åãêáôåóôçìÝíï óôïí åíåñãü åîõðçñåôçôÞ. ¸íáò åîõðçñåôçôÞò èåùñåßôáé "áäñáíÞò" (idle) ìüíï åÜí, ìÝ÷ñé íá ðñáãìáôïðïéçèåß ìéá áõôüìáôç ìåôáãùãÞ (failover), ÷ñçóéìïðïéåßôáé áðïêëåéóôéêÜ ãéá ôçí åêôÝëåóç äéá÷åéñéóôéêþí åíåñãåéþí ðïõ ðáñÝ÷ïõí õðïóôÞñéîç óå óåíÜñéá áõôüìáôçò ìåôáãùãÞò. + +Äåí åðéôñÝðåôáé ç åãêáôÜóôáóç ôïõ ÐñïãñÜììáôïò óå Ýíáí åîõðçñåôçôÞ Idle Standby åêôüò åÜí Ý÷åé áðïêôçèåß ç êáôÜëëçëç Üäåéá ÷ñÞóçò. + +ÅÜí ôï Ðñüãñáììá ÷ñçóéìïðïéåßôáé óå ìéá äéÜôáîç Idle Standby ìå ôç ëåéôïõñãßá Multi-Instance Queue Manager, ôüôå åðéôñÝðåôáé íá åßíáé åãêáôåóôçìÝíï, êáé íá âñßóêåôáé óå ëåéôïõñãßá, Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò ãéá óêïðïýò åöåäñéêÞò õðïóôÞñéîçò óå Ýíáí åîõðçñåôçôÞ Idle Standby, áëëÜ ôï Ðñüãñáììá ðñÝðåé íá ðáñáìÝíåé "áíåíåñãü" (idle) êáé äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ïðïéïõäÞðïôå åßäïõò, åêôüò åÜí ãßíåé áõôüìáôç ìåôáãùãÞ (failover) ôïõ åíåñãïý åîõðçñåôçôÞ óôïí åîõðçñåôçôÞ Idle Standby, óôçí ïðïßá ðåñßðôùóç åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ôï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óôïí åîõðçñåôçôÞ Idle Standby ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ãéá ôç äéÜñêåéá ôçò ðåñéüäïõ ìåôáãùãÞò. + +ÅÜí ôï Ðñüãñáììá ÷ñçóéìïðïéåßôáé óå ìéá äéÜôáîç Idle Standby ìå Üëëá óõóôÞìáôá ÕøçëÞò Äéáèåóéìüôçôáò (High Availability), ôüôå Ýíá áíôßãñáöï ôïõ ÐñïãñÜììáôïò åðéôñÝðåôáé íá åßíáé åãêáôåóôçìÝíï ãéá óêïðïýò åöåäñéêÞò õðïóôÞñéîçò óå Ýíáí åîõðçñåôçôÞ Idle Standby, áëëÜ äåí åðéôñÝðåôáé íá âñßóêåôáé óå ëåéôïõñãßá (êáé êáôÜ óõíÝðåéá äåí åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ïðïéïõäÞðïôå åßäïõò), áëëÜ èá åíåñãïðïéçèåß áõôüìáôá áðü ôá ëåéôïõñãéêÜ ôìÞìáôá ôçò ëýóçò ÕøçëÞò Äéáèåóéìüôçôáò óå ðåñßðôùóç äõóëåéôïõñãßáò ôïõ åíåñãïý åîõðçñåôçôÞ, óôçí ïðïßá ðåñßðôùóç åðéôñÝðåôáé íá ÷ñçóéìïðïéåßôáé ôï áíôßãñáöï ôïõ ÐñïãñÜììáôïò óôïí åîõðçñåôçôÞ Idle Standby ãéá ôçí åêôÝëåóç ðáñáãùãéêþí åñãáóéþí ãéá ôç äéÜñêåéá ôçò ðåñéüäïõ ìåôáãùãÞò. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +ÓÇÌÁÍÔÉÊÏ: ÄÉÁÂÁÓÔÅ ÐÑÏÓÅÊÔÉÊÁ ÔÉÓ ÁÊÏËÏÕÈÅÓ ÐËÇÑÏÖÏÑÉÅÓ + +ÐáñáêÜôù ðáñïõóéÜæïíôáé äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + +1. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí +2. ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò (Licensee) áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò ðáñáãùãéêÞò ÷ñÞóçò (äçëáäÞ ãéá óêïðïýò ðÝñáí áðü ôçí áîéïëüãçóç, Ýëåã÷ï, äïêéìÞ ôýðïõ "try or buy" Þ åðßäåéîç): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôçò Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM, ÷ùñßò ôñïðïðïéÞóåéò. + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé ôï Ðñüãñáììá ãéá óêïðïýò áîéïëüãçóçò, åëÝã÷ïõ, äïêéìÞò ôýðïõ "try or buy" Þ åðßäåéîçò (óõëëïãéêÜ "Áîéïëüãçóç"): Ðáôþíôáò ôï ðáñáêÜôù êïõìðß "ÁðïäÝ÷ïìáé" (Accept), o Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ôïõò üñïõò ôüóï ôçò (i) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ôçò IBM ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí ("¶äåéá ×ñÞóçò Áîéïëüãçóçò"), üóï êáé ôçò (ii) Äéåèíïýò Óýìâáóçò ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò ôçò IBM ("Óýìâáóç IPLA"), ÷ùñßò ôñïðïðïéÞóåéò. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò èá éó÷ýåé ãéá ôç äéÜñêåéá ôçò Áîéïëüãçóçò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +Ç Óýìâáóç IPLA èá ôåèåß áõôüìáôá óå éó÷ý åöüóïí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéëÝîåé íá äéáôçñÞóåé ôï Ðñüãñáììá ìåôÜ ôçí ÁîéïëüãçóÞ ôïõ (Þ íá áðïêôÞóåé ðñüóèåôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ãéá ÷ñÞóç ìåôÜ ôçí Áîéïëüãçóç) óõíÜðôïíôáò ìéá óýìâáóç ðñïìÞèåéáò (ð.÷. ôç ÄéåèíÞ Óýìâáóç Passport Advantage ôçò IBM Þ ôç ÄéåèíÞ Óýìâáóç Passport Advantage Express ôçò IBM) ìå ôçí IBM. + +Ç ¶äåéá ×ñÞóçò Áîéïëüãçóçò êáé ç Óýìâáóç IPLA äåí èá éó÷ýïõí ôáõôü÷ñïíá êáé äåí ôñïðïðïéåß ç ìßá ôçí Üëëç. ÊÜèå ìßá áðü áõôÝò åßíáé áíåîÜñôçôç áðü ôçí Üëëç. + +Áêïëïõèåß ôï ðëÞñåò êåßìåíï êÜèå ìßáò áðü ôéò äýï óõìâÜóåéò Üäåéáò ÷ñÞóçò. + + +ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ãéá ôçí Áîéïëüãçóç ÐñïãñáììÜôùí + +ÌÝñïò 1 - Ãåíéêïß ¼ñïé + +Ï ÄÉÊÁÉÏÕ×ÏÓ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÁÐÏÄÅ×ÅÔÁÉ ÔÏÕÓ ÏÑÏÕÓ ÔÇÓ ÐÁÑÏÕÓÁÓ ÓÕÌÂÁÓÇÓ ÁÕÔÏÌÁÔÙÓ ÔÇ ÓÔÉÃÌÇ ÐÏÕ ÐÑÏÂÁÉÍÅÉ ÓÅ ÌÅÔÁÖÏÑÔÙÓÇ (DOWNLOAD), ÅÃÊÁÔÁÓÔÁÓÇ, ÁÍÔÉÃÑÁÖÇ, ÐÑÏÓÐÅËÁÓÇ, ÐÁÔÇÌÁ ÓÅ ÊÏÕÌÐÉ "ÁÐÏÄÏ×Ç" ¹ "ÁÐÏÄÅ×ÏÌÁÉ" (ACCEPT), ¹ ÊÁÔÁ ÁËËÏÍ ÔÑÏÐÏ ×ÑÇÓÇ ÔÏÕ ÐÑÏÃÑÁÌÌÁÔÏÓ. ÅÁÍ ÁÐÏÄÅ×ÅÓÔÅ ÁÕÔÏÕÓ ÔÏÕÓ ÏÑÏÕÓ ÅÎ ÏÍÏÌÁÔÏÓ ÔÏÕ ÄÉÊÁÉÏÕ×ÏÕ ÁÄÅÉÁÓ ×ÑÇÓÇÓ, ÄÇËÙÍÅÔÅ ÊÁÉ ÅÃÃÕÁÓÔÅ ÏÔÉ ÄÉÁÈÅÔÅÔÅ ÐËÇÑÇ ÅÎÏÕÓÉÏÄÏÔÇÓÇ ÃÉÁ ÔÇ ÄÅÓÌÅÕÓÇ ÔÏÕ ÄÉÊÁÉÏÕ×ÏÕ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÓÅ Ï,ÔÉ ÁÖÏÑÁ ÁÕÔÏÕÓ ÔÏÕÓ ÏÑÏÕÓ. ÅÁÍ ÄÅÍ ÓÕÌÖÙÍÅÉÔÅ ÌÅ ÁÕÔÏÕÓ ÔÏÕÓ ÏÑÏÕÓ: + +* ÌÇ ÌÅÔÁÖÏÑÔÙÓÅÔÅ, ÅÃÊÁÔÁÓÔÇÓÅÔÅ, ÁÍÔÉÃÑÁØÅÔÅ, ÐÑÏÓÐÅËÁÓÅÔÅ, ÐÁÔÇÓÅÔÅ ÓÅ ÊÏÕÌÐÉ "ÁÐÏÄÏ×Ç" ¹ "ÁÐÏÄÅ×ÏÌÁÉ" (ACCEPT), ¹ ×ÑÇÓÉÌÏÐÏÉÇÓÅÔÅ ÔÏ ÐÑÏÃÑÁÌÌÁ, ÊÁÉ + +* ÅÐÉÓÔÑÅØÔÅ ÁÌÅÓÁ ÔÁ Á×ÑÇÓÉÌÏÐÏÉÇÔÁ ÌÅÓÁ ÁÐÏÈÇÊÅÕÓÇÓ ÊÁÉ ÔÇÍ ÔÅÊÌÇÑÉÙÓÇ ÓÔÇ ÍÏÌÉÊÇ ÏÍÔÏÔÇÔÁ ÁÐÏ ÔÇÍ ÏÐÏÉÁ ÔÁ ÁÐÏÊÔÇÓÁÔÅ. ÅÁÍ ÌÅÔÁÖÏÑÔÙÓÁÔÅ (DOWNLOAD) ÔÏ ÐÑÏÃÑÁÌÌÁ ÁÐÏ ÔÏ ÄÉÁÄÉÊÔÕÏ, ÊÁÔÁÓÔÑÅØÔÅ ÏËÁ ÔÁ ÁÍÔÉÃÑÁÖÁ ÔÏÕ ÐÑÏÃÑÁÌÌÁÔÏÓ. + +1. Ïñéóìïß + +"ÅîïõóéïäïôçìÝíç ×ñÞóç" (Authorized Use) - ôï êáèïñéóìÝíï åðßðåäï óôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åêôåëåß Þ íá ëåéôïõñãåß ôï Ðñüãñáììá. Ôï åí ëüãù åðßðåäï ìðïñåß íá ìåôñÜôáé âÜóåé ôïõ áñéèìïý ÷ñçóôþí, óå åêáôïììýñéá ìïíÜäåò õðçñåóßáò (Millions of Service Units - "MSU"), óå ìïíÜäåò áîßáò åðåîåñãáóôÞ (Processor Value Units - "PVU") Þ ìðïñåß íá åßíáé ïðïéïäÞðïôå Üëëï åðßðåäï ÷ñÞóçò ðïõ êáèïñßæåôáé áðü ôçí IBM. + +"IBM" - International Business Machines Corporation Þ ìßá áðü ôéò èõãáôñéêÝò ôçò. + +"Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò" (License Information - "LI") - Ýíá Ýããñáöï ðïõ ðáñÝ÷åé ðëçñïöïñßåò êáé ôõ÷üí ðñüóèåôïõò üñïõò ðïõ áöïñïýí óå Ýíá óõãêåêñéìÝíï Ðñüãñáììá. Ìðïñåßôå íá âñåßôå ôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò ãéá ôï Ðñüãñáììá óôïí êáôÜëïãï ôïõ ÐñïãñÜììáôïò, ìå ôç ÷ñÞóç ìéáò åíôïëÞò ôïõ óõóôÞìáôïò Þ ùò öõëëÜäéï ðïõ óõíïäåýåé ôï Ðñüãñáììá. + +"Ðñüãñáììá" (Program) - ôá áêüëïõèá, óõìðåñéëáìâáíïìÝíïõ ôïõ ðñùôïôýðïõ êáé üëùí ôùí áíôéãñÜöùí Þ ìåñéêþí áíôéãñÜöùí: 1) åíôïëÝò êáé äåäïìÝíá áíáãíþóéìá áðü ìç÷áíÞ, 2) ëåéôïõñãéêÜ ôìÞìáôá (components), áñ÷åßá êáé åíüôçôåò (modules), 3) ïðôéêïáêïõóôéêü ðåñéå÷üìåíï (ð.÷. åéêüíåò, êåßìåíï, ç÷ïãñáöÞóåéò Þ öùôïãñáößåò) êáé 4) ó÷åôéêÜ õëéêÜ êáôï÷õñùìÝíá ìå Üäåéá ÷ñÞóçò (ð.÷. êëåéäéÜ êáé ôåêìçñßùóç). + +2. ÄïìÞ ôçò Óýìâáóçò + +Ç ðáñïýóá Óýìâáóç ðåñéëáìâÜíåé ôï ÌÝñïò 1 - Ãåíéêïß ¼ñïé, ôï ÌÝñïò 2 - ¼ñïé ðïõ Åìðßðôïõí óôï Äßêáéï êÜèå ×þñáò (åÜí õðÜñ÷ïõí) êáé ôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáé áðïôåëåß ôçí ðëÞñç óõìöùíßá ìåôáîý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôçò IBM áíáöïñéêÜ ìå ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò. Ç ðáñïýóá Óýìâáóç áíôéêáèéóôÜ ïðïéáäÞðïôå ðñïçãïýìåíç ðñïöïñéêÞ Þ Ýããñáöç åðéêïéíùíßá ìåôáîý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôçò IBM áíáöïñéêÜ ìå ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Ïé üñïé ôïõ ÌÝñïõò 2 åíäÝ÷åôáé íá áíôéêáèéóôïýí Þ íá ôñïðïðïéïýí ôïõò üñïõò ôïõ ÌÝñïõò 1. Óôï âáèìü ðïõ õðÜñ÷åé ïðïéáäÞðïôå áíôßèåóç ìåôáîý ôïõò, ïé üñïé ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ôùí äýï Ìåñþí (1 êáé 2). + +3. ×ïñÞãçóç ¶äåéáò ×ñÞóçò + +Ôï Ðñüãñáììá áíÞêåé óôçí IBM Þ óå ðñïìçèåõôÞ ôçò IBM êáé ôá ðíåõìáôéêÜ äéêáéþìáôá åðß ôïõ ÐñïãñÜììáôïò åßíáé êáôï÷õñùìÝíá. Ôï Ðñüãñáììá ðáñá÷ùñåßôáé ìå Üäåéá ÷ñÞóçò, äåí ðùëåßôáé. + +Ç IBM ÷ïñçãåß óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ìéá ðåñéïñéóìÝíç, ìç áðïêëåéóôéêÞ, ìç ìåôáâéâÜóéìç Üäåéá ãéá 1) ôç ìåôáöüñôùóç (download), åãêáôÜóôáóç êáé ÷ñÞóç ôïõ ÐñïãñÜììáôïò êáôÜ ôç äéÜñêåéá ôçò ðåñéüäïõ áîéïëüãçóçò Ýùò ôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ðïõ êáèïñßæåôáé óôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò áðïêëåéóôéêÜ ãéá óêïðïýò åóùôåñéêÞò áîéïëüãçóçò, äéåíÝñãåéáò äïêéìþí Þ åðßäåéîçò óå äïêéìáóôéêÞ âÜóç, 2) ôç äçìéïõñãßá êáé áíôéêáôÜóôáóç åýëïãïõ áñéèìïý áíôéãñÜöùí ãéá ôçí õðïóôÞñéîçò ôçò åí ëüãù ÅîïõóéïäïôçìÝíçò ×ñÞóçò, êáé 3) ôç äçìéïõñãßá åíüò åöåäñéêïý áíôéãñÜöïõ (backup copy), üëá ôá áíùôÝñù õðü ôçí ðñïûðüèåóç üôé éó÷ýïõí ôá åîÞò: + +á. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá ìå íüìéìï ôñüðï êáé óõììïñöþíåôáé ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò + +â. ôï åöåäñéêü áíôßãñáöï äåí ÷ñçóéìïðïéåßôáé ðáñÜ ìüíï óôéò ðåñéðôþóåéò üðïõ äåí åßíáé äõíáôÞ ç åêôÝëåóç ôïõ ÐñïãñÜììáôïò ãéá ôï ïðïßï äçìéïõñãÞèçêå åöåäñéêü áíôßãñáöï + +ã. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áíáðáñÜãåé êÜèå óçìåßùóç ðåñß ðíåõìáôéêþí äéêáéùìÜôùí, êáèþò êáé êÜèå Üëëç Ýíäåéîç ó÷åôéêÜ ìå ôçí éäéïêôçóßá, óå êÜèå áíôßãñáöï Þ ìåñéêü áíôßãñáöï ôïõ ÐñïãñÜììáôïò + +ä. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ôçñåß áñ÷åßï üëùí ôùí áíôéãñÜöùí ôïõ ÐñïãñÜììáôïò êáé åîáóöáëßæåé üôé ïðïéïóäÞðïôå ÷ñçóéìïðïéåß ôï Ðñüãñáììá (åßôå ôïðéêÜ åßôå åî áðïóôÜóåùò) 1) ôï ðñÜôôåé ìüíï åî ïíüìáôïò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé 2) óõììïñöþíåôáé ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò + +å. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé 1) óôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò ãéá ðáñáãùãéêïýò óêïðïýò Þ êáôÜ Üëëïí ôñüðï óôç ÷ñÞóç, áíôéãñáöÞ, ôñïðïðïßçóç Þ äéáíïìÞ ôïõ ÐñïãñÜììáôïò, ðáñÜ ìüíï óôï âáèìü ðïõ ñçôþò åðéôñÝðåôáé óôçí ðáñïýóá Óýìâáóç, 2) óôçí áíôßóôñïöç óõìâïëïìåôÜöñáóç (reverse assembling), áíôßóôñïöç ìåôáãëþôôéóç (reverse compilation) Þ êáôÜ Üëëïí ôñüðï ìåôÜöñáóç Þ áðïóõìðßëçóç (reverse engineering) ôïõ ÐñïãñÜììáôïò, ðáñÜ ìüíï óôï âáèìü ðïõ ñçôþò åðéôñÝðåôáé áðü ôï íüìï ÷ùñßò íá õðÜñ÷åé ç äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò áðü áõôü ôï äéêáßùìá, 3) óôç ÷ñÞóç ôùí ëåéôïõñãéêþí ôìçìÜôùí, áñ÷åßùí, åíïôÞôùí, ïðôéêïáêïõóôéêïý ðåñéå÷ïìÝíïõ Þ ó÷åôéêþí êáôï÷õñùìÝíùí ìå Üäåéá ÷ñÞóçò õëéêþí ôïõ ÐñïãñÜììáôïò ÷ùñéóôÜ áðü ôï åí ëüãù Ðñüãñáììá, 4) óôçí åíïéêßáóç Þ åêìßóèùóç ôïõ ÐñïãñÜììáôïò Þ óôçí ðáñá÷þñçóç ðåñáéôÝñù áäåéþí ÷ñÞóçò (sublicense) ôïõ ÐñïãñÜììáôïò óå ôñßôïõò Þ 5) óôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò ãéá ôç "öéëïîåíßá" (hosting) åìðïñéêþí åöáñìïãþí, êáé + +óô. åÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé áõôü ôï Ðñüãñáììá ùò Õðïóôçñéêôéêü Ðñüãñáììá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ÷ñçóéìïðïéåß áõôü ôï Ðñüãñáììá ìüíï ãéá ôçí õðïóôÞñéîç ôïõ Êýñéïõ ÐñïãñÜììáôïò êáé ç åê ìÝñïõò ôïõ ÷ñÞóç ôïõ ÐñïãñÜììáôïò èá õðüêåéôáé óå ïðïéïõóäÞðïôå ðåñéïñéóìïýò ôßèåíôáé óôçí Üäåéá ÷ñÞóçò ôïõ Êýñéïõ ÐñïãñÜììáôïò Þ, åÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé áõôü ôï ðñüãñáììá ùò Êýñéï Ðñüãñáììá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ÷ñçóéìïðïéåß üëá ôá ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá ìüíï ãéá ôçí õðïóôÞñéîç áõôïý ôïõ ÐñïãñÜììáôïò êáé ç åê ìÝñïõò ôïõ ÷ñÞóç ôùí åí ëüãù ÐñïãñáììÜôùí èá õðüêåéôáé óå ïðïéïõóäÞðïôå ðåñéïñéóìïýò ôßèåíôáé óôçí ðáñïýóá Óýìâáóç. Ãéá ôïõ óêïðïýò ôïõ ðáñüíôïò åäáößïõ "óô", "Õðïóôçñéêôéêü Ðñüãñáììá" (Supporting Program) åßíáé Ýíá Ðñüãñáììá ðïõ áðïôåëåß ìÝñïò Üëëïõ ÐñïãñÜììáôïò ôçò IBM ("Êýñéï Ðñüãñáììá") êáé ôï ïðïßï ðñïóäéïñßæåôáé ùò Õðïóôçñéêôéêü Ðñüãñáììá óôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò ôïõ Êýñéïõ ÐñïãñÜììáôïò. (Ãéá ôçí áðüêôçóç ìéáò ÷ùñéóôÞò Üäåéáò ÷ñÞóçò ãéá Ýíá Õðïóôçñéêôéêü Ðñüãñáììá ÷ùñßò íá éó÷ýïõí áõôïß ïé ðåñéïñéóìïß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá áðåõèõíèåß óôç íïìéêÞ ïíôüôçôá áðü ôçí ïðïßá áðÝêôçóå ôï Õðïóôçñéêôéêü Ðñüãñáììá.) + +Ç ðáñïýóá Üäåéá ÷ñÞóçò éó÷ýåé ãéá êÜèå áíôßãñáöï ôïõ ÐñïãñÜììáôïò ðïõ äçìéïõñãåßôáé áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +3.1 Áíáâáèìßóåéò, Äéïñèþóåéò êáé Åðéäéïñèþóåéò + +¼ôáí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ëÜâåé ìéá áíáâÜèìéóç (update), äéüñèùóç (fix) Þ åðéäéüñèùóç (patch) åíüò ÐñïãñÜììáôïò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ïðïéïõóäÞðïôå ðñüóèåôïõò Þ äéáöïñåôéêïýò üñïõò ðïõ éó÷ýïõí ãéá ôçí åí ëüãù áíáâÜèìéóç, äéüñèùóç Þ åðéäéüñèùóç êáé êáèïñßæïíôáé óôéò áíôßóôïé÷åò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóç. ÅÜí äåí ðáñÝ÷ïíôáé ðñüóèåôïé Þ äéáöïñåôéêïß üñïé, ôüôå ç áíáâÜèìéóç, äéüñèùóç Þ åðéäéüñèùóç õðüêåéôáé áðïêëåéóôéêÜ óôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. ÅÜí ôï Ðñüãñáììá áíôéêáôáóôáèåß áðü ìéá áíáâÜèìéóç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá ôåñìáôßóåé Üìåóá ôç ÷ñÞóç ôïõ áíôéêáôáóôáèÝíôïò ÐñïãñÜììáôïò. + +3.2 ÓõìâáôéêÞ Ðåñßïäïò êáé Ôåñìáôéóìüò + +Ç ðåñßïäïò áîéïëüãçóçò èá îåêéíÞóåé êáôÜ ôçí çìåñïìçíßá áðïäï÷Þò ôùí üñùí ôçò ðáñïýóáò Óýìâáóçò áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò êáé èá ëÞîåé 1) ìåôÜ ôçí ðáñÝëåõóç ôçò ÷ñïíéêÞò äéÜñêåéáò Þ ôçò çìåñïìçíßáò ðïõ êáèïñßæåôáé áðü ôçí IBM åßôå óôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò åßôå óå Ýããñáöï óõíáëëáãÞò Þ 2) ôçí çìåñïìçíßá êáôÜ ôçí ïðïßá ôï Ðñüãñáììá áðåíåñãïðïéåßôáé áõôüìáôá. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá êáôáóôñÝøåé ôï Ðñüãñáììá êáé üëá ôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ðïõ äçìéïýñãçóå åíôüò äÝêá çìåñþí áðü ôï ôÝëïò ôçò ðåñéüäïõ áîéïëüãçóçò. ÅÜí ç IBM êáèïñßæåé óôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá äéáôçñÞóåé ôï Ðñüãñáììá, êáé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéëÝîåé íá ôï ðñÜîåé, ôüôå ôï Ðñüãñáììá èá õðüêåéôáé óå äéáöïñåôéêÞ óýìâáóç Üäåéáò ÷ñÞóçò, ôçí ïðïßá èá ðáñÜó÷åé ç IBM óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. ÅðéðëÝïí, åßíáé ðéèáíü íá åðéâëçèïýí ÷ñåþóåéò. + +Ç IBM ìðïñåß íá ôåñìáôßóåé ôçí Üäåéá ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óå ðåñßðôùóç ìç óõììüñöùóçò ôïõ ôåëåõôáßïõ ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. ÅÜí ç Üäåéá ÷ñÞóçò ôåñìáôéóôåß ãéá ïðïéïíäÞðïôå ëüãï áðü ïðïéïäÞðïôå áðü ôá äýï ìÝñç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá äéáêüøåé Üìåóá ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò êáé íá êáôáóôñÝøåé üëá ôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ðïõ Ý÷åé óôçí êáôï÷Þ ôïõ. ÏðïéïéäÞðïôå üñïé ôçò ðáñïýóáò Óýìâáóçò ôùí ïðïßùí ç éó÷ýò ðáñáôåßíåôáé áðü ôç öýóç ôïõò ðÝñáí ôïõ ôåñìáôéóìïý ôçò Óýìâáóçò, ðáñáìÝíïõí óå éó÷ý Ýùò üôïõ åêðëçñùèïýí êáé éó÷ýïõí êáé ãéá ôïõò áíôßóôïé÷ïõò äéáäü÷ïõò êáé åêäï÷åßò êÜèå åíüò áðü ôá äýï óõìâáëëüìåíá ìÝñç. + +ÔÏ ÐÑÏÃÑÁÌÌÁ ÌÐÏÑÅÉ ÍÁ ÐÅÑÉÅ×ÅÉ ÌÇ×ÁÍÉÓÌÏ ÁÐÅÍÅÑÃÏÐÏÉÇÓÇÓ ÐÏÕ ÈÁ ÅÌÐÏÄÉÓÅÉ ÔÇ ÓÕÍÅ×ÉÓÇ ÔÇÓ ËÅÉÔÏÕÑÃÉÁÓ ÔÏÕ ÌÅÔÁ ÔÇ ËÇÎÇ ÔÇÓ ÐÅÑÉÏÄÏÕ ÁÎÉÏËÏÃÇÓÇÓ. Ï ÄÉÊÁÉÏÕ×ÏÓ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÓÕÌÖÙÍÅÉ ÍÁ ÌÇÍ ÅÐÉ×ÅÉÑÇÓÅÉ ÊÁÌÉÁ ÅÐÅÌÂÁÓÇ ÓÔÏ ÌÇ×ÁÍÉÓÌÏ ÁÐÅÍÅÑÃÏÐÏÉÇÓÇÓ ¹ ÓÔÏ ÐÑÏÃÑÁÌÌÁ. Ï ÄÉÊÁÉÏÕ×ÏÓ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÐÑÅÐÅÉ ÍÁ ÐÑÏÂÅÉ ÓÔÇ ËÇØÇ ÔÙÍ ÁÍÁÃÊÁÉÙÍ ÐÑÏÖÕËÁÎÅÙÍ ÙÓÔÅ ÍÁ ÁÐÏÖÕÃÅÉ ÏÐÏÉÁÄÇÐÏÔÅ ÁÐÙËÅÉÁ ÄÅÄÏÌÅÍÙÍ ÐÏÕ ÄÕÍÁÔÁÉ ÍÁ ÐÑÏÊÕØÅÉ ÏÔÁÍ ÄÅÍ ÈÁ ÌÐÏÑÅÉ ÐËÅÏÍ ÍÁ ×ÑÇÓÉÌÏÐÏÉÅÉ ÔÏ ÐÑÏÃÑÁÌÌÁ. + +4. ×ñåþóåéò + +Äåí õðÜñ÷åé ÷ñÝùóç ãéá ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò êáôÜ ôç äéÜñêåéá ôçò ðåñéüäïõ áîéïëüãçóçò. + +5. Äåí ÐáñÝ÷ïíôáé ÅããõÞóåéò + +ÐÅÑÁÍ ÔÙÍ ÐÑÏÂËÅÐÏÌÅÍÙÍ ÁÐÏ ÔÏ ÍÏÌÏ ÅÃÃÕÇÓÅÙÍ Ï ÁÐÏÊËÅÉÓÌÏÓ ÔÙÍ ÏÐÏÉÙÍ ÄÅÍ ÅÉÍÁÉ ÄÕÍÁÔÏÓ, Ç IBM ÄÅÍ ÐÁÑÅ×ÅÉ ÅÃÃÕÇÓÅÉÓ ¹ ÕÐÏÓ×ÅÓÅÉÓ, ÑÇÔÅÓ ¹ ÓÉÙÐÇÑÅÓ, ÁÍÁÖÏÑÉÊÁ ÌÅ ÔÏ ÐÑÏÃÑÁÌÌÁ ¹ ÔÇÍ ÕÐÏÓÔÇÑÉÎÇ ÔÏÕ ÐÑÏÃÑÁÌÌÁÔÏÓ, ÅÁÍ ÐÁÑÅ×ÅÔÁÉ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÙÍ, ÅÍÄÅÉÊÔÉÊÁ ÊÁÉ Ï×É ÐÅÑÉÏÑÉÓÔÉÊÁ, ÏÐÏÉÙÍÄÇÐÏÔÅ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ¹ ÕÐÏÓ×ÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ, ÉÊÁÍÏÐÏÉÇÔÉÊÇÓ ÐÏÉÏÔÇÔÁÓ, ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ KAI ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÊÁÉ ÏÐÏÉÁÓÄÇÐÏÔÅ ÅÃÃÕÇÓÇÓ ¹ ÕÐÏÓ×ÅÓÇÓ ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ÔÑÉÔÙÍ. + +ÓÅ ÏÑÉÓÌÅÍÅÓ ×ÙÑÅÓ ¹ ÄÉÊÁÉÏÄÏÓÉÅÓ ÄÅÍ ÅÐÉÔÑÅÐÅÔÁÉ Ï ÁÐÏÊËÅÉÓÌÏÓ ÑÇÔÙÍ ¹ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ, ÅÐÏÌÅÍÙÓ, Ï ÁÍÙÔÅÑÙ ÁÐÏÊËÅÉÓÌÏÓ ÅÍÄÅ×ÅÔÁÉ ÍÁ ÌÇÍ ÉÓ×ÕÅÉ ÃÉÁ ÔÏ ÄÉÊÁÉÏÕ×Ï ÁÄÅÉÁÓ ×ÑÇÓÇÓ. ÓÔÇÍ ÐÅÑÉÐÔÙÓÇ ÁÕÔÇ, Ç ÉÓ×ÕÓ ÔÙÍ ÄÉÁÔÁÎÅÙÍ ÔÙÍ ÅÍ ËÏÃÙ ÅÃÃÕÇÓÅÙÍ ÐÅÑÉÏÑÉÆÅÔÁÉ ÓÔÇ ÄÉÁÑÊÅÉÁ ÔÇÓ ÅËÁ×ÉÓÔÇÓ ×ÑÏÍÉÊÇÓ ÐÅÑÉÏÄÏÕ ÐÏÕ ÁÐÁÉÔÅÉÔÁÉ ÁÐÏ ÔÏ ÍÏÌÏ. ÌÅÔÁ ÔÇ ËÇÎÇ ÁÕÔÇÓ ÔÇÓ ÐÅÑÉÏÄÏÕ ÄÅÍ ÉÓ×ÕÅÉ ÊÁÌÉÁ ÅÃÃÕÇÓÇ. ÓÅ ÏÑÉÓÌÅÍÅÓ ×ÙÑÅÓ ¹ ÄÉÊÁÉÏÄÏÓÉÅÓ ÄÅÍ ÅÐÉÔÑÅÐÏÍÔÁÉ ÐÅÑÉÏÑÉÓÌÏÉ ÓÔÇ ÄÉÁÑÊÅÉÁ ÉÓ×ÕÏÓ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ, ÅÐÏÌÅÍÙÓ, Ï ÁÍÙÔÅÑÙ ÐÅÑÉÏÑÉÓÌÏÓ ÅÍÄÅ×ÅÔÁÉ ÍÁ ÌÇÍ ÉÓ×ÕÅÉ ÃÉÁ ÔÏ ÄÉÊÁÉÏÕ×Ï ÁÄÅÉÁÓ ×ÑÇÓÇÓ. Ï ÄÉÊÁÉÏÕ×ÏÓ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÅÍÄÅ×ÅÔÁÉ ÍÁ ÄÉÁÈÅÔÅÉ ÐÅÑÁÉÔÅÑÙ ÄÉÊÁÉÙÌÁÔÁ ÐÏÕ ÄÉÁÖÅÑÏÕÍ ÁÍÁËÏÃÁ ÌÅ ÔÇ ×ÙÑÁ ¹ ÔÇÍ ÉÓ×ÕÏÕÓÁ ÄÉÊÁÉÏÄÏÓÉÁ. + +ÏÉ ÄÇËÙÓÅÉÓ ÁÐÏÐÏÉÇÓÇÓ ÊÁÉ ÏÉ ÅÎÁÉÑÅÓÅÉÓ ÐÏÕ ÏÑÉÆÏÍÔÁÉ ÓÔÏ ÐÁÑÏÍ ÁÑÈÑÏ 5 ÉÓ×ÕÏÕÍ ÅÐÉÓÇÓ ÃÉÁ ÏÐÏÉÅÓÄÇÐÏÔÅ ÅÔÁÉÑÅÉÅÓ ÁÍÁÐÔÕÎÇÓ ÐÑÏÃÑÁÌÌÁÔÙÍ ÊÁÉ ÐÑÏÌÇÈÅÕÔÅÓ ÔÇÓ IBM. + +ÏÉ ÊÁÔÁÓÊÅÕÁÓÔÅÓ, ÐÑÏÌÇÈÅÕÔÅÓ ¹ ÅÊÄÏÔÅÓ ÐÑÏÃÑÁÌÌÁÔÙÍ ÌÇ-ÉÂÌ ÌÐÏÑÅÉ ÍÁ ÐÁÑÅ×ÏÕÍ ÄÉÊÅÓ ÔÏÕÓ ÅÃÃÕÇÓÅÉÓ. + +Ç IBM ÄÅÍ ÐÁÑÅ×ÅÉ ÕÐÏÓÔÇÑÉÎÇ ÏÐÏÉÏÕÄÇÐÏÔÅ ÅÉÄÏÕÓ, ÅÊÔÏÓ ÅÁÍ Ç IBM ÊÁÈÏÑÉÓÅÉ ÄÉÁÖÏÑÅÔÉÊÁ. ÓÔÇÍ ÐÅÑÉÐÔÙÓÇ ÁÕÔÇ, ÏÐÏÉÁÄÇÐÏÔÅ ÕÐÏÓÔÇÑÉÎÇ ÐÏÕ ÐÁÑÅ×ÅÔÁÉ ÁÐÏ ÔÇÍ IBM ÕÐÏÊÅÉÔÁÉ ÓÔÉÓ ÄÇËÙÓÅÉÓ ÁÐÏÐÏÉÇÓÇÓ ÊÁÉ ÓÔÉÓ ÅÎÁÉÑÅÓÅÉÓ ÐÏÕ ÏÑÉÆÏÍÔÁÉ ÓÔÏ ÐÁÑÏÍ ÁÑÈÑÏ 5. + +6. ÄåäïìÝíá êáé ÂÜóåéò ÄåäïìÝíùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò + +Ãéá íá åßíáé óå èÝóç íá âïçèÞóåé ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò óôçí áðïìüíùóç ôçò áéôßáò åíüò ðñïâëÞìáôïò ìå ôï Ðñüãñáììá, ç IBM ìðïñåß íá æçôÞóåé áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò 1) íá åðéôñÝøåé óôçí IBM ôçí åî áðïóôÜóåùò ðñüóâáóç óôï óýóôçìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò Þ 2) íá óôåßëåé ðëçñïöïñßåò Þ äåäïìÝíá óõóôÞìáôïò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óôçí IBM. ¼ìùò, ç IBM äåí åßíáé õðï÷ñåùìÝíç íá ðáñÝ÷åé ôÝôïéá âïÞèåéá, åêôüò åÜí ç IBM êáé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñïâïýí óôç óýíáøç ÷ùñéóôÞò Ýããñáöçò óýìâáóçò âÜóåé ôçò ïðïßáò ç IBM íá óõìöùíåß íá ðáñÝ÷åé óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ôÝôïéïõ åßäïõò õðïóôÞñéîç, ç ïðïßá åßíáé åêôüò ôùí õðï÷ñåþóåùí ôçò IBM âÜóåé ôçò ðáñïýóáò Óýìâáóçò. Óå êÜèå ðåñßðôùóç, ç IBM ÷ñçóéìïðïéåß ôéò ðëçñïöïñßåò ãéá óöÜëìáôá êáé ðñïâëÞìáôá ìüíï ãéá ôç âåëôßùóç ôùí ðñïúüíôùí êáé ôùí õðçñåóéþí ôçò êáé ãéá ôçí êáëýôåñç ðáñï÷Þ ôùí ó÷åôéêþí ôçò ðñïóöïñþí õðïóôÞñéîçò. Ãéá ôçí åîõðçñÝôçóç áõôþí ôùí óêïðþí, ç IBM ìðïñåß íá ÷ñçóéìïðïéåß íïìéêÜ ðñüóùðá IBM êáé õðåñãïëÜâïõò ôçò (óõìðåñéëáìâáíïìÝíùí êáé íïìéêþí ðñïóþðùí IBM êáé õðåñãïëÜâùí óå ìßá Þ ðåñéóóüôåñåò ÷þñåò åêôüò ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò Ý÷åé ôçí Ýäñá ôïõ) êáé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí IBM íá ôï ðñÜîåé. + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðáñáìÝíåé õðåýèõíïò ãéá 1) ïðïéáäÞðïôå äåäïìÝíá êáé ôï ðåñéå÷üìåíï ïðïéáóäÞðïôå âÜóçò äåäïìÝíùí ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáèéóôÜ äéáèÝóéìç óôçí IBM, 2) ôçí åðéëïãÞ êáé åöáñìïãÞ äéáäéêáóéþí êáé åëÝã÷ùí áíáöïñéêÜ ìå ôçí ðñïóðÝëáóç, áóöÜëåéá, êñõðôïãñÜöçóç, ÷ñÞóç êáé ìåôÜäïóç äåäïìÝíùí (óõìðåñéëáìâáíïìÝíùí êáé ðëçñïöïñéþí óôéò ïðïßåò äçëþíåôáé Þ áðü ôéò ïðïßåò ìðïñåß íá ðñïêýøåé ç ôáõôüôçôá óõãêåêñéìÝíùí ðñïóþðùí) êáé 3) ôçí åöåäñéêÞ áðïèÞêåõóç (backup) êáé áðïêáôÜóôáóç ïðïéáóäÞðïôå âÜóçò äåäïìÝíùí êáé ïðïéùíäÞðïôå áðïèçêåõìÝíùí äåäïìÝíùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí èá áðïóôÝëëåé êáé äåí èá ðáñÝ÷åé óôçí IBM ðñüóâáóç óå ðëçñïöïñßåò óôéò ïðïßåò äçëþíåôáé Þ áðü ôéò ïðïßåò ìðïñåß íá ðñïêýøåé ç ôáõôüôçôá óõãêåêñéìÝíùí ðñïóþðùí, åßôå óå ìïñöÞ äåäïìÝíùí åßôå óå ïðïéáäÞðïôå Üëëç ìïñöÞ, êáé èá öÝñåé ôçí åõèýíç ãéá åýëïãåò äáðÜíåò êáé Üëëá ðïóÜ ìå ôá ïðïßá ìðïñåß íá åðéâáñõíèåß ç ÉÂÌ óå óõíÜñôçóç ìå ôçí åóöáëìÝíç ðáñï÷Þ ôÝôïéùí ðëçñïöïñéþí óôçí IBM Þ ôçí áðþëåéá Þ áðïêÜëõøç ôÝôïéùí ðëçñïöïñéþí áðü ôçí IBM, óõìðåñéëáìâáíïìÝíùí ôùí äáðáíþí ðïõ áðïññÝïõí áðü áîéþóåéò ôñßôùí. + +7. Ðåñéïñéóìüò Åõèýíçò + +Ïé ðåñéïñéóìïß êáé ïé åîáéñÝóåéò ðïõ ïñßæïíôáé óôï ðáñüí ¶ñèñï 7 (Ðåñéïñéóìüò Åõèýíçò) Ý÷ïõí ðëÞñç éó÷ý óôï âáèìü ðïõ äåí áðáãïñåýïíôáé áðü ôï åöáñìïóôÝï äßêáéï ÷ùñßò íá õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò áðü ôá áíôßóôïé÷á äéêáéþìáôá. + +7.1 Óôïé÷åßá ãéá ôá ïðïßá åíäÝ÷åôáé íá öÝñåé åõèýíç ç IBM + +ÅíäÝ÷åôáé íá ðñïêýøïõí ðåñéóôÜóåéò êáôÜ ôéò ïðïßåò, ëüãù áèÝôçóçò óõìâáôéêÞò õðï÷ñÝùóçò åê ìÝñïõò ôçò IBM Þ ëüãù Üëëçò åõèýíçò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äéêáéïýôáé íá ëÜâåé áðïæçìßùóç áðü ôçí IBM. ÁíåîÜñôçôá áðü ôç âÜóç åðß ôçò ïðïßáò ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äéêáéïýôáé íá åãåßñåé áîßùóç áðïæçìßùóçò êáôÜ ôçò IBM (óõìðåñéëáìâáíïìÝíçò ôçò áèÝôçóçò ïõóéùäþí óõìâáôéêþí üñùí, áìÝëåéáò, øåõäïýò äÞëùóçò Þ Üëëçò áîßùóçò ðïõ áðïññÝåé áðü óýìâáóç Þ áäéêïðñáîßá), ç óõíïëéêÞ åõèýíç ôçò IBM ãéá üëåò ôéò áîéþóåéò, óùñåõôéêÜ, ðïõ áðïññÝïõí áðü Þ ó÷åôßæïíôáé ìå êÜèå Ðñüãñáììá Þ êáôÜ Üëëïí ôñüðï ðñïêýðôïõí áðü ôçí ðáñïýóá Óýìâáóç, äåí èá õðåñâáßíåé ôï ðïóü 1) ôçò áðïæçìßùóçò ãéá óùìáôéêÞ âëÜâç (óõìðåñéëáìâáíïìÝíïõ èáíÜôïõ) êáé ôçò áðïæçìßùóçò êéíçôÞò êáé áêßíçôçò áôïìéêÞò ðåñéïõóßáò êáé 2) ïðïéáóäÞðïôå Üëëçò èåôéêÞò Üìåóçò æçìßáò Ýùò $10.000 äïëÜñéá (Þ ôï éóüðïóï óå ôïðéêü íüìéóìá). + +Ôï üñéï áõôü éó÷ýåé åðßóçò ãéá ïðïéåóäÞðïôå åôáéñåßåò áíÜðôõîçò ÐñïãñáììÜôùí êáé ðñïìçèåõôÝò ôçò IBM. Åßíáé ç ìÝãéóôç åõèýíç ðïõ öÝñïõí óõëëïãéêÜ ç IBM, ïé åôáéñåßåò áíÜðôõîçò ÐñïãñáììÜôùí ôçò êáé ïé ðñïìçèåõôÝò ôçò. + +7.2 Óôïé÷åßá ãéá ôá ïðïßá äåí öÝñåé åõèýíç ç IBM + +ÓÅ ÊÁÌÉÁ ÐÅÑÉÐÔÙÓÇ ÄÅÍ ÖÅÑÏÕÍ ÅÕÈÕÍÇ Ç IBM, ÏÉ ÐÑÏÌÇÈÅÕÔÅÓ ÔÇÓ ¹ ÏÉ ÅÔÁÉÑÅÉÅÓ ÁÍÁÐÔÕÎÇÓ ÐÑÏÃÑÁÌÌÁÔÙÍ ÌÅ ÔÉÓ ÏÐÏÉÅÓ ÓÕÍÅÑÃÁÆÅÔÁÉ ÃÉÁ ÏÐÏÉÏÄÇÐÏÔÅ ÁÐÏ ÔÁ ÁÊÏËÏÕÈÁ, ÁÊÏÌÁ ÊÁÉ ÁÍ Å×ÏÕÍ ÅÍÇÌÅÑÙÈÅÉ ÃÉÁ ÔÇÍ ÐÉÈÁÍÏÔÇÔÁ ÍÁ ÐÑÏÊÕØÏÕÍ: + +á. ÁÐÙËÅÉÁ ¹ ÖÈÏÑÁ ÄÅÄÏÌÅÍÙÍ + +â. ÅÉÄÉÊÅÓ, ÐÁÑÅÐÏÌÅÍÅÓ ¹ ÅÌÌÅÓÅÓ ÆÇÌÉÅÓ, ÁÐÏÆÇÌÉÙÓÇ ÃÉÁ ÇÈÉÊÇ ÂËÁÂÇ ¹ ÏÐÏÉÅÓÄÇÐÏÔÅ ÏÉÊÏÍÏÌÉÊÅÓ ÁÐÏÈÅÔÉÊÅÓ ÆÇÌÉÅÓ, ¹ + +ã. ÄÉÁÖÕÃÏÍÔÁ ÊÅÑÄÇ, ÁÐÙËÅÉÁ ÅÐÉ×ÅÉÑÇÌÁÔÉÊÙÍ ÄÑÁÓÔÇÑÉÏÔÇÔÙÍ, ÅÓÏÄÙÍ, ¶ÕËÇÓ ÅÌÐÏÑÉÊÇÓ ÁÎÉÁÓ ¹ ÐÑÏÓÄÏÊÙÌÅÍÙÍ ÊÅÑÄÙÍ. + +8. ÅðáëÞèåõóç Óõììüñöùóçò + +Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò ¶ñèñïõ 8 (ÅðáëÞèåõóç Óõììüñöùóçò), ìå ôïí üñï "¼ñïé ÐñïãñáììÜôùí Áîéïëüãçóçò" íïïýíôáé 1) ç ðáñïýóá Óýìâáóç êáé ïé áíôßóôïé÷åò ôñïðïðïéÞóåéò êáé Ýããñáöá óõíáëëáãþí ðïõ ðáñÝ÷ïíôáé áðü ôçí IBM êáé 2) ïé ðïëéôéêÝò ëïãéóìéêïý (software policies) ôçò IBM, ïé ïðïßåò ðåñéãñÜöïíôáé óôï äéêôõáêü ôüðï IBM Software Policy (www.ibm.com/softwarepolicies), óõìðåñéëáìâáíïìÝíùí, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, ôùí ðïëéôéêþí ðåñß åöåäñéêÞò õðïóôÞñéîçò (backup), ôéìïëüãçóçò ìåéùìÝíçò äõíáìéêüôçôáò (sub-capacity pricing) êáé ìåôÜðôùóçò (migration). + +Ôá äéêáéþìáôá êáé ïé õðï÷ñåþóåéò ðïõ êáèïñßæïíôáé óôï ðáñüí ¶ñèñï 8 ðáñáìÝíïõí óå éó÷ý êáôÜ ôç äéÜñêåéá ôçò ÷ñïíéêÞò ðåñéüäïõ ãéá ôçí ïðïßá Ý÷åé ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò, óõí äýï åðéðëÝïí Ýôç ìåôÜ ôç ëÞîç ôçò åí ëüãù ðåñéüäïõ. + +8.1 Äéáäéêáóßá ÅðáëÞèåõóçò + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá äçìéïõñãåß, íá ôçñåß êáé íá ðáñÝ÷åé óôçí IBM êáé ôïõò åëåãêôÝò ôçò áêñéâÞ Ýããñáöá óôïé÷åßá, áðïôåëÝóìáôá åñãáëåßùí ôïõ óõóôÞìáôïò êáé Üëëá äåäïìÝíá ôïõ óõóôÞìáôïò ôá ïðïßá åðáñêïýí ðñïêåéìÝíïõ íá ðáñÜó÷ïõí ôç äõíáôüôçôá åðáëÞèåõóçò, ç ïðïßá èá õðüêåéôáé óå Ýëåã÷ï, üôé ç ÷ñÞóç üëùí ôùí ÐñïãñáììÜôùí åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óõììïñöþíåôáé ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí Áîéïëüãçóçò, óõìðåñéëáìâáíïìÝíùí, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, üëùí ôùí ó÷åôéêþí üñùí ôçò IBM ðåñß ðñïûðïèÝóåùí ôéìïëüãçóçò êáé ÷ïñÞãçóçò áäåéþí ÷ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé õðåýèõíïò 1) íá åîáóöáëßæåé üôé äåí õðåñâáßíåé ôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ êáé 2) íá åîáêïëïõèåß íá óõììïñöþíåôáé ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí Áîéïëüãçóçò. + +ÌåôÜ áðü åýëïãç åéäïðïßçóç, ç IBM ìðïñåß íá åëÝãîåé ôç óõììüñöùóç ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí Áîéïëüãçóçò óå üëåò ôéò ôïðïèåóßåò êáé ãéá üëá ôá ðåñéâÜëëïíôá óôá ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ÷ñçóéìïðïéåß (ãéá ïðïéïíäÞðïôå óêïðü) ÐñïãñÜììáôá ðïõ õðüêåéíôáé óôïõò ¼ñïõò ÐñïãñáììÜôùí Áîéïëüãçóçò. Ç åí ëüãù åðáëÞèåõóç èá äéåîÜãåôáé ìå ôñüðï ðïõ íá åëá÷éóôïðïéåß ôï åíäå÷üìåíï ðñüêëçóçò áíáóôÜôùóçò óôçí åðé÷åßñçóç ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ìðïñåß íá äéåîÜãåôáé óôéò åãêáôáóôÜóåéò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, êáôÜ ôï êáíïíéêü åñãÜóéìï ùñÜñéï. Ç IBM ìðïñåß íá ÷ñçóéìïðïéÞóåé áíåîÜñôçôï åëåãêôÞ ãéá ôçí ðáñï÷Þ âïÞèåéáò êáôÜ ÅéäïðïéÞóåéò ãéá Êþäéêá, õðü ôçí ðñïûðüèåóç üôé ç IBM Ý÷åé óõíÜøåé Ýããñáöç óýìâáóç åìðéóôåõôéêüôçôáò ìå ôïí åí ëüãù åëåãêôÞ. + +8.2 Åðßëõóç + +Ç IBM èá åéäïðïéåß ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò åããñÜöùò åÜí êáôÜ ôçí ðñáãìáôïðïßçóç ôÝôïéáò åðáëÞèåõóçò äéáðéóôùèåß üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò Ý÷åé ÷ñçóéìïðïéÞóåé ïðïéïäÞðïôå Ðñüãñáììá ðÝñáí ôïõ åðéðÝäïõ ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ Þ êáôÜ Üëëïí ôñüðï äåí óõììïñöþíåôáé ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí Áîéïëüãçóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá êáôáâÜëëåé ÷ùñßò êáèõóôÝñçóç áðåõèåßáò óôçí IBM ôéò ÷ñåþóåéò ðïõ êáèïñßæïíôáé áðü ôçí IBM óå Ýíá ôéìïëüãéï ãéá 1) ïðïéáäÞðïôå ôÝôïéá ðñüóèåôç ÷ñÞóç, 2) õðïóôÞñéîç ãéá ôçí åí ëüãù ðñüóèåôç ÷ñÞóç ãéá ôç äéÜñêåéá ôçò ðñüóèåôçò ÷ñÞóçò Þ ãéá ðåñßïäï äýï åôþí, üðïéá áðü ôéò äýï ðåñéüäïõò áõôÝò åßíáé ìéêñüôåñç êáé 3) ïðïéåóäÞðïôå ÷ñåþóåéò êáé Üëëåò ïöåéëÝò ðïõ ôõ÷üí êáèïñéóôïýí ùò áðïôÝëåóìá ôçò åí ëüãù åðáëÞèåõóçò. + +9. ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéÝ÷åé êþäéêá ôñßôùí ðñïìçèåõôþí (third party code) ãéá ôïí ïðïßï ç IBM, êáé ü÷é ï ôñßôïò ðñïìçèåõôÞò, ÷ïñçãåß Üäåéáò ÷ñÞóçò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò âÜóåé ôïí üñùí ôçò ðáñïýóáò Óýìâáóçò. ÏðïéåóäÞðïôå åéäïðïéÞóåéò ó÷åôéêÜ ìå ôïí êþäéêá ôñßôùí ðñïìçèåõôþí ("ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí") óõìðåñéëáìâÜíïíôáé ìüíï ãéá ôçí ðëçñïöüñçóç ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. ÁõôÝò ïé åéäïðïéÞóåéò äéáôßèåíôáé óôï (óôá) áñ÷åßï(-á) NOTICES ôïõ ÐñïãñÜììáôïò. Óôéò ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí ðáñÝ÷ïíôáé ðëçñïöïñßåò ó÷åôéêÜ ìå ôïí ôñüðï áðüêôçóçò ðçãáßïõ êþäéêá ãéá ôïí êþäéêá êÜðïéùí ôñßôùí ðñïìçèåõôþí. ÅÜí óôéò ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí êÜðïéïò êþäéêáò ôñßôùí ðñïìçèåõôþí ðñïóäéïñßæåôáé áðü ôçí IBM ùò "ÔñïðïðïéÞóéìïò Êþäéêáò Ôñßôùí" ("Modifiable Third Party Code"), ç IBM åîïõóéïäïôåß ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò 1) íá ôñïðïðïéÞóåé ôïí ÔñïðïðïéÞóéìï Êþäéêá Ôñßôùí êáé 2) íá ðñïâåß óôçí áðïóõìðßëçóç (reverse engineering) ôùí åíïôÞôùí ôïõ ÐñïãñÜììáôïò ðïõ óõíäÝïíôáé Üìåóá ìå ôïí ÔñïðïðïéÞóéìï Êþäéêá Ôñßôùí, õðü ôçí ðñïûðüèåóç üôé ç åí ëüãù áðïóõìðßëçóç ðñáãìáôïðïéåßôáé ìüíï ãéá ôï óêïðü ôçò áðïóöáëìÜôùóçò (debugging) ôùí ôñïðïðïéÞóåùí ðïõ ðñáãìáôïðïßçóå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óôïí åí ëüãù êþäéêá ôñßôùí. ÏðïéåóäÞðïôå õðï÷ñåþóåéò ðáñï÷Þò õðçñåóéþí êáé õðïóôÞñéîçò ôçò IBM éó÷ýïõí ìüíï ãéá ôç ìç ôñïðïðïéçìÝíç åêäï÷Þ ôïõ ÐñïãñÜììáôïò. + +10. ÃåíéêÜ + +á. ÊáíÝíáò üñïò ôçò ðáñïýóáò Óýìâáóçò äåí åðçñåÜæåé ïðïéáäÞðïôå äéêáéþìáôá êáôáíáëùôÞ ðïõ áðïññÝïõí áðü ôï íüìï êáé ãéá ôá ïðïßá äåí õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò Þ ðåñéïñéóìïý. + +â. ÅÜí ïðïéáäÞðïôå äéÜôáîç ôçò Óýìâáóçò êñéèåß Üêõñç Þ ìç åöáñìüóéìç, ïé õðüëïéðåò äéáôÜîåéò ôçò Óýìâáóçò ðáñáìÝíïõí óå ðëÞñç éó÷ý êáé åöáñìïãÞ. + +ã. Áðáãïñåýåôáé óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò íá ðñïâåß óôçí åîáãùãÞ ôïõ ÐñïãñÜììáôïò. + +ä. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí International Business Machines Corporation êáé ôéò èõãáôñéêÝò ôçò (êáé ôïõò äéáäü÷ïõò êáé åêäï÷åßò, åñãïëÜâïõò êáé ôïõò Åìðïñéêïýò ÓõíåñãÜôåò ôçò IBM) íá áðïèçêåýïõí êáé íá ÷ñçóéìïðïéïýí ôá óôïé÷åßá åðéêïéíùíßáò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò üðïõ äéåîÜãïõí ôéò åðé÷åéñçóéáêÝò ôïõò äñáóôçñéüôçôåò, óå ó÷Ýóç ìå ôá ðñïúüíôá êáé ôéò õðçñåóßåò ôçò IBM Þ ãéá ôçí ðñïþèçóç ôçò åðé÷åéñçìáôéêÞò ó÷Ýóçò ôçò IBM ìå ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +å. ÊÜèå Ýíá áðü ôá äýï ìÝñç èá ðáñÜó÷åé óôï Üëëï åýëïãç åõ÷Ýñåéá íá óõììïñöùèåß ðñïò ôéò õðï÷ñåþóåéò ôïõ ðñïôïý éó÷õñéóôåß üôé ôï Üëëï ìÝñïò äåí áíôáðïêñßèçêå óôéò õðï÷ñåþóåéò ôïõ âÜóåé ôçò ðáñïýóáò Óýìâáóçò. Ôá äýï ìÝñç èá åðé÷åéñïýí íá åðéëýïõí êáëüðéóôá ïðïéåóäÞðïôå äéáöïñÝò, äéáöùíßåò Þ áîéþóåéò ìåôáîý ôùí äýï ìåñþí áíáöïñéêÜ ìå ôçí ðáñïýóá Óýìâáóç. + +óô. Åêôüò åÜí Üëëùò áðáéôåßôáé áðü ôï åöáñìïóôÝï äßêáéï ÷ùñßò íá õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò Þ ðåñéïñéóìïý áõôïý ôïõ äéêáéþìáôïò: 1) êáíÝíá áðü ôá äýï ìÝñç äåí èá åãåßñåé áãùãÞ ïðïéáóäÞðïôå ìïñöÞò ãéá ïðïéáäÞðïôå áîßùóç ç ïðïßá áðïññÝåé áðü Þ ó÷åôßæåôáé ìå ôçí ðáñïýóá Óýìâáóç ìåôÜ ôçí ðÜñïäï äéåôßáò áðü ôçí çìåñïìçíßá êáôÜ ôçí ïðïßá ðñïÝêõøå ç áéôßá Ýãåñóçò ôçò áãùãÞò êáé 2) ìåôÜ ôç ëÞîç ôçò åí ëüãù ÷ñïíéêÞò ðñïèåóìßáò, ïðïéáäÞðïôå ôÝôïéá áîßùóç êáé üëá ôá äéêáéþìáôá ðïõ ó÷åôßæïíôáé ìå ôçí åí ëüãù áîßùóç èá ðáñáãñáöïýí. + +æ. Ïýôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ïýôå ç IBM äåí åßíáé õðåýèõíïé ãéá ôç ìç åêðëÞñùóç ïðïéùíäÞðïôå õðï÷ñåþóåþí ôïõò ãéá ëüãïõò ðÝñáí ôïõ åëÝã÷ïõ ôïõò. + +ç. Äåí äçìéïõñãåßôáé ïðïéïäÞðïôå äéêáßùìá Þ âÜóç áîßùóçò ãéá ïðïéïäÞðïôå ôñßôï ìÝñïò áðü ôçí ðáñïýóá Óýìâáóç, êáé ç IBM äåí åßíáé õðåýèõíç ãéá ïðïéåóäÞðïôå áîéþóåéò ôñßôùí åíáíôßïí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, ðáñÜ ìüíï üðùò åðéôñÝðåôáé óôçí áíùôÝñù åíüôçôá 7.1 (Óôïé÷åßá ãéá ôá ïðïßá åíäÝ÷åôáé íá öÝñåé åõèýíç ç IBM) ó÷åôéêÜ ìå áðïæçìßùóç ãéá óùìáôéêÞ âëÜâç (óõìðåñéëáìâáíïìÝíïõ ôïõ èáíÜôïõ) Þ ãéá áðïæçìßùóç êéíçôÞò êáé áêßíçôçò áôïìéêÞò ðåñéïõóßáò ãéá ôçí ïðïßá ç IBM öÝñåé åõèýíç êáôÜ ôï íüìï Ýíáíôé ôïõ åí ëüãù ôñßôïõ ìÝñïõò. + +è. Ðñïâáßíïíôáò óôç óýíáøç ôçò ðáñïýóáò Óýìâáóçò, êáíÝíá áðü ôá äýï ìÝñç äåí âáóßæåôáé óå ïðïéåóäÞðïôå äçëþóåéò ðïõ äåí êáèïñßæïíôáé óôçí ðáñïýóá Óýìâáóç, óõìðåñéëáìâáíïìÝíùí, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, ïðïéùíäÞðïôå äçëþóåùí ó÷åôéêÜ ìå: 1) ôçí áðüäïóç Þ ëåéôïõñãßá ôïõ ÐñïãñÜììáôïò ðÝñáí áõôÞò ðïõ ðñïâëÝðåôáé ñçôþò óôï áíùôÝñù ¶ñèñï 5 (Äåí ÐáñÝ÷ïíôáé ÅããõÞóåéò), 2) ôéò åìðåéñßåò Þ õðïäåßîåéò Üëëùí ìåñþí Þ 3) ïðïéáäÞðïôå áðïôåëÝóìáôá Þ ïéêïíïìßåò ðïõ ìðïñåß íá åðéôý÷åé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò. + +é. Ç IBM Ý÷åé óõíÜøåé óõìâÜóåéò ìå ïñéóìÝíïõò ïñãáíéóìïýò ("Åìðïñéêïß ÓõíåñãÜôåò ôçò IBM" - "IBM Business Partners") ãéá ôçí ðñïþèçóç, äéÜèåóç êáé õðïóôÞñéîç ïñéóìÝíùí ÐñïãñáììÜôùí. Ïé Åìðïñéêïß ÓõíåñãÜôåò ôçò IBM åîáêïëïõèïýí íá åßíáé áíåîÜñôçôïé ïñãáíéóìïß ðïõ ëåéôïõñãïýí ÷ùñéóôÜ áðü ôçí IBM. Ç IBM äåí åßíáé õðåýèõíç ãéá ôéò ðñÜîåéò Þ ôéò äçëþóåéò Åìðïñéêþí Óõíåñãáôþí ôçò IBM Þ ãéá ôçí åêðëÞñùóç ôùí õðï÷ñåþóåùí ðïõ Ý÷ïõí ðñïò ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +éá. Ïé üñïé ðåñß áäåéþí ÷ñÞóçò êáé áðïæçìßùóçò ãéá ðíåõìáôéêÞ éäéïêôçóßá ðïõ ðåñéëáìâÜíïíôáé óå Üëëåò óõìâÜóåéò ðïõ Ý÷åé óõíÜøåé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìå ôçí IBM (üðùò ð.÷. ç Óýìâáóç Ðåëáôþí IBM) äåí éó÷ýïõí ãéá Üäåéåò ÷ñÞóçò ÐñïãñáììÜôùí ðïõ ÷ïñçãïýíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò. + +11. ÃåùãñáöéêÞ ÅìâÝëåéá êáé ÅöáñìïóôÝï Äßêáéï + +11.1 ÅöáñìïóôÝï Äßêáéï + +Êáé ôá äýï ìÝñç óõìöùíïýí óôçí åöáñìïãÞ ôçò íïìïèåóßáò ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò üóïí áöïñÜ óôçí éó÷ý, åñìçíåßá êáé åêôÝëåóç üëùí ôùí áíôßóôïé÷ùí äéêáéùìÜôùí, êáèçêüíôùí êáé õðï÷ñåþóåùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôçò IBM ðïõ áðïññÝïõí áðü, Þ ó÷åôßæïíôáé êáè' ïðïéïíäÞðïôå ôñüðï ìå, ôá èÝìáôá ðïõ êáëýðôåé ç Óýìâáóç, ÷ùñßò íá ëáìâÜíïíôáé õðüøç ôõ÷üí áíôéèÝóåéò áñ÷þí äéêáßïõ. + +Äåí åöáñìüæåôáé ç Óýìâáóç ôùí ÇíùìÝíùí Åèíþí ó÷åôéêÜ ìå ôï ÄéåèíÝò Åìðüñéï Áãáèþí (United Nations Convention on Contracts for the International Sale of Goods). + +11.2 Äéêáéïäïóßá + +¼ëá ôá äéêáéþìáôá, ôá êáèÞêïíôá êáé ïé õðï÷ñåþóåéò õðüêåéíôáé óôç äéêáéïäïóßá ôùí äéêáóôçñßùí ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. + +ÌÝñïò 2 - ¼ñïé ðïõ Åìðßðôïõí óôï Äßêáéï êÜèå ×þñáò + +Ãéá ôéò Üäåéåò ÷ñÞóçò ðïõ ÷ïñçãïýíôáé óôçí ÅëëÜäá, ïé áêüëïõèïé üñïé áíôéêáèéóôïýí Þ ôñïðïðïéïýí ôïõò áíáöåñüìåíïõò üñïõò óôï ÌÝñïò 1. ¼ëïé ïé üñïé óôï ÌÝñïò 1 ðïõ äåí åðçñåÜæïíôáé áðü áõôÝò ôéò ôñïðïðïéÞóåéò ðáñáìÝíïõí ùò Ý÷ïõí êáé åîáêïëïõèïýí íá éó÷ýïõí. Ôï ðáñüí ÌÝñïò 2 ïñãáíþíåôáé ùò åîÞò: + +* Ôñïðïðïßçóç óôï ÌÝñïò 1, ¶ñèñï 11 (ÅöáñìïóôÝï Äßêáéï êáé Äéêáéïäïóßá) ãéá ôç óõãêåêñéìÝíç ÷þñá, êáé + +* ÔñïðïðïéÞóåéò óå Üëëïõò üñïõò ôçò Óýìâáóçò ãéá ÷þñåò ôçò Åõñþðçò, ÌÝóçò ÁíáôïëÞò êáé ÁöñéêÞò. + +Ôñïðïðïßçóç óôï ÌÝñïò 1, ¶ñèñï 11 (ÅöáñìïóôÝï Äßêáéï êáé Äéêáéïäïóßá) ãéá ôç óõãêåêñéìÝíç ÷þñá + +11.2 Äéêáéïäïóßá + +Ç áêüëïõèç ðáñÜãñáöïò áöïñÜ óôç äéêáéïäïóßá êáé áíôéêáèéóôÜ ôçí åíüôçôá 11.2 (Äéêáéïäïóßá) ãéá ôçí ÅëëÜäá: + +¼ëá ôá äéêáéþìáôá, ôá êáèÞêïíôá êáé ïé õðï÷ñåþóåéò õðüêåéíôáé óôç äéêáéïäïóßá ôùí äéêáóôçñßùí ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò, åêôüò áðü ôéò ÷þñåò ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù, üðïõ áðïêëåéóôéêÜ áñìüäéá ãéá ôçí åðßëõóç üëùí ôùí äéáöïñþí ðïõ áðïññÝïõí áðü Þ ó÷åôßæïíôáé ìå ôçí ðáñïýóá Óýìâáóç, óõìðåñéëáìâáíïìÝíùí ôùí óõíïðôéêþí íïìéêþí äéáäéêáóéþí, èá åßíáé ôá áêüëïõèá äéêáóôÞñéá: + +ôï áñìüäéï äéêáóôÞñéï ôçò ÁèÞíáò. + +ÔÑÏÐÏÐÏÉÇÓÅÉÓ ÃÉÁ ×ÙÑÅÓ ÔÇÓ ÅÕÑÙÐÇÓ, ÌÅÓÇÓ ÁÍÁÔÏËÇÓ ÊÁÉ ÁÖÑÉÊÇÓ (EMEA) + +ÊÑÁÔÇ ÌÅËÇ ÔÇÓ ÅÕÑÙÐÁÚÊÇÓ ÅÍÙÓÇÓ + +5. Äåí ÐáñÝ÷ïíôáé ÅããõÞóåéò + +Ôï áêüëïõèï êåßìåíï ðñïóôßèåôáé óôï ¶ñèñï 5 (Äåí ÐáñÝ÷ïíôáé ÅããõÞóåéò): + +Óôçí ÅõñùðáúêÞ ¸íùóç ("ÅÅ"), ïé êáôáíáëùôÝò Ý÷ïõí íüìéìá äéêáéþìáôá âÜóåé ôçò éó÷ýïõóáò åèíéêÞò íïìïèåóßáò ðïõ äéÝðåé ôçí ðþëçóç êáôáíáëùôéêþí áãáèþí. Ôá åí ëüãù äéêáéþìáôá äåí åðçñåÜæïíôáé áðü ôéò äéáôÜîåéò áõôïý ôïõ ¶ñèñïõ 5 (Äåí ÐáñÝ÷ïíôáé ÅããõÞóåéò). + +ÊÑÁÔÇ ÌÅËÇ ÔÇÓ ÅÅ ÊÁÉ ÏÉ ×ÙÑÅÓ ÐÏÕ ÁÍÁÖÅÑÏÍÔÁÉ ÐÁÑÁÊÁÔÙ + +ÏðïéáäÞðïôå ÅõñùðáúêÞ ÷þñá ç ïðïßá Ý÷åé èåóðßóåé ôïðéêÞ íïìïèåóßá éäéùôéêüôçôáò êáé ðñïóôáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá ðáñüìïéá ìå áõôÞ ôïõ ìïíôÝëïõ ôçò ÅõñùðáúêÞò ¸íùóçò. + +10. ÃåíéêÜ + +Ôï áêüëïõèï êåßìåíï áíôéêáèéóôÜ ôï åäÜöéï 10.ä: + +(1) Ïñéóìïß - Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò åäáößïõ 10.ä, éó÷ýïõí ïé áêüëïõèïé ðñüóèåôïé ïñéóìïß: + +(á) ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò (Business Contact Information) - óôïé÷åßá åðáããåëìáôéêÞò åðéêïéíùíßáò ðïõ áðïêáëýðôïíôáé áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò óôçí IBM, óõìðåñéëáìâáíïìÝíùí ïíïìÜôùí, åðáããåëìáôéêþí ôßôëùí, åðáããåëìáôéêþí äéåõèýíóåùí, áñéèìþí ôçëåöþíïõ êáé äéåõèýíóåùí e-mail õðáëëÞëùí êáé åñãïëÜâùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Ãéá ôçí Áõóôñßá, ôçí Éôáëßá êáé ôçí Åëâåôßá, ôá ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò ðåñéëáìâÜíïõí åðßóçò ðëçñïöïñßåò ãéá ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò êáé ôïõò õðåñãïëÜâïõò ôïõ ùò íïìéêÜ ðñüóùðá (ãéá ðáñÜäåéãìá, óôïé÷åßá ãéá ôá Ýóïäá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò Þ Üëëá ïéêïíïìéêÜ óôïé÷åßá). + +(â) Ðñïóùðéêü ÅðáããåëìáôéêÞò Åðéêïéíùíßáò (Business Contact Personnel) - ïé õðÜëëçëïé êáé ïé åñãïëÜâïé ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óôïõò ïðïßïõò áíáöÝñïíôáé ôá ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò. + +(ã) Áñ÷Þ Ðñïóôáóßáò ÄåäïìÝíùí (Data Protection Authority) - ç áñ÷Þ ðïõ Ý÷åé éäñõèåß óôá ðëáßóéá ôçò Íïìïèåóßáò ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé Çëåêôñïíéêþí Åðéêïéíùíéþí óå ìéá óõãêåêñéìÝíç ÷þñá Þ, ãéá ÷þñåò åêôüò ôçò ÅõñùðáúêÞò ¸íùóçò, ç áñ÷Þ ðïõ åßíáé õðåýèõíç ãéá ôçí åðéôÞñçóç ôçò ðñïóôáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá óôç óõãêåêñéìÝíç ÷þñá Þ (ãéá ïðïéáäÞðïôå áðü ôéò áíùôÝñù ðåñéðôþóåéò) ïðïéïäÞðïôå ðñïâëåðüìåíï áðü ôï íüìï äéÜäï÷ï íïìéêü ðñüóùðï ôçò åí ëüãù áñ÷Þò. + +(ä) Íïìïèåóßá ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé Çëåêôñïíéêþí Åðéêïéíùíéþí (Data Protection & Electronic Communications Legislation) - (i) ç éó÷ýïõóá ôïðéêÞ íïìïèåóßá êáé ïé áíôßóôïé÷ïé êáíïíéóìïß ðïõ èåóðßóôçêáí ìå óêïðü ôç óõììüñöùóç ìå ôéò áðáéôÞóåéò ôçò Ïäçãßáò 95/46/EC ôçò ÅõñùðáúêÞò ¸íùóçò (ðåñß ôçò åðåîåñãáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá êáé ôçò åëåýèåñçò êßíçóçò ôùí åí ëüãù äåäïìÝíùí) êáé ôçò Ïäçãßáò 2002/58/EC ôçò ÅõñùðáúêÞò ¸íùóçò (ðåñß ôçò åðåîåñãáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá êáé ôçò ðñïóôáóßáò ôçò éäéùôéêüôçôáò óôïí ôïìÝá ôùí çëåêôñïíéêþí åðéêïéíùíéþí) Þ (ii) ãéá ÷þñåò åêôüò ôçò ÅõñùðáúêÞò ¸íùóçò, ç íïìïèåóßá Þ/êáé ïé êáíïíéóìïß ðïõ èåóðßóôçêáí óôç óõãêåêñéìÝíç ÷þñá áíáöïñéêÜ ìå ôçí ðñïóôáóßá äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá êáé ôç ñýèìéóç çëåêôñïíéêþí åðéêïéíùíéþí ðïõ ðåñéëáìâÜíïõí ôçí áíôáëëáãÞ äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá Þ (êáé óôéò äýï áíùôÝñù ðåñéðôþóåéò) ïðïéáäÞðïôå ðñïâëåðüìåíç áðü ôï íüìï áíôéêáôÜóôáóç Þ ôñïðïðïßçóç ôùí áíùôÝñù. + +(å) ¼ìéëïò IBM (IBM Group) - ç International Business Machines Corporation ìå Ýäñá ôçí Armonk, ÍÝá Õüñêç, Ç.Ð.Á., ïé èõãáôñéêÝò ôçò êáé ïé áíôßóôïé÷ïé Åìðïñéêïß ÓõíåñãÜôåò êáé õðåñãïëÜâïé ôïõò. + +(2) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí IBM: + +(á) íá åðåîåñãÜæåôáé êáé íá ÷ñçóéìïðïéåß ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò åíôüò ôïõ Ïìßëïõ IBM óôá ðëáßóéá ôçò õðïóôÞñéîçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, óõìðåñéëáìâáíïìÝíçò êáé ôçò ðáñï÷Þò õðçñåóéþí õðïóôÞñéîçò, êáé ãéá ôï óêïðü ôçò ðåñáéôÝñù åíßó÷õóçò ôùí åðé÷åéñçìáôéêþí ó÷Ýóåùí ìåôáîý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôïõ Ïìßëïõ IBM, óõìðåñéëáìâáíïìÝíçò, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, ôçò åðéêïéíùíßáò ìå Ðñïóùðéêü ÅðáããåëìáôéêÞò Åðéêïéíùíßáò (ìÝóù e-mail Þ Üëëùò) êáé ôçò ðñïþèçóçò ðñïúüíôùí êáé õðçñåóéþí ôïõ Ïìßëïõ IBM (ï "ÊáèïñéóìÝíïò Óêïðüò"), êáé + +(â) íá áðïêáëýðôåé ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò óå Üëëá ìÝëç ôïõ Ïìßëïõ IBM ìüíï óôá ðëáßóéá ôçò åðßôåõîçò ôïõ ÊáèïñéóìÝíïõ Óêïðïý. + +(3) Ç IBM óõìöùíåß üôé ç åðåîåñãáóßá üëùí ôùí Åðáããåëìáôéêþí Óôïé÷åßùí Åðéêïéíùíßáò èá ðñáãìáôïðïéåßôáé óýìöùíá ìå ôç Íïìïèåóßá ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé ÇëåêôñïíéêÞò Åðéêïéíùíßáò êáé üôé ôá åí ëüãù Óôïé÷åßá èá ÷ñçóéìïðïéïýíôáé ìüíï ãéá ôïí ÊáèïñéóìÝíï Óêïðü. + +(4) Óôï âáèìü ðïõ áðáéôåßôáé áðü ôç Íïìïèåóßá ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé ÇëåêôñïíéêÞò Åðéêïéíùíßáò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äçëþíåé üôé (á) Ý÷åé áðïêôÞóåé (Þ èá áðïêôÞóåé) ôéò áðáéôïýìåíåò óõãêáôáèÝóåéò êáé üôé Ý÷åé áðåõèýíåé (Þ èá áðåõèýíåé) ôéò áðáéôïýìåíåò åéäïðïéÞóåéò óôï Ðñïóùðéêü ÅðáããåëìáôéêÞò Åðéêïéíùíßáò) þóôå ï ¼ìéëïò IBM íá åßíáé óå èÝóç íá åðåîåñãÜæåôáé êáé íá ÷ñçóéìïðïéåß ôá ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò ãéá ôïí ÊáèïñéóìÝíï Óêïðü. + +(5) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí IBM íá ìåôáâéâÜóåé ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò åêôüò ôïõ Åõñùðáúêïý Ïéêïíïìéêïý ×þñïõ, åöüóïí ç åí ëüãù ìåôáâßâáóç ðñáãìáôïðïéçèåß âÜóåé óõìâáôéêþí üñùí ðïõ Ý÷ïõí åãêñéèåß áðü ôçí Áñ÷Þ Ðñïóôáóßáò ÄåäïìÝíùí Þ êáôÜ Üëëïí ôñüðï åðéôñÝðåôáé óôá ðëáßóéá ôçò Íïìïèåóßáò ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé Çëåêôñïíéêþí Åðéêïéíùíéþí. + +Z125-5543-05 (07/2011) + + +ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ÐñïãñÜììáôïò + +ÌÝñïò 1 - Ãåíéêïß ¼ñïé + +Ï ÄÉÊÁÉÏÕ×ÏÓ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÁÐÏÄÅ×ÅÔÁÉ ÔÏÕÓ ÏÑÏÕÓ ÔÇÓ ÐÁÑÏÕÓÁÓ ÓÕÌÂÁÓÇÓ ÁÕÔÏÌÁÔÙÓ ÔÇ ÓÔÉÃÌÇ ÐÏÕ ÐÑÏÂÁÉÍÅÉ ÓÅ ÌÅÔÁÖÏÑÔÙÓÇ (DOWNLOAD), ÅÃÊÁÔÁÓÔÁÓÇ, ÁÍÔÉÃÑÁÖÇ, ÐÑÏÓÐÅËÁÓÇ, ÐÁÔÇÌÁ ÓÅ ÊÏÕÌÐÉ "ÁÐÏÄÏ×Ç" ¹ "ÁÐÏÄÅ×ÏÌÁÉ" (ACCEPT), ¹ ÊÁÔÁ ÁËËÏÍ ÔÑÏÐÏ ×ÑÇÓÇ ÔÏÕ ÐÑÏÃÑÁÌÌÁÔÏÓ. ÅÁÍ ÁÐÏÄÅ×ÅÓÔÅ ÁÕÔÏÕÓ ÔÏÕÓ ÏÑÏÕÓ ÅÎ ÏÍÏÌÁÔÏÓ ÔÏÕ ÄÉÊÁÉÏÕ×ÏÕ ÁÄÅÉÁÓ ×ÑÇÓÇÓ, ÄÇËÙÍÅÔÅ ÊÁÉ ÅÃÃÕÁÓÔÅ ÏÔÉ ÄÉÁÈÅÔÅÔÅ ÐËÇÑÇ ÅÎÏÕÓÉÏÄÏÔÇÓÇ ÃÉÁ ÔÇ ÄÅÓÌÅÕÓÇ ÔÏÕ ÄÉÊÁÉÏÕ×ÏÕ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÓÅ Ï,ÔÉ ÁÖÏÑÁ ÁÕÔÏÕÓ ÔÏÕÓ ÏÑÏÕÓ. ÅÁÍ ÄÅÍ ÓÕÌÖÙÍÅÉÔÅ ÌÅ ÁÕÔÏÕÓ ÔÏÕÓ ÏÑÏÕÓ: + +* ÌÇ ÌÅÔÁÖÏÑÔÙÓÅÔÅ, ÅÃÊÁÔÁÓÔÇÓÅÔÅ, ÁÍÔÉÃÑÁØÅÔÅ, ÐÑÏÓÐÅËÁÓÅÔÅ, ÐÁÔÇÓÅÔÅ ÓÅ ÊÏÕÌÐÉ "ÁÐÏÄÏ×Ç" ¹ "ÁÐÏÄÅ×ÏÌÁÉ" (ACCEPT), ¹ ×ÑÇÓÉÌÏÐÏÉÇÓÅÔÅ ÔÏ ÐÑÏÃÑÁÌÌÁ, ÊÁÉ + +* ÅÐÉÓÔÑÅØÔÅ ÁÌÅÓÁ ÔÁ Á×ÑÇÓÉÌÏÐÏÉÇÔÁ ÌÅÓÁ ÁÐÏÈÇÊÅÕÓÇÓ, ÔÇÍ ÔÅÊÌÇÑÉÙÓÇ ÊÁÉ ÔÇÍ ÁÐÏÄÅÉÎÇ ÄÉÊÁÉÙÌÁÔÏÓ (PROOF OF ENTITLEMENT) ÓÔÇ ÍÏÌÉÊÇ ÏÍÔÏÔÇÔÁ ÁÐÏ ÔÇÍ ÏÐÏÉÁ ÔÁ ÁÐÏÊÔÇÓÁÔÅ, ÐÑÏÊÅÉÌÅÍÏÕ ÍÁ ÓÁÓ ÅÐÉÓÔÑÁÖÅÉ ÔÏ ÐÏÓÏ ÐÏÕ ÊÁÔÁÂÁËÁÔÅ. ÅÁÍ ÌÅÔÁÖÏÑÔÙÓÁÔÅ (DOWNLOAD) ÔÏ ÐÑÏÃÑÁÌÌÁ ÁÐÏ ÔÏ ÄÉÁÄÉÊÔÕÏ, ÊÁÔÁÓÔÑÅØÔÅ ÏËÁ ÔÁ ÁÍÔÉÃÑÁÖÁ ÔÏÕ ÐÑÏÃÑÁÌÌÁÔÏÓ. + +1. Ïñéóìïß + +"ÅîïõóéïäïôçìÝíç ×ñÞóç" (Authorized Use) - ôï êáèïñéóìÝíï åðßðåäï óôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åêôåëåß Þ íá ëåéôïõñãåß ôï Ðñüãñáììá. Ôï åí ëüãù åðßðåäï ìðïñåß íá ìåôñÜôáé âÜóåé ôïõ áñéèìïý ÷ñçóôþí, óå åêáôïììýñéá ìïíÜäåò õðçñåóßáò (Millions of Service Units - "MSU"), óå ìïíÜäåò áîßáò åðåîåñãáóôÞ (Processor Value Units - "PVU") Þ ìðïñåß íá åßíáé ïðïéïäÞðïôå Üëëï åðßðåäï ÷ñÞóçò ðïõ êáèïñßæåôáé áðü ôçí IBM. + +"IBM" - International Business Machines Corporation Þ ìßá áðü ôéò èõãáôñéêÝò ôçò. + +"Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò" (License Information - "LI") - Ýíá Ýããñáöï ðïõ ðáñÝ÷åé ðëçñïöïñßåò êáé ôõ÷üí ðñüóèåôïõò üñïõò ðïõ áöïñïýí óå Ýíá óõãêåêñéìÝíï Ðñüãñáììá. Ïé Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò ôïõ ÐñïãñÜììáôïò åßíáé äéáèÝóéìåò óôç äéåýèõíóç www.ibm.com/software/sla. Ìðïñåßôå åðßóçò íá âñåßôå ôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò óôïí êáôÜëïãï ôïõ ÐñïãñÜììáôïò, ìå ôç ÷ñÞóç ìéáò åíôïëÞò ôïõ óõóôÞìáôïò Þ ùò öõëëÜäéï ðïõ óõíïäåýåé ôï Ðñüãñáììá. + +"Ðñüãñáììá" (Program) - ôá áêüëïõèá, óõìðåñéëáìâáíïìÝíïõ ôïõ ðñùôïôýðïõ êáé üëùí ôùí áíôéãñÜöùí Þ ìåñéêþí áíôéãñÜöùí: 1) åíôïëÝò êáé äåäïìÝíá áíáãíþóéìá áðü ìç÷áíÞ, 2) ëåéôïõñãéêÜ ôìÞìáôá (components), áñ÷åßá êáé åíüôçôåò (modules), 3) ïðôéêïáêïõóôéêü ðåñéå÷üìåíï (ð.÷. åéêüíåò, êåßìåíï, ç÷ïãñáöÞóåéò Þ öùôïãñáößåò) êáé 4) ó÷åôéêÜ õëéêÜ êáôï÷õñùìÝíá ìå Üäåéá ÷ñÞóçò (ð.÷. êëåéäéÜ êáé ôåêìçñßùóç). + +"Áðüäåéîç Äéêáéþìáôïò" (Proof of Entitlement - "PoE") - ôåêìÞñéï ôçò ÅîïõóéïäïôçìÝíçò ×ñÞóçò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Ç Áðüäåéîç Äéêáéþìáôïò áðïôåëåß åðßóçò ôåêìÞñéï ôùí äéêáéùìÜôùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óå ü,ôé áöïñÜ ôçí åããýçóç, ôéò ôéìÝò ìåëëïíôéêþí áíáâáèìßóåùí, åÜí õðÜñîïõí, êáé äõíçôéêÝò åéäéêÝò Þ ðñïùèçôéêÝò ðñïóöïñÝò. ÅÜí ç IBM äåí ðáñÜó÷åé Áðüäåéîç Äéêáéþìáôïò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò, ôüôå ç IBM ìðïñåß íá áðïäå÷èåß ùò Áðüäåéîç Äéêáéþìáôïò ôçí áñ÷éêÞ áðüäåéîç ðþëçóçò Þ Üëëï áðïäåéêôéêü Ýããñáöï ôçò ðþëçóçò áðü ôï ìÝñïò (åßôå ôçí IBM åßôå ôï ìåôáðùëçôÞ ôçò) áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá, õðü ôçí ðñïûðüèåóç üôé óôï åí ëüãù Ýããñáöï áíáãñÜöåôáé ç ïíïìáóßá ôïõ ÐñïãñÜììáôïò êáé ôï áðïêôçèÝí åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò. + +"Ðåñßïäïò Åããýçóçò" (Warranty Period) - Ýíá Ýôïò, áñ÷ßæïíôáò áðü ôçí çìåñïìçíßá êáôÜ ôçí ïðïßá ÷ïñçãåßôáé ç Üäåéá ÷ñÞóçò óôïí áñ÷éêü Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +2. ÄïìÞ ôçò Óýìâáóçò + +Ç ðáñïýóá Óýìâáóç ðåñéëáìâÜíåé ôï ÌÝñïò 1 - Ãåíéêïß ¼ñïé, ôï ÌÝñïò 2 - ¼ñïé ðïõ Åìðßðôïõí óôï Äßêáéï êÜèå ×þñáò (åÜí õðÜñ÷ïõí), ôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáé ôçí Áðüäåéîç Äéêáéþìáôïò êáé áðïôåëåß ôçí ðëÞñç óõìöùíßá ìåôáîý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôçò IBM áíáöïñéêÜ ìå ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò. Ç ðáñïýóá Óýìâáóç áíôéêáèéóôÜ ïðïéáäÞðïôå ðñïçãïýìåíç ðñïöïñéêÞ Þ Ýããñáöç åðéêïéíùíßá ìåôáîý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôçò IBM áíáöïñéêÜ ìå ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Ïé üñïé ôïõ ÌÝñïõò 2 åíäÝ÷åôáé íá áíôéêáèéóôïýí Þ íá ôñïðïðïéïýí ôïõò üñïõò ôïõ ÌÝñïõò 1. Óôï âáèìü ðïõ õðÜñ÷åé ïðïéáäÞðïôå áíôßèåóç ìåôáîý ôïõò, ïé üñïé ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóç êáôéó÷ýïõí ôùí üñùí ôùí äýï Ìåñþí (1 êáé 2). + +3. ×ïñÞãçóç ¶äåéáò ×ñÞóçò + +Ôï Ðñüãñáììá áíÞêåé óôçí IBM Þ óå ðñïìçèåõôÞ ôçò IBM êáé ôá ðíåõìáôéêÜ äéêáéþìáôá åðß ôïõ ÐñïãñÜììáôïò åßíáé êáôï÷õñùìÝíá. Ôï Ðñüãñáììá ðáñá÷ùñåßôáé ìå Üäåéá ÷ñÞóçò, äåí ðùëåßôáé. + +Ç IBM ÷ïñçãåß óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ìç áðïêëåéóôéêÞ Üäåéá ãéá 1) ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò Ýùò ôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ðïõ êáèïñßæåôáé óôçí Áðüäåéîç Äéêáéþìáôïò, 2) ôç äçìéïõñãßá êáé åãêáôÜóôáóç áíôéãñÜöùí ãéá ôçí õðïóôÞñéîç ôçò åí ëüãù ÅîïõóéïäïôçìÝíçò ×ñÞóçò êáé 3) ôç äçìéïõñãßá åöåäñéêïý ("backup") áíôéãñÜöïõ, üëá ôá áíùôÝñù õðü ôçí ðñïûðüèåóç üôé: + +á. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá ìå íüìéìï ôñüðï êáé óõììïñöþíåôáé ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò + +â. ôï åöåäñéêü áíôßãñáöï äåí ÷ñçóéìïðïéåßôáé ðáñÜ ìüíï óôéò ðåñéðôþóåéò üðïõ äåí åßíáé äõíáôÞ ç åêôÝëåóç ôïõ ÐñïãñÜììáôïò ãéá ôï ïðïßï äçìéïõñãÞèçêå åöåäñéêü áíôßãñáöï + +ã. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áíáðáñÜãåé êÜèå óçìåßùóç ðåñß ðíåõìáôéêþí äéêáéùìÜôùí, êáèþò êáé êÜèå Üëëç Ýíäåéîç ó÷åôéêÜ ìå ôçí éäéïêôçóßá, óå êÜèå áíôßãñáöï Þ ìåñéêü áíôßãñáöï ôïõ ÐñïãñÜììáôïò + +ä. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîáóöáëßæåé üôé ïðïéïóäÞðïôå ÷ñçóéìïðïéåß ôï Ðñüãñáììá (åßôå ôïðéêÜ åßôå åî áðïóôÜóåùò) 1) ôï ðñÜôôåé ìüíï åî ïíüìáôïò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé 2) óõììïñöþíåôáé ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò + +å. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé 1) óôç ÷ñÞóç, áíôéãñáöÞ, ôñïðïðïßçóç Þ äéáíïìÞ ôïõ ÐñïãñÜììáôïò, ðáñÜ ìüíï óôï âáèìü ðïõ ñçôþò åðéôñÝðåôáé óôçí ðáñïýóá Óýìâáóç, 2) óôçí áíôßóôñïöç óõìâïëïìåôÜöñáóç (reverse assembling), áíôßóôñïöç ìåôáãëþôôéóç (reverse compilation) Þ êáôÜ Üëëï ôñüðï ìåôÜöñáóç Þ áðïóõìðßëçóç (reverse engineering) ôïõ ÐñïãñÜììáôïò, ðáñÜ ìüíï óôï âáèìü ðïõ ñçôþò åðéôñÝðåôáé áðü ôï íüìï ÷ùñßò íá õðÜñ÷åé ç äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò áðü áõôü ôï äéêáßùìá, 3) óôç ÷ñÞóç ôùí ëåéôïõñãéêþí ôìçìÜôùí, áñ÷åßùí, åíïôÞôùí, ïðôéêïáêïõóôéêïý ðåñéå÷ïìÝíïõ Þ ó÷åôéêþí êáôï÷õñùìÝíùí ìå Üäåéá ÷ñÞóçò õëéêþí ôïõ ÐñïãñÜììáôïò ÷ùñéóôÜ áðü ôï åí ëüãù Ðñüãñáììá Þ 4) óôçí åíïéêßáóç Þ åêìßóèùóç ôïõ ÐñïãñÜììáôïò Þ óôçí ðáñá÷þñçóç ðåñáéôÝñù áäåéþí ÷ñÞóçò (sublicense) ôïõ ÐñïãñÜììáôïò óå ôñßôïõò, êáé + +óô. åÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé áõôü ôï Ðñüãñáììá ùò Õðïóôçñéêôéêü Ðñüãñáììá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ÷ñçóéìïðïéåß áõôü ôï Ðñüãñáììá ìüíï ãéá ôçí õðïóôÞñéîç ôïõ Êýñéïõ ÐñïãñÜììáôïò êáé ç åê ìÝñïõò ôïõ ÷ñÞóç ôïõ ÐñïãñÜììáôïò èá õðüêåéôáé óå ïðïéïõóäÞðïôå ðåñéïñéóìïýò ôßèåíôáé óôçí Üäåéá ÷ñÞóçò ôïõ Êýñéïõ ÐñïãñÜììáôïò Þ, åÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé áõôü ôï ðñüãñáììá ùò Êýñéï Ðñüãñáììá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ÷ñçóéìïðïéåß üëá ôá ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá ìüíï ãéá ôçí õðïóôÞñéîç áõôïý ôïõ ÐñïãñÜììáôïò êáé ç åê ìÝñïõò ôïõ ÷ñÞóç ôùí åí ëüãù ÐñïãñáììÜôùí èá õðüêåéôáé óå ïðïéïõóäÞðïôå ðåñéïñéóìïýò ôßèåíôáé óôçí ðáñïýóá Óýìâáóç. Ãéá ôïõ óêïðïýò ôïõ ðáñüíôïò åäáößïõ "óô", "Õðïóôçñéêôéêü Ðñüãñáììá" (Supporting Program) åßíáé Ýíá Ðñüãñáììá ðïõ áðïôåëåß ìÝñïò Üëëïõ ÐñïãñÜììáôïò ôçò IBM ("Êýñéï Ðñüãñáììá") êáé Ý÷åé ðñïóäéïñßæåôáé ùò Õðïóôçñéêôéêü Ðñüãñáììá óôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò ôïõ Êýñéïõ ÐñïãñÜììáôïò. (Ãéá ôçí áðüêôçóç ìéáò ÷ùñéóôÞò Üäåéáò ÷ñÞóçò ãéá Ýíá Õðïóôçñéêôéêü Ðñüãñáììá ÷ùñßò íá éó÷ýïõí áõôïß ïé ðåñéïñéóìïß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá áðåõèõíèåß óôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Õðïóôçñéêôéêü Ðñüãñáììá.) + +Ç ðáñïýóá Üäåéá ÷ñÞóçò éó÷ýåé ãéá êÜèå áíôßãñáöï ôïõ ÐñïãñÜììáôïò ðïõ äçìéïõñãåßôáé áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +3.1 ÐñïãñÜììáôá ÁíôéêáôÜóôáóçò, Áíáâáèìßóåéò, Äéïñèþóåéò êáé Åðéäéïñèþóåéò + +3.1.1 ÐñïãñÜììáôá ÁíôéêáôÜóôáóçò (Trade-ups) + +ÅÜí ôï Ðñüãñáììá áíôéêáôáóôáèåß áðü Ýíá Ðñüãñáììá ÁíôéêáôÜóôáóçò (Trade-up Program), ç Üäåéá ÷ñÞóçò ôïõ áíôéêáôáóôáèÝíôïò ÐñïãñÜììáôïò ôåñìáôßæåôáé Üìåóá. + +3.1.2 Áíáâáèìßóåéò, Äéïñèþóåéò êáé Åðéäéïñèþóåéò + +¼ôáí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ëÜâåé ìéá áíáâÜèìéóç (update), äéüñèùóç (fix) Þ åðéäéüñèùóç (patch) åíüò ÐñïãñÜììáôïò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ïðïéïõóäÞðïôå ðñüóèåôïõò Þ äéáöïñåôéêïýò üñïõò ðïõ éó÷ýïõí ãéá ôçí åí ëüãù áíáâÜèìéóç, äéüñèùóç Þ åðéäéüñèùóç êáé êáèïñßæïíôáé óôéò áíôßóôïé÷åò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóç. ÅÜí äåí ðáñÝ÷ïíôáé ðñüóèåôïé Þ äéáöïñåôéêïß üñïé, ôüôå ç áíáâÜèìéóç, äéüñèùóç Þ åðéäéüñèùóç õðüêåéôáé áðïêëåéóôéêÜ óôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. ÅÜí ôï Ðñüãñáììá áíôéêáôáóôáèåß áðü ìéá áíáâÜèìéóç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá ôåñìáôßóåé Üìåóá ôç ÷ñÞóç ôïõ áíôéêáôáóôáèÝíôïò ÐñïãñÜììáôïò. + +3.2 ¶äåéåò ×ñÞóçò ÊáèïñéóìÝíçò Ðåñéüäïõ + +ÅÜí ç IBM ÷ïñçãÞóåé Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ãéá êáèïñéóìÝíç ðåñßïäï, ç Üäåéá ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ôåñìáôßæåôáé êáôÜ ôç ëÞîç ôçò êáèïñéóìÝíçò ðåñéüäïõ, åêôüò åÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáé ç IBM óõìöùíÞóïõí óôçí áíáíÝùóÞ ôçò. + +3.3 ÓõìâáôéêÞ Ðåñßïäïò êáé Ôåñìáôéóìüò + +Ç ðáñïýóá Óýìâáóç ðáñáìÝíåé óå éó÷ý Ýùò üôïõ ôåñìáôéóôåß. + +Ç IBM ìðïñåß íá ôåñìáôßóåé ôçí Üäåéá ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óå ðåñßðôùóç ìç óõììüñöùóçò ôïõ ôåëåõôáßïõ ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. + +ÅÜí ç Üäåéá ÷ñÞóçò ôåñìáôéóôåß ãéá ïðïéïíäÞðïôå ëüãï áðü ïðïéïäÞðïôå áðü ôá äýï ìÝñç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá äéáêüøåé Üìåóá ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò êáé íá êáôáóôñÝøåé üëá ôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ðïõ Ý÷åé óôçí êáôï÷Þ ôïõ. ÏðïéïéäÞðïôå üñïé ôçò ðáñïýóáò Óýìâáóçò ôùí ïðïßùí ç éó÷ýò ðáñáôåßíåôáé áðü ôç öýóç ôïõò ðÝñáí ôïõ ôåñìáôéóìïý ôçò Óýìâáóçò, ðáñáìÝíïõí óå éó÷ý Ýùò üôïõ åêðëçñùèïýí êáé éó÷ýïõí êáé ãéá ôïõò áíôßóôïé÷ïõò äéáäü÷ïõò êáé åêäï÷åßò êÜèå åíüò áðü ôá äýï óõìâáëëüìåíá ìÝñç. + +4. ×ñåþóåéò + +Ïé ÷ñåþóåéò âáóßæïíôáé óôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ðïõ áðïêôÞèçêå, ôï ïðïßï êáèïñßæåôáé óôçí Áðüäåéîç Äéêáéþìáôïò. Ç IBM äåí åêäßäåé ðéóôùôéêÜ ôéìïëüãéá ïýôå åðéóôñÝöåé ÷ñÞìáôá ãéá ðïóÜ ðïõ Ý÷ïõí Þäç êáôáóôåß áðáéôçôÜ Þ Ý÷ïõí êáôáâëçèåß, åêôüò åÜí êáèïñßæåôáé äéáöïñåôéêÜ óå Üëëï óçìåßï ôçò ðáñïýóáò Óýìâáóçò. + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéèõìåß íá áõîÞóåé ôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ, èá ðñÝðåé íá åíçìåñþóåé ôçí IBM Þ êÜðïéïí åîïõóéïäïôçìÝíï ìåôáðùëçôÞ ôçò IBM åê ôùí ðñïôÝñùí êáé íá êáôáâÜëåé ïðïéåóäÞðïôå ó÷åôéêÝò ÷ñåþóåéò. + +5. Öüñïé + +ÅÜí ïðïéáäÞðïôå áñ÷Þ åðéâÜëåé äáóìü, öüñï, åðéâÜñõíóç Þ ÷ñÝùóç åðß ôïõ ÐñïãñÜììáôïò, åêôüò åêåßíùí ðïõ õðïëïãßæïíôáé ìå âÜóç ôï êáèáñü åéóüäçìá ôçò IBM, ôüôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá êáôáâÜëåé ôï áíôßóôïé÷ï ðïóü, üðùò ðñïóäéïñßæåôáé óå ó÷åôéêü ôéìïëüãéï, Þ íá ðñïóêïìßóåé Ýããñáöá áðáëëáãÞò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé õðåýèõíïò ãéá ôçí êáôáâïëÞ ïðïéùíäÞðïôå öüñùí ðñïóùðéêÞò ðåñéïõóßáò ãéá ôï Ðñüãñáììá áðü ôçí çìåñïìçíßá ôçò åê ìÝñïõò ôïõ áðüêôçóçò ôïõ ÐñïãñÜììáôïò. ÅÜí ïðïéáäÞðïôå áñ÷Þ åðéâÜëåé ôåëùíåéáêü äáóìü, öüñï, åðéâÜñõíóç Þ ÷ñÝùóç ãéá ôçí åéóáãùãÞ ôïõ ÐñïãñÜììáôïò óôç ÷þñá Þ ôçí åîáãùãÞ, ìåôáâßâáóç, ðñïóðÝëáóç Þ ÷ñÞóç ôïõ ÐñïãñÜììáôïò åêôüò ôçò ÷þñáò óôçí ïðïßá ÷ïñçãÞèçêå ç Üäåéá ÷ñÞóçò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò, ôüôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß üôé åßíáé õðåýèõíïò ãéá ôçí êáôáâïëÞ, êáé èá êáôáâÜëåé, ïðïéïäÞðïôå ðïóü ðïõ ôïõ åðéâÜëëåôáé. + +6. Åããýçóç ÅðéóôñïöÞò ×ñçìÜôùí + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ãéá ïðïéïíäÞðïôå ëüãï äåí åßíáé éêáíïðïéçìÝíïò ìå ôï Ðñüãñáììá êáé åßíáé ï áñ÷éêüò Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò, ôüôå äéêáéïýôáé íá ôåñìáôßóåé ôçí Üäåéá ÷ñÞóçò êáé íá ëÜâåé åðéóôñïöÞ ôïõ ðïóïý ðïõ êáôÝâáëå ãéá ôï Ðñüãñáììá, õðü ôçí ðñïûðüèåóç üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá åðéóôñÝøåé ôï Ðñüãñáììá êáé ôçí Áðüäåéîç Äéêáéþìáôïò óôï ìÝñïò áðü ôï ïðïßï ôá áðÝêôçóå åíôüò 30 çìåñþí áðü ôçí çìåñïìçíßá Ýêäïóçò ôçò Áðüäåéîçò Äéêáéþìáôïò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Áí ç Üäåéá ÷ñÞóçò åßíáé êáèïñéóìÝíçò ðåñéüäïõ êáé õðüêåéôáé óå áíáíÝùóç, ôüôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äéêáéïýôáé åðéóôñïöÞ ÷ñçìÜôùí ìüíï üôáí ôï Ðñüãñáììá êáé ç Áðüäåéîç Äéêáéþìáôïò åðéóôñáöïýí åíôüò ôùí ðñþôùí 30 çìåñþí ôçò áñ÷éêÞò ðåñéüäïõ. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åß÷å ìåôáöïñôþóåé ôï Ðñüãñáììá áðü ôï Äéáäßêôõï, ôüôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá ãéá ïäçãßåò ó÷åôéêÜ ìå ôï ðþò èá ôïõ åðéóôñáöïýí ôá ÷ñÞìáôá ðïõ êáôÝâáëå. + +7. Ìåôáâßâáóç ÐñïãñÜììáôïò + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá ìåôáâéâÜóåé ôï Ðñüãñáììá êáé üëá ôá äéêáéþìáôá êáé ôéò õðï÷ñåþóåéò ôïõ ðïõ ðñïâëÝðïíôáé óôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò, óå Üëëï ìÝñïò åöüóïí ôï Üëëï ìÝñïò áðïäå÷èåß ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. ÅÜí ç Üäåéá ÷ñÞóçò ôåñìáôéóôåß ãéá ïðïéïíäÞðïôå ëüãï áðü ïðïéïäÞðïôå áðü ôá äýï ìÝñç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí äéêáéïýôáé íá ìåôáâéâÜóåé ôï Ðñüãñáììá óå Üëëï ìÝñïò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí äéêáéïýôáé íá ìåôáâéâÜóåé ìÝñïò 1) ôïõ ÐñïãñÜììáôïò Þ 2) ôçò ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ ÐñïãñÜììáôïò. ¼ôáí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáâéâÜóåé ôï Ðñüãñáììá, èá ðñÝðåé åðßóçò íá ìåôáâéâÜóåé Ýíôõðï áíôßãñáöï ôçò ðáñïýóáò Óýìâáóçò, óõìðåñéëáìâáíïìÝíùí êáé ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóç êáé ôçò Áðüäåéîçò Äéêáéþìáôïò. ÁìÝóùò ìåôÜ ôçí ïëïêëÞñùóç ôçò ìåôáâßâáóçò, ç Üäåéá ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ôåñìáôßæåôáé. + +8. Åããýçóç êáé ÅîáéñÝóåéò + +8.1 ÐåñéïñéóìÝíç Åããýçóç + +Ç IBM åããõÜôáé üôé ôï Ðñüãñáììá, üôáí ÷ñçóéìïðïéåßôáé óôï êáèïñéóìÝíï ôïõ ðåñéâÜëëïí ëåéôïõñãßáò, èá áíôáðïêñßíåôáé óôéò ðñïäéáãñáöÝò ôïõ. Ïé ðñïäéáãñáöÝò ôïõ ÐñïãñÜììáôïò êáé ïé ðëçñïöïñßåò ãéá ôï êáèïñéóìÝíï ðåñéâÜëëïí ëåéôïõñãßáò ðáñÝ÷ïíôáé óôçí ôåêìçñßùóç ðïõ óõíïäåýåé ôï Ðñüãñáììá (üðùò ð.÷. óå áñ÷åßï "read-me") Þ óå Üëëåò äçìïóéåõìÝíåò ðëçñïöïñßåò ôçò IBM (üðùò ð.÷. óå åðéóôïëÞ áíáêïßíùóçò). Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß üôé ç åí ëüãù ôåêìçñßùóç êáé Üëëï ðåñéå÷üìåíï ó÷åôéêÜ ìå ôï Ðñüãñáììá ìðïñåß íá ðáñáó÷åèåß ìüíï óôçí áããëéêÞ ãëþóóá, åêôüò åÜí ðñïâëÝðïíôáé äéáöïñåôéêÝò áðáéôÞóåéò áðü ôï åöáñìïóôÝï äßêáéï êáé äåí õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò Þ ðåñéïñéóìïý áõôïý ôïõ äéêáéþìáôïò. + +Ç åããýçóç éó÷ýåé ìüíï ãéá ôï ìÝñïò ôïõ ÐñïãñÜììáôïò ðïõ äåí Ý÷åé õðïóôåß ôñïðïðïéÞóåéò. Ç IBM äåí åããõÜôáé ôçí áäéÜëåéðôç Þ ÷ùñßò óöÜëìáôá ëåéôïõñãßá ôïõ ÐñïãñÜììáôïò, ïýôå üôé ç IBM èá äéïñèþóåé üëá ôá åëáôôþìáôá ôïõ ÐñïãñÜììáôïò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé õðåýèõíïò ãéá ôá áðïôåëÝóìáôá ðïõ ðñïêýðôïõí áðü ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò. + +ÊáôÜ ôç äéÜñêåéá ôçò Ðåñéüäïõ Åããýçóçò, ç IBM ðáñÝ÷åé óôï Äéêáéïý÷ï ¶äåéá ×ñÞóçò ðñüóâáóç óå âÜóåéò äåäïìÝíùí ôçò IBM ðïõ ðåñéÝ÷ïõí ðëçñïöïñßåò ó÷åôéêÜ ìå ãíùóôÜ åëáôôþìáôá ÐñïãñáììÜôùí, êáèþò êáé äéïñèþóåéò, ðåñéïñéóìïýò êáé ôñüðïõò ðáñÜêáìøçò ôùí åëáôôùìÜôùí, ÷ùñßò ðñüóèåôç åðéâÜñõíóç. Ãéá ðåñéóóüôåñåò ðëçñïöïñßåò, óõìâïõëåõôåßôå ôï Åã÷åéñßäéï ÕðïóôÞñéîçò Ëïãéóìéêïý (IBM Software Support Handbook) óôç äéåýèõíóç www.ibm.com/software/support. + +ÅÜí êáôÜ ôç äéÜñêåéá ôçò Ðåñéüäïõ Åããýçóçò ôï Ðñüãñáììá äåí ëåéôïõñãåß üðùò ðñïâëÝðåé ç åããýçóç êáé ôï ðñüâëçìá äåí ìðïñåß íá åðéëõèåß ìå âÜóç ôéò ðëçñïöïñßåò ðïõ åßíáé äéáèÝóéìåò óôéò âÜóåéò äåäïìÝíùí ôçò IBM, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá åðéóôñÝøåé ôï Ðñüãñáììá êáé ôçí áíôßóôïé÷ç Áðüäåéîç Äéêáéþìáôïò óôï ìÝñïò áðü ôï ïðïßï ôï åß÷å áðïêôÞóåé (ôçí IBM Þ ôï ìåôáðùëçôÞ ôçò) êáé íá ëÜâåé åðéóôñïöÞ ôùí ÷ñçìÜôùí ðïõ åß÷å êáôáâÜëåé. ÌåôÜ ôçí åðéóôñïöÞ ôïõ ÐñïãñÜììáôïò, ç Üäåéá ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ôåñìáôßæåôáé. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åß÷å ìåôáöïñôþóåé ôï Ðñüãñáììá áðü ôï Äéáäßêôõï, ôüôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá ãéá ïäçãßåò ó÷åôéêÜ ìå ôï ðþò èá ôïõ åðéóôñáöïýí ôá ÷ñÞìáôá ðïõ êáôÝâáëå. + +8.2 ÅîáéñÝóåéò + +ÏÉ ÐÁÑÏÕÓÅÓ ÅÃÃÕÇÓÅÉÓ ÅÉÍÁÉ ÏÉ ÁÐÏÊËÅÉÓÔÉÊÅÓ ÅÃÃÕÇÓÅÉÓ ÐÏÕ ÐÁÑÅ×ÏÍÔÁÉ ÓÔÏ ÄÉÊÁÉÏÕ×Ï ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÊÁÉ ÁÍÔÉÊÁÈÉÓÔÏÕÍ ÏËÅÓ ÔÉÓ ÁËËÅÓ ÅÃÃÕÇÓÅÉÓ ¹ ÕÐÏÓ×ÅÓÅÉÓ, ÑÇÔÅÓ ¹ ÓÉÙÐÇÑÅÓ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÙÍ, ÅÍÄÅÉÊÔÉÊÁ ÊÁÉ Ï×É ÐÅÑÉÏÑÉÓÔÉÊÁ, ÏÐÏÉÙÍÄÇÐÏÔÅ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ¹ ÕÐÏÓ×ÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ, ÉÊÁÍÏÐÏÉÇÔÉÊÇÓ ÐÏÉÏÔÇÔÁÓ, ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ KAI ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÊÁÈÙÓ ÊÁÉ ÏÐÏÉÁÓÄÇÐÏÔÅ ÅÃÃÕÇÓÇÓ ¹ ÕÐÏÓ×ÅÓÇÓ ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ÔÑÉÔÙÍ. ÓÅ ÏÑÉÓÌÅÍÅÓ ×ÙÑÅÓ ¹ ÄÉÊÁÉÏÄÏÓÉÅÓ ÄÅÍ ÅÐÉÔÑÅÐÅÔÁÉ Ï ÁÐÏÊËÅÉÓÌÏÓ ÑÇÔÙÍ ¹ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ, ÅÐÏÌÅÍÙÓ, Ï ÁÍÙÔÅÑÙ ÁÐÏÊËÅÉÓÌÏÓ ÅÍÄÅ×ÅÔÁÉ ÍÁ ÌÇÍ ÉÓ×ÕÅÉ ÃÉÁ ÔÏ ÄÉÊÁÉÏÕ×Ï ÁÄÅÉÁÓ ×ÑÇÓÇÓ. ÓÔÇÍ ÐÅÑÉÐÔÙÓÇ ÁÕÔÇ, Ç ÉÓ×ÕÓ ÔÙÍ ÄÉÁÔÁÎÅÙÍ ÔÙÍ ÅÍ ËÏÃÙ ÅÃÃÕÇÓÅÙÍ ÐÅÑÉÏÑÉÆÅÔÁÉ ÓÔÇ ÄÉÁÑÊÅÉÁ ÔÇÓ ÐÅÑÉÏÄÏÕ ÅÃÃÕÇÓÇÓ. ÌÅÔÁ ÔÇ ËÇÎÇ ÁÕÔÇÓ ÔÇÓ ÐÅÑÉÏÄÏÕ ÄÅÍ ÉÓ×ÕÅÉ ÊÁÌÉÁ ÅÃÃÕÇÓÇ. ÓÅ ÏÑÉÓÌÅÍÅÓ ×ÙÑÅÓ ¹ ÄÉÊÁÉÏÄÏÓÉÅÓ ÄÅÍ ÅÐÉÔÑÅÐÏÍÔÁÉ ÐÅÑÉÏÑÉÓÌÏÉ ÓÔÇ ÄÉÁÑÊÅÉÁ ÉÓ×ÕÏÓ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ, ÅÐÏÌÅÍÙÓ, Ï ÁÍÙÔÅÑÙ ÐÅÑÉÏÑÉÓÌÏÓ ÅÍÄÅ×ÅÔÁÉ ÍÁ ÌÇÍ ÉÓ×ÕÅÉ ÃÉÁ ÔÏ ÄÉÊÁÉÏÕ×Ï ÁÄÅÉÁÓ ×ÑÇÓÇÓ. + +ÏÉ ÐÁÑÏÕÓÅÓ ÅÃÃÕÇÓÅÉÓ ÐÁÑÅ×ÏÕÍ ÓÔÏ ÄÉÊÁÉÏÕ×Ï ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÓÕÃÊÅÊÑÉÌÅÍÁ ÍÏÌÉÊÁ ÄÉÊÁÉÙÌÁÔÁ. Ï ÄÉÊÁÉÏÕ×ÏÓ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÅÍÄÅ×ÅÔÁÉ ÍÁ ÄÉÁÈÅÔÅÉ ÐÅÑÁÉÔÅÑÙ ÄÉÊÁÉÙÌÁÔÁ ÐÏÕ ÄÉÁÖÅÑÏÕÍ ÁÍÁËÏÃÁ ÌÅ ÔÇ ×ÙÑÁ ¹ ÔÇÍ ÉÓ×ÕÏÕÓÁ ÄÉÊÁÉÏÄÏÓÉÁ. + +ÏÉ ÅÃÃÕÇÓÅÉÓ ÐÏÕ ÁÍÁÖÅÑÏÍÔÁÉ ÓÔÏ ÐÁÑÏÍ ÁÑÈÑÏ 8 (ÅÃÃÕÇÓÇ ÊÁÉ ÅÎÁÉÑÅÓÅÉÓ) ÐÁÑÅ×ÏÍÔÁÉ ÁÐÏÊËÅÉÓÔÉÊÁ ÁÐÏ ÔÇÍ IBM. ¼ÌÙÓ, ÏÉ ÄÇËÙÓÅÉÓ ÁÐÏÐÏÉÇÓÇÓ ÔÇÓ ÐÁÑÏÕÓÁÓ ÅÍÏÔÇÔÁÓ 8.2 (ÅÎÁÉÑÅÓÅÉÓ) ÉÓ×ÕÏÕÍ ÅÐÉÓÇÓ ÃÉÁ ÔÏÕÓ ÐÑÏÌÇÈÅÕÔÅÓ ÊÙÄÉÊÁ ÔÑÉÔÙÍ (THIRD PARTY CODE) ÔÇÓ IBM. ÏÉ ÐÑÏÌÇÈÅÕÔÅÓ ÊÙÄÉÊÁ ÔÑÉÔÙÍ ÐÁÑÅ×ÏÕÍ ÔÏÍ ÅÍ ËÏÃÙ ÊÙÄÉÊÁ ×ÙÑÉÓ ÅÃÃÕÇÓÅÉÓ ¹ ÕÐÏÓ×ÅÓÅÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ. ÏÉ ÄÉÁÔÁÎÅÉÓ ÔÇÓ ÐÁÑÏÕÓÁÓ ÐÁÑÁÃÑÁÖÏÕ ÄÅÍ ÁÊÕÑÙÍÏÕÍ ÔÉÓ ÕÐÏ×ÑÅÙÓÅÉÓ ÅÃÃÕÇÓÇÓ ÔÇÓ IBM ÂÁÓÅÉ ÔÇÓ ÐÁÑÏÕÓÁÓ ÓÕÌÂÁÓÇÓ. + +9. ÄåäïìÝíá êáé ÂÜóåéò ÄåäïìÝíùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò + +Ãéá íá åßíáé óå èÝóç íá âïçèÞóåé ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò óôçí áðïìüíùóç ôçò áéôßáò åíüò ðñïâëÞìáôïò ìå ôï Ðñüãñáììá, ç IBM ìðïñåß íá æçôÞóåé áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò 1) íá åðéôñÝøåé óôçí IBM ôçí åî áðïóôÜóåùò ðñüóâáóç óôï óýóôçìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò Þ 2) íá óôåßëåé ðëçñïöïñßåò Þ äåäïìÝíá óõóôÞìáôïò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óôçí IBM. ¼ìùò, ç IBM äåí åßíáé õðï÷ñåùìÝíç íá ðáñÝ÷åé ôÝôïéá âïÞèåéá, åêôüò åÜí ç IBM êáé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñïâïýí óôç óýíáøç ÷ùñéóôÞò Ýããñáöçò óýìâáóçò âÜóåé ôçò ïðïßáò ç IBM íá óõìöùíåß íá ðáñÝ÷åé óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ôÝôïéïõ åßäïõò õðïóôÞñéîç, ç ïðïßá åßíáé åêôüò ôùí õðï÷ñåþóåùí åããýçóçò ôçò IBM âÜóåé ôçò ðáñïýóáò Óýìâáóçò. Óå êÜèå ðåñßðôùóç, ç IBM ÷ñçóéìïðïéåß ôéò ðëçñïöïñßåò ãéá óöÜëìáôá êáé ðñïâëÞìáôá ìüíï ãéá ôç âåëôßùóç ôùí ðñïúüíôùí êáé ôùí õðçñåóéþí ôçò êáé ãéá ôçí êáëýôåñç ðáñï÷Þ ôùí ó÷åôéêþí ôçò ðñïóöïñþí õðïóôÞñéîçò. Ãéá ôçí åîõðçñÝôçóç áõôþí ôùí óêïðþí, ç IBM ìðïñåß íá êÜíåé ÷ñÞóç ïñãáíéóìþí êáé õðåñãïëÜâùí ôçò IBM (óõìðåñéëáìâáíïìÝíùí êáé ïñãáíéóìþí êáé õðåñãïëÜâùí óå ìßá Þ ðåñéóóüôåñåò ÷þñåò åêôüò ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò Ý÷åé ôçí Ýäñá ôïõ) êáé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí IBM íá ôï ðñÜîåé. + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðáñáìÝíåé õðåýèõíïò ãéá 1) ïðïéáäÞðïôå äåäïìÝíá êáé ôï ðåñéå÷üìåíï ïðïéáóäÞðïôå âÜóçò äåäïìÝíùí ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáèéóôÜ äéáèÝóéìç óôçí IBM, 2) ôçí åðéëïãÞ êáé åöáñìïãÞ äéáäéêáóéþí êáé åëÝã÷ùí áíáöïñéêÜ ìå ôçí ðñïóðÝëáóç, áóöÜëåéá, êñõðôïãñÜöçóç, ÷ñÞóç êáé ìåôÜäïóç äåäïìÝíùí (óõìðåñéëáìâáíïìÝíùí êáé ðëçñïöïñéþí óôéò ïðïßåò äçëþíåôáé Þ áðü ôéò ïðïßåò ìðïñåß íá ðñïêýøåé ç ôáõôüôçôá óõãêåêñéìÝíùí ðñïóþðùí) êáé 3) ôçí åöåäñéêÞ áðïèÞêåõóç (backup) êáé áðïêáôÜóôáóç ïðïéáóäÞðïôå âÜóçò äåäïìÝíùí êáé ïðïéùíäÞðïôå áðïèçêåõìÝíùí äåäïìÝíùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí èá áðïóôÝëëåé êáé äåí èá ðáñÝ÷åé óôçí IBM ðñüóâáóç óå ðëçñïöïñßåò óôéò ïðïßåò äçëþíåôáé Þ áðü ôéò ïðïßåò ìðïñåß íá ðñïêýøåé ç ôáõôüôçôá óõãêåêñéìÝíùí ðñïóþðùí, åßôå óå ìïñöÞ äåäïìÝíùí åßôå óå ïðïéáäÞðïôå Üëëç ìïñöÞ, êáé èá öÝñåé ôçí åõèýíç ãéá åýëïãåò äáðÜíåò êáé Üëëá ðïóÜ ìå ôá ïðïßá ìðïñåß íá åðéâáñõíèåß ç ÉÂÌ óå óõíÜñôçóç ìå ôçí åóöáëìÝíç ðáñï÷Þ ôÝôïéùí ðëçñïöïñéþí óôçí IBM Þ ôçí áðþëåéá Þ áðïêÜëõøç ôÝôïéùí ðëçñïöïñéþí áðü ôçí IBM, óõìðåñéëáìâáíïìÝíùí ôùí äáðáíþí ðïõ áðïññÝïõí áðü áîéþóåéò ôñßôùí. + +10. Ðåñéïñéóìüò Åõèýíçò + +Ïé ðåñéïñéóìïß êáé ïé åîáéñÝóåéò ðïõ ïñßæïíôáé óôï ðáñüí ¶ñèñï 10 (Ðåñéïñéóìüò Åõèýíçò) Ý÷ïõí ðëÞñç éó÷ý óôï âáèìü ðïõ äåí áðáãïñåýïíôáé áðü ôï åöáñìïóôÝï äßêáéï ÷ùñßò íá õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞ ðáñáßôçóçò áðü ôá áíôßóôïé÷á äéêáéþìáôá. + +10.1 Óôïé÷åßá ãéá ôá ïðïßá åíäÝ÷åôáé íá öÝñåé åõèýíç ç IBM + +ÅíäÝ÷åôáé íá ðñïêýøïõí ðåñéóôÜóåéò êáôÜ ôéò ïðïßåò, ëüãù áèÝôçóçò óõìâáôéêÞò õðï÷ñÝùóçò åê ìÝñïõò ôçò IBM Þ ëüãù Üëëçò åõèýíçò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äéêáéïýôáé íá ëÜâåé áðïæçìßùóç áðü ôçí IBM. ÁíåîÜñôçôá áðü ôç âÜóç åðß ôçò ïðïßáò ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äéêáéïýôáé íá åãåßñåé áîßùóç áðïæçìßùóçò êáôÜ ôçò IBM (óõìðåñéëáìâáíïìÝíçò ôçò áèÝôçóçò ïõóéùäþí óõìâáôéêþí üñùí, áìÝëåéáò, øåõäïýò äÞëùóçò Þ Üëëçò áîßùóçò ðïõ áðïññÝåé áðü óýìâáóç Þ áäéêïðñáîßá), ç óõíïëéêÞ åõèýíç ôçò IBM ãéá üëåò ôéò áîéþóåéò, óùñåõôéêÜ, ðïõ áðïññÝïõí áðü Þ ó÷åôßæïíôáé ìå êÜèå Ðñüãñáììá Þ êáôÜ Üëëï ôñüðï ðñïêýðôïõí áðü ôçí ðáñïýóá Óýìâáóç, äåí èá õðåñâáßíåé ôï ðïóü 1) ôçò áðïæçìßùóçò ãéá óùìáôéêÞ âëÜâç (óõìðåñéëáìâáíïìÝíïõ èáíÜôïõ) êáé ôçò áðïæçìßùóçò êéíçôÞò êáé áêßíçôçò áôïìéêÞò ðåñéïõóßáò êáé 2) ïðïéáóäÞðïôå Üëëçò èåôéêÞò Üìåóçò æçìßáò Ýùò ôï ðïóü ôùí ÷ñåþóåùí (åÜí ôï Ðñüãñáììá õðüêåéôáé óå ÷ñåþóåéò êáèïñéóìÝíçò ðåñéüäïõ, Ýùò ôï ðïóü ôùí ÷ñåþóåùí 12 ìçíþí) ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáôÝâáëå ãéá ôï Ðñüãñáììá ðïõ áðïôåëåß áíôéêåßìåíï ôçò áîßùóçò. + +Ôï üñéï áõôü éó÷ýåé åðßóçò ãéá ïðïéåóäÞðïôå åôáéñåßåò áíÜðôõîçò ÐñïãñáììÜôùí êáé ðñïìçèåõôÝò ôçò IBM. Åßíáé ç ìÝãéóôç åõèýíç ðïõ öÝñïõí óõëëïãéêÜ ç IBM, ïé åôáéñåßåò áíÜðôõîçò ÐñïãñáììÜôùí ôçò êáé ïé ðñïìçèåõôÝò ôçò. + +10.2 Óôïé÷åßá ãéá ôá ïðïßá äåí öÝñåé åõèýíç ç IBM + +ÓÅ ÊÁÌÉÁ ÐÅÑÉÐÔÙÓÇ ÄÅÍ ÖÅÑÏÕÍ ÅÕÈÕÍÇ Ç IBM, ÏÉ ÐÑÏÌÇÈÅÕÔÅÓ ÔÇÓ ¹ ÏÉ ÅÔÁÉÑÅÉÅÓ ÁÍÁÐÔÕÎÇÓ ÐÑÏÃÑÁÌÌÁÔÙÍ ÌÅ ÔÉÓ ÏÐÏÉÅÓ ÓÕÍÅÑÃÁÆÅÔÁÉ ÃÉÁ ÏÐÏÉÏÄÇÐÏÔÅ ÁÐÏ ÔÁ ÁÊÏËÏÕÈÁ, ÁÊÏÌÁ ÊÁÉ ÁÍ Å×ÏÕÍ ÅÍÇÌÅÑÙÈÅÉ ÃÉÁ ÔÇÍ ÐÉÈÁÍÏÔÇÔÁ ÍÁ ÐÑÏÊÕØÏÕÍ: + +á. ÁÐÙËÅÉÁ ¹ ÖÈÏÑÁ ÄÅÄÏÌÅÍÙÍ + +â. ÅÉÄÉÊÅÓ, ÐÁÑÅÐÏÌÅÍÅÓ ¹ ÅÌÌÅÓÅÓ ÆÇÌÉÅÓ, ÁÐÏÆÇÌÉÙÓÇ ÃÉÁ ÇÈÉÊÇ ÂËÁÂÇ ¹ ÏÐÏÉÅÓÄÇÐÏÔÅ ÏÉÊÏÍÏÌÉÊÅÓ ÁÐÏÈÅÔÉÊÅÓ ÆÇÌÉÅÓ, ¹ + +ã. ÄÉÁÖÕÃÏÍÔÁ ÊÅÑÄÇ, ÁÐÙËÅÉÁ ÅÐÉ×ÅÉÑÇÌÁÔÉÊÙÍ ÄÑÁÓÔÇÑÉÏÔÇÔÙÍ, ÅÓÏÄÙÍ, ¶ÕËÇÓ ÅÌÐÏÑÉÊÇÓ ÁÎÉÁÓ ¹ ÐÑÏÓÄÏÊÙÌÅÍÙÍ ÊÅÑÄÙÍ. + +11. ÅðáëÞèåõóç Óõììüñöùóçò + +Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò ¶ñèñïõ 11 (ÅðáëÞèåõóç Óõììüñöùóçò), ìå ôïí üñï "¼ñïé ÐñïãñáììÜôùí IPLA" íïïýíôáé 1) ç ðáñïýóá Óýìâáóç êáé ïé áíôßóôïé÷åò ôñïðïðïéÞóåéò êáé Ýããñáöá óõíáëëáãþí ðïõ ðáñÝ÷ïíôáé áðü ôçí IBM êáé 2) ïé ðïëéôéêÝò ëïãéóìéêïý (software policies) ôçò IBM, ïé ïðïßåò ðåñéãñÜöïíôáé óôï äéêôõáêü ôüðï IBM Software Policy (www.ibm.com/softwarepolicies), óõìðåñéëáìâáíïìÝíùí, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, ôùí ðïëéôéêþí ðåñß åöåäñéêÞò õðïóôÞñéîçò (backup), ôéìïëüãçóçò ìåéùìÝíçò äõíáìéêüôçôáò (sub-capacity pricing) êáé ìåôÜðôùóçò (migration). + +Ôá äéêáéþìáôá êáé ïé õðï÷ñåþóåéò ðïõ êáèïñßæïíôáé óôï ðáñüí ¶ñèñï 11 ðáñáìÝíïõí óå éó÷ý êáôÜ ôç äéÜñêåéá ôçò ÷ñïíéêÞò ðåñéüäïõ ãéá ôçí ïðïßá Ý÷åé ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò, óõí äýï åðéðëÝïí Ýôç ìåôÜ ôç ëÞîç ôçò åí ëüãù ðåñéüäïõ. + +11.1 Äéáäéêáóßá ÅðáëÞèåõóçò + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá äçìéïõñãåß, íá ôçñåß êáé íá ðáñÝ÷åé óôçí IBM êáé ôïõò åëåãêôÝò ôçò áêñéâÞ Ýããñáöá óôïé÷åßá, áðïôåëÝóìáôá åñãáëåßùí ôïõ óõóôÞìáôïò êáé Üëëá äåäïìÝíá ôïõ óõóôÞìáôïò ôá ïðïßá åðáñêïýí ðñïêåéìÝíïõ íá ðáñÜó÷ïõí ôç äõíáôüôçôá åðáëÞèåõóçò, ç ïðïßá èá õðüêåéôáé óå Ýëåã÷ï, üôé ç ÷ñÞóç üëùí ôùí ÐñïãñáììÜôùí åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óõììïñöþíåôáé ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí IPLA, óõìðåñéëáìâáíïìÝíùí, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, üëùí ôùí ó÷åôéêþí üñùí ôçò IBM ðåñß ðñïûðïèÝóåùí ôéìïëüãçóçò êáé ÷ïñÞãçóçò áäåéþí ÷ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé õðåýèõíïò 1) íá åîáóöáëßæåé üôé äåí õðåñâáßíåé ôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ êáé 2) íá åîáêïëïõèåß íá óõììïñöþíåôáé ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí IPLA. + +ÌåôÜ áðü åýëïãç åéäïðïßçóç, ç IBM ìðïñåß íá åëÝãîåé ôç óõììüñöùóç ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí IPLA óå üëåò ôéò ôïðïèåóßåò êáé ãéá üëá ôá ðåñéâÜëëïíôá óôá ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ÷ñçóéìïðïéåß (ãéá ïðïéïíäÞðïôå óêïðü) ÐñïãñÜììáôá ðïõ õðüêåéíôáé óôïõò ¼ñïõò ÐñïãñáììÜôùí IPLA. Ç åí ëüãù åðáëÞèåõóç èá äéåîÜãåôáé ìå ôñüðï ðïõ íá åëá÷éóôïðïéåß ôï åíäå÷üìåíï ðñüêëçóçò áíáóôÜôùóçò óôçí åðé÷åßñçóç ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ìðïñåß íá äéåîÜãåôáé óôéò åãêáôáóôÜóåéò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, êáôÜ ôï êáíïíéêü åñãÜóéìï ùñÜñéï. Ç IBM ìðïñåß íá ÷ñçóéìïðïéÞóåé áíåîÜñôçôï åëåãêôÞ ãéá ôçí ðáñï÷Þ âïÞèåéáò êáôÜ ôïí åí ëüãù åðáëÞèåõóç, õðü ôçí ðñïûðüèåóç üôé ç IBM Ý÷åé óõíÜøåé Ýããñáöç óýìâáóç åìðéóôåõôéêüôçôáò ìå ôïí åí ëüãù åëåãêôÞ. + +11.2 Åðßëõóç + +Ç IBM èá åéäïðïéåß ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò åããñÜöùò åÜí êáôÜ ôçí ðñáãìáôïðïßçóç ôÝôïéáò åðáëÞèåõóçò äéáðéóôùèåß üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò Ý÷åé ÷ñçóéìïðïéÞóåé ïðïéïäÞðïôå Ðñüãñáììá ðÝñáí ôïõ åðéðÝäïõ ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ Þ êáôÜ Üëëïí ôñüðï äåí óõììïñöþíåôáé ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí IPLA. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá êáôáâÜëëåé ÷ùñßò êáèõóôÝñçóç áðåõèåßáò óôçí IBM ôéò ÷ñåþóåéò ðïõ êáèïñßæïíôáé áðü ôçí IBM óå Ýíá ôéìïëüãéï ãéá 1) ïðïéáäÞðïôå ôÝôïéá ðñüóèåôç ÷ñÞóç, 2) õðïóôÞñéîç ãéá ôçí åí ëüãù ðñüóèåôç ÷ñÞóç ãéá ôç äéÜñêåéá ôçò ðñüóèåôçò ÷ñÞóçò Þ ãéá ðåñßïäï äýï åôþí, üðïéá áðü ôéò äýï ðåñéüäïõò áõôÝò åßíáé ìéêñüôåñç êáé 3) ïðïéåóäÞðïôå ÷ñåþóåéò êáé Üëëåò ïöåéëÝò ðïõ ôõ÷üí êáèïñéóôïýí ùò áðïôÝëåóìá ôçò åí ëüãù åðáëÞèåõóçò. + +12. ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéÝ÷åé êþäéêá ôñßôùí ðñïìçèåõôþí (third party code) ãéá ôïí ïðïßï ç IBM, êáé ü÷é ï ôñßôïò ðñïìçèåõôÞò, ÷ïñçãåß Üäåéáò ÷ñÞóçò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò âÜóåé ôïí üñùí ôçò ðáñïýóáò Óýìâáóçò. ÏðïéåóäÞðïôå åéäïðïéÞóåéò ó÷åôéêÜ ìå ôïí êþäéêá ôñßôùí ðñïìçèåõôþí ("ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí") óõìðåñéëáìâÜíïíôáé ìüíï ãéá ôçí ðëçñïöüñçóç ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. ÁõôÝò ïé åéäïðïéÞóåéò äéáôßèåíôáé óôï (óôá) áñ÷åßï(-á) NOTICES ôïõ ÐñïãñÜììáôïò. Óôéò Óçìåéþóåéò ãéá Êþäéêá Ôñßôùí ðáñÝ÷ïíôáé ðëçñïöïñßåò ó÷åôéêÜ ìå ôïí ôñüðï áðüêôçóçò ðçãáßïõ êþäéêá ãéá ôïí êþäéêá êÜðïéùí ôñßôùí ðñïìçèåõôþí. ÅÜí óôéò ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí êÜðïéïò êþäéêáò ôñßôùí ðñïìçèåõôþí ðñïóäéïñßæåôáé áðü ôçí IBM ùò "ÔñïðïðïéÞóéìïò Êþäéêáò Ôñßôùí" ("Modifiable Third Party Code"), ç IBM åîïõóéïäïôåß ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò 1) íá ôñïðïðïéÞóåé ôïí ÔñïðïðïéÞóéìï Êþäéêá Ôñßôùí êáé 2) íá ðñïâåß óôçí áðïóõìðßëçóç (reverse engineering) ôùí åíïôÞôùí ôïõ ÐñïãñÜììáôïò ðïõ óõíäÝïíôáé Üìåóá ìå ôïí ÔñïðïðïéÞóéìï Êþäéêá Ôñßôùí, õðü ôçí ðñïûðüèåóç üôé ç åí ëüãù áðïóõìðßëçóç ðñáãìáôïðïéåßôáé ìüíï ãéá ôï óêïðü ôçò áðïóöáëìÜôùóçò (debugging) ôùí ôñïðïðïéÞóåùí ðïõ ðñáãìáôïðïßçóå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óôïí åí ëüãù êþäéêá ôñßôùí. ÏðïéåóäÞðïôå õðï÷ñåþóåéò ðáñï÷Þò õðçñåóéþí êáé õðïóôÞñéîçò ôçò IBM éó÷ýïõí ìüíï ãéá ôç ìç ôñïðïðïéçìÝíç åêäï÷Þ ôïõ ÐñïãñÜììáôïò. + +13. ÃåíéêÜ + +á. ÊáíÝíáò üñïò ôçò ðáñïýóáò Óýìâáóçò äåí åðçñåÜæåé ïðïéáäÞðïôå äéêáéþìáôá êáôáíáëùôÞ ðïõ áðïññÝïõí áðü ôï íüìï êáé ãéá ôá ïðïßá äåí õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò Þ ðåñéïñéóìïý. + +â. Ãéá ÐñïãñÜììáôá ðïõ ðáñÝ÷åé ç IBM óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò óå áðôÞ ìïñöÞ, ç IBM åêðëçñþíåé ôéò õðï÷ñåþóåéò áðïóôïëÞò êáé ðáñÜäïóÞò ôçò ìå ôçí ðáñÜäïóç ôùí åí ëüãù ÐñïãñáììÜôùí óôçí êáèïñéóìÝíç áðü ôçí IBM ìåôáöïñéêÞ åôáéñåßá, åêôüò åÜí óõìöùíçèåß äéáöïñåôéêÜ ãñáðôþò áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò êáé ôçí IBM. + +ã. ÅÜí ïðïéáäÞðïôå äéÜôáîç ôçò Óýìâáóçò êñéèåß Üêõñç Þ ìç åöáñìüóéìç, ïé õðüëïéðåò äéáôÜîåéò ôçò Óýìâáóçò ðáñáìÝíïõí óå ðëÞñç éó÷ý êáé åöáñìïãÞ. + +ä. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá óõììïñöþíåôáé ìå üëïõò ôïõò éó÷ýïíôåò íüìïõò êáé êáíïíéóìïýò ðåñß åîáãùãþí êáé åéóáãùãþí, óõìðåñéëáìâáíïìÝíùí ôùí êáíïíéóìþí ðåñß ïéêïíïìéêþí áðïêëåéóìþí êáé êõñþóåùí êáé ôùí áðáãïñåýóåùí åîáãùãÞò ôùí ÇíùìÝíùí Ðïëéôåéþí ãéá ïñéóìÝíåò ôåëéêÝò ÷ñÞóåéò Þ óå ïñéóìÝíïõò ôåëéêïýò ÷ñÞóôåò. + +å. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí International Business Machines Corporation êáé ôéò èõãáôñéêÝò ôçò (êáé ôïõò äéáäü÷ïõò êáé åêäï÷åßò, åñãïëÜâïõò êáé ôïõò Åðé÷åéñçóéáêïýò ÓõíåñãÜôåò ôçò IBM) íá áðïèçêåýïõí êáé íá ÷ñçóéìïðïéïýí ôá óôïé÷åßá åðéêïéíùíßáò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò üðïõ äéåîÜãïõí ôéò åðé÷åéñçóéáêÝò ôïõò äñáóôçñéüôçôåò, óå ó÷Ýóç ìå ôá ðñïúüíôá êáé ôéò õðçñåóßåò ôçò IBM Þ ãéá ôçí ðñïþèçóç ôçò åðé÷åéñçìáôéêÞò ó÷Ýóçò ôçò IBM ìå ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +óô. ÊÜèå Ýíá áðü ôá äýï ìÝñç èá ðáñÜó÷åé óôï Üëëï åýëïãç åõ÷Ýñåéá íá óõììïñöùèåß ðñïò ôéò õðï÷ñåþóåéò ôïõ ðñïôïý éó÷õñéóôåß üôé ôï Üëëï ìÝñïò äåí áíôáðïêñßèçêå óôéò õðï÷ñåþóåéò ôïõ âÜóåé ôçò ðáñïýóáò Óýìâáóçò. Ôá äýï ìÝñç èá åðé÷åéñïýí íá åðéëýïõí êáëüðéóôá ïðïéåóäÞðïôå äéáöïñÝò, äéáöùíßåò Þ áîéþóåéò ìåôáîý ôùí äýï ìåñþí áíáöïñéêÜ ìå ôçí ðáñïýóá Óýìâáóç. + +æ. Åêôüò åÜí Üëëùò áðáéôåßôáé áðü ôï åöáñìïóôÝï äßêáéï ÷ùñßò íá õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò Þ ðåñéïñéóìïý áõôïý ôïõ äéêáéþìáôïò: 1) êáíÝíá áðü ôá äýï ìÝñç äåí èá åãåßñåé áãùãÞ ïðïéáóäÞðïôå ìïñöÞò ãéá ïðïéáäÞðïôå áîßùóç ç ïðïßá áðïññÝåé áðü Þ ó÷åôßæåôáé ìå ôçí ðáñïýóá Óýìâáóç ìåôÜ ôçí ðÜñïäï äéåôßáò áðü ôçí çìåñïìçíßá êáôÜ ôçí ïðïßá ðñïÝêõøå ç áéôßá Ýãåñóçò ôçò áãùãÞò êáé 2) ìåôÜ ôç ëÞîç ôçò åí ëüãù ÷ñïíéêÞò ðñïèåóìßáò, ïðïéáäÞðïôå ôÝôïéá áîßùóç êáé üëá ôá äéêáéþìáôá ðïõ ó÷åôßæïíôáé ìå ôçí åí ëüãù áîßùóç èá ðáñáãñáöïýí. + +ç. Ïýôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ïýôå ç IBM äåí åßíáé õðåýèõíïé ãéá ôç ìç åêðëÞñùóç ïðïéùíäÞðïôå õðï÷ñåþóåþí ôïõò ãéá ëüãïõò ðÝñáí ôïõ åëÝã÷ïõ ôïõò. + +è. Äåí äçìéïõñãåßôáé ïðïéïäÞðïôå äéêáßùìá Þ âÜóç áîßùóçò ãéá ïðïéïäÞðïôå ôñßôï ìÝñïò áðü ôçí ðáñïýóá Óýìâáóç, êáé ç IBM äåí åßíáé õðåýèõíç ãéá ïðïéåóäÞðïôå áîéþóåéò ôñßôùí åíáíôßïí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, ðáñÜ ìüíï üðùò åðéôñÝðåôáé óôçí áíùôÝñù åíüôçôá 10.1 (Óôïé÷åßá ãéá ôá ïðïßá åíäÝ÷åôáé íá öÝñåé åõèýíç ç IBM) ó÷åôéêÜ ìå áðïæçìßùóç ãéá óùìáôéêÞ âëÜâç (óõìðåñéëáìâáíïìÝíïõ ôïõ èáíÜôïõ) Þ ãéá áðïæçìßùóç êéíçôÞò êáé áêßíçôçò áôïìéêÞò ðåñéïõóßáò ãéá ôçí ïðïßá ç IBM öÝñåé åõèýíç êáôÜ ôï íüìï Ýíáíôé ôïõ åí ëüãù ôñßôïõ ìÝñïõò. + +é. Ðñïâáßíïíôáò óôç óýíáøç ôçò ðáñïýóáò Óýìâáóçò, êáíÝíá áðü ôá äýï ìÝñç äåí âáóßæåôáé óå ïðïéåóäÞðïôå äçëþóåéò ðïõ äåí êáèïñßæïíôáé óôçí ðáñïýóá Óýìâáóç, óõìðåñéëáìâáíïìÝíùí, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, ïðïéùíäÞðïôå äçëþóåùí ó÷åôéêÜ ìå: 1) ôçí áðüäïóç Þ ëåéôïõñãßá ôïõ ÐñïãñÜììáôïò ðÝñáí áõôÞò ðïõ ðñïâëÝðåôáé ñçôþò óôï áíùôÝñù ¶ñèñï 8 (Åããýçóç êáé ÅîáéñÝóåéò), 2) ôéò åìðåéñßåò Þ õðïäåßîåéò Üëëùí ìåñþí Þ 3) ïðïéáäÞðïôå áðïôåëÝóìáôá Þ ïéêïíïìßåò ðïõ ìðïñåß íá åðéôý÷åé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò. + +éá. Ç IBM Ý÷åé óõíÜøåé óõìâÜóåéò ìå ïñéóìÝíïõò ïñãáíéóìïýò ("Åìðïñéêïß ÓõíåñãÜôåò ôçò IBM" - "IBM Business Partners") ãéá ôçí ðñïþèçóç, äéÜèåóç êáé õðïóôÞñéîç ïñéóìÝíùí ÐñïãñáììÜôùí. Ïé Åìðïñéêïß ÓõíåñãÜôåò ôçò IBM åîáêïëïõèïýí íá åßíáé áíåîÜñôçôïé ïñãáíéóìïß ðïõ ëåéôïõñãïýí ÷ùñéóôÜ áðü ôçí IBM. Ç IBM äåí åßíáé õðåýèõíç ãéá ôéò ðñÜîåéò Þ ôéò äçëþóåéò Åìðïñéêþí Óõíåñãáôþí ôçò IBM Þ ãéá ôçí åêðëÞñùóç ôùí õðï÷ñåþóåùí ðïõ Ý÷ïõí ðñïò ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +éâ. Ïé üñïé ðåñß áäåéþí ÷ñÞóçò êáé áðïæçìßùóçò ãéá ðíåõìáôéêÞ éäéïêôçóßá ðïõ ðåñéëáìâÜíïíôáé óå Üëëåò óõìâÜóåéò ðïõ Ý÷åé óõíÜøåé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìå ôçí IBM (üðùò ð.÷. ç Óýìâáóç Ðåëáôþí IBM) äåí éó÷ýïõí ãéá Üäåéåò ÷ñÞóçò ÐñïãñáììÜôùí ðïõ ÷ïñçãïýíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò. + +14. ÃåùãñáöéêÞ ÅìâÝëåéá êáé ÅöáñìïóôÝï Äßêáéï + +14.1 ÅöáñìïóôÝï Äßêáéï + +Êáé ôá äýï ìÝñç óõìöùíïýí óôçí åöáñìïãÞ ôçò íïìïèåóßáò ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò üóïí áöïñÜ óôçí éó÷ý, åñìçíåßá êáé åêôÝëåóç üëùí ôùí áíôßóôïé÷ùí äéêáéùìÜôùí, êáèçêüíôùí êáé õðï÷ñåþóåùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôçò IBM ðïõ áðïññÝïõí áðü, Þ ó÷åôßæïíôáé êáè' ïðïéïíäÞðïôå ôñüðï ìå, ôá èÝìáôá ðïõ êáëýðôåé ç Óýìâáóç, ÷ùñßò íá ëáìâÜíïíôáé õðüøç ôõ÷üí áíôéèÝóåéò áñ÷þí äéêáßïõ. + +Äåí åöáñìüæåôáé ç Óýìâáóç ôùí ÇíùìÝíùí Åèíþí ðåñß ÓõìâÜóåùí ãéá ôç ÄéåèíÞ Ðþëçóç Áãáèþí. + +14.2 Äéêáéïäïóßá + +¼ëá ôá äéêáéþìáôá, ôá êáèÞêïíôá êáé ïé õðï÷ñåþóåéò õðüêåéíôáé óôç äéêáéïäïóßá ôùí äéêáóôçñßùí ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. + +ÌÝñïò 2 - ¼ñïé ðïõ Åìðßðôïõí óôï Äßêáéï êÜèå ×þñáò + +Ãéá ôéò Üäåéåò ÷ñÞóçò ðïõ ÷ïñçãïýíôáé óôéò ÷þñåò ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù, ïé áêüëïõèïé üñïé áíôéêáèéóôïýí Þ ôñïðïðïéïýí ôïõò áíáöåñüìåíïõò üñïõò óôï ÌÝñïò 1. ¼ëïé ïé üñïé óôï ÌÝñïò 1 ðïõ äåí åðçñåÜæïíôáé áðü áõôÝò ôéò ôñïðïðïéÞóåéò ðáñáìÝíïõí ùò Ý÷ïõí êáé åîáêïëïõèïýí íá éó÷ýïõí. Ôï ðáñüí ÌÝñïò 2 ïñãáíþíåôáé ùò åîÞò: + +* ÔñïðïðïéÞóåéò óôï ÌÝñïò 1, ¶ñèñï 14 (ÅöáñìïóôÝï Äßêáéï êáé Äéêáéïäïóßá) ãéá äéÜöïñåò ÷þñåò, êáé + +* ÔñïðïðïéÞóåéò óå Üëëïõò üñïõò ôçò Óýìâáóçò ãéá ÷þñåò ôçò Åõñþðçò, ÌÝóçò ÁíáôïëÞò êáé ÁöñéêÞò. + +ÔñïðïðïéÞóåéò óôï ÌÝñïò 1, ¶ñèñï 14 (ÅöáñìïóôÝï Äßêáéï êáé Äéêáéïäïóßá) ãéá äéÜöïñåò ÷þñåò + +14.2 Äéêáéïäïóßá + +Ç áêüëïõèç ðáñÜãñáöïò áöïñÜ óôç äéêáéïäïóßá êáé áíôéêáèéóôÜ ôçí åíüôçôá 14.2 (Äéêáéïäïóßá) ãéá ôéò ÷þñåò ðïõ åìöáíßæïíôáé ðáñáêÜôù: + +¼ëá ôá äéêáéþìáôá, ôá êáèÞêïíôá êáé ïé õðï÷ñåþóåéò õðüêåéíôáé óôç äéêáéïäïóßá ôùí äéêáóôçñßùí ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò, åêôüò áðü ôéò ÷þñåò ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù, üðïõ áðïêëåéóôéêÜ áñìüäéá ãéá ôçí åðßëõóç üëùí ôùí äéáöïñþí ðïõ áðïññÝïõí áðü Þ ó÷åôßæïíôáé ìå ôçí ðáñïýóá Óýìâáóç, óõìðåñéëáìâáíïìÝíùí ôùí óõíïðôéêþí íïìéêþí äéáäéêáóéþí, èá åßíáé ôá áêüëïõèá äéêáóôÞñéá: + +ÅÕÑÙÐÇ, ÌÅÓÇ ÁÍÁÔÏËÇ ÊÁÉ ÁÖÑÉÊÇ + +óôçí ÅëëÜäá: ôï áñìüäéï äéêáóôÞñéï ôçò ÁèÞíáò. + +ÔÑÏÐÏÐÏÉÇÓÅÉÓ ÃÉÁ ×ÙÑÅÓ ÔÇÓ ÅÕÑÙÐÇÓ, ÌÅÓÇÓ ÁÍÁÔÏËÇÓ ÊÁÉ ÁÖÑÉÊÇÓ (EMEA) + +ÊÑÁÔÇ ÌÅËÇ ÔÇÓ ÅÕÑÙÐÁÚÊÇÓ ÅÍÙÓÇÓ + +8. Åããýçóç êáé ÅîáéñÝóåéò + +Ôï áêüëïõèï êåßìåíï ðñïóôßèåôáé óôï ¶ñèñï 8 (Åããýçóç êáé ÅîáéñÝóåéò): + +Óôçí ÅõñùðáúêÞ ¸íùóç ("ÅÅ"), ïé êáôáíáëùôÝò Ý÷ïõí íüìéìá äéêáéþìáôá âÜóåé ôçò éó÷ýïõóáò åèíéêÞò íïìïèåóßáò ðïõ äéÝðåé ôçí ðþëçóç êáôáíáëùôéêþí áãáèþí. Ôá åí ëüãù äéêáéþìáôá äåí åðçñåÜæïíôáé áðü ôéò äéáôÜîåéò áõôïý ôïõ ¶ñèñïõ 8 (Åããýçóç êáé ÅîáéñÝóåéò). Ç ÐåñéïñéóìÝíç Åããýçóç Ý÷åé ðáãêüóìéá éó÷ý. + +13. ÃåíéêÜ + +Ôï áêüëïõèï êåßìåíï áíôéêáèéóôÜ ôï åäÜöéï 13.å: + +(1) Ïñéóìïß - Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò åäáößïõ 13.å, éó÷ýïõí ïé áêüëïõèïé ðñüóèåôïé ïñéóìïß: + +(á) ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò (Business Contact Information) - óôïé÷åßá åðáããåëìáôéêÞò åðéêïéíùíßáò ðïõ áðïêáëýðôïíôáé áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò óôçí IBM, óõìðåñéëáìâáíïìÝíùí ïíïìÜôùí, åðáããåëìáôéêþí ôßôëùí, åðáããåëìáôéêþí äéåõèýíóåùí, áñéèìþí ôçëåöþíïõ êáé äéåõèýíóåùí e-mail õðáëëÞëùí êáé åñãïëÜâùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Ãéá ôçí Áõóôñßá, ôçí Éôáëßá êáé ôçí Åëâåôßá, ôá ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò ðåñéëáìâÜíïõí åðßóçò ðëçñïöïñßåò ãéá ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò êáé ôïõò õðåñãïëÜâïõò ôïõ ùò íïìéêÜ ðñüóùðá (ãéá ðáñÜäåéãìá, óôïé÷åßá ãéá ôá Ýóïäá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò Þ Üëëá ïéêïíïìéêÜ óôïé÷åßá). + +(â) Ðñïóùðéêü ÅðáããåëìáôéêÞò Åðéêïéíùíßáò (Business Contact Personnel) - ïé õðÜëëçëïé êáé ïé åñãïëÜâïé ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óôïõò ïðïßïõò áíáöÝñïíôáé ôá ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò. + +(ã) Áñ÷Þ Ðñïóôáóßáò ÄåäïìÝíùí (Data Protection Authority) - ç áñ÷Þ ðïõ Ý÷åé éäñõèåß óôá ðëáßóéá ôçò Íïìïèåóßáò ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé Çëåêôñïíéêþí Åðéêïéíùíéþí óå ìéá óõãêåêñéìÝíç ÷þñá Þ, ãéá ÷þñåò åêôüò ôçò ÅõñùðáúêÞò ¸íùóçò, ç áñ÷Þ ðïõ åßíáé õðåýèõíç ãéá ôçí åðéôÞñçóç ôçò ðñïóôáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá óôç óõãêåêñéìÝíç ÷þñá Þ (ãéá ïðïéáäÞðïôå áðü ôéò áíùôÝñù ðåñéðôþóåéò) ïðïéïäÞðïôå ðñïâëåðüìåíï áðü ôï íüìï äéÜäï÷ï íïìéêü ðñüóùðï ôçò åí ëüãù áñ÷Þò. + +(ä) Íïìïèåóßá ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé Çëåêôñïíéêþí Åðéêïéíùíéþí (Data Protection & Electronic Communications Legislation) - (i) ç éó÷ýïõóá ôïðéêÞ íïìïèåóßá êáé ïé áíôßóôïé÷ïé êáíïíéóìïß ðïõ èåóðßóôçêáí ìå óêïðü ôç óõììüñöùóç ìå ôéò áðáéôÞóåéò ôçò Ïäçãßáò 95/46/EC ôçò ÅõñùðáúêÞò ¸íùóçò (ðåñß ôçò åðåîåñãáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá êáé ôçò åëåýèåñçò êßíçóçò ôùí åí ëüãù äåäïìÝíùí) êáé ôçò Ïäçãßáò 2002/58/EC ôçò ÅõñùðáúêÞò ¸íùóçò (ðåñß ôçò åðåîåñãáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá êáé ôçò ðñïóôáóßáò ôçò éäéùôéêüôçôáò óôïí ôïìÝá ôùí çëåêôñïíéêþí åðéêïéíùíéþí) Þ (ii) ãéá ÷þñåò åêôüò ôçò ÅõñùðáúêÞò ¸íùóçò, ç íïìïèåóßá Þ/êáé ïé êáíïíéóìïß ðïõ èåóðßóôçêáí óôç óõãêåêñéìÝíç ÷þñá áíáöïñéêÜ ìå ôçí ðñïóôáóßá äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá êáé ôç ñýèìéóç çëåêôñïíéêþí åðéêïéíùíéþí ðïõ ðåñéëáìâÜíïõí ôçí áíôáëëáãÞ äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá Þ (êáé óôéò äýï áíùôÝñù ðåñéðôþóåéò) ïðïéáäÞðïôå ðñïâëåðüìåíç áðü ôï íüìï áíôéêáôÜóôáóç Þ ôñïðïðïßçóç ôùí áíùôÝñù. + +(å) ¼ìéëïò IBM (IBM Group) - ç International Business Machines Corporation ìå Ýäñá ôçí Armonk, New York, Ç.Ð.Á., ïé èõãáôñéêÝò ôçò êáé ïé áíôßóôïé÷ïé Åìðïñéêïß ÓõíåñãÜôåò êáé õðåñãïëÜâïé ôïõò. + +(2) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí IBM: + +(á) íá åðåîåñãÜæåôáé êáé íá ÷ñçóéìïðïéåß ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò åíôüò ôïõ Ïìßëïõ IBM óôá ðëáßóéá ôçò õðïóôÞñéîçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, óõìðåñéëáìâáíïìÝíçò êáé ôçò ðáñï÷Þò õðçñåóéþí õðïóôÞñéîçò, êáé ãéá ôï óêïðü ôçò ðåñáéôÝñù åíßó÷õóçò ôùí åðé÷åéñçìáôéêþí ó÷Ýóåùí ìåôáîý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôïõ Ïìßëïõ IBM, óõìðåñéëáìâáíïìÝíçò, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, ôçò åðéêïéíùíßáò ìå Ðñïóùðéêü ÅðáããåëìáôéêÞò Åðéêïéíùíßáò (ìÝóù e-mail Þ Üëëùò) êáé ôçò ðñïþèçóçò ðñïúüíôùí êáé õðçñåóéþí ôïõ Ïìßëïõ IBM (ï "ÊáèïñéóìÝíïò Óêïðüò"), êáé + +(â) íá áðïêáëýðôåé ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò óå Üëëá ìÝëç ôïõ Ïìßëïõ IBM ìüíï óôá ðëáßóéá ôçò åðßôåõîçò ôïõ ÊáèïñéóìÝíïõ Óêïðïý. + +(3) Ç IBM óõìöùíåß üôé ç åðåîåñãáóßá üëùí ôùí Åðáããåëìáôéêþí Óôïé÷åßùí Åðéêïéíùíßáò èá ðñáãìáôïðïéåßôáé óýìöùíá ìå ôç Íïìïèåóßá ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé ÇëåêôñïíéêÞò Åðéêïéíùíßáò êáé üôé ôá åí ëüãù Óôïé÷åßá èá ÷ñçóéìïðïéïýíôáé ìüíï ãéá ôïí ÊáèïñéóìÝíï Óêïðü. + +(4) Óôï âáèìü ðïõ áðáéôåßôáé áðü ôç Íïìïèåóßá ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé ÇëåêôñïíéêÞò Åðéêïéíùíßáò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äçëþíåé üôé (á) Ý÷åé áðïêôÞóåé (Þ èá áðïêôÞóåé) ôéò áðáéôïýìåíåò óõãêáôáèÝóåéò êáé üôé Ý÷åé áðåõèýíåé (Þ èá áðåõèýíåé) ôéò áðáéôïýìåíåò åéäïðïéÞóåéò óôï Ðñïóùðéêü ÅðáããåëìáôéêÞò Åðéêïéíùíßáò) þóôå ï ¼ìéëïò IBM íá åßíáé óå èÝóç íá åðåîåñãÜæåôáé êáé íá ÷ñçóéìïðïéåß ôá ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò ãéá ôïí ÊáèïñéóìÝíï Óêïðü. + +(5) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí IBM íá ìåôáâéâÜóåé ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò åêôüò ôïõ Åõñùðáúêïý Ïéêïíïìéêïý ×þñïõ, åöüóïí ç åí ëüãù ìåôáâßâáóç ðñáãìáôïðïéçèåß âÜóåé óõìâáôéêþí üñùí ðïõ Ý÷ïõí åãêñéèåß áðü ôçí Áñ÷Þ Ðñïóôáóßáò ÄåäïìÝíùí Þ êáôÜ Üëëïí ôñüðï åðéôñÝðåôáé óôá ðëáßóéá ôçò Íïìïèåóßáò ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé Çëåêôñïíéêþí Åðéêïéíùíéþí. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_en b/charts/mq-advancedserver/LICENSE_locale/LICENSE_en new file mode 100644 index 0000000..0c15bd7 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_en @@ -0,0 +1,2037 @@ +NOTICE + +This document includes License Information documents below for multiple Programs. Each License Information document identifies the Program(s) to which it applies. Only those License Information documents for the Program(s) for which Licensee has acquired entitlements apply. + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name (Program Number): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +The following standard terms apply to Licensee's use of the Program. + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Supporting Programs + +The Program is licensed as a multi-product package and includes the Supporting Programs identified below. Licensee is authorized to install and use such Supporting Programs only to support Licensee's use of the Principal Program under this Agreement and within the limits of the Proofs of Entitlement for the Program (unless broader rights are provided elsewhere in this License Information document). The phrase "to support Licensee's use" would include only those uses that are necessary or otherwise directly related to a licensed use of the Principal Program or another Supporting Program. The Supporting Programs may not be used for any other purpose. Licensee is not authorized to transfer or remarket the Supporting Programs separate from the Principal Program. A Supporting Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Supporting Program. In the event of conflict, the terms in this License Information document supersede the Supporting Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Supporting Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Supporting Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Supporting Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Supporting Programs licensed with the Program: +IBM WebSphere Application Server Liberty V17.0 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name (Program Number): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Limited use right + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Specifications + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Supporting Programs + +The Program is licensed as a multi-product package and includes the Supporting Programs identified below. Licensee is authorized to install and use such Supporting Programs only to support Licensee's use of the Principal Program under this Agreement and within the limits of the Proofs of Entitlement for the Program (unless broader rights are provided elsewhere in this License Information document). The phrase "to support Licensee's use" would include only those uses that are necessary or otherwise directly related to a licensed use of the Principal Program or another Supporting Program. The Supporting Programs may not be used for any other purpose. Licensee is not authorized to transfer or remarket the Supporting Programs separate from the Principal Program. A Supporting Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Supporting Program. In the event of conflict, the terms in this License Information document supersede the Supporting Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Supporting Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Supporting Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Supporting Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Supporting Programs licensed with the Program: +IBM WebSphere Application Server Liberty V17.0 + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Redistributables + +If the Program includes components that are Redistributable, they will be identified in the REDIST file that accompanies the Program. In addition to the license rights granted in the Agreement, Licensee may distribute the Redistributables subject to the following terms: +1) Redistribution must be in object code form only and must conform to all directions, instruction and specifications in the Program's accompanying REDIST or documentation; +2) If the Program's accompanying documentation expressly allows Licensee to modify the Redistributables, such modification must conform to all directions, instruction and specifications in that documentation and these modifications, if any, must be treated as Redistributables; +3) Redistributables may be distributed only as part of Licensee's application that was developed using the Program ("Licensee's Application") and only to support Licensee's customers in connection with their use of Licensee's Application. Licensee's Application must constitute significant value add such that the Redistributables are not a substantial motivation for the acquisition by end users of Licensee's software product; +4) If the Redistributables include a Java Runtime Environment, Licensee must also include other non-Java Redistributables with Licensee's Application, unless the Application is designed to run only on general computer devices (for example, laptops, desktops and servers) and not on handheld or other pervasive devices (i.e., devices that contain a microprocessor but do not have computing as their primary purpose); +5) Licensee may not remove any copyright or notice files contained in the Redistributables; +6) Licensee must hold IBM, its suppliers or distributors harmless from and against any claim arising out of the use or distribution of Licensee's Application; +7) Licensee may not use the same path name as the original Redistributable files/modules; +8) Licensee may not use IBM's, its suppliers or distributors names or trademarks in connection with the marketing of Licensee's Application without IBM's or that supplier's or distributor's prior written consent; +9) IBM, its suppliers and distributors provide the Redistributables and related documentation without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE; +10) Licensee is responsible for all technical assistance for Licensee's Application and any modifications to the Redistributables; and +11) Licensee's license agreement with the end user of Licensee's Application must notify the end user that the Redistributables or their modifications may not be i) used for any purpose other than to enable Licensee's Application, ii) copied (except for backup purposes), iii) further distributed or transferred without Licensee's Application or iv) reverse assembled, reverse compiled, or otherwise translated except as specifically permitted by law and without the possibility of a contractual waiver. Furthermore, Licensee's license agreement must be at least as protective of IBM as the terms of this Agreement. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +For Source Components and Sample Materials listed in a Program's REDIST file, Licensee may redistribute modified versions of those Source Components or Sample Materials consistent with the terms of this license and any instructions in the REDIST file. + +The following units of measure may apply to Licensee's use of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +Virtual Processor Core + +Virtual Processor Core is a unit of measure by which the Program can be licensed. A Physical Server is a physical computer that is comprised of processing units, memory, and input/output capabilities and that executes requested procedures, commands, or applications for one or more users or client devices. Where racks, blade enclosures, or other similar equipment is being employed, each separable physical device (for example, a blade or a rack-mounted device) that has the required components is considered itself a separate Physical Server. A Virtual Server is either a virtual computer created by partitioning the resources available to a Physical Server or an unpartitioned Physical Server. A Processor Core (commonly called a processor or CPU) is a functional unit within a computing device that interprets and executes instructions. A Processor Core consists of at least an instruction control unit and one or more arithmetic or logic unit. A Virtual Processor Core is a Processor Core in an unpartitioned Physical Server, or a virtual core assigned to a Virtual Server. Licensee must obtain entitlement for each Virtual Processor Core made available to the Program. + +For each Physical Server, Licensee must have sufficient entitlements for the lesser of 1) the sum of all available Virtual Processor Cores on all Virtual Servers made available to the Program or 2) all available Processor Cores on the Physical Server. + +In addition to the above, the following terms apply to Licensee's use of the Program. + +Idle Standby configurations + +For the purposes of this section, an "Idle Standby" configuration is one where a copy of the Program is installed on a server which forms part of a high availability solution and is the server to which the Program will fail over in the event that the copy of the Program on the active server ceases to be usable. A server is only considered "idle" if, until a failover takes place, it is used exclusively for administrative actions that assist in failover scenarios. + +The Program may not be installed on an Idle Standby server except if appropriately licensed. + +If the Program is used in an Idle Standby configuration with the Multi-Instance Queue Manager feature, then a copy of the Program may reside for backup purposes on an Idle Standby server, and started, but must remain "idle" and not be used to carry out productive work of any kind unless the active server fails over on to the Idle Standby server, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +If the Program is used in an Idle Standby configuration with other High Availability systems, then a copy of the Program may reside for backup purposes on an Idle Standby server but not started (and therefore not be used to carry out productive work of any kind), but will be started automatically by the High Availability components in the event of the active server failing, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name (Program Number): +IBM MQ Advanced V9.0.3 (Evaluation) + +The following standard terms apply to Licensee's use of the Program. + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name (Program Number): +IBM MQ Advanced V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Limited use right + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Specifications + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +The following units of measure may apply to Licensee's use of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +Virtual Processor Core + +Virtual Processor Core is a unit of measure by which the Program can be licensed. A Physical Server is a physical computer that is comprised of processing units, memory, and input/output capabilities and that executes requested procedures, commands, or applications for one or more users or client devices. Where racks, blade enclosures, or other similar equipment is being employed, each separable physical device (for example, a blade or a rack-mounted device) that has the required components is considered itself a separate Physical Server. A Virtual Server is either a virtual computer created by partitioning the resources available to a Physical Server or an unpartitioned Physical Server. A Processor Core (commonly called a processor or CPU) is a functional unit within a computing device that interprets and executes instructions. A Processor Core consists of at least an instruction control unit and one or more arithmetic or logic unit. A Virtual Processor Core is a Processor Core in an unpartitioned Physical Server, or a virtual core assigned to a Virtual Server. Licensee must obtain entitlement for each Virtual Processor Core made available to the Program. + +For each Physical Server, Licensee must have sufficient entitlements for the lesser of 1) the sum of all available Virtual Processor Cores on all Virtual Servers made available to the Program or 2) all available Processor Cores on the Physical Server. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name (Program Number): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +The following standard terms apply to Licensee's use of the Program. + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ Idle Standby V9.0.3 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name (Program Number): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Limited use right + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Specifications + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ Idle Standby V9.0.3 + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +The following units of measure may apply to Licensee's use of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +In addition to the above, the following terms apply to Licensee's use of the Program. + +Idle Standby configurations + +For the purposes of this section, an "Idle Standby" configuration is one where a copy of the Program is installed on a server which forms part of a high availability solution and is the server to which the Program will fail over in the event that the copy of the Program on the active server ceases to be usable. A server is only considered "idle" if, until a failover takes place, it is used exclusively for administrative actions that assist in failover scenarios. + +The Program may not be installed on an Idle Standby server except if appropriately licensed. + +If the Program is used in an Idle Standby configuration with the Multi-Instance Queue Manager feature, then a copy of the Program may reside for backup purposes on an Idle Standby server, and started, but must remain "idle" and not be used to carry out productive work of any kind unless the active server fails over on to the Idle Standby server, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +If the Program is used in an Idle Standby configuration with other High Availability systems, then a copy of the Program may reside for backup purposes on an Idle Standby server but not started (and therefore not be used to carry out productive work of any kind), but will be started automatically by the High Availability components in the event of the active server failing, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name (Program Number): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +The following standard terms apply to Licensee's use of the Program. + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Developer Limitation + +If the Program is designated as for "Developers", the Program can only be deployed as part of Licensee's internal development and unit testing on a developer machine. A developer machine is a physical or virtual desktop environment, running a primary operating system and the Program, both of which are accessible and used by no more than one specified developer. Licensee is not authorized to use the Program for processing production workloads, simulating production workloads or testing scalability of any code, application or system. Licensee is not authorized to use any part of the Program for any other purposes without acquiring the appropriate production entitlements. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name (Program Number): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Limited use right + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Specifications + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Developer Limitation + +If the Program is designated as for "Developers", the Program can only be deployed as part of Licensee's internal development and unit testing on a developer machine. A developer machine is a physical or virtual desktop environment, running a primary operating system and the Program, both of which are accessible and used by no more than one specified developer. Licensee is not authorized to use the Program for processing production workloads, simulating production workloads or testing scalability of any code, application or system. Licensee is not authorized to use any part of the Program for any other purposes without acquiring the appropriate production entitlements. + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +The following units of measure may apply to Licensee's use of the Program. + +Install + +Install is a unit of measure by which the Program can be licensed. An Install is an installed copy of the Program on a physical or virtual disk made available to be executed on a computer. Licensee must obtain an entitlement for each Install of the Program. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name: IBM MQ Managed File Transfer Service V9.0.1 +Program Number: Evaluation + +Program Name: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Program Number: Evaluation + +Program Name: IBM MQ Managed File Transfer Agent V9.0.1 +Program Number: Evaluation + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name: IBM MQ Managed File Transfer Service V9.0.1 +Program Number: 5724-H72 + +Program Name: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Program Number: 5724-H72 + +Program Name: IBM MQ Managed File Transfer Agent V9.0.1 +Program Number: 5724-H72 + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Redistributables + +If the Program includes components that are Redistributable, they will be identified in the REDIST file that accompanies the Program. In addition to the license rights granted in the Agreement, Licensee may distribute the Redistributables subject to the following terms: +1) Redistribution must be in object code form only and must conform to all directions, instruction and specifications in the Program's accompanying REDIST or documentation; +2) If the Program's accompanying documentation expressly allows Licensee to modify the Redistributables, such modification must conform to all directions, instruction and specifications in that documentation and these modifications, if any, must be treated as Redistributables; +3) Redistributables may be distributed only as part of Licensee's application that was developed using the Program ("Licensee's Application") and only to support Licensee's customers in connection with their use of Licensee's Application. Licensee's Application must constitute significant value add such that the Redistributables are not a substantial motivation for the acquisition by end users of Licensee's software product; +4) If the Redistributables include a Java Runtime Environment, Licensee must also include other non-Java Redistributables with Licensee's Application, unless the Application is designed to run only on general computer devices (for example, laptops, desktops and servers) and not on handheld or other pervasive devices (i.e., devices that contain a microprocessor but do not have computing as their primary purpose); +5) Licensee may not remove any copyright or notice files contained in the Redistributables; +6) Licensee must hold IBM, its suppliers or distributors harmless from and against any claim arising out of the use or distribution of Licensee's Application; +7) Licensee may not use the same path name as the original Redistributable files/modules; +8) Licensee may not use IBM's, its suppliers or distributors names or trademarks in connection with the marketing of Licensee's Application without IBM's or that supplier's or distributor's prior written consent; +9) IBM, its suppliers and distributors provide the Redistributables and related documentation without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE; +10) Licensee is responsible for all technical assistance for Licensee's Application and any modifications to the Redistributables; and +11) Licensee's license agreement with the end user of Licensee's Application must notify the end user that the Redistributables or their modifications may not be i) used for any purpose other than to enable Licensee's Application, ii) copied (except for backup purposes), iii) further distributed or transferred without Licensee's Application or iv) reverse assembled, reverse compiled, or otherwise translated except as specifically permitted by law and without the possibility of a contractual waiver. Furthermore, Licensee's license agreement must be at least as protective of IBM as the terms of this Agreement. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +For Source Components and Sample Materials listed in a Program's REDIST file, Licensee may redistribute modified versions of those Source Components or Sample Materials consistent with the terms of this license and any instructions in the REDIST file. + +Install + +Install is a unit of measure by which the Program can be licensed. An Install is an installed copy of the Program on a physical or virtual disk made available to be executed on a computer. Licensee must obtain an entitlement for each Install of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +Program-unique Terms + +Idle Standby configurations + +For the purposes of this section, an "Idle Standby" configuration is one where a copy of the Program is installed on a server which forms part of a high availability solution and is the server to which the Program will fail over in the event that the copy of the Program on the active server ceases to be usable. A server is only considered "idle" if, until a failover takes place, it is used exclusively for administrative actions that assist in failover scenarios. + +The Program may not be installed on an Idle Standby server except if appropriately licensed. + +If the Program is used in an Idle Standby configuration with the Multi-Instance Queue Manager feature, then a copy of the Program may reside for backup purposes on an Idle Standby server, and started, but must remain "idle" and not be used to carry out productive work of any kind unless the active server fails over on to the Idle Standby server, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +If the Program is used in an Idle Standby configuration with other High Availability systems, then a copy of the Program may reside for backup purposes on an Idle Standby server but not started (and therefore not be used to carry out productive work of any kind), but will be started automatically by the High Availability components in the event of the active server failing, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Evaluation of Programs (Z125-5543-05) applies. + +Program Name: IBM MQ Advanced Message Security V9.0.1 +Program Number: Evaluation + +Program Name: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Program Number: Evaluation + +Program Name: IBM MQ Telemetry V9.0.1 +Program Number: Evaluation + +Evaluation Period + +The evaluation period begins on the date that Licensee agrees to the terms of this Agreement and ends after 90 days. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name: IBM MQ Advanced Message Security V9.0.1 +Program Number: 5724-H72 + +Program Name: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Program Number: 5724-H72 + +Program Name: IBM MQ Telemetry V9.0.1 +Program Number: 5724-H72 + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +Install + +Install is a unit of measure by which the Program can be licensed. An Install is an installed copy of the Program on a physical or virtual disk made available to be executed on a computer. Licensee must obtain an entitlement for each Install of the Program. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) is a unit of measure by which the Program can be licensed. The number of PVU entitlements required is based on the processor technology (defined within the PVU Table by Processor Vendor, Brand, Type and Model Number at http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) and the number of processors made available to the Program. IBM continues to define a processor, for the purpose of PVU-based licensing, to be each processor core on a chip. A dual-core processor chip, for example, has two processor cores. + +Licensee can deploy the Program using either Full Capacity licensing or Virtualization Capacity (Sub-Capacity) licensing according to the Passport Advantage Sub-Capacity Licensing Terms (see webpage below). If using Full Capacity licensing, Licensee must obtain PVU entitlements sufficient to cover all activated processor cores* in the physical hardware environment made available to or managed by the Program, except for those servers from which the Program has been permanently removed. If using Virtualization Capacity licensing, Licensee must obtain entitlements sufficient to cover all activated processor cores made available to or managed by the Program, as defined according to the Virtualization Capacity License Counting Rules at http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* An Activated processor core is a processor core that is available for use in a physical or virtual server, regardless of whether the capacity of the processor core can be or is limited through virtualization technologies, operating system commands, BIOS settings, or similar restrictions. + +Program-unique Terms + +Idle Standby configurations + +For the purposes of this section, an "Idle Standby" configuration is one where a copy of the Program is installed on a server which forms part of a high availability solution and is the server to which the Program will fail over in the event that the copy of the Program on the active server ceases to be usable. A server is only considered "idle" if, until a failover takes place, it is used exclusively for administrative actions that assist in failover scenarios. + +The Program may not be installed on an Idle Standby server except if appropriately licensed. + +If the Program is used in an Idle Standby configuration with the Multi-Instance Queue Manager feature, then a copy of the Program may reside for backup purposes on an Idle Standby server, and started, but must remain "idle" and not be used to carry out productive work of any kind unless the active server fails over on to the Idle Standby server, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + +If the Program is used in an Idle Standby configuration with other High Availability systems, then a copy of the Program may reside for backup purposes on an Idle Standby server but not started (and therefore not be used to carry out productive work of any kind), but will be started automatically by the High Availability components in the event of the active server failing, in which event the Idle Standby copy may be used to carry out productive work during the period of failover. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +IMPORTANT: READ CAREFULLY + +Two license agreements are presented below. + +1. IBM International License Agreement for Evaluation of Programs +2. IBM International Program License Agreement + +If Licensee is obtaining the Program for purposes of productive use (other than evaluation, testing, trial "try or buy," or demonstration): By clicking on the "Accept" button below, Licensee accepts the IBM International Program License Agreement, without modification. + +If Licensee is obtaining the Program for the purpose of evaluation, testing, trial "try or buy," or demonstration (collectively, an "Evaluation"): By clicking on the "Accept" button below, Licensee accepts both (i) the IBM International License Agreement for Evaluation of Programs (the "Evaluation License"), without modification; and (ii) the IBM International Program License Agreement (the "IPLA"), without modification. + +The Evaluation License will apply during the term of Licensee's Evaluation. + +The IPLA will automatically apply if Licensee elects to retain the Program after the Evaluation (or obtain additional copies of the Program for use after the Evaluation) by entering into a procurement agreement (e.g., the IBM International Passport Advantage or the IBM Passport Advantage Express agreements). + +The Evaluation License and the IPLA are not in effect concurrently; neither modifies the other; and each is independent of the other. + +The complete text of each of these two license agreements follow. + + +International License Agreement for Evaluation of Programs + +Part 1 - General Terms + +BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, CLICKING ON AN "ACCEPT" BUTTON, OR OTHERWISE USING THE PROGRAM, LICENSEE AGREES TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCEPTING THESE TERMS ON BEHALF OF LICENSEE, YOU REPRESENT AND WARRANT THAT YOU HAVE FULL AUTHORITY TO BIND LICENSEE TO THESE TERMS. IF YOU DO NOT AGREE TO THESE TERMS, + +* DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, CLICK ON AN "ACCEPT" BUTTON, OR USE THE PROGRAM; AND + +* PROMPTLY RETURN THE UNUSED MEDIA AND DOCUMENTATION TO THE PARTY FROM WHOM IT WAS OBTAINED. IF THE PROGRAM WAS DOWNLOADED, DESTROY ALL COPIES OF THE PROGRAM. + +1. Definitions + +"Authorized Use" - the specified level at which Licensee is authorized to execute or run the Program. That level may be measured by number of users, millions of service units ("MSUs"), Processor Value Units ("PVUs"), or other level of use specified by IBM. + +"IBM" - International Business Machines Corporation or one of its subsidiaries. + +"License Information" ("LI") - a document that provides information and any additional terms specific to a Program. The Program's LI can be found in the Program's directory, by the use of a system command, or as a booklet included with the Program. + +"Program" - the following, including the original and all whole or partial copies: 1) machine-readable instructions and data, 2) components, files, and modules, 3) audio-visual content (such as images, text, recordings, or pictures), and 4) related licensed materials (such as keys and documentation). + +2. Agreement Structure + +This Agreement includes Part 1 - General Terms, Part 2 - Country-unique Terms (if any) and the LI and is the complete agreement between Licensee and IBM regarding the use of the Program. It replaces any prior oral or written communications between Licensee and IBM concerning Licensee's use of the Program. The terms of Part 2 may replace or modify those of Part 1. To the extent of any conflict, the LI prevails over both Parts. + +3. License Grant + +The Program is owned by IBM or an IBM supplier, and is copyrighted and licensed, not sold. + +IBM grants Licensee a limited, nonexclusive, nontransferable license to 1) download, install, and use the Program during the evaluation period up to the Authorized Use specified in the LI solely for internal evaluation, testing, or demonstration purposes on a trial basis; 2) make and install a reasonable number of copies to support such Authorized Use, and 3) make a backup copy, all provided that + +a. Licensee has lawfully obtained the Program and complies with the terms of this Agreement; + +b. the backup copy does not execute unless the backed-up Program cannot execute; + +c. Licensee reproduces all copyright notices and other legends of ownership on each copy, or partial copy, of the Program; + +d. Licensee maintains a record of all copies of the Program and ensures that anyone who uses the Program (accessed either locally or remotely) 1) does so only on Licensee's behalf and 2) complies with the terms of this Agreement; + +e. Licensee does not 1) use the Program for productive purposes or otherwise use, copy, modify, or distribute the Program except as expressly permitted in this Agreement; 2) reverse assemble, reverse compile, otherwise translate, or reverse engineer the Program, except as expressly permitted by law without the possibility of contractual waiver; 3) use any of the Program's components, files, modules, audio-visual content, or related licensed materials separately from that Program; 4) sublicense, rent, or lease the Program; or 5) use the Program for commercial application hosting; and + +f. if Licensee obtains this Program as a Supporting Program, Licensee uses this Program only to support the Principal Program and subject to any limitations in the license to the Principal Program, or, if Licensee obtains this Program as a Principal Program, Licensee uses all Supporting Programs only to support this Program, and subject to any limitations in this Agreement. For purposes of this Item "f," a "Supporting Program" is a Program that is part of another IBM Program ("Principal Program") and identified as a Supporting Program in the Principal Program's LI. (To obtain a separate license to a Supporting Program without these restrictions, Licensee should contact the party from whom Licensee obtained the Supporting Program.) + +This license applies to each copy of the Program that Licensee makes. + +3.1 Updates, Fixes, and Patches + +When Licensee receives an update, fix, or patch to a Program, Licensee accepts any additional or different terms that are applicable to such update, fix, or patch that are specified in its LI. If no additional or different terms are provided, then the update, fix, or patch is subject solely to this Agreement. If the Program is replaced by an update, Licensee agrees to promptly discontinue use of the replaced Program. + +3.2 Term and Termination + +The evaluation period begins on the date Licensee agrees to the terms of this Agreement and ends upon the earliest of 1) the end of the duration or the date specified by IBM in either the License Information or a transaction document or 2) the date on which the Program automatically disables itself. Licensee will destroy the Program and all copies made of it within ten days of the end of the evaluation period. If IBM specifies in the LI that Licensee may retain the Program, and Licensee elects to do so, then the Program will be subject to a different license agreement, which IBM will provide to Licensee. In addition, a charge may apply. + +IBM may terminate Licensee's license if Licensee fails to comply with the terms of this Agreement. If the license is terminated for any reason by either party, Licensee agrees to promptly discontinue use of and destroy all of Licensee's copies of the Program. Any terms of this Agreement that by their nature extend beyond termination of this Agreement remain in effect until fulfilled, and apply to both parties' respective successors and assignees. + +THE PROGRAM MAY CONTAIN A DISABLING DEVICE THAT WILL PREVENT IT FROM BEING USED AFTER THE EVALUATION PERIOD ENDS. LICENSEE AGREES NOT TO TAMPER WITH THE DISABLING DEVICE OR THE PROGRAM. LICENSEE SHOULD TAKE PRECAUTIONS TO AVOID ANY LOSS OF DATA THAT MIGHT RESULT WHEN THE PROGRAM CAN NO LONGER BE USED. + +4. Charges + +There is no charge for the use of the Program for the duration of the evaluation period. + +5. No Warranties + +SUBJECT TO ANY STATUTORY WARRANTIES THAT CANNOT BE EXCLUDED, IBM MAKES NO WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, REGARDING THE PROGRAM OR SUPPORT, IF ANY, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND TITLE, AND ANY WARRANTY OR CONDITION OF NON-INFRINGEMENT. + +SOME STATES OR JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF EXPRESS OR IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO LICENSEE. IN THAT EVENT, SUCH WARRANTIES ARE LIMITED IN DURATION TO THE MINIMUM PERIOD REQUIRED BY LAW. NO WARRANTIES APPLY AFTER THAT PERIOD. SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY LASTS, SO THE ABOVE LIMITATION MAY NOT APPLY TO LICENSEE. LICENSEE MAY HAVE OTHER RIGHTS THAT VARY FROM STATE TO STATE OR JURISDICTION TO JURISDICTION. + +THE DISCLAIMERS AND EXCLUSIONS IN THIS SECTION 5 ALSO APPLY TO ANY OF IBM'S PROGRAM DEVELOPERS AND SUPPLIERS. + +MANUFACTURERS, SUPPLIERS, OR PUBLISHERS OF NON-IBM PROGRAMS MAY PROVIDE THEIR OWN WARRANTIES. + +IBM DOES NOT PROVIDE SUPPORT OF ANY KIND, UNLESS IBM SPECIFIES OTHERWISE. IN SUCH EVENT, ANY SUPPORT PROVIDED BY IBM IS SUBJECT TO THE DISCLAIMERS AND EXCLUSIONS IN THIS SECTION 5. + +6. Licensee Data and Databases + +To assist Licensee in isolating the cause of a problem with the Program, IBM may request that Licensee 1) allow IBM to remotely access Licensee's system or 2) send Licensee information or system data to IBM. However, IBM is not obligated to provide such assistance unless IBM and Licensee enter a separate written agreement under which IBM agrees to provide to Licensee that type of support, which is beyond IBM's obligations in this Agreement. In any event, IBM uses information about errors and problems to improve its products and services, and assist with its provision of related support offerings. For these purposes, IBM may use IBM entities and subcontractors (including in one or more countries other than the one in which Licensee is located), and Licensee authorizes IBM to do so. + +Licensee remains responsible for 1) any data and the content of any database Licensee makes available to IBM, 2) the selection and implementation of procedures and controls regarding access, security, encryption, use, and transmission of data (including any personally-identifiable data), and 3) backup and recovery of any database and any stored data. Licensee will not send or provide IBM access to any personally-identifiable information, whether in data or any other form, and will be responsible for reasonable costs and other amounts that IBM may incur relating to any such information mistakenly provided to IBM or the loss or disclosure of such information by IBM, including those arising out of any third party claims. + +7. Limitation of Liability + +The limitations and exclusions in this Section 7 (Limitation of Liability) apply to the full extent they are not prohibited by applicable law without the possibility of contractual waiver. + +7.1 Items for Which IBM May Be Liable + +Circumstances may arise where, because of a default on IBM's part or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), IBM's entire liability for all claims in the aggregate arising from or related to each Program or otherwise arising under this Agreement will not exceed the amount of any 1) damages for bodily injury (including death) and damage to real property and tangible personal property and 2) other actual direct damages up to U.S. $10,000 (or equivalent in local currency). + +This limit also applies to any of IBM's Program developers and suppliers. It is the maximum for which IBM and its Program developers and suppliers are collectively responsible. + +7.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM, ITS PROGRAM DEVELOPERS OR SUPPLIERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: + +a. LOSS OF, OR DAMAGE TO, DATA; + +b. SPECIAL, INCIDENTAL, EXEMPLARY, OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; OR + +c. LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. + +8. Compliance Verification + +For purposes of this Section 8 (Compliance Verification), "Evaluation Program Terms" means 1) this Agreement and applicable amendments and transaction documents provided by IBM, and 2) IBM software policies that may be found at the IBM Software Policy website (www.ibm.com/softwarepolicies), including but not limited to those policies concerning backup, sub-capacity pricing, and migration. + +The rights and obligations set forth in this Section 8 remain in effect during the period the Program is licensed to Licensee, and for two years thereafter. + +8.1 Verification Process + +Licensee agrees to create, retain, and provide to IBM and its auditors accurate written records, system tool outputs, and other system information sufficient to provide auditable verification that Licensee's use of all Programs is in compliance with the Evaluation Program Terms, including, without limitation, all of IBM's applicable licensing and pricing qualification terms. Licensee is responsible for 1) ensuring that it does not exceed its Authorized Use, and 2) remaining in compliance with Evaluation Program Terms. + +Upon reasonable notice, IBM may verify Licensee's compliance with Evaluation Program Terms at all sites and for all environments in which Licensee uses (for any purpose) Programs subject to Evaluation Program Terms. Such verification will be conducted in a manner that minimizes disruption to Licensee's business, and may be conducted on Licensee's premises, during normal business hours. IBM may use an independent auditor to assist with such verification, provided IBM has a written confidentiality agreement in place with such auditor. + +8.2 Resolution + +IBM will notify Licensee in writing if any such verification indicates that Licensee has used any Program in excess of its Authorized Use or is otherwise not in compliance with the Evaluation Program Terms. Licensee agrees to promptly pay directly to IBM the charges that IBM specifies in an invoice for 1) any such excess use, 2) support for such excess use for the lesser of the duration of such excess use or two years, and 3) any additional charges and other liabilities determined as a result of such verification. + +9. Third Party Notices + +The Program may include third party code that IBM, not the third party, licenses to Licensee under this Agreement. Notices, if any, for the third party code ("Third Party Notices") are included for Licensee's information only. These notices can be found in the Program's NOTICES file(s). Information on how to obtain source code for certain third party code can be found in the Third Party Notices. If in the Third Party Notices IBM identifies third party code as "Modifiable Third Party Code," IBM authorizes Licensee to 1) modify the Modifiable Third Party Code and 2) reverse engineer the Program modules that directly interface with the Modifiable Third Party Code provided that it is only for the purpose of debugging Licensee's modifications to such third party code. IBM's service and support obligations, if any, apply only to the unmodified Program. + +10. General + +a. Nothing in this Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. + +b. If any provision of this Agreement is held to be invalid or unenforceable, the remaining provisions of this Agreement remain in full force and effect. + +c. Licensee is prohibited from exporting the Program. + +d. Licensee authorizes International Business Machines Corporation and its subsidiaries (and their successors and assigns, contractors and IBM Business Partners) to store and use Licensee's business contact information wherever they do business, in connection with IBM products and services, or in furtherance of IBM's business relationship with Licensee. + +e. Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. + +f. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation: 1) neither party will bring a legal action, regardless of form, for any claim arising out of or related to this Agreement more than two years after the cause of action arose; and 2) upon the expiration of such time limit, any such claim and all respective rights related to the claim lapse. + +g. Neither Licensee nor IBM is responsible for failure to fulfill any obligations due to causes beyond its control. + +h. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except as permitted in Subsection 7.1 (Items for Which IBM May Be Liable) above for bodily injury (including death) or damage to real or tangible personal property for which IBM is legally liable to that third party. + +i. In entering into this Agreement, neither party is relying on any representation not specified in this Agreement, including but not limited to any representation concerning: 1) the performance or function of the Program, other than as expressly warranted in Section 5 (No Warranties) above; 2) the experiences or recommendations of other parties; or 3) any results or savings that Licensee may achieve. + +j. IBM has signed agreements with certain organizations (called "IBM Business Partners") to promote, market, and support certain Programs. IBM Business Partners remain independent and separate from IBM. IBM is not responsible for the actions or statements of IBM Business Partners or obligations they have to Licensee. + +k. The license and intellectual property indemnification terms of Licensee's other agreements with IBM (such as the IBM Customer Agreement) do not apply to Program licenses granted under this Agreement. + +11. Geographic Scope and Governing Law + +11.1 Governing Law + +Both parties agree to the application of the laws of the country in which Licensee obtained the Program license to govern, interpret, and enforce all of Licensee's and IBM's respective rights, duties, and obligations arising from, or relating in any manner to, the subject matter of this Agreement, without regard to conflict of law principles. + +The United Nations Convention on Contracts for the International Sale of Goods does not apply. + +11.2 Jurisdiction + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license. + +Part 2 - Country-unique Terms + +For licenses granted in the countries specified below, the following terms replace or modify the referenced terms in Part 1. All terms in Part 1 that are not changed by these amendments remain unchanged and in effect. This Part 2 is organized as follows: + +* Multiple country amendments to Part 1, Section 11 (Governing Law and Jurisdiction); + +* Americas country amendments to other Agreement terms; + +* Asia Pacific country amendments to other Agreement terms; and + +* Europe, Middle East, and Africa country amendments to other Agreement terms. + +Multiple country amendments to Part 1, Section 11 (Governing Law and Jurisdiction) + +11.1 Governing Law + +The phrase "the laws of the country in which Licensee obtained the Program license" in the first paragraph of 11.1 Governing Law is replaced by the following phrases in the countries below: + +AMERICAS + +(1) In Canada: the laws in the Province of Ontario; + +(2) in Mexico: the federal laws of the Republic of Mexico; + +(3) in the United States, Anguilla, Antigua/Barbuda, Aruba, British Virgin Islands, Cayman Islands, Dominica, Grenada, Guyana, Saint Kitts and Nevis, Saint Lucia, Saint Maarten, and Saint Vincent and the Grenadines: the laws of the State of New York, United States; + +(4) in Venezuela: the laws of the Bolivarian Republic of Venezuela; + +ASIA PACIFIC + +(5) in Cambodia and Laos: the laws of the State of New York, United States; + +(6) in Australia: the laws of the State or Territory in which the transaction is performed; + +(7) in Hong Kong SAR and Macau SAR: the laws of Hong Kong Special Administrative Region ("SAR"); + +(8) in Taiwan: the laws of Taiwan; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: the laws of Austria; + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the laws of France; + +(11) in Estonia, Latvia, and Lithuania: the laws of Finland; + +(12) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the laws of England; and + +(13) in South Africa, Namibia, Lesotho, and Swaziland: the laws of the Republic of South Africa. + +11.2 Jurisdiction + +The following paragraph pertains to jurisdiction and replaces Subsection 11.2 (Jurisdiction) as it applies for those countries identified below: + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license except that in the countries identified below all disputes arising out of or related to this Agreement, including summary proceedings, will be brought before and subject to the exclusive jurisdiction of the following courts of competent jurisdiction: + +AMERICAS + +(1) In Argentina: the Ordinary Commercial Court of the city of Buenos Aires; + +(2) in Brazil: the court of Rio de Janeiro, RJ; + +(3) in Chile: the Civil Courts of Justice of Santiago; + +(4) in Ecuador: the civil judges of Quito for executory or summary proceedings (as applicable); + +(5) in Mexico: the courts located in Mexico City, Federal District; + +(6) in Peru: the judges and tribunals of the judicial district of Lima, Cercado; + +(7) in Uruguay: the courts of the city of Montevideo; + +(8) in Venezuela: the courts of the metropolitan area of the city of Caracas; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Austria: the court of law in Vienna, Austria (Inner-City); + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, France, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Monaco, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the Commercial Court of Paris; + +(11) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the English courts; + +(12) in South Africa, Namibia, Lesotho, and Swaziland: the High Court in Johannesburg; + +(13) in Greece: the competent court of Athens; + +(14) in Israel: the courts of Tel Aviv-Jaffa; + +(15) in Italy: the courts of Milan; + +(16) in Portugal: the courts of Lisbon; + +(17) in Spain: the courts of Madrid; and + +(18) in Turkey: the Istanbul Central Courts and Execution Directorates of Istanbul, the Republic of Turkey. + +11.3 Arbitration + +The following paragraph is added as a new Subsection 11.3 (Arbitration) as it applies for those countries identified below. The provisions of this Subsection 11.3 prevail over those of Subsection 11.2 (Jurisdiction) to the extent permitted by the applicable governing law and rules of procedure: + +ASIA PACIFIC + +(1) In Cambodia, India, Laos, Philippines, and Vietnam: + +Disputes arising out of or in connection with this Agreement will be finally settled by arbitration which will be held in Singapore in accordance with the Arbitration Rules of Singapore International Arbitration Center ("SIAC Rules") then in effect. The arbitration award will be final and binding for the parties without appeal and will be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators will be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties will appoint a third arbitrator who will act as chairman of the proceedings. Vacancies in the post of chairman will be filled by the president of the SIAC. Other vacancies will be filled by the respective nominating party. Proceedings will continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator will be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings will be conducted, including all documents presented in such proceedings, in the English language. The English language version of this Agreement prevails over any other language version. + +(2) In the People's Republic of China: + +In case no settlement can be reached, the disputes will be submitted to China International Economic and Trade Arbitration Commission for arbitration according to the then effective rules of the said Arbitration Commission. The arbitration will take place in Beijing and be conducted in Chinese. The arbitration award will be final and binding on both parties. During the course of arbitration, this agreement will continue to be performed except for the part which the parties are disputing and which is undergoing arbitration. + +(3) In Indonesia: + +Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation, i) neither party will bring a legal action, regardless of form, arising out of or related to this Agreement or any transaction under it more than two years after the cause of action arose; and ii) after such time limit, any legal action arising out of this Agreement or any transaction under it and all respective rights related to any such action lapse. + +Disputes arising out of or in connection with this Agreement shall be finally settled by arbitration that shall be held in Jakarta, Indonesia in accordance with the rules of Board of the Indonesian National Board of Arbitration (Badan Arbitrase Nasional Indonesia or "BANI") then in effect. The arbitration award shall be final and binding for the parties without appeal and shall be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators shall be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties shall appoint a third arbitrator who shall act as chairman of the proceedings. Vacancies in the post of chairman shall be filled by the chairman of the BANI. Other vacancies shall be filled by the respective nominating party. Proceedings shall continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator shall be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings shall be conducted, including all documents presented in such proceedings, in the English and/or Indonesian language. + +EUROPE, MIDDLE EAST, AND AFRICA + +(4) In Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: + +All disputes arising out of this Agreement or related to its violation, termination or nullity will be finally settled under the Rules of Arbitration and Conciliation of the International Arbitral Center of the Federal Economic Chamber in Vienna (Vienna Rules) by three arbitrators appointed in accordance with these rules. The arbitration will be held in Vienna, Austria, and the official language of the proceedings will be English. The decision of the arbitrators will be final and binding upon both parties. Therefore, pursuant to paragraph 598 (2) of the Austrian Code of Civil Procedure, the parties expressly waive the application of paragraph 595 (1) figure 7 of the Code. IBM may, however, institute proceedings in a competent court in the country of installation. + +(5) In Estonia, Latvia, and Lithuania: + +All disputes arising in connection with this Agreement will be finally settled in arbitration that will be held in Helsinki, Finland in accordance with the arbitration laws of Finland then in effect. Each party will appoint one arbitrator. The arbitrators will then jointly appoint the chairman. If arbitrators cannot agree on the chairman, then the Central Chamber of Commerce in Helsinki will appoint the chairman. + +AMERICAS COUNTRY AMENDMENTS + +CANADA + +7.1 Items for Which IBM May Be Liable + +The following replaces Item 1 in the first paragraph of this Subsection 7.1 (Items for Which IBM May Be Liable): + +1) damages for bodily injury (including death) and physical harm to real property and tangible personal property caused by IBM's negligence; and + +10. General + +The following replaces Item 10.h: + +h. No right or cause of action for any third party is created by this Agreement or any transaction under it, nor is IBM responsible for any third party claims against Licensee except as permitted by the Limitation of Liability section above for bodily injury (including death) or physical harm to real or tangible personal property caused by IBM's negligence for which IBM is legally liable to that third party. + +The following is added as Item 10.l: + +l. For purposes of this Item 10.l, "Personal Data" refers to information relating to an identified or identifiable individual made available by one of the parties, its personnel or any other individual to the other in connection with this Agreement. The following provisions apply in the event that one party makes Personal Data available to the other: + +(1) General + +(a) Each party is responsible for complying with any obligations applying to it under applicable Canadian data privacy laws and regulations ("Laws"). + +(b) Neither party will request Personal Data beyond what is necessary to fulfill the purpose(s) for which it is requested. The purpose(s) for requesting Personal Data must be reasonable. Each party will agree in advance as to the type of Personal Data that is required to be made available. + +(2) Security Safeguards + +(a) Each party acknowledges that it is solely responsible for determining and communicating to the other the appropriate technological, physical and organizational security measures required to protect Personal Data. + +(b) Each party will ensure that Personal Data is protected in accordance with the security safeguards communicated and agreed to by the other. + +(c) Each party will ensure that any third party to whom Personal Data is transferred is bound by the applicable terms of this section. + +(d) Additional or different services required to comply with the Laws will be deemed a request for new services. + +(3) Use + +Each party agrees that Personal Data will only be used, accessed, managed, transferred, disclosed to third parties or otherwise processed to fulfill the purpose(s) for which it was made available. + +(4) Access Requests + +(a) Each party agrees to reasonably cooperate with the other in connection with requests to access or amend Personal Data. + +(b) Each party agrees to reimburse the other for any reasonable charges incurred in providing each other assistance. + +(c) Each party agrees to amend Personal Data only upon receiving instructions to do so from the other party or its personnel. + +(5) Retention + +Each party will promptly return to the other or destroy all Personal Data that is no longer necessary to fulfill the purpose(s) for which it was made available, unless otherwise instructed by the other or its personnel or required by law. + +(6) Public Bodies Who Are Subject to Public Sector Privacy Legislation + +For Licensees who are public bodies subject to public sector privacy legislation, this Item 10.l applies only to Personal Data made available to Licensee in connection with this Agreement, and the obligations in this section apply only to Licensee, except that: 1) section (2)(a) applies only to IBM; 2) sections (1)(a) and (4)(a) apply to both parties; and 3) section (4)(b) and the last sentence in (1)(b) do not apply. + +PERU + +7. Limitation of Liability + +The following is added to the end of this Section 7 (Limitation of Liability): + +Except as expressly required by law without the possibility of contractual waiver, Licensee and IBM intend that the limitation of liability in this Limitation of Liability section applies to damages caused by all types of claims and causes of action. If any limitation on or exclusion from liability in this section is held by a court of competent jurisdiction to be unenforceable with respect to a particular claim or cause of action, the parties intend that it nonetheless apply to the maximum extent permitted by applicable law to all other claims and causes of action. + +7.1 Items for Which IBM May Be Liable + +The following is added to the end of this Subsection 7.1: + +In accordance with Article 1328 of the Peruvian Civil Code, the limitations and exclusions specified in this section will not apply to damages caused by IBM's willful misconduct ("dolo") or gross negligence ("culpa inexcusable"). + +UNITED STATES OF AMERICA + +10. General + +The following is added to Section 10 as Item 10.l: + +l. U.S. Government Users Restricted Rights - Use, duplication or disclosure is restricted by the GSA IT Schedule 70 Contract with the IBM Corporation. + +The following is added to Item 10.e: + +Each party waives any right to a jury trial in any proceeding arising out of or related to this Agreement. + +ASIA PACIFIC COUNTRY AMENDMENTS + +AUSTRALIA + +5. No Warranties + +The following is added to the first paragraph of Section 5 (No Warranties): + +Although IBM specifies that there are no warranties, Licensee may have certain rights under the Competition and Consumer Act 2010 or other legislation and are only limited to the extent permitted by the applicable legislation. + +7.1 Items for Which IBM May Be Liable + +The following is added to Subsection 7.1 (Items for Which IBM May Be Liable): + +Where IBM is in breach of a condition or warranty implied by the Competition and Consumer Act 2010, IBM's liability is limited to the repair or replacement of the goods, or the supply of equivalent goods. Where that condition or warranty relates to right to sell, quiet possession or clear title, or the goods are of a kind ordinarily obtained for personal, domestic or household use or consumption, then none of the limitations in this paragraph apply. + +HONG KONG SAR, MACAU SAR, AND TAIWAN + +As applies to licenses obtained in Taiwan and the special administrative regions, phrases throughout this Agreement containing the word "country" (for example, "the country in which the original Licensee was granted the license" and "the country in which Licensee obtained the Program license") are replaced with the following: + +(1) In Hong Kong SAR: "Hong Kong SAR" + +(2) In Macau SAR: "Macau SAR" except in the Governing Law clause (Section 11.1) + +(3) In Taiwan: "Taiwan." + +INDIA + +7.1 Items for Which IBM May Be Liable + +The following replaces the terms of Items 1 and 2 of the first paragraph: + +1) liability for bodily injury (including death) or damage to real property and tangible personal property will be limited to that caused by IBM's negligence; and 2) as to any other actual damage arising in any situation involving nonperformance by IBM pursuant to, or in any way related to the subject of this Agreement, IBM's liability will be limited to the charge paid by Licensee for the individual Program that is the subject of the claim. + +10. General + +The following replaces the terms of Item 10.f: + +f. If no suit or other legal action is brought, within three years after the cause of action arose, in respect of any claim that either party may have against the other, the rights of the concerned party in respect of such claim will be forfeited and the other party will stand released from its obligations in respect of such claim. + +INDONESIA + +3.2 Term and Termination + +The following is added to the last paragraph: + +Both parties waive the provision of article 1266 of the Indonesian Civil Code, to the extent the article provision requires such court decree for the termination of an agreement creating mutual obligations. + +JAPAN + +10. General + +The following is added as Item 10.l: + +l. Any doubts concerning this Agreement will be initially resolved between us in good faith and in accordance with the principle of mutual trust. + +MALAYSIA + +7.2 Items for Which IBM Is Not Liable + +The word "SPECIAL" in Item 7.2b is deleted. + +NEW ZEALAND + +5. No Warranties + +The following is added to the first paragraph of this Section 5 (No Warranties): + +Although IBM specifies that there are no warranties, Licensee may have certain rights under the Consumer Guarantees Act 1993 or other legislation which cannot be excluded or limited. The Consumer Guarantees Act 1993 will not apply in respect of any goods which IBM provides, if Licensee requires the goods for the purposes of a business as defined in that Act. + +7. Limitation of Liability + +The following is added: + +Where Programs are not obtained for the purposes of a business as defined in the Consumer Guarantees Act 1993, the limitations in this Section are subject to the limitations in that Act. + +PHILIPPINES + +7.2 Items for Which IBM Is Not Liable + +The following replaces the terms of Item 7.2b: + +b. special (including nominal and exemplary damages), moral, incidental, or indirect damages or for any economic consequential damages; or + +SINGAPORE + +7.2 Items for Which IBM Is Not Liable + +The words "SPECIAL" and "ECONOMIC" are deleted from Item 7.2b. + +10. General + +The following replaces the terms of Item 10.h: + +h. Subject to the rights provided to IBM's suppliers and Program developers as provided in Section 7 above (Limitation of Liability), a person who is not a party to this Agreement will have no right under the Contracts (Right of Third Parties) Act to enforce any of its terms. + +TAIWAN + +7.1 Items for Which IBM May Be Liable + +The following sentences are deleted: + +This limit also applies to any of IBM's subcontractors and Program developers. It is the maximum for which IBM and its subcontractors and Program developers are collectively responsible. + +EUROPE, MIDDLE EAST, AFRICA (EMEA) COUNTRY AMENDMENTS + +EUROPEAN UNION MEMBER STATES + +5. No Warranties + +The following is added to Section 5 (No Warranties): + +In the European Union ("EU"), consumers have legal rights under applicable national legislation governing the sale of consumer goods. Such rights are not affected by the provisions set out in this Section 5 (No Warranties). + +EU MEMBER STATES AND THE COUNTRIES IDENTIFIED BELOW + +Iceland, Liechtenstein, Norway, Switzerland, Turkey, and any other European country that has enacted local data privacy or protection legislation similar to the EU model. + +10. General + +The following replaces Item 10.d: + +(1) Definitions - For the purposes of this Item 10.d, the following additional definitions apply: + +(a) Business Contact Information - business-related contact information disclosed by Licensee to IBM, including names, job titles, business addresses, telephone numbers and email addresses of Licensee's employees and contractors. For Austria, Italy and Switzerland, Business Contact Information also includes information about Licensee and its contractors as legal entities (for example, Licensee's revenue data and other transactional information) + +(b) Business Contact Personnel - Licensee employees and contractors to whom the Business Contact Information relates. + +(c) Data Protection Authority - the authority established by the Data Protection and Electronic Communications Legislation in the applicable country or, for non-EU countries, the authority responsible for supervising the protection of personal data in that country, or (for any of the foregoing) any duly appointed successor entity thereto. + +(d) Data Protection & Electronic Communications Legislation - (i) the applicable local legislation and regulations in force implementing the requirements of EU Directive 95/46/EC (on the protection of individuals with regard to the processing of personal data and on the free movement of such data) and of EU Directive 2002/58/EC (concerning the processing of personal data and the protection of privacy in the electronic communications sector); or (ii) for non-EU countries, the legislation and/or regulations passed in the applicable country relating to the protection of personal data and the regulation of electronic communications involving personal data, including (for any of the foregoing) any statutory replacement or modification thereof. + +(e) IBM Group - International Business Machines Corporation of Armonk, New York, USA, its subsidiaries, and their respective Business Partners and subcontractors. + +(2) Licensee authorizes IBM: + +(a) to process and use Business Contact Information within IBM Group in support of Licensee including the provision of support services, and for the purpose of furthering the business relationship between Licensee and IBM Group, including, without limitation, contacting Business Contact Personnel (by email or otherwise) and marketing IBM Group products and services (the "Specified Purpose"); and + +(b) to disclose Business Contact Information to other members of IBM Group in pursuit of the Specified Purpose only. + +(3) IBM agrees that all Business Contact Information will be processed in accordance with the Data Protection & Electronic Communications Legislation and will be used only for the Specified Purpose. + +(4) To the extent required by the Data Protection & Electronic Communications Legislation, Licensee represents that (a) it has obtained (or will obtain) any consents from (and has issued (or will issue) any notices to) the Business Contact Personnel as are necessary in order to enable IBM Group to process and use the Business Contact Information for the Specified Purpose. + +(5) Licensee authorizes IBM to transfer Business Contact Information outside the European Economic Area, provided that the transfer is made on contractual terms approved by the Data Protection Authority or the transfer is otherwise permitted under the Data Protection & Electronic Communications Legislation. + +AUSTRIA + +7. Limitation of Liability + +The following is added: + +The following limitations and exclusions of IBM's liability do not apply for damages caused by gross negligence or willful misconduct. + +7.1 Items for Which IBM May Be Liable + +The following replaces the first sentence in the first paragraph: + +Circumstances may arise where, because of a default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. + +In the second sentence of the first paragraph, delete entirely the parenthetical phrase: + +"(including fundamental breach, negligence, misrepresentation, or other contract or tort claim)". + +7.2 Items for Which IBM Is Not Liable + +The following replaces Item 7.2b: + +b. indirect damages or consequential damages; or + +BELGIUM, FRANCE, ITALY, AND LUXEMBOURG + +7. Limitation of Liability + +The following replaces the terms of Section 7 (Limitation of Liability) in its entirety: + +Except as otherwise provided by mandatory law: + +7.1 Items for Which IBM May Be Liable + +IBM's entire liability for all claims in the aggregate for any damages and losses that may arise as a consequence of the fulfillment of its obligations under or in connection with this Agreement or due to any other cause related to this Agreement is limited to the compensation of only those damages and losses proved and actually arising as an immediate and direct consequence of the non-fulfillment of such obligations (if IBM is at fault) or of such cause, for a maximum of EUR 500,000 (five hundred thousand euro). + +The above limitation will not apply to damages for bodily injuries (including death) and damages to real property and tangible personal property for which IBM is legally liable. + +7.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM OR ANY OF ITS PROGRAM DEVELOPERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: 1) LOSS OF, OR DAMAGE TO, DATA; 2) INCIDENTAL, EXEMPLARY OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; AND / OR 3) LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS, EVEN IF THEY ARISE AS AN IMMEDIATE CONSEQUENCE OF THE EVENT THAT GENERATED THE DAMAGES. + +7.3 Suppliers and Program Developers + +The limitation and exclusion of liability herein agreed applies not only to the activities performed by IBM but also to the activities performed by its suppliers and Program developers, and represents the maximum amount for which IBM as well as its suppliers and Program developers are collectively responsible. + +GERMANY + +7. Limitation of Liability + +The following replaces this Section 7 (Limitation of Liability) in its entirety: + +a. IBM will be liable without limit for 1) loss or damage caused by a breach of an express guarantee; 2) damages or losses resulting in bodily injury (including death); and 3) damages caused intentionally or by gross negligence. + +b. In the event of loss, damage and frustrated expenditures caused by slight negligence or in breach of essential contractual obligations, IBM will be liable, regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), per claim only up to 500,000 euro for the Program that caused the loss or damage. A number of defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one default. + +c. In the event of loss, damage and frustrated expenditures caused by slight negligence, IBM will not be liable for indirect or consequential damages, even if IBM was informed about the possibility of such loss or damage. + +d. In case of delay on IBM's part: 1) IBM will pay to Licensee an amount not exceeding the loss or damage caused by IBM's delay and 2) IBM will be liable only in respect of the resulting damages that Licensee suffers, subject to the provisions of Items a and b above. + +10. General + +The following replaces the provisions of 10.f: + +f. Any claims resulting from this Agreement are subject to a limitation period of three years, except as stated in Section 5 (No Warranties) of this Agreement. + +The following replaces the provisions of 10.h: + +h. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except (to the extent permitted in Section 7 (Limitation of Liability)) for: i) bodily injury (including death); or ii) damage to real or tangible personal property for which (in either case) IBM is legally liable to that third party. + +IRELAND + +5. No Warranties + +The following paragraph is added to the second paragraph of this Section 5 (No Warranties): + +Except as expressly provided in these terms and conditions, or Section 12 of the Sale of Goods Act 1893 as amended by the Sale of Goods and Supply of Services Act, 1980 (the "1980 Act"), all conditions or warranties (express or implied, statutory or otherwise) are hereby excluded including, without limitation, any warranties implied by the Sale of Goods Act 1893 as amended by the 1980 Act (including, for the avoidance of doubt, Section 39 of the 1980 Act). + +IRELAND AND UNITED KINGDOM + +2. Agreement Structure + +The following sentence is added: + +Nothing in this paragraph shall have the effect of excluding or limiting liability for fraud. + +7.1 Items for Which IBM May Be Liable + +The following replaces the first paragraph of the Subsection: + +For the purposes of this section, a "Default" means any act, statement, omission or negligence on the part of IBM in connection with, or in relation to, the subject matter of an Agreement in respect of which IBM is legally liable to Licensee, whether in contract or in tort. A number of Defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one Default. + +Circumstances may arise where, because of a Default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM and except as expressly required by law without the possibility of contractual waiver, IBM's entire liability for any one Default will not exceed the amount of any direct damages, to the extent actually suffered by Licensee as an immediate and direct consequence of the Default, up to 500,000 euro (or the equivalent in local currency) for the Program that is the subject of the claim. Notwithstanding the foregoing, the amount of any damages for bodily injury (including death) and damage to real property and tangible personal property for which IBM is legally liable is not subject to such limitation. + +7.2 Items for Which IBM Is Not Liable + +The following replaces Items 7.2b and 7.2c: + +b. special, incidental, exemplary, or indirect damages or consequential damages; or + +c. wasted management time or lost profits, business, revenue, goodwill, or anticipated savings. + +Z125-5543-05 (07/2011) + + +International Program License Agreement + +Part 1 - General Terms + +BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, CLICKING ON AN "ACCEPT" BUTTON, OR OTHERWISE USING THE PROGRAM, LICENSEE AGREES TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCEPTING THESE TERMS ON BEHALF OF LICENSEE, YOU REPRESENT AND WARRANT THAT YOU HAVE FULL AUTHORITY TO BIND LICENSEE TO THESE TERMS. IF YOU DO NOT AGREE TO THESE TERMS, + +* DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, CLICK ON AN "ACCEPT" BUTTON, OR USE THE PROGRAM; AND + +* PROMPTLY RETURN THE UNUSED MEDIA, DOCUMENTATION, AND PROOF OF ENTITLEMENT TO THE PARTY FROM WHOM IT WAS OBTAINED FOR A REFUND OF THE AMOUNT PAID. IF THE PROGRAM WAS DOWNLOADED, DESTROY ALL COPIES OF THE PROGRAM. + +1. Definitions + +"Authorized Use" - the specified level at which Licensee is authorized to execute or run the Program. That level may be measured by number of users, millions of service units ("MSUs"), Processor Value Units ("PVUs"), or other level of use specified by IBM. + +"IBM" - International Business Machines Corporation or one of its subsidiaries. + +"License Information" ("LI") - a document that provides information and any additional terms specific to a Program. The Program's LI is available at www.ibm.com/software/sla. The LI can also be found in the Program's directory, by the use of a system command, or as a booklet included with the Program. + +"Program" - the following, including the original and all whole or partial copies: 1) machine-readable instructions and data, 2) components, files, and modules, 3) audio-visual content (such as images, text, recordings, or pictures), and 4) related licensed materials (such as keys and documentation). + +"Proof of Entitlement" ("PoE") - evidence of Licensee's Authorized Use. The PoE is also evidence of Licensee's eligibility for warranty, future update prices, if any, and potential special or promotional opportunities. If IBM does not provide Licensee with a PoE, then IBM may accept as the PoE the original paid sales receipt or other sales record from the party (either IBM or its reseller) from whom Licensee obtained the Program, provided that it specifies the Program name and Authorized Use obtained. + +"Warranty Period" - one year, starting on the date the original Licensee is granted the license. + +2. Agreement Structure + +This Agreement includes Part 1 - General Terms, Part 2 - Country-unique Terms (if any), the LI, and the PoE and is the complete agreement between Licensee and IBM regarding the use of the Program. It replaces any prior oral or written communications between Licensee and IBM concerning Licensee's use of the Program. The terms of Part 2 may replace or modify those of Part 1. To the extent of any conflict, the LI prevails over both Parts. + +3. License Grant + +The Program is owned by IBM or an IBM supplier, and is copyrighted and licensed, not sold. + +IBM grants Licensee a nonexclusive license to 1) use the Program up to the Authorized Use specified in the PoE, 2) make and install copies to support such Authorized Use, and 3) make a backup copy, all provided that + +a. Licensee has lawfully obtained the Program and complies with the terms of this Agreement; + +b. the backup copy does not execute unless the backed-up Program cannot execute; + +c. Licensee reproduces all copyright notices and other legends of ownership on each copy, or partial copy, of the Program; + +d. Licensee ensures that anyone who uses the Program (accessed either locally or remotely) 1) does so only on Licensee's behalf and 2) complies with the terms of this Agreement; + +e. Licensee does not 1) use, copy, modify, or distribute the Program except as expressly permitted in this Agreement; 2) reverse assemble, reverse compile, otherwise translate, or reverse engineer the Program, except as expressly permitted by law without the possibility of contractual waiver; 3) use any of the Program's components, files, modules, audio-visual content, or related licensed materials separately from that Program; or 4) sublicense, rent, or lease the Program; and + +f. if Licensee obtains this Program as a Supporting Program, Licensee uses this Program only to support the Principal Program and subject to any limitations in the license to the Principal Program, or, if Licensee obtains this Program as a Principal Program, Licensee uses all Supporting Programs only to support this Program, and subject to any limitations in this Agreement. For purposes of this Item "f," a "Supporting Program" is a Program that is part of another IBM Program ("Principal Program") and identified as a Supporting Program in the Principal Program's LI. (To obtain a separate license to a Supporting Program without these restrictions, Licensee should contact the party from whom Licensee obtained the Supporting Program.) + +This license applies to each copy of the Program that Licensee makes. + +3.1 Trade-ups, Updates, Fixes, and Patches + +3.1.1 Trade-ups + +If the Program is replaced by a trade-up Program, the replaced Program's license is promptly terminated. + +3.1.2 Updates, Fixes, and Patches + +When Licensee receives an update, fix, or patch to a Program, Licensee accepts any additional or different terms that are applicable to such update, fix, or patch that are specified in its LI. If no additional or different terms are provided, then the update, fix, or patch is subject solely to this Agreement. If the Program is replaced by an update, Licensee agrees to promptly discontinue use of the replaced Program. + +3.2 Fixed Term Licenses + +If IBM licenses the Program for a fixed term, Licensee's license is terminated at the end of the fixed term, unless Licensee and IBM agree to renew it. + +3.3 Term and Termination + +This Agreement is effective until terminated. + +IBM may terminate Licensee's license if Licensee fails to comply with the terms of this Agreement. + +If the license is terminated for any reason by either party, Licensee agrees to promptly discontinue use of and destroy all of Licensee's copies of the Program. Any terms of this Agreement that by their nature extend beyond termination of this Agreement remain in effect until fulfilled, and apply to both parties' respective successors and assignees. + +4. Charges + +Charges are based on Authorized Use obtained, which is specified in the PoE. IBM does not give credits or refunds for charges already due or paid, except as specified elsewhere in this Agreement. + +If Licensee wishes to increase its Authorized Use, Licensee must notify IBM or an authorized IBM reseller in advance and pay any applicable charges. + +5. Taxes + +If any authority imposes on the Program a duty, tax, levy, or fee, excluding those based on IBM's net income, then Licensee agrees to pay that amount, as specified in an invoice, or supply exemption documentation. Licensee is responsible for any personal property taxes for the Program from the date that Licensee obtains it. If any authority imposes a customs duty, tax, levy, or fee for the import into or the export, transfer, access, or use of the Program outside the country in which the original Licensee was granted the license, then Licensee agrees that it is responsible for, and will pay, any amount imposed. + +6. Money-back Guarantee + +If Licensee is dissatisfied with the Program for any reason and is the original Licensee, Licensee may terminate the license and obtain a refund of the amount Licensee paid for the Program, provided that Licensee returns the Program and PoE to the party from whom Licensee obtained it within 30 days of the date the PoE was issued to Licensee. If the license is for a fixed term that is subject to renewal, then Licensee may obtain a refund only if the Program and its PoE are returned within the first 30 days of the initial term. If Licensee downloaded the Program, Licensee should contact the party from whom Licensee obtained it for instructions on how to obtain the refund. + +7. Program Transfer + +Licensee may transfer the Program and all of Licensee's license rights and obligations to another party only if that party agrees to the terms of this Agreement. If the license is terminated for any reason by either party, Licensee is prohibited from transferring the Program to another party. Licensee may not transfer a portion of 1) the Program or 2) the Program's Authorized Use. When Licensee transfers the Program, Licensee must also transfer a hard copy of this Agreement, including the LI and PoE. Immediately after the transfer, Licensee's license terminates. + +8. Warranty and Exclusions + +8.1 Limited Warranty + +IBM warrants that the Program, when used in its specified operating environment, will conform to its specifications. The Program's specifications, and specified operating environment information, can be found in documentation accompanying the Program (such as a read-me file) or other information published by IBM (such as an announcement letter). Licensee agrees that such documentation and other Program content may be supplied only in the English language, unless otherwise required by local law without the possibility of contractual waiver or limitation. + +The warranty applies only to the unmodified portion of the Program. IBM does not warrant uninterrupted or error-free operation of the Program, or that IBM will correct all Program defects. Licensee is responsible for the results obtained from the use of the Program. + +During the Warranty Period, IBM provides Licensee with access to IBM databases containing information on known Program defects, defect corrections, restrictions, and bypasses at no additional charge. Consult the IBM Software Support Handbook for further information at www.ibm.com/software/support. + +If the Program does not function as warranted during the Warranty Period and the problem cannot be resolved with information available in the IBM databases, Licensee may return the Program and its PoE to the party (either IBM or its reseller) from whom Licensee obtained it and receive a refund of the amount Licensee paid. After returning the Program, Licensee's license terminates. If Licensee downloaded the Program, Licensee should contact the party from whom Licensee obtained it for instructions on how to obtain the refund. + +8.2 Exclusions + +THESE WARRANTIES ARE LICENSEE'S EXCLUSIVE WARRANTIES AND REPLACE ALL OTHER WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND ANY WARRANTY OR CONDITION OF NON-INFRINGEMENT. SOME STATES OR JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF EXPRESS OR IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO LICENSEE. IN THAT EVENT, SUCH WARRANTIES ARE LIMITED IN DURATION TO THE WARRANTY PERIOD. NO WARRANTIES APPLY AFTER THAT PERIOD. SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY LASTS, SO THE ABOVE LIMITATION MAY NOT APPLY TO LICENSEE. + +THESE WARRANTIES GIVE LICENSEE SPECIFIC LEGAL RIGHTS. LICENSEE MAY ALSO HAVE OTHER RIGHTS THAT VARY FROM STATE TO STATE OR JURISDICTION TO JURISDICTION. + +THE WARRANTIES IN THIS SECTION 8 (WARRANTY AND EXCLUSIONS) ARE PROVIDED SOLELY BY IBM. THE DISCLAIMERS IN THIS SUBSECTION 8.2 (EXCLUSIONS), HOWEVER, ALSO APPLY TO IBM'S SUPPLIERS OF THIRD PARTY CODE. THOSE SUPPLIERS PROVIDE SUCH CODE WITHOUT WARRANTIES OR CONDITION OF ANY KIND. THIS PARAGRAPH DOES NOT NULLIFY IBM'S WARRANTY OBLIGATIONS UNDER THIS AGREEMENT. + +9. Licensee Data and Databases + +To assist Licensee in isolating the cause of a problem with the Program, IBM may request that Licensee 1) allow IBM to remotely access Licensee's system or 2) send Licensee information or system data to IBM. However, IBM is not obligated to provide such assistance unless IBM and Licensee enter a separate written agreement under which IBM agrees to provide to Licensee that type of support, which is beyond IBM's warranty obligations in this Agreement. In any event, IBM uses information about errors and problems to improve its products and services, and assist with its provision of related support offerings. For these purposes, IBM may use IBM entities and subcontractors (including in one or more countries other than the one in which Licensee is located), and Licensee authorizes IBM to do so. + +Licensee remains responsible for 1) any data and the content of any database Licensee makes available to IBM, 2) the selection and implementation of procedures and controls regarding access, security, encryption, use, and transmission of data (including any personally-identifiable data), and 3) backup and recovery of any database and any stored data. Licensee will not send or provide IBM access to any personally-identifiable information, whether in data or any other form, and will be responsible for reasonable costs and other amounts that IBM may incur relating to any such information mistakenly provided to IBM or the loss or disclosure of such information by IBM, including those arising out of any third party claims. + +10. Limitation of Liability + +The limitations and exclusions in this Section 10 (Limitation of Liability) apply to the full extent they are not prohibited by applicable law without the possibility of contractual waiver. + +10.1 Items for Which IBM May Be Liable + +Circumstances may arise where, because of a default on IBM's part or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), IBM's entire liability for all claims in the aggregate arising from or related to each Program or otherwise arising under this Agreement will not exceed the amount of any 1) damages for bodily injury (including death) and damage to real property and tangible personal property and 2) other actual direct damages up to the charges (if the Program is subject to fixed term charges, up to twelve months' charges) Licensee paid for the Program that is the subject of the claim. + +This limit also applies to any of IBM's Program developers and suppliers. It is the maximum for which IBM and its Program developers and suppliers are collectively responsible. + +10.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM, ITS PROGRAM DEVELOPERS OR SUPPLIERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: + +a. LOSS OF, OR DAMAGE TO, DATA; + +b. SPECIAL, INCIDENTAL, EXEMPLARY, OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; OR + +c. LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. + +11. Compliance Verification + +For purposes of this Section 11 (Compliance Verification), "IPLA Program Terms" means 1) this Agreement and applicable amendments and transaction documents provided by IBM, and 2) IBM software policies that may be found at the IBM Software Policy website (www.ibm.com/softwarepolicies), including but not limited to those policies concerning backup, sub-capacity pricing, and migration. + +The rights and obligations set forth in this Section 11 remain in effect during the period the Program is licensed to Licensee, and for two years thereafter. + +11.1 Verification Process + +Licensee agrees to create, retain, and provide to IBM and its auditors accurate written records, system tool outputs, and other system information sufficient to provide auditable verification that Licensee's use of all Programs is in compliance with the IPLA Program Terms, including, without limitation, all of IBM's applicable licensing and pricing qualification terms. Licensee is responsible for 1) ensuring that it does not exceed its Authorized Use, and 2) remaining in compliance with IPLA Program Terms. + +Upon reasonable notice, IBM may verify Licensee's compliance with IPLA Program Terms at all sites and for all environments in which Licensee uses (for any purpose) Programs subject to IPLA Program Terms. Such verification will be conducted in a manner that minimizes disruption to Licensee's business, and may be conducted on Licensee's premises, during normal business hours. IBM may use an independent auditor to assist with such verification, provided IBM has a written confidentiality agreement in place with such auditor. + +11.2 Resolution + +IBM will notify Licensee in writing if any such verification indicates that Licensee has used any Program in excess of its Authorized Use or is otherwise not in compliance with the IPLA Program Terms. Licensee agrees to promptly pay directly to IBM the charges that IBM specifies in an invoice for 1) any such excess use, 2) support for such excess use for the lesser of the duration of such excess use or two years, and 3) any additional charges and other liabilities determined as a result of such verification. + +12. Third Party Notices + +The Program may include third party code that IBM, not the third party, licenses to Licensee under this Agreement. Notices, if any, for the third party code ("Third Party Notices") are included for Licensee's information only. These notices can be found in the Program's NOTICES file(s). Information on how to obtain source code for certain third party code can be found in the Third Party Notices. If in the Third Party Notices IBM identifies third party code as "Modifiable Third Party Code," IBM authorizes Licensee to 1) modify the Modifiable Third Party Code and 2) reverse engineer the Program modules that directly interface with the Modifiable Third Party Code provided that it is only for the purpose of debugging Licensee's modifications to such third party code. IBM's service and support obligations, if any, apply only to the unmodified Program. + +13. General + +a. Nothing in this Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. + +b. For Programs IBM provides to Licensee in tangible form, IBM fulfills its shipping and delivery obligations upon the delivery of such Programs to the IBM-designated carrier, unless otherwise agreed to in writing by Licensee and IBM. + +c. If any provision of this Agreement is held to be invalid or unenforceable, the remaining provisions of this Agreement remain in full force and effect. + +d. Licensee agrees to comply with all applicable export and import laws and regulations, including U.S. embargo and sanctions regulations and prohibitions on export for certain end uses or to certain users. + +e. Licensee authorizes International Business Machines Corporation and its subsidiaries (and their successors and assigns, contractors and IBM Business Partners) to store and use Licensee's business contact information wherever they do business, in connection with IBM products and services, or in furtherance of IBM's business relationship with Licensee. + +f. Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. + +g. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation: 1) neither party will bring a legal action, regardless of form, for any claim arising out of or related to this Agreement more than two years after the cause of action arose; and 2) upon the expiration of such time limit, any such claim and all respective rights related to the claim lapse. + +h. Neither Licensee nor IBM is responsible for failure to fulfill any obligations due to causes beyond its control. + +i. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except as permitted in Subsection 10.1 (Items for Which IBM May Be Liable) above for bodily injury (including death) or damage to real or tangible personal property for which IBM is legally liable to that third party. + +j. In entering into this Agreement, neither party is relying on any representation not specified in this Agreement, including but not limited to any representation concerning: 1) the performance or function of the Program, other than as expressly warranted in Section 8 (Warranty and Exclusions) above; 2) the experiences or recommendations of other parties; or 3) any results or savings that Licensee may achieve. + +k. IBM has signed agreements with certain organizations (called "IBM Business Partners") to promote, market, and support certain Programs. IBM Business Partners remain independent and separate from IBM. IBM is not responsible for the actions or statements of IBM Business Partners or obligations they have to Licensee. + +l. The license and intellectual property indemnification terms of Licensee's other agreements with IBM (such as the IBM Customer Agreement) do not apply to Program licenses granted under this Agreement. + +14. Geographic Scope and Governing Law + +14.1 Governing Law + +Both parties agree to the application of the laws of the country in which Licensee obtained the Program license to govern, interpret, and enforce all of Licensee's and IBM's respective rights, duties, and obligations arising from, or relating in any manner to, the subject matter of this Agreement, without regard to conflict of law principles. + +The United Nations Convention on Contracts for the International Sale of Goods does not apply. + +14.2 Jurisdiction + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license. + +Part 2 - Country-unique Terms + +For licenses granted in the countries specified below, the following terms replace or modify the referenced terms in Part 1. All terms in Part 1 that are not changed by these amendments remain unchanged and in effect. This Part 2 is organized as follows: + +* Multiple country amendments to Part 1, Section 14 (Governing Law and Jurisdiction); + +* Americas country amendments to other Agreement terms; + +* Asia Pacific country amendments to other Agreement terms; and + +* Europe, Middle East, and Africa country amendments to other Agreement terms. + +Multiple country amendments to Part 1, Section 14 (Governing Law and Jurisdiction) + +14.1 Governing Law + +The phrase "the laws of the country in which Licensee obtained the Program license" in the first paragraph of 14.1 Governing Law is replaced by the following phrases in the countries below: + +AMERICAS + +(1) In Canada: the laws in the Province of Ontario; + +(2) in Mexico: the federal laws of the Republic of Mexico; + +(3) in the United States, Anguilla, Antigua/Barbuda, Aruba, British Virgin Islands, Cayman Islands, Dominica, Grenada, Guyana, Saint Kitts and Nevis, Saint Lucia, Saint Maarten, and Saint Vincent and the Grenadines: the laws of the State of New York, United States; + +(4) in Venezuela: the laws of the Bolivarian Republic of Venezuela; + +ASIA PACIFIC + +(5) in Cambodia and Laos: the laws of the State of New York, United States; + +(6) in Australia: the laws of the State or Territory in which the transaction is performed; + +(7) in Hong Kong SAR and Macau SAR: the laws of Hong Kong Special Administrative Region ("SAR"); + +(8) in Taiwan: the laws of Taiwan; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: the laws of Austria; + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the laws of France; + +(11) in Estonia, Latvia, and Lithuania: the laws of Finland; + +(12) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the laws of England; and + +(13) in South Africa, Namibia, Lesotho, and Swaziland: the laws of the Republic of South Africa. + +14.2 Jurisdiction + +The following paragraph pertains to jurisdiction and replaces Subsection 14.2 (Jurisdiction) as it applies for those countries identified below: + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license except that in the countries identified below all disputes arising out of or related to this Agreement, including summary proceedings, will be brought before and subject to the exclusive jurisdiction of the following courts of competent jurisdiction: + +AMERICAS + +(1) In Argentina: the Ordinary Commercial Court of the city of Buenos Aires; + +(2) in Brazil: the court of Rio de Janeiro, RJ; + +(3) in Chile: the Civil Courts of Justice of Santiago; + +(4) in Ecuador: the civil judges of Quito for executory or summary proceedings (as applicable); + +(5) in Mexico: the courts located in Mexico City, Federal District; + +(6) in Peru: the judges and tribunals of the judicial district of Lima, Cercado; + +(7) in Uruguay: the courts of the city of Montevideo; + +(8) in Venezuela: the courts of the metropolitan area of the city of Caracas; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Austria: the court of law in Vienna, Austria (Inner-City); + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, France, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Monaco, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the Commercial Court of Paris; + +(11) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the English courts; + +(12) in South Africa, Namibia, Lesotho, and Swaziland: the High Court in Johannesburg; + +(13) in Greece: the competent court of Athens; + +(14) in Israel: the courts of Tel Aviv-Jaffa; + +(15) in Italy: the courts of Milan; + +(16) in Portugal: the courts of Lisbon; + +(17) in Spain: the courts of Madrid; and + +(18) in Turkey: the Istanbul Central Courts and Execution Directorates of Istanbul, the Republic of Turkey. + +14.3 Arbitration + +The following paragraph is added as a new Subsection 14.3 (Arbitration) as it applies for those countries identified below. The provisions of this Subsection 14.3 prevail over those of Subsection 14.2 (Jurisdiction) to the extent permitted by the applicable governing law and rules of procedure: + +ASIA PACIFIC + +(1) In Cambodia, India, Laos, Philippines, and Vietnam: + +Disputes arising out of or in connection with this Agreement will be finally settled by arbitration which will be held in Singapore in accordance with the Arbitration Rules of Singapore International Arbitration Center ("SIAC Rules") then in effect. The arbitration award will be final and binding for the parties without appeal and will be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators will be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties will appoint a third arbitrator who will act as chairman of the proceedings. Vacancies in the post of chairman will be filled by the president of the SIAC. Other vacancies will be filled by the respective nominating party. Proceedings will continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator will be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings will be conducted, including all documents presented in such proceedings, in the English language. The English language version of this Agreement prevails over any other language version. + +(2) In the People's Republic of China: + +In case no settlement can be reached, the disputes will be submitted to China International Economic and Trade Arbitration Commission for arbitration according to the then effective rules of the said Arbitration Commission. The arbitration will take place in Beijing and be conducted in Chinese. The arbitration award will be final and binding on both parties. During the course of arbitration, this agreement will continue to be performed except for the part which the parties are disputing and which is undergoing arbitration. + +(3) In Indonesia: + +Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation, i) neither party will bring a legal action, regardless of form, arising out of or related to this Agreement or any transaction under it more than two years after the cause of action arose; and ii) after such time limit, any legal action arising out of this Agreement or any transaction under it and all respective rights related to any such action lapse. + +Disputes arising out of or in connection with this Agreement shall be finally settled by arbitration that shall be held in Jakarta, Indonesia in accordance with the rules of Board of the Indonesian National Board of Arbitration (Badan Arbitrase Nasional Indonesia or "BANI") then in effect. The arbitration award shall be final and binding for the parties without appeal and shall be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators shall be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties shall appoint a third arbitrator who shall act as chairman of the proceedings. Vacancies in the post of chairman shall be filled by the chairman of the BANI. Other vacancies shall be filled by the respective nominating party. Proceedings shall continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator shall be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings shall be conducted, including all documents presented in such proceedings, in the English and/or Indonesian language. + +EUROPE, MIDDLE EAST, AND AFRICA + +(4) In Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: + +All disputes arising out of this Agreement or related to its violation, termination or nullity will be finally settled under the Rules of Arbitration and Conciliation of the International Arbitral Center of the Federal Economic Chamber in Vienna (Vienna Rules) by three arbitrators appointed in accordance with these rules. The arbitration will be held in Vienna, Austria, and the official language of the proceedings will be English. The decision of the arbitrators will be final and binding upon both parties. Therefore, pursuant to paragraph 598 (2) of the Austrian Code of Civil Procedure, the parties expressly waive the application of paragraph 595 (1) figure 7 of the Code. IBM may, however, institute proceedings in a competent court in the country of installation. + +(5) In Estonia, Latvia, and Lithuania: + +All disputes arising in connection with this Agreement will be finally settled in arbitration that will be held in Helsinki, Finland in accordance with the arbitration laws of Finland then in effect. Each party will appoint one arbitrator. The arbitrators will then jointly appoint the chairman. If arbitrators cannot agree on the chairman, then the Central Chamber of Commerce in Helsinki will appoint the chairman. + +AMERICAS COUNTRY AMENDMENTS + +CANADA + +10.1 Items for Which IBM May be Liable + +The following replaces Item 1 in the first paragraph of this Subsection 10.1 (Items for Which IBM May be Liable): + +1) damages for bodily injury (including death) and physical harm to real property and tangible personal property caused by IBM's negligence; and + +13. General + +The following replaces Item 13.d: + +d. Licensee agrees to comply with all applicable export and import laws and regulations, including those of that apply to goods of United States origin and that prohibit or limit export for certain uses or to certain users. + +The following replaces Item 13.i: + +i. No right or cause of action for any third party is created by this Agreement or any transaction under it, nor is IBM responsible for any third party claims against Licensee except as permitted by the Limitation of Liability section above for bodily injury (including death) or physical harm to real or tangible personal property caused by IBM's negligence for which IBM is legally liable to that third party. + +The following is added as Item 13.m: + +m. For purposes of this Item 13.m, "Personal Data" refers to information relating to an identified or identifiable individual made available by one of the parties, its personnel or any other individual to the other in connection with this Agreement. The following provisions apply in the event that one party makes Personal Data available to the other: + +(1) General + +(a) Each party is responsible for complying with any obligations applying to it under applicable Canadian data privacy laws and regulations ("Laws"). + +(b) Neither party will request Personal Data beyond what is necessary to fulfill the purpose(s) for which it is requested. The purpose(s) for requesting Personal Data must be reasonable. Each party will agree in advance as to the type of Personal Data that is required to be made available. + +(2) Security Safeguards + +(a) Each party acknowledges that it is solely responsible for determining and communicating to the other the appropriate technological, physical and organizational security measures required to protect Personal Data. + +(b) Each party will ensure that Personal Data is protected in accordance with the security safeguards communicated and agreed to by the other. + +(c) Each party will ensure that any third party to whom Personal Data is transferred is bound by the applicable terms of this section. + +(d) Additional or different services required to comply with the Laws will be deemed a request for new services. + +(3) Use + +Each party agrees that Personal Data will only be used, accessed, managed, transferred, disclosed to third parties or otherwise processed to fulfill the purpose(s) for which it was made available. + +(4) Access Requests + +(a) Each party agrees to reasonably cooperate with the other in connection with requests to access or amend Personal Data. + +(b) Each party agrees to reimburse the other for any reasonable charges incurred in providing each other assistance. + +(c) Each party agrees to amend Personal Data only upon receiving instructions to do so from the other party or its personnel. + +(5) Retention + +Each party will promptly return to the other or destroy all Personal Data that is no longer necessary to fulfill the purpose(s) for which it was made available, unless otherwise instructed by the other or its personnel or required by law. + +(6) Public Bodies Who Are Subject to Public Sector Privacy Legislation + +For Licensees who are public bodies subject to public sector privacy legislation, this Item 13.m applies only to Personal Data made available to Licensee in connection with this Agreement, and the obligations in this section apply only to Licensee, except that: 1) section (2)(a) applies only to IBM; 2) sections (1)(a) and (4)(a) apply to both parties; and 3) section (4)(b) and the last sentence in (1)(b) do not apply. + +PERU + +10. Limitation of Liability + +The following is added to the end of this Section 10 (Limitation of Liability): + +Except as expressly required by law without the possibility of contractual waiver, Licensee and IBM intend that the limitation of liability in this Limitation of Liability section applies to damages caused by all types of claims and causes of action. If any limitation on or exclusion from liability in this section is held by a court of competent jurisdiction to be unenforceable with respect to a particular claim or cause of action, the parties intend that it nonetheless apply to the maximum extent permitted by applicable law to all other claims and causes of action. + +10.1 Items for Which IBM May be Liable + +The following is added at the end of this Subsection 10.1: + +In accordance with Article 1328 of the Peruvian Civil Code, the limitations and exclusions specified in this section will not apply to damages caused by IBM's willful misconduct ("dolo") or gross negligence ("culpa inexcusable"). + +UNITED STATES OF AMERICA + +5. Taxes + +The following is added at the end of this Section 5 (Taxes) + +For Programs delivered electronically in the United States for which Licensee claims a state sales and use tax exemption, Licensee agrees not to receive any tangible personal property (e.g., media and publications) associated with the electronic program. + +Licensee agrees to be responsible for any sales and use tax liabilities that may arise as a result of Licensee's subsequent redistribution of Programs after delivery by IBM. + +13. General + +The following is added to Section 13 as Item 13.m: + +U.S. Government Users Restricted Rights - Use, duplication or disclosure is restricted by the GSA IT Schedule 70 Contract with the IBM Corporation. + +The following is added to Item 13.f: + +Each party waives any right to a jury trial in any proceeding arising out of or related to this Agreement. + +ASIA PACIFIC COUNTRY AMENDMENTS + +AUSTRALIA + +5. Taxes + +The following sentences replace the first two sentences of Section 5 (Taxes): + +If any government or authority imposes a duty, tax (other than income tax), levy, or fee, on this Agreement or on the Program itself, that is not otherwise provided for in the amount payable, Licensee agrees to pay it when IBM invoices Licensee. If the rate of GST changes, IBM may adjust the charge or other amount payable to take into account that change from the date the change becomes effective. + +8.1 Limited Warranty + +The following is added to Subsection 8.1 (Limited Warranty): + +The warranties specified this Section are in addition to any rights Licensee may have under the Competition and Consumer Act 2010 or other legislation and are only limited to the extent permitted by the applicable legislation. + +10.1 Items for Which IBM May be Liable + +The following is added to Subsection 10.1 (Items for Which IBM May be Liable): + +Where IBM is in breach of a condition or warranty implied by the Competition and Consumer Act 2010, IBM's liability is limited to the repair or replacement of the goods, or the supply of equivalent goods. Where that condition or warranty relates to right to sell, quiet possession or clear title, or the goods are of a kind ordinarily obtained for personal, domestic or household use or consumption, then none of the limitations in this paragraph apply. + +HONG KONG SAR, MACAU SAR, AND TAIWAN + +As applies to licenses obtained in Taiwan and the special administrative regions, phrases throughout this Agreement containing the word "country" (for example, "the country in which the original Licensee was granted the license" and "the country in which Licensee obtained the Program license") are replaced with the following: + +(1) In Hong Kong SAR: "Hong Kong SAR" + +(2) In Macau SAR: "Macau SAR" except in the Governing Law clause (Section 14.1) + +(3) In Taiwan: "Taiwan." + +INDIA + +10.1 Items for Which IBM May be Liable + +The following replaces the terms of Items 1 and 2 of the first paragraph: + +1) liability for bodily injury (including death) or damage to real property and tangible personal property will be limited to that caused by IBM's negligence; and 2) as to any other actual damage arising in any situation involving nonperformance by IBM pursuant to, or in any way related to the subject of this Agreement, IBM's liability will be limited to the charge paid by Licensee for the individual Program that is the subject of the claim. + +13. General + +The following replaces the terms of Item 13.g: + +If no suit or other legal action is brought, within three years after the cause of action arose, in respect of any claim that either party may have against the other, the rights of the concerned party in respect of such claim will be forfeited and the other party will stand released from its obligations in respect of such claim. + +INDONESIA + +3.3 Term and Termination + +The following is added to the last paragraph: + +Both parties waive the provision of article 1266 of the Indonesian Civil Code, to the extent the article provision requires such court decree for the termination of an agreement creating mutual obligations. + +JAPAN + +13. General + +The following is inserted after Item 13.f: + +Any doubts concerning this Agreement will be initially resolved between us in good faith and in accordance with the principle of mutual trust. + +MALAYSIA + +10.2 Items for Which IBM Is not Liable + +The word "SPECIAL" in Item 10.2b is deleted. + +NEW ZEALAND + +8.1 Limited Warranty + +The following is added: + +The warranties specified in this Section are in addition to any rights Licensee may have under the Consumer Guarantees Act 1993 or other legislation which cannot be excluded or limited. The Consumer Guarantees Act 1993 will not apply in respect of any goods which IBM provides, if Licensee requires the goods for the purposes of a business as defined in that Act. + +10. Limitation of Liability + +The following is added: + +Where Programs are not obtained for the purposes of a business as defined in the Consumer Guarantees Act 1993, the limitations in this Section are subject to the limitations in that Act. + +PEOPLE'S REPUBLIC OF CHINA + +4. Charges + +The following is added: + +All banking charges incurred in the People's Republic of China will be borne by Licensee and those incurred outside the People's Republic of China will be borne by IBM. + +PHILIPPINES + +10.2 Items for Which IBM Is not Liable + +The following replaces the terms of Item 10.2b: + +b. special (including nominal and exemplary damages), moral, incidental, or indirect damages or for any economic consequential damages; or + +SINGAPORE + +10.2 Items for Which IBM Is not Liable + +The words "SPECIAL" and "ECONOMIC" are deleted from Item 10.2b. + +13. General + +The following replaces the terms of Item 13.i: + +Subject to the rights provided to IBM's suppliers and Program developers as provided in Section 10 above (Limitation of Liability), a person who is not a party to this Agreement will have no right under the Contracts (Right of Third Parties) Act to enforce any of its terms. + +TAIWAN + +8.1 Limited Warranty + +The last paragraph is deleted. + +10.1 Items for Which IBM May Be Liable + +The following sentences are deleted: + +This limit also applies to any of IBM's subcontractors and Program developers. It is the maximum for which IBM and its subcontractors and Program developers are collectively responsible. + +EUROPE, MIDDLE EAST, AFRICA (EMEA) COUNTRY AMENDMENTS + +EUROPEAN UNION MEMBER STATES + +8. Warranty and Exclusions + +The following is added to Section 8 (Warranty and Exclusion): + +In the European Union ("EU"), consumers have legal rights under applicable national legislation governing the sale of consumer goods. Such rights are not affected by the provisions set out in this Section 8 (Warranty and Exclusions). The territorial scope of the Limited Warranty is worldwide. + +EU MEMBER STATES AND THE COUNTRIES IDENTIFIED BELOW + +Iceland, Liechtenstein, Norway, Switzerland, Turkey, and any other European country that has enacted local data privacy or protection legislation similar to the EU model. + +13. General + +The following replaces Item 13.e: + +(1) Definitions - For the purposes of this Item 13.e, the following additional definitions apply: + +(a) Business Contact Information - business-related contact information disclosed by Licensee to IBM, including names, job titles, business addresses, telephone numbers and email addresses of Licensee's employees and contractors. For Austria, Italy and Switzerland, Business Contact Information also includes information about Licensee and its contractors as legal entities (for example, Licensee's revenue data and other transactional information) + +(b) Business Contact Personnel - Licensee employees and contractors to whom the Business Contact Information relates. + +(c) Data Protection Authority - the authority established by the Data Protection and Electronic Communications Legislation in the applicable country or, for non-EU countries, the authority responsible for supervising the protection of personal data in that country, or (for any of the foregoing) any duly appointed successor entity thereto. + +(d) Data Protection & Electronic Communications Legislation - (i) the applicable local legislation and regulations in force implementing the requirements of EU Directive 95/46/EC (on the protection of individuals with regard to the processing of personal data and on the free movement of such data) and of EU Directive 2002/58/EC (concerning the processing of personal data and the protection of privacy in the electronic communications sector); or (ii) for non-EU countries, the legislation and/or regulations passed in the applicable country relating to the protection of personal data and the regulation of electronic communications involving personal data, including (for any of the foregoing) any statutory replacement or modification thereof. + +(e) IBM Group - International Business Machines Corporation of Armonk, New York, USA, its subsidiaries, and their respective Business Partners and subcontractors. + +(2) Licensee authorizes IBM: + +(a) to process and use Business Contact Information within IBM Group in support of Licensee including the provision of support services, and for the purpose of furthering the business relationship between Licensee and IBM Group, including, without limitation, contacting Business Contact Personnel (by email or otherwise) and marketing IBM Group products and services (the "Specified Purpose"); and + +(b) to disclose Business Contact Information to other members of IBM Group in pursuit of the Specified Purpose only. + +(3) IBM agrees that all Business Contact Information will be processed in accordance with the Data Protection & Electronic Communications Legislation and will be used only for the Specified Purpose. + +(4) To the extent required by the Data Protection & Electronic Communications Legislation, Licensee represents that (a) it has obtained (or will obtain) any consents from (and has issued (or will issue) any notices to) the Business Contact Personnel as are necessary in order to enable IBM Group to process and use the Business Contact Information for the Specified Purpose. + +(5) Licensee authorizes IBM to transfer Business Contact Information outside the European Economic Area, provided that the transfer is made on contractual terms approved by the Data Protection Authority or the transfer is otherwise permitted under the Data Protection & Electronic Communications Legislation. + +AUSTRIA + +8.2 Exclusions + +The following is deleted from the first paragraph: + +MERCHANTABILITY, SATISFACTORY QUALITY + +10. Limitation of Liability + +The following is added: + +The following limitations and exclusions of IBM's liability do not apply for damages caused by gross negligence or willful misconduct. + +10.1 Items for Which IBM May Be Liable + +The following replaces the first sentence in the first paragraph: + +Circumstances may arise where, because of a default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. + +In the second sentence of the first paragraph, delete entirely the parenthetical phrase: + +"(including fundamental breach, negligence, misrepresentation, or other contract or tort claim)". + +10.2 Items for Which IBM Is Not Liable + +The following replaces Item 10.2b: + +b. indirect damages or consequential damages; or + +BELGIUM, FRANCE, ITALY, AND LUXEMBOURG + +10. Limitation of Liability + +The following replaces the terms of Section 10 (Limitation of Liability) in its entirety: + +Except as otherwise provided by mandatory law: + +10.1 Items for Which IBM May Be Liable + +IBM's entire liability for all claims in the aggregate for any damages and losses that may arise as a consequence of the fulfillment of its obligations under or in connection with this Agreement or due to any other cause related to this Agreement is limited to the compensation of only those damages and losses proved and actually arising as an immediate and direct consequence of the non-fulfillment of such obligations (if IBM is at fault) or of such cause, for a maximum amount equal to the charges (if the Program is subject to fixed term charges, up to twelve months' charges) Licensee paid for the Program that has caused the damages. + +The above limitation will not apply to damages for bodily injuries (including death) and damages to real property and tangible personal property for which IBM is legally liable. + +10.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM OR ANY OF ITS PROGRAM DEVELOPERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: 1) LOSS OF, OR DAMAGE TO, DATA; 2) INCIDENTAL, EXEMPLARY OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; AND / OR 3) LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS, EVEN IF THEY ARISE AS AN IMMEDIATE CONSEQUENCE OF THE EVENT THAT GENERATED THE DAMAGES. + +10.3 Suppliers and Program Developers + +The limitation and exclusion of liability herein agreed applies not only to the activities performed by IBM but also to the activities performed by its suppliers and Program developers, and represents the maximum amount for which IBM as well as its suppliers and Program developers are collectively responsible. + +GERMANY + +8.1 Limited Warranty + +The following is inserted at the beginning of Section 8.1: + +The Warranty Period is twelve months from the date of delivery of the Program to the original Licensee. + +8.2 Exclusions + +Section 8.2 is deleted in its entirety and replaced with the following: + +Section 8.1 defines IBM's entire warranty obligations to Licensee except as otherwise required by applicable statutory law. + +10. Limitation of Liability + +The following replaces the Limitation of Liability section in its entirety: + +a. IBM will be liable without limit for 1) loss or damage caused by a breach of an express guarantee; 2) damages or losses resulting in bodily injury (including death); and 3) damages caused intentionally or by gross negligence. + +b. In the event of loss, damage and frustrated expenditures caused by slight negligence or in breach of essential contractual obligations, IBM will be liable, regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), per claim only up to the greater of 500,000 euro or the charges (if the Program is subject to fixed term charges, up to 12 months' charges) Licensee paid for the Program that caused the loss or damage. A number of defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one default. + +c. In the event of loss, damage and frustrated expenditures caused by slight negligence, IBM will not be liable for indirect or consequential damages, even if IBM was informed about the possibility of such loss or damage. + +d. In case of delay on IBM's part: 1) IBM will pay to Licensee an amount not exceeding the loss or damage caused by IBM's delay and 2) IBM will be liable only in respect of the resulting damages that Licensee suffers, subject to the provisions of Items a and b above. + +13. General + +The following replaces the provisions of 13.g: + +Any claims resulting from this Agreement are subject to a limitation period of three years, except as stated in Section 8.1 (Limited Warranty) of this Agreement. + +The following replaces the provisions of 13.i: + +No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except (to the extent permitted in Section 10 (Limitation of Liability)) for: i) bodily injury (including death); or ii) damage to real or tangible personal property for which (in either case) IBM is legally liable to that third party. + +IRELAND + +8.2 Exclusions + +The following paragraph is added: + +Except as expressly provided in these terms and conditions, or Section 12 of the Sale of Goods Act 1893 as amended by the Sale of Goods and Supply of Services Act, 1980 (the "1980 Act"), all conditions or warranties (express or implied, statutory or otherwise) are hereby excluded including, without limitation, any warranties implied by the Sale of Goods Act 1893 as amended by the 1980 Act (including, for the avoidance of doubt, Section 39 of the 1980 Act). + +IRELAND AND UNITED KINGDOM + +2. Agreement Structure + +The following sentence is added: + +Nothing in this paragraph shall have the effect of excluding or limiting liability for fraud. + +10.1 Items for Which IBM May Be Liable + +The following replaces the first paragraph of the Subsection: + +For the purposes of this section, a "Default" means any act, statement, omission or negligence on the part of IBM in connection with, or in relation to, the subject matter of an Agreement in respect of which IBM is legally liable to Licensee, whether in contract or in tort. A number of Defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one Default. + +Circumstances may arise where, because of a Default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM and except as expressly required by law without the possibility of contractual waiver, IBM's entire liability for any one Default will not exceed the amount of any direct damages, to the extent actually suffered by Licensee as an immediate and direct consequence of the default, up to the greater of (1) 500,000 euro (or the equivalent in local currency) or (2) 125% of the charges (if the Program is subject to fixed term charges, up to 12 months' charges) for the Program that is the subject of the claim. Notwithstanding the foregoing, the amount of any damages for bodily injury (including death) and damage to real property and tangible personal property for which IBM is legally liable is not subject to such limitation. + +10.2 Items for Which IBM is Not Liable + +The following replaces Items 10.2b and 10.2c: + +b. special, incidental, exemplary, or indirect damages or consequential damages; or + +c. wasted management time or lost profits, business, revenue, goodwill, or anticipated savings. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_es b/charts/mq-advancedserver/LICENSE_locale/LICENSE_es new file mode 100644 index 0000000..7ff9810 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_es @@ -0,0 +1,1261 @@ +AVISO + +Este documento incluye a continuación documentos de Información sobre Licencia para varios Programas. Cada documento de Información sobre Licencia identifica el Programa o Programas a los que se aplica. Sólo se aplican los documentos de Información sobre Licencia para el Programa o Programas para los cuales el Licenciatario haya adquirido autorizaciones. + + +============================================== + + +IMPORTANTE: LEER DETENIDAMENTE + +A continuación se presentan dos acuerdos de licencia. + +1. Acuerdo Internacional de Licencia para la Evaluación de Programas de IBM +2. Acuerdo Internacional de Programas bajo Licencia de IBM + +Si el Licenciatario obtiene el Programa con finalidades de uso productivo (que no sean de evaluación, realización de pruebas, prueba "try or buy" o demostración): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el Acuerdo Internacional de Programas bajo Licencia de IBM, sin modificación. + +Si el Licenciatario obtiene el Programa con finalidades de evaluación, realización de pruebas, prueba "try or buy" o demostración (colectivamente, una "Evaluación"): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el (i) Acuerdo Internacional de Licencia para Evaluación de Programas de IBM (la "Licencia de Evaluación"), sin modificación; y (ii) el Acuerdo Internacional de Programas bajo Licencia de IBM (el "IPLA"), sin modificación. + +La Licencia de Evaluación se aplicará durante el plazo de la Evaluación del Licenciatario. + +El IPLA se aplicará automáticamente si el Licenciatario elige conservar el Programa después de la Evaluación (o obtener copias adicionales del Programa para su uso después de la Evaluación) suscribiendo un acuerdo de adquisición (por ejemplo, los acuerdos International Passport Advantage de IBM o Passport Advantage Express de IBM). + +La Licencia de Evaluación y el IPLA no se aplican simultáneamente, ni se modifican entre ellos y son independientes entre sí. + +A continuación se ofrece el texto completo de cada uno de estos acuerdos de licencia. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Licencia para la Evaluación de Programas (Z125-5543-05). + +Nombre de Programa (Número de Programa): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Los términos estándar siguientes se aplican al uso por parte del Licenciatario del Programa. + +Periodo de Evaluación + +El periodo de evaluación comenzará en la fecha en que el Licenciatario acepte los términos de este Acuerdo y finalizará después de 90 días. + +Programas de Soporte + +El Programa se licencia como un paquete de Programa de varios productos e incluye los Programas de Soporte definidos a continuación. El Licenciatario está autorizado para instalar y utilizar dichos Programas de Soporte únicamente para ofrecer soporte al uso por parte del Licenciatario del Programa Principal bajo el presente Acuerdo y dentro de los límites de los Documentos de Titularidad del Programa (salvo que en cualquier otra parte de este documento de Información de Licencia se proporcionen derechos que vayan más allá). La frase "para ofrecer soporte al uso por parte del Licenciatario" incluiría únicamente los usos necesarios o de otro modo relacionados directamente con un uso bajo licencia del Programa Principal u otro Programa de Soporte. Los Programas de Soporte no pueden utilizarse con ninguna otra finalidad. El Licenciatario no está autorizado para transferir ni recomercializar los Programas de Soporte separados del Programa Principal. Un Programa de Soporte puede ir acompañado de términos de licencia y, dichos términos, de haberlos, se aplicarán al uso del Programa de Soporte por parte del Licenciatario. En el supuesto de que se produjera un conflicto, los términos de este documento de Licencia prevalecerán sobre los términos del Programa de Soporte. Cuando el derecho del Licenciatario a utilizar el Programa expira o finaliza, el Licenciatario debe interrumpir el uso, destruir o devolver inmediatamente todas las copias de los Programas de Soporte al distribuidor de quien adquirió el Programa. Si el Licenciatario ha descargado los Programas de Soporte, el Licenciatario debe ponerse en contacto con el distribuidor de quien adquirió el Programa. Si el Licenciatario deseara adquirir una licencia para los Programas de Soporte para cualquier uso más allá de los límites que se establecen más arriba, deberá ponerse en contacto con un Representante de Ventas de IBM o con el distribuidor que le proporcionó el Programa para obtener la licencia adecuada. + +Los siguientes Programas de Soporte se licencian con el Programa: +IBM WebSphere Application Server Liberty V17.0 + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Programas bajo Licencia (Z125-3301-14). + +Nombre de Programa (Número de Programa): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Los términos estándar siguientes se aplican al uso por parte del Licenciatario del Programa. + +Derecho de uso limitado + +Tal como se estipula en el Acuerdo Internacional de Programas Bajo Licencia ("IPLA") y en la presente Información de Licencia, IBM otorga al Licenciatario un derecho limitado a utilizar el Programa. Este derecho está limitado a los niveles de Uso Autorizado, como una Value Unit de Procesador ("PVU"), una Value Unit de Recurso ("RVU"), una Value Unit ("VU") u otros niveles de uso estipulados que el Licenciatario hubiera pagado, tal como se indica en el Documento de Titularidad. El uso por parte del Licenciatario también se limitará a una máquina especificada o al uso como Programa de Soporte, o se someterá a otras restricciones. Puesto que el Licenciatario no ha pagado el valor económico íntegro del Programa, no se permitirá ningún otro uso sin abonar previamente los cargos adicionales correspondientes. Además, el Licenciatario no está autorizado a utilizar el Programa para prestar servicios de TI comerciales a terceros o para prestar servicios comerciales de alojamiento web u ofrecer el uso del Programa en régimen de multipropiedad, ni a otorgar licencias a terceros, alquilar o arrendar el Programa, salvo que así se estableciera explícitamente en los acuerdos aplicables en virtud de los cuales el Licenciatario obtiene las necesarias autorizaciones para utilizar el Programa. Podrán otorgarse al Licenciatario derechos adicionales previo pago de los cargos adicionales correspondientes o en virtud de unos términos distintos o complementarios. IBM se reserva el derecho a determinar si desea otorgar al Licenciatario dichos derechos adicionales. + +Especificaciones + +Encontrará las especificaciones del Programa en las cláusulas comunes Descripción e Información técnica incluidas en las Cartas de anuncio del Programa. + +Programas de Soporte + +El Programa se licencia como un paquete de Programa de varios productos e incluye los Programas de Soporte definidos a continuación. El Licenciatario está autorizado para instalar y utilizar dichos Programas de Soporte únicamente para ofrecer soporte al uso por parte del Licenciatario del Programa Principal bajo el presente Acuerdo y dentro de los límites de los Documentos de Titularidad del Programa (salvo que en cualquier otra parte de este documento de Información de Licencia se proporcionen derechos que vayan más allá). La frase "para ofrecer soporte al uso por parte del Licenciatario" incluiría únicamente los usos necesarios o de otro modo relacionados directamente con un uso bajo licencia del Programa Principal u otro Programa de Soporte. Los Programas de Soporte no pueden utilizarse con ninguna otra finalidad. El Licenciatario no está autorizado para transferir ni recomercializar los Programas de Soporte separados del Programa Principal. Un Programa de Soporte puede ir acompañado de términos de licencia y, dichos términos, de haberlos, se aplicarán al uso del Programa de Soporte por parte del Licenciatario. En el supuesto de que se produjera un conflicto, los términos de este documento de Licencia prevalecerán sobre los términos del Programa de Soporte. Cuando el derecho del Licenciatario a utilizar el Programa expira o finaliza, el Licenciatario debe interrumpir el uso, destruir o devolver inmediatamente todas las copias de los Programas de Soporte al distribuidor de quien adquirió el Programa. Si el Licenciatario ha descargado los Programas de Soporte, el Licenciatario debe ponerse en contacto con el distribuidor de quien adquirió el Programa. Si el Licenciatario deseara adquirir una licencia para los Programas de Soporte para cualquier uso más allá de los límites que se establecen más arriba, deberá ponerse en contacto con un Representante de Ventas de IBM o con el distribuidor que le proporcionó el Programa para obtener la licencia adecuada. + +Los siguientes Programas de Soporte se licencian con el Programa: +IBM WebSphere Application Server Liberty V17.0 + +Componentes no utilizados para establecer las Autorizaciones Necesarias + +Cuando se determina el número de autorizaciones que requiere el Licenciatario para la instalación o uso del Programa, no se tiene en consideración la instalación o uso de los siguientes componentes del Programa. En otras palabras, el Licenciatario puede instalar y utilizar los siguientes componentes del Programa, de conformidad con los términos de la licencia, pero estos componentes no se utilizarán para determinar el número de autorizaciones requeridas para el Programa. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Redistribuibles + +Si el Programa incluye componentes que son Redistribuibles, se identificarán en el archivo REDIST que acompaña al Programa. Además de los derechos de licencia que se otorgan en el Acuerdo, el Licenciatario puede distribuir los Redistribuibles sujeto a los siguientes términos: +1) La redistribución debe ser sólo en formato de código objeto y debe cumplir con todas las directrices, instrucciones y especificaciones de la documentación o del archivo REDIST que acompaña al Programa; +2) Si la documentación que acompaña al Programa permite explícitamente al Licenciatario modificar los Redistribuibles, dichas modificaciones deben cumplir con todas las directrices, instrucciones y especificaciones de dicha documentación y estas modificaciones, si las hubiere, deben considerarse como Redistribuibles; +3) El Licenciatario puede distribuir los Redistribuibles únicamente como parte de la aplicación del Licenciatario que se desarrolló utilizando el Programa ("Aplicación del Licenciatario") y únicamente para ofrecer soporte a los clientes del Licenciatario en conexión con su uso de la Aplicación del Licenciatario. La Aplicación del Licenciatario debe representar un valor añadido significativo, de modo que los Redistribuibles no sean una motivación importante en la adquisición del producto software por parte de los usuarios finales; +4) Si los Redistribuibles incluyen un Java Runtime Environment, el Licenciatario debe incluir también otros Redistribuibles que no sean Java con la Aplicación del Licenciatario, a menos que la aplicación del Licenciatario se haya diseñado para ejecutarse sólo en dispositivos generales de sistemas (portátiles, sistemas de sobremesa y servidores, por ejemplo) y no en dispositivos portátiles u otros dispositivos generales (es decir, dispositivos que contienen un microprocesador pero que su finalidad principal no es el sistema informático); +5) El Licenciatario no puede eliminar ningún archivo de aviso o de copyright de los Redistribuibles; +6) El Licenciatario deberá eximir de cualquier responsabilidad a IBM, a sus proveedores y a sus distribuidores de y contra cualquier reclamación que surja por el uso o distribución de la Aplicación del Licenciatario; +7) El Licenciatario no puede utilizar el mismo nombre de vía de acceso que los archivos/módulos Redistribuibles originales; +8) El Licenciatario no puede utilizar los nombres ni las marcas registradas de IBM, de sus proveedores ni de sus distribuidores en relación con la comercialización de la Aplicación del Licenciatario sin el previo consentimiento por escrito de IBM o de dicho proveedor o distribuidor; +9) IBM, sus proveedores y sus distribuidores proporcionan los Redistribuibles y la documentación relacionada sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO INFRACCIÓN DE DERECHOS DE TERCEROS O LIBRE DE INTERFERENCIAS Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA; +10) El Licenciatario se responsabilizará de toda la asistencia técnica para la Aplicación del Licenciatario y de todas las modificaciones en los Redistribuibles; y +11) En el acuerdo de licencia de con el usuario final de la Aplicación del Licenciatario, el Licenciatario notificará al usuario final que los Redistribuibles o sus modificaciones no pueden i) utilizarse con ninguna otra finalidad que no sea habilitar la Aplicación del Licenciatario, ii) copiarse (excepto a efectos de copia de seguridad), iii) distribuirse ni transferirse sin la Aplicación del Licenciatario o iv) desensamblarse, descompilarse ni de otro modo traducirse, excepto aquello específicamente permitido por la correspondiente legislación sin que sea posible la renuncia por contrato. Además, el acuerdo de licencia del Licenciatario deberá proteger a IBM al igual, cómo mínimo, que los términos de este Acuerdo. + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + +Para los Componentes en Código Fuente y los Materiales de muestra que aparecen en la lista del archivo REDIST de un Programa, el Licenciatario puede redistribuir las versiones modificadas de dichos Componentes en Código Fuente o Materiales de Muestra que sean coherentes con los términos de la presente licencia y con las instrucciones del archivo REDIST. + +Las unidades de medida siguientes se aplican al uso por parte del Licenciatario del Programa. + +Value Unit de Procesador (PVU) + +Value Unit de Procesador (PVU) es una unidad de medida por la que se puede licenciar el Programa. El número de autorizaciones de PVU necesarios se basa en la tecnología de procesador (que se define en la Tabla de PVU por Proveedor de Procesador, Marca, Tipo y Número de Modelo en el sitio web http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) y en el número de procesadores disponibles para el Programa. IBM continúa definiendo un procesador, a efectos de las licencias basadas en PVU, como cada núcleo de procesador en un chip. Un chip de procesador de doble núcleo, por ejemplo, tiene dos núcleos de procesador. + +El Licenciatario puede desplegar el Programa mediante las licencias de Capacidad Completa o las licencias de Capacidad de Virtualización (Subcapacidad) de acuerdo con los Términos de Licencia de Subcapacidad de Passport Advantage (consulte la siguiente página web). Si utiliza las licencias de Capacidad Completa, el Licenciatario debe adquirir suficientes autorizaciones de PVU para todos los núcleos* de procesador activados en el entorno de hardware físico, disponibles para el Programa o gestionados por éste, salvo para los servidores de los que se ha eliminado el Programa permanentemente. Si utiliza las licencias de Capacidad de Virtualización, el Licenciatario debe adquirir suficientes autorizaciones para todos los núcleos de procesador activados disponibles para el Programa o gestionados por éste, tal y como se establece de acuerdo con las Reglas de Recuento de la Licencia de Capacidad de Virtualización que pueden consultarse en http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un núcleo de procesador activado es un núcleo de procesador disponible para el uso en un servidor físico o virtual, independientemente de si la capacidad del núcleo de procesador está o puede estar limitada mediante tecnologías de virtualización, mandatos de sistema operativo, configuraciones de BIOS o restricciones similares. + +Núcleo de Procesador Virtual + +Núcleo de Procesador Virtual es una unidad de medida por la que se puede obtener licencia para el Programa. Un Servidor Físico es un sistema físico que consta de unidades de proceso, memoria y funciones de entrada/salida y que ejecuta los procedimientos, mandatos o aplicaciones solicitados para uno o varios usuarios o dispositivos cliente. Siempre que se utilizan bastidores, alojamientos blade u otro equipo similar, cada dispositivo físico desmontable (por ejemplo, un blade o un dispositivo montado en bastidor) que tenga los componentes solicitados se considera un servidor físico independiente. Un Servidor Virtual es un sistema virtual creado mediante la partición de los recursos disponibles en un servidor físico o en un servidor físico no particionado. Un Núcleo de procesador (denominado de forma común procesador o CPU) es una unidad funcional de un dispositivo informático que interpreta y ejecuta instrucciones. Un Núcleo de procesador se compone de, al menos, una unidad de control de instrucciones y una o varias unidades lógicas o aritméticas. Un Núcleo de procesador virtual es un Núcleo de procesador de un Servidor físico no particionado, o un núcleo virtual asignado a un Servidor virtual. El Licenciatario debe obtener autorizaciones para cada Núcleo de procesador virtual que se pone a disposición del Programa. + +Para cada servidor físico, el Licenciatario debe obtener suficientes autorizaciones como mínimo para 1) la suma de todos los Núcleos de procesador virtual disponibles en todos los Servidores virtuales puestos a disposición del Programa o 2) todos los Núcleos de procesador disponibles en el Servidor físico. + +Además de lo indicado, los términos siguientes se aplican al uso por parte del Licenciatario del Programa. + +Configuraciones de Modalidad de Espera Inactiva + +A efectos de esta cláusula, una configuración de "Modalidad de Espera Inactiva" es una configuración en la que se ha instalado una copia del Programa en un servidor que forma parte de una solución de alta disponibilidad y que es el servidor al que migrará el Programa en caso de que la copia del programa en el servidor activo deje de ser utilizable. Un servidor se considera "inactivo" si, hasta que se produzca la migración, se utiliza exclusivamente para acciones administrativas que ayudan en los escenarios de migración tras error. + +El Programa no deberá instalarse en un servidor de Modalidad de Espera Inactiva si no dispone de la licencia adecuada. + +Si el Programa se utiliza en una configuración de Modalidad de Espera Inactiva con la función de gestor de trabajos en espera en varias instancias, podrá alojarse (y estar iniciada) una copia del programa con fines de copia de seguridad en un servidor de Modalidad de Espera Inactiva, pero deberá permanecer "inactiva" y no podráutilizarse con fines productivos de ningún tipo, a no ser que el servidor activo realice una migración al servidor de Modalidad de Espera Inactiva, en cuyo caso se utilizará dicha copia con fines productivos durante la migración tras error. + +Si el Programa se utiliza en una configuración de Modalidad de Espera Inactiva con otros sistemas de Alta Disponibilidad, entonces podrá alojarse una copia del Programa con fines de copia de seguridad en un servidor de Modalidad de Espera Inactiva pero no podrá iniciarse (y, por tanto, no podrá utilizarse con fines productivos de ningún tipo), aunque se iniciará automáticamente mediante los componentes de Alta Disponibilidad si fallara el servidor activo, en cuyo caso se utilizará la copia de Modalidad de Espera Inactiva con fines productivos durante la migración tras error. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +IMPORTANTE: LEER DETENIDAMENTE + +A continuación se presentan dos acuerdos de licencia. + +1. Acuerdo Internacional de Licencia para la Evaluación de Programas de IBM +2. Acuerdo Internacional de Programas bajo Licencia de IBM + +Si el Licenciatario obtiene el Programa con finalidades de uso productivo (que no sean de evaluación, realización de pruebas, prueba "try or buy" o demostración): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el Acuerdo Internacional de Programas bajo Licencia de IBM, sin modificación. + +Si el Licenciatario obtiene el Programa con finalidades de evaluación, realización de pruebas, prueba "try or buy" o demostración (colectivamente, una "Evaluación"): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el (i) Acuerdo Internacional de Licencia para Evaluación de Programas de IBM (la "Licencia de Evaluación"), sin modificación; y (ii) el Acuerdo Internacional de Programas bajo Licencia de IBM (el "IPLA"), sin modificación. + +La Licencia de Evaluación se aplicará durante el plazo de la Evaluación del Licenciatario. + +El IPLA se aplicará automáticamente si el Licenciatario elige conservar el Programa después de la Evaluación (o obtener copias adicionales del Programa para su uso después de la Evaluación) suscribiendo un acuerdo de adquisición (por ejemplo, los acuerdos International Passport Advantage de IBM o Passport Advantage Express de IBM). + +La Licencia de Evaluación y el IPLA no se aplican simultáneamente, ni se modifican entre ellos y son independientes entre sí. + +A continuación se ofrece el texto completo de cada uno de estos acuerdos de licencia. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Licencia para la Evaluación de Programas (Z125-5543-05). + +Nombre de Programa (Número de Programa): +IBM MQ Advanced V9.0.3 (Evaluation) + +Los términos estándar siguientes se aplican al uso por parte del Licenciatario del Programa. + +Periodo de Evaluación + +El periodo de evaluación comenzará en la fecha en que el Licenciatario acepte los términos de este Acuerdo y finalizará después de 90 días. + +Programas Empaquetados + +El Programa se licencia como un paquete de varios productos que incluye los Programas Empaquetados definidos a continuación. El Licenciatario está autorizado para instalar y utilizar dichos Programas Empaquetados dentro de los límites de los Documentos de Titularidad del Programa tal como se indica en este Documento de Información de Licencia. El licenciatario no está autorizado para transferir ni recomercializar los programas empaquetados separados del paquete de varios productos. Un programa empaquetado puede ir acompañado de términos de licencia y, dichos términos, de haberlos, se aplicarán al uso del programa empaquetado por parte del licenciatario. En el supuesto de que se produjera un conflicto, los términos de este documento de Licencia prevalecerán sobre los términos del Programa Empaquetado. Cuando el derecho del Licenciatario a utilizar el Programa expira o finaliza, el Licenciatario debe interrumpir el uso, destruir o devolver inmediatamente todas las copias de los Programas Empaquetados al distribuidor de quien adquirió el Programa. Si el Licenciatario ha descargado los Programas Empaquetados, el Licenciatario debe ponerse en contacto con el distribuidor de quien adquirió el Programa. Si el Licenciatario deseara adquirir una licencia para los Programas Empaquetados para cualquier uso más allá de los límites que se establecen más arriba, deberá ponerse en contacto con un Representante de Ventas de IBM o con el distribuidor que le proporcionó el Programa para obtener la licencia adecuada. + +Los siguientes Programas Empaquetados se licencian con el Programa: +IBM MQ V9.0.3 + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Programas bajo Licencia (Z125-3301-14). + +Nombre de Programa (Número de Programa): +IBM MQ Advanced V9.0.3 (5724-H72) + +Los términos estándar siguientes se aplican al uso por parte del Licenciatario del Programa. + +Derecho de uso limitado + +Tal como se estipula en el Acuerdo Internacional de Programas Bajo Licencia ("IPLA") y en la presente Información de Licencia, IBM otorga al Licenciatario un derecho limitado a utilizar el Programa. Este derecho está limitado a los niveles de Uso Autorizado, como una Value Unit de Procesador ("PVU"), una Value Unit de Recurso ("RVU"), una Value Unit ("VU") u otros niveles de uso estipulados que el Licenciatario hubiera pagado, tal como se indica en el Documento de Titularidad. El uso por parte del Licenciatario también se limitará a una máquina especificada o al uso como Programa de Soporte, o se someterá a otras restricciones. Puesto que el Licenciatario no ha pagado el valor económico íntegro del Programa, no se permitirá ningún otro uso sin abonar previamente los cargos adicionales correspondientes. Además, el Licenciatario no está autorizado a utilizar el Programa para prestar servicios de TI comerciales a terceros o para prestar servicios comerciales de alojamiento web u ofrecer el uso del Programa en régimen de multipropiedad, ni a otorgar licencias a terceros, alquilar o arrendar el Programa, salvo que así se estableciera explícitamente en los acuerdos aplicables en virtud de los cuales el Licenciatario obtiene las necesarias autorizaciones para utilizar el Programa. Podrán otorgarse al Licenciatario derechos adicionales previo pago de los cargos adicionales correspondientes o en virtud de unos términos distintos o complementarios. IBM se reserva el derecho a determinar si desea otorgar al Licenciatario dichos derechos adicionales. + +Especificaciones + +Encontrará las especificaciones del Programa en las cláusulas comunes Descripción e Información técnica incluidas en las Cartas de anuncio del Programa. + +Programas Empaquetados + +El Programa se licencia como un paquete de varios productos que incluye los Programas Empaquetados definidos a continuación. El Licenciatario está autorizado para instalar y utilizar dichos Programas Empaquetados dentro de los límites de los Documentos de Titularidad del Programa tal como se indica en este Documento de Información de Licencia. El licenciatario no está autorizado para transferir ni recomercializar los programas empaquetados separados del paquete de varios productos. Un programa empaquetado puede ir acompañado de términos de licencia y, dichos términos, de haberlos, se aplicarán al uso del programa empaquetado por parte del licenciatario. En el supuesto de que se produjera un conflicto, los términos de este documento de Licencia prevalecerán sobre los términos del Programa Empaquetado. Cuando el derecho del Licenciatario a utilizar el Programa expira o finaliza, el Licenciatario debe interrumpir el uso, destruir o devolver inmediatamente todas las copias de los Programas Empaquetados al distribuidor de quien adquirió el Programa. Si el Licenciatario ha descargado los Programas Empaquetados, el Licenciatario debe ponerse en contacto con el distribuidor de quien adquirió el Programa. Si el Licenciatario deseara adquirir una licencia para los Programas Empaquetados para cualquier uso más allá de los límites que se establecen más arriba, deberá ponerse en contacto con un Representante de Ventas de IBM o con el distribuidor que le proporcionó el Programa para obtener la licencia adecuada. + +Los siguientes Programas Empaquetados se licencian con el Programa: +IBM MQ V9.0.3 + +Componentes no utilizados para establecer las Autorizaciones Necesarias + +Cuando se determina el número de autorizaciones que requiere el Licenciatario para la instalación o uso del Programa, no se tiene en consideración la instalación o uso de los siguientes componentes del Programa. En otras palabras, el Licenciatario puede instalar y utilizar los siguientes componentes del Programa, de conformidad con los términos de la licencia, pero estos componentes no se utilizarán para determinar el número de autorizaciones requeridas para el Programa. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + +Las unidades de medida siguientes se aplican al uso por parte del Licenciatario del Programa. + +Value Unit de Procesador (PVU) + +Value Unit de Procesador (PVU) es una unidad de medida por la que se puede licenciar el Programa. El número de autorizaciones de PVU necesarios se basa en la tecnología de procesador (que se define en la Tabla de PVU por Proveedor de Procesador, Marca, Tipo y Número de Modelo en el sitio web http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) y en el número de procesadores disponibles para el Programa. IBM continúa definiendo un procesador, a efectos de las licencias basadas en PVU, como cada núcleo de procesador en un chip. Un chip de procesador de doble núcleo, por ejemplo, tiene dos núcleos de procesador. + +El Licenciatario puede desplegar el Programa mediante las licencias de Capacidad Completa o las licencias de Capacidad de Virtualización (Subcapacidad) de acuerdo con los Términos de Licencia de Subcapacidad de Passport Advantage (consulte la siguiente página web). Si utiliza las licencias de Capacidad Completa, el Licenciatario debe adquirir suficientes autorizaciones de PVU para todos los núcleos* de procesador activados en el entorno de hardware físico, disponibles para el Programa o gestionados por éste, salvo para los servidores de los que se ha eliminado el Programa permanentemente. Si utiliza las licencias de Capacidad de Virtualización, el Licenciatario debe adquirir suficientes autorizaciones para todos los núcleos de procesador activados disponibles para el Programa o gestionados por éste, tal y como se establece de acuerdo con las Reglas de Recuento de la Licencia de Capacidad de Virtualización que pueden consultarse en http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un núcleo de procesador activado es un núcleo de procesador disponible para el uso en un servidor físico o virtual, independientemente de si la capacidad del núcleo de procesador está o puede estar limitada mediante tecnologías de virtualización, mandatos de sistema operativo, configuraciones de BIOS o restricciones similares. + +Núcleo de Procesador Virtual + +Núcleo de Procesador Virtual es una unidad de medida por la que se puede obtener licencia para el Programa. Un Servidor Físico es un sistema físico que consta de unidades de proceso, memoria y funciones de entrada/salida y que ejecuta los procedimientos, mandatos o aplicaciones solicitados para uno o varios usuarios o dispositivos cliente. Siempre que se utilizan bastidores, alojamientos blade u otro equipo similar, cada dispositivo físico desmontable (por ejemplo, un blade o un dispositivo montado en bastidor) que tenga los componentes solicitados se considera un servidor físico independiente. Un Servidor Virtual es un sistema virtual creado mediante la partición de los recursos disponibles en un servidor físico o en un servidor físico no particionado. Un Núcleo de procesador (denominado de forma común procesador o CPU) es una unidad funcional de un dispositivo informático que interpreta y ejecuta instrucciones. Un Núcleo de procesador se compone de, al menos, una unidad de control de instrucciones y una o varias unidades lógicas o aritméticas. Un Núcleo de procesador virtual es un Núcleo de procesador de un Servidor físico no particionado, o un núcleo virtual asignado a un Servidor virtual. El Licenciatario debe obtener autorizaciones para cada Núcleo de procesador virtual que se pone a disposición del Programa. + +Para cada servidor físico, el Licenciatario debe obtener suficientes autorizaciones como mínimo para 1) la suma de todos los Núcleos de procesador virtual disponibles en todos los Servidores virtuales puestos a disposición del Programa o 2) todos los Núcleos de procesador disponibles en el Servidor físico. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +IMPORTANTE: LEER DETENIDAMENTE + +A continuación se presentan dos acuerdos de licencia. + +1. Acuerdo Internacional de Licencia para la Evaluación de Programas de IBM +2. Acuerdo Internacional de Programas bajo Licencia de IBM + +Si el Licenciatario obtiene el Programa con finalidades de uso productivo (que no sean de evaluación, realización de pruebas, prueba "try or buy" o demostración): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el Acuerdo Internacional de Programas bajo Licencia de IBM, sin modificación. + +Si el Licenciatario obtiene el Programa con finalidades de evaluación, realización de pruebas, prueba "try or buy" o demostración (colectivamente, una "Evaluación"): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el (i) Acuerdo Internacional de Licencia para Evaluación de Programas de IBM (la "Licencia de Evaluación"), sin modificación; y (ii) el Acuerdo Internacional de Programas bajo Licencia de IBM (el "IPLA"), sin modificación. + +La Licencia de Evaluación se aplicará durante el plazo de la Evaluación del Licenciatario. + +El IPLA se aplicará automáticamente si el Licenciatario elige conservar el Programa después de la Evaluación (o obtener copias adicionales del Programa para su uso después de la Evaluación) suscribiendo un acuerdo de adquisición (por ejemplo, los acuerdos International Passport Advantage de IBM o Passport Advantage Express de IBM). + +La Licencia de Evaluación y el IPLA no se aplican simultáneamente, ni se modifican entre ellos y son independientes entre sí. + +A continuación se ofrece el texto completo de cada uno de estos acuerdos de licencia. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Licencia para la Evaluación de Programas (Z125-5543-05). + +Nombre de Programa (Número de Programa): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Los términos estándar siguientes se aplican al uso por parte del Licenciatario del Programa. + +Periodo de Evaluación + +El periodo de evaluación comenzará en la fecha en que el Licenciatario acepte los términos de este Acuerdo y finalizará después de 90 días. + +Programas Empaquetados + +El Programa se licencia como un paquete de varios productos que incluye los Programas Empaquetados definidos a continuación. El Licenciatario está autorizado para instalar y utilizar dichos Programas Empaquetados dentro de los límites de los Documentos de Titularidad del Programa tal como se indica en este Documento de Información de Licencia. El licenciatario no está autorizado para transferir ni recomercializar los programas empaquetados separados del paquete de varios productos. Un programa empaquetado puede ir acompañado de términos de licencia y, dichos términos, de haberlos, se aplicarán al uso del programa empaquetado por parte del licenciatario. En el supuesto de que se produjera un conflicto, los términos de este documento de Licencia prevalecerán sobre los términos del Programa Empaquetado. Cuando el derecho del Licenciatario a utilizar el Programa expira o finaliza, el Licenciatario debe interrumpir el uso, destruir o devolver inmediatamente todas las copias de los Programas Empaquetados al distribuidor de quien adquirió el Programa. Si el Licenciatario ha descargado los Programas Empaquetados, el Licenciatario debe ponerse en contacto con el distribuidor de quien adquirió el Programa. Si el Licenciatario deseara adquirir una licencia para los Programas Empaquetados para cualquier uso más allá de los límites que se establecen más arriba, deberá ponerse en contacto con un Representante de Ventas de IBM o con el distribuidor que le proporcionó el Programa para obtener la licencia adecuada. + +Los siguientes Programas Empaquetados se licencian con el Programa: +IBM MQ Idle Standby V9.0.3 + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Programas bajo Licencia (Z125-3301-14). + +Nombre de Programa (Número de Programa): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Los términos estándar siguientes se aplican al uso por parte del Licenciatario del Programa. + +Derecho de uso limitado + +Tal como se estipula en el Acuerdo Internacional de Programas Bajo Licencia ("IPLA") y en la presente Información de Licencia, IBM otorga al Licenciatario un derecho limitado a utilizar el Programa. Este derecho está limitado a los niveles de Uso Autorizado, como una Value Unit de Procesador ("PVU"), una Value Unit de Recurso ("RVU"), una Value Unit ("VU") u otros niveles de uso estipulados que el Licenciatario hubiera pagado, tal como se indica en el Documento de Titularidad. El uso por parte del Licenciatario también se limitará a una máquina especificada o al uso como Programa de Soporte, o se someterá a otras restricciones. Puesto que el Licenciatario no ha pagado el valor económico íntegro del Programa, no se permitirá ningún otro uso sin abonar previamente los cargos adicionales correspondientes. Además, el Licenciatario no está autorizado a utilizar el Programa para prestar servicios de TI comerciales a terceros o para prestar servicios comerciales de alojamiento web u ofrecer el uso del Programa en régimen de multipropiedad, ni a otorgar licencias a terceros, alquilar o arrendar el Programa, salvo que así se estableciera explícitamente en los acuerdos aplicables en virtud de los cuales el Licenciatario obtiene las necesarias autorizaciones para utilizar el Programa. Podrán otorgarse al Licenciatario derechos adicionales previo pago de los cargos adicionales correspondientes o en virtud de unos términos distintos o complementarios. IBM se reserva el derecho a determinar si desea otorgar al Licenciatario dichos derechos adicionales. + +Especificaciones + +Encontrará las especificaciones del Programa en las cláusulas comunes Descripción e Información técnica incluidas en las Cartas de anuncio del Programa. + +Programas Empaquetados + +El Programa se licencia como un paquete de varios productos que incluye los Programas Empaquetados definidos a continuación. El Licenciatario está autorizado para instalar y utilizar dichos Programas Empaquetados dentro de los límites de los Documentos de Titularidad del Programa tal como se indica en este Documento de Información de Licencia. El licenciatario no está autorizado para transferir ni recomercializar los programas empaquetados separados del paquete de varios productos. Un programa empaquetado puede ir acompañado de términos de licencia y, dichos términos, de haberlos, se aplicarán al uso del programa empaquetado por parte del licenciatario. En el supuesto de que se produjera un conflicto, los términos de este documento de Licencia prevalecerán sobre los términos del Programa Empaquetado. Cuando el derecho del Licenciatario a utilizar el Programa expira o finaliza, el Licenciatario debe interrumpir el uso, destruir o devolver inmediatamente todas las copias de los Programas Empaquetados al distribuidor de quien adquirió el Programa. Si el Licenciatario ha descargado los Programas Empaquetados, el Licenciatario debe ponerse en contacto con el distribuidor de quien adquirió el Programa. Si el Licenciatario deseara adquirir una licencia para los Programas Empaquetados para cualquier uso más allá de los límites que se establecen más arriba, deberá ponerse en contacto con un Representante de Ventas de IBM o con el distribuidor que le proporcionó el Programa para obtener la licencia adecuada. + +Los siguientes Programas Empaquetados se licencian con el Programa: +IBM MQ Idle Standby V9.0.3 + +Componentes no utilizados para establecer las Autorizaciones Necesarias + +Cuando se determina el número de autorizaciones que requiere el Licenciatario para la instalación o uso del Programa, no se tiene en consideración la instalación o uso de los siguientes componentes del Programa. En otras palabras, el Licenciatario puede instalar y utilizar los siguientes componentes del Programa, de conformidad con los términos de la licencia, pero estos componentes no se utilizarán para determinar el número de autorizaciones requeridas para el Programa. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + +Las unidades de medida siguientes se aplican al uso por parte del Licenciatario del Programa. + +Value Unit de Procesador (PVU) + +Value Unit de Procesador (PVU) es una unidad de medida por la que se puede licenciar el Programa. El número de autorizaciones de PVU necesarios se basa en la tecnología de procesador (que se define en la Tabla de PVU por Proveedor de Procesador, Marca, Tipo y Número de Modelo en el sitio web http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) y en el número de procesadores disponibles para el Programa. IBM continúa definiendo un procesador, a efectos de las licencias basadas en PVU, como cada núcleo de procesador en un chip. Un chip de procesador de doble núcleo, por ejemplo, tiene dos núcleos de procesador. + +El Licenciatario puede desplegar el Programa mediante las licencias de Capacidad Completa o las licencias de Capacidad de Virtualización (Subcapacidad) de acuerdo con los Términos de Licencia de Subcapacidad de Passport Advantage (consulte la siguiente página web). Si utiliza las licencias de Capacidad Completa, el Licenciatario debe adquirir suficientes autorizaciones de PVU para todos los núcleos* de procesador activados en el entorno de hardware físico, disponibles para el Programa o gestionados por éste, salvo para los servidores de los que se ha eliminado el Programa permanentemente. Si utiliza las licencias de Capacidad de Virtualización, el Licenciatario debe adquirir suficientes autorizaciones para todos los núcleos de procesador activados disponibles para el Programa o gestionados por éste, tal y como se establece de acuerdo con las Reglas de Recuento de la Licencia de Capacidad de Virtualización que pueden consultarse en http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un núcleo de procesador activado es un núcleo de procesador disponible para el uso en un servidor físico o virtual, independientemente de si la capacidad del núcleo de procesador está o puede estar limitada mediante tecnologías de virtualización, mandatos de sistema operativo, configuraciones de BIOS o restricciones similares. + +Además de lo indicado, los términos siguientes se aplican al uso por parte del Licenciatario del Programa. + +Configuraciones de Modalidad de Espera Inactiva + +A efectos de esta cláusula, una configuración de "Modalidad de Espera Inactiva" es una configuración en la que se ha instalado una copia del Programa en un servidor que forma parte de una solución de alta disponibilidad y que es el servidor al que migrará el Programa en caso de que la copia del programa en el servidor activo deje de ser utilizable. Un servidor se considera "inactivo" si, hasta que se produzca la migración, se utiliza exclusivamente para acciones administrativas que ayudan en los escenarios de migración tras error. + +El Programa no deberá instalarse en un servidor de Modalidad de Espera Inactiva si no dispone de la licencia adecuada. + +Si el Programa se utiliza en una configuración de Modalidad de Espera Inactiva con la función de gestor de trabajos en espera en varias instancias, podrá alojarse (y estar iniciada) una copia del programa con fines de copia de seguridad en un servidor de Modalidad de Espera Inactiva, pero deberá permanecer "inactiva" y no podráutilizarse con fines productivos de ningún tipo, a no ser que el servidor activo realice una migración al servidor de Modalidad de Espera Inactiva, en cuyo caso se utilizará dicha copia con fines productivos durante la migración tras error. + +Si el Programa se utiliza en una configuración de Modalidad de Espera Inactiva con otros sistemas de Alta Disponibilidad, entonces podrá alojarse una copia del Programa con fines de copia de seguridad en un servidor de Modalidad de Espera Inactiva pero no podrá iniciarse (y, por tanto, no podrá utilizarse con fines productivos de ningún tipo), aunque se iniciará automáticamente mediante los componentes de Alta Disponibilidad si fallara el servidor activo, en cuyo caso se utilizará la copia de Modalidad de Espera Inactiva con fines productivos durante la migración tras error. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +IMPORTANTE: LEER DETENIDAMENTE + +A continuación se presentan dos acuerdos de licencia. + +1. Acuerdo Internacional de Licencia para la Evaluación de Programas de IBM +2. Acuerdo Internacional de Programas bajo Licencia de IBM + +Si el Licenciatario obtiene el Programa con finalidades de uso productivo (que no sean de evaluación, realización de pruebas, prueba "try or buy" o demostración): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el Acuerdo Internacional de Programas bajo Licencia de IBM, sin modificación. + +Si el Licenciatario obtiene el Programa con finalidades de evaluación, realización de pruebas, prueba "try or buy" o demostración (colectivamente, una "Evaluación"): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el (i) Acuerdo Internacional de Licencia para Evaluación de Programas de IBM (la "Licencia de Evaluación"), sin modificación; y (ii) el Acuerdo Internacional de Programas bajo Licencia de IBM (el "IPLA"), sin modificación. + +La Licencia de Evaluación se aplicará durante el plazo de la Evaluación del Licenciatario. + +El IPLA se aplicará automáticamente si el Licenciatario elige conservar el Programa después de la Evaluación (o obtener copias adicionales del Programa para su uso después de la Evaluación) suscribiendo un acuerdo de adquisición (por ejemplo, los acuerdos International Passport Advantage de IBM o Passport Advantage Express de IBM). + +La Licencia de Evaluación y el IPLA no se aplican simultáneamente, ni se modifican entre ellos y son independientes entre sí. + +A continuación se ofrece el texto completo de cada uno de estos acuerdos de licencia. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Licencia para la Evaluación de Programas (Z125-5543-05). + +Nombre de Programa (Número de Programa): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Los términos estándar siguientes se aplican al uso por parte del Licenciatario del Programa. + +Periodo de Evaluación + +El periodo de evaluación comenzará en la fecha en que el Licenciatario acepte los términos de este Acuerdo y finalizará después de 90 días. + +Programas Empaquetados + +El Programa se licencia como un paquete de varios productos que incluye los Programas Empaquetados definidos a continuación. El Licenciatario está autorizado para instalar y utilizar dichos Programas Empaquetados dentro de los límites de los Documentos de Titularidad del Programa tal como se indica en este Documento de Información de Licencia. El licenciatario no está autorizado para transferir ni recomercializar los programas empaquetados separados del paquete de varios productos. Un programa empaquetado puede ir acompañado de términos de licencia y, dichos términos, de haberlos, se aplicarán al uso del programa empaquetado por parte del licenciatario. En el supuesto de que se produjera un conflicto, los términos de este documento de Licencia prevalecerán sobre los términos del Programa Empaquetado. Cuando el derecho del Licenciatario a utilizar el Programa expira o finaliza, el Licenciatario debe interrumpir el uso, destruir o devolver inmediatamente todas las copias de los Programas Empaquetados al distribuidor de quien adquirió el Programa. Si el Licenciatario ha descargado los Programas Empaquetados, el Licenciatario debe ponerse en contacto con el distribuidor de quien adquirió el Programa. Si el Licenciatario deseara adquirir una licencia para los Programas Empaquetados para cualquier uso más allá de los límites que se establecen más arriba, deberá ponerse en contacto con un Representante de Ventas de IBM o con el distribuidor que le proporcionó el Programa para obtener la licencia adecuada. + +Los siguientes Programas Empaquetados se licencian con el Programa: +IBM MQ V9.0.3 + +Limitación para el Desarrollador + +Si el Programa se conoce como "Para Desarrolladores", el Programa sólo se puede desplegar como parte del desarrollo interno y de las pruebas unitarias del Licenciatario en una máquina de desarrollo. Una máquina de desarrollo es un entorno de escritorio virtual o físico que ejecuta un sistema operativo principal y el Programa, siendo ambos accesibles y utilizables sólo por un desarrollador especificado. El Licenciatario no está autorizado para utilizar el Programa para procesar cargas de trabajo de producción, simular cargas de trabajo de producción o realizar pruebas de la escalabilidad de cualquier código, aplicación o sistema. El Licenciatario no está autorizado para utilizar ninguna parte del Programa para ninguna otra finalidad sin adquirir las autorizaciones de producción correspondientes. + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Programas bajo Licencia (Z125-3301-14). + +Nombre de Programa (Número de Programa): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Los términos estándar siguientes se aplican al uso por parte del Licenciatario del Programa. + +Derecho de uso limitado + +Tal como se estipula en el Acuerdo Internacional de Programas Bajo Licencia ("IPLA") y en la presente Información de Licencia, IBM otorga al Licenciatario un derecho limitado a utilizar el Programa. Este derecho está limitado a los niveles de Uso Autorizado, como una Value Unit de Procesador ("PVU"), una Value Unit de Recurso ("RVU"), una Value Unit ("VU") u otros niveles de uso estipulados que el Licenciatario hubiera pagado, tal como se indica en el Documento de Titularidad. El uso por parte del Licenciatario también se limitará a una máquina especificada o al uso como Programa de Soporte, o se someterá a otras restricciones. Puesto que el Licenciatario no ha pagado el valor económico íntegro del Programa, no se permitirá ningún otro uso sin abonar previamente los cargos adicionales correspondientes. Además, el Licenciatario no está autorizado a utilizar el Programa para prestar servicios de TI comerciales a terceros o para prestar servicios comerciales de alojamiento web u ofrecer el uso del Programa en régimen de multipropiedad, ni a otorgar licencias a terceros, alquilar o arrendar el Programa, salvo que así se estableciera explícitamente en los acuerdos aplicables en virtud de los cuales el Licenciatario obtiene las necesarias autorizaciones para utilizar el Programa. Podrán otorgarse al Licenciatario derechos adicionales previo pago de los cargos adicionales correspondientes o en virtud de unos términos distintos o complementarios. IBM se reserva el derecho a determinar si desea otorgar al Licenciatario dichos derechos adicionales. + +Especificaciones + +Encontrará las especificaciones del Programa en las cláusulas comunes Descripción e Información técnica incluidas en las Cartas de anuncio del Programa. + +Programas Empaquetados + +El Programa se licencia como un paquete de varios productos que incluye los Programas Empaquetados definidos a continuación. El Licenciatario está autorizado para instalar y utilizar dichos Programas Empaquetados dentro de los límites de los Documentos de Titularidad del Programa tal como se indica en este Documento de Información de Licencia. El licenciatario no está autorizado para transferir ni recomercializar los programas empaquetados separados del paquete de varios productos. Un programa empaquetado puede ir acompañado de términos de licencia y, dichos términos, de haberlos, se aplicarán al uso del programa empaquetado por parte del licenciatario. En el supuesto de que se produjera un conflicto, los términos de este documento de Licencia prevalecerán sobre los términos del Programa Empaquetado. Cuando el derecho del Licenciatario a utilizar el Programa expira o finaliza, el Licenciatario debe interrumpir el uso, destruir o devolver inmediatamente todas las copias de los Programas Empaquetados al distribuidor de quien adquirió el Programa. Si el Licenciatario ha descargado los Programas Empaquetados, el Licenciatario debe ponerse en contacto con el distribuidor de quien adquirió el Programa. Si el Licenciatario deseara adquirir una licencia para los Programas Empaquetados para cualquier uso más allá de los límites que se establecen más arriba, deberá ponerse en contacto con un Representante de Ventas de IBM o con el distribuidor que le proporcionó el Programa para obtener la licencia adecuada. + +Los siguientes Programas Empaquetados se licencian con el Programa: +IBM MQ V9.0.3 + +Limitación para el Desarrollador + +Si el Programa se conoce como "Para Desarrolladores", el Programa sólo se puede desplegar como parte del desarrollo interno y de las pruebas unitarias del Licenciatario en una máquina de desarrollo. Una máquina de desarrollo es un entorno de escritorio virtual o físico que ejecuta un sistema operativo principal y el Programa, siendo ambos accesibles y utilizables sólo por un desarrollador especificado. El Licenciatario no está autorizado para utilizar el Programa para procesar cargas de trabajo de producción, simular cargas de trabajo de producción o realizar pruebas de la escalabilidad de cualquier código, aplicación o sistema. El Licenciatario no está autorizado para utilizar ninguna parte del Programa para ninguna otra finalidad sin adquirir las autorizaciones de producción correspondientes. + +Componentes no utilizados para establecer las Autorizaciones Necesarias + +Cuando se determina el número de autorizaciones que requiere el Licenciatario para la instalación o uso del Programa, no se tiene en consideración la instalación o uso de los siguientes componentes del Programa. En otras palabras, el Licenciatario puede instalar y utilizar los siguientes componentes del Programa, de conformidad con los términos de la licencia, pero estos componentes no se utilizarán para determinar el número de autorizaciones requeridas para el Programa. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + +Las unidades de medida siguientes se aplican al uso por parte del Licenciatario del Programa. + +Instalación + +Una Instalación es una unidad de medida por la que se puede licenciar el Programa. Una Instalación es una copia instalada del Programa en un disco físico o virtual que se pone a disposición para ejecutarse en un sistema. El Licenciatario debe obtener una autorización para cada Instalación del Programa. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +IMPORTANTE: LEER DETENIDAMENTE + +A continuación se presentan dos acuerdos de licencia. + +1. Acuerdo Internacional de Licencia para la Evaluación de Programas de IBM +2. Acuerdo Internacional de Programas bajo Licencia de IBM + +Si el Licenciatario obtiene el Programa con finalidades de uso productivo (que no sean de evaluación, realización de pruebas, prueba "try or buy" o demostración): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el Acuerdo Internacional de Programas bajo Licencia de IBM, sin modificación. + +Si el Licenciatario obtiene el Programa con finalidades de evaluación, realización de pruebas, prueba "try or buy" o demostración (colectivamente, una "Evaluación"): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el (i) Acuerdo Internacional de Licencia para Evaluación de Programas de IBM (la "Licencia de Evaluación"), sin modificación; y (ii) el Acuerdo Internacional de Programas bajo Licencia de IBM (el "IPLA"), sin modificación. + +La Licencia de Evaluación se aplicará durante el plazo de la Evaluación del Licenciatario. + +El IPLA se aplicará automáticamente si el Licenciatario elige conservar el Programa después de la Evaluación (o obtener copias adicionales del Programa para su uso después de la Evaluación) suscribiendo un acuerdo de adquisición (por ejemplo, los acuerdos International Passport Advantage de IBM o Passport Advantage Express de IBM). + +La Licencia de Evaluación y el IPLA no se aplican simultáneamente, ni se modifican entre ellos y son independientes entre sí. + +A continuación se ofrece el texto completo de cada uno de estos acuerdos de licencia. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Licencia para la Evaluación de Programas (Z125-5543-05). + +Nombre de Programa: IBM MQ Managed File Transfer Service V9.0.1 +Número de Programa: Evaluation + +Nombre de Programa: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Número de Programa: Evaluation + +Nombre de Programa: IBM MQ Managed File Transfer Agent V9.0.1 +Número de Programa: Evaluation + +Periodo de Evaluación + +El periodo de evaluación comenzará en la fecha en que el Licenciatario acepte los términos de este Acuerdo y finalizará después de 90 días. + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Programas bajo Licencia (Z125-3301-14). + +Nombre de Programa: IBM MQ Managed File Transfer Service V9.0.1 +Número de Programa: 5724-H72 + +Nombre de Programa: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Número de Programa: 5724-H72 + +Nombre de Programa: IBM MQ Managed File Transfer Agent V9.0.1 +Número de Programa: 5724-H72 + +Tal como se estipula en el Acuerdo Internacional de Programas Bajo Licencia ("IPLA") y en la presente Información de Licencia, IBM otorga al Licenciatario un derecho limitado a utilizar el Programa. Este derecho está limitado a los niveles de Uso Autorizado, como una Value Unit de Procesador ("PVU"), una Value Unit de Recurso ("RVU"), una Value Unit ("VU") u otros niveles de uso estipulados que el Licenciatario hubiera pagado, tal como se indica en el Documento de Titularidad. El uso por parte del Licenciatario también se limitará a una máquina especificada o al uso como Programa de Soporte, o se someterá a otras restricciones. Puesto que el Licenciatario no ha pagado el valor económico íntegro del Programa, no se permitirá ningún otro uso sin abonar previamente los cargos adicionales correspondientes. Además, el Licenciatario no está autorizado a utilizar el Programa para prestar servicios de TI comerciales a terceros o para prestar servicios comerciales de alojamiento web u ofrecer el uso del Programa en régimen de multipropiedad, ni a otorgar licencias a terceros, alquilar o arrendar el Programa, salvo que así se estableciera explícitamente en los acuerdos aplicables en virtud de los cuales el Licenciatario obtiene las necesarias autorizaciones para utilizar el Programa. Podrán otorgarse al Licenciatario derechos adicionales previo pago de los cargos adicionales correspondientes o en virtud de unos términos distintos o complementarios. IBM se reserva el derecho a determinar si desea otorgar al Licenciatario dichos derechos adicionales. + +Encontrará las especificaciones del Programa en las cláusulas comunes Descripción e Información técnica incluidas en las Cartas de anuncio del Programa. + +Redistribuibles + +Si el Programa incluye componentes que son Redistribuibles, se identificarán en el archivo REDIST que acompaña al Programa. Además de los derechos de licencia que se otorgan en el Acuerdo, el Licenciatario puede distribuir los Redistribuibles sujeto a los siguientes términos: +1) La redistribución debe ser sólo en formato de código objeto y debe cumplir con todas las directrices, instrucciones y especificaciones de la documentación o del archivo REDIST que acompaña al Programa; +2) Si la documentación que acompaña al Programa permite explícitamente al Licenciatario modificar los Redistribuibles, dichas modificaciones deben cumplir con todas las directrices, instrucciones y especificaciones de dicha documentación y estas modificaciones, si las hubiere, deben considerarse como Redistribuibles; +3) El Licenciatario puede distribuir los Redistribuibles únicamente como parte de la aplicación del Licenciatario que se desarrolló utilizando el Programa ("Aplicación del Licenciatario") y únicamente para ofrecer soporte a los clientes del Licenciatario en conexión con su uso de la Aplicación del Licenciatario. La Aplicación del Licenciatario debe representar un valor añadido significativo, de modo que los Redistribuibles no sean una motivación importante en la adquisición del producto software por parte de los usuarios finales; +4) Si los Redistribuibles incluyen un Java Runtime Environment, el Licenciatario debe incluir también otros Redistribuibles que no sean Java con la Aplicación del Licenciatario, a menos que la aplicación del Licenciatario se haya diseñado para ejecutarse sólo en dispositivos generales de sistemas (portátiles, sistemas de sobremesa y servidores, por ejemplo) y no en dispositivos portátiles u otros dispositivos generales (es decir, dispositivos que contienen un microprocesador pero que su finalidad principal no es el sistema informático); +5) El Licenciatario no puede eliminar ningún archivo de aviso o de copyright de los Redistribuibles; +6) El Licenciatario deberá eximir de cualquier responsabilidad a IBM, a sus proveedores y a sus distribuidores de y contra cualquier reclamación que surja por el uso o distribución de la Aplicación del Licenciatario; +7) El Licenciatario no puede utilizar el mismo nombre de vía de acceso que los archivos/módulos Redistribuibles originales; +8) El Licenciatario no puede utilizar los nombres ni las marcas registradas de IBM, de sus proveedores ni de sus distribuidores en relación con la comercialización de la Aplicación del Licenciatario sin el previo consentimiento por escrito de IBM o de dicho proveedor o distribuidor; +9) IBM, sus proveedores y sus distribuidores proporcionan los Redistribuibles y la documentación relacionada sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO INFRACCIÓN DE DERECHOS DE TERCEROS O LIBRE DE INTERFERENCIAS Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA; +10) El Licenciatario se responsabilizará de toda la asistencia técnica para la Aplicación del Licenciatario y de todas las modificaciones en los Redistribuibles; y +11) En el acuerdo de licencia de con el usuario final de la Aplicación del Licenciatario, el Licenciatario notificará al usuario final que los Redistribuibles o sus modificaciones no pueden i) utilizarse con ninguna otra finalidad que no sea habilitar la Aplicación del Licenciatario, ii) copiarse (excepto a efectos de copia de seguridad), iii) distribuirse ni transferirse sin la Aplicación del Licenciatario o iv) desensamblarse, descompilarse ni de otro modo traducirse, excepto aquello específicamente permitido por la correspondiente legislación sin que sea posible la renuncia por contrato. Además, el acuerdo de licencia del Licenciatario deberá proteger a IBM al igual, cómo mínimo, que los términos de este Acuerdo. + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + +Para los Componentes en Código Fuente y los Materiales de muestra que aparecen en la lista del archivo REDIST de un Programa, el Licenciatario puede redistribuir las versiones modificadas de dichos Componentes en Código Fuente o Materiales de Muestra que sean coherentes con los términos de la presente licencia y con las instrucciones del archivo REDIST. + +Instalación + +Una Instalación es una unidad de medida por la que se puede licenciar el Programa. Una Instalación es una copia instalada del Programa en un disco físico o virtual que se pone a disposición para ejecutarse en un sistema. El Licenciatario debe obtener una autorización para cada Instalación del Programa. + +Value Unit de Procesador (PVU) + +Value Unit de Procesador (PVU) es una unidad de medida por la que se puede licenciar el Programa. El número de autorizaciones de PVU necesarios se basa en la tecnología de procesador (que se define en la Tabla de PVU por Proveedor de Procesador, Marca, Tipo y Número de Modelo en el sitio web http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) y en el número de procesadores disponibles para el Programa. IBM continúa definiendo un procesador, a efectos de las licencias basadas en PVU, como cada núcleo de procesador en un chip. Un chip de procesador de doble núcleo, por ejemplo, tiene dos núcleos de procesador. + +El Licenciatario puede desplegar el Programa mediante las licencias de Capacidad Completa o las licencias de Capacidad de Virtualización (Subcapacidad) de acuerdo con los Términos de Licencia de Subcapacidad de Passport Advantage (consulte la siguiente página web). Si utiliza las licencias de Capacidad Completa, el Licenciatario debe adquirir suficientes autorizaciones de PVU para todos los núcleos* de procesador activados en el entorno de hardware físico, disponibles para el Programa o gestionados por éste, salvo para los servidores de los que se ha eliminado el Programa permanentemente. Si utiliza las licencias de Capacidad de Virtualización, el Licenciatario debe adquirir suficientes autorizaciones para todos los núcleos de procesador activados disponibles para el Programa o gestionados por éste, tal y como se establece de acuerdo con las Reglas de Recuento de la Licencia de Capacidad de Virtualización que pueden consultarse en http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un núcleo de procesador activado es un núcleo de procesador disponible para el uso en un servidor físico o virtual, independientemente de si la capacidad del núcleo de procesador está o puede estar limitada mediante tecnologías de virtualización, mandatos de sistema operativo, configuraciones de BIOS o restricciones similares. + +Términos Exclusivos del Programa + +Configuraciones de Modalidad de Espera Inactiva + +A efectos de esta cláusula, una configuración de "Modalidad de Espera Inactiva" es una configuración en la que se ha instalado una copia del Programa en un servidor que forma parte de una solución de alta disponibilidad y que es el servidor al que migrará el Programa en caso de que la copia del programa en el servidor activo deje de ser utilizable. Un servidor se considera "inactivo" si, hasta que se produzca la migración, se utiliza exclusivamente para acciones administrativas que ayudan en los escenarios de migración tras error. + +El Programa no deberá instalarse en un servidor de Modalidad de Espera Inactiva si no dispone de la licencia adecuada. + +Si el Programa se utiliza en una configuración de Modalidad de Espera Inactiva con la función de gestor de trabajos en espera en varias instancias, podrá alojarse (y estar iniciada) una copia del programa con fines de copia de seguridad en un servidor de Modalidad de Espera Inactiva, pero deberá permanecer "inactiva" y no podráutilizarse con fines productivos de ningún tipo, a no ser que el servidor activo realice una migración al servidor de Modalidad de Espera Inactiva, en cuyo caso se utilizará dicha copia con fines productivos durante la migración tras error. + +Si el Programa se utiliza en una configuración de Modalidad de Espera Inactiva con otros sistemas de Alta Disponibilidad, entonces podrá alojarse una copia del Programa con fines de copia de seguridad en un servidor de Modalidad de Espera Inactiva pero no podrá iniciarse (y, por tanto, no podrá utilizarse con fines productivos de ningún tipo), aunque se iniciará automáticamente mediante los componentes de Alta Disponibilidad si fallara el servidor activo, en cuyo caso se utilizará la copia de Modalidad de Espera Inactiva con fines productivos durante la migración tras error. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +IMPORTANTE: LEER DETENIDAMENTE + +A continuación se presentan dos acuerdos de licencia. + +1. Acuerdo Internacional de Licencia para la Evaluación de Programas de IBM +2. Acuerdo Internacional de Programas bajo Licencia de IBM + +Si el Licenciatario obtiene el Programa con finalidades de uso productivo (que no sean de evaluación, realización de pruebas, prueba "try or buy" o demostración): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el Acuerdo Internacional de Programas bajo Licencia de IBM, sin modificación. + +Si el Licenciatario obtiene el Programa con finalidades de evaluación, realización de pruebas, prueba "try or buy" o demostración (colectivamente, una "Evaluación"): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el (i) Acuerdo Internacional de Licencia para Evaluación de Programas de IBM (la "Licencia de Evaluación"), sin modificación; y (ii) el Acuerdo Internacional de Programas bajo Licencia de IBM (el "IPLA"), sin modificación. + +La Licencia de Evaluación se aplicará durante el plazo de la Evaluación del Licenciatario. + +El IPLA se aplicará automáticamente si el Licenciatario elige conservar el Programa después de la Evaluación (o obtener copias adicionales del Programa para su uso después de la Evaluación) suscribiendo un acuerdo de adquisición (por ejemplo, los acuerdos International Passport Advantage de IBM o Passport Advantage Express de IBM). + +La Licencia de Evaluación y el IPLA no se aplican simultáneamente, ni se modifican entre ellos y son independientes entre sí. + +A continuación se ofrece el texto completo de cada uno de estos acuerdos de licencia. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Licencia para la Evaluación de Programas (Z125-5543-05). + +Nombre de Programa: IBM MQ Advanced Message Security V9.0.1 +Número de Programa: Evaluation + +Nombre de Programa: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Número de Programa: Evaluation + +Nombre de Programa: IBM MQ Telemetry V9.0.1 +Número de Programa: Evaluation + +Periodo de Evaluación + +El periodo de evaluación comenzará en la fecha en que el Licenciatario acepte los términos de este Acuerdo y finalizará después de 90 días. + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + + + +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Programas bajo Licencia (Z125-3301-14). + +Nombre de Programa: IBM MQ Advanced Message Security V9.0.1 +Número de Programa: 5724-H72 + +Nombre de Programa: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Número de Programa: 5724-H72 + +Nombre de Programa: IBM MQ Telemetry V9.0.1 +Número de Programa: 5724-H72 + +Tal como se estipula en el Acuerdo Internacional de Programas Bajo Licencia ("IPLA") y en la presente Información de Licencia, IBM otorga al Licenciatario un derecho limitado a utilizar el Programa. Este derecho está limitado a los niveles de Uso Autorizado, como una Value Unit de Procesador ("PVU"), una Value Unit de Recurso ("RVU"), una Value Unit ("VU") u otros niveles de uso estipulados que el Licenciatario hubiera pagado, tal como se indica en el Documento de Titularidad. El uso por parte del Licenciatario también se limitará a una máquina especificada o al uso como Programa de Soporte, o se someterá a otras restricciones. Puesto que el Licenciatario no ha pagado el valor económico íntegro del Programa, no se permitirá ningún otro uso sin abonar previamente los cargos adicionales correspondientes. Además, el Licenciatario no está autorizado a utilizar el Programa para prestar servicios de TI comerciales a terceros o para prestar servicios comerciales de alojamiento web u ofrecer el uso del Programa en régimen de multipropiedad, ni a otorgar licencias a terceros, alquilar o arrendar el Programa, salvo que así se estableciera explícitamente en los acuerdos aplicables en virtud de los cuales el Licenciatario obtiene las necesarias autorizaciones para utilizar el Programa. Podrán otorgarse al Licenciatario derechos adicionales previo pago de los cargos adicionales correspondientes o en virtud de unos términos distintos o complementarios. IBM se reserva el derecho a determinar si desea otorgar al Licenciatario dichos derechos adicionales. + +Encontrará las especificaciones del Programa en las cláusulas comunes Descripción e Información técnica incluidas en las Cartas de anuncio del Programa. + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + +Instalación + +Una Instalación es una unidad de medida por la que se puede licenciar el Programa. Una Instalación es una copia instalada del Programa en un disco físico o virtual que se pone a disposición para ejecutarse en un sistema. El Licenciatario debe obtener una autorización para cada Instalación del Programa. + +Value Unit de Procesador (PVU) + +Value Unit de Procesador (PVU) es una unidad de medida por la que se puede licenciar el Programa. El número de autorizaciones de PVU necesarios se basa en la tecnología de procesador (que se define en la Tabla de PVU por Proveedor de Procesador, Marca, Tipo y Número de Modelo en el sitio web http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) y en el número de procesadores disponibles para el Programa. IBM continúa definiendo un procesador, a efectos de las licencias basadas en PVU, como cada núcleo de procesador en un chip. Un chip de procesador de doble núcleo, por ejemplo, tiene dos núcleos de procesador. + +El Licenciatario puede desplegar el Programa mediante las licencias de Capacidad Completa o las licencias de Capacidad de Virtualización (Subcapacidad) de acuerdo con los Términos de Licencia de Subcapacidad de Passport Advantage (consulte la siguiente página web). Si utiliza las licencias de Capacidad Completa, el Licenciatario debe adquirir suficientes autorizaciones de PVU para todos los núcleos* de procesador activados en el entorno de hardware físico, disponibles para el Programa o gestionados por éste, salvo para los servidores de los que se ha eliminado el Programa permanentemente. Si utiliza las licencias de Capacidad de Virtualización, el Licenciatario debe adquirir suficientes autorizaciones para todos los núcleos de procesador activados disponibles para el Programa o gestionados por éste, tal y como se establece de acuerdo con las Reglas de Recuento de la Licencia de Capacidad de Virtualización que pueden consultarse en http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un núcleo de procesador activado es un núcleo de procesador disponible para el uso en un servidor físico o virtual, independientemente de si la capacidad del núcleo de procesador está o puede estar limitada mediante tecnologías de virtualización, mandatos de sistema operativo, configuraciones de BIOS o restricciones similares. + +Términos Exclusivos del Programa + +Configuraciones de Modalidad de Espera Inactiva + +A efectos de esta cláusula, una configuración de "Modalidad de Espera Inactiva" es una configuración en la que se ha instalado una copia del Programa en un servidor que forma parte de una solución de alta disponibilidad y que es el servidor al que migrará el Programa en caso de que la copia del programa en el servidor activo deje de ser utilizable. Un servidor se considera "inactivo" si, hasta que se produzca la migración, se utiliza exclusivamente para acciones administrativas que ayudan en los escenarios de migración tras error. + +El Programa no deberá instalarse en un servidor de Modalidad de Espera Inactiva si no dispone de la licencia adecuada. + +Si el Programa se utiliza en una configuración de Modalidad de Espera Inactiva con la función de gestor de trabajos en espera en varias instancias, podrá alojarse (y estar iniciada) una copia del programa con fines de copia de seguridad en un servidor de Modalidad de Espera Inactiva, pero deberá permanecer "inactiva" y no podráutilizarse con fines productivos de ningún tipo, a no ser que el servidor activo realice una migración al servidor de Modalidad de Espera Inactiva, en cuyo caso se utilizará dicha copia con fines productivos durante la migración tras error. + +Si el Programa se utiliza en una configuración de Modalidad de Espera Inactiva con otros sistemas de Alta Disponibilidad, entonces podrá alojarse una copia del Programa con fines de copia de seguridad en un servidor de Modalidad de Espera Inactiva pero no podrá iniciarse (y, por tanto, no podrá utilizarse con fines productivos de ningún tipo), aunque se iniciará automáticamente mediante los componentes de Alta Disponibilidad si fallara el servidor activo, en cuyo caso se utilizará la copia de Modalidad de Espera Inactiva con fines productivos durante la migración tras error. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +IMPORTANTE: LEER DETENIDAMENTE + +A continuación se presentan dos acuerdos de licencia. + +1. Acuerdo Internacional de Licencia para la Evaluación de Programas de IBM +2. Acuerdo Internacional de Programas bajo Licencia de IBM + +Si el Licenciatario obtiene el Programa con finalidades de uso productivo (que no sean de evaluación, realización de pruebas, prueba "try or buy" o demostración): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el Acuerdo Internacional de Programas bajo Licencia de IBM, sin modificación. + +Si el Licenciatario obtiene el Programa con finalidades de evaluación, realización de pruebas, prueba "try or buy" o demostración (colectivamente, una "Evaluación"): Al pulsar el botón "Aceptar" a continuación, el Licenciatario acepta el (i) Acuerdo Internacional de Licencia para Evaluación de Programas de IBM (la "Licencia de Evaluación"), sin modificación; y (ii) el Acuerdo Internacional de Programas bajo Licencia de IBM (el "IPLA"), sin modificación. + +La Licencia de Evaluación se aplicará durante el plazo de la Evaluación del Licenciatario. + +El IPLA se aplicará automáticamente si el Licenciatario elige conservar el Programa después de la Evaluación (o obtener copias adicionales del Programa para su uso después de la Evaluación) suscribiendo un acuerdo de adquisición (por ejemplo, los acuerdos International Passport Advantage de IBM o Passport Advantage Express de IBM). + +La Licencia de Evaluación y el IPLA no se aplican simultáneamente, ni se modifican entre ellos y son independientes entre sí. + +A continuación se ofrece el texto completo de cada uno de estos acuerdos de licencia. + + +Acuerdo Internacional de Licencia para la Evaluación de Programas + +Parte 1 - Condiciones Generales + +EL LICENCIATARIO ACEPTA LOS TÉRMINOS DE ESTE ACUERDO MEDIANTE LA DESCARGA, INSTALACIÓN, COPIA, ACCESO, PULSANDO EL BOTÓN "ACEPTAR" O MEDIANTE CUALQUIER TIPO DE UTILIZACIÓN DEL PROGRAMA. SI EL CLIENTE ACEPTA ESTOS TÉRMINOS EN NOMBRE DEL LICENCIATARIO, EL CLIENTE DECLARA Y GARANTIZA QUE TIENE PLENA AUTORIDAD PARA OBLIGAR AL LICENCIATARIO A CUMPLIR DICHOS TÉRMINOS. SI NO ACEPTA ESTOS TÉRMINOS, + +* DESCARGAR, INSTALAR, COPIAR, ACCEDER, PULSAR EL BOTÓN "ACEPTAR" NI USAR EL PROGRAMA; Y DEBERÁ + +* DEVOLVER INMEDIATAMENTE LOS MEDIOS NO UTILIZADOS Y LA DOCUMENTACIÓN A LA ENTIDAD A LA CUAL LOS ADQUIRIÓ. SI EL PROGRAMA FUE DESCARGADO, DEBERÁN DESTRUIRSE TODAS LAS COPIAS DEL PROGRAMA. + +1. Definiciones + +"Uso Autorizado" - es el nivel especificado para el cual el Licenciatario está autorizado para ejecutar o hacer funcionar el Programa. Dicho nivel puede medirse por el número de usuarios, millones de unidades de servicio ("MSUs"), Unidades de Valor de Procesador (Processor Value Units o "PVUs"), u otro nivel de uso especificado por IBM. + +"IBM" - International Business Machines Corporation o una de sus subsidiarias. + +"Información sobre Licencia" ("LI") - es un documento que proporciona información y cualquier término adicional específico para un Programa. Puede encontrar la LI del Programa en el directorio del Programa, mediante el uso de un mandato del sistema, o como un folleto informativo incluido en el Programa. + +"Programa" - es lo siguiente, incluyendo el original y cualquier copia total o parcial de: 1) instrucciones y datos legibles por máquina, 2) componentes, archivos y módulos, 3) contenido audiovisual (como imágenes, texto, grabaciones o dibujos), y 4) materiales bajo licencia relacionados (como claves y documentación). + +2. Estructura del Acuerdo + +Este Acuerdo incluye la Parte 1 - Condiciones Generales, Parte 2 - Condiciones exclusivas para cada país (si las hubiera) y la Información sobre Licencia que constituyen el acuerdo completo entre el Licenciatario e IBM en relación al uso del Programa. Sustituye a cualquier comunicación oral o escrita anterior entre las partes en relación al uso del Programa por parte del Licenciatario. Los términos de la Parte 2 pueden sustituir o modificar los términos de la Parte 1. En el supuesto de cualquier conflicto, los términos de la LI prevalecen sobre los de ambas Partes. + +3. Licencia + +El Programa es propiedad de IBM o de un distribuidor de IBM y está sujeto a derechos de autor y se otorga bajo licencia, no se vende. + +IBM le concede al Licenciatario una licencia limitada, no exclusiva y no transferible para 1) descargar, instalar y utilizar el Programa durante el periodo de evaluación según los términos establecidos en el Uso Autorizado especificado en la LI, únicamente para evaluación interna, pruebas o demostraciones en la versión de prueba; 2) realizar e instalar un número de copias razonable que respalden dicho Uso Autorizado, y 3) realizar una copia de seguridad, todo ello siempre y cuando: + +a. el Licenciatario haya obtenido el Programa de forma legítima y cumpla los términos de este Acuerdo; + +b. la copia de seguridad no se ejecute a menos que el Programa del que se haya realizado la copia no pueda ejecutarse; + +c. el Licenciatario reproduzca todas las notificaciones de copyright y otros distintivos de titularidad en cada copia, o copia parcial del Programa; + +d. el Licenciatario mantenga un registro de todas las copias del Programa y se asegure de que cualquier persona que utilice el Programa (tanto si accede localmente o de forma remota) 1) lo haga únicamente en nombre del Licenciatario, y 2) cumpla los términos de este Acuerdo; + +e. el Licenciatario no 1) utilice el Programa para propósitos productivos ni lo utilice, copie, modifique o distribuya excepto del modo permitido expresamente en este Acuerdo; 2) desensamble, descompile, traduzca de otro modo o realice técnicas de ingeniería inversa en el Programa, excepto en la medida permitida expresamente por ley sin posibilidad de renuncia contractual; 3) utilice cualquiera de los componentes, archivos, módulos, contenido audiovisual del Programa, o materiales bajo licencia relacionados, de forma separada de dicho Programa; 4) sublicencie, alquile o arrende el Programa; o 5) utilice el Programa para proporcionar hosting comercial de aplicaciones; y + +f. si el Licenciatario obtiene este Programa como un Programa de Soporte, el Licenciatario utilizará el Programa únicamente como soporte del Programa Principal y sujeto a cualquier limitación de la licencia del Programa Principal, o, si el Licenciatario obtiene este Programa como Programa Principal, el Licenciatario utilizará todos los Programas de Soporte únicamente como soporte de este Programa y sujetos a cualquier limitación establecida en este Acuerdo. A los efectos de este apartado "f," un "Programa de Soporte" es un Programa que forma parte de otro Programa de IBM ("Programa Principal") y se identifica como Programa de Soporte en la LI del Programa Principal. (Para obtener una licencia independiente para un Programa de Soporte sin estas restricciones, el Licenciatario debe ponerse en contacto con la parte a la cual adquirió el Programa de Soporte). + +Esta licencia se aplica a cada copia del Programa que realice el Licenciatario. + +3.1 Mejoras, Correcciones y Parches + +En el caso en que el Licenciatario reciba una mejora, corrección o parche para un Programa, el Licenciatario acepta cualquier término adicional o diferente que sea aplicable a dicha mejora, corrección o parche que esté especificada en su LI. Si no se proporcionan términos adicionales o diferentes, la mejora, corrección o parche estará sujeto únicamente a este Acuerdo. Si el Programa se sustituye por una mejora, el Licenciatario acuerda interrumpir inmediatamente el uso del Programa sustituido. + +3.2 Vigencia y Terminación + +El periodo de evaluación empieza en la fecha en la cual el Licenciatario acepta los términos de este Acuerdo y finaliza en el primero de los siguientes casos: 1) al terminar la duración o al llegar a la fecha especificada por IBM en la Información sobre Licencia o en un documento transaccional o 2) en la fecha en la cual el Programa se inhabilite automáticamente. El Licenciatario destruirá el Programa y todas las copias realizadas dentro del plazo de los diez días posteriores a la finalización del período de evaluación. Si IBM especifica en la LI que el Licenciatario puede retener el Programa y el Licenciatario elige hacerlo, entonces el Programa quedará sujeto a un acuerdo de licencia diferente, que IBM proporcionará al Licenciatario. Además, se podrá aplicar un cargo. + +IBM puede terminar la licencia del Licenciatario en caso que éste incumpla los términos de este Acuerdo. En el caso en que cualquiera de las partes termine la licencia por cualquier causa, el Licenciatario acuerda interrumpir el uso inmediatamente y destruir todas sus copias del Programa. Cualquier término de este Acuerdo que por su carácter tenga una vigencia superior a la terminación del Acuerdo permanecerá en vigor hasta su cumplimiento y se aplicará a los sucesores y cesionarios respectivos de ambas partes. + +EL PROGRAMA PUEDE CONTENER UN DISPOSITIVO INHABILITADOR QUE IMPIDA QUE PUEDA SER UTILIZADO UNA VEZ QUE HAYA EXPIRADO EL PERÍODO DE EVALUACIÓN. EL LICENCIATARIO ACEPTA NO MODIFICAR EL DISPOSITIVO INHABILITADOR NI EL PROGRAMA. EL LICENCIATARIO DEBE TOMAR PRECAUCIONES PARA EVITAR LA PÉRDIDA DE DATOS QUE SE PODRÍA PRODUCIR CUANDO EL PROGRAMA YA NO PUEDA UTILIZARSE. + +4. Cargos + +No hay ningún cargo por utilizar el Programa durante el período de evaluación. + +5. Sin garantías + +SUJETO A CUALQUIER GARANTÍA ESTATUTARIA QUE NO PUDIERA EXCLUIRSE, IBM NO OFRECE NINGUNA GARANTÍA NI CONDICIÓN, NI EXPLÍCITA NI IMPLÍCITA, EN RELACIÓN CON EL PROGRAMA O EL SOPORTE, SI EXISTIERA, INCLUIDAS PERO SIN LIMITARSE A, LAS GARANTÍAS O CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN, CALIDAD SATISFACTORIA, IDONEIDAD PARA UNA FINALIDAD CONCRETA Y TITULARIDAD, Y CUALQUIER GARANTÍA O CONDICIÓN DE NO INFRACCIÓN DE LOS DERECHOS DE TERCEROS. + +LA EXCLUSIÓN DE GARANTÍAS EXPLÍCITAS O IMPLÍCITAS PUEDE NO ESTAR PERMITIDA POR ALGUNOS ESTADOS O JURISDICCIONES Y, POR TANTO, PUEDE QUE DICHA EXCLUSIÓN NO SEA APLICABLE AL LICENCIATARIO. EN TAL CASO, LA DURACIÓN DE DICHAS GARANTÍAS SE LIMITA AL PERIODO MÍNIMO QUE EXIJA LA LEGISLACIÓN. NO SE APLICARÁ NINGUNA GARANTÍA DESPUÉS DE ESE PERÍODO. ALGUNOS ESTADOS O JURISDICCIONES NO PERMITEN LIMITACIONES EN CUANTO A LA DURACIÓN DE UNA GARANTÍA IMPLÍCITA, POR LO PUEDE QUE LA LIMITACIÓN ANTERIOR NO SEA APLICABLE AL LICENCIATARIO. EL LICENCIATARIO PUEDE CONTAR CON OTROS DERECHOS QUE VARÍAN SEGÚN EL ESTADO O LA JURISDICCIÓN. + +LAS EXENCIONES DE RESPONSABILIDAD Y LAS EXCLUSIONES DE ESTA CLÁUSULA 5 TAMBIÉN SE APLICAN A CUALQUIER PROVEEDOR O DESARROLLADOR DE PROGRAMAS DE IBM. + +LOS FABRICANTES, LOS PROVEEDORES Y LOS EDITORES DE PROGRAMAS NO IBM PUEDEN OFRECER SUS PROPIAS GARANTÍAS. + +IBM NO OFRECE SOPORTE DE NINGÚN TIPO, SALVO QUE IBM ESPECIFIQUE LO CONTRARIO. EN ESE CASO, CUALQUIER SOPORTE QUE OFREZCA IBM ESTÁ SUJETO A LAS EXENCIONES DE RESPONSABILIDAD Y A LAS EXCLUSIONES DE ESTA CLÁUSULA 5. + +6. Datos y Bases de Datos del Licenciatario + +Para ayudar al Licenciatario a aislar el origen de un problema con el Programa, IBM podrá solicitar que el Licenciatario: 1) permita que IBM acceda de forma remota al sistema del Licenciatario, o 2) envíe información sobre el Licenciatario o datos del sistema a IBM. No obstante, IBM no está obligada a proporcionar dicha asistencia a menos que las Partes tengan un acuerdo, independiente y por escrito, mediante el cual IBM proporcione al Licenciatario dicho tipo de soporte que no está incluido en las obligaciones de IBM en este Acuerdo. En cualquier caso, IBM utilizará la información sobre errores y problemas para mejorar sus productos y servicios así como para prestar asistencia con su oferta de servicios de mantenimiento relacionados. Con esa finalidad, IBM podrá utilizar a subcontratistas y Empresas IBM (incluyendo en uno o más países distintos del país en el que se encuentra el Licenciatario) y el Licenciatario autoriza a IBM para ello. + +El Licenciatario permanecerá responsable de: 1) los datos y contenidos de cualquier base de datos que el Licenciatario ponga a disposición de IBM, 2) la selección y la implementación de los procedimientos y controles relacionados con el acceso, seguridad, encriptación, uso y transmisión de los datos (incluyendo cualquier dato personal que pueda identificarse), y 3) las copias de seguridad y la recuperación de cualquier base de datos y de cualquier dato almacenado. El Licenciatario no enviará a IBM ni le permitirá acceso a datos personales y permanecerá responsable por cualquier coste razonable u otras cantidades que IBM tenga que hacer frente en relación a cualquier información equivocadamente suministrada a IBM, o a la pérdida o revelación de la misma por IBM, incluso las originadas de reclamaciones de terceros. + +7. Limitación de Responsabilidad + +Las limitaciones y exclusiones de esta Cláusula 7 "Limitación de Responsabilidad" se aplicarán en la medida en que no las prohíba la legislación aplicable sin la posibilidad de una renuncia contractual. + +7.1 Aspectos por los que IBM Puede Ser Responsable + +Pueden surgir circunstancias en las cuales, debido a un incumplimiento de IBM de sus obligaciones contractuales u otra responsabilidad, el Licenciatario tuviera derecho a reclamar daños a IBM. Independientemente de las razones por las que el Licenciatario tenga derecho a reclamar daños a IBM (incluyendo un incumplimiento, negligencia, falsedad u otra reclamación contractual o extracontractual), la responsabilidad de IBM por todas las reclamaciones que surjan de, en relación con, cada Programa o que de otra manera surjan en relación con este Acuerdo estará limitada únicamente a: 1) los daños físicos a las personas (incluyendo la muerte) y daños a las propiedades, y 2)otros daños directos probados hasta 10.000 dólares americanos (o el equivalente en la moneda local). + +Este límite se aplica también a cualquier proveedor o desarrollador de Programas de IBM. Es la cantidad máxima por la que IBM y sus proveedores y desarrolladores de Programas serán responsables colectivamente. + +7.2 Aspectos por los que IBM No Es Responsable + +BAJO NINGUNA CIRCUNSTANCIA, IBM, SUS DESARROLLADORES DE PROGRAMAS O PROVEEDORES SERÁN RESPONSABLES DE LOS SIGUIENTES CASOS, INCLUSO EN EL CASO DE QUE HUBIERAN SIDO ADVERTIDOS DE TAL POSIBILIDAD: + +a. PÉRDIDAS DE, O DAÑOS A, LOS DATOS; + +b. DAÑOS ESPECIALES, INCIDENTALES, PUNITIVOS, INDIRECTOS O CUALQUIER DAÑO ECONÓMICO CONSECUENCIAL; O + +c. PÉRDIDAS DE BENEFICIOS, NEGOCIO, INGRESOS, PLUSVALÍAS O ECONOMÍAS PREVISTAS + +8. Verificación + +A los efectos de esta Cláusula 8 "Verificación", "Términos del Programa de Evaluación" significa: 1) este Acuerdo así como los Anexos aplicables y los documentos transaccionales proporcionados por IBM, y 2) las políticas de software de IBM que pueden encontrarse en el sitio web sobre Políticas de Software de IBM (www.ibm.com/softwarepolicies), incluyendo pero sin limitarse a las políticas relativas a las copias de seguridad, condiciones para los precios de subcapacidad y migración. + +Los derechos y obligaciones establecidos en esta Cláusula 8 permanecerán vigentes mientras el Licenciatario tenga una licencia en vigor para el Programa y durante los dos años siguientes. + +8.1 Proceso de Verificación + +El Licenciatario acuerda crear, conservar y proporcionar a IBM y a sus auditores registros escritos precisos, salidas de las herramientas del sistema y otra información sobre el sistema suficiente para verificar que el uso de todos los Programas por parte del Licenciatario se realiza conforme a los Términos del Programa de Evaluación, incluyendo, sin limitarse, todos los términos IBM sobre licencias y de calificación de precios aplicables. El Licenciatario es responsable de: 1) asegurar que no excede su Uso Autorizado, y 2) actuar de conformidad con los Términos del Programa de Evaluación. + +Previa notificación con antelación suficiente, IBM podrá verificar el cumplimiento por parte del Licenciatario de los Términos del Programa de Evaluación en todas las ubicaciones y para todos los entornos en los que el Licenciatario utilice, con cualquier finalidad, los Programas sujetos a los Términos del Programa de Evaluación. Dicha verificación se realizará de manera que se minimice la interferencia en la operativa de negocio del Licenciatario, en las instalaciones del Licenciatario, y durante su horario habitual de trabajo. IBM podrá utilizar a un auditor independiente para ayudar en la verificación, siempre que IBM tenga firmado, por escrito y con anterioridad, un acuerdo de confidencialidad con dicho auditor. + +8.2 Resolución + +IBM notificará al Licenciatario, por escrito, si conforme a dicha verificación el Licenciatario ha utilizado cualquier Programa sobrepasando su Uso Autorizado o no ha cumplido de otro modo con los Términos del Programa de Evaluación. El Licenciatario acuerda pagar, a la mayor brevedad posible, directamente a IBM los cargos que IBM especifique en una factura por: 1) cualquier uso en exceso, 2) el soporte por dicho uso en exceso durante el periodo que se ha realizado dicho uso en exceso o por dos años, lo que sea menor, y 3) cualquier cargo adicional y cualquier otra responsabilidad que el Cliente esté obligado a pagar como resultado de dicha verificación. + +9. Avisos de Terceros + +El Programa puede incluir código de terceros que IBM, no el tercero, otorga bajo licencia al Licenciatario en virtud de este Acuerdo. Los avisos, si los hubiera, para el código de terceros, ("Avisos de Terceros") se incluyen únicamente para información del Licenciatario. Estos avisos pueden encontrarse en los archivos de avisos del Programa. Se puede encontrar información sobre cómo obtener un código fuente para determinados códigos de terceros en los Avisos de Terceros. Si en los Avisos de Terceros, IBM identifica el código de terceros como "Código de Terceros Modificable", IBM autoriza al Licenciatario a: 1) modificar el Código de Terceros Modificable, y 2) realizar técnicas de ingeniería inversa a los módulos del Programa que se conectan con el Código de Terceros Modificable, siempre y cuando su única finalidad sea depurar las modificaciones realizadas por el Licenciatario a dicho código de terceros. Las obligaciones de servicio y soporte de IBM, si las hubiera, se aplican únicamente al Programa sin modificar. + +10. General + +a. Nada de lo dispuesto en este Acuerdo afectará a los derechos de los consumidores establecidos por ley que no puedan ser cancelados o limitados por contrato. + +b. Si cualquier disposición de este Acuerdo se declara inválida o no exigible, las disposiciones restantes de este Acuerdo permanecerán en vigor. + +c. El Licenciatario tiene prohibido exportar el Programa. + +d. El Licenciatario autoriza a International Business Machines Corporation y sus filiales (así como a sus sucesores y cesionarios, contratistas e IBM Business Partners) para almacenar y utilizar la información de contacto del Licenciatario, en cualquier lugar en el que desarrollen su actividad empresarial, en relación a los productos y servicios de IBM, o como consecuencia de la relación empresarial de IBM con el Licenciatario. + +e. Cada parte dará a la otra la oportunidad razonable de cumplir sus obligaciones en virtud del presente Acuerdo antes de reclamar a la otra por un incumplimiento de sus obligaciones contractuales. Las partes intentarán resolver de buena fe cualesquiera controversias, desacuerdos o reclamaciones relacionadas con este Acuerdo. + +f. Salvo que se establezca de otra manera en la legislación aplicable, sin posibilidad de renuncia contractual o limitación: 1) ninguna de las partes interpondrá acción legal alguna, independientemente de la forma, relacionada con este Acuerdo transcurridos más de dos años desde que se produjo su causa; y 2) transcurrido dicho periodo de tiempo, cualquier acción legal que surgiera en relación con el Acuerdo, así como todos los respectivos derechos relacionados con dicha acción, prescribirán. + +g. Ninguna de las partes será responsable del incumplimiento de cualquier obligación debido a causas fuera de control. + +h. Este Acuerdo no creará derecho alguno o causa de demanda para ningún tercero, ni IBM será responsable de las reclamaciones al Cliente de terceros, salvo por lo especificado en la Cláusula 7.1 "Aspectos por los que IBM Puede Ser Responsable" en relación con daños a las personas (incluyendo muerte) y a las propiedades de las que IBM sea legalmente responsable frente a dichos terceros. + +i. Al aceptar los términos de este Acuerdo, ambas partes acuerdan que no se están basando en ninguna manifestación que no esté incluida en este Acuerdo, incluyendo pero sin limitarse a cualquier manifestación en relación con: 1) el rendimiento o funcionamiento del Programa, distinto del expresamente garantizado en la Cláusula 5 (Sin garantías); 2) las experiencias o recomendaciones de otras partes; o 3) cualquier resultado o ahorro que el Licenciatario pudiera obtener. + +j. IBM tiene firmados acuerdos con determinadas organizaciones (denominadas "IBM Business Partners") para promocionar, comercializar y dar soporte a ciertos Programas. Los IBM Business Partners permanecerán independientes y son distintos de IBM. IBM no se hace responsable de las acciones o declaraciones de los IBM Business Partners ni de las obligaciones que éstos hayan contraído con el Licenciatario. + +k. Los términos de indemnización de propiedad intelectual y de licencia de otros acuerdos del Licenciatario con IBM (como las Condiciones Generales de IBM) no son de aplicación a las licencias de Programas concedidas en virtud de este Acuerdo. + +11. Ámbito Geográfico y Legislación Aplicable + +11.1 Legislación Aplicable + +Ambas partes aceptan la aplicación de las leyes del país en el que el Licenciatario haya obtenido la licencia del Programa a fin de regir, interpretar y asegurar el cumplimiento de los derechos, deberes y obligaciones del Licenciatario y de IBM, respectivamente, que puedan surgir en virtud de, o que estén de cualquier manera relacionados con este Acuerdo, a pesar de cualquier posible conflicto de ley. + +No se aplican los términos de la Convención de las Naciones Unidas sobre los Contratos de Compraventa Internacional de Bienes. + +11.2 Jurisdicción + +Todos los derechos, deberes y obligaciones están sujetos a los tribunales del país en el que el Licenciatario haya obtenido la licencia del Programa. + +Parte 2 - Condiciones Exclusivas para cada País + +Para las licencias otorgadas en los países especificados a continuación, los siguientes términos sustituyen o modifican los términos incluidos en la Parte 1. Todos los términos de la Parte 1 que no sean modificados por estas enmiendas permanecerán sin cambios y en vigor. Esta Parte 2 se estructura del siguiente modo: + +* Enmiendas para varios países de la Parte 1, Cláusula 11 "Legislación Aplicable y Jurisdicción"; + +* Enmiendas de otros términos del Acuerdo para los países de América y + +* Enmiendas de otros términos del Acuerdo para los países de Europa, Oriente Medio y África. + +Enmiendas para varios países de la Parte 1, Cláusula 11 "Legislación Aplicable y Jurisdicción"; + +11.1 Legislación Aplicable + +La frase "las leyes del país en el que el Licenciatario haya obtenido la licencia del Programa" en el primer párrafo de la Cláusula 11.1 "Legislación Aplicable" se sustituye por las frases siguientes en los países que figuran a continuación: + +AMÉRICA + +(1) En México: las leyes federales de la República de México; y + +(2) en Venezuela: las leyes de la República Bolivariana de Venezuela. + +11.2 Jurisdicción + +El siguiente párrafo pertenece al apartado de jurisdicción y sustituye a la Cláusula 11.2 "Jurisdicción" tal y como se aplica a los países identificados a continuación: + +Todos los derechos, deberes y obligaciones están sometidos a los tribunales del país en el que el Licenciatario haya obtenido la licencia del Programa excepto en los países identificados a continuación, en los que todas las disputas que surjan o se relacionen con este Acuerdo, incluyendo los procedimientos sumarios, se presentarán ante y se someterán a la jurisdicción exclusiva de los siguientes tribunales competentes: + +AMÉRICA + +(1) En Argentina: el Tribunal de Comercio Ordinario de la ciudad de Buenos Aires, + +(2) en Chile: el Juzgado de lo Civil de Santiago; + +(3) en Ecuador: los jueces de lo civil de Quito para los procesos sumarios o ejecutivos (según sea el caso); + +(4) en México: los tribunales ubicados en Ciudad de México, Distrito Federal; + +(5) en Perú: en Perú: los jueces y tribunales del distrito judicial de Lima, Cercado; + +(6) en Uruguay: los tribunales de la ciudad de Montevideo; + +(7) en Venezuela: los tribunales del área metropolitana de la ciudad de Caracas; y + +EUROPA, ORIENTE MEDIO Y ÁFRICA + +(8) en España: los tribunales de Madrid. + +APÉNDICES PARA PAÍSES AMERICANOS + +PERÚ + +7. Limitación de Responsabilidad + +Se añade lo siguiente al final de la Cláusula 7 "Limitación de Responsabilidad": + +Salvo que la legislación lo requiera expresamente sin posibilidad de renuncia contractual, el Licenciatario e IBM tienen la intención de que la limitación de responsabilidad expuesta en esta cláusula "Limitación de Responsabilidad" se aplique a los daños causados por todo tipo de reclamaciones y causa de acción. En el caso que un tribunal competente declare no exigible cualquier limitación o exclusión de responsabilidad de esta cláusula con respecto a una reclamación o derecho de iniciar acciones legales concreto, las partes tienen la intención de que se aplique a todas las demás reclamaciones y derechos de iniciar acciones legales hasta el grado máximo que permita la legislación aplicable. + +7.1 Aspectos por los que IBM Puede Ser Responsable + +Se añade lo siguiente al final de la Cláusula 7.1: + +De acuerdo con el Artículo 1328 del Código Civil Peruano, las limitaciones y exclusiones especificadas en esta cláusula no se aplicarán a los daños causados por la mala conducta deliberada de IBM ("dolo") o negligencia ("culpa inexcusable"). + +ENMIENDAS PARA LOS PAÍSES DE EUROPA, ORIENTE MEDIO, ÁFRICA (EMEA) + +ESTADOS MIEMBROS DE LA UNIÓN EUROPEA + +5. Sin garantías + +Se añade lo siguiente a la Cláusula 5 (Sin garantías): + +En la Unión Europea ("EU"), los consumidores tienen derechos legales en virtud de la legislación nacional aplicable que rija la venta de bienes de consumo. Tales derechos no se ven afectados por las disposiciones expuestas en esta Cláusula 5 (Sin garantías). + +ESTADOS MIEMBROS DE LA UE Y LOS PAÍSES IDENTIFICADOS A CONTINUACIÓN + +Cualquier país europeo que haya promulgado legislación local relativa a privacidad de datos o donde haya una legislación similar al modelo de la UE. + +10. General + +Lo siguiente sustituye a la Cláusula 10.d: + +(1) Definiciones - A los efectos de esta Cláusula 10.d, se aplicarán las siguientes definiciones adicionales: + +(a) Información Comercial de Contacto - se entenderá como los datos de contacto relacionados al negocio, revelados a IBM por el Licenciatario, incluyendo nombres, puestos de trabajo, dirección profesional, números de teléfono y direcciones de correo electrónico de los empleados y contratistas del Licenciatario. Para Austria, Italia y Suiza, la Información Comercial de Contacto incluye también información sobre el Licenciatario y sus contratistas como entidades legales (por ejemplo, datos sobre los ingresos del Licenciatario y otra información transaccional) + +(b) Personal Comercial de Contacto - se entenderá como los empleados y contratistas del Licenciatario a los cuales se proporciona la Información Comercial de Contacto. + +(c) Autoridad de Protección de Datos - se entenderá como la autoridad establecida por la Legislación de Protección de Datos y Comunicaciones Electrónicas en el país aplicable o, para los países que no formen parte de la UE, la autoridad responsable de supervisar la protección de los datos personales en dichos países o (para cualquiera de los anteriores) cualquier entidad debidamente designada para ello con posterioridad. + +(d) Legislación de Protección de Datos y Comunicaciones Electrónicas - (i) la legislación nacional específica relacionada a la Directiva 46/95/CE, del Parlamento Europeo y del Consejo, de 24 de octubre de 1995, relativa a la protección de las personas físicas en lo que respecta al tratamiento de datos personales y a la libre circulación de estos datos, y Directiva 58/2002/CE, del Parlamento Europeo y del Consejo, de 12 de julio de 2002, relativa al tratamiento de los datos personales y a la protección de la intimidad en el sector de las comunicaciones electrónicas (Directiva sobre la privacidad y las comunicaciones electrónicas); o (ii) para los países que no pertenezcan a la UE, significará la legislación específica relevante aplicable en el respectivo país relacionada con el uso y protección de datos de carácter personal y la intimidad en las comunicaciones electrónicas, incluyendo (para cualquiera de los anteriores) cualquier normativa posterior que las sustituya o modifique. + +(e) Grupo IBM - International Business Machines Corporation ubicada en Armonk, Nueva York, EE.UU., sus subsidiarias así como sus respectivos Business Partners y subcontratistas. + +(2) El Licenciatario autoriza a IBM para: + +(a) procesar y utilizar la Información Comercial de Contacto dentro del Grupo IBM en beneficio del Licenciatario, incluyendo la prestación de servicios de soporte y con el fin de gestionar la relación empresarial entre el Licenciatario y el Grupo IBM, incluyendo, sin limitarse, a contactar con el Personal Comercial de Contacto (por correo electrónico o por otra vía) así como el marketing de productos y servicios del Grupo IBM (la "Finalidad Específica"); y + +(b) revelar la Información Comercial de Contacto a otros miembros del Grupo IBM únicamente a los efectos de la Finalidad Específica. + +(3) IBM acuerda que toda Información Comercial de Contacto se procesará de conformidad con la Legislación de Protección de Datos y Comunicaciones Electrónicas y se utilizará únicamente para la Finalidad Específica. + +(4) El Licenciatario declara que, antes de proporcionar a IBM la Información Comercial de Contacto, ha obtenido o deberá obtener, cuando así lo requiera la Legislación de Protección de Datos y Comunicaciones Electrónicas, el consentimiento del Personal Comercial de Contacto, asimismo confirma que ha enviado o enviará las notificaciones pertinentes a dicho Personal Comercial de Contacto, de manera que el Grupo IBM esté facultado para procesar o usar la Información Comercial de Contacto para contactar con ellos para la Finalidad Especificada. + +(5) El Licenciatario consiente que IBM transfiera la Información Comercial de Contacto fuera del Espacio Económico Europeo, siempre y cuando dicha transferencia se realice bajo los términos contractuales aprobados por la Autoridad de Protección de Datos o por otra parte que la Legislación de Protección de Datos y Comunicaciones Electrónicas permita la transferencia. + +Z125-5543-05 (07/2011) + + +Acuerdo Internacional de Programas bajo Licencia + +Parte 1 - Condiciones Generales + +EL LICENCIATARIO ACEPTA LOS TÉRMINOS DE ESTE ACUERDO MEDIANTE LA DESCARGA, INSTALACIÓN, COPIA, ACCESO, PULSANDO EL BOTÓN "ACEPTAR" O MEDIANTE CUALQUIER TIPO DE UTILIZACIÓN DEL PROGRAMA. SI EL CLIENTE ACEPTA ESTOS TÉRMINOS EN NOMBRE DEL LICENCIATARIO, EL CLIENTE DECLARA Y GARANTIZA QUE TIENE PLENA AUTORIDAD PARA OBLIGAR AL LICENCIATARIO A CUMPLIR DICHOS TÉRMINOS. SI EL CLIENTE NO ACEPTA ESTOS TÉRMINOS, NO DEBERÁ + +* DESCARGAR, INSTALAR, COPIAR, ACCEDER, PULSAR EL BOTÓN "ACEPTAR" NI USAR EL PROGRAMA; Y DEBERÁ + +* DEVOLVER INMEDIATAMENTE LOS MEDIOS NO UTILIZADOS, LA DOCUMENTACIÓN Y EL DOCUMENTO DE TITULARIDAD A LA ENTIDAD A LA CUAL LOS ADQUIRIÓ PARA EL REEMBOLSO DEL IMPORTE PAGADO. SI EL PROGRAMA FUE DESCARGADO, DEBERÁN DESTRUIRSE TODAS LAS COPIAS DEL PROGRAMA. + +1. Definiciones + +"Uso Autorizado" - es el nivel especificado para el cual el Licenciatario está autorizado para ejecutar o hacer funcionar el Programa. Dicho nivel puede medirse por el número de usuarios, millones de unidades de servicio ("MSUs"), Unidades de Valor de Procesador (Processor Value Units o "PVUs"), u otro nivel de uso especificado por IBM. + +"IBM" - International Business Machines Corporation o una de sus subsidiarias. + +"Información sobre Licencia" ("LI") - es un documento que proporciona información y cualquier término adicional específico para un Programa. La LI del Programa está disponible en www.ibm.com/software/sla. También puede encontrar la LI en el directorio del Programa, mediante el uso de un mandato del sistema, o como un folleto informativo incluido en el Programa. + +"Programa" - es lo siguiente, incluyendo el original y cualquier copia total o parcial de: 1) instrucciones y datos legibles por máquina, 2) componentes, archivos y módulos, 3) contenido audiovisual (como imágenes, texto, grabaciones o dibujos), y 4) materiales bajo licencia relacionados (como claves y documentación). + +"Documento de Titularidad" ("PoE") - es la prueba del Uso Autorizado del Licenciatario. El PoE es también la prueba que tiene el Licenciatario de su elegibilidad para recibir garantías, futuras actualizaciones de precios, si las hubiera, y posibles oportunidades promocionales o especiales. Si IBM no proporcionara un PoE al Licenciatario, IBM puede aceptar como PoE el recibo original de venta u otro comprobante de venta de la parte (ya sea IBM o su distribuidor) a la cual el Licenciatario adquirió el Programa, siempre que se especifique el nombre del Programa y el Uso Autorizado obtenido. + +"Periodo de Garantía" - es un año, empezando en la fecha en la que se le concedió la licencia al Licenciatario original. + +2. Estructura del Acuerdo + +Este Acuerdo incluye la Parte 1 - Condiciones Generales, Parte 2 - Condiciones exclusivas para cada país (si las hubiera), la Información sobre Licencia y el Documento de titularidad que constituyen el acuerdo completo entre el Licenciatario e IBM en relación al uso del Programa. Sustituye a cualquier comunicación oral o escrita anterior entre las partes en relación al uso del Programa por parte del Licenciatario. Los términos de la Parte 2 pueden sustituir o modificar los términos de la Parte 1. En el supuesto de cualquier conflicto, los términos de la LI prevalecen sobre los de ambas Partes. + +3. Licencia + +El Programa es propiedad de IBM o de un distribuidor de IBM y está sujeto a derechos de autor y se otorga bajo licencia, no se vende. + +IBM le concede al Licenciatario una licencia no exclusiva para 1) utilizar el Programa según los términos establecidos en el Uso Autorizado especificado en el PoE, 2) realizar e instalar copias que respalden dicho Uso Autorizado, y 3) realizar una copia de seguridad, todo ello siempre y cuando: + +a. el Licenciatario haya obtenido el Programa de forma legítima y cumpla los términos de este Acuerdo; + +b. la copia de seguridad no se ejecute a menos que el Programa del que se haya realizado la copia no pueda ejecutarse; + +c. el Licenciatario reproduzca todas las notificaciones de copyright y otros distintivos de titularidad en cada copia, o copia parcial del Programa; + +d. el Licenciatario se asegure de que cualquier persona que utilice el Programa (tanto si accede localmente o de forma remota): 1) lo hace únicamente en nombre del Licenciatario, y 2) cumple los términos de este Acuerdo; + +e. el Licenciatario no podrá 1) utilizar, copiar, modificar ni distribuir el Programa excepto del modo permitido expresamente en este Acuerdo; 2) desensamblar, descompilar, traducir de otro modo o realizar técnicas de ingeniería inversa en el Programa, excepto en la medida permitida expresamente por ley sin posibilidad de renuncia contractual; 3) utilizar cualquiera de los componentes, archivos, módulos, contenido audiovisual del Programa, o materiales bajo licencia relacionados, de forma separada de dicho Programa; o 4) sublicenciar, alquilar o arriendar el Programa; y + +f. si el Licenciatario obtiene este Programa como un Programa de Soporte, el Licenciatario utilizará el Programa únicamente como soporte del Programa Principal y sujeto a cualquier limitación de la licencia del Programa Principal, o, si el Licenciatario obtiene este Programa como Programa Principal, el Licenciatario utilizará todos los Programas de Soporte únicamente como soporte de este Programa y sujetos a cualquier limitación establecida en este Acuerdo. A los efectos de este apartado "f," un "Programa de Soporte" es un Programa que forma parte de otro Programa de IBM ("Programa Principal") y se identifica como Programa de Soporte en la LI del Programa Principal. Para obtener una licencia independiente para un Programa de Soporte sin estas restricciones, el Licenciatario debe ponerse en contacto con la parte a la cual adquirió el Programa de Soporte. + +Esta licencia se aplica a cada copia del Programa que realice el Licenciatario. + +3.1 Actualizaciones, Mejoras, Correcciones y Parches + +3.1.1 Actualizaciones + +Si se sustituye el Programa por una actualización, la licencia del Programa sustituido se rescindirá inmediatamente. + +3.1.2 Mejoras, Correcciones y Parches + +En el caso en que el Licenciatario reciba una mejora, corrección o parche para un Programa, el Licenciatario acepta cualquier término adicional o diferente que sea aplicable a dicha mejora, corrección o parche que esté especificada en su LI. Si no se proporcionan términos adicionales o diferentes, la mejora, corrección o parche estará sujeto únicamente a este Acuerdo. Si el Programa se sustituye por una mejora, el Licenciatario acuerda interrumpir inmediatamente el uso del Programa sustituido. + +3.2 Licencias a Plazo Fijo + +Si IBM otorga el Programa bajo licencia durante un plazo determinado, la licencia del Licenciatario terminará al final del plazo determinado, a menos que el Licenciatario e IBM acuerden su renovación. + +3.3 Vigencia y Terminación + +Los términos de este Acuerdo son efectivos hasta su terminación. + +IBM puede terminar la licencia del Licenciatario en caso que éste incumpla los términos de este Acuerdo. + +En el caso en que cualquiera de las partes termine la licencia por cualquier causa, el Licenciatario acuerda interrumpir el uso inmediatamente y destruir todas sus copias del Programa. Cualquier término de este Acuerdo que por su carácter tenga una vigencia superior a la terminación del Acuerdo permanecerá en vigor hasta su cumplimiento y se aplicará a los sucesores y cesionarios respectivos de ambas partes. + +4. Cargos + +Los Cargos se basan en el Uso Autorizado obtenido, que se especifica en el PoE. IBM no concede créditos ni realiza reembolsos de los cargos ya vencidos o pagados, excepto si se especifica lo contrario en este Acuerdo. + +Si el Licenciatario desea aumentar su Uso Autorizado, el Licenciatario deberá notificarlo con antelación a IBM o a un distribuidor autorizado de IBM y pagar cualquier cargo aplicable. + +5. Impuestos + +Si cualquier autoridad impone una tasa, impuesto, gravamen o cargo al Programa, con exclusión de aquellos impuestos relativos al beneficio neto empresarial de IBM, el Licenciatario acuerda pagar las cantidades correspondientes a dichos conceptos, tal y como se especifique en una factura, o presentará la documentación justificante de estar exento de los mismos. El Licenciatario es responsable de cualquier impuesto que grave la propiedad del Programa desde la fecha en la que el Licenciatario obtuvo el Programa. Si cualquier autoridad impone una tasa, impuesto, gravamen o cargo por la importación o exportación, traspaso, acceso o uso del Programa fuera del país en el que se otorgó la licencia al Licenciatario, el Licenciatario acuerda ser responsable de, y pagar, cualquier cantidad impuesta. + +6. Garantía de Devolución + +Si el Licenciatario no está satisfecho con el Programa por cualquier motivo y es el Licenciatario original, el Licenciatario puede terminar la licencia y obtener el reembolso del importe que ha pagado por el Programa, siempre y cuando el Licenciatario devuelva el Programa y el PoE a la parte a la cual adquirió el Programa dentro del plazo de 30 días tras la fecha en la que se emitió el PoE para el Licenciatario. Si la licencia es de plazo fijo y está sujeta a renovación, el Licenciatario podrá obtener un reembolso únicamente si devuelve el Programa y su PoE dentro de los primeros 30 días del plazo inicial. Si el Licenciatario descargó el Programa, el Licenciatario deberá ponerse en contacto con la parte a la cual adquirió el Programa para recibir instrucciones sobre cómo obtener el reembolso. + +7. Transferencia del Programa + +El Licenciatario puede transferir el Programa y todos sus derechos de licencia y obligaciones a cualquier tercero únicamente si dicha parte acepta los términos de este Acuerdo. Si cualquiera de las partes termina la licencia por cualquier motivo, se prohíbe que el Licenciatario transfiera el Programa a un tercero. El Licenciatario no transferirá una parte: 1) del Programa, o 2) del Uso Autorizado del Programa. Cuando el Licenciatario transfiere el Programa, deberá transferir también una copia impresa de este Acuerdo, incluyendo la LI y el PoE. Después de la transferencia, se considera terminada la licencia del Licenciatario. + +8. Garantía y Exclusiones + +8.1 Limitación de Garantía + +IBM garantiza que cuando el Programa sea utilizado en el entorno operativo especificado cumplirá con sus especificaciones. Las especificaciones del Programa y la información sobre el entorno operativo especificado, pueden encontrarse en la documentación que se adjunta al Programa (como el archivo "léame") o en otra información publicada por IBM (como en una carta de anuncio). El Licenciatario acepta que dicha documentación y otros contenidos del Programa pueden proporcionarse sólo en inglés, a menos que la legislación local requiera lo contrario sin posibilidad de renuncia contractual o limitación. + +La garantía se aplica únicamente a la parte no modificada del Programa. IBM no garantiza el funcionamiento ininterrumpido o libre de errores de un Programa, ni que IBM corregirá todos los defectos del Programa. El Licenciatario es responsable de los resultados obtenidos a partir del uso del Programa. + +Durante el Periodo de Garantía, IBM proporciona acceso al Licenciatario a las bases de datos de IBM que contienen información sobre los defectos conocidos del Programa, las correcciones de dichos defectos, restricciones y circunvalaciones (bypass) sin cargo adicional. Para más información, consulte el manual de soporte de software de IBM (IBM Software Support Handbook) en www.ibm.com/software/support. + +Si el Programa no funciona conforme a lo garantizado durante el Periodo de Garantía y no puede resolverse el problema con la información disponible en las bases de datos de IBM, el Licenciatario podrá devolver el Programa y su PoE a la parte (ya sea IBM o su distribuidor) a la cual adquirió el Programa y recibir un reembolso del importe pagado por el Licenciatario. Tras la devolución del Programa, finaliza la licencia del Licenciatario. Si el Licenciatario descargó el Programa, el Licenciatario deberá ponerse en contacto con la parte a la cual adquirió el Programa para recibir instrucciones sobre cómo obtener el reembolso. + +8.2 Exclusiones + +ESTAS GARANTÍAS SON LAS GARANTÍAS EXCLUSIVAS DEL LICENCIATARIO Y SUSTITUYEN A CUALQUIER OTRA GARANTÍA O CONDICIÓN, EXPLÍCITA O IMPLÍCITA, INCLUIDAS PERO SIN LIMITARSE A, LAS GARANTÍAS O CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN, CALIDAD SATISFACTORIA, IDONEIDAD PARA UNA FINALIDAD CONCRETA, TITULARIDAD Y CUALQUIER GARANTÍA O CONDICIÓN DE NO INFRACCIÓN DE LOS DERECHOS DE TERCEROS. LA EXCLUSIÓN DE GARANTÍAS EXPLÍCITAS O IMPLÍCITAS PUEDE NO ESTAR PERMITIDA POR ALGUNOS ESTADOS O JURISDICCIONES Y, POR TANTO, PUEDE QUE DICHA EXCLUSIÓN NO SEA APLICABLE AL LICENCIATARIO. EN TAL CASO, LA DURACIÓN DE DICHAS GARANTÍAS SE LIMITA AL PERIODO DE GARANTÍA. NO SE APLICARÁN GARANTÍAS DESPUÉS DE DICHO PERIODO. ALGUNOS ESTADOS O JURISDICCIONES NO PERMITEN LIMITACIONES EN CUANTO A LA DURACIÓN DE UNA GARANTÍA IMPLÍCITA, POR LO PUEDE QUE LA LIMITACIÓN ANTERIOR NO SEA APLICABLE AL LICENCIATARIO. + +ESTAS GARANTÍAS OTORGAN UNOS DERECHOS LEGALES ESPECÍFICOS AL LICENCIATARIO. EL LICENCIATARIO PUEDE CONTAR ASIMISMO CON OTROS DERECHOS QUE VARÍAN SEGÚN EL ESTADO O LA JURISDICCIÓN. + +LAS GARANTÍAS INCLUIDAS EN LA CLÁUSULA 8 "GARANTÍA Y EXCLUSIONES" SON OTORGADAS EXCLUSIVAMENTE POR IBM. NO OBSTANTE, LAS EXENCIONES DE RESPONSABILIDAD EXPUESTAS EN ESTA CLÁUSULA 8.2 "EXCLUSIONES", SE APLICAN TAMBIÉN A LOS PROVEEDORES DE IBM DEL CÓDIGO DE TERCEROS. DICHOS PROVEEDORES PROPORCIONAN EL CÓDIGO SIN GARANTÍAS NI CONDICIONES DE NINGUNA CLASE. ESTE PÁRRAFO NO ANULA LAS OBLIGACIONES DE GARANTÍA DE IBM ESTABLECIDAS EN ESTE ACUERDO. + +9. Datos y Bases de Datos del Licenciatario + +Para ayudar al Licenciatario a aislar el origen de un problema con el Programa, IBM podrá solicitar que el Licenciatario: 1) permita que IBM acceda de forma remota al sistema del Licenciatario, o 2) envíe información sobre el Licenciatario o datos del sistema a IBM. No obstante, IBM no está obligada a proporcionar dicha asistencia a menos que las Partes tengan un acuerdo, independiente y por escrito, mediante el cual IBM proporcione al Licenciatario dicho tipo de soporte que no está incluido en las obligaciones de garantía de IBM en este Acuerdo. En cualquier caso, IBM utilizará la información sobre errores y problemas para mejorar sus productos y servicios así como para prestar asistencia con su oferta de servicios de mantenimiento relacionados. Con esa finalidad, IBM podrá utilizar a subcontratistas y Empresas IBM (incluyendo en uno o más países distintos del país en el que se encuentra el Licenciatario) y el Licenciatario autoriza a IBM para ello. + +El Licenciatario permanecerá responsable de: 1) los datos y contenidos de cualquier base de datos que el Licenciatario ponga a disposición de IBM, 2) la selección y la implementación de los procedimientos y controles relacionados con el acceso, seguridad, encriptación, uso y transmisión de los datos (incluyendo cualquier dato personal que pueda identificarse), y 3) las copias de seguridad y la recuperación de cualquier base de datos y de cualquier dato almacenado. El Licenciatario no enviará a IBM ni le permitirá acceso a datos personales y permanecerá responsable por cualquier coste razonable u otras cantidades que IBM tenga que hacer frente en relación a cualquier información equivocadamente suministrada a IBM, o a la pérdida o revelación de la misma por IBM, incluso las originadas de reclamaciones de terceros. + +10. Limitación de Responsabilidad + +Las limitaciones y exclusiones de esta Cláusula 10 "Limitación de Responsabilidad" se aplicarán en la medida en que no las prohíba la legislación aplicable sin la posibilidad de una renuncia contractual. + +10.1 Aspectos por los que IBM Puede Ser Responsable + +Pueden surgir circunstancias en las cuales, debido a un incumplimiento de IBM de sus obligaciones contractuales u otra responsabilidad, el Licenciatario tuviera derecho a reclamar daños a IBM. Independientemente de las razones por las que el Licenciatario tenga derecho a reclamar daños a IBM (incluyendo un incumplimiento, negligencia, falsedad u otra reclamación contractual o extracontractual), la responsabilidad de IBM por todas las reclamaciones que surjan de, en relación con, cada Programa o que de otra manera surjan en relación con este Acuerdo estará limitada únicamente a: 1) los daños físicos a las personas (incluyendo la muerte) y daños a las propiedades, y 2) otros daños directos probados hasta el importe de los cargos (si el Programa está sujeto a cargos de plazo determinado, hasta el importe de los cargos de doce meses) que ha pagado el Licenciatario por el Programa que sea objeto de la reclamación. + +Este límite se aplica también a cualquier proveedor o desarrollador de Programas de IBM. Es la cantidad máxima por la que IBM y sus proveedores y desarrolladores de Programas serán responsables colectivamente. + +10.2 Aspectos por los que IBM No Es Responsable + +BAJO NINGUNA CIRCUNSTANCIA, IBM, SUS PROVEEDORES O DESARROLLADORES DE PROGRAMAS SERÁN RESPONSABLES, AUNQUE HUBIESEN SIDO INFORMADOS DE SU POSIBILIDAD, DE: + +a. LA PÉRDIDA DE, O DAÑO A LOS DATOS; + +b. DAÑOS ESPECIALES, INCIDENTALES, PUNITIVOS, INDIRECTOS O CUALQUIER DAÑO ECONÓMICO CONSECUENCIAL; O + +c. PÉRDIDA DE BENEFICIOS, NEGOCIOS, INGRESOS, PLUSVALÍAS O ECONOMÍAS PREVISTAS. + +11. Verificación + +A los efectos de esta Cláusula 11 "Verificación", "Términos del Programa IPLA" significa: 1) este Acuerdo así como los Anexos aplicables y los documentos transaccionales proporcionados por IBM, y 2) las políticas de software de IBM que pueden encontrarse en el sitio web sobre Políticas de Software de IBM (www.ibm.com/softwarepolicies), incluyendo pero sin limitarse a las políticas relativas a las copias de seguridad, condiciones para los precios de subcapacidad y migración. + +Los derechos y obligaciones establecidos en esta Cláusula 11 permanecerán vigentes mientras el Licenciatario tenga una licencia en vigor para el Programa y durante los dos años siguientes. + +11.1 Proceso de Verificación + +El Licenciatario acuerda crear, conservar y proporcionar a IBM y a sus auditores registros escritos precisos, salidas de las herramientas del sistema y otra información sobre el sistema suficiente para verificar que el uso de todos los Programas por parte del Licenciatario se realiza conforme a los Términos del Programa IPLA, incluyendo, sin limitarse, todos los términos IBM sobre licencias y de calificación de precios aplicables. El Licenciatario es responsable de: 1) asegurar que no excede su Uso Autorizado, y 2) actuar de conformidad con los Términos del Programa IPLA. + +Previa notificación con antelación suficiente, IBM podrá verificar el cumplimiento por parte del Licenciatario de los Términos del Programa IPLA en todas las ubicaciones y para todos los entornos en los que el Licenciatario utilice, con cualquier finalidad, los Programas sujetos a los Términos del Programa IPLA. Dicha verificación se realizará de manera que se minimice la interferencia en la operativa de negocio del Licenciatario, en las instalaciones del Licenciatario, y durante su horario habitual de trabajo. IBM podrá utilizar a un auditor independiente para ayudar en la verificación, siempre que IBM tenga suscrito, por escrito y con anterioridad, un acuerdo de confidencialidad con dicho auditor. + +11.2 Resolución + +IBM notificará al Licenciatario, por escrito, si conforme a dicha verificación el Licenciatario ha utilizado cualquier Programa sobrepasando su Uso Autorizado o no ha cumplido de otro modo con los Términos del Programa IPLA. El Licenciatario acuerda pagar, a la mayor brevedad posible, directamente a IBM los cargos que IBM especifique en una factura por: 1) cualquier uso en exceso, 2) el soporte por dicho uso en exceso durante el periodo que se ha realizado dicho uso en exceso o por dos años, lo que sea menor, y 3) cualquier cargo adicional y cualquier otra responsabilidad que el Cliente esté obligado a pagar como resultado de dicha verificación. + +12. Avisos de Terceros + +El Programa puede incluir código de terceros que IBM, no el tercero, otorga bajo licencia al Licenciatario en virtud de este Acuerdo. Los avisos, si los hubiera, para el código de terceros, ("Avisos de Terceros") se incluyen únicamente para información del Licenciatario. Estos avisos pueden encontrarse en los archivos de avisos del Programa. Se puede encontrar información sobre cómo obtener un código fuente para determinados códigos de terceros en los Avisos de Terceros. Si en los Avisos de Terceros, IBM identifica el código de terceros como "Código de Terceros Modificable", IBM autoriza al Licenciatario a: 1) modificar el Código de Terceros Modificable, y 2) realizar técnicas de ingeniería inversa a los módulos del Programa que se conectan con el Código de Terceros Modificable, siempre y cuando su única finalidad sea depurar las modificaciones realizadas por el Licenciatario a dicho código de terceros. Las obligaciones de servicio y soporte de IBM, si las hubiera, se aplican únicamente al Programa sin modificar. + +13. General + +a. Nada de lo dispuesto en este Acuerdo afectará a los derechos de los consumidores establecidos por ley que no puedan ser cancelados o limitados por contrato. + +b. En relación con los Programas que IBM proporciona al Licenciatario de forma tangible, IBM cumple sus obligaciones de envío y entrega en el momento en que se entreguen dichos Programas al transportista designado por IBM, salvo que las partes lo acuerden, por escrito, de otro modo. + +c. Si cualquier disposición de este Acuerdo se declara inválida o no exigible, las disposiciones restantes de este Acuerdo permanecerán en vigor. + +d. El Licenciatario acuerda cumplir todas las leyes y normas aplicables sobre exportaciones e importaciones, incluyendo las normativas sobre sanciones y embargo de EE.UU. y las prohibiciones de exportaciones para ciertos usos o a determinados usuarios finales. + +e. El Licenciatario autoriza a International Business Machines Corporation y sus filiales (así como a sus sucesores y cesionarios, contratistas e IBM Business Partners) para almacenar y utilizar la información de contacto del Licenciatario, en cualquier lugar en el que desarrollen su actividad empresarial, en relación a los productos y servicios de IBM, o como consecuencia de la relación empresarial de IBM con el Licenciatario. + +f. Cada parte dará a la otra la oportunidad razonable de cumplir sus obligaciones en virtud del presente Acuerdo antes de reclamar a la otra por un incumplimiento de sus obligaciones contractuales. Las partes intentarán resolver de buena fe cualesquiera controversias, desacuerdos o reclamaciones relacionadas con este Acuerdo. + +g. Salvo que se establezca de otra manera en la legislación aplicable, sin posibilidad de renuncia contractual o limitación: 1) ninguna de las partes interpondrá acción legal alguna, independientemente de la forma, relacionada con este Acuerdo transcurridos más de dos años desde que se produjo su causa; y 2) transcurrido dicho periodo de tiempo, cualquier acción legal que surgiera en relación con el Acuerdo, así como todos los respectivos derechos relacionados con dicha acción, prescribirán. + +h. Ninguna de las partes será responsable del incumplimiento de cualquier obligación debido a causas fuera de control. + +i. Este Acuerdo no creará derecho alguno o causa de demanda para ningún tercero, ni IBM será responsable de las reclamaciones al Cliente de terceros, salvo por lo especificado en la Cláusula 10.1 "Aspectos por los que IBM Puede Ser Responsable" en relación con daños a las personas (incluyendo muerte) y a las propiedades de las que IBM sea legalmente responsable frente a dichos terceros. + +j. Al aceptar los términos de este Acuerdo, ambas partes acuerdan que no se están basando en ninguna manifestación que no esté incluida en este Acuerdo, incluyendo pero sin limitarse a cualquier manifestación en relación con: 1) el rendimiento o funcionamiento del Programa, distinto del expresamente garantizado en la Cláusula 8 "Garantía y Exclusiones" ; 2) las experiencias o recomendaciones de otras partes; o 3) cualquier resultado o ahorro que el Licenciatario pudiera obtener. + +k. IBM tiene firmados acuerdos con determinadas organizaciones (denominadas "IBM Business Partners") para promocionar, comercializar y dar soporte a ciertos Programas. Los IBM Business Partners permanecerán independientes y son distintos de IBM. IBM no se hace responsable de las acciones o declaraciones de los IBM Business Partners ni de las obligaciones que éstos hayan contraído con el Licenciatario. + +l. Los términos de indemnización de propiedad intelectual y de licencia de otros acuerdos del Licenciatario con IBM (como las Condiciones Generales de IBM) no son de aplicación a las licencias de Programas concedidas en virtud de este Acuerdo. + +14. Ámbito Geográfico y Legislación Aplicable + +14.1 Legislación Aplicable + +Ambas partes aceptan la aplicación de las leyes del país en el que el Licenciatario haya obtenido la licencia del Programa a fin de regir, interpretar y asegurar el cumplimiento de los derechos, deberes y obligaciones del Licenciatario y de IBM, respectivamente, que puedan surgir en virtud de, o que estén de cualquier manera relacionados con este Acuerdo, a pesar de cualquier posible conflicto de ley. + +No se aplican los términos de la Convención de las Naciones Unidas sobre los Contratos de Compraventa Internacional de Bienes. + +14.2 Jurisdicción + +Todos los derechos, deberes y obligaciones están sujetos a los tribunales del país en el que el Licenciatario haya obtenido la licencia del Programa. + +Parte 2 - Condiciones Exclusivas para cada País + +Para las licencias otorgadas en los países especificados a continuación, los siguientes términos sustituyen o modifican los términos incluidos en la Parte 1. Todos los términos de la Parte 1 que no sean modificados por estas enmiendas permanecerán sin cambios y en vigor. Esta Parte 2 se estructura del siguiente modo: + +* Enmiendas para varios países de la Parte 1, Cláusula 14 "Legislación Aplicable y Jurisdicción"; + +* Enmiendas de otros términos del Acuerdo para los países de América y + +* Enmiendas de otros términos del Acuerdo para los países de Europa, Oriente Medio y África. + +Enmiendas para varios países de la Parte 1, Cláusula 14 "Legislación Aplicable y Jurisdicción" + +14.1 Legislación Aplicable + +La frase "las leyes del país en el que el Licenciatario haya obtenido la licencia del Programa" en el primer párrafo de la Cláusula 14.1 "Legislación Aplicable" se sustituye por las frases siguientes en los países que figuran a continuación: + +AMÉRICA + +(1) en México: las leyes federales de la República de México; + +(2) en Venezuela: las leyes de la República Bolivariana de Venezuela; + +14.2 Jurisdicción + +El siguiente párrafo pertenece al apartado de jurisdicción y sustituye a la Cláusula 14.2 "Jurisdicción" tal y como se aplica a los países identificados a continuación: + +Todos los derechos, deberes y obligaciones están sometidos a los tribunales del país en el que el Licenciatario haya obtenido la licencia del Programa excepto en los países identificados a continuación, en los que todas las disputas que surjan o se relacionen con este Acuerdo, incluyendo los procedimientos sumarios, se presentarán ante y se someterán a la jurisdicción exclusiva de los siguientes tribunales competentes: + +AMÉRICA + +(1) en Argentina: el Tribunal de Comercio Ordinario de la ciudad de Buenos Aires, + +(2) en Chile: el Juzgado de lo Civil de Santiago; + +(3) en Ecuador: los jueces de lo civil de Quito para los procesos sumarios o ejecutivos (según sea el caso); + +(4) en México: los tribunales ubicados en Ciudad de México, Distrito Federal; + +(5) en Perú: los jueces y tribunales del distrito judicial de Lima, Cercado; + +(6) en Uruguay: los tribunales de la ciudad de Montevideo; y + +(7) en Venezuela: los tribunales del área metropolitana de la ciudad de Caracas. + +EUROPA, ORIENTE MEDIO Y ÁFRICA + +(8) en España: los tribunales de Madrid. + +ENMIENDAS PARA LOS PAÍSES DE AMÉRICA + +PERÚ + +10. Limitación de Responsabilidad + +Se añade lo siguiente al final de la Cláusula 10 "Limitación de Responsabilidad": + +Salvo que la legislación lo requiera expresamente sin posibilidad de renuncia contractual, el Licenciatario e IBM tienen la intención de que la limitación de responsabilidad expuesta en esta cláusula "Limitación de Responsabilidad" se aplique a los daños causados por todo tipo de reclamaciones y causa de acción. En el caso que un tribunal competente declare no exigible cualquier limitación o exclusión de responsabilidad de esta cláusula con respecto a una reclamación o derecho de iniciar acciones legales concreto, las partes tienen la intención de que se aplique a todas las demás reclamaciones y derechos de iniciar acciones legales hasta el grado máximo que permita la legislación aplicable. + +10.1 Aspectos por los que IBM Puede Ser Responsable + +Se añade lo siguiente al final de la Cláusula 10.1: + +De conformidad con el Artículo 1328 del Código Civil de Perú, las limitaciones y exclusiones especificadas en este apartado no se aplicarán a los daños causados por conducta indebida intencionada ("dolo") o negligencia grave ("culpa inexcusable") por parte de IBM. + +ENMIENDAS PARA LOS PAÍSES DE EUROPA, ORIENTE MEDIO, ÁFRICA (EMEA) + +ESTADOS MIEMBROS DE LA UNIÓN EUROPEA + +8. Garantía y Exclusiones + +Se añade lo siguiente a la Cláusula 8 "Garantía y Exclusiones": + +En la Unión Europea ("EU"), los consumidores tienen derechos legales en virtud de la legislación nacional aplicable que rija la venta de bienes de consumo. Tales derechos no se ven afectados por las disposiciones expuestas en esta Cláusula 8 "Garantía y Exclusiones". El ámbito territorial de la Garantía Limitada es todo el mundo. + +13. General + +Lo siguiente sustituye a la Cláusula 13.e: + +(1) Definiciones - A los efectos de esta Cláusula 13.e , se aplicarán las siguientes definiciones adicionales: + +(a) Información Comercial de Contacto - se entenderá como los datos de contacto relacionados al negocio, revelados a IBM por el Licenciatario, incluyendo nombres, puestos de trabajo, dirección profesional, números de teléfono y direcciones de correo electrónico de los empleados y contratistas del Licenciatario. Para Austria, Italia y Suiza, la Información Comercial de Contacto incluye también información sobre el Licenciatario y sus contratistas como entidades legales (por ejemplo, datos sobre los ingresos del Licenciatario y otra información transaccional) + +(b) Personal Comercial de Contacto - se entenderá como los empleados y contratistas del Licenciatario a los cuales se proporciona la Información Comercial de Contacto. + +(c) Autoridad de Protección de Datos - se entenderá como la autoridad establecida por la Legislación de Protección de Datos y Comunicaciones Electrónicas en el país aplicable o, para los países que no formen parte de la UE, la autoridad responsable de supervisar la protección de los datos personales en dichos países o (para cualquiera de los anteriores) cualquier entidad debidamente designada para ello con posterioridad. + +(d) Legislación de Protección de Datos y Comunicaciones Electrónicas - es: (i) la legislación nacional específica relacionada a la Directiva 46/95/CE, del Parlamento Europeo y del Consejo, de 24 de octubre de 1995, relativa a la protección de las personas físicas en lo que respecta al tratamiento de datos personales y a la libre circulación de estos datos, y Directiva 58/2002/CE, del Parlamento Europeo y del Consejo, de 12 de julio de 2002, relativa al tratamiento de los datos personales y a la protección de la intimidad en el sector de las comunicaciones electrónicas (Directiva sobre la privacidad y las comunicaciones electrónicas); o (ii) para los países que no pertenezcan a la UE, significará la legislación específica relevante aplicable en el respectivo país relacionada con el uso y protección de datos de carácter personal y la intimidad en las comunicaciones electrónicas, incluyendo (para cualquiera de los anteriores) cualquier normativa posterior que las sustituya o modifique. + +(e) Grupo IBM - International Business Machines Corporation, ubicada en Armonk, Nueva York, EE.UU., sus subsidiarias así como sus respectivos Business Partners y subcontratistas. + +(2) El Licenciatario autoriza a IBM para: + +(a) procesar y utilizar la Información Comercial de Contacto dentro del Grupo IBM en beneficio del Licenciatario, incluyendo la prestación de servicios de soporte y con el fin de gestionar la relación empresarial entre el Licenciatario y el Grupo IBM, incluyendo, sin limitarse, a contactar con el Personal Comercial de Contacto (por correo electrónico o por otra vía) así como el marketing de productos y servicios del Grupo IBM (la "Finalidad Específica"); y + +(b) revelar la Información Comercial de Contacto a otros miembros del Grupo IBM únicamente a los efectos de la Finalidad Específica. + +(3) IBM acuerda que toda Información Comercial de Contacto se procesará de conformidad con la Legislación de Protección de Datos y Comunicaciones Electrónicas y se utilizará únicamente para la Finalidad Específica. + +(4) El Licenciatario declara que, antes de proporcionar a IBM la Información Comercial de Contacto, ha obtenido o deberá obtener, cuando así lo requiera la Legislación de Protección de Datos y Comunicaciones Electrónicas, el consentimiento del Personal Comercial de Contacto, asimismo confirma que ha enviado o enviará las notificaciones pertinentes a dicho Personal Comercial de Contacto, de manera que el Grupo IBM esté facultado para procesar o usar la Información Comercial de Contacto para contactar con ellos para la Finalidad Especificada. + +(5) El Licenciatario consiente que IBM transfiera la Información Comercial de Contacto fuera del Espacio Económico Europeo, siempre y cuando dicha transferencia se realice bajo los términos contractuales aprobados por la Autoridad de Protección de Datos o por otra parte que la Legislación de Protección de Datos y Comunicaciones Electrónicas permita la transferencia. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_fr b/charts/mq-advancedserver/LICENSE_locale/LICENSE_fr new file mode 100644 index 0000000..f237dbe --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_fr @@ -0,0 +1,1369 @@ +AVIS + +Ce document inclut ci-dessous des documents Informations sur la Licence pour différents Logiciels. Chaque document Informations sur la Licence identifie le ou les Logiciels auxquels il s'applique. Seuls les documents Informations sur la Licence correspondant au(x) Logiciel(s) pour lesquels le Détenteur de la Licence a fait l'acquisition d'Autorisations d'Utilisation s'appliquent. + + +============================================== + + +IMPORTANT : A LIRE ATTENTIVEMENT + +Deux contrats de licence sont présentés ci-après. + +1. Conditions Internationales d'Evaluation des Logiciels IBM +2. Conditions Internationales d'Utilisation de Logiciel IBM + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'utilisation en production (c'est-à-dire à des fins autres que l'évaluation, le test, l'essai avant acquisition ou la démonstration) : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte les Conditions Internationales d'Utilisation de Logiciel IBM, sans modification. + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'évaluation, de test, d'essai avant acquisition ou de démonstration (collectivement, aux fins "d'Evaluation") : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte à la fois (i) les Conditions Internationales d'Evaluation des Logiciels IBM (la "Licence d'Evaluation"), sans modification ; et (ii) les Conditions Internationales d'Utilisation de Logiciel IBM ("IPLA"), sans modification. + +La Licence d'Evaluation s'appliquera jusqu'au terme de l'Evaluation du Détenteur de la licence. + +L'IPLA s'appliquera automatiquement si le Détenteur de la licence choisit de conserver le Logiciel à la fin de la période d'Evaluation (ou s'il obtient des exemplaires supplémentaires du Logiciel en vue de leur utilisation après la période d'Evaluation) en concluant un contrat avec le service Achats (par exemple, le contrat IBM International Passport Advantage ou IBM Passport Advantage Express). + +La Licence d'Evaluation et l'IPLA ne sont pas en vigueur simultanément, aucun des deux ne modifie l'autre et ils sont indépendants l'un de l'autre. + +L'intégralité du texte de ces deux contrats de licence est indiquée ci-dessous. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Evaluation des Logiciels (Z125-5543-05) s'applique. + +Nom du Logiciel (Référence du Logiciel) : +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Les dispositions suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Période d'évaluation + +La période d'évaluation prend effet le jour où le Détenteur de la Licence accepte les dispositions du présent Contrat et prend fin après 90 jours. + +Logiciels Auxiliaires + +Le Logiciel est concédé sous licence en tant que module multi-produit et inclut les Logiciels Auxiliaires répertoriés ci-dessous. Le Détenteur de la Licence est autorisé à installer et à utiliser lesdits Logiciels Auxiliaires uniquement dans le cadre de son utilisation du Logiciel Principal au titre du présent Contrat et dans les limites de l'Autorisation d'Utilisation du Logiciel (sauf si le présent document Informations sur la Licence octroie des droits supplémentaires au Détenteur de la Licence). L'expression "dans le cadre de son utilisation" inclut uniquement les tâches liées directement ou nécessaires à l'utilisation autorisée du Logiciel Principal ou d'un Logiciel Auxiliaire. Le Détenteur de la Licence n'est pas autorisé à utiliser les Logiciels Auxiliaires à toute autre fin. Le Détenteur de la Licence n'est pas autorisé à transférer ni à commercialiser les Logiciels Auxiliaires séparément du Logiciel Principal. Un Logiciel Auxiliaire peut inclure des dispositions de licence, et le cas échéant, celles-ci s'appliquent à l'utilisation de ce Logiciel Auxiliaire par le Détenteur de la Licence. En cas de contradiction entre les dispositions, celles du présent document Informations sur la Licence prévalent sur celles du Logiciel Auxiliaire. Lorsque le droit d'utilisation du Logiciel par le Détenteur de la Licence arrive à expiration ou est résilié, le Détenteur de la Licence doit cesser d'utiliser et détruire ou renvoyer rapidement tous les exemplaires des Logiciels Auxiliaires au tiers auprès de qui il a acquis le Logiciel. Si le Détenteur de la Licence a téléchargé les Logiciels Auxiliaires, il doit contacter le tiers auprès de qui il a acquis le Logiciel. Pour toute utilisation des Logiciels Auxiliaires non autorisée par le présent Contrat, le Détenteur de la Licence doit prendre contact avec un Ingénieur Commercial IBM ou avec le tiers auprès de qui il a acquis le Logiciel pour acquérir la licence correspondante. + +Les Logiciels Auxiliaires suivants sont concédés sous licence avec le Logiciel : +IBM WebSphere Application Server Liberty V17.0 + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Utilisation de Logiciel (Z125-3301-14) s'applique. + +Nom du Logiciel (Référence du Logiciel) : +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Les dispositions suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Autorisation d'Utilisation Restreinte + +Tel que décrit dans les Conditions Internationales d'Utilisation de Logiciel ("IPLA") et dans le présent document Informations sur la Licence, IBM concède au Détenteur de la Licence un droit limité pour utiliser le Logiciel. Ce droit est limité au niveau d'Utilisation Autorisée, telle qu'une Unité de Valeur par Coeur Processeur ("PVU"), une Unité de Valeur Ressource ("RVU"), une Unité de Valeur ("VU") ou tout autre niveau d'utilisation spécifié, payé par le Détenteur de la Licence comme en témoigne l'Autorisation d'Utilisation. L'utilisation par le Détenteur de la Licence peut également être limitée à une machine spécifiée, ou à une utilisation en tant que Logiciel Auxiliaire, ou être soumise à d'autres restrictions. Si que le Détenteur de la Licence n'a pas payé la totalité de la valeur économique du Logiciel, aucune autre utilisation n'est autorisé sans le paiement de frais supplémentaires. En outre, le Détenteur de la Licence n'est pas autorisé à utiliser le Logiciel pour fournir des services informatiques commerciaux à une tierce partie, pour fournir un hébergement ou un partage de temps commercial, ou pour accorder des sous-licences pour le Logiciel ni pour le louer, sauf indication contraire expresse dans les contrats applicables au titre desquels le Détenteur de la Licence a obtenu les Autorisations d'Utilisation du Logiciel. Des droits supplémentaires pourront être concédés au Détenteur de la Licence sous réserve du paiement de frais supplémentaires ou sous des conditions différentes ou supplémentaires. Ces droits supplémentaires seront concédés au Détenteur de la Licence à la seule discrétion d'IBM. + +Spécifications + +Les spécifications de ce Logiciel se trouvent dans les sections collectives "Description" et "Technical Information" des Lettres d'annonce dudit Logiciel. + +Logiciels Auxiliaires + +Le Logiciel est concédé sous licence en tant que module multi-produit et inclut les Logiciels Auxiliaires répertoriés ci-dessous. Le Détenteur de la Licence est autorisé à installer et à utiliser lesdits Logiciels Auxiliaires uniquement dans le cadre de son utilisation du Logiciel Principal au titre du présent Contrat et dans les limites de l'Autorisation d'Utilisation du Logiciel (sauf si le présent document Informations sur la Licence octroie des droits supplémentaires au Détenteur de la Licence). L'expression "dans le cadre de son utilisation" inclut uniquement les tâches liées directement ou nécessaires à l'utilisation autorisée du Logiciel Principal ou d'un Logiciel Auxiliaire. Le Détenteur de la Licence n'est pas autorisé à utiliser les Logiciels Auxiliaires à toute autre fin. Le Détenteur de la Licence n'est pas autorisé à transférer ni à commercialiser les Logiciels Auxiliaires séparément du Logiciel Principal. Un Logiciel Auxiliaire peut inclure des dispositions de licence, et le cas échéant, celles-ci s'appliquent à l'utilisation de ce Logiciel Auxiliaire par le Détenteur de la Licence. En cas de contradiction entre les dispositions, celles du présent document Informations sur la Licence prévalent sur celles du Logiciel Auxiliaire. Lorsque le droit d'utilisation du Logiciel par le Détenteur de la Licence arrive à expiration ou est résilié, le Détenteur de la Licence doit cesser d'utiliser et détruire ou renvoyer rapidement tous les exemplaires des Logiciels Auxiliaires au tiers auprès de qui il a acquis le Logiciel. Si le Détenteur de la Licence a téléchargé les Logiciels Auxiliaires, il doit contacter le tiers auprès de qui il a acquis le Logiciel. Pour toute utilisation des Logiciels Auxiliaires non autorisée par le présent Contrat, le Détenteur de la Licence doit prendre contact avec un Ingénieur Commercial IBM ou avec le tiers auprès de qui il a acquis le Logiciel pour acquérir la licence correspondante. + +Les Logiciels Auxiliaires suivants sont concédés sous licence avec le Logiciel : +IBM WebSphere Application Server Liberty V17.0 + +Composants non pris en compte pour établir les Autorisations d'Utilisation requises + +Pour définir le nombre d'Autorisations d'Utilisation requis pour l'installation ou l'utilisation du Logiciel par le Détenteur de la Licence, les composants du Logiciel suivants ne sont pas pris en compte. En d'autres termes, le Détenteur de la Licence peut installer et utiliser les composants du Logiciel suivants, conformément aux dispositions de la Licence, mais lesdits composants ne seront pas pris en compte pour déterminer le nombre d'autorisations d'utilisation requises pour le Logiciel. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Logiciels Redistribuables + +Si le Logiciel comprend des Logiciels Redistribuables, ceux-ci seront identifiés dans le fichier REDIST fourni avec le Logiciel. En plus des droits de licence concédés dans le présent Contrat, le Détenteur de la Licence est autorisé à distribuer les Logiciels Redistribuables conformément aux dispositions suivantes : +1) La redistribution doit être effectuée sous forme de code objet uniquement et doit être conforme à l'ensemble des instructions, directives et spécifications contenues dans la documentation du Logiciel ou dans le fichier REDIST fourni avec ; +2) Lorsque ladite documentation autorise le Détenteur de la Licence expressément à modifier les Logiciels Redistribuables, ladite modification doit être conforme à l'ensemble des instructions, directives et spécifications contenues dans la documentation, et le cas échéant, les logiciels modifiés restent des Logiciels Redistribuables ; +3) Les Logiciels Redistribuables peuvent être distribués uniquement dans le cadre de l'application développée par le Détenteur de la Licence à l'aide du Logiciel (son "Application") et de la prise en charge de ses clients dans le cadre de leur utilisation de son Application. L'Application du Détenteur de la Licence doit proposer une valeur ajoutée significative, de sorte que la distribution des Logiciels Redistribuables, dans le cadre de l'acquisition de l'Application du Détenteur de la Licence, ne constitue pas l'argument d'achat principal des utilisateurs finaux ; +4) Dans le cas où les Logiciels Redistribuables contiennent Java Runtime Environment, le Détenteur de la Licence doit inclure également des Logiciels Redistribuables non-Java équivalents avec son Application, sauf si son Application est conçue pour être exécutée uniquement sur des systèmes informatiques d'usage courant (par exemple des ordinateurs portables, des ordinateurs de bureau ou des serveurs) et non pas sur des unités mobiles (par exemple, les unités dotées d'un microprocesseur mais dont la fonction principale n'est pas le calcul) ; +5) Le Détenteur de la Licence n'est pas autorisé à retirer les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Logiciels Redistribuables ; +6) Le Détenteur de la Licence s'engage à protéger IBM, ses fournisseurs et ses distributeurs contre toute réclamation résultant de l'utilisation ou de la distribution de l'Application du Détenteur de la Licence ; +7) Le Détenteur de la Licence ne peut pas utiliser le même nom de chemin d'accès que celui des fichiers et/ou modules d'origine des Logiciels Redistribuables ; +8) Le Détenteur de la Licence n'est pas autorisé à utiliser les noms ou les marques d'IBM ou de ses fournisseurs ou distributeurs dans le cadre de la commercialisation de son Application sans autorisation écrite préalable de leur part ; +9) IBM, ses fournisseurs et ses distributeurs fournissent lesdits Logiciels Redistribuables ainsi que leur documentation sans obligation de support. Ces éléments sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE ; +10) Il est de la responsabilité du Détenteur de la Licence d'assurer l'assistance technique de son Application et de toute modification apportée aux Logiciels Redistribuables ; et +11) Dans le Contrat de licence avec l'utilisateur final de son Application, le Détenteur de la Licence doit avertir celui-ci que les Logiciels Redistribuables ou leurs modifications ne peuvent pas être i) utilisés à d'autres fins que l'activation de son Application, ii) copiés (sauf à des fins de sauvegarde), iii) distribués ou transférés à d'autres personnes sans son Application, ni iv) désassemblés, décompilés ou traduits de quelque façon que ce soit sauf si autorisé par la loi et en l'absence de disposition légale contraire possible. En outre, le Contrat de licence du Détenteur de la Licence doit être au moins aussi protecteur d'IBM que les dispositions du présent Contrat. + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + +Le Détenteur de la Licence peut distribuer des versions modifiées des Composants Source, Échantillons et Exemples répertoriés dans le fichier REDIST d'un Logiciel, sous réserve que lesdites modifications aient été effectuées conformément aux dispositions de la présente licence et aux instructions du fichier REDIST. + +Les unités de mesure suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Unité de Valeur par Coeur Processeur (PVU) + +Le terme "Unité de Valeur par Coeur Processeur (PVU)" désigne une unité de mesure selon laquelle le Logiciel est concédé sous licence. Le nombre d'Autorisations d'Utilisation pour les Unités de Valeur par Coeur Processeur requises dépend de la technologie de processeur (déterminée selon le fournisseur, la marque, le type et le numéro de modèle du processeur dans le tableau des Unités de Valeur par Coeur Processeur disponible à l'adresse suivante : http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ainsi que du nombre de Coeurs Processeur auxquels le Logiciel peut accéder. Selon IBM, et dans le cadre de la concession de licence selon le nombre de PVU, un processeur désigne chaque Coeur Processeur résidant sur une puce. Par exemple, une puce processeur à deux coeurs comporte deux Coeurs Processeur. + +Le Détenteur de la Licence peut déployer le Logiciel dans le cadre d'une licence sans restriction ou d'une licence par capacité de virtualisation (licence selon la Capacité de la Partition) conformément aux conditions de licence selon la Capacité de la Partition du Contrat IBM Passport Advantage (voir page Web ci-dessous). Avec une licence sans restriction, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation de type Unités de Valeur par Coeur Processeur pour tous les Coeurs Processeur activés* de l'environnement matériel physique gérés par le Logiciel ou mis à sa disposition, à l'exception des serveurs où le Logiciel a été supprimé définitivement. Avec une licence par capacité de virtualisation, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation pour tous les Coeurs Processeur activés gérés par le Logiciel ou mis à sa disposition, tel que défini dans le document Virtualization Capacity License Counting Rules disponible à l'adresse : http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Le terme "Coeur Processeur activé" désigne un Coeur Processeur disponible dans un serveur physique ou virtuel, même si la capacité dudit Coeur Processeur est ou peut être limitée au moyen de technologies de virtualisation, de commandes de systèmes d'exploitation, de paramètres du BIOS, ou d'autres limitations similaires. + +Coeur Processeur Virtuel + +Le terme "Coeur Processeur Virtuel" désigne une unité de mesure par laquelle le Logiciel peut être concédé sous licence. Le terme "Serveur Physique" désigne un ordinateur physique constitué d'unités de traitement, de mémoire et de fonctions d'entrée-sortie, et qui exécute les procédures, les commandes ou les applications demandées pour un ou plusieurs utilisateurs ou unités client. Lorsque les armoires, les boîtiers de lames ou tout autre matériel similaire est utilisé, chaque unité physique distincte (lame ou unité montée en armoire, par exemple) qui dispose des composants requis est considérée comme un Serveur Physique à part entière. Un Serveur Virtuel est soit un ordinateur virtuel créé à partir du partitionnement des ressources disponibles pour un Serveur Physique, soit un Serveur Physique non partitionné. Un Coeur Processeur (souvent appelé Proceseur ou UC) désigne l'unité fonctionnelle d'une unité informatique qui interprète et exécute des instructions. Un Coeur Processeur est composé d'au moins une unité de contrôle des instructions et d'une ou plusieurs unités logiques ou arithmétiques. Un Coeur Processeur Virtuel est un Coeur Processeur situé dans un Serveur Physique non partitionné ou un coeur virtuel affecté à un Serveur Virtuel. Le Détenteur de la Licence doit acquérir une Autorisation d'Utilisation pour chaque Coeur Processeur Virtuel disponible pour le Logiciel. + +Pour chaque Serveur Physique, le Détenteur de la Licence doit posséder un nombre suffisant d'Autorisations d'Utilisation pour 1) la somme de tous les Coeurs Processeur Virtuels disponibles sur tous les Serveurs Virtuels disponibles sur le Logiciel, ou, si ce nombre est moins élevé, pour 2) tous les Coeurs Processeur disponibles sur le Serveur Physique. + +Inoltre, le seguenti clausole si applicano all'utilizzo del Programma da parte del licenziatario. + +Configurations en mode de Secours veille + +Dans le cadre de la présente section, une configuration de "Secours veille" est une configuration dans laquelle une copie du Logiciel est installée sur un serveur qui fait partie d'une solution à haute disponibilité, ce serveur étant celui sur lequel le Logiciel basculera dans le cas où la copie du Logiciel sur le serveur actif deviendrait inutilisable. Un serveur est considéré comme étant "en veille" uniquement s'il est utilisé exclusivement pour exécuter des tâches d'administration dans le cadre de scénarios de basculement, et ce, jusqu'à ce qu'un basculement ait lieu. + +Le Logiciel ne peut être installé sur un serveur en mode de Secours veille que s'il bénéficie d'une licence appropriée. + +Si le Logiciel est utilisé dans une configuration de Secours veille avec la fonction Multi-Instance Queue Manager, une copie du Logiciel peut résider à des fins de sauvegarde sur un serveur en mode de Secours veille, et être démarrée, mais doit rester "en veille" et ne doit pas être utilisée pour entreprendre un quelconque travail productif à moins que le serveur actif bascule sur le serveur de Secours veille, auquel cas la copie de Secours veille pourra être utilisée pour effectuer un travail productif pendant la période de basculement. + +Si le Logiciel est utilisé dans une configuration de Secours veille avec d'autres systèmes à haute disponibilité, une copie du Logiciel peut résider à des fins de sauvegarde sur un serveur de Secours veille mais ne doit pas être démarrée (et, par conséquent, ne doit pas être utilisée pour entreprendre tout travail productif), mais sera démarrée automatiquement par les composants à haute disponibilité en cas de panne du serveur actif, auquel cas la copie de Secours veille pourra être utilisée pour effectuer un travail productif pendant la période de basculement. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +IMPORTANT : A LIRE ATTENTIVEMENT + +Deux contrats de licence sont présentés ci-après. + +1. Conditions Internationales d'Evaluation des Logiciels IBM +2. Conditions Internationales d'Utilisation de Logiciel IBM + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'utilisation en production (c'est-à-dire à des fins autres que l'évaluation, le test, l'essai avant acquisition ou la démonstration) : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte les Conditions Internationales d'Utilisation de Logiciel IBM, sans modification. + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'évaluation, de test, d'essai avant acquisition ou de démonstration (collectivement, aux fins "d'Evaluation") : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte à la fois (i) les Conditions Internationales d'Evaluation des Logiciels IBM (la "Licence d'Evaluation"), sans modification ; et (ii) les Conditions Internationales d'Utilisation de Logiciel IBM ("IPLA"), sans modification. + +La Licence d'Evaluation s'appliquera jusqu'au terme de l'Evaluation du Détenteur de la licence. + +L'IPLA s'appliquera automatiquement si le Détenteur de la licence choisit de conserver le Logiciel à la fin de la période d'Evaluation (ou s'il obtient des exemplaires supplémentaires du Logiciel en vue de leur utilisation après la période d'Evaluation) en concluant un contrat avec le service Achats (par exemple, le contrat IBM International Passport Advantage ou IBM Passport Advantage Express). + +La Licence d'Evaluation et l'IPLA ne sont pas en vigueur simultanément, aucun des deux ne modifie l'autre et ils sont indépendants l'un de l'autre. + +L'intégralité du texte de ces deux contrats de licence est indiquée ci-dessous. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Evaluation des Logiciels (Z125-5543-05) s'applique. + +Nom du Logiciel (Référence du Logiciel) : +IBM MQ Advanced V9.0.3 (Evaluation) + +Les dispositions suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Période d'évaluation + +La période d'évaluation prend effet le jour où le Détenteur de la Licence accepte les dispositions du présent Contrat et prend fin après 90 jours. + +Logiciels Groupés + +Le Logiciel est concédé sous licence en tant qu'ensemble multi-produit comprenant les Logiciels Groupés répertoriés ci-dessous. Le Détenteur de la Licence est autorisé à installer et à utiliser lesdits Logiciels Groupés dans les limites de l'Autorisation d'Utilisation du Logiciel et tel que défini dans le présent document Informations sur la Licence. Le Détenteur de la Licence n'est pas autorisé à transférer ni à commercialiser les Logiciels Groupés séparément de l'ensemble multi-produit. Un Logiciel Groupé peut inclure des dispositions de licence, et le cas échéant, celles-ci s'appliquent à l'utilisation de ce Logiciel Groupé par le Détenteur de la Licence. En cas de contradiction entre les dispositions, celles du présent document Informations sur la Licence prévalent sur celles du Logiciel Groupé. Lorsque le droit d'utilisation du Logiciel par le Détenteur de la Licence arrive à expiration ou est résilié, le Détenteur de la Licence doit cesser d'utiliser et détruire ou renvoyer rapidement tous les exemplaires des Logiciels Groupés au tiers auprès de qui il a acquis le Logiciel. Si le Détenteur de la Licence a téléchargé les Logiciels Groupés, il doit contacter le tiers auprès de qui il a acquis le Logiciel. Pour toute utilisation des Logiciels Groupés non autorisée par le présent Contrat, le Détenteur de la Licence doit prendre contact avec un Ingénieur Commercial IBM ou avec le tiers auprès de qui il a acquis le Logiciel pour acquérir la licence correspondante. + +Les Logiciels Groupés suivants sont concédés sous licence avec le Logiciel : +IBM MQ V9.0.3 + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Utilisation de Logiciel (Z125-3301-14) s'applique. + +Nom du Logiciel (Référence du Logiciel) : +IBM MQ Advanced V9.0.3 (5724-H72) + +Les dispositions suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Autorisation d'Utilisation Restreinte + +Tel que décrit dans les Conditions Internationales d'Utilisation de Logiciel ("IPLA") et dans le présent document Informations sur la Licence, IBM concède au Détenteur de la Licence un droit limité pour utiliser le Logiciel. Ce droit est limité au niveau d'Utilisation Autorisée, telle qu'une Unité de Valeur par Coeur Processeur ("PVU"), une Unité de Valeur Ressource ("RVU"), une Unité de Valeur ("VU") ou tout autre niveau d'utilisation spécifié, payé par le Détenteur de la Licence comme en témoigne l'Autorisation d'Utilisation. L'utilisation par le Détenteur de la Licence peut également être limitée à une machine spécifiée, ou à une utilisation en tant que Logiciel Auxiliaire, ou être soumise à d'autres restrictions. Si que le Détenteur de la Licence n'a pas payé la totalité de la valeur économique du Logiciel, aucune autre utilisation n'est autorisé sans le paiement de frais supplémentaires. En outre, le Détenteur de la Licence n'est pas autorisé à utiliser le Logiciel pour fournir des services informatiques commerciaux à une tierce partie, pour fournir un hébergement ou un partage de temps commercial, ou pour accorder des sous-licences pour le Logiciel ni pour le louer, sauf indication contraire expresse dans les contrats applicables au titre desquels le Détenteur de la Licence a obtenu les Autorisations d'Utilisation du Logiciel. Des droits supplémentaires pourront être concédés au Détenteur de la Licence sous réserve du paiement de frais supplémentaires ou sous des conditions différentes ou supplémentaires. Ces droits supplémentaires seront concédés au Détenteur de la Licence à la seule discrétion d'IBM. + +Spécifications + +Les spécifications de ce Logiciel se trouvent dans les sections collectives "Description" et "Technical Information" des Lettres d'annonce dudit Logiciel. + +Logiciels Groupés + +Le Logiciel est concédé sous licence en tant qu'ensemble multi-produit comprenant les Logiciels Groupés répertoriés ci-dessous. Le Détenteur de la Licence est autorisé à installer et à utiliser lesdits Logiciels Groupés dans les limites de l'Autorisation d'Utilisation du Logiciel et tel que défini dans le présent document Informations sur la Licence. Le Détenteur de la Licence n'est pas autorisé à transférer ni à commercialiser les Logiciels Groupés séparément de l'ensemble multi-produit. Un Logiciel Groupé peut inclure des dispositions de licence, et le cas échéant, celles-ci s'appliquent à l'utilisation de ce Logiciel Groupé par le Détenteur de la Licence. En cas de contradiction entre les dispositions, celles du présent document Informations sur la Licence prévalent sur celles du Logiciel Groupé. Lorsque le droit d'utilisation du Logiciel par le Détenteur de la Licence arrive à expiration ou est résilié, le Détenteur de la Licence doit cesser d'utiliser et détruire ou renvoyer rapidement tous les exemplaires des Logiciels Groupés au tiers auprès de qui il a acquis le Logiciel. Si le Détenteur de la Licence a téléchargé les Logiciels Groupés, il doit contacter le tiers auprès de qui il a acquis le Logiciel. Pour toute utilisation des Logiciels Groupés non autorisée par le présent Contrat, le Détenteur de la Licence doit prendre contact avec un Ingénieur Commercial IBM ou avec le tiers auprès de qui il a acquis le Logiciel pour acquérir la licence correspondante. + +Les Logiciels Groupés suivants sont concédés sous licence avec le Logiciel : +IBM MQ V9.0.3 + +Composants non pris en compte pour établir les Autorisations d'Utilisation requises + +Pour définir le nombre d'Autorisations d'Utilisation requis pour l'installation ou l'utilisation du Logiciel par le Détenteur de la Licence, les composants du Logiciel suivants ne sont pas pris en compte. En d'autres termes, le Détenteur de la Licence peut installer et utiliser les composants du Logiciel suivants, conformément aux dispositions de la Licence, mais lesdits composants ne seront pas pris en compte pour déterminer le nombre d'autorisations d'utilisation requises pour le Logiciel. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + +Les unités de mesure suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Unité de Valeur par Coeur Processeur (PVU) + +Le terme "Unité de Valeur par Coeur Processeur (PVU)" désigne une unité de mesure selon laquelle le Logiciel est concédé sous licence. Le nombre d'Autorisations d'Utilisation pour les Unités de Valeur par Coeur Processeur requises dépend de la technologie de processeur (déterminée selon le fournisseur, la marque, le type et le numéro de modèle du processeur dans le tableau des Unités de Valeur par Coeur Processeur disponible à l'adresse suivante : http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ainsi que du nombre de Coeurs Processeur auxquels le Logiciel peut accéder. Selon IBM, et dans le cadre de la concession de licence selon le nombre de PVU, un processeur désigne chaque Coeur Processeur résidant sur une puce. Par exemple, une puce processeur à deux coeurs comporte deux Coeurs Processeur. + +Le Détenteur de la Licence peut déployer le Logiciel dans le cadre d'une licence sans restriction ou d'une licence par capacité de virtualisation (licence selon la Capacité de la Partition) conformément aux conditions de licence selon la Capacité de la Partition du Contrat IBM Passport Advantage (voir page Web ci-dessous). Avec une licence sans restriction, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation de type Unités de Valeur par Coeur Processeur pour tous les Coeurs Processeur activés* de l'environnement matériel physique gérés par le Logiciel ou mis à sa disposition, à l'exception des serveurs où le Logiciel a été supprimé définitivement. Avec une licence par capacité de virtualisation, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation pour tous les Coeurs Processeur activés gérés par le Logiciel ou mis à sa disposition, tel que défini dans le document Virtualization Capacity License Counting Rules disponible à l'adresse : http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Le terme "Coeur Processeur activé" désigne un Coeur Processeur disponible dans un serveur physique ou virtuel, même si la capacité dudit Coeur Processeur est ou peut être limitée au moyen de technologies de virtualisation, de commandes de systèmes d'exploitation, de paramètres du BIOS, ou d'autres limitations similaires. + +Coeur Processeur Virtuel + +Le terme "Coeur Processeur Virtuel" désigne une unité de mesure par laquelle le Logiciel peut être concédé sous licence. Le terme "Serveur Physique" désigne un ordinateur physique constitué d'unités de traitement, de mémoire et de fonctions d'entrée-sortie, et qui exécute les procédures, les commandes ou les applications demandées pour un ou plusieurs utilisateurs ou unités client. Lorsque les armoires, les boîtiers de lames ou tout autre matériel similaire est utilisé, chaque unité physique distincte (lame ou unité montée en armoire, par exemple) qui dispose des composants requis est considérée comme un Serveur Physique à part entière. Un Serveur Virtuel est soit un ordinateur virtuel créé à partir du partitionnement des ressources disponibles pour un Serveur Physique, soit un Serveur Physique non partitionné. Un Coeur Processeur (souvent appelé Proceseur ou UC) désigne l'unité fonctionnelle d'une unité informatique qui interprète et exécute des instructions. Un Coeur Processeur est composé d'au moins une unité de contrôle des instructions et d'une ou plusieurs unités logiques ou arithmétiques. Un Coeur Processeur Virtuel est un Coeur Processeur situé dans un Serveur Physique non partitionné ou un coeur virtuel affecté à un Serveur Virtuel. Le Détenteur de la Licence doit acquérir une Autorisation d'Utilisation pour chaque Coeur Processeur Virtuel disponible pour le Logiciel. + +Pour chaque Serveur Physique, le Détenteur de la Licence doit posséder un nombre suffisant d'Autorisations d'Utilisation pour 1) la somme de tous les Coeurs Processeur Virtuels disponibles sur tous les Serveurs Virtuels disponibles sur le Logiciel, ou, si ce nombre est moins élevé, pour 2) tous les Coeurs Processeur disponibles sur le Serveur Physique. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +IMPORTANT : A LIRE ATTENTIVEMENT + +Deux contrats de licence sont présentés ci-après. + +1. Conditions Internationales d'Evaluation des Logiciels IBM +2. Conditions Internationales d'Utilisation de Logiciel IBM + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'utilisation en production (c'est-à-dire à des fins autres que l'évaluation, le test, l'essai avant acquisition ou la démonstration) : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte les Conditions Internationales d'Utilisation de Logiciel IBM, sans modification. + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'évaluation, de test, d'essai avant acquisition ou de démonstration (collectivement, aux fins "d'Evaluation") : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte à la fois (i) les Conditions Internationales d'Evaluation des Logiciels IBM (la "Licence d'Evaluation"), sans modification ; et (ii) les Conditions Internationales d'Utilisation de Logiciel IBM ("IPLA"), sans modification. + +La Licence d'Evaluation s'appliquera jusqu'au terme de l'Evaluation du Détenteur de la licence. + +L'IPLA s'appliquera automatiquement si le Détenteur de la licence choisit de conserver le Logiciel à la fin de la période d'Evaluation (ou s'il obtient des exemplaires supplémentaires du Logiciel en vue de leur utilisation après la période d'Evaluation) en concluant un contrat avec le service Achats (par exemple, le contrat IBM International Passport Advantage ou IBM Passport Advantage Express). + +La Licence d'Evaluation et l'IPLA ne sont pas en vigueur simultanément, aucun des deux ne modifie l'autre et ils sont indépendants l'un de l'autre. + +L'intégralité du texte de ces deux contrats de licence est indiquée ci-dessous. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Evaluation des Logiciels (Z125-5543-05) s'applique. + +Nom du Logiciel (Référence du Logiciel) : +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Les dispositions suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Période d'évaluation + +La période d'évaluation prend effet le jour où le Détenteur de la Licence accepte les dispositions du présent Contrat et prend fin après 90 jours. + +Logiciels Groupés + +Le Logiciel est concédé sous licence en tant qu'ensemble multi-produit comprenant les Logiciels Groupés répertoriés ci-dessous. Le Détenteur de la Licence est autorisé à installer et à utiliser lesdits Logiciels Groupés dans les limites de l'Autorisation d'Utilisation du Logiciel et tel que défini dans le présent document Informations sur la Licence. Le Détenteur de la Licence n'est pas autorisé à transférer ni à commercialiser les Logiciels Groupés séparément de l'ensemble multi-produit. Un Logiciel Groupé peut inclure des dispositions de licence, et le cas échéant, celles-ci s'appliquent à l'utilisation de ce Logiciel Groupé par le Détenteur de la Licence. En cas de contradiction entre les dispositions, celles du présent document Informations sur la Licence prévalent sur celles du Logiciel Groupé. Lorsque le droit d'utilisation du Logiciel par le Détenteur de la Licence arrive à expiration ou est résilié, le Détenteur de la Licence doit cesser d'utiliser et détruire ou renvoyer rapidement tous les exemplaires des Logiciels Groupés au tiers auprès de qui il a acquis le Logiciel. Si le Détenteur de la Licence a téléchargé les Logiciels Groupés, il doit contacter le tiers auprès de qui il a acquis le Logiciel. Pour toute utilisation des Logiciels Groupés non autorisée par le présent Contrat, le Détenteur de la Licence doit prendre contact avec un Ingénieur Commercial IBM ou avec le tiers auprès de qui il a acquis le Logiciel pour acquérir la licence correspondante. + +Les Logiciels Groupés suivants sont concédés sous licence avec le Logiciel : +IBM MQ Idle Standby V9.0.3 + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Utilisation de Logiciel (Z125-3301-14) s'applique. + +Nom du Logiciel (Référence du Logiciel) : +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Les dispositions suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Autorisation d'Utilisation Restreinte + +Tel que décrit dans les Conditions Internationales d'Utilisation de Logiciel ("IPLA") et dans le présent document Informations sur la Licence, IBM concède au Détenteur de la Licence un droit limité pour utiliser le Logiciel. Ce droit est limité au niveau d'Utilisation Autorisée, telle qu'une Unité de Valeur par Coeur Processeur ("PVU"), une Unité de Valeur Ressource ("RVU"), une Unité de Valeur ("VU") ou tout autre niveau d'utilisation spécifié, payé par le Détenteur de la Licence comme en témoigne l'Autorisation d'Utilisation. L'utilisation par le Détenteur de la Licence peut également être limitée à une machine spécifiée, ou à une utilisation en tant que Logiciel Auxiliaire, ou être soumise à d'autres restrictions. Si que le Détenteur de la Licence n'a pas payé la totalité de la valeur économique du Logiciel, aucune autre utilisation n'est autorisé sans le paiement de frais supplémentaires. En outre, le Détenteur de la Licence n'est pas autorisé à utiliser le Logiciel pour fournir des services informatiques commerciaux à une tierce partie, pour fournir un hébergement ou un partage de temps commercial, ou pour accorder des sous-licences pour le Logiciel ni pour le louer, sauf indication contraire expresse dans les contrats applicables au titre desquels le Détenteur de la Licence a obtenu les Autorisations d'Utilisation du Logiciel. Des droits supplémentaires pourront être concédés au Détenteur de la Licence sous réserve du paiement de frais supplémentaires ou sous des conditions différentes ou supplémentaires. Ces droits supplémentaires seront concédés au Détenteur de la Licence à la seule discrétion d'IBM. + +Spécifications + +Les spécifications de ce Logiciel se trouvent dans les sections collectives "Description" et "Technical Information" des Lettres d'annonce dudit Logiciel. + +Logiciels Groupés + +Le Logiciel est concédé sous licence en tant qu'ensemble multi-produit comprenant les Logiciels Groupés répertoriés ci-dessous. Le Détenteur de la Licence est autorisé à installer et à utiliser lesdits Logiciels Groupés dans les limites de l'Autorisation d'Utilisation du Logiciel et tel que défini dans le présent document Informations sur la Licence. Le Détenteur de la Licence n'est pas autorisé à transférer ni à commercialiser les Logiciels Groupés séparément de l'ensemble multi-produit. Un Logiciel Groupé peut inclure des dispositions de licence, et le cas échéant, celles-ci s'appliquent à l'utilisation de ce Logiciel Groupé par le Détenteur de la Licence. En cas de contradiction entre les dispositions, celles du présent document Informations sur la Licence prévalent sur celles du Logiciel Groupé. Lorsque le droit d'utilisation du Logiciel par le Détenteur de la Licence arrive à expiration ou est résilié, le Détenteur de la Licence doit cesser d'utiliser et détruire ou renvoyer rapidement tous les exemplaires des Logiciels Groupés au tiers auprès de qui il a acquis le Logiciel. Si le Détenteur de la Licence a téléchargé les Logiciels Groupés, il doit contacter le tiers auprès de qui il a acquis le Logiciel. Pour toute utilisation des Logiciels Groupés non autorisée par le présent Contrat, le Détenteur de la Licence doit prendre contact avec un Ingénieur Commercial IBM ou avec le tiers auprès de qui il a acquis le Logiciel pour acquérir la licence correspondante. + +Les Logiciels Groupés suivants sont concédés sous licence avec le Logiciel : +IBM MQ Idle Standby V9.0.3 + +Composants non pris en compte pour établir les Autorisations d'Utilisation requises + +Pour définir le nombre d'Autorisations d'Utilisation requis pour l'installation ou l'utilisation du Logiciel par le Détenteur de la Licence, les composants du Logiciel suivants ne sont pas pris en compte. En d'autres termes, le Détenteur de la Licence peut installer et utiliser les composants du Logiciel suivants, conformément aux dispositions de la Licence, mais lesdits composants ne seront pas pris en compte pour déterminer le nombre d'autorisations d'utilisation requises pour le Logiciel. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + +Les unités de mesure suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Unité de Valeur par Coeur Processeur (PVU) + +Le terme "Unité de Valeur par Coeur Processeur (PVU)" désigne une unité de mesure selon laquelle le Logiciel est concédé sous licence. Le nombre d'Autorisations d'Utilisation pour les Unités de Valeur par Coeur Processeur requises dépend de la technologie de processeur (déterminée selon le fournisseur, la marque, le type et le numéro de modèle du processeur dans le tableau des Unités de Valeur par Coeur Processeur disponible à l'adresse suivante : http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ainsi que du nombre de Coeurs Processeur auxquels le Logiciel peut accéder. Selon IBM, et dans le cadre de la concession de licence selon le nombre de PVU, un processeur désigne chaque Coeur Processeur résidant sur une puce. Par exemple, une puce processeur à deux coeurs comporte deux Coeurs Processeur. + +Le Détenteur de la Licence peut déployer le Logiciel dans le cadre d'une licence sans restriction ou d'une licence par capacité de virtualisation (licence selon la Capacité de la Partition) conformément aux conditions de licence selon la Capacité de la Partition du Contrat IBM Passport Advantage (voir page Web ci-dessous). Avec une licence sans restriction, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation de type Unités de Valeur par Coeur Processeur pour tous les Coeurs Processeur activés* de l'environnement matériel physique gérés par le Logiciel ou mis à sa disposition, à l'exception des serveurs où le Logiciel a été supprimé définitivement. Avec une licence par capacité de virtualisation, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation pour tous les Coeurs Processeur activés gérés par le Logiciel ou mis à sa disposition, tel que défini dans le document Virtualization Capacity License Counting Rules disponible à l'adresse : http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Le terme "Coeur Processeur activé" désigne un Coeur Processeur disponible dans un serveur physique ou virtuel, même si la capacité dudit Coeur Processeur est ou peut être limitée au moyen de technologies de virtualisation, de commandes de systèmes d'exploitation, de paramètres du BIOS, ou d'autres limitations similaires. + +Inoltre, le seguenti clausole si applicano all'utilizzo del Programma da parte del licenziatario. + +Configurations en mode de Secours veille + +Dans le cadre de la présente section, une configuration de "Secours veille" est une configuration dans laquelle une copie du Logiciel est installée sur un serveur qui fait partie d'une solution à haute disponibilité, ce serveur étant celui sur lequel le Logiciel basculera dans le cas où la copie du Logiciel sur le serveur actif deviendrait inutilisable. Un serveur est considéré comme étant "en veille" uniquement s'il est utilisé exclusivement pour exécuter des tâches d'administration dans le cadre de scénarios de basculement, et ce, jusqu'à ce qu'un basculement ait lieu. + +Le Logiciel ne peut être installé sur un serveur en mode de Secours veille que s'il bénéficie d'une licence appropriée. + +Si le Logiciel est utilisé dans une configuration de Secours veille avec la fonction Multi-Instance Queue Manager, une copie du Logiciel peut résider à des fins de sauvegarde sur un serveur en mode de Secours veille, et être démarrée, mais doit rester "en veille" et ne doit pas être utilisée pour entreprendre un quelconque travail productif à moins que le serveur actif bascule sur le serveur de Secours veille, auquel cas la copie de Secours veille pourra être utilisée pour effectuer un travail productif pendant la période de basculement. + +Si le Logiciel est utilisé dans une configuration de Secours veille avec d'autres systèmes à haute disponibilité, une copie du Logiciel peut résider à des fins de sauvegarde sur un serveur de Secours veille mais ne doit pas être démarrée (et, par conséquent, ne doit pas être utilisée pour entreprendre tout travail productif), mais sera démarrée automatiquement par les composants à haute disponibilité en cas de panne du serveur actif, auquel cas la copie de Secours veille pourra être utilisée pour effectuer un travail productif pendant la période de basculement. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +IMPORTANT : A LIRE ATTENTIVEMENT + +Deux contrats de licence sont présentés ci-après. + +1. Conditions Internationales d'Evaluation des Logiciels IBM +2. Conditions Internationales d'Utilisation de Logiciel IBM + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'utilisation en production (c'est-à-dire à des fins autres que l'évaluation, le test, l'essai avant acquisition ou la démonstration) : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte les Conditions Internationales d'Utilisation de Logiciel IBM, sans modification. + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'évaluation, de test, d'essai avant acquisition ou de démonstration (collectivement, aux fins "d'Evaluation") : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte à la fois (i) les Conditions Internationales d'Evaluation des Logiciels IBM (la "Licence d'Evaluation"), sans modification ; et (ii) les Conditions Internationales d'Utilisation de Logiciel IBM ("IPLA"), sans modification. + +La Licence d'Evaluation s'appliquera jusqu'au terme de l'Evaluation du Détenteur de la licence. + +L'IPLA s'appliquera automatiquement si le Détenteur de la licence choisit de conserver le Logiciel à la fin de la période d'Evaluation (ou s'il obtient des exemplaires supplémentaires du Logiciel en vue de leur utilisation après la période d'Evaluation) en concluant un contrat avec le service Achats (par exemple, le contrat IBM International Passport Advantage ou IBM Passport Advantage Express). + +La Licence d'Evaluation et l'IPLA ne sont pas en vigueur simultanément, aucun des deux ne modifie l'autre et ils sont indépendants l'un de l'autre. + +L'intégralité du texte de ces deux contrats de licence est indiquée ci-dessous. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Evaluation des Logiciels (Z125-5543-05) s'applique. + +Nom du Logiciel (Référence du Logiciel) : +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Les dispositions suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Période d'évaluation + +La période d'évaluation prend effet le jour où le Détenteur de la Licence accepte les dispositions du présent Contrat et prend fin après 90 jours. + +Logiciels Groupés + +Le Logiciel est concédé sous licence en tant qu'ensemble multi-produit comprenant les Logiciels Groupés répertoriés ci-dessous. Le Détenteur de la Licence est autorisé à installer et à utiliser lesdits Logiciels Groupés dans les limites de l'Autorisation d'Utilisation du Logiciel et tel que défini dans le présent document Informations sur la Licence. Le Détenteur de la Licence n'est pas autorisé à transférer ni à commercialiser les Logiciels Groupés séparément de l'ensemble multi-produit. Un Logiciel Groupé peut inclure des dispositions de licence, et le cas échéant, celles-ci s'appliquent à l'utilisation de ce Logiciel Groupé par le Détenteur de la Licence. En cas de contradiction entre les dispositions, celles du présent document Informations sur la Licence prévalent sur celles du Logiciel Groupé. Lorsque le droit d'utilisation du Logiciel par le Détenteur de la Licence arrive à expiration ou est résilié, le Détenteur de la Licence doit cesser d'utiliser et détruire ou renvoyer rapidement tous les exemplaires des Logiciels Groupés au tiers auprès de qui il a acquis le Logiciel. Si le Détenteur de la Licence a téléchargé les Logiciels Groupés, il doit contacter le tiers auprès de qui il a acquis le Logiciel. Pour toute utilisation des Logiciels Groupés non autorisée par le présent Contrat, le Détenteur de la Licence doit prendre contact avec un Ingénieur Commercial IBM ou avec le tiers auprès de qui il a acquis le Logiciel pour acquérir la licence correspondante. + +Les Logiciels Groupés suivants sont concédés sous licence avec le Logiciel : +IBM MQ V9.0.3 + +Restrictions relatives aux développeurs + +Si le Logiciel porte une mention indiquant qu'il est destiné aux "Développeurs", cela signifie que le Détenteur de la Licence ne peut déployer le Logiciel qu'à des fins de développement et de test d'unité en interne sur une machine de développeur spécifique. Une machine de développeur désigne un environnement de bureau physique ou virtuel exécutant un système d'exploitation principal ainsi que le Logiciel, tous deux étant accessibles et utilisés par un seul développeur désigné. Le Détenteur de la Licence n'est pas autorisé à utiliser le Logiciel pour le traitement de charges de production, la simulation de charges de production ou encore le test d'évolutivité d'un code, d'une application ou d'un système donné. Le Détenteur de la Licence n'est pas autorisé à utiliser une partie quelconque du Logiciel à toute autre fin avant d'avoir acquis les Autorisations d'Utilisation de production appropriées. + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Utilisation de Logiciel (Z125-3301-14) s'applique. + +Nom du Logiciel (Référence du Logiciel) : +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Les dispositions suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Autorisation d'Utilisation Restreinte + +Tel que décrit dans les Conditions Internationales d'Utilisation de Logiciel ("IPLA") et dans le présent document Informations sur la Licence, IBM concède au Détenteur de la Licence un droit limité pour utiliser le Logiciel. Ce droit est limité au niveau d'Utilisation Autorisée, telle qu'une Unité de Valeur par Coeur Processeur ("PVU"), une Unité de Valeur Ressource ("RVU"), une Unité de Valeur ("VU") ou tout autre niveau d'utilisation spécifié, payé par le Détenteur de la Licence comme en témoigne l'Autorisation d'Utilisation. L'utilisation par le Détenteur de la Licence peut également être limitée à une machine spécifiée, ou à une utilisation en tant que Logiciel Auxiliaire, ou être soumise à d'autres restrictions. Si que le Détenteur de la Licence n'a pas payé la totalité de la valeur économique du Logiciel, aucune autre utilisation n'est autorisé sans le paiement de frais supplémentaires. En outre, le Détenteur de la Licence n'est pas autorisé à utiliser le Logiciel pour fournir des services informatiques commerciaux à une tierce partie, pour fournir un hébergement ou un partage de temps commercial, ou pour accorder des sous-licences pour le Logiciel ni pour le louer, sauf indication contraire expresse dans les contrats applicables au titre desquels le Détenteur de la Licence a obtenu les Autorisations d'Utilisation du Logiciel. Des droits supplémentaires pourront être concédés au Détenteur de la Licence sous réserve du paiement de frais supplémentaires ou sous des conditions différentes ou supplémentaires. Ces droits supplémentaires seront concédés au Détenteur de la Licence à la seule discrétion d'IBM. + +Spécifications + +Les spécifications de ce Logiciel se trouvent dans les sections collectives "Description" et "Technical Information" des Lettres d'annonce dudit Logiciel. + +Logiciels Groupés + +Le Logiciel est concédé sous licence en tant qu'ensemble multi-produit comprenant les Logiciels Groupés répertoriés ci-dessous. Le Détenteur de la Licence est autorisé à installer et à utiliser lesdits Logiciels Groupés dans les limites de l'Autorisation d'Utilisation du Logiciel et tel que défini dans le présent document Informations sur la Licence. Le Détenteur de la Licence n'est pas autorisé à transférer ni à commercialiser les Logiciels Groupés séparément de l'ensemble multi-produit. Un Logiciel Groupé peut inclure des dispositions de licence, et le cas échéant, celles-ci s'appliquent à l'utilisation de ce Logiciel Groupé par le Détenteur de la Licence. En cas de contradiction entre les dispositions, celles du présent document Informations sur la Licence prévalent sur celles du Logiciel Groupé. Lorsque le droit d'utilisation du Logiciel par le Détenteur de la Licence arrive à expiration ou est résilié, le Détenteur de la Licence doit cesser d'utiliser et détruire ou renvoyer rapidement tous les exemplaires des Logiciels Groupés au tiers auprès de qui il a acquis le Logiciel. Si le Détenteur de la Licence a téléchargé les Logiciels Groupés, il doit contacter le tiers auprès de qui il a acquis le Logiciel. Pour toute utilisation des Logiciels Groupés non autorisée par le présent Contrat, le Détenteur de la Licence doit prendre contact avec un Ingénieur Commercial IBM ou avec le tiers auprès de qui il a acquis le Logiciel pour acquérir la licence correspondante. + +Les Logiciels Groupés suivants sont concédés sous licence avec le Logiciel : +IBM MQ V9.0.3 + +Restrictions relatives aux développeurs + +Si le Logiciel porte une mention indiquant qu'il est destiné aux "Développeurs", cela signifie que le Détenteur de la Licence ne peut déployer le Logiciel qu'à des fins de développement et de test d'unité en interne sur une machine de développeur spécifique. Une machine de développeur désigne un environnement de bureau physique ou virtuel exécutant un système d'exploitation principal ainsi que le Logiciel, tous deux étant accessibles et utilisés par un seul développeur désigné. Le Détenteur de la Licence n'est pas autorisé à utiliser le Logiciel pour le traitement de charges de production, la simulation de charges de production ou encore le test d'évolutivité d'un code, d'une application ou d'un système donné. Le Détenteur de la Licence n'est pas autorisé à utiliser une partie quelconque du Logiciel à toute autre fin avant d'avoir acquis les Autorisations d'Utilisation de production appropriées. + +Composants non pris en compte pour établir les Autorisations d'Utilisation requises + +Pour définir le nombre d'Autorisations d'Utilisation requis pour l'installation ou l'utilisation du Logiciel par le Détenteur de la Licence, les composants du Logiciel suivants ne sont pas pris en compte. En d'autres termes, le Détenteur de la Licence peut installer et utiliser les composants du Logiciel suivants, conformément aux dispositions de la Licence, mais lesdits composants ne seront pas pris en compte pour déterminer le nombre d'autorisations d'utilisation requises pour le Logiciel. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + +Les unités de mesure suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Installation + +Le terme "Installation" désigne une unité de mesure selon laquelle le Logiciel est concédé sous licence. Une Installation désigne un exemplaire du Logiciel installé sur un disque physique ou virtuel et mis à disposition pour être exécuté sur un ordinateur. Le Détenteur de la Licence doit acquérir une Autorisation d'Utilisation pour chaque Installation du Logiciel. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +IMPORTANT : A LIRE ATTENTIVEMENT + +Deux contrats de licence sont présentés ci-après. + +1. Conditions Internationales d'Evaluation des Logiciels IBM +2. Conditions Internationales d'Utilisation de Logiciel IBM + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'utilisation en production (c'est-à-dire à des fins autres que l'évaluation, le test, l'essai avant acquisition ou la démonstration) : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte les Conditions Internationales d'Utilisation de Logiciel IBM, sans modification. + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'évaluation, de test, d'essai avant acquisition ou de démonstration (collectivement, aux fins "d'Evaluation") : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte à la fois (i) les Conditions Internationales d'Evaluation des Logiciels IBM (la "Licence d'Evaluation"), sans modification ; et (ii) les Conditions Internationales d'Utilisation de Logiciel IBM ("IPLA"), sans modification. + +La Licence d'Evaluation s'appliquera jusqu'au terme de l'Evaluation du Détenteur de la licence. + +L'IPLA s'appliquera automatiquement si le Détenteur de la licence choisit de conserver le Logiciel à la fin de la période d'Evaluation (ou s'il obtient des exemplaires supplémentaires du Logiciel en vue de leur utilisation après la période d'Evaluation) en concluant un contrat avec le service Achats (par exemple, le contrat IBM International Passport Advantage ou IBM Passport Advantage Express). + +La Licence d'Evaluation et l'IPLA ne sont pas en vigueur simultanément, aucun des deux ne modifie l'autre et ils sont indépendants l'un de l'autre. + +L'intégralité du texte de ces deux contrats de licence est indiquée ci-dessous. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Evaluation des Logiciels (Z125-5543-05) s'applique. + +Nom du Logiciel : IBM MQ Managed File Transfer Service V9.0.1 +Référence du Logiciel : Evaluation + +Nom du Logiciel : IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Référence du Logiciel : Evaluation + +Nom du Logiciel : IBM MQ Managed File Transfer Agent V9.0.1 +Référence du Logiciel : Evaluation + +Période d'évaluation + +La période d'évaluation prend effet le jour où le Détenteur de la Licence accepte les dispositions du présent Contrat et prend fin après 90 jours. + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Utilisation de Logiciel (Z125-3301-14) s'applique. + +Nom du Logiciel : IBM MQ Managed File Transfer Service V9.0.1 +Référence du Logiciel : 5724-H72 + +Nom du Logiciel : IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Référence du Logiciel : 5724-H72 + +Nom du Logiciel : IBM MQ Managed File Transfer Agent V9.0.1 +Référence du Logiciel : 5724-H72 + +Tel que décrit dans les Conditions Internationales d'Utilisation de Logiciel ("IPLA") et dans le présent document Informations sur la Licence, IBM concède au Détenteur de la Licence un droit limité pour utiliser le Logiciel. Ce droit est limité au niveau d'Utilisation Autorisée, telle qu'une Unité de Valeur par Coeur Processeur ("PVU"), une Unité de Valeur Ressource ("RVU"), une Unité de Valeur ("VU") ou tout autre niveau d'utilisation spécifié, payé par le Détenteur de la Licence comme en témoigne l'Autorisation d'Utilisation. L'utilisation par le Détenteur de la Licence peut également être limitée à une machine spécifiée, ou à une utilisation en tant que Logiciel Auxiliaire, ou être soumise à d'autres restrictions. Si que le Détenteur de la Licence n'a pas payé la totalité de la valeur économique du Logiciel, aucune autre utilisation n'est autorisé sans le paiement de frais supplémentaires. En outre, le Détenteur de la Licence n'est pas autorisé à utiliser le Logiciel pour fournir des services informatiques commerciaux à une tierce partie, pour fournir un hébergement ou un partage de temps commercial, ou pour accorder des sous-licences pour le Logiciel ni pour le louer, sauf indication contraire expresse dans les contrats applicables au titre desquels le Détenteur de la Licence a obtenu les Autorisations d'Utilisation du Logiciel. Des droits supplémentaires pourront être concédés au Détenteur de la Licence sous réserve du paiement de frais supplémentaires ou sous des conditions différentes ou supplémentaires. Ces droits supplémentaires seront concédés au Détenteur de la Licence à la seule discrétion d'IBM. + +Les spécifications de ce Logiciel se trouvent dans les sections collectives "Description" et "Technical Information" des Lettres d'annonce dudit Logiciel. + +Logiciels Redistribuables + +Si le Logiciel comprend des Logiciels Redistribuables, ceux-ci seront identifiés dans le fichier REDIST fourni avec le Logiciel. En plus des droits de licence concédés dans le présent Contrat, le Détenteur de la Licence est autorisé à distribuer les Logiciels Redistribuables conformément aux dispositions suivantes : +1) La redistribution doit être effectuée sous forme de code objet uniquement et doit être conforme à l'ensemble des instructions, directives et spécifications contenues dans la documentation du Logiciel ou dans le fichier REDIST fourni avec ; +2) Lorsque ladite documentation autorise le Détenteur de la Licence expressément à modifier les Logiciels Redistribuables, ladite modification doit être conforme à l'ensemble des instructions, directives et spécifications contenues dans la documentation, et le cas échéant, les logiciels modifiés restent des Logiciels Redistribuables ; +3) Les Logiciels Redistribuables peuvent être distribués uniquement dans le cadre de l'application développée par le Détenteur de la Licence à l'aide du Logiciel (son "Application") et de la prise en charge de ses clients dans le cadre de leur utilisation de son Application. L'Application du Détenteur de la Licence doit proposer une valeur ajoutée significative, de sorte que la distribution des Logiciels Redistribuables, dans le cadre de l'acquisition de l'Application du Détenteur de la Licence, ne constitue pas l'argument d'achat principal des utilisateurs finaux ; +4) Dans le cas où les Logiciels Redistribuables contiennent Java Runtime Environment, le Détenteur de la Licence doit inclure également des Logiciels Redistribuables non-Java équivalents avec son Application, sauf si son Application est conçue pour être exécutée uniquement sur des systèmes informatiques d'usage courant (par exemple des ordinateurs portables, des ordinateurs de bureau ou des serveurs) et non pas sur des unités mobiles (par exemple, les unités dotées d'un microprocesseur mais dont la fonction principale n'est pas le calcul) ; +5) Le Détenteur de la Licence n'est pas autorisé à retirer les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Logiciels Redistribuables ; +6) Le Détenteur de la Licence s'engage à protéger IBM, ses fournisseurs et ses distributeurs contre toute réclamation résultant de l'utilisation ou de la distribution de l'Application du Détenteur de la Licence ; +7) Le Détenteur de la Licence ne peut pas utiliser le même nom de chemin d'accès que celui des fichiers et/ou modules d'origine des Logiciels Redistribuables ; +8) Le Détenteur de la Licence n'est pas autorisé à utiliser les noms ou les marques d'IBM ou de ses fournisseurs ou distributeurs dans le cadre de la commercialisation de son Application sans autorisation écrite préalable de leur part ; +9) IBM, ses fournisseurs et ses distributeurs fournissent lesdits Logiciels Redistribuables ainsi que leur documentation sans obligation de support. Ces éléments sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE ; +10) Il est de la responsabilité du Détenteur de la Licence d'assurer l'assistance technique de son Application et de toute modification apportée aux Logiciels Redistribuables ; et +11) Dans le Contrat de licence avec l'utilisateur final de son Application, le Détenteur de la Licence doit avertir celui-ci que les Logiciels Redistribuables ou leurs modifications ne peuvent pas être i) utilisés à d'autres fins que l'activation de son Application, ii) copiés (sauf à des fins de sauvegarde), iii) distribués ou transférés à d'autres personnes sans son Application, ni iv) désassemblés, décompilés ou traduits de quelque façon que ce soit sauf si autorisé par la loi et en l'absence de disposition légale contraire possible. En outre, le Contrat de licence du Détenteur de la Licence doit être au moins aussi protecteur d'IBM que les dispositions du présent Contrat. + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + +Le Détenteur de la Licence peut distribuer des versions modifiées des Composants Source, Échantillons et Exemples répertoriés dans le fichier REDIST d'un Logiciel, sous réserve que lesdites modifications aient été effectuées conformément aux dispositions de la présente licence et aux instructions du fichier REDIST. + +Installation + +Le terme "Installation" désigne une unité de mesure selon laquelle le Logiciel est concédé sous licence. Une Installation désigne un exemplaire du Logiciel installé sur un disque physique ou virtuel et mis à disposition pour être exécuté sur un ordinateur. Le Détenteur de la Licence doit acquérir une Autorisation d'Utilisation pour chaque Installation du Logiciel. + +Unité de Valeur par Coeur Processeur (PVU) + +Le terme "Unité de Valeur par Coeur Processeur (PVU)" désigne une unité de mesure selon laquelle le Logiciel est concédé sous licence. Le nombre d'Autorisations d'Utilisation pour les Unités de Valeur par Coeur Processeur requises dépend de la technologie de processeur (déterminée selon le fournisseur, la marque, le type et le numéro de modèle du processeur dans le tableau des Unités de Valeur par Coeur Processeur disponible à l'adresse suivante : http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ainsi que du nombre de Coeurs Processeur auxquels le Logiciel peut accéder. Selon IBM, et dans le cadre de la concession de licence selon le nombre de PVU, un processeur désigne chaque Coeur Processeur résidant sur une puce. Par exemple, une puce processeur à deux coeurs comporte deux Coeurs Processeur. + +Le Détenteur de la Licence peut déployer le Logiciel dans le cadre d'une licence sans restriction ou d'une licence par capacité de virtualisation (licence selon la Capacité de la Partition) conformément aux conditions de licence selon la Capacité de la Partition du Contrat IBM Passport Advantage (voir page Web ci-dessous). Avec une licence sans restriction, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation de type Unités de Valeur par Coeur Processeur pour tous les Coeurs Processeur activés* de l'environnement matériel physique gérés par le Logiciel ou mis à sa disposition, à l'exception des serveurs où le Logiciel a été supprimé définitivement. Avec une licence par capacité de virtualisation, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation pour tous les Coeurs Processeur activés gérés par le Logiciel ou mis à sa disposition, tel que défini dans le document Virtualization Capacity License Counting Rules disponible à l'adresse : http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Le terme "Coeur Processeur activé" désigne un Coeur Processeur disponible dans un serveur physique ou virtuel, même si la capacité dudit Coeur Processeur est ou peut être limitée au moyen de technologies de virtualisation, de commandes de systèmes d'exploitation, de paramètres du BIOS, ou d'autres limitations similaires. + +Dispositions particulières au Logiciel + +Configurations en mode de Secours veille + +Dans le cadre de la présente section, une configuration de "Secours veille" est une configuration dans laquelle une copie du Logiciel est installée sur un serveur qui fait partie d'une solution à haute disponibilité, ce serveur étant celui sur lequel le Logiciel basculera dans le cas où la copie du Logiciel sur le serveur actif deviendrait inutilisable. Un serveur est considéré comme étant "en veille" uniquement s'il est utilisé exclusivement pour exécuter des tâches d'administration dans le cadre de scénarios de basculement, et ce, jusqu'à ce qu'un basculement ait lieu. + +Le Logiciel ne peut être installé sur un serveur en mode de Secours veille que s'il bénéficie d'une licence appropriée. + +Si le Logiciel est utilisé dans une configuration de Secours veille avec la fonction Multi-Instance Queue Manager, une copie du Logiciel peut résider à des fins de sauvegarde sur un serveur en mode de Secours veille, et être démarrée, mais doit rester "en veille" et ne doit pas être utilisée pour entreprendre un quelconque travail productif à moins que le serveur actif bascule sur le serveur de Secours veille, auquel cas la copie de Secours veille pourra être utilisée pour effectuer un travail productif pendant la période de basculement. + +Si le Logiciel est utilisé dans une configuration de Secours veille avec d'autres systèmes à haute disponibilité, une copie du Logiciel peut résider à des fins de sauvegarde sur un serveur de Secours veille mais ne doit pas être démarrée (et, par conséquent, ne doit pas être utilisée pour entreprendre tout travail productif), mais sera démarrée automatiquement par les composants à haute disponibilité en cas de panne du serveur actif, auquel cas la copie de Secours veille pourra être utilisée pour effectuer un travail productif pendant la période de basculement. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +IMPORTANT : A LIRE ATTENTIVEMENT + +Deux contrats de licence sont présentés ci-après. + +1. Conditions Internationales d'Evaluation des Logiciels IBM +2. Conditions Internationales d'Utilisation de Logiciel IBM + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'utilisation en production (c'est-à-dire à des fins autres que l'évaluation, le test, l'essai avant acquisition ou la démonstration) : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte les Conditions Internationales d'Utilisation de Logiciel IBM, sans modification. + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'évaluation, de test, d'essai avant acquisition ou de démonstration (collectivement, aux fins "d'Evaluation") : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte à la fois (i) les Conditions Internationales d'Evaluation des Logiciels IBM (la "Licence d'Evaluation"), sans modification ; et (ii) les Conditions Internationales d'Utilisation de Logiciel IBM ("IPLA"), sans modification. + +La Licence d'Evaluation s'appliquera jusqu'au terme de l'Evaluation du Détenteur de la licence. + +L'IPLA s'appliquera automatiquement si le Détenteur de la licence choisit de conserver le Logiciel à la fin de la période d'Evaluation (ou s'il obtient des exemplaires supplémentaires du Logiciel en vue de leur utilisation après la période d'Evaluation) en concluant un contrat avec le service Achats (par exemple, le contrat IBM International Passport Advantage ou IBM Passport Advantage Express). + +La Licence d'Evaluation et l'IPLA ne sont pas en vigueur simultanément, aucun des deux ne modifie l'autre et ils sont indépendants l'un de l'autre. + +L'intégralité du texte de ces deux contrats de licence est indiquée ci-dessous. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Evaluation des Logiciels (Z125-5543-05) s'applique. + +Nom du Logiciel : IBM MQ Advanced Message Security V9.0.1 +Référence du Logiciel : Evaluation + +Nom du Logiciel : IBM MQ Advanced Message Security Idle Standby V9.0.1 +Référence du Logiciel : Evaluation + +Nom du Logiciel : IBM MQ Telemetry V9.0.1 +Référence du Logiciel : Evaluation + +Période d'évaluation + +La période d'évaluation prend effet le jour où le Détenteur de la Licence accepte les dispositions du présent Contrat et prend fin après 90 jours. + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + + + +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Utilisation de Logiciel (Z125-3301-14) s'applique. + +Nom du Logiciel : IBM MQ Advanced Message Security V9.0.1 +Référence du Logiciel : 5724-H72 + +Nom du Logiciel : IBM MQ Advanced Message Security Idle Standby V9.0.1 +Référence du Logiciel : 5724-H72 + +Nom du Logiciel : IBM MQ Telemetry V9.0.1 +Référence du Logiciel : 5724-H72 + +Tel que décrit dans les Conditions Internationales d'Utilisation de Logiciel ("IPLA") et dans le présent document Informations sur la Licence, IBM concède au Détenteur de la Licence un droit limité pour utiliser le Logiciel. Ce droit est limité au niveau d'Utilisation Autorisée, telle qu'une Unité de Valeur par Coeur Processeur ("PVU"), une Unité de Valeur Ressource ("RVU"), une Unité de Valeur ("VU") ou tout autre niveau d'utilisation spécifié, payé par le Détenteur de la Licence comme en témoigne l'Autorisation d'Utilisation. L'utilisation par le Détenteur de la Licence peut également être limitée à une machine spécifiée, ou à une utilisation en tant que Logiciel Auxiliaire, ou être soumise à d'autres restrictions. Si que le Détenteur de la Licence n'a pas payé la totalité de la valeur économique du Logiciel, aucune autre utilisation n'est autorisé sans le paiement de frais supplémentaires. En outre, le Détenteur de la Licence n'est pas autorisé à utiliser le Logiciel pour fournir des services informatiques commerciaux à une tierce partie, pour fournir un hébergement ou un partage de temps commercial, ou pour accorder des sous-licences pour le Logiciel ni pour le louer, sauf indication contraire expresse dans les contrats applicables au titre desquels le Détenteur de la Licence a obtenu les Autorisations d'Utilisation du Logiciel. Des droits supplémentaires pourront être concédés au Détenteur de la Licence sous réserve du paiement de frais supplémentaires ou sous des conditions différentes ou supplémentaires. Ces droits supplémentaires seront concédés au Détenteur de la Licence à la seule discrétion d'IBM. + +Les spécifications de ce Logiciel se trouvent dans les sections collectives "Description" et "Technical Information" des Lettres d'annonce dudit Logiciel. + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + +Installation + +Le terme "Installation" désigne une unité de mesure selon laquelle le Logiciel est concédé sous licence. Une Installation désigne un exemplaire du Logiciel installé sur un disque physique ou virtuel et mis à disposition pour être exécuté sur un ordinateur. Le Détenteur de la Licence doit acquérir une Autorisation d'Utilisation pour chaque Installation du Logiciel. + +Unité de Valeur par Coeur Processeur (PVU) + +Le terme "Unité de Valeur par Coeur Processeur (PVU)" désigne une unité de mesure selon laquelle le Logiciel est concédé sous licence. Le nombre d'Autorisations d'Utilisation pour les Unités de Valeur par Coeur Processeur requises dépend de la technologie de processeur (déterminée selon le fournisseur, la marque, le type et le numéro de modèle du processeur dans le tableau des Unités de Valeur par Coeur Processeur disponible à l'adresse suivante : http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ainsi que du nombre de Coeurs Processeur auxquels le Logiciel peut accéder. Selon IBM, et dans le cadre de la concession de licence selon le nombre de PVU, un processeur désigne chaque Coeur Processeur résidant sur une puce. Par exemple, une puce processeur à deux coeurs comporte deux Coeurs Processeur. + +Le Détenteur de la Licence peut déployer le Logiciel dans le cadre d'une licence sans restriction ou d'une licence par capacité de virtualisation (licence selon la Capacité de la Partition) conformément aux conditions de licence selon la Capacité de la Partition du Contrat IBM Passport Advantage (voir page Web ci-dessous). Avec une licence sans restriction, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation de type Unités de Valeur par Coeur Processeur pour tous les Coeurs Processeur activés* de l'environnement matériel physique gérés par le Logiciel ou mis à sa disposition, à l'exception des serveurs où le Logiciel a été supprimé définitivement. Avec une licence par capacité de virtualisation, le Détenteur de la Licence doit acquérir suffisamment d'Autorisations d'Utilisation pour tous les Coeurs Processeur activés gérés par le Logiciel ou mis à sa disposition, tel que défini dans le document Virtualization Capacity License Counting Rules disponible à l'adresse : http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Le terme "Coeur Processeur activé" désigne un Coeur Processeur disponible dans un serveur physique ou virtuel, même si la capacité dudit Coeur Processeur est ou peut être limitée au moyen de technologies de virtualisation, de commandes de systèmes d'exploitation, de paramètres du BIOS, ou d'autres limitations similaires. + +Dispositions particulières au Logiciel + +Configurations en mode de Secours veille + +Dans le cadre de la présente section, une configuration de "Secours veille" est une configuration dans laquelle une copie du Logiciel est installée sur un serveur qui fait partie d'une solution à haute disponibilité, ce serveur étant celui sur lequel le Logiciel basculera dans le cas où la copie du Logiciel sur le serveur actif deviendrait inutilisable. Un serveur est considéré comme étant "en veille" uniquement s'il est utilisé exclusivement pour exécuter des tâches d'administration dans le cadre de scénarios de basculement, et ce, jusqu'à ce qu'un basculement ait lieu. + +Le Logiciel ne peut être installé sur un serveur en mode de Secours veille que s'il bénéficie d'une licence appropriée. + +Si le Logiciel est utilisé dans une configuration de Secours veille avec la fonction Multi-Instance Queue Manager, une copie du Logiciel peut résider à des fins de sauvegarde sur un serveur en mode de Secours veille, et être démarrée, mais doit rester "en veille" et ne doit pas être utilisée pour entreprendre un quelconque travail productif à moins que le serveur actif bascule sur le serveur de Secours veille, auquel cas la copie de Secours veille pourra être utilisée pour effectuer un travail productif pendant la période de basculement. + +Si le Logiciel est utilisé dans une configuration de Secours veille avec d'autres systèmes à haute disponibilité, une copie du Logiciel peut résider à des fins de sauvegarde sur un serveur de Secours veille mais ne doit pas être démarrée (et, par conséquent, ne doit pas être utilisée pour entreprendre tout travail productif), mais sera démarrée automatiquement par les composants à haute disponibilité en cas de panne du serveur actif, auquel cas la copie de Secours veille pourra être utilisée pour effectuer un travail productif pendant la période de basculement. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +IMPORTANT : A LIRE ATTENTIVEMENT + +Deux contrats de licence sont présentés ci-après. + +1. Conditions Internationales d'Evaluation des Logiciels IBM +2. Conditions Internationales d'Utilisation de Logiciel IBM + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'utilisation en production (c'est-à-dire à des fins autres que l'évaluation, le test, l'essai avant acquisition ou la démonstration) : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte les Conditions Internationales d'Utilisation de Logiciel IBM, sans modification. + +Si le Détenteur de la licence acquiert le Logiciel à des fins d'évaluation, de test, d'essai avant acquisition ou de démonstration (collectivement, aux fins "d'Evaluation") : en cliquant sur le bouton "J'accepte" ci-dessous, il accepte à la fois (i) les Conditions Internationales d'Evaluation des Logiciels IBM (la "Licence d'Evaluation"), sans modification ; et (ii) les Conditions Internationales d'Utilisation de Logiciel IBM ("IPLA"), sans modification. + +La Licence d'Evaluation s'appliquera jusqu'au terme de l'Evaluation du Détenteur de la licence. + +L'IPLA s'appliquera automatiquement si le Détenteur de la licence choisit de conserver le Logiciel à la fin de la période d'Evaluation (ou s'il obtient des exemplaires supplémentaires du Logiciel en vue de leur utilisation après la période d'Evaluation) en concluant un contrat avec le service Achats (par exemple, le contrat IBM International Passport Advantage ou IBM Passport Advantage Express). + +La Licence d'Evaluation et l'IPLA ne sont pas en vigueur simultanément, aucun des deux ne modifie l'autre et ils sont indépendants l'un de l'autre. + +L'intégralité du texte de ces deux contrats de licence est indiquée ci-dessous. + + +Conditions Internationales d'Evaluation des Logiciels + +Chapitre 1 - Dispositions Générales + +EN TÉLÉCHARGEANT, EN INSTALLANT OU EN COPIANT LE LOGICIEL, EN CLIQUANT SUR LE BOUTON "ACCEPTER" OU EN ACCÉDANT AU LOGICIEL, LE DÉTENTEUR DE LA LICENCE ACCEPTE LES DISPOSITIONS DU PRÉSENT CONTRAT. SI VOUS ACCEPTEZ LES PRÉSENTES DISPOSITIONS POUR LE COMPTE DU DÉTENTEUR DE LA LICENCE, VOUS CERTIFIEZ AVOIR QUALITÉ POUR ENGAGER LE DÉTENTEUR DE LA LICENCE À RESPECTER LESDITES DISPOSITIONS. SI VOUS N'ACCEPTEZ PAS CES DISPOSITIONS, + +* NE TÉLÉCHARGEZ PAS, N'INSTALLEZ PAS, NE COPIEZ PAS, N'ACCÉDEZ PAS, NE CLIQUEZ PAS SUR LE BOUTON "ACCEPTER" ET N'UTILISEZ PAS LE LOGICIEL ; ET + +* RETOURNEZ RAPIDEMENT LES SUPPORTS NON UTILISÉS AINSI QUE LA DOCUMENTATION À LA PERSONNE AUPRÈS DE LAQUELLE VOUS LES AVEZ ACQUIS. SI VOUS AVEZ TÉLÉCHARGÉ LE LOGICIEL, DÉTRUISEZ-EN TOUS LES EXEMPLAIRES. + +1. Définitions + +Le terme "Utilisation Autorisée" désigne les limites d'autorisation concédées au Détenteur de la Licence pour exécuter le Logiciel. Ce niveau peut être calculé en fonction du nombre d'utilisateurs, du nombre de millions d'unités de service ("MSU"), du nombre d'Unités de Valeur par Coeur Processeur ("PVU") ou d'un autre niveau d'utilisation spécifié par IBM. + +Le terme "IBM" désigne la compagnie International Business Machines Corporation ou l'une de ses filiales. + +Le terme "Informations sur la licence" ("LI") désigne un document qui contient des informations et des dispositions complémentaires spécifiques concernant un Logiciel donné. Il peut se trouver dans le répertoire du Logiciel accessible par une commande système ou dans une brochure livrée avec le Logiciel. + +Le terme "Logiciel" désigne les éléments suivants, y compris l'original et toutes les copies partielles ou totales de chacun des éléments : 1) instructions et données lisibles par machine ; 2) composants, fichiers et modules ; 3) contenus audiovisuels (images, textes, enregistrements ou dessins, par exemple) ; et 4) éléments sous licence associés (clés et documentation, par exemple). + +2. Structure du Contrat + +Le présent Contrat est constitué du présent document qui comprend un premier chapitre intitulé Chapitre 1 - Dispositions Générales et éventuellement un second chapitre intitulé Chapitre 2 - Dispositions Nationales Particulières et du document intitulé Informations sur la licence. Le présent Contrat exprime l'intégralité de l'accord intervenu entre le Détenteur de la Licence et IBM en ce qui concerne l'utilisation du Logiciel. Il prévaut sur tout autre accord ou communication antérieur, oral ou écrit, intervenu entre le Détenteur de la Licence et IBM concernant l'utilisation du Logiciel par le Détenteur de la Licence. Les dispositions du second chapitre peuvent remplacer ou modifier celles du premier. En cas de contradiction entre les dispositions, le document Informations sur la Licence prévaut sur les deux chapitres en question. + +3. Concession de licences + +Le Logiciel est la propriété d'IBM ou d'un fournisseur d'IBM et est protégé par les droits d'auteur. Le Logiciel est concédé sous licence et non vendu. + +IBM concède au Détenteur de la Licence une licence d'utilisation du Logiciel limitée, non exclusive et non transférable l'autorisant à 1) télécharger, installer et utiliser le Logiciel pendant la période d'évaluation dans les limites d'Utilisation Autorisée indiquées dans le document Informations sur la licence uniquement à des fins d'évaluation interne, de test ou de démonstration dans le cadre d'une évaluation ; 2) effectuer et installer des copies du Logiciel dans les limites du raisonnable pour permettre une telle utilisation, et 3) effectuer une copie de sauvegarde, sous réserve des conditions suivantes : + +a. le Détenteur de la Licence a légalement obtenu le Logiciel et respecte toutes les dispositions du présent Contrat ; + +b. la copie de sauvegarde ne doit être exécutée que si le Logiciel à l'origine de cette copie de sauvegarde ne peut pas être exécuté ; + +c. le Détenteur de la Licence doit reproduire toutes les mentions relatives aux droits d'auteur et toute autre mention de propriété sur chaque copie totale ou partielle du Logiciel ; + +d. le Détenteur de la Licence doit tenir à jour un enregistrement de toutes les copies du Logiciel et s'engage à ce que toute personne utilisant le Logiciel (que ce soit par le biais de son réseau privé ou d'un réseau public) 1) ne le fasse que pour son usage dans la limite des droits concédés et 2) conformément aux dispositions du présent Contrat ; + +e. le Détenteur de la Licence ne doit pas 1) utiliser le Logiciel à des fins de production ou utiliser, copier, modifier ou distribuer d'une quelconque façon le Logiciel sauf mention contraire dans le présent Contrat ; 2) désassembler, décompiler, traduire de quelque façon que ce soit ou faire de l'ingénierie inverse vis-à-vis du Logiciel, à moins d'y avoir été expressément autorisé par une disposition légale d'ordre public ; 3) utiliser certains composants, fichiers, modules, contenus audiovisuels ou éléments associés concédés sous une licence distincte du Logiciel ; 4) concéder des sous-licences ou donner le Logiciel en location sous quelque forme que ce soit ; ou 5) utiliser le Logiciel pour l'hébergement d'applications commerciales ; et + +f. si le Détenteur de la Licence se procure le Logiciel au titre d'un Logiciel requis, le Détenteur de la Licence doit utiliser ledit Logiciel uniquement dans le but de pouvoir utiliser le Logiciel Principal et conformément aux limites d'utilisation de la licence du Logiciel Principal, ou, si le Détenteur de la Licence se procure le Logiciel au titre d'un Logiciel Principal, le Détenteur de la Licence doit utiliser l'ensemble des Logiciels requis uniquement dans le but de pouvoir utiliser ledit Logiciel et conformément aux limites d'utilisation éventuellement définies dans le présent Contrat. Dans le contexte de l'alinéa "f", le terme "Logiciel requis" désigne un Logiciel rattaché à un autre Logiciel IBM ("Logiciel Principal") et identifié comme étant un Logiciel requis dans le document Informations sur la licence du Logiciel Principal. Pour se procurer une licence distincte au titre d'un Logiciel requis sans ces restrictions, le Détenteur de la Licence doit s'adresser à la personne auprès de qui il a acquis le Logiciel requis. + +Le présent Contrat de licence s'applique à chaque exemplaire du Logiciel créé par le Détenteur de la Licence. + +3.1 Mises à jour et correctifs + +Lorsque le Détenteur de la Licence reçoit une mise à jour ou un correctif pour un Logiciel, il accepte toute disposition supplémentaire et différente applicable à ladite mise à jour ou audit correctif figurant dans le document Informations sur la Licence qui l'accompagne. Si aucune disposition supplémentaire ou différente n'accompagne la mise à jour ou le correctif, alors ceux-ci sont exclusivement soumis aux dispositions du présent Contrat. Si le Logiciel est remplacé par une mise à jour, le Détenteur de la Licence s'engage à cesser immédiatement d'utiliser le Logiciel remplacé. + +3.2 Durée et résiliation du Contrat + +La période d'évaluation prend effet lorsque le Détenteur de la Licence accepte les dispositions du présent Contrat et prend fin à la première des dates suivantes : 1) à la fin de la période d'évaluation ou à la date indiquée par IBM dans le document Informations sur la licence ou dans un document de transaction ; ou 2) à la date de la désactivation automatique du Logiciel. Le Détenteur de la Licence doit détruire le Logiciel, ainsi que toutes les copies dans les dix jours suivant l'expiration de la période d'évaluation. Si IBM autorise le Détenteur de la Licence à conserver le Logiciel par le biais du document Informations sur la licence et que le Détenteur de la Licence choisit cette solution, le Logiciel sera soumis aux dispositions d'un autre contrat de licence qu'IBM lui fournira ultérieurement. Une redevance pourra également lui être demandée. + +IBM peut résilier la licence qui a été concédée au Détenteur de la Licence si ce dernier ne respecte pas les dispositions du présent Contrat. Si la licence est résiliée par l'une des parties pour une quelconque raison, le Détenteur de la Licence s'engage à cesser d'utiliser et à détruire immédiatement tous les exemplaires du Logiciel créés par le Détenteur de la Licence. Toute disposition du présent Contrat qui, de par sa nature, s'exerce au-delà de la date de résiliation est prorogée jusqu'à sa complète exécution, et s'applique aux ayants droit et cessionnaires respectifs des deux parties. + +LE LOGICIEL PEUT CONTENIR UN DISPOSITIF DE DÉSACTIVATION POUR EN INTERDIRE L'UTILISATION À L'EXPIRATION DE LA PÉRIODE D'ÉVALUATION. LE DÉTENTEUR DE LA LICENCE S'ENGAGE À NE PAS ALTÉRER LE DISPOSITIF DE DÉSACTIVATION OU LE LOGICIEL. LE DÉTENTEUR DE LA LICENCE DOIT PRENDRE LES PRÉCAUTIONS NÉCESSAIRES POUR ÉVITER DE PERDRE DES DONNÉES LORSQU'IL NE POURRA PLUS UTILISER LE LOGICIEL. + +4. Prix et redevances + +L'utilisation du Logiciel est gratuite pendant la période d'évaluation. + +5. Exclusion de garantie + +SOUS RÉSERVE DE TOUTE GARANTIE LÉGALE QUI NE PEUT ETRE EXCLUE, IBM NE FOURNIT AUCUNE GARANTIE OU CONDITION, EXPLICITE OU IMPLICITE, CONCERNANT LE LOGICIEL OU, LE CAS ÉCHÉANT, LE SUPPORT ASSOCIÉ, Y COMPRIS, ET DE FAÇON NON LIMITATIVE, TOUTE GARANTIE OU CONDITION IMPLICITE DE QUALITÉ SATISFAISANTE, D'APTITUDE À L'EXÉCUTION D'UN TRAVAIL DONNÉ ET TOUTE GARANTIE OU CONDITION DE NON CONTREFAÇON. + +CERTAINS ÉTATS OU LÉGISLATIONS N'AUTORISENT PAS L'EXCLUSION DES GARANTIES EXPLICITES OU IMPLICITES, AUQUEL CAS L'EXCLUSION CI-DESSUS PEUT NE PAS ÊTRE APPLICABLE AU DÉTENTEUR DE LA LICENCE. DANS CE CAS, LA DURÉE DE CES GARANTIES SERA ALORS LIMITÉE À LA PÉRIODE MINIMALE REQUISE PAR LA LOI. PASSÉE CETTE PÉRIODE, AUCUNE GARANTIE NE S'APPLIQUERA. CERTAINS ÉTATS OU LÉGISLATIONS N'AUTORISENT PAS LES LIMITATIONS DE DURÉE DES GARANTIES IMPLICITES, AUQUEL CAS LA LIMITATION CI-DESSUS PEUT NE PAS ÊTRE APPLICABLE AU DÉTENTEUR DE LA LICENCE. IL EST POSSIBLE QUE LE DÉTENTEUR DE LA LICENCE DÉTIENNE D'AUTRES DROITS DONT LA NATURE VARIE SELON LA LÉGISLATION APPLICABLE. + +LES CLAUSES D'EXCLUSION DE RESPONSABILITÉ DE LA PRÉSENTE SECTION 5 S'APPLIQUENT ÉGALEMENT À TOUS LES DÉVELOPPEURS ET FOURNISSEURS DE LOGICIELS D'IBM. + +LES FABRICANTS, FOURNISSEURS OU DISTRIBUTEURS DE LOGICIELS NON IBM PEUVENT FOURNIR LEURS PROPRES GARANTIES. + +IBM NE FOURNIT AUCUN SUPPORT QUEL QU'IL SOIT, SAUF INDICATION CONTRAIRE. LE CAS ÉCHÉANT, TOUT SUPPORT FOURNI PAR IBM EST SOUMIS AUX CLAUSES D'EXCLUSION DE RESPONSABILITÉ DE LA PRÉSENTE SECTION 5. + +6. Données et bases de données appartenant au Détenteur de la Licence + +Pour aider le Détenteur de la Licence à identifier la cause d'un problème lié au Logiciel, IBM peut demander à ce que le Détenteur de la Licence 1) autorise IBM à accéder à distance au système du Détenteur de la Licence ; ou 2) envoie les données système ou les informations du Détenteur de la Licence à IBM. Toutefois, IBM n'est pas tenue de fournir une telle assistance à moins qu'IBM et le Détenteur de la Licence en aient convenu autrement dans le cadre d'un accord distinct où IBM s'engage à fournir au Détenteur de la Licence une assistance de ce type, qui dépasse les obligations d'IBM au titre du présent Contrat. Dans tous les cas, IBM utilisera les informations concernant les erreurs et les problèmes dans le but d'améliorer ses produits et services, et de fournir des offres de support associées. Dans ce contexte, le Détenteur de la Licence autorise IBM à faire appel à des sous-traitants et des entités IBM (y compris dans un ou plusieurs pays autres que celui où réside le Détenteur de la Licence). + +Le Détenteur de la Licence sera responsable 1) des données et du contenu des bases de données que le Détenteur de la Licence mettra à la disposition d'IBM, 2) du choix et de la mise en ouvre des procédures et des contrôles régissant l'accès, la sécurité, le chiffrement, l'utilisation ainsi que la transmission des données (notamment les données d'identification personnelle) ; et 3) de la sauvegarde et de la reprise des bases de données et des données éventuellement stockées. Le Détenteur de la Licence ne transmettra et ne fournira à IBM aucun accès à des informations d'identification personnelle, qu'elles soient sous la forme de données ou autre. En outre, il sera redevable des coûts raisonnables ainsi que des sommes qu'IBM pourrait subir au titre des informations fournies à IBM par erreur ou encore de la perte ou de la divulgation desdites informations par IBM, y compris celles découlant de réclamations émanant de tiers. + +7. Limitation de responsabilité + +Les limitations et exclusions énoncées dans cette Section 7 (Limitation de responsabilité) s'appliquent sous réserve qu'elles ne soient pas interdites par une loi locale à laquelle il ne peut être dérogé contractuellement. + +7.1 Cas pour lesquels IBM peut être responsable + +Dans certaines circonstances, le Détenteur de la Licence peut être en droit, en raison d'un manquement de la part d'IBM ou d'une autre forme de responsabilité, de réclamer des dommages-intérêts à IBM. Quel que soit le fondement de l'action que le Détenteur de la Licence engage contre IBM (notamment pour violation d'une condition essentielle du présent Contrat, négligence, tromperie ou autre faute contractuelle), la responsabilité d'IBM vis-à-vis de l'ensemble des réclamations découlant de ou liés à chaque Logiciel ou découlant de quelque autre manière du présent Contrat sera limitée au montant 1) des dommages corporels (y compris le décès) et des dommages aux biens matériels, mobiliers et immobiliers ; et 2) tout autre dommage direct et réel plafonné à un montant total de 10 000 U.S. dollars (ou sa contre-valeur en monnaie locale). + +Cette limite s'applique également aux développeurs et fournisseurs d'un Logiciel IBM. C'est le maximum pour lequel IBM, ses développeurs de logiciels et ses sous-traitants sont collectivement responsables. + +7.2 Cas pour lesquels IBM n'est pas responsable + +IBM, SES DÉVELOPPEURS OU FOURNISSEURS NE PEUVENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES SUIVANTS, ET CE, MÊME S'ILS ONT ÉTÉ INFORMÉS DE LEUR POSSIBLE SURVENANCE : + +a. PERTE OU DÉTÉRIORATION DE VOS DONNÉES ; + +b. PRÉJUDICES MORAUX, ACCESSOIRES OU INDIRECTS ; OU + +c. PERTE DE BÉNÉFICE, D'ACTIVITÉ COMMERCIALE, DE REVENU, DE CLIENTÈLE, OU D'ÉCONOMIES ESCOMPTÉES. + +8. Vérification de Conformité + +Dans le contexte de cette section 8 (Vérification de Conformité), le terme "Dispositions du Logiciel d'évaluation" désigne 1) le présent Contrat ainsi que les avenants et les documents de transaction applicables fournis par IBM ; et 2) les politiques d'IBM en matière de logiciels pouvant figurer sur le site Internet IBM Software Policy (www.ibm.com/softwarepolicies), y compris, et de façon non limitative, les règles en matière de sauvegarde, de tarification et de migration. + +Les droits et obligations décrits dans cette section 8 demeurent en vigueur pendant toute la durée où le Logiciel a été concédé au Détenteur de la Licence, ainsi que pendant les deux (2) années qui suivent cette période. + +8.1 Processus de vérification + +Le Détenteur de la Licence s'engage à créer, conserver et fournir à IBM et ses auditeurs tous les enregistrements, les sorties d'outils système et toute autre information système exacts que ce soit sur papier ou sous forme électronique, afin de démontrer à IBM que l'utilisation que le Détenteur de la Licence fait de tous les Logiciels est conforme aux Dispositions du Logiciel d'évaluation, y compris, et de façon non limitative, les dispositions d'IBM applicables tant à la licence qu'aux conditions d'éligibilité à certaines tarifications. Le Détenteur de la Licence sera chargé de 1) s'assurer qu'il ne dépasse pas le niveau d'Utilisation Autorisée qui lui a été accordé ; et de 2) rester en conformité avec les Dispositions du Logiciel d'évaluation. + +Moyennant un préavis de 30 jours, IBM se réserve le droit de vérifier que le Détenteur de la Licence se conforme aux Dispositions du Logiciel d'évaluation dans chacun des sites et pour tous les environnements où le Détenteur de la Licence utilise (à n'importe quelle fin) les Logiciels couverts par les Dispositions du Logiciel d'évaluation. Ces vérifications seront effectuées de façon à gêner le moins possible les activités du Détenteur de la Licence. En outre, elles pourront être réalisées dans les locaux du Détenteur de la Licence durant les heures normales de travail. Pour ce faire, IBM pourra utiliser un auditeur extérieur, sous réserve qu'un accord de confidentialité ait été signé entre IBM et cet auditeur. + +8.2 Résolution + +À l'issue desdites vérifications, IBM indiquera par écrit au Détenteur de la Licence s'il a utilisé le Logiciel au-delà du niveau d'Utilisation Autorisée qui lui a été accordé ou s'il est au contraire en conformité avec les Dispositions du Logiciel d'évaluation. Le Détenteur de la Licence s'engage à régler dans les plus brefs délais à IBM les frais qui pourraient lui être imputés par IBM dans une facture pour 1) toute utilisation du Logiciel au-delà du niveau d'Utilisation Autorisée qui lui a été accordé ; 2) prendre en charge une telle utilisation excessive pour la durée la plus courte d'une telle utilisation ou pour deux (2) années ; et 3) tous les frais supplémentaires et obligations de paiement qu'il pourrait être tenu de respecter à l'égard de ce contrôle. + +9. Mentions relatives au code tiers + +Le Logiciel peut inclure du code tiers qu'IBM, et non pas la partie tierce, concède sous licence au Détenteur de la Licence dans le cadre du présent Contrat. Si le code tiers est accompagné de mentions spécifiques ("Mentions relatives au code tiers"), elles sont uniquement indiquées à titre de référence pour le Détenteur de la Licence. Ces mentions peuvent résider dans le ou les fichiers NOTICES du Logiciel. Les Mentions relatives au code tiers contiennent des instructions expliquant comment obtenir le code source de certains codes tiers. Si IBM qualifie le code tiers comme étant un "Code tiers modifiable" dans les Mentions relatives au code tiers, elle autorise le Détenteur de la Licence à 1) modifier le Code tiers modifiable ; et à 2) faire de l'ingénierie inverse sur les modules du Logiciel qui sont directement liés au Code tiers modifiable mais dans le seul but de déboguer les modifications que le Détenteur de la Licence a apportées audit code tiers. Si des obligations de service et de support incombent à IBM, elles ne s'appliquent qu'au Logiciel non modifié. + +10. Dispositions générales + +a. Le présent Contrat ne porte atteinte à aucune des dispositions légales d'ordre public relatives aux droits des consommateurs. + +b. Si l'une des dispositions du présent Contrat est considérée comme nulle ou inapplicable, elle n'entraînera pas la nullité des autres dispositions. + +c. Le Détenteur de la Licence n'a pas le droit d'exporter le Logiciel. + +d. Le Détenteur de la Licence autorise IBM et ses filiales (ainsi que ses ayants droit et cessionnaires, sous-traitants et Partenaires commerciaux IBM) à stocker et à utiliser les coordonnées des contacts professionnels du Détenteur de la Licence à l'endroit où ils font des affaires, en relation avec les produits et services IBM, ou le bon fonctionnement des relations d'affaires entre IBM et le Détenteur de la Licence. + +e. Avant de formuler une réclamation, chacune des parties accordera à l'autre un délai raisonnable pour remplir ses obligations au titre du présent Contrat. Les deux parties mettront en oeuvre tous les efforts raisonnables afin de résoudre les litiges, désaccords ou réclamations pouvant les opposer au titre du présent Contrat. + +f. Sauf disposition légale ou réglementaire contraire à laquelle il ne peut être dérogé contractuellement : 1) aucune des parties n'intentera d'action en justice, sous quelque forme que ce soit, à l'égard d'une réclamation découlant du ou liée au présent Contrat plus de deux ans après l'apparition de son fait générateur ; et 2) à l'expiration de ladite période, toute réclamation et tout droit applicable lié à ladite revendication seront déclarés caducs. + +g. Ni le Détenteur de la Licence, ni IBM ne sera responsable d'un manquement à ses obligations si un tel manquement résulte d'un cas de force majeure. + +h. Le présent Contrat ne crée aucun droit et ne contient aucune stipulation pour autrui au profit d'un tiers. En outre, IBM ne sera pas tenue responsable des réclamations émanant de tiers à l'encontre du Détenteur de la Licence, sauf disposition contraire dans la sous-section 7.1 (Cas pour lesquels IBM peut être responsable), allant au-delà des dommages corporels (y compris le décès) ou des dommages aux biens matériels, mobiliers et immobiliers, pour lesquels IBM est légalement responsable envers ledit tiers. + +i. En concluant le présent Contrat, les parties renoncent à tout engagement non expressément prévu dans le présent Contrat, y compris, et de façon non limitative, toute déclaration concernant 1) les performances ou le fonctionnement du Logiciel, autre que les garanties énoncées dans l'Article 5 (Exclusion de garantie) ci-dessus ; 2) les expériences et recommandations de parties tierces ; ou 3) les résultats ou économies que le Détenteur de la Licence pourrait obtenir. + +j. IBM a signé des contrats avec certaines entités commerciales ("Partenaires Commerciaux IBM") pour promouvoir, commercialiser et fournir certains Logiciels. Les Partenaires commerciaux IBM restent indépendants et distincts d'IBM. IBM n'est pas responsable des actions ou déclarations faites par les Partenaires commerciaux IBM, ni des obligations qu'ils ont vis-à-vis du Détenteur de la Licence. + +k. Les dispositions d'indemnisation au titre des licences et de la propriété intellectuelle figurant dans les accords éventuellement conclus entre IBM et le Détenteur de la Licence (comme le Livret contractuel IBM, par exemple) ne s'appliquent pas aux licences de Logiciel qui sont concédées dans le présent Contrat. + +11. Étendue géographique et droit applicable + +11.1 Droit applicable + +Les parties acceptent que soient appliquées les lois du pays où le Détenteur de la Licence a acquis la licence de Logiciel pour régir, interpréter et faire respecter les droits, devoirs et obligations d'IBM et du Détenteur de la Licence découlant, directement ou indirectement, de l'objet du présent Contrat, sans donner effet aux principes de conflit de lois. + +La Convention des Nations Unies sur les contrats régissant le Commerce International de Biens ne s'applique pas. + +11.2 Juridiction compétente + +Tous les droits, devoirs et obligations des parties sont soumis aux tribunaux du pays dans lequel le Détenteur de la Licence a acquis la licence du Logiciel. + +Chapitre 2 - Dispositions Nationales Particulières + +Pour les licences concédées dans les pays mentionnés ci-dessous, les dispositions suivantes remplacent ou modifient celles stipulées dans le Chapitre 1. Toutes les dispositions du Chapitre 1 qui n'ont pas été modifiées par les dispositions ci-dessous restent inchangées et en vigueur. Le présent Chapitre 2 est structuré comme suit : + +* Amendements applicables à plusieurs pays et relatifs au Chapitre 1, Section 11 (Droit applicable et juridiction compétente) ; + +* Amendements applicables aux pays d'Amérique et relatifs à d'autres dispositions du Contrat ; et + +* Amendements applicables aux pays d'Europe, du Moyen-Orient et d'Afrique et relatifs à d'autres dispositions du Contrat. + +Amendements applicables à plusieurs pays et relatifs au Chapitre 1, Section 11 (Droit applicable et juridiction compétente) + +11.1 Droit applicable + +La mention "les lois du pays où le Détenteur de la Licence a acquis la licence de Logiciel" dans le premier paragraphe de la section 11.1 Droit applicable est remplacée par les phrases suivantes dans les pays suivants : + +AMÉRIQUES + +(1) au Canada : les lois en vigueur dans la Province de l'Ontario ; + +(2) à Saint-Martin : les lois en vigueur dans l'État de New York aux États-Unis ; + +EUROPE, MOYEN-ORIENT, AFRIQUE + +(3) au Bénin, au Burkina Faso, au Cameroun, en République centrafricaine, au Tchad, aux Comores, au Congo, à Djibouti, en République démocratique du Congo, en Guinée équatoriale, en Guyane française, en Polynésie française, au Gabon, en Guinée, en Côte d'Ivoire, à Madagascar, au Mali, à Mayotte, en Nouvelle-Calédonie, au Niger, à la Réunion, au Sénégal, au Togo, en Tunisie et à Wallis et Futuna : les lois en vigueur en France. + +11.2 Juridiction compétente + +Le paragraphe suivant s'applique à la juridiction des pays identifiés ci-dessous et remplace la Sous-section 11.2 (Juridiction) : + +Tous les droits, devoirs et obligations des parties sont soumis aux tribunaux du pays dans lequel le Détenteur de la Licence a acquis la licence du Logiciel, à l'exception des pays identifiés ci-dessous où tout conflit résultant du ou relatif au présent Contrat, y compris en référé, sera de la compétence exclusive des tribunaux suivants : + +EUROPE, MOYEN-ORIENT, AFRIQUE + +au Bénin, au Burkina Faso, au Cameroun, en République centrafricaine, au Tchad, aux Comores, au Congo, à Djibouti, en République démocratique du Congo, en Guinée équatoriale, en France, en Guyane française, en Polynésie française, au Gabon, en Guinée, en Côte d'Ivoire, à Madagascar, au Mali, à Mayotte, à Monaco, au Maroc, en Nouvelle-Calédonie, au Niger, à la Réunion, au Sénégal, au Togo, en Tunisie et à Wallis et Futuna : Tribunal de Commerce de Paris. + +AMENDEMENTS APPLICABLES AUX PAYS D'AMÉRIQUE + +CANADA + +7.1 Cas pour lesquels IBM peut être responsable + +Le paragraphe suivant remplace l'alinéa 1 dans le premier paragraphe de la présente Sous-section 7.1 (Cas pour lesquels IBM peut être responsable) : + +1) au montant des dommages corporels (y compris le décès) et des dégâts matériels aux biens matériels, mobiliers et immobiliers causés par une négligence d'IBM, et + +10. Dispositions générales + +Le paragraphe suivant remplace l'alinéa 10.h : + +h. Le présent Contrat ne crée aucun droit et ne contient aucune stipulation pour autrui au profit d'un tiers. En outre, IBM ne sera pas tenue responsable des réclamations émanant de tiers à l'encontre du Détenteur de la Licence sauf, tel qu'il est prévu dans l'article "Limitation de responsabilité" ci-dessus, au titre de dommages corporels (y compris le décès) et dégâts matériels aux biens matériels, mobiliers et immobiliers, causés par une négligence d'IBM pour laquelle IBM est légalement responsable envers ledit tiers. + +Le paragraphe suivant est ajouté en tant qu'alinéa 10.l : + +l. Dans le contexte de l'alinéa 10.l, le terme "Données personnelles" désigne les informations relatives à une personne identifiée ou identifiable qui ont été communiquées par l'une des parties, son personnel ou quelqu'un d'autre à l'autre partie dans le cadre du présent Contrat. Les dispositions suivantes s'appliquent si l'une des parties communique les Données personnelles à l'autre partie : + +(1) Dispositions générales + +(a) Chacune des parties est tenue de se conformer aux obligations ayant trait aux Données personnelles au titre de la réglementation canadienne applicable en matière de confidentialité des données (la "Réglementation"). + +(b) Aucune des parties ne demandera davantage de Données personnelles qu'elle n'en a besoin au titre du ou des motifs pour lequel ou pour lesquels ladite partie les a demandées. Bien entendu, le ou les motifs de la demande pour lequel ou pour lesquels ladite partie demande les Données personnelles devra ou devront être raisonnable(s). Chacune des parties accepte à l'avance le type de Données personnelles qui doivent être mises à disposition des parties. + +(2) Dispositifs de sécurité + +(a) Chacune des parties reconnaît être la seule responsable de la détermination et de la communication à l'autre partie des dispositifs de sécurité technologiques, physiques et organisationnels adéquats nécessaires au vu de la protection des Données personnelles. + +(b) Chacune des parties devra s'assurer que les Données personnelles sont protégées conformément aux dispositifs de sécurité communiqués et acceptés par l'autre partie. + +(c) Chacune des parties devra s'assurer que tout tiers à qui les Données personnelles sont transférées se conforme aux dispositions applicables stipulées dans la présente section. + +(d) Si des services supplémentaires ou différents sont nécessaires pour rester en conformité avec la réglementation, lesdits services seront considérés comme une demande de nouveaux services. + +(3) Utilisation + +Chacune des parties reconnaît que les Données personnelles seront exclusivement utilisées, consultées, gérées, transférées, communiqués à des tiers ou traitées d'une quelconque façon au titre du ou des motifs pour lequel ou pour lesquels elles ont été mises à disposition. + +(4) Demandes d'accès + +(a) Chacune des parties s'engage à coopérer de manière raisonnable avec l'autre partie dans le cadre des demandes d'accès ou de modification des Données personnelles. + +(b) Chacune des parties s'engage à rembourser à l'autre partie les redevances raisonnables encourues au titre de l'assistance fournie à l'égard de l'une ou l'autre des parties. + +(c) Chacune des parties s'engage à modifier les Données personnelles uniquement à la réception des instructions où l'autre partie ou son personnel l'invite à le faire. + +(5) Conservation + +Sauf instruction contraire par l'autre partie ou son personnel ou sous couvert de la réglementation, chacune des parties détruira ou renverra rapidement à l'autre partie l'ensemble des Données personnelles qui ne sont plus nécessaires au titre du ou des motifs pour lequel ou pour lesquels elles ont été mises à disposition. + +(6) Organismes publics soumis à la réglementation en matière de confidentialité du secteur public + +Pour les Détenteurs de licence ayant la qualité d'organismes publics soumis à la réglementation en matière de confidentialité du secteur public, le présent alinéa 10.l ne s'applique qu'aux Données personnelles mises à la disposition du Détenteur de la Licence dans le cadre du présent Contrat. En outre, les obligations stipulées dans la présente section ne s'appliquent qu'au Détenteur de la Licence, à l'exception des sections suivantes : 1) la section (2)(a) ne concerne qu'IBM ; 2) les sections (1)(a) et (4)(a) concernent les deux parties ; puis 3) la section (4)(b) et la dernière phrase de la section (1)(b) ne s'appliquent pas. + +AMENDEMENTS APPLICABLES AUX PAYS D'EUROPE, DU MOYEN-ORIENT ET D'AFRIQUE (EMEA) + +ÉTATS MEMBRES DE L'UNION EUROPÉENNE + +5. Exclusion de garantie + +Le paragraphe suivant est ajouté à la Section 5 (Exclusion de garantie) : + +Dans l'Union européenne ("UE"), les consommateurs disposent de droits selon la loi nationale en vigueur régissant la vente de biens de consommation. Ces droits ne sont pas affectés par les dispositions stipulées dans la présente Section 5 intitulée "Exclusion de garantie". + +ÉTATS MEMBRES DE L'UNION EUROPÉENNE ET PAYS IDENTIFIÉS CI-DESSOUS + +La Suisse et tout autre pays européen ayant mis en oeuvre une réglementation locale en matière de confidentialité ou de protection des données de manière similaire au modèle de l'Union européenne. + +10. Dispositions générales + +Le paragraphe suivant remplace l'alinéa 10.d : + +(1) Définitions - Les autres définitions suivantes s'appliquent dans le cadre du présent alinéa 10.d : + +(a) Le terme Coordonnées des Contacts Professionnels désigne les coordonnées des contacts professionnels communiquées à IBM par le Détenteur de la Licence, notamment le nom, l'intitulé du poste, l'adresse et le numéro de téléphone de bureau, mais aussi l'adresse électronique des employés et des sous-traitants du Détenteur de la Licence. Pour l'Autriche, l'Italie et la Suisse, les Coordonnées des Contacts Professionnels recouvrent également les informations relatives au Détenteur de la Licence et à ses prestataires en tant que personnes morales (notamment les données de chiffre d'affaires ainsi que diverses informations de transaction du Détenteur de la Licence). + +(b) Le terme Personnel du Contact Professionnel désigne les employés et les prestataires du Détenteur de la Licence auxquels se rapportent les Coordonnées des Contacts Professionnels. + +(c) Le terme Autorité de Protection des Données désigne l'autorité établie par la Réglementation relative à la Protection des Données et aux Communications Électroniques dans le pays concerné ou, dans le cas des pays non membres de l'Union Européenne, l'autorité chargée de superviser la protection des données personnelles dans ledit pays, ou (pour l'une des dispositions susmentionnées) tout ayant droit dûment désigné à cet égard. + +(d) Le terme Réglementation relative à la Protection des Données et aux Communications Électroniques désigne (i) la réglementation locale applicable en vigueur mettant en oeuvre les exigences de la Directive Européenne 95/46/CE (concernant la protection des personnes vis-à-vis du traitement des données personnelles et de la libre circulation desdites données) ainsi que de la Directive Européenne 2002/58/CE (concernant le traitement des données personnelles et la protection de la confidentialité dans le secteur des communications électroniques) ; ou (ii) dans le cas des pays non membres de l'Union européenne, la réglementation et/ou les lois passées dans le pays concerné vis-à-vis de la protection des données personnelles ainsi que la réglementation sur les communications électroniques impliquant des Données personnelles, notamment (pour l'une des dispositions susmentionnées) tout remplacement ou toute modification légale desdites informations. + +(e) Le terme Groupe IBM désigne la société International Business Machines Corporation basée à Armonk dans l'État de New York aux États-Unis, ses filiales, ainsi que ses Partenaires commerciaux et sous-traitants associés. + +(2) Le Détenteur de la Licence autorise IBM à : + +(a) traiter et utiliser les Coordonnées des Contacts Professionnels au sein du Groupe IBM aux fins de support du Détenteur de la Licence, notamment pour la fourniture de services de support, ainsi que dans le but de renforcer les relations commerciales unissant le Détenteur de la Licence et le Groupe IBM, y compris, et de façon non limitative, dans le but de contacter le Personnel du Contact Professionnel (par e-mail ou un autre moyen) et de commercialiser les produits et services du Groupe IBM ("Objet Spécifié") ; et à + +(b) communiquer les Coordonnées des Contacts Professionnels à d'autres membres du Groupe IBM uniquement dans le cadre de l'Objet Spécifié. + +(3) IBM s'engage à traiter toutes les Coordonnées des Contacts Professionnels conformément à la Réglementation relative à la Protection des Données et aux Communications Électroniques et à les utiliser uniquement dans le cadre de l'Objet Spécifié. + +(4) Dans les limites requises par la Réglementation relative à la Protection des Données et aux Communications Électroniques, le Détenteur de la Licence déclare qu'il (a) a obtenu (ou va obtenir) l'accord des (et a transmis (ou va transmettre) les avis aux) Contacts Professionnels - ledit accord étant nécessaire pour permettre au Groupe IBM de traiter et d'utiliser les Coordonnées des Contacts Professionnels dans le cadre de l'Objet Spécifié. + +(5) Le Détenteur de la Licence autorise IBM à communiquer les Coordonnées des Contacts Professionnels en dehors de l'Espace Économique Européen, sous réserve qu'elles soient transférées conformément aux dispositions contractuelles approuvées par l'Autorité de Protection des Données ou que leur transfert soit autorisé d'une quelconque façon par la Réglementation relative à la Protection des Données et aux Communications Électroniques. + +BELGIQUE, FRANCE ET LUXEMBOURG + +7. Limitation de responsabilité + +Le paragraphe suivant remplace intégralement les dispositions de cet Article 7 (Limitation de responsabilité) : + +Sauf autre disposition d'ordre publique : + +7.1 Cas pour lesquels IBM peut être responsable + +L'entière responsabilité d'IBM relative à l'ensemble agrégé des réclamations et à tout dommage et perte pouvant survenir dans le cadre de l'exercice de ses obligations liées directement ou indirectement au présent Contrat ou résultant d'autres causes liées au présent Contrat, est limitée au dédommagement des seuls dommages et pertes prouvés et résultant immédiatement et directement du manquement à ces obligations (en cas de faute d'IBM) ou d'une telle cause, pour un montant maximum ne pouvant au aucun cas excéder 500 000 euros. + +La limitation sus-mentionnée ne s'applique pas aux dommages corporels (y compris le décès) et dommages aux biens matériels, mobiliers et immobiliers, pour lesquels IBM est légalement responsable. + +7.2 Cas pour lesquels IBM n'est pas responsable + +IBM ET SES DÉVELOPPEURS NE PEUVENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES SUIVANTS, ET CE, MÊME S'ILS ONT ÉTÉ INFORMÉS DE LEUR POSSIBLE SURVENANCE : 1) PERTE OU DÉTÉRIORATION DE DONNÉES ; 2) DOMMAGES DIRECTS, INDIRECTS, DOMMAGES INTÉRÊTS OU PRÉJUDICES FINANCIERS INDIRECTS ; ET/OU 3) PERTE DE PROFITS, PRÉJUDICE COMMERCIAL, PERTE DE CHIFFRE D'AFFAIRES, PERTE DE CLIENTÈLE, OU PERTE D'ÉCONOMIES ESCOMPTÉES MÊME SI CEUX-CI SONT LA CONSÉQUENCE IMMÉDIATE DE L'ÉVÉNEMENT À L'ORIGINE DES DOMMAGES. + +7.3 Fournisseurs et Développeurs de Logiciel + +Les limitations et exclusions convenues ci-dessus s'appliquent non seulement aux activités d'IBM mais également à celles de ses fournisseurs et ses développeurs, et définissent le montant maximum pour lequel IBM, ses fournisseurs et ses développeurs sont collectivement responsables. + +Z125-5543-05 (07/2011) + + +Conditions Internationales d'Utilisation de Logiciel + +Chapitre 1 - Dispositions Générales + +EN TÉLÉCHARGEANT, EN INSTALLANT OU EN COPIANT LE LOGICIEL, EN CLIQUANT SUR LE BOUTON "ACCEPTER" OU EN ACCÉDANT AU LOGICIEL, LE DÉTENTEUR DE LA LICENCE ACCEPTE LES DISPOSITIONS DU PRÉSENT CONTRAT. SI VOUS ACCEPTEZ LES PRÉSENTES DISPOSITIONS POUR LE COMPTE DU DÉTENTEUR DE LA LICENCE, VOUS CERTIFIEZ AVOIR QUALITÉ POUR ENGAGER LE DÉTENTEUR DE LA LICENCE À RESPECTER LESDITES DISPOSITIONS. SI VOUS N'ACCEPTEZ PAS CES DISPOSITIONS, + +* NE TÉLÉCHARGEZ PAS, N'INSTALLEZ PAS, NE COPIEZ PAS, N'ACCÉDEZ PAS, NE CLIQUEZ PAS SUR LE BOUTON "ACCEPTER" ET N'UTILISEZ PAS LE LOGICIEL ; ET + +* DEMANDEZ À ÊTRE REMBOURSÉ DE LA SOMME QUE VOUS AVEZ PAYÉE À LA PERSONNE AUPRÈS DE LAQUELLE VOUS AVEZ ACQUIS LE LOGICIEL, EN LUI RETOURNANT, SANS DÉLAI, LES SUPPORTS NON UTILISÉS, LA DOCUMENTATION, AINSI QUE L'AUTORISATION D'UTILISATION DU LOGICIEL. SI VOUS AVEZ TÉLÉCHARGÉ LE LOGICIEL, DÉTRUISEZ-EN TOUS LES EXEMPLAIRES. + +1. Définitions + +"Utilisation Autorisée" désigne les limites d'autorisation concédées au Détenteur de la Licence pour exécuter le Logiciel. Ce niveau peut être calculé en fonction du nombre d'utilisateurs, du nombre de millions d'unités de service ("MSU"), du nombre d'Unités de Valeur par Coeur Processeur ("PVU") ou d'un autre niveau d'utilisation spécifié par IBM. + +"IBM" désigne la compagnie "International Business Machines Corporation" ou l'une de ses filiales. + +"Informations sur la Licence" ("LI") désigne un document qui contient des informations et des dispositions complémentaires spécifiques concernant un Logiciel donné. Les Informations sur la Licence sont disponibles à l'adresse suivante : www.ibm.com/software/sla. Elles peuvent aussi se trouver dans le répertoire du Logiciel accessible par une commande système ou dans une brochure livrée avec le Logiciel. + +"Logiciel" désigne les éléments suivants, y compris l'original et toutes les copies partielles ou totales de chacun des éléments : 1) instructions et données lisibles par machine ; 2) composants, fichiers et modules ; 3) contenus audiovisuels (images, textes, enregistrements ou dessins, par exemple) ; et 4) éléments sous licence associés (clés et documentation, par exemple). + +"Autorisation d'Utilisation du Logiciel" constitue la preuve que le Détenteur de la Licence est autorisé à utiliser le Logiciel. Il prouve également l'éligibilité du Détenteur de la Licence aux services prévus par la garantie, aux prix applicables pour les mises à jour ultérieures du Logiciel et à d'éventuelles offres spéciales ou promotionnelles. Si IBM ne fournit pas au Détenteur de la Licence une Autorisation d'Utilisation du Logiciel, IBM peut cependant accepter l'original de la facture dont le Détenteur de la Licence s'est acquitté ou toute autre preuve d'achat émanant de la personne (IBM ou l'un de ses revendeurs) auprès de laquelle le Détenteur de la Licence a acquis le Logiciel, sous réserve que ledit document indique le nom du Logiciel ainsi que l'Utilisation Autorisée acquise. + +"Période de garantie" couvre une (1) année, à compter de la date à laquelle la licence a été concédée au Détenteur de la Licence initiale. + +2. Structure du Contrat + +Le présent Contrat est constitué du présent document qui comprend un premier chapitre intitulé Chapitre 1 - Dispositions Générales et éventuellement un second chapitre intitulé Chapitre 2 - Dispositions Nationales Particulières, du document intitulé Informations sur la Licence et de l'Autorisation d'Utilisation du Logiciel. Le présent Contrat exprime l'intégralité de l'accord intervenu entre le Détenteur de la Licence et IBM en ce qui concerne l'utilisation du Logiciel. Il prévaut sur tout autre accord ou communication antérieur, oral ou écrit, intervenu entre le Détenteur de la Licence et IBM concernant l'utilisation du Logiciel par le Détenteur de la Licence. Les dispositions du second chapitre peuvent remplacer ou modifier celles du premier. En cas de contradiction entre les dispositions, le document Informations sur la Licence prévaut sur les deux chapitres en question. + +3. Concession de licences + +Le Logiciel est la propriété d'IBM ou d'un fournisseur d'IBM et est protégé par les droits d'auteur. Le Logiciel est concédé sous licence et non vendu. + +IBM concède au Détenteur de la Licence une licence d'utilisation non exclusive l'autorisant à 1) utiliser le Logiciel dans les limites d'Utilisation Autorisée indiquées dans l'Autorisation d'Utilisation du Logiciel ; 2) effectuer et installer des copies du Logiciel pour permettre une telle utilisation ; et 3) effectuer une copie de sauvegarde, l'ensemble étant sous réserve que : + +a. le Détenteur de la Licence ait acquis le Logiciel légalement et respecte les dispositions du présent Contrat ; + +b. la copie de sauvegarde n'est pas exécutée sauf si le Logiciel à l'origine de cette copie de sauvegarde ne peut pas être exécuté ; + +c. le Détenteur de la Licence reproduise toutes les mentions relatives aux droits d'auteur et toute autre mention de propriété sur chaque copie totale ou partielle du Logiciel ; + +d. le Détenteur de la Licence s'engage à ce que toute personne utilisant le Logiciel (que ce soit par le biais de son réseau privé ou d'un réseau public) 1) ne le fasse que pour son usage dans la limite des droits concédés et 2) conformément aux dispositions du présent Contrat ; + +e. le Détenteur de la Licence ne doit pas 1) utiliser, copier, modifier ou distribuer le Logiciel sauf mention contraire dans le présent Contrat ; 2) désassembler, décompiler, traduire de quelque façon que ce soit ou faire de l'ingénierie inverse vis-à-vis du Logiciel, à moins d'y avoir été expressément autorisé par une disposition légale d'ordre public ; 3) utiliser certains composants, fichiers, modules, contenus audiovisuels ou éléments associés concédés sous une licence distincte du Logiciel ; ou 4) concéder des sous-licences ou donner le Logiciel en location sous quelque forme que ce soit ; et + +f. si le Détenteur de la Licence se procure le Logiciel au titre d'un Logiciel requis, le Détenteur de la Licence utilise ledit Logiciel uniquement dans le but de pouvoir utiliser le Logiciel Principal et conformément aux limites d'utilisation de la licence du Logiciel Principal, ou, si le Détenteur de la Licence se procure le Logiciel au tire d'un Logiciel Principal, le Détenteur de la Licence utilise l'ensemble des Logiciels requis uniquement dans le but de pouvoir utiliser ledit Logiciel et conformément aux limites d'utilisation éventuellement définies dans le présent Contrat. Dans le contexte de l'alinéa "f", le terme "Logiciel requis" désigne un Logiciel rattaché à un autre Logiciel IBM ("Logiciel Principal") et identifié comme étant un Logiciel requis dans le document Informations sur la Licence du Logiciel Principal. Pour se procurer une licence distincte au titre d'un Logiciel requis sans ces restrictions, le Détenteur de la Licence doit s'adresser à la personne auprès de qui il a acquis le Logiciel requis. + +Le présent Contrat de licence s'applique à chaque exemplaire du Logiciel créé par le Détenteur de la Licence. + +3.1 Mises à jour logiciel, mises à jour et correctifs + +3.1.1 Mises à jour logiciel + +Si le Logiciel est remplacé par un Logiciel bénéficiant d'une mise à jour logiciel, la licence d'utilisation du Logiciel remplacé est immédiatement résiliée. + +3.1.2 Mises à jour et correctifs + +Lorsque le Détenteur de la Licence reçoit une mise à jour ou un correctif pour un Logiciel, il accepte toute disposition supplémentaire et différente applicable à ladite mise à jour ou audit correctif figurant dans le document Informations sur la Licence qui l'accompagne. Si aucune disposition supplémentaire ou différente n'accompagne la mise à jour ou le correctif, alors ceux-ci sont exclusivement soumis aux dispositions du présent Contrat. Si le Logiciel est remplacé par une mise à jour, le Détenteur de la Licence s'engage à cesser immédiatement d'utiliser le Logiciel remplacé. + +3.2 Licences à durée limitée + +Si IBM concède au Détenteur de la Licence, le Logiciel pour une durée limitée, la Licence est résiliée à l'issue de la durée limitée à moins que le Détenteur de la Licence et IBM acceptent mutuellement de la renouveler. + +3.3 Durée et résiliation du Contrat + +Le présent Contrat reste en vigueur jusqu'à la date de résiliation. + +IBM peut résilier la licence qui a été concédée au Détenteur de la Licence si ce dernier ne respecte pas les dispositions du présent Contrat. + +Si la licence est résiliée par l'une des parties pour une quelconque raison, le Détenteur de la Licence s'engage à cesser d'utiliser et à détruire immédiatement tous les exemplaires du Logiciel créés par le Détenteur de la Licence. Toute disposition du présent Contrat qui, de par sa nature, s'exerce au-delà de la date de résiliation est prorogée jusqu'à sa complète exécution, et s'applique aux ayants droit et cessionnaires respectifs des deux parties. + +4. Prix et redevances + +Les redevances sont fonction du niveau d'Utilisation Autorisée acquis, tel que précisé dans l'Autorisation d'Utilisation du Logiciel. Sauf indication contraire dans le présent Contrat, IBM n'accordera aucun crédit ou remboursement concernant les redevances déjà exigibles ou payées. + +Si le Détenteur de la Licence souhaite étendre son niveau d'Utilisation Autorisée, il devra en informer IBM ou l'un de ses revendeurs agréés à l'avance et s'acquitter des redevances applicables. + +5. Taxes + +Le Détenteur de la Licence s'engage à payer toutes taxes, contributions ou droits imposés par toute autorité vis-à-vis du Logiciel, à l'exception de ceux qui seraient basés sur le revenu net d'IBM, et à régler le montant spécifié dans la facture ou à nous fournir le document d'exonération. Toute taxe relative au bien mobilier pour le Logiciel incombe au Détenteur de la Licence à partir de la date à laquelle il l'a acquis. Le Détenteur de la Licence s'engage à payer toutes taxes, contributions ou droits imposés par toute autorité vis-à-vis de l'importation ou de l'exportation, de la cession, de l'accès ou de l'utilisation du Logiciel en dehors du pays dans lequel le Détenteur de la Licence initial a acquis la licence d'utilisation du Logiciel. + +6. Garantie "satisfait ou remboursé" + +Si pour une raison quelconque, le Détenteur de la Licence n'était pas satisfait du Logiciel et qu'il est le détenteur initial de la licence, il peut résilier le Contrat et obtenir le remboursement du montant qu'il a payé pour le Logiciel, si, dans les 30 jours suivant la date à laquelle il a reçu l'Autorisation d'Utilisation du Logiciel, le Détenteur de la Licence retourne le Logiciel ainsi que son Autorisation d'Utilisation du Logiciel à la personne auprès de laquelle il a acquis le Logiciel. Dans le cas d'une licence à durée limitée renouvelable, le Détenteur de la Licence peut obtenir le remboursement du montant payé s'il retourne le Logiciel ainsi que son Autorisation d'Utilisation du Logiciel dans les 30 premiers jours de la période initiale. Si le Détenteur de la Licence a téléchargé le Logiciel, il doit prendre contact avec la personne auprès de laquelle il l'a acquis pour savoir comment en obtenir le remboursement. + +7. Cession du Logiciel + +Le Détenteur de la Licence peut céder le Logiciel ainsi que ses droits et obligations au titre de la licence à un tiers, uniquement si ce dernier accepte de respecter les dispositions du présent Contrat. Si la licence est résiliée par l'une des parties pour une quelconque raison, le Détenteur de la Licence n'a pas le droit de céder le Logiciel à une autre partie. Le Détenteur de la Licence n'a pas le droit de céder une partie du 1) Logiciel ou du 2) niveau d'Utilisation Autorisée dudit Logiciel. Si le Détenteur de la Licence cède le Logiciel à une autre partie, il doit également lui remettre un exemplaire papier du présent Contrat, y compris le document Informations sur la Licence ainsi que l'Autorisation d'Utilisation du Logiciel. La licence est résiliée immédiatement après la cession du Logiciel. + +8. Garanties et exclusions + +8.1 Limitation de garantie + +Le Logiciel est garanti par IBM comme conforme à ses spécifications à condition d'être utilisé dans l'environnement opérationnel spécifié. Les spécifications du Logiciel et les informations relatives à l'Environnement Opérationnel Spécifié se trouvent dans la documentation fournie avec le Logiciel (fichier "README", par exemple) ou dans tout autre document d'information publié par IBM (lettre d'annonce, par exemple). Sauf disposition légale ou réglementaire contraire à laquelle il ne peut être dérogé contractuellement, le Détenteur de la Licence reconnaît que ladite documentation et que le contenu d'autres Logiciels puissent n'être rédigés qu'en anglais. + +La garantie s'applique uniquement à la partie non modifiée du Logiciel. IBM ne garantit pas que l'utilisation du Logiciel sera ininterrompue ou exempte d'erreurs, ni que tous les défauts seront corrigés par IBM. Le Détenteur de la Licence est responsable des résultats obtenus dans le cadre de l'utilisation du Logiciel. + +Au cours de la période de garantie, IBM accorde au Détenteur de la Licence un accès gratuit aux bases de données IBM contenant des informations sur les défauts identifiés du Logiciel, les procédés de correction, de neutralisation ou de contournement de ceux-ci. Pour plus d'informations, veuillez consulter le Guide du Support Logiciel IBM (IBM Software Support Handbook) à l'adresse www.ibm.com/software/support. + +Si le Logiciel ne fonctionne pas comme garanti pendant la Période de Garantie et que l'incident ne peut être résolu à partir des informations disponibles dans les bases de données IBM, le Détenteur de la Licence peut rendre le Logiciel ainsi que son Autorisation d'Utilisation du Logiciel à la personne (IBM ou son revendeur) auprès de laquelle il a acquis le Logiciel afin d'obtenir le remboursement du montant qu'il a payé. La licence est résiliée immédiatement après le retour du Logiciel. Si le Détenteur de la Licence a téléchargé le Logiciel, il doit prendre contact avec la personne auprès de laquelle il l'a acquis pour savoir comment en obtenir le remboursement. + +8.2 Exclusions + +CES GARANTIES SONT LES SEULES GARANTIES AUXQUELLES LE DÉTENTEUR DE LA LICENCE PEUT PRÉTENDRE. ELLES REMPLACENT TOUTES AUTRES GARANTIES OU CONDITIONS, EXPLICITES OU IMPLICITES, Y COMPRIS, ET DE FAÇON NON LIMITATIVE, TOUTE GARANTIE OU CONDITION IMPLICITE DE QUALITÉ SATISFAISANTE, D'APTITUDE À L'EXÉCUTION D'UN TRAVAIL DONNÉ ET TOUTE GARANTIE OU CONDITION EN NONCONTREFAÇON. CERTAINS ÉTATS OU LÉGISLATIONS N'AUTORISENT PAS L'EXCLUSION DES GARANTIES EXPLICITES OU IMPLICITES, AUQUEL CAS L'EXCLUSION CI-DESSUS PEUT NE PAS ÊTRE APPLICABLE AU DÉTENTEUR DE LA LICENCE. ET LA DUREE DE CES GARANTIES SERA ALORS LIMITEE A LA PERIODE DE GARANTIE. PASSÉE CETTE PERIODE, AUCUNE GARANTIE NE S'APPLIQUERA. CERTAINS ÉTATS OU LÉGISLATIONS N'AUTORISENT PAS LES LIMITATIONS DE DURÉE DES GARANTIES IMPLICITES, AUQUEL CAS LA LIMITATION CI-DESSUS PEUT NE PAS ÊTRE APPLICABLE AU DÉTENTEUR DE LA LICENCE. + +CES GARANTIES CONFÈRENT AU DÉTENTEUR DE LA LICENCE DES DROITS SPÉCIFIQUES. IL EST POSSIBLE QUE LE DÉTENTEUR DE LA LICENCE DÉTIENNE D'AUTRES DROITS DONT LA NATURE VARIE SELON LA LÉGISLATION APPLICABLE. + +LES GARANTIES ÉNONCÉES DANS LE PRÉSENT ARTICLE 8 (GARANTIES ET EXCLUSIONS) SONT FOURNIES PAR IBM EXCLUSIVEMENT. NÉANMOINS, LES EXCLUSIONS ÉNONCÉES DANS CETTE SOUS-SECTION 8.2 (EXCLUSIONS) S'APPLIQUENT ÉGALEMENT AUX FOURNISSEURS DE CODE TIERS D'IBM. LES FOURNISSEURS FOURNISSENT LEDIT CODE SANS GARANTIE NI CONDITION D'AUCUNE SORTE. CE PARAGRAPHE N'ANNULE EN AUCUN CAS LES OBLIGATIONS DE GARANTIE QUI INCOMBENT À IBM AU TITRE DU PRÉSENT CONTRAT. + +9. Données et bases de données appartenant au Détenteur de la Licence + +Pour aider le Détenteur de la Licence à identifier la cause d'un problème lié au Logiciel, IBM peut demander à ce que le Détenteur de la Licence 1) autorise IBM à accéder à distance au système du Détenteur de la Licence ; ou 2) envoie les données système ou les informations du Détenteur de la Licence à IBM. Toutefois, IBM n'est pas tenue de fournir une telle assistance à moins qu'IBM et le Détenteur de la Licence en aient convenu autrement dans le cadre d'un accord distinct où IBM s'engage à fournir au Détenteur de la Licence une assistance de ce type, qui dépasse les obligations de garantie d'IBM au titre du présent Contrat. Dans tous les cas, IBM utilisera les informations concernant les erreurs et les problèmes dans le but d'améliorer ses produits et services, et de fournir des offres de support associées. Dans ce contexte, le Détenteur de la Licence autorise IBM à faire appel à des sous-traitants et des entités IBM (y compris dans un ou plusieurs pays autres que celui où réside le Détenteur de la Licence). + +Le Détenteur de la Licence sera responsable 1) des données et du contenu des bases de données que le Détenteur de la Licence mettra à la disposition d'IBM, 2) du choix et de la mise en oeuvre des procédures et des contrôles régissant l'accès, la sécurité, le chiffrement, l'utilisation ainsi que la transmission des données (notamment les données d'identification personnelle) ; et 3) de la sauvegarde et de la reprise des bases de données et des données éventuellement stockées. Le Détenteur de la Licence ne transmettra et ne fournira à IBM aucun accès à des informations d'identification personnelle, qu'elles soient sous la forme de données ou autre. En outre, il sera redevable des coûts raisonnables ainsi que des sommes qu'IBM pourrait subir au titre des informations fournies à IBM par erreur ou encore de la perte ou de la divulgation desdites informations par IBM, y compris celles découlant de réclamations émanant de tiers. + +10. Limitation de responsabilité + +Les limitations et exclusions énoncées dans cette Section 10 (Limitation de responsabilité) s'appliquent sous réserve qu'elles ne soient pas interdites par une loi locale à laquelle il ne peut être dérogé contractuellement. + +10.1 Cas pour lesquels IBM peut être responsable + +Dans certaines circonstances, le Détenteur de la Licence peut être en droit, en raison d'un manquement de la part d'IBM ou d'une autre forme de responsabilité, de réclamer des dommages-intérêts à IBM. Quel que soit le fondement de l'action que le Détenteur de la Licence engage contre IBM (notamment pour violation d'une condition essentielle de ce Contrat, négligence, tromperie ou autre faute contractuelle), la responsabilité d'IBM vis-à-vis de l'ensemble des réclamations découlant de ou liés à chaque Logiciel ou découlant de quelque autre manière du présent Contrat sera limitée au montant 1) des dommages corporels (y compris le décès) et des dommages aux biens matériels, mobiliers et immobiliers ; et 2) tout autre dommage direct et réel plafonné au montant des redevances (jusqu'à 12 mois de redevances si le Logiciel est concédé sous une licence à durée limitée), payées par le Détenteur de la Licence pour le Logiciel à l'origine de la réclamation. + +Cette limite s'applique également aux développeurs et fournisseurs d'un Logiciel IBM. C'est le maximum pour lequel IBM, ses développeurs de logiciels et ses sous-traitants sont collectivement responsables. + +10.2 Cas pour lesquels IBM n'est pas responsable + +IBM, SES DÉVELOPPEURS OU FOURNISSEURS NE PEUVENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES SUIVANTS, ET CE, MÊME S'ILS ONT ÉTÉ INFORMÉS DE LEUR POSSIBLE SURVENANCE : + +a. PERTE OU DÉTÉRIORATION DE VOS DONNÉES ; + +b. PRÉJUDICES MORAUX, ACCESSOIRES OU INDIRECTS ; OU + +c. PERTE DE BÉNÉFICE, D'ACTIVITÉ COMMERCIALE, DE REVENU, DE CLIENTÈLE OU D'ÉCONOMIES ESCOMPTÉES. + +11. Vérification de Conformité + +Dans le contexte de cette section 11 (Vérification de Conformité), le terme "Dispositions IPLA du Logiciel" désigne 1) le présent Contrat ainsi que les avenants et les documents de transaction applicables fournis par IBM ; et 2) les politiques d'IBM en matière de logiciels pouvant figurer sur le site Internet IBM Software Policy (www.ibm.com/softwarepolicies), y compris, mais sans que cela soit limitatif, les règles en matière de sauvegarde, de tarification et de migration. + +Les droits et obligations décrits dans cette section 11 demeurent en vigueur pendant toute la durée où le Logiciel a été concédé au Détenteur de la Licence, ainsi que pendant les deux (2) années qui suivent cette période. + +11.1 Processus de vérification + +Le Détenteur de la Licence s'engage à créer, conserver et fournir à IBM et ses auditeurs tous les enregistrements, les sorties d'outils système et toute autre information système exacts que ce soit sur papier ou sous forme électronique, afin de démontrer à IBM que l'utilisation que le Détenteur de la Licence fait de tous les Logiciels est conforme aux Dispositions IPLA du Logiciel, y compris, sans que cela soit limitatif, les dispositions d'IBM applicables tant à la licence qu'aux conditions d'éligibilité à certaines tarifications. Le Détenteur de la Licence sera chargé de 1) s'assurer qu'il ne dépasse pas le niveau d'Utilisation Autorisée qui lui a été accordé ; et de 2) rester en conformité avec les Dispositions IPLA du Logiciel. + +Moyennant un préavis de 30 jours, IBM se réserve le droit de vérifier que le Détenteur de la Licence se conforme aux Dispositions IPLA du Logiciel dans chacun des sites et pour tous les environnements où le Détenteur de la Licence utilise (à n'importe quelle fin) les Logiciels couverts par les Dispositions IPLA du Logiciel. Ces vérifications seront effectuées de façon à gêner le moins possible les activités du Détenteur de la Licence. En outre, elles pourront être réalisées dans les locaux du Détenteur de la Licence durant les heures normales de travail. Pour ce faire, IBM pourra utiliser un auditeur extérieur, sous réserve qu'un accord de confidentialité ait été signé entre IBM et cet auditeur. + +11.2 Résolution + +À l'issue desdites vérifications, IBM indiquera par écrit au Détenteur de la Licence s'il a utilisé le Logiciel au-delà du niveau d'Utilisation Autorisée qui lui a été accordé ou s'il est au contraire en conformité avec les Dispositions IPLA du Logiciel. Le Détenteur de la Licence s'engage à régler dans les plus brefs délais à IBM les frais qui pourraient lui être imputés par IBM dans une facture pour 1) toute utilisation du Logiciel au-delà du niveau d'Utilisation Autorisée qui lui a été accordé ; 2) prendre en charge une telle utilisation excessive pour la durée la plus courte d'une telle utilisation ou pour deux (2) années ; et 3) tous les frais supplémentaires et obligations de paiement qu'il pourrait être tenu de respecter à l'égard de ce contrôle. + +12. Mentions relatives au code tiers + +Le Logiciel peut inclure du code tiers qu'IBM, et non pas la partie tierce, concède sous licence au Détenteur de la Licence dans le cadre du présent Contrat. Si le code tiers est accompagné de mentions spécifiques ("Mentions relatives au code tiers"), elles sont uniquement indiquées à titre de référence pour le Détenteur de la Licence. Ces mentions peuvent résider dans le ou les fichiers NOTICES du Logiciel. Les Mentions relatives au code tiers contiennent des instructions expliquant comment obtenir le code source de certains codes tiers. Si IBM qualifie le code tiers comme étant un "Code tiers modifiable" dans les Mentions relatives au code tiers, elle autorise le Détenteur de la Licence à 1) modifier le Code tiers modifiable ; et à 2) faire de l'ingénierie inverse sur les modules du Logiciel qui sont directement liés au Code tiers modifiable mais dans le seul but de déboguer les modifications que le Détenteur de la Licence a apportées audit code tiers. Si des obligations de service et de support incombent à IBM, elles ne s'appliquent qu'au Logiciel non modifié. + +13. Dispositions générales + +a. Le présent Contrat ne porte atteinte à aucune des dispositions légales d'ordre public relatives aux droits des consommateurs. + +b. En ce qui concerne les Logiciels qu'IBM fournit au Détenteur de la Licence sous une forme tangible, IBM honore ses obligations d'expédition et de livraison au moment où IBM remet lesdits Logiciels au transporteur désigné par IBM, sauf autorisation écrite contraire unissant le Détenteur de la Licence et IBM. + +c. Si l'une des dispositions du présent Contrat est considérée comme nulle ou inapplicable, elle n'entraînera pas la nullité des autres dispositions. + +d. Le Détenteur de la Licence s'engage à respecter toutes les lois et réglementations applicables en matière d'exportation et d'importation, y compris celles soumises à l'embargo des États-Unis concernant l'exportation de produits destinés à certains usages ou à certains utilisateurs. + +e. Le Détenteur de la Licence autorise IBM et ses filiales (ainsi que ses ayants droit et cessionnaires, sous-traitants et Partenaires commerciaux IBM) à stocker et à utiliser les coordonnées des contacts professionnels du Détenteur de la Licence à l'endroit où ils font des affaires, en relation avec les produits et services IBM, ou le bon fonctionnement des relations d'affaires entre IBM et le Détenteur de la Licence. + +f. Avant de formuler une réclamation, chacune des parties accordera à l'autre un délai raisonnable pour remplir ses obligations au titre du présent Contrat. Les deux parties mettront en oeuvre tous les efforts raisonnables afin de résoudre les litiges, désaccords ou réclamations pouvant les opposer au titre du présent Contrat. + +g. Sauf disposition légale ou réglementaire contraire à laquelle il ne peut être dérogé contractuellement : 1) aucune des parties n'intentera d'action en justice, sous quelque forme que ce soit, à l'égard d'une réclamation découlant du ou liée au présent Contrat plus de deux ans après l'apparition de son fait générateur ; et 2) à l'expiration de ladite période, toute réclamation et tout droit applicable lié à ladite revendication seront déclarés caducs. + +h. Ni le Détenteur de la Licence, ni IBM ne sera responsable d'un manquement à ses obligations si un tel manquement résulte d'un cas de force majeure. + +i. Le présent Contrat ne crée aucun droit et ne contient aucune stipulation pour autrui au profit d'un tiers. En outre, IBM ne sera pas tenue responsable des réclamations émanant de tiers à l'encontre du Détenteur de la Licence, sauf disposition contraire dans la sous-section 10.1 (Cas pour lesquels IBM peut être responsable), allant au-delà des dommages corporels (y compris le décès) ou des dommages aux biens matériels, mobiliers et immobiliers, pour lesquels IBM est légalement responsable envers ledit tiers. + +j. En concluant le présent Contrat, les parties renoncent à tout engagement non expressément prévu dans le présent Contrat, y compris, mais sans que cela soit limitatif, toute déclaration concernant 1) les performances ou le fonctionnement du Logiciel, autre que les garanties énoncées dans l'Article 8 (Garanties et exclusions) ci-dessus ; 2) les expériences et recommandations de parties tierces ; ou 3) les résultats ou économies que le Détenteur de la Licence pourrait obtenir. + +k. IBM a signé des contrats avec certaines entités commerciales ("Partenaires Commerciaux IBM") pour promouvoir, commercialiser et fournir certains Logiciels. Les Partenaires commerciaux IBM restent indépendants et distincts d'IBM. IBM n'est pas responsable des actions ou déclarations faites par les Partenaires commerciaux IBM, ni des obligations qu'ils ont vis-à-vis du Détenteur de la Licence. + +l. Les dispositions d'indemnisation au titre des licences et de la propriété intellectuelle figurant dans les accords éventuellement conclus entre IBM et le Détenteur de la Licence (comme le Livret contractuel IBM, par exemple) ne s'appliquent pas aux licences de Logiciel qui sont concédées dans le présent Contrat. + +14. Étendue géographique et droit applicable + +14.1 Droit applicable + +Les parties sont d'accord pour que soient appliquées les lois du pays où le Détenteur de la Licence a acquis la licence de Logiciel pour régir, interpréter et faire respecter les droits, devoirs et obligations d'IBM et du Détenteur de la Licence découlant, directement ou indirectement, de l'objet du présent Contrat, sans donner effet aux principes de conflit de lois. + +La Convention des Nations Unies sur les contrats régissant le Commerce International de Biens ne s'applique pas. + +14.2 Juridiction compétente + +Tous les droits, devoirs et obligations des parties sont soumis aux tribunaux du pays dans lequel le Détenteur de la Licence a acquis la licence du Logiciel. + +Chapitre 2 - Dispositions nationales particulières + +Pour les licences concédées dans les pays mentionnés ci-dessous, les dispositions suivantes remplacent ou modifient celles stipulées dans le Chapitre 1. Toutes les dispositions du Chapitre 1 qui n'ont pas été modifiées par les dispositions ci-après sont inchangées et conservent leurs pleins et entiers effets. Le présent Chapitre 2 est structuré comme suit : + +* Amendements applicables à plusieurs pays et relatifs au Chapitre 1, Section 14 (Droit applicable et juridiction compétente) ; + +* Amendements applicables aux pays d'Amérique et relatifs à d'autres dispositions du Contrat ; et + +* Amendements applicables aux pays d'Europe, du Moyen-Orient et d'Afrique et relatifs à d'autres dispositions du Contrat + +Amendements applicables à plusieurs pays et relatifs au Chapitre 1, Section 14 (Droit applicable et juridiction compétente) + +14.1 Droit applicable + +La mention "les lois du pays où le Détenteur de la Licence a acquis la licence de Logiciel" dans le premier paragraphe de la section 14.1 Droit applicable est remplacée par les phrases suivantes dans les pays suivants : + +AMÉRIQUE + +(1) au Canada : les lois en vigueur dans la Province de l'Ontario ; + +(2) à Saint-Martin : les lois en vigueur dans l'État de New York aux États-Unis ; + +EUROPE, MOYEN-ORIENT, AFRIQUE + +(3) au Bénin, au Burkina Faso, au Cameroun, en République centrafricaine, au Tchad, aux Comores, au Congo, à Djibouti, en République démocratique du Congo, en Guinée équatoriale, en Guyane française, en Polynésie française, au Gabon, en Guinée, en Côte d'Ivoire, à Madagascar, au Mali, à Mayotte, en Nouvelle Calédonie, au Niger, à la Réunion, au Sénégal, au Togo, en Tunisie et à Wallis et Futuna : les lois en vigueur en France. + +14.2 Juridiction compétente + +Le paragraphe suivant s'applique à la juridiction des pays identifiés ci-dessous et remplace la Sous-section 14.2 (Juridiction) : + +Tous les droits, devoirs et obligations des parties sont soumis aux tribunaux du pays dans lequel le Détenteur de la Licence a acquis la licence du Logiciel, à l'exception des pays identifiés ci-dessous où tout conflit résultant du ou relatif au présent Contrat, y compris en référé, sera de la compétence exclusive des tribunaux suivants : + +EUROPE, MOYEN-ORIENT, AFRIQUE + +au Bénin, au Burkina Faso, au Cameroun, en République centrafricaine, au Tchad, aux Comores, au Congo, à Djibouti, en République démocratique du Congo, en Guinée équatoriale, en France, en Guyane française, en Polynésie française, au Gabon, en Guinée, en Côte d'Ivoire, à Madagascar, au Mali, à Mayotte, à Monaco, au Maroc, en Nouvelle Calédonie, au Niger, à la Réunion, au Sénégal, au Togo, en Tunisie et à Wallis et Futuna : Tribunal de Commerce de Paris. + +AMENDEMENTS APPLICABLES AUX PAYS D'AMÉRIQUE + +CANADA + +10.1 Cas pour lesquels IBM peut être responsable + +Le paragraphe suivant remplace l'alinéa 1 dans le premier paragraphe la présente Sous-section 10.1 (Cas pour lesquels IBM peut être responsable) : + +1) des dommages corporels (y compris le décès) et des dégâts matériels aux biens matériels, mobiliers et immobiliers causés par une négligence d'IBM, et + +13. Dispositions générales + +Le paragraphe suivant remplace l'alinéa 13.d : + +d. Le Détenteur de la Licence s'engage à respecter toutes les lois et réglementations applicables en matière d'exportation et d'importation, y compris celles portant sur les produits provenant des États-Unis et qui interdisent ou restreignent l'exportation de produits destinés à certains usages ou à certains utilisateurs. + +Le paragraphe suivant remplace l'alinéa 13.i : + +i. Le présent Contrat ne crée aucun droit et ne contient aucune stipulation pour autrui au profit d'un tiers. En outre, IBM ne sera pas tenue responsable des réclamations émanant de tiers à l'encontre du Détenteur de la Licence sauf, tel qu'il est prévu dans l'article "Limitation de responsabilité" ci-dessus, au titre de dommages corporels (incluant le décès) et dégâts matériels aux biens matériels, mobiliers et immobiliers, causés par une négligence d'IBM pour laquelle IBM est légalement responsable envers ledit tiers. + +Le paragraphe suivant est ajouté en tant qu'alinéa 13.m : + +m. Dans le contexte de l'alinéa 13.m, le terme "Données personnelles" désigne les informations relatives à une personne identifiée ou identifiable qui ont été communiquées par l'une des parties, son personnel ou quelqu'un d'autre à l'autre partie dans le cadre du présent Contrat. Les dispositions suivantes s'appliquent si l'une des parties communique les Données personnelles à l'autre partie : + +(1) Dispositions générales + +(a) Chacune des parties est tenue de se conformer aux obligations ayant trait aux Données personnelles au titre de la réglementation canadienne applicable en matière de confidentialité des données (la "Réglementation"). + +(b) Aucune des parties ne demandera davantage de Données personnelles qu'elle n'en a besoin au titre du ou des motifs pour lequel ou pour lesquels ladite partie les a demandées. Bien entendu, le ou les motifs de la demande pour lequel ou pour lesquels ladite partie demande les Données personnelles devra ou devront être raisonnables. Chacune des parties accepte par avance le type de Données personnelles qui doivent être mises à disposition des parties. + +(2) Dispositifs de sécurité + +(a) Chacune des parties reconnaît être la seule responsable de la détermination et de la communication à l'autre partie des dispositifs de sécurité technologiques, physiques et organisationnels adéquats nécessaires au vu de la protection des Données personnelles. + +(b) Chacune des parties devra s'assurer que les Données personnelles sont protégées conformément aux dispositifs de sécurité communiqués et acceptés par l'autre partie. + +(c) Chacune des parties devra s'assurer que tout tiers à qui les Données personnelles sont transférées se conforme aux dispositions applicables stipulées dans la présente section. + +(d) Si des services supplémentaires ou différents sont nécessaires pour rester en conformité avec la réglementation, lesdits services seront considérés comme une demande de nouveaux services. + +(3) Utilisation + +Chacune des parties reconnaît que les Données personnelles seront exclusivement utilisées, consultées, gérées, transférées, communiqués à des tiers ou traitées d'une quelconque façon au titre du ou des motifs pour lequel ou pour lesquels elles ont été mises à disposition. + +(4) Demandes d'accès + +(a) Chacune des parties s'engage à coopérer de manière raisonnable avec l'autre partie dans le cadre des demandes d'accès ou de modification des Données personnelles. + +(b) Chacune des parties s'engage à rembourser à l'autre partie les redevances raisonnables encourues au titre de l'assistance fournie à l'égard de l'une ou l'autre des parties. + +(c) Chacune des parties s'engage à modifier les Données personnelles uniquement à la réception des instructions où l'autre partie ou son personnel l'invite à le faire. + +(5) Conservation + +Sauf instruction contraire par l'autre partie ou son personnel ou sous couvert de la réglementation, chacune des parties détruira ou renverra rapidement à l'autre partie l'ensemble des Données personnelles qui ne sont plus nécessaires au titre du ou des motifs pour lequel ou pour lesquels elles ont été mises à disposition. + +(6) Organismes publics soumis à la réglementation en matière de confidentialité du secteur public + +Pour les Détenteurs de licence ayant la qualité d'organismes publics soumis à la réglementation en matière de confidentialité du secteur public, le présent alinéa 13.m ne s'applique qu'aux Données personnelles mises à la disposition du Détenteur de la Licence dans le cadre du présent Contrat. En outre, les obligations stipulées dans la présente section ne s'appliquent qu'au Détenteur de la Licence, à l'exception des sections suivantes : 1) la section (2)(a) ne concerne qu'IBM ; 2) les sections (1)(a) et (4)(a) concernent les deux parties ; puis 3) la section (4)(b) et la dernière phrase de la section (1)(b) ne s'appliquent pas. + +AMENDEMENTS APPLICABLES AUX PAYS D'EUROPE, DU MOYEN-ORIENT ET D'AFRIQUE (EMEA) + +ÉTATS MEMBRES DE L'UNION EUROPÉENNE + +8. Garanties et exclusions + +Le paragraphe suivant est ajouté à la Section 8. (Garanties et exclusions) : + +Dans l'Union européenne ("UE"), les consommateurs disposent de droits selon la loi nationale en vigueur régissant la vente de biens de consommation. Ces droits ne sont pas affectés par les dispositions stipulées dans la présente Section 8 intitulée "Garanties et exclusions". La limitation de garantie a une portée mondiale. + +ÉTATS MEMBRES DE L'UNION EUROPÉENNE ET PAYS IDENTIFIÉS CI-DESSOUS + +Suisse et tout autre pays européen ayant mis en oeuvre une réglementation locale en matière de confidentialité ou de protection des données de manière similaire au modèle de l'Union européenne + +13. Dispositions générales + +Le paragraphe suivant remplace l'alinéa 13.e : + +(1) Définitions - Les autres définitions suivantes s'appliquent dans le cadre du présent alinéa 13.e : + +(a) Coordonnées des Contacts Professionnels désigne les coordonnées des contacts professionnels communiquées à IBM par le Détenteur de la Licence, notamment le nom, l'intitulé du poste, l'adresse et le numéro de téléphone de bureau, mais aussi l'adresse électronique des employés et des sous-traitants du Détenteur de la Licence. Pour l'Autriche, l'Italie et la Suisse, les Coordonnées des Contacts Professionnels recouvrent également les informations relatives au Détenteur de la Licence et à ses prestataires en tant que personnes morales (notamment les données de chiffre d'affaires ainsi que diverses informations de transaction du Détenteur de la Licence). + +(b) Personnel du Contact Professionnel désigne les employés et les prestataires du Détenteur de la Licence auxquels se rapportent les Coordonnées des Contacts Professionnels. + +(c) Autorité de Protection des Données désigne l'autorité établie par la Réglementation relative à la Protection des Données et aux Communications Électroniques dans le pays concerné ou, dans le cas des pays non membres de l'Union Européenne, l'autorité chargée de superviser la protection des données personnelles dans ledit pays, ou (pour l'une des dispositions susmentionnées) tout ayant droit dûment désigné à cet égard. + +(d) Réglementation relative à la Protection des Données et aux Communications Électroniques désigne (i) la réglementation locale applicable en vigueur mettant en oeuvre les exigences de la Directive Européenne 95/46/CE (concernant la protection des personnes vis-à-vis du traitement des données personnelles et de la libre circulation desdites données) ainsi que de la Directive Européenne 2002/58/CE (concernant le traitement des données personnelles et la protection de la confidentialité dans le secteur des communications électroniques) ; ou (ii) dans le cas des pays non membres de l'Union européenne, la réglementation et/ou les lois passées dans le pays concerné vis-à-vis de la protection des données personnelles ainsi que la réglementation sur les communications électroniques impliquant des Données personnelles, notamment (pour l'une des dispositions susmentionnées) tout remplacement ou toute modification légale desdites informations. + +(e) Groupe IBM désigne la société International Business Machines Corporation basée à Armonk dans l'État de New York aux États-Unis, ses filiales, ainsi que ses Partenaires commerciaux et sous-traitants associés. + +(2) Le Détenteur de la Licence autorise IBM à : + +(a) traiter et utiliser les Coordonnées des Contacts Professionnels au sein du Groupe IBM aux fins de support du Détenteur de la Licence, notamment pour la fourniture de services de support, ainsi que dans le but de renforcer les relations commerciales unissant le Détenteur de la Licence et le Groupe IBM, y compris sans que cela soit limitatif, dans le but de contacter le Personnel du Contact Professionnel (par e-mail ou un autre moyen) et de commercialiser les produits et services du Groupe IBM ("Objet Spécifié") ; et à + +(b) communiquer les Coordonnées des Contacts Professionnels à d'autres membres du Groupe IBM uniquement dans le cadre de l'Objet Spécifié. + +(3) IBM s'engage à traiter toutes les Coordonnées des Contacts Professionnels conformément à la Réglementation relative à la Protection des Données et aux Communications Électroniques et à les utiliser uniquement dans le cadre de l'Objet Spécifié. + +(4) Dans les limites requises par la Réglementation relative à la Protection des Données et aux Communications Électroniques, le Détenteur de la Licence déclare qu'il (a) a obtenu (ou va obtenir) l'accord des (et a transmis (ou va transmettre) les avis aux) Contacts Professionnels - ledit accord étant nécessaire pour permettre au Groupe IBM de traiter et d'utiliser les Coordonnées des Contacts Professionnels dans le cadre de l'Objet Spécifié. + +(5) Le Détenteur de la Licence autorise IBM à communiquer les Coordonnées des Contacts Professionnels en dehors de l'Espace Économique Européen, sous réserve qu'elles soient transférées conformément aux dispositions contractuelles approuvées par l'Autorité de Protection des Données ou que leur transfert soit autorisé d'une quelconque façon par la Réglementation relative à la Protection des Données et aux Communications Électroniques. + +BELGIQUE, FRANCE ET LUXEMBOURG + +10. Limitation de responsabilité + +Le paragraphe suivant remplace intégralement les dispositions de cet Article 10 (Limitation de responsabilité) : + +Sauf disposition légale impérative contraire : + +10.1 Cas pour lesquels IBM peut être responsable + +L'entière responsabilité d'IBM relative à l'ensemble agrégé des réclamations et à tout dommage et perte pouvant survenir dans le cadre de l'exercice de ses obligations liées directement ou indirectement au présent Contrat ou résultant d'autres causes liées à ce Contrat, est limitée au dédommagement des seuls dommages et pertes prouvés et résultant immédiatement et directement du manquement à ces obligations (en cas de faute d'IBM) ou d'une telle cause, pour un montant maximum égal à la redevance (jusqu'à 12 mois de redevances si le Logiciel est concédé sous une licence à durée limitée) que le Détenteur de la Licence a payée pour le Logiciel à l'origine desdits dommages. + +La limitation sus-mentionnée ne s'applique pas aux dommages corporels (incluant le décès) et dommages aux biens matériels, mobiliers et immobiliers, pour lesquels IBM est légalement responsable. + +10.2 Cas pour lesquels IBM n'est pas responsable + +IBM ET SES DÉVELOPPEURS NE PEUVENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES SUIVANTS, ET CE, MÊME S'ILS ONT ÉTÉ INFORMÉS DE LEUR POSSIBLE SURVENANCE : 1) PERTE OU DÉTÉRIORATION DE DONNÉES ; 2) DOMMAGES DIRECTS, INDIRECTS, DOMMAGES INTÉRÊTS OU PRÉJUDICES FINANCIERS INDIRECTS ; ET/OU 3) PERTE DE PROFITS, PRÉJUDICE COMMERCIAL, PERTE DE CHIFFRE D'AFFAIRES, PERTE DE CLIENTÈLE, OU PERTE D'ÉCONOMIES ESCOMPTÉES MÊME SI CEUX-CI SONT LA CONSÉQUENCE IMMÉDIATE DE L'ÉVÉNEMENT À L'ORIGINE DES DOMMAGES. + +10.3 Fournisseurs et Développeurs de Logiciel + +Les limitations et exclusions convenues ci-dessus s'appliquent non seulement aux activités d'IBM mais également à celles de ses fournisseurs et ses développeurs, et définissent le montant maximum pour lequel IBM, ses fournisseurs et ses développeurs sont collectivement responsables. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_in b/charts/mq-advancedserver/LICENSE_locale/LICENSE_in new file mode 100644 index 0000000..5693c1f --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_in @@ -0,0 +1,1121 @@ +PEMBERITAHUAN + +Dokumen ini termasuk dokumen-dokumen Informasi tentang Lisensi di bawah ini untuk beberapa Program. Masing-masing dokumen Informasi tentang Lisensi mengidentifikasi Program(-program) yang untuknya Informasi tentang Lisensi tersebut berlaku. Hanya dokumen-dokumen Informasi tentang Lisensi untuk Program(-program) tersebut yang untuknya Pemegang Lisensi telah memperoleh kepemilikan-kepemilikan yang berlaku. + + +============================================== + + +PENTING: BACALAH DENGAN SAKSAMA + +Dua perjanjian lisensi dijabarkan di bawah ini. + +1. Perjanjian Lisensi Internasional IBM untuk Evaluasi Program +2. Perjanjian Lisensi Program Internasional IBM + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan penggunaan produktif (selain evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima Perjanjian Lisensi Program Internasional IBM, tanpa modifikasi. + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi (semuanya disebut dengan "Evaluasi"): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima baik (i) Perjanjian Lisensi Internasional IBM untuk Evaluasi Program ("Lisensi Evaluasi"), tanpa modifikasi; maupun (ii) Perjanjian Lisensi Program Internasional IBM ("IPLA"), tanpa modifikasi. + +Lisensi Evaluasi akan berlaku selama jangka waktu Evaluasi Pemegang Lisensi. + +IPLA akan berlaku secara otomatis apabila Pemegang Lisensi memilih untuk menyimpan Program setelah Evaluasi (atau mendapat salinan tambahan dari Program untuk penggunaan setelah Evaluasi) dengan mengadakan perjanjian pengadaan barang/jasa (sebagai contoh perjanjian Keuntungan Paspor Internasional IBM atau perjanjian Ekspres Keuntungan Paspor IBM). + +Lisensi Evaluasi dan IPLA tidak berlaku secara bersamaan; juga tidak memodifikasi lainnya; dan saling bergantung satu sama lain. + +Teks lengkap dari masing-masing kedua perjanjian lisensi akan menyusul. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Internasional untuk Evaluasi Program (Z125-5543-05) akan berlaku. + +Nama Program (Nomor Program): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Syarat-syarat standar berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Periode Evaluasi + +Periode evaluasi dimulai pada tanggal saat Pemegang Lisensi menyetujui syarat-syarat Perjanjian ini dan berakhir setelah 90 hari. + +Program Pendukung + +Program diberi lisensi sebagai sebuah paket multiproduk dan termasuk Program-program Pendukung yang diidentifikasi di bawah ini. Pemegang Lisensi berhak untuk memasang dan menggunakan Program-program Pendukung tersebut hanya untuk mendukung penggunaan Pemegang Lisensi atas Program Utama berdasarkan Perjanjian ini dan dalam batas-batas Bukti Kepemilikan untuk Program (kecuali apabila hak-hak yang lebih luas ditetapkan di suatu tempat dalam dokumen Informasi Lisensi ini). Frasa "untuk mendukung penggunaan Pemegang Lisensi" hanya akan termasuk penggunaan-penggunaan tersebut yang diperlukan atau dengan cara lain, yang terkait secara langsung dengan penggunaan yang diberi lisensi atas Program Utama dan Program Pendukung lainnya. Program-program Pendukung tidak dapat digunakan untuk tujuan lainnya. Pemegang Lisensi tidak berhak untuk mentransfer atau memasarkan kembali Program-program Pendukung secara terpisah dari Program Utama. Program Pendukung dapat disertai dengan syarat-syarat lisensi, dan syarat-syarat tersebut, apabila ada, berlaku untuk penggunaan Pemegang Lisensi atas Program Pendukung. Apabila terdapat ketidaksesuaian, syarat-syarat dalam dokumen Informasi tentang Lisensi ini menggantikan syarat-syarat Program Pendukung. Pada saat hak Pemegang Lisensi untuk menggunakan Program habis waktunya atau berakhir, Pemegang Lisensi harus berhenti menggunakan, memusnahkan atau segera mengembalikan semua salinan dari Program-program Pendukung kepada pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi telah mengunduh Program-program Pendukung, Pemegang Lisensi sebaiknya menghubungi pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi ingin memberi lisensi untuk Program-program Pendukung untuk digunakan melampaui batas-batas yang tercantum di atas, hubungi Perwakilan Penjualan IBM atau pihak yang darinya Pemegang Lisensi memperoleh Program untuk mendapatkan lisensi yang sesuai. + +Berikut ini adalah Program-program Pendukung yang diberi lisensi bersama dengan Program: +IBM WebSphere Application Server Liberty V17.0 + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Program Internasional (Z125-3301-14) akan berlaku. + +Nama Program (Nomor Program): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Syarat-syarat standar berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Hak penggunaan terbatas + +Sebagaimana yang dijelaskan dalam Perjanjian Lisensi Program Internasional (International Program License Agreement - "IPLA") dan Informasi Lisensi ini, IBM memberikan kepada Pemegang lisensi, suatu hak terbatas atas penggunaan Program. Hak ini terbatas pada tingkat Penggunaan yang Sah, seperti Unit Nilai Prosesor ("PVU"), Unit Nilai Sumber Daya ("RVU"), Unit Nilai ("VU"), atau tingkat penggunaan yang ditentukan lainnya, yang dibayarkan oleh Pemegang Lisensi sebagaimana yang dibuktikan dalam Bukti Kepemilikan. Penggunaan Pemegang Lisensi juga dapat dibatasi untuk mesin tertentu, atau hanya sebagai Program Pendukung, atau tunduk kepada pembatasan lainnya. Jika Pemegang Lisensi tidak membayar semua nilai ekonomis dari Program, penggunaan yang lain tidak diizinkan tanpa pembayaran biaya tambahan. Selain itu, Pemegang Lisensi tidak berhak untuk menggunakan Program guna memberikan layanan TI komersial kepada pihak ketiga mana pun, memberikan hosting atau pembagian waktu (timesharing) komersial, atau mensublisensikan, menyewakan, atau menyewagunakan Program kecuali secara tegas diatur dalam perjanjian-perjanjian yang berlaku yang menjadi dasar bagi Pemegang Lisensi dalam memperoleh otorisasi untuk menggunakan Program. Hak tambahan dapat diberikan kepada Pemegang Lisensi sesuai dengan pembayaran biaya tambahan atau sesuai dengan syarat-syarat tambahan atau yang berbeda. IBM berhak untuk menentukan apakah akan memberikan hak tambahan tersebut kepada Pemegang Lisensi atau tidak. + +Spesifikasi + +Spesifikasi Program dapat ditemukan dalam bagian Informasi Teknis dan Deskripsi kolektif pada Surat Pemberitahuan Program. + +Program Pendukung + +Program diberi lisensi sebagai sebuah paket multiproduk dan termasuk Program-program Pendukung yang diidentifikasi di bawah ini. Pemegang Lisensi berhak untuk memasang dan menggunakan Program-program Pendukung tersebut hanya untuk mendukung penggunaan Pemegang Lisensi atas Program Utama berdasarkan Perjanjian ini dan dalam batas-batas Bukti Kepemilikan untuk Program (kecuali apabila hak-hak yang lebih luas ditetapkan di suatu tempat dalam dokumen Informasi Lisensi ini). Frasa "untuk mendukung penggunaan Pemegang Lisensi" hanya akan termasuk penggunaan-penggunaan tersebut yang diperlukan atau dengan cara lain, yang terkait secara langsung dengan penggunaan yang diberi lisensi atas Program Utama dan Program Pendukung lainnya. Program-program Pendukung tidak dapat digunakan untuk tujuan lainnya. Pemegang Lisensi tidak berhak untuk mentransfer atau memasarkan kembali Program-program Pendukung secara terpisah dari Program Utama. Program Pendukung dapat disertai dengan syarat-syarat lisensi, dan syarat-syarat tersebut, apabila ada, berlaku untuk penggunaan Pemegang Lisensi atas Program Pendukung. Apabila terdapat ketidaksesuaian, syarat-syarat dalam dokumen Informasi tentang Lisensi ini menggantikan syarat-syarat Program Pendukung. Pada saat hak Pemegang Lisensi untuk menggunakan Program habis waktunya atau berakhir, Pemegang Lisensi harus berhenti menggunakan, memusnahkan atau segera mengembalikan semua salinan dari Program-program Pendukung kepada pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi telah mengunduh Program-program Pendukung, Pemegang Lisensi sebaiknya menghubungi pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi ingin memberi lisensi untuk Program-program Pendukung untuk digunakan melampaui batas-batas yang tercantum di atas, hubungi Perwakilan Penjualan IBM atau pihak yang darinya Pemegang Lisensi memperoleh Program untuk mendapatkan lisensi yang sesuai. + +Berikut ini adalah Program-program Pendukung yang diberi lisensi bersama dengan Program: +IBM WebSphere Application Server Liberty V17.0 + +Komponen yang Tidak Digunakan untuk Menetapkan Kepemilikan yang Diperlukan + +Pada saat menentukan jumlah kepemilikan yang diperlukan untuk pemasangan atau penggunaan Program oleh Pemegang Lisensi, pemasangan atau penggunaan komponen-komponen Program berikut ini tidak dipertimbangkan. Dengan kata lain, Pemegang Lisensi dapat memasang dan menggunakan komponen-komponen Program berikut ini, berdasarkan syarat-syarat lisensi, tetapi komponen-komponen ini tidak digunakan untuk menentukan jumlah kepemilikan yang diperlukan untuk Program. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Perangkat Lunak yang Dapat Didistribusikan + +Apabila Program termasuk komponen-komponen yang Dapat Didistribusikan, komponen-komponen tersebut akan diidentifikasi dalam file REDIST yang menyertai Program. Selain hak-hak lisensi yang diberikan dalam Perjanjian, Pemegang Lisensi dapat mendistribusikan Perangkat Lunak yang Dapat Didistribusikan dengan tunduk kepada syarat-syarat berikut ini: +1) Pendistribusian kembali harus dalam bentuk kode objek saja dan harus mentaati semua arahan, instruksi, dan spesifikasi dalam REDIST atau dokumentasi yang menyertai Program; +2) Apabila dokumentasi yang menyertai Program secara tegas memperbolehkan Pemegang Lisensi untuk memodifikasi Perangkat Lunak yang Dapat Didistribusikan, modifikasi tersebut harus mentaati semua arahan, instruksi, dan spesifikasi dalam dokumentasi tersebut dan modifikasi-modifikasi ini, apabila ada, harus diperlakukan sebagai Perangkat Lunak yang Dapat Didistribusikan; +3) Perangkat Lunak yang Dapat Didistribusikan dapat didistribusikan hanya sebagai bagian dari aplikasi Pemegang Lisensi yang telah dikembangkan dengan menggunakan Program ("Aplikasi Pemegang Lisensi") dan hanya untuk mendukung para konsumen Pemegang Lisensi yang berkaitan dengan penggunaan mereka atas Aplikasi Pemegang Lisensi. Aplikasi Pemegang Lisensi harus merupakan tambahan nilai yang signifikan sehingga Perangkat Lunak yang Dapat Didistribusikan bukanlah merupakan motivasi penting untuk akuisisi atas produk perangkat lunak Pemegang Lisensi oleh para pengguna akhir; +4) Apabila Perangkat Lunak yang Dapat Distribusikan termasuk Java Runtime Environment, Pemegang Lisensi juga harus memasukkan Perangkat Lunak non-Java yang Dapat Didistribusikan lainnya dengan Aplikasi Pemegang Lisensi, kecuali apabila Aplikasi didesain untuk menjalankan hanya pada alat-alat komputer biasa (sebagai contoh: laptop, destop, dan server) dan tidak pada produk genggam atau alat-alat yang tersebar lainnya (sebagai contoh: alat-alat yang berisi mikroprosesor tetapi tidak memiliki kemampuan komputerisasi sebagai tujuan utama mereka); +5) Pemegang Lisensi tidak dapat menghapus file atau pemberitahuan tentang hak cipta yang terdapat dalam Perangkat Lunak yang Dapat Didistribusikan; +6) Pemegang Lisensi harus membebaskan IBM, para pemasok atau distributornya dari dan atas setiap tuntutan yang timbul dari penggunaan atau distribusi Aplikasi Pemegang Lisensi; +7) Pemegang Lisensi tidak dapat menggunakan nama jalur yang sama dengan file-file/modul-modul Perangkat Lunak yang Dapat Didistribusikan yang asli; +8) Pemegang Lisensi tidak dapat menggunakan nama-nama atau merek-merek dagang IBM, para pemasok atau distributornya yang terkait dengan pemasaran Aplikasi Pemegang Lisensi tanpa adanya persetujuan tertulis sebelumnya dari IBM atau pemasok atau distributornya tersebut; +9) IBM serta para pemasok dan distributornya memberikan Perangkat Lunak yang Dapat Didistribusikan dan dokumentasi terkait tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU.; +10) Pemegang Lisensi bertanggung jawab atas semua bantuan teknis untuk Aplikasi Pemegang Lisensi dan setiap modifikasi terhadap Perangkat Lunak yang Dapat Didistribusikan; dan +11) Perjanjian lisensi Pemegang Lisensi dengan pengguna akhir Aplikasi Pemegang Lisensi harus memberitahu pengguna akhir bahwa Perangkat Lunak yang Dapat Didistribusikan atau modifikasi-modifikasinya tidak dapat i) digunakan untuk tujuan selain untuk memungkinkan Aplikasi Pemegang Lisensi, ii) disalin (kecuali untuk tujuan cadangan), iii) selanjutnya didistribusikan atau ditransfer tanpa Aplikasi Pemegang Lisensi atau iv) dirakit kembali, disusun kembali, atau dengan cara lain, diterjemahkan kecuali apabila diizinkan secara khusus oleh undang-undang dan tanpa adanya pelepasan kontrak. Selanjutnya, perjanjian lisensi Pemegang Lisensi harus setidaknya bersifat melindungi IBM sama seperti syarat-syarat Perjanjian ini. + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + +Untuk Komponen-komponen Sumber yang tercantum dalam file REDIST dari sebuah Program, Pemegang Lisensi dapat mendistribusikan kembali versi-versi yang telah dimodifikasi dari Komponen-komponen Sumber tersebut sesuai dengan syarat-syarat lisensi ini dan setiap instruksi dalam file REDIST. + +Unit ukuran berikut ini dapat berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Unit Nilai Prosesor (Processor Value Unit - PVU) + +Unit Nilai Prosesor (PVU) adalah unit ukuran yang melaluinya Program dapat diberi lisensi. Jumlah kepemilikan PVU yang diperlukan didasarkan pada teknologi prosesor (ditentukan dalam Tabel PVU berdasarkan Vendor, Merek, Jenis, dan Nomor Model Prosesor di http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) dan jumlah prosesor yang disediakan untuk Program. IBM terus menentukan prosesor, untuk tujuan pemberian lisensi berdasarkan PVU, menjadi masing-masing inti prosesor pada sebuah keping. Sebagai contoh, keping dua inti (dual-core) prosesor memiliki dua inti prosesor. + +Pemegang Lisensi dapat meluncurkan Program yang menggunakan pemberian lisensi Kapasitas Penuh atau pemberian lisensi Kapasitas Virtualisasi (Subkapasitas) sesuai dengan Syarat-syarat Pemberian Lisensi Subkapasitas Passport Advantage (lihat halaman web di bawah ini). Apabila menggunakan pemberian lisensi Kapasitas Penuh, Pemegang Lisensi harus mendapatkan kepemilikan PVU yang memadai untuk mencakup semua inti prosesor yang diaktifkan* dalam lingkungan perangkat keras fisik yang disediakan untuk atau dikelola oleh Program, kecuali untuk server-server tersebut yang darinya Program telah dihapus secara permanen. Apabila menggunakan pemberian lisensi Kapasitas Virtualisasi, Pemegang Lisensi harus mendapatkan kepemilikan-kepemilikan yang memadai untuk mencakup semua inti prosesor yang diaktifkan yang disediakan untuk atau dikelola oleh Program, sebagaimana ditentukan sesuai dengan Aturan Penghitungan Lisensi Kapasitas Virtualisasi di http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Inti prosesor yang diaktifkan adalah inti prosesor yang tersedia untuk digunakan dalam sebuah server fisik atau maya, tanpa memperhatikan apakah kapasitas inti prosesor dapat dibatasi atau dibatasi melalui teknologi-teknologi virtualisasi, perintah-perintah sistem operasi, pengaturan-pengaturan BIOS atau pembatasan-pembatasan yang sama. + +Inti Prosesor Virtual + +Inti Prosesor Virtual adalah unit ukuran yang olehnya Program dapat diberi lisensi. Server Fisik adalah komputer fisik yang terdiri atas unit pemrosesan, memori, dan kemampuan input/output, serta yang menjalankan prosedur, perintah, atau aplikasi yang diminta untuk satu atau lebih perangkat klien atau pengguna. Apabila rak, kerangka blade (blade enclosure), atau peralatan lainnya yang serupa sedang dijalankan, masing-masing perangkat fisik yang dapat dipisahkan (misalnya, blade atau perangkat yang terpasang dalam rak) yang memiliki komponen yang diperlukan dianggap sebagai Server Fisik yang terpisah. Server Virtual adalah komputer virtual yang dibuat dengan mempartisikan sumber daya yang tersedia ke suatu Server Fisik, atau Server Fisik yang belum dipartisi. Inti Prosesor (biasanya disebut sebagai prosesor atau CPU) adalah unit fungsional di dalam alat komputerisasi yang menerjemahkan dan melaksanakan instruksi-instruksi. Inti Prosesor terdiri atas setidaknya sebuah unit kendali instruksi dan sebuah unit aritmetika atau unit logika. Inti Prosesor Virtual adalah Inti Prosesor dalam suatu Server Fisik yang tidak dipartisi, atau inti virtual yang ditetapkan ke suatu Server Virtual. Pemegang Lisensi harus memperoleh kepemilikan untuk setiap Inti Prosesor Virtual yang disediakan untuk Program. + +Untuk setiap Server Fisik, Pemegang Lisensi harus mempunyai kepemilikan yang memadai untuk jumlah mana pun yang lebih sedikit di antara 1) jumlah semua Inti Prosesor Virtual yang tersedia pada semua Server Virtual yang tersedia untuk Program, atau 2) semua Inti Prosesor yang tersedia pada Server Fisik. + +Selain hal-hal di atas, syarat-syarat berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Konfigurasi Siaga Diam + +Untuk tujuan Pasal ini, terdapat sebuah konfigurasi "Siaga Diam" di mana salinan Program dipasang pada sebuah server yang merupakan bagian dari solusi ketersediaan yang tinggi dan merupakan server yang kepadanya Program akan mengalihkan operasi apabila salinan Program pada server yang aktif tidak lagi dapat digunakan. Server hanya dianggap "diam" apabila, sampai terjadinya pengalihan operasi, server tersebut digunakan secara khusus untuk tindakan administratif yang membantu skenario pengalihan operasi. + +Program tidak dapat dipasang pada Server Siaga Diam, kecuali apabila mendapat lisensi yang tepat. + +Apabila Program digunakan dalam konfigurasi Siaga Diam dengan fitur Multi-Instance Queue Manager, maka salinan Program dapat tetap disimpan untuk tujuan pembuatan cadangan pada server Siaga Diam, dan diaktifkan, tetapi harus tetap "diam" dan tidak digunakan untuk melakukan pekerjaan produksi jenis apa pun, kecuali apabila server yang aktif mengalihkan operasi ke server Siaga Diam, dalam keadaan mana salinan Siaga Diam dapat digunakan untuk melakukan pekerjaan produksi selama jangka waktu pengalihan operasi. + +Apabila Program digunakan dalam konfigurasi Siaga Diam dengan sistem Ketersediaan yang Tinggi lainnya, maka salinan Program dapat tetap disimpan untuk tujuan pembuatan cadangan pada server Siaga Diam, tetapi tidak diaktifkan (dan oleh karenanya, tidak digunakan untuk melakukan pekerjaan produksi jenis apa pun), tetapi akan diaktifkan secara otomatis oleh komponen Ketersediaan yang Tinggi apabila server yang aktif tidak berfungsi, dalam keadaan mana salinan Siaga Diam dapat digunakan untuk melakukan pekerjaan produksi selama jangka waktu pengalihan operasi. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +PENTING: BACALAH DENGAN SAKSAMA + +Dua perjanjian lisensi dijabarkan di bawah ini. + +1. Perjanjian Lisensi Internasional IBM untuk Evaluasi Program +2. Perjanjian Lisensi Program Internasional IBM + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan penggunaan produktif (selain evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima Perjanjian Lisensi Program Internasional IBM, tanpa modifikasi. + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi (semuanya disebut dengan "Evaluasi"): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima baik (i) Perjanjian Lisensi Internasional IBM untuk Evaluasi Program ("Lisensi Evaluasi"), tanpa modifikasi; maupun (ii) Perjanjian Lisensi Program Internasional IBM ("IPLA"), tanpa modifikasi. + +Lisensi Evaluasi akan berlaku selama jangka waktu Evaluasi Pemegang Lisensi. + +IPLA akan berlaku secara otomatis apabila Pemegang Lisensi memilih untuk menyimpan Program setelah Evaluasi (atau mendapat salinan tambahan dari Program untuk penggunaan setelah Evaluasi) dengan mengadakan perjanjian pengadaan barang/jasa (sebagai contoh perjanjian Keuntungan Paspor Internasional IBM atau perjanjian Ekspres Keuntungan Paspor IBM). + +Lisensi Evaluasi dan IPLA tidak berlaku secara bersamaan; juga tidak memodifikasi lainnya; dan saling bergantung satu sama lain. + +Teks lengkap dari masing-masing kedua perjanjian lisensi akan menyusul. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Internasional untuk Evaluasi Program (Z125-5543-05) akan berlaku. + +Nama Program (Nomor Program): +IBM MQ Advanced V9.0.3 (Evaluation) + +Syarat-syarat standar berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Periode Evaluasi + +Periode evaluasi dimulai pada tanggal saat Pemegang Lisensi menyetujui syarat-syarat Perjanjian ini dan berakhir setelah 90 hari. + +Bundel Program + +Program dilisensikan sebagai paket multi-produk yang terdiri dari Bundel Program yang diidentifikasikan di bawah ini. Pemegang Lisensi berhak untuk memasang dan menggunakan Bundel Program tersebut dalam batas-batas Bukti Kepemilikan untuk Program dan sebagaimana yang dinyatakan dalam dokumen Informasi Lisensi ini. Pemegang Lisensi tidak berhak untuk mentrasfer atau memasarkan kembali Bundel Program terpisah dari paket multi-produk. Bundel Program dapat disertai dengan syarat-syarat lisensi, dan syarat-syarat tersebut, apabila ada, berlaku untuk penggunaan Pemegang Lisensi atas Bundel Program tersebut. Apabila terdapat ketidaksesuaian, syarat-syarat dalam dokumen Informasi Lisensi ini menggantikan syarat-syarat Bundel Program. Pada saat hak Pemegang Lisensi untuk menggunakan Program telah habis masa berlakunya atau berakhir, Pemegang Lisensi harus berhenti menggunakan, memusnahkan atau segera mengembalikan semua salinan Bundel Program kepada pihak yang darinya Pemegang Lisensi memperoleh Program. Jika Pemegang Lisensi mengunduh Bundel Program, Pemegang Lisensi harus menghubungi pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi ingin melisensikan Bundel Program untuk penggunaan apa pun yang melebihi batas-batas yang tertera di atas, silakan hubungi Perwakilan Penjualan IBM atau pihak yang darinya Pemegang Lisensi memperoleh Program untuk mendapatkan lisensi yang sesuai. + +Berikut ini adalah Bundel Program yang dilisensikan dengan Program: +IBM MQ V9.0.3 + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Program Internasional (Z125-3301-14) akan berlaku. + +Nama Program (Nomor Program): +IBM MQ Advanced V9.0.3 (5724-H72) + +Syarat-syarat standar berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Hak penggunaan terbatas + +Sebagaimana yang dijelaskan dalam Perjanjian Lisensi Program Internasional (International Program License Agreement - "IPLA") dan Informasi Lisensi ini, IBM memberikan kepada Pemegang lisensi, suatu hak terbatas atas penggunaan Program. Hak ini terbatas pada tingkat Penggunaan yang Sah, seperti Unit Nilai Prosesor ("PVU"), Unit Nilai Sumber Daya ("RVU"), Unit Nilai ("VU"), atau tingkat penggunaan yang ditentukan lainnya, yang dibayarkan oleh Pemegang Lisensi sebagaimana yang dibuktikan dalam Bukti Kepemilikan. Penggunaan Pemegang Lisensi juga dapat dibatasi untuk mesin tertentu, atau hanya sebagai Program Pendukung, atau tunduk kepada pembatasan lainnya. Jika Pemegang Lisensi tidak membayar semua nilai ekonomis dari Program, penggunaan yang lain tidak diizinkan tanpa pembayaran biaya tambahan. Selain itu, Pemegang Lisensi tidak berhak untuk menggunakan Program guna memberikan layanan TI komersial kepada pihak ketiga mana pun, memberikan hosting atau pembagian waktu (timesharing) komersial, atau mensublisensikan, menyewakan, atau menyewagunakan Program kecuali secara tegas diatur dalam perjanjian-perjanjian yang berlaku yang menjadi dasar bagi Pemegang Lisensi dalam memperoleh otorisasi untuk menggunakan Program. Hak tambahan dapat diberikan kepada Pemegang Lisensi sesuai dengan pembayaran biaya tambahan atau sesuai dengan syarat-syarat tambahan atau yang berbeda. IBM berhak untuk menentukan apakah akan memberikan hak tambahan tersebut kepada Pemegang Lisensi atau tidak. + +Spesifikasi + +Spesifikasi Program dapat ditemukan dalam bagian Informasi Teknis dan Deskripsi kolektif pada Surat Pemberitahuan Program. + +Bundel Program + +Program dilisensikan sebagai paket multi-produk yang terdiri dari Bundel Program yang diidentifikasikan di bawah ini. Pemegang Lisensi berhak untuk memasang dan menggunakan Bundel Program tersebut dalam batas-batas Bukti Kepemilikan untuk Program dan sebagaimana yang dinyatakan dalam dokumen Informasi Lisensi ini. Pemegang Lisensi tidak berhak untuk mentrasfer atau memasarkan kembali Bundel Program terpisah dari paket multi-produk. Bundel Program dapat disertai dengan syarat-syarat lisensi, dan syarat-syarat tersebut, apabila ada, berlaku untuk penggunaan Pemegang Lisensi atas Bundel Program tersebut. Apabila terdapat ketidaksesuaian, syarat-syarat dalam dokumen Informasi Lisensi ini menggantikan syarat-syarat Bundel Program. Pada saat hak Pemegang Lisensi untuk menggunakan Program telah habis masa berlakunya atau berakhir, Pemegang Lisensi harus berhenti menggunakan, memusnahkan atau segera mengembalikan semua salinan Bundel Program kepada pihak yang darinya Pemegang Lisensi memperoleh Program. Jika Pemegang Lisensi mengunduh Bundel Program, Pemegang Lisensi harus menghubungi pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi ingin melisensikan Bundel Program untuk penggunaan apa pun yang melebihi batas-batas yang tertera di atas, silakan hubungi Perwakilan Penjualan IBM atau pihak yang darinya Pemegang Lisensi memperoleh Program untuk mendapatkan lisensi yang sesuai. + +Berikut ini adalah Bundel Program yang dilisensikan dengan Program: +IBM MQ V9.0.3 + +Komponen yang Tidak Digunakan untuk Menetapkan Kepemilikan yang Diperlukan + +Pada saat menentukan jumlah kepemilikan yang diperlukan untuk pemasangan atau penggunaan Program oleh Pemegang Lisensi, pemasangan atau penggunaan komponen-komponen Program berikut ini tidak dipertimbangkan. Dengan kata lain, Pemegang Lisensi dapat memasang dan menggunakan komponen-komponen Program berikut ini, berdasarkan syarat-syarat lisensi, tetapi komponen-komponen ini tidak digunakan untuk menentukan jumlah kepemilikan yang diperlukan untuk Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + +Unit ukuran berikut ini dapat berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Unit Nilai Prosesor (Processor Value Unit - PVU) + +Unit Nilai Prosesor (PVU) adalah unit ukuran yang melaluinya Program dapat diberi lisensi. Jumlah kepemilikan PVU yang diperlukan didasarkan pada teknologi prosesor (ditentukan dalam Tabel PVU berdasarkan Vendor, Merek, Jenis, dan Nomor Model Prosesor di http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) dan jumlah prosesor yang disediakan untuk Program. IBM terus menentukan prosesor, untuk tujuan pemberian lisensi berdasarkan PVU, menjadi masing-masing inti prosesor pada sebuah keping. Sebagai contoh, keping dua inti (dual-core) prosesor memiliki dua inti prosesor. + +Pemegang Lisensi dapat meluncurkan Program yang menggunakan pemberian lisensi Kapasitas Penuh atau pemberian lisensi Kapasitas Virtualisasi (Subkapasitas) sesuai dengan Syarat-syarat Pemberian Lisensi Subkapasitas Passport Advantage (lihat halaman web di bawah ini). Apabila menggunakan pemberian lisensi Kapasitas Penuh, Pemegang Lisensi harus mendapatkan kepemilikan PVU yang memadai untuk mencakup semua inti prosesor yang diaktifkan* dalam lingkungan perangkat keras fisik yang disediakan untuk atau dikelola oleh Program, kecuali untuk server-server tersebut yang darinya Program telah dihapus secara permanen. Apabila menggunakan pemberian lisensi Kapasitas Virtualisasi, Pemegang Lisensi harus mendapatkan kepemilikan-kepemilikan yang memadai untuk mencakup semua inti prosesor yang diaktifkan yang disediakan untuk atau dikelola oleh Program, sebagaimana ditentukan sesuai dengan Aturan Penghitungan Lisensi Kapasitas Virtualisasi di http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Inti prosesor yang diaktifkan adalah inti prosesor yang tersedia untuk digunakan dalam sebuah server fisik atau maya, tanpa memperhatikan apakah kapasitas inti prosesor dapat dibatasi atau dibatasi melalui teknologi-teknologi virtualisasi, perintah-perintah sistem operasi, pengaturan-pengaturan BIOS atau pembatasan-pembatasan yang sama. + +Inti Prosesor Virtual + +Inti Prosesor Virtual adalah unit ukuran yang olehnya Program dapat diberi lisensi. Server Fisik adalah komputer fisik yang terdiri atas unit pemrosesan, memori, dan kemampuan input/output, serta yang menjalankan prosedur, perintah, atau aplikasi yang diminta untuk satu atau lebih perangkat klien atau pengguna. Apabila rak, kerangka blade (blade enclosure), atau peralatan lainnya yang serupa sedang dijalankan, masing-masing perangkat fisik yang dapat dipisahkan (misalnya, blade atau perangkat yang terpasang dalam rak) yang memiliki komponen yang diperlukan dianggap sebagai Server Fisik yang terpisah. Server Virtual adalah komputer virtual yang dibuat dengan mempartisikan sumber daya yang tersedia ke suatu Server Fisik, atau Server Fisik yang belum dipartisi. Inti Prosesor (biasanya disebut sebagai prosesor atau CPU) adalah unit fungsional di dalam alat komputerisasi yang menerjemahkan dan melaksanakan instruksi-instruksi. Inti Prosesor terdiri atas setidaknya sebuah unit kendali instruksi dan sebuah unit aritmetika atau unit logika. Inti Prosesor Virtual adalah Inti Prosesor dalam suatu Server Fisik yang tidak dipartisi, atau inti virtual yang ditetapkan ke suatu Server Virtual. Pemegang Lisensi harus memperoleh kepemilikan untuk setiap Inti Prosesor Virtual yang disediakan untuk Program. + +Untuk setiap Server Fisik, Pemegang Lisensi harus mempunyai kepemilikan yang memadai untuk jumlah mana pun yang lebih sedikit di antara 1) jumlah semua Inti Prosesor Virtual yang tersedia pada semua Server Virtual yang tersedia untuk Program, atau 2) semua Inti Prosesor yang tersedia pada Server Fisik. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +PENTING: BACALAH DENGAN SAKSAMA + +Dua perjanjian lisensi dijabarkan di bawah ini. + +1. Perjanjian Lisensi Internasional IBM untuk Evaluasi Program +2. Perjanjian Lisensi Program Internasional IBM + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan penggunaan produktif (selain evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima Perjanjian Lisensi Program Internasional IBM, tanpa modifikasi. + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi (semuanya disebut dengan "Evaluasi"): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima baik (i) Perjanjian Lisensi Internasional IBM untuk Evaluasi Program ("Lisensi Evaluasi"), tanpa modifikasi; maupun (ii) Perjanjian Lisensi Program Internasional IBM ("IPLA"), tanpa modifikasi. + +Lisensi Evaluasi akan berlaku selama jangka waktu Evaluasi Pemegang Lisensi. + +IPLA akan berlaku secara otomatis apabila Pemegang Lisensi memilih untuk menyimpan Program setelah Evaluasi (atau mendapat salinan tambahan dari Program untuk penggunaan setelah Evaluasi) dengan mengadakan perjanjian pengadaan barang/jasa (sebagai contoh perjanjian Keuntungan Paspor Internasional IBM atau perjanjian Ekspres Keuntungan Paspor IBM). + +Lisensi Evaluasi dan IPLA tidak berlaku secara bersamaan; juga tidak memodifikasi lainnya; dan saling bergantung satu sama lain. + +Teks lengkap dari masing-masing kedua perjanjian lisensi akan menyusul. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Internasional untuk Evaluasi Program (Z125-5543-05) akan berlaku. + +Nama Program (Nomor Program): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Syarat-syarat standar berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Periode Evaluasi + +Periode evaluasi dimulai pada tanggal saat Pemegang Lisensi menyetujui syarat-syarat Perjanjian ini dan berakhir setelah 90 hari. + +Bundel Program + +Program dilisensikan sebagai paket multi-produk yang terdiri dari Bundel Program yang diidentifikasikan di bawah ini. Pemegang Lisensi berhak untuk memasang dan menggunakan Bundel Program tersebut dalam batas-batas Bukti Kepemilikan untuk Program dan sebagaimana yang dinyatakan dalam dokumen Informasi Lisensi ini. Pemegang Lisensi tidak berhak untuk mentrasfer atau memasarkan kembali Bundel Program terpisah dari paket multi-produk. Bundel Program dapat disertai dengan syarat-syarat lisensi, dan syarat-syarat tersebut, apabila ada, berlaku untuk penggunaan Pemegang Lisensi atas Bundel Program tersebut. Apabila terdapat ketidaksesuaian, syarat-syarat dalam dokumen Informasi Lisensi ini menggantikan syarat-syarat Bundel Program. Pada saat hak Pemegang Lisensi untuk menggunakan Program telah habis masa berlakunya atau berakhir, Pemegang Lisensi harus berhenti menggunakan, memusnahkan atau segera mengembalikan semua salinan Bundel Program kepada pihak yang darinya Pemegang Lisensi memperoleh Program. Jika Pemegang Lisensi mengunduh Bundel Program, Pemegang Lisensi harus menghubungi pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi ingin melisensikan Bundel Program untuk penggunaan apa pun yang melebihi batas-batas yang tertera di atas, silakan hubungi Perwakilan Penjualan IBM atau pihak yang darinya Pemegang Lisensi memperoleh Program untuk mendapatkan lisensi yang sesuai. + +Berikut ini adalah Bundel Program yang dilisensikan dengan Program: +IBM MQ Idle Standby V9.0.3 + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Program Internasional (Z125-3301-14) akan berlaku. + +Nama Program (Nomor Program): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Syarat-syarat standar berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Hak penggunaan terbatas + +Sebagaimana yang dijelaskan dalam Perjanjian Lisensi Program Internasional (International Program License Agreement - "IPLA") dan Informasi Lisensi ini, IBM memberikan kepada Pemegang lisensi, suatu hak terbatas atas penggunaan Program. Hak ini terbatas pada tingkat Penggunaan yang Sah, seperti Unit Nilai Prosesor ("PVU"), Unit Nilai Sumber Daya ("RVU"), Unit Nilai ("VU"), atau tingkat penggunaan yang ditentukan lainnya, yang dibayarkan oleh Pemegang Lisensi sebagaimana yang dibuktikan dalam Bukti Kepemilikan. Penggunaan Pemegang Lisensi juga dapat dibatasi untuk mesin tertentu, atau hanya sebagai Program Pendukung, atau tunduk kepada pembatasan lainnya. Jika Pemegang Lisensi tidak membayar semua nilai ekonomis dari Program, penggunaan yang lain tidak diizinkan tanpa pembayaran biaya tambahan. Selain itu, Pemegang Lisensi tidak berhak untuk menggunakan Program guna memberikan layanan TI komersial kepada pihak ketiga mana pun, memberikan hosting atau pembagian waktu (timesharing) komersial, atau mensublisensikan, menyewakan, atau menyewagunakan Program kecuali secara tegas diatur dalam perjanjian-perjanjian yang berlaku yang menjadi dasar bagi Pemegang Lisensi dalam memperoleh otorisasi untuk menggunakan Program. Hak tambahan dapat diberikan kepada Pemegang Lisensi sesuai dengan pembayaran biaya tambahan atau sesuai dengan syarat-syarat tambahan atau yang berbeda. IBM berhak untuk menentukan apakah akan memberikan hak tambahan tersebut kepada Pemegang Lisensi atau tidak. + +Spesifikasi + +Spesifikasi Program dapat ditemukan dalam bagian Informasi Teknis dan Deskripsi kolektif pada Surat Pemberitahuan Program. + +Bundel Program + +Program dilisensikan sebagai paket multi-produk yang terdiri dari Bundel Program yang diidentifikasikan di bawah ini. Pemegang Lisensi berhak untuk memasang dan menggunakan Bundel Program tersebut dalam batas-batas Bukti Kepemilikan untuk Program dan sebagaimana yang dinyatakan dalam dokumen Informasi Lisensi ini. Pemegang Lisensi tidak berhak untuk mentrasfer atau memasarkan kembali Bundel Program terpisah dari paket multi-produk. Bundel Program dapat disertai dengan syarat-syarat lisensi, dan syarat-syarat tersebut, apabila ada, berlaku untuk penggunaan Pemegang Lisensi atas Bundel Program tersebut. Apabila terdapat ketidaksesuaian, syarat-syarat dalam dokumen Informasi Lisensi ini menggantikan syarat-syarat Bundel Program. Pada saat hak Pemegang Lisensi untuk menggunakan Program telah habis masa berlakunya atau berakhir, Pemegang Lisensi harus berhenti menggunakan, memusnahkan atau segera mengembalikan semua salinan Bundel Program kepada pihak yang darinya Pemegang Lisensi memperoleh Program. Jika Pemegang Lisensi mengunduh Bundel Program, Pemegang Lisensi harus menghubungi pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi ingin melisensikan Bundel Program untuk penggunaan apa pun yang melebihi batas-batas yang tertera di atas, silakan hubungi Perwakilan Penjualan IBM atau pihak yang darinya Pemegang Lisensi memperoleh Program untuk mendapatkan lisensi yang sesuai. + +Berikut ini adalah Bundel Program yang dilisensikan dengan Program: +IBM MQ Idle Standby V9.0.3 + +Komponen yang Tidak Digunakan untuk Menetapkan Kepemilikan yang Diperlukan + +Pada saat menentukan jumlah kepemilikan yang diperlukan untuk pemasangan atau penggunaan Program oleh Pemegang Lisensi, pemasangan atau penggunaan komponen-komponen Program berikut ini tidak dipertimbangkan. Dengan kata lain, Pemegang Lisensi dapat memasang dan menggunakan komponen-komponen Program berikut ini, berdasarkan syarat-syarat lisensi, tetapi komponen-komponen ini tidak digunakan untuk menentukan jumlah kepemilikan yang diperlukan untuk Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + +Unit ukuran berikut ini dapat berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Unit Nilai Prosesor (Processor Value Unit - PVU) + +Unit Nilai Prosesor (PVU) adalah unit ukuran yang melaluinya Program dapat diberi lisensi. Jumlah kepemilikan PVU yang diperlukan didasarkan pada teknologi prosesor (ditentukan dalam Tabel PVU berdasarkan Vendor, Merek, Jenis, dan Nomor Model Prosesor di http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) dan jumlah prosesor yang disediakan untuk Program. IBM terus menentukan prosesor, untuk tujuan pemberian lisensi berdasarkan PVU, menjadi masing-masing inti prosesor pada sebuah keping. Sebagai contoh, keping dua inti (dual-core) prosesor memiliki dua inti prosesor. + +Pemegang Lisensi dapat meluncurkan Program yang menggunakan pemberian lisensi Kapasitas Penuh atau pemberian lisensi Kapasitas Virtualisasi (Subkapasitas) sesuai dengan Syarat-syarat Pemberian Lisensi Subkapasitas Passport Advantage (lihat halaman web di bawah ini). Apabila menggunakan pemberian lisensi Kapasitas Penuh, Pemegang Lisensi harus mendapatkan kepemilikan PVU yang memadai untuk mencakup semua inti prosesor yang diaktifkan* dalam lingkungan perangkat keras fisik yang disediakan untuk atau dikelola oleh Program, kecuali untuk server-server tersebut yang darinya Program telah dihapus secara permanen. Apabila menggunakan pemberian lisensi Kapasitas Virtualisasi, Pemegang Lisensi harus mendapatkan kepemilikan-kepemilikan yang memadai untuk mencakup semua inti prosesor yang diaktifkan yang disediakan untuk atau dikelola oleh Program, sebagaimana ditentukan sesuai dengan Aturan Penghitungan Lisensi Kapasitas Virtualisasi di http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Inti prosesor yang diaktifkan adalah inti prosesor yang tersedia untuk digunakan dalam sebuah server fisik atau maya, tanpa memperhatikan apakah kapasitas inti prosesor dapat dibatasi atau dibatasi melalui teknologi-teknologi virtualisasi, perintah-perintah sistem operasi, pengaturan-pengaturan BIOS atau pembatasan-pembatasan yang sama. + +Selain hal-hal di atas, syarat-syarat berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Konfigurasi Siaga Diam + +Untuk tujuan Pasal ini, terdapat sebuah konfigurasi "Siaga Diam" di mana salinan Program dipasang pada sebuah server yang merupakan bagian dari solusi ketersediaan yang tinggi dan merupakan server yang kepadanya Program akan mengalihkan operasi apabila salinan Program pada server yang aktif tidak lagi dapat digunakan. Server hanya dianggap "diam" apabila, sampai terjadinya pengalihan operasi, server tersebut digunakan secara khusus untuk tindakan administratif yang membantu skenario pengalihan operasi. + +Program tidak dapat dipasang pada Server Siaga Diam, kecuali apabila mendapat lisensi yang tepat. + +Apabila Program digunakan dalam konfigurasi Siaga Diam dengan fitur Multi-Instance Queue Manager, maka salinan Program dapat tetap disimpan untuk tujuan pembuatan cadangan pada server Siaga Diam, dan diaktifkan, tetapi harus tetap "diam" dan tidak digunakan untuk melakukan pekerjaan produksi jenis apa pun, kecuali apabila server yang aktif mengalihkan operasi ke server Siaga Diam, dalam keadaan mana salinan Siaga Diam dapat digunakan untuk melakukan pekerjaan produksi selama jangka waktu pengalihan operasi. + +Apabila Program digunakan dalam konfigurasi Siaga Diam dengan sistem Ketersediaan yang Tinggi lainnya, maka salinan Program dapat tetap disimpan untuk tujuan pembuatan cadangan pada server Siaga Diam, tetapi tidak diaktifkan (dan oleh karenanya, tidak digunakan untuk melakukan pekerjaan produksi jenis apa pun), tetapi akan diaktifkan secara otomatis oleh komponen Ketersediaan yang Tinggi apabila server yang aktif tidak berfungsi, dalam keadaan mana salinan Siaga Diam dapat digunakan untuk melakukan pekerjaan produksi selama jangka waktu pengalihan operasi. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +PENTING: BACALAH DENGAN SAKSAMA + +Dua perjanjian lisensi dijabarkan di bawah ini. + +1. Perjanjian Lisensi Internasional IBM untuk Evaluasi Program +2. Perjanjian Lisensi Program Internasional IBM + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan penggunaan produktif (selain evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima Perjanjian Lisensi Program Internasional IBM, tanpa modifikasi. + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi (semuanya disebut dengan "Evaluasi"): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima baik (i) Perjanjian Lisensi Internasional IBM untuk Evaluasi Program ("Lisensi Evaluasi"), tanpa modifikasi; maupun (ii) Perjanjian Lisensi Program Internasional IBM ("IPLA"), tanpa modifikasi. + +Lisensi Evaluasi akan berlaku selama jangka waktu Evaluasi Pemegang Lisensi. + +IPLA akan berlaku secara otomatis apabila Pemegang Lisensi memilih untuk menyimpan Program setelah Evaluasi (atau mendapat salinan tambahan dari Program untuk penggunaan setelah Evaluasi) dengan mengadakan perjanjian pengadaan barang/jasa (sebagai contoh perjanjian Keuntungan Paspor Internasional IBM atau perjanjian Ekspres Keuntungan Paspor IBM). + +Lisensi Evaluasi dan IPLA tidak berlaku secara bersamaan; juga tidak memodifikasi lainnya; dan saling bergantung satu sama lain. + +Teks lengkap dari masing-masing kedua perjanjian lisensi akan menyusul. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Internasional untuk Evaluasi Program (Z125-5543-05) akan berlaku. + +Nama Program (Nomor Program): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Syarat-syarat standar berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Periode Evaluasi + +Periode evaluasi dimulai pada tanggal saat Pemegang Lisensi menyetujui syarat-syarat Perjanjian ini dan berakhir setelah 90 hari. + +Bundel Program + +Program dilisensikan sebagai paket multi-produk yang terdiri dari Bundel Program yang diidentifikasikan di bawah ini. Pemegang Lisensi berhak untuk memasang dan menggunakan Bundel Program tersebut dalam batas-batas Bukti Kepemilikan untuk Program dan sebagaimana yang dinyatakan dalam dokumen Informasi Lisensi ini. Pemegang Lisensi tidak berhak untuk mentrasfer atau memasarkan kembali Bundel Program terpisah dari paket multi-produk. Bundel Program dapat disertai dengan syarat-syarat lisensi, dan syarat-syarat tersebut, apabila ada, berlaku untuk penggunaan Pemegang Lisensi atas Bundel Program tersebut. Apabila terdapat ketidaksesuaian, syarat-syarat dalam dokumen Informasi Lisensi ini menggantikan syarat-syarat Bundel Program. Pada saat hak Pemegang Lisensi untuk menggunakan Program telah habis masa berlakunya atau berakhir, Pemegang Lisensi harus berhenti menggunakan, memusnahkan atau segera mengembalikan semua salinan Bundel Program kepada pihak yang darinya Pemegang Lisensi memperoleh Program. Jika Pemegang Lisensi mengunduh Bundel Program, Pemegang Lisensi harus menghubungi pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi ingin melisensikan Bundel Program untuk penggunaan apa pun yang melebihi batas-batas yang tertera di atas, silakan hubungi Perwakilan Penjualan IBM atau pihak yang darinya Pemegang Lisensi memperoleh Program untuk mendapatkan lisensi yang sesuai. + +Berikut ini adalah Bundel Program yang dilisensikan dengan Program: +IBM MQ V9.0.3 + +Batasan untuk Pengembang + +Apabila Program ditetapkan untuk "Para Pengembang", Program hanya dapat disebarkan sebagai bagian dari pengembangan dan pengujian unit internal Pemegang Lisensi pada mesin pengembang. Mesin pengembang adalah lingkungan destop fisik atau virtual, yang menjalankan sistem operasi utama dan Program, yang mana keduanya dapat diakses dan digunakan oleh tidak lebih dari satu pengembang yang ditetapkan. Pemegang Lisensi tidak berhak menggunakan Program untuk memproses beban-beban kerja produksi, mensimulasi beban-beban kerja produksi atau menguji kemampuan pengembangan kode, aplikasi atau sistem apa pun. Pemegang Lisensi tidak berhak untuk menggunakan sebagian Program untuk tujuan-tujuan lainnya tanpa memperoleh kepemilikan-kepemilikan produksi yang sesuai. + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Program Internasional (Z125-3301-14) akan berlaku. + +Nama Program (Nomor Program): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Syarat-syarat standar berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Hak penggunaan terbatas + +Sebagaimana yang dijelaskan dalam Perjanjian Lisensi Program Internasional (International Program License Agreement - "IPLA") dan Informasi Lisensi ini, IBM memberikan kepada Pemegang lisensi, suatu hak terbatas atas penggunaan Program. Hak ini terbatas pada tingkat Penggunaan yang Sah, seperti Unit Nilai Prosesor ("PVU"), Unit Nilai Sumber Daya ("RVU"), Unit Nilai ("VU"), atau tingkat penggunaan yang ditentukan lainnya, yang dibayarkan oleh Pemegang Lisensi sebagaimana yang dibuktikan dalam Bukti Kepemilikan. Penggunaan Pemegang Lisensi juga dapat dibatasi untuk mesin tertentu, atau hanya sebagai Program Pendukung, atau tunduk kepada pembatasan lainnya. Jika Pemegang Lisensi tidak membayar semua nilai ekonomis dari Program, penggunaan yang lain tidak diizinkan tanpa pembayaran biaya tambahan. Selain itu, Pemegang Lisensi tidak berhak untuk menggunakan Program guna memberikan layanan TI komersial kepada pihak ketiga mana pun, memberikan hosting atau pembagian waktu (timesharing) komersial, atau mensublisensikan, menyewakan, atau menyewagunakan Program kecuali secara tegas diatur dalam perjanjian-perjanjian yang berlaku yang menjadi dasar bagi Pemegang Lisensi dalam memperoleh otorisasi untuk menggunakan Program. Hak tambahan dapat diberikan kepada Pemegang Lisensi sesuai dengan pembayaran biaya tambahan atau sesuai dengan syarat-syarat tambahan atau yang berbeda. IBM berhak untuk menentukan apakah akan memberikan hak tambahan tersebut kepada Pemegang Lisensi atau tidak. + +Spesifikasi + +Spesifikasi Program dapat ditemukan dalam bagian Informasi Teknis dan Deskripsi kolektif pada Surat Pemberitahuan Program. + +Bundel Program + +Program dilisensikan sebagai paket multi-produk yang terdiri dari Bundel Program yang diidentifikasikan di bawah ini. Pemegang Lisensi berhak untuk memasang dan menggunakan Bundel Program tersebut dalam batas-batas Bukti Kepemilikan untuk Program dan sebagaimana yang dinyatakan dalam dokumen Informasi Lisensi ini. Pemegang Lisensi tidak berhak untuk mentrasfer atau memasarkan kembali Bundel Program terpisah dari paket multi-produk. Bundel Program dapat disertai dengan syarat-syarat lisensi, dan syarat-syarat tersebut, apabila ada, berlaku untuk penggunaan Pemegang Lisensi atas Bundel Program tersebut. Apabila terdapat ketidaksesuaian, syarat-syarat dalam dokumen Informasi Lisensi ini menggantikan syarat-syarat Bundel Program. Pada saat hak Pemegang Lisensi untuk menggunakan Program telah habis masa berlakunya atau berakhir, Pemegang Lisensi harus berhenti menggunakan, memusnahkan atau segera mengembalikan semua salinan Bundel Program kepada pihak yang darinya Pemegang Lisensi memperoleh Program. Jika Pemegang Lisensi mengunduh Bundel Program, Pemegang Lisensi harus menghubungi pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi ingin melisensikan Bundel Program untuk penggunaan apa pun yang melebihi batas-batas yang tertera di atas, silakan hubungi Perwakilan Penjualan IBM atau pihak yang darinya Pemegang Lisensi memperoleh Program untuk mendapatkan lisensi yang sesuai. + +Berikut ini adalah Bundel Program yang dilisensikan dengan Program: +IBM MQ V9.0.3 + +Batasan untuk Pengembang + +Apabila Program ditetapkan untuk "Para Pengembang", Program hanya dapat disebarkan sebagai bagian dari pengembangan dan pengujian unit internal Pemegang Lisensi pada mesin pengembang. Mesin pengembang adalah lingkungan destop fisik atau virtual, yang menjalankan sistem operasi utama dan Program, yang mana keduanya dapat diakses dan digunakan oleh tidak lebih dari satu pengembang yang ditetapkan. Pemegang Lisensi tidak berhak menggunakan Program untuk memproses beban-beban kerja produksi, mensimulasi beban-beban kerja produksi atau menguji kemampuan pengembangan kode, aplikasi atau sistem apa pun. Pemegang Lisensi tidak berhak untuk menggunakan sebagian Program untuk tujuan-tujuan lainnya tanpa memperoleh kepemilikan-kepemilikan produksi yang sesuai. + +Komponen yang Tidak Digunakan untuk Menetapkan Kepemilikan yang Diperlukan + +Pada saat menentukan jumlah kepemilikan yang diperlukan untuk pemasangan atau penggunaan Program oleh Pemegang Lisensi, pemasangan atau penggunaan komponen-komponen Program berikut ini tidak dipertimbangkan. Dengan kata lain, Pemegang Lisensi dapat memasang dan menggunakan komponen-komponen Program berikut ini, berdasarkan syarat-syarat lisensi, tetapi komponen-komponen ini tidak digunakan untuk menentukan jumlah kepemilikan yang diperlukan untuk Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + +Unit ukuran berikut ini dapat berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Pemasangan + +Pemasangan adalah unit ukuran yang olehnya Program dapat diberi lisensi. Pemasangan adalah salinan Program yang dipasang di disket dalam bentuk fisik atau maya yang disediakan untuk dijalankan di komputer. Pemegang Lisensi harus mendapatkan kepemilikan untuk masing-masing Pemasangan Program. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +PENTING: BACALAH DENGAN SAKSAMA + +Dua perjanjian lisensi dijabarkan di bawah ini. + +1. Perjanjian Lisensi Internasional IBM untuk Evaluasi Program +2. Perjanjian Lisensi Program Internasional IBM + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan penggunaan produktif (selain evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima Perjanjian Lisensi Program Internasional IBM, tanpa modifikasi. + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi (semuanya disebut dengan "Evaluasi"): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima baik (i) Perjanjian Lisensi Internasional IBM untuk Evaluasi Program ("Lisensi Evaluasi"), tanpa modifikasi; maupun (ii) Perjanjian Lisensi Program Internasional IBM ("IPLA"), tanpa modifikasi. + +Lisensi Evaluasi akan berlaku selama jangka waktu Evaluasi Pemegang Lisensi. + +IPLA akan berlaku secara otomatis apabila Pemegang Lisensi memilih untuk menyimpan Program setelah Evaluasi (atau mendapat salinan tambahan dari Program untuk penggunaan setelah Evaluasi) dengan mengadakan perjanjian pengadaan barang/jasa (sebagai contoh perjanjian Keuntungan Paspor Internasional IBM atau perjanjian Ekspres Keuntungan Paspor IBM). + +Lisensi Evaluasi dan IPLA tidak berlaku secara bersamaan; juga tidak memodifikasi lainnya; dan saling bergantung satu sama lain. + +Teks lengkap dari masing-masing kedua perjanjian lisensi akan menyusul. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Internasional untuk Evaluasi Program (Z125-5543-05) akan berlaku. + +Nama Program: IBM MQ Managed File Transfer Service V9.0.1 +Nomor Program: Evaluation + +Nama Program: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Nomor Program: Evaluation + +Nama Program: IBM MQ Managed File Transfer Agent V9.0.1 +Nomor Program: Evaluation + +Periode Evaluasi + +Periode evaluasi dimulai pada tanggal saat Pemegang Lisensi menyetujui syarat-syarat Perjanjian ini dan berakhir setelah 90 hari. + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Program Internasional (Z125-3301-14) akan berlaku. + +Nama Program: IBM MQ Managed File Transfer Service V9.0.1 +Nomor Program: 5724-H72 + +Nama Program: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Nomor Program: 5724-H72 + +Nama Program: IBM MQ Managed File Transfer Agent V9.0.1 +Nomor Program: 5724-H72 + +Sebagaimana yang dijelaskan dalam Perjanjian Lisensi Program Internasional (International Program License Agreement - "IPLA") dan Informasi Lisensi ini, IBM memberikan kepada Pemegang lisensi, suatu hak terbatas atas penggunaan Program. Hak ini terbatas pada tingkat Penggunaan yang Sah, seperti Unit Nilai Prosesor ("PVU"), Unit Nilai Sumber Daya ("RVU"), Unit Nilai ("VU"), atau tingkat penggunaan yang ditentukan lainnya, yang dibayarkan oleh Pemegang Lisensi sebagaimana yang dibuktikan dalam Bukti Kepemilikan. Penggunaan Pemegang Lisensi juga dapat dibatasi untuk mesin tertentu, atau hanya sebagai Program Pendukung, atau tunduk kepada pembatasan lainnya. Jika Pemegang Lisensi tidak membayar semua nilai ekonomis dari Program, penggunaan yang lain tidak diizinkan tanpa pembayaran biaya tambahan. Selain itu, Pemegang Lisensi tidak berhak untuk menggunakan Program guna memberikan layanan TI komersial kepada pihak ketiga mana pun, memberikan hosting atau pembagian waktu (timesharing) komersial, atau mensublisensikan, menyewakan, atau menyewagunakan Program kecuali secara tegas diatur dalam perjanjian-perjanjian yang berlaku yang menjadi dasar bagi Pemegang Lisensi dalam memperoleh otorisasi untuk menggunakan Program. Hak tambahan dapat diberikan kepada Pemegang Lisensi sesuai dengan pembayaran biaya tambahan atau sesuai dengan syarat-syarat tambahan atau yang berbeda. IBM berhak untuk menentukan apakah akan memberikan hak tambahan tersebut kepada Pemegang Lisensi atau tidak. + +Spesifikasi Program dapat ditemukan dalam bagian Informasi Teknis dan Deskripsi kolektif pada Surat Pemberitahuan Program. + +Perangkat Lunak yang Dapat Didistribusikan + +Apabila Program termasuk komponen-komponen yang Dapat Didistribusikan, komponen-komponen tersebut akan diidentifikasi dalam file REDIST yang menyertai Program. Selain hak-hak lisensi yang diberikan dalam Perjanjian, Pemegang Lisensi dapat mendistribusikan Perangkat Lunak yang Dapat Didistribusikan dengan tunduk kepada syarat-syarat berikut ini: +1) Pendistribusian kembali harus dalam bentuk kode objek saja dan harus mentaati semua arahan, instruksi, dan spesifikasi dalam REDIST atau dokumentasi yang menyertai Program; +2) Apabila dokumentasi yang menyertai Program secara tegas memperbolehkan Pemegang Lisensi untuk memodifikasi Perangkat Lunak yang Dapat Didistribusikan, modifikasi tersebut harus mentaati semua arahan, instruksi, dan spesifikasi dalam dokumentasi tersebut dan modifikasi-modifikasi ini, apabila ada, harus diperlakukan sebagai Perangkat Lunak yang Dapat Didistribusikan; +3) Perangkat Lunak yang Dapat Didistribusikan dapat didistribusikan hanya sebagai bagian dari aplikasi Pemegang Lisensi yang telah dikembangkan dengan menggunakan Program ("Aplikasi Pemegang Lisensi") dan hanya untuk mendukung para konsumen Pemegang Lisensi yang berkaitan dengan penggunaan mereka atas Aplikasi Pemegang Lisensi. Aplikasi Pemegang Lisensi harus merupakan tambahan nilai yang signifikan sehingga Perangkat Lunak yang Dapat Didistribusikan bukanlah merupakan motivasi penting untuk akuisisi atas produk perangkat lunak Pemegang Lisensi oleh para pengguna akhir; +4) Apabila Perangkat Lunak yang Dapat Distribusikan termasuk Java Runtime Environment, Pemegang Lisensi juga harus memasukkan Perangkat Lunak non-Java yang Dapat Didistribusikan lainnya dengan Aplikasi Pemegang Lisensi, kecuali apabila Aplikasi didesain untuk menjalankan hanya pada alat-alat komputer biasa (sebagai contoh: laptop, destop, dan server) dan tidak pada produk genggam atau alat-alat yang tersebar lainnya (sebagai contoh: alat-alat yang berisi mikroprosesor tetapi tidak memiliki kemampuan komputerisasi sebagai tujuan utama mereka); +5) Pemegang Lisensi tidak dapat menghapus file atau pemberitahuan tentang hak cipta yang terdapat dalam Perangkat Lunak yang Dapat Didistribusikan; +6) Pemegang Lisensi harus membebaskan IBM, para pemasok atau distributornya dari dan atas setiap tuntutan yang timbul dari penggunaan atau distribusi Aplikasi Pemegang Lisensi; +7) Pemegang Lisensi tidak dapat menggunakan nama jalur yang sama dengan file-file/modul-modul Perangkat Lunak yang Dapat Didistribusikan yang asli; +8) Pemegang Lisensi tidak dapat menggunakan nama-nama atau merek-merek dagang IBM, para pemasok atau distributornya yang terkait dengan pemasaran Aplikasi Pemegang Lisensi tanpa adanya persetujuan tertulis sebelumnya dari IBM atau pemasok atau distributornya tersebut; +9) IBM serta para pemasok dan distributornya memberikan Perangkat Lunak yang Dapat Didistribusikan dan dokumentasi terkait tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU.; +10) Pemegang Lisensi bertanggung jawab atas semua bantuan teknis untuk Aplikasi Pemegang Lisensi dan setiap modifikasi terhadap Perangkat Lunak yang Dapat Didistribusikan; dan +11) Perjanjian lisensi Pemegang Lisensi dengan pengguna akhir Aplikasi Pemegang Lisensi harus memberitahu pengguna akhir bahwa Perangkat Lunak yang Dapat Didistribusikan atau modifikasi-modifikasinya tidak dapat i) digunakan untuk tujuan selain untuk memungkinkan Aplikasi Pemegang Lisensi, ii) disalin (kecuali untuk tujuan cadangan), iii) selanjutnya didistribusikan atau ditransfer tanpa Aplikasi Pemegang Lisensi atau iv) dirakit kembali, disusun kembali, atau dengan cara lain, diterjemahkan kecuali apabila diizinkan secara khusus oleh undang-undang dan tanpa adanya pelepasan kontrak. Selanjutnya, perjanjian lisensi Pemegang Lisensi harus setidaknya bersifat melindungi IBM sama seperti syarat-syarat Perjanjian ini. + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + +Untuk Komponen-komponen Sumber yang tercantum dalam file REDIST dari sebuah Program, Pemegang Lisensi dapat mendistribusikan kembali versi-versi yang telah dimodifikasi dari Komponen-komponen Sumber tersebut sesuai dengan syarat-syarat lisensi ini dan setiap instruksi dalam file REDIST. + +Pemasangan + +Pemasangan adalah unit ukuran yang olehnya Program dapat diberi lisensi. Pemasangan adalah salinan Program yang dipasang di disket dalam bentuk fisik atau maya yang disediakan untuk dijalankan di komputer. Pemegang Lisensi harus mendapatkan kepemilikan untuk masing-masing Pemasangan Program. + +Unit Nilai Prosesor (Processor Value Unit - PVU) + +Unit Nilai Prosesor (PVU) adalah unit ukuran yang melaluinya Program dapat diberi lisensi. Jumlah kepemilikan PVU yang diperlukan didasarkan pada teknologi prosesor (ditentukan dalam Tabel PVU berdasarkan Vendor, Merek, Jenis, dan Nomor Model Prosesor di http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) dan jumlah prosesor yang disediakan untuk Program. IBM terus menentukan prosesor, untuk tujuan pemberian lisensi berdasarkan PVU, menjadi masing-masing inti prosesor pada sebuah keping. Sebagai contoh, keping dua inti (dual-core) prosesor memiliki dua inti prosesor. + +Pemegang Lisensi dapat meluncurkan Program yang menggunakan pemberian lisensi Kapasitas Penuh atau pemberian lisensi Kapasitas Virtualisasi (Subkapasitas) sesuai dengan Syarat-syarat Pemberian Lisensi Subkapasitas Passport Advantage (lihat halaman web di bawah ini). Apabila menggunakan pemberian lisensi Kapasitas Penuh, Pemegang Lisensi harus mendapatkan kepemilikan PVU yang memadai untuk mencakup semua inti prosesor yang diaktifkan* dalam lingkungan perangkat keras fisik yang disediakan untuk atau dikelola oleh Program, kecuali untuk server-server tersebut yang darinya Program telah dihapus secara permanen. Apabila menggunakan pemberian lisensi Kapasitas Virtualisasi, Pemegang Lisensi harus mendapatkan kepemilikan-kepemilikan yang memadai untuk mencakup semua inti prosesor yang diaktifkan yang disediakan untuk atau dikelola oleh Program, sebagaimana ditentukan sesuai dengan Aturan Penghitungan Lisensi Kapasitas Virtualisasi di http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Inti prosesor yang diaktifkan adalah inti prosesor yang tersedia untuk digunakan dalam sebuah server fisik atau maya, tanpa memperhatikan apakah kapasitas inti prosesor dapat dibatasi atau dibatasi melalui teknologi-teknologi virtualisasi, perintah-perintah sistem operasi, pengaturan-pengaturan BIOS atau pembatasan-pembatasan yang sama. + +Syarat-syarat unik Program + +Konfigurasi Siaga Diam + +Untuk tujuan Pasal ini, terdapat sebuah konfigurasi "Siaga Diam" di mana salinan Program dipasang pada sebuah server yang merupakan bagian dari solusi ketersediaan yang tinggi dan merupakan server yang kepadanya Program akan mengalihkan operasi apabila salinan Program pada server yang aktif tidak lagi dapat digunakan. Server hanya dianggap "diam" apabila, sampai terjadinya pengalihan operasi, server tersebut digunakan secara khusus untuk tindakan administratif yang membantu skenario pengalihan operasi. + +Program tidak dapat dipasang pada Server Siaga Diam, kecuali apabila mendapat lisensi yang tepat. + +Apabila Program digunakan dalam konfigurasi Siaga Diam dengan fitur Multi-Instance Queue Manager, maka salinan Program dapat tetap disimpan untuk tujuan pembuatan cadangan pada server Siaga Diam, dan diaktifkan, tetapi harus tetap "diam" dan tidak digunakan untuk melakukan pekerjaan produksi jenis apa pun, kecuali apabila server yang aktif mengalihkan operasi ke server Siaga Diam, dalam keadaan mana salinan Siaga Diam dapat digunakan untuk melakukan pekerjaan produksi selama jangka waktu pengalihan operasi. + +Apabila Program digunakan dalam konfigurasi Siaga Diam dengan sistem Ketersediaan yang Tinggi lainnya, maka salinan Program dapat tetap disimpan untuk tujuan pembuatan cadangan pada server Siaga Diam, tetapi tidak diaktifkan (dan oleh karenanya, tidak digunakan untuk melakukan pekerjaan produksi jenis apa pun), tetapi akan diaktifkan secara otomatis oleh komponen Ketersediaan yang Tinggi apabila server yang aktif tidak berfungsi, dalam keadaan mana salinan Siaga Diam dapat digunakan untuk melakukan pekerjaan produksi selama jangka waktu pengalihan operasi. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +PENTING: BACALAH DENGAN SAKSAMA + +Dua perjanjian lisensi dijabarkan di bawah ini. + +1. Perjanjian Lisensi Internasional IBM untuk Evaluasi Program +2. Perjanjian Lisensi Program Internasional IBM + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan penggunaan produktif (selain evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima Perjanjian Lisensi Program Internasional IBM, tanpa modifikasi. + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi (semuanya disebut dengan "Evaluasi"): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima baik (i) Perjanjian Lisensi Internasional IBM untuk Evaluasi Program ("Lisensi Evaluasi"), tanpa modifikasi; maupun (ii) Perjanjian Lisensi Program Internasional IBM ("IPLA"), tanpa modifikasi. + +Lisensi Evaluasi akan berlaku selama jangka waktu Evaluasi Pemegang Lisensi. + +IPLA akan berlaku secara otomatis apabila Pemegang Lisensi memilih untuk menyimpan Program setelah Evaluasi (atau mendapat salinan tambahan dari Program untuk penggunaan setelah Evaluasi) dengan mengadakan perjanjian pengadaan barang/jasa (sebagai contoh perjanjian Keuntungan Paspor Internasional IBM atau perjanjian Ekspres Keuntungan Paspor IBM). + +Lisensi Evaluasi dan IPLA tidak berlaku secara bersamaan; juga tidak memodifikasi lainnya; dan saling bergantung satu sama lain. + +Teks lengkap dari masing-masing kedua perjanjian lisensi akan menyusul. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Internasional untuk Evaluasi Program (Z125-5543-05) akan berlaku. + +Nama Program: IBM MQ Advanced Message Security V9.0.1 +Nomor Program: Evaluation + +Nama Program: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Nomor Program: Evaluation + +Nama Program: IBM MQ Telemetry V9.0.1 +Nomor Program: Evaluation + +Periode Evaluasi + +Periode evaluasi dimulai pada tanggal saat Pemegang Lisensi menyetujui syarat-syarat Perjanjian ini dan berakhir setelah 90 hari. + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + + + +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Program Internasional (Z125-3301-14) akan berlaku. + +Nama Program: IBM MQ Advanced Message Security V9.0.1 +Nomor Program: 5724-H72 + +Nama Program: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Nomor Program: 5724-H72 + +Nama Program: IBM MQ Telemetry V9.0.1 +Nomor Program: 5724-H72 + +Sebagaimana yang dijelaskan dalam Perjanjian Lisensi Program Internasional (International Program License Agreement - "IPLA") dan Informasi Lisensi ini, IBM memberikan kepada Pemegang lisensi, suatu hak terbatas atas penggunaan Program. Hak ini terbatas pada tingkat Penggunaan yang Sah, seperti Unit Nilai Prosesor ("PVU"), Unit Nilai Sumber Daya ("RVU"), Unit Nilai ("VU"), atau tingkat penggunaan yang ditentukan lainnya, yang dibayarkan oleh Pemegang Lisensi sebagaimana yang dibuktikan dalam Bukti Kepemilikan. Penggunaan Pemegang Lisensi juga dapat dibatasi untuk mesin tertentu, atau hanya sebagai Program Pendukung, atau tunduk kepada pembatasan lainnya. Jika Pemegang Lisensi tidak membayar semua nilai ekonomis dari Program, penggunaan yang lain tidak diizinkan tanpa pembayaran biaya tambahan. Selain itu, Pemegang Lisensi tidak berhak untuk menggunakan Program guna memberikan layanan TI komersial kepada pihak ketiga mana pun, memberikan hosting atau pembagian waktu (timesharing) komersial, atau mensublisensikan, menyewakan, atau menyewagunakan Program kecuali secara tegas diatur dalam perjanjian-perjanjian yang berlaku yang menjadi dasar bagi Pemegang Lisensi dalam memperoleh otorisasi untuk menggunakan Program. Hak tambahan dapat diberikan kepada Pemegang Lisensi sesuai dengan pembayaran biaya tambahan atau sesuai dengan syarat-syarat tambahan atau yang berbeda. IBM berhak untuk menentukan apakah akan memberikan hak tambahan tersebut kepada Pemegang Lisensi atau tidak. + +Spesifikasi Program dapat ditemukan dalam bagian Informasi Teknis dan Deskripsi kolektif pada Surat Pemberitahuan Program. + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + +Pemasangan + +Pemasangan adalah unit ukuran yang olehnya Program dapat diberi lisensi. Pemasangan adalah salinan Program yang dipasang di disket dalam bentuk fisik atau maya yang disediakan untuk dijalankan di komputer. Pemegang Lisensi harus mendapatkan kepemilikan untuk masing-masing Pemasangan Program. + +Unit Nilai Prosesor (Processor Value Unit - PVU) + +Unit Nilai Prosesor (PVU) adalah unit ukuran yang melaluinya Program dapat diberi lisensi. Jumlah kepemilikan PVU yang diperlukan didasarkan pada teknologi prosesor (ditentukan dalam Tabel PVU berdasarkan Vendor, Merek, Jenis, dan Nomor Model Prosesor di http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) dan jumlah prosesor yang disediakan untuk Program. IBM terus menentukan prosesor, untuk tujuan pemberian lisensi berdasarkan PVU, menjadi masing-masing inti prosesor pada sebuah keping. Sebagai contoh, keping dua inti (dual-core) prosesor memiliki dua inti prosesor. + +Pemegang Lisensi dapat meluncurkan Program yang menggunakan pemberian lisensi Kapasitas Penuh atau pemberian lisensi Kapasitas Virtualisasi (Subkapasitas) sesuai dengan Syarat-syarat Pemberian Lisensi Subkapasitas Passport Advantage (lihat halaman web di bawah ini). Apabila menggunakan pemberian lisensi Kapasitas Penuh, Pemegang Lisensi harus mendapatkan kepemilikan PVU yang memadai untuk mencakup semua inti prosesor yang diaktifkan* dalam lingkungan perangkat keras fisik yang disediakan untuk atau dikelola oleh Program, kecuali untuk server-server tersebut yang darinya Program telah dihapus secara permanen. Apabila menggunakan pemberian lisensi Kapasitas Virtualisasi, Pemegang Lisensi harus mendapatkan kepemilikan-kepemilikan yang memadai untuk mencakup semua inti prosesor yang diaktifkan yang disediakan untuk atau dikelola oleh Program, sebagaimana ditentukan sesuai dengan Aturan Penghitungan Lisensi Kapasitas Virtualisasi di http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Inti prosesor yang diaktifkan adalah inti prosesor yang tersedia untuk digunakan dalam sebuah server fisik atau maya, tanpa memperhatikan apakah kapasitas inti prosesor dapat dibatasi atau dibatasi melalui teknologi-teknologi virtualisasi, perintah-perintah sistem operasi, pengaturan-pengaturan BIOS atau pembatasan-pembatasan yang sama. + +Syarat-syarat unik Program + +Konfigurasi Siaga Diam + +Untuk tujuan Pasal ini, terdapat sebuah konfigurasi "Siaga Diam" di mana salinan Program dipasang pada sebuah server yang merupakan bagian dari solusi ketersediaan yang tinggi dan merupakan server yang kepadanya Program akan mengalihkan operasi apabila salinan Program pada server yang aktif tidak lagi dapat digunakan. Server hanya dianggap "diam" apabila, sampai terjadinya pengalihan operasi, server tersebut digunakan secara khusus untuk tindakan administratif yang membantu skenario pengalihan operasi. + +Program tidak dapat dipasang pada Server Siaga Diam, kecuali apabila mendapat lisensi yang tepat. + +Apabila Program digunakan dalam konfigurasi Siaga Diam dengan fitur Multi-Instance Queue Manager, maka salinan Program dapat tetap disimpan untuk tujuan pembuatan cadangan pada server Siaga Diam, dan diaktifkan, tetapi harus tetap "diam" dan tidak digunakan untuk melakukan pekerjaan produksi jenis apa pun, kecuali apabila server yang aktif mengalihkan operasi ke server Siaga Diam, dalam keadaan mana salinan Siaga Diam dapat digunakan untuk melakukan pekerjaan produksi selama jangka waktu pengalihan operasi. + +Apabila Program digunakan dalam konfigurasi Siaga Diam dengan sistem Ketersediaan yang Tinggi lainnya, maka salinan Program dapat tetap disimpan untuk tujuan pembuatan cadangan pada server Siaga Diam, tetapi tidak diaktifkan (dan oleh karenanya, tidak digunakan untuk melakukan pekerjaan produksi jenis apa pun), tetapi akan diaktifkan secara otomatis oleh komponen Ketersediaan yang Tinggi apabila server yang aktif tidak berfungsi, dalam keadaan mana salinan Siaga Diam dapat digunakan untuk melakukan pekerjaan produksi selama jangka waktu pengalihan operasi. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +PENTING: BACALAH DENGAN SAKSAMA + +Dua perjanjian lisensi dijabarkan di bawah ini. + +1. Perjanjian Lisensi Internasional IBM untuk Evaluasi Program +2. Perjanjian Lisensi Program Internasional IBM + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan penggunaan produktif (selain evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima Perjanjian Lisensi Program Internasional IBM, tanpa modifikasi. + +Jika Pemegang Lisensi mendapatkan Program untuk tujuan evaluasi, pengujian, percobaan "coba atau beli," atau demonstrasi (semuanya disebut dengan "Evaluasi"): Dengan mengeklik pada tombol "Terima" di bawah ini, Pemegang Lisensi menerima baik (i) Perjanjian Lisensi Internasional IBM untuk Evaluasi Program ("Lisensi Evaluasi"), tanpa modifikasi; maupun (ii) Perjanjian Lisensi Program Internasional IBM ("IPLA"), tanpa modifikasi. + +Lisensi Evaluasi akan berlaku selama jangka waktu Evaluasi Pemegang Lisensi. + +IPLA akan berlaku secara otomatis apabila Pemegang Lisensi memilih untuk menyimpan Program setelah Evaluasi (atau mendapat salinan tambahan dari Program untuk penggunaan setelah Evaluasi) dengan mengadakan perjanjian pengadaan barang/jasa (sebagai contoh perjanjian Keuntungan Paspor Internasional IBM atau perjanjian Ekspres Keuntungan Paspor IBM). + +Lisensi Evaluasi dan IPLA tidak berlaku secara bersamaan; juga tidak memodifikasi lainnya; dan saling bergantung satu sama lain. + +Teks lengkap dari masing-masing kedua perjanjian lisensi akan menyusul. + + +Perjanjian Lisensi Internasional untuk Evaluasi Program + +Bagian 1 - Syarat-syarat Umum + +DENGAN MENGUNDUH, MEMASANG, MENYALIN, MENGAKSES, MENEKAN TOMBOL "TERIMA" ATAU DENGAN CARA LAIN MENGGUNAKAN PROGRAM, PEMEGANG LISENSI MENYETUJUI SYARAT-SYARAT PERJANJIAN INI. APABILA ANDA MENERIMA SYARAT-SYARAT INI ATAS NAMA PEMEGANG LISENSI, ANDA MENYATAKAN DAN MENJAMIN BAHWA ANDA MEMILIKI WEWENANG SEPENUHNYA UNTUK MENGIKAT PEMEGANG LISENSI DENGAN SYARAT-SYARAT INI. APABILA ANDA TIDAK MENYETUJUI SYARAT-SYARAT INI, + +* JANGAN MENGUNDUH, MEMASANG, MENYALIN, MENGAKSES, MENEKAN TOMBOL "TERIMA" ATAU MENGGUNAKAN PROGRAM; DAN + +* SEGERA MENGEMBALIKAN MEDIA DAN DOKUMENTASI YANG TIDAK TERPAKAI KEPADA PIHAK DARI MANA ANDA MENDAPATKANNYA. APABILA PROGRAM TELAH DIUNDUH, MUSNAHKAN SEMUA SALINAN PROGRAM. + +1. Definisi + +"Penggunaan yang Sah" - tingkat yang ditetapkan di mana Pemegang Lisensi berhak untuk melaksanakan atau menjalankan Program. Tingkat tersebut dapat diukur berdasarkan jumlah pengguna, jutaan unit layanan ("MSU"), Unit Nilai Prosesor ("PVU") atau tingkat penggunaan lainnya yang ditetapkan oleh IBM. + +"IBM" - International Business Machines Corporation atau salah satu anak perusahaannya. + +"Informasi tentang Lisensi" ("IL") - dokumen yang memberikan informasi dan syarat-syarat tambahan yang dikhususkan untuk Program. IL Program dapat dilihat dalam direktori Program dengan menggunakan perintah sistem atau sebagai buklet yang dimasukkan bersama dengan Program. + +"Program" - hal-hal berikut ini, termasuk asli dan seluruh atau sebagian salinan: 1) instruksi dan data yang dapat dibaca oleh mesin, 2) komponen, berkas, dan modul, 3) konten audio-visual (seperti gambar, teks, rekaman atau foto), dan 4) materi yang dilisensikan terkait (seperti kunci dan dokumentasi). + +2. Susunan Perjanjian + +Perjanjian ini termasuk Bagian 1 - Syarat-syarat Umum, Bagian 2 - Syarat-syarat Khusus Tiap Negara (apabila ada) dan IL dan merupakan perjanjian yang lengkap antara Pemegang Lisensi dan IBM tentang penggunaan Program. Perjanjian ini menggantikan setiap komunikasi lisan atau tertulis sebelumnya antara Pemegang Lisensi dan IBM tentang penggunaan Program oleh Pemegang Lisensi. Syarat-syarat Bagian 2 dapat menggantikan atau memodifikasi syarat-syarat Bagian 1. Sepanjang terdapat ketidaksesuaian, IL berlaku atas kedua Bagian tersebut. + +3. Pemberian Lisensi + +Program adalah milik IBM atau pemasok IBM serta diberi hak cipta dan lisensi, tetapi tidak dijual. + +IBM memberikan lisensi yang terbatas, tidak eksklusif, dan tidak dapat ditransfer kepada Pemegang Lisensi untuk 1) mengunduh, memasang, dan menggunakan Program selama periode evaluasi sampai dengan Penggunaan yang Sah sebagaimana ditetapkan dalam IL semata-mata untuk tujuan evaluasi, pengujian atau demonstrasi internal berdasarkan uji coba; 2) membuat dan memasang sejumlah salinan yang wajar untuk mendukung Penggunaan yang Sah tersebut, dan 3) membuat salinan cadangan, semua dengan ketentuan bahwa + +a. Pemegang Lisensi telah mendapatkan Program secara sah dan mematuhi syarat-syarat Perjanjian ini; + +b. salinan cadangan tidak bekerja kecuali apabila Program yang dicadangkan tidak dapat bekerja; + +c. Pemegang Lisensi mereproduksi semua pemberitahuan tentang hak cipta dan keterangan kepemilikan lainnya dalam masing-masing salinan atau sebagian salinan Program; + +d. Pemegang Lisensi menyimpan catatan dari semua salinan Program dan memastikan bahwa setiap individu yang menggunakan Program (yang diakses dari jarak dekat atau jarak jauh) 1) melakukan hal tersebut hanya atas nama Pemegang Lisensi dan 2) mematuhi syarat-syarat Perjanjian ini; + +e. Pemegang Lisensi tidak 1) menggunakan Program untuk tujuan-tujuan produktif atau dengan cara lain, menggunakan, menyalin, memodifikasi atau mendistribusikan Program kecuali apabila diizinkan secara tegas dalam Perjanjian ini; 2) merakit kembali, menyusun kembali, dengan cara lain, menerjemahkan atau merekayasa kembali Program, kecuali apabila diizinkan secara tegas oleh undang-undang tanpa adanya kemungkinan pelepasan kontrak; 3) menggunakan setiap komponen, berkas, modul, konten audio-visual Program, atau materi yang dilisensikan terkait yang terpisah dari Program tersebut; 4) mensublisensikan, menyewa atau menyewakan Program; atau 5) menggunakan Program untuk penyelenggaraan aplikasi komersial; dan + +f. apabila Pemegang Lisensi mendapatkan Program ini sebagai Program Pendukung, Pemegang Lisensi menggunakan Program ini hanya untuk mendukung Program Utama dan tunduk kepada setiap batasan dalam lisensi untuk Program Utama, atau, apabila Pemegang Lisensi mendapatkan Program ini sebagai Program Utama, Pemegang Lisensi menggunakan semua Program Pendukung hanya untuk mendukung Program ini dan tunduk kepada setiap batasan dalam Perjanjian ini. Untuk tujuan Butir "f" ini, "Program Pendukung" adalah Program yang merupakan bagian dari Program IBM lainnya ("Program Utama") dan diidentifikasi sebagai Program Pendukung dalam IL Program Utama. (Untuk mendapatkan lisensi terpisah untuk Program Pendukung tanpa pembatasan-pembatasan ini, Pemegang Lisensi sebaiknya menghubungi pihak yang darinya Pemegang Lisensi telah mendapatkan Program Pendukung.) + +Lisensi ini berlaku untuk masing-masing salinan Program yang dibuat oleh Pemegang Lisensi. + +3.1 Pembaruan, Perbaikan, dan Tambahan + +Pada saat Pemegang Lisensi menerima pembaruan, perbaikan atau tambahan untuk Program, Pemegang Lisensi menerima syarat-syarat tambahan atau syarat-syarat yang berbeda yang berlaku untuk pembaruan, perbaikan atau tambahan tersebut yang ditetapkan dalam IL-nya. Apabila syarat-syarat tambahan atau syarat-syarat yang berbeda tidak diberikan, maka pembaruan, perbaikan atau tambahan tersebut semata-mata tunduk kepada Perjanjian ini. Apabila Program digantikan oleh pembaruan, Pemegang Lisensi setuju untuk segera berhenti menggunakan Program yang digantikan. + +3.2 Jangka Waktu dan Pengakhiran + +Periode evaluasi dimulai pada tanggal saat Pemegang Lisensi menyetujui syarat-syarat Perjanjian ini dan berakhir pada waktu mana yang terlebih dahulu dari 1) akhir jangka waktu atau tanggal yang ditetapkan oleh IBM dalam Informasi tentang Lisensi atau dokumen transaksi atau 2) tanggal pada saat Program menonaktifkan dirinya sendiri secara otomatis. Pemegang Lisensi akan memusnahkan Program dan semua salinan yang dibuat dari Program tersebut dalam jangka waktu sepuluh hari sejak akhir periode evaluasi. Apabila IBM menetapkan dalam IL bahwa Pemegang Lisensi dapat menyimpan Program dan Pemegang Lisensi memilih untuk melakukan hal tersebut, maka Program akan tunduk kepada perjanjian lisensi yang berbeda, yang akan diberikan oleh IBM kepada Pemegang Lisensi. Selain itu, biaya dapat dikenakan. + +IBM dapat mengakhiri lisensi Pemegang Lisensi apabila Pemegang Lisensi tidak mematuhi syarat-syarat Perjanjian ini. Apabila lisensi diakhiri karena alasan apa pun oleh salah satu pihak, Pemegang Lisensi setuju untuk segera berhenti menggunakan dan memusnahkan semua salinan Program Pemegang Lisensi. Setiap syarat Perjanjian ini yang berdasarkan sifatnya melampaui pengakhiran Perjanjian ini tetap berlaku sampai syarat tersebut dipenuhi, dan berlaku untuk masing-masing penerus dan penerima pengalihan hak kedua belah pihak. + +PROGRAM DAPAT BERISI ALAT YANG MENONAKTIFKAN YANG AKAN MEMBUAT PROGRAM TERSEBUT TIDAK DAPAT DIGUNAKAN SETELAH PERIODE EVALUASI BERAKHIR. PEMEGANG LISENSI SETUJU UNTUK TIDAK MERUSAK ALAT YANG MENONAKTIFKAN ATAU PROGRAM. PEMEGANG LISENSI SEBAIKNYA MELAKUKAN PENCEGAHAN UNTUK MENCEGAH KEHILANGAN DATA YANG MUNGKIN TERJADI APABILA PROGRAM TIDAK DAPAT DIGUNAKAN KEMBALI. + +4. Biaya-biaya + +Tidak terdapat biaya untuk penggunaan Program selama periode evaluasi. + +5. Tidak Adanya Jaminan + +DENGAN TUNDUK KEPADA SETIAP JAMINAN YANG DIDASARKAN PADA UNDANG-UNDANG YANG TIDAK DAPAT DIKECUALIKAN, IBM TIDAK MEMBUAT JAMINAN ATAU KETENTUAN APA PUN, SECARA TEGAS ATAU TERSIRAT, TENTANG PROGRAM ATAU DUKUNGAN, APABILA ADA, TERMASUK, TETAPI TIDAK TERBATAS PADA, SETIAP JAMINAN ATAU KETENTUAN APA PUN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN, KUALITAS YANG MEMUASKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN HAK MILIK, SERTA SETIAP JAMINAN ATAU KETENTUAN TENTANG TIDAK ADANYA PELANGGARAN. + +BEBERAPA NEGARA ATAU YURISDIKSI TIDAK MEMPERBOLEHKAN PENGECUALIAN TENTANG JAMINAN SECARA TEGAS ATAU TERSIRAT. OLEH KARENA ITU, PENGECUALIAN DI ATAS MUNGKIN TIDAK BERLAKU UNTUK PEMEGANG LISENSI. DALAM HAL TERSEBUT, JAMINAN-JAMINAN TERSEBUT DIBATASI SELAMA PERIODE MINIMUM YANG DIWAJIBKAN OLEH UNDANG-UNDANG. TIDAK ADA JAMINAN APA PUN YANG BERLAKU SETELAH PERIODE TERSEBUT. BEBERAPA NEGARA ATAU YURISDIKSI TIDAK MEMPERBOLEHKAN BATASAN-BATASAN TENTANG BERAPA LAMA JAMINAN YANG TERSIRAT BERLAKU. OLEH KARENA ITU, BATASAN DI ATAS MUNGKIN TIDAK BERLAKU UNTUK PEMEGANG LISENSI. PEMEGANG LISENSI DAPAT MEMILIKI HAK LAINNYA YANG BERBEDA-BEDA ANTARA NEGARA YANG SATU DENGAN NEGARA YANG LAIN ATAU ANTARA YURISDIKSI YANG SATU DENGAN YURISDIKSI YANG LAIN. + +SANGGAHAN-SANGGAHAN DAN PENGECUALIAN-PENGECUALIAN DALAM PASAL 5 INI JUGA BERLAKU UNTUK SETIAP PENGEMBANG DAN PEMASOK PROGRAM IBM. + +PARA PRODUSEN, PEMASOK ATAU PENERBIT PROGRAM NON-IBM DAPAT MEMBERIKAN GARANSI MEREKA SENDIRI. + +IBM TIDAK MEMBERIKAN DUKUNGAN DALAM BENTUK APA PUN, KECUALI APABILA IBM MENETAPKAN LAIN. DALAM HAL TERSEBUT, SETIAP DUKUNGAN YANG DIBERIKAN OLEH IBM TUNDUK KEPADA SANGGAHAN-SANGGAHAN DAN PENGECUALIAN-PENGECUALIAN DALAM PASAL 5 INI. + +6. Data dan Basis Data Pemegang Lisensi + +Untuk membantu Pemegang Lisensi dalam mengisolasi penyebab permasalahan pada Program, IBM dapat meminta agar Pemegang Lisensi 1) memperbolehkan IBM untuk mengakses sistem Pemegang Lisensi dari jarak jauh atau 2) mengirimkan informasi atau data sistem Pemegang Lisensi kepada IBM. Akan tetapi, IBM tidak diwajibkan untuk memberikan asistensi tersebut kecuali apabila IBM dan Pemegang Lisensi mengadakan perjanjian tertulis secara terpisah yang atas dasarnya IBM setuju untuk memberikan kepada Pemegang Lisensi jenis dukungan tersebut, yang tidak termasuk dalam kewajiban-kewajiban IBM dalam Perjanjian ini. Dalam hal apa pun, IBM menggunakan informasi tentang kesalahan-kesalahan dan permasalahan-permasalahan untuk meningkatkan produk dan layanannya serta membantu pemberian tawaran-tawaran dukungan terkait yang dilakukannya. Untuk tujuan-tujuan ini, IBM dapat menggunakan badan-badan dan para subkontraktor IBM (termasuk dalam satu negara atau lebih selain negara di mana Pemegang Lisensi berada), dan Pemegang Lisensi memberikan wewenang kepada IBM untuk melakukan hal tersebut. + +Pemegang Lisensi tetap bertanggung jawab atas 1) setiap data dan konten dari setiap basis data yang disediakan oleh Pemegang Lisensi untuk IBM, 2) pilihan dan pelaksanaan prosedur dan kendali yang terkait dengan akses, keamanan, enkripsi, penggunaan, dan transmisi data (termasuk setiap data yang dapat diidentifikasi secara pribadi), serta 3) cadangan dan pemulihan atas setiap basis data dan setiap data yang disimpan. Pemegang Lisensi tidak akan mengirimkan atau memberikan kepada IBM akses ke setiap informasi yang dapat diidentifikasi secara pribadi, dalam bentuk data atau bentuk apa pun lainnya, dan akan bertanggung jawab atas biaya-biaya dan jumlah-jumlah lainnya yang wajar yang mungkin ditanggung oleh IBM terkait dengan setiap informasi tersebut yang secara tidak sengaja diberikan kepada IBM atau kehilangan atau pengungkapan informasi tersebut oleh IBM, termasuk biaya-biaya dan jumlah-jumlah lainnya yang timbul dari tuntutan pihak ketiga. + +7. Batasan Kewajiban + +Batasan-batasan dan pengecualian-pengecualian dalam Pasal 7 (Batasan Kewajiban) ini berlaku sepanjang batasan-batasan dan pengecualian-pengecualian tersebut tidak dilarang oleh undang-undang yang berlaku tanpa adanya kemungkinan pelepasan kontrak. + +7.1 Hal-hal yang Mungkin Menjadi Tanggung Jawab IBM + +Keadaan-keadaan dapat timbul apabila, karena wanprestasi dari pihak IBM atau kewajiban lainnya, Pemegang Lisensi berhak untuk mendapatkan ganti rugi dari IBM. Terlepas dari alasan Pemegang Lisensi untuk menuntut ganti rugi dari IBM (termasuk pelanggaran yang mendasar, kelalaian, pernyataan yang salah, atau kontrak lainnya atau tuntutan atas tindakan kejahatan), seluruh kewajiban IBM untuk semua tuntutan secara keseluruhan yang timbul dari atau terkait dengan masing-masing Program atau dengan cara lain, yang timbul berdasarkan Perjanjian ini tidak akan melampaui jumlah dari setiap 1) ganti rugi karena cedera badan (termasuk kematian) dan kerusakan terhadap properti yang bersifat tetap (real property) dan properti pribadi yang berwujud dan 2) ganti rugi aktual atas kerusakan langsung lainnya hingga mencapai A.S. $10.000 (atau jumlah yang setara dengan mata uang setempat). + +Batas ini juga berlaku untuk setiap pengembang dan pemasok Program IBM. Batas ini merupakan jumlah maksimum tanggung jawab IBM serta para pengembang dan pemasok Programnya secara bersama-sama. + +7.2 Hal-hal yang Bukan Merupakan Tanggung Jawab IBM + +DALAM SITUASI APA PUN JUGA, IBM, PARA PENGEMBANG ATAU PEMASOK PROGRAMNYA TIDAK BERTANGGUNG JAWAB ATAS SALAH SATU HAL BERIKUT INI, BAHKAN APABILA TELAH DIINFORMASIKAN BAHWA TERDAPAT KEMUNGKINAN TERJADI HAL-HAL BERIKUT INI: + +a. KEHILANGAN ATAU KERUSAKAN DATA; + +b. KERUSAKAN / KERUGIAN KHUSUS, INSEDENTIL, CONTOH, ATAU KERUSAKAN / KERUGIAN TAK LANGSUNG, ATAU UNTUK SETIAP KERUSAKAN / KERUGIAN SEBAB-AKIBAT EKONOMIS; ATAU + +c. HILANGNYA LABA, BISNIS, PENDAPATAN, NAMA BAIK (GOODWILL), ATAU SIMPANAN YANG DIHARAPKAN. + +8. Verifikasi terhadap Kepatuhan + +Untuk tujuan-tujuan Pasal 8 (Verifikasi terhadap Kepatuhan) ini, "Syarat-syarat Program Evaluasi" ini berarti 1) Perjanjian ini serta perubahan-perubahan dan dokumen-dokumen transaksi yang berlaku yang diberikan oleh IBM, dan 2) kebijakan-kebijakan perangkat lunak IBM yang dapat dilihat di situs web Kebijakan Perangkat Lunak IBM (www.ibm.com/softwarepolicies), termasuk tetapi tidak terbatas pada kebijakan-kebijakan tersebut yang terkait dengan cadangan, penetapan harga subkapasitas, dan migrasi. + +Hak-hak dan kewajiban-kewajiban yang tercantum dalam Pasal 8 ini tetap berlaku selama periode saat Program dilisensikan kepada Pemegang Lisensi dan selama dua tahun berikutnya. + +8.1 Proses Verifikasi + +Pemegang Lisensi setuju untuk menciptakan, menyimpan, dan memberikan kepada IBM dan para auditornya catatan-catatan tertulis yang akurat, keluaran (output) sistem, dan informasi sistem lainnya yang memadai untuk memberikan verifikasi yang dapat diaudit bahwa penggunaan semua Program oleh Pemegang Lisensi sesuai dengan Syarat-syarat Program Evaluasi, termasuk, tetapi tidak terbatas pada, semua syarat pemberian lisensi dan kualifikasi penetapan harga yang berlaku dari IBM. Pemegang Lisensi bertanggung jawab untuk 1) memastikan bahwa pihaknya tidak melampaui Penggunaannya yang Sah dan 2) tetap sesuai dengan Syarat-syarat Program Evaluasi. + +Setelah adanya pemberitahuan yang wajar, IBM dapat memverifikasi kepatuhan Pemegang Lisensi terhadap Syarat-syarat Program Evaluasi di semua lokasi dan untuk semua lingkungan di mana Pemegang Lisensi menggunakan (untuk tujuan apa pun) Program-program dengan tunduk kepada Syarat-syarat Program Evaluasi. Verifikasi tersebut akan dilakukan dengan cara yang seminimal mungkin mengganggu bisnis Pemegang Lisensi, dan dapat dilakukan di tempat-tempat Pemegang Lisensi, selama jam-jam kerja normal. IBM dapat menggunakan auditor yang independen untuk membantu verifikasi tersebut, dengan ketentuan bahwa IBM memiliki perjanjian kerahasiaan tertulis yang ada pada auditor tersebut. + +8.2 Resolusi + +IBM akan memberitahukan kepada Pemegang Lisensi secara tertulis apabila verifikasi tersebut menunjukkan bahwa Pemegang Lisensi telah menggunakan Program dengan cara yang melampaui Penggunaannya yang Sah atau dengan cara lain, tidak sesuai dengan Syarat-syarat Program Evaluasi. Pemegang Lisensi setuju untuk segera membayar kepada IBM secara langsung biaya-biaya yang ditetapkan oleh IBM dalam tagihan untuk 1) setiap kelebihan penggunaan tersebut, 2) dukungan untuk kelebihan penggunaan tersebut selama kurang dari jangka waktu kelebihan penggunaan tersebut atau dua tahun, dan 3) setiap biaya tambahan dan kewajiban lainnya yang ditentukan yang diakibatkan oleh verifikasi tersebut. + +9. Pemberitahuan Pihak Ketiga + +Program dapat termasuk kode pihak ketiga yang dilisensikan oleh IBM, bukan pihak ketiga, kepada Pemegang Lisensi berdasarkan Perjanjian ini. Pemberitahuan-pemberitahuan, apabila ada, untuk kode pihak ketiga ("Pemberitahuan Pihak Ketiga") dimasukkan hanya untuk informasi Pemegang Lisensi. Pemberitahuan-pemberitahuan ini dapat dilihat di dalam berkas(-berkas) PEMBERITAHUAN Program. Informasi tentang cara untuk mendapatkan sumber kode untuk kode pihak ketiga tertentu dapat dilihat di dalam Pemberitahuan Pihak Ketiga. Apabila di dalam Pemberitahuan Pihak Ketiga, IBM mengidentifikasi kode pihak ketiga sebagai "Kode Pihak Ketiga yang Dapat Dimodifikasi", IBM memberikan wewenang kepada Pemegang Lisensi untuk 1) memodifikasi Kode Pihak Ketiga yang Dapat Dimodifikasi dan 2) merekayasa kembali modul-modul Program yang terhubung secara langsung dengan Kode Pihak Ketiga yang Dapat Dimodifikasi dengan ketentuan bahwa modul-modul tersebut hanya untuk tujuan debug modifikasi-modifikasi Pemegang Lisensi atas kode pihak ketiga tersebut. Kewajiban-kewajiban layanan dan dukungan IBM, apabila ada, berlaku hanya untuk Program yang tidak dimodifikasi. + +10. Umum + +a. Tidak ada satu pun dalam Perjanjian ini yang mempengaruhi hak-hak konsumen yang didasarkan pada undang-undang yang tidak dapat dilepaskan atau dibatasi oleh kontrak. + +b. Apabila terdapat ketentuan Perjanjian ini yang dianggap tidak sah atau tidak dapat diberlakukan, ketentuan-ketentuan Perjanjian lainnya yang tersisa tetap berlaku sepenuhnya. + +c. Pemegang Lisensi dilarang mengekspor Program. + +d. Pemegang Lisensi memberikan wewenang kepada International Business Machines Corporation dan anak perusahaannya (dan para penerus, penerima pengalihan hak, kontraktor, dan Mitra Bisnis IBM mereka) untuk menyimpan dan menggunakan informasi kontak bisnis Pemegang Lisensi di mana pun mereka menjalankan bisnis, terkait dengan produk-produk dan layanan-layanan IBM, atau sebagai kelanjutan dari hubungan bisnis IBM dengan Pemegang Lisensi. + +e. Masing-masing pihak akan memberikan kesempatan yang wajar kepada pihak lainnya untuk mematuhi sebelum pihaknya mengajukan tuntutan bahwa pihak lainnya belum memenuhi kewajiban-kewajibannya berdasarkan Perjanjian ini. Para pihak akan berupaya dengan itikad baik untuk menyelesaikan semua sengketa, perselisihan atau tuntutan di antara para pihak yang terkait dengan Perjanjian ini. + +f. Kecuali apabila diwajibkan lain oleh undang-undang yang berlaku tanpa adanya kemungkinan pelepasan atau batasan kontrak: 1) tidak ada satu pihak pun yang akan mengambil tindakan hukum, tanpa memperhatikan bentuknya, untuk setiap tuntutan yang timbul dari atau terkait dengan Perjanjian ini dalam jangka waktu lebih dari dua tahun setelah timbulnya penyebab tuntutan; dan 2) setelah berakhirnya batas waktu tersebut, setiap tuntutan tersebut dan semua hak masing-masing yang terkait dengan tuntutan berakhir. + +g. Pemegang Lisensi atau IBM tidak bertanggung jawab atas kegagalan dalam memenuhi setiap kewajiban yang diakibatkan oleh penyebab-penyebab di luar kendalinya. + +h. Tidak ada hak atau dasar tuntutan untuk pihak ketiga yang diciptakan oleh Perjanjian ini, dan IBM tidak bertanggung jawab atas tuntutan-tuntutan pihak ketiga terhadap Pemegang Lisensi, kecuali apabila diizinkan dalam Subpasal 7.1 (Hal-hal yang Mungkin Menjadi Tanggung Jawab IBM) di atas karena cedera badan (termasuk kematian) atau kerusakan terhadap properti pribadi yang bersifat tetap atau berwujud yang merupakan tanggung jawab IBM secara hukum kepada pihak ketiga tersebut. + +i. Dalam mengadakan Perjanjian ini, tidak ada satu pihak pun yang mendasarkan pada setiap pernyataan yang tidak ditetapkan dalam Perjanjian ini, termasuk tetapi tidak terbatas pada setiap pernyataan yang terkait dengan: 1) kinerja atau fungsi Program, selain yang dijamin secara tegas dalam Pasal 5 (Tidak Adanya Jaminan) di atas; 2) pengalaman-pengalaman atau rekomendasi-rekomendasi para pihak lainnya; atau 3) hasil atau simpanan apa pun yang dapat dicapai oleh Pemegang Lisensi. + +j. IBM telah menandatangani perjanjian-perjanjian dengan perusahaan-perusahaan tertentu (disebut sebagai "Para Mitra Bisnis IBM") untuk mempromosikan, memasarkan, dan mendukung Program-program tertentu. Para Mitra Bisnis IBM tetap bersifat independen dan terpisah dari IBM. IBM tidak bertanggung jawab atas tindakan-tindakan atau pernyataan-pernyataan Para Mitra Bisnis IBM atau kewajiban-kewajiban yang mereka miliki terhadap Pemegang Lisensi. + +k. Syarat-syarat lisensi dan pemberian ganti rugi atas kekayaan intelektual dari perjanjian-perjanjian Pemegang Lisensi lainnya dengan IBM (seperti Perjanjian Pelanggan IBM) tidak berlaku untuk lisensi-lisensi Program yang diberikan berdasarkan Perjanjian ini. + +11. Cakupan Geografis dan Undang-undang yang Mengatur + +11.1 Undang-undang yang Mengatur + +Kedua belah pihak sepakat bahwa pelaksanaan undang-undang negara di mana Pemegang Lisensi telah mendapatkan lisensi Program akan mengatur, menafsirkan, dan memberlakukan semua hak, tugas, dan kewajiban Pemegang Lisensi dan IBM yang timbul dari, atau yang dengan cara apa pun terkait dengan, pokok materi Perjanjian ini, dengan tidak memperhatikan ketidaksesuaian prinsip undang-undang. + +Konvensi Perserikatan Bangsa-Bangsa tentang Kontrak Penjualan Barang Internasional (United Nations Convention on Contracts for the International Sale of Goods) tidak berlaku. + +11.2 Yurisdiksi + +Semua hak, tugas, dan kewajiban tunduk kepada pengadilan-pengadilan negara di mana Pemegang Lisensi telah mendapatkan lisensi Program. + +Bagian 2 - Syarat-syarat Khusus Tiap Negara + +Untuk lisensi-lisensi yang diberikan di Indonesia, syarat-syarat berikut ini menggantikan atau memodifikasi syarat-syarat yang dijadikan acuan dalam Bagian 1. Semua syarat dalam Bagian 1 yang tidak diubah oleh perubahan-perubahan ini tetap tidak berubah dan tetap berlaku. Bagian 2 ini disusun sebagai berikut: + +* Perubahan negara terhadap Bagian 1, Pasal 11 (Undang-undang dan Yurisdiksi yang Mengatur); dan + +* Perubahan negara Asia Pasifik terhadap syarat-syarat Perjanjian lainnya. + +Perubahan negara terhadap Bagian 1, Pasal 11 (Undang-undang dan Yurisdiksi yang Mengatur) + +11.3 Arbitrase + +Ayat-ayat berikut ini ditambahkan sebagai Subpasal 11.3 (Arbitrase) yang baru sebagaimana ayat-ayat tersebut berlaku untuk Indonesia. Ketentuan-ketentuan Subpasal 11.3 ini berlaku atas ketentuan-ketentuan Subpasal 11.2 (Yurisdiksi) sepanjang diizinkan oleh undang-undang dan peraturan tata tertib yang mengatur yang berlaku: + +Masing-masing pihak akan memberikan kesempatan yang wajar kepada pihak lainnya untuk mematuhi sebelum pihaknya mengajukan tuntutan bahwa pihak lainnya belum memenuhi kewajiban-kewajibannya berdasarkan Perjanjian ini. Para pihak akan berupaya dengan itikad baik untuk menyelesaikan semua sengketa, perselisihan atau tuntutan di antara para pihak yang terkait dengan Perjanjian ini. Kecuali diwajibkan lain oleh undang-undang yang berlaku tanpa adanya kemungkinan pelepasan atau batasan kontrak, i) tidak ada satu pihak pun yang akan mengambil tindakan hukum, tanpa memperhatikan bentuknya, yang timbul karena atau terkait dengan Perjanjian ini atau transaksi apa pun berdasarkan Perjanjian ini dalam jangka waktu lebih dari dua tahun setelah timbulnya dasar tuntutan; dan ii) setelah batas waktu tersebut, setiap tindakan hukum yang timbul karena Perjanjian ini atau transaksi apa pun berdasarkan Perjanjian ini dan semua hak masing-masing yang terkait dengan setiap tindakan tersebut berakhir. + +Sengketa-sengketa yang timbul karena atau terkait dengan Perjanjian ini pada akhirnya akan diselesaikan melalui arbitrase yang akan diadakan di Jakarta, Indonesia, sesuai dengan aturan-aturan Badan Arbitrase Nasional Indonesia ("BANI") yang berlaku pada saat itu. Putusan arbitrase akan bersifat final dan mengikat para pihak tanpa adanya banding dan akan dibuat secara tertulis serta mencantumkan temuan-temuan fakta dan kesimpulan-kesimpulan hukum. + +Arbiter akan berjumlah tiga orang, dengan masing-masing pihak dalam sengketa tersebut berhak menunjuk seorang arbiter. Kedua arbiter yang ditunjuk oleh para pihak akan menunjuk arbiter ketiga yang akan bertindak sebagai ketua untuk memimpin proses penyelesaian sengketa tersebut. Lowongan dalam jabatan ketua akan diisi oleh Ketua BANI. Lowongan-lowongan lainnya akan diisi oleh masing-masing pihak yang mencalonkan. Proses-proses hukum akan berlanjut dari tahap proses-proses hukum sebelumnya pada saat terdapat lowongan. + +Apabila salah satu pihak menolak atau dengan kata lain, tidak menunjuk arbiter dalam jangka waktu 30 hari sejak tanggal pada saat pihak lainnya menunjuk arbiternya, arbiter yang ditunjuknya pertama kali akan menjadi arbiter tunggal, dengan ketentuan bahwa arbiter tersebut ditunjuk dengan cara yang sah dan tepat. + +Semua proses hukum akan dilaksanakan, termasuk semua dokumen yang disampaikan dalam proses hukum tersebut akan dibuat, dalam bahasa Inggris dan/atau Indonesia. + +PERUBAHAN-PERUBAHAN NEGARA ASIA PASIFIK + +INDONESIA + +3.2 Jangka Waktu dan Pengakhiran + +Kalimat berikut ini ditambahkan ke ayat terakhir: + +Kedua belah pihak melepaskan ketentuan Pasal 1266 Kitab Undang-undang Hukum Perdata, sepanjang ketentuan pasal tersebut mewajibkan keputusan pengadilan untuk mengakhiri perjanjian yang menciptakan kewajiban-kewajiban bersama. + +Z125-5543-05 (07/2011) + + +Perjanjian Lisensi Program Internasional + +Bagian 1 - Syarat-syarat Umum + +DENGAN MENGUNDUH, MEMASANG, MENYALIN, MENGAKSES, MENEKAN TOMBOL "TERIMA" ATAU DENGAN CARA LAIN MENGGUNAKAN PROGRAM, PEMEGANG LISENSI MENYETUJUI SYARAT-SYARAT PERJANJIAN INI. APABILA ANDA MENERIMA SYARAT-SYARAT INI ATAS NAMA PEMEGANG LISENSI, ANDA MENYATAKAN DAN MENJAMIN BAHWA ANDA MEMILIKI WEWENANG SEPENUHNYA UNTUK MENGIKAT PEMEGANG LISENSI DENGAN SYARAT-SYARAT INI. APABILA ANDA TIDAK MENYETUJUI SYARAT-SYARAT INI, + +* JANGAN MENGUNDUH, MEMASANG, MENYALIN, MENGAKSES, MENEKAN TOMBOL "TERIMA" ATAU MENGGUNAKAN PROGRAM; DAN + +* SEGERA MENGEMBALIKAN MEDIA, DOKUMENTASI, DAN BUKTI KEPEMILIKAN YANG TIDAK TERPAKAI KEPADA PIHAK DARI MANA ANDA MENDAPATKANNYA UNTUK SUATU PENGEMBALIAN UANG ATAS JUMLAH YANG TELAH DIBAYARKAN. APABILA PROGRAM TELAH DIUNDUH, MUSNAHKAN SEMUA SALINAN PROGRAM. + +1. Definisi + +"Penggunaan yang Sah" - tingkat yang ditetapkan di mana Pemegang Lisensi berhak untuk melaksanakan atau menjalankan Program. Tingkat tersebut dapat diukur berdasarkan jumlah pengguna, jutaan unit layanan ("MSU"), Unit Nilai Prosesor ("PVU") atau tingkat penggunaan lainnya yang ditetapkan oleh IBM. + +"IBM" - International Business Machines Corporation atau salah satu anak perusahaannya. + +"Informasi tentang Lisensi" ("IL") - dokumen yang memberikan informasi dan syarat-syarat tambahan yang dikhususkan untuk Program. IL Program tersedia di www.ibm.com/software/sla. IL juga dapat dilihat dalam direktori Program dengan menggunakan perintah sistem atau sebagai buklet yang dimasukkan bersama dengan Program. + +"Program" - hal-hal berikut ini, termasuk asli dan seluruh atau sebagian salinan: 1) instruksi dan data yang dapat dibaca oleh mesin, 2) komponen, berkas, dan modul, 3) konten audio-visual (seperti gambar, teks, rekaman atau foto), dan 4) materi yang dilisensikan terkait (seperti kunci dan dokumentasi). + +"Bukti Kepemilikan" ("BK") - bukti Penggunaan yang Sah Pemegang Lisensi. BK juga merupakan bukti kelayakan Pemegang Lisensi untuk mendapatkan garansi, harga terbaru di masa yang akan datang, apabila ada, dan kesempatan-kesempatan khusus atau promosi yang potensial. Apabila IBM tidak memberikan BK kepada Pemegang Lisensi, maka IBM dapat menerima kuitansi penjualan yang telah dibayar asli atau catatan penjualan lainnya dari salah satu pihak (IBM atau penjual kembalinya) yang darinya Pemegang Lisensi mendapatkan Program sebagai BK, dengan ketentuan bahwa kuitansi penjualan atau catatan penjualan lainnya tersebut menetapkan nama Program dan Penggunaan yang Sah yang telah didapatkan. + +"Periode Garansi" - satu tahun, dimulai pada tanggal saat Pemegang Lisensi awal diberi lisensi. + +2. Susunan Perjanjian + +Perjanjian ini termasuk Bagian 1 - Syarat-syarat Umum, Bagian 2 - Syarat-syarat Khusus Tiap Negara (apabila ada), IL, dan BK dan merupakan perjanjian yang lengkap antara Pemegang Lisensi dan IBM terkait dengan penggunaan Program. Perjanjian ini menggantikan setiap komunikasi lisan atau tertulis sebelumnya antara Pemegang Lisensi dan IBM tentang penggunaan Program oleh Pemegang Lisensi. Syarat-syarat Bagian 2 dapat menggantikan atau memodifikasi syarat-syarat Bagian 1. Sepanjang terdapat ketidaksesuaian, IL berlaku atas kedua Bagian tersebut. + +3. Pemberian Lisensi + +Program adalah milik IBM atau pemasok IBM serta diberi hak cipta dan lisensi, tetapi tidak dijual. + +IBM memberikan lisensi yang tidak eksklusif kepada Pemegang Lisensi untuk 1) menggunakan Program sampai dengan Penggunaan yang Sah sebagaimana ditetapkan dalam BK, 2) membuat dan memasang salinan-salinan untuk mendukung Penggunaan yang Sah tersebut, dan 3) membuat salinan cadangan, semua dengan ketentuan bahwa + +a. Pemegang Lisensi telah mendapatkan Program secara sah dan mematuhi syarat-syarat Perjanjian ini; + +b. salinan cadangan tidak bekerja kecuali apabila Program yang dicadangkan tidak dapat bekerja; + +c. Pemegang Lisensi mereproduksi semua pemberitahuan tentang hak cipta dan keterangan kepemilikan lainnya dalam masing-masing salinan atau sebagian salinan Program; + +d. Pemegang Lisensi memastikan bahwa setiap individu yang menggunakan Program (yang diakses dari jarak dekat atau jarak jauh) 1) melakukan hal tersebut hanya atas nama Pemegang Lisensi dan 2) mematuhi syarat-syarat Perjanjian ini; + +e. Pemegang Lisensi tidak 1) menggunakan, menyalin, memodifikasi atau mendistribusikan Program kecuali apabila diizinkan secara tegas dalam Perjanjian ini; 2) merakit kembali, menyusun kembali, dengan cara lain, menerjemahkan atau merekayasa kembali Program, kecuali apabila diizinkan oleh undang-undang tanpa adanya kemungkinan pelepasan kontrak; 3) menggunakan setiap komponen, berka, modul, konten audio visual atau materi yang dilisensikan terkait yang terpisah dari Program tersebut; atau 4) mensublisensikan, menyewa atau menyewakan Program; dan + +f. apabila Pemegang Lisensi mendapatkan Program ini sebagai Program Pendukung, Pemegang Lisensi menggunakan Program ini hanya untuk mendukung Program Utama dan tunduk kepada setiap batasan dalam lisensi untuk Program Utama, atau, apabila Pemegang Lisensi mendapatkan Program ini sebagai Program Utama, Pemegang Lisensi menggunakan semua Program Pendukung hanya untuk mendukung Program ini dan tunduk kepada setiap batasan dalam Perjanjian ini. Untuk tujuan Butir "f" ini, "Program Pendukung" adalah Program yang merupakan bagian dari Program IBM lainnya ("Program Utama") dan diidentifikasi sebagai Program Pendukung dalam IL Program Utama. (Untuk mendapatkan lisensi terpisah untuk Program Pendukung tanpa pembatasan-pembatasan ini, Pemegang Lisensi sebaiknya menghubungi pihak yang darinya Pemegang Lisensi telah mendapatkan Program Pendukung.) + +Lisensi ini berlaku untuk masing-masing salinan Program yang dibuat oleh Pemegang Lisensi. + +3.1 Tukar Tambah, Pembaruan, Perbaikan, dan Tambahan + +3.1.1 Tukar Tambah + +Apabila Program digantikan oleh Program tukar tambah, lisensi Program yang digantikan segera diakhiri. + +3.1.2 Pembaruan, Perbaikan, dan Tambahan + +Pada saat Pemegang Lisensi menerima pembaruan, perbaikan atau tambahan untuk Program, Pemegang Lisensi menerima syarat-syarat tambahan atau syarat-syarat yang berbeda yang berlaku untuk pembaruan, perbaikan atau tambahan tersebut yang ditetapkan dalam IL-nya. Apabila syarat-syarat tambahan atau syarat-syarat yang berbeda tidak diberikan, maka pembaruan, perbaikan atau tambahan tersebut semata-mata tunduk kepada Perjanjian ini. Apabila Program digantikan oleh pembaruan, Pemegang Lisensi setuju untuk segera berhenti menggunakan Program yang digantikan. + +3.2 Lisensi Jangka Waktu Tertentu + +Apabila IBM melisensikan Program selama jangka waktu tertentu, lisensi Pemegang Lisensi diakhiri pada akhir jangka waktu tertentu, kecuali apabila Pemegang Lisensi dan IBM sepakat untuk memperbarui lisensi Program tersebut. + +3.3 Jangka Waktu dan Pengakhiran + +Perjanjian ini berlaku sampai perjanjian ini diakhiri. + +IBM dapat mengakhiri lisensi Pemegang Lisensi apabila Pemegang Lisensi tidak mematuhi syarat-syarat Perjanjian ini. + +Apabila lisensi diakhiri karena alasan apa pun oleh salah satu pihak, Pemegang Lisensi setuju untuk segera berhenti menggunakan dan memusnahkan semua salinan Program Pemegang Lisensi. Setiap syarat Perjanjian ini yang berdasarkan sifatnya melampaui pengakhiran Perjanjian ini tetap berlaku sampai syarat tersebut dipenuhi, dan berlaku untuk masing-masing penerus dan penerima pengalihan hak kedua belah pihak. + +4. Biaya-biaya + +Biaya-biaya didasarkan pada Penggunaan yang Sah yang telah didapatkan, yang ditetapkan dalam BK. IBM tidak memberikan kredit atau pengembalian uang atas biaya-biaya yang telah jatuh tempo atau dibayar, kecuali apabila ditetapkan lain dalam Perjanjian ini. + +Apabila Pemegang Lisensi ingin meningkatkan Penggunaannya yang Sah, Pemegang Lisensi harus memberitahukan kepada IBM atau pengecer (reseller) IBM yang sah terlebih dahulu dan membayar setiap biaya yang berlaku. + +5. Pajak + +Apabila suatu lembaga mengenakan bea, pajak, retribusi atau biaya terhadap Program, tidak termasuk bea, pajak, retribusi atau biaya yang didasarkan pada pendapatan bersih IBM, maka Pemegang Lisensi setuju untuk membayar jumlah tersebut, sebagaimana ditetapkan dalam tagihan atau dokumentasi tentang pembebasan pajak atas pasokan. Pemegang Lisensi bertanggung jawab atas setiap pajak properti pribadi untuk Program sejak tanggal saat Pemegang Lisensi mendapatkan program tersebut. Apabila suatu lembaga mengenakan bea cukai, pajak, retribusi atau biaya untuk impor ke dalam atau ekspor, transfer, akses atau penggunaan Program ke luar negeri di mana Pemegang Lisensi awal mendapatkan lisensi, maka Pemegang Lisensi setuju bahwa pihaknya bertanggung jawab atas, dan akan membayar, setiap jumlah yang dikenakan. + +6. Jaminan Uang Kembali + +Apabila Pemegang Lisensi tidak puas dengan Program karena alasan apa pun dan merupakan Pemegang Lisensi awal, Pemegang Lisensi dapat mengakhiri lisensi dan mendapatkan pengembalian uang atas jumlah yang telah dibayar oleh Pemegang Lisensi untuk Program, dengan ketentuan bahwa Pemegang Lisensi mengembalikan Program dan BK kepada pihak yang darinya Pemegang Lisensi telah mendapatkan Program dan BK tersebut dalam jangka waktu 30 hari sejak tanggal BK diterbitkan untuk Pemegang Lisensi. Apabila lisensi adalah lisensi untuk jangka waktu tertentu yang tunduk kepada pembaruan, maka Pemegang Lisensi dapat mendapatkan pengembalian uang hanya apabila Program dan BK-nya dikembalikan dalam jangka waktu 30 hari pertama sejak jangka waktu yang pertama. Apabila Pemegang Lisensi telah mengunduh Program, Pemegang Lisensi sebaiknya menghubungi pihak yang darinya Pemegang Lisensi telah mendapatkan Program tersebut untuk mendapatkan instruksi-instruksi tentang cara untuk mendapatkan pengembalian uang. + +7. Transfer Program + +Pemegang Lisensi dapat mentransfer Program serta semua hak dan kewajiban lisensi Pemegang Lisensi kepada pihak lainnya hanya apabila pihak tersebut menyetujui syarat-syarat Perjanjian ini. Apabila lisensi diakhiri karena alasan apa pun oleh salah satu pihak, Pemegang Lisensi dilarang mentransfer Program kepada pihak lainnya. Pemegang Lisensi tidak dapat mentransfer sebagian 1) Program atau 2) Penggunaan yang Sah atas Program. Pada saat Pemegang Lisensi mentransfer Program, Pemegang Lisensi juga harus mentransfer salinan kertas Perjanjian ini, termasuk IL dan BK. Segera setelah transfer dilakukan, lisensi Pemegang Lisensi berakhir. + +8. Jaminan dan Pengecualian + +8.1 Garansi Terbatas + +IBM menjamin bahwa Program, pada saat digunakan dalam lingkungan operasinya yang ditetapkan, akan sesuai dengan spesifikasi-spesifikasinya. Spesifikasi-spesifikasi Program dan informasi tentang lingkungan operasi yang ditetapkan dapat dilihat di dalam dokumentasi yang menyertai Program (seperti berka bacalah aku (read-me file)) atau informasi lainnya yang dipublikasikan oleh IBM (seperti surat pemberitahuan). Pemegang Lisensi setuju bahwa dokumentasi tersebut dan konten Program lainnya hanya dapat disediakan dalam bahasa Inggris, kecuali apabila diwajibkan lain oleh undang-undang setempat tanpa adanya kemungkinan pelepasan atau pembatasan kontrak. + +Garansi hanya berlaku untuk sebagian Program yang tidak dimodifikasi. IBM tidak menjamin operasi Program tanpa henti dan yang bebas dari kesalahan, atau menjamin bahwa IBM akan memperbaiki semua kecacatan Program. Pemegang Lisensi bertanggung jawab atas hasil-hasil yang didapatkan dari penggunaan Program. + +Selama Periode Garansi, IBM memberikan kepada Pemegang Lisensi akses ke basis data IBM yang berisi informasi tentang kecacatan-kecacatan Program yang telah diketahui, perbaikan-perbaikan atas kecacatan, pembatasan-pembatasan, dan jalan-jalan pintas tanpa adanya biaya tambahan. Untuk informasi lebih lanjut, bacalah Panduan Dukungan Perangkat Lunak IBM di www.ibm.com/software/support. + +Apabila Program tidak berfungsi sebagaimana dijamin selama Periode Garansi dan permasalahan tidak dapat diselesaikan dengan informasi yang tersedia di dalam basis data IBM, Pemegang Lisensi dapat mengembalikan Program dan BK-nya kepada pihak (IBM atau penjual kembalinya) yang darinya Pemegang Lisensi telah mendapatkan Program dan BK tersebut dan menerima pengembalian uang atas jumlah yang telah dibayarkan oleh Pemegang Lisensi. Setelah mengembalikan Program, lisensi Pemegang Lisensi berakhir. Apabila Pemegang Lisensi telah mengunduh Program, Pemegang Lisensi sebaiknya menghubungi pihak yang darinya Pemegang Lisensi telah mendapatkan Program tersebut untuk mendapatkan instruksi-instruksi tentang cara untuk mendapatkan pengembalian uang. + +8.2 Pengecualian + +JAMINAN-JAMINAN INI ADALAH JAMINAN-JAMINAN EKSKLUSIF PEMEGANG LISENSI DAN MENGGANTIKAN SEMUA JAMINAN ATAU KETENTUAN LAINNYA, SECARA TEGAS ATAU TERSIRAT, TERMASUK, TETAPI TIDAK TERBATAS PADA, SETIAP JAMINAN ATAU KETENTUAN APA PUN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN, KUALITAS YANG MEMUASKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, HAK MILIK, DAN SETIAP JAMINAN ATAU KETENTUAN TENTANG TIDAK ADANYA PELANGGARAN. BEBERAPA NEGARA ATAU YURISDIKSI TIDAK MEMPERBOLEHKAN PENGECUALIAN TENTANG JAMINAN SECARA TEGAS ATAU TERSIRAT. OLEH KARENA ITU, PENGECUALIAN DI ATAS MUNGKIN TIDAK BERLAKU UNTUK PEMEGANG LISENSI. DALAM HAL TERSEBUT, JAMINAN-JAMINAN TERSEBUT DIBATASI SELAMA PERIODE GARANSI YANG DIWAJIBKAN OLEH UNDANG-UNDANG. TIDAK ADA JAMINAN APA PUN YANG BERLAKU SETELAH PERIODE TERSEBUT. BEBERAPA NEGARA ATAU YURISDIKSI TIDAK MEMPERBOLEHKAN BATASAN-BATASAN TENTANG BERAPA LAMA JAMINAN YANG TERSIRAT BERLAKU. OLEH KARENA ITU, BATASAN DI ATAS MUNGKIN TIDAK BERLAKU UNTUK PEMEGANG LISENSI. + +JAMINAN-JAMINAN INI MEMBERIKAN HAK-HAK HUKUM YANG SPESIFIK KEPADA PEMEGANG LISENSI. PEMEGANG LISENSI JUGA DAPAT MEMILIKI HAK LAINNYA YANG BERBEDA-BEDA ANTARA NEGARA YANG SATU DENGAN NEGARA YANG LAIN ATAU ANTARA YURISDIKSI YANG SATU DENGAN YURISDIKSI YANG LAIN. + +JAMINAN-JAMINAN DALAM PASAL 8 (JAMINAN DAN PENGECUALIAN) INI DIBERIKAN SEMATA-MATA OLEH IBM. AKAN TETAPI, SANGGAHAN-SANGGAHAN DALAM SUBPASAL 8.2 (PENGECUALIAN) INI JUGA BERLAKU UNTUK PARA PEMASOK KODE PIHAK KETIGA IBM. PARA PEMASOK MEMBERIKAN KODE TERSEBUT TANPA ADANYA JAMINAN ATAU KETENTUAN APA PUN. AYAT INI TIDAK MEMBATALKAN KEWAJIBAN-KEWAJIBAN JAMINAN IBM BERDASARKAN PERJANJIAN INI. + +9. Data dan Basis Data Pemegang Lisensi + +Untuk membantu Pemegang Lisensi dalam mengisolasi penyebab permasalahan pada Program, IBM dapat meminta agar Pemegang Lisensi 1) memperbolehkan IBM untuk mengakses sistem Pemegang Lisensi dari jarak jauh atau 2) mengirimkan informasi atau data sistem Pemegang Lisensi kepada IBM. Akan tetapi, IBM tidak diwajibkan untuk memberikan asistensi tersebut kecuali apabila IBM dan Pemegang Lisensi mengadakan perjanjian tertulis secara terpisah yang atas dasarnya IBM setuju untuk memberikan kepada Pemegang Lisensi jenis dukungan tersebut, yang tidak termasuk dalam kewajiban-kewajiban jaminan IBM dalam Perjanjian ini. Dalam hal apa pun, IBM menggunakan informasi tentang kesalahan-kesalahan dan permasalahan-permasalahan untuk meningkatkan produk dan layanannya serta membantu pemberian tawaran-tawaran dukungan terkait yang dilakukannya. Untuk tujuan-tujuan ini, IBM dapat menggunakan badan-badan dan para subkontraktor IBM (termasuk dalam satu negara atau lebih selain negara di mana Pemegang Lisensi berada), dan Pemegang Lisensi memberikan wewenang kepada IBM untuk melakukan hal tersebut. + +Pemegang Lisensi tetap bertanggung jawab atas 1) setiap data dan konten dari setiap basis data yang disediakan oleh Pemegang Lisensi untuk IBM, 2) pilihan dan pelaksanaan prosedur dan kendali yang terkait dengan akses, keamanan, enkripsi, penggunaan, dan transmisi data (termasuk setiap data yang dapat diidentifikasi secara pribadi), serta 3) cadangan dan pemulihan atas setiap basis data dan setiap data yang disimpan. Pemegang Lisensi tidak akan mengirimkan atau memberikan kepada IBM akses ke setiap informasi yang dapat diidentifikasi secara pribadi, dalam bentuk data atau bentuk apa pun lainnya, dan akan bertanggung jawab atas biaya-biaya dan jumlah-jumlah lainnya yang wajar yang mungkin ditanggung oleh IBM terkait dengan setiap informasi tersebut yang secara tidak sengaja diberikan kepada IBM atau kehilangan atau pengungkapan informasi tersebut oleh IBM, termasuk biaya-biaya dan jumlah-jumlah lainnya yang timbul dari tuntutan pihak ketiga. + +10. Batasan Kewajiban + +Batasan-batasan dan pengecualian-pengecualian dalam Pasal 10 (Batasan Kewajiban) ini berlaku sepanjang batasan-batasan dan pengecualian-pengecualian tersebut tidak dilarang oleh undang-undang yang berlaku tanpa adanya kemungkinan pelepasan kontrak. + +10.1 Hal-hal yang Mungkin Menjadi Tanggung Jawab IBM + +Keadaan-keadaan dapat timbul apabila, karena wanprestasi dari pihak IBM atau kewajiban lainnya, Pemegang Lisensi berhak untuk mendapatkan ganti rugi dari IBM. Terlepas dari alasan Pemegang Lisensi untuk menuntut ganti rugi dari IBM (termasuk pelanggaran yang mendasar, kelalaian, pernyataan yang salah, atau kontrak lainnya atau tuntutan atas tindakan kejahatan), seluruh kewajiban IBM untuk semua tuntutan secara keseluruhan yang timbul dari atau terkait dengan masing-masing Program atau dengan cara lain, yang timbul berdasarkan Perjanjian ini tidak akan melampaui jumlah dari setiap 1) ganti rugi karena cedera badan (termasuk kematian) dan kerusakan terhadap properti yang bersifat tetap (real property) dan properti pribadi yang berwujud dan 2) ganti rugi aktual atas kerusakan langsung, sampai sebesar-besarnya biaya yang telah dibayarkan oleh Pemegang Lisensi untuk Program yang menjadi subjek tuntutan (apabila Program tunduk kepada biaya-biaya tetap dalam jangka waktu tertentu maka sampai sebesar-besarnya biaya-biaya selama jangka waktu dua belas bulan). + +Batas ini juga berlaku untuk setiap pengembang dan pemasok Program IBM. Batas ini merupakan jumlah maksimum tanggung jawab IBM serta para pengembang dan pemasok Programnya secara bersama-sama. + +10.2 Hal-hal yang Bukan Merupakan Tanggung Jawab IBM + +DALAM SITUASI APA PUN JUGA, IBM, PARA PENGEMBANG ATAU PEMASOK PROGRAMNYA TIDAK BERTANGGUNG JAWAB ATAS SALAH SATU HAL BERIKUT INI, BAHKAN APABILA TELAH DIINFORMASIKAN BAHWA TERDAPAT KEMUNGKINAN TERJADI HAL-HAL BERIKUT INI: + +a. KEHILANGAN ATAU KERUSAKAN DATA; + +b. KERUSAKAN / KERUGIAN KHUSUS, INSEDENTIL, CONTOH, ATAU KERUSAKAN / KERUGIAN TAK LANGSUNG, ATAU UNTUK SETIAP KERUSAKAN / KERUGIAN SEBAB-AKIBAT EKONOMIS; ATAU + +c. HILANGNYA LABA, BISNIS, PENDAPATAN, NAMA BAIK (GOODWILL), ATAU SIMPANAN YANG DIHARAPKAN. + +11. Verifikasi terhadap Kepatuhan + +Untuk tujuan-tujuan Pasal 11 (Verifikasi terhadap Kepatuhan) ini, "Syarat-syarat Perjanjian Lisensi Program Internasional" ini berarti 1) Perjanjian ini serta perubahan-perubahan dan dokumen-dokumen transaksi yang berlaku yang diberikan oleh IBM, dan 2) kebijakan-kebijakan perangkat lunak IBM yang dapat dilihat di situs web Kebijakan Perangkat Lunak IBM (www.ibm.com/softwarepolicies), termasuk tetapi tidak terbatas pada kebijakan-kebijakan tersebut yang terkait dengan cadangan, penetapan harga subkapasitas, dan migrasi. + +Hak-hak dan kewajiban-kewajiban yang tercantum dalam Pasal 11 ini tetap berlaku selama periode saat Program dilisensikan kepada Pemegang Lisensi dan selama dua tahun berikutnya. + +11.1 Proses Verifikasi + +Pemegang Lisensi setuju untuk menciptakan, menyimpan, dan memberikan kepada IBM dan para auditornya catatan-catatan tertulis yang akurat, keluaran (output) sistem, dan informasi sistem lainnya yang memadai untuk memberikan verifikasi yang dapat diaudit bahwa penggunaan semua Program oleh Pemegang Lisensi sesuai dengan Syarat-syarat Perjanjian Lisensi Program Internasional, termasuk, tetapi tidak terbatas pada, semua syarat pemberian lisensi dan kualifikasi penetapan harga yang berlaku dari IBM. Pemegang Lisensi bertanggung jawab untuk 1) memastikan bahwa pihaknya tidak melampaui Penggunaannya yang Sah dan 2) tetap sesuai dengan Syarat-syarat Perjanjian Lisensi Program Internasional. + +Setelah adanya pemberitahuan yang wajar, IBM dapat memverifikasi kepatuhan Pemegang Lisensi terhadap Syarat-syarat Perjanjian Lisensi Program Internasional di semua lokasi dan untuk semua lingkungan di mana Pemegang Lisensi menggunakan (untuk tujuan apa pun) Program-program dengan tunduk kepada Syarat-syarat Perjanjian Lisensi Program Internasional. Verifikasi tersebut akan dilakukan dengan cara yang seminimal mungkin mengganggu bisnis Pemegang Lisensi, dan dapat dilakukan di tempat-tempat Pemegang Lisensi, selama jam-jam kerja normal. IBM dapat menggunakan auditor yang independen untuk membantu verifikasi tersebut, dengan ketentuan bahwa IBM memiliki perjanjian kerahasiaan tertulis yang ada pada auditor tersebut. + +11.2 Resolusi + +IBM akan memberitahukan kepada Pemegang Lisensi secara tertulis apabila verifikasi tersebut menunjukkan bahwa Pemegang Lisensi telah menggunakan Program dengan cara yang melampaui Penggunaannya yang Sah atau dengan cara lain, tidak sesuai dengan Syarat-syarat Perjanjian Lisensi Program Internasional. Pemegang Lisensi setuju untuk segera membayar kepada IBM secara langsung biaya-biaya yang ditetapkan oleh IBM dalam tagihan untuk 1) setiap kelebihan penggunaan tersebut, 2) dukungan untuk kelebihan penggunaan tersebut selama kurang dari jangka waktu kelebihan penggunaan tersebut atau dua tahun, dan 3) setiap biaya tambahan dan kewajiban lainnya yang ditentukan yang diakibatkan oleh verifikasi tersebut. + +12. Pemberitahuan Pihak Ketiga + +Program dapat termasuk kode pihak ketiga yang dilisensikan oleh IBM, bukan pihak ketiga, kepada Pemegang Lisensi berdasarkan Perjanjian ini. Pemberitahuan-pemberitahuan, apabila ada, untuk kode pihak ketiga ("Pemberitahuan Pihak Ketiga") dimasukkan hanya untuk informasi Pemegang Lisensi. Pemberitahuan-pemberitahuan ini dapat dilihat di dalam berkas(-berkas) PEMBERITAHUAN Program. Informasi tentang cara untuk mendapatkan sumber kode untuk kode pihak ketiga tertentu dapat dilihat di dalam Pemberitahuan Pihak Ketiga. Apabila di dalam Pemberitahuan Pihak Ketiga, IBM mengidentifikasi kode pihak ketiga sebagai "Kode Pihak Ketiga yang Dapat Dimodifikasi", IBM memberikan wewenang kepada Pemegang Lisensi untuk 1) memodifikasi Kode Pihak Ketiga yang Dapat Dimodifikasi dan 2) merekayasa kembali modul-modul Program yang terhubung secara langsung dengan Kode Pihak Ketiga yang Dapat Dimodifikasi dengan ketentuan bahwa modul-modul tersebut hanya untuk tujuan debug modifikasi-modifikasi Pemegang Lisensi atas kode pihak ketiga tersebut. Kewajiban-kewajiban layanan dan dukungan IBM, apabila ada, berlaku hanya untuk Program yang tidak dimodifikasi. + +13. Umum + +a. Tidak ada satu pun dalam Perjanjian ini yang mempengaruhi hak-hak konsumen yang didasarkan pada undang-undang yang tidak dapat dilepaskan atau dibatasi oleh kontrak. + +b. Untuk Program-program yang diberikan oleh IBM kepada Pemegang Lisensi dalam bentuk yang berwujud, IBM memenuhi kewajiban-kewajiban pengiriman dan penyerahannya setelah Program-program tersebut diserahkan kepada pengangkut yang ditunjuk oleh IBM, kecuali apabila disepakati lain secara tertulis oleh Pemegang Lisensi dan IBM. + +c. Apabila terdapat ketentuan Perjanjian ini yang dianggap tidak sah atau tidak dapat diberlakukan, ketentuan-ketentuan Perjanjian lainnya yang tersisa tetap berlaku sepenuhnya. + +d. Pemegang Lisensi setuju untuk mematuhi semua peraturan perundang-undangan ekspor dan impor yang berlaku, termasuk peraturan-peraturan tentang embargo dan sanksi serta larangan-larangan ekspor A. S. untuk penggunaan-penggunaan akhir tertentu dan untuk para pengguna tertentu. + +e. Pemegang Lisensi memberikan wewenang kepada International Business Machines Corporation dan anak perusahaannya (dan para penerus, penerima pengalihan hak, kontraktor, dan Mitra Bisnis IBM mereka) untuk menyimpan dan menggunakan informasi kontak bisnis Pemegang Lisensi di mana pun mereka menjalankan bisnis, terkait dengan produk-produk dan layanan-layanan IBM, atau sebagai kelanjutan dari hubungan bisnis IBM dengan Pemegang Lisensi. + +f. Masing-masing pihak akan memberikan kesempatan yang wajar kepada pihak lainnya untuk mematuhi sebelum pihaknya mengajukan tuntutan bahwa pihak lainnya belum memenuhi kewajiban-kewajibannya berdasarkan Perjanjian ini. Para pihak akan berupaya dengan itikad baik untuk menyelesaikan semua sengketa, perselisihan atau tuntutan di antara para pihak yang terkait dengan Perjanjian ini. + +g. Kecuali apabila diwajibkan lain oleh undang-undang yang berlaku tanpa adanya kemungkinan pelepasan atau batasan kontrak: 1) tidak ada satu pihak pun yang akan mengambil tindakan hukum, tanpa memperhatikan bentuknya, untuk setiap tuntutan yang timbul dari atau terkait dengan Perjanjian ini dalam jangka waktu lebih dari dua tahun setelah timbulnya penyebab tuntutan; dan 2) setelah berakhirnya batas waktu tersebut, setiap tuntutan tersebut dan semua hak masing-masing yang terkait dengan tuntutan berakhir. + +h. Pemegang Lisensi atau IBM tidak bertanggung jawab atas kegagalan dalam memenuhi setiap kewajiban yang diakibatkan oleh penyebab-penyebab di luar kendalinya. + +i. Tidak ada hak atau dasar tuntutan untuk pihak ketiga yang diciptakan oleh Perjanjian ini, dan IBM tidak bertanggung jawab atas tuntutan-tuntutan pihak ketiga terhadap Pemegang Lisensi, kecuali apabila diizinkan dalam Subpasal 10.1 (Hal-hal yang Mungkin Menjadi Tanggung Jawab IBM) di atas karena cedera badan (termasuk kematian) atau kerusakan terhadap properti pribadi yang bersifat tetap atau berwujud yang merupakan tanggung jawab IBM secara hukum kepada pihak ketiga tersebut. + +j. Dalam mengadakan Perjanjian ini, tidak ada satu pihak pun yang mendasarkan pada setiap pernyataan yang tidak ditetapkan dalam Perjanjian ini, termasuk tetapi tidak terbatas pada setiap pernyataan yang terkait dengan: 1) kinerja atau fungsi Program, selain yang dijamin secara tegas dalam Pasal 8 (Jaminan dan Pengecualian) di atas; 2) pengalaman-pengalaman atau rekomendasi-rekomendasi para pihak lainnya; atau 3) hasil atau simpanan apa pun yang dapat dicapai oleh Pemegang Lisensi. + +k. IBM telah menandatangani perjanjian-perjanjian dengan perusahaan-perusahaan tertentu (disebut sebagai "Para Mitra Bisnis IBM") untuk mempromosikan, memasarkan, dan mendukung Program-program tertentu. Para Mitra Bisnis IBM tetap bersifat independen dan terpisah dari IBM. IBM tidak bertanggung jawab atas tindakan-tindakan atau pernyataan-pernyataan Para Mitra Bisnis IBM atau kewajiban-kewajiban yang mereka miliki terhadap Pemegang Lisensi. + +l. Syarat-syarat lisensi dan pemberian ganti rugi atas kekayaan intelektual dari perjanjian-perjanjian Pemegang Lisensi lainnya dengan IBM (seperti Perjanjian Konsumen IBM) tidak berlaku untuk lisensi-lisensi Program yang diberikan berdasarkan Perjanjian ini. + +14. Cakupan Geografis dan Undang-undang yang Mengatur + +14.1 Undang-undang yang Mengatur + +Kedua belah pihak sepakat bahwa pelaksanaan undang-undang negara di mana Pemegang Lisensi telah mendapatkan lisensi Program akan mengatur, menafsirkan, dan memberlakukan semua hak, tugas, dan kewajiban Pemegang Lisensi dan IBM yang timbul dari, atau yang dengan cara apa pun terkait dengan, pokok materi Perjanjian ini, dengan tidak memperhatikan ketidaksesuaian prinsip undang-undang. + +Konvensi Perserikatan Bangsa-Bangsa tentang Kontrak Penjualan Barang Internasional (United Nations Convention on Contracts for the International Sale of Goods) tidak berlaku. + +14.2 Yurisdiksi + +Semua hak, tugas, dan kewajiban tunduk kepada pengadilan-pengadilan negara di mana Pemegang Lisensi telah mendapatkan lisensi Program. + +Bagian 2 - Syarat-syarat Khusus Tiap Negara + +Untuk lisensi-lisensi yang diberikan di Indonesia, syarat-syarat berikut ini menggantikan atau memodifikasi syarat-syarat yang dijadikan acuan dalam Bagian 1. Semua syarat dalam Bagian 1 yang tidak diubah oleh perubahan-perubahan ini tetap tidak berubah dan tetap berlaku. Bagian 2 ini disusun sebagai berikut: + +* Perubahan negara terhadap Bagian 1, Pasal 14 (Undang-undang dan Yurisdiksi yang Mengatur); dan + +* Perubahan negara Asia Pasifik terhadap syarat-syarat Perjanjian lainnya. + +Perubahan negara terhadap Bagian 1, Pasal 14 (Undang-undang dan Yurisdiksi yang Mengatur) + +14.3 Arbitrase + +Ayat-ayat berikut ini ditambahkan sebagai Subpasal 14.3 (Arbitrase) yang baru sebagaimana ayat-ayat tersebut berlaku untuk Indonesia. Ketentuan-ketentuan Subpasal 14.3 ini berlaku atas ketentuan-ketentuan Subpasal 14.2 (Yurisdiksi) sepanjang diizinkan oleh undang-undang dan peraturan tata tertib yang mengatur yang berlaku: + +Masing-masing pihak akan memberikan kesempatan yang wajar kepada pihak lainnya untuk mematuhi sebelum pihaknya mengajukan tuntutan bahwa pihak lainnya belum memenuhi kewajiban-kewajibannya berdasarkan Perjanjian ini. Para pihak akan berupaya dengan itikad baik untuk menyelesaikan semua sengketa, perselisihan atau tuntutan di antara para pihak yang terkait dengan Perjanjian ini. Kecuali diwajibkan lain oleh undang-undang yang berlaku tanpa adanya kemungkinan pelepasan atau batasan kontrak, i) tidak ada satu pihak pun yang akan mengambil tindakan hukum, tanpa memperhatikan bentuknya, yang timbul karena atau terkait dengan Perjanjian ini atau transaksi apa pun berdasarkan Perjanjian ini dalam jangka waktu lebih dari dua tahun setelah timbulnya dasar tuntutan; dan ii) setelah batas waktu tersebut, setiap tindakan hukum yang timbul karena Perjanjian ini atau transaksi apa pun berdasarkan Perjanjian ini dan semua hak masing-masing yang terkait dengan setiap tindakan tersebut berakhir. + +Sengketa-sengketa yang timbul karena atau terkait dengan Perjanjian ini pada akhirnya akan diselesaikan melalui arbitrase yang akan diadakan di Jakarta, Indonesia, sesuai dengan aturan-aturan Badan Arbitrase Nasional Indonesia ("BANI") yang berlaku pada saat itu. Putusan arbitrase akan bersifat final dan mengikat para pihak tanpa adanya banding dan akan dibuat secara tertulis serta mencantumkan temuan-temuan fakta dan kesimpulan-kesimpulan hukum. + +Arbiter akan berjumlah tiga orang, dengan masing-masing pihak dalam sengketa tersebut berhak menunjuk seorang arbiter. Kedua arbiter yang ditunjuk oleh para pihak akan menunjuk arbiter ketiga yang akan bertindak sebagai ketua untuk memimpin proses penyelesaian sengketa tersebut. Lowongan dalam jabatan ketua akan diisi oleh Ketua BANI. Lowongan-lowongan lainnya akan diisi oleh masing-masing pihak yang mencalonkan. Proses-proses hukum akan berlanjut dari tahap proses-proses hukum sebelumnya pada saat terdapat lowongan. + +Apabila salah satu pihak menolak atau dengan kata lain, tidak menunjuk arbiter dalam jangka waktu 30 hari sejak tanggal pada saat pihak lainnya menunjuk arbiternya, arbiter yang ditunjuknya pertama kali akan menjadi arbiter tunggal, dengan ketentuan bahwa arbiter tersebut ditunjuk dengan cara yang sah dan tepat. + +Semua proses hukum akan dilaksanakan, termasuk semua dokumen yang disampaikan dalam proses hukum tersebut akan dibuat, dalam bahasa Inggris dan/atau Indonesia. + +PERUBAHAN-PERUBAHAN NEGARA ASIA PASIFIK + +INDONESIA + +3.3 Jangka Waktu dan Pengakhiran + +Kalimat berikut ini ditambahkan ke ayat terakhir: + +Kedua belah pihak melepaskan ketentuan Pasal 1266 Kitab Undang-undang Hukum Perdata, sepanjang ketentuan pasal tersebut mewajibkan keputusan pengadilan untuk mengakhiri perjanjian yang menciptakan kewajiban-kewajiban bersama. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_it b/charts/mq-advancedserver/LICENSE_locale/LICENSE_it new file mode 100644 index 0000000..359ca4e --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_it @@ -0,0 +1,1215 @@ +AVVISO + +Questo documento include i seguenti documenti di Informazioni sulla Licenza per più Programmi. Ciascun documento di Informazioni sulla Licenza identifica il Programma a cui si applica. Sono applicabili solo quei documenti di Informazioni sulla Licenza per i Programmi per cui il licenziatario ha acquisito la titolarità. + + +============================================== + + +IMPORTANTE: LEGGERE ATTENTAMENTE + +Di seguito sono presentati due accordi di licenza. + +1. Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi +2. Accordo Internazionale di Licenza di Programmi IBM + +Se il Licenziatario ottiene il Programma per uso di produzione (diverso dalla valutazione, test, "try or buy," di prova o dimostrazione): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta l'Accordo Internazionale di Licenza di Programmi IBM, senza modifiche. + +Se il Licenziatario ottiene il Programma per scopi di valutazione, test, "try or buy," di prova o dimostrazione (collettivamente "Valutazione"): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta sia (i) l'Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi (la "Licenza di Valutazione"), senza modifiche; sia (ii) l'Accordo Internazionale di Licenza di Programmi IBM (la "IPLA"), senza modifiche. + +La Licenza di Valutazione si applicherà entro la durata della Valutazione del Licenziatario. + +L'IPLA si applicherà automaticamente se il Licenziatario sceglie di conservare il Programma dopo la Valutazione (o di ottenere copie aggiuntive del Programma da utilizzare dopo la Valutazione) stipulando un accordo di approvvigionamento (ad es. gli accordi IBM International Passport Advantage o IBM Passport Advantage Express). + +La Licenza di Valutazione e l'IPLA non sono in vigore contemporaneamente; nessuno dei due modifica l'altro; e ciascuno è indipendente dall'altro. + +Segue il testo completo di ognuno di questi accordi di licenza. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza per la Valutazione dei Programmi (Z125-5543-05). + +Nome Programma (Numero Programma): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Le seguenti clausole standard si applicano all'utilizzo del Programma da parte del licenziatario. + +Periodo di Valutazione + +Il periodo di valutazione ha inizio alla data in cui il licenziatario accetta le clausole del presente Accordo e termina dopo 90 giorni. + +Programmi di Supporto + +Il Programma è concesso in licenza come pacchetto multi-prodotto ed include i Programmi di Supporto identificati di seguito. Il licenziatario può installare ed utilizzare tali Programmi di Supporto solo per supportare il proprio utilizzo del Programma Principale in base a questo Accordo ed entro i limiti delle Prove di Titolarità per il Programma (salvo laddove siano concessi diritti più ampi altrove in questo documento di Informazioni di Licenza). L'espressione "per supportare il proprio utilizzo" include solo quegli utilizzi che sono necessari o in altro modo direttamente correlati ad un uso autorizzato del Programma Principale o di un altro Programma di Supporto. I Programmi di Supporto non possono essere utilizzati per altri scopi. Il licenziatario non può trasferire o rivendere i Programmi di Supporto separatamente dal Programma Principale. Un Programma di Supporto può essere accompagnato da clausole di licenza e tali clausole, se esistenti, si applicano all'utilizzo di quel Programma di Supporto da parte del licenziatario. In caso di conflitto, le clausole di questo documento di Informazioni relative alla Licenza prevarranno sulle clausole del Programma di Supporto. Una volta scaduti o terminati i diritti di utilizzo del Programma, il licenziatario deve interromperne l'uso, distruggere o rimandare prontamente indietro tutte le copie dei Programmi di Supporto alla parte da cui il licenziatario ha acquisito il Programma. Se il licenziatario ha scaricato i Programmi di Supporto, dovrà contattare la parte da cui ha acquisito il Programma. Se il licenziatario desidera concedere in licenza i Programmi di Supporto affinché vengano utilizzati oltre i limiti di quanto consentito sopra, dovrà contattare un Rappresentante vendite IBM o la società da cui ha acquisito il Programma per ottenere la licenza appropriata. + +Di seguito i Programmi di Supporto concessi in licenza con il Programma: +IBM WebSphere Application Server Liberty V17.0 + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza di Programmi (Z125-3301-14). + +Nome Programma (Numero Programma): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Le seguenti clausole standard si applicano all'utilizzo del Programma da parte del licenziatario. + +Diritto di utilizzo limitato + +Come descritto nell'International Program License Agreement ("IPLA") e in queste Informazioni sulla Licenza, IBM concede al licenziatario un diritto limitato di utilizzare il Programma. Questo diritto è limitato al livello di Uso Autorizzato, come Processor Value Unit ("PVU"), Resource Value Unit ("RVU"), Value Unit ("VU") o altro livello di utilizzo specificato, pagato dal licenziatario come evidenziato nella Prova di Titolarità. L'utilizzo del licenziatario può anche essere limitato ad una macchina specifica, o solo come Programma di Supporto, o soggetto ad altre limitazioni. Poiché il licenziatario non ha pagato per tutto il valore economico del Programma, non è consentito nessun altro utilizzo senza il pagamento di canoni aggiuntivi. Inoltre, il licenziatario non può utilizzare il Programma per fornire servizi IT commerciali a terze parti, fornire hosting o timesharing commerciali o sublicenziare, noleggiare o concedere in leasing il Programma, se non espressamente stabilito negli accordi applicabili, in base ai quali il licenziatario ottiene autorizzazioni all'utilizzo del Programma. Il licenziatario può ottenere altri diritti a seguito del pagamento di canoni aggiuntivi o in base a clausole diverse o supplementari. IBM si riserva il diritto di determinare se tali diritti aggiuntivi possano essere disponibili per il licenziatario. + +Specifiche + +Le specifiche del Programma si possono trovare nelle sezioni pubbliche Descrizioni e Informazioni Tecniche delle Lettere d'Annuncio del Programma. + +Programmi di Supporto + +Il Programma è concesso in licenza come pacchetto multi-prodotto ed include i Programmi di Supporto identificati di seguito. Il licenziatario può installare ed utilizzare tali Programmi di Supporto solo per supportare il proprio utilizzo del Programma Principale in base a questo Accordo ed entro i limiti delle Prove di Titolarità per il Programma (salvo laddove siano concessi diritti più ampi altrove in questo documento di Informazioni di Licenza). L'espressione "per supportare il proprio utilizzo" include solo quegli utilizzi che sono necessari o in altro modo direttamente correlati ad un uso autorizzato del Programma Principale o di un altro Programma di Supporto. I Programmi di Supporto non possono essere utilizzati per altri scopi. Il licenziatario non può trasferire o rivendere i Programmi di Supporto separatamente dal Programma Principale. Un Programma di Supporto può essere accompagnato da clausole di licenza e tali clausole, se esistenti, si applicano all'utilizzo di quel Programma di Supporto da parte del licenziatario. In caso di conflitto, le clausole di questo documento di Informazioni relative alla Licenza prevarranno sulle clausole del Programma di Supporto. Una volta scaduti o terminati i diritti di utilizzo del Programma, il licenziatario deve interromperne l'uso, distruggere o rimandare prontamente indietro tutte le copie dei Programmi di Supporto alla parte da cui il licenziatario ha acquisito il Programma. Se il licenziatario ha scaricato i Programmi di Supporto, dovrà contattare la parte da cui ha acquisito il Programma. Se il licenziatario desidera concedere in licenza i Programmi di Supporto affinché vengano utilizzati oltre i limiti di quanto consentito sopra, dovrà contattare un Rappresentante vendite IBM o la società da cui ha acquisito il Programma per ottenere la licenza appropriata. + +Di seguito i Programmi di Supporto concessi in licenza con il Programma: +IBM WebSphere Application Server Liberty V17.0 + +Componenti non utilizzate per stabilire le titolarità richieste + +Nel determinare il numero di titolarità necessarie per l'installazione o l'utilizzo del Programma da parte del licenziatario, non saranno prese in considerazione l'installazione o l'utilizzo delle seguenti componenti del Programma. In altre parole, il licenziatario può installare ed utilizzare le seguenti componenti del Programma, in base a clausole di licenza, ma tali componenti non sono utilizzate per determinare il numero di titolarità richieste per il Programma. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Ridistribuibili + +Se il Programma include componenti che sono Ridistribuibili, saranno identificate nel file REDIST che accompagna il Programma. Oltre ai diritti della licenza concessi nell'Accordo, il licenziatario può distribuire i Ridistribuibili in base alle seguenti clausole: +1) La ridistribuzione deve essere solo in formato codice oggetto e rispettare tutte le direttive, istruzioni e specifiche della documentazione di accompagnamento al Programma o REDIST; +2) Se la documentazione di accompagnamento al Programma consente espressamente di modificare i Ridistribuibili, tale modifica dovrà rispettare tutte le direttive, le istruzioni e le specifiche in quella documentazione e in queste modifiche, se esistenti, devono essere considerati come Ridistribuibili; +3) I Ridistribuibili possono essere distribuiti solo come parte della propria applicazione sviluppata utilizzando il Programma ("Applicazione del licenziatario") e solo per supportare i clienti in associazione al loro utilizzo dell'Applicazione del licenziatario. L'Applicazione del licenziatario deve costituire un'aggiunta di valore significativo tale che i Ridistribuibili non siano motivo fondamentale per l'acquisizione da parte degli utenti finali del proprio prodotto software; +4) Se i Ridistribuibili includono un Java Runtime Environment, il licenziatario deve anche includere altri Ridistribuibili non-Java con l'Applicazione del licenziatario, a meno che l'Applicazione non sia progettata per funzionare solo su dispositivi di computer classici (ad esempio, laptop, desktop e server) e non su dispositivi palmari o pervasivi (cioè, dispositivi che contengono un microprocessore ma non hanno computing come scopo primario); +5) Il licenziatario non può eliminare le istruzioni relative al copyright o agli avvisi contenute nei Ridistribuibili; +6) Il licenziatario accetta di proteggere IBM, i suoi fornitori o distributori da e contro richieste derivanti dall'uso o distribuzione dell'Applicazione del licenziatario; +7) Il licenziatario non può utilizzare lo stesso nome di percorso utilizzato per i file/moduli Ridistribuibili originali; +8) Il licenziatario non può utilizzare nomi o marchi di IBM, dei suoi fornitori o distributori relativamente alla commercializzazione delle proprie applicazioni senza previa approvazione di IBM, di quei fornitori o distributori; +9) Fatti salvi i limiti inderogabili di legge, IBM, i suoi fornitori o distributori forniscono i Ridistribuibili e la documentazione correlata senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE; +10) Il licenziatario è responsabile di tutta l'assistenza tecnica per la propria applicazione e qualsiasi modifica ai Ridistribuibili; e +11) L'accordo di licenza stipulato con l'utente finale dell'Applicazione del licenziatario, il licenziatario avviserà l'utente finale che i Ridistribuibili o le loro modifiche non possono essere i) utilizzati per scopi diversi da quello di attivazione dell'Applicazione, ii) copiati (salvo che per scopi di backup), iii) ulteriormente distribuiti o trasferiti senza l'Applicazione del licenziatario, o iv) soggetti ad assemblaggio a ritroso, compilazione a ritroso, o altrimenti tradotti salvo laddove specificamente consentito dalla legge e senza possibilità di deroga contrattuale. Inoltre, l'accordo di licenza del licenziatario deve proteggere IBM almeno quanto le clausole del presente Accordo. + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + +Per le Componenti Sorgente e i Matriali di Esempio elencati nel file REDIST del Programma, il licenziatario può ridistribuire le versioni modificate di tali Componenti Sorgente o dei Materiali di Esempio in conformità con le clausole di questa licenza e di qualsiasi istruzione nel file REDIST. + +Le seguenti unità di misura possono essere applicabili all'utilizzo del Programma da parte del licenziatario. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) è l'unità di misura per cui il Programma può essere concesso in licenza. Il numero di titolarità PVU richiesto si basa sulla tecnologia del processore (definita all'interno della Tabella PVU per Vendor del Processore, Marca, Tipo e Numero Modello all'indirizzo http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e il numero di processori resi disponibili al Programma. IBM continua a definire un processore come ciascun core del processore su un chip, ai fini della licenza basata su PVU. Ad esempio, un chip processore dual-core ha due processor core. + +Il licenziatario può sviluppare il Programma utilizzando la licenza per Full Capacity o Virtualization Capacity (Sub-Capacity) in base alle clausole di licenza per Sub-Capacity di Passport Advantage (consultare la pagina web di cui sotto). Se utilizzando la licenza per Full Capacity, il licenziatario deve ottenere titolarità PVU sufficienti a coprire tutti i processor core* attivati nell'ambiente hardware fisico reso disponibile a o gestito dal Programma, salvo per quei server da cui il Programma è stato permanentemente rimosso. Se utilizzando la licenza per Virtualization Capacity, il licenziatario deve ottenere titolarità a coprire tutti i processor core attivati resi disponibili per o gestiti dal Programma, come definito in base a Virtualization Capacity License Counting Rules su http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un processor core attivato è un processor core disponibile per essere utilizzato in un server fisico o virtuale, a prescindere dal fatto che la capacità del processor core possa essere o sia limitata tramite tecnologie di virtualizzazione, comandi del sistema operativo, impostazioni BIOS o limitazioni simili. + +Virtual Processor Core + +Virtual Processor Core è un'unità di misura per cui il Programma può essere concesso in licenza. Un Server Fisico è un computer fisico che comprende unità di elaborazione, memoria e capacità di input/output e che esegue le procedure, i comandi o le applicazioni richieste per uno o più utenti o dispositivi client. Quando sono utilizzati rack, blade enclosure o altre apparecchiature simili, ogni dispositivo fisico separabile ad esempio, un blade o un dispositivo montato su rack) che ha le componenti richieste è considerato un Server Fisico a parte. Un Server Virtuale è un computer virtuale creato mediante il partizionamento delle risorse disponibili per un Server Fisico o un Server Fisico non partizionato. Un Processor Core (comunemente chiamato processore o CPU) è un'unità funzionale all'interno di un computing device che interpreta ed esegue istruzioni. Un Processor Core è costituito almeno da un'unità di controllo istruzioni ed una o più unità aritmetiche o logiche. Un Virtual Processor Core è un Processor Core in un Server Fisico non partizionato o un core virtuale assegnato a un Server Virtuale. Il licenziatario deve ottenere titolarità per ciascun Virtual Processor Core reso disponibile per il Programma. + +Per ciascun Server Fisico, il licenziatario deve disporre di titolarità sufficienti per la parte minore della 1) somma di tutti i Virtual Processor Core disponibili su tutti i Server Virtuali resi disponibili per il Programma o 2) di tutti i Processor Core disponibili sul Server Fisico. + +Inoltre, le seguenti clausole si applicano all'utilizzo del Programma da parte del licenziatario. + +Configurazioni Idle Standby + +Ai fini di questa sezione, una configurazione "Idle Standby" è un in cui una copia del Programma è installata su un server che forma parte di una soluzione di elevata disponibilità ed è il server per cui il Programma eseguirà il fail over qualora la copia del Programma sul server attivo cessi di essere utilizzabile. Un server è considerato "idle" solo se, a meno che non si verifichi un failover, è utilizzato esclusivamente per azioni amministrative che assistono in scenari di failover. + +Il Programma non può essere installato su un server Idle Standby se non appropriatamente concesso in licenza. + +Se il Programma è utilizzato in una configurazione Idle Standby con la funzione Multi-Instance Queue Manager, allora una copia del Programma può risiedere per scopi di backup su un server Idle Standby, ed essere avviata, ma deve restare "idle" e non essere utilizzata per condurre lavoro produttivo di alcun tipo a meno che il server attivo non esegua il fail over sul server Idle Standby, caso in cui la copia Idle Standby può essere utilizzata per condurre lavoro produttivo durante il periodo di failover. + +Se il Programma è utilizzato in una configurazione Idle Standby con altri sistemi High Availability, allora una copia del Programma può risiedere per scopi di backup su un server Idle Standby, ma non avviata (e pertanto non essere utilizzata per condurre lavoro produttivo di alcun tipo), ma sarà avviata automaticamente dalle componenti di High Availability qualora si guasti il server attivo, caso in cui la copia Idle Standby può essere utilizzata per condurre lavoro produttivo durante il periodo di failover. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +IMPORTANTE: LEGGERE ATTENTAMENTE + +Di seguito sono presentati due accordi di licenza. + +1. Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi +2. Accordo Internazionale di Licenza di Programmi IBM + +Se il Licenziatario ottiene il Programma per uso di produzione (diverso dalla valutazione, test, "try or buy," di prova o dimostrazione): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta l'Accordo Internazionale di Licenza di Programmi IBM, senza modifiche. + +Se il Licenziatario ottiene il Programma per scopi di valutazione, test, "try or buy," di prova o dimostrazione (collettivamente "Valutazione"): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta sia (i) l'Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi (la "Licenza di Valutazione"), senza modifiche; sia (ii) l'Accordo Internazionale di Licenza di Programmi IBM (la "IPLA"), senza modifiche. + +La Licenza di Valutazione si applicherà entro la durata della Valutazione del Licenziatario. + +L'IPLA si applicherà automaticamente se il Licenziatario sceglie di conservare il Programma dopo la Valutazione (o di ottenere copie aggiuntive del Programma da utilizzare dopo la Valutazione) stipulando un accordo di approvvigionamento (ad es. gli accordi IBM International Passport Advantage o IBM Passport Advantage Express). + +La Licenza di Valutazione e l'IPLA non sono in vigore contemporaneamente; nessuno dei due modifica l'altro; e ciascuno è indipendente dall'altro. + +Segue il testo completo di ognuno di questi accordi di licenza. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza per la Valutazione dei Programmi (Z125-5543-05). + +Nome Programma (Numero Programma): +IBM MQ Advanced V9.0.3 (Evaluation) + +Le seguenti clausole standard si applicano all'utilizzo del Programma da parte del licenziatario. + +Periodo di Valutazione + +Il periodo di valutazione ha inizio alla data in cui il licenziatario accetta le clausole del presente Accordo e termina dopo 90 giorni. + +Programmi in bundle + +Il Programma è concesso in licenza come pacchetto multi-prodotto composto dai Programmi in bundle identificati di seguito. Il licenziatario può installare ed utilizzare tali Programmi in bundle entro i limiti delle Prove di Titolarità per il Programma come dichiarato in questo documento di Informazioni di Licenza. Il licenziatario non può trasferire o rivendere i Programmi in bundle separatamente dal pacchetto contenente più prodotti. Un Programma in bundle può essere accompagnato da clausole di licenza e tali clausole, se esistenti, si applicano all'utilizzo di quel Programma in bundle da parte del licenziatario. In caso di conflitto, le clausole di questo documento di Informazioni relative alla Licenza prevarranno sulle clausole del Programma in bundle. Una volta scaduti o terminati i diritti di utilizzo del Programma, il licenziatario deve interromperne l'uso, distruggere o rimandare prontamente indietro tutte le copie dei Programmi in bundle a colui il quale il licenziatario ha acquisito il Programma. Se il licenziatario ha scaricato i Programmi in bundle, dovrà contattare la parte da cui ha acquisito il Programma. Se il licenziatario desidera concedere in licenza i Programmi in bundle affinché vengano utilizzati oltre i limiti di quanto consentito sopra, dovrà contattare un Rappresentante vendite IBM o la società da cui ha acquisito il Programma per ottenere la licenza appropriata. + +Di seguito i Programmi in bundle concessi in licenza con il Programma: +IBM MQ V9.0.3 + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza di Programmi (Z125-3301-14). + +Nome Programma (Numero Programma): +IBM MQ Advanced V9.0.3 (5724-H72) + +Le seguenti clausole standard si applicano all'utilizzo del Programma da parte del licenziatario. + +Diritto di utilizzo limitato + +Come descritto nell'International Program License Agreement ("IPLA") e in queste Informazioni sulla Licenza, IBM concede al licenziatario un diritto limitato di utilizzare il Programma. Questo diritto è limitato al livello di Uso Autorizzato, come Processor Value Unit ("PVU"), Resource Value Unit ("RVU"), Value Unit ("VU") o altro livello di utilizzo specificato, pagato dal licenziatario come evidenziato nella Prova di Titolarità. L'utilizzo del licenziatario può anche essere limitato ad una macchina specifica, o solo come Programma di Supporto, o soggetto ad altre limitazioni. Poiché il licenziatario non ha pagato per tutto il valore economico del Programma, non è consentito nessun altro utilizzo senza il pagamento di canoni aggiuntivi. Inoltre, il licenziatario non può utilizzare il Programma per fornire servizi IT commerciali a terze parti, fornire hosting o timesharing commerciali o sublicenziare, noleggiare o concedere in leasing il Programma, se non espressamente stabilito negli accordi applicabili, in base ai quali il licenziatario ottiene autorizzazioni all'utilizzo del Programma. Il licenziatario può ottenere altri diritti a seguito del pagamento di canoni aggiuntivi o in base a clausole diverse o supplementari. IBM si riserva il diritto di determinare se tali diritti aggiuntivi possano essere disponibili per il licenziatario. + +Specifiche + +Le specifiche del Programma si possono trovare nelle sezioni pubbliche Descrizioni e Informazioni Tecniche delle Lettere d'Annuncio del Programma. + +Programmi in bundle + +Il Programma è concesso in licenza come pacchetto multi-prodotto composto dai Programmi in bundle identificati di seguito. Il licenziatario può installare ed utilizzare tali Programmi in bundle entro i limiti delle Prove di Titolarità per il Programma come dichiarato in questo documento di Informazioni di Licenza. Il licenziatario non può trasferire o rivendere i Programmi in bundle separatamente dal pacchetto contenente più prodotti. Un Programma in bundle può essere accompagnato da clausole di licenza e tali clausole, se esistenti, si applicano all'utilizzo di quel Programma in bundle da parte del licenziatario. In caso di conflitto, le clausole di questo documento di Informazioni relative alla Licenza prevarranno sulle clausole del Programma in bundle. Una volta scaduti o terminati i diritti di utilizzo del Programma, il licenziatario deve interromperne l'uso, distruggere o rimandare prontamente indietro tutte le copie dei Programmi in bundle a colui il quale il licenziatario ha acquisito il Programma. Se il licenziatario ha scaricato i Programmi in bundle, dovrà contattare la parte da cui ha acquisito il Programma. Se il licenziatario desidera concedere in licenza i Programmi in bundle affinché vengano utilizzati oltre i limiti di quanto consentito sopra, dovrà contattare un Rappresentante vendite IBM o la società da cui ha acquisito il Programma per ottenere la licenza appropriata. + +Di seguito i Programmi in bundle concessi in licenza con il Programma: +IBM MQ V9.0.3 + +Componenti non utilizzate per stabilire le titolarità richieste + +Nel determinare il numero di titolarità necessarie per l'installazione o l'utilizzo del Programma da parte del licenziatario, non saranno prese in considerazione l'installazione o l'utilizzo delle seguenti componenti del Programma. In altre parole, il licenziatario può installare ed utilizzare le seguenti componenti del Programma, in base a clausole di licenza, ma tali componenti non sono utilizzate per determinare il numero di titolarità richieste per il Programma. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + +Le seguenti unità di misura possono essere applicabili all'utilizzo del Programma da parte del licenziatario. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) è l'unità di misura per cui il Programma può essere concesso in licenza. Il numero di titolarità PVU richiesto si basa sulla tecnologia del processore (definita all'interno della Tabella PVU per Vendor del Processore, Marca, Tipo e Numero Modello all'indirizzo http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e il numero di processori resi disponibili al Programma. IBM continua a definire un processore come ciascun core del processore su un chip, ai fini della licenza basata su PVU. Ad esempio, un chip processore dual-core ha due processor core. + +Il licenziatario può sviluppare il Programma utilizzando la licenza per Full Capacity o Virtualization Capacity (Sub-Capacity) in base alle clausole di licenza per Sub-Capacity di Passport Advantage (consultare la pagina web di cui sotto). Se utilizzando la licenza per Full Capacity, il licenziatario deve ottenere titolarità PVU sufficienti a coprire tutti i processor core* attivati nell'ambiente hardware fisico reso disponibile a o gestito dal Programma, salvo per quei server da cui il Programma è stato permanentemente rimosso. Se utilizzando la licenza per Virtualization Capacity, il licenziatario deve ottenere titolarità a coprire tutti i processor core attivati resi disponibili per o gestiti dal Programma, come definito in base a Virtualization Capacity License Counting Rules su http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un processor core attivato è un processor core disponibile per essere utilizzato in un server fisico o virtuale, a prescindere dal fatto che la capacità del processor core possa essere o sia limitata tramite tecnologie di virtualizzazione, comandi del sistema operativo, impostazioni BIOS o limitazioni simili. + +Virtual Processor Core + +Virtual Processor Core è un'unità di misura per cui il Programma può essere concesso in licenza. Un Server Fisico è un computer fisico che comprende unità di elaborazione, memoria e capacità di input/output e che esegue le procedure, i comandi o le applicazioni richieste per uno o più utenti o dispositivi client. Quando sono utilizzati rack, blade enclosure o altre apparecchiature simili, ogni dispositivo fisico separabile ad esempio, un blade o un dispositivo montato su rack) che ha le componenti richieste è considerato un Server Fisico a parte. Un Server Virtuale è un computer virtuale creato mediante il partizionamento delle risorse disponibili per un Server Fisico o un Server Fisico non partizionato. Un Processor Core (comunemente chiamato processore o CPU) è un'unità funzionale all'interno di un computing device che interpreta ed esegue istruzioni. Un Processor Core è costituito almeno da un'unità di controllo istruzioni ed una o più unità aritmetiche o logiche. Un Virtual Processor Core è un Processor Core in un Server Fisico non partizionato o un core virtuale assegnato a un Server Virtuale. Il licenziatario deve ottenere titolarità per ciascun Virtual Processor Core reso disponibile per il Programma. + +Per ciascun Server Fisico, il licenziatario deve disporre di titolarità sufficienti per la parte minore della 1) somma di tutti i Virtual Processor Core disponibili su tutti i Server Virtuali resi disponibili per il Programma o 2) di tutti i Processor Core disponibili sul Server Fisico. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +IMPORTANTE: LEGGERE ATTENTAMENTE + +Di seguito sono presentati due accordi di licenza. + +1. Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi +2. Accordo Internazionale di Licenza di Programmi IBM + +Se il Licenziatario ottiene il Programma per uso di produzione (diverso dalla valutazione, test, "try or buy," di prova o dimostrazione): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta l'Accordo Internazionale di Licenza di Programmi IBM, senza modifiche. + +Se il Licenziatario ottiene il Programma per scopi di valutazione, test, "try or buy," di prova o dimostrazione (collettivamente "Valutazione"): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta sia (i) l'Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi (la "Licenza di Valutazione"), senza modifiche; sia (ii) l'Accordo Internazionale di Licenza di Programmi IBM (la "IPLA"), senza modifiche. + +La Licenza di Valutazione si applicherà entro la durata della Valutazione del Licenziatario. + +L'IPLA si applicherà automaticamente se il Licenziatario sceglie di conservare il Programma dopo la Valutazione (o di ottenere copie aggiuntive del Programma da utilizzare dopo la Valutazione) stipulando un accordo di approvvigionamento (ad es. gli accordi IBM International Passport Advantage o IBM Passport Advantage Express). + +La Licenza di Valutazione e l'IPLA non sono in vigore contemporaneamente; nessuno dei due modifica l'altro; e ciascuno è indipendente dall'altro. + +Segue il testo completo di ognuno di questi accordi di licenza. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza per la Valutazione dei Programmi (Z125-5543-05). + +Nome Programma (Numero Programma): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Le seguenti clausole standard si applicano all'utilizzo del Programma da parte del licenziatario. + +Periodo di Valutazione + +Il periodo di valutazione ha inizio alla data in cui il licenziatario accetta le clausole del presente Accordo e termina dopo 90 giorni. + +Programmi in bundle + +Il Programma è concesso in licenza come pacchetto multi-prodotto composto dai Programmi in bundle identificati di seguito. Il licenziatario può installare ed utilizzare tali Programmi in bundle entro i limiti delle Prove di Titolarità per il Programma come dichiarato in questo documento di Informazioni di Licenza. Il licenziatario non può trasferire o rivendere i Programmi in bundle separatamente dal pacchetto contenente più prodotti. Un Programma in bundle può essere accompagnato da clausole di licenza e tali clausole, se esistenti, si applicano all'utilizzo di quel Programma in bundle da parte del licenziatario. In caso di conflitto, le clausole di questo documento di Informazioni relative alla Licenza prevarranno sulle clausole del Programma in bundle. Una volta scaduti o terminati i diritti di utilizzo del Programma, il licenziatario deve interromperne l'uso, distruggere o rimandare prontamente indietro tutte le copie dei Programmi in bundle a colui il quale il licenziatario ha acquisito il Programma. Se il licenziatario ha scaricato i Programmi in bundle, dovrà contattare la parte da cui ha acquisito il Programma. Se il licenziatario desidera concedere in licenza i Programmi in bundle affinché vengano utilizzati oltre i limiti di quanto consentito sopra, dovrà contattare un Rappresentante vendite IBM o la società da cui ha acquisito il Programma per ottenere la licenza appropriata. + +Di seguito i Programmi in bundle concessi in licenza con il Programma: +IBM MQ Idle Standby V9.0.3 + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza di Programmi (Z125-3301-14). + +Nome Programma (Numero Programma): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Le seguenti clausole standard si applicano all'utilizzo del Programma da parte del licenziatario. + +Diritto di utilizzo limitato + +Come descritto nell'International Program License Agreement ("IPLA") e in queste Informazioni sulla Licenza, IBM concede al licenziatario un diritto limitato di utilizzare il Programma. Questo diritto è limitato al livello di Uso Autorizzato, come Processor Value Unit ("PVU"), Resource Value Unit ("RVU"), Value Unit ("VU") o altro livello di utilizzo specificato, pagato dal licenziatario come evidenziato nella Prova di Titolarità. L'utilizzo del licenziatario può anche essere limitato ad una macchina specifica, o solo come Programma di Supporto, o soggetto ad altre limitazioni. Poiché il licenziatario non ha pagato per tutto il valore economico del Programma, non è consentito nessun altro utilizzo senza il pagamento di canoni aggiuntivi. Inoltre, il licenziatario non può utilizzare il Programma per fornire servizi IT commerciali a terze parti, fornire hosting o timesharing commerciali o sublicenziare, noleggiare o concedere in leasing il Programma, se non espressamente stabilito negli accordi applicabili, in base ai quali il licenziatario ottiene autorizzazioni all'utilizzo del Programma. Il licenziatario può ottenere altri diritti a seguito del pagamento di canoni aggiuntivi o in base a clausole diverse o supplementari. IBM si riserva il diritto di determinare se tali diritti aggiuntivi possano essere disponibili per il licenziatario. + +Specifiche + +Le specifiche del Programma si possono trovare nelle sezioni pubbliche Descrizioni e Informazioni Tecniche delle Lettere d'Annuncio del Programma. + +Programmi in bundle + +Il Programma è concesso in licenza come pacchetto multi-prodotto composto dai Programmi in bundle identificati di seguito. Il licenziatario può installare ed utilizzare tali Programmi in bundle entro i limiti delle Prove di Titolarità per il Programma come dichiarato in questo documento di Informazioni di Licenza. Il licenziatario non può trasferire o rivendere i Programmi in bundle separatamente dal pacchetto contenente più prodotti. Un Programma in bundle può essere accompagnato da clausole di licenza e tali clausole, se esistenti, si applicano all'utilizzo di quel Programma in bundle da parte del licenziatario. In caso di conflitto, le clausole di questo documento di Informazioni relative alla Licenza prevarranno sulle clausole del Programma in bundle. Una volta scaduti o terminati i diritti di utilizzo del Programma, il licenziatario deve interromperne l'uso, distruggere o rimandare prontamente indietro tutte le copie dei Programmi in bundle a colui il quale il licenziatario ha acquisito il Programma. Se il licenziatario ha scaricato i Programmi in bundle, dovrà contattare la parte da cui ha acquisito il Programma. Se il licenziatario desidera concedere in licenza i Programmi in bundle affinché vengano utilizzati oltre i limiti di quanto consentito sopra, dovrà contattare un Rappresentante vendite IBM o la società da cui ha acquisito il Programma per ottenere la licenza appropriata. + +Di seguito i Programmi in bundle concessi in licenza con il Programma: +IBM MQ Idle Standby V9.0.3 + +Componenti non utilizzate per stabilire le titolarità richieste + +Nel determinare il numero di titolarità necessarie per l'installazione o l'utilizzo del Programma da parte del licenziatario, non saranno prese in considerazione l'installazione o l'utilizzo delle seguenti componenti del Programma. In altre parole, il licenziatario può installare ed utilizzare le seguenti componenti del Programma, in base a clausole di licenza, ma tali componenti non sono utilizzate per determinare il numero di titolarità richieste per il Programma. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + +Le seguenti unità di misura possono essere applicabili all'utilizzo del Programma da parte del licenziatario. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) è l'unità di misura per cui il Programma può essere concesso in licenza. Il numero di titolarità PVU richiesto si basa sulla tecnologia del processore (definita all'interno della Tabella PVU per Vendor del Processore, Marca, Tipo e Numero Modello all'indirizzo http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e il numero di processori resi disponibili al Programma. IBM continua a definire un processore come ciascun core del processore su un chip, ai fini della licenza basata su PVU. Ad esempio, un chip processore dual-core ha due processor core. + +Il licenziatario può sviluppare il Programma utilizzando la licenza per Full Capacity o Virtualization Capacity (Sub-Capacity) in base alle clausole di licenza per Sub-Capacity di Passport Advantage (consultare la pagina web di cui sotto). Se utilizzando la licenza per Full Capacity, il licenziatario deve ottenere titolarità PVU sufficienti a coprire tutti i processor core* attivati nell'ambiente hardware fisico reso disponibile a o gestito dal Programma, salvo per quei server da cui il Programma è stato permanentemente rimosso. Se utilizzando la licenza per Virtualization Capacity, il licenziatario deve ottenere titolarità a coprire tutti i processor core attivati resi disponibili per o gestiti dal Programma, come definito in base a Virtualization Capacity License Counting Rules su http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un processor core attivato è un processor core disponibile per essere utilizzato in un server fisico o virtuale, a prescindere dal fatto che la capacità del processor core possa essere o sia limitata tramite tecnologie di virtualizzazione, comandi del sistema operativo, impostazioni BIOS o limitazioni simili. + +Inoltre, le seguenti clausole si applicano all'utilizzo del Programma da parte del licenziatario. + +Configurazioni Idle Standby + +Ai fini di questa sezione, una configurazione "Idle Standby" è un in cui una copia del Programma è installata su un server che forma parte di una soluzione di elevata disponibilità ed è il server per cui il Programma eseguirà il fail over qualora la copia del Programma sul server attivo cessi di essere utilizzabile. Un server è considerato "idle" solo se, a meno che non si verifichi un failover, è utilizzato esclusivamente per azioni amministrative che assistono in scenari di failover. + +Il Programma non può essere installato su un server Idle Standby se non appropriatamente concesso in licenza. + +Se il Programma è utilizzato in una configurazione Idle Standby con la funzione Multi-Instance Queue Manager, allora una copia del Programma può risiedere per scopi di backup su un server Idle Standby, ed essere avviata, ma deve restare "idle" e non essere utilizzata per condurre lavoro produttivo di alcun tipo a meno che il server attivo non esegua il fail over sul server Idle Standby, caso in cui la copia Idle Standby può essere utilizzata per condurre lavoro produttivo durante il periodo di failover. + +Se il Programma è utilizzato in una configurazione Idle Standby con altri sistemi High Availability, allora una copia del Programma può risiedere per scopi di backup su un server Idle Standby, ma non avviata (e pertanto non essere utilizzata per condurre lavoro produttivo di alcun tipo), ma sarà avviata automaticamente dalle componenti di High Availability qualora si guasti il server attivo, caso in cui la copia Idle Standby può essere utilizzata per condurre lavoro produttivo durante il periodo di failover. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +IMPORTANTE: LEGGERE ATTENTAMENTE + +Di seguito sono presentati due accordi di licenza. + +1. Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi +2. Accordo Internazionale di Licenza di Programmi IBM + +Se il Licenziatario ottiene il Programma per uso di produzione (diverso dalla valutazione, test, "try or buy," di prova o dimostrazione): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta l'Accordo Internazionale di Licenza di Programmi IBM, senza modifiche. + +Se il Licenziatario ottiene il Programma per scopi di valutazione, test, "try or buy," di prova o dimostrazione (collettivamente "Valutazione"): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta sia (i) l'Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi (la "Licenza di Valutazione"), senza modifiche; sia (ii) l'Accordo Internazionale di Licenza di Programmi IBM (la "IPLA"), senza modifiche. + +La Licenza di Valutazione si applicherà entro la durata della Valutazione del Licenziatario. + +L'IPLA si applicherà automaticamente se il Licenziatario sceglie di conservare il Programma dopo la Valutazione (o di ottenere copie aggiuntive del Programma da utilizzare dopo la Valutazione) stipulando un accordo di approvvigionamento (ad es. gli accordi IBM International Passport Advantage o IBM Passport Advantage Express). + +La Licenza di Valutazione e l'IPLA non sono in vigore contemporaneamente; nessuno dei due modifica l'altro; e ciascuno è indipendente dall'altro. + +Segue il testo completo di ognuno di questi accordi di licenza. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza per la Valutazione dei Programmi (Z125-5543-05). + +Nome Programma (Numero Programma): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Le seguenti clausole standard si applicano all'utilizzo del Programma da parte del licenziatario. + +Periodo di Valutazione + +Il periodo di valutazione ha inizio alla data in cui il licenziatario accetta le clausole del presente Accordo e termina dopo 90 giorni. + +Programmi in bundle + +Il Programma è concesso in licenza come pacchetto multi-prodotto composto dai Programmi in bundle identificati di seguito. Il licenziatario può installare ed utilizzare tali Programmi in bundle entro i limiti delle Prove di Titolarità per il Programma come dichiarato in questo documento di Informazioni di Licenza. Il licenziatario non può trasferire o rivendere i Programmi in bundle separatamente dal pacchetto contenente più prodotti. Un Programma in bundle può essere accompagnato da clausole di licenza e tali clausole, se esistenti, si applicano all'utilizzo di quel Programma in bundle da parte del licenziatario. In caso di conflitto, le clausole di questo documento di Informazioni relative alla Licenza prevarranno sulle clausole del Programma in bundle. Una volta scaduti o terminati i diritti di utilizzo del Programma, il licenziatario deve interromperne l'uso, distruggere o rimandare prontamente indietro tutte le copie dei Programmi in bundle a colui il quale il licenziatario ha acquisito il Programma. Se il licenziatario ha scaricato i Programmi in bundle, dovrà contattare la parte da cui ha acquisito il Programma. Se il licenziatario desidera concedere in licenza i Programmi in bundle affinché vengano utilizzati oltre i limiti di quanto consentito sopra, dovrà contattare un Rappresentante vendite IBM o la società da cui ha acquisito il Programma per ottenere la licenza appropriata. + +Di seguito i Programmi in bundle concessi in licenza con il Programma: +IBM MQ V9.0.3 + +Limitazione dello Sviluppatore + +Se il Programma è designato per "Sviluppatori", il Programma può essere utilizzato solo come parte dello sviluppo interno del licenziatario e unit test su una macchina dello sviluppatore. Una macchina dello sviluppatore è un ambiente desktop fisico o virtuale, che esegue un sistema operativo primario e il Programma, entrambi accessibili e utilizzati da più di uno sviluppatore specificato. Il licenziatario non può utilizzare il Programma per elaborare workload di produzione, simulando workload di produzione o test di scalabilità di qualsiasi codice, applicazione o sistema. Il licenziatario non può utilizzare alcuna parte del Programma per altri scopi senza acquisire le titolarità per produzione appropriate. + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza di Programmi (Z125-3301-14). + +Nome Programma (Numero Programma): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Le seguenti clausole standard si applicano all'utilizzo del Programma da parte del licenziatario. + +Diritto di utilizzo limitato + +Come descritto nell'International Program License Agreement ("IPLA") e in queste Informazioni sulla Licenza, IBM concede al licenziatario un diritto limitato di utilizzare il Programma. Questo diritto è limitato al livello di Uso Autorizzato, come Processor Value Unit ("PVU"), Resource Value Unit ("RVU"), Value Unit ("VU") o altro livello di utilizzo specificato, pagato dal licenziatario come evidenziato nella Prova di Titolarità. L'utilizzo del licenziatario può anche essere limitato ad una macchina specifica, o solo come Programma di Supporto, o soggetto ad altre limitazioni. Poiché il licenziatario non ha pagato per tutto il valore economico del Programma, non è consentito nessun altro utilizzo senza il pagamento di canoni aggiuntivi. Inoltre, il licenziatario non può utilizzare il Programma per fornire servizi IT commerciali a terze parti, fornire hosting o timesharing commerciali o sublicenziare, noleggiare o concedere in leasing il Programma, se non espressamente stabilito negli accordi applicabili, in base ai quali il licenziatario ottiene autorizzazioni all'utilizzo del Programma. Il licenziatario può ottenere altri diritti a seguito del pagamento di canoni aggiuntivi o in base a clausole diverse o supplementari. IBM si riserva il diritto di determinare se tali diritti aggiuntivi possano essere disponibili per il licenziatario. + +Specifiche + +Le specifiche del Programma si possono trovare nelle sezioni pubbliche Descrizioni e Informazioni Tecniche delle Lettere d'Annuncio del Programma. + +Programmi in bundle + +Il Programma è concesso in licenza come pacchetto multi-prodotto composto dai Programmi in bundle identificati di seguito. Il licenziatario può installare ed utilizzare tali Programmi in bundle entro i limiti delle Prove di Titolarità per il Programma come dichiarato in questo documento di Informazioni di Licenza. Il licenziatario non può trasferire o rivendere i Programmi in bundle separatamente dal pacchetto contenente più prodotti. Un Programma in bundle può essere accompagnato da clausole di licenza e tali clausole, se esistenti, si applicano all'utilizzo di quel Programma in bundle da parte del licenziatario. In caso di conflitto, le clausole di questo documento di Informazioni relative alla Licenza prevarranno sulle clausole del Programma in bundle. Una volta scaduti o terminati i diritti di utilizzo del Programma, il licenziatario deve interromperne l'uso, distruggere o rimandare prontamente indietro tutte le copie dei Programmi in bundle a colui il quale il licenziatario ha acquisito il Programma. Se il licenziatario ha scaricato i Programmi in bundle, dovrà contattare la parte da cui ha acquisito il Programma. Se il licenziatario desidera concedere in licenza i Programmi in bundle affinché vengano utilizzati oltre i limiti di quanto consentito sopra, dovrà contattare un Rappresentante vendite IBM o la società da cui ha acquisito il Programma per ottenere la licenza appropriata. + +Di seguito i Programmi in bundle concessi in licenza con il Programma: +IBM MQ V9.0.3 + +Limitazione dello Sviluppatore + +Se il Programma è designato per "Sviluppatori", il Programma può essere utilizzato solo come parte dello sviluppo interno del licenziatario e unit test su una macchina dello sviluppatore. Una macchina dello sviluppatore è un ambiente desktop fisico o virtuale, che esegue un sistema operativo primario e il Programma, entrambi accessibili e utilizzati da più di uno sviluppatore specificato. Il licenziatario non può utilizzare il Programma per elaborare workload di produzione, simulando workload di produzione o test di scalabilità di qualsiasi codice, applicazione o sistema. Il licenziatario non può utilizzare alcuna parte del Programma per altri scopi senza acquisire le titolarità per produzione appropriate. + +Componenti non utilizzate per stabilire le titolarità richieste + +Nel determinare il numero di titolarità necessarie per l'installazione o l'utilizzo del Programma da parte del licenziatario, non saranno prese in considerazione l'installazione o l'utilizzo delle seguenti componenti del Programma. In altre parole, il licenziatario può installare ed utilizzare le seguenti componenti del Programma, in base a clausole di licenza, ma tali componenti non sono utilizzate per determinare il numero di titolarità richieste per il Programma. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + +Le seguenti unità di misura possono essere applicabili all'utilizzo del Programma da parte del licenziatario. + +Installazione + +Un'Installazione è l'unità di misura per cui il Programma può essere concesso in licenza. Un'Installazione è una copia installata del Programma su un disco virtuale o fisico reso disponibile per essere eseguito su un computer. Il licenziatario deve ottenere una titolarità per ogni Installazione del Programma. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +IMPORTANTE: LEGGERE ATTENTAMENTE + +Di seguito sono presentati due accordi di licenza. + +1. Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi +2. Accordo Internazionale di Licenza di Programmi IBM + +Se il Licenziatario ottiene il Programma per uso di produzione (diverso dalla valutazione, test, "try or buy," di prova o dimostrazione): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta l'Accordo Internazionale di Licenza di Programmi IBM, senza modifiche. + +Se il Licenziatario ottiene il Programma per scopi di valutazione, test, "try or buy," di prova o dimostrazione (collettivamente "Valutazione"): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta sia (i) l'Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi (la "Licenza di Valutazione"), senza modifiche; sia (ii) l'Accordo Internazionale di Licenza di Programmi IBM (la "IPLA"), senza modifiche. + +La Licenza di Valutazione si applicherà entro la durata della Valutazione del Licenziatario. + +L'IPLA si applicherà automaticamente se il Licenziatario sceglie di conservare il Programma dopo la Valutazione (o di ottenere copie aggiuntive del Programma da utilizzare dopo la Valutazione) stipulando un accordo di approvvigionamento (ad es. gli accordi IBM International Passport Advantage o IBM Passport Advantage Express). + +La Licenza di Valutazione e l'IPLA non sono in vigore contemporaneamente; nessuno dei due modifica l'altro; e ciascuno è indipendente dall'altro. + +Segue il testo completo di ognuno di questi accordi di licenza. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza per la Valutazione dei Programmi (Z125-5543-05). + +Nome Programma: IBM MQ Managed File Transfer Service V9.0.1 +Numero Programma: Evaluation + +Nome Programma: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Numero Programma: Evaluation + +Nome Programma: IBM MQ Managed File Transfer Agent V9.0.1 +Numero Programma: Evaluation + +Periodo di Valutazione + +Il periodo di valutazione ha inizio alla data in cui il licenziatario accetta le clausole del presente Accordo e termina dopo 90 giorni. + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza di Programmi (Z125-3301-14). + +Nome Programma: IBM MQ Managed File Transfer Service V9.0.1 +Numero Programma: 5724-H72 + +Nome Programma: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Numero Programma: 5724-H72 + +Nome Programma: IBM MQ Managed File Transfer Agent V9.0.1 +Numero Programma: 5724-H72 + +Come descritto nell'International Program License Agreement ("IPLA") e in queste Informazioni sulla Licenza, IBM concede al licenziatario un diritto limitato di utilizzare il Programma. Questo diritto è limitato al livello di Uso Autorizzato, come Processor Value Unit ("PVU"), Resource Value Unit ("RVU"), Value Unit ("VU") o altro livello di utilizzo specificato, pagato dal licenziatario come evidenziato nella Prova di Titolarità. L'utilizzo del licenziatario può anche essere limitato ad una macchina specifica, o solo come Programma di Supporto, o soggetto ad altre limitazioni. Poiché il licenziatario non ha pagato per tutto il valore economico del Programma, non è consentito nessun altro utilizzo senza il pagamento di canoni aggiuntivi. Inoltre, il licenziatario non può utilizzare il Programma per fornire servizi IT commerciali a terze parti, fornire hosting o timesharing commerciali o sublicenziare, noleggiare o concedere in leasing il Programma, se non espressamente stabilito negli accordi applicabili, in base ai quali il licenziatario ottiene autorizzazioni all'utilizzo del Programma. Il licenziatario può ottenere altri diritti a seguito del pagamento di canoni aggiuntivi o in base a clausole diverse o supplementari. IBM si riserva il diritto di determinare se tali diritti aggiuntivi possano essere disponibili per il licenziatario. + +Le specifiche del Programma si possono trovare nelle sezioni pubbliche Descrizioni e Informazioni Tecniche delle Lettere d'Annuncio del Programma. + +Ridistribuibili + +Se il Programma include componenti che sono Ridistribuibili, saranno identificate nel file REDIST che accompagna il Programma. Oltre ai diritti della licenza concessi nell'Accordo, il licenziatario può distribuire i Ridistribuibili in base alle seguenti clausole: +1) La ridistribuzione deve essere solo in formato codice oggetto e rispettare tutte le direttive, istruzioni e specifiche della documentazione di accompagnamento al Programma o REDIST; +2) Se la documentazione di accompagnamento al Programma consente espressamente di modificare i Ridistribuibili, tale modifica dovrà rispettare tutte le direttive, le istruzioni e le specifiche in quella documentazione e in queste modifiche, se esistenti, devono essere considerati come Ridistribuibili; +3) I Ridistribuibili possono essere distribuiti solo come parte della propria applicazione sviluppata utilizzando il Programma ("Applicazione del licenziatario") e solo per supportare i clienti in associazione al loro utilizzo dell'Applicazione del licenziatario. L'Applicazione del licenziatario deve costituire un'aggiunta di valore significativo tale che i Ridistribuibili non siano motivo fondamentale per l'acquisizione da parte degli utenti finali del proprio prodotto software; +4) Se i Ridistribuibili includono un Java Runtime Environment, il licenziatario deve anche includere altri Ridistribuibili non-Java con l'Applicazione del licenziatario, a meno che l'Applicazione non sia progettata per funzionare solo su dispositivi di computer classici (ad esempio, laptop, desktop e server) e non su dispositivi palmari o pervasivi (cioè, dispositivi che contengono un microprocessore ma non hanno computing come scopo primario); +5) Il licenziatario non può eliminare le istruzioni relative al copyright o agli avvisi contenute nei Ridistribuibili; +6) Il licenziatario accetta di proteggere IBM, i suoi fornitori o distributori da e contro richieste derivanti dall'uso o distribuzione dell'Applicazione del licenziatario; +7) Il licenziatario non può utilizzare lo stesso nome di percorso utilizzato per i file/moduli Ridistribuibili originali; +8) Il licenziatario non può utilizzare nomi o marchi di IBM, dei suoi fornitori o distributori relativamente alla commercializzazione delle proprie applicazioni senza previa approvazione di IBM, di quei fornitori o distributori; +9) Fatti salvi i limiti inderogabili di legge, IBM, i suoi fornitori o distributori forniscono i Ridistribuibili e la documentazione correlata senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE; +10) Il licenziatario è responsabile di tutta l'assistenza tecnica per la propria applicazione e qualsiasi modifica ai Ridistribuibili; e +11) L'accordo di licenza stipulato con l'utente finale dell'Applicazione del licenziatario, il licenziatario avviserà l'utente finale che i Ridistribuibili o le loro modifiche non possono essere i) utilizzati per scopi diversi da quello di attivazione dell'Applicazione, ii) copiati (salvo che per scopi di backup), iii) ulteriormente distribuiti o trasferiti senza l'Applicazione del licenziatario, o iv) soggetti ad assemblaggio a ritroso, compilazione a ritroso, o altrimenti tradotti salvo laddove specificamente consentito dalla legge e senza possibilità di deroga contrattuale. Inoltre, l'accordo di licenza del licenziatario deve proteggere IBM almeno quanto le clausole del presente Accordo. + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + +Per le Componenti Sorgente e i Matriali di Esempio elencati nel file REDIST del Programma, il licenziatario può ridistribuire le versioni modificate di tali Componenti Sorgente o dei Materiali di Esempio in conformità con le clausole di questa licenza e di qualsiasi istruzione nel file REDIST. + +Installazione + +Un'Installazione è l'unità di misura per cui il Programma può essere concesso in licenza. Un'Installazione è una copia installata del Programma su un disco virtuale o fisico reso disponibile per essere eseguito su un computer. Il licenziatario deve ottenere una titolarità per ogni Installazione del Programma. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) è l'unità di misura per cui il Programma può essere concesso in licenza. Il numero di titolarità PVU richiesto si basa sulla tecnologia del processore (definita all'interno della Tabella PVU per Vendor del Processore, Marca, Tipo e Numero Modello all'indirizzo http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e il numero di processori resi disponibili al Programma. IBM continua a definire un processore come ciascun core del processore su un chip, ai fini della licenza basata su PVU. Ad esempio, un chip processore dual-core ha due processor core. + +Il licenziatario può sviluppare il Programma utilizzando la licenza per Full Capacity o Virtualization Capacity (Sub-Capacity) in base alle clausole di licenza per Sub-Capacity di Passport Advantage (consultare la pagina web di cui sotto). Se utilizzando la licenza per Full Capacity, il licenziatario deve ottenere titolarità PVU sufficienti a coprire tutti i processor core* attivati nell'ambiente hardware fisico reso disponibile a o gestito dal Programma, salvo per quei server da cui il Programma è stato permanentemente rimosso. Se utilizzando la licenza per Virtualization Capacity, il licenziatario deve ottenere titolarità a coprire tutti i processor core attivati resi disponibili per o gestiti dal Programma, come definito in base a Virtualization Capacity License Counting Rules su http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un processor core attivato è un processor core disponibile per essere utilizzato in un server fisico o virtuale, a prescindere dal fatto che la capacità del processor core possa essere o sia limitata tramite tecnologie di virtualizzazione, comandi del sistema operativo, impostazioni BIOS o limitazioni simili. + +Disposizioni specifiche al Programma + +Configurazioni Idle Standby + +Ai fini di questa sezione, una configurazione "Idle Standby" è un in cui una copia del Programma è installata su un server che forma parte di una soluzione di elevata disponibilità ed è il server per cui il Programma eseguirà il fail over qualora la copia del Programma sul server attivo cessi di essere utilizzabile. Un server è considerato "idle" solo se, a meno che non si verifichi un failover, è utilizzato esclusivamente per azioni amministrative che assistono in scenari di failover. + +Il Programma non può essere installato su un server Idle Standby se non appropriatamente concesso in licenza. + +Se il Programma è utilizzato in una configurazione Idle Standby con la funzione Multi-Instance Queue Manager, allora una copia del Programma può risiedere per scopi di backup su un server Idle Standby, ed essere avviata, ma deve restare "idle" e non essere utilizzata per condurre lavoro produttivo di alcun tipo a meno che il server attivo non esegua il fail over sul server Idle Standby, caso in cui la copia Idle Standby può essere utilizzata per condurre lavoro produttivo durante il periodo di failover. + +Se il Programma è utilizzato in una configurazione Idle Standby con altri sistemi High Availability, allora una copia del Programma può risiedere per scopi di backup su un server Idle Standby, ma non avviata (e pertanto non essere utilizzata per condurre lavoro produttivo di alcun tipo), ma sarà avviata automaticamente dalle componenti di High Availability qualora si guasti il server attivo, caso in cui la copia Idle Standby può essere utilizzata per condurre lavoro produttivo durante il periodo di failover. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +IMPORTANTE: LEGGERE ATTENTAMENTE + +Di seguito sono presentati due accordi di licenza. + +1. Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi +2. Accordo Internazionale di Licenza di Programmi IBM + +Se il Licenziatario ottiene il Programma per uso di produzione (diverso dalla valutazione, test, "try or buy," di prova o dimostrazione): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta l'Accordo Internazionale di Licenza di Programmi IBM, senza modifiche. + +Se il Licenziatario ottiene il Programma per scopi di valutazione, test, "try or buy," di prova o dimostrazione (collettivamente "Valutazione"): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta sia (i) l'Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi (la "Licenza di Valutazione"), senza modifiche; sia (ii) l'Accordo Internazionale di Licenza di Programmi IBM (la "IPLA"), senza modifiche. + +La Licenza di Valutazione si applicherà entro la durata della Valutazione del Licenziatario. + +L'IPLA si applicherà automaticamente se il Licenziatario sceglie di conservare il Programma dopo la Valutazione (o di ottenere copie aggiuntive del Programma da utilizzare dopo la Valutazione) stipulando un accordo di approvvigionamento (ad es. gli accordi IBM International Passport Advantage o IBM Passport Advantage Express). + +La Licenza di Valutazione e l'IPLA non sono in vigore contemporaneamente; nessuno dei due modifica l'altro; e ciascuno è indipendente dall'altro. + +Segue il testo completo di ognuno di questi accordi di licenza. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza per la Valutazione dei Programmi (Z125-5543-05). + +Nome Programma: IBM MQ Advanced Message Security V9.0.1 +Numero Programma: Evaluation + +Nome Programma: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Numero Programma: Evaluation + +Nome Programma: IBM MQ Telemetry V9.0.1 +Numero Programma: Evaluation + +Periodo di Valutazione + +Il periodo di valutazione ha inizio alla data in cui il licenziatario accetta le clausole del presente Accordo e termina dopo 90 giorni. + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + + + +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza di Programmi (Z125-3301-14). + +Nome Programma: IBM MQ Advanced Message Security V9.0.1 +Numero Programma: 5724-H72 + +Nome Programma: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Numero Programma: 5724-H72 + +Nome Programma: IBM MQ Telemetry V9.0.1 +Numero Programma: 5724-H72 + +Come descritto nell'International Program License Agreement ("IPLA") e in queste Informazioni sulla Licenza, IBM concede al licenziatario un diritto limitato di utilizzare il Programma. Questo diritto è limitato al livello di Uso Autorizzato, come Processor Value Unit ("PVU"), Resource Value Unit ("RVU"), Value Unit ("VU") o altro livello di utilizzo specificato, pagato dal licenziatario come evidenziato nella Prova di Titolarità. L'utilizzo del licenziatario può anche essere limitato ad una macchina specifica, o solo come Programma di Supporto, o soggetto ad altre limitazioni. Poiché il licenziatario non ha pagato per tutto il valore economico del Programma, non è consentito nessun altro utilizzo senza il pagamento di canoni aggiuntivi. Inoltre, il licenziatario non può utilizzare il Programma per fornire servizi IT commerciali a terze parti, fornire hosting o timesharing commerciali o sublicenziare, noleggiare o concedere in leasing il Programma, se non espressamente stabilito negli accordi applicabili, in base ai quali il licenziatario ottiene autorizzazioni all'utilizzo del Programma. Il licenziatario può ottenere altri diritti a seguito del pagamento di canoni aggiuntivi o in base a clausole diverse o supplementari. IBM si riserva il diritto di determinare se tali diritti aggiuntivi possano essere disponibili per il licenziatario. + +Le specifiche del Programma si possono trovare nelle sezioni pubbliche Descrizioni e Informazioni Tecniche delle Lettere d'Annuncio del Programma. + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + +Installazione + +Un'Installazione è l'unità di misura per cui il Programma può essere concesso in licenza. Un'Installazione è una copia installata del Programma su un disco virtuale o fisico reso disponibile per essere eseguito su un computer. Il licenziatario deve ottenere una titolarità per ogni Installazione del Programma. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) è l'unità di misura per cui il Programma può essere concesso in licenza. Il numero di titolarità PVU richiesto si basa sulla tecnologia del processore (definita all'interno della Tabella PVU per Vendor del Processore, Marca, Tipo e Numero Modello all'indirizzo http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e il numero di processori resi disponibili al Programma. IBM continua a definire un processore come ciascun core del processore su un chip, ai fini della licenza basata su PVU. Ad esempio, un chip processore dual-core ha due processor core. + +Il licenziatario può sviluppare il Programma utilizzando la licenza per Full Capacity o Virtualization Capacity (Sub-Capacity) in base alle clausole di licenza per Sub-Capacity di Passport Advantage (consultare la pagina web di cui sotto). Se utilizzando la licenza per Full Capacity, il licenziatario deve ottenere titolarità PVU sufficienti a coprire tutti i processor core* attivati nell'ambiente hardware fisico reso disponibile a o gestito dal Programma, salvo per quei server da cui il Programma è stato permanentemente rimosso. Se utilizzando la licenza per Virtualization Capacity, il licenziatario deve ottenere titolarità a coprire tutti i processor core attivati resi disponibili per o gestiti dal Programma, come definito in base a Virtualization Capacity License Counting Rules su http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Un processor core attivato è un processor core disponibile per essere utilizzato in un server fisico o virtuale, a prescindere dal fatto che la capacità del processor core possa essere o sia limitata tramite tecnologie di virtualizzazione, comandi del sistema operativo, impostazioni BIOS o limitazioni simili. + +Disposizioni specifiche al Programma + +Configurazioni Idle Standby + +Ai fini di questa sezione, una configurazione "Idle Standby" è un in cui una copia del Programma è installata su un server che forma parte di una soluzione di elevata disponibilità ed è il server per cui il Programma eseguirà il fail over qualora la copia del Programma sul server attivo cessi di essere utilizzabile. Un server è considerato "idle" solo se, a meno che non si verifichi un failover, è utilizzato esclusivamente per azioni amministrative che assistono in scenari di failover. + +Il Programma non può essere installato su un server Idle Standby se non appropriatamente concesso in licenza. + +Se il Programma è utilizzato in una configurazione Idle Standby con la funzione Multi-Instance Queue Manager, allora una copia del Programma può risiedere per scopi di backup su un server Idle Standby, ed essere avviata, ma deve restare "idle" e non essere utilizzata per condurre lavoro produttivo di alcun tipo a meno che il server attivo non esegua il fail over sul server Idle Standby, caso in cui la copia Idle Standby può essere utilizzata per condurre lavoro produttivo durante il periodo di failover. + +Se il Programma è utilizzato in una configurazione Idle Standby con altri sistemi High Availability, allora una copia del Programma può risiedere per scopi di backup su un server Idle Standby, ma non avviata (e pertanto non essere utilizzata per condurre lavoro produttivo di alcun tipo), ma sarà avviata automaticamente dalle componenti di High Availability qualora si guasti il server attivo, caso in cui la copia Idle Standby può essere utilizzata per condurre lavoro produttivo durante il periodo di failover. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +IMPORTANTE: LEGGERE ATTENTAMENTE + +Di seguito sono presentati due accordi di licenza. + +1. Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi +2. Accordo Internazionale di Licenza di Programmi IBM + +Se il Licenziatario ottiene il Programma per uso di produzione (diverso dalla valutazione, test, "try or buy," di prova o dimostrazione): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta l'Accordo Internazionale di Licenza di Programmi IBM, senza modifiche. + +Se il Licenziatario ottiene il Programma per scopi di valutazione, test, "try or buy," di prova o dimostrazione (collettivamente "Valutazione"): Facendo clic sul pulsante "Accetto" di seguito, il Licenziatario accetta sia (i) l'Accordo Internazionale di Licenza IBM per la Valutazione dei Programmi (la "Licenza di Valutazione"), senza modifiche; sia (ii) l'Accordo Internazionale di Licenza di Programmi IBM (la "IPLA"), senza modifiche. + +La Licenza di Valutazione si applicherà entro la durata della Valutazione del Licenziatario. + +L'IPLA si applicherà automaticamente se il Licenziatario sceglie di conservare il Programma dopo la Valutazione (o di ottenere copie aggiuntive del Programma da utilizzare dopo la Valutazione) stipulando un accordo di approvvigionamento (ad es. gli accordi IBM International Passport Advantage o IBM Passport Advantage Express). + +La Licenza di Valutazione e l'IPLA non sono in vigore contemporaneamente; nessuno dei due modifica l'altro; e ciascuno è indipendente dall'altro. + +Segue il testo completo di ognuno di questi accordi di licenza. + + +Accordo Internazionale di Licenza per la Valutazione dei Programmi + +Parte 1 - Condizioni Generali + +SCARICANDO, INSTALLANDO, COPIANDO, ACCEDENDO, FACENDO CLIC SUL PULSANTE "ACCETTO", O UTILIZZANDO IL PROGRAMMA, IL LICENZIATARIO ACCETTA LE CLAUSOLE DEL PRESENTE ACCORDO. SE SI ACCETTANO TALI CLAUSOLE PER CONTO DEL LICENZIATARIO, SI DICHIARA E GARANTISCE DI AVERE PIENA AUTORITA' DI VINCOLARE IL LICENZIATARIO ALLE PRESENTI CLAUSOLE. SE NON SI ACCETTANO LE PRESENTI DISPOSIZIONI, + +* NON SCARICARE, INSTALLARE, COPIARE, ACCEDERE, FARE CLIC SUL PULSANTE "ACCETTO", O UTILIZZARE IL PROGRAMMA; E + +* RESTITUIRE IMMEDIATAMENTE I SUPPORTI NON UTILIZZATI E LA DOCUMENTAZIONE ALLA PARTE DA CUI E' STATA OTTENUTA. SE IL PROGRAMMA E' STATO SCARICATO, DISTRUGGERE TUTTE LE COPIE DEL PROGRAMMA. + +1. Definizioni + +"Uso Autorizzato" - il livello specificato per il quale il Licenziatario è autorizzato ad eseguire o far funzionare il Programma. Quel livello può essere misurato per numero di utenti, MSU (millions of service units), Processor Value Unit ("PVU"), o un altro livello di utilizzo specificato da IBM. + +"IBM" - International Business Machines Corporation o una delle sue consociate. + +"Informazioni di Licenza" ("LI") - un documento che fornisce informazioni e qualsiasi clausola aggiuntiva specifica ad un Programma. E' possibile trovare le Informazioni di Licenza del Programma nella directory del Programma, utilizzando un comando di sistema, o nel libretto incluso con il Programma. + +"Programma" - sia il programma originale che tutte le copie integrali o parziali di esso: 1) istruzioni in formato leggibile dalla macchina e dati, 2) componenti, file e moduli, 3) contenuto audiovisivo (quale immagini, testo, registrazioni o figure), e 4) materiali su licenza associati (come chiavi e documentazioni). + +2. Struttura dell'Accordo + +Il presente Accordo è suddiviso in Parte 1 - Condizioni Generali, Parte 2 - Condizioni applicabili ai singoli Paesi (ove applicabili) e la LI costituisce l'accordo integrale tra il Licenziatario e IBM relativamente all'uso del Programma. Sostituisce qualsiasi altra precedente comunicazione verbale o scritta intercorsa tra il Licenziatario ed IBM relativa all'uso del Programma da parte del Licenziatario. Le condizioni incluse nella Parte 2 possono sostituire o modificare quelle contenute nella Parte 1. In caso di conflitto, la LI prevarrà su entrambe le Parti. + +3. Concessione della Licenza + +Il Programma è di proprietà di IBM o di un fornitore IBM, ed è tutelato dalle leggi sul diritto di autore, viene concesso in licenza, ma non viene venduto. + +IBM concede al Licenziatario una licenza limitata, non esclusiva, non trasferibile per 1) scaricare, installare ed utilizzare il Programma durante il periodo di valutazione fino al livello di utilizzo specificato nella LI solo per scopi di valutazione interna, test, o dimostrazione su una base di prova; 2) effettuare ed installare un ragionevole numero di copie per supportare tale utilizzo e 3) effettuare una copia di backup, tutto a condizione che + +a. il Licenziatario abbia legalmente ottenuto il Programma e soddisfi le clausole di questo Accordo; + +b. la copia di backup non funzioni a meno che il Programma di cui è eseguito il backup non possa funzionare; + +c. Il Licenziatario riproduca su ciascuna copia, anche parziale, del Programma le indicazioni relative al diritto d'autore e ogni altra indicazione relativa a diritti di proprietà; + +d. Il Licenziatario conservi una registrazione di tutte le copie del Programma e si assicuri che chiunque utilizzi il Programma (con accesso locale o remoto) 1) rispetti l'uso autorizzato e 2) rispetti le clausole di questo Accordo; + +e. Il Licenziatario non 1) utilizzi il Programma per scopi produttivi o in altro modo utilizzi, copi o distribuisca il Programma fatto salvo quanto previsto nel presente Accordo; 2) assembli a ritroso, compili a ritroso, o in altro modo traduca o esegua il reverse engineering del Programma, salvo quanto espressamente consentito dalle norme inderogabili di legge, senza possibilità di deroga contrattuale; 3) utilizzi alcuna delle componenti del Programma, dei file, dei moduli, del contenuto audio-visivo, o di materiale correlato concesso in licenza separatamente dal Programma; 4) sublicenzi, conceda in noleggio o locazione il Programma; 5) utilizzi il Programma per l'hosting di applicazione commerciale; e + +f. se il Licenziatario ottiene questo Programma come Programma di supporto, utilizzi questo Programma solo per supportare il Programma Principale e sia soggetto a qualsiasi limitazione nella licenza per il Programma Principale, o, se il Licenziatario ottiene questo Programma come Programma Principale, utilizzi tutti i Programmi di Supporto solo per supportare questo Programma, e sia soggetto a tutte le limitazioni in questo Accordo. Ai fini di questo punto "f," per "Programma di Supporto" si intende un Programma che è parte di un altro Programma IBM ("Programma Principale") e identificato come Programma di Supporto nella LI del Programma Principale. (Per ottenere una licenza a parte ad un Programma di Supporto senza tali limitazioni, il Licenziatario dovrà contattare la parte da cui ha ottenuto il Programma di Supporto.) + +Questa licenza si applica ad ogni copia del Programma effettuata dal Licenziatario. + +3.1 Aggiornamenti, Correzione (Fix) e Patch + +Quando il Licenziatario riceve un aggiornamento, correzione, o patch ad un Programma, accetta qualsiasi clausola aggiuntiva o differente applicabile a tale aggiornamento, correzione o patch specificata nella sua LI. Se non sono fornite clausole aggiuntive o differenti, allora gli aggiornamenti, correzioni o patch sono soggetti solo a questo Accordo. Se il Programma è sostituito da un aggiornamento, il Licenziatario accetta di sospendere subito l'uso del Programma sostituito. + +3.2 Termine e Revoca + +Il periodo di valutazione decorre dalla data in cui il Licenziatario accetta le disposizioni del presente Accordo e termina al verificarsi del primo evento tra quelli di seguito indicati: 1) alla scadenza della durata o della data specificata da IBM nelle Informazioni di Licenza o un documento di transazione o 2) alla data in cui il Programma si disabilita automaticamente. Entro dieci giorni dalla revoca del periodo di valutazione, il Licenziatario dovrà distruggere il Programma e tutte le copie effettuate. Qualora IBM specifichi nella LI che il Licenziatario può conservare il Programma, e il Licenziatario scelga di procedere in tal senso, allora il Programma sarà disciplinato da un altro accordo di licenza, che IBM provvederà a fornirgli. Inoltre, potrebbe essere previsto il pagamento di un corrispettivo. + +IBM potrà revocare la licenza del Licenziatario qualora questi non rispetti le clausole del presente Accordo. In caso di revoca della licenza da entrambe le parti, per qualsiasi motivo, il Licenziatario accetta di sospendere subito l'uso e distruggere tutte le copie del Programma effettuate. Qualsiasi clausola del presente Accordo che per sua natura si estende oltre la cessazione dell'Accordo, resterà in vigore fino al suo adempimento e si applicherà ai rispettivi successori e agli assegnatari delle parti. + +IL PROGRAMMA PUÒ CONTENERE UN DISPOSITIVO DI DISATTIVAZIONE ATTO AD IMPEDIRNE L'UTILIZZO DOPO LA SCADENZA DEL PERIODO DI VALUTAZIONE. IL LICENZIATARIO ACCETTA DI NON ALTERARE IL DISPOSITIVO DI DISATTIVAZIONE O IL PROGRAMMA. IL LICENZIATARIO DOVRA' PRENDERE DELLE PRECAUZIONI PER EVITARE QUALSIASI PERDITA DI DATI CHE POTREBBE VERIFICARSI QUANDO IL PROGRAMMA NON POTRÀ PIÙ ESSERE UTILIZZATO. + +4. Canoni + +Non è previsto alcun corrispettivo per l'utilizzo del Programma durante il periodo di valutazione. + +5. Esclusioni delle garanzie + +FATTE SALVE LE GARANZIE INDEROGABILI DI LEGGE, IBM NON FORNISCE GARANZIE O CONDIZIONI, ESPRESSE O IMPLICITE, RELATIVE AL PROGRAMMA O AL SUPPORTO, SE ESISTENTE, INCLUSE, MA NON LIMITATE A, GARANZIE O CONDIZIONI IMPLICITE DI COMMERCIABILITA', DI QUALITA', IDONEITA' PER UNO SCOPO PARTICOLARE, E TITOLARITA', E NON VIOLAZIONE. + +POICHÉ LA LEGISLAZIONE DI ALCUNI PAESI NON CONSENTE L'ESCLUSIONE DELLE GARANZIE ESPRESSE O IMPLICITE, LA SUDDETTA ESCLUSIONE POTREBBE NON ESSERE APPLICABILE. IN TAL CASO, TALI GARANZIE SARANNO LIMITATE ALLA DURATA DEL PERIODO MINIMO PREVISTO DALLA LEGGE. NESSUNA GARANZIA E' APPLICABILE DOPO TALE PERIODO. POICHÉ LA LEGISLAZIONE DI ALCUNI PAESI NON CONSENTE LIMITAZIONI BASATE SULLA DURATA DI UNA GARANZIA IMPLICITA, LA SUDDETTA LIMITAZIONE POTREBBE NON ESSERE APPLICABILE. IL LICENZIATARIO PUO' OTTENERE ULTERIORI DIRITTI DERIVANTI DALLA LEGISLAZIONE SPECIFICA DI CIASCUN PAESE. + +RINUNCE ED ESCLUSIONI IN QUESTA SEZIONE 5 SI APPLICANO ANCHE AGLI SVILUPPATORI E FORNITORI DEL PROGRAMMA IBM. + +I PRODUTTORI, I FORNITORI O GLI EDITORI DI PROGRAMMI NON IBM POSSONO FORNIRE GARANZIE PROPRIE. + +IBM NON FORNISCE SUPPORTO DI ALCUN TIPO, SE NON DIVERSAMENTE SPECIFICATO. IN TAL CASO, QUALSIASI SUPPORTO FORNITO DA IBM E' SOGGETTO ALLE RINUNCE ED ESCLUSIONI IN QUESTA SEZIONE 5. + +6. Dati e Database del Licenziatario + +Per assistere il Licenziatario nell'isolare la causa di un problema con il Programma, IBM può richiedere che il Licenziatario 1) consenta ad IBM di accedere in remoto al sistema del Licenziatario o 2) invii le informazioni del Licenziatario o i dati del sistema a IBM. Tuttavia, IBM non è obbligata a fornire tale assistenza a meno che IBM ed il Licenziatario non abbiano stipulato un accordo scritto a parte in base al quale IBM accetta di fornire al Licenziatario quel tipo di supporto che va oltre gli obblighi di IBM in questo Accordo. In ogni caso, IBM utilizzerà le informazioni sugli errori e i problemi per migliorare i suoi prodotti e servizi ed assistere il Licenziatario con la fornitura di offerte di supporto correlate. A tal fine, IBM può utilizzare enti o subappaltatori di IBM (anche in uno o più paesi diversi da quello in cui ha sede il Licenziatario), ed il Licenziatario autorizza IBM a procedere in tal senso. + +Il Licenziatario resta responsabile per 1) i dati ed il contenuto di qualsiasi database che il Licenziatario rende disponibile ad IBM, 2) la scelta e l'implementazione di procedure e controlli relativi all'accesso, alla sicurezza, alla crittografia, all'uso e alla trasmissione di dati (inclusi dati personali), e 3) il backup e il recupero di database e dati memorizzati. Il Licenziatario non invierà o fornirà ad IBM accesso ad informazioni personali, sotto forma di dati o in altri formati, e sarà responsabile dei costi ragionevoli e di qualsiasi altra somma che IBM si trovi ad affrontare relativa alle informazioni erroneamente fornite ad IBM o alla perdita o divulgazione di tali informazioni da parte di IBM, incluse quelle derivanti da pretese di risarcimento di terze parti. + +7. Limitazione di Responsabilità + +Le limitazioni ed esclusioni in questa Sezione 7 (Limitazione di Responsabilità) si applicano nei limiti in cui non sono vietate dalla legislazione applicabile senza possibilità di deroga contrattuale. + +7.1 Casi nei quali è prevista una responsabilità da parte IBM + +Possono verificarsi circostanze in cui, per fatto imputabile ad IBM o per responsabilità di terzi, il Licenziatario abbia il diritto ad un risarcimento da parte di IBM. In questi casi, indipendentemente da ciò che dà titolo al Licenziatario a richiedere il risarcimento danni ad IBM (inclusi colpa grave, negligenza, erronee dichiarazioni o altri fatti di natura contrattuale o extracontrattuale), la responsabilità di IBM è limitata 1) ai danni fisici alla persona (incluso il decesso), ai beni immobili e mobili appartenenti alle persone fisiche per i quali IBM sia responsabile per legge e 2) nel caso di ogni altro danno diretto fino a U.S. $10,000 (o equivalente nella valuta locale). + +Questo limite si applica anche a qualsiasi sviluppatore e fornitore dei Programmi IBM. Ciò rappresenta il limite massimo per cui IBM e i suoi sviluppatori e fornitori del Programma sono collettivamente responsabili. + +7.2 Casi nei quali è esclusa una responsabilità da parte IBM + +IN NESSUN CASO IBM, GLI SVILUPPATORI DEL PROGRAMMA O I FORNITORI SARANNO RESPONSABILI PER QUANTO SEGUE, ANCHE SE INFORMATI DELLA POSSIBILITÀ DEL LORO VERIFICARSI: + +a. PERDITA O DANNEGGIAMENTO DI DATI; + +b. DANNI SPECIALI, INCIDENTALI, ESEMPLARI, O INDIRETTI, O QUALSIASI ALTRO DANNO ECONOMICO CONSEGUENTE; O + +c. MANCATI GUADAGNI, PERDITA DI OPPORTUNITÀ COMMERCIALE, DI REDDITO, DI BENEFICI, O MANCATI RISPARMI. + +8. Verifica della Conformità + +Ai fini di questa Sezione 8 (Verifica della Conformità), per "Clausole del Programma di Valutazione" si intende 1) il presente Accordo e gli emendamenti applicabili e i documenti della transazione forniti da IBM, e 2) le politiche software IBM che si possono trovare sul sito web IBM Software Policy (www.ibm.com/softwarepolicies), incluse ad esempio quelle politiche relative al backup, alla determinazione dei prezzi per sub-capacity, e alla migrazione. + +I diritti e gli obblighi stabiliti in questa Sezione 8 resteranno in vigore per il periodo in cui il Programma è concesso in licenza al Licenziatario e per i due anni successivi. + +8.1 Processo di Verifica + +Il Licenziatario accetta di creare, conservare e fornire ad IBM e ai suoi revisori accurate registrazioni scritte, esito delle analisi svolte mediante strumenti di sistema e altre informazioni relative al sistema sufficienti a fornire una verifica che dimostri che l'uso del Licenziatario di tutti i Programmi è conforme alle Clausole del Programma di Valutazione, incluse, ad esempio, tutte le condizioni di licenza d'uso IBM applicabili e le condizioni di eleggibilità e di definizione dei prezzi. Il Licenziatario è responsabile 1) di garantire che non supererà il suo Uso Autorizzato, e 2) di restare conforme alle Clausole del Programma di Valutazione. + +Con ragionevole preavviso, IBM può verificare la conformità con le Clausole del Programma di Valutazione del Licenziatario presso tutte le sedi e per tutti gli ambienti in cui il Licenziatario utilizza (per qualsiasi scopo) i Programmi in base alle Clausole del Programma di Valutazione. Tale verifica sarà condotta in modo da arrecare il minor intralcio possibile alle attività commerciali del Licenziatario, e potrà essere condotta presso la sede del Licenziatario, durante il normale orario lavorativo. IBM può utilizzare un revisore esterno in tale verifica, a condizione che IBM abbia sottoscritto con tale revisore un accordo di riservatezza ancora in vigore. + +8.2 Risoluzione + +Qualora IBM dovesse riscontrare che il Licenziatario ha utilizzato il Programma oltre il suo Uso Autorizzato o in modo non conforme alle Clausole del Programma di Valutazione, lo comunicherà al Licenziatario per iscritto. Il Licenziatario accetta di pagare prontamente e direttamente ad IBM il corrispettivo specificato da IBM in una fattura per 1) qualsiasi uso che ecceda quello autorizzato, 2) il supporto di tale uso per un periodo minore alla durata di tale uso in eccesso o per due anni, e 3) qualsiasi corrispettivo aggiuntivo e altra responsabilità determinata a seguito di tale verifica. + +9. Avvisi di Terze Parti + +Il Programma può includere codice di terze parti che IBM, non la terza parte, concede in licenza al Licenziatario in base al presente Accordo. Gli avvisi per il codice di terze parti, se esistenti, ("Avvisi di Terze Parti") sono inclusi solo per informazioni del Licenziatario. E' possibile trovare tali avvisi nei file NOTICES del Programma. Le informazioni su come ottenere il codice sorgente per determinato codice di terze parti si possono trovare negli Avvisi delle Terze Parti. Se negli Avvisi delle Terze Parti IBM dovesse identificare codice di terze parti come "Codice di Terze Parti Modificabile", IBM autorizza il Licenziatario a 1) modificare il Codice di Terze Parti Modificabile e 2) eseguire il reverse engineer dei moduli del Programma che si interfacciano direttamente con il Codice di Terze Parti Modificabile a condizione che sia solo allo scopo di eseguire il debug delle modifiche del Licenziatario per tale codice di terze parti. Le obbligazioni IBM relative a servizi e supporto, ove applicabili, si applicano esclusivamente al Programma non modificato. + +10. Disposizioni Generali + +a. Le disposizioni del presente Accordo non pregiudicano in alcun modo i diritti e le garanzie di legge del consumatore che non possono essere escluse o limitate per contratto. + +b. Qualora una qualsiasi clausola del presente Accordo dovesse essere dichiarata invalida o inefficace, le restanti clausole del presente Accordo rimarranno pienamente in vigore ed efficaci. + +c. Al Licenziatario non è consentito esportare il Programma. + +d. Il Licenziatario autorizza International Business Machines Corporation e le sue consociate (e i loro successori e assegnatari, appaltatori e Business Partner IBM) di memorizzare e utilizzare le informazioni relative a contatti, laddove vi siano rapporti commerciali, ovunque essi operino, insieme ai prodotti e servizi IBM, per usi relativi alle attività commerciali tra IBM e il Licenziatario. + +e. Ciascuna parte consente all'altra l'opportunità ragionevole di conformarsi prima che questa reclami la mancata conformità ai suoi obblighi in base al presente Accordo. Le parti tenteranno in buona fede di risolvere tutte le dispute, le controversie o i reclami relativi al presente Accordo. + +f. Salvo quanto diversamente richiesto dalla legge applicabile, senza possibilità di rinuncia contrattuale o limitazione: 1) nessuna parte intraprenderà un'azione legale, indipendentemente dalla forma, per qualsiasi reclamo derivante da o relativo al presente Accordo per oltre due anni a far data dalla causa che ha dato vita all'azione; e 2) alla scadenza di tale limite, qualsiasi pretesa e diritto rispettivo relativo al reclamo decadono. + +g. Né il Licenziatario né IBM saranno ritenuti responsabili per eventuali inadempimenti dovuti a cause che esulano dal proprio controllo. + +h. Il presente Accordo non creerà alcun diritto o azione legale da terze parti, né IBM sarà responsabile di alcun reclamo da parte di terzi, fatto salvo quanto consentito nella suddetta Sottosezione 7.1 (Casi nei quali è prevista una responsabilità da parte IBM ) per danni fisici alla persona (incluso il decesso) o danni ai beni immobili e mobili appartenenti alle persone fisiche per i quali IBM sia responsabile per legge. + +i. Mediante la sottoscrizione del presente Accordo, nessuna delle parti farà affidamento su eventuali dichiarazioni non specificate in questo Accordo, incluse, a titolo esemplificativo ma non esaustivo, dichiarazioni relative: 1) a prestazioni o funzionamento del Programma, diverse da quanto espressamente garantito nella suddetta Sezione 5 (Garanzia ed Esclusioni); 2) alle esperienze o a raccomandazioni di altre parti; o 3) a risultati o risparmi che il Licenziatario possa raggiungere. + +j. IBM ha stipulato accordi con determinate organizzazioni (chiamate "Business Partner IBM") per promuovere, commercializzare, e fornire assistenza per determinati Programmi. I Business Partner IBM restano soggetti indipendenti e separati da IBM. IBM non è responsabile per le azioni o le dichiarazioni dei Business Partner IBM né delle obbligazioni che essi abbiano assunto nei confronti del Licenziatario. + +k. Le condizioni di licenza e di indennizzo per la proprietà intellettuale di altri accordi del Licenziatario con IBM (come l'IBM Customer Agreement) non si applicano alle licenze del Programma concesse in base al presente Accordo. + +11. Ambito geografico e Legge Applicabile + +11.1 Legge Applicabile + +Entrambe le parti concordano sull'applicazione delle leggi del paese in cui è stata acquistata la licenza del Programma al fine di disciplinare, interpretare ed applicare tutti i diritti e le obbligazioni che derivano, o in qualche modo sono correlati al presente Accordo, indipendentemente dal conflitto di principi di legge. + +La Convenzione delle Nazioni Unite sui Contratti per la Vendita Internazionale di Merci non è applicabile. + +11.2 Giurisdizione + +Tutti i diritti, i doveri e le obbligazioni sono soggetti agli organi giurisdizionali del Paese in cui è stata acquistata la licenza al Programma. + +Parte 2 - Condizioni applicabili ai singoli Paesi + +Per le licenze concesse in licenza in Italia, le seguenti clausole sostituiscono o modificano le clausole cui si è fatto riferimento nella Parte 1. Tutte le clausole della Parte 1 non modificate da questi emendamenti restano immodificate e in vigore. Questa Parte 2 è organizzata nel modo seguente: + +* Emendamenti relativi ai singoli paesi alla Parte 1, Sezione 11 (Legge Applicabile e Giurisdizione); e + +* emendamenti paese relativi a Europa, Medio Oriente, e Africa per altre clausole dell'Accordo. + +Emendamenti relativi ai singoli paesi alla Parte 1, Sezione 11 (Legge Applicabile e Giurisdizione) + +11.2 Giurisdizione + +Il seguente paragrafo si riferisce alla giurisdizione e sostituisce la Sottosezione 11.2 (Giurisdizione) in quanto si applica all'Italia: + +Tutti i diritti, i doveri e gli obblighi sono soggetti agli organi giudiziari del paese in cui è stata acquisita la licenza al Programma salvo nei paesi identificati di seguito in cui tutte le dispute derivanti da o correlate al presente Accordo, inclusi i procedimenti sommari, saranno portati dinanzi alla giurisdizione esclusiva dei seguenti tribunali competenti e ad essa soggetti: + +organi giudiziari di Milano. + +EUROPA, MEDIO ORIENTE, AFRICA (EMEA) EMENDAMENTI AI SINGOLI PAESI + +STATI MEMBRI DELL'UNIONE EUROPEA + +5. Esclusioni delle garanzie + +Quanto segue si aggiunge alla Sezione 5 (Esclusione della garanzia): + +Nell'Unione Europea ("EU"), i consumatori hanno diritti legali in base alla legislazione nazionale applicabile che regola la vendita dei beni al consumatore. Quanto descritto nella presente Sezione 5 (Esclusione della garanzia) non riguarda tali diritti. + +STATI MEMBRI DELL'UNIONE EUROPEA E I PAESI IDENTIFICATI DI SEGUITO + +La Svizzera e qualsiasi paese Europeo che ha approvato una legislazione sulla protezione o riservatezza dei dati locali simile al modello dell'Unione Europea. + +10. Disposizioni Generali + +Quanto segue sostituisce l'Articolo 10.d: + +(1) Definizioni - Ai fini di questo Articolo 10.d, si applicano le seguenti definizioni aggiuntive: + +(a) Informazioni sui Contatti Aziendali - le informazioni sui contatti relativi all'azienda divulgate dal Licenziatario ad IBM, inclusi nomi, titoli, indirizzi aziendali, numeri di telefono e indirizzi email dei dipendenti ed appaltatori del Licenziatario. Per Austria, Italia e Svizzera, le Informazioni sui Contatti Aziendali includono anche informazioni sul Licenziatario e i suoi appaltatori come persona giuridica (ad esempio, dati sul fatturato del Licenziatario e altre informazioni transazionali) + +(b) Personale di Contatto Aziendale - i dipendenti e appaltatori del Licenziatario a cui si riferiscono le Informazioni sui Contatti Aziendali. + +(c) Autorità sulla Protezione di Dati - l'autorità stabilita dalla Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche nel paese applicabile o, per i paesi non-UE, l'autorità responsabile della supervisione della protezione dei dati personali in quel paese, o (per quanto detto prima) qualsiasi successore debitamente nominato. + +(d) Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche - (i) le legislazione e normativa locale applicabile in vigore che implementa i requisiti della Direttiva UE 95/46/EC (sulla protezione degli individui relativamente all'elaborazione dei dati personali e alla libera circolazione di tali dati) e della Direttiva UE 2002/58/EC (relativa all'elaborazione dei dati personali e alla tutela della privacy nel settore delle comunicazioni elettroniche); o (ii) per i paesi non-UE, la legislazione e/o la normativa passata nel paese applicabile relativa alla protezione dei dati personali e alla regolamentazione delle comunicazioni elettroniche che coinvolgono dati personali, inclusa (per quanto detto prima) qualsiasi sostituzione o modifica legale. + +(e) IBM Group - International Business Machines Corporation di Armonk, New York, USA, le sue consociate e i loro rispettivi Business Partner e subappaltatori. + +(2) Il Licenziatario autorizza IBM: + +(a) ad elaborare e utilizzare le Informazioni sui Contatti Aziendali all'interno di IBM Group a supporto del Licenziatario inclusa la fornitura di servizi di supporto, e allo scopo di promuovere le relazioni di business tra il Licenziatario e IBM Group, incluso, ad esempio, contattare il Personale di Contatti Aziendali (via email o in altro modo) e commercializzare prodotti e servizi di IBM Group (lo "Scopo Specificato"); e + +(b) a divulgare le Informazioni sui Contatti Aziendali ad altri membri di IBM Group in base allo Scopo Specificato. + +(3) IBM accetta che tutte le Informazioni sui Contatti Aziendali saranno elaborate in conformità con la Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche e saranno utilizzate solo per lo Scopo Specificato. + +(4) Nei limiti richiesti dalla Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche, il Licenziatario dichiara (a) di aver ottenuto (o che otterrà) le autorizzazioni dal (e ha rilasciato (o rilascerà) avvisi al) Personale sui Contatti Aziendali necessarie al fine di consentire ad IBM Group di elaborare e utilizzare le Informazioni sui Contatti Aziendali per lo Scopo Specificato. + +(5) Il Licenziatario autorizza IBM a trasferire le Informazioni sui Contatti Aziendali al di fuori dell'Area Economica Europea, a condizione che il trasferimento sia effettuato in base alle clausole contrattuali approvate dalla Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche. + +ITALIA + +7. Limitazione di Responsabilità + +Quanto segue sostituisce le clausole della Sezione 7 (Limitazione di Responsabilità) nella loro interezza: + +Fatto salvo quanto stabilito da norme inderogabili di legge: + +7.1 Casi nei quali è prevista una responsabilità da parte IBM + +L'intera responsabilità di IBM per tutte le pretese complessive per qualsiasi danno e perdita derivante dall'adempimento dei propri obblighi in base a o in associazione con il presente accordo o dovuta ad altre cause correlate all'accordo è limitata solo alla compensazione di quei danni e quelle perdite provate e realmente derivanti come conseguenza diretta del mancato adempimento di tali obblighi (se è colpa di IBM) o di tale causa, per un ammontare massimo di EUR 500.000 (cinquecentomila euro). + +La suddetta limitazione non si applicherà ai danni alle persone (incluso il decesso) e ai danni tangibili al patrimonio e alla proprietà privata (beni mobili e immobili) per cui IBM è legalmente responsabile. + +7.2 Casi nei quali è esclusa una responsabilità da parte IBM + +IN NESSUN CASO IBM, O UNO QUALSIASI DEI SUOI SVILUPPATORI DI PROGRAMMI, SARÀ RESPONSABILE DEI SEGUENTI EVENTI, ANCHE SE INFORMATA DELLA POSSIBILITÀ DEL LORO VERIFICARSI: 1) PERDITA O DANNEGGIAMENTO DI DATI; 2) DANNI INCIDENTALI, ESEMPLARI O INDIRETTI, O QUALSIASI DANNO ECONOMICO CONSEGUENTE; E / O 3) LUCRO CESSANTE, MANCATI AFFARI, PERDITA COMMERCIALE, DI REDDITO, DI BENEFICI, O MANCATI RISPARMI ANCHE SE DERIVANTI COME IMMEDIATA CONSEGUENZA DALL'EVENTO CHE HA PRODOTTO IL DANNO. + +7.3 Fornitori e Sviluppatori del Programma + +La limitazione ed esclusione di responsabilità qui accettata si applica non solo alle attività eseguite da IBM, ma anche a quelle eseguite dai suoi fornitori e sviluppatori di Programmi, e rappresenta l'ammontare massimo per il quale IBM, i suoi fornitori e sviluppatori di Programmi, sono complessivamente responsabili. + +Z125-5543-05 (07/2011) + + +Accordo Internazionale di Licenza di Programmi + +Parte 1 - Condizioni Generali + +SCARICANDO, INSTALLANDO, COPIANDO, ACCEDENDO, FACENDO CLIC SUL PULSANTE "ACCETTO", O UTILIZZANDO IL PROGRAMMA, IL LICENZIATARIO ACCETTA LE CLAUSOLE DEL PRESENTE ACCORDO. SE SI ACCETTANO TALI CLAUSOLE PER CONTO DEL LICENZIATARIO, SI DICHIARA E GARANTISCE DI AVERE PIENA AUTORITA' DI VINCOLARE IL LICENZIATARIO ALLE PRESENTI CLAUSOLE. SE NON SI ACCETTANO LE PRESENTI DISPOSIZIONI, + +* NON SCARICARE, INSTALLARE, COPIARE, ACCEDERE, FARE CLIC SUL PULSANTE "ACCETTO", O UTILIZZARE IL PROGRAMMA; E + +* RESTITUIRE IMMEDIATAMENTE I SUPPORTI NON UTILIZZATI, LA DOCUMENTAZIONE, E LA PROVA DI TITOLARITA' ALLA PARTE DA CUI E' STATA OTTENUTA PER UN RIMBORSO DEL CORRISPETTIVO PAGATO. SE IL PROGRAMMA E' STATO SCARICATO, DISTRUGGERE TUTTE LE COPIE DEL PROGRAMMA. + +1. Definizioni + +"Uso Autorizzato" - il livello specificato per il quale il Licenziatario è autorizzato ad eseguire o far funzionare il Programma. Quel livello può essere misurato per numero di utenti, MSU (millions of service units), Processor Value Unit ("PVU"), o un altro livello di utilizzo specificato da IBM. + +"IBM" - International Business Machines Corporation o una delle sue consociate. + +"Informazioni relative alla licenza" ("LI") - un documento che fornisce informazioni e qualsiasi clausola aggiuntiva specifica ad un Programma. La LI del Programma è disponibile presso il sito www.ibm.com/software/sla. E' possibile trovare la LI anche nella directory del Programma, utilizzando un comando di sistema, o nel libretto incluso con il Programma. + +"Programma" - sia il programma originale che tutte le copie integrali o parziali di esso: 1) istruzioni in formato leggibile dalla macchina e dati, 2) componenti, file e moduli, 3) contenuto audiovisivo (quale immagini, testo, registrazioni o figure), e 4) materiali su licenza associati (come chiavi e documentazioni). + +"Prova di titolarità" ("PoE") - prova dell'autorizzazione all'utilizzo di un Programma da parte del Licenziatario. La PoE rappresenta anche titolo del Licenziatario per beneficiare della garanzia, dei corrispettivi per futuri aggiornamenti, se esistenti, e di eventuali offerte speciali o promozionali. In caso IBM non fornisca una PoE al Licenziatario, allora IBM può accettare come PoE la ricevuta originale dei pagamenti effettuati o di altre registrazioni di vendita effettuate dal soggetto (IBM o suo rivenditore) da cui il Licenziatario ha acquisito il Programma, a condizione che sia specificato il nome del Programma ed il livello di utilizzo acquisito. + +"Periodo di garanzia" - un anno, a partire dalla data in cui è stata concessa la licenza al Licenziatario originale. + +2. Struttura dell'Accordo + +Questo accordo è suddiviso in Parte 1 - Condizioni Generali, Parte 2 - Condizioni applicabili ai singoli Paesi (se esistenti), la LI, e la PoE e costituisce l'accordo integrale tra il Licenziatario e IBM relativamente all'uso del Programma. Sostituisce qualsiasi altra precedente comunicazione verbale o scritta intercorsa tra il Licenziatario ed IBM relativa all'uso del Programma da parte del Licenziatario. Le condizioni incluse nella Parte 2 possono sostituire o modificare quelle contenute nella Parte 1. In caso di conflitto, la LI prevarrà su entrambe le Parti. + +3. Concessione della Licenza + +Il Programma è di proprietà di IBM o di un fornitore IBM, ed è tutelato dalle leggi sul diritto di autore, viene concesso in licenza, ma non viene venduto. + +IBM concede al Licenziatario una licenza non esclusiva per 1) utilizzare il Programma fino al livello di utilizzo specificato nella PoE, 2) effettuare ed installare copie per supportare tale utilizzo e 3) effettuare una copia di backup, tutto a condizione che + +a. il Licenziatario abbia legalmente ottenuto il Programma e soddisfi le clausole di questo Accordo; + +b. la copia di backup non funzioni a meno che il Programma di cui è eseguito il backup non possa funzionare; + +c. Il Licenziatario riproduca su ciascuna copia, anche parziale, del Programma le indicazioni relative al diritto d'autore e ogni altra indicazione relativa a diritti di proprietà; + +d. il Licenziatario si assicuri che chiunque utilizzi il Programma (con accesso locale o remoto) 1) rispetti l'uso autorizzato e 2) rispetti le clausole di questo Accordo; + +e. Il Licenziatario non 1) utilizzi, copi o distribuisca il Programma fatto salvo quanto previsto nel presente Accordo; 2) assembli a ritroso, compili a ritroso, o in altro modo traduca o esegua il reverse engineering del Programma, salvo laddove espressamente consentito dalle norme inderogabili di legge, senza possibilità di deroga contrattuale,; 3) utilizzi alcuna delle componenti del Programma, dei file, dei moduli, del contenuto audio-visivo, o di materiale correlato concesso in licenza separatamente dal Programma; o 4) sublicenzi, conceda in noleggio o locazione il Programma; e + +f. se il Licenziatario ottiene questo Programma come Programma di supporto, utilizzi questo Programma solo per supportare il Programma Principale e sia soggetto a qualsiasi limitazione nella licenza per il Programma Principale, o, se il Licenziatario ottiene questo Programma come Programma Principale, utilizzi tutti i Programmi di Supporto solo per supportare questo Programma, e sia soggetto a tutte le limitazioni in questo Accordo. Ai fini di questo punto "f," per "Programma di Supporto" si intende un Programma che è parte di un altro Programma IBM ("Programma Principale") e identificato come Programma di Supporto nella LI del Programma Principale. (Per ottenere una licenza a parte ad un Programma di Supporto senza tali limitazioni, il Licenziatario dovrà contattare la parte da cui ha ottenuto il Programma di Supporto.) + +Questa licenza si applica ad ogni copia del Programma effettuata dal Licenziatario. + +3.1 Trade-up, Aggiornamenti, Correzione (Fix) e Patch + +3.1.1 Trade-up + +Se il Programma è sostituito da un Programma di trade-up, la licenza del Programma sostituito terminerà immediatamente. + +3.1.2 Aggiornamenti, Correzione (Fix) e Patch + +Quando il Licenziatario riceve un aggiornamento, correzione, o patch ad un Programma, accetta qualsiasi clausola aggiuntiva o differente applicabile a tale aggiornamento, correzione o patch specificata nella sua LI. Se non sono fornite clausole aggiuntive o differenti, allora gli aggiornamenti, correzioni o patch sono soggetti solo a questo Accordo. Se il Programma è sostituito da un aggiornamento, il Licenziatario accetta di sospendere subito l'uso del Programma sostituito. + +3.2 Licenze con durata fissa + +Se IBM concede in licenza il Programma per una durata fissa, la licenza del Licenziatario cesserà alla fine della durata fissa, a meno che il Licenziatario e IBM non accettino di rinnovarla. + +3.3 Termine e Revoca + +Questo Accordo resterà in vigore fino alla revoca. + +IBM potrà revocare la licenza del Licenziatario qualora questi non rispetti le clausole del presente Accordo. + +In caso di revoca della licenza da entrambe le parti, per qualsiasi motivo, il Licenziatario accetta di sospendere subito l'uso e distruggere tutte le copie del Programma effettuate. Qualsiasi clausola del presente Accordo che per sua natura si estende oltre la cessazione dell'Accordo, resterà in vigore fino al suo adempimento e si applicherà ai rispettivi successori e agli assegnatari delle parti. + +4. Canoni + +I canoni si basano sull'Uso Autorizzato ottenuto, specificato nella PoE. IBM non rilascia crediti o rimborsi per somme già dovute o pagate, salvo se diversamente specificato in questo Accordo. + +Se il Licenziatario desidera aumentare il proprio Uso Autorizzato, dovrà comunicarlo in anticipo ad IBM o ad un rivenditore autorizzato IBM e pagare tutti i corrispettivi applicabili. + +5. Tasse + +Qualora qualsiasi autorità imponga sul Programma una tassa, un'imposta, un dazio, o un canone, con l'esclusione di quelli basati sul reddito imponibile di IBM, allora il Licenziatario accetta di pagare l'ammontare o si dovrà fornire documentazione dell'esenzione eventualmente spettante. Il Licenziatario è responsabile di qualsiasi tassa relativa alla proprietà personale sul Programma dalla data del suo acquisto. Qualora un'autorità imponga un dazio doganale, una tassa, un'imposta o un canone per l'importazione, l'esportazione, il trasferimento, l'accesso o l'utilizzo del Programma al di fuori del paese in cui il Licenziatario originario ha ottenuto la licenza, allora il Licenziatario accetta di essere responsabile per qualsiasi somma imposta e di pagarla. + +6. Garanzia di rimborso + +Qualora il Licenziatario non sia soddisfatto del Programma per qualsiasi ragione e sia anche il Licenziatario originale, potrà ottenere un rimborso del corrispettivo pagato per il Programma, a condizione che il Licenziatario restituisca il Programma e la sua PoE alla parte da cui lo ha acquistato entro 30 giorni dalla data in cui la PoE è stata inviata al Licenziatario. Se la licenza è concessa per una durata fissa soggetta a rinnovo, allora il Licenziatario potrà ottenere un rimborso solo se il Programma e la sua PoE saranno restituiti entro 30 giorni dalla data iniziale. Se il Licenziatario ha scaricato il Programma, dovrà contattare la parte da cui lo ha ottenuto per istruzioni su come ottenere il rimborso. + +7. Trasferimento del Programma + +Il Licenziatario può trasferire il Programma e tutti i suoi obblighi e diritti di licenza a terze parti solo se tale parte accetta le clausole del presente Accordo. In caso di revoca della licenza da entrambe le parti, per qualsiasi motivo, il Licenziatario non potrà trasferire il Programma ad un'altra parte. Il Licenziatario non può trasferire una parte 1) del Programma o 2) dell'Uso Autorizzato del Programma. Con il trasferimento del Programma, il Licenziatario dovrà anche trasferire una copia cartacea del presente Accordo, incluse LI e PoE. Subito dopo il trasferimento, l'autorizzazione ad utilizzare il programma è revocata. + +8. Garanzia ed Esclusioni + +8.1 Limitazione della garanzia + +IBM garantisce che il Programma, quando utilizzato nel suo ambiente operativo, sarà conforme alle sue specifiche. Le informazioni sulle Specifiche del Programma e sull'ambiente operativo specificato sono contenute nella documentazione che accompagna il Programma (come un file read-me) o in altre informazioni pubblicate da IBM (come una lettera d'annuncio). Il licenziatario accetta che tale documentazione e altro contenuto del Programma possano essere forniti solo in lingua Inglese, salvo laddove diversamente richiesto dalla normativa locale escludendo la possibilità di rinuncia o limitazione contrattuale. + +La garanzia si applica solo alla parte non modificata del Programma. IBM non garantisce il funzionamento ininterrotto o privo di errori del Programma né che IBM correggerà tutti i difetti del Programma. Il licenziatario è responsabile dei risultati derivanti dall'uso del Programma. + +Durante il Periodo di Garanzia, IBM offre al Licenziatario l'accesso ai database IBM che contengono informazioni sui difetti conosciuti del Programma, correzioni dei difetti, limitazioni d'uso e procedure di esclusione (bypass) senza alcun onere aggiuntivo. Per ulteriori informazioni consultare il Manuale IBM di Supporto Software reperibile presso il sito web www.ibm.com/software/support. + +Se un Programma non funziona come garantito durante il Periodo di garanzia ed il problema non può essere risolto tramite le informazioni disponibili nei database IBM, il Licenziatario potrà restituire il Programma e la sua PoE al soggetto (IBM o suo rivenditore) da cui è stato acquisito e ricevere il rimborso del corrispettivo pagato. Dopo aver restituito il Programma, l'autorizzazione ad utilizzare il Programma è revocata. Se il Licenziatario ha scaricato il Programma, dovrà contattare la parte da cui lo ha ottenuto per istruzioni su come ottenere il rimborso. + +8.2 Esclusioni + +TALI GARANZIE COSTITUISCONO LE GARANZIE ESCLUSIVE DEL LICENZIATARIO E SOSTITUISCONO TUTTE LE ALTRE GARANZIE O CONDIZIONI, ESPRESSE O IMPLICITE, IVI INCLUSE, MA NON LIMITATE A, GARANZIE O CONDIZIONI IMPLICITE DI COMMERCIABILITA', DI QUALITA', IDONEITA' PER UNO SCOPO PARTICOLARE, TITOLARITA', E NON VIOLAZIONE. POICHÉ LA LEGISLAZIONE DI ALCUNI PAESI NON CONSENTE L'ESCLUSIONE DELLE GARANZIE ESPRESSE O IMPLICITE, LA SUDDETTA ESCLUSIONE POTREBBE NON ESSERE APPLICABILE. IN TAL CASO, TALI GARANZIE SARANNO LIMITATE ALLA DURATA DEL PERIODO DI GARANZIA. NESSUNA GARANZIA E' APPLICABILE DOPO TALE PERIODO. POICHÉ LA LEGISLAZIONE DI ALCUNI PAESI NON CONSENTE LIMITAZIONI BASATE SULLA DURATA DI UNA GARANZIA IMPLICITA, LA SUDDETTA LIMITAZIONE POTREBBE NON ESSERE APPLICABILE. + +TALI GARANZIE DANNO DIRITTI LEGALI SPECIFICI AL LICENZIATARIO. IL LICENZIATARIO PUO' ANCHE OTTENERE ULTERIORI DIRITTI DERIVANTI DALLA LEGISLAZIONE SPECIFICA DI CIASCUN PAESE. + +LE GARANZIE IN QUESTA SEZIONE 8 (GARANZIE ED ESCLUSIONI) SONO FORNITE SOLO DA IBM. TUTTAVIA, ANCHE LE RINUNCE IN QUESTA SOTTO-SEZIONE 8.2 (ESCLUSIONI), SONO APPLICABILI AI FORNITORI DI IBM DI CODICE DI TERZE PARTI. QUESTI FORNITORI FORNISCONO TALE CODICE SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO. QUESTO PARAGRAFO NON ANNULLA GLI OBBLIGHI DI GARANZIA DI IBM IN BASE AL PRESENTE ACCORDO. + +9. Dati e Database del Licenziatario + +Per assistere il Licenziatario nell'isolare la causa di un problema con il Programma, IBM può richiedere che il Licenziatario 1) consenta ad IBM di accedere in remoto al sistema del Licenziatario o 2) invii le informazioni del Licenziatario o i dati del sistema a IBM. Tuttavia, IBM non è obbligata a fornire tale assistenza a meno che IBM ed il Licenziatario non abbiano stipulato un accordo scritto a parte in base al quale IBM accetta di fornire al Licenziatario quel tipo di supporto che va oltre gli obblighi di garanzia di IBM in questo Accordo. In ogni caso, IBM utilizzerà le informazioni sugli errori e i problemi per migliorare i suoi prodotti e servizi ed assistere il Licenziatario con la fornitura di offerte di supporto correlate. A tali scopi, IBM può utilizzare enti o subappaltatori di IBM (anche in uno o più paesi diversi da quello in cui ha sede il Licenziatario), ed il Licenziatario autorizza IBM a procedere in tal senso. + +Il Licenziatario resta responsabile per 1) i dati ed il contenuto di qualsiasi database che il Licenziatario rende disponibile ad IBM, 2) la scelta e l'implementazione di procedure e controlli relativi all'accesso, alla sicurezza, alla crittografia, all'uso e alla trasmissione di dati (inclusi dati personali), e 3) il backup e il recupero di database e dati memorizzati. Il Licenziatario non invierà o fornirà ad IBM accesso ad informazioni personali, sotto forma di dati o in altri formati, e sarà responsabile dei costi ragionevoli e di qualsiasi altra somma che IBM si trovi ad affrontare relativa alle informazioni erroneamente fornite ad IBM o alla perdita o divulgazione di tali informazioni da parte di IBM, incluse quelle derivanti da pretese di risarcimento di terze parti. + +10. Limitazione di Responsabilità + +Le limitazioni ed esclusioni in questa Sezione 10 (Limitazione di Responsabilità) si applicano nei limiti in cui non sono vietate dalla legislazione applicabile senza possibilità di deroga contrattuale. + +10.1 Articoli per cui IBM può essere responsabile + +Possono verificarsi circostanze in cui, per fatto imputabile ad IBM o per responsabilità di terzi, il Licenziatario abbia il diritto ad un risarcimento da parte di IBM. In questi casi, indipendentemente da ciò che dà titolo all'utilizzatore a richiedere il risarcimento danni ad IBM, (incluso colpa grave, negligenza, erronee dichiarazioni o altri fatti di natura contrattuale o extracontrattuale), la responsabilità di IBM è limitata 1) ai danni fisici alla persona (incluso il decesso), danni alla proprietà immobiliare e personale e 2) nel caso di ogni altro danno diretto fino al corrispettivo pagato per il Programma oggetto del reclamo. + +Questo limite si applica anche a qualsiasi sviluppatore e fornitore dei Programmi IBM. Ciò rappresenta il massimo per cui IBM e i suoi sviluppatori e fornitori del Programma sono collettivamente responsabili. + +10.2 Articoli per cui IBM non è responsabile + +IN NESSUN CASO IBM, GLI SVILUPPATORI DEL PROGRAMMA O I FORNITORI SARANNO RESPONSABILI PER QUANTO SEGUE, ANCHE SE INFORMATI DELLA POSSIBILITÀ DEL LORO VERIFICARSI: + +a. PERDITA O DANNEGGIAMENTO DI DATI; + +b. DANNI SPECIALI, INCIDENTALI, ESEMPLARI, O INDIRETTI, O QUALSIASI ALTRO DANNO ECONOMICO CONSEGUENTE; O + +c. MANCATI GUADAGNI, PERDITA DI OPPORTUNITÀ COMMERCIALE, DI REDDITO, DI BENEFICI, O MANCATI RISPARMI. + +11. Verifica della conformità + +Ai fini di questa Sezione 11 (Verifica della Conformità), per "Clausole del Programma IPLA" si intende 1) questo Accordo e gli emendamenti applicabili e i documenti della transazione forniti da IBM, e 2) le politiche software IBM che si possono trovare sul sito web IBM Software Policy (www.ibm.com/softwarepolicies), incluse ad esempio quelle politiche relative al backup, alla determinazione dei prezzi per sub-capacity, e alla migrazione. + +I diritti e gli obblighi stabiliti in questa Sezione 11 resteranno in vigore per il periodo in cui il Programma è concesso in licenza al Licenziatario e per i due anni successivi. + +11.1 Processo di Verifica + +Il licenziatario accetta di creare, conservare e fornire ad IBM e ai suoi revisori accurate registrazioni scritte, esito delle analisi svolte mediante strumenti di sistema e altre informazioni relative al sistema sufficienti a fornire una verifica che dimostri che l'uso del Licenziatario di tutti i Programmi è conforme alle Clausole del Programma IPLA, incluse, ad esempio, tutte le clausole delle licenze applicabili ad IBM e le clausole di qualifica dell'assegnazione dei prezzi. Il Licenziatario è responsabile 1) di garantire che non supererà il suo Uso Autorizzato, e 2) di restare conforme alle Clausole del Programma IPLA. + +Con ragionevole preavviso, IBM può verificare la conformità con le Clausole del Programma IPLA del Licenziatario presso tutte le sedi e per tutti gli ambienti in cui il Licenziatario utilizza (per qualsiasi scopo) i Programmi in base alle Clausole del Programma IPLA. Tale verifica sarà condotta in modo da arrecare il minor disturbo possibile al Licenziatario, e potrà essere condotta presso la sede del Licenziatario, durante il normale orario lavorativo. IBM può utilizzare un revisore esterno in tale verifica, a condizione che IBM abbia sottoscritto con tale revisore un accordo di riservatezza ancora in vigore. + +11.2 Risoluzione + +Qualora IBM dovesse riscontrare che il Licenziatario ha utilizzato il Programma oltre il suo Uso Autorizzato o in modo non conforme alle Clausole del Programma IPLA, lo comunicherà al Licenziatario per iscritto. Il Licenziatario accetta di pagare subito direttamente ad IBM il corrispettivo specificato da IBM in una fattura per 1) qualsiasi uso superiore, 2) il supporto di tale uso per un periodo minore alla durata di tale uso in eccesso o per due anni, e 3) qualsiasi corrispettivo aggiuntivo e altra responsabilità determinata a seguito di tale verifica. + +12. Avvisi di Terze Parti + +Il Programma può includere codice di terze parti che IBM, non la terza parte, concede in licenza al Licenziatario in base al presente Accordo. Gli avvisi per il codice di terze parti, se esistenti, ("Avvisi di Terze Parti") sono inclusi solo per informazioni del Licenziatario. E' possibile trovare tali avvisi nei file NOTICES del Programma. Le informazioni su come ottenere il codice sorgente per determinato codice di terze parti si possono trovare negli Avvisi delle Terze Parti. Se negli Avvisi delle Terze Parti IBM dovesse identificare codice di terze parti come "Codice di Terze Parti Modificabile", IBM autorizza il Licenziatario a 1) modificare il Codice di Terze Parti Modificabile e 2) eseguire il reverse engineer dei moduli del Programma che si interfacciano direttamente con il Codice di Terze Parti Modificabile a condizione che sia solo allo scopo di eseguire il debug delle modifiche del Licenziatario per tale codice di terze parti. Gli obblighi di servizio e supporto di IBM, se esistenti, si applicano solo al Programma non modificato. + +13. Generale + +a. Le disposizioni del presente Accordo non pregiudicano in alcun modo le garanzie legali del consumatore che non possono essere escluse o limitate per contratto. + +b. Per i Programmi che IBM fornisce al Licenziatario in formato tangibile, IBM adempirà ai propri obblighi di distribuzione e consegna alla consegna di tali Programmi al corriere designato da IBM, salvo quanto diversamente concordato per iscritto tra il Licenziatario ed IBM. + +c. Qualora una qualsiasi clausola del presente Accordo dovesse essere dichiarata invalida o inefficace, le restanti clausole del presente Accordo rimarranno pienamente in vigore ed efficaci. + +d. Il Licenziatario accetta di rispettare tutte le disposizioni di legge e le normative applicabili in materia di importazione ed esportazione, incluse le norme sull'embargo degli Stati Uniti e le sanzioni e divieti sull'esportazione per determinati utilizzi o determinati utenti. + +e. Il Licenziatario autorizza International Business Machines Corporation e le sue consociate (e i loro successori e assegnatari, appaltatori e Business Partner IBM) di memorizzare e utilizzare le informazioni relative a contatti, laddove vi siano rapporti commerciali, ovunque essi operino, insieme ai prodotti e servizi IBM, per usi relativi alle attività commerciali tra IBM e il Licenziatario. + +f. Ciascuna parte consente all'altra l'opportunità ragionevole di conformarsi prima che questa reclami la mancata conformità ai suoi obblighi in base al presente Accordo. Le parti tenteranno in buona fede di risolvere tutte le dispute, i disaccordi o i reclami relativi al presente Accordo. + +g. Salvo quanto diversamente richiesto dalla legislazione applicabile, senza possibilità di rinuncia contrattuale o limitazione: 1) nessuna parte intraprenderà un'azione legale, indipendentemente dalla forma, per qualsiasi reclamo derivante da o relativo al presente Accordo per oltre due anni a far data dalla causa che ha dato vita all'azione; e 2) alla scadenza di tale limite, qualsiasi pretesa e diritto rispettivo relativo al reclamo decadono. + +h. Né il Licenziatario né IBM saranno ritenuti responsabili per eventuali inadempimenti dovuti a cause che esulano dal proprio controllo. + +i. Il presente Accordo non creerà alcun diritto o azione legale da terze parti, né IBM sarà responsabile di alcun reclamo da parte di terzi, fatto salvo laddove consentito nella suddetta Sottosezione 10.1 (Articoli per cui IBM può essere responsabile) per danni fisici (incluso il decesso) o danni tangibili a proprietà personale per cui IBM è legalmente responsabile. + +j. Nel concludere il presente Accordo, nessuna delle parti conterà su dichiarazioni non specificate in questo Accordo, incluse, ad esempio,dichiarazioni relative: 1) a prestazioni o funzionamento del Programma, diverse da quanto espressamente garantito nella suddetta Sezione 8 (Garanzia ed Esclusioni) ; 2) alle esperienze o ai consigli di altre parti; o 3) a risultati o risparmi che il Licenziatario possa raggiungere. + +k. IBM ha stipulato accordi con determinate organizzazioni (chiamate "Business Partner IBM") per promuovere, commercializzare, e supportare determinati Programmi. I Business Partner IBM restano indipendenti e separati da IBM. IBM non è responsabile per le azioni o le dichiarazioni dei Business Partner IBM o dei loro obblighi nei confronti del Licenziatario. + +l. Le clausole di licenza e di indennizzo di proprietà intellettuale di altri accordi del Licenziatario con IBM (come l'IBM Customer Agreement) non si applicano alle licenze del Programma concesse in base al presente Accordo. + +14. Ambito geografico e Legge Regolatrice + +14.1 Legge Regolatrice + +Entrambe le parti concordano sull'applicazione delle leggi del paese in cui è stata acquistata la licenza del Programma al fine di disciplinare, interpretare ed applicare tutti i diritti e le obbligazioni che derivano, o in qualche modo sono correlati al presente Accordo, indipendentemente dal conflitto di principi di legge. + +La Convenzione delle Nazioni Unite sui Contratti per la Vendita Internazionale di Merci non è applicabile. + +14.2 Giurisdizione + +Tutti i diritti, i doveri e le obbligazioni sono soggetti agli organi giudiziari del paese in cui è stata acquistata la licenza al Programma. + +Parte 2 - Condizioni applicabili ai singoli Paesi + +Per le licenze concesse in licenza nei paesi specificati di seguito, le seguenti clausole sostituiscono o modificano le clausole cui si è fatto riferimento nella Parte 1. Tutte le clausole della Parte 1 non modificate da questi emendamenti restano immodificate e in vigore. Questa Parte 2 è organizzata nel modo seguente: + +* Più emendamenti alla Parte 1 relativi ai singoli paesi, Sezione 14 (Legge Regolatrice e Giurisdizione); e + +* Europa, Medio Oriente, e Africa emendamenti ai singoli paesi per altre clausole dell'Accordo. + +Più emendamenti alla Parte 1 relativi ai singoli paesi, Sezione 14 (Legge Regolatrice e Giurisdizione) + +14.2 Giurisdizione + +Il seguente paragrafo si riferisce alla giurisdizione e sostituisce la Sottosezione 14.2 (Giurisdizione) in quanto si applica a quei paesi identificati di seguito: + +Tutti i diritti, i doveri e gli obblighi sono soggetti agli organi giudiziari del paese in cui è stata acquisita la licenza al Programma salvo nei paesi identificati di seguito in cui tutte le dispute derivanti da o correlate al presente Accordo, inclusi i procedimenti sommari, saranno portati dinanzi alla giurisdizione esclusiva dei seguenti tribunali competenti e ad essa soggetti: + +EUROPA, MEDIO ORIENTE E AFRICA + +in Italia: i tribunali di Milano; + +EUROPA, MEDIO ORIENTE, AFRICA (EMEA) EMENDAMENTI AI SINGOLI PAESI + +STATI MEMBRI DELL'UNIONE EUROPEA + +8. Garanzia ed Esclusioni + +Quanto segue si aggiunge alla Sezione 8 (Garanzia ed Esclusione): + +Nell'Unione Europea ("UE"), i consumatori hanno diritti legali in base alla legislazione nazionale applicabile che regola la vendita dei beni al consumatore. Quanto descritto nella presente Sezione 8 Garanzia ed Esclusioni non riguarda tali diritti. L'ambito territoriale della Garanzia Limitata è su scala mondiale. + +13. Condizioni Generali + +Quanto segue sostituisce l'Articolo 13.e: + +(1) Definizioni - Ai fini di questo Articolo 13.e, si applicano le seguenti definizioni aggiuntive: + +(a) Informazioni sui Contatti Aziendali - le informazioni sui contatti relativi all'azienda divulgate dal Licenziatario ad IBM, inclusi nomi, titoli, indirizzi aziendali, numeri di telefono e indirizzi email dei dipendenti ed appaltatori del Licenziatario. Per Austria, Italia e Svizzera, le Informazioni sui Contatti Aziendali includono anche informazioni sul Licenziatario e i suoi appaltatori come persona giuridica (ad esempio, dati sul fatturato del Licenziatario e altre informazioni transazionali) + +(b) Personale di Contatto Aziendale - i dipendenti e appaltatori del Licenziatario a cui si riferiscono le Informazioni sui Contatti Aziendali. + +(c) Autorità sulla Protezione di Dati - l'autorità stabilita dalla Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche nel paese applicabile o, per i paesi non-UE, l'autorità responsabile della supervisione della protezione dei dati personali in quel paese, o (per quanto detto prima) qualsiasi successore debitamente nominato. + +(d) Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche - (i) le legislazione e normativa locale applicabile in vigore che implementa i requisiti della Direttiva UE 95/46/EC (sulla protezione degli individui relativamente all'elaborazione dei dati personali e alla libera circolazione di tali dati) e della Direttiva UE 2002/58/EC (relativa all'elaborazione dei dati personali e alla tutela della privacy nel settore delle comunicazioni elettroniche); o (ii) per i paesi non-UE, la legislazione e/o la normativa passata nel paese applicabile relativa alla protezione dei dati personali e alla regolamentazione delle comunicazioni elettroniche che coinvolgono dati personali, inclusa (per quanto detto prima) qualsiasi sostituzione o modifica legale. + +(e) IBM Group - International Business Machines Corporation di Armonk, New York, USA, le sue consociate e i loro rispettivi Business Partner e subappaltatori. + +(2) Il Licenziatario autorizza IBM: + +(a) ad elaborare e utilizzare le Informazioni sui Contatti Aziendali all'interno di IBM Group a supporto del Licenziatario inclusa la fornitura di servizi di supporto, e allo scopo di promuovere le relazioni di business tra il Licenziatario e IBM Group, incluso, ad esempio, contattare il Personale di Contatti Aziendali (via email o in altro modo) e commercializzare prodotti e servizi di IBM Group (lo "Scopo Specificato"); e + +(b) a divulgare le Informazioni sui Contatti Aziendali ad altri membri di IBM Group in base allo Scopo Specificato. + +(3) IBM accetta che tutte le Informazioni sui Contatti Aziendali saranno elaborate in conformità con la Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche e saranno utilizzate solo per lo Scopo Specificato. + +(4) Nei limiti richiesti dalla Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche, il Licenziatario dichiara (a) di aver ottenuto (o che otterrà) le autorizzazioni dal (e ha rilasciato (o rilascerà) avvisi al) Personale sui Contatti Aziendali necessarie al fine di consentire ad IBM Group di elaborare e utilizzare le Informazioni sui Contatti Aziendali per lo Scopo Specificato. + +(5) Il Licenziatario autorizza IBM a trasferire le Informazioni sui Contatti Aziendali al di fuori dell'Area Economica Europea, a condizione che il trasferimento sia effettuato in base alle clausole contrattuali approvate dalla Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche. + +ITALIA + +10. Limitazione di Responsabilità + +Quanto segue sostituisce le clausole della Sezione 10 (Limitazione di Responsabilità) nella loro interezza. + +Fatto salvo quanto stabilito da norme inderogabili di legge: + +10.1 Articoli per cui IBM può essere responsabile + +La responsabilità complessiva di IBM per qualsiasi pretesa di risarcimento per qualsiasi danno e perdita derivante dall'adempimento dei propri obblighi in base a o in associazione con il presente accordo o dovuta ad altre cause correlate all'accordo è limitata solo alla compensazione di quei danni e quelle perdite provate e realmente derivanti come conseguenza diretta del mancato adempimento di tali obblighi(se è colpa di IBM) o di tale causa, per un ammontare massimo pari al corrispettivo pagato dal Licenziatario per il Programma che ha causato i danni (se il Programma è soggetto a canoni per la durata fissa, fino al corrispettivo pari a dodici mesi). + +La suddetta limitazione non si applicherà ai danni alle persone (incluso il decesso) e ai danni tangibili al patrimonio e alla proprietà privata (beni mobili e immobili) per cui IBM è legalmente responsabile. + +10.2 Articoli per cui IBM non è responsabile + +IN NESSUN CASO IBM, O UNO QUALSIASI DEI SUOI SVILUPPATORI DI PROGRAMMI, SARÀ RESPONSABILE DEI SEGUENTI EVENTI, ANCHE SE INFORMATA DELLA POSSIBILITÀ DEL LORO VERIFICARSI: 1) PERDITA O DANNEGGIAMENTO DI DATI; 2) DANNI INCIDENTALI, ESEMPLARI O INDIRETTI, O QUALSIASI DANNO ECONOMICO CONSEGUENTE; E / O 3) LUCRO CESSANTE, MANCATI AFFARI, PERDITA COMMERCIALE, DI REDDITO, DI BENEFICI, O MANCATI RISPARMI ANCHE SE DERIVANTI COME IMMEDIATA CONSEGUENZA DALL'EVENTO CHE HA PRODOTTO IL DANNO. + +10.3 Fornitori e Sviluppatori del Programma + +La limitazione ed esclusione di responsabilità qui accettata si applica non solo alle attività eseguite da IBM, ma anche a quelle eseguite dai suoi fornitori e sviluppatori di Programmi, e rappresenta l'ammontare massimo per il quale IBM, i suoi fornitori e sviluppatori di Programmi, sono complessivamente responsabili. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_ja b/charts/mq-advancedserver/LICENSE_locale/LICENSE_ja new file mode 100644 index 0000000..1d41af4 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_ja @@ -0,0 +1,1073 @@ +ÆÃµ­»ö¹à + +Ëܽñ¤Ë¤Ï¡¢Ê£¿ô¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î°Ê²¼¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤¾¤ì¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Ë¤Ï¡¢Å¬ÍÑÂÐ¾Ý¤Î¡Ö¥×¥í¥°¥é¥à¡×¤¬ÆÃÄꤵ¤ì¤Æ¤¤¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤¬»ÈÍѸ¢¤ò¼èÆÀ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î¤ß¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + + +============================================== + + +½ÅÍפǤ¹: Ãí°Õ¤·¤Æ¤ªÆÉ¤ß¤¯¤À¤µ¤¤ + +2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌ󤬡¢²¼µ­¤ËÄ󼨤µ¤ì¤Þ¤¹¡£ + +1. IBM ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï +2. IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï + +¥é¥¤¥»¥ó¥·¡¼¤¬À¸»ºÅª»ÈÍÑ (ɾ²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó°Ê³°) ¤òÌÜŪ¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤Î¤Þ¤Þ IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬É¾²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó (°Ê²¼¡Öɾ²Á¡×¤ÈÁí¾Î¤·¤Þ¤¹¡£) ¤òÌÜŪ¤È¤·¤Æ¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï (i) IBM¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (°Ê²¼¡Öɾ²Á¥é¥¤¥»¥ó¥¹¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó (ii) IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ë²¿¤éÊѹ¹¤ò²Ã¤¨¤ë¤³¤È¤Ê¤¯Æ±°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +ɾ²Á¥é¥¤¥»¥ó¥¹¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¡Öɾ²Á¡×¤Î´ü´ÖÃæÅ¬ÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬¡Öɾ²Á¡×¤Î¸å¡¢Ä´Ã£·ÀÌó¡ÊÎ㤨¤Ð¡¢IBM International Passport Advantage ¤Þ¤¿¤Ï IBM Passport Advantage Express »ÈÍѾò·ï¤Ê¤É¡Ë¤ò·ë¤Ö¤³¤È¤Ë¤è¤ê¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¤½¤Î¤Þ¤Þ»ÈÍѤ¹¤ë¤³¤È¤òÁªÂò¤µ¤ì¤ë¤È¡Ê¤Þ¤¿¤Ï¡Öɾ²Á¡×¸å¤Ë»ÈÍѤ¹¤ë¤¿¤á¡Ö¥×¥í¥°¥é¥à¡×¤òÄɲüèÆÀ¤µ¤ì¤ë¤È)¡¢IPLA ¤¬¼«Æ°Åª¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +ILAE ¤ª¤è¤Ó IPLA ¤ÏƱ»þ¤Ë¸úÎϤò»ý¤Ä¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¤¤º¤ì¤â¾Êý¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¤·¡¢¤½¤ì¤¾¤ì¸ß¤¤¤ËÆÈΩ¤·¤Æ¤¤¤Þ¤¹¡£ + +¤³¤Î 2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌó¤ÎÁ´Ê¸¤Ï¡¢°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (Z125-5543-05) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾ (¥×¥í¥°¥é¥àÈÖ¹æ): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +°Ê²¼¤Îɸ½à¾ò·ï¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +ɾ²Á´ü´Ö + +ɾ²Á´ü´Ö¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ëÆü¤Ë³«»Ï¤·¡¢³«»ÏÆü¤è¤ê 90 Æü¸å¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +½¾¥×¥í¥°¥é¥à + +ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢Ê£¿ô¤ÎÀ½ÉʤΥѥ屡¼¥¸¤È¤·¤Æ»ÈÍѵöÂú¤µ¤ì¡¢°Ê²¼¤ÇÆÃÄꤵ¤ì¤ë½¾¥×¥í¥°¥é¥à¤ò´Þ¤ß¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ÎÈÏ°ÏÆâ¤Ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¼ç¥×¥í¥°¥é¥à¤Î»ÈÍѤò¥µ¥Ý¡¼¥È¤¹¤ëÌÜŪ¤Ç¤Î¤ß¡¢½¾¥×¥í¥°¥é¥à¤òƳÆþ¤·»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Ç¡¢ÊÌÅÓ¡¢¤è¤ê¹­ÈϤʸ¢Íø¤¬Í¿¤¨¤é¤ì¤ë¾ì¹ç¤ò½ü¤­¤Þ¤¹¡£ ¡Ö¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¼ç¥×¥í¥°¥é¥à¤Î»ÈÍѤò¥µ¥Ý¡¼¥È¤¹¤ëÌÜŪ¡×¤È¤¤¤¦Ê¸¸À¤Ï¡¢¼ç¥×¥í¥°¥é¥à¤â¤·¤¯¤Ï¾¤Î½¾¥×¥í¥°¥é¥à¤ÎµöÂú¤Ë´ð¤Å¤¯»ÈÍѤˤª¤¤¤ÆÉ¬ÍפȤʤ롢¤Þ¤¿¤ÏľÀÜ´Ø·¸¤¹¤ë»ÈÍѤΤߤò°ÕÌ£¤·¤Þ¤¹¡£ ½¾¥×¥í¥°¥é¥à¤Ï¡¢Â¾¤Î¤¤¤«¤Ê¤ëÌÜŪ¤Ë¤â»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢½¾¥×¥í¥°¥é¥à¤ò¼ç¥×¥í¥°¥é¥à¤«¤éʬΥ¤·¤Æ°Üž¤Þ¤¿¤ÏºÆÈΤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ½¾¥×¥í¥°¥é¥à¤Ë¤Ï¡¢»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤é¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î½¾¥×¥í¥°¥é¥à¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£óòó÷¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Î¾ò·ï¤¬¡¢½¾¥×¥í¥°¥é¥à¤Î»ÈÍѾò·ï¤è¤êÍ¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѸ¢¤¬½ªÎ»¤·¤¿¾ì¹ç¡¢½¾¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤·¡¢ÇË´þ¡¢¤Þ¤¿¤ÏĴ㸵¤ØÊֵѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ½¾¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ï¡¢Ä´Ã£¸µ¤ØÏ¢Íí¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¾åµ­À©¸Â¤¬¤Ê¤¤½¾¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤Ë¤Ï¡¢IBM ±Ä¶ÈôÅö°÷¤Þ¤¿¤ÏĴ㸵¤ØÏ¢Íí¤·¡¢Å¬ÀڤʻÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤è¤ê»ÈÍѵöÂú¤µ¤ì¤ë½¾¥×¥í¥°¥é¥à¤Ç¤¹¡£ +IBM WebSphere Application Server Liberty V17.0 + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (Z125-3301-14) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾ (¥×¥í¥°¥é¥àÈÖ¹æ): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +°Ê²¼¤Îɸ½à¾ò·ï¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +»ÈÍÑÀ©¸ÂÉÕ¤­¸¢Íø + +IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¡¢¤ª¤è¤ÓËܡ֥饤¥»¥ó¥¹¾ðÊó¡×¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢIBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ëÀ©¸ÂÉÕ¤­¸¢Íø¤òÉÕÍ¿¤µ¤ì¤Þ¤¹¡£ ¤³¤Î¸¢Íø¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¥ê¥½¡¼¥¹¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖRVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÆÃÄê¤Î»ÈÍÑ¥ì¥Ù¥ë¤Ê¤É¡¢¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢ¥é¥¤¥»¥ó¥·¡¼¤¬»Ùʧ¤¦ÎÁ¶â¤Ë¤è¤êµö²Ä¤µ¤ì¤¿»ÈÍÑ¥ì¥Ù¥ë¤Ë¸ÂÄꤵ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѤϡ¢ÆÃÄê¤Îµ¡³£¡¢½¾¥×¥í¥°¥é¥à¤È¤·¤Æ¤Î¤ß¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÀ©Ìó»ö¹à¤ËÀ©¸Â¤µ¤ì¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¤¹¤Ù¤Æ¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î·ÐºÑŪ²ÁÃͤò»Ùʧ¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ÄɲÃÎÁ¶â¤ò»Ùʧ¤ï¤Ê¤¤¸Â¤ê¡¢Â¾¤Î¤¤¤«¤Ê¤ë»ÈÍѤâµö²Ä¤µ¤ì¤Þ¤»¤ó¡£ ¤µ¤é¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤È¤­¤ËŬÍѤµ¤ì¤ë»ÈÍѾò·ï¤ÇÌÀ¼¨¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Âè»°¼Ô¤ËÂФ·¾¦¶ÈÍÑ IT ¥µ¡¼¥Ó¥¹¤òÄ󶡤·¡¢¾¦¶ÈÍÑ¥Û¥¹¥Æ¥£¥ó¥°¡¢¤Þ¤¿¤Ï¥¿¥¤¥à¡¦¥·¥§¥¢¥ê¥ó¥°¤ÎÄó¶¡¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥µ¥Ö¥é¥¤¥»¥ó¥¹¡¢Ä¼ڡ¢¤¢¤ë¤¤¤Ï¥ê¡¼¥¹¤¹¤ë¤¿¤á¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ Äɲäθ¢Íø¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ëÄɲÃÎÁ¶â¤Î»Ùʧ¤¤¡¢¤â¤·¤¯¤ÏÊ̤ޤ¿¤ÏÊ䭤ξò·ï¤Ë´ð¤Å¤­ÍøÍѲÄǽ¤È¤Ê¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¤«¤«¤ëÄɲäθ¢Íø¤òÍøÍѤǤ­¤ë¤«·èÄꤹ¤ë¸¢¸Â¤òÍ­¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +»ÅÍÍ + +¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÅÍͤϡ¢¡Ö¥×¥í¥°¥é¥à¡×¤Îȯɽ¥ì¥¿¡¼¤Ë¶¦Ä̤Ρֵ»½Ñ¾ðÊó¡×¤Î¹à¤Ç³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +½¾¥×¥í¥°¥é¥à + +ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢Ê£¿ô¤ÎÀ½ÉʤΥѥ屡¼¥¸¤È¤·¤Æ»ÈÍѵöÂú¤µ¤ì¡¢°Ê²¼¤ÇÆÃÄꤵ¤ì¤ë½¾¥×¥í¥°¥é¥à¤ò´Þ¤ß¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ÎÈÏ°ÏÆâ¤Ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¼ç¥×¥í¥°¥é¥à¤Î»ÈÍѤò¥µ¥Ý¡¼¥È¤¹¤ëÌÜŪ¤Ç¤Î¤ß¡¢½¾¥×¥í¥°¥é¥à¤òƳÆþ¤·»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Ç¡¢ÊÌÅÓ¡¢¤è¤ê¹­ÈϤʸ¢Íø¤¬Í¿¤¨¤é¤ì¤ë¾ì¹ç¤ò½ü¤­¤Þ¤¹¡£ ¡Ö¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¼ç¥×¥í¥°¥é¥à¤Î»ÈÍѤò¥µ¥Ý¡¼¥È¤¹¤ëÌÜŪ¡×¤È¤¤¤¦Ê¸¸À¤Ï¡¢¼ç¥×¥í¥°¥é¥à¤â¤·¤¯¤Ï¾¤Î½¾¥×¥í¥°¥é¥à¤ÎµöÂú¤Ë´ð¤Å¤¯»ÈÍѤˤª¤¤¤ÆÉ¬ÍפȤʤ롢¤Þ¤¿¤ÏľÀÜ´Ø·¸¤¹¤ë»ÈÍѤΤߤò°ÕÌ£¤·¤Þ¤¹¡£ ½¾¥×¥í¥°¥é¥à¤Ï¡¢Â¾¤Î¤¤¤«¤Ê¤ëÌÜŪ¤Ë¤â»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢½¾¥×¥í¥°¥é¥à¤ò¼ç¥×¥í¥°¥é¥à¤«¤éʬΥ¤·¤Æ°Üž¤Þ¤¿¤ÏºÆÈΤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ½¾¥×¥í¥°¥é¥à¤Ë¤Ï¡¢»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤é¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î½¾¥×¥í¥°¥é¥à¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£óòó÷¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Î¾ò·ï¤¬¡¢½¾¥×¥í¥°¥é¥à¤Î»ÈÍѾò·ï¤è¤êÍ¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѸ¢¤¬½ªÎ»¤·¤¿¾ì¹ç¡¢½¾¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤·¡¢ÇË´þ¡¢¤Þ¤¿¤ÏĴ㸵¤ØÊֵѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ½¾¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ï¡¢Ä´Ã£¸µ¤ØÏ¢Íí¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¾åµ­À©¸Â¤¬¤Ê¤¤½¾¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤Ë¤Ï¡¢IBM ±Ä¶ÈôÅö°÷¤Þ¤¿¤ÏĴ㸵¤ØÏ¢Íí¤·¡¢Å¬ÀڤʻÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤è¤ê»ÈÍѵöÂú¤µ¤ì¤ë½¾¥×¥í¥°¥é¥à¤Ç¤¹¡£ +IBM WebSphere Application Server Liberty V17.0 + +ɬÍפʻÈÍѸ¢¿ô¤Î»»Äê¤Ë¹Í褵¤ì¤Ê¤¤¥³¥ó¥Ý¡¼¥Í¥ó¥È + +¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Ë¡¢°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤϹÍ褵¤ì¤Þ¤»¤ó¡£¤¹¤Ê¤ï¤Á¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢»ÈÍѵöÂú¾ò·ï¤Ë´ð¤Å¤¤¤Æ°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òƳÆþ¤ª¤è¤Ó»ÈÍѤǤ­¤Þ¤¹¤¬¡¢¤½¤ì¤é¤¬¡Ö¥×¥í¥°¥é¥à¡×¤ËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Î¤¿¤á¤Ë¹Í褵¤ì¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +ºÆÇÛÉÛ²Äǽʪ¡¡ + +ºÆÇÛÉÛ²Äǽ¤Ê¥³¥ó¥Ý¡¼¥Í¥ó¥È¤¬¡Ö¥×¥í¥°¥é¥à¡×¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¤½¤ì¤é¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ËÉտ魯¤ë REDIST.TXT ¥Õ¥¡¥¤¥ë¤Ç»ØÄꤵ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤ÇÉÕÍ¿¤µ¤ì¤ë»ÈÍѵöÂú¸¢¤Ë²Ã¤¨¡¢°Ê²¼¤Î¾ò·ï¤ò½å¼é¤¹¤ë¤³¤È¤ò¾ò·ï¤Ë¡¢ºÆÇÛÉÛ²Äǽʪ¤òÇÛÉÛ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +1) ºÆÇÛÉÛ²Äǽ¤ÊÂоݤϥª¥Ö¥¸¥§¥¯¥È¡¦¥³¡¼¥É·Á¼°¤Ë¸Â¤ë¤â¤Î¤È¤·¡¢¤«¤Ä¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ËÉÕ°¤¹¤ë REDIST.TXT ¤Þ¤¿¤Ï»ñÎÁ¤Ëµ­ºÜ¤Î¤¹¤Ù¤Æ¤Î»Ø¼¨¡¢ÀâÌÀ¤ª¤è¤Ó»ÅÍͤ˽àµò¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ +2) ¡Ö¥×¥í¥°¥é¥à¡×¤ËÉÕ°¤¹¤ë»ñÎÁ¤ÇºÆÇÛÉÛ²Äǽʪ¤ÎÊѹ¹¤òÌÀ¼¨Åª¤Ëµö²Ä¤·¤Æ¤¤¤ë¾ì¹ç¡¢¤«¤«¤ëÊѹ¹¤ÏÅö³º»ñÎÁ¤Ëµ­ºÜ¤Î¤¹¤Ù¤Æ¤Î»Ø¼¨¡¢ÀâÌÀ¤ª¤è¤Ó»ÅÍͤ˽àµò¤¹¤ë¤â¤Î¤È¤·¡¢Êѹ¹¤ò¹Ô¤Ã¤¿¾ì¹ç¤Ï¡¢¤½¤ÎÊѹ¹ÆâÍÆ¤âºÆÇÛÉÛ²Äǽʪ¤È¤·¤Æ°·¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ +3) ºÆÇÛÉÛ²Äǽʪ¤ÎÇÛÉۤϡ¢¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ·¤Æ³«È¯¤·¤¿¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó (°Ê²¼¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤È¤¤¤¤¤Þ¤¹¡£ ) ¤Î°ìÉô¤È¤·¤Æ¡¢¤«¤Ä¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤Î»ÈÍѤ˴ØÏ¢¤·¤Æ¥é¥¤¥»¥ó¥·¡¼¤Î¸ÜµÒ¤ò»Ù±ç¤¹¤ëÌÜŪ¤Ë¸Â¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¸ÜµÒ¤¬¥é¥¤¥»¥ó¥·¡¼¤Î¥½¥Õ¥È¥¦¥§¥¢À½Éʤò¼èÆÀ¤¹¤ëÂ礭¤ÊÍýͳ¤¬¡ÖºÆÇÛÉÛ²Äǽʪ¡×¤Î¼èÆÀ¤Ç¤Ï¤Ê¤¯¤«¤«¤ë¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¼èÆÀ¤Ë¤Ê¤ë¤è¤¦¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËÂ礭¤Ê²ÁÃͤò»ý¤¿¤»¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ +4) ºÆÇÛÉÛ²Äǽʪ¤Ë Java ¥é¥ó¥¿¥¤¥à´Ä¶­¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤Ë Java °Ê³°¤Î¾¤ÎºÆÇÛÉÛ²Äǽʪ¤â´Þ¤á¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¤¿¤À¤·¡¢¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤¬¡¢·ÈÂÓÍѤ䤽¤Î¾¤Î¥Ñ¡¼¥Ù¥¤¥·¥Ö¡¦¥Ç¥Ð¥¤¥¹ (¥Þ¥¤¥¯¥í¥×¥í¥»¥Ã¥µ¡¼¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤¬¡¢¥³¥ó¥Ô¥å¡¼¥Æ¥£¥ó¥°¤¬¼çÌÜŪ¤Ç¤Ê¤¤¥Ç¥Ð¥¤¥¹) ¤Ç¤Ï¤Ê¤¯¡¢ÈÆÍÑ¥³¥ó¥Ô¥å¡¼¥¿¡¼¡¦¥Ç¥Ð¥¤¥¹¡ÊÎ㤨¤Ð¥é¥Ã¥×¥È¥Ã¥×¡¢¥Ç¥¹¥¯¥È¥Ã¥×¡¢¥µ¡¼¥Ð¡¼¤Ê¤É¡Ë¾å¤Ç¤Î¤ß²ÔƯ¤¹¤ë¤è¤¦¤ËÀ߷פµ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¤Þ¤¹¡£ +5) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ºÆÇÛÉÛ²Äǽʪ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¤Þ¤¿¤ÏÃí°Õ½ñ¤­¥Õ¥¡¥¤¥ë¤Î½üµî¤Ï¤Ç¤­¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ +6) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤Î»ÈÍѤޤ¿¤ÏÇÛÉۤ˵¯°ø¤¹¤ëÂè»°¼Ô¤«¤é¤Î¤¤¤«¤Ê¤ëÀÁµá¤Ë¤Ä¤¤¤Æ¤â¡¢IBM¡¢IBM ¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ï¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¡¼¤òÌÈÀÕ¤«¤ÄËɸ椷¡¢¤³¤ì¤é¤¬Èï¤ë¤¹¤Ù¤Æ¤Î»³²¤òÊä½þ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ +7) ¥é¥¤¥»¥ó¥·¡¼¤ÏºÆÇÛÉÛ²Äǽʪ¤Î¸¶ËÜ¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥â¥¸¥å¡¼¥ë¤ÈƱ°ì¤Î¥Ñ¥¹Ì¾¤ò»ÈÍѤǤ­¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ +8) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢IBM¡¢IBM ¤Î¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ï¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¡¼¤«¤é»öÁ°¤Ë½ñÌ̤ˤè¤ëƱ°Õ¤òÆÀ¤ë¤³¤È¤Ê¤¯¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ºîÀ®¤·¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÄ󶡤˺ݤ·¤Æ IBM¡¢IBM ¤Î¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ï¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¡¼¤Î̾¾Î¡¢¤Þ¤¿¤Ï¤³¤ì¤é¤¬ÊÝÍ­¤¹¤ë¾¦É¸¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ +9) IBM¡¢IBM ¤Î¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ï¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¡¼¤Ï¡¢ºÆÇÛÉÛ²Äǽʪ¤ª¤è¤Ó´ØÏ¢»ñÎÁ¤ò¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ +10) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ª¤è¤ÓºÆÇÛÉÛ²Äǽʪ¤Ë²Ã¤¨¤é¤ì¤¿Êѹ¹¤Ë´Ø¤·¡¢¤¹¤Ù¤Æ¤ÎÀÕǤ¤òÉ餦¤â¤Î¤È¤·¤Þ¤¹¡£ +11) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë´Ø¤·¡¢¤½¤Î¥¨¥ó¥É¡¦¥æ¡¼¥¶¡¼¤È¸ò¤ï¤¹»ÈÍѵöÂú·ÀÌó¤Ë¤ª¤¤¤Æ¡¢¼¡¤Î¤¹¤Ù¤Æ¤Î»ö¹à¤ò¥¨¥ó¥É¡¦¥æ¡¼¥¶¡¼¤ØÄÌÃΤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥¨¥ó¥É¡¦¥æ¡¼¥¶¡¼¤ÏºÆÇÛÉÛ²Äǽʪ¤Þ¤¿¤Ï¤½¤Î½¤ÀµÈǤò i) ¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òÍøÍѲÄǽ¤Ë¤¹¤ëÌÜŪ°Ê³°¤Ë»ÈÍѤǤ­¤Ê¤¤¤³¤È¡£ii) Ê£À½¤Ç¤­¤Ê¤¤¤³¤È¡£(¥Ð¥Ã¥¯¥¢¥Ã¥×ÍѤÎÊ£À½¤ò½ü¤­¤Þ¤¹¡£) iii) ¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÈʬΥ¤·¤ÆºÆÇÛÉÛ¤Þ¤¿¤Ï°Üž¤Ç¤­¤Ê¤¤¤³¤È¡£ iv) ·ÀÌó¾å¤Î¸¢Íø¤òÊü´þ¤¹¤ë¤³¤È̵¤¯¡¢Ë¡Î§¤Ë¤è¤Ã¤ÆÌÀ³Î¤Ëµö²Ä¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢µÕ¥¢¥»¥ó¥Ö¥ë¡¢µÕ¥³¥ó¥Ñ¥¤¥ë¡¢¤Þ¤¿¤Ï¤½¤Î¾Ëݰƹ԰ÙÅù (³Æ¹ñ¸ìÂбþÈǤκîÀ®¤ò´Þ¤ß¤Þ¤¹¡£) ¤¬¤Ç¤­¤Ê¤¤¤³¤È¡£¤µ¤é¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѵöÂú·ÀÌó¤Ï¡¢¾¯¤Ê¤¯¤È¤âËÜ»ÈÍѾò·ï¤ÈÆ±ÄøÅÙ¤Ë IBM ¤òÊݸ¤ë¤â¤Î¤Ç¤¢¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥×¥í¥°¥é¥à¤Î REDIST.TXT ¥Õ¥¡¥¤¥ë¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ë¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¡×¤Ë¤Ä¤¤¤Æ¡¢ËÜ»ÈÍѵöÂú¤ª¤è¤Ó REDIST.TXT ¥Õ¥¡¥¤¥ë¤Î»Ø¼¨¤Ë½¾¤¦¤³¤È¤ò¾ò·ï¤Ë¡¢Åö³º¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¡×¤Î½¤ÀµÈǤòºÆÇÛÉÛ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +°Ê²¼¤Î»»Äêñ°Ì¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (PVU) + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£ ɬÍ×¤Ê PVU ¿ô¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Æ¥¯¥Î¥í¥¸¡¼ (¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ù¥ó¥À¡¼¡¢¥Ö¥é¥ó¥É¡¢¥¿¥¤¥×¤ª¤è¤Ó¥â¥Ç¥ëÈÖ¹æ¤Ë¤è¤ê http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ¤Î PVU ¥Æ¡¼¥Ö¥ëÆâ¤ÇÄêµÁ¤µ¤ì¤Þ¤¹¡£) ¤ª¤è¤Ó¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¿ô¤Ë´ð¤Å¤¤¤Æ·è¤Þ¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢PVU ñ°Ì¤Ç¤Î»ÈÍѵöÂú¤ËºÝ¤·¡¢¥×¥í¥»¥Ã¥µ¡¼¤ò¥Á¥Ã¥×¾å¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ÈÄêµÁ¤·¤Þ¤¹¡£ Î㤨¤Ð¡¢¥Ç¥å¥¢¥ë¡¦¥³¥¢¡¦¥×¥í¥»¥Ã¥µ¡¼¡¦¥Á¥Ã¥×¤Ë¤Ï 2 ¤Ä¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤¬¤¢¤ê¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ñ¥¹¥Ý¡¼¥È¡¦¥¢¥É¥Ð¥ó¥Æ¡¼¥¸¡¡¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼»ÈÍѵöÂú¤Î¾ò·ï (²¼µ­Web¥Ú¡¼¥¸¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£) ¤Ë½¾¤Ã¤Æ¡¢¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤«¡¢¤Þ¤¿¤Ï²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼ (¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼) ¡¦¥é¥¤¥»¥ó¥¹¤Î¤¤¤º¤ì¤«¤ÎÊýË¡¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ëʪÍý¥Ï¡¼¥É¥¦¥§¥¢´Ä¶­¤Ë¤ª¤±¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢* ¤òÂоݤȤ·¤Æ PVU »ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¤¿¤À¤·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬±Ê³Ū¤Ë½üµî¤µ¤ì¤¿¥µ¡¼¥Ð¡¼¤ò½ü¤­¤Þ¤¹¡£ ²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢²¼µ­¤ÎURL¤Ç»²¾È²Äǽ¤Ê²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤Î·×»»¥ë¡¼¥ë¤Ë½¾¤Ã¤ÆÄêµÁ¤µ¤ì¤¿¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤òÂоݤȤ¹¤ë»ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html + +*³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤È¤Ï¡¢ÊªÍý¤Þ¤¿¤Ï²¾ÁÛ¥µ¡¼¥Ð¡¼¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ò¤¤¤¤¤Þ¤¹¡£ ²¾ÁÛ²½¥Æ¥¯¥Î¥í¥¸¡¼¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Î¥³¥Þ¥ó¥É¡¢BIOS ÀßÄê¡¢¤Þ¤¿¤ÏƱÅù¤ÎÀ©¸Â¤Ë¤è¤ë¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Î¥­¥ã¥Ñ¥·¥Æ¥£¡¼À©¸Â¤Î̵ͭ¡¢¤Þ¤¿¤ÏÀ©¸Â¤¹¤ë¤³¤È¤Î²ÄÈݤòÌ䤤¤Þ¤»¤ó¡£ + +²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢ + +²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£¡ÖʪÍý¥µ¡¼¥Ð¡¼¡×¤È¤Ï¡¢½èÍýÁõÃÖ¡¢¥á¥â¥ê¡¼¤ª¤è¤ÓÆþ½ÐÎϵ¡Ç½¤«¤é¹½À®¤µ¤ì¡¢1 ¿Í¤Þ¤¿¤ÏÊ£¿ô¤Î¥æ¡¼¥¶¡¼¡¢¤â¤·¤¯¤Ï 1 ¤Ä¤Þ¤¿¤ÏÊ£¿ô¤Î¥¯¥é¥¤¥¢¥ó¥È¡¦¥Ç¥Ð¥¤¥¹¤¬Í׵᤹¤ë¥×¥í¥·¡¼¥¸¥ã¡¼¡¢¥³¥Þ¥ó¥É¤Þ¤¿¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ëʪÍý¥³¥ó¥Ô¥å¡¼¥¿¡¼¤ò¤¤¤¤¤Þ¤¹¡£¥é¥Ã¥¯¡¢¥Ö¥ì¡¼¥ÉãþÂΡ¢¤Þ¤¿¤Ï¾¤ÎÎà»÷¤ÎÁõÃÖ¤¬»ÈÍѤµ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢É¬Íפʥ³¥ó¥Ý¡¼¥Í¥ó¥È¤ò»ý¤ÄʬΥ²Äǽ¤Ê³ÆÊªÍý¥Ç¥Ð¥¤¥¹ (Î㤨¤Ð¡¢¥Ö¥ì¡¼¥É¤Þ¤¿¤Ï¥é¥Ã¥¯¡¦¥Þ¥¦¥ó¥È¤Î¥Ç¥Ð¥¤¥¹) ¤Ï¡¢¤½¤ì¼«ÂΤ¬¸ÄÊ̤ÎʪÍý¥µ¡¼¥Ð¡¼¤È¸«¤Ê¤µ¤ì¤Þ¤¹¡£¡Ö²¾ÁÛ¥µ¡¼¥Ð¡¼¡×¤È¤Ï¡¢ÊªÍý¥µ¡¼¥Ð¡¼¤ÇÍøÍѲÄǽ¤Ê¥ê¥½¡¼¥¹¤òʬ³ä¤·¤ÆºîÀ®¤µ¤ì¤ë²¾ÁÛ¥³¥ó¥Ô¥å¡¼¥¿¡¼¡¢¤Þ¤¿¤Ïʬ³ä¤µ¤ì¤Æ¤¤¤Ê¤¤ÊªÍý¥µ¡¼¥Ð¡¼¤ò¤¤¤¤¤Þ¤¹¡£¡Ö¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¡×(°ìÈÌ¤Ë¥×¥í¥»¥Ã¥µ¡¼¤Þ¤¿¤Ï CPU ¤È¸Æ¤Ð¤ì¤Þ¤¹¡£) ¤È¤Ï¡¢»Ø¼¨¤ò²ò¼á¤·¼Â¹Ô¤¹¤ë¥³¥ó¥Ô¥å¡¼¥¿¡¼¡¦¥Ç¥Ð¥¤¥¹Æâ¤Îµ¡Ç½Ã±°Ì¤Ç¤¹¡£1 ¤Ä¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Ï¡¢¾¯¤Ê¤¯¤È¤â 1 ¤Ä¤ÎÌ¿ÎáÀ©¸æÁõÃÖ¤ª¤è¤Ó 1 ¤Ä°Ê¾å¤Î±é»»ÁõÃÖ¤Þ¤¿¤ÏÏÀÍýÁõÃ֤ˤè¤Ã¤Æ¹½À®¤µ¤ì¤Þ¤¹¡£¡Ö²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¡×¤È¤Ï¡¢Ê¬³ä¤µ¤ì¤Æ¤¤¤Ê¤¤ÊªÍý¥µ¡¼¥Ð¡¼Æâ¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¡¢¤Þ¤¿¤Ï²¾ÁÛ¥µ¡¼¥Ð¡¼¤Ë³ä¤êÅö¤Æ¤é¤ì¤¿²¾ÁÛ¥³¥¢¤Ç¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѲÄǽ¤Ê²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤´¤È¤Ë»ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ÊªÍý¥µ¡¼¥Ð¡¼¤´¤È¤Ë¡¢ 1)¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¤¹¤Ù¤Æ¤Î²¾ÁÛ¥µ¡¼¥Ð¡¼¤Ç»ÈÍѲÄǽ¤Ê¤¹¤Ù¤Æ¤Î²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Î¹ç·×¡¢¤Þ¤¿¤Ï 2) ʪÍý¥µ¡¼¥Ð¡¼¤Ç»ÈÍѲÄǽ¤Ê¤¹¤Ù¤Æ¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Î¡¢¤¤¤º¤ì¤«¾¯¤Ê¤¤¤Û¤¦¤ËÂбþ¤¹¤ë½½Ê¬¤Ê»ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¤µ¤é¤Ë¡¢°Ê²¼¤Î»ÈÍѾò·ï¤¬¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À® + +Ëܹà¤ÎÌÜŪ¤Ë¤ª¤¤¤Æ¡¢¡Ö¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡×¹½À®¤È¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤¬¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥½¥ê¥å¡¼¥·¥ç¥ó¤Î°ìÉô¤ò·ÁÀ®¤¹¤ë¥µ¡¼¥Ð¡¼¾å¤ËƳÆþ¤µ¤ì¤ë¤â¤Î¤Ç¤¢¤ê¡¢¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¾å¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤¬»ÈÍÑÄä»ß¤È¤Ê¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤¹¤ë¥µ¡¼¥Ð¡¼¤Ç¤¹¡£¥µ¡¼¥Ð¡¼¤Ï¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤¬È¯À¸¤¹¤ë¤Þ¤Ç¤Ë¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¡¦¥·¥Ê¥ê¥ª¤ò»Ù±ç¤¹¤ë´ÉÍý³èư¤Î¤ß¤Ë»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥¢¥¤¥É¥ë¡×¤È¤·¤Æ¤Î¤ß¸«¤Ê¤µ¤ì¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢Å¬ÀڤʻÈÍѵöÂú¤òÆÀ¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¾å¤ËƳÆþ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡¢¥Þ¥ë¥Á¡¦¥¤¥ó¥¹¥¿¥ó¥¹¡¦¥­¥å¡¼¡¦¥Þ¥Í¡¼¥¸¥ã¡¼µ¡Ç½¤È¶¦¤Ë¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À®Æâ¤Ç»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤Ï¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×ÌÜŪ¤È¤·¤Æ¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¾å¤Ë¸ºß¤·¡¢³«»Ï¤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¡Ö¥¢¥¤¥É¥ë¡×¤Î¤Þ¤Þ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¤¬¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¤Ë¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤·¤Ê¤¤¸Â¤ê¡¢¤¤¤«¤Ê¤ëÀ¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤º¡¢¤«¤«¤ë¾ì¹ç¤Ï¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¤ÎÊ£À½¤ò¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤Î´Ö¡¢À¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡¢Â¾¤Î¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥·¥¹¥Æ¥à¤È¶¦¤Ë¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À®Æâ¤Ç»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤Ï¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×ÌÜŪ¤È¤·¤Æ¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¾å¤Ë¸ºß¤·¤Æ¤â³«»Ï¤·¤Ê¤¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤¬¡¢(½¾¤Ã¤Æ¡¢¤¤¤«¤Ê¤ëÀ¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£) ¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¤¬µ¡Ç½¤·¤Ê¤¤¾ì¹ç¡¢¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ë¤è¤ê¼«Æ°Åª¤Ë³«»Ï¤·¡¢¤«¤«¤ë¾ì¹ç¤Ï¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¤ÎÊ£À½¤ò¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤Î´Ö¡¢À¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +½ÅÍפǤ¹: Ãí°Õ¤·¤Æ¤ªÆÉ¤ß¤¯¤À¤µ¤¤ + +2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌ󤬡¢²¼µ­¤ËÄ󼨤µ¤ì¤Þ¤¹¡£ + +1. IBM ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï +2. IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï + +¥é¥¤¥»¥ó¥·¡¼¤¬À¸»ºÅª»ÈÍÑ (ɾ²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó°Ê³°) ¤òÌÜŪ¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤Î¤Þ¤Þ IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬É¾²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó (°Ê²¼¡Öɾ²Á¡×¤ÈÁí¾Î¤·¤Þ¤¹¡£) ¤òÌÜŪ¤È¤·¤Æ¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï (i) IBM¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (°Ê²¼¡Öɾ²Á¥é¥¤¥»¥ó¥¹¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó (ii) IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ë²¿¤éÊѹ¹¤ò²Ã¤¨¤ë¤³¤È¤Ê¤¯Æ±°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +ɾ²Á¥é¥¤¥»¥ó¥¹¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¡Öɾ²Á¡×¤Î´ü´ÖÃæÅ¬ÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬¡Öɾ²Á¡×¤Î¸å¡¢Ä´Ã£·ÀÌó¡ÊÎ㤨¤Ð¡¢IBM International Passport Advantage ¤Þ¤¿¤Ï IBM Passport Advantage Express »ÈÍѾò·ï¤Ê¤É¡Ë¤ò·ë¤Ö¤³¤È¤Ë¤è¤ê¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¤½¤Î¤Þ¤Þ»ÈÍѤ¹¤ë¤³¤È¤òÁªÂò¤µ¤ì¤ë¤È¡Ê¤Þ¤¿¤Ï¡Öɾ²Á¡×¸å¤Ë»ÈÍѤ¹¤ë¤¿¤á¡Ö¥×¥í¥°¥é¥à¡×¤òÄɲüèÆÀ¤µ¤ì¤ë¤È)¡¢IPLA ¤¬¼«Æ°Åª¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +ILAE ¤ª¤è¤Ó IPLA ¤ÏƱ»þ¤Ë¸úÎϤò»ý¤Ä¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¤¤º¤ì¤â¾Êý¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¤·¡¢¤½¤ì¤¾¤ì¸ß¤¤¤ËÆÈΩ¤·¤Æ¤¤¤Þ¤¹¡£ + +¤³¤Î 2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌó¤ÎÁ´Ê¸¤Ï¡¢°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (Z125-5543-05) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾ (¥×¥í¥°¥é¥àÈÖ¹æ): +IBM MQ Advanced V9.0.3 (Evaluation) + +°Ê²¼¤Îɸ½à¾ò·ï¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +ɾ²Á´ü´Ö + +ɾ²Á´ü´Ö¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ëÆü¤Ë³«»Ï¤·¡¢³«»ÏÆü¤è¤ê 90 Æü¸å¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à + +ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢°Ê²¼¤ÇÆÃÄꤵ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¹½À®¤µ¤ì¤ëÊ£¿ô¤ÎÀ½ÉʤΥѥ屡¼¥¸¤È¤·¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ÎÈÏ°ÏÆâ¤Ç¡¢¤«¤ÄËܥ饤¥»¥ó¥¹¾ðÊó¤Ëµ­ºÜ¤µ¤ì¤¿¤È¤ª¤ê¡¢¤«¤«¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òƳÆþ¤·»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òÊ£¿ôÀ½Éʥѥ屡¼¥¸¤«¤éʬΥ¤·¤Æ°Üž¤Þ¤¿¤ÏºÆÈΤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ë¤Ï¡¢»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤é¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ óòó÷¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Î¾ò·ï¤¬¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѾò·ï¤è¤êÍ¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѸ¢¤¬½ªÎ»¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤·¡¢ÇË´þ¡¢¤Þ¤¿¤ÏĴ㸵¤ØÊֵѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ï¡¢Ä´Ã£¸µ¤ØÏ¢Íí¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¾åµ­À©¸Â¤¬¤Ê¤¤¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤Ë¤Ï¡¢IBM ±Ä¶ÈôÅö°÷¤Þ¤¿¤ÏĴ㸵¤ØÏ¢Íí¤·¡¢Å¬ÀڤʻÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤È¤È¤â¤Ë»ÈÍѵöÂú¤µ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¤¹¡£ +IBM MQ V9.0.3 + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (Z125-3301-14) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾ (¥×¥í¥°¥é¥àÈÖ¹æ): +IBM MQ Advanced V9.0.3 (5724-H72) + +°Ê²¼¤Îɸ½à¾ò·ï¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +»ÈÍÑÀ©¸ÂÉÕ¤­¸¢Íø + +IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¡¢¤ª¤è¤ÓËܡ֥饤¥»¥ó¥¹¾ðÊó¡×¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢIBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ëÀ©¸ÂÉÕ¤­¸¢Íø¤òÉÕÍ¿¤µ¤ì¤Þ¤¹¡£ ¤³¤Î¸¢Íø¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¥ê¥½¡¼¥¹¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖRVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÆÃÄê¤Î»ÈÍÑ¥ì¥Ù¥ë¤Ê¤É¡¢¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢ¥é¥¤¥»¥ó¥·¡¼¤¬»Ùʧ¤¦ÎÁ¶â¤Ë¤è¤êµö²Ä¤µ¤ì¤¿»ÈÍÑ¥ì¥Ù¥ë¤Ë¸ÂÄꤵ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѤϡ¢ÆÃÄê¤Îµ¡³£¡¢½¾¥×¥í¥°¥é¥à¤È¤·¤Æ¤Î¤ß¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÀ©Ìó»ö¹à¤ËÀ©¸Â¤µ¤ì¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¤¹¤Ù¤Æ¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î·ÐºÑŪ²ÁÃͤò»Ùʧ¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ÄɲÃÎÁ¶â¤ò»Ùʧ¤ï¤Ê¤¤¸Â¤ê¡¢Â¾¤Î¤¤¤«¤Ê¤ë»ÈÍѤâµö²Ä¤µ¤ì¤Þ¤»¤ó¡£ ¤µ¤é¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤È¤­¤ËŬÍѤµ¤ì¤ë»ÈÍѾò·ï¤ÇÌÀ¼¨¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Âè»°¼Ô¤ËÂФ·¾¦¶ÈÍÑ IT ¥µ¡¼¥Ó¥¹¤òÄ󶡤·¡¢¾¦¶ÈÍÑ¥Û¥¹¥Æ¥£¥ó¥°¡¢¤Þ¤¿¤Ï¥¿¥¤¥à¡¦¥·¥§¥¢¥ê¥ó¥°¤ÎÄó¶¡¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥µ¥Ö¥é¥¤¥»¥ó¥¹¡¢Ä¼ڡ¢¤¢¤ë¤¤¤Ï¥ê¡¼¥¹¤¹¤ë¤¿¤á¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ Äɲäθ¢Íø¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ëÄɲÃÎÁ¶â¤Î»Ùʧ¤¤¡¢¤â¤·¤¯¤ÏÊ̤ޤ¿¤ÏÊ䭤ξò·ï¤Ë´ð¤Å¤­ÍøÍѲÄǽ¤È¤Ê¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¤«¤«¤ëÄɲäθ¢Íø¤òÍøÍѤǤ­¤ë¤«·èÄꤹ¤ë¸¢¸Â¤òÍ­¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +»ÅÍÍ + +¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÅÍͤϡ¢¡Ö¥×¥í¥°¥é¥à¡×¤Îȯɽ¥ì¥¿¡¼¤Ë¶¦Ä̤Ρֵ»½Ñ¾ðÊó¡×¤Î¹à¤Ç³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à + +ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢°Ê²¼¤ÇÆÃÄꤵ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¹½À®¤µ¤ì¤ëÊ£¿ô¤ÎÀ½ÉʤΥѥ屡¼¥¸¤È¤·¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ÎÈÏ°ÏÆâ¤Ç¡¢¤«¤ÄËܥ饤¥»¥ó¥¹¾ðÊó¤Ëµ­ºÜ¤µ¤ì¤¿¤È¤ª¤ê¡¢¤«¤«¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òƳÆþ¤·»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òÊ£¿ôÀ½Éʥѥ屡¼¥¸¤«¤éʬΥ¤·¤Æ°Üž¤Þ¤¿¤ÏºÆÈΤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ë¤Ï¡¢»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤é¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ óòó÷¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Î¾ò·ï¤¬¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѾò·ï¤è¤êÍ¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѸ¢¤¬½ªÎ»¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤·¡¢ÇË´þ¡¢¤Þ¤¿¤ÏĴ㸵¤ØÊֵѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ï¡¢Ä´Ã£¸µ¤ØÏ¢Íí¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¾åµ­À©¸Â¤¬¤Ê¤¤¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤Ë¤Ï¡¢IBM ±Ä¶ÈôÅö°÷¤Þ¤¿¤ÏĴ㸵¤ØÏ¢Íí¤·¡¢Å¬ÀڤʻÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤È¤È¤â¤Ë»ÈÍѵöÂú¤µ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¤¹¡£ +IBM MQ V9.0.3 + +ɬÍפʻÈÍѸ¢¿ô¤Î»»Äê¤Ë¹Í褵¤ì¤Ê¤¤¥³¥ó¥Ý¡¼¥Í¥ó¥È + +¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Ë¡¢°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤϹÍ褵¤ì¤Þ¤»¤ó¡£¤¹¤Ê¤ï¤Á¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢»ÈÍѵöÂú¾ò·ï¤Ë´ð¤Å¤¤¤Æ°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òƳÆþ¤ª¤è¤Ó»ÈÍѤǤ­¤Þ¤¹¤¬¡¢¤½¤ì¤é¤¬¡Ö¥×¥í¥°¥é¥à¡×¤ËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Î¤¿¤á¤Ë¹Í褵¤ì¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Î»»Äêñ°Ì¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (PVU) + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£ ɬÍ×¤Ê PVU ¿ô¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Æ¥¯¥Î¥í¥¸¡¼ (¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ù¥ó¥À¡¼¡¢¥Ö¥é¥ó¥É¡¢¥¿¥¤¥×¤ª¤è¤Ó¥â¥Ç¥ëÈÖ¹æ¤Ë¤è¤ê http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ¤Î PVU ¥Æ¡¼¥Ö¥ëÆâ¤ÇÄêµÁ¤µ¤ì¤Þ¤¹¡£) ¤ª¤è¤Ó¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¿ô¤Ë´ð¤Å¤¤¤Æ·è¤Þ¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢PVU ñ°Ì¤Ç¤Î»ÈÍѵöÂú¤ËºÝ¤·¡¢¥×¥í¥»¥Ã¥µ¡¼¤ò¥Á¥Ã¥×¾å¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ÈÄêµÁ¤·¤Þ¤¹¡£ Î㤨¤Ð¡¢¥Ç¥å¥¢¥ë¡¦¥³¥¢¡¦¥×¥í¥»¥Ã¥µ¡¼¡¦¥Á¥Ã¥×¤Ë¤Ï 2 ¤Ä¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤¬¤¢¤ê¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ñ¥¹¥Ý¡¼¥È¡¦¥¢¥É¥Ð¥ó¥Æ¡¼¥¸¡¡¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼»ÈÍѵöÂú¤Î¾ò·ï (²¼µ­Web¥Ú¡¼¥¸¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£) ¤Ë½¾¤Ã¤Æ¡¢¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤«¡¢¤Þ¤¿¤Ï²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼ (¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼) ¡¦¥é¥¤¥»¥ó¥¹¤Î¤¤¤º¤ì¤«¤ÎÊýË¡¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ëʪÍý¥Ï¡¼¥É¥¦¥§¥¢´Ä¶­¤Ë¤ª¤±¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢* ¤òÂоݤȤ·¤Æ PVU »ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¤¿¤À¤·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬±Ê³Ū¤Ë½üµî¤µ¤ì¤¿¥µ¡¼¥Ð¡¼¤ò½ü¤­¤Þ¤¹¡£ ²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢²¼µ­¤ÎURL¤Ç»²¾È²Äǽ¤Ê²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤Î·×»»¥ë¡¼¥ë¤Ë½¾¤Ã¤ÆÄêµÁ¤µ¤ì¤¿¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤òÂоݤȤ¹¤ë»ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html + +*³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤È¤Ï¡¢ÊªÍý¤Þ¤¿¤Ï²¾ÁÛ¥µ¡¼¥Ð¡¼¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ò¤¤¤¤¤Þ¤¹¡£ ²¾ÁÛ²½¥Æ¥¯¥Î¥í¥¸¡¼¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Î¥³¥Þ¥ó¥É¡¢BIOS ÀßÄê¡¢¤Þ¤¿¤ÏƱÅù¤ÎÀ©¸Â¤Ë¤è¤ë¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Î¥­¥ã¥Ñ¥·¥Æ¥£¡¼À©¸Â¤Î̵ͭ¡¢¤Þ¤¿¤ÏÀ©¸Â¤¹¤ë¤³¤È¤Î²ÄÈݤòÌ䤤¤Þ¤»¤ó¡£ + +²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢ + +²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£¡ÖʪÍý¥µ¡¼¥Ð¡¼¡×¤È¤Ï¡¢½èÍýÁõÃÖ¡¢¥á¥â¥ê¡¼¤ª¤è¤ÓÆþ½ÐÎϵ¡Ç½¤«¤é¹½À®¤µ¤ì¡¢1 ¿Í¤Þ¤¿¤ÏÊ£¿ô¤Î¥æ¡¼¥¶¡¼¡¢¤â¤·¤¯¤Ï 1 ¤Ä¤Þ¤¿¤ÏÊ£¿ô¤Î¥¯¥é¥¤¥¢¥ó¥È¡¦¥Ç¥Ð¥¤¥¹¤¬Í׵᤹¤ë¥×¥í¥·¡¼¥¸¥ã¡¼¡¢¥³¥Þ¥ó¥É¤Þ¤¿¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ëʪÍý¥³¥ó¥Ô¥å¡¼¥¿¡¼¤ò¤¤¤¤¤Þ¤¹¡£¥é¥Ã¥¯¡¢¥Ö¥ì¡¼¥ÉãþÂΡ¢¤Þ¤¿¤Ï¾¤ÎÎà»÷¤ÎÁõÃÖ¤¬»ÈÍѤµ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢É¬Íפʥ³¥ó¥Ý¡¼¥Í¥ó¥È¤ò»ý¤ÄʬΥ²Äǽ¤Ê³ÆÊªÍý¥Ç¥Ð¥¤¥¹ (Î㤨¤Ð¡¢¥Ö¥ì¡¼¥É¤Þ¤¿¤Ï¥é¥Ã¥¯¡¦¥Þ¥¦¥ó¥È¤Î¥Ç¥Ð¥¤¥¹) ¤Ï¡¢¤½¤ì¼«ÂΤ¬¸ÄÊ̤ÎʪÍý¥µ¡¼¥Ð¡¼¤È¸«¤Ê¤µ¤ì¤Þ¤¹¡£¡Ö²¾ÁÛ¥µ¡¼¥Ð¡¼¡×¤È¤Ï¡¢ÊªÍý¥µ¡¼¥Ð¡¼¤ÇÍøÍѲÄǽ¤Ê¥ê¥½¡¼¥¹¤òʬ³ä¤·¤ÆºîÀ®¤µ¤ì¤ë²¾ÁÛ¥³¥ó¥Ô¥å¡¼¥¿¡¼¡¢¤Þ¤¿¤Ïʬ³ä¤µ¤ì¤Æ¤¤¤Ê¤¤ÊªÍý¥µ¡¼¥Ð¡¼¤ò¤¤¤¤¤Þ¤¹¡£¡Ö¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¡×(°ìÈÌ¤Ë¥×¥í¥»¥Ã¥µ¡¼¤Þ¤¿¤Ï CPU ¤È¸Æ¤Ð¤ì¤Þ¤¹¡£) ¤È¤Ï¡¢»Ø¼¨¤ò²ò¼á¤·¼Â¹Ô¤¹¤ë¥³¥ó¥Ô¥å¡¼¥¿¡¼¡¦¥Ç¥Ð¥¤¥¹Æâ¤Îµ¡Ç½Ã±°Ì¤Ç¤¹¡£1 ¤Ä¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Ï¡¢¾¯¤Ê¤¯¤È¤â 1 ¤Ä¤ÎÌ¿ÎáÀ©¸æÁõÃÖ¤ª¤è¤Ó 1 ¤Ä°Ê¾å¤Î±é»»ÁõÃÖ¤Þ¤¿¤ÏÏÀÍýÁõÃ֤ˤè¤Ã¤Æ¹½À®¤µ¤ì¤Þ¤¹¡£¡Ö²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¡×¤È¤Ï¡¢Ê¬³ä¤µ¤ì¤Æ¤¤¤Ê¤¤ÊªÍý¥µ¡¼¥Ð¡¼Æâ¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¡¢¤Þ¤¿¤Ï²¾ÁÛ¥µ¡¼¥Ð¡¼¤Ë³ä¤êÅö¤Æ¤é¤ì¤¿²¾ÁÛ¥³¥¢¤Ç¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѲÄǽ¤Ê²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤´¤È¤Ë»ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ÊªÍý¥µ¡¼¥Ð¡¼¤´¤È¤Ë¡¢ 1)¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¤¹¤Ù¤Æ¤Î²¾ÁÛ¥µ¡¼¥Ð¡¼¤Ç»ÈÍѲÄǽ¤Ê¤¹¤Ù¤Æ¤Î²¾ÁÛ¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Î¹ç·×¡¢¤Þ¤¿¤Ï 2) ʪÍý¥µ¡¼¥Ð¡¼¤Ç»ÈÍѲÄǽ¤Ê¤¹¤Ù¤Æ¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Î¡¢¤¤¤º¤ì¤«¾¯¤Ê¤¤¤Û¤¦¤ËÂбþ¤¹¤ë½½Ê¬¤Ê»ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +½ÅÍפǤ¹: Ãí°Õ¤·¤Æ¤ªÆÉ¤ß¤¯¤À¤µ¤¤ + +2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌ󤬡¢²¼µ­¤ËÄ󼨤µ¤ì¤Þ¤¹¡£ + +1. IBM ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï +2. IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï + +¥é¥¤¥»¥ó¥·¡¼¤¬À¸»ºÅª»ÈÍÑ (ɾ²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó°Ê³°) ¤òÌÜŪ¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤Î¤Þ¤Þ IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬É¾²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó (°Ê²¼¡Öɾ²Á¡×¤ÈÁí¾Î¤·¤Þ¤¹¡£) ¤òÌÜŪ¤È¤·¤Æ¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï (i) IBM¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (°Ê²¼¡Öɾ²Á¥é¥¤¥»¥ó¥¹¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó (ii) IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ë²¿¤éÊѹ¹¤ò²Ã¤¨¤ë¤³¤È¤Ê¤¯Æ±°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +ɾ²Á¥é¥¤¥»¥ó¥¹¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¡Öɾ²Á¡×¤Î´ü´ÖÃæÅ¬ÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬¡Öɾ²Á¡×¤Î¸å¡¢Ä´Ã£·ÀÌó¡ÊÎ㤨¤Ð¡¢IBM International Passport Advantage ¤Þ¤¿¤Ï IBM Passport Advantage Express »ÈÍѾò·ï¤Ê¤É¡Ë¤ò·ë¤Ö¤³¤È¤Ë¤è¤ê¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¤½¤Î¤Þ¤Þ»ÈÍѤ¹¤ë¤³¤È¤òÁªÂò¤µ¤ì¤ë¤È¡Ê¤Þ¤¿¤Ï¡Öɾ²Á¡×¸å¤Ë»ÈÍѤ¹¤ë¤¿¤á¡Ö¥×¥í¥°¥é¥à¡×¤òÄɲüèÆÀ¤µ¤ì¤ë¤È)¡¢IPLA ¤¬¼«Æ°Åª¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +ILAE ¤ª¤è¤Ó IPLA ¤ÏƱ»þ¤Ë¸úÎϤò»ý¤Ä¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¤¤º¤ì¤â¾Êý¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¤·¡¢¤½¤ì¤¾¤ì¸ß¤¤¤ËÆÈΩ¤·¤Æ¤¤¤Þ¤¹¡£ + +¤³¤Î 2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌó¤ÎÁ´Ê¸¤Ï¡¢°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (Z125-5543-05) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾ (¥×¥í¥°¥é¥àÈÖ¹æ): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +°Ê²¼¤Îɸ½à¾ò·ï¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +ɾ²Á´ü´Ö + +ɾ²Á´ü´Ö¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ëÆü¤Ë³«»Ï¤·¡¢³«»ÏÆü¤è¤ê 90 Æü¸å¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à + +ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢°Ê²¼¤ÇÆÃÄꤵ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¹½À®¤µ¤ì¤ëÊ£¿ô¤ÎÀ½ÉʤΥѥ屡¼¥¸¤È¤·¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ÎÈÏ°ÏÆâ¤Ç¡¢¤«¤ÄËܥ饤¥»¥ó¥¹¾ðÊó¤Ëµ­ºÜ¤µ¤ì¤¿¤È¤ª¤ê¡¢¤«¤«¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òƳÆþ¤·»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òÊ£¿ôÀ½Éʥѥ屡¼¥¸¤«¤éʬΥ¤·¤Æ°Üž¤Þ¤¿¤ÏºÆÈΤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ë¤Ï¡¢»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤é¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ óòó÷¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Î¾ò·ï¤¬¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѾò·ï¤è¤êÍ¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѸ¢¤¬½ªÎ»¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤·¡¢ÇË´þ¡¢¤Þ¤¿¤ÏĴ㸵¤ØÊֵѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ï¡¢Ä´Ã£¸µ¤ØÏ¢Íí¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¾åµ­À©¸Â¤¬¤Ê¤¤¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤Ë¤Ï¡¢IBM ±Ä¶ÈôÅö°÷¤Þ¤¿¤ÏĴ㸵¤ØÏ¢Íí¤·¡¢Å¬ÀڤʻÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤È¤È¤â¤Ë»ÈÍѵöÂú¤µ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¤¹¡£ +IBM MQ Idle Standby V9.0.3 + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (Z125-3301-14) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾ (¥×¥í¥°¥é¥àÈÖ¹æ): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +°Ê²¼¤Îɸ½à¾ò·ï¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +»ÈÍÑÀ©¸ÂÉÕ¤­¸¢Íø + +IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¡¢¤ª¤è¤ÓËܡ֥饤¥»¥ó¥¹¾ðÊó¡×¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢIBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ëÀ©¸ÂÉÕ¤­¸¢Íø¤òÉÕÍ¿¤µ¤ì¤Þ¤¹¡£ ¤³¤Î¸¢Íø¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¥ê¥½¡¼¥¹¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖRVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÆÃÄê¤Î»ÈÍÑ¥ì¥Ù¥ë¤Ê¤É¡¢¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢ¥é¥¤¥»¥ó¥·¡¼¤¬»Ùʧ¤¦ÎÁ¶â¤Ë¤è¤êµö²Ä¤µ¤ì¤¿»ÈÍÑ¥ì¥Ù¥ë¤Ë¸ÂÄꤵ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѤϡ¢ÆÃÄê¤Îµ¡³£¡¢½¾¥×¥í¥°¥é¥à¤È¤·¤Æ¤Î¤ß¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÀ©Ìó»ö¹à¤ËÀ©¸Â¤µ¤ì¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¤¹¤Ù¤Æ¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î·ÐºÑŪ²ÁÃͤò»Ùʧ¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ÄɲÃÎÁ¶â¤ò»Ùʧ¤ï¤Ê¤¤¸Â¤ê¡¢Â¾¤Î¤¤¤«¤Ê¤ë»ÈÍѤâµö²Ä¤µ¤ì¤Þ¤»¤ó¡£ ¤µ¤é¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤È¤­¤ËŬÍѤµ¤ì¤ë»ÈÍѾò·ï¤ÇÌÀ¼¨¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Âè»°¼Ô¤ËÂФ·¾¦¶ÈÍÑ IT ¥µ¡¼¥Ó¥¹¤òÄ󶡤·¡¢¾¦¶ÈÍÑ¥Û¥¹¥Æ¥£¥ó¥°¡¢¤Þ¤¿¤Ï¥¿¥¤¥à¡¦¥·¥§¥¢¥ê¥ó¥°¤ÎÄó¶¡¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥µ¥Ö¥é¥¤¥»¥ó¥¹¡¢Ä¼ڡ¢¤¢¤ë¤¤¤Ï¥ê¡¼¥¹¤¹¤ë¤¿¤á¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ Äɲäθ¢Íø¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ëÄɲÃÎÁ¶â¤Î»Ùʧ¤¤¡¢¤â¤·¤¯¤ÏÊ̤ޤ¿¤ÏÊ䭤ξò·ï¤Ë´ð¤Å¤­ÍøÍѲÄǽ¤È¤Ê¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¤«¤«¤ëÄɲäθ¢Íø¤òÍøÍѤǤ­¤ë¤«·èÄꤹ¤ë¸¢¸Â¤òÍ­¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +»ÅÍÍ + +¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÅÍͤϡ¢¡Ö¥×¥í¥°¥é¥à¡×¤Îȯɽ¥ì¥¿¡¼¤Ë¶¦Ä̤Ρֵ»½Ñ¾ðÊó¡×¤Î¹à¤Ç³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à + +ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢°Ê²¼¤ÇÆÃÄꤵ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¹½À®¤µ¤ì¤ëÊ£¿ô¤ÎÀ½ÉʤΥѥ屡¼¥¸¤È¤·¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ÎÈÏ°ÏÆâ¤Ç¡¢¤«¤ÄËܥ饤¥»¥ó¥¹¾ðÊó¤Ëµ­ºÜ¤µ¤ì¤¿¤È¤ª¤ê¡¢¤«¤«¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òƳÆþ¤·»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òÊ£¿ôÀ½Éʥѥ屡¼¥¸¤«¤éʬΥ¤·¤Æ°Üž¤Þ¤¿¤ÏºÆÈΤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ë¤Ï¡¢»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤é¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ óòó÷¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Î¾ò·ï¤¬¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѾò·ï¤è¤êÍ¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѸ¢¤¬½ªÎ»¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤·¡¢ÇË´þ¡¢¤Þ¤¿¤ÏĴ㸵¤ØÊֵѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ï¡¢Ä´Ã£¸µ¤ØÏ¢Íí¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¾åµ­À©¸Â¤¬¤Ê¤¤¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤Ë¤Ï¡¢IBM ±Ä¶ÈôÅö°÷¤Þ¤¿¤ÏĴ㸵¤ØÏ¢Íí¤·¡¢Å¬ÀڤʻÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤È¤È¤â¤Ë»ÈÍѵöÂú¤µ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¤¹¡£ +IBM MQ Idle Standby V9.0.3 + +ɬÍפʻÈÍѸ¢¿ô¤Î»»Äê¤Ë¹Í褵¤ì¤Ê¤¤¥³¥ó¥Ý¡¼¥Í¥ó¥È + +¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Ë¡¢°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤϹÍ褵¤ì¤Þ¤»¤ó¡£¤¹¤Ê¤ï¤Á¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢»ÈÍѵöÂú¾ò·ï¤Ë´ð¤Å¤¤¤Æ°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òƳÆþ¤ª¤è¤Ó»ÈÍѤǤ­¤Þ¤¹¤¬¡¢¤½¤ì¤é¤¬¡Ö¥×¥í¥°¥é¥à¡×¤ËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Î¤¿¤á¤Ë¹Í褵¤ì¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Î»»Äêñ°Ì¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (PVU) + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£ ɬÍ×¤Ê PVU ¿ô¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Æ¥¯¥Î¥í¥¸¡¼ (¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ù¥ó¥À¡¼¡¢¥Ö¥é¥ó¥É¡¢¥¿¥¤¥×¤ª¤è¤Ó¥â¥Ç¥ëÈÖ¹æ¤Ë¤è¤ê http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ¤Î PVU ¥Æ¡¼¥Ö¥ëÆâ¤ÇÄêµÁ¤µ¤ì¤Þ¤¹¡£) ¤ª¤è¤Ó¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¿ô¤Ë´ð¤Å¤¤¤Æ·è¤Þ¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢PVU ñ°Ì¤Ç¤Î»ÈÍѵöÂú¤ËºÝ¤·¡¢¥×¥í¥»¥Ã¥µ¡¼¤ò¥Á¥Ã¥×¾å¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ÈÄêµÁ¤·¤Þ¤¹¡£ Î㤨¤Ð¡¢¥Ç¥å¥¢¥ë¡¦¥³¥¢¡¦¥×¥í¥»¥Ã¥µ¡¼¡¦¥Á¥Ã¥×¤Ë¤Ï 2 ¤Ä¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤¬¤¢¤ê¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ñ¥¹¥Ý¡¼¥È¡¦¥¢¥É¥Ð¥ó¥Æ¡¼¥¸¡¡¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼»ÈÍѵöÂú¤Î¾ò·ï (²¼µ­Web¥Ú¡¼¥¸¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£) ¤Ë½¾¤Ã¤Æ¡¢¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤«¡¢¤Þ¤¿¤Ï²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼ (¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼) ¡¦¥é¥¤¥»¥ó¥¹¤Î¤¤¤º¤ì¤«¤ÎÊýË¡¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ëʪÍý¥Ï¡¼¥É¥¦¥§¥¢´Ä¶­¤Ë¤ª¤±¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢* ¤òÂоݤȤ·¤Æ PVU »ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¤¿¤À¤·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬±Ê³Ū¤Ë½üµî¤µ¤ì¤¿¥µ¡¼¥Ð¡¼¤ò½ü¤­¤Þ¤¹¡£ ²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢²¼µ­¤ÎURL¤Ç»²¾È²Äǽ¤Ê²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤Î·×»»¥ë¡¼¥ë¤Ë½¾¤Ã¤ÆÄêµÁ¤µ¤ì¤¿¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤òÂоݤȤ¹¤ë»ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html + +*³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤È¤Ï¡¢ÊªÍý¤Þ¤¿¤Ï²¾ÁÛ¥µ¡¼¥Ð¡¼¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ò¤¤¤¤¤Þ¤¹¡£ ²¾ÁÛ²½¥Æ¥¯¥Î¥í¥¸¡¼¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Î¥³¥Þ¥ó¥É¡¢BIOS ÀßÄê¡¢¤Þ¤¿¤ÏƱÅù¤ÎÀ©¸Â¤Ë¤è¤ë¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Î¥­¥ã¥Ñ¥·¥Æ¥£¡¼À©¸Â¤Î̵ͭ¡¢¤Þ¤¿¤ÏÀ©¸Â¤¹¤ë¤³¤È¤Î²ÄÈݤòÌ䤤¤Þ¤»¤ó¡£ + +¤µ¤é¤Ë¡¢°Ê²¼¤Î»ÈÍѾò·ï¤¬¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À® + +Ëܹà¤ÎÌÜŪ¤Ë¤ª¤¤¤Æ¡¢¡Ö¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡×¹½À®¤È¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤¬¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥½¥ê¥å¡¼¥·¥ç¥ó¤Î°ìÉô¤ò·ÁÀ®¤¹¤ë¥µ¡¼¥Ð¡¼¾å¤ËƳÆþ¤µ¤ì¤ë¤â¤Î¤Ç¤¢¤ê¡¢¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¾å¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤¬»ÈÍÑÄä»ß¤È¤Ê¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤¹¤ë¥µ¡¼¥Ð¡¼¤Ç¤¹¡£¥µ¡¼¥Ð¡¼¤Ï¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤¬È¯À¸¤¹¤ë¤Þ¤Ç¤Ë¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¡¦¥·¥Ê¥ê¥ª¤ò»Ù±ç¤¹¤ë´ÉÍý³èư¤Î¤ß¤Ë»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥¢¥¤¥É¥ë¡×¤È¤·¤Æ¤Î¤ß¸«¤Ê¤µ¤ì¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢Å¬ÀڤʻÈÍѵöÂú¤òÆÀ¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¾å¤ËƳÆþ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡¢¥Þ¥ë¥Á¡¦¥¤¥ó¥¹¥¿¥ó¥¹¡¦¥­¥å¡¼¡¦¥Þ¥Í¡¼¥¸¥ã¡¼µ¡Ç½¤È¶¦¤Ë¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À®Æâ¤Ç»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤Ï¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×ÌÜŪ¤È¤·¤Æ¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¾å¤Ë¸ºß¤·¡¢³«»Ï¤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¡Ö¥¢¥¤¥É¥ë¡×¤Î¤Þ¤Þ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¤¬¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¤Ë¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤·¤Ê¤¤¸Â¤ê¡¢¤¤¤«¤Ê¤ëÀ¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤º¡¢¤«¤«¤ë¾ì¹ç¤Ï¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¤ÎÊ£À½¤ò¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤Î´Ö¡¢À¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡¢Â¾¤Î¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥·¥¹¥Æ¥à¤È¶¦¤Ë¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À®Æâ¤Ç»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤Ï¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×ÌÜŪ¤È¤·¤Æ¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¾å¤Ë¸ºß¤·¤Æ¤â³«»Ï¤·¤Ê¤¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤¬¡¢(½¾¤Ã¤Æ¡¢¤¤¤«¤Ê¤ëÀ¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£) ¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¤¬µ¡Ç½¤·¤Ê¤¤¾ì¹ç¡¢¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ë¤è¤ê¼«Æ°Åª¤Ë³«»Ï¤·¡¢¤«¤«¤ë¾ì¹ç¤Ï¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¤ÎÊ£À½¤ò¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤Î´Ö¡¢À¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +½ÅÍפǤ¹: Ãí°Õ¤·¤Æ¤ªÆÉ¤ß¤¯¤À¤µ¤¤ + +2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌ󤬡¢²¼µ­¤ËÄ󼨤µ¤ì¤Þ¤¹¡£ + +1. IBM ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï +2. IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï + +¥é¥¤¥»¥ó¥·¡¼¤¬À¸»ºÅª»ÈÍÑ (ɾ²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó°Ê³°) ¤òÌÜŪ¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤Î¤Þ¤Þ IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬É¾²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó (°Ê²¼¡Öɾ²Á¡×¤ÈÁí¾Î¤·¤Þ¤¹¡£) ¤òÌÜŪ¤È¤·¤Æ¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï (i) IBM¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (°Ê²¼¡Öɾ²Á¥é¥¤¥»¥ó¥¹¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó (ii) IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ë²¿¤éÊѹ¹¤ò²Ã¤¨¤ë¤³¤È¤Ê¤¯Æ±°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +ɾ²Á¥é¥¤¥»¥ó¥¹¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¡Öɾ²Á¡×¤Î´ü´ÖÃæÅ¬ÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬¡Öɾ²Á¡×¤Î¸å¡¢Ä´Ã£·ÀÌó¡ÊÎ㤨¤Ð¡¢IBM International Passport Advantage ¤Þ¤¿¤Ï IBM Passport Advantage Express »ÈÍѾò·ï¤Ê¤É¡Ë¤ò·ë¤Ö¤³¤È¤Ë¤è¤ê¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¤½¤Î¤Þ¤Þ»ÈÍѤ¹¤ë¤³¤È¤òÁªÂò¤µ¤ì¤ë¤È¡Ê¤Þ¤¿¤Ï¡Öɾ²Á¡×¸å¤Ë»ÈÍѤ¹¤ë¤¿¤á¡Ö¥×¥í¥°¥é¥à¡×¤òÄɲüèÆÀ¤µ¤ì¤ë¤È)¡¢IPLA ¤¬¼«Æ°Åª¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +ILAE ¤ª¤è¤Ó IPLA ¤ÏƱ»þ¤Ë¸úÎϤò»ý¤Ä¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¤¤º¤ì¤â¾Êý¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¤·¡¢¤½¤ì¤¾¤ì¸ß¤¤¤ËÆÈΩ¤·¤Æ¤¤¤Þ¤¹¡£ + +¤³¤Î 2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌó¤ÎÁ´Ê¸¤Ï¡¢°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (Z125-5543-05) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾ (¥×¥í¥°¥é¥àÈÖ¹æ): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +°Ê²¼¤Îɸ½à¾ò·ï¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +ɾ²Á´ü´Ö + +ɾ²Á´ü´Ö¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ëÆü¤Ë³«»Ï¤·¡¢³«»ÏÆü¤è¤ê 90 Æü¸å¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à + +ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢°Ê²¼¤ÇÆÃÄꤵ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¹½À®¤µ¤ì¤ëÊ£¿ô¤ÎÀ½ÉʤΥѥ屡¼¥¸¤È¤·¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ÎÈÏ°ÏÆâ¤Ç¡¢¤«¤ÄËܥ饤¥»¥ó¥¹¾ðÊó¤Ëµ­ºÜ¤µ¤ì¤¿¤È¤ª¤ê¡¢¤«¤«¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òƳÆþ¤·»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òÊ£¿ôÀ½Éʥѥ屡¼¥¸¤«¤éʬΥ¤·¤Æ°Üž¤Þ¤¿¤ÏºÆÈΤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ë¤Ï¡¢»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤é¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ óòó÷¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Î¾ò·ï¤¬¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѾò·ï¤è¤êÍ¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѸ¢¤¬½ªÎ»¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤·¡¢ÇË´þ¡¢¤Þ¤¿¤ÏĴ㸵¤ØÊֵѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ï¡¢Ä´Ã£¸µ¤ØÏ¢Íí¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¾åµ­À©¸Â¤¬¤Ê¤¤¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤Ë¤Ï¡¢IBM ±Ä¶ÈôÅö°÷¤Þ¤¿¤ÏĴ㸵¤ØÏ¢Íí¤·¡¢Å¬ÀڤʻÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤È¤È¤â¤Ë»ÈÍѵöÂú¤µ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¤¹¡£ +IBM MQ V9.0.3 + +³«È¯¼Ô¤ÎÀ©¸Â + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡Ö³«È¯¼ÔÍѡפȤ·¤Æ»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¼ÒÆâ³«È¯¤Î°ìÉô¤È¤·¤Æ¡¢¤ª¤è¤Ó³«È¯¼Ô¤Î¥Þ¥·¥ó¾å¤Ç¤Î¥æ¥Ë¥Ã¥È¡¦¥Æ¥¹¥È¤È¤·¤Æ¤Î¤ßŸ³«¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£³«È¯¼Ô¤Î¥Þ¥·¥ó¤È¤Ï¡¢ÆÃÄê¤Î 1 ¿Í¤Î³«È¯¼Ô¤Î¤ß¥¢¥¯¥»¥¹¤ª¤è¤Ó»ÈÍѲÄǽ¤Ê¡¢¥×¥é¥¤¥Þ¥ê¡¼¡¦¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤ª¤è¤Ó¡Ö¥×¥í¥°¥é¥à¡×¤ò²ÔƯ¤¹¤ëʪÍý¤Þ¤¿¤Ï²¾Áۥǥ¹¥¯¥È¥Ã¥×´Ä¶­¤Ç¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¡¢¼Âư¥ï¡¼¥¯¥í¡¼¥É¤Î½èÍý¡¢¼Âư¥ï¡¼¥¯¥í¡¼¥É¤Î¥·¥ß¥å¥ì¡¼¥È¡¢¤Þ¤¿¤Ï¤É¤Î¥³¡¼¥É¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Þ¤¿¤Ï¥·¥¹¥Æ¥à¤Î¥¹¥±¡¼¥é¥Ó¥ê¥Æ¥£¡¼¤Î¥Æ¥¹¥È¤Î¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Å¬ÀÚ¤ÊÀ¸»ºÅª»ÈÍѤΤ¿¤á¤Î»ÈÍѵöÂú¤ò¼èÆÀ¤¹¤ë¤³¤È¤Ê¤¯¡¢¾åµ­°Ê³°¤ÎÌÜŪ¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤Î¤¤¤º¤ì¤ÎÉôʬ¤â»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (Z125-3301-14) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾ (¥×¥í¥°¥é¥àÈÖ¹æ): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +°Ê²¼¤Îɸ½à¾ò·ï¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +»ÈÍÑÀ©¸ÂÉÕ¤­¸¢Íø + +IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¡¢¤ª¤è¤ÓËܡ֥饤¥»¥ó¥¹¾ðÊó¡×¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢIBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ëÀ©¸ÂÉÕ¤­¸¢Íø¤òÉÕÍ¿¤µ¤ì¤Þ¤¹¡£ ¤³¤Î¸¢Íø¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¥ê¥½¡¼¥¹¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖRVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÆÃÄê¤Î»ÈÍÑ¥ì¥Ù¥ë¤Ê¤É¡¢¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢ¥é¥¤¥»¥ó¥·¡¼¤¬»Ùʧ¤¦ÎÁ¶â¤Ë¤è¤êµö²Ä¤µ¤ì¤¿»ÈÍÑ¥ì¥Ù¥ë¤Ë¸ÂÄꤵ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѤϡ¢ÆÃÄê¤Îµ¡³£¡¢½¾¥×¥í¥°¥é¥à¤È¤·¤Æ¤Î¤ß¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÀ©Ìó»ö¹à¤ËÀ©¸Â¤µ¤ì¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¤¹¤Ù¤Æ¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î·ÐºÑŪ²ÁÃͤò»Ùʧ¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ÄɲÃÎÁ¶â¤ò»Ùʧ¤ï¤Ê¤¤¸Â¤ê¡¢Â¾¤Î¤¤¤«¤Ê¤ë»ÈÍѤâµö²Ä¤µ¤ì¤Þ¤»¤ó¡£ ¤µ¤é¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤È¤­¤ËŬÍѤµ¤ì¤ë»ÈÍѾò·ï¤ÇÌÀ¼¨¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Âè»°¼Ô¤ËÂФ·¾¦¶ÈÍÑ IT ¥µ¡¼¥Ó¥¹¤òÄ󶡤·¡¢¾¦¶ÈÍÑ¥Û¥¹¥Æ¥£¥ó¥°¡¢¤Þ¤¿¤Ï¥¿¥¤¥à¡¦¥·¥§¥¢¥ê¥ó¥°¤ÎÄó¶¡¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥µ¥Ö¥é¥¤¥»¥ó¥¹¡¢Ä¼ڡ¢¤¢¤ë¤¤¤Ï¥ê¡¼¥¹¤¹¤ë¤¿¤á¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ Äɲäθ¢Íø¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ëÄɲÃÎÁ¶â¤Î»Ùʧ¤¤¡¢¤â¤·¤¯¤ÏÊ̤ޤ¿¤ÏÊ䭤ξò·ï¤Ë´ð¤Å¤­ÍøÍѲÄǽ¤È¤Ê¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¤«¤«¤ëÄɲäθ¢Íø¤òÍøÍѤǤ­¤ë¤«·èÄꤹ¤ë¸¢¸Â¤òÍ­¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +»ÅÍÍ + +¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÅÍͤϡ¢¡Ö¥×¥í¥°¥é¥à¡×¤Îȯɽ¥ì¥¿¡¼¤Ë¶¦Ä̤Ρֵ»½Ñ¾ðÊó¡×¤Î¹à¤Ç³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à + +ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢°Ê²¼¤ÇÆÃÄꤵ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¹½À®¤µ¤ì¤ëÊ£¿ô¤ÎÀ½ÉʤΥѥ屡¼¥¸¤È¤·¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ÎÈÏ°ÏÆâ¤Ç¡¢¤«¤ÄËܥ饤¥»¥ó¥¹¾ðÊó¤Ëµ­ºÜ¤µ¤ì¤¿¤È¤ª¤ê¡¢¤«¤«¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òƳÆþ¤·»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òÊ£¿ôÀ½Éʥѥ屡¼¥¸¤«¤éʬΥ¤·¤Æ°Üž¤Þ¤¿¤ÏºÆÈΤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ë¤Ï¡¢»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤é¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ óòó÷¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Î¾ò·ï¤¬¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѾò·ï¤è¤êÍ¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѸ¢¤¬½ªÎ»¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤·¡¢ÇË´þ¡¢¤Þ¤¿¤ÏĴ㸵¤ØÊֵѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ï¡¢Ä´Ã£¸µ¤ØÏ¢Íí¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¾åµ­À©¸Â¤¬¤Ê¤¤¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤Ë¤Ï¡¢IBM ±Ä¶ÈôÅö°÷¤Þ¤¿¤ÏĴ㸵¤ØÏ¢Íí¤·¡¢Å¬ÀڤʻÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤È¤È¤â¤Ë»ÈÍѵöÂú¤µ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¤¹¡£ +IBM MQ V9.0.3 + +³«È¯¼Ô¤ÎÀ©¸Â + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡Ö³«È¯¼ÔÍѡפȤ·¤Æ»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¼ÒÆâ³«È¯¤Î°ìÉô¤È¤·¤Æ¡¢¤ª¤è¤Ó³«È¯¼Ô¤Î¥Þ¥·¥ó¾å¤Ç¤Î¥æ¥Ë¥Ã¥È¡¦¥Æ¥¹¥È¤È¤·¤Æ¤Î¤ßŸ³«¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£³«È¯¼Ô¤Î¥Þ¥·¥ó¤È¤Ï¡¢ÆÃÄê¤Î 1 ¿Í¤Î³«È¯¼Ô¤Î¤ß¥¢¥¯¥»¥¹¤ª¤è¤Ó»ÈÍѲÄǽ¤Ê¡¢¥×¥é¥¤¥Þ¥ê¡¼¡¦¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤ª¤è¤Ó¡Ö¥×¥í¥°¥é¥à¡×¤ò²ÔƯ¤¹¤ëʪÍý¤Þ¤¿¤Ï²¾Áۥǥ¹¥¯¥È¥Ã¥×´Ä¶­¤Ç¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¡¢¼Âư¥ï¡¼¥¯¥í¡¼¥É¤Î½èÍý¡¢¼Âư¥ï¡¼¥¯¥í¡¼¥É¤Î¥·¥ß¥å¥ì¡¼¥È¡¢¤Þ¤¿¤Ï¤É¤Î¥³¡¼¥É¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Þ¤¿¤Ï¥·¥¹¥Æ¥à¤Î¥¹¥±¡¼¥é¥Ó¥ê¥Æ¥£¡¼¤Î¥Æ¥¹¥È¤Î¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Å¬ÀÚ¤ÊÀ¸»ºÅª»ÈÍѤΤ¿¤á¤Î»ÈÍѵöÂú¤ò¼èÆÀ¤¹¤ë¤³¤È¤Ê¤¯¡¢¾åµ­°Ê³°¤ÎÌÜŪ¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤Î¤¤¤º¤ì¤ÎÉôʬ¤â»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +ɬÍפʻÈÍѸ¢¿ô¤Î»»Äê¤Ë¹Í褵¤ì¤Ê¤¤¥³¥ó¥Ý¡¼¥Í¥ó¥È + +¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Ë¡¢°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤϹÍ褵¤ì¤Þ¤»¤ó¡£¤¹¤Ê¤ï¤Á¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢»ÈÍѵöÂú¾ò·ï¤Ë´ð¤Å¤¤¤Æ°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òƳÆþ¤ª¤è¤Ó»ÈÍѤǤ­¤Þ¤¹¤¬¡¢¤½¤ì¤é¤¬¡Ö¥×¥í¥°¥é¥à¡×¤ËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Î¤¿¤á¤Ë¹Í褵¤ì¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Î»»Äêñ°Ì¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ + +¥¤¥ó¥¹¥È¡¼¥ë + +¥¤¥ó¥¹¥È¡¼¥ë¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£ ¥¤¥ó¥¹¥È¡¼¥ë¤È¤Ï¡¢¥³¥ó¥Ô¥å¡¼¥¿¡¼¾å¤Ç¤Î¼Â¹Ô¤Ë»ÈÍѲÄǽ¤ÊʪÍý¥Ç¥£¥¹¥¯¤Þ¤¿¤Ï²¾Áۥǥ£¥¹¥¯¾å¤ËƳÆþ¤µ¤ì¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î¥³¥Ô¡¼¤ò¤¤¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥¤¥ó¥¹¥È¡¼¥ë¤´¤È¤Ë¡¢»ÈÍѸ¢¤ò¼èÆÀ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +½ÅÍפǤ¹: Ãí°Õ¤·¤Æ¤ªÆÉ¤ß¤¯¤À¤µ¤¤ + +2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌ󤬡¢²¼µ­¤ËÄ󼨤µ¤ì¤Þ¤¹¡£ + +1. IBM ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï +2. IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï + +¥é¥¤¥»¥ó¥·¡¼¤¬À¸»ºÅª»ÈÍÑ (ɾ²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó°Ê³°) ¤òÌÜŪ¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤Î¤Þ¤Þ IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬É¾²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó (°Ê²¼¡Öɾ²Á¡×¤ÈÁí¾Î¤·¤Þ¤¹¡£) ¤òÌÜŪ¤È¤·¤Æ¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï (i) IBM¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (°Ê²¼¡Öɾ²Á¥é¥¤¥»¥ó¥¹¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó (ii) IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ë²¿¤éÊѹ¹¤ò²Ã¤¨¤ë¤³¤È¤Ê¤¯Æ±°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +ɾ²Á¥é¥¤¥»¥ó¥¹¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¡Öɾ²Á¡×¤Î´ü´ÖÃæÅ¬ÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬¡Öɾ²Á¡×¤Î¸å¡¢Ä´Ã£·ÀÌó¡ÊÎ㤨¤Ð¡¢IBM International Passport Advantage ¤Þ¤¿¤Ï IBM Passport Advantage Express »ÈÍѾò·ï¤Ê¤É¡Ë¤ò·ë¤Ö¤³¤È¤Ë¤è¤ê¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¤½¤Î¤Þ¤Þ»ÈÍѤ¹¤ë¤³¤È¤òÁªÂò¤µ¤ì¤ë¤È¡Ê¤Þ¤¿¤Ï¡Öɾ²Á¡×¸å¤Ë»ÈÍѤ¹¤ë¤¿¤á¡Ö¥×¥í¥°¥é¥à¡×¤òÄɲüèÆÀ¤µ¤ì¤ë¤È)¡¢IPLA ¤¬¼«Æ°Åª¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +ILAE ¤ª¤è¤Ó IPLA ¤ÏƱ»þ¤Ë¸úÎϤò»ý¤Ä¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¤¤º¤ì¤â¾Êý¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¤·¡¢¤½¤ì¤¾¤ì¸ß¤¤¤ËÆÈΩ¤·¤Æ¤¤¤Þ¤¹¡£ + +¤³¤Î 2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌó¤ÎÁ´Ê¸¤Ï¡¢°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (Z125-5543-05) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾: IBM MQ Managed File Transfer Service V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: Evaluation + +¥×¥í¥°¥é¥à̾: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: Evaluation + +¥×¥í¥°¥é¥à̾: IBM MQ Managed File Transfer Agent V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: Evaluation + +ɾ²Á´ü´Ö + +ɾ²Á´ü´Ö¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ëÆü¤Ë³«»Ï¤·¡¢³«»ÏÆü¤è¤ê 90 Æü¸å¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (Z125-3301-14) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾: IBM MQ Managed File Transfer Service V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: 5724-H72 + +¥×¥í¥°¥é¥à̾: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: 5724-H72 + +¥×¥í¥°¥é¥à̾: IBM MQ Managed File Transfer Agent V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: 5724-H72 + +IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¡¢¤ª¤è¤ÓËܡ֥饤¥»¥ó¥¹¾ðÊó¡×¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢIBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ëÀ©¸ÂÉÕ¤­¸¢Íø¤òÉÕÍ¿¤µ¤ì¤Þ¤¹¡£ ¤³¤Î¸¢Íø¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¥ê¥½¡¼¥¹¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖRVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÆÃÄê¤Î»ÈÍÑ¥ì¥Ù¥ë¤Ê¤É¡¢¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢ¥é¥¤¥»¥ó¥·¡¼¤¬»Ùʧ¤¦ÎÁ¶â¤Ë¤è¤êµö²Ä¤µ¤ì¤¿»ÈÍÑ¥ì¥Ù¥ë¤Ë¸ÂÄꤵ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѤϡ¢ÆÃÄê¤Îµ¡³£¡¢½¾¥×¥í¥°¥é¥à¤È¤·¤Æ¤Î¤ß¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÀ©Ìó»ö¹à¤ËÀ©¸Â¤µ¤ì¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¤¹¤Ù¤Æ¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î·ÐºÑŪ²ÁÃͤò»Ùʧ¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ÄɲÃÎÁ¶â¤ò»Ùʧ¤ï¤Ê¤¤¸Â¤ê¡¢Â¾¤Î¤¤¤«¤Ê¤ë»ÈÍѤâµö²Ä¤µ¤ì¤Þ¤»¤ó¡£ ¤µ¤é¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤È¤­¤ËŬÍѤµ¤ì¤ë»ÈÍѾò·ï¤ÇÌÀ¼¨¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Âè»°¼Ô¤ËÂФ·¾¦¶ÈÍÑ IT ¥µ¡¼¥Ó¥¹¤òÄ󶡤·¡¢¾¦¶ÈÍÑ¥Û¥¹¥Æ¥£¥ó¥°¡¢¤Þ¤¿¤Ï¥¿¥¤¥à¡¦¥·¥§¥¢¥ê¥ó¥°¤ÎÄó¶¡¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥µ¥Ö¥é¥¤¥»¥ó¥¹¡¢Ä¼ڡ¢¤¢¤ë¤¤¤Ï¥ê¡¼¥¹¤¹¤ë¤¿¤á¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ Äɲäθ¢Íø¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ëÄɲÃÎÁ¶â¤Î»Ùʧ¤¤¡¢¤â¤·¤¯¤ÏÊ̤ޤ¿¤ÏÊ䭤ξò·ï¤Ë´ð¤Å¤­ÍøÍѲÄǽ¤È¤Ê¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¤«¤«¤ëÄɲäθ¢Íø¤òÍøÍѤǤ­¤ë¤«·èÄꤹ¤ë¸¢¸Â¤òÍ­¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÅÍͤϡ¢¡Ö¥×¥í¥°¥é¥à¡×¤Îȯɽ¥ì¥¿¡¼¤Ë¶¦Ä̤Ρֵ»½Ñ¾ðÊó¡×¤Î¹à¤Ç³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +ºÆÇÛÉÛ²Äǽʪ¡¡ + +ºÆÇÛÉÛ²Äǽ¤Ê¥³¥ó¥Ý¡¼¥Í¥ó¥È¤¬¡Ö¥×¥í¥°¥é¥à¡×¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¤½¤ì¤é¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ËÉտ魯¤ë REDIST.TXT ¥Õ¥¡¥¤¥ë¤Ç»ØÄꤵ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤ÇÉÕÍ¿¤µ¤ì¤ë»ÈÍѵöÂú¸¢¤Ë²Ã¤¨¡¢°Ê²¼¤Î¾ò·ï¤ò½å¼é¤¹¤ë¤³¤È¤ò¾ò·ï¤Ë¡¢ºÆÇÛÉÛ²Äǽʪ¤òÇÛÉÛ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +1) ºÆÇÛÉÛ²Äǽ¤ÊÂоݤϥª¥Ö¥¸¥§¥¯¥È¡¦¥³¡¼¥É·Á¼°¤Ë¸Â¤ë¤â¤Î¤È¤·¡¢¤«¤Ä¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ËÉÕ°¤¹¤ë REDIST.TXT ¤Þ¤¿¤Ï»ñÎÁ¤Ëµ­ºÜ¤Î¤¹¤Ù¤Æ¤Î»Ø¼¨¡¢ÀâÌÀ¤ª¤è¤Ó»ÅÍͤ˽àµò¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ +2) ¡Ö¥×¥í¥°¥é¥à¡×¤ËÉÕ°¤¹¤ë»ñÎÁ¤ÇºÆÇÛÉÛ²Äǽʪ¤ÎÊѹ¹¤òÌÀ¼¨Åª¤Ëµö²Ä¤·¤Æ¤¤¤ë¾ì¹ç¡¢¤«¤«¤ëÊѹ¹¤ÏÅö³º»ñÎÁ¤Ëµ­ºÜ¤Î¤¹¤Ù¤Æ¤Î»Ø¼¨¡¢ÀâÌÀ¤ª¤è¤Ó»ÅÍͤ˽àµò¤¹¤ë¤â¤Î¤È¤·¡¢Êѹ¹¤ò¹Ô¤Ã¤¿¾ì¹ç¤Ï¡¢¤½¤ÎÊѹ¹ÆâÍÆ¤âºÆÇÛÉÛ²Äǽʪ¤È¤·¤Æ°·¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ +3) ºÆÇÛÉÛ²Äǽʪ¤ÎÇÛÉۤϡ¢¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ·¤Æ³«È¯¤·¤¿¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó (°Ê²¼¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤È¤¤¤¤¤Þ¤¹¡£ ) ¤Î°ìÉô¤È¤·¤Æ¡¢¤«¤Ä¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤Î»ÈÍѤ˴ØÏ¢¤·¤Æ¥é¥¤¥»¥ó¥·¡¼¤Î¸ÜµÒ¤ò»Ù±ç¤¹¤ëÌÜŪ¤Ë¸Â¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¸ÜµÒ¤¬¥é¥¤¥»¥ó¥·¡¼¤Î¥½¥Õ¥È¥¦¥§¥¢À½Éʤò¼èÆÀ¤¹¤ëÂ礭¤ÊÍýͳ¤¬¡ÖºÆÇÛÉÛ²Äǽʪ¡×¤Î¼èÆÀ¤Ç¤Ï¤Ê¤¯¤«¤«¤ë¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¼èÆÀ¤Ë¤Ê¤ë¤è¤¦¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËÂ礭¤Ê²ÁÃͤò»ý¤¿¤»¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ +4) ºÆÇÛÉÛ²Äǽʪ¤Ë Java ¥é¥ó¥¿¥¤¥à´Ä¶­¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤Ë Java °Ê³°¤Î¾¤ÎºÆÇÛÉÛ²Äǽʪ¤â´Þ¤á¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¤¿¤À¤·¡¢¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤¬¡¢·ÈÂÓÍѤ䤽¤Î¾¤Î¥Ñ¡¼¥Ù¥¤¥·¥Ö¡¦¥Ç¥Ð¥¤¥¹ (¥Þ¥¤¥¯¥í¥×¥í¥»¥Ã¥µ¡¼¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤¬¡¢¥³¥ó¥Ô¥å¡¼¥Æ¥£¥ó¥°¤¬¼çÌÜŪ¤Ç¤Ê¤¤¥Ç¥Ð¥¤¥¹) ¤Ç¤Ï¤Ê¤¯¡¢ÈÆÍÑ¥³¥ó¥Ô¥å¡¼¥¿¡¼¡¦¥Ç¥Ð¥¤¥¹¡ÊÎ㤨¤Ð¥é¥Ã¥×¥È¥Ã¥×¡¢¥Ç¥¹¥¯¥È¥Ã¥×¡¢¥µ¡¼¥Ð¡¼¤Ê¤É¡Ë¾å¤Ç¤Î¤ß²ÔƯ¤¹¤ë¤è¤¦¤ËÀ߷פµ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¤Þ¤¹¡£ +5) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ºÆÇÛÉÛ²Äǽʪ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¤Þ¤¿¤ÏÃí°Õ½ñ¤­¥Õ¥¡¥¤¥ë¤Î½üµî¤Ï¤Ç¤­¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ +6) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤Î»ÈÍѤޤ¿¤ÏÇÛÉۤ˵¯°ø¤¹¤ëÂè»°¼Ô¤«¤é¤Î¤¤¤«¤Ê¤ëÀÁµá¤Ë¤Ä¤¤¤Æ¤â¡¢IBM¡¢IBM ¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ï¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¡¼¤òÌÈÀÕ¤«¤ÄËɸ椷¡¢¤³¤ì¤é¤¬Èï¤ë¤¹¤Ù¤Æ¤Î»³²¤òÊä½þ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ +7) ¥é¥¤¥»¥ó¥·¡¼¤ÏºÆÇÛÉÛ²Äǽʪ¤Î¸¶ËÜ¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥â¥¸¥å¡¼¥ë¤ÈƱ°ì¤Î¥Ñ¥¹Ì¾¤ò»ÈÍѤǤ­¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ +8) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢IBM¡¢IBM ¤Î¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ï¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¡¼¤«¤é»öÁ°¤Ë½ñÌ̤ˤè¤ëƱ°Õ¤òÆÀ¤ë¤³¤È¤Ê¤¯¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ºîÀ®¤·¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÄ󶡤˺ݤ·¤Æ IBM¡¢IBM ¤Î¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ï¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¡¼¤Î̾¾Î¡¢¤Þ¤¿¤Ï¤³¤ì¤é¤¬ÊÝÍ­¤¹¤ë¾¦É¸¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ +9) IBM¡¢IBM ¤Î¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ï¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¿¡¼¤Ï¡¢ºÆÇÛÉÛ²Äǽʪ¤ª¤è¤Ó´ØÏ¢»ñÎÁ¤ò¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ +10) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ª¤è¤ÓºÆÇÛÉÛ²Äǽʪ¤Ë²Ã¤¨¤é¤ì¤¿Êѹ¹¤Ë´Ø¤·¡¢¤¹¤Ù¤Æ¤ÎÀÕǤ¤òÉ餦¤â¤Î¤È¤·¤Þ¤¹¡£ +11) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë´Ø¤·¡¢¤½¤Î¥¨¥ó¥É¡¦¥æ¡¼¥¶¡¼¤È¸ò¤ï¤¹»ÈÍѵöÂú·ÀÌó¤Ë¤ª¤¤¤Æ¡¢¼¡¤Î¤¹¤Ù¤Æ¤Î»ö¹à¤ò¥¨¥ó¥É¡¦¥æ¡¼¥¶¡¼¤ØÄÌÃΤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥¨¥ó¥É¡¦¥æ¡¼¥¶¡¼¤ÏºÆÇÛÉÛ²Äǽʪ¤Þ¤¿¤Ï¤½¤Î½¤ÀµÈǤò i) ¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òÍøÍѲÄǽ¤Ë¤¹¤ëÌÜŪ°Ê³°¤Ë»ÈÍѤǤ­¤Ê¤¤¤³¤È¡£ii) Ê£À½¤Ç¤­¤Ê¤¤¤³¤È¡£(¥Ð¥Ã¥¯¥¢¥Ã¥×ÍѤÎÊ£À½¤ò½ü¤­¤Þ¤¹¡£) iii) ¥é¥¤¥»¥ó¥·¡¼¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÈʬΥ¤·¤ÆºÆÇÛÉÛ¤Þ¤¿¤Ï°Üž¤Ç¤­¤Ê¤¤¤³¤È¡£ iv) ·ÀÌó¾å¤Î¸¢Íø¤òÊü´þ¤¹¤ë¤³¤È̵¤¯¡¢Ë¡Î§¤Ë¤è¤Ã¤ÆÌÀ³Î¤Ëµö²Ä¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢µÕ¥¢¥»¥ó¥Ö¥ë¡¢µÕ¥³¥ó¥Ñ¥¤¥ë¡¢¤Þ¤¿¤Ï¤½¤Î¾Ëݰƹ԰ÙÅù (³Æ¹ñ¸ìÂбþÈǤκîÀ®¤ò´Þ¤ß¤Þ¤¹¡£) ¤¬¤Ç¤­¤Ê¤¤¤³¤È¡£¤µ¤é¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѵöÂú·ÀÌó¤Ï¡¢¾¯¤Ê¤¯¤È¤âËÜ»ÈÍѾò·ï¤ÈÆ±ÄøÅÙ¤Ë IBM ¤òÊݸ¤ë¤â¤Î¤Ç¤¢¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥×¥í¥°¥é¥à¤Î REDIST.TXT ¥Õ¥¡¥¤¥ë¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ë¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¡×¤Ë¤Ä¤¤¤Æ¡¢ËÜ»ÈÍѵöÂú¤ª¤è¤Ó REDIST.TXT ¥Õ¥¡¥¤¥ë¤Î»Ø¼¨¤Ë½¾¤¦¤³¤È¤ò¾ò·ï¤Ë¡¢Åö³º¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¡×¤Î½¤ÀµÈǤòºÆÇÛÉÛ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¥¤¥ó¥¹¥È¡¼¥ë + +¥¤¥ó¥¹¥È¡¼¥ë¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£ ¥¤¥ó¥¹¥È¡¼¥ë¤È¤Ï¡¢¥³¥ó¥Ô¥å¡¼¥¿¡¼¾å¤Ç¤Î¼Â¹Ô¤Ë»ÈÍѲÄǽ¤ÊʪÍý¥Ç¥£¥¹¥¯¤Þ¤¿¤Ï²¾Áۥǥ£¥¹¥¯¾å¤ËƳÆþ¤µ¤ì¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î¥³¥Ô¡¼¤ò¤¤¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥¤¥ó¥¹¥È¡¼¥ë¤´¤È¤Ë¡¢»ÈÍѸ¢¤ò¼èÆÀ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (PVU) + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£ ɬÍ×¤Ê PVU ¿ô¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Æ¥¯¥Î¥í¥¸¡¼ (¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ù¥ó¥À¡¼¡¢¥Ö¥é¥ó¥É¡¢¥¿¥¤¥×¤ª¤è¤Ó¥â¥Ç¥ëÈÖ¹æ¤Ë¤è¤ê http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ¤Î PVU ¥Æ¡¼¥Ö¥ëÆâ¤ÇÄêµÁ¤µ¤ì¤Þ¤¹¡£) ¤ª¤è¤Ó¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¿ô¤Ë´ð¤Å¤¤¤Æ·è¤Þ¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢PVU ñ°Ì¤Ç¤Î»ÈÍѵöÂú¤ËºÝ¤·¡¢¥×¥í¥»¥Ã¥µ¡¼¤ò¥Á¥Ã¥×¾å¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ÈÄêµÁ¤·¤Þ¤¹¡£ Î㤨¤Ð¡¢¥Ç¥å¥¢¥ë¡¦¥³¥¢¡¦¥×¥í¥»¥Ã¥µ¡¼¡¦¥Á¥Ã¥×¤Ë¤Ï 2 ¤Ä¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤¬¤¢¤ê¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ñ¥¹¥Ý¡¼¥È¡¦¥¢¥É¥Ð¥ó¥Æ¡¼¥¸¡¡¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼»ÈÍѵöÂú¤Î¾ò·ï (²¼µ­Web¥Ú¡¼¥¸¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£) ¤Ë½¾¤Ã¤Æ¡¢¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤«¡¢¤Þ¤¿¤Ï²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼ (¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼) ¡¦¥é¥¤¥»¥ó¥¹¤Î¤¤¤º¤ì¤«¤ÎÊýË¡¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ëʪÍý¥Ï¡¼¥É¥¦¥§¥¢´Ä¶­¤Ë¤ª¤±¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢* ¤òÂоݤȤ·¤Æ PVU »ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¤¿¤À¤·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬±Ê³Ū¤Ë½üµî¤µ¤ì¤¿¥µ¡¼¥Ð¡¼¤ò½ü¤­¤Þ¤¹¡£ ²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢²¼µ­¤ÎURL¤Ç»²¾È²Äǽ¤Ê²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤Î·×»»¥ë¡¼¥ë¤Ë½¾¤Ã¤ÆÄêµÁ¤µ¤ì¤¿¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤òÂоݤȤ¹¤ë»ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html + +*³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤È¤Ï¡¢ÊªÍý¤Þ¤¿¤Ï²¾ÁÛ¥µ¡¼¥Ð¡¼¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ò¤¤¤¤¤Þ¤¹¡£ ²¾ÁÛ²½¥Æ¥¯¥Î¥í¥¸¡¼¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Î¥³¥Þ¥ó¥É¡¢BIOS ÀßÄê¡¢¤Þ¤¿¤ÏƱÅù¤ÎÀ©¸Â¤Ë¤è¤ë¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Î¥­¥ã¥Ñ¥·¥Æ¥£¡¼À©¸Â¤Î̵ͭ¡¢¤Þ¤¿¤ÏÀ©¸Â¤¹¤ë¤³¤È¤Î²ÄÈݤòÌ䤤¤Þ¤»¤ó¡£ + +ÆÃµ­»ö¹à + +¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À® + +Ëܹà¤ÎÌÜŪ¤Ë¤ª¤¤¤Æ¡¢¡Ö¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡×¹½À®¤È¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤¬¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥½¥ê¥å¡¼¥·¥ç¥ó¤Î°ìÉô¤ò·ÁÀ®¤¹¤ë¥µ¡¼¥Ð¡¼¾å¤ËƳÆþ¤µ¤ì¤ë¤â¤Î¤Ç¤¢¤ê¡¢¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¾å¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤¬»ÈÍÑÄä»ß¤È¤Ê¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤¹¤ë¥µ¡¼¥Ð¡¼¤Ç¤¹¡£¥µ¡¼¥Ð¡¼¤Ï¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤¬È¯À¸¤¹¤ë¤Þ¤Ç¤Ë¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¡¦¥·¥Ê¥ê¥ª¤ò»Ù±ç¤¹¤ë´ÉÍý³èư¤Î¤ß¤Ë»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥¢¥¤¥É¥ë¡×¤È¤·¤Æ¤Î¤ß¸«¤Ê¤µ¤ì¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢Å¬ÀڤʻÈÍѵöÂú¤òÆÀ¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¾å¤ËƳÆþ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡¢¥Þ¥ë¥Á¡¦¥¤¥ó¥¹¥¿¥ó¥¹¡¦¥­¥å¡¼¡¦¥Þ¥Í¡¼¥¸¥ã¡¼µ¡Ç½¤È¶¦¤Ë¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À®Æâ¤Ç»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤Ï¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×ÌÜŪ¤È¤·¤Æ¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¾å¤Ë¸ºß¤·¡¢³«»Ï¤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¡Ö¥¢¥¤¥É¥ë¡×¤Î¤Þ¤Þ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¤¬¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¤Ë¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤·¤Ê¤¤¸Â¤ê¡¢¤¤¤«¤Ê¤ëÀ¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤º¡¢¤«¤«¤ë¾ì¹ç¤Ï¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¤ÎÊ£À½¤ò¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤Î´Ö¡¢À¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡¢Â¾¤Î¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥·¥¹¥Æ¥à¤È¶¦¤Ë¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À®Æâ¤Ç»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤Ï¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×ÌÜŪ¤È¤·¤Æ¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¾å¤Ë¸ºß¤·¤Æ¤â³«»Ï¤·¤Ê¤¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤¬¡¢(½¾¤Ã¤Æ¡¢¤¤¤«¤Ê¤ëÀ¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£) ¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¤¬µ¡Ç½¤·¤Ê¤¤¾ì¹ç¡¢¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ë¤è¤ê¼«Æ°Åª¤Ë³«»Ï¤·¡¢¤«¤«¤ë¾ì¹ç¤Ï¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¤ÎÊ£À½¤ò¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤Î´Ö¡¢À¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +½ÅÍפǤ¹: Ãí°Õ¤·¤Æ¤ªÆÉ¤ß¤¯¤À¤µ¤¤ + +2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌ󤬡¢²¼µ­¤ËÄ󼨤µ¤ì¤Þ¤¹¡£ + +1. IBM ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï +2. IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï + +¥é¥¤¥»¥ó¥·¡¼¤¬À¸»ºÅª»ÈÍÑ (ɾ²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó°Ê³°) ¤òÌÜŪ¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤Î¤Þ¤Þ IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬É¾²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó (°Ê²¼¡Öɾ²Á¡×¤ÈÁí¾Î¤·¤Þ¤¹¡£) ¤òÌÜŪ¤È¤·¤Æ¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï (i) IBM¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (°Ê²¼¡Öɾ²Á¥é¥¤¥»¥ó¥¹¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó (ii) IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ë²¿¤éÊѹ¹¤ò²Ã¤¨¤ë¤³¤È¤Ê¤¯Æ±°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +ɾ²Á¥é¥¤¥»¥ó¥¹¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¡Öɾ²Á¡×¤Î´ü´ÖÃæÅ¬ÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬¡Öɾ²Á¡×¤Î¸å¡¢Ä´Ã£·ÀÌó¡ÊÎ㤨¤Ð¡¢IBM International Passport Advantage ¤Þ¤¿¤Ï IBM Passport Advantage Express »ÈÍѾò·ï¤Ê¤É¡Ë¤ò·ë¤Ö¤³¤È¤Ë¤è¤ê¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¤½¤Î¤Þ¤Þ»ÈÍѤ¹¤ë¤³¤È¤òÁªÂò¤µ¤ì¤ë¤È¡Ê¤Þ¤¿¤Ï¡Öɾ²Á¡×¸å¤Ë»ÈÍѤ¹¤ë¤¿¤á¡Ö¥×¥í¥°¥é¥à¡×¤òÄɲüèÆÀ¤µ¤ì¤ë¤È)¡¢IPLA ¤¬¼«Æ°Åª¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +ILAE ¤ª¤è¤Ó IPLA ¤ÏƱ»þ¤Ë¸úÎϤò»ý¤Ä¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¤¤º¤ì¤â¾Êý¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¤·¡¢¤½¤ì¤¾¤ì¸ß¤¤¤ËÆÈΩ¤·¤Æ¤¤¤Þ¤¹¡£ + +¤³¤Î 2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌó¤ÎÁ´Ê¸¤Ï¡¢°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (Z125-5543-05) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾: IBM MQ Advanced Message Security V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: Evaluation + +¥×¥í¥°¥é¥à̾: IBM MQ Advanced Message Security Idle Standby V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: Evaluation + +¥×¥í¥°¥é¥à̾: IBM MQ Telemetry V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: Evaluation + +ɾ²Á´ü´Ö + +ɾ²Á´ü´Ö¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ëÆü¤Ë³«»Ï¤·¡¢³«»ÏÆü¤è¤ê 90 Æü¸å¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + + + +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (Z125-3301-14) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾: IBM MQ Advanced Message Security V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: 5724-H72 + +¥×¥í¥°¥é¥à̾: IBM MQ Advanced Message Security Idle Standby V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: 5724-H72 + +¥×¥í¥°¥é¥à̾: IBM MQ Telemetry V9.0.1 +¥×¥í¥°¥é¥àÈÖ¹æ: 5724-H72 + +IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¡¢¤ª¤è¤ÓËܡ֥饤¥»¥ó¥¹¾ðÊó¡×¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢIBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ëÀ©¸ÂÉÕ¤­¸¢Íø¤òÉÕÍ¿¤µ¤ì¤Þ¤¹¡£ ¤³¤Î¸¢Íø¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¥ê¥½¡¼¥¹¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖRVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÆÃÄê¤Î»ÈÍÑ¥ì¥Ù¥ë¤Ê¤É¡¢¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ëÄ̤ꡢ¥é¥¤¥»¥ó¥·¡¼¤¬»Ùʧ¤¦ÎÁ¶â¤Ë¤è¤êµö²Ä¤µ¤ì¤¿»ÈÍÑ¥ì¥Ù¥ë¤Ë¸ÂÄꤵ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѤϡ¢ÆÃÄê¤Îµ¡³£¡¢½¾¥×¥í¥°¥é¥à¤È¤·¤Æ¤Î¤ß¡¢¤Þ¤¿¤Ï¤½¤Î¾¤ÎÀ©Ìó»ö¹à¤ËÀ©¸Â¤µ¤ì¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¤¹¤Ù¤Æ¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î·ÐºÑŪ²ÁÃͤò»Ùʧ¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ÄɲÃÎÁ¶â¤ò»Ùʧ¤ï¤Ê¤¤¸Â¤ê¡¢Â¾¤Î¤¤¤«¤Ê¤ë»ÈÍѤâµö²Ä¤µ¤ì¤Þ¤»¤ó¡£ ¤µ¤é¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤È¤­¤ËŬÍѤµ¤ì¤ë»ÈÍѾò·ï¤ÇÌÀ¼¨¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Âè»°¼Ô¤ËÂФ·¾¦¶ÈÍÑ IT ¥µ¡¼¥Ó¥¹¤òÄ󶡤·¡¢¾¦¶ÈÍÑ¥Û¥¹¥Æ¥£¥ó¥°¡¢¤Þ¤¿¤Ï¥¿¥¤¥à¡¦¥·¥§¥¢¥ê¥ó¥°¤ÎÄó¶¡¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥µ¥Ö¥é¥¤¥»¥ó¥¹¡¢Ä¼ڡ¢¤¢¤ë¤¤¤Ï¥ê¡¼¥¹¤¹¤ë¤¿¤á¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ Äɲäθ¢Íø¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ëÄɲÃÎÁ¶â¤Î»Ùʧ¤¤¡¢¤â¤·¤¯¤ÏÊ̤ޤ¿¤ÏÊ䭤ξò·ï¤Ë´ð¤Å¤­ÍøÍѲÄǽ¤È¤Ê¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬¤«¤«¤ëÄɲäθ¢Íø¤òÍøÍѤǤ­¤ë¤«·èÄꤹ¤ë¸¢¸Â¤òÍ­¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÅÍͤϡ¢¡Ö¥×¥í¥°¥é¥à¡×¤Îȯɽ¥ì¥¿¡¼¤Ë¶¦Ä̤Ρֵ»½Ñ¾ðÊó¡×¤Î¹à¤Ç³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥¤¥ó¥¹¥È¡¼¥ë + +¥¤¥ó¥¹¥È¡¼¥ë¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£ ¥¤¥ó¥¹¥È¡¼¥ë¤È¤Ï¡¢¥³¥ó¥Ô¥å¡¼¥¿¡¼¾å¤Ç¤Î¼Â¹Ô¤Ë»ÈÍѲÄǽ¤ÊʪÍý¥Ç¥£¥¹¥¯¤Þ¤¿¤Ï²¾Áۥǥ£¥¹¥¯¾å¤ËƳÆþ¤µ¤ì¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î¥³¥Ô¡¼¤ò¤¤¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥¤¥ó¥¹¥È¡¼¥ë¤´¤È¤Ë¡¢»ÈÍѸ¢¤ò¼èÆÀ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (PVU) + +¥×¥í¥»¥Ã¥µ¡¼ Value Unit (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѵöÂú¤µ¤ì¤ëºÝ¤Î»»Äêñ°Ì¤Ç¤¹¡£ ɬÍ×¤Ê PVU ¿ô¤Ï¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Æ¥¯¥Î¥í¥¸¡¼ (¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ù¥ó¥À¡¼¡¢¥Ö¥é¥ó¥É¡¢¥¿¥¤¥×¤ª¤è¤Ó¥â¥Ç¥ëÈÖ¹æ¤Ë¤è¤ê http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ¤Î PVU ¥Æ¡¼¥Ö¥ëÆâ¤ÇÄêµÁ¤µ¤ì¤Þ¤¹¡£) ¤ª¤è¤Ó¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¿ô¤Ë´ð¤Å¤¤¤Æ·è¤Þ¤ê¤Þ¤¹¡£ IBM ¤Ï¡¢PVU ñ°Ì¤Ç¤Î»ÈÍѵöÂú¤ËºÝ¤·¡¢¥×¥í¥»¥Ã¥µ¡¼¤ò¥Á¥Ã¥×¾å¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ÈÄêµÁ¤·¤Þ¤¹¡£ Î㤨¤Ð¡¢¥Ç¥å¥¢¥ë¡¦¥³¥¢¡¦¥×¥í¥»¥Ã¥µ¡¼¡¦¥Á¥Ã¥×¤Ë¤Ï 2 ¤Ä¤Î¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤¬¤¢¤ê¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ñ¥¹¥Ý¡¼¥È¡¦¥¢¥É¥Ð¥ó¥Æ¡¼¥¸¡¡¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼»ÈÍѵöÂú¤Î¾ò·ï (²¼µ­Web¥Ú¡¼¥¸¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£) ¤Ë½¾¤Ã¤Æ¡¢¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤«¡¢¤Þ¤¿¤Ï²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼ (¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼) ¡¦¥é¥¤¥»¥ó¥¹¤Î¤¤¤º¤ì¤«¤ÎÊýË¡¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥Õ¥ë¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ëʪÍý¥Ï¡¼¥É¥¦¥§¥¢´Ä¶­¤Ë¤ª¤±¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢* ¤òÂоݤȤ·¤Æ PVU »ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¤¿¤À¤·¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬±Ê³Ū¤Ë½üµî¤µ¤ì¤¿¥µ¡¼¥Ð¡¼¤ò½ü¤­¤Þ¤¹¡£ ²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢²¼µ­¤ÎURL¤Ç»²¾È²Äǽ¤Ê²¾ÁÛ²½¥­¥ã¥Ñ¥·¥Æ¥£¡¼¡¦¥é¥¤¥»¥ó¥¹¤Î·×»»¥ë¡¼¥ë¤Ë½¾¤Ã¤ÆÄêµÁ¤µ¤ì¤¿¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Ç»ÈÍѲÄǽ¤Ê¡¢¤Þ¤¿¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤¬´ÉÍý¤¹¤ë¤¹¤Ù¤Æ¤Î³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤òÂоݤȤ¹¤ë»ÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html + +*³èư²½¤µ¤ì¤¿¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤È¤Ï¡¢ÊªÍý¤Þ¤¿¤Ï²¾ÁÛ¥µ¡¼¥Ð¡¼¤Ç»ÈÍѲÄǽ¤Ê¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤ò¤¤¤¤¤Þ¤¹¡£ ²¾ÁÛ²½¥Æ¥¯¥Î¥í¥¸¡¼¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Î¥³¥Þ¥ó¥É¡¢BIOS ÀßÄê¡¢¤Þ¤¿¤ÏƱÅù¤ÎÀ©¸Â¤Ë¤è¤ë¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥³¥¢¤Î¥­¥ã¥Ñ¥·¥Æ¥£¡¼À©¸Â¤Î̵ͭ¡¢¤Þ¤¿¤ÏÀ©¸Â¤¹¤ë¤³¤È¤Î²ÄÈݤòÌ䤤¤Þ¤»¤ó¡£ + +ÆÃµ­»ö¹à + +¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À® + +Ëܹà¤ÎÌÜŪ¤Ë¤ª¤¤¤Æ¡¢¡Ö¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡×¹½À®¤È¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤¬¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥½¥ê¥å¡¼¥·¥ç¥ó¤Î°ìÉô¤ò·ÁÀ®¤¹¤ë¥µ¡¼¥Ð¡¼¾å¤ËƳÆþ¤µ¤ì¤ë¤â¤Î¤Ç¤¢¤ê¡¢¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¾å¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤¬»ÈÍÑÄä»ß¤È¤Ê¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤¬¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤¹¤ë¥µ¡¼¥Ð¡¼¤Ç¤¹¡£¥µ¡¼¥Ð¡¼¤Ï¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤¬È¯À¸¤¹¤ë¤Þ¤Ç¤Ë¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¡¦¥·¥Ê¥ê¥ª¤ò»Ù±ç¤¹¤ë´ÉÍý³èư¤Î¤ß¤Ë»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥¢¥¤¥É¥ë¡×¤È¤·¤Æ¤Î¤ß¸«¤Ê¤µ¤ì¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢Å¬ÀڤʻÈÍѵöÂú¤òÆÀ¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¾å¤ËƳÆþ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡¢¥Þ¥ë¥Á¡¦¥¤¥ó¥¹¥¿¥ó¥¹¡¦¥­¥å¡¼¡¦¥Þ¥Í¡¼¥¸¥ã¡¼µ¡Ç½¤È¶¦¤Ë¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À®Æâ¤Ç»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤Ï¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×ÌÜŪ¤È¤·¤Æ¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¾å¤Ë¸ºß¤·¡¢³«»Ï¤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¡Ö¥¢¥¤¥É¥ë¡×¤Î¤Þ¤Þ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¤¬¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¤Ë¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤·¤Ê¤¤¸Â¤ê¡¢¤¤¤«¤Ê¤ëÀ¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤º¡¢¤«¤«¤ë¾ì¹ç¤Ï¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¤ÎÊ£À½¤ò¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤Î´Ö¡¢À¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡¢Â¾¤Î¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥·¥¹¥Æ¥à¤È¶¦¤Ë¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¹½À®Æâ¤Ç»ÈÍѤµ¤ì¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ÎÊ£À½¤Ï¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×ÌÜŪ¤È¤·¤Æ¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¡¦¥µ¡¼¥Ð¡¼¾å¤Ë¸ºß¤·¤Æ¤â³«»Ï¤·¤Ê¤¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤¬¡¢(½¾¤Ã¤Æ¡¢¤¤¤«¤Ê¤ëÀ¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£) ¥¢¥¯¥Æ¥£¥Ö¡¦¥µ¡¼¥Ð¡¼¤¬µ¡Ç½¤·¤Ê¤¤¾ì¹ç¡¢¥Ï¥¤¡¦¥¢¥Ù¥¤¥é¥Ó¥ê¥Æ¥£¡¼¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Ë¤è¤ê¼«Æ°Åª¤Ë³«»Ï¤·¡¢¤«¤«¤ë¾ì¹ç¤Ï¥¢¥¤¥É¥ë¡¦¥¹¥¿¥ó¥Ð¥¤¤ÎÊ£À½¤ò¡¢¥Õ¥§¥¤¥ë¥ª¡¼¥Ð¡¼¤Î´Ö¡¢À¸»ºÅªºî¶È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +½ÅÍפǤ¹: Ãí°Õ¤·¤Æ¤ªÆÉ¤ß¤¯¤À¤µ¤¤¡£ + +2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌ󤬡¢²¼µ­¤ËÄ󼨤µ¤ì¤Þ¤¹¡£ + +1. IBM ¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï +2. IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï + +¥é¥¤¥»¥ó¥·¡¼¤¬À¸»ºÅª»ÈÍÑ (ɾ²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó°Ê³°) ¤òÌÜŪ¤Ë¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤Î¤Þ¤Þ IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬É¾²Á¡¢¥Æ¥¹¥È¡¢»î¹Ô¡¢¡Ö»î¹Ô¤Þ¤¿¤Ï¹ØÆþ¡×¤â¤·¤¯¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó (°Ê²¼¡Öɾ²Á¡×¤ÈÁí¾Î¤·¤Þ¤¹¡£) ¤òÌÜŪ¤È¤·¤Æ¡Ö¥×¥í¥°¥é¥à¡×¤ò¼èÆÀ¤¹¤ë¾ì¹ç¤Ï¡¢²¼µ­¤Î¡ÖƱ°Õ¤¹¤ë¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï (i) IBM¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï (°Ê²¼¡Öɾ²Á¥é¥¤¥»¥ó¥¹¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó (ii) IBM ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (°Ê²¼¡ÖIPLA¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Ë²¿¤éÊѹ¹¤ò²Ã¤¨¤ë¤³¤È¤Ê¤¯Æ±°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +ɾ²Á¥é¥¤¥»¥ó¥¹¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¡Öɾ²Á¡×¤Î´ü´ÖÃæÅ¬ÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬¡Öɾ²Á¡×¤Î¸å¡¢Ä´Ã£·ÀÌó¡ÊÎ㤨¤Ð¡¢IBM International Passport Advantage ¤Þ¤¿¤Ï IBM Passport Advantage Express »ÈÍѾò·ï¤Ê¤É¡Ë¤ò·ë¤Ö¤³¤È¤Ë¤è¤ê¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¤½¤Î¤Þ¤Þ»ÈÍѤ¹¤ë¤³¤È¤òÁªÂò¤µ¤ì¤ë¤È¡Ê¤Þ¤¿¤Ï¡Öɾ²Á¡×¸å¤Ë»ÈÍѤ¹¤ë¤¿¤á¡Ö¥×¥í¥°¥é¥à¡×¤òÄɲüèÆÀ¤µ¤ì¤ë¤È)¡¢IPLA ¤¬¼«Æ°Åª¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +ILAE ¤ª¤è¤Ó IPLA ¤ÏƱ»þ¤Ë¸úÎϤò»ý¤Ä¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¤¤º¤ì¤â¾Êý¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¤·¡¢¤½¤ì¤¾¤ì¸ß¤¤¤ËÆÈΩ¤·¤Æ¤¤¤Þ¤¹¡£ + +¤³¤Î 2 ¤Ä¤Î»ÈÍѵöÂú·ÀÌó¤ÎÁ´Ê¸¤Ï¡¢°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£ + + +¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï + +Âè 1 ¾Ï - ¶¦Ä̾ò¹à + +¤ªµÒÍͤ¬¥é¥¤¥»¥ó¥·¡¼¡Ê»ÈÍѵöÂú¤ò¼õ¤±¤¿¸Ä¿Í¡¢²ñ¼Ò¡¢¤½¤Î¾¤ÎË¡¿Í¡Ë¤È¤·¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¡¢Æ³Æþ¡¢Ê£À½¡¢¥¢¥¯¥»¥¹¡¢¡ÖƱ°Õ¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¡¢¤Þ¤¿¤Ï»ÈÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢ËÜ¡Ö¥×¥í¥°¥é¥àɾ²Á¤Î¤´»ÈÍѾò·ï¡×(°Ê²¼¡ÖËÜ»ÈÍѾò·ï¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ËƱ°Õ¤·¤¿¤â¤Î¤È¸«¤Ê¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¥é¥¤¥»¥ó¥·¡¼¤ÎÂå¹Ô¼Ô¤È¤·¤ÆËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¾ì¹ç¡¢¤ªµÒÍͤϡ¢¥é¥¤¥»¥ó¥·¡¼¤ËËÜ»ÈÍѾò·ï¤ò½å¼é¤µ¤»¤ëÁ´¸¢¸Â¤òÍ­¤·¤Æ¤¤¤ë¤³¤È¤òɽÌÀ¤ª¤è¤Ó Êݾڤ¤¤¿¤À¤¯¤â¤Î¤È¤·¤Þ¤¹¡£ ¤³¤Î»ÈÍѾò·ï¤ËƱ°Õ¤¤¤¿¤À¤±¤Ê¤¤¾ì¹ç¤Ï¡¢¤ªµÒÍÍ¤Ï + +* ËÜ·ï¥×¥í¥°¥é¥à¤Î¥À¥¦¥ó¥í¡¼¥É¡¢Æ³Æþ¡¢Ê£À½¡¢¥¢¥¯¥»¥¹¡¢¡ÖƱ°Õ¡×¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¡¢¤Þ¤¿¤Ï»ÈÍѤò¤¹¤ë¤³¤È¤Ê¤¯¡¢¤«¤Ä + +* ľ¤Á¤Ë̤»ÈÍѤε­Ï¿ÇÞÂΤª¤è¤Óʸ½ñ¤ò¤½¤ÎĴ㸵¤ËÊֵѤ·¤Æ¤¯¤À¤µ¤¤¡£ËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ë¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤òÇË´þ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +1. ÄêµÁ + +»ÈÍѵöÂúÈÏ°Ï - ¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤Þ¤¿¤Ï²ÔƯ¤¹¤ë¤³¤È¤òµöÂú¤µ¤ì¤¿ÆÃÄê¤ÎÈϰϤò¤¤¤¤¤Þ¤¹¡£¤«¤«¤ëÈϰϤϡ¢¥æ¡¼¥¶¡¼¤Î¿ô¡¢MSU (Millions of Service Units)¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¤Þ¤¿¤Ï IBM ¤¬ÆÃÄꤹ¤ë¤½¤Î¾¤Î»ÈÍѵöÂú¤ÎÈϰϤˤè¤êµ¬Äꤵ¤ì¤Þ¤¹¡£ + +IBM - International Business Machines Corporation ¤Þ¤¿¤Ï¤½¤Î»Ò²ñ¼Ò¤ò¤¤¤¤¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥¹¾ðÊó (°Ê²¼ ¡ÖLI¡×¤È¤¤¤¤¤Þ¤¹¡£) - ËÜ·ï¥×¥í¥°¥é¥à¤Ë¸ÇÍ­¤Î¾ðÊ󤪤è¤ÓÄɲþò·ï¤òÄ󶡤¹¤ëʸ¾Ï¤ò¤¤¤¤¤Þ¤¹¡£ ËÜ·ï¥×¥í¥°¥é¥à¤Î LI ¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼Æâ¤Ç (¥·¥¹¥Æ¥à¡¦¥³¥Þ¥ó¥É¤Ê¤É¤ò»ÈÍѤ·¤Æ³Îǧ¤·¤Þ¤¹¡£) ¤Þ¤¿¤ÏËÜ·ï¥×¥í¥°¥é¥à¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¾®ºý»Ò¤È¤·¤ÆÄ󶡤µ¤ì¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ + +ËÜ·ï¥×¥í¥°¥é¥à - ¸¶Ëܤª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª (Á´ÂÎÊ£À½¤«ÉôʬʣÀ½¤«¤òÌ䤤¤Þ¤»¤ó¡£) ¤ò´Þ¤á¤Æ¡¢¼¡¤Î¤â¤Î¤ò¤¤¤¤¤Þ¤¹¡£1) µ¡³£¤ÇÆÉ¤ß¼è¤ê¤¦¤ë·Á¤ÎÌ¿Îᤪ¤è¤Ó¥Ç¡¼¥¿¡¢2) ¤½¤Î¹½À®Í×ÁÇ¡¢¥Õ¥¡¥¤¥ë¤ª¤è¤Ó¥â¥¸¥å¡¼¥ë¡¢3) »ëİ³Ð¥³¥ó¥Æ¥ó¥Ä (¥¤¥á¡¼¥¸¡¢¥Æ¥­¥¹¥È¡¢Ï¿²»¡¢²èÁü¤Ê¤É)¡¢¤Ê¤é¤Ó¤Ë 4) ´ØÏ¢¤¹¤ë¥é¥¤¥»¥ó¥¹»ñÎÁ (¥­¡¼¤ª¤è¤ÓÉÕ°ʸ½ñ¤Ê¤É)¡£ + +2. »ÈÍѾò·ï¤Î¹½À® + +ËÜ»ÈÍѾò·ï¤Ï¡¢Âè 1 ¾Ï - ¶¦Ä̾ò¹à¡¢Âè 2 ¾Ï - ³Æ¹ñ¸ÇÍ­¤Î¾ò¹à (³ºÅö¤¹¤ë¾ì¹ç)¡¢¤ª¤è¤Ó LI ¤«¤é¹½À®¤µ¤ì¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѤ˴ؤ¹¤ë¥é¥¤¥»¥ó¥·¡¼¤È IBM ´Ö¤Î´°Á´¡¢Í£°ì¤Î¹ç°Õʸ½ñ¤Ç¤¢¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѤ˴ؤ¹¤ë¡¢¥é¥¤¥»¥ó¥·¡¼¤ª¤è¤Ó IBM ´Ö¤Î»öÁ°¤Î¸ýƬ¤Þ¤¿¤Ï½ñÌ̤ˤè¤ëÄÌÃÎÅù¤Î¤¹¤Ù¤Æ¤ËÂå¤ï¤ë¤â¤Î¤Ç¤¹¡£ Âè 2 ¾Ï¤Ë¡¢Âè 1 ¾Ï¤Î¾ò·ï¤ËÂФ¹¤ëÄɲþò·ï¤Þ¤¿¤ÏÊѹ¹¾ò·ï¤¬µ­ºÜ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£LI ¤ÈÂè 1 ¾Ï¤ª¤è¤ÓÂè 2 ¾Ï¤Ëóòó÷¤¬¤¢¤ë¾ì¹ç¡¢LI ¤¬Í¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +3. »ÈÍѸ¢¤ÎµöÂú + +ËÜ·ï¥×¥í¥°¥é¥à¤Ï IBM ¤Þ¤¿¤Ï IBM ¥µ¥×¥é¥¤¥ä¡¼¤¬½êÍ­¸¢¤òÍ­¤·¤Æ¤¤¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤Ï¡¢Ãøºî¸¢¤Ë¤è¤êÊݸ¤ì¤Æ¤ª¤ê¡¢»ÈÍѵöÂú¤µ¤ì¤ë¤â¤Î¤Ç¤¢¤Ã¤Æ¡¢ÇäÇã¤ÎÂоݤȤʤë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ + +IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¡¢¼¡¤Î»ö¹à¤ò¹Ô¤¦¤¿¤á¤ÎÈóÆÈÀêŪ¤«¤Ä¾ùÅÏÉÔǽ¤ÊÀ©¸ÂÉÕ¤­»ÈÍѸ¢¤òµöÂú¤·¤Þ¤¹¡£1) ¤ªµÒÍÍ¤Î¼ÒÆâɾ²Á¡¢¥Æ¥¹¥È¡¢¤Þ¤¿¤Ï¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó¤òÌÜŪ¤È¤·¤¿»îÍѤ˸¤ꡢLI ¤Çµ¬Äꤵ¤ì¤¿»ÈÍѵöÂúÈÏ°ÏÆâ¤Çɾ²Á´ü´ÖÃæ¤ËËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¡¢Æ³Æþ¡¢¤ª¤è¤Ó»ÈÍѤ¹¤ë¤³¤È¡¢2) ¤«¤«¤ë»ÈÍѵöÂúÈϰϤˤª¤¤¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ÎÊ£À½Êª¤òºîÀ®¤·Æ³Æþ¤¹¤ë¤³¤È¡¢¤ª¤è¤Ó 3) ¥Ð¥Ã¥¯¥¢¥Ã¥×¡¦¥³¥Ô¡¼¤òºîÀ®¤¹¤ë¤³¤È¡£¤¿¤À¤·¡¢¤³¤ì¤é¤Ï¡¢°Ê²¼¤Î¤¹¤Ù¤Æ¤Î¾ò·ï¤òËþ¤¿¤¹¾ì¹ç¤Ë¸Â¤ê¤Þ¤¹¡£ + +a. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¹çˡŪ¤ËËÜ·ï¥×¥í¥°¥é¥à¤ò¼èÆÀ¤·¡¢ËÜ»ÈÍѾò·ï¤Ë½¾¤Ã¤Æ»ÈÍѤ¹¤ë¤³¤È¡£ + +b. ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤·¤¿¾ì¹ç¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤Ç¤­¤Ê¤¤¾ì¹ç¤ò½ü¤­¡¢¤«¤«¤ë¥Ð¥Ã¥¯¥¢¥Ã¥×¡¦¥³¥Ô¡¼¤ò¼Â¹Ô¤·¤Ê¤¤¤³¤È¡£ + +c. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎÊ£À½Êª¤Ë¡¢Á´ÉôÊ£À½¤«ÉôʬʣÀ½¤«¤òÌä¤ï¤º¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤ÈƱ°ì¤ÎÃøºî¸¢É½¼¨¤ª¤è¤Ó¤½¤Î¾¤Î½êÍ­¸¢É½¼¨¤ò¹Ô¤Ê¤¦¤³¤È¡£ + +d. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎÊ£À½¤Îµ­Ï¿¤òÊݸ¡¦´ÉÍý¤·¡¢¤«¤Ä±ó³ÖÃϤ«¤é¤Î¥¢¥¯¥»¥¹¤ò´Þ¤á¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë²¿¿Í (¤Ê¤ó¤Ô¤È) ¤â¤¬¡¢1) ¥é¥¤¥»¥ó¥·¡¼¤Î¤¿¤á¤Ë¤Î¤ß»ÈÍѤ·¡¢¤«¤Ä 2) ËÜ»ÈÍѾò·ï¤ËÄê¤á¤ëµÁ̳¤ò½å¼é¤¹¤ë¤è¤¦¡¢Å¬ÀڤʽèÃÖ¤ò¹Ö¤¸¤ë¤³¤È¡£ + +e. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢1) ËÜ»ÈÍѾò·ï¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ·ï¥×¥í¥°¥é¥à¤òÀ¸»ºÅªÌÜŪ¤Þ¤¿¤Ï¾¤ÎÌÜŪ¤Ç»ÈÍÑ¡¢Ê£À½¡¢½¤Àµ¤â¤·¤¯¤ÏÇÛÉÛ¤·¤Ê¤¤¤³¤È¡¢2) ¶¯¹Ôµ¬Äê¤Î¤¢¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ·ï¥×¥í¥°¥é¥à¤òµÕ¥³¥ó¥Ñ¥¤¥ë¡¢µÕ¥¢¥»¥ó¥Ö¥ë¡¢¤½¤Î¾¤ÎÂÖÍͤÇËݰơ¢¤â¤·¤¯¤Ï¥ê¥Ð¡¼¥¹¡¦¥¨¥ó¥¸¥Ë¥¢¥ê¥ó¥°¤·¤Ê¤¤¤³¤È¡¢3) ËÜ·ï¥×¥í¥°¥é¥à¤Î¹½À®Í×ÁÇ¡¢¥Õ¥¡¥¤¥ë¡¢¥â¥¸¥å¡¼¥ë¡¢»ëİ³Ð¥³¥ó¥Æ¥ó¥Ä¤â¤·¤¯¤Ï´ØÏ¢¤¹¤ë¥é¥¤¥»¥ó¥¹»ñÎÁ¤òËÜ·ï¥×¥í¥°¥é¥à¤È¤ÏʬΥ¤·¤Æ»ÈÍѤ·¤Ê¤¤¤³¤È¡¢4) ËÜ·ï¥×¥í¥°¥é¥à¤òºÆ»ÈÍѵöÂú¡¢ÄÂÂߤ⤷¤¯¤ÏÂßÍ¿¡Ê¥ê¡¼¥¹¤ò´Þ¤ß¤Þ¤¹¡£¡Ë¤·¤Ê¤¤¤³¤È¡¢¤Þ¤¿¤Ï 5) ËÜ·ï¥×¥í¥°¥é¥à¤ò¾¦¶ÈŪ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡¦¥Û¥¹¥Æ¥£¥ó¥°¤ÎÌÜŪ¤Ç»ÈÍѤ·¤Ê¤¤¤³¤È¡£ + +f. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö½¾¥×¥í¥°¥é¥à¡×¡ÊËܹà¸åÃʤÇÄêµÁ¤µ¤ì¤Þ¤¹¡£¡Ë¤È¤·¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò¼èÆÀ¤¹¤ë¾ì¹ç¡¢¡Ö¼ç¥×¥í¥°¥é¥à¡×¡ÊËܹà¸åÃʤÇÄêµÁ¤µ¤ì¤Þ¤¹¡£¡Ë¤ò¥µ¥Ý¡¼¥È¤·¡¢¼ç¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢µ¬Äê¤Î¤¤¤«¤Ê¤ëÀ©¸Â¤Ë¤â½¾¤¦¤³¤È¤ò¾ò·ï¤Ë¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¼ç¥×¥í¥°¥é¥à¤È¤·¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò¼èÆÀ¤¹¤ë¾ì¹ç¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò¥µ¥Ý¡¼¥È¤·¡¢ËÜ»ÈÍѾò·ïÃæ¤Î¤¤¤«¤Ê¤ëÀ©¸Â¤Ë¤â½¾¤¦¤³¤È¤ò¾ò·ï¤Ë¡¢¤¹¤Ù¤Æ¤Î½¾¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ Ëܹà¡Öf¡×¤Ë¤ª¤¤¤Æ¡¢¡Ö½¾¥×¥í¥°¥é¥à¡×¤È¤Ï¡¢Ê̤ΠIBM ¥×¥í¥°¥é¥à (¡Ö¼ç¥×¥í¥°¥é¥à¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Î°ìÉô¤Ç¤¢¤ê¡¢Åö³º¥×¥í¥°¥é¥à¤Î LI¤Ë½¾¥×¥í¥°¥é¥à¤È¤·¤Æµ¬Äꤵ¤ì¤ëËÜ·ï¥×¥í¥°¥é¥à¤ò¤¤¤¤¤Þ¤¹¡£ (À©Ìó»ö¹à¤Î¤Ê¤¤½¾¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤òÊÌÅÓ¼èÆÀ¤¹¤ë¤Ë¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢½¾¥×¥í¥°¥é¥à¤ÎĴ㸵¤ËÏ¢Íí¤·¤Æ¤¯¤À¤µ¤¤¡£) + +ËÜ»ÈÍѾò·ï¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ºîÀ®¤¹¤ëËÜ·ï¥×¥í¥°¥é¥à¤Î³ÆÊ£À½Êª¤Ë¤âŬÍѤµ¤ì¤Þ¤¹¡£ + +3.1 ¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á + +¥é¥¤¥»¥ó¥·¡¼¤¬¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ¹¤ë¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á¤ò¼õÎΤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î LI ¤Çµ¬Äꤵ¤ì¡¢Åö³º¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á¤ËŬÍѤµ¤ì¤ë¤¹¤Ù¤Æ¤ÎÄɲþò¹à¤Þ¤¿¤Ï°Û¤Ê¤ë»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Äɲþò¹à¤Þ¤¿¤Ï°Û¤Ê¤ë»ÈÍѾò·ï¤¬Ä󶡤µ¤ì¤Ê¤¤¾ì¹ç¡¢¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á¤ÏËÜ»ÈÍѾò·ï¤Ë¤Î¤ß½¾¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤¬¹¹¿·¤Ë¤è¤êÃÖ¤­´¹¤¨¤é¤ì¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ÃÖ¤­´¹¤¨¤é¤ì¤¿ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +3.2 ´ü´Ö¤ª¤è¤Ó½ªÎ» + +ɾ²Á´ü´Ö¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤Î¾ò¹à¤ËƱ°Õ¤·¤¿Æü¤Ë³«»Ï¤·¡¢1) ´ü´Ö½ªÎ»Æü¡¢¤Þ¤¿¤Ï¥é¥¤¥»¥ó¥¹¾ðÊó¤â¤·¤¯¤ÏËܼè°ú¤Ë´Ø¤ï¤ëʸ½ñ¤Ç IBM ¤¬»ØÄꤹ¤ë´üÆü¡¢¤Þ¤¿¤Ï 2) ËÜ·ï¥×¥í¥°¥é¥à¤Î¼«Æ°»ÈÍÑÄä»ßÆü¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢É¾²Á´ü´Ö½ªÎ»Æü¤«¤é 10 Æü°ÊÆâ¤Ë¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤ÓËÜ·ï¥×¥í¥°¥é¥à¤«¤éºîÀ®¤·¤¿¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤òÇË´þ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£É¾²Á´ü´Ö¸å¤â¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤òÊÝ»ý¤·¤Æ¤è¤¤¤ÈIBM¤¬LI¤ËÌÀµ­¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ÊÝ»ý¤¹¤ë¤³¤È¤òÁªÂò¤·¤¿¾ì¹ç¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Ë¤Ï IBM ¤¬¥é¥¤¥»¥ó¥·¡¼¤ËÄ󶡤¹¤ë¾¤Î»ÈÍѾò·ï¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ ¤³¤Î¤È¤­¡¢ÎÁ¶â¤¬Å¬ÍѤµ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤Î¾ò¹à¤Ë°ãÈ¿¤·¤¿¾ì¹ç¡¢IBM ¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËÂФ¹¤ë»ÈÍѸ¢¤ò½ªÎ»¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¤¤¤º¤ì¤«¤ÎÅö»ö¼Ô¤¬¡¢Íýͳ¤Î¤¤¤«¤ó¤òÌä¤ï¤º»ÈÍѸ¢¤ò½ªÎ»¤¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Ä¾¤Á¤Ë»ÈÍѤòÃæ»ß¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Î½êÍ­¤¹¤ëËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤òÇË´þ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ËÜ»ÈÍѾò·ï¤Î½ªÎ»¸å¤âÀ­¼Á¾å¸³¤¹¤Ù¤­¾ò¹à¤Ï¡¢¤½¤ÎÍú¹Ô¤¬½ªÎ»¤¹¤ë¤Þ¤ÇÍ­¸ú¤Ë¸³¤·¡¢Î¾Åö»ö¼Ô¤Ê¤é¤Ó¤Ë¤½¤Î¾µ·Ñ¿Í¤ª¤è¤Ó¾ù¼õ¿Í¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +ËÜ·ï¥×¥í¥°¥é¥à¤Ë¤Ï¡¢É¾²Á´ü´Ö½ªÎ»¸å¤Î»ÈÍѤòËɻߤ¹¤ë¤¿¤á¤Î¼«Æ°»ÈÍÑÄä»ßµ¡Ç½¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Ëܼ«Æ°»ÈÍÑÄä»ßµ¡Ç½¤Þ¤¿¤ÏËÜ·ï¥×¥í¥°¥é¥à¤ò²þ¤¶¤ó¤·¤Ê¤¤¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤¬»ÈÍѤǤ­¤Ê¤¯¤Ê¤Ã¤¿ºÝ¤ËÀ¸¤º¤ë¥Ç¡¼¥¿¤ÎÁÓ¼º¤òËɤ°Í½ËÉÁ¼ÃÖ¤ò¹Ö¤¸¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +4. ÎÁ¶â + +ɾ²Á´ü´ÖÃæ¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤¿¤á¤ÎÎÁ¶â¤ÏȯÀ¸¤·¤Þ¤»¤ó¡£ + +5. ÊÝ¾Ú + +¶¯¹Ôµ¬Äê¤ËÈ¿¤¹¤ë¾ì¹ç¤ò½ü¤­¡¢IBM ¤ÏËÜ·ï¥×¥í¥°¥é¥à¤Þ¤¿¤Ï¥µ¥Ý¡¼¥È (Ä󶡤µ¤ì¤ë¾ì¹ç)¤òÆÃÄêʪ¤È¤·¤Æ¸½Â¸¤¹¤ë¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¡¢¾¦ÉÊÀ­¤ÎÊݾڡ¢½½Ê¬¤ÊÉʼÁ¤ÎÊݾڡ¢ÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڡ¢¸¢¸¶¤ÎÊݾڡ¢¤ª¤è¤ÓÂè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤â¤·¤¯¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤Ã¤Æ¤Ï¡¢¶¯¹Ôµ¬Äê¤Ë¤è¤êÊݾÚÀÕǤ¤ÎÀ©¸Â¤¬¶Ø¤¸¤é¤ì¤ë¾ì¹ç¤¬¤¢¤ê¡¢¤³¤Î¾ì¹ç¾åµ­¤ÎÊݾÚÀÕǤ¤ÎÀ©¸Â¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËŬÍѤµ¤ì¤Þ¤»¤ó¡£ ¤³¤Î¾ì¹ç¤ÎÊݾڤâˡΧ¤ÇÍ׵ᤵ¤ì¤ëºÇû¤Î´ü´ÖÆâ¤Ë¸ÂÄꤵ¤ì¡¢ Åö³ºÊݾڴü´Ö½ªÎ»¸å¤Ï¡¢¤¤¤«¤Ê¤ëÊݾڤâŬÍѤµ¤ì¤Þ¤»¤ó¡£ ¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤Ã¤Æ¤Ï¡¢Ë¡Î§¤Î¶¯¹Ôµ¬Äê¤Ë¤è¤ê¡¢ÊݾڤÎŬÍÑ´ü´Ö¤ÎÀ©¸Â¤¬¶Ø¤¸¤é¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¡¢¤³¤Î¾ì¹ç¾åµ­¤ÎÊݾڤÎŬÍÑ´ü´Ö¤ÎÀ©¸Â¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËŬÍѤµ¤ì¤Þ¤»¤ó¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤Ã¤Æ°Û¤Ê¤ë¡¢¤½¤Î¾¤Î¸¢Íø¤òÍ­¤¹¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ + +ËÜÂè 5 ¹à¤ËÄê¤á¤ëÌÈÀÕ¤ª¤è¤ÓÀ©¸Â¤Ï¡¢¤¤¤º¤ì¤Î IBM ¤Î¥×¥í¥°¥é¥à³«È¯¼Ô¤ª¤è¤Ó¥µ¥×¥é¥¤¥ä¡¼¤Ë¤âŬÍѤµ¤ì¤Þ¤¹¡£ + +¤Ê¤ª¡¢IBM °Ê³°¤Î¾¼ÒÀ½¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤½¤ÎÀ½Â¤¼Ô¡¢¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ïȯ¹Ô¼Ô¤Ë¤è¤êÊݾڤ¬Ä󶡤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ + +IBM ¤Ï¡¢ÊÌÅÓµ¬Äꤹ¤ë¾ì¹ç¤ò½ü¤­¡¢¤¤¤«¤Ê¤ë¼ïÎà¤Î¥µ¥Ý¡¼¥È¤âÄ󶡤·¤Þ¤»¤ó¡£ IBM ¤¬¥µ¥Ý¡¼¥È¤òÄ󶡤¹¤ë¾ì¹ç¡¢ËÜÂè 5 ¹à¤ËÄê¤á¤ëÌÈÀÕ¤ª¤è¤ÓÀ©¸Â¤¬Å¬ÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +6. ¥é¥¤¥»¥ó¥·¡¼¤Î¥Ç¡¼¥¿¤ª¤è¤Ó¥Ç¡¼¥¿¥Ù¡¼¥¹ + +ËÜ·ï¥×¥í¥°¥é¥à¤Ë´Ø¤¹¤ëÌäÂê¤Î¸¶°ø¤òÆÃÄꤷ¡¢¥é¥¤¥»¥ó¥·¡¼¤ò»Ù±ç¤¹¤ë¤¿¤á¤Ë¡¢IBM ¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¼¡¤Î¤¤¤º¤ì¤«¤òÍ×ÀÁ¤¹¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£1) ¥é¥¤¥»¥ó¥·¡¼¤Î¥·¥¹¥Æ¥à¤Ø¤Î±ó³Ö¥¢¥¯¥»¥¹¤ò IBM ¤Ëµö²Ä¤¹¤ë¤³¤È¡£2) ¥é¥¤¥»¥ó¥·¡¼¤Î¾ðÊó¤Þ¤¿¤Ï¥·¥¹¥Æ¥à¡¦¥Ç¡¼¥¿¤òIBM¤ËÁ÷¿®¤¹¤ë¤³¤È¡£ ¤¿¤À¤·¡¢¤«¤«¤ë»Ù±ç¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë¤ª¤±¤ë IBM ¤ÎµÁ̳¤ÎÈÏ°ÏÆâ¤ÇÄ󶡤µ¤ì¤ë¤â¤Î¤Ç¤¢¤ê¡¢¤½¤ÎÈϰϤòͤ¨¤ë¥µ¥Ý¡¼¥È¤ÎÄ󶡤ˤĤ¤¤Æ¤Ï¡¢ÊÌÅÓ½ñÌ̤ˤè¤ë·ÀÌó¤¬É¬ÍפǤ¹¡£ ¤¤¤«¤Ê¤ë¾ì¹ç¤Ç¤¢¤Ã¤Æ¤â¡¢IBM ¤Ï¡¢¥¨¥é¡¼¤ª¤è¤ÓÌäÂê¤Ë´Ø¤¹¤ë¾ðÊó¤ò¼«¼Ò¤ÎÀ½ÉʤβþÎɤȥµ¡¼¥Ó¥¹¸þ¾å¤Î¤¿¤á¤Ë»ÈÍѤ·¡¢´ØÏ¢¤¹¤ë¥µ¥Ý¡¼¥ÈŽ¥¥ª¥Õ¥¡¥ê¥ó¥°¤ÎÄ󶡤ËÌòΩ¤Æ¤ë¤¿¤á¤Ë»ÈÍѤ·¤Þ¤¹¡£ ¤³¤ÎÌÜŪ¤Î¤¿¤á¤Ë¡¢IBM ¤Ï¥é¥¤¥»¥ó¥·¡¼¤¬Â¸ºß¤¹¤ë¹ñ¤ª¤è¤Ó¤½¤ì°Ê³°¤Î¹ñ¤Ë¸ºß¤¹¤ëIBM »ö¶ÈÂΤª¤è¤Ó½¾·ÀÌó¼Ô¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤â¤Î¤È¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¤³¤ì¤òµö²Ä¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¼¡¤Î»ö¹à¤Ë´Ø¤·¤Æ¤Ï¡¢¤¹¤Ù¤Æ¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎÀÕǤ¤È¤·¤Þ¤¹¡£1¡Ë¥é¥¤¥»¥ó¥·¡¼¤¬ IBM ¤Ë¥¢¥¯¥»¥¹¤òÄ󶡤¹¤ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Ç¡¼¥¿¤ª¤è¤Ó¥³¥ó¥Æ¥ó¥Ä¡£2)¥Ç¡¼¥¿¡Ê¸Ä¿Í¼±Ê̲Äǽ¥Ç¡¼¥¿¤ò´Þ¤ß¤Þ¤¹¡£¡Ë¤Ø¤Î¥¢¥¯¥»¥¹¡¢¥»¥­¥å¥ê¥Æ¥£¡¼¡¢°Å¹æ²½¡¢»ÈÍѤª¤è¤ÓÁ÷¿®¤Ë´Ø¤¹¤ë¼ê³¤­¤ª¤è¤Ó´ÉÍý¤ÎÁªÂò¤ª¤è¤Ó¼Â»Ü¡£3¡Ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤ª¤è¤ÓÊݴɥǡ¼¥¿¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¤ª¤è¤Ó¥ê¥«¥Ð¥ê¡¼¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¸Ä¿Í¾ðÊó¤Ø¤Î¥¢¥¯¥»¥¹¤ò¥Ç¡¼¥¿¤Þ¤¿¤Ï¤½¤Î¾¤Î·Á¼°¤òÌä¤ï¤º¡¢°ìÀÚ IBM ¤ËÁ÷ÉÕ¤Þ¤¿¤ÏÄ󶡤·¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ ¸í¤Ã¤Æ IBM ¤ËÄ󶡤µ¤ì¤¿¸Ä¿Í¾ðÊó¤Ë´Ø¤ï¤ë¡¢¤Þ¤¿¤Ï¸Ä¿Í¾ðÊó¤ÎIBM¤Ë¤è¤ëÁÓ¼º¤Þ¤¿¤Ï³«¼¨¤Ë´ØÏ¢¤·¤Æ¡¢IBM ¤¬Èï¤ëÁêÅö³Û¤ÎÈñÍѤª¤è¤Ó¤½¤Î¾¤Î¶â³Û¤Ë¤Ä¤¤¤Æ¤Ï¡¢Âè»°¼Ô¤«¤é¤Î¿½¤·Î©¤ÆÊ¬¤â´Þ¤á¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎÉéô¤È¤·¤Þ¤¹¡£ + +7. ÀÕǤ¤ÎÀ©¸Â + +Ëܹà¡Ê7. ÀÕǤ¤ÎÀ©¸Â¡Ë¤ÇÄê¤á¤ëÀ©¸Â¤ª¤è¤ÓŬÍѽü³°¤Ï¡¢¶¯¹Ôµ¬Äê¤Ë¤è¤ê¶Ø»ß¤µ¤ì¤Ê¤¤ÈϰϤÇŬÍѤµ¤ì¤Þ¤¹¡£ + +7.1 IBM ¤ÎÀÕǤ + +¥é¥¤¥»¥ó¥·¡¼¤¬ IBM ¤ÎÀդ˵¢¤¹¤Ù¤­»öͳ (·ÀÌóÉÔÍú¹Ô¡¢²á¼º¡¢ÉÔ¼Âɽ¼¨¤Þ¤¿¤ÏÉÔË¡¹Ô°Ù¤Ê¤É¤ò´Þ¤ß¤Þ¤¹¡£) ¤Ë´ð¤Å¤¯Â»³²¤ËÂФ·¤ÆµßºÑ¤òµá¤á¤ë¾ì¹ç¡¢³ÆËÜ·ï¥×¥í¥°¥é¥à¤Ëµ¯°ø¤Þ¤¿¤Ï´ØÏ¢¤¹¤ë¡¢¤Þ¤¿¤ÏËÜ»ÈÍѾò·ï¤Î²¼¤ÇÄ󵯤µ¤ì¤ë IBM ¤ÎÇå½þÀÕǤÁí³Û¤Ï¡¢ÀÁµá¤Î¸¶°ø¤òÌä¤ï¤º¡¢¼¡¤Î³Æ¹æ¤ËÄê¤á¤ë¤â¤Î¤ÎÁí³Û¤ò¾å¸Â¤È¤·¤Þ¤¹¡£1) IBM ¤Î¸Î°Õ¤â¤·¤¯¤Ï²á¼º¤Ë¤è¤Ã¤Æ¤ªµÒÍͤËÀ¸¤¸¤¿¿ÈÂΡ¢À¸Ì¿¤ª¤è¤ÓÍ­ÂÎʪ¤ËÂФ¹¤ëÇå½þÀÕǤ¡£2) ¸½¼Â¤ËȯÀ¸¤·¤¿Ä̾狼¤ÄľÀܤλ³²¤ËÂФ·¡¢10,000 ÊÆ¹ñ¥É¥ë (¤Þ¤¿¤Ï¸½ÃÏÄÌ²ß¤ÎÆ±Åù³Û) ¤ò¸ÂÅ٤Ȥ¹¤ë¶âÁ¬Çå½þÀÕǤ¡£ + +¤³¤ÎÀ©¸Â¤Ï¡¢IBMËÜ·ï¥×¥í¥°¥é¥à¤Î³«È¯¼Ô¤ª¤è¤Ó¥µ¥×¥é¥¤¥ä¡¼¤ËÂФ·¤Æ¤âŬÍѤµ¤ì¤Þ¤¹¡£ IBM ¤ª¤è¤Ó IBM¥×¥í¥°¥é¥à¤Î³«È¯¼Ô¤Ê¤é¤Ó¤Ë¥µ¥×¥é¥¤¥ä¡¼¤ËÂФ·¤Æ½ÅÊ£¤·¤ÆÂ»³²Çå½þ¤òÀÁµá¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +7.2 IBM ¤ÎÌÈÀÕ + +¤¤¤«¤Ê¤ë¾ì¹ç¤Ë¤ª¤¤¤Æ¤â¡¢IBM ¤ª¤è¤Ó IBM ¤Î¥×¥í¥°¥é¥à³«È¯¼Ô¤Ê¤é¤Ó¤Ë¥µ¥×¥é¥¤¥ä¡¼¤Ï¡¢¤½¤Îͽ¸«¤Î̵ͭ¤òÌä¤ï¤ºÈ¯À¸¤·¤¿°Ê²¼¤Î»³²¤Ë¤Ä¤¤¤Æ¤ÏÇå½þÀÕǤ¤òÉ餤¤Þ¤»¤ó¡£ + +a. ¥Ç¡¼¥¿¤ÎÁÓ¼º¤Þ¤¿¤Ï»½ý + +b. ÆÃÊÌ»³²¡¢ÉÕ¿ïŪ»³²¡¢Ä¨È³ÅªÂ»³²¤Þ¤¿¤Ï´ÖÀÜ»³²¡¢¤ª¤è¤Ó¤½¤Î¤Û¤«¤Î³ÈÂ绳² + +c. °ï¼ºÍø±× (¥Ó¥¸¥Í¥¹¡¢¼ý±×¡¢¿®ÍѤ¢¤ë¤¤¤ÏÀáÌ󤹤٤«¤ê¤·ÈñÍѤò´Þ¤ß¤Þ¤¹)¡£ + +8. ½å¼é¾õ¶·¤Î³Îǧ + +Ëܹà¡Ê8. ½å¼é¾õ¶·¤Î³Îǧ¡Ë¤Ë¤ª¤¤¤Æ¡Öɾ²Á¥×¥í¥°¥é¥à¾ò·ï¡×¡ÊËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤­Ä󶡤µ¤ì¤ë¥×¥í¥°¥é¥à¤ËŬÍѤµ¤ì¤ë½ô¾ò·ï¡Ë¤Ï¡¢°Ê²¼¤ò°ÕÌ£¤·¤Þ¤¹¡£1) ËÜ»ÈÍѾò·ï¡¢Å¬ÍѤµ¤ì¤ë½¤Àµ¾ò¹à¤ª¤è¤Ó IBM ¤¬Ä󶡤¹¤ë¼è°úʸ½ñ¡£2¡Ë IBM Software Policy (IBM Software Policy ¥¦¥§¥Ö¥µ¥¤¥È (www.ibm.com/softwarepolicies) µ­ºÜ¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¡¢¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼ÎÁ¶â¤ª¤è¤Ó°Ü¹Ô¤Ë´Ø¤ï¤ë¥Ý¥ê¥·¡¼¤Ê¤É¡£) + +Ëܹà¤ÇÄê¤á¤ë¸¢Íø¤ª¤è¤ÓµÁ̳¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤¬¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·»ÈÍѵöÂú¤µ¤ì¤ë´ü´ÖÃæ¡¢¤ª¤è¤Ó¤½¤Î½ªÎ»¸å 2 ǯ´ÖÍ­¸ú¤È¤·¤Þ¤¹¡£ + +8.1 ³Îǧ¥×¥í¥»¥¹ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ¡¢Å¬ÍѤµ¤ì¤ë IBM ¤Î»ÈÍѵöÂú¾ò·ï¤ª¤è¤ÓÎÁ¶â¾ò·ïÅù¤«¤é¤Ê¤ë¤¹¤Ù¤Æ¤Îɾ²Á¥×¥í¥°¥é¥à¾ò·ï¤ò½å¼é¤·¤Æ»ÈÍѤ·¤Æ¤¤¤ë¤³¤È¤ò¾ÚÌÀ¤¹¤ë¤¿¤á¤Ë½½Ê¬¤Ê¡¢½ñÌ̤ˤè¤ëÀµ³Î¤Êµ­Ï¿¡¢¥·¥¹¥Æ¥à¡¦¥Ä¡¼¥ë¤«¤é¤Î½ÐÎÏ¡¢¤ª¤è¤Ó¤½¤Î¾¤Î¥·¥¹¥Æ¥à¾ðÊó¤òºîÀ®¡¢ÊÝ»ý¤·¡¢IBM ¤ª¤è¤Ó IBM ¤Î´Æºº¿Í¤ËÄ󶡤¹¤ë¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢°Ê²¼¤¤¤º¤ì¤Î»ö¹à¤Ë¤Ä¤¤¤Æ¤âÀÕǤ¤òÉ餦¤â¤Î¤È¤·¤Þ¤¹¡£1) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¤½¤Î»ÈÍѵöÂúÈϰϤòͤ¨¤Ê¤¤¤³¤È¤òÊݾڤ¹¤ë¤³¤È¡£ 2) ɾ²Á¥×¥í¥°¥é¥à¾ò·ï¤ò½å¼é¤¹¤ë¤³¤È¡£ + +IBM ¤Ï¡¢ÁêÅö¤ÊÄÌÃΤò¹Ô¤Ã¤¿¤¦¤¨¤Ç¡¢¥é¥¤¥»¥ó¥·¡¼¤¬É¾²Á¥×¥í¥°¥é¥à¾ò·ï¤Ë½¾¤Ã¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѡʤ½¤ÎÌÜŪ¤ÏÌ䤤¤Þ¤»¤ó¡£¡Ë¤¹¤ë¤¹¤Ù¤Æ¤Î»ÜÀߤª¤è¤Ó´Ä¶­¤Ç¡¢É¾²Á¥×¥í¥°¥é¥à¾ò·ï¤Ë´Ø¤¹¤ë¥é¥¤¥»¥ó¥·¡¼¤Î½å¼é¾õ¶·¤ò³Îǧ¤Ç¤­¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Åö³º³Îǧ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¶È̳¤ÎÃæÃǤòºÇ¾®¸Â¤Ë¤¹¤ëÊýË¡¤Ç¡¢Ä̾ï¤Î¶È̳»þ´ÖÆâ¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÜÀ߯â¤Ç¹Ô¤ï¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ IBM ¤Ï¡¢Åö³ºÌÜŪ¤Î¤¿¤á¤ËÆÈΩ´Æºº¿Í (°Ê²¼¡Ö´Æºº¿Í¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤â¤Î¤È¤·¡¢´Æºº¿Í¤È¤Î´Ö¤Ç½ñÌ̤ˤè¤ëµ¡Ì©ÊÝ»ý·ÀÌó¤òÄù·ë¤·¤Þ¤¹¡£ + +8.2 ²ò·è + +IBM ¤Ï¡¢Åö³º³Îǧ¤Ë¤ª¤¤¤Æ¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂúÈϰϤòͤ¨¤Æ¤½¤ì¤ò»ÈÍѤ·¡¢¤Þ¤¿¤Ïɾ²Á¥×¥í¥°¥é¥à¾ò·ï¤ò½å¼é¤·¤Æ¤¤¤Ê¤¤¤³¤È¤¬È½ÌÀ¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤½¤Î»Ý¤ò½ñÌ̤ÇÄÌÃΤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢IBM ¤¬ÀÁµá½ñ¤Ëµ­ºÜ¤¹¤ë¼¡¤Î¤¹¤Ù¤Æ¤Î¹àÌܤËÂФ¹¤ëÎÁ¶â¤ò®¤ä¤«¤ËľÀÜIBM ¤Ë»Ùʧ¤¦¤â¤Î¤È¤·¤Þ¤¹¡£1) »ÈÍѵöÂúÈϰϤòͤ¨¤ë»ÈÍÑ¡¢2) ¤«¤«¤ëͲá»ÈÍѤËÂФ·¤Æ¼õ¤±¤¿¥µ¥Ý¡¼¥È¤ËÂФ¹¤ëÎÁ¶â¡Ê»ÈÍѵöÂúÈϰϤòͤ¨¤Æ»ÈÍѤ·¤¿´ü´Ö¡¢¤Þ¤¿¤Ï2 ǯ´Ö¤Î¤¦¤Á¡¢Ã»¤¤´ü´Ö¡£¡Ë¡¢ 3) Åö³º³Îǧ¤Î·ë²Ì·èÄꤵ¤ì¤ëÄɲäλÈÍÑÎÁ¶â¤ª¤è¤Ó¤½¤Î¾¤ÎÇå½þ¶â³Û¡£ + +9. Âè»°¼Ô¥³¡¼¥É¤Ë´Ø¤¹¤ëÆÃµ­»ö¹à + +ËÜ·ï¥×¥í¥°¥é¥à¤Ë¤Ï¡¢Âè»°¼Ô¤Ç¤Ï¤Ê¤¯IBM ¤¬ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤­¥é¥¤¥»¥ó¥·¡¼¤Ë»ÈÍѵöÂú¤¹¤ëÂè»°¼Ô¥³¡¼¥É¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ Âè»°¼Ô¥³¡¼¥É¤Ë´Ø¤¹¤ëÆÃµ­»ö¹à (°Ê²¼¡ÖÂè»°¼ÔÆÃµ­»ö¹à¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¡¢¤«¤«¤ëÆÃµ­»ö¹à¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¤¿¤á¤À¤±¤Î¾ðÊó¤È¤·¤ÆÄ󶡤µ¤ì¤Þ¤¹¡£ Åö³ºÆÃµ­»ö¹à¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î NOTICES ¥Õ¥¡¥¤¥ë¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ÆÃÄê¤ÎÂè»°¼Ô¥³¡¼¥É¤Î¥½¡¼¥¹Ž¥¥³¡¼¥É¤ÎÆþ¼êÊýË¡¤Ë´Ø¤¹¤ë¾ðÊó¤Ï¡¢¡ÖÂè»°¼ÔÆÃµ­»ö¹à¡×¤Ëµ­ºÜ¤¬¤¢¤ê¤Þ¤¹¡£ ¡ÖÂè»°¼ÔÆÃµ­»ö¹à¡×¤ÎÃæ¤Ç IBM ¤¬Âè»°¼Ô¥³¡¼¥É¤ò¡Ö½¤Àµ²ÄǽÂè»°¼Ô¥³¡¼¥É¡×¤ÈÆÃÄꤹ¤ë¾ì¹ç¡¢IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¤Æ¡¢1) ¡Ö½¤Àµ²ÄǽÂè»°¼Ô¥³¡¼¥É¡×¤ò½¤Àµ¤¹¤ë¤³¤È¡¢¤ª¤è¤Ó2) Åö³ºÂè»°¼Ô¥³¡¼¥É¤ËÂФ¹¤ë¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë½¤Àµ¤ò¥Ç¥Ð¥Ã¥°¤¹¤ë¤³¤È¤òÌÜŪ¤È¤¹¤ë¾ì¹ç¤Ë¸Â¤ê¡Ö½¤Àµ²ÄǽÂè»°¼Ô¥³¡¼¥É¡×¤ÈľÀÜ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¤È¤ëËÜ·ï¥×¥í¥°¥é¥à¤Î¥â¥¸¥å¡¼¥ë¤Ë¥ê¥Ð¡¼¥¹Ž¥¥¨¥ó¥¸¥Ë¥¢¥ê¥ó¥°¤ò¹Ô¤Ê¤¦¤³¤È¤òµö²Ä¤·¤Þ¤¹¡£ IBM¤Ë¥µ¡¼¥Ó¥¹¤ª¤è¤Ó¥µ¥Ý¡¼¥È¤ÎµÁ̳¤¬¤¢¤ë¾ì¹ç¤Ï¡¢½¤Àµ¤µ¤ì¤Æ¤¤¤Ê¤¤ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤Þ¤¹¡£ + +10. ¤½¤Î¾ + +a. ËÜ»ÈÍѾò·ï¤Ï¡¢¾ÃÈñ¼ÔÊݸîË¡µ¬¤Ë¤è¤ë¤ªµÒÍͤθ¢Íø¤òÊѹ¹¤¹¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ + +b. ËÜ»ÈÍѾò·ï¤Î¤¤¤º¤ì¤«¤Î¾ò¹à¤¬Ìµ¸ú¤Þ¤¿¤ÏÍú¹Ô¶¯À©¤¬¤Ç¤­¤Ê¤¤¤È¤µ¤ì¤¿¾ì¹ç¤Ç¤â¡¢¤½¤Î¾¤Î¾ò¹à¤ÏÍ­¸ú¤Ë¸³¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +c. ¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤òÍ¢½Ð¤¹¤ë¤³¤È¤Ï¶Ø»ß¤·¤Þ¤¹¡£ + +d. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢International Business Machines Corporation ¤ª¤è¤Ó¤½¤Î»Ò²ñ¼Ò (¤ª¤è¤Ó¤½¤ì¤é¤Î¾µ·Ñ¿Í¡¢¾ù¼õ¿Í¡¢½¾·ÀÌó¼Ô¤Ê¤é¤Ó¤Ë IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼) ¤¬¡¢IBM À½Éʤª¤è¤Ó¥µ¡¼¥Ó¥¹¤Ë´ØÏ¢¤·¤Æ¡¢¤Þ¤¿¤Ï IBM ¤Î¥é¥¤¥»¥ó¥·¡¼¤È¤Î¼è°ú´Ø·¸¤ò¤è¤ê¶ÛÌ©¤Ë¤¹¤ëÌÜŪ¤Ç¡¢¤ªµÒÍͤÎÏ¢ÍíÀè¸Ä¿Í¾ðÊó (»á̾¡¢ÅÅÏÃÈֹ桢ÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤ò´Þ¤ß¤Þ¤¹¡£) ¤ò±Ä¶È³èư¤ò¹Ô¤¦Ç¤°Õ¤Î¾ì½ê¤ËÊݴɤ·¤Æ»ÈÍѤ¹¤ë¤³¤È¤òµö²Ä¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +e. ¤¤¤º¤ì¤ÎÅö»ö¼Ô¤â¡¢Áê¼ê¦¤ÎËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯µÁ̳¤ÎÉÔÍú¹Ô¤ËÂФ¹¤ë¸¢Íø¤ò¹Ô»È¤¹¤ëÁ°¤Ë¡¢ÁêÅö´ü´Ö¤òÄê¤á¤Æ¤½¤ÎÀ§Àµ¤òºÅ¹ð¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ξÅö»ö¼Ô¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ØÏ¢¤¹¤ëξÅö»ö¼Ô´Ö¤Î¤¹¤Ù¤Æ¤ÎʶÁè¡¢°Õ¸«¤ÎÁê°ã¡¢¤Þ¤¿¤Ï¿½¤·Î©¤Æ¤Ë¤Ä¤¤¤Æ¡¢À¿°Õ¤ò»ý¤Ã¤Æ²ò·è¤¹¤ë¤è¤¦Åؤá¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +f. ¶¯¹Ôµ¬Ä꤬¤¢¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯¤¤¤«¤Ê¤ëÀÁµá¸¢¤â¡¢ÀÁµá¤¬²Äǽ¤È¤Ê¤Ã¤¿»þ¤«¤é24¤«·î¤ò·Ð²á¤·¤¿¾ì¹ç¤Ë¤Ï¡¢»þ¸ú¤Ë¤è¤ê¾ÃÌǤ·¤Þ¤¹¡£ + +g. ¤¤¤º¤ì¤ÎÅö»ö¼Ô¤â¡¢¼«¸Ê¤ÎÀÕ¤á¤Ëµ¢¤¹¤³¤È¤Î¤Ç¤­¤Ê¤¤»öͳ¤«¤éÀ¸¤¸¤¿Â»³²¤Ë¤Ä¤¤¤Æ¤Ï¡¢ÀÕǤ¤òÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +h. ËÜ»ÈÍѾò·ï¤Ë¤è¤êÂè»°¼Ô¤ËÂФ·¤Æ¤¤¤«¤Ê¤ëÁʸ¢¤Þ¤¿¤ÏÀÁµá¸¢¤âÀ¸¤¸¤ë¤â¤Î¤Ç¤Ï¤Ê¤¯¡¢¤Þ¤¿¥é¥¤¥»¥ó¥·¡¼¤ËÂФ¹¤ëÂè»°¼Ô¤«¤é¤ÎÇå½þÀÁµá¤Ë¤Ä¤¤¤Æ IBM ¤¬ÀÕǤ¤òÉ餦¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¿¤À¤·¡¢¾åµ­Âè 7.1 ¹æ¡ÊIBM ¤ÎÀÕǤ¡Ë¤Çǧ¤á¤é¤ì¤¿¡¢IBM ¤¬¤«¤«¤ëÂè»°¼Ô¤ËÂФ·¤ÆË¡Åª¤ËÀÕǤ¤òÍ­¤¹¤ë¡¢¿ÈÂΡ¢À¸Ì¿¡¢¤ª¤è¤ÓÍ­ÂÎʪ¤ËÂФ¹¤ëÇå½þÀÕǤ¤Ï½ü¤­¤Þ¤¹¡£ + +i. ¤¤¤º¤ì¤ÎÅö»ö¼Ô¤â¡¢ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤Ë¤¢¤¿¤ê¡¢¼¡¤Î»ö¹à¤ò´Þ¤á¡Ê¤³¤ì¤é¤Ë¸ÂÄꤵ¤ì¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¡Ë¡¢ËÜ»ÈÍѾò·ï¤ÇÌÀ¼¨¤µ¤ì¤ë¤â¤Î°Ê³°¤ÎɽÌÀ¤Ë°Íµò¤¹¤ë¤â¤Î¤Ç¤Ï¤Ê¤¤¤³¤È¤ËƱ°Õ¤·¤Þ¤¹¡£ 1) ËÜ·ï¥×¥í¥°¥é¥à¤ÎÀ­Ç½¤Þ¤¿¤Ïµ¡Ç½¡£¡ÊÂè 5 ¹à¡ÊÊݾڡˤÇÌÀ¼¨Åª¤ËÊݾڤµ¤ì¤Æ¤¤¤ë¤â¤Î¤ò½ü¤­¤Þ¤¹¡£¡Ë2) Áê¼êÊýÅö»ö¼Ô¤Î·Ð¸³¤Þ¤¿¤Ï¿ä¾©¡£3) ¥é¥¤¥»¥ó¥·¡¼¤¬Ã£À®¤·ÆÀ¤ë¸ú²Ì¤Þ¤¿¤ÏÀḺ¡£ + +j. IBM ¤Ï¡¢ÆÃÄê¤ÎË¡¿Í (°Ê²¼¡ÖIBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ÈÆÃÄê¤ÎËÜ·ï¥×¥í¥°¥é¥à¤ÎÈÎÇäÂ¥¿Ê¡¢ÈÎÇ䤪¤è¤Ó¥µ¥Ý¡¼¥È¤Ë´Ø¤·¤Æ·ÀÌó¤òÄù·ë¤·¤Æ¤¤¤Þ¤¹¤¬¡¢IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¤Ï¡¢°ú¤­Â³¤­ IBM ¤«¤é¤ÏÆÈΩ¤·¤¿Ê̸Ĥθºß¤Ç¤¹¡£ IBM ¤Ï¡¢IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¤Î³èư¤Þ¤¿¤ÏÀ¼ÌÀ¡¢¤Þ¤¿¤Ï IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¤Î¥é¥¤¥»¥ó¥·¡¼¤ËÂФ¹¤ëµÁ̳¤Ë´Ø¤·¡¢ÀÕǤ¤òÉ餤¤Þ¤»¤ó¡£ + +k. ¥é¥¤¥»¥ó¥·¡¼¤¬ IBM¤È¤Î´Ö¤Ç¼è¤ê¸ò¤ï¤·¤¿¤½¤Î¾¤Î·ÀÌó½ñ¡ÊIBM Customer Agreement ¤Ê¤É¡Ë¤Çµ¬Äꤵ¤ì¤ë»ÈÍѸ¢¤ª¤è¤ÓÃÎŪºâ»º¤ÎÊä½þ¤Ë´Ø¤¹¤ë¾ò¹à¤Ï¡¢ËÜ»ÈÍѾò·ï¤Î²¼¤ÇÉÕÍ¿¤µ¤ì¤ë¥×¥í¥°¥é¥à»ÈÍѸ¢¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£ + +11. ÃÏÍýŪÈϰϤª¤è¤Ó½àµòË¡ + +11.1 ½àµòË¡ + +ξÅö»ö¼Ô¤Ï¡¢Ë¡¸¶Íý¤ÎÌ·½â¤Ë´Ø¤¹¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ·ÀÌ󤫤éÀ¸¤¸¤ë¡¢¤Þ¤¿¤ÏËÜ·ÀÌó¤Ë´ØÏ¢¤¹¤ëξÅö»ö¼Ô¤Î¤¹¤Ù¤Æ¤Î¸¢ÍøµÁ̳¤ò¡¢µ¬À©¡¢²ò¼á¡¢¼Â»Ü¤¹¤ë¤¿¤á¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤ò¼èÆÀ¤·¤¿¹ñ¤ÎˡΧ¤òŬÍѤ¹¤ë¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¹ñºÝÇäÇã·ÀÌó¤Ë´Ø¤¹¤ë¹ñÏ¢¾òÌó (United Nations Convention on Contracts for the International Sale of Goods) ¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£ + +11.2 ºÛȽ´É³í¸¢ + +¤¹¤Ù¤Æ¤Î¸¢Íø¤ª¤è¤ÓµÁ̳¤Ë¤Ä¤¤¤Æ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤ò¼èÆÀ¤·¤¿¹ñ¤ÎºÛȽ½ê¤ÎȽÃǤ˽¾¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ + +Âè 2 ¾Ï - ³Æ¹ñ¸ÇÍ­¤Î¾ò¹à + +ÆüËܤÇÉÕÍ¿¤µ¤ì¤ë»ÈÍѸ¢¤Ë¤Ä¤¤¤Æ¤Ï¡¢°Ê²¼¤Î¾ò·ï¤¬Âè 1 ¾Ï¤Ç¼¨¤µ¤ì¤¿¾ò·ï¤òÃÖ¤­´¹¤¨¤ë¤«¤Þ¤¿¤Ï¤«¤«¤ë¾ò·ï¤ò½¤Àµ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Âè 1 ¾Ï¤Î»ÈÍѾò·ï¤Ç¡¢¤³¤ì¤é¤Î½¤Àµ¤¬²Ã¤¨¤é¤ì¤Ê¤¤»ÈÍѾò·ï¤Ï¡¢¤¹¤Ù¤Æ¡¢Êѹ¹¤µ¤ì¤º¡¢°ú¤­Â³¤­Í­¸ú¤Ë¸³¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +10. ¤½¤Î¾ + +¼¡¤Î»ö¹à¤ò¾ò¹à 10.l ¤È¤·¤ÆÄɲä·¤Þ¤¹¡£ + +l. Ëܽñ¤Ë´Ø¤¹¤ëµ¿µÁ¤¬À¸¤¸¤¿¾ì¹ç¤Ï¡¢Åö»ö¼ÔÁÐÊý¤¬¿®µÁÀ¿¼Â¤Î¸¶Â§¤Ë½¾¤Ã¤Æ¶¨µÄ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +Z125-5543-05 (07/2011) + + +¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï + +Âè 1 ¾Ï - ¶¦Ä̾ò¹à + +¤ªµÒÍͤ¬¥é¥¤¥»¥ó¥·¡¼¡Ê»ÈÍѵöÂú¤ò¼õ¤±¤¿¸Ä¿Í¡¢²ñ¼Ò¡¢¤½¤Î¾¤ÎË¡¿Í¡Ë¤È¤·¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¡¢Æ³Æþ¡¢Ê£À½¡¢¥¢¥¯¥»¥¹¡¢¡ÖƱ°Õ¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¡¢¤Þ¤¿¤Ï»ÈÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢ËÜ¡Ö¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï ¡×(°Ê²¼¡ÖËÜ»ÈÍѾò·ï¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ËƱ°Õ¤·¤¿¤â¤Î¤È¸«¤Ê¤µ¤ì¤Þ¤¹¡£¤ªµÒÍͤ¬¥é¥¤¥»¥ó¥·¡¼¤ÎÂå¹Ô¼Ô¤È¤·¤ÆËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¾ì¹ç¡¢¤ªµÒÍͤϡ¢¥é¥¤¥»¥ó¥·¡¼¤ËËÜ»ÈÍѾò·ï¤ò½å¼é¤µ¤»¤ëÁ´¸¢¸Â¤òÍ­¤·¤Æ¤¤¤ë¤³¤È¤òɽÌÀ¤ª¤è¤Ó Êݾڤ¤¤¿¤À¤¯¤â¤Î¤È¤·¤Þ¤¹¡£ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¤¤¿¤À¤±¤Ê¤¤¾ì¹ç¡¢ + +* ¤ªµÒÍͤϡ¢ËÜ·ï¥×¥í¥°¥é¥à¤Î¥À¥¦¥ó¥í¡¼¥É¡¢Æ³Æþ¡¢Ê£À½¡¢¥¢¥¯¥»¥¹¡¢¡ÖƱ°Õ¡×¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¡¢¤Þ¤¿¤Ï»ÈÍѤò¤¹¤ë¤³¤È¤Ê¤¯¡¢¤«¤Ä + +* ľ¤Á¤Ë̤»ÈÍѤε­Ï¿ÇÞÂΡ¢Ê¸½ñ¤ª¤è¤Ó¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ò¤½¤ÎĴ㸵¤ËÊֵѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤³¤ì¤È°ú¤­´¹¤¨¤Ë»ÙʧºÑÎÁ¶â¤ÎÊÖ¶â¤ò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ë¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤òÇË´þ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +1. ÄêµÁ + +»ÈÍѵöÂúÈÏ°Ï - ¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤Þ¤¿¤Ï²ÔƯ¤¹¤ë¤³¤È¤òµöÂú¤µ¤ì¤¿ÆÃÄê¤ÎÈϰϤò¤¤¤¤¤Þ¤¹¡£¤«¤«¤ëÈϰϤϡ¢¥æ¡¼¥¶¡¼¤Î¿ô¡¢MSU (Millions of Service Units)¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¤Þ¤¿¤Ï IBM ¤¬ÆÃÄꤹ¤ë¤½¤Î¾¤Î»ÈÍѵöÂú¤ÎÈϰϤˤè¤êµ¬Äꤵ¤ì¤Þ¤¹¡£ + +IBM - International Business Machines Corporation ¤Þ¤¿¤Ï¤½¤Î»Ò²ñ¼Ò¤ò¤¤¤¤¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥¹¾ðÊó (°Ê²¼ ¡ÖLI¡×¤È¤¤¤¤¤Þ¤¹¡£) - ËÜ·ï¥×¥í¥°¥é¥à¤Ë¸ÇÍ­¤Î¾ðÊ󤪤è¤ÓÄɲþò·ï¤òÄ󶡤¹¤ëʸ¾Ï¤ò¤¤¤¤¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤Î LI ¤Ï¡¢www.ibm.com/software/sla ¤«¤éÆþ¼ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£LI ¤ÏËÜ·ï¥×¥í¥°¥é¥à¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼Æâ¤Ç (¥·¥¹¥Æ¥à¡¦¥³¥Þ¥ó¥É¤Ê¤É¤ò»ÈÍѤ·¤Æ³Îǧ¤·¤Þ¤¹¡£) ¤Þ¤¿¤ÏËÜ·ï¥×¥í¥°¥é¥à¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¾®ºý»Ò¤È¤·¤ÆÄ󶡤µ¤ì¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ + +ËÜ·ï¥×¥í¥°¥é¥à - ¸¶Ëܤª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª (Á´ÂÎÊ£À½¤«ÉôʬʣÀ½¤«¤òÌ䤤¤Þ¤»¤ó¡£) ¤ò´Þ¤á¤Æ¡¢¼¡¤Î¤â¤Î¤ò¤¤¤¤¤Þ¤¹¡£1) µ¡³£¤ÇÆÉ¤ß¼è¤ê¤¦¤ë·Á¤ÎÌ¿Îᤪ¤è¤Ó¥Ç¡¼¥¿¡¢2) ¤½¤Î¹½À®Í×ÁÇ¡¢¥Õ¥¡¥¤¥ë¤ª¤è¤Ó¥â¥¸¥å¡¼¥ë¡¢3) »ëİ³Ð¥³¥ó¥Æ¥ó¥Ä (¥¤¥á¡¼¥¸¡¢¥Æ¥­¥¹¥È¡¢Ï¿²»¡¢²èÁü¤Ê¤É)¡¢¤Ê¤é¤Ó¤Ë 4) ´ØÏ¢¤¹¤ë¥é¥¤¥»¥ó¥¹»ñÎÁ (¥­¡¼¤ª¤è¤ÓÉÕ°ʸ½ñ¤Ê¤É)¡£ + +¥é¥¤¥»¥ó¥¹¾Ú½ñ (°Ê²¼¡ÖPoE¡× ¤È¤¤¤¤¤Þ¤¹¡£) - ¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѵöÂúÈϰϤξÚÌÀ¤ò¤¤¤¤¤Þ¤¹¡£¤Þ¤¿¡¢PoE ¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ¹¤ëÊݾڥµ¡¼¥Ó¥¹¡¢¾­Íè¤Ë¤ª¤±¤ëËÜ·ï¥×¥í¥°¥é¥à¤Î¹¹¿·ÎÁ¶â(ȯɽ¤µ¤ì¤ë¾ì¹ç) ¤Þ¤¿¤ÏÈÎÇäÂ¥¿ÊÍÑ¤ÎÆÃÊ̤ÊÁ¼ÃÖ (Ä󶡤µ¤ì¤ë¾ì¹ç) Åù¤ò¼õ¤±¤ë¥é¥¤¥»¥ó¥·¡¼¤Î»ñ³Ê¤ò³Îǧ¤·¾ÚÌÀ¤¹¤ë¤â¤Î¤Ç¤¹¡£IBM ¤¬¥é¥¤¥»¥ó¥·¡¼¤Ë PoE ¤òȯ¹Ô¤·¤Ê¤¤¾ì¹ç¡¢IBM¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤òĴ㤷¤¿Ä´Ã£¸µ (IBM ¤Þ¤¿¤Ï IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼) ¤¬È¯¹Ô¤·¤¿Îμý½ñ¸¶É¼¡¢¤½¤Î¾¤ÎÈÎÇäµ­Ï¿¤ò PoE ¤È¤ß¤Ê¤¹¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£¤½¤Î¾ì¹ç¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î̾¾Î¤È¼èÆÀ¤·¤¿»ÈÍѵöÂúÈϰϤ¬ÌÀµ­¤µ¤ì¤Æ¤¤¤ë¤³¤È¤¬Á°Äó¤È¤Ê¤ê¤Þ¤¹¡£ + +Êݾڴü´Ö - ºÇ½é¤Î¥é¥¤¥»¥ó¥·¡¼¤¬»ÈÍѸ¢¤òÉÕÍ¿¤µ¤ì¤¿Æü¤«¤é 1 ǯ¤ò¤¤¤¤¤Þ¤¹¡£ + +2. »ÈÍѾò·ï¤Î¹½À® + +ËÜ»ÈÍѾò·ï¤Ï¡¢Âè 1 ¾Ï - ¶¦Ä̾ò¹à¡¢Âè 2 ¾Ï - ³Æ¹ñ¸ÇÍ­¤Î¾ò¹à (³ºÅö¤¹¤ë¾ì¹ç)¡¢LI¡¢¤ª¤è¤Ó PoE ¤«¤é¹½À®¤µ¤ì¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѤ˴ؤ¹¤ë¥é¥¤¥»¥ó¥·¡¼¤È IBM ´Ö¤Î´°Á´¡¢Í£°ì¤Î¹ç°Õʸ½ñ¤Ç¤¢¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѤ˴ؤ¹¤ë¡¢¥é¥¤¥»¥ó¥·¡¼¤ª¤è¤Ó IBM ´Ö¤Î»öÁ°¤Î¸ýƬ¤Þ¤¿¤Ï½ñÌ̤ˤè¤ëÄÌÃÎÅù¤Î¤¹¤Ù¤Æ¤ËÂå¤ï¤ë¤â¤Î¤Ç¤¹¡£Âè 2 ¾Ï¤Ë¡¢Âè 1 ¾Ï¤Î¾ò·ï¤ËÂФ¹¤ëÄɲþò·ï¤Þ¤¿¤ÏÊѹ¹¾ò·ï¤¬µ­ºÜ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£LI ¤ÈÂè 1 ¾Ï¤ª¤è¤ÓÂè 2 ¾Ï¤Ëóòó÷¤¬¤¢¤ë¾ì¹ç¡¢LI ¤¬Í¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +3. »ÈÍѸ¢¤ÎµöÂú + +ËÜ·ï¥×¥í¥°¥é¥à¤Ï IBM ¤Þ¤¿¤Ï IBM ¥µ¥×¥é¥¤¥ä¡¼¤¬½êÍ­¸¢¤òÍ­¤·¤Æ¤¤¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤Ï¡¢Ãøºî¸¢¤Ë¤è¤êÊݸ¤ì¤Æ¤ª¤ê¡¢»ÈÍѵöÂú¤µ¤ì¤ë¤â¤Î¤Ç¤¢¤Ã¤Æ¡¢ÇäÇã¤ÎÂоݤȤʤë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ + +IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¡¢¼¡¤Î»ö¹à¤ò¹Ô¤¦¤¿¤á¤ÎÈóÆÈÀêŪ»ÈÍѸ¢¤òµöÂú¤·¤Þ¤¹¡£1) PoE ¤Çµ¬Äꤵ¤ì¤¿»ÈÍѵöÂúÈÏ°ÏÆâ¤ÇËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤³¤È¡¢2) ¤«¤«¤ë»ÈÍѵöÂúÈϰϤˤª¤¤¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ÎÊ£À½Êª¤òºîÀ®¤·Æ³Æþ¤¹¤ë¤³¤È¡¢¤ª¤è¤Ó 3) ¥Ð¥Ã¥¯¥¢¥Ã¥×¡¦¥³¥Ô¡¼¤òºîÀ®¤¹¤ë¤³¤È¡£¤¿¤À¤·¡¢¤³¤ì¤é¤Ï¡¢°Ê²¼¤Î¤¹¤Ù¤Æ¤Î¾ò·ï¤òËþ¤¿¤¹¾ì¹ç¤Ë¸Â¤ê¤Þ¤¹¡£ + +a. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¹çˡŪ¤ËËÜ·ï¥×¥í¥°¥é¥à¤ò¼èÆÀ¤·¡¢ËÜ»ÈÍѾò·ï¤Ë½¾¤Ã¤Æ»ÈÍѤ¹¤ë¤³¤È¡£ + +b. ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤·¤¿¾ì¹ç¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤Ç¤­¤Ê¤¤¾ì¹ç¤ò½ü¤­¡¢¤«¤«¤ë¥Ð¥Ã¥¯¥¢¥Ã¥×¡¦¥³¥Ô¡¼¤ò¼Â¹Ô¤·¤Ê¤¤¤³¤È¡£ + +c. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎÊ£À½Êª¤Ë¡¢Á´ÉôÊ£À½¤«ÉôʬʣÀ½¤«¤òÌä¤ï¤º¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤ÈƱ°ì¤ÎÃøºî¸¢É½¼¨¤ª¤è¤Ó¤½¤Î¾¤Î½êÍ­¸¢É½¼¨¤ò¹Ô¤Ê¤¦¤³¤È¡£ + +d. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢±ó³ÖÃϤ«¤é¤Î¥¢¥¯¥»¥¹¤ò´Þ¤á¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë²¿¿Í (¤Ê¤ó¤Ô¤È) ¤â¤¬¡¢1) ¥é¥¤¥»¥ó¥·¡¼¤Î¤¿¤á¤Ë¤Î¤ß»ÈÍѤ·¡¢¤«¤Ä 2) ËÜ»ÈÍѾò·ï¤ËÄê¤á¤ëµÁ̳¤ò½å¼é¤¹¤ë¤è¤¦¡¢Å¬ÀڤʽèÃÖ¤ò¹Ö¤¸¤ë¤³¤È¡£ + +e. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢1) ËÜ»ÈÍѾò·ï¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍÑ¡¢Ê£À½¡¢½¤Àµ¤â¤·¤¯¤ÏÇÛÉÛ¤·¤Ê¤¤¤³¤È¡¢2) ¶¯¹Ôµ¬Äê¤Î¤¢¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ·ï¥×¥í¥°¥é¥à¤òµÕ¥³¥ó¥Ñ¥¤¥ë¡¢µÕ¥¢¥»¥ó¥Ö¥ë¡¢¤½¤Î¾¤ÎÂÖÍͤÇËݰơ¢¤â¤·¤¯¤Ï¥ê¥Ð¡¼¥¹¡¦¥¨¥ó¥¸¥Ë¥¢¥ê¥ó¥°¤·¤Ê¤¤¤³¤È¡¢3) ËÜ·ï¥×¥í¥°¥é¥à¤Î¹½À®Í×ÁÇ¡¢¥Õ¥¡¥¤¥ë¡¢¥â¥¸¥å¡¼¥ë¡¢»ëİ³Ð¥³¥ó¥Æ¥ó¥Ä¤â¤·¤¯¤Ï´ØÏ¢¤¹¤ë¥é¥¤¥»¥ó¥¹»ñÎÁ¤òËÜ·ï¥×¥í¥°¥é¥à¤È¤ÏʬΥ¤·¤Æ»ÈÍѤ·¤Ê¤¤¤³¤È¡¢¤Þ¤¿¤Ï 4) ËÜ·ï¥×¥í¥°¥é¥à¤òºÆ»ÈÍѵöÂú¡¢ÄÂÂߤ⤷¤¯¤ÏÂßÍ¿¡Ê¥ê¡¼¥¹¤ò´Þ¤ß¤Þ¤¹¡£¡Ë¤·¤Ê¤¤¤³¤È¡£ + +f. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö½¾¥×¥í¥°¥é¥à¡×¡ÊËܹà¸åÃʤÇÄêµÁ¤µ¤ì¤Þ¤¹¡£¡Ë¤È¤·¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò¼èÆÀ¤¹¤ë¾ì¹ç¡¢¡Ö¼ç¥×¥í¥°¥é¥à¡×¡ÊËܹà¸åÃʤÇÄêµÁ¤µ¤ì¤Þ¤¹¡£¡Ë¤ò¥µ¥Ý¡¼¥È¤·¡¢¼ç¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢µ¬Äê¤Î¤¤¤«¤Ê¤ëÀ©¸Â¤Ë¤â½¾¤¦¤³¤È¤ò¾ò·ï¤Ë¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¼ç¥×¥í¥°¥é¥à¤È¤·¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò¼èÆÀ¤¹¤ë¾ì¹ç¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò¥µ¥Ý¡¼¥È¤·¡¢ËÜ»ÈÍѾò·ïÃæ¤Î¤¤¤«¤Ê¤ëÀ©¸Â¤Ë¤â½¾¤¦¤³¤È¤ò¾ò·ï¤Ë¡¢¤¹¤Ù¤Æ¤Î½¾¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Ëܹà¡Öf¡×¤Ë¤ª¤¤¤Æ¡¢¡Ö½¾¥×¥í¥°¥é¥à¡×¤È¤Ï¡¢Ê̤ΠIBM ¥×¥í¥°¥é¥à (¡Ö¼ç¥×¥í¥°¥é¥à¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Î°ìÉô¤Ç¤¢¤ê¡¢Åö³º¥×¥í¥°¥é¥à¤Î LI¤Ë½¾¥×¥í¥°¥é¥à¤È¤·¤Æµ¬Äꤵ¤ì¤ëËÜ·ï¥×¥í¥°¥é¥à¤ò¤¤¤¤¤Þ¤¹¡£ (À©Ìó»ö¹à¤Î¤Ê¤¤½¾¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤òÊÌÅÓ¼èÆÀ¤¹¤ë¤Ë¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢½¾¥×¥í¥°¥é¥à¤ÎĴ㸵¤ËÏ¢Íí¤·¤Æ¤¯¤À¤µ¤¤¡£) + +ËÜ»ÈÍѾò·ï¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ºîÀ®¤¹¤ëËÜ·ï¥×¥í¥°¥é¥à¤Î³ÆÊ£À½Êª¤Ë¤âŬÍѤµ¤ì¤Þ¤¹¡£ + +3.1 ¥È¥ì¡¼¥É¥¢¥Ã¥×¡¢¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á + +3.1.1 ¥È¥ì¡¼¥É¥¢¥Ã¥× + +ËÜ·ï¥×¥í¥°¥é¥à¤¬¥È¥ì¡¼¥É¥¢¥Ã¥×¡¦¥×¥í¥°¥é¥à¤Ë¤è¤êÃÖ¤­´¹¤¨¤é¤ì¤ë¾ì¹ç¡¢ÃÖ¤­´¹¤¨¤é¤ì¤¿ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤Ï¡¢Ä¾¤Á¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +3.1.2 ¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á + +¥é¥¤¥»¥ó¥·¡¼¤¬¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ¹¤ë¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á¤ò¼õÎΤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î LI ¤Çµ¬Äꤵ¤ì¡¢Åö³º¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á¤ËŬÍѤµ¤ì¤ë¤¹¤Ù¤Æ¤ÎÄɲþò¹à¤Þ¤¿¤Ï°Û¤Ê¤ë»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Äɲþò¹à¤Þ¤¿¤Ï°Û¤Ê¤ë»ÈÍѾò·ï¤¬Ä󶡤µ¤ì¤Ê¤¤¾ì¹ç¡¢¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á¤ÏËÜ»ÈÍѾò·ï¤Ë¤Î¤ß½¾¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤¬¹¹¿·¤Ë¤è¤êÃÖ¤­´¹¤¨¤é¤ì¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ÃÖ¤­´¹¤¨¤é¤ì¤¿ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +3.2 ´ü¸ÂÉÕ»ÈÍѸ¢ + +IBM ¤¬´ü¸ÂÉÕ¤ÇËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѵöÂú¤¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѸ¢¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ª¤è¤Ó IBM ¤¬¤½¤Î´ü¸Â¤Î¹¹¿·¤ËƱ°Õ¤·¤Ê¤¤¸Â¤ê¡¢Äê¤á¤é¤ì¤¿´ü¸Â¤ÎËþλ¤È¶¦¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +3.3 ´ü´Ö¤ª¤è¤Ó½ªÎ» + +ËÜ»ÈÍѾò·ï¤Ï¡¢²òÌ󤵤ì¤ë¤Þ¤ÇÍ­¸ú¤Ë¸³¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤Î¾ò¹à¤Ë°ãÈ¿¤·¤¿¾ì¹ç¡¢IBM ¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËÂФ¹¤ë»ÈÍѸ¢¤ò½ªÎ»¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤¤¤º¤ì¤«¤ÎÅö»ö¼Ô¤¬¡¢Íýͳ¤Î¤¤¤«¤ó¤òÌä¤ï¤º»ÈÍѸ¢¤ò½ªÎ»¤¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Ä¾¤Á¤Ë»ÈÍѤòÃæ»ß¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Î½êÍ­¤¹¤ëËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤òÇË´þ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ËÜ»ÈÍѾò·ï¤Î½ªÎ»¸å¤âÀ­¼Á¾å¸³¤¹¤Ù¤­¾ò¹à¤Ï¡¢¤½¤ÎÍú¹Ô¤¬½ªÎ»¤¹¤ë¤Þ¤ÇÍ­¸ú¤Ë¸³¤·¡¢Î¾Åö»ö¼Ô¤Ê¤é¤Ó¤Ë¤½¤Î·Ñ¾µ¿Í¤ª¤è¤Ó¾ù¼õ¿Í¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +4. ÎÁ¶â + +ÎÁ¶â¤Ï¡¢PoE ¤Ëµ­ºÜ¤µ¤ì¤ë»ÈÍѵöÂúÈϰϤ˴ð¤Å¤¯¤â¤Î¤È¤·¤Þ¤¹¡£IBM ¤Ï¡¢´û¤Ë»Ùʧ´üÆü¤ÎÅþÍ褷¤Æ¤¤¤ëÎÁ¶â¤Þ¤¿¤Ï»ÙʧºÑ¤ß¤ÎÎÁ¶â¤ÏÊÖ´Ô¤·¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£¤¿¤À¤·¡¢ËÜ»ÈÍѾò·ï¤ÇÊÌÅÓµ¬Ä꤬¤¢¤ë¾ì¹ç¤Ï½ü¤­¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢»ÈÍѵöÂúÈϰϤò³ÈÂ礹¤ë¾ì¹ç¡¢»öÁ°¤Ë IBM ¤Þ¤¿¤Ï IBM ǧÄê¤ÎºÆÈμԤËÄÌÃΤ·¡¢½êÄê¤ÎÎÁ¶â¤ò»Ùʧ¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ + +5. ÀǶâ + +ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ·ÀǶ⤽¤Î¾¤Î¸øÁŸø²Ý (¤¿¤À¤· IBM ¤ËÂФ¹¤ëË¡¿ÍÀǤò½ü¤­¤Þ¤¹¡£) ¤¬²Ý¤»¤é¤ì¤ë¤È¤­¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ÌÈÀǽñÎà¤òÄó½Ð¤¹¤ë¾ì¹ç¤ò½ü¤­¡¢ÀÁµá½ñµ­ºÜ¤Î¶â³Û¤ò»Ùʧ¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ·¤Æ²Ý¤»¤é¤ì¤ëư»ºÀǤˤĤ¤¤Æ¤Ï¡¢¼èÆÀÆü°Ê¹ß¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎÉéô¤È¤·¤Þ¤¹¡£ºÇ½é¥é¥¤¥»¥ó¥·¡¼¤¬»ÈÍѸ¢¤òÉÕÍ¿¤µ¤ì¤¿¹ñ°Ê³°¤Ç¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎÍ¢½ÐÆþ¡¢°Üž¡¢¥¢¥¯¥»¥¹¤Þ¤¿¤Ï»ÈÍѤËÂФ·¤Æ´ØÀǤ½¤Î¾¤Î¸øÁŸø²Ý¤¬²Ý¤»¤é¤ì¤ë¤È¤­¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ÏÀÕǤ¤ò¤â¤Ã¤ÆÀÁµá³Û¤ò»Ùʧ¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ + +6. ²òÌó²Äǽ´ü´Ö + +¥é¥¤¥»¥ó¥·¡¼¤¬¡¢Íýͳ¤Î¤¤¤«¤ó¤òÌä¤ï¤ºËÜ·ï¥×¥í¥°¥é¥à¤ËËþ­¤»¤º¡¢¤«¤ÄºÇ½é¤Î»ÈÍѸ¢¼èÆÀ¼Ô¤Ç¤¢¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï»ÈÍѸ¢¤ò²òÌó¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ·¤Æ»Ùʧ¤Ã¤¿ÎÁ¶â¤ÎÊÖ¶â¤ò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢PoE ¤¬¥é¥¤¥»¥ó¥·¡¼¤Ëȯ¹Ô¤µ¤ì¤Æ¤«¤é 30 Æü°ÊÆâ¤ËËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó PoE ¤ò¤½¤ÎĴ㸵¤ËÊֵѤ¹¤ë¾ì¹ç¤Ë¸Â¤ê¤Þ¤¹¡£»ÈÍѸ¢¤Î¹¹¿·¤¬É¬ÍפȤʤë´ü¸ÂÉÕ»ÈÍѸ¢¤Î¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤ÏËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î PoE ¤Î½é²ó¤Î»ÈÍѸ¢¤¬ÉÕÍ¿¤µ¤ì¤¿´üÆü¤«¤é 30 Æü°ÊÆâ¤ËÊֵѤµ¤ì¤ë¾ì¹ç¤Î¤ß¡¢ÊÖ¶â¤ò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤ÎÊÖ¶â¤Î¼õ¤±Êý¤Ë¤Ä¤¤¤Æ¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎĴ㸵¤Ë¤ªÌ䤤¹ç¤ï¤»¤¯¤À¤µ¤¤¡£ + +7. ËÜ·ï¥×¥í¥°¥é¥à¤Î°Üž + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¸¢Íø¤Ê¤é¤Ó¤Ë¤³¤ì¤Ë´Ø¤¹¤ëµÁ̳¤Î¤¹¤Ù¤Æ¤òÂè»°¼Ô¤Ë°Üž¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¤«¤«¤ëÂè»°¼Ô¤¬ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¾ì¹ç¤Ë¸Â¤ê¤Þ¤¹¡£¤¤¤º¤ì¤«¤ÎÅö»ö¼Ô¤¬¡¢Íýͳ¤Î¤¤¤«¤ó¤òÌä¤ï¤º»ÈÍѸ¢¤ò½ªÎ»¤¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Âè»°¼Ô¤ËËÜ·ï¥×¥í¥°¥é¥à¤ò°Üž¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢1)ËÜ·ï¥×¥í¥°¥é¥à¤Î°ìÉô¤Þ¤¿¤Ï 2)ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂúÈϰϤΰìÉô¤ò°Üž¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò°Üž¤¹¤ë¾ì¹ç¡¢LI ¤ª¤è¤Ó PoE ¤ò´Þ¤á¡¢ËÜ»ÈÍѾò·ï¤Î¥Ï¡¼¥É¥³¥Ô¡¼¤â°Üž¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£°Üž¸å¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѸ¢¤Ïľ¤Á¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +8. Êݾڤª¤è¤ÓŬÍѽü³° + +8.1 ÊÝ¾Ú¤ÎÆâÍÆ¤ÈÀ©¸Â + +IBM ¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò½êÄê¤Î²ÔƯ´Ä¶­¤Ç»ÈÍѤ¹¤ë¸Â¤ê¡¢¤½¤Î»ÅÍͤ˹çÃפ¹¤ë¤³¤È¤òÊݾڤ·¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÅÍͤª¤è¤Ó½êÄê¤Î²ÔƯ´Ä¶­¤Ë¤Ä¤¤¤Æ¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤È¶¦¤ËÄ󶡤µ¤ì¤ëʸ½ñ (¡ÖREADME¡×¥Õ¥¡¥¤¥ë¤Ê¤É) ¤Þ¤¿¤Ïȯɽ¥ì¥¿¡¼Åù IBM ¤¬¸ø³«¤¹¤ë¾ðÊó¤Ëµ­ºÜ¤¬¤¢¤ê¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤ê¶¯¹Ôµ¬Ä꤬¤¢¤ë¾ì¹ç¤ò½ü¤­¡¢¤«¤«¤ëʸ½ñ¤ª¤è¤Ó¤½¤Î¾¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Æ¥ó¥Ä¤¬±Ñ¸ì¤ÇÄ󶡤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ë¤³¤È¤òλ¾µ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¤«¤«¤ëÊݾڤϡ¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎÊѹ¹¤Î²Ã¤¨¤é¤ì¤Æ¤¤¤Ê¤¤Éôʬ¤Ë¤Ä¤¤¤Æ¤Î¤ßŬÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£IBM ¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤¬ÃæÃǤ·¤Ê¤¤¤³¤È¤â¤·¤¯¤Ï¤½¤Î¼Â¹Ô¤Ë¸í¤ê¤¬¤Ê¤¤¤³¤È¡¢¤Þ¤¿¤Ï¡¢¤¹¤Ù¤Æ¤ÎËÜ·ï¥×¥í¥°¥é¥à¤Î¤¹¤Ù¤Æ¤Î¸í¤ê¤¬½¤Àµ¤µ¤ì¤ë¤³¤È¤òÊݾڤ¹¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍÑ·ë²Ì¤Ë¤Ä¤¤¤Æ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎÀÕǤ¤È¤·¤Þ¤¹¡£ + +Êݾڴü´ÖÃæ¡¢IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¤Æ¡¢´ûÃΤÎËÜ·ï¥×¥í¥°¥é¥à¤Î¸í¤ê¡¢¸í¤ê¤Î½¤Àµ¡¢À©¸Â»ö¹à¤ª¤è¤Ó²óÈòÁ¼Ã֤˴ؤ¹¤ë¾ðÊó¤ò´Þ¤ó¤À IBM ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ø¤Î¥¢¥¯¥»¥¹¤òÄɲÃÎÁ¶â̵¤·¤ÇÄ󶡤·¤Þ¤¹¡£¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï www.ibm.com/software/support ¤Î Software Support Handbook ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£ + +Êݾڴü´ÖÃæ¤ËËÜ·ï¥×¥í¥°¥é¥à¤¬ÊݾÚÄ̤ê²ÔƯ¤·¤Ê¤¤¾ì¹ç¤Ç¡¢¤«¤Ä IBM ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¤¢¤ë¾ðÊó¤ÇÌäÂê¤ò²ò·è¤Ç¤­¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î PoE ¤ò¤½¤ÎĴ㸵 (IBM ¤Þ¤¿¤ÏIBM¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼) ¤ËÊֵѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤³¤ì¤È°ú¤­´¹¤¨¤Ë»ÙʧºÑÎÁ¶â¤ÎÊÖ¶â¤ò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤òÊֵѸå¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѸ¢¤Ï½ªÎ»¤·¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤ÎÊÖ¶â¤Î¼õ¤±Êý¤Ë¤Ä¤¤¤Æ¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎĴ㸵¤Ë¤ªÌ䤤¹ç¤ï¤»¤¯¤À¤µ¤¤¡£ + +8.2 ÊݾڤÎŬÍѽü³° + +ËÜÊݾڤϥ饤¥»¥ó¥·¡¼¤ËÄ󶡤µ¤ì¤ëÊݾڤΤ¹¤Ù¤Æ¤òµ¬Äꤷ¤¿¤â¤Î¤Ç¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¡¢¾¦ÉÊÀ­¤ÎÊݾڡ¢½½Ê¬¤ÊÉʼÁ¤ÎÊݾڡ¢ÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڡ¢¸¢¸¶¤ÎÊݾڡ¢¤ª¤è¤ÓÂè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڤâ´Þ¤à¤¹¤Ù¤Æ¤ÎÌÀ¼¨¤â¤·¤¯¤ÏÌÛ¼¨¤ÎÊݾÚÀÕǤ¤Þ¤¿¤ÏÊݾھò·ï¤ËÂå¤ï¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤Ã¤Æ¤Ï¡¢¶¯¹Ôµ¬Äê¤Ë¤è¤êÊݾÚÀÕǤ¤ÎÀ©¸Â¤¬¶Ø¤¸¤é¤ì¤ë¾ì¹ç¤¬¤¢¤ê¡¢¤³¤Î¾ì¹ç¾åµ­¤ÎÊݾÚÀÕǤ¤ÎÀ©¸Â¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËŬÍѤµ¤ì¤Þ¤»¤ó¡£¤¿¤À¤·¡¢¤³¤Î¾ì¹ç¤ÎÊݾڤâÊݾڴü´ÖÆâ¤Ë¸ÂÄꤵ¤ì¡¢Åö³ºÊݾڴü´Ö½ªÎ»¸å¤Ï¡¢¤¤¤«¤Ê¤ëÊݾڤâŬÍѤµ¤ì¤Þ¤»¤ó¡£¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤Ã¤Æ¤Ï¡¢Ë¡Î§¤Î¶¯¹Ôµ¬Äê¤Ë¤è¤ê¡¢ÊݾڤÎŬÍÑ´ü´Ö¤ÎÀ©¸Â¤¬¶Ø¤¸¤é¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¡¢¤³¤Î¾ì¹ç¾åµ­¤ÎÊݾڤÎŬÍÑ´ü´Ö¤ÎÀ©¸Â¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËŬÍѤµ¤ì¤Þ¤»¤ó¡£ + +ËÜÊݾڤϡ¢¥é¥¤¥»¥ó¥·¡¼¤Ë°ìÄê¤ÎˡŪ¸¢Íø¤òÉÕÍ¿¤·¤Þ¤¹¤¬¡¢¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤Ã¤Æ°Û¤Ê¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ + +Ëܹà¡Ê8. Êݾڤª¤è¤ÓŬÍѽü³°¡Ë¤ËÄê¤á¤ëÊÝ¾Ú¤Ï IBM ¤¬Ã±ÆÈ¤ÇÄ󶡤¹¤ë¤â¤Î¤Ç¤¹¡£¤¿¤À¤·¡¢Ëܹæ¡Ê8.2 ŬÍѽü³°¡Ë¤ËÄê¤á¤ëÌÈÀÕ ¤Ï¡¢Âè»°¼Ô¥³¡¼¥É¤òÄ󶡤¹¤ë IBM ¥µ¥×¥é¥¤¥ä¡¼¤Ë¤âŬÍѤµ¤ì¤Þ¤¹¡£IBM¥µ¥×¥é¥¤¥ä¡¼¤Ï¡¢Åö³º¥³¡¼¥É¤ò¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤â¾ò·ï¤âÉ餦¤³¤È¤Ê¤¯Ä󶡤¹¤ë¤â¤Î¤Ç¤¹¡£ËÜÃÊÍî¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯ IBM ¤ÎÊݾڵÁ̳¤ò̵¸ú¤Ë¤¹¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ + +9. ¥é¥¤¥»¥ó¥·¡¼¤Î¥Ç¡¼¥¿¤ª¤è¤Ó¥Ç¡¼¥¿¥Ù¡¼¥¹ + +ËÜ·ï¥×¥í¥°¥é¥à¤Ë´Ø¤¹¤ëÌäÂê¤Î¸¶°ø¤òÆÃÄꤷ¡¢¥é¥¤¥»¥ó¥·¡¼¤ò»Ù±ç¤¹¤ë¤¿¤á¤Ë¡¢IBM ¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¼¡¤Î¤¤¤º¤ì¤«¤òÍ×ÀÁ¤¹¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£1) ¥é¥¤¥»¥ó¥·¡¼¤Î¥·¥¹¥Æ¥à¤Ø¤Î±ó³Ö¥¢¥¯¥»¥¹¤ò IBM ¤Ëµö²Ä¤¹¤ë¤³¤È¡£2) ¥é¥¤¥»¥ó¥·¡¼¤Î¾ðÊó¤Þ¤¿¤Ï¥·¥¹¥Æ¥à¡¦¥Ç¡¼¥¿¤òIBM¤ËÁ÷¿®¤¹¤ë¤³¤È¡£¤¿¤À¤·¡¢¤«¤«¤ë»Ù±ç¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë¤ª¤±¤ëIBM¤ÎÊݾڵÁ̳¤ÎÈÏ°ÏÆâ¤ÇÄ󶡤µ¤ì¤ë¤â¤Î¤Ç¤¢¤ê¡¢¤½¤ÎÈϰϤòͤ¨¤ë¥µ¥Ý¡¼¥È¤ÎÄ󶡤ˤĤ¤¤Æ¤Ï¡¢ÊÌÅÓ½ñÌ̤ˤè¤ë·ÀÌó¤¬É¬ÍפǤ¹¡£¤¤¤«¤Ê¤ë¾ì¹ç¤Ç¤¢¤Ã¤Æ¤â¡¢IBM ¤Ï¡¢¥¨¥é¡¼¤ª¤è¤ÓÌäÂê¤Ë´Ø¤¹¤ë¾ðÊó¤ò¼«¼Ò¤ÎÀ½ÉʤβþÎɤȥµ¡¼¥Ó¥¹¸þ¾å¤Î¤¿¤á¤Ë»ÈÍѤ·¡¢´ØÏ¢¤¹¤ë¥µ¥Ý¡¼¥ÈŽ¥¥ª¥Õ¥¡¥ê¥ó¥°¤ÎÄ󶡤ËÌòΩ¤Æ¤ë¤¿¤á¤Ë»ÈÍѤ·¤Þ¤¹¡£¤³¤ÎÌÜŪ¤Î¤¿¤á¤Ë¡¢IBM ¤Ï¥é¥¤¥»¥ó¥·¡¼¤¬Â¸ºß¤¹¤ë¹ñ¤ª¤è¤Ó¤½¤ì°Ê³°¤Î¹ñ¤Ë¸ºß¤¹¤ëIBM »ö¶ÈÂΤª¤è¤Ó½¾·ÀÌó¼Ô¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤â¤Î¤È¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¤³¤ì¤òµö²Ä¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¼¡¤Î»ö¹à¤Ë´Ø¤·¤Æ¤Ï¡¢¤¹¤Ù¤Æ¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎÀÕǤ¤È¤·¤Þ¤¹¡£1¡Ë¥é¥¤¥»¥ó¥·¡¼¤¬ IBM ¤Ë¥¢¥¯¥»¥¹¤òÄ󶡤¹¤ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Ç¡¼¥¿¤ª¤è¤Ó¥³¥ó¥Æ¥ó¥Ä¡£2)¥Ç¡¼¥¿¡Ê¸Ä¿Í¼±Ê̲Äǽ¥Ç¡¼¥¿¤ò´Þ¤ß¤Þ¤¹¡£¡Ë¤Ø¤Î¥¢¥¯¥»¥¹¡¢¥»¥­¥å¥ê¥Æ¥£¡¼¡¢°Å¹æ²½¡¢»ÈÍѤª¤è¤ÓÁ÷¿®¤Ë´Ø¤¹¤ë¼ê³¤­¤ª¤è¤Ó´ÉÍý¤ÎÁªÂò¤ª¤è¤Ó¼Â»Ü¡£3¡Ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤ª¤è¤ÓÊݴɥǡ¼¥¿¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¤ª¤è¤Ó¥ê¥«¥Ð¥ê¡¼¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¸Ä¿Í¾ðÊó¤Ø¤Î¥¢¥¯¥»¥¹¤ò¥Ç¡¼¥¿¤Þ¤¿¤Ï¤½¤Î¾¤Î·Á¼°¤òÌä¤ï¤º¡¢°ìÀÚ IBM ¤ËÁ÷ÉÕ¤Þ¤¿¤ÏÄ󶡤·¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£¸í¤Ã¤Æ IBM ¤ËÄ󶡤µ¤ì¤¿¸Ä¿Í¾ðÊó¤Ë´Ø¤ï¤ë¡¢¤Þ¤¿¤Ï¸Ä¿Í¾ðÊó¤ÎIBM¤Ë¤è¤ëÁÓ¼º¤Þ¤¿¤Ï³«¼¨¤Ë´ØÏ¢¤·¤Æ¡¢IBM ¤¬Èï¤ëÁêÅö³Û¤ÎÈñÍѤª¤è¤Ó¤½¤Î¾¤Î¶â³Û¤Ë¤Ä¤¤¤Æ¤Ï¡¢Âè»°¼Ô¤«¤é¤Î¿½¤·Î©¤ÆÊ¬¤â´Þ¤á¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎÉéô¤È¤µ¤»¤Æ¤¤¤¿¤À¤­¤Þ¤¹¡£ + +10. ÀÕǤ¤ÎÀ©¸Â + +Ëܹà¡Ê10. ÀÕǤ¤ÎÀ©¸Â¡Ë¤ÇÄê¤á¤ëÀ©¸Â¤ª¤è¤ÓŬÍѽü³°¤Ï¡¢¶¯¹Ôµ¬Äê¤Ë¤è¤ê¶Ø»ß¤µ¤ì¤Ê¤¤ÈϰϤÇŬÍѤµ¤ì¤Þ¤¹¡£ + +10.1 IBM ¤ÎÀÕǤ + +¥é¥¤¥»¥ó¥·¡¼¤¬ IBM ¤ÎÀդ˵¢¤¹¤Ù¤­»öͳ (·ÀÌóÉÔÍú¹Ô¡¢²á¼º¡¢ÉÔ¼Âɽ¼¨¤Þ¤¿¤ÏÉÔË¡¹Ô°Ù¤Ê¤É¤ò´Þ¤ß¤Þ¤¹¡£) ¤Ë´ð¤Å¤¯Â»³²¤ËÂФ·¤ÆµßºÑ¤òµá¤á¤ë¾ì¹ç¡¢³ÆËÜ·ï¥×¥í¥°¥é¥à¤Ëµ¯°ø¤Þ¤¿¤Ï´ØÏ¢¤¹¤ë¡¢¤Þ¤¿¤ÏËÜ»ÈÍѾò·ï¤Î²¼¤ÇÄ󵯤µ¤ì¤ë IBM ¤ÎÇå½þÀÕǤÁí³Û¤Ï¡¢ÀÁµá¤Î¸¶°ø¤òÌä¤ï¤º¡¢¼¡¤Î³Æ¹æ¤ËÄê¤á¤ë¤â¤Î¤ÎÁí³Û¤ò¾å¸Â¤È¤·¤Þ¤¹¡£1) IBM ¤Î¸Î°Õ¤â¤·¤¯¤Ï²á¼º¤Ë¤è¤Ã¤Æ¤ªµÒÍͤËÀ¸¤¸¤¿¿ÈÂΡ¢À¸Ì¿¤ª¤è¤ÓÍ­ÂÎʪ¤ËÂФ¹¤ëÇå½þÀÕǤ¡£2) ¸½¼Â¤ËȯÀ¸¤·¤¿Ä̾狼¤ÄľÀܤλ³²¤ËÂФ·¡¢Â»³²È¯À¸¤ÎľÀܸ¶°ø¤È¤Ê¤Ã¤¿ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍÑÎÁ¶âÁêÅö³Û (ËÜ·ï¥×¥í¥°¥é¥à¤¬´ü¸ÂÉÕ¤­ÎÁ¶â¤ÎÂоݤξì¹ç¡¢´ü¸ÂÉÕ¤­ÎÁ¶â¤Î12 ¥ö·îʬ¤È¤·¤Þ¤¹¡£) ¤ò¸ÂÅ٤Ȥ¹¤ë¶âÁ¬Çå½þÀÕǤ¡£ + +¤³¤ÎÀ©¸Â¤Ï¡¢IBMËÜ·ï¥×¥í¥°¥é¥à¤Î³«È¯¼Ô¤ª¤è¤Ó¥µ¥×¥é¥¤¥ä¡¼¤ËÂФ·¤Æ¤âŬÍѤµ¤ì¤Þ¤¹¡£IBM ¤ª¤è¤Ó IBM¥×¥í¥°¥é¥à¤Î³«È¯¼Ô¤Ê¤é¤Ó¤Ë¥µ¥×¥é¥¤¥ä¡¼¤ËÂФ·¤Æ½ÅÊ£¤·¤ÆÂ»³²Çå½þ¤òÀÁµá¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +10.2 IBM ¤ÎÌÈÀÕ + +¤¤¤«¤Ê¤ë¾ì¹ç¤Ë¤ª¤¤¤Æ¤â¡¢IBM ¤ª¤è¤Ó IBM ¤Î¥×¥í¥°¥é¥à³«È¯¼Ô¤Ê¤é¤Ó¤Ë¥µ¥×¥é¥¤¥ä¡¼¤Ï¡¢¤½¤Îͽ¸«¤Î̵ͭ¤òÌä¤ï¤ºÈ¯À¸¤·¤¿°Ê²¼¤Î»³²¤Ë¤Ä¤¤¤Æ¤ÏÇå½þÀÕǤ¤òÉ餤¤Þ¤»¤ó¡£ + +a. ¥Ç¡¼¥¿¤ÎÁÓ¼º¡¢¤Þ¤¿¤Ï»½ý¡£ + +b. ÆÃÊÌ»³²¡¢ÉÕ¿ïŪ»³²¡¢Ä¨È³ÅªÂ»³²¤Þ¤¿¤Ï´ÖÀÜ»³²¡¢¤ª¤è¤Ó¤½¤Î¤Û¤«¤Î³ÈÂ绳² + +c. °ï¼ºÍø±×¡Ê¥Ó¥¸¥Í¥¹¡¢¼ý±×¡¢¿®ÍѤޤ¿¤ÏÀáÌ󤹤٤«¤ê¤·ÈñÍѤò´Þ¤ß¤Þ¤¹¡£¡Ë + +11. ½å¼é¾õ¶·¤Î³Îǧ + +Ëܹà¡Ê11. ½å¼é¾õ¶·¤Î³Îǧ¡Ë¤Ë¤ª¤¤¤Æ¡ÖIPLA ¥×¥í¥°¥é¥à¾ò·ï¡×¡ÊËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤­Ä󶡤µ¤ì¤ë¥×¥í¥°¥é¥à¤ËŬÍѤµ¤ì¤ë½ô¾ò·ï¡Ë¤Ï¡¢°Ê²¼¤ò°ÕÌ£¤·¤Þ¤¹¡£1) ËÜ»ÈÍѾò·ï¡¢Å¬ÍѤµ¤ì¤ë½¤Àµ¾ò¹à¤ª¤è¤Ó IBM ¤¬Ä󶡤¹¤ë¼è°úʸ½ñ¡£2) IBM Software Policy (IBM Software Policy ¥¦¥§¥Ö¥µ¥¤¥È (www.ibm.com/softwarepolicies) µ­ºÜ¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¡¢¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼ÎÁ¶â¤ª¤è¤Ó°Ü¹Ô¤Ë´Ø¤ï¤ë¥Ý¥ê¥·¡¼¤Ê¤É¡£) + +Ëܹà¤ÇÄê¤á¤ë¸¢Íø¤ª¤è¤ÓµÁ̳¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤¬¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·»ÈÍѵöÂú¤µ¤ì¤ë´ü´ÖÃæ¡¢¤ª¤è¤Ó¤½¤Î½ªÎ»¸å 2 ǯ´ÖÍ­¸ú¤È¤·¤Þ¤¹¡£ + +11.1 ³Îǧ¥×¥í¥»¥¹ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ¡¢Å¬ÍѤµ¤ì¤ë IBM ¤Î»ÈÍѵöÂú¾ò·ï¤ª¤è¤ÓÎÁ¶â¾ò·ïÅù¤«¤é¤Ê¤ë¤¹¤Ù¤Æ¤Î IPLA ¥×¥í¥°¥é¥à¾ò·ï¤ò½å¼é¤·¤Æ»ÈÍѤ·¤Æ¤¤¤ë¤³¤È¤ò¾ÚÌÀ¤¹¤ë¤¿¤á¤Ë½½Ê¬¤Ê¡¢½ñÌ̤ˤè¤ëÀµ³Î¤Êµ­Ï¿¡¢¥·¥¹¥Æ¥à¡¦¥Ä¡¼¥ë¤«¤é¤Î½ÐÎÏ¡¢¤ª¤è¤Ó¤½¤Î¾¤Î¥·¥¹¥Æ¥à¾ðÊó¤òºîÀ®¡¢ÊÝ»ý¤·¡¢IBM ¤ª¤è¤Ó IBM ¤Î´Æºº¿Í¤ËÄ󶡤¹¤ë¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢°Ê²¼¤¤¤º¤ì¤Î»ö¹à¤Ë¤Ä¤¤¤Æ¤âÀÕǤ¤òÉ餦¤â¤Î¤È¤·¤Þ¤¹¡£1) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¤½¤Î»ÈÍѵöÂúÈϰϤòͤ¨¤Ê¤¤¤³¤È¤òÊݾڤ¹¤ë¤³¤È¡£ 2) IPLA ¥×¥í¥°¥é¥à¾ò·ï¤ò½å¼é¤¹¤ë¤³¤È¡£ + +IBM ¤Ï¡¢ÁêÅö¤ÊÄÌÃΤò¹Ô¤Ã¤¿¤¦¤¨¤Ç¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ IPLA ¥×¥í¥°¥é¥à¾ò·ï¤Ë½¾¤Ã¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѡʤ½¤ÎÌÜŪ¤ÏÌ䤤¤Þ¤»¤ó¡£¡Ë¤¹¤ë¤¹¤Ù¤Æ¤Î»ÜÀߤª¤è¤Ó´Ä¶­¤Ç¡¢IPLA ¥×¥í¥°¥é¥à¾ò·ï¤Ë´Ø¤¹¤ë¥é¥¤¥»¥ó¥·¡¼¤Î½å¼é¾õ¶·¤ò³Îǧ¤Ç¤­¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Åö³º³Îǧ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¶È̳¤ÎÃæÃǤòºÇ¾®¸Â¤Ë¤¹¤ëÊýË¡¤Ç¡¢Ä̾ï¤Î¶È̳»þ´ÖÆâ¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÜÀ߯â¤Ç¹Ô¤ï¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£IBM ¤Ï¡¢Åö³ºÌÜŪ¤Î¤¿¤á¤ËÆÈΩ´Æºº¿Í (°Ê²¼¡Ö´Æºº¿Í¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤â¤Î¤È¤·¡¢´Æºº¿Í¤È¤Î´Ö¤Ç½ñÌ̤ˤè¤ëµ¡Ì©ÊÝ»ý·ÀÌó¤òÄù·ë¤·¤Þ¤¹¡£ + +11.2 ²ò·è + +IBM ¤Ï¡¢Åö³º³Îǧ¤Ë¤ª¤¤¤Æ¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂúÈϰϤòͤ¨¤Æ¤½¤ì¤ò»ÈÍѤ·¡¢¤Þ¤¿¤Ï IPLA ¥×¥í¥°¥é¥à¾ò·ï¤ò½å¼é¤·¤Æ¤¤¤Ê¤¤¤³¤È¤¬È½ÌÀ¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤½¤Î»Ý¤ò½ñÌ̤ÇÄÌÃΤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢IBM ¤¬ÀÁµá½ñ¤Ëµ­ºÜ¤¹¤ë¼¡¤Î¤¹¤Ù¤Æ¤Î¹àÌܤËÂФ¹¤ëÎÁ¶â¤ò®¤ä¤«¤ËľÀÜIBM ¤Ë»Ùʧ¤¦¤â¤Î¤È¤·¤Þ¤¹¡£1) »ÈÍѵöÂúÈϰϤòͤ¨¤ë»ÈÍÑ¡¢2) ¤«¤«¤ëͲá»ÈÍѤËÂФ·¤Æ¼õ¤±¤¿¥µ¥Ý¡¼¥È¤ËÂФ¹¤ëÎÁ¶â¡Ê»ÈÍѵöÂúÈϰϤòͤ¨¤Æ»ÈÍѤ·¤¿´ü´Ö¡¢¤Þ¤¿¤Ï2 ǯ´Ö¤Î¤¦¤Á¡¢Ã»¤¤´ü´Ö¡£¡Ë¡¢ 3) Åö³º³Îǧ¤Î·ë²Ì·èÄꤵ¤ì¤ëÄɲäλÈÍÑÎÁ¶â¤ª¤è¤Ó¤½¤Î¾¤ÎÇå½þ¶â³Û¡£ + +12. Âè»°¼Ô¥³¡¼¥É¤Ë´Ø¤¹¤ëÆÃµ­»ö¹à + +ËÜ·ï¥×¥í¥°¥é¥à¤Ë¤Ï¡¢Âè»°¼Ô¤Ç¤Ï¤Ê¤¯IBM ¤¬ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤­¥é¥¤¥»¥ó¥·¡¼¤Ë»ÈÍѵöÂú¤¹¤ëÂè»°¼Ô¥³¡¼¥É¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£Âè»°¼Ô¥³¡¼¥É¤Ë´Ø¤¹¤ëÆÃµ­»ö¹à (°Ê²¼¡ÖÂè»°¼ÔÆÃµ­»ö¹à¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¡¢¤«¤«¤ëÆÃµ­»ö¹à¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¤¿¤á¤À¤±¤Î¾ðÊó¤È¤·¤ÆÄ󶡤µ¤ì¤Þ¤¹¡£Åö³ºÆÃµ­»ö¹à¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î NOTICES ¥Õ¥¡¥¤¥ë¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ÆÃÄê¤ÎÂè»°¼Ô¥³¡¼¥É¤Î¥½¡¼¥¹Ž¥¥³¡¼¥É¤ÎÆþ¼êÊýË¡¤Ë´Ø¤¹¤ë¾ðÊó¤Ï¡¢¡ÖÂè»°¼ÔÆÃµ­»ö¹à¡×¤Ëµ­ºÜ¤¬¤¢¤ê¤Þ¤¹¡£¡ÖÂè»°¼ÔÆÃµ­»ö¹à¡×¤ÎÃæ¤Ç IBM ¤¬Âè»°¼Ô¥³¡¼¥É¤ò¡Ö½¤Àµ²ÄǽÂè»°¼Ô¥³¡¼¥É¡×¤ÈÆÃÄꤹ¤ë¾ì¹ç¡¢IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¤Æ¡¢1) ¡Ö½¤Àµ²ÄǽÂè»°¼Ô¥³¡¼¥É¡×¤ò½¤Àµ¤¹¤ë¤³¤È¡¢¤ª¤è¤Ó2) Åö³ºÂè»°¼Ô¥³¡¼¥É¤ËÂФ¹¤ë¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë½¤Àµ¤ò¥Ç¥Ð¥Ã¥°¤¹¤ë¤³¤È¤òÌÜŪ¤È¤¹¤ë¾ì¹ç¤Ë¸Â¤ê¡Ö½¤Àµ²ÄǽÂè»°¼Ô¥³¡¼¥É¡×¤ÈľÀÜ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¤È¤ëËÜ·ï¥×¥í¥°¥é¥à¤Î¥â¥¸¥å¡¼¥ë¤Ë¥ê¥Ð¡¼¥¹Ž¥¥¨¥ó¥¸¥Ë¥¢¥ê¥ó¥°¤ò¹Ô¤Ê¤¦¤³¤È¤òµö²Ä¤·¤Þ¤¹¡£IBM¤Ë¥µ¡¼¥Ó¥¹¤ª¤è¤Ó¥µ¥Ý¡¼¥È¤ÎµÁ̳¤¬¤¢¤ë¾ì¹ç¤Ï¡¢½¤Àµ¤µ¤ì¤Æ¤¤¤Ê¤¤ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤Þ¤¹¡£ + +13. ¤½¤Î¾ + +a. ËÜ»ÈÍѾò·ï¤Ï¡¢¾ÃÈñ¼ÔÊݸîË¡µ¬¤Ë¤è¤ë¤ªµÒÍͤθ¢Íø¤òÊѹ¹¤¹¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ + +b. IBM ¤¬ÊªÍýŪ¤ÊÇÞÂΤˤè¤ê¥é¥¤¥»¥ó¥·¡¼¤ËÄ󶡤¹¤ëËÜ·ï¥×¥í¥°¥é¥à¤Ï¡¢IBM»ØÄê¤Î±¿Á÷²ñ¼Ò¤ËÅϤë¤Þ¤Ç¡¢IBM ¤¬¤½¤Î½Ð²Ù¤ª¤è¤ÓÇÛÁ÷¤ÎÀÕǤ¤òÉ餤¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤ÈIBM¤¬ÊÌÅÓ½ñÌ̤ˤƹç°Õ¤¹¤ë¾ì¹ç¤ò½ü¤­¤Þ¤¹¡£ + +c. ËÜ»ÈÍѾò·ï¤Î¤¤¤º¤ì¤«¤Î¾ò¹à¤¬Ìµ¸ú¤Þ¤¿¤ÏÍú¹Ô¶¯À©¤¬¤Ç¤­¤Ê¤¤¤È¤µ¤ì¤¿¾ì¹ç¤Ç¤â¡¢¤½¤Î¾¤Î¾ò¹à¤ÏÍ­¸ú¤Ë¸³¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +d. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ÆÃÄê¤Î»ÈÍÑÌÜŪ¤Þ¤¿¤ÏÆÃÄê¤Î¥æ¡¼¥¶¡¼¤Ø¤ÎÍ¢½Ð¤Ë´Ø¤¹¤ë¤¹¤Ù¤Æ¤ÎÍ¢½ÐÆþ´ØÏ¢Å¬ÍÑË¡Îá(´ØÏ¢¤¹¤ëÊÆ¹ñ¤Î¶ØÍ¢Á¼ÃÖ¤ª¤è¤ÓÀ©ºÛÁ¼ÃÖ¤ò´Þ¤ß¤Þ¤¹¡£)¤ò½å¼é¤¹¤ë¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +e. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢International Business Machines Corporation ¤ª¤è¤Ó¤½¤Î»Ò²ñ¼Ò (¤ª¤è¤Ó¤½¤ì¤é¤Î¾µ·Ñ¿Í¡¢¾ù¼õ¿Í¡¢½¾·ÀÌó¼Ô¤Ê¤é¤Ó¤Ë IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼) ¤¬¡¢IBM À½Éʤª¤è¤Ó¥µ¡¼¥Ó¥¹¤Ë´ØÏ¢¤·¤Æ¡¢¤Þ¤¿¤Ï IBM ¤Î¥é¥¤¥»¥ó¥·¡¼¤È¤Î¼è°ú´Ø·¸¤ò¤è¤ê¶ÛÌ©¤Ë¤¹¤ëÌÜŪ¤Ç¡¢¤ªµÒÍͤÎÏ¢ÍíÀè¸Ä¿Í¾ðÊó (»á̾¡¢ÅÅÏÃÈֹ桢ÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤ò´Þ¤ß¤Þ¤¹¡£) ¤ò±Ä¶È³èư¤ò¹Ô¤¦Ç¤°Õ¤Î¾ì½ê¤ËÊݴɤ·¤Æ»ÈÍѤ¹¤ë¤³¤È¤òµö²Ä¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +f. ¤¤¤º¤ì¤ÎÅö»ö¼Ô¤â¡¢Áê¼ê¦¤ÎËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯µÁ̳¤ÎÉÔÍú¹Ô¤ËÂФ¹¤ë¸¢Íø¤ò¹Ô»È¤¹¤ëÁ°¤Ë¡¢ÁêÅö´ü´Ö¤òÄê¤á¤Æ¤½¤ÎÀ§Àµ¤òºÅ¹ð¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Î¾Åö»ö¼Ô¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ØÏ¢¤¹¤ëξÅö»ö¼Ô´Ö¤Î¤¹¤Ù¤Æ¤ÎʶÁè¡¢°Õ¸«¤ÎÁê°ã¡¢¤Þ¤¿¤Ï¿½¤·Î©¤Æ¤Ë¤Ä¤¤¤Æ¡¢À¿°Õ¤ò»ý¤Ã¤Æ²ò·è¤¹¤ë¤è¤¦Åؤá¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +g. ¶¯¹Ôµ¬Ä꤬¤¢¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯¤¤¤«¤Ê¤ëÀÁµá¸¢¤â¡¢ÀÁµá¤¬²Äǽ¤È¤Ê¤Ã¤¿»þ¤«¤é24¤«·î¤ò·Ð²á¤·¤¿¾ì¹ç¤Ë¤Ï¡¢»þ¸ú¤Ë¤è¤ê¾ÃÌǤ·¤Þ¤¹¡£ + +h. ¤¤¤º¤ì¤ÎÅö»ö¼Ô¤â¡¢¼«¸Ê¤ÎÀÕ¤á¤Ëµ¢¤¹¤³¤È¤Î¤Ç¤­¤Ê¤¤»öͳ¤«¤éÀ¸¤¸¤¿Â»³²¤Ë¤Ä¤¤¤Æ¤Ï¡¢ÀÕǤ¤òÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +i. ËÜ»ÈÍѾò·ï¤Ë¤è¤êÂè»°¼Ô¤ËÂФ·¤Æ¤¤¤«¤Ê¤ëÁʸ¢¤Þ¤¿¤ÏÀÁµá¸¢¤âÀ¸¤¸¤ë¤â¤Î¤Ç¤Ï¤Ê¤¯¡¢¤Þ¤¿¥é¥¤¥»¥ó¥·¡¼¤ËÂФ¹¤ëÂè»°¼Ô¤«¤é¤ÎÇå½þÀÁµá¤Ë¤Ä¤¤¤Æ IBM ¤¬ÀÕǤ¤òÉ餦¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¿¤À¤·¡¢¾åµ­ Âè10.1¹æ¡Ê IBM ¤¬ÀÕǤ¤òÉ餦¹àÌܡˤÇǧ¤á¤é¤ì¤¿¡¢IBM ¤¬¤«¤«¤ëÂè»°¼Ô¤ËÂФ·¤ÆË¡Åª¤ËÀÕǤ¤òÍ­¤¹¤ë¡¢¿ÈÂΡ¢À¸Ì¿¡¢¤ª¤è¤ÓÍ­ÂÎʪ¤ËÂФ¹¤ëÇå½þÀÕǤ¤Ï½ü¤­¤Þ¤¹¡£ + +j. ¤¤¤º¤ì¤ÎÅö»ö¼Ô¤â¡¢ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤Ë¤¢¤¿¤ê¡¢¼¡¤Î»ö¹à¤ò´Þ¤á¡Ê¤³¤ì¤é¤Ë¸ÂÄꤵ¤ì¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¡Ë¡¢ËÜ»ÈÍѾò·ï¤ÇÌÀ¼¨¤µ¤ì¤ë¤â¤Î°Ê³°¤ÎɽÌÀ¤Ë°Íµò¤¹¤ë¤â¤Î¤Ç¤Ï¤Ê¤¤¤³¤È¤ËƱ°Õ¤·¤Þ¤¹¡£ 1) ËÜ·ï¥×¥í¥°¥é¥à¤ÎÀ­Ç½¤Þ¤¿¤Ïµ¡Ç½¡£¡ÊÂè8¹à¡ÊÊݾڤª¤è¤ÓŬÍѽü³°¡Ë¤ÇÌÀ¼¨Åª¤ËÊݾڤµ¤ì¤Æ¤¤¤ë¤â¤Î¤ò½ü¤­¤Þ¤¹¡£¡Ë2) Áê¼êÊýÅö»ö¼Ô¤Î·Ð¸³¤Þ¤¿¤Ï¿ä¾©¡£3) ¥é¥¤¥»¥ó¥·¡¼¤¬Ã£À®¤·ÆÀ¤ë¸ú²Ì¤Þ¤¿¤ÏÀḺ¡£ + +k. IBM ¤Ï¡¢ÆÃÄê¤ÎË¡¿Í (°Ê²¼¡ÖIBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ÈÆÃÄê¤ÎËÜ·ï¥×¥í¥°¥é¥à¤ÎÈÎÇäÂ¥¿Ê¡¢ÈÎÇ䤪¤è¤Ó¥µ¥Ý¡¼¥È¤Ë´Ø¤·¤Æ·ÀÌó¤òÄù·ë¤·¤Æ¤¤¤Þ¤¹¤¬¡¢IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¤Ï¡¢°ú¤­Â³¤­ IBM ¤«¤é¤ÏÆÈΩ¤·¤¿Ê̸Ĥθºß¤Ç¤¹¡£IBM ¤Ï¡¢IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¤Î³èư¤Þ¤¿¤ÏÀ¼ÌÀ¡¢¤Þ¤¿¤Ï IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¤Î¥é¥¤¥»¥ó¥·¡¼¤ËÂФ¹¤ëµÁ̳¤Ë´Ø¤·¡¢ÀÕǤ¤òÉ餤¤Þ¤»¤ó¡£ + +l. ¥é¥¤¥»¥ó¥·¡¼¤¬ IBM¤È¤Î´Ö¤Ç¼è¤ê¸ò¤ï¤·¤¿¤½¤Î¾¤Î·ÀÌó½ñ¡ÊIBM Customer Agreement ¤Ê¤É¡Ë¤Çµ¬Äꤵ¤ì¤ë»ÈÍѸ¢¤ª¤è¤ÓÃÎŪºâ»º¤ÎÊä½þ¤Ë´Ø¤¹¤ë¾ò¹à¤Ï¡¢ËÜ»ÈÍѾò·ï¤Î²¼¤ÇÉÕÍ¿¤µ¤ì¤ë¥×¥í¥°¥é¥à»ÈÍѸ¢¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£ + +14. ÃÏÍýŪÈϰϤª¤è¤Ó½àµòË¡ + +14.1 ½àµòË¡ + +ξÅö»ö¼Ô¤Ï¡¢Ë¡¸¶Íý¤ÎÌ·½â¤Ë´Ø¤¹¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ·ÀÌ󤫤éÀ¸¤¸¤ë¡¢¤Þ¤¿¤ÏËÜ·ÀÌó¤Ë´ØÏ¢¤¹¤ëξÅö»ö¼Ô¤Î¤¹¤Ù¤Æ¤Î¸¢ÍøµÁ̳¤ò¡¢µ¬À©¡¢²ò¼á¡¢¼Â»Ü¤¹¤ë¤¿¤á¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤ò¼èÆÀ¤·¤¿¹ñ¤ÎˡΧ¤òŬÍѤ¹¤ë¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¹ñºÝÇäÇã·ÀÌó¤Ë´Ø¤¹¤ë¹ñÏ¢¾òÌó (United Nations Convention on Contracts for the International Sale of Goods) ¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£ + +14.2 ºÛȽ´É³í¸¢ + +¤¹¤Ù¤Æ¤Î¸¢Íø¤ª¤è¤ÓµÁ̳¤Ë¤Ä¤¤¤Æ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤ò¼èÆÀ¤·¤¿¹ñ¤ÎºÛȽ½ê¤ÎȽÃǤ˽¾¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ + +Âè 2 ¾Ï - ³Æ¹ñ¸ÇÍ­¤Î¾ò¹à + +ÆüËܤÇÉÕÍ¿¤µ¤ì¤ë »ÈÍѸ¢¤Ë¤Ä¤¤¤Æ¤Ï¡¢ °Ê²¼¤Î¾ò·ï¤¬Âè 1 ¾Ï¤Ç¼¨¤µ¤ì¤¿¾ò·ï¤òÃÖ¤­´¹¤¨¤ë¤«¤Þ¤¿¤Ï¤«¤«¤ë¾ò·ï¤ò½¤Àµ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Âè 1 ¾Ï¤Î»ÈÍѾò·ï¤Ç¡¢¤³¤ì¤é¤Î½¤Àµ¤¬²Ã¤¨¤é¤ì¤Ê¤¤»ÈÍѾò·ï¤Ï¡¢¤¹¤Ù¤Æ¡¢Êѹ¹¤µ¤ì¤º¡¢°ú¤­Â³¤­Í­¸ú¤Ë¸³¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +13. ¤½¤Î¾ + +13.f ¤Î¸å¤Ë¼¡¤Î¾ò·ï¤¬ÁÞÆþ¤µ¤ì¤Þ¤¹¡£ + +Ëܽñ¤Ë´Ø¤¹¤ëµ¿µÁ¤¬À¸¤¸¤¿¾ì¹ç¤Ï¡¢Åö»ö¼ÔÁÐÊý¤¬¿®µÁÀ¿¼Â¤Î¸¶Â§¤Ë½¾¤Ã¤Æ¶¨µÄ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_ko b/charts/mq-advancedserver/LICENSE_locale/LICENSE_ko new file mode 100644 index 0000000..e83c40f --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_ko @@ -0,0 +1,1061 @@ +ÁÖÀÇ»çÇ× + +ÀÌ Á¤º¸¿¡´Â ´ÙÁß ÇÁ·Î±×·¥À» À§ÇÑ ¾Æ·¡ ¶óÀ̼¾½º Á¤º¸ ¹®¼­°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. °¢ ¶óÀ̼¾½º Á¤º¸ ¹®¼­¿¡´Â ÇØ´ç ¹®¼­°¡ Àû¿ëµÇ´Â ÇÁ·Î±×·¥ÀÌ ¸í½ÃµË´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ±ÇÇÑÀ» ÃëµæÇÑ ÇÁ·Î±×·¥¿¡ ÇØ´çÇÏ´Â ¶óÀ̼¾½º Á¤º¸ ¹®¼­¸¸ Àû¿ëµË´Ï´Ù. + + +============================================== + + +Áß¿ä: ÁÖÀDZí°Ô ÀÐÀ¸½Ê½Ã¿À + +´ÙÀ½ µÎ °¡Áö ¶óÀ̼¾½º °è¾àÀÌ Á¦°øµË´Ï´Ù. + +1. IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à +2. IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» ½ÇÁ¦ ¾÷¹« ¿ëµµ(Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð ¿ëµµ Á¦¿Ü)·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾àÀ» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð(ÅëĪÇÏ¿© "Æò°¡") ¿ëµµ·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â (i) IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "Æò°¡ ¶óÀ̼¾½º")À» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°í ¹× (ii) IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "IPLA")À» ¼öÁ¤¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Æò°¡ ±â°£ µ¿¾È Àû¿ëµË´Ï´Ù. + +IPLA´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Æò°¡¸¦ ¸¶Ä£ ÈÄ ±¸ÀÔ °è¾à(¿¹: IBM ±¹Á¦ Passport Advantage ¶Ç´Â IBM Passport Advantage Express °è¾à)À» ü°áÇÏ¿© ÇÁ·Î±×·¥À» º¸À¯Çϱâ·Î ¼±ÅÃÇÑ °æ¿ì(¶Ç´Â Æò°¡¸¦ ¸¶Ä£ ÈÄ »ç¿ëÀ» À§ÇØ ÇÁ·Î±×·¥ÀÇ »çº»À» Ãß°¡·Î ÃëµæÇÏ´Â °æ¿ì) ÀÚµ¿À¸·Î Àû¿ëµË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º¿Í IPLA´Â µ¿½Ã¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀÌµé µÎ °è¾àÀº ÇÑ °è¾à¿¡ ÀÇÇØ ´Ù¸¥ °è¾àÀÌ ¼öÁ¤µÇÁö ¾ÊÀ¸¸ç °¢°¢ µ¶¸³µÈ °è¾àÀÔ´Ï´Ù. + +ÀÌ·¯ÇÑ µÎ ¶óÀ̼¾½º °è¾àÀÇ °¢ Àü¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(Z125-5543-05)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§ (ÇÁ·Î±×·¥ ¹øÈ£: +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Ç¥ÁØ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +Æò°¡ ±â°£ + +Æò°¡ ±â°£Àº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ¸é ½ÃÀ۵Ǿî 90ÀÏ ÈÄ¿¡ Á¾·áµË´Ï´Ù. + +º¸Á¶ ÇÁ·Î±×·¥(Supporting Programs) + +º» ÇÁ·Î±×·¥Àº ´ÙÁß Á¦Ç° ÆÐŰÁö·Î ¶óÀ̼¾½º°¡ ºÎ¿©µÇ¸ç º» ÇÁ·Î±×·¥¿¡´Â ¾Æ·¡ º¸Á¶ ÇÁ·Î±×·¥ÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à ¹× º» ÇÁ·Î±×·¥ ¶óÀ̼¾½º Áõ¼­ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­(º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­¿¡¼­ ´õ ¸¹Àº ±Ç¸®¸¦ Á¦°øÇÑ °æ¿ì´Â Á¦¿Ü) ÁÖ ÇÁ·Î±×·¥ÀÇ »ç¿ëÀ» Áö¿øÇϱâ À§Çؼ­¸¸ ÇØ´ç º¸Á¶ ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. "»ç¿ëÀ» Áö¿øÇϱâ À§ÇØ"¿¡¼­ »ç¿ëÀ̶õ ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ÁÖ ÇÁ·Î±×·¥ ¶Ç´Â ´Ù¸¥ º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â µ¥ ÇÊ¿äÇϰųª Á÷Á¢ÀûÀ¸·Î °ü·ÃÀÌ ÀÖ´Â »ç¿ë¸¸ ÀǹÌÇÕ´Ï´Ù. ±âŸ ´Ù¸¥ ¿ëµµ¸¦ À§Çؼ­´Â º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÁÖ ÇÁ·Î±×·¥°ú º°µµ·Î º¸Á¶ ÇÁ·Î±×·¥À» ¾çµµÇϰųª ÀçÆÇ¸ÅÇÒ ¼ö ¾ø½À´Ï´Ù. º¸Á¶ ÇÁ·Î±×·¥¿¡´Â ¶óÀ̼¾½º Á¶Ç×ÀÌ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. °è¾à Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â ¶óÀ̼¾½º Á¤º¸ ¹®¼­ÀÇ Á¶Ç×ÀÌ º¸Á¶ ÇÁ·Î±×·¥ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀÌ ¸¸·áµÇ°Å³ª ÇØÁöµÈ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â º¸Á¶ ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» »ç¿ë Áß´ÜÇϰųª ÆÄ±âÇϰųª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ Áï½Ã ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º¸Á¶ ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¿¬¶ôÇØ¾ß ÇÕ´Ï´Ù. »ó±âÇÑ Á¦ÇÑ ¹üÀ§¸¦ ³Ñ¾î¼­ º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â IBM ÆÇ¸Å ´ã´çÀÚ³ª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̼¾½º¸¦ ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +º» ÇÁ·Î±×·¥°ú ÇÔ²² ¶óÀ̼¾½º°¡ ºÎ¿©µÈ º¸Á¶ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°½À´Ï´Ù. +IBM WebSphere Application Server Liberty V17.0 + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(Z125-3301-14)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§ (ÇÁ·Î±×·¥ ¹øÈ£: +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Ç¥ÁØ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +Á¦ÇÑ »ç¿ë ±Ç¸® + +±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à("IPLA")°ú º» ¶óÀ̼¾½º Á¤º¸¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ, IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô º» ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Â Á¦ÇÑÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±Ç¸®´Â ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö("PVU"), ¸®¼Ò½º ¹ë·ù À¯´Ö("RVU"), ¹ë·ù À¯´Ö("VU") µî Çã°¡µÈ »ç¿ë(Authorized Use) ·¹º§À̳ª ¶óÀ̼¾½º Áõ¼­¿¡ ¸í½ÃµÈ ´ë·Î ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÁöºÒÇÑ ±âŸ ÁöÁ¤µÈ »ç¿ë ·¹º§·Î Á¦Çѵ˴ϴÙ. ¶óÀ̼¾½º »ç¿ëÀÚÀÇ »ç¿ëÀº ÁöÁ¤µÈ ±â°è·Î Á¦Çѵǰųª º¸Á¶ ÇÁ·Î±×·¥À¸·Î¸¸ »ç¿ëÇϵµ·Ï Á¦Çѵǰųª ´Ù¸¥ Á¦ÇÑ»çÇ׿¡ ÀÇÇØ Á¦ÇÑµÉ ¼öµµ ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ °æÁ¦Àû °¡Ä¡¸¦ ¸ðµÎ ÁöºÒÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÏÁö ¾ÊÀ¸¸é ±âŸ ´Ù¸¥ »ç¿ëÀÌ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀ» ÃëµæÇÑ Áذаè¾à¿¡¼­ ±¸Ã¼ÀûÀ¸·Î ¸í½ÃÇÏÁö ¾Ê´Â ÇÑ, º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© »ó¾÷¿ë IT ¼­ºñ½º¸¦ Á¦3ÀÚ¿¡°Ô Á¦°øÇϰųª »ó¾÷¿ë È£½ºÆÃ ¶Ç´Â ½ÃºÐÇÒÀ» Á¦°øÇϰųª º» ÇÁ·Î±×·¥À» Àç¶óÀ̼¾½º, ÀÓ´ë ¶Ç´Â ¸®½ºÇÒ ¼ö ¾ø½À´Ï´Ù. Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÑ °æ¿ì ¶Ç´Â ´Ù¸¥ Á¶Ç×À̳ª º¸Ãæ Á¶Ç׿¡ ÀǰÅÇÏ¿©, ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Ãß°¡ÀûÀÎ ±Ç¸®°¡ Á¦°øµÉ ¼ö ÀÖ½À´Ï´Ù. IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÀÌ·¯ÇÑ Ãß°¡ÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÏ´Â ±Ç¸®¸¦ º¸À¯ÇÕ´Ï´Ù. + +¸í¼¼ + +ÇÁ·Î±×·¥ÀÇ ¸í¼¼´Â ÇÁ·Î±×·¥ ¹ßÇ¥ ¹®¼­ÀÇ Á¾ÇÕÀûÀÎ ¼³¸í ¹× ±â¼ú Á¤º¸ Àý¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. + +º¸Á¶ ÇÁ·Î±×·¥(Supporting Programs) + +º» ÇÁ·Î±×·¥Àº ´ÙÁß Á¦Ç° ÆÐŰÁö·Î ¶óÀ̼¾½º°¡ ºÎ¿©µÇ¸ç º» ÇÁ·Î±×·¥¿¡´Â ¾Æ·¡ º¸Á¶ ÇÁ·Î±×·¥ÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à ¹× º» ÇÁ·Î±×·¥ ¶óÀ̼¾½º Áõ¼­ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­(º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­¿¡¼­ ´õ ¸¹Àº ±Ç¸®¸¦ Á¦°øÇÑ °æ¿ì´Â Á¦¿Ü) ÁÖ ÇÁ·Î±×·¥ÀÇ »ç¿ëÀ» Áö¿øÇϱâ À§Çؼ­¸¸ ÇØ´ç º¸Á¶ ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. "»ç¿ëÀ» Áö¿øÇϱâ À§ÇØ"¿¡¼­ »ç¿ëÀ̶õ ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ÁÖ ÇÁ·Î±×·¥ ¶Ç´Â ´Ù¸¥ º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â µ¥ ÇÊ¿äÇϰųª Á÷Á¢ÀûÀ¸·Î °ü·ÃÀÌ ÀÖ´Â »ç¿ë¸¸ ÀǹÌÇÕ´Ï´Ù. ±âŸ ´Ù¸¥ ¿ëµµ¸¦ À§Çؼ­´Â º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÁÖ ÇÁ·Î±×·¥°ú º°µµ·Î º¸Á¶ ÇÁ·Î±×·¥À» ¾çµµÇϰųª ÀçÆÇ¸ÅÇÒ ¼ö ¾ø½À´Ï´Ù. º¸Á¶ ÇÁ·Î±×·¥¿¡´Â ¶óÀ̼¾½º Á¶Ç×ÀÌ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. °è¾à Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â ¶óÀ̼¾½º Á¤º¸ ¹®¼­ÀÇ Á¶Ç×ÀÌ º¸Á¶ ÇÁ·Î±×·¥ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀÌ ¸¸·áµÇ°Å³ª ÇØÁöµÈ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â º¸Á¶ ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» »ç¿ë Áß´ÜÇϰųª ÆÄ±âÇϰųª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ Áï½Ã ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º¸Á¶ ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¿¬¶ôÇØ¾ß ÇÕ´Ï´Ù. »ó±âÇÑ Á¦ÇÑ ¹üÀ§¸¦ ³Ñ¾î¼­ º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â IBM ÆÇ¸Å ´ã´çÀÚ³ª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̼¾½º¸¦ ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +º» ÇÁ·Î±×·¥°ú ÇÔ²² ¶óÀ̼¾½º°¡ ºÎ¿©µÈ º¸Á¶ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°½À´Ï´Ù. +IBM WebSphere Application Server Liberty V17.0 + +Çʼö ±ÇÇÑÀ» ¼³Á¤ÇÏ´Â µ¥ »ç¿ëµÇÁö ¾Ê´Â ±¸¼º¿ä¼Ò + +º» ÇÁ·Î±×·¥À» ¼³Ä¡Çϰųª »ç¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ ÆÇº°ÇÏ´Â µ¥ ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼ÒÀÇ ¼³Ä¡ ¶Ç´Â »ç¿ëÀº °í·ÁµÇÁö ¾Ê½À´Ï´Ù. Áï, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¶Ç׿¡ ÁØÇÏ¿© ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼Ò¸¦ ¼³Ä¡Çϰųª »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ÀÌ·¯ÇÑ ±¸¼º¿ä¼Ò´Â º» ÇÁ·Î±×·¥¿¡ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ °áÁ¤ÇÏ´Â µ¥´Â »ç¿ëµÇÁö ¾Ê½À´Ï´Ù. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Àç¹èÆ÷ °¡´É Ç׸ñ + +º» ÇÁ·Î±×·¥¿¡ Àç¹èÆ÷ °¡´É ±¸¼º¿ä¼Ò°¡ Æ÷ÇԵǾî ÀÖ´Â °æ¿ì ÇØ´ç ±¸¼º¿ä¼Ò´Â º» ÇÁ·Î±×·¥¿¡ µ¿ºÀµÈ REDIST ÆÄÀÏ¿¡ ¸í½ÃµË´Ï´Ù. º» °è¾à¿¡¼­ ºÎ¿©ÇÑ ¶óÀ̼¾½º ±Ç¸® ¿Ü¿¡, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ÙÀ½ Á¶Ç׿¡ ÁØÇÏ¿© Àç¹èÆ÷ °¡´É Ç׸ñÀ» ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. +1) Àç¹èÆ÷ Ç׸ñÀº ¿ÀºêÁ§Æ® ÄÚµå Çü½ÄÀ̾î¾ß Çϸç Àç¹èÆ÷ ½Ã º» ÇÁ·Î±×·¥°ú ÇÔ²² Á¦°øµÇ´Â REDIST ¶Ç´Â ¹®¼­ÀÇ ¸ðµç Áö½Ã»çÇ×, Áöħ ¹× ¸í¼¼¸¦ ÁؼöÇØ¾ß ÇÕ´Ï´Ù. +2) º» ÇÁ·Î±×·¥°ú ÇÔ²² Á¦°øµÇ´Â ¹®¼­¿¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Àç¹èÆ÷ °¡´É Ç׸ñÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù°í ¸í½ÃÇÑ °æ¿ì, ÀÌ·¯ÇÑ ¼öÁ¤»çÇ×Àº ÇØ´ç ¹®¼­ÀÇ ¸ðµç Áö½Ã»çÇ×, Áöħ ¹× ¸í¼¼¸¦ ÁؼöÇØ¾ß Çϸç ÀÌ·¯ÇÑ ¼öÁ¤»çÇ×(ÇØ´ç »çÇ×ÀÌ ÀÖ´Â °æ¿ì)Àº Àç¹èÆ÷ °¡´É Ç׸ñÀ¸·Î °£ÁֵǾî¾ß ÇÕ´Ï´Ù. +3) Àç¹èÆ÷ °¡´É Ç׸ñÀº º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© °³¹ßÇÑ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ÀÀ¿ëÇÁ·Î±×·¥(ÀÌÇÏ "¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥")ÀÇ ÀϺημ­, ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» ¶óÀ̼¾½º »ç¿ëÀÚÀÇ °í°´ÀÌ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÏ´Â ¿ëµµ·Î¸¸ ¹èÆ÷µÇ¾î¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥Àº Áß¿äÇÑ ºÎ°¡ °¡Ä¡¸¦ ±¸¼ºÇØ¾ß Çϸç Àç¹èÆ÷ °¡´É Ç׸ñÀº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¼ÒÇÁÆ®¿þ¾î Á¦Ç°¿¡ ´ëÇÑ ÃÖÁ¾ »ç¿ëÀÚÀÇ Áß¿äÇÑ Ãëµæ µ¿±â¿¡ ÇØ´çµÇÁö ¾Ê¾Æ¾ß ÇÕ´Ï´Ù. +4) Àç¹èÆ÷ °¡´É Ç׸ñ¿¡ JRE(Java Runtime Environment)°¡ Æ÷ÇԵǴ °æ¿ì, ¼ÒÇü ¶Ç´Â ±âŸ ÆÛº£ÀÌ½Ãºê µð¹ÙÀ̽º(Áï, ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­°¡ ÀÖÀ¸³ª ÄÄÇ»ÆÃÀÌ ÁÖ¿ä ¿ëµµ°¡ ¾Æ´Ñ µð¹ÙÀ̽º)°¡ ¾Æ´Ñ ÀÏ¹Ý ÄÄÇ»ÅÍ µð¹ÙÀ̽º(¿¹: ·¦Å¾, µ¥½ºÅ©Å¾ ¹× ¼­¹ö)¿¡¼­¸¸ ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» ½ÇÇàÇϵµ·Ï ¼³°èÇÑ °æ¿ì°¡ ¾Æ´Ï¸é ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥°ú ÇÔ²² ´Ù¸¥ ºñJava Àç¹èÆ÷ °¡´É Ç׸ñµµ Æ÷ÇÔÇØ¾ß ÇÕ´Ï´Ù. +5) ¶óÀ̼¾½º »ç¿ëÀÚ´Â Àç¹èÆ÷ °¡´É Ç׸ñ¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç ¶Ç´Â ÁÖÀÇ»çÇ× ÆÄÀÏÀ» Á¦°ÅÇÒ ¼ö ¾ø½À´Ï´Ù. +6) ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» »ç¿ëÇϰųª ¹èÆ÷ÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â ¸ðµç ¹è»ó û±¸¿¡ ´ëÇÏ¿© IBM, IBM °ø±ÞÀÚ ¶Ç´Â µð½ºÆ®¸®ºäÅÍ¿¡°Ô ¼ÕÇØ°¡ ¹ß»ýÇÏÁö ¾Êµµ·Ï ¹æ¾îÇØ¾ß ÇÕ´Ï´Ù. +7) ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¿øº» Àç¹èÆ÷ °¡´É ÆÄÀÏÀ̳ª ¸ðµâ°ú µ¿ÀÏÇÑ °æ·Î À̸§À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. +8) ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» ÆÇ¸ÅÇϱâ À§ÇØ IBM, IBMÀÇ °ø±ÞÀÚ ¶Ç´Â µð½ºÆ®¸®ºäÅÍÀÇ »çÀü ¼­¸é µ¿ÀÇ ¾øÀÌ IBM, IBMÀÇ °ø±ÞÀÚ ¶Ç´Â µð½ºÆ®¸®ºäÅÍÀÇ »óÈ£ ¶Ç´Â »óÇ¥¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. +9) IBM, IBM °ø±ÞÀÚ ¶Ç´Â µð½ºÆ®¸®ºäÅÍ´Â ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, Àç¹èÆ÷ °¡´É Ç׸ñ ¹× °ü·Ã ¹®¼­¸¦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. +10) ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥ ¹× Àç¹èÆ÷ °¡´É Ç׸ñÀÇ ¼öÁ¤»çÇ׿¡ ´ëÇÑ ±â¼úÀû Áö¿øÀÇ ¸ðµç Ã¥ÀÓÀº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ºÎ´ãÇÕ´Ï´Ù. +11) ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥¿¡ ´ëÇÑ ÃÖÁ¾ »ç¿ëÀÚ¿ÍÀÇ ¶óÀ̼¾½º °è¾à¿¡¼­ Àç¹èÆ÷ °¡´É Ç׸ñ ¶Ç´Â ±× ¼öÁ¤»çÇ×À» i) ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» ÀÛµ¿ °¡´ÉÇÏ°Ô ÇÏ´Â ¿ëµµ¿¡ ÇÑÇØ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ii) º¹»ç(¹é¾÷¿ëÀº Á¦¿Ü)Çϰųª iii) ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥°ú º°µµ·Î ¹èÆ÷ ¶Ç´Â ¾çµµÇϰųª iv) ¸®¹ö½º ¾î¼Àºí, ¸®¹ö½º ÄÄÆÄÀÏ ¶Ç´Â ´Þ¸® º¯È¯ÇÒ ¼ö ¾ø´Ù´Â Á¡À» ÃÖÁ¾ »ç¿ëÀÚ¿¡°Ô ÅëÁöÇØ¾ß ÇÕ´Ï´Ù(´Ü, °è¾à»óÀÇ ±Ç¸® Æ÷±â °¡´É¼ºÀÌ ¾øÀÌ ¹ý·ü¿¡¼­ ±¸Ã¼ÀûÀ¸·Î Çã°¡ÇÑ °æ¿ì´Â Á¦¿Ü). ¶ÇÇÑ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¶óÀ̼¾½º °è¾àÀº ÃÖ¼ÒÇÑ º» °è¾à Á¶Ç×ÀÇ ¼öÁØ¿¡¼­ IBMÀ» º¸È£ÇØ¾ß ÇÕ´Ï´Ù. + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â ÇÁ·Î±×·¥ÀÇ REDIST ÆÄÀÏ¿¡ ¸í½ÃµÈ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·áÀÇ ¼öÁ¤ ¹öÀüÀ» º» ¶óÀ̼¾½ºÀÇ Á¶Ç× ¹× REDIST ÆÄÀÏÀÇ Áöħ¿¡ µû¶ó Àç¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ ÃøÁ¤ ´ÜÀ§°¡ Àû¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(PVU) + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(Processor Value Unit: PVU)Àº º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ÇÊ¿äÇÑ PVU ±ÇÇÑ ¼ö´Â ÇÁ·Î¼¼¼­ ±â¼ú(ÇÁ·Î¼¼¼­ º¥´õ, ºê·£µå, À¯Çü ¹× ¸ðµ¨ ¹øÈ£º°·Î PVU Ç¥¿¡ Á¤ÀǵÊ, http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ÂüÁ¶)°ú º» ÇÁ·Î±×·¥¿¡ Á¦°øµÈ ÇÁ·Î¼¼¼­ ¼ö¿¡ ÀÇÇØ °áÁ¤µË´Ï´Ù. IBMÀº PVU ±â¹Ý ¶óÀ̼¾½ºÀÇ ¸ñÀû»ó, ĨÀÇ °¢ ÇÁ·Î¼¼¼­ Äھ ÇÁ·Î¼¼¼­·Î Á¤ÀÇÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, µà¾ó ÄÚ¾î ÇÁ·Î¼¼¼­ ĨÀÇ ÇÁ·Î¼¼¼­ ÄÚ¾î´Â µÎ °³ÀÔ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â Passport Advantage Sub-Capacity ¶óÀ̼¾½º Á¶Ç×(¾Æ·¡ À¥ ÆäÀÌÁö ÂüÁ¶)¿¡ ÁØÇÏ¿© Full Capacity ¶óÀ̼¾½º ¶Ç´Â Virtualization Capacity(Sub-Capacity) ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ¿© º» ÇÁ·Î±×·¥À» Àü°³ÇÒ ¼ö ÀÖ½À´Ï´Ù. Full Capacity ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡´Â º» ÇÁ·Î±×·¥ÀÌ ¿µ±¸ÀûÀ¸·Î Á¦°ÅµÈ ¼­¹ö¸¦ Á¦¿ÜÇϰí, º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¹°¸®Àû Çϵå¿þ¾î ȯ°æ¿¡ Á¸ÀçÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î*¸¦ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ PVU ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. Virtualization Capacity ¶óÀ̼¾½ºÀÇ °æ¿ì¿¡´Â Virtualization Capacity ¶óÀ̼¾½º °è»ê ±ÔÄ¢(http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html ÂüÁ¶)¿¡ µû¶ó º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ Äھ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +* Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î¶õ °¡»óÈ­ ±â¼ú, ¿î¿µ üÁ¦ ¸í·É, BIOS ¼³Á¤ ¶Ç´Â À¯»çÇÑ Á¦ÇÑ»çÇ×À» ÅëÇØ ÇÁ·Î¼¼¼­ ÄÚ¾îÀÇ ¿ë·®À» Á¦ÇÑÇÒ ¼ö ÀÖ´ÂÁö ¶Ç´Â ½ÇÁ¦·Î Á¦ÇÑÇÏ´ÂÁö ¿©ºÎ¿¡ °ü°è ¾øÀÌ ¹°¸®Àû ¼­¹ö³ª °¡»ó ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ÇÁ·Î¼¼¼­ Äھ ÀǹÌÇÕ´Ï´Ù. + +°¡»ó ÇÁ·Î¼¼¼­ ÄÚ¾î + +°¡»ó ÇÁ·Î¼¼¼­ ÄÚ¾î(Virtual Processor Core)´Â º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ¹°¸®Àû ¼­¹ö(Physical Server)´Â ÇÁ·Î¼¼½Ì À¯´Ö, ¸Þ¸ð¸® ¹× ÀÔ/Ãâ·Â ±â´ÉÀ¸·Î ±¸¼ºµÇ°í Çϳª ÀÌ»óÀÇ »ç¿ëÀÚ³ª Ŭ¶óÀÌ¾ðÆ® µð¹ÙÀ̽º¿¡ ´ëÇØ ¿äûµÈ ÇÁ·Î½ÃÀú, ¸í·É ¶Ç´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÏ´Â ¹°¸®Àû ÄÄÇ»ÅÍÀÔ´Ï´Ù. ·¢, ºí·¹ÀÌµå ¿£Å¬·ÎÀú ¶Ç´Â ±âŸ À¯»çÇÑ ÀåÄ¡¸¦ »ç¿ëÇÏ´Â °æ¿ì, Çʼö ±¸¼º¿ä¼Ò°¡ Æ÷ÇÔµÈ ºÐ¸® °¡´ÉÇÑ °¢ ¹°¸®Àû µð¹ÙÀ̽º(¿¹: ºí·¹À̵å, ·¢ ¸¶¿îÆ® µð¹ÙÀ̽º µî)´Â ±× ÀÚü°¡ ÇϳªÀÇ °³º°ÀûÀÎ ½ÇÁ¦ ¼­¹ö·Î °£Áֵ˴ϴÙ. °¡»ó ¼­¹ö(Virtual Server)¶õ ¹°¸®Àû ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ÀÚ¿øÀ» ÆÄƼ¼Ç ºÐÇÒÇÏ¿© ÀÛ¼ºÇÑ °¡»ó ÄÄÇ»Åͳª ÆÄƼ¼Ç ºÐÇÒµÇÁö ¾ÊÀº ¹°¸®Àû ¼­¹ö¸¦ ÀǹÌÇÕ´Ï´Ù. ÇÁ·Î¼¼¼­ ÄÚ¾î(ÀϹÝÀûÀ¸·Î ÇÁ·Î¼¼¼­ ¶Ç´Â CPU¶ó ÇÔ)´Â ¸í·ÉÀ» ÇØ¼®ÇÏ°í ½ÇÇàÇÏ´Â ÄÄÇ»ÆÃ µð¹ÙÀ̽ºÀÇ ±â´ÉÀû ´ÜÀ§ÀÔ´Ï´Ù. ÇÁ·Î¼¼¼­ ÄÚ¾î´Â ÃÖ¼Ò ÇϳªÀÇ ¸í·É¾î Á¦¾î ÀåÄ¡¿Í Çϳª ÀÌ»óÀÇ »ê¼ú ¶Ç´Â ³í¸® ÀåÄ¡·Î ±¸¼ºµË´Ï´Ù. °¡»ó ÇÁ·Î¼¼¼­ ÄÚ¾î¶õ ÆÄƼ¼Ç ºÐÇÒµÇÁö ¾ÊÀº ¹°¸®Àû ¼­¹öÀÇ ÇÁ·Î¼¼¼­ ÄÚ¾î ¶Ç´Â °¡»ó ¼­¹ö¿¡ ÁöÁ¤µÈ °¡»ó Äھ ÀǹÌÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡¼­ °¡¿ëÄÉ µÈ °¢ °¡»ó ÇÁ·Î¼¼¼­ Äھ ´ëÇÑ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +°¢ ¹°¸®Àû ¼­¹öÀÇ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) º» ÇÁ·Î±×·¥¿¡ ´ëÇØ »ç¿ë °¡´ÉÇÑ ¸ðµç °¡»ó ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ¸ðµç °¡»ó ÇÁ·Î¼¼¼­ ÄÚ¾îÀÇ ÇÕ°è ¶Ç´Â 2) ¹°¸®Àû ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ¸ðµç ÇÁ·Î¼¼¼­ ÄÚ¾î Áß ´õ ÀûÀº Ç׸ñ¿¡ ´ëÇÑ ÃæºÐÇÑ ±ÇÇÑÀ» º¸À¯ÇØ¾ß ÇÕ´Ï´Ù. + +À§ÀÇ ³»¿ë¿¡ Ãß°¡ÇÏ¿©, ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +À¯ÈÞ ´ë±â(Idle Standby) ±¸¼º + +º» Á¶Ç×ÀÇ ¸ñÀû»ó, "À¯ÈÞ ´ë±â" ±¸¼ºÀ̶õ º» ÇÁ·Î±×·¥ÀÇ »çº»ÀÌ °í°¡¿ë¼º ¼Ö·ç¼ÇÀÇ ÀϺθ¦ ±¸¼ºÇÏ´Â ¼­¹ö¿¡ ¼³Ä¡µÇ°í Ȱ¼º ¼­¹ö¿¡ ÀÖ´Â º» ÇÁ·Î±×·¥ »çº»ÀÇ »ç¿ëÀÌ Áß´ÜµÈ °æ¿ì ÇØ´ç ¼­¹ö¿¡¼­ º» ÇÁ·Î±×·¥ÀÌ ¿À·ù º¹±¸¸¦ ¼öÇàÇÏ´Â ±¸¼ºÀ» ÀǹÌÇÕ´Ï´Ù. ¼­¹ö°¡ ¿À·ù º¹±¸ ½Ã³ª¸®¿À¸¦ Áö¿øÇÏ´Â °ü¸® Á¶Ä¡¿¡ ÀüÀûÀ¸·Î »ç¿ëµÇ¸é ¿À·ù º¹±¸°¡ ¼öÇàµÉ ¶§±îÁö ÇØ´ç ¼­¹ö´Â "À¯ÈÞ »óÅÂ"·Î¸¸ °£Áֵ˴ϴÙ. + +ÀûÀýÇÑ ¶óÀ̼¾½º°¡ ºÎ¿©µÇÁö ¾ÊÀ¸¸é À¯ÈÞ ´ë±â ¼­¹ö¿¡ º» ÇÁ·Î±×·¥À» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. + +º» ÇÁ·Î±×·¥ÀÌ Multi-Instance Queue Manager ÇÇó¿¡¼­ À¯ÈÞ ´ë±â ±¸¼ºÀ¸·Î »ç¿ëµÇ´Â °æ¿ì, ÇÁ·Î±×·¥ »çº»Àº À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¹é¾÷ ¿ëµµ·Î »óÁÖÇÒ ¼ö ÀÖÀ¸¸ç, ½ÃÀ۵Ǿî À־ "À¯ÈÞ" »óŸ¦ À¯ÁöÇØ¾ß Çϰí, Ȱ¼º ¼­¹ö°¡ À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¿À·ù º¹±¸¸¦ ¼öÇàÇÏÁö ¾Ê´Â ÇÑ ¾î¶°ÇÑ ÇÁ·Î´ö¼Ç ÀÛ¾÷µµ ¼öÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ °æ¿ì À¯ÈÞ ´ë±â »çº»À» »ç¿ëÇÏ¿© ¿À·ù º¹±¸ µ¿¾È ÇÁ·Î´ö¼Ç ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. + +º» ÇÁ·Î±×·¥ÀÌ ±âŸ °í°¡¿ë¼º ½Ã½ºÅÛ¿¡¼­ À¯ÈÞ ´ë±â ±¸¼ºÀ¸·Î »ç¿ëµÇ´Â °æ¿ì, ÇÁ·Î±×·¥ »çº»Àº À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¹é¾÷ ¿ëµµ·Î »óÁÖÇÒ ¼ö ÀÖÀ¸¸ç, ½ÃÀÛµÇÁö ¾ÊÁö¸¸(µû¶ó¼­ ¾î¶°ÇÑ ÇÁ·Î´ö¼Ç ÀÛ¾÷ ¼öÇàÀ» À§Çؼ­µµ »ç¿ëµÇÁö ¾ÊÀ½), Ȱ¼º ¼­¹ö¿¡ Àå¾Ö°¡ ¹ß»ýÇÑ °æ¿ì¿¡´Â °í°¡¿ë¼º ±¸¼º¿ä¼Ò¿¡ ÀÇÇØ ÀÚµ¿À¸·Î ½ÃÀ۵˴ϴÙ. ÀÌ °æ¿ì À¯ÈÞ ´ë±â »çº»À» »ç¿ëÇÏ¿© ¿À·ù º¹±¸ µ¿¾È ÇÁ·Î´ö¼Ç ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +Áß¿ä: ÁÖÀDZí°Ô ÀÐÀ¸½Ê½Ã¿À + +´ÙÀ½ µÎ °¡Áö ¶óÀ̼¾½º °è¾àÀÌ Á¦°øµË´Ï´Ù. + +1. IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à +2. IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» ½ÇÁ¦ ¾÷¹« ¿ëµµ(Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð ¿ëµµ Á¦¿Ü)·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾àÀ» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð(ÅëĪÇÏ¿© "Æò°¡") ¿ëµµ·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â (i) IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "Æò°¡ ¶óÀ̼¾½º")À» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°í ¹× (ii) IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "IPLA")À» ¼öÁ¤¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Æò°¡ ±â°£ µ¿¾È Àû¿ëµË´Ï´Ù. + +IPLA´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Æò°¡¸¦ ¸¶Ä£ ÈÄ ±¸ÀÔ °è¾à(¿¹: IBM ±¹Á¦ Passport Advantage ¶Ç´Â IBM Passport Advantage Express °è¾à)À» ü°áÇÏ¿© ÇÁ·Î±×·¥À» º¸À¯Çϱâ·Î ¼±ÅÃÇÑ °æ¿ì(¶Ç´Â Æò°¡¸¦ ¸¶Ä£ ÈÄ »ç¿ëÀ» À§ÇØ ÇÁ·Î±×·¥ÀÇ »çº»À» Ãß°¡·Î ÃëµæÇÏ´Â °æ¿ì) ÀÚµ¿À¸·Î Àû¿ëµË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º¿Í IPLA´Â µ¿½Ã¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀÌµé µÎ °è¾àÀº ÇÑ °è¾à¿¡ ÀÇÇØ ´Ù¸¥ °è¾àÀÌ ¼öÁ¤µÇÁö ¾ÊÀ¸¸ç °¢°¢ µ¶¸³µÈ °è¾àÀÔ´Ï´Ù. + +ÀÌ·¯ÇÑ µÎ ¶óÀ̼¾½º °è¾àÀÇ °¢ Àü¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(Z125-5543-05)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§ (ÇÁ·Î±×·¥ ¹øÈ£: +IBM MQ Advanced V9.0.3 (Evaluation) + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Ç¥ÁØ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +Æò°¡ ±â°£ + +Æò°¡ ±â°£Àº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ¸é ½ÃÀ۵Ǿî 90ÀÏ ÈÄ¿¡ Á¾·áµË´Ï´Ù. + +¹øµé ÇÁ·Î±×·¥(Bundled Programs) + +º» ÇÁ·Î±×·¥Àº ¾Æ·¡ ¸í½ÃµÈ ¹øµé ÇÁ·Î±×·¥(Bundled Programs)À¸·Î ±¸¼ºµÈ ´ÙÁß Á¦Ç° ÆÐŰÁö·Î ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º Áõ¼­(Proofs of Entitlement)ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­(License Information)¿¡ ¸í½ÃµÈ ¹Ù¿Í °°ÀÌ ÇØ´ç ¹øµé ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ÙÁß Á¦Ç° ÆÐŰÁö¿Í º°µµ·Î ¹øµé ÇÁ·Î±×·¥À» ¾çµµÇϰųª ÀçÆÇ¸ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ¹øµé ÇÁ·Î±×·¥¿¡´Â ¶óÀ̼¾½º Á¶Ç×ÀÌ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. °è¾à Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­ÀÇ Á¶Ç×ÀÌ ¹øµé ÇÁ·Î±×·¥ÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀÌ ¸¸·áµÇ°Å³ª ÇØÁöµÈ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¹øµé ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» »ç¿ë Áß´ÜÇϰųª ÆÄ±âÇϰųª º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ Áï½Ã ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¿¬¶ôÇØ¾ß ÇÕ´Ï´Ù. »ó±âÇÑ Á¦ÇÑ ¹üÀ§¸¦ ³Ñ¾î¼­ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â IBM ÆÇ¸Å ´ã´çÀÚ³ª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̼¾½º¸¦ ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +º» ÇÁ·Î±×·¥°ú ÇÔ²² ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ¹øµé ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°½À´Ï´Ù. +IBM MQ V9.0.3 + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(Z125-3301-14)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§ (ÇÁ·Î±×·¥ ¹øÈ£: +IBM MQ Advanced V9.0.3 (5724-H72) + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Ç¥ÁØ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +Á¦ÇÑ »ç¿ë ±Ç¸® + +±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à("IPLA")°ú º» ¶óÀ̼¾½º Á¤º¸¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ, IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô º» ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Â Á¦ÇÑÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±Ç¸®´Â ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö("PVU"), ¸®¼Ò½º ¹ë·ù À¯´Ö("RVU"), ¹ë·ù À¯´Ö("VU") µî Çã°¡µÈ »ç¿ë(Authorized Use) ·¹º§À̳ª ¶óÀ̼¾½º Áõ¼­¿¡ ¸í½ÃµÈ ´ë·Î ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÁöºÒÇÑ ±âŸ ÁöÁ¤µÈ »ç¿ë ·¹º§·Î Á¦Çѵ˴ϴÙ. ¶óÀ̼¾½º »ç¿ëÀÚÀÇ »ç¿ëÀº ÁöÁ¤µÈ ±â°è·Î Á¦Çѵǰųª º¸Á¶ ÇÁ·Î±×·¥À¸·Î¸¸ »ç¿ëÇϵµ·Ï Á¦Çѵǰųª ´Ù¸¥ Á¦ÇÑ»çÇ׿¡ ÀÇÇØ Á¦ÇÑµÉ ¼öµµ ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ °æÁ¦Àû °¡Ä¡¸¦ ¸ðµÎ ÁöºÒÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÏÁö ¾ÊÀ¸¸é ±âŸ ´Ù¸¥ »ç¿ëÀÌ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀ» ÃëµæÇÑ Áذаè¾à¿¡¼­ ±¸Ã¼ÀûÀ¸·Î ¸í½ÃÇÏÁö ¾Ê´Â ÇÑ, º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© »ó¾÷¿ë IT ¼­ºñ½º¸¦ Á¦3ÀÚ¿¡°Ô Á¦°øÇϰųª »ó¾÷¿ë È£½ºÆÃ ¶Ç´Â ½ÃºÐÇÒÀ» Á¦°øÇϰųª º» ÇÁ·Î±×·¥À» Àç¶óÀ̼¾½º, ÀÓ´ë ¶Ç´Â ¸®½ºÇÒ ¼ö ¾ø½À´Ï´Ù. Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÑ °æ¿ì ¶Ç´Â ´Ù¸¥ Á¶Ç×À̳ª º¸Ãæ Á¶Ç׿¡ ÀǰÅÇÏ¿©, ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Ãß°¡ÀûÀÎ ±Ç¸®°¡ Á¦°øµÉ ¼ö ÀÖ½À´Ï´Ù. IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÀÌ·¯ÇÑ Ãß°¡ÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÏ´Â ±Ç¸®¸¦ º¸À¯ÇÕ´Ï´Ù. + +¸í¼¼ + +ÇÁ·Î±×·¥ÀÇ ¸í¼¼´Â ÇÁ·Î±×·¥ ¹ßÇ¥ ¹®¼­ÀÇ Á¾ÇÕÀûÀÎ ¼³¸í ¹× ±â¼ú Á¤º¸ Àý¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. + +¹øµé ÇÁ·Î±×·¥(Bundled Programs) + +º» ÇÁ·Î±×·¥Àº ¾Æ·¡ ¸í½ÃµÈ ¹øµé ÇÁ·Î±×·¥(Bundled Programs)À¸·Î ±¸¼ºµÈ ´ÙÁß Á¦Ç° ÆÐŰÁö·Î ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º Áõ¼­(Proofs of Entitlement)ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­(License Information)¿¡ ¸í½ÃµÈ ¹Ù¿Í °°ÀÌ ÇØ´ç ¹øµé ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ÙÁß Á¦Ç° ÆÐŰÁö¿Í º°µµ·Î ¹øµé ÇÁ·Î±×·¥À» ¾çµµÇϰųª ÀçÆÇ¸ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ¹øµé ÇÁ·Î±×·¥¿¡´Â ¶óÀ̼¾½º Á¶Ç×ÀÌ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. °è¾à Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­ÀÇ Á¶Ç×ÀÌ ¹øµé ÇÁ·Î±×·¥ÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀÌ ¸¸·áµÇ°Å³ª ÇØÁöµÈ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¹øµé ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» »ç¿ë Áß´ÜÇϰųª ÆÄ±âÇϰųª º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ Áï½Ã ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¿¬¶ôÇØ¾ß ÇÕ´Ï´Ù. »ó±âÇÑ Á¦ÇÑ ¹üÀ§¸¦ ³Ñ¾î¼­ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â IBM ÆÇ¸Å ´ã´çÀÚ³ª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̼¾½º¸¦ ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +º» ÇÁ·Î±×·¥°ú ÇÔ²² ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ¹øµé ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°½À´Ï´Ù. +IBM MQ V9.0.3 + +Çʼö ±ÇÇÑÀ» ¼³Á¤ÇÏ´Â µ¥ »ç¿ëµÇÁö ¾Ê´Â ±¸¼º¿ä¼Ò + +º» ÇÁ·Î±×·¥À» ¼³Ä¡Çϰųª »ç¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ ÆÇº°ÇÏ´Â µ¥ ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼ÒÀÇ ¼³Ä¡ ¶Ç´Â »ç¿ëÀº °í·ÁµÇÁö ¾Ê½À´Ï´Ù. Áï, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¶Ç׿¡ ÁØÇÏ¿© ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼Ò¸¦ ¼³Ä¡Çϰųª »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ÀÌ·¯ÇÑ ±¸¼º¿ä¼Ò´Â º» ÇÁ·Î±×·¥¿¡ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ °áÁ¤ÇÏ´Â µ¥´Â »ç¿ëµÇÁö ¾Ê½À´Ï´Ù. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ ÃøÁ¤ ´ÜÀ§°¡ Àû¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(PVU) + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(Processor Value Unit: PVU)Àº º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ÇÊ¿äÇÑ PVU ±ÇÇÑ ¼ö´Â ÇÁ·Î¼¼¼­ ±â¼ú(ÇÁ·Î¼¼¼­ º¥´õ, ºê·£µå, À¯Çü ¹× ¸ðµ¨ ¹øÈ£º°·Î PVU Ç¥¿¡ Á¤ÀǵÊ, http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ÂüÁ¶)°ú º» ÇÁ·Î±×·¥¿¡ Á¦°øµÈ ÇÁ·Î¼¼¼­ ¼ö¿¡ ÀÇÇØ °áÁ¤µË´Ï´Ù. IBMÀº PVU ±â¹Ý ¶óÀ̼¾½ºÀÇ ¸ñÀû»ó, ĨÀÇ °¢ ÇÁ·Î¼¼¼­ Äھ ÇÁ·Î¼¼¼­·Î Á¤ÀÇÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, µà¾ó ÄÚ¾î ÇÁ·Î¼¼¼­ ĨÀÇ ÇÁ·Î¼¼¼­ ÄÚ¾î´Â µÎ °³ÀÔ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â Passport Advantage Sub-Capacity ¶óÀ̼¾½º Á¶Ç×(¾Æ·¡ À¥ ÆäÀÌÁö ÂüÁ¶)¿¡ ÁØÇÏ¿© Full Capacity ¶óÀ̼¾½º ¶Ç´Â Virtualization Capacity(Sub-Capacity) ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ¿© º» ÇÁ·Î±×·¥À» Àü°³ÇÒ ¼ö ÀÖ½À´Ï´Ù. Full Capacity ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡´Â º» ÇÁ·Î±×·¥ÀÌ ¿µ±¸ÀûÀ¸·Î Á¦°ÅµÈ ¼­¹ö¸¦ Á¦¿ÜÇϰí, º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¹°¸®Àû Çϵå¿þ¾î ȯ°æ¿¡ Á¸ÀçÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î*¸¦ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ PVU ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. Virtualization Capacity ¶óÀ̼¾½ºÀÇ °æ¿ì¿¡´Â Virtualization Capacity ¶óÀ̼¾½º °è»ê ±ÔÄ¢(http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html ÂüÁ¶)¿¡ µû¶ó º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ Äھ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +* Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î¶õ °¡»óÈ­ ±â¼ú, ¿î¿µ üÁ¦ ¸í·É, BIOS ¼³Á¤ ¶Ç´Â À¯»çÇÑ Á¦ÇÑ»çÇ×À» ÅëÇØ ÇÁ·Î¼¼¼­ ÄÚ¾îÀÇ ¿ë·®À» Á¦ÇÑÇÒ ¼ö ÀÖ´ÂÁö ¶Ç´Â ½ÇÁ¦·Î Á¦ÇÑÇÏ´ÂÁö ¿©ºÎ¿¡ °ü°è ¾øÀÌ ¹°¸®Àû ¼­¹ö³ª °¡»ó ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ÇÁ·Î¼¼¼­ Äھ ÀǹÌÇÕ´Ï´Ù. + +°¡»ó ÇÁ·Î¼¼¼­ ÄÚ¾î + +°¡»ó ÇÁ·Î¼¼¼­ ÄÚ¾î(Virtual Processor Core)´Â º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ¹°¸®Àû ¼­¹ö(Physical Server)´Â ÇÁ·Î¼¼½Ì À¯´Ö, ¸Þ¸ð¸® ¹× ÀÔ/Ãâ·Â ±â´ÉÀ¸·Î ±¸¼ºµÇ°í Çϳª ÀÌ»óÀÇ »ç¿ëÀÚ³ª Ŭ¶óÀÌ¾ðÆ® µð¹ÙÀ̽º¿¡ ´ëÇØ ¿äûµÈ ÇÁ·Î½ÃÀú, ¸í·É ¶Ç´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÏ´Â ¹°¸®Àû ÄÄÇ»ÅÍÀÔ´Ï´Ù. ·¢, ºí·¹ÀÌµå ¿£Å¬·ÎÀú ¶Ç´Â ±âŸ À¯»çÇÑ ÀåÄ¡¸¦ »ç¿ëÇÏ´Â °æ¿ì, Çʼö ±¸¼º¿ä¼Ò°¡ Æ÷ÇÔµÈ ºÐ¸® °¡´ÉÇÑ °¢ ¹°¸®Àû µð¹ÙÀ̽º(¿¹: ºí·¹À̵å, ·¢ ¸¶¿îÆ® µð¹ÙÀ̽º µî)´Â ±× ÀÚü°¡ ÇϳªÀÇ °³º°ÀûÀÎ ½ÇÁ¦ ¼­¹ö·Î °£Áֵ˴ϴÙ. °¡»ó ¼­¹ö(Virtual Server)¶õ ¹°¸®Àû ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ÀÚ¿øÀ» ÆÄƼ¼Ç ºÐÇÒÇÏ¿© ÀÛ¼ºÇÑ °¡»ó ÄÄÇ»Åͳª ÆÄƼ¼Ç ºÐÇÒµÇÁö ¾ÊÀº ¹°¸®Àû ¼­¹ö¸¦ ÀǹÌÇÕ´Ï´Ù. ÇÁ·Î¼¼¼­ ÄÚ¾î(ÀϹÝÀûÀ¸·Î ÇÁ·Î¼¼¼­ ¶Ç´Â CPU¶ó ÇÔ)´Â ¸í·ÉÀ» ÇØ¼®ÇÏ°í ½ÇÇàÇÏ´Â ÄÄÇ»ÆÃ µð¹ÙÀ̽ºÀÇ ±â´ÉÀû ´ÜÀ§ÀÔ´Ï´Ù. ÇÁ·Î¼¼¼­ ÄÚ¾î´Â ÃÖ¼Ò ÇϳªÀÇ ¸í·É¾î Á¦¾î ÀåÄ¡¿Í Çϳª ÀÌ»óÀÇ »ê¼ú ¶Ç´Â ³í¸® ÀåÄ¡·Î ±¸¼ºµË´Ï´Ù. °¡»ó ÇÁ·Î¼¼¼­ ÄÚ¾î¶õ ÆÄƼ¼Ç ºÐÇÒµÇÁö ¾ÊÀº ¹°¸®Àû ¼­¹öÀÇ ÇÁ·Î¼¼¼­ ÄÚ¾î ¶Ç´Â °¡»ó ¼­¹ö¿¡ ÁöÁ¤µÈ °¡»ó Äھ ÀǹÌÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡¼­ °¡¿ëÄÉ µÈ °¢ °¡»ó ÇÁ·Î¼¼¼­ Äھ ´ëÇÑ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +°¢ ¹°¸®Àû ¼­¹öÀÇ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) º» ÇÁ·Î±×·¥¿¡ ´ëÇØ »ç¿ë °¡´ÉÇÑ ¸ðµç °¡»ó ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ¸ðµç °¡»ó ÇÁ·Î¼¼¼­ ÄÚ¾îÀÇ ÇÕ°è ¶Ç´Â 2) ¹°¸®Àû ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ¸ðµç ÇÁ·Î¼¼¼­ ÄÚ¾î Áß ´õ ÀûÀº Ç׸ñ¿¡ ´ëÇÑ ÃæºÐÇÑ ±ÇÇÑÀ» º¸À¯ÇØ¾ß ÇÕ´Ï´Ù. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +Áß¿ä: ÁÖÀDZí°Ô ÀÐÀ¸½Ê½Ã¿À + +´ÙÀ½ µÎ °¡Áö ¶óÀ̼¾½º °è¾àÀÌ Á¦°øµË´Ï´Ù. + +1. IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à +2. IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» ½ÇÁ¦ ¾÷¹« ¿ëµµ(Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð ¿ëµµ Á¦¿Ü)·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾àÀ» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð(ÅëĪÇÏ¿© "Æò°¡") ¿ëµµ·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â (i) IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "Æò°¡ ¶óÀ̼¾½º")À» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°í ¹× (ii) IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "IPLA")À» ¼öÁ¤¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Æò°¡ ±â°£ µ¿¾È Àû¿ëµË´Ï´Ù. + +IPLA´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Æò°¡¸¦ ¸¶Ä£ ÈÄ ±¸ÀÔ °è¾à(¿¹: IBM ±¹Á¦ Passport Advantage ¶Ç´Â IBM Passport Advantage Express °è¾à)À» ü°áÇÏ¿© ÇÁ·Î±×·¥À» º¸À¯Çϱâ·Î ¼±ÅÃÇÑ °æ¿ì(¶Ç´Â Æò°¡¸¦ ¸¶Ä£ ÈÄ »ç¿ëÀ» À§ÇØ ÇÁ·Î±×·¥ÀÇ »çº»À» Ãß°¡·Î ÃëµæÇÏ´Â °æ¿ì) ÀÚµ¿À¸·Î Àû¿ëµË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º¿Í IPLA´Â µ¿½Ã¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀÌµé µÎ °è¾àÀº ÇÑ °è¾à¿¡ ÀÇÇØ ´Ù¸¥ °è¾àÀÌ ¼öÁ¤µÇÁö ¾ÊÀ¸¸ç °¢°¢ µ¶¸³µÈ °è¾àÀÔ´Ï´Ù. + +ÀÌ·¯ÇÑ µÎ ¶óÀ̼¾½º °è¾àÀÇ °¢ Àü¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(Z125-5543-05)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§ (ÇÁ·Î±×·¥ ¹øÈ£: +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Ç¥ÁØ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +Æò°¡ ±â°£ + +Æò°¡ ±â°£Àº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ¸é ½ÃÀ۵Ǿî 90ÀÏ ÈÄ¿¡ Á¾·áµË´Ï´Ù. + +¹øµé ÇÁ·Î±×·¥(Bundled Programs) + +º» ÇÁ·Î±×·¥Àº ¾Æ·¡ ¸í½ÃµÈ ¹øµé ÇÁ·Î±×·¥(Bundled Programs)À¸·Î ±¸¼ºµÈ ´ÙÁß Á¦Ç° ÆÐŰÁö·Î ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º Áõ¼­(Proofs of Entitlement)ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­(License Information)¿¡ ¸í½ÃµÈ ¹Ù¿Í °°ÀÌ ÇØ´ç ¹øµé ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ÙÁß Á¦Ç° ÆÐŰÁö¿Í º°µµ·Î ¹øµé ÇÁ·Î±×·¥À» ¾çµµÇϰųª ÀçÆÇ¸ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ¹øµé ÇÁ·Î±×·¥¿¡´Â ¶óÀ̼¾½º Á¶Ç×ÀÌ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. °è¾à Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­ÀÇ Á¶Ç×ÀÌ ¹øµé ÇÁ·Î±×·¥ÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀÌ ¸¸·áµÇ°Å³ª ÇØÁöµÈ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¹øµé ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» »ç¿ë Áß´ÜÇϰųª ÆÄ±âÇϰųª º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ Áï½Ã ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¿¬¶ôÇØ¾ß ÇÕ´Ï´Ù. »ó±âÇÑ Á¦ÇÑ ¹üÀ§¸¦ ³Ñ¾î¼­ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â IBM ÆÇ¸Å ´ã´çÀÚ³ª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̼¾½º¸¦ ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +º» ÇÁ·Î±×·¥°ú ÇÔ²² ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ¹øµé ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°½À´Ï´Ù. +IBM MQ Idle Standby V9.0.3 + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(Z125-3301-14)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§ (ÇÁ·Î±×·¥ ¹øÈ£: +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Ç¥ÁØ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +Á¦ÇÑ »ç¿ë ±Ç¸® + +±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à("IPLA")°ú º» ¶óÀ̼¾½º Á¤º¸¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ, IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô º» ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Â Á¦ÇÑÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±Ç¸®´Â ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö("PVU"), ¸®¼Ò½º ¹ë·ù À¯´Ö("RVU"), ¹ë·ù À¯´Ö("VU") µî Çã°¡µÈ »ç¿ë(Authorized Use) ·¹º§À̳ª ¶óÀ̼¾½º Áõ¼­¿¡ ¸í½ÃµÈ ´ë·Î ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÁöºÒÇÑ ±âŸ ÁöÁ¤µÈ »ç¿ë ·¹º§·Î Á¦Çѵ˴ϴÙ. ¶óÀ̼¾½º »ç¿ëÀÚÀÇ »ç¿ëÀº ÁöÁ¤µÈ ±â°è·Î Á¦Çѵǰųª º¸Á¶ ÇÁ·Î±×·¥À¸·Î¸¸ »ç¿ëÇϵµ·Ï Á¦Çѵǰųª ´Ù¸¥ Á¦ÇÑ»çÇ׿¡ ÀÇÇØ Á¦ÇÑµÉ ¼öµµ ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ °æÁ¦Àû °¡Ä¡¸¦ ¸ðµÎ ÁöºÒÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÏÁö ¾ÊÀ¸¸é ±âŸ ´Ù¸¥ »ç¿ëÀÌ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀ» ÃëµæÇÑ Áذаè¾à¿¡¼­ ±¸Ã¼ÀûÀ¸·Î ¸í½ÃÇÏÁö ¾Ê´Â ÇÑ, º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© »ó¾÷¿ë IT ¼­ºñ½º¸¦ Á¦3ÀÚ¿¡°Ô Á¦°øÇϰųª »ó¾÷¿ë È£½ºÆÃ ¶Ç´Â ½ÃºÐÇÒÀ» Á¦°øÇϰųª º» ÇÁ·Î±×·¥À» Àç¶óÀ̼¾½º, ÀÓ´ë ¶Ç´Â ¸®½ºÇÒ ¼ö ¾ø½À´Ï´Ù. Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÑ °æ¿ì ¶Ç´Â ´Ù¸¥ Á¶Ç×À̳ª º¸Ãæ Á¶Ç׿¡ ÀǰÅÇÏ¿©, ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Ãß°¡ÀûÀÎ ±Ç¸®°¡ Á¦°øµÉ ¼ö ÀÖ½À´Ï´Ù. IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÀÌ·¯ÇÑ Ãß°¡ÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÏ´Â ±Ç¸®¸¦ º¸À¯ÇÕ´Ï´Ù. + +¸í¼¼ + +ÇÁ·Î±×·¥ÀÇ ¸í¼¼´Â ÇÁ·Î±×·¥ ¹ßÇ¥ ¹®¼­ÀÇ Á¾ÇÕÀûÀÎ ¼³¸í ¹× ±â¼ú Á¤º¸ Àý¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. + +¹øµé ÇÁ·Î±×·¥(Bundled Programs) + +º» ÇÁ·Î±×·¥Àº ¾Æ·¡ ¸í½ÃµÈ ¹øµé ÇÁ·Î±×·¥(Bundled Programs)À¸·Î ±¸¼ºµÈ ´ÙÁß Á¦Ç° ÆÐŰÁö·Î ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º Áõ¼­(Proofs of Entitlement)ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­(License Information)¿¡ ¸í½ÃµÈ ¹Ù¿Í °°ÀÌ ÇØ´ç ¹øµé ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ÙÁß Á¦Ç° ÆÐŰÁö¿Í º°µµ·Î ¹øµé ÇÁ·Î±×·¥À» ¾çµµÇϰųª ÀçÆÇ¸ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ¹øµé ÇÁ·Î±×·¥¿¡´Â ¶óÀ̼¾½º Á¶Ç×ÀÌ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. °è¾à Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­ÀÇ Á¶Ç×ÀÌ ¹øµé ÇÁ·Î±×·¥ÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀÌ ¸¸·áµÇ°Å³ª ÇØÁöµÈ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¹øµé ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» »ç¿ë Áß´ÜÇϰųª ÆÄ±âÇϰųª º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ Áï½Ã ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¿¬¶ôÇØ¾ß ÇÕ´Ï´Ù. »ó±âÇÑ Á¦ÇÑ ¹üÀ§¸¦ ³Ñ¾î¼­ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â IBM ÆÇ¸Å ´ã´çÀÚ³ª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̼¾½º¸¦ ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +º» ÇÁ·Î±×·¥°ú ÇÔ²² ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ¹øµé ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°½À´Ï´Ù. +IBM MQ Idle Standby V9.0.3 + +Çʼö ±ÇÇÑÀ» ¼³Á¤ÇÏ´Â µ¥ »ç¿ëµÇÁö ¾Ê´Â ±¸¼º¿ä¼Ò + +º» ÇÁ·Î±×·¥À» ¼³Ä¡Çϰųª »ç¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ ÆÇº°ÇÏ´Â µ¥ ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼ÒÀÇ ¼³Ä¡ ¶Ç´Â »ç¿ëÀº °í·ÁµÇÁö ¾Ê½À´Ï´Ù. Áï, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¶Ç׿¡ ÁØÇÏ¿© ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼Ò¸¦ ¼³Ä¡Çϰųª »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ÀÌ·¯ÇÑ ±¸¼º¿ä¼Ò´Â º» ÇÁ·Î±×·¥¿¡ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ °áÁ¤ÇÏ´Â µ¥´Â »ç¿ëµÇÁö ¾Ê½À´Ï´Ù. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ ÃøÁ¤ ´ÜÀ§°¡ Àû¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(PVU) + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(Processor Value Unit: PVU)Àº º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ÇÊ¿äÇÑ PVU ±ÇÇÑ ¼ö´Â ÇÁ·Î¼¼¼­ ±â¼ú(ÇÁ·Î¼¼¼­ º¥´õ, ºê·£µå, À¯Çü ¹× ¸ðµ¨ ¹øÈ£º°·Î PVU Ç¥¿¡ Á¤ÀǵÊ, http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ÂüÁ¶)°ú º» ÇÁ·Î±×·¥¿¡ Á¦°øµÈ ÇÁ·Î¼¼¼­ ¼ö¿¡ ÀÇÇØ °áÁ¤µË´Ï´Ù. IBMÀº PVU ±â¹Ý ¶óÀ̼¾½ºÀÇ ¸ñÀû»ó, ĨÀÇ °¢ ÇÁ·Î¼¼¼­ Äھ ÇÁ·Î¼¼¼­·Î Á¤ÀÇÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, µà¾ó ÄÚ¾î ÇÁ·Î¼¼¼­ ĨÀÇ ÇÁ·Î¼¼¼­ ÄÚ¾î´Â µÎ °³ÀÔ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â Passport Advantage Sub-Capacity ¶óÀ̼¾½º Á¶Ç×(¾Æ·¡ À¥ ÆäÀÌÁö ÂüÁ¶)¿¡ ÁØÇÏ¿© Full Capacity ¶óÀ̼¾½º ¶Ç´Â Virtualization Capacity(Sub-Capacity) ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ¿© º» ÇÁ·Î±×·¥À» Àü°³ÇÒ ¼ö ÀÖ½À´Ï´Ù. Full Capacity ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡´Â º» ÇÁ·Î±×·¥ÀÌ ¿µ±¸ÀûÀ¸·Î Á¦°ÅµÈ ¼­¹ö¸¦ Á¦¿ÜÇϰí, º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¹°¸®Àû Çϵå¿þ¾î ȯ°æ¿¡ Á¸ÀçÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î*¸¦ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ PVU ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. Virtualization Capacity ¶óÀ̼¾½ºÀÇ °æ¿ì¿¡´Â Virtualization Capacity ¶óÀ̼¾½º °è»ê ±ÔÄ¢(http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html ÂüÁ¶)¿¡ µû¶ó º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ Äھ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +* Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î¶õ °¡»óÈ­ ±â¼ú, ¿î¿µ üÁ¦ ¸í·É, BIOS ¼³Á¤ ¶Ç´Â À¯»çÇÑ Á¦ÇÑ»çÇ×À» ÅëÇØ ÇÁ·Î¼¼¼­ ÄÚ¾îÀÇ ¿ë·®À» Á¦ÇÑÇÒ ¼ö ÀÖ´ÂÁö ¶Ç´Â ½ÇÁ¦·Î Á¦ÇÑÇÏ´ÂÁö ¿©ºÎ¿¡ °ü°è ¾øÀÌ ¹°¸®Àû ¼­¹ö³ª °¡»ó ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ÇÁ·Î¼¼¼­ Äھ ÀǹÌÇÕ´Ï´Ù. + +À§ÀÇ ³»¿ë¿¡ Ãß°¡ÇÏ¿©, ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +À¯ÈÞ ´ë±â(Idle Standby) ±¸¼º + +º» Á¶Ç×ÀÇ ¸ñÀû»ó, "À¯ÈÞ ´ë±â" ±¸¼ºÀ̶õ º» ÇÁ·Î±×·¥ÀÇ »çº»ÀÌ °í°¡¿ë¼º ¼Ö·ç¼ÇÀÇ ÀϺθ¦ ±¸¼ºÇÏ´Â ¼­¹ö¿¡ ¼³Ä¡µÇ°í Ȱ¼º ¼­¹ö¿¡ ÀÖ´Â º» ÇÁ·Î±×·¥ »çº»ÀÇ »ç¿ëÀÌ Áß´ÜµÈ °æ¿ì ÇØ´ç ¼­¹ö¿¡¼­ º» ÇÁ·Î±×·¥ÀÌ ¿À·ù º¹±¸¸¦ ¼öÇàÇÏ´Â ±¸¼ºÀ» ÀǹÌÇÕ´Ï´Ù. ¼­¹ö°¡ ¿À·ù º¹±¸ ½Ã³ª¸®¿À¸¦ Áö¿øÇÏ´Â °ü¸® Á¶Ä¡¿¡ ÀüÀûÀ¸·Î »ç¿ëµÇ¸é ¿À·ù º¹±¸°¡ ¼öÇàµÉ ¶§±îÁö ÇØ´ç ¼­¹ö´Â "À¯ÈÞ »óÅÂ"·Î¸¸ °£Áֵ˴ϴÙ. + +ÀûÀýÇÑ ¶óÀ̼¾½º°¡ ºÎ¿©µÇÁö ¾ÊÀ¸¸é À¯ÈÞ ´ë±â ¼­¹ö¿¡ º» ÇÁ·Î±×·¥À» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. + +º» ÇÁ·Î±×·¥ÀÌ Multi-Instance Queue Manager ÇÇó¿¡¼­ À¯ÈÞ ´ë±â ±¸¼ºÀ¸·Î »ç¿ëµÇ´Â °æ¿ì, ÇÁ·Î±×·¥ »çº»Àº À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¹é¾÷ ¿ëµµ·Î »óÁÖÇÒ ¼ö ÀÖÀ¸¸ç, ½ÃÀ۵Ǿî À־ "À¯ÈÞ" »óŸ¦ À¯ÁöÇØ¾ß Çϰí, Ȱ¼º ¼­¹ö°¡ À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¿À·ù º¹±¸¸¦ ¼öÇàÇÏÁö ¾Ê´Â ÇÑ ¾î¶°ÇÑ ÇÁ·Î´ö¼Ç ÀÛ¾÷µµ ¼öÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ °æ¿ì À¯ÈÞ ´ë±â »çº»À» »ç¿ëÇÏ¿© ¿À·ù º¹±¸ µ¿¾È ÇÁ·Î´ö¼Ç ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. + +º» ÇÁ·Î±×·¥ÀÌ ±âŸ °í°¡¿ë¼º ½Ã½ºÅÛ¿¡¼­ À¯ÈÞ ´ë±â ±¸¼ºÀ¸·Î »ç¿ëµÇ´Â °æ¿ì, ÇÁ·Î±×·¥ »çº»Àº À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¹é¾÷ ¿ëµµ·Î »óÁÖÇÒ ¼ö ÀÖÀ¸¸ç, ½ÃÀÛµÇÁö ¾ÊÁö¸¸(µû¶ó¼­ ¾î¶°ÇÑ ÇÁ·Î´ö¼Ç ÀÛ¾÷ ¼öÇàÀ» À§Çؼ­µµ »ç¿ëµÇÁö ¾ÊÀ½), Ȱ¼º ¼­¹ö¿¡ Àå¾Ö°¡ ¹ß»ýÇÑ °æ¿ì¿¡´Â °í°¡¿ë¼º ±¸¼º¿ä¼Ò¿¡ ÀÇÇØ ÀÚµ¿À¸·Î ½ÃÀ۵˴ϴÙ. ÀÌ °æ¿ì À¯ÈÞ ´ë±â »çº»À» »ç¿ëÇÏ¿© ¿À·ù º¹±¸ µ¿¾È ÇÁ·Î´ö¼Ç ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +Áß¿ä: ÁÖÀDZí°Ô ÀÐÀ¸½Ê½Ã¿À + +´ÙÀ½ µÎ °¡Áö ¶óÀ̼¾½º °è¾àÀÌ Á¦°øµË´Ï´Ù. + +1. IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à +2. IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» ½ÇÁ¦ ¾÷¹« ¿ëµµ(Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð ¿ëµµ Á¦¿Ü)·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾àÀ» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð(ÅëĪÇÏ¿© "Æò°¡") ¿ëµµ·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â (i) IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "Æò°¡ ¶óÀ̼¾½º")À» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°í ¹× (ii) IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "IPLA")À» ¼öÁ¤¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Æò°¡ ±â°£ µ¿¾È Àû¿ëµË´Ï´Ù. + +IPLA´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Æò°¡¸¦ ¸¶Ä£ ÈÄ ±¸ÀÔ °è¾à(¿¹: IBM ±¹Á¦ Passport Advantage ¶Ç´Â IBM Passport Advantage Express °è¾à)À» ü°áÇÏ¿© ÇÁ·Î±×·¥À» º¸À¯Çϱâ·Î ¼±ÅÃÇÑ °æ¿ì(¶Ç´Â Æò°¡¸¦ ¸¶Ä£ ÈÄ »ç¿ëÀ» À§ÇØ ÇÁ·Î±×·¥ÀÇ »çº»À» Ãß°¡·Î ÃëµæÇÏ´Â °æ¿ì) ÀÚµ¿À¸·Î Àû¿ëµË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º¿Í IPLA´Â µ¿½Ã¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀÌµé µÎ °è¾àÀº ÇÑ °è¾à¿¡ ÀÇÇØ ´Ù¸¥ °è¾àÀÌ ¼öÁ¤µÇÁö ¾ÊÀ¸¸ç °¢°¢ µ¶¸³µÈ °è¾àÀÔ´Ï´Ù. + +ÀÌ·¯ÇÑ µÎ ¶óÀ̼¾½º °è¾àÀÇ °¢ Àü¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(Z125-5543-05)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§ (ÇÁ·Î±×·¥ ¹øÈ£: +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Ç¥ÁØ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +Æò°¡ ±â°£ + +Æò°¡ ±â°£Àº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ¸é ½ÃÀ۵Ǿî 90ÀÏ ÈÄ¿¡ Á¾·áµË´Ï´Ù. + +¹øµé ÇÁ·Î±×·¥(Bundled Programs) + +º» ÇÁ·Î±×·¥Àº ¾Æ·¡ ¸í½ÃµÈ ¹øµé ÇÁ·Î±×·¥(Bundled Programs)À¸·Î ±¸¼ºµÈ ´ÙÁß Á¦Ç° ÆÐŰÁö·Î ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º Áõ¼­(Proofs of Entitlement)ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­(License Information)¿¡ ¸í½ÃµÈ ¹Ù¿Í °°ÀÌ ÇØ´ç ¹øµé ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ÙÁß Á¦Ç° ÆÐŰÁö¿Í º°µµ·Î ¹øµé ÇÁ·Î±×·¥À» ¾çµµÇϰųª ÀçÆÇ¸ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ¹øµé ÇÁ·Î±×·¥¿¡´Â ¶óÀ̼¾½º Á¶Ç×ÀÌ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. °è¾à Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­ÀÇ Á¶Ç×ÀÌ ¹øµé ÇÁ·Î±×·¥ÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀÌ ¸¸·áµÇ°Å³ª ÇØÁöµÈ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¹øµé ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» »ç¿ë Áß´ÜÇϰųª ÆÄ±âÇϰųª º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ Áï½Ã ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¿¬¶ôÇØ¾ß ÇÕ´Ï´Ù. »ó±âÇÑ Á¦ÇÑ ¹üÀ§¸¦ ³Ñ¾î¼­ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â IBM ÆÇ¸Å ´ã´çÀÚ³ª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̼¾½º¸¦ ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +º» ÇÁ·Î±×·¥°ú ÇÔ²² ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ¹øµé ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°½À´Ï´Ù. +IBM MQ V9.0.3 + +°³¹ßÀÚ Á¦ÇÑ»çÇ× + +º» ÇÁ·Î±×·¥ÀÌ "°³¹ßÀÚ"¿ëÀ¸·Î ÁöÁ¤µÈ °æ¿ì, º» ÇÁ·Î±×·¥Àº °³¹ßÀÚ ±â°è¿¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ³»ºÎ °³¹ß ¹× À¯´Ö Å×½ºÆ® ¿ëµµÀÇ ÀϺηθ¸ ¹èÄ¡µÉ ¼ö ÀÖ½À´Ï´Ù. °³¹ßÀÚ ±â°è´Â ±âº» ¿î¿µ üÁ¦¿Í º» ÇÁ·Î±×·¥À» ½ÇÇà ÁßÀÎ ½ÇÁ¦ ¶Ç´Â °¡»ó µ¥½ºÅ©Å¾ ȯ°æÀÌ¸ç µÎ Ç׸ñ ¸ðµÎ¿¡ ´ëÇØ ¾×¼¼½º°¡ °¡´ÉÇϰí ÃÖ´ë ÇÑ ¸íÀÇ ÁöÁ¤µÈ °³¹ßÀÚ°¡ »ç¿ëÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÇÁ·Î´ö¼Ç ¿öÅ©·Îµå¸¦ ó¸®Çϰųª ÇÁ·Î´ö¼Ç ¿öÅ©·Îµå¸¦ ½Ã¹Ä·¹À̼ÇÇϰųª ÄÚµå, ÀÀ¿ëÇÁ·Î±×·¥ ¶Ç´Â ½Ã½ºÅÛÀÇ È®À强À» Å×½ºÆ®ÇÏ´Â ¿ëµµ·Î´Â º» ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÇØ´ç ÇÁ·Î´ö¼Ç ±ÇÇÑÀ» ÃëµæÇÏÁö ¾ÊÀº °æ¿ì ±âŸ ´Ù¸¥ ¿ëµµ¸¦ À§Çؼ­´Â º» ÇÁ·Î±×·¥ÀÇ ¾î¶°ÇÑ ºÎºÐµµ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(Z125-3301-14)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§ (ÇÁ·Î±×·¥ ¹øÈ£: +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Ç¥ÁØ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +Á¦ÇÑ »ç¿ë ±Ç¸® + +±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à("IPLA")°ú º» ¶óÀ̼¾½º Á¤º¸¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ, IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô º» ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Â Á¦ÇÑÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±Ç¸®´Â ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö("PVU"), ¸®¼Ò½º ¹ë·ù À¯´Ö("RVU"), ¹ë·ù À¯´Ö("VU") µî Çã°¡µÈ »ç¿ë(Authorized Use) ·¹º§À̳ª ¶óÀ̼¾½º Áõ¼­¿¡ ¸í½ÃµÈ ´ë·Î ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÁöºÒÇÑ ±âŸ ÁöÁ¤µÈ »ç¿ë ·¹º§·Î Á¦Çѵ˴ϴÙ. ¶óÀ̼¾½º »ç¿ëÀÚÀÇ »ç¿ëÀº ÁöÁ¤µÈ ±â°è·Î Á¦Çѵǰųª º¸Á¶ ÇÁ·Î±×·¥À¸·Î¸¸ »ç¿ëÇϵµ·Ï Á¦Çѵǰųª ´Ù¸¥ Á¦ÇÑ»çÇ׿¡ ÀÇÇØ Á¦ÇÑµÉ ¼öµµ ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ °æÁ¦Àû °¡Ä¡¸¦ ¸ðµÎ ÁöºÒÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÏÁö ¾ÊÀ¸¸é ±âŸ ´Ù¸¥ »ç¿ëÀÌ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀ» ÃëµæÇÑ Áذаè¾à¿¡¼­ ±¸Ã¼ÀûÀ¸·Î ¸í½ÃÇÏÁö ¾Ê´Â ÇÑ, º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© »ó¾÷¿ë IT ¼­ºñ½º¸¦ Á¦3ÀÚ¿¡°Ô Á¦°øÇϰųª »ó¾÷¿ë È£½ºÆÃ ¶Ç´Â ½ÃºÐÇÒÀ» Á¦°øÇϰųª º» ÇÁ·Î±×·¥À» Àç¶óÀ̼¾½º, ÀÓ´ë ¶Ç´Â ¸®½ºÇÒ ¼ö ¾ø½À´Ï´Ù. Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÑ °æ¿ì ¶Ç´Â ´Ù¸¥ Á¶Ç×À̳ª º¸Ãæ Á¶Ç׿¡ ÀǰÅÇÏ¿©, ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Ãß°¡ÀûÀÎ ±Ç¸®°¡ Á¦°øµÉ ¼ö ÀÖ½À´Ï´Ù. IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÀÌ·¯ÇÑ Ãß°¡ÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÏ´Â ±Ç¸®¸¦ º¸À¯ÇÕ´Ï´Ù. + +¸í¼¼ + +ÇÁ·Î±×·¥ÀÇ ¸í¼¼´Â ÇÁ·Î±×·¥ ¹ßÇ¥ ¹®¼­ÀÇ Á¾ÇÕÀûÀÎ ¼³¸í ¹× ±â¼ú Á¤º¸ Àý¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. + +¹øµé ÇÁ·Î±×·¥(Bundled Programs) + +º» ÇÁ·Î±×·¥Àº ¾Æ·¡ ¸í½ÃµÈ ¹øµé ÇÁ·Î±×·¥(Bundled Programs)À¸·Î ±¸¼ºµÈ ´ÙÁß Á¦Ç° ÆÐŰÁö·Î ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º Áõ¼­(Proofs of Entitlement)ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­(License Information)¿¡ ¸í½ÃµÈ ¹Ù¿Í °°ÀÌ ÇØ´ç ¹øµé ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ÙÁß Á¦Ç° ÆÐŰÁö¿Í º°µµ·Î ¹øµé ÇÁ·Î±×·¥À» ¾çµµÇϰųª ÀçÆÇ¸ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ¹øµé ÇÁ·Î±×·¥¿¡´Â ¶óÀ̼¾½º Á¶Ç×ÀÌ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. °è¾à Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­ÀÇ Á¶Ç×ÀÌ ¹øµé ÇÁ·Î±×·¥ÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀÌ ¸¸·áµÇ°Å³ª ÇØÁöµÈ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¹øµé ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» »ç¿ë Áß´ÜÇϰųª ÆÄ±âÇϰųª º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ Áï½Ã ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¿¬¶ôÇØ¾ß ÇÕ´Ï´Ù. »ó±âÇÑ Á¦ÇÑ ¹üÀ§¸¦ ³Ñ¾î¼­ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â IBM ÆÇ¸Å ´ã´çÀÚ³ª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̼¾½º¸¦ ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +º» ÇÁ·Î±×·¥°ú ÇÔ²² ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ¹øµé ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°½À´Ï´Ù. +IBM MQ V9.0.3 + +°³¹ßÀÚ Á¦ÇÑ»çÇ× + +º» ÇÁ·Î±×·¥ÀÌ "°³¹ßÀÚ"¿ëÀ¸·Î ÁöÁ¤µÈ °æ¿ì, º» ÇÁ·Î±×·¥Àº °³¹ßÀÚ ±â°è¿¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ³»ºÎ °³¹ß ¹× À¯´Ö Å×½ºÆ® ¿ëµµÀÇ ÀϺηθ¸ ¹èÄ¡µÉ ¼ö ÀÖ½À´Ï´Ù. °³¹ßÀÚ ±â°è´Â ±âº» ¿î¿µ üÁ¦¿Í º» ÇÁ·Î±×·¥À» ½ÇÇà ÁßÀÎ ½ÇÁ¦ ¶Ç´Â °¡»ó µ¥½ºÅ©Å¾ ȯ°æÀÌ¸ç µÎ Ç׸ñ ¸ðµÎ¿¡ ´ëÇØ ¾×¼¼½º°¡ °¡´ÉÇϰí ÃÖ´ë ÇÑ ¸íÀÇ ÁöÁ¤µÈ °³¹ßÀÚ°¡ »ç¿ëÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÇÁ·Î´ö¼Ç ¿öÅ©·Îµå¸¦ ó¸®Çϰųª ÇÁ·Î´ö¼Ç ¿öÅ©·Îµå¸¦ ½Ã¹Ä·¹À̼ÇÇϰųª ÄÚµå, ÀÀ¿ëÇÁ·Î±×·¥ ¶Ç´Â ½Ã½ºÅÛÀÇ È®À强À» Å×½ºÆ®ÇÏ´Â ¿ëµµ·Î´Â º» ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÇØ´ç ÇÁ·Î´ö¼Ç ±ÇÇÑÀ» ÃëµæÇÏÁö ¾ÊÀº °æ¿ì ±âŸ ´Ù¸¥ ¿ëµµ¸¦ À§Çؼ­´Â º» ÇÁ·Î±×·¥ÀÇ ¾î¶°ÇÑ ºÎºÐµµ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. + +Çʼö ±ÇÇÑÀ» ¼³Á¤ÇÏ´Â µ¥ »ç¿ëµÇÁö ¾Ê´Â ±¸¼º¿ä¼Ò + +º» ÇÁ·Î±×·¥À» ¼³Ä¡Çϰųª »ç¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ ÆÇº°ÇÏ´Â µ¥ ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼ÒÀÇ ¼³Ä¡ ¶Ç´Â »ç¿ëÀº °í·ÁµÇÁö ¾Ê½À´Ï´Ù. Áï, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¶Ç׿¡ ÁØÇÏ¿© ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼Ò¸¦ ¼³Ä¡Çϰųª »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ÀÌ·¯ÇÑ ±¸¼º¿ä¼Ò´Â º» ÇÁ·Î±×·¥¿¡ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ °áÁ¤ÇÏ´Â µ¥´Â »ç¿ëµÇÁö ¾Ê½À´Ï´Ù. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ ÃøÁ¤ ´ÜÀ§°¡ Àû¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. + +¼³Ä¡ + +¼³Ä¡(Install)´Â º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ¼³Ä¡´Â ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï Á¦°øµÈ ¹°¸®Àû µð½ºÅ©³ª °¡»ó µð½ºÅ©¿¡ ¼³Ä¡µÇ¾î ÀÖ´Â º» ÇÁ·Î±×·¥ÀÇ »çº»ÀÔ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ °¢ ¼³Ä¡¿¡ ´ëÇÑ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +Áß¿ä: ÁÖÀDZí°Ô ÀÐÀ¸½Ê½Ã¿À + +´ÙÀ½ µÎ °¡Áö ¶óÀ̼¾½º °è¾àÀÌ Á¦°øµË´Ï´Ù. + +1. IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à +2. IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» ½ÇÁ¦ ¾÷¹« ¿ëµµ(Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð ¿ëµµ Á¦¿Ü)·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾àÀ» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð(ÅëĪÇÏ¿© "Æò°¡") ¿ëµµ·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â (i) IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "Æò°¡ ¶óÀ̼¾½º")À» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°í ¹× (ii) IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "IPLA")À» ¼öÁ¤¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Æò°¡ ±â°£ µ¿¾È Àû¿ëµË´Ï´Ù. + +IPLA´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Æò°¡¸¦ ¸¶Ä£ ÈÄ ±¸ÀÔ °è¾à(¿¹: IBM ±¹Á¦ Passport Advantage ¶Ç´Â IBM Passport Advantage Express °è¾à)À» ü°áÇÏ¿© ÇÁ·Î±×·¥À» º¸À¯Çϱâ·Î ¼±ÅÃÇÑ °æ¿ì(¶Ç´Â Æò°¡¸¦ ¸¶Ä£ ÈÄ »ç¿ëÀ» À§ÇØ ÇÁ·Î±×·¥ÀÇ »çº»À» Ãß°¡·Î ÃëµæÇÏ´Â °æ¿ì) ÀÚµ¿À¸·Î Àû¿ëµË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º¿Í IPLA´Â µ¿½Ã¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀÌµé µÎ °è¾àÀº ÇÑ °è¾à¿¡ ÀÇÇØ ´Ù¸¥ °è¾àÀÌ ¼öÁ¤µÇÁö ¾ÊÀ¸¸ç °¢°¢ µ¶¸³µÈ °è¾àÀÔ´Ï´Ù. + +ÀÌ·¯ÇÑ µÎ ¶óÀ̼¾½º °è¾àÀÇ °¢ Àü¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(Z125-5543-05)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§: IBM MQ Managed File Transfer Service V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: Evaluation + +ÇÁ·Î±×·¥ À̸§: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: Evaluation + +ÇÁ·Î±×·¥ À̸§: IBM MQ Managed File Transfer Agent V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: Evaluation + +Æò°¡ ±â°£ + +Æò°¡ ±â°£Àº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ¸é ½ÃÀ۵Ǿî 90ÀÏ ÈÄ¿¡ Á¾·áµË´Ï´Ù. + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(Z125-3301-14)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§: IBM MQ Managed File Transfer Service V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: 5724-H72 + +ÇÁ·Î±×·¥ À̸§: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: 5724-H72 + +ÇÁ·Î±×·¥ À̸§: IBM MQ Managed File Transfer Agent V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: 5724-H72 + +±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à("IPLA")°ú º» ¶óÀ̼¾½º Á¤º¸¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ, IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô º» ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Â Á¦ÇÑÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±Ç¸®´Â ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö("PVU"), ¸®¼Ò½º ¹ë·ù À¯´Ö("RVU"), ¹ë·ù À¯´Ö("VU") µî Çã°¡µÈ »ç¿ë(Authorized Use) ·¹º§À̳ª ¶óÀ̼¾½º Áõ¼­¿¡ ¸í½ÃµÈ ´ë·Î ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÁöºÒÇÑ ±âŸ ÁöÁ¤µÈ »ç¿ë ·¹º§·Î Á¦Çѵ˴ϴÙ. ¶óÀ̼¾½º »ç¿ëÀÚÀÇ »ç¿ëÀº ÁöÁ¤µÈ ±â°è·Î Á¦Çѵǰųª º¸Á¶ ÇÁ·Î±×·¥À¸·Î¸¸ »ç¿ëÇϵµ·Ï Á¦Çѵǰųª ´Ù¸¥ Á¦ÇÑ»çÇ׿¡ ÀÇÇØ Á¦ÇÑµÉ ¼öµµ ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ °æÁ¦Àû °¡Ä¡¸¦ ¸ðµÎ ÁöºÒÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÏÁö ¾ÊÀ¸¸é ±âŸ ´Ù¸¥ »ç¿ëÀÌ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀ» ÃëµæÇÑ Áذаè¾à¿¡¼­ ±¸Ã¼ÀûÀ¸·Î ¸í½ÃÇÏÁö ¾Ê´Â ÇÑ, º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© »ó¾÷¿ë IT ¼­ºñ½º¸¦ Á¦3ÀÚ¿¡°Ô Á¦°øÇϰųª »ó¾÷¿ë È£½ºÆÃ ¶Ç´Â ½ÃºÐÇÒÀ» Á¦°øÇϰųª º» ÇÁ·Î±×·¥À» Àç¶óÀ̼¾½º, ÀÓ´ë ¶Ç´Â ¸®½ºÇÒ ¼ö ¾ø½À´Ï´Ù. Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÑ °æ¿ì ¶Ç´Â ´Ù¸¥ Á¶Ç×À̳ª º¸Ãæ Á¶Ç׿¡ ÀǰÅÇÏ¿©, ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Ãß°¡ÀûÀÎ ±Ç¸®°¡ Á¦°øµÉ ¼ö ÀÖ½À´Ï´Ù. IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÀÌ·¯ÇÑ Ãß°¡ÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÏ´Â ±Ç¸®¸¦ º¸À¯ÇÕ´Ï´Ù. + +ÇÁ·Î±×·¥ÀÇ ¸í¼¼´Â ÇÁ·Î±×·¥ ¹ßÇ¥ ¹®¼­ÀÇ Á¾ÇÕÀûÀÎ ¼³¸í ¹× ±â¼ú Á¤º¸ Àý¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. + +Àç¹èÆ÷ °¡´É Ç׸ñ + +º» ÇÁ·Î±×·¥¿¡ Àç¹èÆ÷ °¡´É ±¸¼º¿ä¼Ò°¡ Æ÷ÇԵǾî ÀÖ´Â °æ¿ì ÇØ´ç ±¸¼º¿ä¼Ò´Â º» ÇÁ·Î±×·¥¿¡ µ¿ºÀµÈ REDIST ÆÄÀÏ¿¡ ¸í½ÃµË´Ï´Ù. º» °è¾à¿¡¼­ ºÎ¿©ÇÑ ¶óÀ̼¾½º ±Ç¸® ¿Ü¿¡, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ÙÀ½ Á¶Ç׿¡ ÁØÇÏ¿© Àç¹èÆ÷ °¡´É Ç׸ñÀ» ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. +1) Àç¹èÆ÷ Ç׸ñÀº ¿ÀºêÁ§Æ® ÄÚµå Çü½ÄÀ̾î¾ß Çϸç Àç¹èÆ÷ ½Ã º» ÇÁ·Î±×·¥°ú ÇÔ²² Á¦°øµÇ´Â REDIST ¶Ç´Â ¹®¼­ÀÇ ¸ðµç Áö½Ã»çÇ×, Áöħ ¹× ¸í¼¼¸¦ ÁؼöÇØ¾ß ÇÕ´Ï´Ù. +2) º» ÇÁ·Î±×·¥°ú ÇÔ²² Á¦°øµÇ´Â ¹®¼­¿¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Àç¹èÆ÷ °¡´É Ç׸ñÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù°í ¸í½ÃÇÑ °æ¿ì, ÀÌ·¯ÇÑ ¼öÁ¤»çÇ×Àº ÇØ´ç ¹®¼­ÀÇ ¸ðµç Áö½Ã»çÇ×, Áöħ ¹× ¸í¼¼¸¦ ÁؼöÇØ¾ß Çϸç ÀÌ·¯ÇÑ ¼öÁ¤»çÇ×(ÇØ´ç »çÇ×ÀÌ ÀÖ´Â °æ¿ì)Àº Àç¹èÆ÷ °¡´É Ç׸ñÀ¸·Î °£ÁֵǾî¾ß ÇÕ´Ï´Ù. +3) Àç¹èÆ÷ °¡´É Ç׸ñÀº º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© °³¹ßÇÑ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ÀÀ¿ëÇÁ·Î±×·¥(ÀÌÇÏ "¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥")ÀÇ ÀϺημ­, ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» ¶óÀ̼¾½º »ç¿ëÀÚÀÇ °í°´ÀÌ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÏ´Â ¿ëµµ·Î¸¸ ¹èÆ÷µÇ¾î¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥Àº Áß¿äÇÑ ºÎ°¡ °¡Ä¡¸¦ ±¸¼ºÇØ¾ß Çϸç Àç¹èÆ÷ °¡´É Ç׸ñÀº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¼ÒÇÁÆ®¿þ¾î Á¦Ç°¿¡ ´ëÇÑ ÃÖÁ¾ »ç¿ëÀÚÀÇ Áß¿äÇÑ Ãëµæ µ¿±â¿¡ ÇØ´çµÇÁö ¾Ê¾Æ¾ß ÇÕ´Ï´Ù. +4) Àç¹èÆ÷ °¡´É Ç׸ñ¿¡ JRE(Java Runtime Environment)°¡ Æ÷ÇԵǴ °æ¿ì, ¼ÒÇü ¶Ç´Â ±âŸ ÆÛº£ÀÌ½Ãºê µð¹ÙÀ̽º(Áï, ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­°¡ ÀÖÀ¸³ª ÄÄÇ»ÆÃÀÌ ÁÖ¿ä ¿ëµµ°¡ ¾Æ´Ñ µð¹ÙÀ̽º)°¡ ¾Æ´Ñ ÀÏ¹Ý ÄÄÇ»ÅÍ µð¹ÙÀ̽º(¿¹: ·¦Å¾, µ¥½ºÅ©Å¾ ¹× ¼­¹ö)¿¡¼­¸¸ ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» ½ÇÇàÇϵµ·Ï ¼³°èÇÑ °æ¿ì°¡ ¾Æ´Ï¸é ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥°ú ÇÔ²² ´Ù¸¥ ºñJava Àç¹èÆ÷ °¡´É Ç׸ñµµ Æ÷ÇÔÇØ¾ß ÇÕ´Ï´Ù. +5) ¶óÀ̼¾½º »ç¿ëÀÚ´Â Àç¹èÆ÷ °¡´É Ç׸ñ¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç ¶Ç´Â ÁÖÀÇ»çÇ× ÆÄÀÏÀ» Á¦°ÅÇÒ ¼ö ¾ø½À´Ï´Ù. +6) ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» »ç¿ëÇϰųª ¹èÆ÷ÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â ¸ðµç ¹è»ó û±¸¿¡ ´ëÇÏ¿© IBM, IBM °ø±ÞÀÚ ¶Ç´Â µð½ºÆ®¸®ºäÅÍ¿¡°Ô ¼ÕÇØ°¡ ¹ß»ýÇÏÁö ¾Êµµ·Ï ¹æ¾îÇØ¾ß ÇÕ´Ï´Ù. +7) ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¿øº» Àç¹èÆ÷ °¡´É ÆÄÀÏÀ̳ª ¸ðµâ°ú µ¿ÀÏÇÑ °æ·Î À̸§À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. +8) ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» ÆÇ¸ÅÇϱâ À§ÇØ IBM, IBMÀÇ °ø±ÞÀÚ ¶Ç´Â µð½ºÆ®¸®ºäÅÍÀÇ »çÀü ¼­¸é µ¿ÀÇ ¾øÀÌ IBM, IBMÀÇ °ø±ÞÀÚ ¶Ç´Â µð½ºÆ®¸®ºäÅÍÀÇ »óÈ£ ¶Ç´Â »óÇ¥¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. +9) IBM, IBM °ø±ÞÀÚ ¶Ç´Â µð½ºÆ®¸®ºäÅÍ´Â ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, Àç¹èÆ÷ °¡´É Ç׸ñ ¹× °ü·Ã ¹®¼­¸¦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. +10) ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥ ¹× Àç¹èÆ÷ °¡´É Ç׸ñÀÇ ¼öÁ¤»çÇ׿¡ ´ëÇÑ ±â¼úÀû Áö¿øÀÇ ¸ðµç Ã¥ÀÓÀº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ºÎ´ãÇÕ´Ï´Ù. +11) ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥¿¡ ´ëÇÑ ÃÖÁ¾ »ç¿ëÀÚ¿ÍÀÇ ¶óÀ̼¾½º °è¾à¿¡¼­ Àç¹èÆ÷ °¡´É Ç׸ñ ¶Ç´Â ±× ¼öÁ¤»çÇ×À» i) ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥À» ÀÛµ¿ °¡´ÉÇÏ°Ô ÇÏ´Â ¿ëµµ¿¡ ÇÑÇØ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ii) º¹»ç(¹é¾÷¿ëÀº Á¦¿Ü)Çϰųª iii) ¶óÀ̼¾½º »ç¿ëÀÚ ÀÀ¿ëÇÁ·Î±×·¥°ú º°µµ·Î ¹èÆ÷ ¶Ç´Â ¾çµµÇϰųª iv) ¸®¹ö½º ¾î¼Àºí, ¸®¹ö½º ÄÄÆÄÀÏ ¶Ç´Â ´Þ¸® º¯È¯ÇÒ ¼ö ¾ø´Ù´Â Á¡À» ÃÖÁ¾ »ç¿ëÀÚ¿¡°Ô ÅëÁöÇØ¾ß ÇÕ´Ï´Ù(´Ü, °è¾à»óÀÇ ±Ç¸® Æ÷±â °¡´É¼ºÀÌ ¾øÀÌ ¹ý·ü¿¡¼­ ±¸Ã¼ÀûÀ¸·Î Çã°¡ÇÑ °æ¿ì´Â Á¦¿Ü). ¶ÇÇÑ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¶óÀ̼¾½º °è¾àÀº ÃÖ¼ÒÇÑ º» °è¾à Á¶Ç×ÀÇ ¼öÁØ¿¡¼­ IBMÀ» º¸È£ÇØ¾ß ÇÕ´Ï´Ù. + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â ÇÁ·Î±×·¥ÀÇ REDIST ÆÄÀÏ¿¡ ¸í½ÃµÈ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·áÀÇ ¼öÁ¤ ¹öÀüÀ» º» ¶óÀ̼¾½ºÀÇ Á¶Ç× ¹× REDIST ÆÄÀÏÀÇ Áöħ¿¡ µû¶ó Àç¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. + +¼³Ä¡ + +¼³Ä¡(Install)´Â º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ¼³Ä¡´Â ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï Á¦°øµÈ ¹°¸®Àû µð½ºÅ©³ª °¡»ó µð½ºÅ©¿¡ ¼³Ä¡µÇ¾î ÀÖ´Â º» ÇÁ·Î±×·¥ÀÇ »çº»ÀÔ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ °¢ ¼³Ä¡¿¡ ´ëÇÑ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(PVU) + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(Processor Value Unit: PVU)Àº º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ÇÊ¿äÇÑ PVU ±ÇÇÑ ¼ö´Â ÇÁ·Î¼¼¼­ ±â¼ú(ÇÁ·Î¼¼¼­ º¥´õ, ºê·£µå, À¯Çü ¹× ¸ðµ¨ ¹øÈ£º°·Î PVU Ç¥¿¡ Á¤ÀǵÊ, http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ÂüÁ¶)°ú º» ÇÁ·Î±×·¥¿¡ Á¦°øµÈ ÇÁ·Î¼¼¼­ ¼ö¿¡ ÀÇÇØ °áÁ¤µË´Ï´Ù. IBMÀº PVU ±â¹Ý ¶óÀ̼¾½ºÀÇ ¸ñÀû»ó, ĨÀÇ °¢ ÇÁ·Î¼¼¼­ Äھ ÇÁ·Î¼¼¼­·Î Á¤ÀÇÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, µà¾ó ÄÚ¾î ÇÁ·Î¼¼¼­ ĨÀÇ ÇÁ·Î¼¼¼­ ÄÚ¾î´Â µÎ °³ÀÔ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â Passport Advantage Sub-Capacity ¶óÀ̼¾½º Á¶Ç×(¾Æ·¡ À¥ ÆäÀÌÁö ÂüÁ¶)¿¡ ÁØÇÏ¿© Full Capacity ¶óÀ̼¾½º ¶Ç´Â Virtualization Capacity(Sub-Capacity) ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ¿© º» ÇÁ·Î±×·¥À» Àü°³ÇÒ ¼ö ÀÖ½À´Ï´Ù. Full Capacity ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡´Â º» ÇÁ·Î±×·¥ÀÌ ¿µ±¸ÀûÀ¸·Î Á¦°ÅµÈ ¼­¹ö¸¦ Á¦¿ÜÇϰí, º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¹°¸®Àû Çϵå¿þ¾î ȯ°æ¿¡ Á¸ÀçÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î*¸¦ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ PVU ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. Virtualization Capacity ¶óÀ̼¾½ºÀÇ °æ¿ì¿¡´Â Virtualization Capacity ¶óÀ̼¾½º °è»ê ±ÔÄ¢(http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html ÂüÁ¶)¿¡ µû¶ó º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ Äھ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +* Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î¶õ °¡»óÈ­ ±â¼ú, ¿î¿µ üÁ¦ ¸í·É, BIOS ¼³Á¤ ¶Ç´Â À¯»çÇÑ Á¦ÇÑ»çÇ×À» ÅëÇØ ÇÁ·Î¼¼¼­ ÄÚ¾îÀÇ ¿ë·®À» Á¦ÇÑÇÒ ¼ö ÀÖ´ÂÁö ¶Ç´Â ½ÇÁ¦·Î Á¦ÇÑÇÏ´ÂÁö ¿©ºÎ¿¡ °ü°è ¾øÀÌ ¹°¸®Àû ¼­¹ö³ª °¡»ó ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ÇÁ·Î¼¼¼­ Äھ ÀǹÌÇÕ´Ï´Ù. + +ÇÁ·Î±×·¥ °íÀ¯ Á¶Ç× + +À¯ÈÞ ´ë±â(Idle Standby) ±¸¼º + +º» Á¶Ç×ÀÇ ¸ñÀû»ó, "À¯ÈÞ ´ë±â" ±¸¼ºÀ̶õ º» ÇÁ·Î±×·¥ÀÇ »çº»ÀÌ °í°¡¿ë¼º ¼Ö·ç¼ÇÀÇ ÀϺθ¦ ±¸¼ºÇÏ´Â ¼­¹ö¿¡ ¼³Ä¡µÇ°í Ȱ¼º ¼­¹ö¿¡ ÀÖ´Â º» ÇÁ·Î±×·¥ »çº»ÀÇ »ç¿ëÀÌ Áß´ÜµÈ °æ¿ì ÇØ´ç ¼­¹ö¿¡¼­ º» ÇÁ·Î±×·¥ÀÌ ¿À·ù º¹±¸¸¦ ¼öÇàÇÏ´Â ±¸¼ºÀ» ÀǹÌÇÕ´Ï´Ù. ¼­¹ö°¡ ¿À·ù º¹±¸ ½Ã³ª¸®¿À¸¦ Áö¿øÇÏ´Â °ü¸® Á¶Ä¡¿¡ ÀüÀûÀ¸·Î »ç¿ëµÇ¸é ¿À·ù º¹±¸°¡ ¼öÇàµÉ ¶§±îÁö ÇØ´ç ¼­¹ö´Â "À¯ÈÞ »óÅÂ"·Î¸¸ °£Áֵ˴ϴÙ. + +ÀûÀýÇÑ ¶óÀ̼¾½º°¡ ºÎ¿©µÇÁö ¾ÊÀ¸¸é À¯ÈÞ ´ë±â ¼­¹ö¿¡ º» ÇÁ·Î±×·¥À» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. + +º» ÇÁ·Î±×·¥ÀÌ Multi-Instance Queue Manager ÇÇó¿¡¼­ À¯ÈÞ ´ë±â ±¸¼ºÀ¸·Î »ç¿ëµÇ´Â °æ¿ì, ÇÁ·Î±×·¥ »çº»Àº À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¹é¾÷ ¿ëµµ·Î »óÁÖÇÒ ¼ö ÀÖÀ¸¸ç, ½ÃÀ۵Ǿî À־ "À¯ÈÞ" »óŸ¦ À¯ÁöÇØ¾ß Çϰí, Ȱ¼º ¼­¹ö°¡ À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¿À·ù º¹±¸¸¦ ¼öÇàÇÏÁö ¾Ê´Â ÇÑ ¾î¶°ÇÑ ÇÁ·Î´ö¼Ç ÀÛ¾÷µµ ¼öÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ °æ¿ì À¯ÈÞ ´ë±â »çº»À» »ç¿ëÇÏ¿© ¿À·ù º¹±¸ µ¿¾È ÇÁ·Î´ö¼Ç ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. + +º» ÇÁ·Î±×·¥ÀÌ ±âŸ °í°¡¿ë¼º ½Ã½ºÅÛ¿¡¼­ À¯ÈÞ ´ë±â ±¸¼ºÀ¸·Î »ç¿ëµÇ´Â °æ¿ì, ÇÁ·Î±×·¥ »çº»Àº À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¹é¾÷ ¿ëµµ·Î »óÁÖÇÒ ¼ö ÀÖÀ¸¸ç, ½ÃÀÛµÇÁö ¾ÊÁö¸¸(µû¶ó¼­ ¾î¶°ÇÑ ÇÁ·Î´ö¼Ç ÀÛ¾÷ ¼öÇàÀ» À§Çؼ­µµ »ç¿ëµÇÁö ¾ÊÀ½), Ȱ¼º ¼­¹ö¿¡ Àå¾Ö°¡ ¹ß»ýÇÑ °æ¿ì¿¡´Â °í°¡¿ë¼º ±¸¼º¿ä¼Ò¿¡ ÀÇÇØ ÀÚµ¿À¸·Î ½ÃÀ۵˴ϴÙ. ÀÌ °æ¿ì À¯ÈÞ ´ë±â »çº»À» »ç¿ëÇÏ¿© ¿À·ù º¹±¸ µ¿¾È ÇÁ·Î´ö¼Ç ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +Áß¿ä: ÁÖÀDZí°Ô ÀÐÀ¸½Ê½Ã¿À + +´ÙÀ½ µÎ °¡Áö ¶óÀ̼¾½º °è¾àÀÌ Á¦°øµË´Ï´Ù. + +1. IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à +2. IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» ½ÇÁ¦ ¾÷¹« ¿ëµµ(Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð ¿ëµµ Á¦¿Ü)·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾àÀ» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð(ÅëĪÇÏ¿© "Æò°¡") ¿ëµµ·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â (i) IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "Æò°¡ ¶óÀ̼¾½º")À» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°í ¹× (ii) IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "IPLA")À» ¼öÁ¤¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Æò°¡ ±â°£ µ¿¾È Àû¿ëµË´Ï´Ù. + +IPLA´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Æò°¡¸¦ ¸¶Ä£ ÈÄ ±¸ÀÔ °è¾à(¿¹: IBM ±¹Á¦ Passport Advantage ¶Ç´Â IBM Passport Advantage Express °è¾à)À» ü°áÇÏ¿© ÇÁ·Î±×·¥À» º¸À¯Çϱâ·Î ¼±ÅÃÇÑ °æ¿ì(¶Ç´Â Æò°¡¸¦ ¸¶Ä£ ÈÄ »ç¿ëÀ» À§ÇØ ÇÁ·Î±×·¥ÀÇ »çº»À» Ãß°¡·Î ÃëµæÇÏ´Â °æ¿ì) ÀÚµ¿À¸·Î Àû¿ëµË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º¿Í IPLA´Â µ¿½Ã¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀÌµé µÎ °è¾àÀº ÇÑ °è¾à¿¡ ÀÇÇØ ´Ù¸¥ °è¾àÀÌ ¼öÁ¤µÇÁö ¾ÊÀ¸¸ç °¢°¢ µ¶¸³µÈ °è¾àÀÔ´Ï´Ù. + +ÀÌ·¯ÇÑ µÎ ¶óÀ̼¾½º °è¾àÀÇ °¢ Àü¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(Z125-5543-05)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§: IBM MQ Advanced Message Security V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: Evaluation + +ÇÁ·Î±×·¥ À̸§: IBM MQ Advanced Message Security Idle Standby V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: Evaluation + +ÇÁ·Î±×·¥ À̸§: IBM MQ Telemetry V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: Evaluation + +Æò°¡ ±â°£ + +Æò°¡ ±â°£Àº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ¸é ½ÃÀ۵Ǿî 90ÀÏ ÈÄ¿¡ Á¾·áµË´Ï´Ù. + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + + + +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(Z125-3301-14)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§: IBM MQ Advanced Message Security V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: 5724-H72 + +ÇÁ·Î±×·¥ À̸§: IBM MQ Advanced Message Security Idle Standby V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: 5724-H72 + +ÇÁ·Î±×·¥ À̸§: IBM MQ Telemetry V9.0.1 +ÇÁ·Î±×·¥ ¹øÈ£: 5724-H72 + +±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à("IPLA")°ú º» ¶óÀ̼¾½º Á¤º¸¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ, IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô º» ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Â Á¦ÇÑÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ±Ç¸®´Â ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö("PVU"), ¸®¼Ò½º ¹ë·ù À¯´Ö("RVU"), ¹ë·ù À¯´Ö("VU") µî Çã°¡µÈ »ç¿ë(Authorized Use) ·¹º§À̳ª ¶óÀ̼¾½º Áõ¼­¿¡ ¸í½ÃµÈ ´ë·Î ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÁöºÒÇÑ ±âŸ ÁöÁ¤µÈ »ç¿ë ·¹º§·Î Á¦Çѵ˴ϴÙ. ¶óÀ̼¾½º »ç¿ëÀÚÀÇ »ç¿ëÀº ÁöÁ¤µÈ ±â°è·Î Á¦Çѵǰųª º¸Á¶ ÇÁ·Î±×·¥À¸·Î¸¸ »ç¿ëÇϵµ·Ï Á¦Çѵǰųª ´Ù¸¥ Á¦ÇÑ»çÇ׿¡ ÀÇÇØ Á¦ÇÑµÉ ¼öµµ ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ °æÁ¦Àû °¡Ä¡¸¦ ¸ðµÎ ÁöºÒÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÏÁö ¾ÊÀ¸¸é ±âŸ ´Ù¸¥ »ç¿ëÀÌ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀ» ÃëµæÇÑ Áذаè¾à¿¡¼­ ±¸Ã¼ÀûÀ¸·Î ¸í½ÃÇÏÁö ¾Ê´Â ÇÑ, º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© »ó¾÷¿ë IT ¼­ºñ½º¸¦ Á¦3ÀÚ¿¡°Ô Á¦°øÇϰųª »ó¾÷¿ë È£½ºÆÃ ¶Ç´Â ½ÃºÐÇÒÀ» Á¦°øÇϰųª º» ÇÁ·Î±×·¥À» Àç¶óÀ̼¾½º, ÀÓ´ë ¶Ç´Â ¸®½ºÇÒ ¼ö ¾ø½À´Ï´Ù. Ãß°¡ »ç¿ë·á¸¦ ÁöºÒÇÑ °æ¿ì ¶Ç´Â ´Ù¸¥ Á¶Ç×À̳ª º¸Ãæ Á¶Ç׿¡ ÀǰÅÇÏ¿©, ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Ãß°¡ÀûÀÎ ±Ç¸®°¡ Á¦°øµÉ ¼ö ÀÖ½À´Ï´Ù. IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÀÌ·¯ÇÑ Ãß°¡ÀûÀÎ ±Ç¸®¸¦ ºÎ¿©ÇÒÁö ¿©ºÎ¸¦ °áÁ¤ÇÏ´Â ±Ç¸®¸¦ º¸À¯ÇÕ´Ï´Ù. + +ÇÁ·Î±×·¥ÀÇ ¸í¼¼´Â ÇÁ·Î±×·¥ ¹ßÇ¥ ¹®¼­ÀÇ Á¾ÇÕÀûÀÎ ¼³¸í ¹× ±â¼ú Á¤º¸ Àý¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + +¼³Ä¡ + +¼³Ä¡(Install)´Â º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ¼³Ä¡´Â ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï Á¦°øµÈ ¹°¸®Àû µð½ºÅ©³ª °¡»ó µð½ºÅ©¿¡ ¼³Ä¡µÇ¾î ÀÖ´Â º» ÇÁ·Î±×·¥ÀÇ »çº»ÀÔ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ °¢ ¼³Ä¡¿¡ ´ëÇÑ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(PVU) + +ÇÁ·Î¼¼¼­ ¹ë·ù À¯´Ö(Processor Value Unit: PVU)Àº º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ºÎ¿©µÇ´Â ÃøÁ¤ ´ÜÀ§ÀÔ´Ï´Ù. ÇÊ¿äÇÑ PVU ±ÇÇÑ ¼ö´Â ÇÁ·Î¼¼¼­ ±â¼ú(ÇÁ·Î¼¼¼­ º¥´õ, ºê·£µå, À¯Çü ¹× ¸ðµ¨ ¹øÈ£º°·Î PVU Ç¥¿¡ Á¤ÀǵÊ, http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ÂüÁ¶)°ú º» ÇÁ·Î±×·¥¿¡ Á¦°øµÈ ÇÁ·Î¼¼¼­ ¼ö¿¡ ÀÇÇØ °áÁ¤µË´Ï´Ù. IBMÀº PVU ±â¹Ý ¶óÀ̼¾½ºÀÇ ¸ñÀû»ó, ĨÀÇ °¢ ÇÁ·Î¼¼¼­ Äھ ÇÁ·Î¼¼¼­·Î Á¤ÀÇÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, µà¾ó ÄÚ¾î ÇÁ·Î¼¼¼­ ĨÀÇ ÇÁ·Î¼¼¼­ ÄÚ¾î´Â µÎ °³ÀÔ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â Passport Advantage Sub-Capacity ¶óÀ̼¾½º Á¶Ç×(¾Æ·¡ À¥ ÆäÀÌÁö ÂüÁ¶)¿¡ ÁØÇÏ¿© Full Capacity ¶óÀ̼¾½º ¶Ç´Â Virtualization Capacity(Sub-Capacity) ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ¿© º» ÇÁ·Î±×·¥À» Àü°³ÇÒ ¼ö ÀÖ½À´Ï´Ù. Full Capacity ¶óÀ̼¾½º¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡´Â º» ÇÁ·Î±×·¥ÀÌ ¿µ±¸ÀûÀ¸·Î Á¦°ÅµÈ ¼­¹ö¸¦ Á¦¿ÜÇϰí, º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¹°¸®Àû Çϵå¿þ¾î ȯ°æ¿¡ Á¸ÀçÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î*¸¦ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ PVU ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. Virtualization Capacity ¶óÀ̼¾½ºÀÇ °æ¿ì¿¡´Â Virtualization Capacity ¶óÀ̼¾½º °è»ê ±ÔÄ¢(http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html ÂüÁ¶)¿¡ µû¶ó º» ÇÁ·Î±×·¥¿¡ Á¦°øµÇ°Å³ª º» ÇÁ·Î±×·¥¿¡¼­ °ü¸®ÇÏ´Â ¸ðµç Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ Äھ Æ÷°ýÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ ¼öÀÇ ±ÇÇÑÀ» ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +* Ȱ¼ºÈ­µÈ ÇÁ·Î¼¼¼­ ÄÚ¾î¶õ °¡»óÈ­ ±â¼ú, ¿î¿µ üÁ¦ ¸í·É, BIOS ¼³Á¤ ¶Ç´Â À¯»çÇÑ Á¦ÇÑ»çÇ×À» ÅëÇØ ÇÁ·Î¼¼¼­ ÄÚ¾îÀÇ ¿ë·®À» Á¦ÇÑÇÒ ¼ö ÀÖ´ÂÁö ¶Ç´Â ½ÇÁ¦·Î Á¦ÇÑÇÏ´ÂÁö ¿©ºÎ¿¡ °ü°è ¾øÀÌ ¹°¸®Àû ¼­¹ö³ª °¡»ó ¼­¹ö¿¡¼­ »ç¿ë °¡´ÉÇÑ ÇÁ·Î¼¼¼­ Äھ ÀǹÌÇÕ´Ï´Ù. + +ÇÁ·Î±×·¥ °íÀ¯ Á¶Ç× + +À¯ÈÞ ´ë±â(Idle Standby) ±¸¼º + +º» Á¶Ç×ÀÇ ¸ñÀû»ó, "À¯ÈÞ ´ë±â" ±¸¼ºÀ̶õ º» ÇÁ·Î±×·¥ÀÇ »çº»ÀÌ °í°¡¿ë¼º ¼Ö·ç¼ÇÀÇ ÀϺθ¦ ±¸¼ºÇÏ´Â ¼­¹ö¿¡ ¼³Ä¡µÇ°í Ȱ¼º ¼­¹ö¿¡ ÀÖ´Â º» ÇÁ·Î±×·¥ »çº»ÀÇ »ç¿ëÀÌ Áß´ÜµÈ °æ¿ì ÇØ´ç ¼­¹ö¿¡¼­ º» ÇÁ·Î±×·¥ÀÌ ¿À·ù º¹±¸¸¦ ¼öÇàÇÏ´Â ±¸¼ºÀ» ÀǹÌÇÕ´Ï´Ù. ¼­¹ö°¡ ¿À·ù º¹±¸ ½Ã³ª¸®¿À¸¦ Áö¿øÇÏ´Â °ü¸® Á¶Ä¡¿¡ ÀüÀûÀ¸·Î »ç¿ëµÇ¸é ¿À·ù º¹±¸°¡ ¼öÇàµÉ ¶§±îÁö ÇØ´ç ¼­¹ö´Â "À¯ÈÞ »óÅÂ"·Î¸¸ °£Áֵ˴ϴÙ. + +ÀûÀýÇÑ ¶óÀ̼¾½º°¡ ºÎ¿©µÇÁö ¾ÊÀ¸¸é À¯ÈÞ ´ë±â ¼­¹ö¿¡ º» ÇÁ·Î±×·¥À» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. + +º» ÇÁ·Î±×·¥ÀÌ Multi-Instance Queue Manager ÇÇó¿¡¼­ À¯ÈÞ ´ë±â ±¸¼ºÀ¸·Î »ç¿ëµÇ´Â °æ¿ì, ÇÁ·Î±×·¥ »çº»Àº À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¹é¾÷ ¿ëµµ·Î »óÁÖÇÒ ¼ö ÀÖÀ¸¸ç, ½ÃÀ۵Ǿî À־ "À¯ÈÞ" »óŸ¦ À¯ÁöÇØ¾ß Çϰí, Ȱ¼º ¼­¹ö°¡ À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¿À·ù º¹±¸¸¦ ¼öÇàÇÏÁö ¾Ê´Â ÇÑ ¾î¶°ÇÑ ÇÁ·Î´ö¼Ç ÀÛ¾÷µµ ¼öÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ °æ¿ì À¯ÈÞ ´ë±â »çº»À» »ç¿ëÇÏ¿© ¿À·ù º¹±¸ µ¿¾È ÇÁ·Î´ö¼Ç ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. + +º» ÇÁ·Î±×·¥ÀÌ ±âŸ °í°¡¿ë¼º ½Ã½ºÅÛ¿¡¼­ À¯ÈÞ ´ë±â ±¸¼ºÀ¸·Î »ç¿ëµÇ´Â °æ¿ì, ÇÁ·Î±×·¥ »çº»Àº À¯ÈÞ ´ë±â ¼­¹ö¿¡¼­ ¹é¾÷ ¿ëµµ·Î »óÁÖÇÒ ¼ö ÀÖÀ¸¸ç, ½ÃÀÛµÇÁö ¾ÊÁö¸¸(µû¶ó¼­ ¾î¶°ÇÑ ÇÁ·Î´ö¼Ç ÀÛ¾÷ ¼öÇàÀ» À§Çؼ­µµ »ç¿ëµÇÁö ¾ÊÀ½), Ȱ¼º ¼­¹ö¿¡ Àå¾Ö°¡ ¹ß»ýÇÑ °æ¿ì¿¡´Â °í°¡¿ë¼º ±¸¼º¿ä¼Ò¿¡ ÀÇÇØ ÀÚµ¿À¸·Î ½ÃÀ۵˴ϴÙ. ÀÌ °æ¿ì À¯ÈÞ ´ë±â »çº»À» »ç¿ëÇÏ¿© ¿À·ù º¹±¸ µ¿¾È ÇÁ·Î´ö¼Ç ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +Áß¿ä: ÁÖÀDZí°Ô ÀÐÀ¸½Ê½Ã¿À. + +´ÙÀ½ µÎ °¡Áö ¶óÀ̼¾½º °è¾àÀÌ Á¦°øµË´Ï´Ù. + +1. IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à +2. IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» ½ÇÁ¦ ¾÷¹« ¿ëµµ(Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð ¿ëµµ Á¦¿Ü)·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾àÀ» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» Æò°¡, Å×½ºÆ®, ½Ã¹ü ¿î¿ë "½ÃÇè ¶Ç´Â ±¸¸Å" ¶Ç´Â µ¥¸ð(ÅëĪÇÏ¿© "Æò°¡") ¿ëµµ·Î ÃëµæÇÏ´Â °æ¿ì: ¾Æ·¡ÀÇ "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â (i) IBM Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "Æò°¡ ¶óÀ̼¾½º")À» ¼öÁ¤ ¾øÀÌ ½ÂÀÎÇÏ°í ¹× (ii) IBM ±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(ÀÌÇÏ "IPLA")À» ¼öÁ¤¾øÀÌ ½ÂÀÎÇÏ°Ô µË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Æò°¡ ±â°£ µ¿¾È Àû¿ëµË´Ï´Ù. + +IPLA´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Æò°¡¸¦ ¸¶Ä£ ÈÄ ±¸ÀÔ °è¾à(¿¹: IBM ±¹Á¦ Passport Advantage ¶Ç´Â IBM Passport Advantage Express °è¾à)À» ü°áÇÏ¿© ÇÁ·Î±×·¥À» º¸À¯Çϱâ·Î ¼±ÅÃÇÑ °æ¿ì(¶Ç´Â Æò°¡¸¦ ¸¶Ä£ ÈÄ »ç¿ëÀ» À§ÇØ ÇÁ·Î±×·¥ÀÇ »çº»À» Ãß°¡·Î ÃëµæÇÏ´Â °æ¿ì) ÀÚµ¿À¸·Î Àû¿ëµË´Ï´Ù. + +Æò°¡ ¶óÀ̼¾½º¿Í IPLA´Â µ¿½Ã¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀÌµé µÎ °è¾àÀº ÇÑ °è¾à¿¡ ÀÇÇØ ´Ù¸¥ °è¾àÀÌ ¼öÁ¤µÇÁö ¾ÊÀ¸¸ç °¢°¢ µ¶¸³µÈ °è¾àÀÔ´Ï´Ù. + +ÀÌ·¯ÇÑ µÎ ¶óÀ̼¾½º °è¾àÀÇ °¢ Àü¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù. + + +Æò°¡ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à + +Á¦ 1 ºÎ - ÀÏ¹Ý Á¶Ç× + +º» ÇÁ·Î±×·¥À» ´Ù¿î·Îµå, ¼³Ä¡, º¹»ç, ¾×¼¼½º ¶Ç´Â »ç¿ëÇϰųª "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ°Ô µË´Ï´Ù. ¸¸ÀÏ ±ÍÇϰ¡ ¶óÀ̼¾½º »ç¿ëÀÚ¸¦ ´ëÇ¥ÇÏ¿© º» °è¾àÀÇ Á¶Ç×À» ½ÂÀÎÇÏ´Â °æ¿ì, ±ÍÇÏ´Â ±ÍÇÏ¿¡°Ô ÇØ´ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ À̵é Á¶Ç×À» ÁؼöÇϵµ·Ï ÇÒ ¿ÏÀüÇÑ ±ÇÇÑÀÌ ÀÖÀ½À» º¸ÁõÇϰí Áø¼úÇÕ´Ï´Ù. º» °è¾à Á¶°Ç¿¡ µ¿ÀÇÇÏÁö ¾Ê´Â °æ¿ì, + +* º» ÇÁ·Î±×·¥À» ´Ù¿î·Îµå, ¼³Ä¡, º¹»ç, ¾×¼¼½º ¶Ç´Â »ç¿ëÇϰųª ¡°½ÂÀΡ± ´ÜÃ߸¦ Ŭ¸¯ÇÏÁö ¸¶½Ã°í, + +* »ç¿ëÇÏÁö ¾ÊÀº ¹Ìµð¾î ¹× ¹®¼­¸¦ ±¸ÀÔó¿¡ Áï½Ã ¹ÝȯÇϰí ÁöºÒÇÑ ±Ý¾×À» ȯºÒ¹ÞÀ¸½Ê½Ã¿À. º» ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â º» ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» ÆÄ±âÇϽʽÿÀ. + +1. ¿ë¾î Á¤ÀÇ + +"Çã°¡µÈ »ç¿ë" - ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â ÁöÁ¤µÈ ·¹º§ÀÔ´Ï´Ù. ÇØ´ç ·¹º§Àº »ç¿ëÀÚ ¼ö, MSU(Millions of Service Unit), PVU(Processor Value Unit) ¶Ç´Â IBMÀÌ ÁöÁ¤ÇÏ´Â ±âŸ »ç¿ë ·¹º§·Î ÃøÁ¤µË´Ï´Ù. + +"IBM" - International Business Machines Corporation ¶Ç´Â ±× ÀÚȸ»ç Áß Çϳª¸¦ ÀǹÌÇÕ´Ï´Ù. + +"¶óÀ̼¾½º Á¤º¸"("LI") - ÇÁ·Î±×·¥¿¡ ´ëÇÑ Á¤º¸ ¹× Ãß°¡ Á¶Ç×À» Á¦°øÇÏ´Â ¹®¼­ÀÔ´Ï´Ù. º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º Á¤º¸´Â ½Ã½ºÅÛ ¸í·ÉÀ» »ç¿ëÇÏ¿© º» ÇÁ·Î±×·¥ÀÇ µð·ºÅ丮¿¡¼­ º¸°Å³ª º» ÇÁ·Î±×·¥°ú ÇÔ²² Á¦°øµÇ´Â ¼ÒÃ¥ÀÚ¿¡¼­ º¼ ¼ö ÀÖ½À´Ï´Ù. + +"ÇÁ·Î±×·¥" - ÇÁ·Î±×·¥ ¿øº» ¹× ¿øº»ÀÇ Àüü ¶Ç´Â ºÎºÐ »çº»À» Æ÷ÇÔÇÑ 1) ±â°è ÆÇµ¶ °¡´É Áöħ ¹× µ¥ÀÌÅÍ, 2) ±¸¼º¿ä¼Ò, ÆÄÀÏ ¹× ¸ðµâ, 3) À½¼º/¿µ»ó ³»¿ë¹°(¿¹: À̹ÌÁö, ÅØ½ºÆ®, ³ìÀ½ ÀÚ·á ¶Ç´Â ¿µ»ó) ¹× 4) °ü·Ã ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ÀÚ·á(¿¹: Ű ¹× ¹®¼­)ÀÔ´Ï´Ù. + +2. °è¾à ±¸Á¶ + +º» °è¾àÀº º» ÇÁ·Î±×·¥ÀÇ »ç¿ë¿¡ °üÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBM °£ÀÇ ¿ÏÀüÇÑ °è¾àÀ¸·Î Á¦ 1 ºÎ - ÀÏ¹Ý Á¶Ç×, Á¦ 2 ºÎ - ±¹°¡º° °íÀ¯ Á¶Ç×(ÇØ´ç Á¶Ç×ÀÌ ÀÖ´Â °æ¿ì) ¹× ¶óÀ̼¾½º Á¤º¸·Î ±¸¼ºµË´Ï´Ù. º» °è¾àÀº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ º» ÇÁ·Î±×·¥ »ç¿ë°ú °ü·ÃµÈ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBM °£ÀÇ ¸ðµç ÀÌÀü ±¸µÎ ¶Ç´Â ¼­¸é ÀÇ»ç ±³È¯À» ´ëüÇÕ´Ï´Ù. Á¦ 2 ºÎÀÇ Á¶Ç×Àº Á¦ 1 ºÎÀÇ Á¶Ç×À» ´ëüÇϰųª ¼öÁ¤ÇÕ´Ï´Ù. Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â ¶óÀ̼¾½º Á¤º¸°¡ µÎ ºÎºÐÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. + +3. ¶óÀ̼¾½º ºÎ¿© + +º» ÇÁ·Î±×·¥ÀÇ ¼ÒÀ¯±ÇÀº IBM ¶Ç´Â IBM °ø±ÞÀÚ¿¡°Ô ÀÖ°í ÀúÀÛ±ÇÀÇ º¸È£¸¦ ¹ÞÀ¸¸ç ÆÇ¸ÅµÇÁö ¾Ê½À´Ï´Ù. + +IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô 1) ½Ã¹ü ¿î¿ëÀ¸·Î ³»ºÎ Æò°¡, Å×½ºÆ® ¶Ç´Â µ¥¸ð¿ëÀ¸·Î¸¸ ¶óÀ̼¾½º Á¤º¸¿¡ ¸í½ÃµÈ »ç¿ë ¿ëµµ±îÁö Æò°¡ ±â°£ µ¿¾È º» ÇÁ·Î±×·¥À» ´Ù¿î·Îµå, ¼³Ä¡ ¹× »ç¿ëÇϰí 2) ÀÌ·¯ÇÑ »ç¿ë ¿ëµµ¸¦ Áö¿øÇϱâ À§ÇØ ÀûÀýÇÑ ¼öÀÇ º» ÇÁ·Î±×·¥ »çº»À» ÀÛ¼ºÇÏ°í ¼³Ä¡Çϸç 3) ¹é¾÷ »çº»À» ÀÛ¼ºÇÒ ¼ö ÀÖ´Â Á¦ÇÑÀûÀÌ°í ºñµ¶Á¡ÀûÀÎ ¾çµµ ºÒ°¡´ÉÇÑ ¶óÀ̼¾½º¸¦ ºÎ¿©ÇÕ´Ï´Ù. ´Ü, + +a. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» Àû¹ýÇÏ°Ô ÃëµæÇÏ°í º» °è¾àÀÇ Á¶Ç×À» ÁؼöÇØ¾ß ÇÕ´Ï´Ù. + +b. ¹é¾÷µÈ ¿øº» ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â °æ¿ì¿¡´Â ¹é¾÷ »çº»ÀÌ ½ÇÇàµÇÁö ¾Ê¾Æ¾ß ÇÕ´Ï´Ù. + +c. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº» ¶Ç´Â ºÎºÐ »çº»¿¡ ¸ðµç ÀúÀÛ±Ç Ç¥½Ã ¹× ±âŸ ¼ÒÀ¯±Ç Ç¥½Ã¸¦ ÇØ¾ß ÇÕ´Ï´Ù. + +d. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº» ±â·ÏÀ» À¯ÁöÇϸç, ·ÎÄà ¶Ç´Â ¿ø°ÝÀ¸·Î ¾×¼¼½ºÇÏ¿© º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â ¸ðµç »ç¿ëÀÚ°¡ 1) ¶óÀ̼¾½º »ç¿ëÀÚ¸¦ ´ë½ÅÇØ¼­¸¸ º» ÇÁ·Î±×·¥À» »ç¿ëÇϰí 2) º» °è¾àÀÇ Á¶Ç×À» ÁؼöÇϵµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. + +e. ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô´Â ´ÙÀ½°ú °°Àº ÇàÀ§°¡ ±ÝÁöµË´Ï´Ù. 1) º» ÇÁ·Î±×·¥À» ÇÁ·Î´ö¼Ç ¿ëµµ·Î »ç¿ëÇϰųª º» °è¾à¿¡¼­ ¸í½ÃÀûÀ¸·Î Çã¿ëµÇ´Â °æ¿ì¸¦ Á¦¿ÜÇÏ°í º» ÇÁ·Î±×·¥À» »ç¿ë, º¹»ç, ¼öÁ¤ ¶Ç´Â ¹èÆ÷ÇÏ´Â ÇàÀ§, 2) °è¾à»óÀÇ ¸éÁ¦ °¡´É¼º ¾øÀÌ °ü·Ã ¹ý·É¿¡ ÀÇÇØ ¸í½ÃÀûÀ¸·Î Çã¿ëµÇ´Â °æ¿ì¸¦ Á¦¿ÜÇÏ°í º» ÇÁ·Î±×·¥À» ¸®¹ö½º ¾î¼Àºí, ¸®¹ö½º ÄÄÆÄÀÏ ¶Ç´Â ´Þ¸® º¯È¯Çϰųª ¸®¹ö½º ¿£Áö´Ï¾îÇÏ´Â ÇàÀ§, 3) º» ÇÁ·Î±×·¥ÀÇ ±¸¼º¿ä¼Ò, ÆÄÀÏ, ¸ðµâ, À½¼º/¿µ»ó ³»¿ë¹° ¶Ç´Â ¶óÀ̼¾½º°¡ ÀÖ´Â °ü·Ã ÀڷḦ ÇØ´ç ÇÁ·Î±×·¥°ú º°µµ·Î »ç¿ëÇÏ´Â ÇàÀ§, 4) º» ÇÁ·Î±×·¥À» Àç¶óÀ̼¾½º ºÎ¿©, ´ë¿© ¶Ç´Â ¸®½ºÇÏ´Â ÇàÀ§ ¶Ç´Â 5) º» ÇÁ·Î±×·¥À» »ó¿ë ¾ÖÇø®ÄÉÀÌ¼Ç È£½ºÆÃ¿¡ »ç¿ëÇÏ´Â ÇàÀ§, ±×¸®°í + +f. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» º¸Á¶ ÇÁ·Î±×·¥À¸·Î ÃëµæÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÁÖ ÇÁ·Î±×·¥À» Áö¿øÇϰí ÁÖ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½ºÀÇ Á¦ÇÑ»çÇ×À» ÁؼöÇϱâ À§ÇÑ ¿ëµµ·Î¸¸ º» ÇÁ·Î±×·¥À» »ç¿ëÇϰí, ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ÁÖ ÇÁ·Î±×·¥À¸·Î ÃëµæÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» Áö¿øÇÏ°í º» °è¾àÀÇ Á¦ÇÑ»çÇ×À» ÁؼöÇϱâ À§ÇÑ ¿ëµµ·Î¸¸ ¸ðµç º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÀÌ "f" Ç×ÀÇ ¸ñÀû»ó "º¸Á¶ ÇÁ·Î±×·¥"Àº ´Ù¸¥ IBM ÇÁ·Î±×·¥(ÀÌÇÏ "ÁÖ ÇÁ·Î±×·¥")ÀÇ ÀϺÎÀ̸ç ÁÖ ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º Á¤º¸¿¡¼­ º¸Á¶ ÇÁ·Î±×·¥À¸·Î Ç¥½ÃµË´Ï´Ù. (ÀÌ·¯ÇÑ Á¦ÇÑ»çÇ× ¾øÀÌ Áö¿ø ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º¸¦ º°µµ·Î ÃëµæÇÏ·Á¸é ¶óÀ̼¾½º »ç¿ëÀÚ´Â Áö¿ø ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇØ¾ß ÇÕ´Ï´Ù.) + +º» ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÀÛ¼ºÇÏ´Â º» ÇÁ·Î±×·¥ÀÇ °¢ »çº»¿¡ Àû¿ëµË´Ï´Ù. + +3.1 ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¹× ÆÐÄ¡ + +¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¶Ç´Â ÆÐÄ¡°¡ Á¦°øµÇ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¤º¸¿¡ ¸í½ÃµÈ ÇØ´ç ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¶Ç´Â ÆÐÄ¡¿¡ Àû¿ë °¡´ÉÇÑ Ãß°¡ Á¶Ç× ¶Ç´Â »óÀÌÇÑ Á¶Ç×À» ½ÂÀÎÇÕ´Ï´Ù. Ãß°¡ Á¶Ç× ¶Ç´Â »óÀÌÇÑ Á¶Ç×ÀÌ Á¦°øµÇÁö ¾Ê´Â °æ¿ì, ÇØ´ç ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¶Ç´Â ÆÐÄ¡¿¡´Â º» °è¾à¸¸ Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥ÀÌ ¾÷µ¥ÀÌÆ®·Î ´ëüµÇ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ëüµÈ ÇÁ·Î±×·¥ÀÇ »ç¿ëÀ» Áï½Ã Áß´ÜÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +3.2 ±â°£°ú ÇØÁö + +Æò°¡ ±â°£Àº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ´Â ½ÃÁ¡ºÎÅÍ 1) º» ¶óÀ̼¾½º Á¤º¸³ª °Å·¡ ¼­·ù¿¡¼­ IBMÀÌ ¸í½ÃÇÑ ³¯Â¥³ª ±â°£ÀÇ Á¾·á ½ÃÁ¡°ú 2) ÇÁ·Î±×·¥ÀÌ ÀÚµ¿À¸·Î »ç¿ëÇÒ ¼ö ¾ø°Ô µÇ´Â ³¯Â¥. ¶óÀ̼¾½º »ç¿ëÀÚ´Â Æò°¡ ±â°£ Á¾·á ÈÄ 10ÀÏ À̳»¿¡ º» ÇÁ·Î±×·¥ ¹× º» ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» ÆÄ±âÇØ¾ß ÇÕ´Ï´Ù. IBMÀÌ ¶óÀ̼¾½º Á¤º¸¿¡ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» º¸À¯ÇÒ ¼ö ÀÖ´Ù°í ¸í½ÃÇÏ°í ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» º¸À¯Çϵµ·Ï ¼±ÅÃÇÏ´Â °æ¿ì, º» ÇÁ·Î±×·¥¿¡´Â IBMÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Á¦°øÇÏ´Â ´Ù¸¥ ¶óÀ̼¾½º °è¾àÀÌ Àû¿ëµË´Ï´Ù. Ãß°¡·Î, ¿ä±ÝÀÌ ºÎ°úµÉ ¼ö ÀÖ½À´Ï´Ù. + +IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç×À» ÁؼöÇÏÁö ¾Ê´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¶óÀ̼¾½º¸¦ ÇØÁöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾î¶² ÀÌÀ¯·Îµç ÀÏ¹æ ´ç»çÀÚ°¡ ¶óÀ̼¾½º¸¦ ÇØÁöÇÑ °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ »ç¿ëÀ» Áï½Ã Áß´ÜÇÏ°í ¶óÀ̼¾½º »ç¿ëÀÚÀÇ »çº»À» ¸ðµÎ ÆÄ±âÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. º» °è¾àÀÇ ÇØÁö ÀÌÈÄ¿¡µµ ÀϺΠÁ¶Ç×Àº ±× Ư¼º»ó ÀÌÇàÀÌ µÉ ¶§±îÁö À¯È¿ÇÏ¸ç ¾ç ´ç»çÀÚÀÇ ½Â°èÀÚ ¹× ¾ç¼öÀο¡°Ôµµ Àû¿ëµË´Ï´Ù. + +º» ÇÁ·Î±×·¥¿¡´Â Æò°¡ ±â°£ÀÌ ³¡³ª¸é º» ÇÁ·Î±×·¥ÀÇ »ç¿ëÀ» ¸·´Â ±â´É ¾ïÁ¦ ÀåÄ¡°¡ µé¾î ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ±â´É ¾ïÁ¦ ÀåÄ¡ ¶Ç´Â ÇÁ·Î±×·¥À» ¹«´Ü º¯°æÇÏÁö ¾Ê´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ »ç¿ëÀÌ ÁßÁöµÇ¾úÀ» ¶§ ÃÊ·¡µÉ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ¼Õ½Ç¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. + +4. ¿ä±Ý + +Æò°¡ ±â°£¿¡´Â ÇÁ·Î±×·¥ »ç¿ë¿¡ ´ëÇÑ ¿ä±ÝÀÌ ºÎ°úµÇÁö ¾Ê½À´Ï´Ù. + +5. º¸Áõ Á¦ÇÑ + +°­Çà ¹ý±Ô¿¡ µû¶ó Á¦°øÇÏ´Â º¸ÁõÀÇ °æ¿ì¸¦ Á¦¿ÜÇϰí, IBMÀº »óǰ¼º, ǰÁú ¸¸Á·, ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º, ¼ÒÀ¯±Ç¿¡ ´ëÇÑ ¹¬½ÃÀû º¸ÁõÀ̳ª Á¶°Ç ¹× ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ¿¡ ´ëÇÑ º¸ÁõÀ̳ª Á¶°ÇÀ» Æ÷ÇÔÇÏ¿©(´Ü, ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½) º» ÇÁ·Î±×·¥¿¡ °üÇÑ ÀÏüÀÇ ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ º¸ÁõÀ̳ª Á¶°ÇÀ» Á¦°øÇÏÁö ¾Ê½À´Ï´Ù. + +ÀϺΠ±¹°¡³ª °üÇұǿ¡¼­´Â ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ º¸ÁõÀÇ Á¦¿Ü»çÇ×ÀÌ Çã¿ëµÇÁö ¾ÊÀ¸¹Ç·Î À§ÀÇ Á¦¿Ü»çÇ×ÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Àû¿ëµÇÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, ÇØ´ç º¸ÁõÀº ¹ý·ü¿¡¼­ ¿ä±¸ÇÏ´Â ÃÖ¼Ò ±â°£ µ¿¾È¿¡¸¸ Àû¿ëµË´Ï´Ù. º¸Áõ ±â°£ ÀÌÈÄ¿¡´Â º¸ÁõÀÌ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀϺΠ±¹°¡³ª °üÇұǿ¡¼­´Â ¹¬½ÃÀû º¸ÁõÀÇ À¯È¿ ±â°£¿¡ ´ëÇÑ Á¦ÇÑ»çÇ×ÀÌ Çã¿ëµÇÁö ¾ÊÀ¸¹Ç·Î À§ÀÇ Á¦ÇÑ»çÇ×ÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Àû¿ëµÇÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ±¹°¡³ª °üÇұǿ¡ µû¶ó ¼­·Î ´Ù¸¥ ±âŸ ±Ç¸®¸¦ °¡Áú ¼öµµ ÀÖ½À´Ï´Ù. + +º» 5Ç×ÀÇ ¸éÃ¥»çÇ× ¹× Á¦¿Ü»çÇ×Àº IBMÀÇ ÇÁ·Î±×·¥ °³¹ßÀÚ ¹× °ø±ÞÀÚ¿¡°Ôµµ µ¿ÀÏÇÏ°Ô Àû¿ëµË´Ï´Ù. + +ºñIBM ÇÁ·Î±×·¥ÀÇ Á¦Á¶ÀÚ, °ø±ÞÀÚ ¶Ç´Â ¹ßÇàÀÚ´Â ÀÚü º¸ÁõÀ» Á¦°øÇÒ ¼öµµ ÀÖ½À´Ï´Ù. + +º°µµ·Î ¸í½ÃÇÏÁö ¾Ê´Â ÇÑ, IBMÀº ÀÏüÀÇ Áö¿øÀ» Á¦°øÇÏÁö ¾Ê½À´Ï´Ù. IBMÀÌ Áö¿øÀ» Á¦°øÇÏ´Â °æ¿ì¿¡´Â º» 5Ç×ÀÇ ¸éÃ¥»çÇ× ¹× Á¦¿Ü»çÇ×ÀÌ Àû¿ëµË´Ï´Ù. + +6. ¶óÀ̼¾½º »ç¿ëÀÚ µ¥ÀÌÅÍ ¹× µ¥ÀÌÅͺ£À̽º + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¹®Á¦Á¡ÀÇ ¿øÀÎÀ» ÆÄ¾ÇÇϵµ·Ï µ½±â À§ÇØ IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô 1) IBMÀÌ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ½Ã½ºÅÛÀ» ¿ø°ÝÀ¸·Î ¾×¼¼½ºÇϵµ·Ï Çã¿ëÇϰųª 2) ¶óÀ̼¾½º »ç¿ëÀÚ Á¤º¸ ¶Ç´Â ½Ã½ºÅÛ µ¥ÀÌÅ͸¦ IBM¿¡°Ô º¸³»µµ·Ï ¿äûÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª º» °è¾àÀÇ IBM Àǹ«¸¦ ¹þ¾î³­ ÇØ´ç À¯ÇüÀÇ Áö¿øÀ» ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Á¦°øÇÏ´Â °Í¿¡ IBMÀÌ µ¿ÀÇÇÑ´Ù´Â ¼­¸é °è¾àÀ» IBM°ú ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º°µµ·Î ü°áÇÑ °æ¿ì°¡ ¾Æ´Ï¸é IBMÀº ÇØ´ç Áö¿øÀ» Á¦°øÇÒ Àǹ«°¡ ¾ø½À´Ï´Ù. ¾î´À °æ¿ì¶óµµ IBMÀº Á¦Ç° ¹× ¼­ºñ½º¸¦ °³¼±ÇÏ°í °ü·Ã Áö¿ø(Support) ¿ÀÆÛ¸µ(Offering) Á¦°øÀ» Áö¿øÇϱâ À§ÇØ ¿À·ù ¹× ¹®Á¦Á¡¿¡ ´ëÇÑ Á¤º¸¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¸ñÀûÀ¸·Î IBMÀº IBM °ü°èȸ»ç ¹× Çϵµ±ÞÀÚ(¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÀÖ´Â ±¹°¡°¡ ¾Æ´Ñ ±¹°¡ Áß Çϳª ÀÌ»ó¿¡ ÀÖ´Â °ü°èȸ»ç ¹× Çϵµ±ÞÀÚ Æ÷ÇÔ)¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM¿¡°Ô À̸¦ ¼öÇàÇÒ ±ÇÇÑÀ» ºÎ¿©ÇÕ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) ¶óÀ̼¾½º »ç¿ëÀÚ°¡ IBMÀÌ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â µ¥ÀÌÅÍ ¹× µ¥ÀÌÅͺ£À̽ºÀÇ ÄÁÅÙÆ®, 2) µ¥ÀÌÅÍ(°³ÀÎÀûÀ¸·Î ½Äº° °¡´ÉÇÑ µ¥ÀÌÅÍ Æ÷ÇÔ)ÀÇ ¾×¼¼½º, º¸¾È, ¾Ïȣȭ, »ç¿ë ¹× Àü¼Û¿¡ °üÇÑ ÀýÂ÷ ¹× °ü¸®ÀÇ ¼±Åà ¹× ±¸Çö°ú 3) µ¥ÀÌÅͺ£À̽º¿Í ÀúÀåµÈ µ¥ÀÌÅÍÀÇ ¹é¾÷ ¹× º¹±¸¿¡ ´ëÇØ Ã¥ÀÓÀ» Áý´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â µ¥ÀÌÅͳª ±âŸ Çü½ÄÀ¸·Î °³ÀÎÀûÀ¸·Î ½Äº° °¡´ÉÇÑ Á¤º¸¸¦ º¸³»°Å³ª ÇØ´ç Á¤º¸¿¡ ´ëÇÑ ¾×¼¼½º¸¦ IBM¿¡°Ô Á¦°øÇÏÁö ¾ÊÀ¸¸ç ½Ç¼ö·Î IBM¿¡°Ô Á¦°øµÈ ÇØ´ç Á¤º¸ ¶Ç´Â IBM¿¡ ÀÇÇÑ ÇØ´ç Á¤º¸ÀÇ À¯½ÇÀ̳ª °ø°³¿Í °ü·ÃÇÏ¿© IBM¿¡°Ô ¹ß»ýÇÒ ¼ö ÀÖ´Â ÀûÀýÇÑ ºñ¿ë ¹× ±âŸ ±Ý¾×¿¡ ´ëÇØ Ã¥ÀÓÀ» Áý´Ï´Ù. + +7. Ã¥ÀÓ Á¦ÇÑ + +º» 7Ç×(Ã¥ÀÓ Á¦ÇÑ)ÀÇ Á¦ÇÑ»çÇ× ¹× Á¦¿Ü»çÇ×Àº °è¾à»óÀÇ ¸éÁ¦ °¡´É¼º ¾øÀÌ ÇØ´ç ¹ý·ü¿¡¼­ ±ÝÁöÇÏÁö ¾Ê´Â ¹üÀ§¿¡¼­ ÃÖ´ëÇÑ Àû¿ëµË´Ï´Ù. + +7.1 IBMÀÌ Ã¥ÀÓÀ» Áö´Â Ç׸ñ + +IBMÀÇ Ã¤¹« ºÒÀÌÇàÀ̳ª ºÒ¹ý ÇàÀ§·Î ÀÎÇÏ¿© ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¼ÕÇØ°¡ ¹ß»ýÇÑ °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBMÀ¸·ÎºÎÅÍ ¼ÕÇØ¸¦ ¹è»ó¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ IBMÀ¸·ÎºÎÅÍ ¼ÕÇØ ¹è»óÀ» û±¸ÇÒ ¼ö ÀÖ´Â ¿øÀÎ(Áß´ëÇÑ °è¾à À§¹Ý, °ú½Ç, ºÎ½Ç Ç¥½Ã, ±âŸ °è¾à ¶Ç´Â ºÒ¹ý ÇàÀ§ ¹è»ó û±¸ Æ÷ÇÔ)¿¡ °ü°è¾øÀÌ °¢ ÇÁ·Î±×·¥°ú °ü·ÃÇÏ¿© ¹ß»ýÇϰųª º» °è¾à¿¡ ÀǰÅÇÏ¿© ¹ß»ýÇÏ´Â ¸ðµç ¹è»ó û±¸¿¡ ´ëÇÑ IBMÀÇ Ã¥ÀÓÀº ÀüüÀûÀ¸·Î ´ÙÀ½À» ÃʰúÇÏÁö ¾Ê½À´Ï´Ù. 1) ½Åü »óÇØ(»ç¸Á Æ÷ÇÔ)¿Í ºÎµ¿»ê ¹× À¯Ã¼ Àç»ê»óÀÇ ¼ÕÇØ ¹× 2) ±âŸ Á÷Á¢ÀûÀÎ ½Ç¼ÕÇØ(ÃÖ´ë ¹ÌÈ­ 10,000´Þ·¯ ¶Ç´Â ÇöÁö ÅëÈ­·Î ȯ»êÇÑ µ¿µî ±Ý¾×). + +ÀÌ·¯ÇÑ Á¦ÇÑÀº IBM ÇÁ·Î±×·¥ °³¹ßÀÚ ¹× °ø±ÞÀÚ¿¡°Ôµµ Àû¿ëµË´Ï´Ù. IBM, IBM ÇÁ·Î±×·¥ °³¹ßÀÚ ¹× °ø±ÞÀÚÀÇ Ã¥ÀÓÀº °¢ÀÚÀÇ Ã¥ÀÓÀ» ÇÕÇÏ¿© À§ Ã¥ÀÓ Çѵµ¸¦ ÃʰúÇÏÁö ¾Ê½À´Ï´Ù. + +7.2 IBMÀÌ Ã¥ÀÓÀ» ÁöÁö ¾Ê´Â Ç׸ñ + +IBM, IBM ÇÁ·Î±×·¥ °³¹ßÀÚ ¶Ç´Â °ø±ÞÀÚ´Â, ¼ÕÇØ ¹ß»ýÀÇ °¡´É¼ºÀ» ÅëÁö ¹ÞÀº °æ¿ì¸¦ Æ÷ÇÔÇÑ ¾î¶°ÇÑ °æ¿ì¿¡µµ, ´ÙÀ½¿¡ ´ëÇÑ Ã¥ÀÓÀÌ ¾ø½À´Ï´Ù: + +a. µ¥ÀÌÅÍÀÇ ¼Õ½Ç ¶Ç´Â ¼Õ»ó + +b. Ưº° ¼ÕÇØ, ºÎ¼ö ¼ÕÇØ, ¡¹úÀû ¼ÕÇØ, °£Á¢ ¼ÕÇØ ¶Ç´Â °æÁ¦ÀûÀÎ °á°úÀû ¼ÕÇØ ¶Ç´Â + +c. ±â´ëÇß´ø ÀÌÀÍ, »ç¾÷, ¼öÀÍ, ¿µ¾÷±Ç ¶Ç´Â ºñ¿ë Àý°¨ÀÌ ½ÇÇöµÇÁö ¸øÇÔÀ¸·Î ÀÎÇØ ¹ß»ýÇÏ´Â ¼ÕÇØ. + +8. Á¶Ç× Áؼö È®ÀÎ + +º» 8Ç×(Á¶Ç× Áؼö È®ÀÎ)ÀÇ ¸ñÀû»ó, "Æò°¡ ÇÁ·Î±×·¥ Á¶Ç×"Àº 1) º» °è¾à°ú IBMÀÌ Á¦°øÇÏ´Â Àû¿ë °¡´ÉÇÑ ¼öÁ¤º» ¹× °Å·¡ ¼­·ù¿Í 2) IBM Software Policy À¥ »çÀÌÆ®(www.ibm.com/softwarepolicies)¿¡ ÀÖ´Â IBM ¼ÒÇÁÆ®¿þ¾î policy(¹é¾÷, SUB-CAPACITY ±âÁØ °¡°Ý Ã¥Á¤ ¹× ¸¶À̱׷¹ÀÌ¼Ç °ü·Ã policy¸¦ Æ÷ÇÔÇϳª ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½)¸¦ ÀǹÌÇÕ´Ï´Ù. + +º» 8Ç׿¡ ¸í½ÃµÈ ±Ç¸®¿Í Àǹ«´Â º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ºÎ¿©µÈ ±â°£ ¹× ÇâÈÄ 2³â µ¿¾È À¯È¿ÇÕ´Ï´Ù. + +8.1 È®ÀÎ ÇÁ·Î¼¼½º + +¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Æò°¡ ÇÁ·Î±×·¥ Á¶Ç×(IBMÀÇ Àû¿ë °¡´ÉÇÑ ¸ðµç ¶óÀ̼¾½º ºÎ¿© ¹× °¡°Ý Ã¥Á¤ ÀÚ°Ý Á¶Ç×À» Æ÷ÇÔÇϳª ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½)À» ÁؼöÇÏ¿© ¸ðµç ÇÁ·Î±×·¥À» »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ °¨»ç °¡´ÉÇÑ È®ÀÎÀ» Á¦°øÇϱ⿡ ÃæºÐÇÒ Á¤µµÀÇ Á¤È®ÇÑ ¼­¸é ±â·Ï, ½Ã½ºÅÛ µµ±¸ Ãâ·Â ¹× ±âŸ ½Ã½ºÅÛ Á¤º¸¸¦ ÀÛ¼ºÇÏ°í º¸À¯Çϸç IBM ¹× IBMÀÇ °¨»ç¿ø¿¡°Ô Á¦°øÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) »ç¿ë ¿ëµµ¸¦ ÃʰúÇÏÁö ¾Êµµ·Ï È®ÀÎÇϰí 2) Æò°¡ ÇÁ·Î±×·¥ Á¶Ç×À» ÁؼöÇÒ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù. + +ÀûÀýÇÑ ÅëÁö·Î IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¾î¶² ¿ëµµ·Îµç Æò°¡ ÇÁ·Î±×·¥ Á¶Ç×ÀÌ Àû¿ëµÇ´Â ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â ¸ðµç »çÀÌÆ® ¹× ȯ°æ¿¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Æò°¡ ÇÁ·Î±×·¥ Á¶Ç×À» ÁؼöÇÏ´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ È®ÀÎÀº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¿µ¾÷ ¹æÇظ¦ ÃÖ¼ÒÈ­ÇÏ´Â ¹æ¹ýÀ¸·Î ¼öÇàµÇ¸ç ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ±Ù¹«Áö »çÀÌÆ®¿¡¼­ Á¤»ó ±Ù¹« ½Ã°£ Áß¿¡ ¼öÇàµÉ ¼ö ÀÖ½À´Ï´Ù. IBMÀº ¿ÜºÎ °¨»ç¿øÀ» ÅëÇØ ÀÌ·¯ÇÑ È®ÀÎÀ» Áö¿øÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, IBMÀº ÇØ´ç °¨»ç¿ø°ú ü°áÇÑ ¼­¸é ±â¹ÐÁ¤º¸ ¼ö·ÉÇÕÀǼ­°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. + +8.2 ÇØ°á ¹æ¹ý + +IBMÀº ÀÌ·¯ÇÑ È®Àο¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ »ç¿ë ¿ëµµ¸¦ ÃʰúÇÏ¿© ÇÁ·Î±×·¥À» »ç¿ëÇ߰ųª Æò°¡ ÇÁ·Î±×·¥ Á¶Ç×À» ÁؼöÇÏÁö ¾ÊÀ½À» Ç¥½ÃÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¼­¸éÀ¸·Î ÅëÁöÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBMÀÌ 1) ÇØ´ç Ãʰú »ç¿ë, 2) ÇØ´ç Ãʰú »ç¿ë°ú 2³â Áß ´õ ªÀº ±â°£ µ¿¾ÈÀÇ ÇØ´ç Ãʰú »ç¿ë¿¡ ´ëÇÑ Áö¿ø ¹× 3) ÇØ´ç È®ÀÎÀÇ °á°ú·Î¼­ ÆÇº°µÈ Ãß°¡ ¿ä±Ý ¹× ±âŸ Ã¥ÀÓ¿¡ ´ëÇØ û±¸¼­¿¡ ¸í½ÃÇÑ ¿ä±ÝÀ» Áï½Ã IBM¿¡°Ô Á÷Á¢ ÁöºÒÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +9. Á¦3ÀÚ ÁÖÀÇ»çÇ× + +º» ÇÁ·Î±×·¥¿¡´Â Á¦3ÀÚ°¡ ¾Æ´Ï¶ó IBMÀÌ º» °è¾à¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¶óÀ̼¾½º¸¦ ºÎ¿©ÇÏ´Â Á¦3ÀÚ Äڵ尡 Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. Á¦3ÀÚ Äڵ忡 ´ëÇÑ ÁÖÀÇ»çÇ×(ÀÌÇÏ "Á¦3ÀÚ ÁÖÀÇ»çÇ×")Àº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Á¤º¸¿ëÀ¸·Î¸¸ Æ÷ÇԵ˴ϴÙ(ÇØ´çµÇ´Â °æ¿ì). ÀÌ·¯ÇÑ ÁÖÀÇ»çÇ×Àº ÇÁ·Î±×·¥ÀÇ NOTICES ÆÄÀÏ¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÁ¤ Á¦3ÀÚ Äڵ忡 ´ëÇÑ ¼Ò½º Äڵ带 È®º¸ÇÏ´Â ¹æ¹ýÀº Á¦3ÀÚ ÁÖÀÇ»çÇ׿¡ ¼³¸íµÇ¾î ÀÖ½À´Ï´Ù. Á¦3ÀÚ ÁÖÀÇ»çÇ׿¡¼­ IBMÀÌ Á¦3ÀÚ Äڵ带 "¼öÁ¤ °¡´ÉÇÑ Á¦3ÀÚ ÄÚµå"·Î Ç¥½ÃÇÏ´Â °æ¿ì, IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô 1) ¼öÁ¤ °¡´ÉÇÑ Á¦3ÀÚ Äڵ带 ¼öÁ¤Çϰí 2) ¼öÁ¤ °¡´ÉÇÑ Á¦3ÀÚ ÄÚµå¿Í Á÷Á¢ ÀÎÅÍÆäÀ̽º¸¦ ¼öÇàÇÏ´Â ÇÁ·Î±×·¥ ¸ðµâÀ» ¸®¹ö½º ¿£Áö´Ï¾îÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» ºÎ¿©ÇÕ´Ï´Ù. ´Ü, ÀÌ·¯ÇÑ ±ÇÇÑÀº ÇØ´ç Á¦3ÀÚ Äڵ忡 ´ëÇÑ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¼öÁ¤»çÇ×À» µð¹ö±ëÇϱâ À§ÇÑ ¿ëµµ·Î¸¸ ºÎ¿©µË´Ï´Ù. IBMÀÇ ¼­ºñ½º ¹× Áö¿ø(ÇØ´çÇÏ´Â °æ¿ì)Àº ¼öÁ¤µÇÁö ¾ÊÀº ÇÁ·Î±×·¥¿¡¸¸ Á¦°øµË´Ï´Ù. + +10. ÀϹݻçÇ× + +a. º» °è¾àÀÇ ¾î¶°ÇÑ Á¶Ç×µµ °è¾à¿¡ ÀÇÇØ Æ÷±â ¶Ç´Â Á¦ÇÑµÉ ¼ö ¾ø´Â °­Çà ¹ý±Ô »óÀÇ ¼ÒºñÀÚ ±Ç¸®¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù. + +b. º» °è¾àÀÇ ÀϺΠÁ¶Ç×ÀÌ ¹«È¿À̰ųª ½ÃÇàÀÌ ºÒ°¡´ÉÇÑ °æ¿ì¿¡µµ º» °è¾àÀÇ ³ª¸ÓÁö Á¶Ç×Àº ¿ÏÀüÈ÷ À¯È¿ÇÕ´Ï´Ù. + +c. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» ¼öÃâÇÒ ¼ö ¾ø½À´Ï´Ù. + +d. ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM Á¦Ç° ¹× ¼­ºñ½º »ç¿ë ½Ã ¶Ç´Â ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÇ ºñÁî´Ï½º °ü°è ÃËÁøÀ» À§ÇØ IBM ¹× ±× °è¿­»ç(¹× À̵éÀÇ ½Â°èÀÚ ¹× ¾ç¼öÀÎ, Çϵµ±ÞÀÚ ¹× IBM ºñÁî´Ï½º ÆÄÆ®³Ê)°¡ ¿µ¾÷À» ÇÏ´Â °÷¿¡¼­´Â ¾îµð¼­³ª ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ´ã´çÀÚ Á¤º¸¸¦ ÀúÀåÇÏ°í »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇÕ´Ï´Ù. + +e. °¢ ´ç»çÀÚ´Â »ó´ë¹æÀÌ º» °è¾àÀÇ Àǹ«¸¦ ´ÙÇÏÁö ¾Ê¾ÒÀ½À» ÀÌÀ¯·Î ¹è»óÀ» û±¸Çϱâ Àü¿¡ »ó´ë¹æ¿¡°Ô °è¾àÀ» ÁؼöÇÒ ¼ö ÀÖ´Â ÀûÀýÇÑ ±âȸ¸¦ Á¦°øÇÕ´Ï´Ù. ¾ç ´ç»çÀÚ´Â º» °è¾à°ú °ü·ÃµÈ ´ç»çÀÚ °£ÀÇ ¸ðµç ºÐÀï, ÀÇ°ß Â÷ÀÌ ¶Ç´Â ¹è»ó û±¸¸¦ ¼º½ÇÇÏ°Ô ÇØ°áÇϱâ À§ÇØ ³ë·ÂÇÕ´Ï´Ù. + +f. Á¦ÇÑ»çÇ× ¶Ç´Â °è¾à»óÀÇ ¸éÁ¦ °¡´É¼º ¾øÀÌ ÇØ´ç ¹ý·ü¿¡ ´Þ¸® ¸í½ÃµÇÁö ¾Ê´Â ÇÑ 1) ¼Ò¼Û Á¦±âÀÇ ¿øÀÎ ¹ß»ý ÈÄ 2³âÀÌ Áö³ª¸é ¾î´À ´ç»çÀÚµµ º» °è¾à¿¡¼­ ¹ß»ýÇϰųª º» °è¾à°ú °ü·ÃÇÏ¿© ¹ß»ýÇÑ ¹è»ó û±¸¿¡ ´ëÇØ ¾î¶² ¾ç½ÄÀ¸·Îµç ¹ýÀû Á¶Ä¡¸¦ Á¦±âÇÏÁö ¾ÊÀ¸¸ç 2) ÇØ´ç Á¦ÇÑ ±â°£ÀÌ ¸¸·áµÇ¸é ÇØ´ç ¹è»ó û±¸¿Í ÀÌ·¯ÇÑ ¹è»ó û±¸¿¡ °ü·ÃµÈ °¢°¢ÀÇ ±Ç¸®´Â ¸ðµÎ ¹«È¿·Î µË´Ï´Ù. + +g. ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀº ÅëÁ¦ ºÒ°¡´ÉÇÑ »çÀ¯·Î Àǹ«»çÇ×À» ÀÌÇàÇÏÁö ¸øÇÑ °æ¿ì ÀÌ¿¡ ´ëÇØ ¸éÃ¥µË´Ï´Ù. + +h. º» °è¾à¿¡¼­´Â Á¦3ÀÚ¿¡ ´ëÇÑ ¼Ò¼Û Á¦±âÀÇ ¿øÀÎ ¶Ç´Â ±Ç¸®°¡ »ý¼ºµÇÁö ¾ÊÀ¸¸ç IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡ ´ëÇÑ Á¦3ÀÚÀÇ ¾î¶°ÇÑ ¹è»ó û±¸¿¡ ´ëÇØ¼­µµ Ã¥ÀÓÀÌ ¾ø½À´Ï´Ù. ´Ü, »ó±â 7.1Ç×(IBMÀÌ Ã¥ÀÓÀ» Áö´Â Ç׸ñ)¿¡ ¼³¸íµÈ IBM¿¡ ¹ýÀûÀ¸·Î Ã¥ÀÓÀÌ ÀÖ´Â ½Åü »óÇØ(»ç¸Á Æ÷ÇÔ)¿Í ºÎµ¿»ê ¹× À¯Ã¼ Àç»ê»óÀÇ ¼ÕÇØ¿¡ ´ëÇØ¼­´Â IBM¿¡ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù. + +i. º» °è¾à ü°á ½Ã ¾î´À ´ç»çÀÚµµ ´ÙÀ½¿¡ °üÇÑ º¸ÁõÀ» Æ÷ÇÔÇÏ¿©(´Ü, ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½) º» °è¾à¿¡ ¸í½ÃµÇÁö ¾ÊÀº º¸ÁõÀ» ½Å·ÚÇÏÁö ¾Ê½À´Ï´Ù. 1) À§ÀÇ 5Ç×(º¸Áõ Á¦ÇÑ)¿¡¼­ ¸í½ÃÀûÀ¸·Î º¸ÁõµÈ »çÇ× ÀÌ¿ÜÀÇ º» ÇÁ·Î±×·¥ ¼º´É ¶Ç´Â ±â´É, 2) Á¦3ÀÚÀÇ °æÇèÀ̳ª ±ÇÀå»çÇ× ¶Ç´Â 3) ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ´Þ¼ºÇÒ ¼ö ÀÖ´Â °á°ú ¶Ç´Â ºñ¿ë Àý°¨. + +j. IBMÀº ƯÁ¤ ÇÁ·Î±×·¥À» Áö¿øÇÏ°í ¿µ¾÷À» ÃËÁøÇÏ°í ÆÇ¸ÅÇϱâ À§ÇØ Æ¯Á¤ Á¶Á÷("IBM ºñÁî´Ï½º ÆÄÆ®³Ê"¶ó°í ÇÔ)°úÀÇ °è¾à¿¡ µ¿ÀÇÇß½À´Ï´Ù. IBM ºñÁî´Ï½º ÆÄÆ®³Ê´Â IBM°ú´Â µ¶¸³ÀûÀÌ¸ç º°°³ÀÇ Á¶Á÷ÀÔ´Ï´Ù. IBMÀº IBM ºñÁî´Ï½º ÆÄÆ®³ÊÀÇ ÇàÀ§³ª ÀÇ»ç Ç¥½Ã ¶Ç´Â IBM ºñÁî´Ï½º ÆÄÆ®³ÊÀÇ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡ ´ëÇÑ Àǹ«¿¡ ´ëÇØ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. + +k. ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBM°úÀÇ ±âŸ °è¾à(¿¹: IBM ±âº» °è¾à)ÀÇ ¶óÀ̼¾½º ¹× ÁöÀû Àç»ê±Ç ¸éÃ¥ Á¶Ç×Àº º» °è¾à¿¡ ÀǰÅÇÏ¿© ºÎ¿©µÈ ÇÁ·Î±×·¥ ¶óÀ̼¾½º¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. + +11. °è¾à Àû¿ë Áö¿ª°ú ÁذŹý + +11.1 ÁذŹý + +¾ç ´ç»çÀÚ´Â º» °è¾àÀ¸·ÎºÎÅÍ ¶Ç´Â º» °è¾à°ú °ü·ÃÇÏ¿© ¹ß»ýÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÇ ¸ðµç ±Ç¸® ¹× Àǹ«¸¦ ÅëÁ¦, ÇØ¼® ¹× °­Á¦ÇÏ´Â µ¥ ÀÖ¾î ÁذŹý °áÁ¤ÀÇ ¿øÄ¢¿¡ °ü°è¾øÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥ ¶óÀ̼¾½º¸¦ ÃëµæÇÑ ±¹°¡ÀÇ ¹ý·üÀÌ Àû¿ëµÈ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +±¹Á¦ ¹°Ç° ¸Å¸Å °è¾à¿¡ °üÇÑ À¯¿£ Çù¾à(United Nations Convention on Contracts for the International Sale of Goods)Àº Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. + +11.2 °üÇÒ±Ç + +¸ðµç ±Ç¸® ¹× Àǹ«¿¡ ´ëÇØ¼­´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥ ¶óÀ̼¾½º¸¦ ÃëµæÇÑ ±¹°¡ÀÇ ¹ý¿ø¿¡ °üÇÒ±ÇÀÌ ÀÖ½À´Ï´Ù. + +Á¦ 2 ºÎ - ±¹°¡º° °íÀ¯ Á¶Ç× + +Çѱ¹ÀÇ °æ¿ì Àû¿ëµÇ´Â ±¹°¡º° °íÀ¯ Á¶Ç×ÀÌ ¾ø½À´Ï´Ù. + +Z125-5543-05 (07/2011) + + +±¹Á¦ ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à + +Á¦ 1 ºÎ - ÀÏ¹Ý Á¶Ç× + +º» ÇÁ·Î±×·¥À» ´Ù¿î·Îµå, ¼³Ä¡, º¹»ç, ¾×¼¼½º ¶Ç´Â »ç¿ëÇϰųª "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ°Ô µË´Ï´Ù. ¸¸ÀÏ ±ÍÇϰ¡ ¶óÀ̼¾½º »ç¿ëÀÚ¸¦ ´ëÇ¥ÇÏ¿© º» °è¾àÀÇ Á¶Ç×À» ½ÂÀÎÇÏ´Â °æ¿ì, ±ÍÇÏ´Â ±ÍÇÏ¿¡°Ô ÇØ´ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ À̵é Á¶Ç×À» ÁؼöÇϵµ·Ï ÇÒ ¿ÏÀüÇÑ ±ÇÇÑÀÌ ÀÖÀ½À» º¸ÁõÇϰí Áø¼úÇÕ´Ï´Ù. º» °è¾à Á¶°Ç¿¡ µ¿ÀÇÇÏÁö ¾Ê´Â °æ¿ì, + +* º» ÇÁ·Î±×·¥À» ´Ù¿î·Îµå, ¼³Ä¡, º¹»ç, ¾×¼¼½º ¶Ç´Â »ç¿ëÇϰųª ¡°½ÂÀΡ± ´ÜÃ߸¦ Ŭ¸¯ÇÏÁö ¸¶½Ã°í, + +* »ç¿ëÇÏÁö ¾ÊÀº ¹Ìµð¾î, ¹®¼­ ¹× ÇØ´ç ¶óÀ̼¾½º Áõ¼­¸¦ ±¸ÀÔó¿¡ Áï½Ã ¹ÝȯÇϰí ÁöºÒÇÑ ±Ý¾×À» ȯºÒ¹ÞÀ¸½Ê½Ã¿À. º» ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â º» ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» ÆÄ±âÇϽʽÿÀ. + +1. ¿ë¾î Á¤ÀÇ + +"Çã°¡µÈ »ç¿ë" - ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â ÁöÁ¤µÈ ·¹º§ÀÔ´Ï´Ù. ÇØ´ç ·¹º§Àº »ç¿ëÀÚ ¼ö, MSU(Millions of Service Unit), PVU(Processor Value Unit) ¶Ç´Â IBMÀÌ ÁöÁ¤ÇÏ´Â ±âŸ »ç¿ë ·¹º§·Î ÃøÁ¤µË´Ï´Ù. + +"IBM" - International Business Machines Corporation ¶Ç´Â ±× °è¿­»ç Áß ÇϳªÀÔ´Ï´Ù. + +"¶óÀ̼¾½º Á¤º¸"("LI") - ÇÁ·Î±×·¥¿¡ ´ëÇÑ Á¤º¸ ¹× Ãß°¡ Á¶Ç×À» Á¦°øÇÏ´Â ¹®¼­ÀÔ´Ï´Ù. º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º Á¤º¸´Â www.ibm.com/software/sla¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ ¶óÀ̼¾½º Á¤º¸´Â ½Ã½ºÅÛ ¸í·ÉÀ» »ç¿ëÇÏ¿© º» ÇÁ·Î±×·¥ÀÇ µð·ºÅ丮¿¡¼­ º¸°Å³ª º» ÇÁ·Î±×·¥°ú ÇÔ²² Á¦°øµÇ´Â ¼ÒÃ¥ÀÚ¿¡¼­ º¼ ¼ö ÀÖ½À´Ï´Ù. + +"ÇÁ·Î±×·¥" - ÇÁ·Î±×·¥ ¿øº» ¹× ¿øº»ÀÇ Àüü ¶Ç´Â ºÎºÐ »çº»À» Æ÷ÇÔÇÑ 1) ±â°è ÆÇµ¶ °¡´É Áöħ ¹× µ¥ÀÌÅÍ, 2) ±¸¼º¿ä¼Ò, ÆÄÀÏ ¹× ¸ðµâ, 3) À½¼º/¿µ»ó ³»¿ë¹°(¿¹: À̹ÌÁö, ÅØ½ºÆ®, ³ìÀ½ ÀÚ·á ¶Ç´Â ¿µ»ó) ¹× 4) °ü·Ã ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ÀÚ·á(¿¹: Ű ¹× ¹®¼­)ÀÔ´Ï´Ù. + +"¶óÀ̼¾½º Áõ¼­"("PoE") - ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Çã°¡µÈ »ç¿ëÀ» Áõ¸íÇØ ÁÖ´Â ¹®¼­ÀÔ´Ï´Ù. ¶óÀ̼¾½º Áõ¼­´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º¸Áõ ¼­ºñ½º, º» ÇÁ·Î±×·¥ÀÇ Â÷ÈÄ ¾÷µ¥ÀÌÆ® ÇÁ·Î±×·¥¿¡ ´ëÇÑ °¡°Ý(¹ßÇ¥µÇ´Â °æ¿ì) ¹× Ưº° ÆÇÃË ±âȸ¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀÎÁ¤ÇÏ´Â ±Ù°Å°¡ µË´Ï´Ù. IBM¿¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¶óÀ̼¾½º Áõ¼­¸¦ Á¦°øÇÏÁö ¾Ê´Â °æ¿ì, IBMÀº ÁöºÒ ¿Ï·á ÆÇ¸Å ¿µ¼öÁõÀÇ ¿øº»À̳ª º» ÇÁ·Î±×·¥À» ÃëµæÇÑ ´ç»çÀÚ(IBM ¶Ç´Â IBM ¸®¼¿·¯)¿¡°Ô¼­ ¹ÞÀº ±âŸ ÆÇ¸Å ±â·ÏÀ» ¶óÀ̼¾½º Áõ¼­·Î ½ÂÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ÀÌµé ¹®¼­¿¡ º» ÇÁ·Î±×·¥ À̸§ ¹× ÃëµæÇÑ »ç¿ë ·¹º§ÀÌ ¸í½ÃµÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù. + +"º¸Áõ ±â°£" - ¿ø·¡ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ³¯·ÎºÎÅÍ 1³âÀÔ´Ï´Ù. + +2. °è¾à ±¸Á¶ + +º» °è¾àÀº º» ÇÁ·Î±×·¥ÀÇ »ç¿ë¿¡ °üÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBM °£ÀÇ ¿ÏÀüÇÑ °è¾àÀ¸·Î Á¦ 1 ºÎ - ÀÏ¹Ý Á¶Ç×, Á¦ 2 ºÎ - ±¹°¡º° °íÀ¯ Á¶Ç×(ÇØ´ç Á¶Ç×ÀÌ ÀÖ´Â °æ¿ì), ¶óÀ̼¾½º Á¤º¸ ¹× ¶óÀ̼¾½º Áõ¼­·Î ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù. º» °è¾àÀº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ º» ÇÁ·Î±×·¥ »ç¿ë°ú °ü·ÃµÈ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBM °£ÀÇ ¸ðµç ÀÌÀü ±¸µÎ ¶Ç´Â ¼­¸é ÀÇ»ç ±³È¯À» ´ëüÇÕ´Ï´Ù. Á¦ 2 ºÎÀÇ Á¶Ç×Àº Á¦ 1 ºÎÀÇ Á¶Ç×À» ´ëüÇϰųª ¼öÁ¤ÇÕ´Ï´Ù. Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â ¶óÀ̼¾½º Á¤º¸°¡ µÎ ºÎºÐÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. + +3. ¶óÀ̼¾½º ºÎ¿© + +º» ÇÁ·Î±×·¥ÀÇ ¼ÒÀ¯±ÇÀº IBM ¶Ç´Â IBM °ø±ÞÀÚ¿¡°Ô ÀÖ°í ÀúÀÛ±ÇÀÇ º¸È£¸¦ ¹ÞÀ¸¸ç ÆÇ¸ÅµÇÁö ¾Ê½À´Ï´Ù. + +IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô 1) ¶óÀ̼¾½º Áõ¼­¿¡ ¸í½ÃµÈ Çã°¡µÈ »ç¿ë±îÁö º» ÇÁ·Î±×·¥À» »ç¿ëÇϰí 2) ÀÌ·¯ÇÑ Çã°¡µÈ »ç¿ëÀ» Áö¿øÇϱâ À§ÇØ »çº»À» ÀÛ¼ºÇÏ°í ¼³Ä¡Çϸç 3) ¹é¾÷ »çº»À» ÀÛ¼ºÇÒ ¼ö ÀÖ´Â ºñµ¶Á¡Àû »ç¿ë±ÇÀ» ºÎ¿©ÇÕ´Ï´Ù. ´Ü, + +a. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» Àû¹ýÇÏ°Ô ÃëµæÇÏ°í º» °è¾àÀÇ Á¶Ç×À» ÁؼöÇØ¾ß ÇÕ´Ï´Ù. + +b. ¹é¾÷µÈ ¿øº» ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â °æ¿ì¿¡´Â ¹é¾÷ »çº»ÀÌ ½ÇÇàµÇÁö ¾Ê¾Æ¾ß ÇÕ´Ï´Ù. + +c. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº» ¶Ç´Â ºÎºÐ »çº»¿¡ ¸ðµç ÀúÀÛ±Ç Ç¥½Ã ¹× ±âŸ ¼ÒÀ¯±Ç Ç¥½Ã¸¦ ÇØ¾ß ÇÕ´Ï´Ù. + +d. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À»(·ÎÄà ¶Ç´Â ¿ø°ÝÀ¸·Î ¾×¼¼½ºÇÏ¿©) »ç¿ëÇÏ´Â ¸ðµç »ç¿ëÀÚ°¡ 1) ¶óÀ̼¾½º »ç¿ëÀÚ¸¦ ´ë½ÅÇØ¼­¸¸ º» ÇÁ·Î±×·¥À» »ç¿ëÇϰí 2) º» °è¾àÀÇ Á¶Ç×À» ÁؼöÇϵµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. + +e. ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô´Â ´ÙÀ½°ú °°Àº ÇàÀ§°¡ ±ÝÁöµË´Ï´Ù. 1) º» °è¾à¿¡¼­ ¸í½ÃÀûÀ¸·Î Çã¿ëµÇ´Â °æ¿ì¸¦ Á¦¿ÜÇÏ°í º» ÇÁ·Î±×·¥À» »ç¿ë, º¹»ç, ¼öÁ¤ ¶Ç´Â ¹èÆ÷ÇÏ´Â ÇàÀ§, 2) °è¾à»óÀÇ ¸éÁ¦ °¡´É¼º ¾øÀÌ °ü·Ã ¹ý·É¿¡ ÀÇÇØ ¸í½ÃÀûÀ¸·Î Çã¿ëµÇ´Â °æ¿ì¸¦ Á¦¿ÜÇÏ°í º» ÇÁ·Î±×·¥À» ¸®¹ö½º ¾î¼Àºí, ¸®¹ö½º ÄÄÆÄÀÏ ¶Ç´Â ´Þ¸® º¯È¯Çϰųª ¸®¹ö½º ¿£Áö´Ï¾îÇÏ´Â ÇàÀ§, 3) º» ÇÁ·Î±×·¥ÀÇ ±¸¼º¿ä¼Ò, ÆÄÀÏ, ¸ðµâ, À½¼º/¿µ»ó ³»¿ë¹° ¶Ç´Â ¶óÀ̼¾½º°¡ ÀÖ´Â °ü·Ã ÀڷḦ ÇØ´ç ÇÁ·Î±×·¥°ú º°µµ·Î »ç¿ëÇÏ´Â ÇàÀ§ ¶Ç´Â 4) º» ÇÁ·Î±×·¥À» Àç¶óÀ̼¾½º ºÎ¿©, ´ë¿© ¶Ç´Â ¸®½ºÇÏ´Â ÇàÀ§ + +f. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» º¸Á¶ ÇÁ·Î±×·¥À¸·Î ÃëµæÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÁÖ ÇÁ·Î±×·¥À» Áö¿øÇϰí ÁÖ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½ºÀÇ Á¦ÇÑ»çÇ×À» ÁؼöÇϱâ À§ÇÑ ¿ëµµ·Î¸¸ º» ÇÁ·Î±×·¥À» »ç¿ëÇϰí, ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ÁÖ ÇÁ·Î±×·¥À¸·Î ÃëµæÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» Áö¿øÇÏ°í º» °è¾àÀÇ Á¦ÇÑ»çÇ×À» ÁؼöÇϱâ À§ÇÑ ¿ëµµ·Î¸¸ ¸ðµç º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÀÌ "f" Ç×ÀÇ ¸ñÀû»ó "º¸Á¶ ÇÁ·Î±×·¥"Àº ´Ù¸¥ IBM ÇÁ·Î±×·¥(ÀÌÇÏ "ÁÖ ÇÁ·Î±×·¥")ÀÇ ÀϺÎÀ̸ç ÁÖ ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º Á¤º¸¿¡¼­ º¸Á¶ ÇÁ·Î±×·¥À¸·Î Ç¥½ÃµË´Ï´Ù. (ÀÌ·¯ÇÑ Á¦ÇÑ»çÇ× ¾øÀÌ Áö¿ø ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º¸¦ º°µµ·Î ÃëµæÇÏ·Á¸é ¶óÀ̼¾½º »ç¿ëÀÚ´Â Áö¿ø ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇØ¾ß ÇÕ´Ï´Ù.) + +º» ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÀÛ¼ºÇÏ´Â º» ÇÁ·Î±×·¥ÀÇ °¢ »çº»¿¡ Àû¿ëµË´Ï´Ù. + +3.1 Æ®·¹À̵å¾÷, ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¹× ÆÐÄ¡ + +3.1.1 Æ®·¹À̵å¾÷ + +º» ÇÁ·Î±×·¥ÀÌ Æ®·¹À̵å¾÷ ÇÁ·Î±×·¥À¸·Î ´ëüµÇ´Â °æ¿ì ´ëüµÈ ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º´Â Áï½Ã ÇØÁöµË´Ï´Ù. + +3.1.2 ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¹× ÆÐÄ¡ + +¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¶Ç´Â ÆÐÄ¡°¡ Á¦°øµÇ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¤º¸¿¡ ¸í½ÃµÈ ÇØ´ç ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¶Ç´Â ÆÐÄ¡¿¡ Àû¿ë °¡´ÉÇÑ Ãß°¡ Á¶Ç× ¶Ç´Â »óÀÌÇÑ Á¶Ç×À» ½ÂÀÎÇÕ´Ï´Ù. Ãß°¡ Á¶Ç× ¶Ç´Â »óÀÌÇÑ Á¶Ç×ÀÌ Á¦°øµÇÁö ¾Ê´Â °æ¿ì, ÇØ´ç ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¶Ç´Â ÆÐÄ¡¿¡´Â º» °è¾à¸¸ Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥ÀÌ ¾÷µ¥ÀÌÆ®·Î ´ëüµÇ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ëüµÈ ÇÁ·Î±×·¥ÀÇ »ç¿ëÀ» Áï½Ã Áß´ÜÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +3.2 °íÁ¤ ±â°£ ¶óÀ̼¾½º + +IBMÀÌ °íÁ¤ ±â°£ µ¿¾È º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º¸¦ ºÎ¿©ÇÏ´Â °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÌ °»½Å¿¡ µ¿ÀÇÇÏ´Â °æ¿ì°¡ ¾Æ´Ï¸é ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¶óÀ̼¾½º´Â °íÁ¤ ±â°£ ¸¸·á ½Ã ÇØÁöµË´Ï´Ù. + +3.3 ±â°£°ú ÇØÁö + +º» °è¾àÀº ÇØÁöµÉ ¶§±îÁö À¯È¿ÇÕ´Ï´Ù. + +IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç×À» ÁؼöÇÏÁö ¾Ê´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¶óÀ̼¾½º¸¦ ÇØÁöÇÒ ¼ö ÀÖ½À´Ï´Ù. + +¾î¶² ÀÌÀ¯·Îµç ÀÏ¹æ ´ç»çÀÚ°¡ ¶óÀ̼¾½º¸¦ ÇØÁöÇÑ °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ »ç¿ëÀ» Áï½Ã Áß´ÜÇÏ°í ¶óÀ̼¾½º »ç¿ëÀÚÀÇ »çº»À» ¸ðµÎ ÆÄ±âÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. º» °è¾àÀÇ ÇØÁö ÀÌÈÄ¿¡µµ ÀϺΠÁ¶Ç×Àº ±× Ư¼º»ó ÀÌÇàÀÌ µÉ ¶§±îÁö À¯È¿ÇÏ¸ç ¾ç ´ç»çÀÚÀÇ ½Â°èÀÚ ¹× ¾ç¼öÀο¡°Ôµµ Àû¿ëµË´Ï´Ù. + +4. ¿ä±Ý + +¿ä±ÝÀº ¶óÀ̼¾½º Áõ¼­¿¡ ÁöÁ¤µÈ ÃëµæÇÑ Çã°¡µÈ »ç¿ëÀ» ±âÁØÀ¸·Î ºÎ°úµË´Ï´Ù. IBMÀº º» °è¾à¿¡¼­ ¸í½ÃÇÏ´Â °æ¿ì¸¦ Á¦¿ÜÇϰí ÀÌ¹Ì ÁöºÒÇ߰ųª ÁöºÒÇß¾î¾ß ÇÒ ¿ä±ÝÀ» ȯºÒÇϰųª ÀÌ·¯ÇÑ ¿ä±Ý¿¡ ´ëÇØ Å©·¹µðÆ®¸¦ ÀÎÁ¤ÇÏÁö ¾Ê½À´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â Çã°¡µÈ »ç¿ëÀ» ´Ã¸®·Á¸é IBM ¶Ç´Â Çã°¡µÈ IBM ¸®¼¿·¯¿¡°Ô »çÀü¿¡ ÅëÁöÇϰí ÇØ´ç ¿ä±ÝÀ» ÁöºÒÇØ¾ß ÇÕ´Ï´Ù. + +5. ¼¼±Ý + +°ü°è ´ç±¹ÀÌ º» ÇÁ·Î±×·¥¿¡ ´ëÇØ °ü¼¼, ¼¼±Ý, ºÎ´ã±Ý ¶Ç´Â ±âŸ ºñ¿ë(IBM ¼øÀÌÀÍ¿¡ ´ëÇÑ ¼¼±ÝÀº Á¦¿Ü)À» ºÎ°úÇÏ´Â °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀڴ û±¸¼­¿¡ ¸í½ÃµÈ ±Ý¾×À» ÁöºÒÇϰųª ¸é¼¼ Áõ¸í¼­¸¦ Á¦ÃâÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» ÃëµæÇÑ ÀÌÈÄ¿¡ º» ÇÁ·Î±×·¥¿¡ ºÎ°úµÇ´Â ¸ðµç °³ÀÎ Àç»ê¼¼¸¦ ÁöºÒÇÒ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù. °ü°è ´ç±¹ÀÌ ÃÖÃÊ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ±¹°¡ ¿ÜºÎ¿¡¼­ÀÇ º» ÇÁ·Î±×·¥ ¼öÀÔÀ̳ª ¼öÃâ, ¾çµµ, ¾×¼¼½º ¶Ç´Â »ç¿ë¿¡ ´ëÇØ °ü¼¼, ¼¼±Ý, ºÎ´ã±Ý ¶Ç´Â ºñ¿ëÀ» ºÎ°úÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ºÎ°úµÈ ±Ý¾×¿¡ ´ëÇÑ ³³ºÎ Àǹ«¸¦ Áö¸ç ÇØ´ç ±Ý¾×À» ÁöºÒÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +6. ȯºÒ º¸Áõ + +¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ ÃÖÃÊ ¶óÀ̼¾½º »ç¿ëÀڷμ­ ¾î¶°ÇÑ ÀÌÀ¯·Îµç º» ÇÁ·Î±×·¥¿¡ ¸¸Á·ÇÏÁö ¾Ê´Â °æ¿ì, ¶óÀ̼¾½º¸¦ ÇØÁöÇÏ°í º» ÇÁ·Î±×·¥¿¡ ´ëÇØ ÁöºÒÇÑ ±Ý¾×À» ȯºÒ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Áõ¼­°¡ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¹ßÇàµÈ ³¯·ÎºÎÅÍ 30ÀÏ À̳»¿¡ º» ÇÁ·Î±×·¥ ¹× ¶óÀ̼¾½º Áõ¼­¸¦ ±¸ÀÔó¿¡ ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º°¡ °íÁ¤ ±â°£ ¶óÀ̼¾½º¿©¼­ °»½ÅÇØ¾ß ÇÏ´Â °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â Ãʱ⠱ⰣÀÇ Ã³À½ 30ÀÏ À̳»¿¡ º» ÇÁ·Î±×·¥ ¹× ÇØ´ç ¶óÀ̼¾½º Áõ¼­¸¦ ¹ÝȯÇÏ´Â °æ¿ì¿¡¸¸ ȯºÒ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ȯºÒ¹Þ´Â ¹æ¹ýÀ» ¹®ÀÇÇØ¾ß ÇÕ´Ï´Ù. + +7. ÇÁ·Î±×·¥ ¾çµµ + +¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» ¾çµµ¹ÞÀ¸·Á´Â Á¦3ÀÚ°¡ º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ´Â °æ¿ì¿¡¸¸ ÇØ´ç ´ç»çÀÚ¿¡°Ô º» ÇÁ·Î±×·¥ ¹× ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¸ðµç ¶óÀ̼¾½º ±Ç¸®¿Í Àǹ«¸¦ ¾çµµÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾î¶² ÀÌÀ¯·Îµç ÀÏ¹æ ´ç»çÀÚ°¡ ¶óÀ̼¾½º¸¦ ÇØÁöÇÑ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» Á¦3ÀÚ¿¡°Ô ¾çµµÇÒ ¼ö ¾ø½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) º» ÇÁ·Î±×·¥ ¶Ç´Â 2) º» ÇÁ·Î±×·¥ Çã°¡µÈ »ç¿ëÀÇ ÀϺθ¦ ¾çµµÇÒ ¼ö ¾ø½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ¾çµµÇÏ´Â °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¤º¸ ¹× ¶óÀ̼¾½º Áõ¼­¸¦ Æ÷ÇÔÇÏ¿© º» °è¾àÀÇ ÇϵåÄ«Çǵµ ¾çµµÇØ¾ß ÇÕ´Ï´Ù. ¾çµµ ÈÄ Áï½Ã »ç¿ëÀÚÀÇ ¶óÀ̼¾½º°¡ ÇØÁöµË´Ï´Ù. + +8. º¸Áõ ¹× Á¦¿Ü»çÇ× + +8.1 º¸Áõ Á¦ÇÑ + +IBMÀº º» ÇÁ·Î±×·¥ÀÌ ¸í½ÃµÈ °¡µ¿ ȯ°æ¿¡¼­ »ç¿ëµÇ´Â °æ¿ì ¸í¼¼´ë·Î ÀÛµ¿µÊÀ» º¸ÁõÇÕ´Ï´Ù. º» ÇÁ·Î±×·¥ÀÇ ¸í¼¼ ¹× ¸í½ÃµÈ °¡µ¿ ȯ°æ Á¤º¸´Â º» ÇÁ·Î±×·¥¿¡ µ¿ºÀµÇ´Â ¹®¼­(¿¹: read-me ÆÄÀÏ)³ª IBMÀÇ ±âŸ Á¤º¸ ¹®¼­(¿¹: ¹ßÇ¥ ¹®¼­)¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. °è¾à»óÀÇ ¸éÁ¦ ¶Ç´Â Á¦ÇÑ °¡´É¼º ¾øÀÌ ÇØ´ç ¹ý·ü¿¡¼­ ¿ä±¸ÇÏ´Â °æ¿ì¸¦ Á¦¿ÜÇϰí, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÇØ´ç ¹®¼­ ¹× ±âŸ ÇÁ·Î±×·¥ ÄÁÅÙÆ®°¡ ¿µ¾î·Î¸¸ Á¦°øµÉ ¼ö ÀÖ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +ÀÌ·¯ÇÑ º¸ÁõÀº º» ÇÁ·Î±×·¥ÀÇ ¼öÁ¤µÇÁö ¾ÊÀº ºÎºÐ¿¡ ÇÑÇØ Àû¿ëµË´Ï´Ù. IBMÀº º» ÇÁ·Î±×·¥ÀÌ Áß´ÜÀ̳ª ¿À·ù ¾øÀÌ ÀÛµ¿µÈ´Ù´Â °ÍÀ» º¸ÁõÇÏÁö ¾ÊÀ¸¸ç IBMÀÌ ¸ðµç ÇÁ·Î±×·¥ °áÇÔÀ» ¼öÁ¤ÇÒ °ÍÀ̶ó°í º¸ÁõÇÏÁö ¾Ê½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÔÀ¸·Î½á ÃÊ·¡µÇ´Â °á°ú´Â ÀüÀûÀ¸·Î ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Ã¥ÀÓÀÔ´Ï´Ù. + +º¸Áõ ±â°£ µ¿¾È IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÀÌ¹Ì ¾Ë·ÁÁø ÇÁ·Î±×·¥ °áÇÔ, °áÇÔ Á¤Á¤»çÇ×, Á¦ÇÑ»çÇ× ¹× ¿ìȸ Á¶Ä¡°¡ Æ÷ÇÔµÈ IBM µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ ¾×¼¼½º¸¦ Ãß°¡ ºñ¿ë ºÎ´ã ¾øÀÌ Á¦°øÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº IBM Software Support Handbook(www.ibm.com/software/support)À» ÂüÁ¶ÇϽʽÿÀ. + +º» ÇÁ·Î±×·¥ÀÌ º¸Áõ ±â°£ µ¿¾È º¸ÁõµÈ ´ë·Î ÀÛµ¿ÇÏÁö ¾Ê°í IBM µ¥ÀÌÅͺ£À̽º¿¡¼­ Á¦°øÇÏ´Â Á¤º¸·Î ¹®Á¦Á¡À» ÇØ°áÇÒ ¼ö ¾ø´Â °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ ¹× ÇØ´ç ¶óÀ̼¾½º Áõ¼­¸¦ ±¸ÀÔó(IBM ¶Ç´Â IBM ¸®¼¿·¯)¿¡ ¹ÝȯÇϰí ÁöºÒÇÑ ±Ý¾×À» ȯºÒ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. º» ÇÁ·Î±×·¥À» ¹ÝȯÇÑ ÈÄ¿¡´Â ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¶óÀ̼¾½º°¡ ÇØÁöµË´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ȯºÒ¹Þ´Â ¹æ¹ýÀ» ¹®ÀÇÇØ¾ß ÇÕ´Ï´Ù. + +8.2 Á¦¿Ü»çÇ× + +»ó±â º¸ÁõÀº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¹èŸÀû º¸ÁõÀ¸·Î¼­ »óǰ¼º, ǰÁú ¸¸Á·, ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º, ¼ÒÀ¯±Ç¿¡ ´ëÇÑ ¹¬½ÃÀû º¸ÁõÀ̳ª Á¶°Ç°ú ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ¿¡ ´ëÇÑ º¸ÁõÀ̳ª Á¶°ÇÀ» Æ÷ÇÔÇÏ¿©(´Ü, ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½) ¸í½ÃÀûÀÌµç ¹¬½ÃÀûÀÌµç ±âŸ ¸ðµç º¸ÁõÀ̳ª Á¶°ÇÀ» ´ëüÇÕ´Ï´Ù. ÀϺΠ±¹°¡³ª °üÇұǿ¡¼­´Â ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ º¸ÁõÀÇ Á¦¿Ü»çÇ×ÀÌ Çã¿ëµÇÁö ¾ÊÀ¸¹Ç·Î À§ÀÇ Á¦¿Ü»çÇ×ÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Àû¿ëµÇÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, ÇØ´ç º¸ÁõÀº º¸Áõ ±â°£ µ¿¾È¿¡¸¸ Àû¿ëµË´Ï´Ù. º¸Áõ ±â°£ ÀÌÈÄ¿¡´Â º¸ÁõÀÌ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀϺΠ±¹°¡³ª °üÇұǿ¡¼­´Â ¹¬½ÃÀû º¸ÁõÀÇ À¯È¿ ±â°£¿¡ ´ëÇÑ Á¦ÇÑ»çÇ×ÀÌ Çã¿ëµÇÁö ¾ÊÀ¸¹Ç·Î À§ÀÇ Á¦ÇÑ»çÇ×ÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Àû¿ëµÇÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. + +»ó±â º¸ÁõÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ƯÁ¤ÇÑ ¹ýÀû ±Ç¸®¸¦ ºÎ¿©ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ±¹°¡³ª °üÇұǿ¡ µû¶ó ´Ù¾çÇÑ ±âŸ ±Ç¸®¸¦ °¡Áú ¼öµµ ÀÖ½À´Ï´Ù. + +º» 8Ç×(º¸Áõ ¹× Á¦¿Ü»çÇ×)ÀÇ º¸ÁõÀº IBM¸¸ Á¦°øÇÕ´Ï´Ù. ±×·¯³ª º» 8.2Ç×(Á¦¿Ü»çÇ×)ÀÇ ¸éÃ¥»çÇ×Àº Á¦3ÀÚ ÄÚµåÀÇ IBM °ø±ÞÀÚ¿¡°Ôµµ Àû¿ëµË´Ï´Ù. ÇØ´ç °ø±ÞÀÚ´Â ¾î¶°ÇÑ º¸ÁõÀ̳ª Á¶°Ç ¾øÀÌ ÀÌ·¯ÇÑ Äڵ带 Á¦°øÇÕ´Ï´Ù. º» ´Ü¶ôÀº º» °è¾à¿¡ ÀǰÅÇÑ IBMÀÇ º¸Áõ Àǹ«¸¦ ¹«È¿È­ÇÏÁö ¾Ê½À´Ï´Ù. + +9. ¶óÀ̼¾½º »ç¿ëÀÚ µ¥ÀÌÅÍ ¹× µ¥ÀÌÅͺ£À̽º + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¹®Á¦Á¡ÀÇ ¿øÀÎÀ» ÆÄ¾ÇÇϵµ·Ï µ½±â À§ÇØ IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô 1) IBMÀÌ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ½Ã½ºÅÛÀ» ¿ø°ÝÀ¸·Î ¾×¼¼½ºÇϵµ·Ï Çã¿ëÇϰųª 2) ¶óÀ̼¾½º »ç¿ëÀÚ Á¤º¸ ¶Ç´Â ½Ã½ºÅÛ µ¥ÀÌÅ͸¦ IBM¿¡°Ô º¸³»µµ·Ï ¿äûÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª º» °è¾àÀÇ IBM º¸Áõ ¹üÀ§¸¦ ¹þ¾î³­ ÇØ´ç À¯ÇüÀÇ Áö¿øÀ» ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Á¦°øÇÏ´Â °Í¿¡ IBMÀÌ µ¿ÀÇÇÑ´Ù´Â ¼­¸é °è¾àÀ» IBM°ú ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º°µµ·Î ü°áÇÑ °æ¿ì°¡ ¾Æ´Ï¸é IBMÀº ÇØ´ç Áö¿øÀ» Á¦°øÇÒ Àǹ«°¡ ¾ø½À´Ï´Ù. ¾î´À °æ¿ì¶óµµ IBMÀº Á¦Ç° ¹× ¼­ºñ½º¸¦ °³¼±ÇÏ°í °ü·Ã Áö¿ø(Support) ¿ÀÆÛ¸µ(Offering) Á¦°øÀ» Áö¿øÇϱâ À§ÇØ ¿À·ù ¹× ¹®Á¦Á¡¿¡ ´ëÇÑ Á¤º¸¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¸ñÀûÀ¸·Î IBMÀº IBM °ü°èȸ»ç ¹× Çϵµ±ÞÀÚ(¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÀÖ´Â ±¹°¡°¡ ¾Æ´Ñ ±¹°¡ Áß Çϳª ÀÌ»ó¿¡ ÀÖ´Â °ü°èȸ»ç ¹× Çϵµ±ÞÀÚ Æ÷ÇÔ)¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM¿¡°Ô À̸¦ ¼öÇàÇÒ ±ÇÇÑÀ» ºÎ¿©ÇÕ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) ¶óÀ̼¾½º »ç¿ëÀÚ°¡ IBMÀÌ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â µ¥ÀÌÅÍ ¹× µ¥ÀÌÅͺ£À̽ºÀÇ ÄÁÅÙÆ®, 2) µ¥ÀÌÅÍ(°³ÀÎÀûÀ¸·Î ½Äº° °¡´ÉÇÑ µ¥ÀÌÅÍ Æ÷ÇÔ)ÀÇ ¾×¼¼½º, º¸¾È, ¾Ïȣȭ, »ç¿ë ¹× Àü¼Û¿¡ °üÇÑ ÀýÂ÷ ¹× °ü¸®ÀÇ ¼±Åà ¹× ±¸Çö°ú 3) µ¥ÀÌÅͺ£À̽º¿Í ÀúÀåµÈ µ¥ÀÌÅÍÀÇ ¹é¾÷ ¹× º¹±¸¿¡ ´ëÇØ Ã¥ÀÓÀ» Áý´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â µ¥ÀÌÅͳª ±âŸ Çü½ÄÀ¸·Î °³ÀÎÀûÀ¸·Î ½Äº° °¡´ÉÇÑ Á¤º¸¸¦ º¸³»°Å³ª ÇØ´ç Á¤º¸¿¡ ´ëÇÑ ¾×¼¼½º¸¦ IBM¿¡°Ô Á¦°øÇÏÁö ¾ÊÀ¸¸ç ½Ç¼ö·Î IBM¿¡°Ô Á¦°øµÈ ÇØ´ç Á¤º¸ ¶Ç´Â IBM¿¡ ÀÇÇÑ ÇØ´ç Á¤º¸ÀÇ À¯½ÇÀ̳ª °ø°³¿Í °ü·ÃÇÏ¿© IBM¿¡°Ô ¹ß»ýÇÒ ¼ö ÀÖ´Â ÀûÀýÇÑ ºñ¿ë ¹× ±âŸ ±Ý¾×¿¡ ´ëÇØ Ã¥ÀÓÀ» Áý´Ï´Ù. + +10. Ã¥ÀÓ Á¦ÇÑ + +º» 10Ç×(Ã¥ÀÓ Á¦ÇÑ)ÀÇ Á¦ÇÑ»çÇ× ¹× Á¦¿Ü»çÇ×Àº °è¾à»óÀÇ ¸éÁ¦ °¡´É¼º ¾øÀÌ ÇØ´ç ¹ý·ü¿¡¼­ ±ÝÁöÇÏÁö ¾Ê´Â ¹üÀ§¿¡¼­ ÃÖ´ëÇÑ Àû¿ëµË´Ï´Ù. + +10.1 IBMÀÌ Ã¥ÀÓÀ» Áö´Â Ç׸ñ + +IBMÀÇ Ã¤¹« ºÒÀÌÇàÀ̳ª ºÒ¹ý ÇàÀ§·Î ÀÎÇÏ¿© ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¼ÕÇØ°¡ ¹ß»ýÇÑ °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBMÀ¸·ÎºÎÅÍ ¼ÕÇØ¸¦ ¹è»ó¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ IBMÀ¸·ÎºÎÅÍ ¼ÕÇØ ¹è»óÀ» û±¸ÇÒ ¼ö ÀÖ´Â ¿øÀÎ(Áß´ëÇÑ °è¾à À§¹Ý, °ú½Ç, ºÎ½Ç Ç¥½Ã, ±âŸ °è¾à ¶Ç´Â ºÒ¹ý ÇàÀ§ ¹è»ó û±¸ Æ÷ÇÔ)¿¡ °ü°è¾øÀÌ °¢ ÇÁ·Î±×·¥°ú °ü·ÃÇÏ¿© ¹ß»ýÇϰųª º» °è¾à¿¡ ÀǰÅÇÏ¿© ¹ß»ýÇÏ´Â ¸ðµç ¹è»ó û±¸¿¡ ´ëÇÑ IBMÀÇ Ã¥ÀÓÀº ÀüüÀûÀ¸·Î ´ÙÀ½À» ÃʰúÇÏÁö ¾Ê½À´Ï´Ù. 1) ½Åü »óÇØ(»ç¸Á Æ÷ÇÔ)¿Í ºÎµ¿»ê ¹× À¯Ã¼ Àç»ê»óÀÇ ¼ÕÇØ 2) ±âŸ Á÷Á¢ÀûÀÎ ½Ç¼ÕÇØ¿¡ ´ëÇØ ¹è»ó û±¸ÀÇ ¿øÀÎÀÌ µÈ º» ÇÁ·Î±×·¥¿¡ ´ëÇØ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÁöºÒÇÑ ¿ä±Ý(ÇÁ·Î±×·¥ÀÌ °íÁ¤ ±â°£ ¿ä±ÝÁ¦ÀÎ °æ¿ì, ÃÖ´ë 12°³¿ù±îÁö ¿ä±Ý). + +ÀÌ·¯ÇÑ Á¦ÇÑÀº IBM ÇÁ·Î±×·¥ °³¹ßÀÚ ¹× °ø±ÞÀÚ¿¡°Ôµµ Àû¿ëµË´Ï´Ù. IBM, IBM ÇÁ·Î±×·¥ °³¹ßÀÚ ¹× °ø±ÞÀÚÀÇ Ã¥ÀÓÀº °¢ÀÚÀÇ Ã¥ÀÓÀ» ÇÕÇÏ¿© À§ Ã¥ÀÓ Çѵµ¸¦ ÃʰúÇÏÁö ¾Ê½À´Ï´Ù. + +10.2 IBMÀÌ Ã¥ÀÓÀ» ÁöÁö ¾Ê´Â Ç׸ñ + +¾î¶°ÇÑ °æ¿ì¿¡µµ IBM, IBMÀÇ ÇÁ·Î±×·¥ °³¹ßÀÚ ¶Ç´Â °ø±ÞÀÚ´Â ´ÙÀ½ »çÇ×ÀÇ ¹ß»ý °¡´É¼ºÀ» ÅëÁö ¹ÞÀº °æ¿ì¿¡µµ ´ÙÀ½¿¡ ´ëÇØ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. + +a. µ¥ÀÌÅÍÀÇ À¯½Ç ¶Ç´Â ¼Õ»ó + +b. Ưº° ¼ÕÇØ, ºÎ¼ö ¼ÕÇØ, ¡¹úÀû ¼ÕÇØ, °£Á¢ ¼ÕÇØ ¶Ç´Â °æÁ¦ÀûÀÎ °á°úÀû ¼ÕÇØ ¶Ç´Â + +c. ±â´ëÇß´ø ÀÌÀÍ, ¿µ¾÷ ±âȸ, ¸ÅÃâ, ¿µ¾÷±Ç ¶Ç´Â ºñ¿ë Àý°¨ÀÌ ½ÇÇàµÇÁö ¸øÇÔÀ¸·Î ÀÎÇØ ¹ß»ýÇÏ´Â ¼ÕÇØ. + +11. Á¶Ç× Áؼö È®ÀÎ + +º» 11Ç×(Á¶Ç× Áؼö È®ÀÎ)ÀÇ ¸ñÀû»ó, "IBM ÇÁ·Î±×·¥ ¶óÀ̼¾½º °è¾à(IPLA) ÇÁ·Î±×·¥ Á¶Ç×"Àº 1) º» °è¾à ¹× IBMÀÌ Á¦°øÇÏ´Â Àû¿ë °¡´ÉÇÑ ¼öÁ¤º» ¹× °Å·¡ ¼­·ù¿Í 2) IBM Software Policy À¥ »çÀÌÆ®(www.ibm.com/softwarepolicies)¿¡ ÀÖ´Â IBM ¼ÒÇÁÆ®¿þ¾î policy(¹é¾÷, ºÐÇÒ ¿ë·® ±âÁØ °¡°Ý Ã¥Á¤ ¹× ¸¶À̱׷¹ÀÌ¼Ç °ü·Ã policy¸¦ Æ÷ÇÔÇϳª ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½)¸¦ ÀǹÌÇÕ´Ï´Ù. + +º» 11Ç׿¡ ¸í½ÃµÈ ±Ç¸®¿Í Àǹ«´Â º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ºÎ¿©µÈ ±â°£ ¹× ÇâÈÄ 2³â µ¿¾È À¯È¿ÇÕ´Ï´Ù. + +11.1 È®ÀÎ ÇÁ·Î¼¼½º + +¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ IPLA ÇÁ·Î±×·¥ Á¶Ç×(IBMÀÇ Àû¿ë °¡´ÉÇÑ ¸ðµç ¶óÀ̼¾½º ºÎ¿© ¹× °¡°Ý Ã¥Á¤ ÀÚ°Ý Á¶Ç×À» Æ÷ÇÔÇϳª ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½)À» ÁؼöÇÏ¿© ¸ðµç ÇÁ·Î±×·¥À» »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ °¨»ç °¡´ÉÇÑ È®ÀÎÀ» Á¦°øÇϱ⿡ ÃæºÐÇÒ Á¤µµÀÇ Á¤È®ÇÑ ¼­¸é ±â·Ï, ½Ã½ºÅÛ µµ±¸ Ãâ·Â ¹× ±âŸ ½Ã½ºÅÛ Á¤º¸¸¦ ÀÛ¼ºÇÏ°í º¸À¯Çϸç IBM ¹× IBMÀÇ °¨»ç¿ø¿¡°Ô Á¦°øÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) Çã°¡µÈ »ç¿ëÀ» ÃʰúÇÏÁö ¾Êµµ·Ï È®ÀÎÇϰí 2) IPLA ÇÁ·Î±×·¥ Á¶Ç×À» ÁؼöÇÒ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù. + +ÀûÀýÇÑ ÅëÁö·Î IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¾î¶² ¿ëµµ·Îµç IPLA ÇÁ·Î±×·¥ Á¶Ç×ÀÌ Àû¿ëµÇ´Â ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â ¸ðµç »çÀÌÆ® ¹× ȯ°æ¿¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ IPLA ÇÁ·Î±×·¥ Á¶Ç×À» ÁؼöÇÏ´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ È®ÀÎÀº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¿µ¾÷ ¹æÇظ¦ ÃÖ¼ÒÈ­ÇÏ´Â ¹æ¹ýÀ¸·Î ¼öÇàµÇ¸ç ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ±Ù¹«Áö »çÀÌÆ®¿¡¼­ Á¤»ó ±Ù¹« ½Ã°£ Áß¿¡ ¼öÇàµÉ ¼ö ÀÖ½À´Ï´Ù. IBMÀº ¿ÜºÎ °¨»ç¿øÀ» ÅëÇØ ÀÌ·¯ÇÑ È®ÀÎÀ» Áö¿øÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, IBMÀº ÇØ´ç °¨»ç¿ø°ú ü°áÇÑ ¼­¸é ±â¹ÐÁ¤º¸ ¼ö·ÉÇÕÀǼ­°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. + +11.2 ÇØ°á ¹æ¹ý + +IBMÀº ÀÌ·¯ÇÑ È®Àο¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Çã°¡µÈ »ç¿ëÀ» ÃʰúÇÏ¿© ÇÁ·Î±×·¥À» »ç¿ëÇ߰ųª IPLA ÇÁ·Î±×·¥ Á¶Ç×À» ÁؼöÇÏÁö ¾ÊÀ½À» ¾Ë°ÔµÈ °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¼­¸éÀ¸·Î ÅëÁöÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBMÀÌ 1) Ãʰú »ç¿ë, 2) Ãʰú »ç¿ë°ú 2³â Áß ´õ ªÀº ±â°£ µ¿¾ÈÀÇ ÇØ´ç Ãʰú »ç¿ë¿¡ ´ëÇÑ Áö¿ø ¹× 3) È®ÀÎÀÇ °á°ú·Î¼­ ÆÇº°µÈ Ãß°¡ ¿ä±Ý ¹× ±âŸ Ã¥ÀÓ¿¡ ´ëÇØ û±¸¼­¿¡ ¸í½ÃÇÑ ¿ä±ÝÀ» Áï½Ã IBM¿¡°Ô Á÷Á¢ ÁöºÒÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +12. Á¦3ÀÚ ÁÖÀÇ»çÇ× + +º» ÇÁ·Î±×·¥¿¡´Â Á¦3ÀÚ°¡ ¾Æ´Ï¶ó IBMÀÌ º» °è¾à¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¶óÀ̼¾½º¸¦ ºÎ¿©ÇÏ´Â Á¦3ÀÚ Äڵ尡 Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. Á¦3ÀÚ Äڵ忡 ´ëÇÑ ÁÖÀÇ»çÇ×(ÀÌÇÏ "Á¦3ÀÚ ÁÖÀÇ»çÇ×")Àº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Á¤º¸¿ëÀ¸·Î¸¸ Æ÷ÇԵ˴ϴÙ(ÇØ´çµÇ´Â °æ¿ì). ÀÌ·¯ÇÑ ÁÖÀÇ»çÇ×Àº ÇÁ·Î±×·¥ÀÇ NOTICES ÆÄÀÏ¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÁ¤ Á¦3ÀÚ Äڵ忡 ´ëÇÑ ¼Ò½º Äڵ带 ¾ò´Â ¹æ¹ý¿¡ ´ëÇÑ Á¤º¸´Â Á¦3ÀÚ ÁÖÀÇ»çÇ׿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¦3ÀÚ ÁÖÀÇ»çÇ׿¡¼­ IBMÀÌ Á¦3ÀÚ Äڵ带 "¼öÁ¤ÇÒ ¼ö ÀÖ´Â Á¦3ÀÚ ÄÚµå"·Î Ç¥½ÃÇÏ´Â °æ¿ì, IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô 1) ¼öÁ¤ÇÒ ¼ö ÀÖ´Â Á¦3ÀÚ Äڵ带 ¼öÁ¤Çϰí 2) ¼öÁ¤ÇÒ ¼ö ÀÖ´Â Á¦3ÀÚ ÄÚµå¿Í Á÷Á¢ ÀÎÅÍÆäÀ̽º¸¦ ¼öÇàÇÏ´Â ÇÁ·Î±×·¥ ¸ðµâÀ» ¸®¹ö½º ¿£Áö´Ï¾îÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» ºÎ¿©ÇÕ´Ï´Ù. ´Ü, ÀÌ·¯ÇÑ ±ÇÇÑÀº ÇØ´ç Á¦3ÀÚ Äڵ忡 ´ëÇÑ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¼öÁ¤»çÇ×À» µð¹ö±ëÇϱâ À§ÇÑ ¿ëµµ·Î¸¸ ºÎ¿©µË´Ï´Ù. IBMÀÇ ¼­ºñ½º ¹× Áö¿ø Àǹ«(ÇØ´çµÇ´Â °æ¿ì)´Â ¼öÁ¤µÇÁö ¾ÊÀº ÇÁ·Î±×·¥¿¡¸¸ Àû¿ëµË´Ï´Ù. + +13. ÀϹݻçÇ× + +a. º» °è¾àÀÇ ¾î¶°ÇÑ Á¶Ç×µµ °è¾à¿¡ ÀÇÇØ Æ÷±â ¶Ç´Â Á¦ÇÑµÉ ¼ö ¾ø´Â °­Çà ¹ý±Ô »óÀÇ ¼ÒºñÀÚ ±Ç¸®¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù. + +b. IBMÀº À¯ÇüÀÇ ÇüÅ·Π¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Á¦°øÇÏ´Â ÇÁ·Î±×·¥¿¡ ´ëÇØ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÌ ¼­¸éÀ¸·Î ´Þ¸® ÇÕÀÇÇÏÁö ¾Ê´Â ÇÑ, IBMÀÌ ÁöÁ¤ÇÑ ¿î¼Û¾÷ü¿¡ ÇØ´ç ÇÁ·Î±×·¥À» ÀεµÇÏ¿© Æ÷Àå ¹× ¿î¼Û Àǹ«¸¦ ¼öÇàÇÕ´Ï´Ù. + +c. º» °è¾àÀÇ ÀϺΠÁ¶Ç×ÀÌ ¹«È¿À̰ųª ½ÃÇàÀÌ ºÒ°¡´ÉÇÑ °æ¿ì¿¡µµ º» °è¾àÀÇ ³ª¸ÓÁö Á¶Ç×Àº ¿ÏÀüÈ÷ À¯È¿ÇÕ´Ï´Ù. + +d. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÃÖÁ¾ »ç¿ëÀÚ ¶Ç´Â ƯÁ¤ »ç¿ëÀÚ¿¡ ´ëÇÑ ¼öÃâ¿¡ ´ëÇÑ ¹Ì±¹ Åë»ó ±ÝÁö ¹× Á¦Àç ±ÔÁ¤°ú ±ÝÁö Á¶Ç×À» Æ÷ÇÔÇÑ ¸ðµç ¼öÃâÀÔ °ü·Ã ¹ý±Ô¸¦ ÁؼöÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +e. ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM Á¦Ç° ¹× ¼­ºñ½º »ç¿ë ½Ã ¶Ç´Â ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÇ ºñÁî´Ï½º °ü°è ÃËÁøÀ» À§ÇØ IBM ¹× ±× °è¿­»ç(¹× À̵éÀÇ ½Â°èÀÚ ¹× ¾ç¼öÀÎ, Çϵµ±ÞÀÚ ¹× IBM ºñÁî´Ï½º ÆÄÆ®³Ê)°¡ ¿µ¾÷À» ÇÏ´Â °÷¿¡¼­´Â ¾îµð¼­³ª ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ´ã´çÀÚ Á¤º¸¸¦ ÀúÀåÇÏ°í »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇÕ´Ï´Ù. + +f. °¢ ´ç»çÀÚ´Â »ó´ë¹æÀÌ º» °è¾àÀÇ Àǹ«¸¦ ´ÙÇÏÁö ¾Ê¾ÒÀ½À» ÀÌÀ¯·Î ¹è»óÀ» û±¸Çϱâ Àü¿¡ »ó´ë¹æ¿¡°Ô °è¾àÀ» ÁؼöÇÒ ¼ö ÀÖ´Â ÀûÀýÇÑ ±âȸ¸¦ Á¦°øÇÕ´Ï´Ù. ¾ç ´ç»çÀÚ´Â º» °è¾à°ú °ü·ÃµÈ ´ç»çÀÚ °£ÀÇ ¸ðµç ºÐÀï, ÀÇ°ß Â÷ÀÌ ¶Ç´Â ¹è»ó û±¸¸¦ ¼º½ÇÇÏ°Ô ÇØ°áÇϱâ À§ÇØ ³ë·ÂÇÕ´Ï´Ù. + +g. Á¦ÇÑ»çÇ× ¶Ç´Â °è¾à»óÀÇ ¸éÁ¦ °¡´É¼º ¾øÀÌ ÇØ´ç ¹ý·ü¿¡ ´Þ¸® ¸í½ÃµÇÁö ¾Ê´Â ÇÑ 1) ¼Ò¼Û Á¦±âÀÇ ¿øÀÎ ¹ß»ý ÈÄ 2³âÀÌ Áö³ª¸é ¾î´À ´ç»çÀÚµµ º» °è¾à¿¡¼­ ¹ß»ýÇϰųª º» °è¾à°ú °ü·ÃÇÏ¿© ¹ß»ýÇÑ ¹è»ó û±¸¿¡ ´ëÇØ ¾î¶² ¾ç½ÄÀ¸·Îµç ¹ýÀû Á¶Ä¡¸¦ Á¦±âÇÏÁö ¾ÊÀ¸¸ç 2) ÇØ´ç Á¦ÇÑ ±â°£ÀÌ ¸¸·áµÇ¸é ÇØ´ç ¹è»ó û±¸¿Í ÀÌ·¯ÇÑ ¹è»ó û±¸¿¡ °ü·ÃµÈ °¢°¢ÀÇ ±Ç¸®´Â ¸ðµÎ ¹«È¿·Î µË´Ï´Ù. + +h. ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀº ÅëÁ¦ ºÒ°¡´ÉÇÑ »çÀ¯·Î Àǹ«»çÇ×À» ÀÌÇàÇÏÁö ¸øÇÑ °æ¿ì ÀÌ¿¡ ´ëÇØ ¸éÃ¥µË´Ï´Ù. + +i. º» °è¾à¿¡¼­´Â Á¦3ÀÚ¿¡ ´ëÇÑ ¼Ò¼Û Á¦±âÀÇ ¿øÀÎ ¶Ç´Â ±Ç¸®°¡ »ý¼ºµÇÁö ¾ÊÀ¸¸ç IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡ ´ëÇÑ Á¦3ÀÚÀÇ ¾î¶°ÇÑ ¹è»ó û±¸¿¡ ´ëÇØ¼­µµ Ã¥ÀÓÀÌ ¾ø½À´Ï´Ù. ´Ü, »ó±â 10.1Ç×(IBMÀÌ Ã¥ÀÓÀ» Áö´Â Ç׸ñ)¿¡ ¼³¸íµÈ IBM¿¡ ¹ýÀûÀ¸·Î Ã¥ÀÓÀÌ ÀÖ´Â ½Åü »óÇØ(»ç¸Á Æ÷ÇÔ)¿Í ºÎµ¿»ê ¹× À¯Ã¼ Àç»ê»óÀÇ ¼ÕÇØ¿¡ ´ëÇØ¼­´Â IBM¿¡ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù. + +j. º» °è¾à ü°á ½Ã ¾î´À ´ç»çÀÚµµ ´ÙÀ½¿¡ °üÇÑ º¸ÁõÀ» Æ÷ÇÔÇÏ¿©(´Ü, ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½) º» °è¾à¿¡ ¸í½ÃµÇÁö ¾ÊÀº º¸ÁõÀ» ½Å·ÚÇÏÁö ¾Ê½À´Ï´Ù. 1) À§ÀÇ 8Ç×(º¸Áõ ¹× Á¦¿Ü»çÇ×)¿¡¼­ ¸í½ÃÀûÀ¸·Î º¸ÁõµÈ »çÇ× ÀÌ¿ÜÀÇ º» ÇÁ·Î±×·¥ ¼º´É ¶Ç´Â ±â´É, 2) Á¦3ÀÚÀÇ °æÇèÀ̳ª ±ÇÀå»çÇ× ¶Ç´Â 3) ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ´Þ¼ºÇÒ ¼ö ÀÖ´Â °á°ú ¶Ç´Â ºñ¿ë Àý°¨. + +k. IBMÀº ƯÁ¤ ÇÁ·Î±×·¥À» Áö¿øÇÏ°í ¿µ¾÷À» ÃËÁøÇÏ°í ÆÇ¸ÅÇϱâ À§ÇØ Æ¯Á¤ Á¶Á÷("IBM ºñÁî´Ï½º ÆÄÆ®³Ê"¶ó°í ÇÔ)°úÀÇ °è¾à¿¡ µ¿ÀÇÇß½À´Ï´Ù. IBM ºñÁî´Ï½º ÆÄÆ®³Ê´Â IBM°ú´Â µ¶¸³ÀûÀÌ¸ç º°°³ÀÇ Á¶Á÷ÀÔ´Ï´Ù. IBMÀº IBM ºñÁî´Ï½º ÆÄÆ®³ÊÀÇ ÇàÀ§³ª ÀÇ»ç Ç¥½Ã ¶Ç´Â IBM ºñÁî´Ï½º ÆÄÆ®³ÊÀÇ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡ ´ëÇÑ Àǹ«¿¡ ´ëÇØ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. + +l. ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBM°úÀÇ ±âŸ °è¾à(¿¹: IBM ±âº» °è¾à)ÀÇ ¶óÀ̼¾½º ¹× ÁöÀû Àç»ê±Ç ¸éÃ¥ Á¶Ç×Àº º» °è¾à¿¡ ÀǰÅÇÏ¿© ºÎ¿©µÈ ÇÁ·Î±×·¥ ¶óÀ̼¾½º¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. + +14. °è¾à Àû¿ë Áö¿ª°ú ÁذŹý + +14.1 ÁذŹý + +¾ç ´ç»çÀÚ´Â º» °è¾àÀ¸·ÎºÎÅÍ ¶Ç´Â º» °è¾à°ú °ü·ÃÇÏ¿© ¹ß»ýÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÇ ¸ðµç ±Ç¸® ¹× Àǹ«¸¦ ÅëÁ¦, ÇØ¼® ¹× °­Á¦ÇÏ´Â µ¥ ÀÖ¾î ÁذŹý °áÁ¤ÀÇ ¿øÄ¢¿¡ °ü°è¾øÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥ ¶óÀ̼¾½º¸¦ ÃëµæÇÑ ±¹°¡ÀÇ ¹ý·üÀÌ Àû¿ëµÈ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +±¹Á¦ ¹°Ç° ¸Å¸Å °è¾à¿¡ °üÇÑ À¯¿£ Çù¾à(United Nations Convention on Contracts for the International Sale of Goods)Àº Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. + +14.2 °üÇÒ±Ç + +¸ðµç ±Ç¸® ¹× Àǹ«¿¡ ´ëÇØ¼­´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥ ¶óÀ̼¾½º¸¦ ÃëµæÇÑ ±¹°¡ÀÇ ¹ý¿ø¿¡ °üÇÒ±ÇÀÌ ÀÖ½À´Ï´Ù. + +Á¦ 2 ºÎ - ±¹°¡º° °íÀ¯ Á¶Ç× + +Çѱ¹ÀÇ °æ¿ì Àû¿ëµÇ´Â ±¹°¡º° °íÀ¯ Á¶Ç×ÀÌ ¾ø½À´Ï´Ù. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_lt b/charts/mq-advancedserver/LICENSE_locale/LICENSE_lt new file mode 100644 index 0000000..bf227f0 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_lt @@ -0,0 +1,1183 @@ +PASTABA + +Toliau ðiame dokumente nurodyti kelioms Programoms skirti Licencijos informacijos dokumentai. Kiekviename Licencijos informacijos dokumente nurodoma Programa (-os), kuriai (-ioms) jis yra taikomas. Taikomi tik tie Programos (-ø) Licencijos informacijos dokumentai, kuriø teises ásigijo Licenciatas. + + +============================================== + + +SVARBU: ATIDÞIAI PERSKAITYKITE + +Toliau pateiktos dvi licencinës sutartys. + +1. Programø ávertinimo IBM tarptautinë licencinë sutartis +2. IBM tarptautinë programos licencinë sutartis + +Jei Licenciatas ásigyja Programà gamybos tikslais (iðskyrus ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su IBM tarptautinës programos licencinës sutarties sàlygomis be jokiø pakeitimø. + +Jei Licenciatas ásigyja Programà ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo tikslais (bendrai ¥Ávertinimas´): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su (i) Programø ávertinimo IBM tarptautinës licencinës sutarties (¥Ávertinimo licencija´) sàlygomis be jokiø pakeitimø ir (ii) IBM tarptautinës programos licencinës sutarties (¥IPLA´) sàlygomis be jokiø pakeitimø. + +Ávertinimo licencija bus taikoma Licenciato atliekamo ávertinimo metu. + +IPLA bus automatiðkai taikoma, jei po Ávertinimo Licenciatas apsispræs pasilikti Programà (arba po Ávertinimo ásigys naudoti papildomas Programos kopijas) ir sudarys ásigijimo sutartá (pvz., IBM ¥International Passport Advantage´ arba IBM ¥Passport Advantage Express´ sutartá (-is). + +Ávertinimo licencija ir IPLA negalioja vienu metu, nepakeièia viena kitos ir yra viena nuo kitos nepriklausomos. + +Visas abiejø licenciniø sutarèiø tekstas pateikiamas. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Programø ávertinimo tarptautinë licencinë sutartis (Z125-5543-05). + +Programos pavadinimas (Programos numeris): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Ðios standartinës sàlygos taikomos Licenciato Programos naudojimui. + +Ávertinimo laikotarpis + +Ávertinimo laikotarpis prasideda nuo Licenciato sutikimo su ðios Sutarties sàlygomis dienos ir baigiasi po 90 dienø. + +Pagalbinës programos + +Programa yra licencijuojama kaip keliø produktø paketas ir apima toliau nurodytas Pagalbines programas. Licenciatas ágaliotas diegti ir naudoti tokias Pagalbines programas tik Licenciato Pagrindinës programos naudojimui palaikyti pagal ðià Sutartá, kaip nurodyta Programos Teisiø suteikimo dokumente (nebent ðiame Licencijos informacijos dokumente yra suteiktos platesnës teisës). Frazë ¥palaikyti Licenciato naudojimà´ apima tik tà naudojimà, kuris reikalingas ar kitaip tiesiogiai susijæs su Pagrindinës ar kitos Pagalbinës Programos licencijuotu naudojimu. Pagalbiniø programø negalima naudoti jokiam kitam tikslui. Licenciatas nëra ágaliotas perduoti arba perparduoti Pagalbiniø programø atskirai nuo Pagrindinës Programos. Pagalbinë programa gali bûti pateikiama su licencijos sàlygomis ir ðios sàlygos, jei tokiø yra, taikomos Pagalbinæ programà naudojanèiam Licenciatui. Ávykus ginèui ðiame Licencijos informacijos dokumente pateiktos sàlygos pakeièia Pagalbinës programos sàlygas. Kai Licenciato teisë naudoti Programà baigiasi arba nutraukiama, Licenciatas privalo nutraukti naudojimà, sunaikinti arba nedelsdamas gràþinti visas Pagalbiniø Programø kopijas ðaliai, ið kurios Licenciatas ásigijo Programà. Jeigu Licenciatas Pagalbines Programas atsisiuntë, jis turi susisiekti su ðalimi, ið kurios Licenciatas ásigijo Programà. Jei Licenciatas nori licencijuoti Pagalbines programas naudoti ilgiau, nei nurodyta anksèiau, norëdami gauti atitinkamà licencijà, kreipkitës á IBM pardavimo atstovà arba ðalá, ið kurios Licenciatas ásigijo Programà. + +Toliau iðvardytos kartu su Programa licencijuotos Pagalbinës programos: +IBM WebSphere Application Server Liberty V17.0 + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Tarptautinë programos licencinë sutartis (Z125-3301-14). + +Programos pavadinimas (Programos numeris): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Ðios standartinës sàlygos taikomos Licenciato Programos naudojimui. + +Riboto naudojimo teisë + +Kaip nurodyta Tarptautinëje programos licencinëje sutartyje (IPLA) ir ðioje Licencijos informacijoje, IBM suteikia licenciatui ribotà teisæ naudoti Programà. Ði teisë apsiriboja Ágaliotojo naudojimo lygiu, pvz., Procesoriaus vertës vieneto (PVV) Iðtekliø vertës vieneto (IVV), Vertës vieneto (VV) ar kitu nurodytu naudojimo lygiu, apmokamu Licenciato ir nurodytu Teisiø suteikimo dokumente. Licenciato naudojimas taip pat gali bûti apribotas tik nurodytame kompiuteryje ar tik kaip Pagalbinës programos, ar taikant kitus apribojimus. Kai Licenciatas nëra sumokëjæs uþ visà Programos ekonominæ vertæ, joks kitas naudojimas neleidþiamas nemokant papildomø mokesèiø. Be to, Licenciatas neturi teisës naudoti Programos komercinëms IT paslaugoms teikti jokiai treèiajai ðaliai, taip pat teikti komercinæ iðtekliø nuomà ar laiko paskirstymà, teikti antrinæ Programos licencijà ar jà nuomoti, jei tai nëra aiðkiai nurodyta taikomose sutartyse, pagal kurias Licenciatas ágyja teisæ naudoti Programà. Licenciatas gali naudotis papildomomis teisëmis sumokëjæs papildomà mokestá ar pagal kitas papildomas sàlygas. IBM pasilieka teisæ nuspræsti, ar Licenciatas galës pasinaudoti tokiomis papildomomis teisëmis. + +Specifikacijos + +Programos specifikacijas galima rasti Programos praneðimø bendruosiuose Apraðo ir techninës informacijos skyriuose. + +Pagalbinës programos + +Programa yra licencijuojama kaip keliø produktø paketas ir apima toliau nurodytas Pagalbines programas. Licenciatas ágaliotas diegti ir naudoti tokias Pagalbines programas tik Licenciato Pagrindinës programos naudojimui palaikyti pagal ðià Sutartá, kaip nurodyta Programos Teisiø suteikimo dokumente (nebent ðiame Licencijos informacijos dokumente yra suteiktos platesnës teisës). Frazë ¥palaikyti Licenciato naudojimà´ apima tik tà naudojimà, kuris reikalingas ar kitaip tiesiogiai susijæs su Pagrindinës ar kitos Pagalbinës Programos licencijuotu naudojimu. Pagalbiniø programø negalima naudoti jokiam kitam tikslui. Licenciatas nëra ágaliotas perduoti arba perparduoti Pagalbiniø programø atskirai nuo Pagrindinës Programos. Pagalbinë programa gali bûti pateikiama su licencijos sàlygomis ir ðios sàlygos, jei tokiø yra, taikomos Pagalbinæ programà naudojanèiam Licenciatui. Ávykus ginèui ðiame Licencijos informacijos dokumente pateiktos sàlygos pakeièia Pagalbinës programos sàlygas. Kai Licenciato teisë naudoti Programà baigiasi arba nutraukiama, Licenciatas privalo nutraukti naudojimà, sunaikinti arba nedelsdamas gràþinti visas Pagalbiniø Programø kopijas ðaliai, ið kurios Licenciatas ásigijo Programà. Jeigu Licenciatas Pagalbines Programas atsisiuntë, jis turi susisiekti su ðalimi, ið kurios Licenciatas ásigijo Programà. Jei Licenciatas nori licencijuoti Pagalbines programas naudoti ilgiau, nei nurodyta anksèiau, norëdami gauti atitinkamà licencijà, kreipkitës á IBM pardavimo atstovà arba ðalá, ið kurios Licenciatas ásigijo Programà. + +Toliau iðvardytos kartu su Programa licencijuotos Pagalbinës programos: +IBM WebSphere Application Server Liberty V17.0 + +Suteikiant bûtinas teises nenaudojami komponentai + +Nustatant teisiø, reikalingø Licenciato Programai ádiegti arba naudoti, skaièiø, neatsiþvelgiama á toliau nurodytø Programos komponentø diegimà arba naudojimà. Kitaip tariant, Licenciatas gali diegti ir naudoti toliau nurodytus Programos komponentus pagal licencijos sàlygas, taèiau ðie komponentai nenaudojami Programai reikalingø teisiø skaièiui nustatyti. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Perskirstymo paketai + +Jeigu á Programà átraukti Perskirstomieji komponentai, jie bus nurodyti REDIST faile, pateiktame kartu su Programa. Kartu su Sutarties suteiktomis licencijos teisëmis Licenciatas gali platinti Perskirstymo komponentus laikydamasis ðiø sàlygø: +1) perskirstymas turi vykti tik objekto kodo forma ir turi atitikti visus Programos REDIST ar lydraðtyje pateiktus nurodymus, instrukcijas ir specifikacijas; +2) jei Programos lydraðtyje aiðkiai nurodyta, kad Licenciatui leidþiama modifikuoti Perskirstymo paketus, tokios modifikacijos turi atitikti visus toje dokumentacijoje pateiktus nurodymus, instrukcijas ir specifikacijas, ir ðios modifikacijos, jei tokiø yra, turi bûti laikomos Perskirstymo paketais; +3) Perskirstymo paketai gali bûti platinami tik kaip Licenciato taikomosios programos, kuri buvo sukurta naudojant Programà, (¥Licenciato taikomoji programa´) dalis ir tik Licenciato klientø naudojamai Licenciato taikomajai programai palaikyti. Licenciato taikomoji programa turi teikti svarbià pridëtinæ vertæ taip, kad Licenciato taikomosios programos produkto galutiniai vartotojai nebûtø motyvuoti ásigyti Perskirstymo paketus; +4) jeigu á Perskirstymo paketus átraukta ¥Java´ vykdymo aplinka, Licenciatas taip pat privalo á Licenciato taikomàjà programà átraukti kitus ne ¥Java´ Perskirstymo paketus, nebent Taikomoji programa sukurta veikti tik bendruosiuose kompiuteriø árenginiuose (pavyzdþiui, skreitiniuose, staliniuose kompiuteriuose ir serveriuose), o ne kiðeniniuose ar kituose skvarbiuosiuose árenginiuose (t. y. árenginiuose, kurie turi mikroprocesoriø, taèiau kuriø kompiuterio funkcijos nëra pirminis naudojimo tikslas); +5) Licenciatas negali paðalinti jokiø Perskirstymo paketuose esanèiø autoriaus teisiø arba pastabø failø; +6) Licenciatas nelaikys IBM, jos tiekëjø arba platintojø atsakingais uþ jokias pretenzijas, susijusias su Licenciato taikomosios programos naudojimu ar platinimu; +7) Licenciatas negali naudoti tokio paties kaip originaliø Perskirstymo paketø failø / moduliø kelio pavadinimo; +8) Parduodamas Licenciato taikomàjà programà Licenciatas negali naudoti IBM, jos tiekëjø arba platintojø pavadinimø arba prekiø þenklø, neturëdamas IBM, to tiekëjo arba platintojo iðankstinio raðtiðko sutikimo; +9) IBM, jos tiekëjai ir platintojai pateikia Perskirstymo paketus ir susijusià dokumentacijà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKDAMI JOKIOS APIBRËÞTOS AR NUMANOMOS GARANTIJOS, ÁSKAITANT PAVADINIMO, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NUMANOMAS TINKAMUMO PREKYBAI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS; +10) Licenciatas atsakingas uþ visà techninæ pagalbà, susijusià su Licenciato taikomàja programa, ir uþ bet kokias Perskirstymo paketø modifikacijas; ir +11) Licenciato ir Licenciato taikomosios programos galutinio vartotojo licencijos sutartis turi áspëti galutiná vartotojà, kad Perskirstymo paketø arba jø modifikavimø negalima i) naudoti kitu tikslu, nei Licenciato taikomajai programai ágalinti, ii) kopijuoti (iðskyrus kuriant atsarginæ kopijà), iii) platinti ar perduoti naudoti be Licenciato taikomosios programos, arba iv) iðardyti, dekompiliuoti ar kitaip versti, iðskyrus, jei tai aiðkiai leidþia teisës aktai ir nepaþeidþiami sutartiniai ásipareigojimai. Be to, Licenciato licencinë sutartis turi bûti sauganti IBM bent tiek, kiek tai apibrëþia ðios Sutarties sàlygos. + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + +Licenciatas gali platinti Programos REDIST faile iðvardytø modifikuotø Ðaltinio komponentø ir Pavyzdinës medþiagos versijas laikydamasis ðios licencijos sàlygø ir REDIST faile pateiktø instrukcijø. + +Ðie matavimo vienetai gali bûti taikomi Licenciato Programos naudojimui. + +Procesoriaus vertës vienetas (PVV) + +Procesoriaus vertës vienetas (PVV) yra matavimo vienetas, pagal kurá licencijuota ði Programa. Reikalingø PVV teisiø skaièius pagrástas procesoriaus technologija (PVV lentelëje nurodytas procesoriaus tiekëjas, prekës þenklas, tipas ir modelio numeris: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ir Programai prieinamø procesoriø skaièiumi. Licencijuodama pagal PVV IBM apibrëþia procesoriø kaip mikroschemoje esanèià atskirà procesoriaus ðerdá. Pavyzdþiui, dviejø ðerdþiø procesoriaus mikroschemoje yra dvi procesoriaus ðerdys. + +Licenciatas gali diegti Programà naudodamas Visos talpos licencijavimà arba Virtualizavimo talpos (talpos dalies) licencijavimà pagal ¥Passport Advantage´ talpos dalies licencijavimo sàlygas (þr. tinklalapá toliau). Naudodamas Visos talpos licencijavimà Licenciatas privalo ásigyti PVV teises, apimanèias visas fizinëje techninës árangos aplinkoje esanèias suaktyvintas procesoriaus ðerdis*, kurias pasiekia arba valdo Programa, iðskyrus serverius, ið kuriø Programa buvo visam laikui paðalinta. Naudodamas Virtualizavimo talpos licencijavimà Licenciatas privalo ásigyti teises, apimanèias visas suaktyvintas procesoriaus ðerdis, kurias pasiekia arba valdo Programa, kaip apibrëþta Virtualizavimo talpos licencijos skaièiavimo taisyklëse: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Suaktyvinta procesoriaus ðerdis ? tai procesoriaus ðerdis, kurià gali naudoti fizinis arba virtualusis serveris, neatsiþvelgiant á tai, ar procesoriaus ðerdies talpa gali bûti arba yra apribota naudojant virtualizavimo technologijas, operacinës sistemos komandas, BIOS nustatymus ar panaðius apribojimus. + +Virtualiojo procesoriaus ðerdis + +Virtualiojo procesoriaus ðerdis yra matavimo vienetas, kuriuo remiantis gali bûti licencijuojama ði Programa. Fizinis serveris ? tai fizinis kompiuteris, kurá sudaro procesoriai, atmintis ir ávesties / iðvesties funkcinës galimybës. Jis vykdo uþklausø procedûras, komandas arba taikomàsias programas viename arba keliuose vartotojo arba kliento árenginiuose. Kai naudojami stelaþai, moduliai ar kita panaði áranga, kiekvienas atskiras fizinis árenginys (pvz., modulis arba á stelaþà ámontuotas árenginys), turintis reikiamus komponentus, yra laikomas atskiru Fiziniu serveriu. Virtualusis serveris ? tai virtualusis kompiuteris, sukurtas skaidant Fiziniam serveriui prieinamus iðteklius, arba neiðskaidytas Fizinis serveris. Procesoriaus ðerdis (paprastai vadinama procesoriumi arba CPU) yra instrukcijas interpretuojantis ir vykdantis kompiuterinio árenginio funkcinis vienetas. Procesoriaus ðerdá sudaro bent jau instrukcijø valdymo vienetas ir vienas ar daugiau aritmetiniø ar loginiø vienetø. Virtualiojo procesoriaus ðerdis ? tai neiðskaidyto Fizinio serverio Procesoriaus ðerdis arba Virtualiajam serveriui priskirta virtualioji ðerdis. Licenciatas privalo ásigyti teises kiekvienai Programai prieinamo Virtualiojo procesoriaus ðerdþiai. + +Kiekvienam Fiziniam serveriui Licenciatas turi turëti pakankamai teisiø 1) visø Programai pasiekiamø Virtualiøjø procesoriø ðerdþiø sumai arba 2) visoms Fizinio serverio Procesoriaus ðerdims (atsiþvelgiant á tai, kuris skaièius maþesnis). + +Be anksèiau nurodytos informacijos, toliau nurodytos sàlygos taikomos Licenciato Programos naudojimui. + +Laukimo bûsenos budëjimo konfigûracijos + +Ðiame skyriuje ¥Laukimo bûsenos budëjimo´ konfigûracija laikoma tokia, kai Programos kopija ádiegiama serveryje, kuris yra gero pasiekiamumo sprendimo dalis ir á kurá Programa permetama, jei aktyviajame serveryje Programos kopija tampa nebenaudojama. Serveris laikomas veikianèiu laukimo reþimu tik tada, jei, iki ávykstant permetimui, jis yra naudojamas tik administraciniams veiksmams atlikti, kurie padeda vykdant permetimo scenarijus. + +Programa negali bûti diegiama Laukimo bûsenos budëjimo serveryje, iðskyrus atvejus, kai yra tinkama licencija. + +Jeigu Programos Laukimo bûsenos budëjimo konfigûracija naudojama su Keliø egzemplioriø eiliø tvarkytuvo funkcija, Programos kopija gali bûti laikoma Laukimo bûsenos budëjimo serveryje kaip atsarginë kopija ir gali bûti paleidþiama. Taèiau ji turi likti laukimo bûsenos ir neturi bûti naudojama jokiais gamybiniais tikslais, nebent aktyvus serveris permetamas á Laukimo bûsenos budëjimo serverá. Tokiu atveju permetimo laikotarpiu Laukimo bûsenos budëjimo kopija gali bûti naudojama gamybiniais tikslais. + +Jeigu Programos Laukimo bûsenos budëjimo konfigûracija naudojama su kitomis Gero pasiekiamumo sistemomis, Programos kopija gali bûti laikoma Laukimo bûsenos budëjimo serveryje kaip atsarginë kopija, bet negali bûti paleidþiama (ir todël negali bûti naudojama jokiais gamybiniais tikslais). Nustojus veikti aktyviam serveriui, jà automatiðkai paleis Gero pasiekiamumo komponentai. Tokiu atveju permetimo laikotarpiu Laukimo bûsenos budëjimo kopija gali bûti naudojama gamybiniais tikslais. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +SVARBU: ATIDÞIAI PERSKAITYKITE + +Toliau pateiktos dvi licencinës sutartys. + +1. Programø ávertinimo IBM tarptautinë licencinë sutartis +2. IBM tarptautinë programos licencinë sutartis + +Jei Licenciatas ásigyja Programà gamybos tikslais (iðskyrus ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su IBM tarptautinës programos licencinës sutarties sàlygomis be jokiø pakeitimø. + +Jei Licenciatas ásigyja Programà ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo tikslais (bendrai ¥Ávertinimas´): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su (i) Programø ávertinimo IBM tarptautinës licencinës sutarties (¥Ávertinimo licencija´) sàlygomis be jokiø pakeitimø ir (ii) IBM tarptautinës programos licencinës sutarties (¥IPLA´) sàlygomis be jokiø pakeitimø. + +Ávertinimo licencija bus taikoma Licenciato atliekamo ávertinimo metu. + +IPLA bus automatiðkai taikoma, jei po Ávertinimo Licenciatas apsispræs pasilikti Programà (arba po Ávertinimo ásigys naudoti papildomas Programos kopijas) ir sudarys ásigijimo sutartá (pvz., IBM ¥International Passport Advantage´ arba IBM ¥Passport Advantage Express´ sutartá (-is). + +Ávertinimo licencija ir IPLA negalioja vienu metu, nepakeièia viena kitos ir yra viena nuo kitos nepriklausomos. + +Visas abiejø licenciniø sutarèiø tekstas pateikiamas. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Programø ávertinimo tarptautinë licencinë sutartis (Z125-5543-05). + +Programos pavadinimas (Programos numeris): +IBM MQ Advanced V9.0.3 (Evaluation) + +Ðios standartinës sàlygos taikomos Licenciato Programos naudojimui. + +Ávertinimo laikotarpis + +Ávertinimo laikotarpis prasideda nuo Licenciato sutikimo su ðios Sutarties sàlygomis dienos ir baigiasi po 90 dienø. + +Sugrupuotos programos + +Programa yra licencijuojama kaip keliø produktø paketas ir apima toliau nurodytas Sugrupuotas programas. Licenciatas ágaliotas diegti ir naudoti ðias Sugrupuotas programas tik kaip nurodyta Programos Teisiø suteikimo dokumente ir ðiame Licencijos informacijos dokumente. Licenciatas nëra ágaliotas perduoti arba perparduoti Sugrupuotø programø atskirai nuo keliø produktø paketo. Sugrupuota programa gali bûti pateikiama su licencijos sàlygomis ir ðios sàlygos, jei tokiø yra, taikomos Sugrupuotà programà naudojanèiam Licenciatui. Ávykus ginèui ðiame Licencijos informacijos dokumente pateiktos sàlygos pakeièia Sugrupuotos programos sàlygas. Kai Licenciato teisë naudoti Programà baigiasi arba nutraukiama, Licenciatas privalo nutraukti naudojimà, sunaikinti arba nedelsdamas gràþinti visas Sugrupuotø programø kopijas ðaliai, ið kurios Licenciatas ásigijo Programà. Jeigu Licenciatas Sugrupuotas programas atsisiuntë, jis turi susisiekti su ðalimi, ið kurios Licenciatas ásigijo Programà. Jei Licenciatas nori licencijuoti Sugrupuotas programas naudoti ilgiau, nei nurodyta anksèiau, norëdami gauti atitinkamà licencijà, kreipkitës á IBM pardavimo atstovà arba ðalá, ið kurios Licenciatas ásigijo Programà. + +Toliau iðvardytos kartu su Programa licencijuotos Sugrupuotos programos: +IBM MQ V9.0.3 + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Tarptautinë programos licencinë sutartis (Z125-3301-14). + +Programos pavadinimas (Programos numeris): +IBM MQ Advanced V9.0.3 (5724-H72) + +Ðios standartinës sàlygos taikomos Licenciato Programos naudojimui. + +Riboto naudojimo teisë + +Kaip nurodyta Tarptautinëje programos licencinëje sutartyje (IPLA) ir ðioje Licencijos informacijoje, IBM suteikia licenciatui ribotà teisæ naudoti Programà. Ði teisë apsiriboja Ágaliotojo naudojimo lygiu, pvz., Procesoriaus vertës vieneto (PVV) Iðtekliø vertës vieneto (IVV), Vertës vieneto (VV) ar kitu nurodytu naudojimo lygiu, apmokamu Licenciato ir nurodytu Teisiø suteikimo dokumente. Licenciato naudojimas taip pat gali bûti apribotas tik nurodytame kompiuteryje ar tik kaip Pagalbinës programos, ar taikant kitus apribojimus. Kai Licenciatas nëra sumokëjæs uþ visà Programos ekonominæ vertæ, joks kitas naudojimas neleidþiamas nemokant papildomø mokesèiø. Be to, Licenciatas neturi teisës naudoti Programos komercinëms IT paslaugoms teikti jokiai treèiajai ðaliai, taip pat teikti komercinæ iðtekliø nuomà ar laiko paskirstymà, teikti antrinæ Programos licencijà ar jà nuomoti, jei tai nëra aiðkiai nurodyta taikomose sutartyse, pagal kurias Licenciatas ágyja teisæ naudoti Programà. Licenciatas gali naudotis papildomomis teisëmis sumokëjæs papildomà mokestá ar pagal kitas papildomas sàlygas. IBM pasilieka teisæ nuspræsti, ar Licenciatas galës pasinaudoti tokiomis papildomomis teisëmis. + +Specifikacijos + +Programos specifikacijas galima rasti Programos praneðimø bendruosiuose Apraðo ir techninës informacijos skyriuose. + +Sugrupuotos programos + +Programa yra licencijuojama kaip keliø produktø paketas ir apima toliau nurodytas Sugrupuotas programas. Licenciatas ágaliotas diegti ir naudoti ðias Sugrupuotas programas tik kaip nurodyta Programos Teisiø suteikimo dokumente ir ðiame Licencijos informacijos dokumente. Licenciatas nëra ágaliotas perduoti arba perparduoti Sugrupuotø programø atskirai nuo keliø produktø paketo. Sugrupuota programa gali bûti pateikiama su licencijos sàlygomis ir ðios sàlygos, jei tokiø yra, taikomos Sugrupuotà programà naudojanèiam Licenciatui. Ávykus ginèui ðiame Licencijos informacijos dokumente pateiktos sàlygos pakeièia Sugrupuotos programos sàlygas. Kai Licenciato teisë naudoti Programà baigiasi arba nutraukiama, Licenciatas privalo nutraukti naudojimà, sunaikinti arba nedelsdamas gràþinti visas Sugrupuotø programø kopijas ðaliai, ið kurios Licenciatas ásigijo Programà. Jeigu Licenciatas Sugrupuotas programas atsisiuntë, jis turi susisiekti su ðalimi, ið kurios Licenciatas ásigijo Programà. Jei Licenciatas nori licencijuoti Sugrupuotas programas naudoti ilgiau, nei nurodyta anksèiau, norëdami gauti atitinkamà licencijà, kreipkitës á IBM pardavimo atstovà arba ðalá, ið kurios Licenciatas ásigijo Programà. + +Toliau iðvardytos kartu su Programa licencijuotos Sugrupuotos programos: +IBM MQ V9.0.3 + +Suteikiant bûtinas teises nenaudojami komponentai + +Nustatant teisiø, reikalingø Licenciato Programai ádiegti arba naudoti, skaièiø, neatsiþvelgiama á toliau nurodytø Programos komponentø diegimà arba naudojimà. Kitaip tariant, Licenciatas gali diegti ir naudoti toliau nurodytus Programos komponentus pagal licencijos sàlygas, taèiau ðie komponentai nenaudojami Programai reikalingø teisiø skaièiui nustatyti. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + +Ðie matavimo vienetai gali bûti taikomi Licenciato Programos naudojimui. + +Procesoriaus vertës vienetas (PVV) + +Procesoriaus vertës vienetas (PVV) yra matavimo vienetas, pagal kurá licencijuota ði Programa. Reikalingø PVV teisiø skaièius pagrástas procesoriaus technologija (PVV lentelëje nurodytas procesoriaus tiekëjas, prekës þenklas, tipas ir modelio numeris: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ir Programai prieinamø procesoriø skaièiumi. Licencijuodama pagal PVV IBM apibrëþia procesoriø kaip mikroschemoje esanèià atskirà procesoriaus ðerdá. Pavyzdþiui, dviejø ðerdþiø procesoriaus mikroschemoje yra dvi procesoriaus ðerdys. + +Licenciatas gali diegti Programà naudodamas Visos talpos licencijavimà arba Virtualizavimo talpos (talpos dalies) licencijavimà pagal ¥Passport Advantage´ talpos dalies licencijavimo sàlygas (þr. tinklalapá toliau). Naudodamas Visos talpos licencijavimà Licenciatas privalo ásigyti PVV teises, apimanèias visas fizinëje techninës árangos aplinkoje esanèias suaktyvintas procesoriaus ðerdis*, kurias pasiekia arba valdo Programa, iðskyrus serverius, ið kuriø Programa buvo visam laikui paðalinta. Naudodamas Virtualizavimo talpos licencijavimà Licenciatas privalo ásigyti teises, apimanèias visas suaktyvintas procesoriaus ðerdis, kurias pasiekia arba valdo Programa, kaip apibrëþta Virtualizavimo talpos licencijos skaièiavimo taisyklëse: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Suaktyvinta procesoriaus ðerdis ? tai procesoriaus ðerdis, kurià gali naudoti fizinis arba virtualusis serveris, neatsiþvelgiant á tai, ar procesoriaus ðerdies talpa gali bûti arba yra apribota naudojant virtualizavimo technologijas, operacinës sistemos komandas, BIOS nustatymus ar panaðius apribojimus. + +Virtualiojo procesoriaus ðerdis + +Virtualiojo procesoriaus ðerdis yra matavimo vienetas, kuriuo remiantis gali bûti licencijuojama ði Programa. Fizinis serveris ? tai fizinis kompiuteris, kurá sudaro procesoriai, atmintis ir ávesties / iðvesties funkcinës galimybës. Jis vykdo uþklausø procedûras, komandas arba taikomàsias programas viename arba keliuose vartotojo arba kliento árenginiuose. Kai naudojami stelaþai, moduliai ar kita panaði áranga, kiekvienas atskiras fizinis árenginys (pvz., modulis arba á stelaþà ámontuotas árenginys), turintis reikiamus komponentus, yra laikomas atskiru Fiziniu serveriu. Virtualusis serveris ? tai virtualusis kompiuteris, sukurtas skaidant Fiziniam serveriui prieinamus iðteklius, arba neiðskaidytas Fizinis serveris. Procesoriaus ðerdis (paprastai vadinama procesoriumi arba CPU) yra instrukcijas interpretuojantis ir vykdantis kompiuterinio árenginio funkcinis vienetas. Procesoriaus ðerdá sudaro bent jau instrukcijø valdymo vienetas ir vienas ar daugiau aritmetiniø ar loginiø vienetø. Virtualiojo procesoriaus ðerdis ? tai neiðskaidyto Fizinio serverio Procesoriaus ðerdis arba Virtualiajam serveriui priskirta virtualioji ðerdis. Licenciatas privalo ásigyti teises kiekvienai Programai prieinamo Virtualiojo procesoriaus ðerdþiai. + +Kiekvienam Fiziniam serveriui Licenciatas turi turëti pakankamai teisiø 1) visø Programai pasiekiamø Virtualiøjø procesoriø ðerdþiø sumai arba 2) visoms Fizinio serverio Procesoriaus ðerdims (atsiþvelgiant á tai, kuris skaièius maþesnis). + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +SVARBU: ATIDÞIAI PERSKAITYKITE + +Toliau pateiktos dvi licencinës sutartys. + +1. Programø ávertinimo IBM tarptautinë licencinë sutartis +2. IBM tarptautinë programos licencinë sutartis + +Jei Licenciatas ásigyja Programà gamybos tikslais (iðskyrus ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su IBM tarptautinës programos licencinës sutarties sàlygomis be jokiø pakeitimø. + +Jei Licenciatas ásigyja Programà ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo tikslais (bendrai ¥Ávertinimas´): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su (i) Programø ávertinimo IBM tarptautinës licencinës sutarties (¥Ávertinimo licencija´) sàlygomis be jokiø pakeitimø ir (ii) IBM tarptautinës programos licencinës sutarties (¥IPLA´) sàlygomis be jokiø pakeitimø. + +Ávertinimo licencija bus taikoma Licenciato atliekamo ávertinimo metu. + +IPLA bus automatiðkai taikoma, jei po Ávertinimo Licenciatas apsispræs pasilikti Programà (arba po Ávertinimo ásigys naudoti papildomas Programos kopijas) ir sudarys ásigijimo sutartá (pvz., IBM ¥International Passport Advantage´ arba IBM ¥Passport Advantage Express´ sutartá (-is). + +Ávertinimo licencija ir IPLA negalioja vienu metu, nepakeièia viena kitos ir yra viena nuo kitos nepriklausomos. + +Visas abiejø licenciniø sutarèiø tekstas pateikiamas. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Programø ávertinimo tarptautinë licencinë sutartis (Z125-5543-05). + +Programos pavadinimas (Programos numeris): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Ðios standartinës sàlygos taikomos Licenciato Programos naudojimui. + +Ávertinimo laikotarpis + +Ávertinimo laikotarpis prasideda nuo Licenciato sutikimo su ðios Sutarties sàlygomis dienos ir baigiasi po 90 dienø. + +Sugrupuotos programos + +Programa yra licencijuojama kaip keliø produktø paketas ir apima toliau nurodytas Sugrupuotas programas. Licenciatas ágaliotas diegti ir naudoti ðias Sugrupuotas programas tik kaip nurodyta Programos Teisiø suteikimo dokumente ir ðiame Licencijos informacijos dokumente. Licenciatas nëra ágaliotas perduoti arba perparduoti Sugrupuotø programø atskirai nuo keliø produktø paketo. Sugrupuota programa gali bûti pateikiama su licencijos sàlygomis ir ðios sàlygos, jei tokiø yra, taikomos Sugrupuotà programà naudojanèiam Licenciatui. Ávykus ginèui ðiame Licencijos informacijos dokumente pateiktos sàlygos pakeièia Sugrupuotos programos sàlygas. Kai Licenciato teisë naudoti Programà baigiasi arba nutraukiama, Licenciatas privalo nutraukti naudojimà, sunaikinti arba nedelsdamas gràþinti visas Sugrupuotø programø kopijas ðaliai, ið kurios Licenciatas ásigijo Programà. Jeigu Licenciatas Sugrupuotas programas atsisiuntë, jis turi susisiekti su ðalimi, ið kurios Licenciatas ásigijo Programà. Jei Licenciatas nori licencijuoti Sugrupuotas programas naudoti ilgiau, nei nurodyta anksèiau, norëdami gauti atitinkamà licencijà, kreipkitës á IBM pardavimo atstovà arba ðalá, ið kurios Licenciatas ásigijo Programà. + +Toliau iðvardytos kartu su Programa licencijuotos Sugrupuotos programos: +IBM MQ Idle Standby V9.0.3 + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Tarptautinë programos licencinë sutartis (Z125-3301-14). + +Programos pavadinimas (Programos numeris): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Ðios standartinës sàlygos taikomos Licenciato Programos naudojimui. + +Riboto naudojimo teisë + +Kaip nurodyta Tarptautinëje programos licencinëje sutartyje (IPLA) ir ðioje Licencijos informacijoje, IBM suteikia licenciatui ribotà teisæ naudoti Programà. Ði teisë apsiriboja Ágaliotojo naudojimo lygiu, pvz., Procesoriaus vertës vieneto (PVV) Iðtekliø vertës vieneto (IVV), Vertës vieneto (VV) ar kitu nurodytu naudojimo lygiu, apmokamu Licenciato ir nurodytu Teisiø suteikimo dokumente. Licenciato naudojimas taip pat gali bûti apribotas tik nurodytame kompiuteryje ar tik kaip Pagalbinës programos, ar taikant kitus apribojimus. Kai Licenciatas nëra sumokëjæs uþ visà Programos ekonominæ vertæ, joks kitas naudojimas neleidþiamas nemokant papildomø mokesèiø. Be to, Licenciatas neturi teisës naudoti Programos komercinëms IT paslaugoms teikti jokiai treèiajai ðaliai, taip pat teikti komercinæ iðtekliø nuomà ar laiko paskirstymà, teikti antrinæ Programos licencijà ar jà nuomoti, jei tai nëra aiðkiai nurodyta taikomose sutartyse, pagal kurias Licenciatas ágyja teisæ naudoti Programà. Licenciatas gali naudotis papildomomis teisëmis sumokëjæs papildomà mokestá ar pagal kitas papildomas sàlygas. IBM pasilieka teisæ nuspræsti, ar Licenciatas galës pasinaudoti tokiomis papildomomis teisëmis. + +Specifikacijos + +Programos specifikacijas galima rasti Programos praneðimø bendruosiuose Apraðo ir techninës informacijos skyriuose. + +Sugrupuotos programos + +Programa yra licencijuojama kaip keliø produktø paketas ir apima toliau nurodytas Sugrupuotas programas. Licenciatas ágaliotas diegti ir naudoti ðias Sugrupuotas programas tik kaip nurodyta Programos Teisiø suteikimo dokumente ir ðiame Licencijos informacijos dokumente. Licenciatas nëra ágaliotas perduoti arba perparduoti Sugrupuotø programø atskirai nuo keliø produktø paketo. Sugrupuota programa gali bûti pateikiama su licencijos sàlygomis ir ðios sàlygos, jei tokiø yra, taikomos Sugrupuotà programà naudojanèiam Licenciatui. Ávykus ginèui ðiame Licencijos informacijos dokumente pateiktos sàlygos pakeièia Sugrupuotos programos sàlygas. Kai Licenciato teisë naudoti Programà baigiasi arba nutraukiama, Licenciatas privalo nutraukti naudojimà, sunaikinti arba nedelsdamas gràþinti visas Sugrupuotø programø kopijas ðaliai, ið kurios Licenciatas ásigijo Programà. Jeigu Licenciatas Sugrupuotas programas atsisiuntë, jis turi susisiekti su ðalimi, ið kurios Licenciatas ásigijo Programà. Jei Licenciatas nori licencijuoti Sugrupuotas programas naudoti ilgiau, nei nurodyta anksèiau, norëdami gauti atitinkamà licencijà, kreipkitës á IBM pardavimo atstovà arba ðalá, ið kurios Licenciatas ásigijo Programà. + +Toliau iðvardytos kartu su Programa licencijuotos Sugrupuotos programos: +IBM MQ Idle Standby V9.0.3 + +Suteikiant bûtinas teises nenaudojami komponentai + +Nustatant teisiø, reikalingø Licenciato Programai ádiegti arba naudoti, skaièiø, neatsiþvelgiama á toliau nurodytø Programos komponentø diegimà arba naudojimà. Kitaip tariant, Licenciatas gali diegti ir naudoti toliau nurodytus Programos komponentus pagal licencijos sàlygas, taèiau ðie komponentai nenaudojami Programai reikalingø teisiø skaièiui nustatyti. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + +Ðie matavimo vienetai gali bûti taikomi Licenciato Programos naudojimui. + +Procesoriaus vertës vienetas (PVV) + +Procesoriaus vertës vienetas (PVV) yra matavimo vienetas, pagal kurá licencijuota ði Programa. Reikalingø PVV teisiø skaièius pagrástas procesoriaus technologija (PVV lentelëje nurodytas procesoriaus tiekëjas, prekës þenklas, tipas ir modelio numeris: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ir Programai prieinamø procesoriø skaièiumi. Licencijuodama pagal PVV IBM apibrëþia procesoriø kaip mikroschemoje esanèià atskirà procesoriaus ðerdá. Pavyzdþiui, dviejø ðerdþiø procesoriaus mikroschemoje yra dvi procesoriaus ðerdys. + +Licenciatas gali diegti Programà naudodamas Visos talpos licencijavimà arba Virtualizavimo talpos (talpos dalies) licencijavimà pagal ¥Passport Advantage´ talpos dalies licencijavimo sàlygas (þr. tinklalapá toliau). Naudodamas Visos talpos licencijavimà Licenciatas privalo ásigyti PVV teises, apimanèias visas fizinëje techninës árangos aplinkoje esanèias suaktyvintas procesoriaus ðerdis*, kurias pasiekia arba valdo Programa, iðskyrus serverius, ið kuriø Programa buvo visam laikui paðalinta. Naudodamas Virtualizavimo talpos licencijavimà Licenciatas privalo ásigyti teises, apimanèias visas suaktyvintas procesoriaus ðerdis, kurias pasiekia arba valdo Programa, kaip apibrëþta Virtualizavimo talpos licencijos skaièiavimo taisyklëse: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Suaktyvinta procesoriaus ðerdis ? tai procesoriaus ðerdis, kurià gali naudoti fizinis arba virtualusis serveris, neatsiþvelgiant á tai, ar procesoriaus ðerdies talpa gali bûti arba yra apribota naudojant virtualizavimo technologijas, operacinës sistemos komandas, BIOS nustatymus ar panaðius apribojimus. + +Be anksèiau nurodytos informacijos, toliau nurodytos sàlygos taikomos Licenciato Programos naudojimui. + +Laukimo bûsenos budëjimo konfigûracijos + +Ðiame skyriuje ¥Laukimo bûsenos budëjimo´ konfigûracija laikoma tokia, kai Programos kopija ádiegiama serveryje, kuris yra gero pasiekiamumo sprendimo dalis ir á kurá Programa permetama, jei aktyviajame serveryje Programos kopija tampa nebenaudojama. Serveris laikomas veikianèiu laukimo reþimu tik tada, jei, iki ávykstant permetimui, jis yra naudojamas tik administraciniams veiksmams atlikti, kurie padeda vykdant permetimo scenarijus. + +Programa negali bûti diegiama Laukimo bûsenos budëjimo serveryje, iðskyrus atvejus, kai yra tinkama licencija. + +Jeigu Programos Laukimo bûsenos budëjimo konfigûracija naudojama su Keliø egzemplioriø eiliø tvarkytuvo funkcija, Programos kopija gali bûti laikoma Laukimo bûsenos budëjimo serveryje kaip atsarginë kopija ir gali bûti paleidþiama. Taèiau ji turi likti laukimo bûsenos ir neturi bûti naudojama jokiais gamybiniais tikslais, nebent aktyvus serveris permetamas á Laukimo bûsenos budëjimo serverá. Tokiu atveju permetimo laikotarpiu Laukimo bûsenos budëjimo kopija gali bûti naudojama gamybiniais tikslais. + +Jeigu Programos Laukimo bûsenos budëjimo konfigûracija naudojama su kitomis Gero pasiekiamumo sistemomis, Programos kopija gali bûti laikoma Laukimo bûsenos budëjimo serveryje kaip atsarginë kopija, bet negali bûti paleidþiama (ir todël negali bûti naudojama jokiais gamybiniais tikslais). Nustojus veikti aktyviam serveriui, jà automatiðkai paleis Gero pasiekiamumo komponentai. Tokiu atveju permetimo laikotarpiu Laukimo bûsenos budëjimo kopija gali bûti naudojama gamybiniais tikslais. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +SVARBU: ATIDÞIAI PERSKAITYKITE + +Toliau pateiktos dvi licencinës sutartys. + +1. Programø ávertinimo IBM tarptautinë licencinë sutartis +2. IBM tarptautinë programos licencinë sutartis + +Jei Licenciatas ásigyja Programà gamybos tikslais (iðskyrus ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su IBM tarptautinës programos licencinës sutarties sàlygomis be jokiø pakeitimø. + +Jei Licenciatas ásigyja Programà ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo tikslais (bendrai ¥Ávertinimas´): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su (i) Programø ávertinimo IBM tarptautinës licencinës sutarties (¥Ávertinimo licencija´) sàlygomis be jokiø pakeitimø ir (ii) IBM tarptautinës programos licencinës sutarties (¥IPLA´) sàlygomis be jokiø pakeitimø. + +Ávertinimo licencija bus taikoma Licenciato atliekamo ávertinimo metu. + +IPLA bus automatiðkai taikoma, jei po Ávertinimo Licenciatas apsispræs pasilikti Programà (arba po Ávertinimo ásigys naudoti papildomas Programos kopijas) ir sudarys ásigijimo sutartá (pvz., IBM ¥International Passport Advantage´ arba IBM ¥Passport Advantage Express´ sutartá (-is). + +Ávertinimo licencija ir IPLA negalioja vienu metu, nepakeièia viena kitos ir yra viena nuo kitos nepriklausomos. + +Visas abiejø licenciniø sutarèiø tekstas pateikiamas. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Programø ávertinimo tarptautinë licencinë sutartis (Z125-5543-05). + +Programos pavadinimas (Programos numeris): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Ðios standartinës sàlygos taikomos Licenciato Programos naudojimui. + +Ávertinimo laikotarpis + +Ávertinimo laikotarpis prasideda nuo Licenciato sutikimo su ðios Sutarties sàlygomis dienos ir baigiasi po 90 dienø. + +Sugrupuotos programos + +Programa yra licencijuojama kaip keliø produktø paketas ir apima toliau nurodytas Sugrupuotas programas. Licenciatas ágaliotas diegti ir naudoti ðias Sugrupuotas programas tik kaip nurodyta Programos Teisiø suteikimo dokumente ir ðiame Licencijos informacijos dokumente. Licenciatas nëra ágaliotas perduoti arba perparduoti Sugrupuotø programø atskirai nuo keliø produktø paketo. Sugrupuota programa gali bûti pateikiama su licencijos sàlygomis ir ðios sàlygos, jei tokiø yra, taikomos Sugrupuotà programà naudojanèiam Licenciatui. Ávykus ginèui ðiame Licencijos informacijos dokumente pateiktos sàlygos pakeièia Sugrupuotos programos sàlygas. Kai Licenciato teisë naudoti Programà baigiasi arba nutraukiama, Licenciatas privalo nutraukti naudojimà, sunaikinti arba nedelsdamas gràþinti visas Sugrupuotø programø kopijas ðaliai, ið kurios Licenciatas ásigijo Programà. Jeigu Licenciatas Sugrupuotas programas atsisiuntë, jis turi susisiekti su ðalimi, ið kurios Licenciatas ásigijo Programà. Jei Licenciatas nori licencijuoti Sugrupuotas programas naudoti ilgiau, nei nurodyta anksèiau, norëdami gauti atitinkamà licencijà, kreipkitës á IBM pardavimo atstovà arba ðalá, ið kurios Licenciatas ásigijo Programà. + +Toliau iðvardytos kartu su Programa licencijuotos Sugrupuotos programos: +IBM MQ V9.0.3 + +Kûrëjo ribojimas + +Jei Programa paþymëta kaip skirta ¥Kûrëjams´, Programà kûrëjo kompiuteryje galima diegti tik kaip Licenciato vidinio kûrimo ir árenginiø testavimo paskirties dalá. Kûrëjo kompiuteris ? tai fizinë arba kompiuterio virtualioji aplinka, kurioje veikia pagrindinë operacinë sistema ir Programa, prie kuriø prieigà turi ir kurias naudoja ne daugiau nei vienas nurodytas kûrëjas. Licenciatas neturi teisës naudoti Programos gamybos darbo krûviams apdoroti, gamybos darbo krûviams modeliuoti arba bet kurio kodo, taikomosios programos arba sistemos pritaikomumui tikrinti. Licenciatas neturi teisës naudoti bet kurios Programos dalies bet kokiais kitais tikslais, jei nëra ásigijæs atitinkamø gamybos teisiø. + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Tarptautinë programos licencinë sutartis (Z125-3301-14). + +Programos pavadinimas (Programos numeris): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Ðios standartinës sàlygos taikomos Licenciato Programos naudojimui. + +Riboto naudojimo teisë + +Kaip nurodyta Tarptautinëje programos licencinëje sutartyje (IPLA) ir ðioje Licencijos informacijoje, IBM suteikia licenciatui ribotà teisæ naudoti Programà. Ði teisë apsiriboja Ágaliotojo naudojimo lygiu, pvz., Procesoriaus vertës vieneto (PVV) Iðtekliø vertës vieneto (IVV), Vertës vieneto (VV) ar kitu nurodytu naudojimo lygiu, apmokamu Licenciato ir nurodytu Teisiø suteikimo dokumente. Licenciato naudojimas taip pat gali bûti apribotas tik nurodytame kompiuteryje ar tik kaip Pagalbinës programos, ar taikant kitus apribojimus. Kai Licenciatas nëra sumokëjæs uþ visà Programos ekonominæ vertæ, joks kitas naudojimas neleidþiamas nemokant papildomø mokesèiø. Be to, Licenciatas neturi teisës naudoti Programos komercinëms IT paslaugoms teikti jokiai treèiajai ðaliai, taip pat teikti komercinæ iðtekliø nuomà ar laiko paskirstymà, teikti antrinæ Programos licencijà ar jà nuomoti, jei tai nëra aiðkiai nurodyta taikomose sutartyse, pagal kurias Licenciatas ágyja teisæ naudoti Programà. Licenciatas gali naudotis papildomomis teisëmis sumokëjæs papildomà mokestá ar pagal kitas papildomas sàlygas. IBM pasilieka teisæ nuspræsti, ar Licenciatas galës pasinaudoti tokiomis papildomomis teisëmis. + +Specifikacijos + +Programos specifikacijas galima rasti Programos praneðimø bendruosiuose Apraðo ir techninës informacijos skyriuose. + +Sugrupuotos programos + +Programa yra licencijuojama kaip keliø produktø paketas ir apima toliau nurodytas Sugrupuotas programas. Licenciatas ágaliotas diegti ir naudoti ðias Sugrupuotas programas tik kaip nurodyta Programos Teisiø suteikimo dokumente ir ðiame Licencijos informacijos dokumente. Licenciatas nëra ágaliotas perduoti arba perparduoti Sugrupuotø programø atskirai nuo keliø produktø paketo. Sugrupuota programa gali bûti pateikiama su licencijos sàlygomis ir ðios sàlygos, jei tokiø yra, taikomos Sugrupuotà programà naudojanèiam Licenciatui. Ávykus ginèui ðiame Licencijos informacijos dokumente pateiktos sàlygos pakeièia Sugrupuotos programos sàlygas. Kai Licenciato teisë naudoti Programà baigiasi arba nutraukiama, Licenciatas privalo nutraukti naudojimà, sunaikinti arba nedelsdamas gràþinti visas Sugrupuotø programø kopijas ðaliai, ið kurios Licenciatas ásigijo Programà. Jeigu Licenciatas Sugrupuotas programas atsisiuntë, jis turi susisiekti su ðalimi, ið kurios Licenciatas ásigijo Programà. Jei Licenciatas nori licencijuoti Sugrupuotas programas naudoti ilgiau, nei nurodyta anksèiau, norëdami gauti atitinkamà licencijà, kreipkitës á IBM pardavimo atstovà arba ðalá, ið kurios Licenciatas ásigijo Programà. + +Toliau iðvardytos kartu su Programa licencijuotos Sugrupuotos programos: +IBM MQ V9.0.3 + +Kûrëjo ribojimas + +Jei Programa paþymëta kaip skirta ¥Kûrëjams´, Programà kûrëjo kompiuteryje galima diegti tik kaip Licenciato vidinio kûrimo ir árenginiø testavimo paskirties dalá. Kûrëjo kompiuteris ? tai fizinë arba kompiuterio virtualioji aplinka, kurioje veikia pagrindinë operacinë sistema ir Programa, prie kuriø prieigà turi ir kurias naudoja ne daugiau nei vienas nurodytas kûrëjas. Licenciatas neturi teisës naudoti Programos gamybos darbo krûviams apdoroti, gamybos darbo krûviams modeliuoti arba bet kurio kodo, taikomosios programos arba sistemos pritaikomumui tikrinti. Licenciatas neturi teisës naudoti bet kurios Programos dalies bet kokiais kitais tikslais, jei nëra ásigijæs atitinkamø gamybos teisiø. + +Suteikiant bûtinas teises nenaudojami komponentai + +Nustatant teisiø, reikalingø Licenciato Programai ádiegti arba naudoti, skaièiø, neatsiþvelgiama á toliau nurodytø Programos komponentø diegimà arba naudojimà. Kitaip tariant, Licenciatas gali diegti ir naudoti toliau nurodytus Programos komponentus pagal licencijos sàlygas, taèiau ðie komponentai nenaudojami Programai reikalingø teisiø skaièiui nustatyti. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + +Ðie matavimo vienetai gali bûti taikomi Licenciato Programos naudojimui. + +Ádiegtis + +Ádiegtis yra matavimo vienetas, kuriuo remiantis gali bûti licencijuojama ði Programa. Ádiegtis ? tai fiziniame arba virtualiajame diske ádiegta Programos kopija, kurià galima vykdyti kompiuteryje. Licenciatas privalo ásigyti teises kiekvienai Programos Ádiegèiai. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +SVARBU: ATIDÞIAI PERSKAITYKITE + +Toliau pateiktos dvi licencinës sutartys. + +1. Programø ávertinimo IBM tarptautinë licencinë sutartis +2. IBM tarptautinë programos licencinë sutartis + +Jei Licenciatas ásigyja Programà gamybos tikslais (iðskyrus ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su IBM tarptautinës programos licencinës sutarties sàlygomis be jokiø pakeitimø. + +Jei Licenciatas ásigyja Programà ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo tikslais (bendrai ¥Ávertinimas´): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su (i) Programø ávertinimo IBM tarptautinës licencinës sutarties (¥Ávertinimo licencija´) sàlygomis be jokiø pakeitimø ir (ii) IBM tarptautinës programos licencinës sutarties (¥IPLA´) sàlygomis be jokiø pakeitimø. + +Ávertinimo licencija bus taikoma Licenciato atliekamo ávertinimo metu. + +IPLA bus automatiðkai taikoma, jei po Ávertinimo Licenciatas apsispræs pasilikti Programà (arba po Ávertinimo ásigys naudoti papildomas Programos kopijas) ir sudarys ásigijimo sutartá (pvz., IBM ¥International Passport Advantage´ arba IBM ¥Passport Advantage Express´ sutartá (-is). + +Ávertinimo licencija ir IPLA negalioja vienu metu, nepakeièia viena kitos ir yra viena nuo kitos nepriklausomos. + +Visas abiejø licenciniø sutarèiø tekstas pateikiamas. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Programø ávertinimo tarptautinë licencinë sutartis (Z125-5543-05). + +Programos pavadinimas: IBM MQ Managed File Transfer Service V9.0.1 +Programos numeris: Evaluation + +Programos pavadinimas: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Programos numeris: Evaluation + +Programos pavadinimas: IBM MQ Managed File Transfer Agent V9.0.1 +Programos numeris: Evaluation + +Ávertinimo laikotarpis + +Ávertinimo laikotarpis prasideda nuo Licenciato sutikimo su ðios Sutarties sàlygomis dienos ir baigiasi po 90 dienø. + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Tarptautinë programos licencinë sutartis (Z125-3301-14). + +Programos pavadinimas: IBM MQ Managed File Transfer Service V9.0.1 +Programos numeris: 5724-H72 + +Programos pavadinimas: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Programos numeris: 5724-H72 + +Programos pavadinimas: IBM MQ Managed File Transfer Agent V9.0.1 +Programos numeris: 5724-H72 + +Kaip nurodyta Tarptautinëje programos licencinëje sutartyje (IPLA) ir ðioje Licencijos informacijoje, IBM suteikia licenciatui ribotà teisæ naudoti Programà. Ði teisë apsiriboja Ágaliotojo naudojimo lygiu, pvz., Procesoriaus vertës vieneto (PVV) Iðtekliø vertës vieneto (IVV), Vertës vieneto (VV) ar kitu nurodytu naudojimo lygiu, apmokamu Licenciato ir nurodytu Teisiø suteikimo dokumente. Licenciato naudojimas taip pat gali bûti apribotas tik nurodytame kompiuteryje ar tik kaip Pagalbinës programos, ar taikant kitus apribojimus. Kai Licenciatas nëra sumokëjæs uþ visà Programos ekonominæ vertæ, joks kitas naudojimas neleidþiamas nemokant papildomø mokesèiø. Be to, Licenciatas neturi teisës naudoti Programos komercinëms IT paslaugoms teikti jokiai treèiajai ðaliai, taip pat teikti komercinæ iðtekliø nuomà ar laiko paskirstymà, teikti antrinæ Programos licencijà ar jà nuomoti, jei tai nëra aiðkiai nurodyta taikomose sutartyse, pagal kurias Licenciatas ágyja teisæ naudoti Programà. Licenciatas gali naudotis papildomomis teisëmis sumokëjæs papildomà mokestá ar pagal kitas papildomas sàlygas. IBM pasilieka teisæ nuspræsti, ar Licenciatas galës pasinaudoti tokiomis papildomomis teisëmis. + +Programos specifikacijas galima rasti Programos praneðimø bendruosiuose Apraðo ir techninës informacijos skyriuose. + +Perskirstymo paketai + +Jeigu á Programà átraukti Perskirstomieji komponentai, jie bus nurodyti REDIST faile, pateiktame kartu su Programa. Kartu su Sutarties suteiktomis licencijos teisëmis Licenciatas gali platinti Perskirstymo komponentus laikydamasis ðiø sàlygø: +1) perskirstymas turi vykti tik objekto kodo forma ir turi atitikti visus Programos REDIST ar lydraðtyje pateiktus nurodymus, instrukcijas ir specifikacijas; +2) jei Programos lydraðtyje aiðkiai nurodyta, kad Licenciatui leidþiama modifikuoti Perskirstymo paketus, tokios modifikacijos turi atitikti visus toje dokumentacijoje pateiktus nurodymus, instrukcijas ir specifikacijas, ir ðios modifikacijos, jei tokiø yra, turi bûti laikomos Perskirstymo paketais; +3) Perskirstymo paketai gali bûti platinami tik kaip Licenciato taikomosios programos, kuri buvo sukurta naudojant Programà, (¥Licenciato taikomoji programa´) dalis ir tik Licenciato klientø naudojamai Licenciato taikomajai programai palaikyti. Licenciato taikomoji programa turi teikti svarbià pridëtinæ vertæ taip, kad Licenciato taikomosios programos produkto galutiniai vartotojai nebûtø motyvuoti ásigyti Perskirstymo paketus; +4) jeigu á Perskirstymo paketus átraukta ¥Java´ vykdymo aplinka, Licenciatas taip pat privalo á Licenciato taikomàjà programà átraukti kitus ne ¥Java´ Perskirstymo paketus, nebent Taikomoji programa sukurta veikti tik bendruosiuose kompiuteriø árenginiuose (pavyzdþiui, skreitiniuose, staliniuose kompiuteriuose ir serveriuose), o ne kiðeniniuose ar kituose skvarbiuosiuose árenginiuose (t. y. árenginiuose, kurie turi mikroprocesoriø, taèiau kuriø kompiuterio funkcijos nëra pirminis naudojimo tikslas); +5) Licenciatas negali paðalinti jokiø Perskirstymo paketuose esanèiø autoriaus teisiø arba pastabø failø; +6) Licenciatas nelaikys IBM, jos tiekëjø arba platintojø atsakingais uþ jokias pretenzijas, susijusias su Licenciato taikomosios programos naudojimu ar platinimu; +7) Licenciatas negali naudoti tokio paties kaip originaliø Perskirstymo paketø failø / moduliø kelio pavadinimo; +8) Parduodamas Licenciato taikomàjà programà Licenciatas negali naudoti IBM, jos tiekëjø arba platintojø pavadinimø arba prekiø þenklø, neturëdamas IBM, to tiekëjo arba platintojo iðankstinio raðtiðko sutikimo; +9) IBM, jos tiekëjai ir platintojai pateikia Perskirstymo paketus ir susijusià dokumentacijà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKDAMI JOKIOS APIBRËÞTOS AR NUMANOMOS GARANTIJOS, ÁSKAITANT PAVADINIMO, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NUMANOMAS TINKAMUMO PREKYBAI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS; +10) Licenciatas atsakingas uþ visà techninæ pagalbà, susijusià su Licenciato taikomàja programa, ir uþ bet kokias Perskirstymo paketø modifikacijas; ir +11) Licenciato ir Licenciato taikomosios programos galutinio vartotojo licencijos sutartis turi áspëti galutiná vartotojà, kad Perskirstymo paketø arba jø modifikavimø negalima i) naudoti kitu tikslu, nei Licenciato taikomajai programai ágalinti, ii) kopijuoti (iðskyrus kuriant atsarginæ kopijà), iii) platinti ar perduoti naudoti be Licenciato taikomosios programos, arba iv) iðardyti, dekompiliuoti ar kitaip versti, iðskyrus, jei tai aiðkiai leidþia teisës aktai ir nepaþeidþiami sutartiniai ásipareigojimai. Be to, Licenciato licencinë sutartis turi bûti sauganti IBM bent tiek, kiek tai apibrëþia ðios Sutarties sàlygos. + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + +Licenciatas gali platinti Programos REDIST faile iðvardytø modifikuotø Ðaltinio komponentø ir Pavyzdinës medþiagos versijas laikydamasis ðios licencijos sàlygø ir REDIST faile pateiktø instrukcijø. + +Ádiegtis + +Ádiegtis yra matavimo vienetas, kuriuo remiantis gali bûti licencijuojama ði Programa. Ádiegtis ? tai fiziniame arba virtualiajame diske ádiegta Programos kopija, kurià galima vykdyti kompiuteryje. Licenciatas privalo ásigyti teises kiekvienai Programos Ádiegèiai. + +Procesoriaus vertës vienetas (PVV) + +Procesoriaus vertës vienetas (PVV) yra matavimo vienetas, pagal kurá licencijuota ði Programa. Reikalingø PVV teisiø skaièius pagrástas procesoriaus technologija (PVV lentelëje nurodytas procesoriaus tiekëjas, prekës þenklas, tipas ir modelio numeris: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ir Programai prieinamø procesoriø skaièiumi. Licencijuodama pagal PVV IBM apibrëþia procesoriø kaip mikroschemoje esanèià atskirà procesoriaus ðerdá. Pavyzdþiui, dviejø ðerdþiø procesoriaus mikroschemoje yra dvi procesoriaus ðerdys. + +Licenciatas gali diegti Programà naudodamas Visos talpos licencijavimà arba Virtualizavimo talpos (talpos dalies) licencijavimà pagal ¥Passport Advantage´ talpos dalies licencijavimo sàlygas (þr. tinklalapá toliau). Naudodamas Visos talpos licencijavimà Licenciatas privalo ásigyti PVV teises, apimanèias visas fizinëje techninës árangos aplinkoje esanèias suaktyvintas procesoriaus ðerdis*, kurias pasiekia arba valdo Programa, iðskyrus serverius, ið kuriø Programa buvo visam laikui paðalinta. Naudodamas Virtualizavimo talpos licencijavimà Licenciatas privalo ásigyti teises, apimanèias visas suaktyvintas procesoriaus ðerdis, kurias pasiekia arba valdo Programa, kaip apibrëþta Virtualizavimo talpos licencijos skaièiavimo taisyklëse: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Suaktyvinta procesoriaus ðerdis ? tai procesoriaus ðerdis, kurià gali naudoti fizinis arba virtualusis serveris, neatsiþvelgiant á tai, ar procesoriaus ðerdies talpa gali bûti arba yra apribota naudojant virtualizavimo technologijas, operacinës sistemos komandas, BIOS nustatymus ar panaðius apribojimus. + +Unikalios programos sàlygos + +Laukimo bûsenos budëjimo konfigûracijos + +Ðiame skyriuje ¥Laukimo bûsenos budëjimo´ konfigûracija laikoma tokia, kai Programos kopija ádiegiama serveryje, kuris yra gero pasiekiamumo sprendimo dalis ir á kurá Programa permetama, jei aktyviajame serveryje Programos kopija tampa nebenaudojama. Serveris laikomas veikianèiu laukimo reþimu tik tada, jei, iki ávykstant permetimui, jis yra naudojamas tik administraciniams veiksmams atlikti, kurie padeda vykdant permetimo scenarijus. + +Programa negali bûti diegiama Laukimo bûsenos budëjimo serveryje, iðskyrus atvejus, kai yra tinkama licencija. + +Jeigu Programos Laukimo bûsenos budëjimo konfigûracija naudojama su Keliø egzemplioriø eiliø tvarkytuvo funkcija, Programos kopija gali bûti laikoma Laukimo bûsenos budëjimo serveryje kaip atsarginë kopija ir gali bûti paleidþiama. Taèiau ji turi likti laukimo bûsenos ir neturi bûti naudojama jokiais gamybiniais tikslais, nebent aktyvus serveris permetamas á Laukimo bûsenos budëjimo serverá. Tokiu atveju permetimo laikotarpiu Laukimo bûsenos budëjimo kopija gali bûti naudojama gamybiniais tikslais. + +Jeigu Programos Laukimo bûsenos budëjimo konfigûracija naudojama su kitomis Gero pasiekiamumo sistemomis, Programos kopija gali bûti laikoma Laukimo bûsenos budëjimo serveryje kaip atsarginë kopija, bet negali bûti paleidþiama (ir todël negali bûti naudojama jokiais gamybiniais tikslais). Nustojus veikti aktyviam serveriui, jà automatiðkai paleis Gero pasiekiamumo komponentai. Tokiu atveju permetimo laikotarpiu Laukimo bûsenos budëjimo kopija gali bûti naudojama gamybiniais tikslais. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +SVARBU: ATIDÞIAI PERSKAITYKITE + +Toliau pateiktos dvi licencinës sutartys. + +1. Programø ávertinimo IBM tarptautinë licencinë sutartis +2. IBM tarptautinë programos licencinë sutartis + +Jei Licenciatas ásigyja Programà gamybos tikslais (iðskyrus ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su IBM tarptautinës programos licencinës sutarties sàlygomis be jokiø pakeitimø. + +Jei Licenciatas ásigyja Programà ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo tikslais (bendrai ¥Ávertinimas´): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su (i) Programø ávertinimo IBM tarptautinës licencinës sutarties (¥Ávertinimo licencija´) sàlygomis be jokiø pakeitimø ir (ii) IBM tarptautinës programos licencinës sutarties (¥IPLA´) sàlygomis be jokiø pakeitimø. + +Ávertinimo licencija bus taikoma Licenciato atliekamo ávertinimo metu. + +IPLA bus automatiðkai taikoma, jei po Ávertinimo Licenciatas apsispræs pasilikti Programà (arba po Ávertinimo ásigys naudoti papildomas Programos kopijas) ir sudarys ásigijimo sutartá (pvz., IBM ¥International Passport Advantage´ arba IBM ¥Passport Advantage Express´ sutartá (-is). + +Ávertinimo licencija ir IPLA negalioja vienu metu, nepakeièia viena kitos ir yra viena nuo kitos nepriklausomos. + +Visas abiejø licenciniø sutarèiø tekstas pateikiamas. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Programø ávertinimo tarptautinë licencinë sutartis (Z125-5543-05). + +Programos pavadinimas: IBM MQ Advanced Message Security V9.0.1 +Programos numeris: Evaluation + +Programos pavadinimas: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Programos numeris: Evaluation + +Programos pavadinimas: IBM MQ Telemetry V9.0.1 +Programos numeris: Evaluation + +Ávertinimo laikotarpis + +Ávertinimo laikotarpis prasideda nuo Licenciato sutikimo su ðios Sutarties sàlygomis dienos ir baigiasi po 90 dienø. + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + + + +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Tarptautinë programos licencinë sutartis (Z125-3301-14). + +Programos pavadinimas: IBM MQ Advanced Message Security V9.0.1 +Programos numeris: 5724-H72 + +Programos pavadinimas: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Programos numeris: 5724-H72 + +Programos pavadinimas: IBM MQ Telemetry V9.0.1 +Programos numeris: 5724-H72 + +Kaip nurodyta Tarptautinëje programos licencinëje sutartyje (IPLA) ir ðioje Licencijos informacijoje, IBM suteikia licenciatui ribotà teisæ naudoti Programà. Ði teisë apsiriboja Ágaliotojo naudojimo lygiu, pvz., Procesoriaus vertës vieneto (PVV) Iðtekliø vertës vieneto (IVV), Vertës vieneto (VV) ar kitu nurodytu naudojimo lygiu, apmokamu Licenciato ir nurodytu Teisiø suteikimo dokumente. Licenciato naudojimas taip pat gali bûti apribotas tik nurodytame kompiuteryje ar tik kaip Pagalbinës programos, ar taikant kitus apribojimus. Kai Licenciatas nëra sumokëjæs uþ visà Programos ekonominæ vertæ, joks kitas naudojimas neleidþiamas nemokant papildomø mokesèiø. Be to, Licenciatas neturi teisës naudoti Programos komercinëms IT paslaugoms teikti jokiai treèiajai ðaliai, taip pat teikti komercinæ iðtekliø nuomà ar laiko paskirstymà, teikti antrinæ Programos licencijà ar jà nuomoti, jei tai nëra aiðkiai nurodyta taikomose sutartyse, pagal kurias Licenciatas ágyja teisæ naudoti Programà. Licenciatas gali naudotis papildomomis teisëmis sumokëjæs papildomà mokestá ar pagal kitas papildomas sàlygas. IBM pasilieka teisæ nuspræsti, ar Licenciatas galës pasinaudoti tokiomis papildomomis teisëmis. + +Programos specifikacijas galima rasti Programos praneðimø bendruosiuose Apraðo ir techninës informacijos skyriuose. + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + +Ádiegtis + +Ádiegtis yra matavimo vienetas, kuriuo remiantis gali bûti licencijuojama ði Programa. Ádiegtis ? tai fiziniame arba virtualiajame diske ádiegta Programos kopija, kurià galima vykdyti kompiuteryje. Licenciatas privalo ásigyti teises kiekvienai Programos Ádiegèiai. + +Procesoriaus vertës vienetas (PVV) + +Procesoriaus vertës vienetas (PVV) yra matavimo vienetas, pagal kurá licencijuota ði Programa. Reikalingø PVV teisiø skaièius pagrástas procesoriaus technologija (PVV lentelëje nurodytas procesoriaus tiekëjas, prekës þenklas, tipas ir modelio numeris: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ir Programai prieinamø procesoriø skaièiumi. Licencijuodama pagal PVV IBM apibrëþia procesoriø kaip mikroschemoje esanèià atskirà procesoriaus ðerdá. Pavyzdþiui, dviejø ðerdþiø procesoriaus mikroschemoje yra dvi procesoriaus ðerdys. + +Licenciatas gali diegti Programà naudodamas Visos talpos licencijavimà arba Virtualizavimo talpos (talpos dalies) licencijavimà pagal ¥Passport Advantage´ talpos dalies licencijavimo sàlygas (þr. tinklalapá toliau). Naudodamas Visos talpos licencijavimà Licenciatas privalo ásigyti PVV teises, apimanèias visas fizinëje techninës árangos aplinkoje esanèias suaktyvintas procesoriaus ðerdis*, kurias pasiekia arba valdo Programa, iðskyrus serverius, ið kuriø Programa buvo visam laikui paðalinta. Naudodamas Virtualizavimo talpos licencijavimà Licenciatas privalo ásigyti teises, apimanèias visas suaktyvintas procesoriaus ðerdis, kurias pasiekia arba valdo Programa, kaip apibrëþta Virtualizavimo talpos licencijos skaièiavimo taisyklëse: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Suaktyvinta procesoriaus ðerdis ? tai procesoriaus ðerdis, kurià gali naudoti fizinis arba virtualusis serveris, neatsiþvelgiant á tai, ar procesoriaus ðerdies talpa gali bûti arba yra apribota naudojant virtualizavimo technologijas, operacinës sistemos komandas, BIOS nustatymus ar panaðius apribojimus. + +Unikalios programos sàlygos + +Laukimo bûsenos budëjimo konfigûracijos + +Ðiame skyriuje ¥Laukimo bûsenos budëjimo´ konfigûracija laikoma tokia, kai Programos kopija ádiegiama serveryje, kuris yra gero pasiekiamumo sprendimo dalis ir á kurá Programa permetama, jei aktyviajame serveryje Programos kopija tampa nebenaudojama. Serveris laikomas veikianèiu laukimo reþimu tik tada, jei, iki ávykstant permetimui, jis yra naudojamas tik administraciniams veiksmams atlikti, kurie padeda vykdant permetimo scenarijus. + +Programa negali bûti diegiama Laukimo bûsenos budëjimo serveryje, iðskyrus atvejus, kai yra tinkama licencija. + +Jeigu Programos Laukimo bûsenos budëjimo konfigûracija naudojama su Keliø egzemplioriø eiliø tvarkytuvo funkcija, Programos kopija gali bûti laikoma Laukimo bûsenos budëjimo serveryje kaip atsarginë kopija ir gali bûti paleidþiama. Taèiau ji turi likti laukimo bûsenos ir neturi bûti naudojama jokiais gamybiniais tikslais, nebent aktyvus serveris permetamas á Laukimo bûsenos budëjimo serverá. Tokiu atveju permetimo laikotarpiu Laukimo bûsenos budëjimo kopija gali bûti naudojama gamybiniais tikslais. + +Jeigu Programos Laukimo bûsenos budëjimo konfigûracija naudojama su kitomis Gero pasiekiamumo sistemomis, Programos kopija gali bûti laikoma Laukimo bûsenos budëjimo serveryje kaip atsarginë kopija, bet negali bûti paleidþiama (ir todël negali bûti naudojama jokiais gamybiniais tikslais). Nustojus veikti aktyviam serveriui, jà automatiðkai paleis Gero pasiekiamumo komponentai. Tokiu atveju permetimo laikotarpiu Laukimo bûsenos budëjimo kopija gali bûti naudojama gamybiniais tikslais. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +SVARBU: ATIDÞIAI PERSKAITYKITE + +Toliau pateiktos dvi licencinës sutartys. + +1. Programø ávertinimo IBM tarptautinë licencinë sutartis +2. IBM tarptautinë programos licencinë sutartis + +Jei Licenciatas ásigyja Programà gamybos tikslais (iðskyrus ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su IBM tarptautinës programos licencinës sutarties sàlygomis be jokiø pakeitimø. + +Jei Licenciatas ásigyja Programà ávertinimo, tikrinimo, bandymo ¥iðbandyti arba pirkti´ arba demonstravimo tikslais (bendrai ¥Ávertinimas´): spustelëjæs toliau esantá mygtukà ¥Sutinku´, Licenciatas sutinka su (i) Programø ávertinimo IBM tarptautinës licencinës sutarties (¥Ávertinimo licencija´) sàlygomis be jokiø pakeitimø ir (ii) IBM tarptautinës programos licencinës sutarties (¥IPLA´) sàlygomis be jokiø pakeitimø. + +Ávertinimo licencija bus taikoma Licenciato atliekamo ávertinimo metu. + +IPLA bus automatiðkai taikoma, jei po Ávertinimo Licenciatas apsispræs pasilikti Programà (arba po Ávertinimo ásigys naudoti papildomas Programos kopijas) ir sudarys ásigijimo sutartá (pvz., IBM ¥International Passport Advantage´ arba IBM ¥Passport Advantage Express´ sutartá (-is). + +Ávertinimo licencija ir IPLA negalioja vienu metu, nepakeièia viena kitos ir yra viena nuo kitos nepriklausomos. + +Visas abiejø licenciniø sutarèiø tekstas pateikiamas. + + +Programø ávertinimo tarptautinë licencinë sutartis + +1 dalis - bendrosios sàlygos + +ATSISIØSDAMAS, DIEGDAMAS, KOPIJUODAMAS, PASIEKDAMAS PROGRAMÀ, SPAUSDAMAS MYGTUKÀ ¥SUTINKU´ AR KITAIS BÛDAIS NAUDODAMAS PROGRAMÀ, LICENCIATAS SUTINKA SU ÐIOS SUTARTIES SÀLYGOMIS.JEIGU SU ÐIOS LICENCIJOS SÀLYGOMIS SUTINKATE LICENCIATO VARDU, JÛS PAREIÐKIATE IR GARANTUOJATE, KAD PRISIIMATE VISÀ ATSAKOMYBÆ UÞ ÐIØ SÀLYGØ LAIKYMÀSI. JEIGU NESUTINKATE SU ÐIOMIS SÀLYGOMIS, + +* NESIØSKITE, NEDIEKITE, NEKOPIJUOKITE, NEBANDYKITE PASIEKTI PROGRAMOS, NESPAUSKITE MYGTUKO ¥SUTINKU´ AR NESINAUDOKITE PROGRAMA; IR + +* NEDELSDAMI GRÀÞINKITE NENAUDOTAS LAIKMENAS IR DOKUMENTACIJÀ ÐALIAI, IÐ KURIOS JUOS GAVOTE. JEI PROGRAMA BUVO ATSISIØSTA, SUNAIKINKITE VISAS PROGRAMOS KOPIJAS. + +1. Apibrëþimai + +¥Ágaliotasis naudojimas´ - numatytas lygis, apibrëþiantis, kaip Licenciatas ágaliotas paleisti ir vykdyti Programà. Ðis lygis gali bûti nustatomas pagal naudotojø skaièiø, paslaugø vienetø milijonus (MPV), procesoriaus vertës vienetus (PVV) arba kitus naudojimo lygius, kuriuos nurodo IBM. + +IBM - ¥International Business Machines Corporation´ arba vienas ið jos filialø. + +¥Licencijos informacija´ (LI) - dokumentas, kuriame pateikta specifinë informacija apie Programà ir papildomos sàlygos. Programos LI galima rasti Programos kataloge, naudojant sisteminæ komandà, arba lankstinuke, kuris pridëtas prie Programos. + +¥Programa´ - ðie iðvardyti dalykai, jø originalai ir visos iðsamios arba dalinës kopijos: 1) kompiuterio skaitomos instrukcijos ir duomenys, 2) komponentai, failai ir moduliai, 3) garsinë ir vaizdinë medþiaga (pvz., vaizdai, tekstas, áraðai ar paveikslëliai), ir 4) susijusi licencijos medþiaga (tokia, kaip raktai ir dokumentacija). + +2. Sutarties struktûra + +Ðià sutartá sudaro: 1 dalis - bendrosios sàlygos, 2 dalis - konkreèiai ðaliai taikomos sàlygos (jei tokiø yra) ir LI. Tai yra galutinis susitarimas tarp Licenciato ir IBM dël naudojimosi Programa. Ji pakeièia bet koká ankstesná þodiná ar raðtiná bendravimà tarp Licenciato ir IBM, kuriø metu buvo aptariamas Licenciato naudojimasis Programa. 2 dalies sàlygos gali pakeisti 1 dalies sàlygas. Atsiradus bet kokiems prieðtaravimams, bus remiamasi LI. + +3. Licencijos suteikiamos teisës + +Programa yra IBM arba IBM platintojo nuosavybë, ginama autoriaus teisiø, naudojimuisi ja suteikiama licencija, bet ji nëra parduodama. + +IBM suteikia Licenciatui apribotà, neiðimtinæ, neperduodamà licencijà 1) atsisiøsti, diegti ir naudotis Programa vertinimo laikotarpiu pagal Ágaliotojo naudojimo sàlygas, nurodytas LI, iðskirtinai vidinio vertinimo, tikrinimo arba demonstravimo tikslais, 2) kurti ir diegti pagrástà skaièiø kopijø, kurios palaikytø Ágaliotàjá naudojimàsi, ir 3) kurti atsarginæ kopijà su sàlyga, kad + +a. Licenciatas teisëtai ásigijo Programà ir laikosi ðios Sutarties sàlygø; + +b. atsarginë kopija nepaleidþiama, nebent neveikia pati Programa, kurios atsarginë kopija sukurta; + +c. Licenciatas ant kiekvienos Programos iðsamios ar dalinës kopijos nurodo visà autoriaus teisiø informacijà bei kitus nuosavybës þenklus; + +d. Licenciatas valdo visø Programos kopijø áraðus ir uþtikrina, kad kiekvienas, kuris naudojasi Programa (vietine ar nuotoline prieiga) 1) naudojasi tik Licenciato vardu ir 2) laikosi ðios Sutarties sàlygø; + +e. Licenciatas 1) nenaudoja Programos gamybos tikslais arba nenaudoja, nekopijuoja, nekeièia ir neplatina Programos kitais tikslais, nei aiðkiai leidþiama ðioje Sutartyje; 2) nebando iðardyti, dekompiliuoti, kitaip versti ar atkurti Programos, nebent tai aiðkiai leidþia ástatymai, nenumatant sutartinio atleidimo nuo ásipareigojimø; 3) nenaudoja jokiø Programos komponentø, failø, moduliø, garsinio ir vaizdinio turinio ar susijusios licencijuotos medþiagos atskirai nuo Programos; 4) neiðduoda licencijos treèiajai ðaliai, nenuomoja ir iðperkamosios nuomos pagrindais nesuteikia Programos; arba 5) nenaudoja Programos teikdamas komercinæ taikomøjø programø iðtekliø nuomà; ir + +f. jei Licenciatas ágyja ðià Programà kaip Pagalbinæ programà, Licenciatas naudoja ðià Programà tik kaip pagalbinæ priemonæ, palaikanèià Pagrindinæ programà, jai taikomi bet kokie Pagrindinës programos licencijos apribojimai, arba, jei Licenciatas ágyja ðià programà kaip Pagrindinæ programà, Licenciatas naudoja visas Pagalbines programas tik ðiai Programai palaikyti, jai taikomi bet kokie ðios Sutarties apribojimai. Ðiame punkte ¥f´ ¥Pagalbinë programa´ yra Programa, kuri yra kitos IBM Programos (¥Pagrindinës programos´) dalis ir kuri Pagrindinës programos LI yra nurodoma kaip Pagalbinë programa. (Norëdamas gauti atskirà Pagalbinës programos licencijà be ðiø apribojimø, Licenciatas turëtø susisiekti ðalimi, ið kurios ásigijo Pagalbinæ programà.) + +Ði licencija taikoma kiekvienai Licenciato padarytai Programos kopijai. + +3.1 Atnaujinimai, pataisos ir taisymai + +Kai Licenciatas gauna Programos atnaujinimà, pataisà ar pataisymà, Licenciatas sutinka su bet kokiomis papildomomis ar skirtingomis sàlygomis, taikomomis ðiems atnaujinimas, pataisoms ar pataisymams, kurios yra nurodytos LI. Jei nepateikta jokiø papildomø ar pakeistø sàlygø, tuomet atnaujinimui, pataisai ar pataisymui taikomos tik ðios Sutarties sàlygos. Jei Programa pakeièiama atnaujinimu, Licenciatas sutinka nedelsdamas nutraukti pakeistos Programos naudojimà. + +3.2 Terminas ir sutarties nutraukimas + +Vertinimo laikotarpis prasideda tada, kai Licenciatas sutinka su ðios Sutarties sàlygomis ir pasibaigia 1) praëjus laikotarpiui arba dienà, kurià IBM nurodë Licencijos informacijos arba perdavimo dokumente, arba 2) dienà, kai Programa automatiðkai iðsijungia. Licenciatas sunaikins Programà ir visas sukurtas jos kopijas per deðimt dienø po vertinimo laikotarpio pabaigos. Jeigu IBM nurodo LI, kad Licenciatas gali pasilikti Programà, ir Licenciatas pasinaudoja ðia sàlyga, Programai bus taikoma kita licencinë sutartis, kurià IBM pateiks Licenciatui. Be to, gali bûti taikomas mokestis. + +IBM gali nutraukti Licenciato licencijà, jei Licenciatas nesilaiko Sutarties sàlygø. Jei licencija yra nutraukiama bet kurios ðalies iniciatyva dël bet kokios prieþasties, Licenciatas sutinka nedelsdamas nutraukti Programos naudojimà ir sunaikinti visas turimas Programos kopijas. Jei tam tikros Sutarties sàlygos dël savo pobûdþio iðlieka galioti po Sutarties nutraukimo, jos galioja, kol bus ávykdytos, ir taikomos abiejø ðaliø atitinkamiems teisiø perëmëjams ir ágaliotiniams. + +PROGRAMOJE GALI BÛTI IÐJUNGIMO ÁRENGINYS, KURIS APSAUGO NUO PROGRAMOS NAUDOJIMO PASIBAIGUS VERTINIMO LAIKOTARPIUI. LICENCIATAS SUTINKA NELIESTI ÐIO IÐJUNGIMO ÁRENGINIO ARBA PROGRAMOS. LICENCIATAS TURI IMTIS ATSARGUMO PRIEMONIØ, KAD NEPRARASTØ DUOMENØ TADA, KAI PROGRAMOS NEBEBUS GALIMA NAUDOTI. + +4. Mokëjimas + +Mokestis uþ Programos naudojimà vertinimo laikotarpiu netaikomas. + +5. Garantijø atsisakymas + +PAGAL ÁSTATYMO NUSTATYTAS GARANTIJAS, KURIØ NEGALIMA NEÁTRAUKTI, ¥IBM´ NESUTEIKIA JOKIØ SU PROGRAMA AR PALAIKYMO PASLAUGOMIS (JEI TOKIOS TEIKIAMOS) SUSIJUSIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ ARBA SÀLYGØ, ÁSKAITANT, BET NEAPSIRIBOJANT, NENURODYTAS TINKAMUMO PREKIAUTI, TINKAMUMO TAM TIKRAM TIKSLUI, NUOSAVYBËS TEISËS IR BET KOKIAS NEPAÞEIDÞIAMUMO GARANTIJAS ARBA SÀLYGAS. + +KAI KURIOSE VALSTYBËSE ARBA JURISDIKCIJOSE NELEIDÞIAMOS AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ IÐIMTYS, TODËL ÈIA NURODYTA IÐIMTIS LICENCIATUI GALI BÛTI NETAIKOMA. TOKIU ATVEJU ÐIØ GARANTIJØ TAIKYMAS APRIBOJAMAS MINIMALIA TEISËS AKTUOSE NUMATYTA TRUKME. ÐIAM LAIKOTARPIUI PRAËJUS NEBETAIKOMOS JOKIOS GARANTIJOS. KAI KURIOSE VALSTYBËSE AR JURISDIKCIJOSE NELEIDÞIAMA RIBOTI NUMANOMOS GARANTIJOS TRUKMËS, TODËL AUKÐÈIAU PATEIKTI APRIBOJIMAI LICENCIATUI GALI BÛTI NETAIKOMI.LICENCIATAS TAIP PAT GALI TURËTI KITØ TEISIØ, KURIOS SKIRSIS PRIKLAUSOMAI NUO VALSTYBËS ARBA JURISDIKCIJOS. + +5 SKYRIUJE NURODYTI ATSAKOMYBËS ATSISAKYMAI IR IÐIMTYS TAIP PAT TAIKOMI VISIEMS ¥IBM´ PROGRAMØ KÛRËJAMS IR TIEKËJAMS. + +NE ¥IBM´ PROGRAMØ GAMINTOJAI, TIEKËJAI ARBA LEIDËJAI GALI TEIKTI SAVO GARANTIJAS. + +¥IBM´ NETEIKIA JOKIO PALAIKYMO, JEI ¥IBM´ NENURODO KITAIP. TOKIU ATVEJU BET KOKIAM ¥IBM´ SUTEIKTAM PALAIKYMUI TAIKOMOS 5 SKYRIUJE NURODYTØ PANEIGIMØ IR IÐIMÈIØ SÀLYGOS. + +6. Licenciato duomenys ir duomenø bazës + +Siekdama padëti Licenciatui iðspræsti su Programa susijusias problemas, IBM gali papraðyti, kad Licenciatas 1) leistø IBM nuotoliniu bûdu prisijungti prie Licenciato sistemos arba 2) atsiøstø savo informacijà ar sistemos duomenis á IBM. Taèiau IBM neprivalo teikti tokios pagalbos, nebent IBM ir Licenciatas pasiraðo atskirà susitarimà, kuriame IBM sutinka teikti Licenciatui tokio pobûdþio palaikymà, kuris nëra numatytas ðios Sutarties IBM ásipareigojimuose. Bet kokiu atveju IBM naudoja informacijà apie klaidas ir problemas savo produktams ir paslaugoms tobulinti ir techninei pagalbai teikti. Licenciatas sutinka su tokia IBM, IBM juridiniø asmenø ir subrangovø (veikianèiø ne tik Licenciato valstybëje) veikla. + +Licenciatas lieka atsakingas uþ 1) bet kokius duomenis ar kità bet kurios duomenø bazës turiná, kurá jis padaro prieinamà IBM, 2) duomenø prieigos, apsaugos, kodavimo, naudojimo bei duomenø perdavimo (áskaitant ir bet kokius asmeninius duomenis) procedûrø ir kontrolës pasirinkimà ir vykdymà ir 3) visø duomenø baziø ir visø saugomø duomenø atsarginiø kopijø sukûrimà bei jø atkûrimà. Licenciatas nesiøs ir nesuteiks IBM prieigos prie asmeninës informacijos, nepriklausomai nuo to, kokios formos ji yra, ir bus atsakingas uþ pagrástas iðlaidas, kurias IBM patirs dël tokios informacijos klaidingo perdavimo IBM arba jei IBM prarastø ar paskelbtø tokià informacijà, taip pat ir iðlaidas, susijusias su treèiøjø ðaliø iðkeltais ieðkiniais. + +7. Atsakomybës apribojimas + +Apribojimai, pateikti 7 skyriuje (Atsakomybës apribojimas), yra taikomi tiek, kiek leidþia taikomi ástatymai ir neleidþiama atsisakyti sutartyse. + +7.1 Dalykai, uþ kuriuos IBM atsakinga + +Gali susiklostyti tokios aplinkybës, kad dël IBM ar kitø ásipareigojimø nevykdymo Licenciatui bûtø suteikta teisë gauti þalos atlyginimà ið IBM. Neatsiþvelgiant á pagrindà, pagal kurá Licenciatas gauna teisæ reikalauti ið IBM atlyginti þalà (áskaitant esminá paþeidimà, aplaidumà, faktø iðkraipymà arba kità sutarties ar civilinës teisës paþeidimà), visa IBM atsakomybës dël visø pretenzijø, susijusiø su kiekviena Programa ar kitaip atsiradusiø dël ðios Sutarties, suma nevirðys 1) þalos dël kûno suþalojimo (áskaitant mirtá), þalos nekilnojamajam turtui ir materialiajam asmeniniam turtui atlyginimo ir 2) kitos faktinës tiesioginës þalos iki 10 000 JAV doleriø (arba vietinës valiutos ekvivalentu). + +Ðis apribojimas taip pat taikomas visiems IBM Programos kûrëjams ir tiekëjams. Tai yra didþiausia IBM ir jos Programos kûrëjø ir tiekëjø kolektyvinës atsakomybës suma. + +7.2 Dalykai, uþ kuriuos IBM nëra atsakinga + +JOKIU ATVEJU IBM, JOS PROGRAMOS KÛRËJAI AR TIEKËJAI NËRA ATSAKINGI UÞ ÐIUOS DALYKUS, NET JEI JIEMS BUVO PRANEÐTA APIE TOKIØ APLINKYBIØ ATSIRADIMO GALIMYBÆ: + +a. DUOMENØ PRARADIMÀ AR SUGADINIMÀ; + +b. SPECIALIUOSIUS, ATSITIKTINIUS, BAUDINIUS AR NETIESIOGINIUS NUOSTOLIUS, ARBA BET KOKIUS PRIEÞASTINIUS EKONOMINIUS NUOSTOLIUS; ARBA + +c. PRARASTÀ PELNÀ, VERSLÀ, PAJAMAS, PRESTIÞÀ AR PLANUOTAS SUTAUPYTI LËÐAS. + +8. Sàlygø laikymosi tikrinimas + +8 skyriuje (Sàlygø laikymosi tikrinimas) ¥Vertinimo programos sàlygos¡ reiðkia 1) ðià Sutartá ir jos pataisymus bei IBM pateiktus sandorio dokumentus, ir 2) IBM programinës árangos politikà, kurià galima rasti IBM programinës árangos politikos svetainëje (www.ibm.com/softwarepolicies), áskaitant, bet neapsiribojant, politikà, susijusià su atsarginëmis kopijomis, pagalbinës talpos kainø nustatymu ir informacijos perkëlimu. + +8 skyriuje pateikiamos teisës ir ásipareigojimai taikomi visà Programos licencijos galiojimo laikà ir dvejus metus po galiojimo pabaigos. + +8.1 Tikrinimo procesas + +Licenciatas sutinka sukurti, iðsaugoti ir pateikti IBM bei jos auditoriams tikslias raðytines ataskaitas, sistemos árankiø iðvestis ir kità sistemos informacijà, kuri leistø ávertinti, ar Licenciatas, naudodamasis visomis Programomis, laikosi Vertinimo programos sàlygø, áskaitant, bet neapsiribojant, visas IBM licencijavimo ir kainø nustatymo sàlygas. Licenciatas yra atsakingas, kad 1) tai nevirðytø jo Ágaliotojo naudojimo ribø ir 2) atitiktø Vertinimo programos sàlygas. + +Priimtinai perspëjusi, IBM gali patikrinti, kaip Licenciatas laikosi Vertinimo programos sàlygø visose darbo vietose ir visose aplinkose, kuriose Licenciatas naudojasi Programomis (bet kokiu tikslu), kurioms taikomos Vertinimo programos sàlygos. Toks patikrinimas bus atliktas taip, kad kuo maþiau sutrikdytø Licenciato veiklà, ir gali bûti atliekamas Licenciato patalpose darbo valandomis. Tikrinti IBM gali samdyti nepriklausomà treèiàjá asmená, jei IBM ir treèiasis asmuo yra pasiraðæ konfidencialumo sutartá. + +8.2 Sprendimas + +Jei tikrinimo metu paaiðkës, kad Licenciatas naudojosi kuria nors Programa, virðydamas Ágaliotojo naudojimo ribas, ar kitu bûdu nesilaikë Vertinimo programos sàlygø, IBM praneð apie tai Licenciatui raðtu. Licenciatas sutinka nedelsdamas tiesiogiai IBM padengti iðlaidas, kurias IBM nurodo sàskaitoje faktûroje, uþ 1) bet koká naudojimosi pervirðá, 2) palaikymà, suteiktà ðiam pervirðiui per naudojimo laikotarpá arba dvejus metus, atsiþvelgiant á tai, kuris laikotarpis trumpesnis, ir 3) kitas iðlaidas bei ásipareigojimus, nustatytus tikrinimo metu. + +9. Treèiøjø ðaliø pastabos + +Programoje gali bûti treèiøjø ðaliø kodas, kurá IBM, ne treèioji ðalis, suteikia Licenciatui, remdamasi ðia Sutartimi. Jei yra pastabø apie treèiøjø ðaliø kodà (¥Treèiøjø ðaliø pastabos¡), jos átrauktos tik Licenciatui informuoti. Ðios pastabos pateikiamos Programos faile (-uose) PASTABOS. Informacija, kaip gauti ðaltinio kodà tam tikram treèiosios ðalies kodui, pateikta skyriuje ¥Treèiøjø ðaliø pastabos¡. Jei Treèiøjø ðaliø pastabose IBM treèiosios ðalies kodà nurodo kaip ¥Modifikuojamà treèiosios ðalies kodà¡, IBM leidþia Licenciatui 1) modifikuoti Modifikuojamà treèiosios ðalies kodà ir 2) atkurti kodà tø Programos moduliø, kurie tiesiogiai siejasi su Modifikuojamu treèiosios ðalies kodu, su sàlyga, kad tai daroma tik norint suderinti Licenciato modifikacijas su treèiosios ðalies kodu. IBM aptarnavimo ir techninës pagalbos ásipareigojimai, jei tokie yra, taikomi tik nemodifikuotai Programai. + +10. Bendrosios nuostatos + +a. Joks ðios Sutarties punktas neturi átakos ástatymø numatytoms vartotojø teisëms, kurias sutartis galëtø panaikinti ar apriboti. + +b. Jeigu kuri nors ðios Sutarties nuostata laikoma netekusi galios ar neturinti ieðkinio galios, kitos ðios Sutarties nuostatos lieka galioti. + +c. Licenciatui draudþiama eksportuoti Programà. + +d. Licenciatas ágalioja ¥International Business Machines Corporation´ ir jos filialus (bei jø teisiø perëmëjus, rangovus ir IBM verslo partnerius) laikyti ir naudoti Licenciato verslo sandorio informacijà, neatsiþvelgiant á sandoriø vietà, susijusià su IBM produktais ir paslaugomis, arba IBM ir Licenciato verslo ryðiams palaikyti. + +e. Kiekviena ðalis, prieð iðkeldama ieðkiná kitai ðaliai dël Sutarties ásipareigojimø nevykdymo, pirmiausia suteikia galimybæ ávykdyti tuos ásipareigojimus. Ðalys bando gera valia iðspræsti iðkilusius ginèus, nesutarimus ar ieðkinius, susijusius su ðia Sutartimi. + +f. Jei kitaip nereikalauja taikomi ástatymai, ir tai nepanaikina bei neapriboja sutarties ásipareigojimø, 1) në viena ðalis nesiims jokiø teisiniø veiksmø dël jokio ieðkinio, susijusio su ðia Sutartimi, jei yra praëjæ dveji metai nuo ávykio pradþios; ir 2) pasibaigus ðiam terminui bet koks ieðkinys ir su juo susijusios atitinkamos teisës netenka galios. + +g. Nei Licenciatas, nei IBM neatsako uþ savo ásipareigojimø nevykdymà dël nuo ðaliø nepriklausanèiø prieþasèiø. + +h. Ðioje Sutartyje nenumatomos jokios treèiøjø ðaliø teisës ar veiksmai, ir IBM nëra atsakinga uþ jokius treèiøjø ðaliø ieðkinius, pateiktus Licenciatui, iðskyrus atvejus, nurodytus 7.1 poskyryje (Dalykai, uþ kuriuos IBM atsakinga), kai IBM juridiðkai atsako treèiajai ðaliai uþ kûno suþalojimus (taip pat mirtá) ar turtinæ þalà. + +i. Pasiraðydamos ðià Sutartá, në viena ðalis nesitiki ásipareigojimø vykdymo, nenumatyto ðioje Sutartyje, áskaitant, bet neapsiribojant, ásipareigojimø, susijusiø su: 1) Programos veikimu, jei tai nenurodyta 5 skyriuje (Garantijø atsisakymas), 2) kitø ðaliø patirtimi ar rekomendacijomis arba 3) bet kokiais Licenciato gautais rezultatais. + +j. Programoms reklamuoti, parduoti ar aptarnauti IBM yra pasiraðiusi sutartis su tam tikromis organizacijomis (vadinamomis IBM verslo partneriais). IBM verslo partneriai yra nepriklausomos ir atskirai nuo IBM veikianèios institucijos. IBM nëra atsakinga uþ IBM verslo Partneriø veiksmus ar pareiðkimus, ar jø ásipareigojimus Licenciatui. + +k. Licencijos ir intelektinës nuosavybës nuostoliø kompensacijos sàlygos, nurodytos kitose Licenciato sutartyse su IBM (tokiose, kaip IBM kliento sutartis) netaikomos ðios Sutarties suteikiamos Programos licencijoms. + +11. Geografinë veiklos sfera ir taikoma teisë + +11.1 Taikoma teisë + +Abi ðalys sutinka, kad vykdydamos, aiðkindamos ir ágyvendindamos visas Licenciato ir IBM teises, prievoles ir ásipareigojimus, kylanèius ar susijusius su ðios Sutarties turiniu, taikys valstybës, kurioje Licenciatas ásigijo Programos licencijà, ástatymus, nepaisant teisës principø prieðtaravimø. + +Jungtiniø Tautø Konvencija dël tarptautiniø prekiø pirkimo ir pardavimo sutarèiø netaikoma. + +11.2 Jurisdikcija + +Visos teisës, prievolës ir ásipareigojimai yra pavaldûs Valstybës, kurioje Licenciatas ágijo Programos licencijà, teismams. + +2 dalis - konkreèiai ðaliai taikomos sàlygos + +Ðios sàlygos pakeièia arba modifikuoja Lietuvoje suteiktø licencijø sàlygas, nurodytas 1 dalyje. Visos 1 dalyje nurodytos sàlygos, kuriø ðios pataisos nepakeièia, iðlieka nepakeistos ir galiojanèios. 2 dalis iðdëstoma taip: + +* 1 dalies 11 skyriaus (Taikoma teisë ir jurisdikcija) su ðalimis susijusios pataisos ir + +* Europos, Viduriniø Rytø ir Afrikos ðalyse taikomos kitø Sutarties sàlygø pataisos. + +1 dalies 11 skyriaus (Taikoma teisë ir jurisdikcija) su ðalimis susijusios pataisos + +11.1 Taikoma teisë + +Skyriaus 11.1 Taikoma teisë 1 pastraipos frazë ¥valstybës, kurioje Licenciatas ásigijo Programos licencijà, ástatymus´ Lietuvoje pakeièiama ðia fraze: + +Suomijos ástatymus. + +11.3 Arbitraþas + +Ði pastraipa pridedama kaip naujas poskyris ¥11.3 Arbitraþas´, nes ji taikoma Lietuvoje. Ðio 11.3 poskyrio nuostatos turi aukðtesnæ teisinæ galià nei poskyrio ¥11.2 Jurisdikcija´ nuostatos iki ribos, numatytos taikomuose vietos teisës aktuose ir reglamentuose: + +Visi su ðia Sutartimi susijæ ginèai bus galutinai sprendþiami arbitraþo teisme, kuris vyks Helsinkyje, Suomijoje, remiantis tuo metu galiojanèiais Suomijos arbitraþo teisës aktais. Kiekviena ðalis paskirs vienà arbitrà. Arbitrai kartu paskirs pirmininkà. Jei arbitrams nepavyks susitarti ir paskirti pirmininko, já paskirs Helsinkio centriniai pramonës ir prekybos rûmai. + +EUROPOS, VIDURINIØ RYTØ IR AFRIKOS (EMEA) ÐALIMS TAIKOMOS PATAISOS + +EUROPOS SÀJUNGOS VALSTYBËS NARËS + +5. Garantijø atsisakymas + +Prie skyriaus ¥5. Garantijø atsisakymas´ pridedama ði informacija: + +Europos Sàjungoje (ES) vartotojai turi juridines teises, kurios apibrëþiamos pagal vietos teisës aktus, taikomus plataus vartojimo prekiø pardavimui. Nuostatos, iðvardytos ðiame skyriuje ¥5. Garantijø atsisakymas´, ðioms teisëms neturi jokios átakos. + +ES VALSTYBËS NARËS IR TOLIAU NURODYTOS ÐALYS + +Bet kuri Europos valstybë, kurioje taikomi vietiniai duomenø apsaugos teisës aktai, panaðûs á taikomus ES. + +10. Bendrosios nuostatos + +10.d punktà pakeièia tokia informacija: + +(1) Apibrëþtys - ðiam 10.d punktui taikomos tokios papildomos apibrëþtys: + +(a) Verslo kontaktinë informacija - su verslu susijusi kontaktinë informacija, kurià Licenciatas pateikia IBM: Licenciato darbuotojø ir subrangovø vardai, pareigos, darbo vietø adresai, telefono numeriai ir el. paðto adresai. Austrijoje, Italijoje ir Ðveicarijoje verslo kontaktinë informacija apima ir informacijà apie Licenciatà ir jo subrangovus kaip juridinius asmenis (pavyzdþiui, duomenis apie Licenciato pajamas ir kità su sandoriais susijusià informacijà). + +(b) Verslo kontaktiniai asmenys - Licenciato darbuotojai ir subrangovai, su kuriais susijusi verslo kontaktinë informacija. + +(c) Duomenø apsaugos institucija - institucija, ásteigta remiantis konkreèios ðalies duomenø apsaugos ir elektroniniø ryðiø teisës aktais, arba ne ES ðalies institucija, atsakinga uþ asmens duomenø apsaugà toje ðalyje, arba (bet kurioje ið anksèiau paminëtø ðaliø) tinkama tvarka paskirtas tokias pareigas perimantis subjektas. + +(d) Duomenø apsauga ir elektroniniø ryðiø teisës aktai - (i) taikomi galiojantys vietos teisës aktai ir nuostatos, pagal kurias vykdomi ES direktyvos 95/46/EB (dël asmenø apsaugos tvarkant asmens duomenis ir dël laisvo tokiø duomenø judëjimo) ir ES direktyvos 2002/58/EB (dël asmens duomenø tvarkymo ir privatumo apsaugos elektroniniø ryðiø sektoriuje) reikalavimai, arba (ii) ne ES ðaliø teisës aktai ir (arba) nuostatos, susijusios su asmens duomenø apsauga ir elektroniniø ryðiø, kuriems naudojami asmens duomenys, reguliavimu, áskaitant (bet kurioje ið anksèiau paminëtø ðaliø) visus ástatymø nustatytus pakeitimus arba modifikacijas. + +(e) IBM grupë - ¥International Business Machines Corporation´, esanti JAV, Niujorko valstijos mieste Armonke, jos filialai ir atitinkami verslo partneriai bei subrangovai. + +(2) Licenciatas suteikia IBM teisæ: + +(a) apdoroti ir naudoti verslo kontaktinæ informacijà IBM grupëje teikiant Licenciatui palaikymo paslaugas ir siekiant toliau palaikyti verslo ryðius tarp Licenciato ir IBM grupës, áskaitant, be apribojimø, kreipimàsi á verslo kontaktiná asmená (el. paðtu ar kitu bûdu) ir IBM grupës produktø ir paslaugø pardavimà (¥Nurodytas tikslas´), ir + +(b) atskleisti verslo kontaktinio asmens informacijà kitiems IBM grupës nariams tik siekiant Nurodyto tikslo. + +(3) IBM sutinka, kad visa verslo kontaktinë informacija bus apdorojama laikantis duomenø apsaugos ir elektroniniø ryðiø teisës aktø ir naudojama tik Nurodytu tikslu. + +(4) Iki duomenø apsaugos ir elektroniniø ryðiø teisës aktø nustatytos ribos Licenciatas patvirtina, kad (a) gavo (arba gaus) visus sutikimus ið verslo kontaktiniø asmenø ir jiems pateikë (arba pateiks) visus praneðimus, bûtinus norint leisti IBM grupei apdoroti ir naudoti verslo kontaktinæ informacijà Nurodytu tikslu. + +(5) Licenciatas suteikia IBM teisæ perduoti verslo kontaktinæ informacijà uþ Europos ekonominës zonos ribø, jei toks perdavimas vykdomas pagal sutarties sàlygas, kurias patvirtino duomenø apsaugos institucija, arba jei toká perdavimà leidþia duomenø apsaugos ir elektroniniø ryðiø teisës aktai. + +Z125-5543-05 (07/2011) + + +Tarptautinë programinës árangos licencinë sutartis + +1 dalis - bendrosios sàlygos + +ATSISIØSDAMAS, DIEGDAMAS, KOPIJUODAMAS, PASIEKDAMAS PROGRAMÀ, SPAUSDAMAS MYGTUKÀ ¥SUTINKU´ AR KITAIS BÛDAIS NAUDODAMAS PROGRAMÀ, LICENCIATAS SUTINKA SU ÐIOS SUTARTIES SÀLYGOMIS.JEIGU SU ÐIOS LICENCIJOS SÀLYGOMIS SUTINKATE LICENCIATO VARDU, JÛS PAREIÐKIATE IR GARANTUOJATE, KAD PRISIIMATE VISÀ ATSAKOMYBÆ UÞ ÐIØ SÀLYGØ LAIKYMÀSI. JEIGU NESUTINKATE SU ÐIOMIS SÀLYGOMIS, + +* NESIØSKITE, NEDIEKITE, NEKOPIJUOKITE, NEBANDYKITE PASIEKTI PROGRAMOS, NESPAUSKITE MYGTUKO ¥SUTINKU´ AR NESINAUDOKITE PROGRAMA; IR + +* NEDELSDAMI GRÀÞINKITE NENAUDOTAS LAIKMENAS, DOKUMENTACIJÀ IR NUOSAVYBËS TEISËS DOKUMENTÀ ÐALIAI, IÐ KURIOS JUOS GAVOTE, KAD SUSIGRÀÞINTUMËTE UÞ PROGRAMÀ SUMOKËTUS PINIGUS. JEI PROGRAMA BUVO ATSISIØSTA, SUNAIKINKITE VISAS PROGRAMOS KOPIJAS. + +1. Apibrëþimai + +Ágaliotasis naudojimas - numatytas lygis, apibrëþiantis, kaip Licenciatas ágaliotas paleisti ir vykdyti Programà. Ðis lygis gali bûti nustatomas pagal naudotojø skaièiø, paslaugø vienetø milijonus (MSU), procesoriaus vertës vienetus (PVU) arba kitus naudojimo lygius, kuriuos nurodo IBM. + +IBM - ¥International Business Machines Corporation´ arba vienas ið jos filialø. + +Licencijos informacija (LI) - dokumentas, kuriame pateikta specifinë informacija apie Programà ir papildomos sàlygos. Programos LI galima rasti internete adresu: www.ibm.com/software/sla. LI taip pat galima rasti Programos kataloge, naudojant sisteminæ komandà, arba lankstinuke, kuris pridëtas prie Programos. + +Programa - ðie iðvardyti dalykai, jø originalai ir visos iðsamios arba dalinës kopijos: 1) kompiuterio skaitomos instrukcijos ir duomenys, 2) komponentai, failai ir moduliai, 3) garsinë ir vaizdinë medþiaga (pvz., vaizdai, tekstas, áraðai ar paveikslëliai), ir 4) susijusi licencijos medþiaga (tokia, kaip raktai ir dokumentacija). + +Nuosavybës teisës dokumentas (NTD) - Licenciato ágaliotojo naudojimo árodymas. NTD taip pat árodo, kad Licenciatas galës naudotis garantiniu aptarnavimu, bûsimø naujinimø kainomis, jei tokie bus iðleisti, ir galimais specialiais ar reklamos pasiûlymais. Jeigu IBM nepateikia Licenciatui NTD, tada IBM vietoj NTD gali priimti originalø pirkimo kvità ar kità pirkimo dokumentà ið ðalies (arba IBM, arba jos platintojo), ið kurios Licenciatas ásigijo Programà, su sàlyga, kad dokumente nurodytas Programos pavadinimas bei suteiktos Ágaliotojo naudojimo sàlygos. + +Garantijos laikas - vieneri metai nuo datos, kai Licenciatui suteikta licencija. + +2. Sutarties struktûra + +Ðià sutartá sudaro: 1 dalis - bendrosios sàlygos, 2 dalis - konkreèiai ðaliai taikomos sàlygos (jei tokiø yra), LI ir NTD, ir tai yra galutinis susitarimas tarp Licenciato ir IBM dël naudojimosi Programa. Ji pakeièia bet koká ankstesná þodiná ar raðtiná bendravimà tarp Licenciato ir IBM, kuriø metu buvo aptariamas Licenciato naudojimasis Programa. 2 dalies sàlygos gali pakeisti 1 dalies sàlygas. Atsiradus bet kokiems prieðtaravimams, bus remiamasi LI. + +3. Licencijos suteikiamos teisës + +Programa yra IBM arba IBM platintojo nuosavybë, ginama autoriaus teisiø, naudojimuisi ja suteikiama licencija, bet ji nëra parduodama. + +IBM suteikia Licenciatui neiðimtinæ licencijà 1) naudotis Programa pagal Ágaliotojo naudojimo sàlygas, nurodytas NTD, 2) kurti ir diegti kopijas, kurios palaikytø Ágaliotàjá naudojimàsi programa, ir 3) kurti atsarginæ kopijà su sàlyga, kad + +a. Licenciatas teisëtai ásigijo Programà ir laikosi ðios Sutarties sàlygø; + +b. atsarginë kopija nepaleidþiama, nebent neveikia pati Programa, kurios atsarginë kopija sukurta; + +c. Licenciatas ant kiekvienos Programos iðsamios ar dalinës kopijos nurodo visà autoriaus teisiø informacijà bei kitus nuosavybës þenklus; + +d. Licenciatas uþtikrina, kad kiekvienas, kuris naudojasi Programa (vietine ar nuotoline prieiga) 1) naudojasi tik Licenciato vardu ir 2) laikosi ðios Sutarties sàlygø; + +e. Licenciatas 1) nenaudoja, nekopijuoja, nekeièia ir neplatina Programos, nebent tai aiðkiai leidþiama ðioje Sutartyje; 2) nebando iðardyti, dekompiliuoti, versti ar atkurti Programos kodo, nebent tai aiðkiai leidþia ástatymai ir nesuteikiama teisë atsisakyti sutartyse; 3) nenaudoja jokiø Programos komponentø, failø, moduliø, garsinio ir vaizdinio turinio ar susijusios licencijuotos medþiagos atskirai nuo Programos; ir 4) neiðduoda licencijos treèiajai ðaliai, nenuomoja ir iðperkamosios nuomos pagrindais nesuteikia Programos; ir + +f. jei Licenciatas ágyja ðià Programà kaip Pagalbinæ programà, Licenciatas naudoja ðià Programà tik kaip pagalbinæ priemonæ, palaikanèià Pagrindinæ programà, jai taikomi bet kokie Pagrindinës programos licencijos apribojimai, arba, jei Licenciatas ágyja ðià programà kaip Pagrindinæ programà, Licenciatas naudoja visas Pagalbines programas tik ðiai Programai palaikyti, jai taikomi bet kokie ðios Sutarties apribojimai. Ðiame punkte ¥f´ ¥Pagalbinë programa´ yra Programa, kuri yra kitos IBM Programos (¥Pagrindinës programos´) dalis ir kuri Pagrindinës programos LI yra nurodoma kaip Pagalbinë programa. (Norëdamas gauti atskirà Pagalbinës programos licencijà be ðiø apribojimø, Licenciatas turëtø susisiekti ðalimi, ið kurios ásigijo Pagalbinæ programà.) + +Ði licencija taikoma kiekvienai Licenciato padarytai Programos kopijai. + +3.1 Pakeitimai, atnaujinimai, pataisos ir taisymai + +3.1.1 Pakeitimai + +Jei Programa pakeièiama kita Programa, pakeistos Programos licencija yra nedelsiant nutraukiama. + +3.1.2 Atnaujinimai, pataisos ir taisymai + +Kai Licenciatas gauna Programos atnaujinimà, pataisà ar pataisymà, Licenciatas sutinka su bet kokiomis papildomomis ar skirtingomis sàlygomis, taikomomis ðiems atnaujinimas, pataisoms ar pataisymams, kurios yra nurodytos LI. Jei nepateikta jokiø papildomø ar pakeistø sàlygø, tuomet atnaujinimui, pataisai ar pataisymui taikomos tik ðios Sutarties sàlygos. Jei Programa pakeièiama atnaujinimu, Licenciatas sutinka nedelsdamas nutraukti pakeistos Programos naudojimà. + +3.2 Fiksuotos trukmës licencijos + +Jei IBM suteikia Programai fiksuotos trukmës licencijà, Licenciato licencija baigia galioti, pasibaigus fiksuotam laikotarpiui, nebent Licenciatas ir IBM susitaria jà atnaujinti. + +3.3 Terminas ir nutraukimas + +Ði sutartis galioja tol, kol yra nutraukiama. + +IBM gali nutraukti Licenciato licencijà, jei Licenciatas nesilaiko Sutarties sàlygø. + +Jei licencija yra nutraukiama bet kurios ðalies iniciatyva dël bet kokios prieþasties, Licenciatas sutinka nedelsdamas nutraukti Programos naudojimà ir sunaikinti visas turimas Programos kopijas. Jei tam tikros Sutarties sàlygos dël savo pobûdþio iðlieka galioti po Sutarties nutraukimo, jos galioja, kol bus ávykdytos, ir taikomos abiejø ðaliø atitinkamiems teisiø perëmëjams ir ágaliotiniams. + +4. Mokëjimas + +Mokëjimas priklauso nuo Ágaliotojo naudojimo pobûdþio, kuris yra apraðytas NTD. IBM neteikia kreditø, jei vëluojama sumokëti, ir negràþina jau sumokëtø pinigø, iðskyrus atvejus, apraðytus Sutartyje. + +Jei Licenciatas nori iðplësti savo Ágaliotojo naudojimo ribas, Licenciatas turi ið anksto praneðti IBM arba ágaliotajam IBM atstovui ir apmokëti visas susijusias iðlaidas. + +5. Mokesèiai + +Jeigu kuri nors valdþios institucija taiko Programai muità, mokesèius ar kitokià rinkliavà, iðskyrus tuos, kurie skaièiuojami nuo IBM grynojo pelno, Licenciatas sutinka sumokëti sàskaitoje faktûroje nurodytà sumà arba pateikti atleidimo nuo mokesèiø dokumentus. Nuo Programos ásigijimo dienos Licenciatas yra atsakingas uþ bet kokius Programos nuosavybës mokesèius. Jeigu kuri nors valdþios institucija taiko muità, mokesèius ar kitokià rinkliavà uþ Programos importà, eksportà, persiuntimà, prieigà ar naudojimà uþ valstybës, kurioje Licenciatui suteikta licencija, ribø, Licenciatas sutinka sumokëti paskirtà sumà. + +6. Pinigø gràþinimo garantijos + +Jei pradinis Licenciatas dël kokiø nors prieþasèiø yra nepatenkintas Programa, jis gali per 30 dienø nuo NTD gavimo datos nutraukti licencijà ir susigràþinti pinigus, kuriuos mokëjo uþ Programà, su sàlyga, kad Licenciatas gràþina Programà ir NTD tai ðaliai, ið kurios jà ásigijo. Jei suteikta fiksuotos trukmës licencija, kurià galima pratæsti, Licenciatas gali susigràþinti pinigus tik tuo atveju, jei Programa ir jos NTD sugràþindami per pirmàsias 30 pirmojo termino dienø. Jeigu Licenciatas Programà atsisiuntë, jis turi susisiekti su jà iðdavusia ðalimi ir ið jos gauti pinigø susigràþinimo instrukcijas. + +7. Programos perleidimas + +Licenciatas gali perleisti Programà bei visas savo licencines teises ir ásipareigojimus kitai ðaliai tik tuo atveju, jei ta ðalis sutinka su ðios Sutarties sàlygomis. Jei kuri nors ðalis dël tam tikrø prieþasèiø licencijà nutraukia, Licenciatas nebegali perleisti Programos treèiajai ðaliai. Licenciatas negali perleisti dalies 1) Programos ar 2) Programos Ágaliotojo naudojimo. Perleisdamas Programà, Licenciatas kartu su LI ir NTD taip pat privalo perleisti spausdintà ðios Sutarties kopijà. Ið karto po perleidimo Licenciato licencija yra nutraukiama. + +8. Garantija ir iðimtys + +8.1 Ribotoji garantija + +IBM garantuoja, kad Programa, jei ji naudojama numatytoje veikimo aplinkoje, atitinka specifikacijas. Programos specifikacijos ir nurodytos veikimo aplinkos informacija yra pateikta Programos dokumentacijoje (tokioje kaip ¥read-me´ failas) arba kituose informacijos ðaltiniuose, kuriuos iðleido IBM (pvz., praneðime). Licenciatas sutinka, kad tokia dokumentacija ir kitas Programos turinys pateikiami tik anglø kalba, nebent vietos ástatymai reikalauja kitaip, nesuteikiama teisë sutartyje to atsisakyti arba apriboti. + +Garantija galioja tik nemodifikuotai Programos daliai. IBM negarantuoja, kad Programa veiks be trikèiø ir klaidø ar kad IBM paðalins visus Programos defektus. Licenciatas yra atsakingas uþ naudojimosi Programa rezultatus. + +Garantiniu periodu IBM suteikia Licenciatui nemokamà prieigà prie IBM duomenø baziø, kuriose yra informacija apie þinomus Programos defektus, jø taisymus, apribojimus ir apëjimus. Iðsamesnës informacijos rasite IBM programos palaikymo vadove adresu www.ibm.com/software/support. + +Jei Garantiniu laikotarpiu Programa neveikia, kaip buvo garantuota, ir problemos negalima iðspræsti, naudojantis IBM duomenø bazëse esanèia informacija, Licenciatas gali gràþinti Programà ir jos NTD ðaliai (arba IBM, arba jos atstovui), ið kurios Licenciatas ásigijo Programà, ir susigràþinti pinigus. Gràþinus Programà, Licenciato licencija nutraukiama. Jeigu Licenciatas Programà atsisiuntë, jis turi susisiekti su jà iðdavusia ðalimi ir ið jos gauti pinigø susigràþinimo instrukcijas. + +8.2 Iðimtys + +ÐIOS GARANTIJOS YRA LICENCIATO IÐIMTINËS GARANTIJOS IR PAKEIÈIA VISAS KITAS GARANTIJAS AR SÀLYGAS, IÐREIKÐTAS AR NUMANOMAS, ÁSKAITANT, BET NEAPSIRIBOJANT, BET KOKIAS NUMANOMAS TINKAMUMO PREKYBAI, PATENKINAMOS KOKYBËS, TINKAMUMO TAM TIKRAI PASKIRÈIAI IR BET KOKIAS NUOSAVYBËS IR NEPAÞEIDÞIAMUMO GARANTIJAS AR SÀLYGAS. KAI KURIOSE JURISDIKCIJOSE NELEIDÞIAMA NEÁTRAUKTI IÐREIKÐTØ AR NUMANOMØ GARANTIJØ, TODËL ANKSÈIAU IÐVARDYTOS IÐIMTYS LICENCIATUI GALI BÛTI NETAIKOMOS. TOKIU ATVEJU ÐIØ GARANTIJØ TAIKYMAS APRIBOJAMAS GARANTIJOS LAIKOTARPIO TRUKME. ÐIAM LAIKOTARPIUI PRAËJUS NEBETAIKOMOS JOKIOS GARANTIJOS. KAI KURIOSE VALSTYBËSE AR JURISDIKCIJOSE NELEIDÞIAMA RIBOTI NUMANOMOS GARANTIJOS TRUKMËS, TODËL ANKSÈIAU PATEIKTI APRIBOJIMAI LICENCIATUI GALI BÛTI NETAIKOMI. + +ÐIOS GARANTIJOS SUTEIKIA LICENCIATUI APIBRËÞTAS JURIDINES TEISES. LICENCIATAS TAIP PAT GALI TURËTI KITØ TEISIØ, KURIOS SKIRSIS ATSIÞVELGIANT Á JURISDIKCIJÀ. + +GARANTIJAS, NURODYTAS 8 SKYRIUJE (GARANTIJOS IR IÐIMTYS), SUTEIKIA TIK ¥IBM¡. APRIBOJIMAI, PAMINËTI 8.2 POSKYRYJE (IÐIMTYS), TAIP PAT TAIKOMI IR ¥IBM¡ TIEKËJAMS, VEIKIANTIEMS KAIP TREÈIOJI ÐALIS. TOKIE TIEKËJAI VEIKIA BE JOKIØ GARANTIJØ AR SÀLYGØ. ÐIS PARAGRAFAS NEPANAIKINA ¥IBM¡ GARANTINIØ ÁSIPAREIGOJIMØ, NURODYTØ ÐIOJE SUTARTYJE. + +9. Licenciato duomenys ir duomenø bazës + +Siekdama padëti Licenciatui iðspræsti su Programa susijusias problemas, IBM gali papraðyti, kad Licenciatas 1) leistø IBM nuotoliniu bûdu prisijungti prie Licenciato sistemos arba 2) atsiøstø savo informacijà ar sistemos duomenis á IBM. Taèiau IBM neprivalo teikti tokios pagalbos, nebent IBM ir Licenciatas pasiraðo atskirà susitarimà, kuriame IBM sutinka teikti Licenciatui tokio pobûdþio palaikymà, kuri nëra numatyta ðios Sutarties IBM garantiniuose ásipareigojimuose. Bet kokiu atveju IBM naudoja informacijà apie klaidas ir problemas savo produktams ir paslaugoms tobulinti ir techninei pagalbai teikti. Licenciatas sutinka su tokia IBM, IBM juridiniø asmenø ir subrangovø (veikianèiø ne tik Licenciato valstybëje) veikla. + +Licenciatas lieka atsakingas uþ 1) bet kokius duomenis ar kità bet kurios duomenø bazës turiná, kurá jis padaro prieinamà IBM, 2) duomenø prieigos, apsaugos, kodavimo, naudojimo bei duomenø perdavimo (áskaitant ir bet kokius asmeninius duomenis) procedûrø ir kontrolës pasirinkimà ir vykdymà ir 3) visø duomenø baziø ir visø saugomø duomenø atsarginiø kopijø sukûrimà bei jø atkûrimà. Licenciatas nesiøs ir nesuteiks IBM prieigos prie asmeninës informacijos, nepriklausomai nuo to, kokios formos ji yra, ir bus atsakingas uþ pagrástas iðlaidas, kurias IBM patirs dël tokios informacijos klaidingo perdavimo IBM arba jei IBM prarastø ar paskelbtø tokià informacijà, taip pat ir iðlaidas, susijusias su treèiøjø ðaliø iðkeltais ieðkiniais. + +10. Atsakomybës apribojimas + +Apribojimai, pateikti 10 skyriuje (Atsakomybës apribojimas) yra taikomi tiek, kiek leidþia taikomi ástatymai ir neleidþiama atsisakyti sutartyse. + +10.1 Dalykai, uþ kuriuos IBM atsakinga + +Gali susiklostyti tokios aplinkybës, kad dël IBM ar kitø ásipareigojimø nevykdymo Licenciatui bûtø suteikta teisë gauti þalos atlyginimà ið IBM. Neatsiþvelgiant á pagrindà, pagal kurá Licenciatas gauna teisæ reikalauti ið IBM atlyginti þalà (áskaitant esminá paþeidimà, aplaidumà, faktø iðkraipymà arba kità sutarties ar civilinës teisës paþeidimà), iðskyrus bet kokià atsakomybæ, kurios negalima atsisakyti arba apriboti remiantis atitinkamais ástatymais, visa IBM atsakomybë dël visø pretenzijø, susijusiø su kiekviena Programa, nevirðys a) þalos dël kûno suþalojimo (áskaitant mirtá), þalos nekilnojamajam turtui ir materialiajam asmeniniam turtui atlyginimo; b) bet kokios kitos faktinës tiesioginës þalos, áskaitant mokesèius (jei uþ Programà mokama fiksuotais terminais, taikomi 12 mënesiø mokesèiai) uþ Programà, dël kurios pateiktas ieðkinys. + +Ðis apribojimas taip pat taikomas visiems IBM Programos kûrëjams ir tiekëjams. Tai yra didþiausia IBM ir jos Programos kûrëjø ir tiekëjø kolektyvinës atsakomybës suma. + +10.2 Dalykai, uþ kuriuos IBM nëra atsakinga + +JOKIU ATVEJU IBM, JOS PROGRAMOS KÛRËJAI AR TIEKËJAI NËRA ATSAKINGI UÞ ÐIUOS DALYKUS, NET JEI JIEMS BUVO PRANEÐTA APIE TOKIØ APLINKYBIØ ATSIRADIMO GALIMYBÆ: + +a. DUOMENØ PRARADIMÀ AR SUGADINIMÀ; + +b. SPECIALIUOSIUS, ATSITIKTINIUS, BAUDINIUS AR NETIESIOGINIUS NUOSTOLIUS, ARBA BET KOKIUS PRIEÞASTINIUS EKONOMINIUS NUOSTOLIUS; ARBA + +c. PRARASTÀ PELNÀ, VERSLÀ, PAJAMAS, PRESTIÞÀ AR PLANUOTAS SUTAUPYTI LËÐAS. + +11. Sàlygø laikymosi tikrinimas + +11 skyriuje (Sàlygø laikymosi tikrinimas), ¥IPLA Programos sàlygos¡ reiðkia 1) ðià Sutartá ir jos pataisymus bei IBM pateiktus sandorio dokumentus, ir 2) IBM programinës árangos politikà, kurià galima rasti IBM Programinës árangos politikos svetainëje (www.ibm.com/softwarepolicies), áskaitant, bet neapsiribojant, politikà, susijusià su atsarginëmis kopijomis, pagalbinës talpyklos kainø nustatymu bei informacijos perkëlimu. + +11 skyriuje pateikiamos teisës ir ásipareigojimai taikomi visà Programos licencijos galiojimo laikà bei dvejus metus pasibaigus galiojimui. + +11.1 Tikrinimo procesas + +Licenciatas sutinka sukurti, iðsaugoti ir pateikti IBM bei jos auditoriams tikslias raðytines ataskaitas, sistemos árankiø iðvestis ir kità sistemos informacijà, kuri leistø ávertinti, ar Licenciatas, naudodamasis visomis Programomis, laikosi IPLA programos sàlygø, áskaitant, bet neapsiribojant, visas IBM licencijavimo ir kainø nustatymo sàlygas. Licenciatas yra atsakingas, kad 1) tai nevirðytø jo Ágaliotojo naudojimo ribø ir 2) atitiktø IPLA Programos sàlygas. + +Priimtinai perspëjusi, IBM gali patikrinti, kaip Licenciatas laikosi IPLA programos sàlygø visose darbo vietose ir visose aplinkose, kuriose Licenciatas naudojasi Programomis (bet kokiu tikslu), kurioms taikomos IPLA programos sàlygos. Toks patikrinimas bus atliktas taip, kad kuo maþiau sutrikdytø Licenciato veiklà, ir gali bûti atliekamas Licenciato patalpose darbo valandomis. Tikrinti IBM gali samdyti nepriklausomà auditoriø, jei IBM ir auditorius yra pasiraðæ konfidencialumo sutartá. + +11.2 Sprendimas + +Jei tikrinimo metu paaiðkës, kad Licenciatas naudojosi kuria nors Programa, virðydamas Ágaliotojo naudojimo ribas, ar kitu bûdu nesilaikë IPLA programos sàlygø, IBM praneð apie tai Licenciatui raðtu. Licenciatas sutinka nedelsdamas tiesiogiai IBM padengti iðlaidas, kurias IBM nurodo sàskaitoje faktûroje, uþ 1) bet koká naudojimosi pervirðá, 2) palaikymà, suteiktà ðiam pervirðiui per naudojimo laikotarpá arba dvejus metus, atsiþvelgiant á tai, kuris laikotarpis trumpesnis, ir 3) kitas iðlaidas bei ásipareigojimus, nustatytus tikrinimo metu. + +12. Treèiøjø ðaliø pastabos + +Programoje gali bûti treèiøjø ðaliø kodas, kurá IBM, ne treèioji ðalis, suteikia Licenciatui, remdamasi ðia Sutartimi. Jei yra pastabø apie treèiøjø ðaliø kodà (¥Treèiøjø ðaliø pastabos¡), jos átrauktos tik Licenciatui informuoti. Ðios pastabos pateikiamos Programos faile (-uose) PASTABOS. Informacija, kaip gauti ðaltinio kodà tam tikram treèiosios ðalies kodui, pateikta skyriuje ¥Treèiøjø ðaliø pastabos¡. Jei Treèiøjø ðaliø pastabose IBM treèiosios ðalies kodà nurodo kaip ¥Modifikuojamà treèiosios ðalies kodà¡, IBM leidþia Licenciatui 1) modifikuoti Modifikuojamà treèiosios ðalies kodà ir 2) atkurti kodà tø Programos moduliø, kurie tiesiogiai siejasi su Modifikuojamu treèiosios ðalies kodu, su sàlyga, kad tai daroma tik norint suderinti Licenciato modifikacijas su treèiosios ðalies kodu. IBM aptarnavimo ir techninës pagalbos ásipareigojimai, jei tokie yra, taikomi tik nemodifikuotai Programai. + +13. Bendrosios nuostatos + +a. Joks ðios Sutarties punktas neturi átakos ástatymø numatytoms vartotojø teisëms, kurias sutartis galëtø panaikinti ar apriboti. + +b. Tais atvejais, kai Licenciatui IBM Programas pateikia materialios formos, IBM savo siuntimo ir pristatymo ásipareigojimus ávykdo, perdavusi Programas IBM paskirtam veþëjui, nebent Licenciatas ir IBM raðtu susitarë kitaip. + +c. Jeigu kuri nors ðios Sutarties nuostata laikoma netekusi galios ar neturinti ieðkinio galios, kitos ðios Sutarties nuostatos lieka galioti. + +d. Licenciatas sutinka laikytis visø taikomø eksporto ir importo ástatymø bei taisykliø, tarp jø JAV embargo ir sankcijø taisykliø bei eksporto draudimø tam tikriems galutiniams vartotojams. + +e. Licenciatas ágalioja ¥International Business Machines Corporation´ ir jos filialus (bei jø teisiø perëmëjus, rangovus ir IBM verslo partnerius) laikyti ir naudoti Licenciato verslo sandorio informacijà, neatsiþvelgiant á sandoriø vietà, susijusià su IBM produktais ir paslaugomis, arba IBM ir Licenciato verslo ryðiams palaikyti. + +f. Kiekviena ðalis, prieð iðkeldama ieðkiná kitai ðaliai dël Sutarties ásipareigojimø nevykdymo, pirmiausia suteikia galimybæ ávykdyti tuos ásipareigojimus. Ðalys bando gera valia iðspræsti iðkilusius ginèus, nesutarimus ar ieðkinius, susijusius su ðia Sutartimi. + +g. Jei kitaip nereikalauja taikomi ástatymai, ir tai nepanaikina bei neapriboja sutarties ásipareigojimø, 1) në viena ðalis nesiims jokiø teisiniø veiksmø dël jokio ieðkinio, susijusio su ðia Sutartimi, jei yra praëjæ dveji metai nuo ávykio pradþios; ir 2) pasibaigus ðiam terminui bet koks ieðkinys ir su juo susijusios atitinkamos teisës netenka galios. + +h. Nei Licenciatas, nei IBM neatsako uþ savo ásipareigojimø nevykdymà dël nuo ðaliø nepriklausanèiø prieþasèiø. + +i. Ðioje Sutartyje nenumatomos jokios treèiøjø ðaliø teisës ar veiksmai, ir IBM nëra atsakinga uþ jokius treèiøjø ðaliø ieðkinius, pateiktus Licenciatui, iðskyrus atvejus, nurodytus 10.1 poskyryje (Dalykai, uþ kuriuos IBM atsakinga), kai IBM juridiðkai atsako treèiajai ðaliai uþ kûno suþalojimus (taip pat mirtá) ar turtinæ þalà. + +j. Pasiraðydamos ðià Sutartá, në viena ðalis nesitiki ásipareigojimø vykdymo, nenumatyto Sutartyje, áskaitant, bet neapsiribojant, ásipareigojimus, susijusius su: 1) Programos veikimu, jei tai nenurodyta 8 skyriuje (Garantijos ir iðimtys) ; 2) kitø ðaliø patirtimi ar rekomendacijomis; arba 3) bet kokiais Licenciato gautais rezultatais. + +k. Programoms reklamuoti, parduoti ar aptarnauti IBM yra pasiraðiusi sutartis su tam tikromis organizacijomis (vadinamomis IBM verslo partneriais). IBM verslo partneriai yra nepriklausomos ir atskirai nuo IBM veikianèios institucijos. IBM nëra atsakinga uþ IBM verslo Partneriø veiksmus ar pareiðkimus, ar jø ásipareigojimus Licenciatui. + +l. Licencijos ir intelektinës nuosavybës nuostoliø kompensacijos sàlygos, nurodytos kitose Licenciato sutartyse su IBM (tokiose, kaip IBM kliento sutartis) netaikomos ðios Sutarties suteikiamos Programos licencijoms. + +14. Geografinë veiklos sfera ir taikoma teisë + +14.1 Taikoma teisë + +Abi ðalys sutinka, kad vykdydamos, aiðkindamos ir ágyvendindamos visas Licenciato ir IBM teises, prievoles ir ásipareigojimus, kylanèius ar susijusius su ðios Sutarties turiniu, taikys valstybës, kurioje Licenciatas ásigijo Programos licencijà, ástatymus, nepaisant teisës principø prieðtaravimø. + +Jungtiniø Tautø Konvencija dël tarptautiniø prekiø pirkimo ir pardavimo sutarèiø netaikoma. + +14.2 Jurisdikcija + +Visos teisës, prievolës ir ásipareigojimai yra pavaldûs Valstybës, kurioje Licenciatas ágijo Programos licencijà, teismams. + +2 dalis - konkreèiai ðaliai taikomos sàlygos + +Ðios sàlygos pakeièia arba modifikuoja toliau iðvardytose ðalyse suteiktø licencijø sàlygas, nurodytas 1 dalyje. Visos 1 dalyje nurodytos sàlygos, kuriø ðios pataisos nepakeièia, iðlieka nepakeistos ir galiojanèios. 2 dalis iðdëstoma taip: + +* 1 dalies 14 skyriaus (Taikoma teisë ir jurisdikcija) su ðalimis susijusios pataisos ir + +* Europos, Viduriniø Rytø ir Afrikos ðalyse taikomos kitø Sutarties sàlygø pataisos. + +1 dalies 14 skyriaus (Taikoma teisë ir jurisdikcija) su ðalimis susijusios pataisos + +14.1 Taikoma teisë + +Skyriaus 14.1 Taikoma teisë 1 pastraipos frazë ¥valstybës, kurioje Licenciatas ásigijo Programos licencijà, ástatymus´ pakeièiama ðiomis frazëmis (atitinkamai pagal ðalá): + +EUROPA, VIDURINIAI RYTAI IR AFRIKA + +Lietuvoje: Suomijos ástatymus. + +14.3 Arbitraþas + +Ði pastraipa pridedama kaip naujas poskyris 14.3 Arbitraþas, nes ji taikoma ðalims, toliau iðskirtoms ðriftu. Ðio 14.3 poskyrio nuostatos turi aukðtesnæ teisinæ galià nei poskyrio 14.2 Jurisdikcija nuostatos iki ribos, numatytos taikomuose vietos teisës aktuose ir reglamentuose: + +EUROPA, VIDURINIAI RYTAI IR AFRIKA + +Lietuva: + +Visi su ðia Sutartimi susijæ ginèai bus galutinai sprendþiami arbitraþo teisme, kuris vyks Helsinkyje, Suomijoje, remiantis tuo metu galiojanèiais Suomijos arbitraþo teisës aktais. Kiekviena ðalis paskirs vienà arbitrà. Arbitrai kartu paskirs pirmininkà. Jei arbitrams nepavyks susitarti ir paskirti pirmininko, já paskirs Helsinkio centriniai pramonës ir prekybos rûmai. + +EUROPOS, VIDURINIØ RYTØ IR AFRIKOS (EMEA) ÐALIMS TAIKOMOS PATAISOS + +EUROPOS SÀJUNGOS VALSTYBËS NARËS + +8. Garantija ir iðimtys + +Prie skyriaus 8. Garantija ir iðimtys pridedama ði informacija: + +Europos Sàjungoje (ES) vartotojai turi juridines teises, kurios apibrëþiamos pagal vietos teisës aktus, taikomus plataus vartojimo prekiø pardavimui. Nuostatos, iðvardytos ðiame skyriuje 8. Garantija ir iðimtys, ðioms teisëms neturi jokios átakos. Ribotoji garantija taikoma visame pasaulyje. + +13. Bendrosios nuostatos + +13.e punktà pakeièia tokia informacija: + +(1) Apibrëþtys - ðiam 13.e punktui taikomos tokios papildomos apibrëþtys: + +(a) Verslo kontaktinë informacija - su verslu susijusi kontaktinë informacija, kurià Licenciatas pateikia IBM: Licenciato darbuotojø ir subrangovø vardai, pareigos, darbo vietø adresai, telefono numeriai ir el. paðto adresai. Austrijoje, Italijoje ir Ðveicarijoje verslo kontaktinë informacija apima ir informacijà apie Licenciatà ir jo subrangovus kaip juridinius asmenis (pavyzdþiui, duomenis apie Licenciato pajamas ir kità su sandoriais susijusià informacijà). + +(b) Verslo kontaktiniai asmenys - Licenciato darbuotojai ir subrangovai, su kuriais susijusi verslo kontaktinë informacija. + +(c) Duomenø apsaugos institucija - institucija, ásteigta remiantis konkreèios ðalies duomenø apsaugos ir elektroniniø ryðiø teisës aktais, arba ne ES ðalies institucija, atsakinga uþ asmens duomenø apsaugà toje ðalyje, arba (bet kurioje ið anksèiau paminëtø ðaliø) tinkama tvarka paskirtas tokias pareigas perimantis subjektas. + +(d) Duomenø apsaugos ir elektroniniø ryðiø teisës aktai - (i) taikomi galiojantys vietos teisës aktai ir nuostatos, pagal kurias vykdomi ES direktyvos 95/46/EB (dël asmenø apsaugos tvarkant asmens duomenis ir dël laisvo tokiø duomenø judëjimo) ir ES direktyvos 2002/58/EB (dël asmens duomenø tvarkymo ir privatumo apsaugos elektroniniø ryðiø sektoriuje) reikalavimai, arba (ii) ne ES ðaliø teisës aktai ir (arba) nuostatos, susijusios su asmens duomenø apsauga ir elektroniniø ryðiø, kuriems naudojami asmens duomenys, reguliavimu, áskaitant (bet kurioje ið anksèiau paminëtø ðaliø) visus ástatymø nustatytus pakeitimus arba modifikacijas. + +(e) IBM grupë - ¥International Business Machines Corporation´, esanti JAV, Niujorko valstijos mieste Armonke, jos filialai ir atitinkami verslo partneriai bei subrangovai. + +(2) Licenciatas suteikia IBM teisæ: + +(a) apdoroti ir naudoti verslo kontaktinæ informacijà IBM grupëje teikiant Licenciatui palaikymo paslaugas ir siekiant toliau palaikyti verslo ryðius tarp Licenciato ir IBM grupës, áskaitant, be apribojimø, kreipimàsi á verslo kontaktiná asmená (el. paðtu ar kitu bûdu) ir IBM grupës produktø ir paslaugø pardavimà (¥Nurodytas tikslas´), ir + +(b) atskleisti verslo kontaktinio asmens informacijà kitiems IBM grupës nariams tik siekiant Nurodyto tikslo. + +(3) IBM sutinka, kad visa verslo kontaktinë informacija bus apdorojama laikantis duomenø apsaugos ir elektroniniø ryðiø teisës aktø ir naudojama tik Nurodytu tikslu. + +(4) Iki duomenø apsaugos ir elektroniniø ryðiø teisës aktø nustatytos ribos Licenciatas patvirtina, kad (a) gavo (arba gaus) visus sutikimus ið verslo kontaktiniø asmenø ir jiems pateikë (arba pateiks) visus praneðimus, bûtinus norint leisti IBM grupei apdoroti ir naudoti verslo kontaktinæ informacijà Nurodytu tikslu. + +(5) Licenciatas suteikia IBM teisæ perduoti verslo kontaktinæ informacijà uþ Europos ekonominës zonos ribø, jei toks perdavimas vykdomas pagal sutarties sàlygas, kurias patvirtino duomenø apsaugos institucija, arba jei toká perdavimà leidþia duomenø apsaugos ir elektroniniø ryðiø teisës aktai. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_pl b/charts/mq-advancedserver/LICENSE_locale/LICENSE_pl new file mode 100644 index 0000000..d35b80b --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_pl @@ -0,0 +1,1173 @@ +UWAGA + +Niniejszy dokument zawiera dokumenty "Informacje licencyjne" (za³±czone poni¿ej) dla wielu Programów. Ka¿dy dokument "Informacje licencyjne" identyfikuje Program (jeden lub wiêcej), do którego ma zastosowanie. Obowi±zuj± dokumenty "Informacje licencyjne" jedynie dla Programu (jednego lub wiêcej), dla którego Licencjobiorca naby³ uprawnienia. + + +============================================== + + +WA¯NE INFORMACJE - PROSIMY PRZECZYTAÆ UWA¯NIE + +Poni¿ej przedstawione s± dwie umowy licencyjne: + +1. Miêdzynarodowa Umowa Licencyjna IBM na Próbne U¿ywanie Programów +2. Miêdzynarodowa Umowa Licencyjna IBM na Program + +Je¶li Licencjobiorca nabywa Program w celu u¿ywania w procesie produkcyjnym (a nie w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Je¶li Licencjobiorca nabywa Program w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji (zwanych ³±cznie "Próbnym U¿ywaniem"), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie zarówno (i) Miêdzynarodowej Umowy Licencyjnej na Próbne U¿ywanie Programów IBM (zwanej dalej "Licencj± na Próbne U¿ywanie") bez modyfikacji jak i (ii) Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Licencja na Próbne U¿ywanie bêdzie obowi±zywaæ przez ca³y okres Próbnego U¿ywania. + +Miêdzynarodowa Umowa Licencyjna na Program zacznie automatycznie obowi±zywaæ, je¶li Licencjobiorca zdecyduje siê zatrzymaæ Program po zakoñczeniu Próbnego U¿ywania (lub nabêdzie dodatkowe egzemplarze Programu w celu u¿ywania po zakoñczeniu Próbnego U¿ywania), zawieraj±c umowê kupna (tak± jak Miêdzynarodowa Umowa IBM Passport Advantage lub Miêdzynarodowa Umowa IBM Passport Advantage Express). + +Licencja na Próbne U¿ywanie oraz Miêdzynarodowa Umowa Licencyjna na Program nie obowi±zuj± jednocze¶nie; ¿adna z nich nie modyfikuje drugiej i nie jest od niej zale¿na. + +Poni¿ej znajduje siê pe³ny tekst obu tych umów licencyjnych. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Próbne U¿ywanie Programów (Z125-5543-05). + +Nazwa Programu (Numer Programu): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Poni¿sze standardowe warunki maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Okres próbnego u¿ywania + +Okres próbnego u¿ywania rozpoczyna siê w dniu, w którym Licencjobiorca wyrazi³ zgodê na warunki niniejszej Umowy i koñczy siê po liczbie dni równej 90. + +Programy Wspieraj±ce + +Program jest licencjonowany w postaci pakietu wieloproduktowego, zawieraj±cego Programy Wspieraj±ce okre¶lone poni¿ej. Licencjobiorca jest upowa¿niony do zainstalowania i u¿ywania takich Programów Wspieraj±cych jedynie w celu umo¿liwienia Licencjobiorcy u¿ywania Programu G³ównego na mocy niniejszej Umowy i w zakresie ograniczeñ nak³adanych przez dokumenty Proof of Entitlement dla Programu (chyba ¿e w innej czê¶ci niniejszego dokumentu "Informacje Licencyjne" oferowane s± szersze uprawnienia). Fraza "w celu umo¿liwienia Licencjobiorcy u¿ywania" obejmuje jedynie te zastosowania, które s± niezbêdne do licencjonowanego u¿ywania Programu G³ównego lub innego Programu Wspieraj±cego albo bezpo¶rednio zwi±zane z takim licencjonowanym u¿ywaniem. Programów Wspieraj±cych nie mo¿na wykorzystywaæ do jakichkolwiek innych celów. Licencjobiorca nie jest upowa¿niony do przenoszenia ani odsprzeda¿y Programów Wspieraj±cych oddzielnie od Programu G³ównego. Do Programu Wspieraj±cego mog± byæ do³±czone warunki licencji. W takim przypadku warunki te maj± zastosowanie do u¿ywania takiego Programu Wspieraj±cego przez Licencjobiorcê. W przypadku sprzeczno¶ci miêdzy warunkami niniejszych Informacji licencyjnych a warunkami licencji Programu Wspieraj±cego znaczenie rozstrzygaj±ce maj± warunki niniejszych Informacji licencyjnych. Kiedy prawo Licencjobiorcy do korzystania z Programu wyga¶nie lub zostanie mu wypowiedziane, Licencjobiorca musi zaprzestaæ korzystania z Programów Wspieraj±cych oraz zniszczyæ lub niezw³ocznie zwróciæ wszystkie ich egzemplarze do strony, od której Licencjobiorca naby³ Program. Je¶li Licencjobiorca pobra³ Programy Wspieraj±ce, powinien skontaktowaæ siê ze stron±, od której naby³ Program. Je¶li Licencjobiorca zamierza licencjonowaæ Programy Wspieraj±ce w celu u¿ywania nieobjêtego ograniczeniami wyszczególnionymi powy¿ej, powinien skontaktowaæ siê z przedstawicielem handlowym IBM lub z podmiotem, od którego naby³ Program, w celu uzyskania odpowiedniej licencji. + +Poni¿ej wymieniono Programy Wspieraj±ce licencjonowane z Programem: +IBM WebSphere Application Server Liberty V17.0 + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Program (Z125-3301-14). + +Nazwa Programu (Numer Programu): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Poni¿sze standardowe warunki maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Ograniczone prawo do u¿ywania + +Zgodnie z Miêdzynarodow± Umow± Licencyjn± na Program ("IPLA") i niniejszym dokumentem Informacje licencyjne IBM udziela Licencjobiorcy ograniczonego prawa do u¿ywania Programu. Prawo to jest ograniczone do poziomu Autoryzowanego U¿ywania, takiego jak Procesorowa Jednostka Warto¶ci ("PVU"), Jednostka Warto¶ci Zasobów ("RVU"), Jednostka Warto¶ci ("VU") lub inny okre¶lony poziom u¿ywania, op³acony przez Licencjobiorcê i potwierdzony dokumentem Proof of Entitlement (PoE). U¿ywanie Programu przez Licencjobiorcê mo¿e byæ równie¿ ograniczone do okre¶lonej maszyny, mo¿e podlegaæ innym ograniczeniom lub mo¿e obejmowaæ u¿ywanie Programu wy³±cznie jako Programu Wspieraj±cego. Jako ¿e Licencjobiorca nie zap³aci³ za ca³± warto¶æ ekonomiczn± Programu, u¿ywanie Programu w dowolnym innym celu bez uiszczenia dodatkowych op³at jest zabronione. Ponadto Licencjobiorca nie jest upowa¿niony do u¿ywania Programu do ¶wiadczenia osobom trzecim komercyjnych us³ug informatycznych, us³ug serwerowych ani us³ug podzia³u czasu, jak równie¿ nie jest upowa¿niony do udzielania dalszych licencji na Program oraz wypo¿yczania i wydzier¿awiania Programu, chyba ¿e stosowne umowy, na mocy których Licencjobiorca jest upowa¿niony do u¿ywania Programu, wyra¼nie stanowi± inaczej. Licencjobiorca mo¿e uzyskaæ dodatkowe prawa pod warunkiem uiszczenia dodatkowych op³at lub na mocy innych b±d¼ uzupe³niaj±cych warunków. IBM zastrzega sobie prawo do decydowania, czy takie dodatkowe prawa zostan± przyznane Licencjobiorcy. + +Specyfikacja + +Specyfikacje Programu znajduj± siê w zbiorczych punktach zawieraj±cych opisy i informacje techniczne w dokumentach "Aktualno¶ci produktowe" dotycz±cych Programu. + +Programy Wspieraj±ce + +Program jest licencjonowany w postaci pakietu wieloproduktowego, zawieraj±cego Programy Wspieraj±ce okre¶lone poni¿ej. Licencjobiorca jest upowa¿niony do zainstalowania i u¿ywania takich Programów Wspieraj±cych jedynie w celu umo¿liwienia Licencjobiorcy u¿ywania Programu G³ównego na mocy niniejszej Umowy i w zakresie ograniczeñ nak³adanych przez dokumenty Proof of Entitlement dla Programu (chyba ¿e w innej czê¶ci niniejszego dokumentu "Informacje Licencyjne" oferowane s± szersze uprawnienia). Fraza "w celu umo¿liwienia Licencjobiorcy u¿ywania" obejmuje jedynie te zastosowania, które s± niezbêdne do licencjonowanego u¿ywania Programu G³ównego lub innego Programu Wspieraj±cego albo bezpo¶rednio zwi±zane z takim licencjonowanym u¿ywaniem. Programów Wspieraj±cych nie mo¿na wykorzystywaæ do jakichkolwiek innych celów. Licencjobiorca nie jest upowa¿niony do przenoszenia ani odsprzeda¿y Programów Wspieraj±cych oddzielnie od Programu G³ównego. Do Programu Wspieraj±cego mog± byæ do³±czone warunki licencji. W takim przypadku warunki te maj± zastosowanie do u¿ywania takiego Programu Wspieraj±cego przez Licencjobiorcê. W przypadku sprzeczno¶ci miêdzy warunkami niniejszych Informacji licencyjnych a warunkami licencji Programu Wspieraj±cego znaczenie rozstrzygaj±ce maj± warunki niniejszych Informacji licencyjnych. Kiedy prawo Licencjobiorcy do korzystania z Programu wyga¶nie lub zostanie mu wypowiedziane, Licencjobiorca musi zaprzestaæ korzystania z Programów Wspieraj±cych oraz zniszczyæ lub niezw³ocznie zwróciæ wszystkie ich egzemplarze do strony, od której Licencjobiorca naby³ Program. Je¶li Licencjobiorca pobra³ Programy Wspieraj±ce, powinien skontaktowaæ siê ze stron±, od której naby³ Program. Je¶li Licencjobiorca zamierza licencjonowaæ Programy Wspieraj±ce w celu u¿ywania nieobjêtego ograniczeniami wyszczególnionymi powy¿ej, powinien skontaktowaæ siê z przedstawicielem handlowym IBM lub z podmiotem, od którego naby³ Program, w celu uzyskania odpowiedniej licencji. + +Poni¿ej wymieniono Programy Wspieraj±ce licencjonowane z Programem: +IBM WebSphere Application Server Liberty V17.0 + +Komponenty nieu¿ywane do ustanawiania wymaganych uprawnieñ + +Przy ustalaniu liczby uprawnieñ wymaganych do instalowania lub u¿ywania Programu przez Licencjobiorcê nie bierze siê pod uwagê instalowania lub u¿ywania nastêpuj±cych komponentów Programu. Innymi s³owy, Licencjobiorca mo¿e zainstalowaæ nastêpuj±ce komponenty Programu i u¿ywaæ ich zgodnie z warunkami licencji, ale komponenty te nie mog± byæ u¿ywane do okre¶lania liczby uprawnieñ wymaganych dla Programu. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Elementy Podlegaj±ce Redystrybucji + +Je¶li Program zawiera komponenty bêd±ce Elementami Podlegaj±cymi Redystrybucji, zostan± one zidentyfikowane w pliku REDIST do³±czonym do Programu. Poza prawami licencyjnymi przyznanymi na mocy Umowy, Licencjobiorca mo¿e dystrybuowaæ Elementy Podlegaj±ce Redystrybucji na nastêpuj±cych warunkach: +1) Musz± byæ one redystrybuowane w postaci kodu wynikowego oraz zgodnie z wszystkimi wskazówkami, instrukcjami i specyfikacjami w pliku REDIST lub dokumentacji do³±czonej do Programu; +2) Je¶li dokumentacja do³±czona do Programu wyra¼nie zezwala Licencjobiorcy na modyfikowanie Plików Podlegaj±cych Redystrybucji, wówczas takie modyfikacje musz± byæ zgodne z wszystkimi wskazówkami, instrukcjami i specyfikacjami w tej dokumentacji i byæ traktowane jak Pliki Podlegaj±ce Redystrybucji; +3) Pliki Podlegaj±ce Redystrybucji mo¿na dystrybuowaæ jedynie jako czê¶æ aplikacji Licencjobiorcy opracowanej z u¿yciem Programu (zwanej dalej "Aplikacj± Licencjobiorcy") i jedynie do wspierania klientów Licencjobiorcy w zwi±zku z u¿ywaniem przez nich Aplikacji Licencjobiorcy. Aplikacja Licencjobiorcy musi stanowiæ istotn± warto¶æ dodan±, tak aby Pliki Podlegaj±ce Redystrybucji nie stanowi³y istotnej motywacji do nabycia przez u¿ytkowników koñcowych oprogramowania Licencjobiorcy; +4) Je¶li Pliki Podlegaj±ce Redystrybucji obejmuj± ¶rodowisko Java Runtime Environment, Licencjobiorca musi równie¿ do³±czyæ do Aplikacji Licencjobiorcy inne ni¿ Java Pliki Podlegaj±ce Redystrybucji, chyba ¿e Aplikacja ta jest zaprojektowana z my¶l± o uruchamianiu jedynie na urz±dzeniach komputerowych ogólnego zastosowania (na przyk³ad laptopach, desktopach i serwerach), a nie na urz±dzeniach kieszonkowych ani przeno¶nych (tzn. urz±dzeniach zawieraj±cych mikroprocesor, ale nie bêd±cych przede wszystkich urz±dzeniami obliczeniowymi); +5) Licencjobiorca nie mo¿e usuwaæ ¿adnych plików z uwagami dotycz±cymi praw autorskich i innymi zawartych w Plikach Podlegaj±cych Redystrybucji; +6) Licencjobiorca bêdzie chroniæ IBM, dostawców IBM i dystrybutorów IBM przed wszelkimi roszczeniami wynikaj±cymi z u¿ywania lub rozpowszechniania Aplikacji Licencjobiorcy; +7) Licencjobiorca nie mo¿e korzystaæ ze ¶cie¿ek o tej samej nazwie, co ¶cie¿ki do oryginalnych plików/modu³ów Plików Podlegaj±cych Redystrybucji; +8) Licencjobiorca nie mo¿e wykorzystywaæ - w zwi±zku z czynno¶ciami marketingowymi odnosz±cymi siê do Aplikacji Licencjobiorcy - nazw ani znaków towarowych IBM, dostawców IBM ani dystrybutorów IBM bez ich wcze¶niejszej pisemnej zgody; +9) IBM, dostawcy IBM i dystrybutorzy IBM dostarczaj± Pliki Podlegaj±ce Redystrybucji oraz zwi±zan± z nimi dokumentacjê bez zobowi±zania do wsparcia i W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU; +10) Licencjobiorca ponosi odpowiedzialno¶æ za wszelk± pomoc techniczn± dotycz±c± Aplikacji Licencjobiorcy oraz wszelkich modyfikacji Elementów Podlegaj±cych Redystrybucji; +11) Umowa licencyjna Licencjobiorcy z u¿ytkownikiem koñcowym Aplikacji Licencjobiorcy musi powiadamiaæ u¿ytkownika koñcowego, ¿e Plików Podlegaj±cych Redystrybucji oraz ich modyfikacji nie mo¿na i) u¿ywaæ do celów innych ni¿ umo¿liwienie dzia³ania Aplikacji Licencjobiorcy, ii) kopiowaæ (z wyj±tkiem tworzenia kopii zapasowych), iii) dalej dystrybuowaæ ani przenosiæ bez Aplikacji Licencjobiorcy ani iv) deasemblowaæ, dekompilowaæ ani poddawaæ translacji w inny sposób, z wyj±tkiem przypadków wyra¼nie dozwolonych przez prawo, bez mo¿liwo¶ci wy³±czenia na mocy umowy. Ponadto umowa licencyjna Licencjobiorcy musi zapewniaæ IBM ochronê co najmniej równ± zapewnianej przez warunki niniejszej Umowy. + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + +W przypadku Komponentów ¬ród³owych i Materia³ów Przyk³adowych wymienionych w pliku REDIST Programu Licencjobiorca mo¿e redystrybuowaæ zmodyfikowane wersje tych Komponentów ¬ród³owych i Materia³ów Przyk³adowych, zgodnie z warunkami niniejszej licencji oraz wszelkimi instrukcjami w pliku REDIST. + +Poni¿sze jednostki miary maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Procesorowa Jednostka Warto¶ci ("PVU") + +Procesorowa Jednostka Warto¶ci (Processor Value Unit, zwana dalej "PVU") to jednostka miary, wed³ug której licencjonowany jest Program. Liczba wymaganych uprawnieñ PVU zale¿y od technologii procesorowej (zdefiniowanej wed³ug Dostawcy, Marki, Typu i Modelu Procesora w Tabeli PVU, pod adresem http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) oraz od liczby procesorów udostêpnionych dla Programu. Na potrzeby licencjonowania w oparciu o jednostki PVU, IBM w dalszym ci±gu definiuje jako procesor ka¿dy rdzeñ procesora w uk³adzie scalonym. I tak na przyk³ad procesor dwurdzeniowy traktowany jest jako dwa procesory. + +Licencjobiorca mo¿e zainstalowaæ Program, korzystaj±c albo z licencjonowania Pe³nej Mocy Obliczeniowej, albo z licencjonowania Mocy Obliczeniowej Wirtualizacji (Ograniczonej Mocy Obliczeniowej) zgodnie z warunkami Licencjonowania wed³ug Ograniczonej Mocy Obliczeniowej umowy Passport Advantage (patrz poni¿sza strona WWW). W przypadku licencjonowania Pe³nej Mocy Obliczeniowej, Licencjobiorca musi nabyæ uprawnienia PVU wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów* w fizycznym ¶rodowisku sprzêtowym dostêpnych dla Programu lub zarz±dzanych przez Program, z wyj±tkiem tych serwerów, z których Program trwale usuniêto. W przypadku licencjonowania Mocy Obliczeniowej Wirtualizacji, Licencjobiorca musi nabyæ uprawnienia wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów dostêpnych dla Programu lub zarz±dzanych przez Program, zdefiniowanych zgodnie z "Regu³ami Zliczania Licencji na Moc Obliczeniow± Wirtualizacji" (Virtualization Capacity License Counting Rules) pod adresem http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktywowany rdzeñ procesora to taki rdzeñ procesora, który jest dostêpny na u¿ytek w serwerze fizycznym lub wirtualnym, bez wzglêdu na to, czy moc obliczeniowa rdzenia procesora mo¿e byæ lub jest ograniczona z u¿yciem technologii wirtualizacji, komend systemu operacyjnego, ustawieñ systemu BIOS lub podobnych ograniczeñ. + +Wirtualny Rdzeñ Procesora + +Wirtualny Rdzeñ Procesora to jednostka miary, wed³ug której licencjonowany jest Program. Serwer Fizyczny to komputer fizyczny sk³adaj±cy siê z jednostek przetwarzaj±cych, pamiêci i funkcji wej¶cia/wyj¶cia, na którym wykonuje siê ¿±dane procedury lub komendy albo uruchamia aplikacje na u¿ytek u¿ytkowników koñcowych lub urz±dzeñ klienckich. W przypadku wykorzystania stela¿y przemys³owych, obudów na serwery kasetowe czy innych podobnych urz±dzeñ ka¿de oddzielne urz±dzenie fizyczne (np. serwer kasetowy czy urz±dzenie instalowane w stela¿u), które ma wymagane komponenty, uznawane jest za oddzielny Serwer Fizyczny. Serwer Wirtualny to komputer wirtualny utworzony poprzez spartycjonowanie zasobów Serwera Fizycznego lub niespartycjonowany Serwer Fizyczny. Rdzeñ Procesora (zwany równie¿ procesorem) to jednostka funkcjonalna w urz±dzeniu komputerowym, która interpretuje i wykonuje instrukcje. Rdzeñ Procesora sk³ada siê co najmniej z jednostki steruj±cej oraz z jednej lub wiêkszej liczby jednostek arytmetyczno-logicznych. Wirtualny Rdzeñ Procesora to Rdzeñ Procesora na niespartycjonowanym Serwerze Fizycznym lub rdzeñ wirtualny przypisany do Serwera Wirtualnego. Licencjobiorca musi nabyæ uprawnienia dla ka¿dego Wirtualnego Rdzenia Procesora udostêpnionego dla Programu. + +Dla ka¿dego Serwera Fizycznego Licencjobiorca musi uzyskaæ uprawnienia odpowiadaj±ce mniejszej z nastêpuj±cych liczb: 1) sumie wszystkich dostêpnych Wirtualnych Rdzeni Procesorów na wszystkich Serwerach Wirtualnych udostêpnianych Programowi, lub 2) wszystkim dostêpnym Rdzeniom Procesorów na Serwerze Fizycznym. + +Ponadto u¿ywanie Programu przez Licencjobiorcê podlega nastêpuj±cym warunkom. + +Konfiguracje w trybie gotowo¶ci bezczynnej + +Na potrzeby niniejszego paragrafu konfiguracja "w trybie gotowo¶ci bezczynnej" oznacza tak± konfiguracjê, w której egzemplarz Programu jest zainstalowany na serwerze wchodz±cym w sk³ad rozwi±zania zapewniaj±cego wysok± dostêpno¶æ, na który to serwer Program jest prze³±czany awaryjnie w przypadku, gdy egzemplarz Programu uruchomiony na serwerze aktywnym przestanie byæ u¿yteczny. Serwer jest uwa¿any za bezczynny jedynie wówczas, gdy jest u¿ywany wy³±cznie w celu wykonania czynno¶ci administracyjnych, podejmowanych w sytuacjach prze³±czenia awaryjnego (do czasu wykonania prze³±czenia awaryjnego). + +Program nie mo¿e byæ instalowany na serwerze pracuj±cym w trybie gotowo¶ci bezczynnej, o ile nie jest objêty odpowiedni± licencj±. + +Je¶li Program jest u¿ywany w konfiguracji w trybie gotowo¶ci bezczynnej z opcj± Multi-Instance Queue Manager, to egzemplarz Programu mo¿e rezydowaæ i byæ uruchamiany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej na potrzeby kopii zapasowej, ale musi pozostaæ bezczynny i nie mo¿e s³u¿yæ do wykonywania jakichkolwiek zadañ produkcyjnych, o ile nie nast±pi prze³±czenie awaryjne z serwera aktywnego na serwer dzia³aj±cy w trybie gotowo¶ci bezczynnej, w którym to przypadku egzemplarz zainstalowany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej mo¿e byæ s³u¿yæ do wykonywania zadañ produkcyjnych w okresie trwania prze³±czenia awaryjnego. + +Je¶li Program jest u¿ywany w konfiguracji w trybie gotowo¶ci bezczynnej z innymi systemami zapewniaj±cymi wysok± dostêpno¶æ, to egzemplarz Programu mo¿e rezydowaæ na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej na potrzeby kopii zapasowej, ale nie mo¿e byæ uruchomiony (a w zwi±zku z tym, u¿ywany do wykonywania jakichkolwiek zadañ produkcyjnych); zostanie natomiast uruchomiony automatycznie przez komponenty ¶rodowiska wysokiej dostêpno¶ci w przypadku awarii serwera aktywnego, w którym to przypadku egzemplarz zainstalowany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej mo¿e s³u¿yæ do wykonywania zadañ produkcyjnych w okresie trwania prze³±czenia awaryjnego. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +WA¯NE INFORMACJE - PROSIMY PRZECZYTAÆ UWA¯NIE + +Poni¿ej przedstawione s± dwie umowy licencyjne: + +1. Miêdzynarodowa Umowa Licencyjna IBM na Próbne U¿ywanie Programów +2. Miêdzynarodowa Umowa Licencyjna IBM na Program + +Je¶li Licencjobiorca nabywa Program w celu u¿ywania w procesie produkcyjnym (a nie w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Je¶li Licencjobiorca nabywa Program w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji (zwanych ³±cznie "Próbnym U¿ywaniem"), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie zarówno (i) Miêdzynarodowej Umowy Licencyjnej na Próbne U¿ywanie Programów IBM (zwanej dalej "Licencj± na Próbne U¿ywanie") bez modyfikacji jak i (ii) Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Licencja na Próbne U¿ywanie bêdzie obowi±zywaæ przez ca³y okres Próbnego U¿ywania. + +Miêdzynarodowa Umowa Licencyjna na Program zacznie automatycznie obowi±zywaæ, je¶li Licencjobiorca zdecyduje siê zatrzymaæ Program po zakoñczeniu Próbnego U¿ywania (lub nabêdzie dodatkowe egzemplarze Programu w celu u¿ywania po zakoñczeniu Próbnego U¿ywania), zawieraj±c umowê kupna (tak± jak Miêdzynarodowa Umowa IBM Passport Advantage lub Miêdzynarodowa Umowa IBM Passport Advantage Express). + +Licencja na Próbne U¿ywanie oraz Miêdzynarodowa Umowa Licencyjna na Program nie obowi±zuj± jednocze¶nie; ¿adna z nich nie modyfikuje drugiej i nie jest od niej zale¿na. + +Poni¿ej znajduje siê pe³ny tekst obu tych umów licencyjnych. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Próbne U¿ywanie Programów (Z125-5543-05). + +Nazwa Programu (Numer Programu): +IBM MQ Advanced V9.0.3 (Evaluation) + +Poni¿sze standardowe warunki maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Okres próbnego u¿ywania + +Okres próbnego u¿ywania rozpoczyna siê w dniu, w którym Licencjobiorca wyrazi³ zgodê na warunki niniejszej Umowy i koñczy siê po liczbie dni równej 90. + +Programy Pakietowe + +Program jest licencjonowany w postaci pakietu wieloproduktowego, zawieraj±cego Programy Pakietowe okre¶lone poni¿ej. Licencjobiorca jest upowa¿niony do zainstalowania i u¿ywania takich Programów Pakietowych jedynie w zakresie ograniczeñ nak³adanych przez dokumenty Proof of Entitlement dla Programu oraz zgodnie z niniejszym dokumentem "Informacje Licencyjne". Licencjobiorca nie jest upowa¿niony do przenoszenia ani odsprzeda¿y Programów Pakietowych oddzielnie od pakietu wieloproduktowego. Do Programu Pakietowego mog± byæ do³±czone warunki licencji. W takim przypadku warunki te maj± zastosowanie do u¿ywania takiego Programu Pakietowego przez Licencjobiorcê. W przypadku sprzeczno¶ci miêdzy warunkami niniejszych Informacji licencyjnych a warunkami licencji Programu Pakietowego znaczenie rozstrzygaj±ce maj± warunki niniejszych Informacji licencyjnych. Kiedy prawo Licencjobiorcy do korzystania z Programu wyga¶nie lub zostanie mu wypowiedziane, Licencjobiorca musi zaprzestaæ korzystania z Programów Pakietowych oraz zniszczyæ lub niezw³ocznie zwróciæ wszystkie ich egzemplarze do strony, od której Licencjobiorca naby³ Program. Je¶li Licencjobiorca pobra³ Programy Pakietowe, powinien skontaktowaæ siê ze stron±, od której naby³ Program. Je¶li Licencjobiorca zamierza licencjonowaæ Programy Pakietowe w celu u¿ywania nieobjêtego ograniczeniami wyszczególnionymi powy¿ej, powinien skontaktowaæ siê z przedstawicielem handlowym IBM lub z podmiotem, od którego naby³ Program, w celu uzyskania odpowiedniej licencji. + +Poni¿ej wymieniono Programy Pakietowe licencjonowane z Programem: +IBM MQ V9.0.3 + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Program (Z125-3301-14). + +Nazwa Programu (Numer Programu): +IBM MQ Advanced V9.0.3 (5724-H72) + +Poni¿sze standardowe warunki maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Ograniczone prawo do u¿ywania + +Zgodnie z Miêdzynarodow± Umow± Licencyjn± na Program ("IPLA") i niniejszym dokumentem Informacje licencyjne IBM udziela Licencjobiorcy ograniczonego prawa do u¿ywania Programu. Prawo to jest ograniczone do poziomu Autoryzowanego U¿ywania, takiego jak Procesorowa Jednostka Warto¶ci ("PVU"), Jednostka Warto¶ci Zasobów ("RVU"), Jednostka Warto¶ci ("VU") lub inny okre¶lony poziom u¿ywania, op³acony przez Licencjobiorcê i potwierdzony dokumentem Proof of Entitlement (PoE). U¿ywanie Programu przez Licencjobiorcê mo¿e byæ równie¿ ograniczone do okre¶lonej maszyny, mo¿e podlegaæ innym ograniczeniom lub mo¿e obejmowaæ u¿ywanie Programu wy³±cznie jako Programu Wspieraj±cego. Jako ¿e Licencjobiorca nie zap³aci³ za ca³± warto¶æ ekonomiczn± Programu, u¿ywanie Programu w dowolnym innym celu bez uiszczenia dodatkowych op³at jest zabronione. Ponadto Licencjobiorca nie jest upowa¿niony do u¿ywania Programu do ¶wiadczenia osobom trzecim komercyjnych us³ug informatycznych, us³ug serwerowych ani us³ug podzia³u czasu, jak równie¿ nie jest upowa¿niony do udzielania dalszych licencji na Program oraz wypo¿yczania i wydzier¿awiania Programu, chyba ¿e stosowne umowy, na mocy których Licencjobiorca jest upowa¿niony do u¿ywania Programu, wyra¼nie stanowi± inaczej. Licencjobiorca mo¿e uzyskaæ dodatkowe prawa pod warunkiem uiszczenia dodatkowych op³at lub na mocy innych b±d¼ uzupe³niaj±cych warunków. IBM zastrzega sobie prawo do decydowania, czy takie dodatkowe prawa zostan± przyznane Licencjobiorcy. + +Specyfikacja + +Specyfikacje Programu znajduj± siê w zbiorczych punktach zawieraj±cych opisy i informacje techniczne w dokumentach "Aktualno¶ci produktowe" dotycz±cych Programu. + +Programy Pakietowe + +Program jest licencjonowany w postaci pakietu wieloproduktowego, zawieraj±cego Programy Pakietowe okre¶lone poni¿ej. Licencjobiorca jest upowa¿niony do zainstalowania i u¿ywania takich Programów Pakietowych jedynie w zakresie ograniczeñ nak³adanych przez dokumenty Proof of Entitlement dla Programu oraz zgodnie z niniejszym dokumentem "Informacje Licencyjne". Licencjobiorca nie jest upowa¿niony do przenoszenia ani odsprzeda¿y Programów Pakietowych oddzielnie od pakietu wieloproduktowego. Do Programu Pakietowego mog± byæ do³±czone warunki licencji. W takim przypadku warunki te maj± zastosowanie do u¿ywania takiego Programu Pakietowego przez Licencjobiorcê. W przypadku sprzeczno¶ci miêdzy warunkami niniejszych Informacji licencyjnych a warunkami licencji Programu Pakietowego znaczenie rozstrzygaj±ce maj± warunki niniejszych Informacji licencyjnych. Kiedy prawo Licencjobiorcy do korzystania z Programu wyga¶nie lub zostanie mu wypowiedziane, Licencjobiorca musi zaprzestaæ korzystania z Programów Pakietowych oraz zniszczyæ lub niezw³ocznie zwróciæ wszystkie ich egzemplarze do strony, od której Licencjobiorca naby³ Program. Je¶li Licencjobiorca pobra³ Programy Pakietowe, powinien skontaktowaæ siê ze stron±, od której naby³ Program. Je¶li Licencjobiorca zamierza licencjonowaæ Programy Pakietowe w celu u¿ywania nieobjêtego ograniczeniami wyszczególnionymi powy¿ej, powinien skontaktowaæ siê z przedstawicielem handlowym IBM lub z podmiotem, od którego naby³ Program, w celu uzyskania odpowiedniej licencji. + +Poni¿ej wymieniono Programy Pakietowe licencjonowane z Programem: +IBM MQ V9.0.3 + +Komponenty nieu¿ywane do ustanawiania wymaganych uprawnieñ + +Przy ustalaniu liczby uprawnieñ wymaganych do instalowania lub u¿ywania Programu przez Licencjobiorcê nie bierze siê pod uwagê instalowania lub u¿ywania nastêpuj±cych komponentów Programu. Innymi s³owy, Licencjobiorca mo¿e zainstalowaæ nastêpuj±ce komponenty Programu i u¿ywaæ ich zgodnie z warunkami licencji, ale komponenty te nie mog± byæ u¿ywane do okre¶lania liczby uprawnieñ wymaganych dla Programu. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + +Poni¿sze jednostki miary maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Procesorowa Jednostka Warto¶ci ("PVU") + +Procesorowa Jednostka Warto¶ci (Processor Value Unit, zwana dalej "PVU") to jednostka miary, wed³ug której licencjonowany jest Program. Liczba wymaganych uprawnieñ PVU zale¿y od technologii procesorowej (zdefiniowanej wed³ug Dostawcy, Marki, Typu i Modelu Procesora w Tabeli PVU, pod adresem http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) oraz od liczby procesorów udostêpnionych dla Programu. Na potrzeby licencjonowania w oparciu o jednostki PVU, IBM w dalszym ci±gu definiuje jako procesor ka¿dy rdzeñ procesora w uk³adzie scalonym. I tak na przyk³ad procesor dwurdzeniowy traktowany jest jako dwa procesory. + +Licencjobiorca mo¿e zainstalowaæ Program, korzystaj±c albo z licencjonowania Pe³nej Mocy Obliczeniowej, albo z licencjonowania Mocy Obliczeniowej Wirtualizacji (Ograniczonej Mocy Obliczeniowej) zgodnie z warunkami Licencjonowania wed³ug Ograniczonej Mocy Obliczeniowej umowy Passport Advantage (patrz poni¿sza strona WWW). W przypadku licencjonowania Pe³nej Mocy Obliczeniowej, Licencjobiorca musi nabyæ uprawnienia PVU wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów* w fizycznym ¶rodowisku sprzêtowym dostêpnych dla Programu lub zarz±dzanych przez Program, z wyj±tkiem tych serwerów, z których Program trwale usuniêto. W przypadku licencjonowania Mocy Obliczeniowej Wirtualizacji, Licencjobiorca musi nabyæ uprawnienia wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów dostêpnych dla Programu lub zarz±dzanych przez Program, zdefiniowanych zgodnie z "Regu³ami Zliczania Licencji na Moc Obliczeniow± Wirtualizacji" (Virtualization Capacity License Counting Rules) pod adresem http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktywowany rdzeñ procesora to taki rdzeñ procesora, który jest dostêpny na u¿ytek w serwerze fizycznym lub wirtualnym, bez wzglêdu na to, czy moc obliczeniowa rdzenia procesora mo¿e byæ lub jest ograniczona z u¿yciem technologii wirtualizacji, komend systemu operacyjnego, ustawieñ systemu BIOS lub podobnych ograniczeñ. + +Wirtualny Rdzeñ Procesora + +Wirtualny Rdzeñ Procesora to jednostka miary, wed³ug której licencjonowany jest Program. Serwer Fizyczny to komputer fizyczny sk³adaj±cy siê z jednostek przetwarzaj±cych, pamiêci i funkcji wej¶cia/wyj¶cia, na którym wykonuje siê ¿±dane procedury lub komendy albo uruchamia aplikacje na u¿ytek u¿ytkowników koñcowych lub urz±dzeñ klienckich. W przypadku wykorzystania stela¿y przemys³owych, obudów na serwery kasetowe czy innych podobnych urz±dzeñ ka¿de oddzielne urz±dzenie fizyczne (np. serwer kasetowy czy urz±dzenie instalowane w stela¿u), które ma wymagane komponenty, uznawane jest za oddzielny Serwer Fizyczny. Serwer Wirtualny to komputer wirtualny utworzony poprzez spartycjonowanie zasobów Serwera Fizycznego lub niespartycjonowany Serwer Fizyczny. Rdzeñ Procesora (zwany równie¿ procesorem) to jednostka funkcjonalna w urz±dzeniu komputerowym, która interpretuje i wykonuje instrukcje. Rdzeñ Procesora sk³ada siê co najmniej z jednostki steruj±cej oraz z jednej lub wiêkszej liczby jednostek arytmetyczno-logicznych. Wirtualny Rdzeñ Procesora to Rdzeñ Procesora na niespartycjonowanym Serwerze Fizycznym lub rdzeñ wirtualny przypisany do Serwera Wirtualnego. Licencjobiorca musi nabyæ uprawnienia dla ka¿dego Wirtualnego Rdzenia Procesora udostêpnionego dla Programu. + +Dla ka¿dego Serwera Fizycznego Licencjobiorca musi uzyskaæ uprawnienia odpowiadaj±ce mniejszej z nastêpuj±cych liczb: 1) sumie wszystkich dostêpnych Wirtualnych Rdzeni Procesorów na wszystkich Serwerach Wirtualnych udostêpnianych Programowi, lub 2) wszystkim dostêpnym Rdzeniom Procesorów na Serwerze Fizycznym. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +WA¯NE INFORMACJE - PROSIMY PRZECZYTAÆ UWA¯NIE + +Poni¿ej przedstawione s± dwie umowy licencyjne: + +1. Miêdzynarodowa Umowa Licencyjna IBM na Próbne U¿ywanie Programów +2. Miêdzynarodowa Umowa Licencyjna IBM na Program + +Je¶li Licencjobiorca nabywa Program w celu u¿ywania w procesie produkcyjnym (a nie w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Je¶li Licencjobiorca nabywa Program w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji (zwanych ³±cznie "Próbnym U¿ywaniem"), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie zarówno (i) Miêdzynarodowej Umowy Licencyjnej na Próbne U¿ywanie Programów IBM (zwanej dalej "Licencj± na Próbne U¿ywanie") bez modyfikacji jak i (ii) Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Licencja na Próbne U¿ywanie bêdzie obowi±zywaæ przez ca³y okres Próbnego U¿ywania. + +Miêdzynarodowa Umowa Licencyjna na Program zacznie automatycznie obowi±zywaæ, je¶li Licencjobiorca zdecyduje siê zatrzymaæ Program po zakoñczeniu Próbnego U¿ywania (lub nabêdzie dodatkowe egzemplarze Programu w celu u¿ywania po zakoñczeniu Próbnego U¿ywania), zawieraj±c umowê kupna (tak± jak Miêdzynarodowa Umowa IBM Passport Advantage lub Miêdzynarodowa Umowa IBM Passport Advantage Express). + +Licencja na Próbne U¿ywanie oraz Miêdzynarodowa Umowa Licencyjna na Program nie obowi±zuj± jednocze¶nie; ¿adna z nich nie modyfikuje drugiej i nie jest od niej zale¿na. + +Poni¿ej znajduje siê pe³ny tekst obu tych umów licencyjnych. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Próbne U¿ywanie Programów (Z125-5543-05). + +Nazwa Programu (Numer Programu): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Poni¿sze standardowe warunki maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Okres próbnego u¿ywania + +Okres próbnego u¿ywania rozpoczyna siê w dniu, w którym Licencjobiorca wyrazi³ zgodê na warunki niniejszej Umowy i koñczy siê po liczbie dni równej 90. + +Programy Pakietowe + +Program jest licencjonowany w postaci pakietu wieloproduktowego, zawieraj±cego Programy Pakietowe okre¶lone poni¿ej. Licencjobiorca jest upowa¿niony do zainstalowania i u¿ywania takich Programów Pakietowych jedynie w zakresie ograniczeñ nak³adanych przez dokumenty Proof of Entitlement dla Programu oraz zgodnie z niniejszym dokumentem "Informacje Licencyjne". Licencjobiorca nie jest upowa¿niony do przenoszenia ani odsprzeda¿y Programów Pakietowych oddzielnie od pakietu wieloproduktowego. Do Programu Pakietowego mog± byæ do³±czone warunki licencji. W takim przypadku warunki te maj± zastosowanie do u¿ywania takiego Programu Pakietowego przez Licencjobiorcê. W przypadku sprzeczno¶ci miêdzy warunkami niniejszych Informacji licencyjnych a warunkami licencji Programu Pakietowego znaczenie rozstrzygaj±ce maj± warunki niniejszych Informacji licencyjnych. Kiedy prawo Licencjobiorcy do korzystania z Programu wyga¶nie lub zostanie mu wypowiedziane, Licencjobiorca musi zaprzestaæ korzystania z Programów Pakietowych oraz zniszczyæ lub niezw³ocznie zwróciæ wszystkie ich egzemplarze do strony, od której Licencjobiorca naby³ Program. Je¶li Licencjobiorca pobra³ Programy Pakietowe, powinien skontaktowaæ siê ze stron±, od której naby³ Program. Je¶li Licencjobiorca zamierza licencjonowaæ Programy Pakietowe w celu u¿ywania nieobjêtego ograniczeniami wyszczególnionymi powy¿ej, powinien skontaktowaæ siê z przedstawicielem handlowym IBM lub z podmiotem, od którego naby³ Program, w celu uzyskania odpowiedniej licencji. + +Poni¿ej wymieniono Programy Pakietowe licencjonowane z Programem: +IBM MQ Idle Standby V9.0.3 + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Program (Z125-3301-14). + +Nazwa Programu (Numer Programu): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Poni¿sze standardowe warunki maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Ograniczone prawo do u¿ywania + +Zgodnie z Miêdzynarodow± Umow± Licencyjn± na Program ("IPLA") i niniejszym dokumentem Informacje licencyjne IBM udziela Licencjobiorcy ograniczonego prawa do u¿ywania Programu. Prawo to jest ograniczone do poziomu Autoryzowanego U¿ywania, takiego jak Procesorowa Jednostka Warto¶ci ("PVU"), Jednostka Warto¶ci Zasobów ("RVU"), Jednostka Warto¶ci ("VU") lub inny okre¶lony poziom u¿ywania, op³acony przez Licencjobiorcê i potwierdzony dokumentem Proof of Entitlement (PoE). U¿ywanie Programu przez Licencjobiorcê mo¿e byæ równie¿ ograniczone do okre¶lonej maszyny, mo¿e podlegaæ innym ograniczeniom lub mo¿e obejmowaæ u¿ywanie Programu wy³±cznie jako Programu Wspieraj±cego. Jako ¿e Licencjobiorca nie zap³aci³ za ca³± warto¶æ ekonomiczn± Programu, u¿ywanie Programu w dowolnym innym celu bez uiszczenia dodatkowych op³at jest zabronione. Ponadto Licencjobiorca nie jest upowa¿niony do u¿ywania Programu do ¶wiadczenia osobom trzecim komercyjnych us³ug informatycznych, us³ug serwerowych ani us³ug podzia³u czasu, jak równie¿ nie jest upowa¿niony do udzielania dalszych licencji na Program oraz wypo¿yczania i wydzier¿awiania Programu, chyba ¿e stosowne umowy, na mocy których Licencjobiorca jest upowa¿niony do u¿ywania Programu, wyra¼nie stanowi± inaczej. Licencjobiorca mo¿e uzyskaæ dodatkowe prawa pod warunkiem uiszczenia dodatkowych op³at lub na mocy innych b±d¼ uzupe³niaj±cych warunków. IBM zastrzega sobie prawo do decydowania, czy takie dodatkowe prawa zostan± przyznane Licencjobiorcy. + +Specyfikacja + +Specyfikacje Programu znajduj± siê w zbiorczych punktach zawieraj±cych opisy i informacje techniczne w dokumentach "Aktualno¶ci produktowe" dotycz±cych Programu. + +Programy Pakietowe + +Program jest licencjonowany w postaci pakietu wieloproduktowego, zawieraj±cego Programy Pakietowe okre¶lone poni¿ej. Licencjobiorca jest upowa¿niony do zainstalowania i u¿ywania takich Programów Pakietowych jedynie w zakresie ograniczeñ nak³adanych przez dokumenty Proof of Entitlement dla Programu oraz zgodnie z niniejszym dokumentem "Informacje Licencyjne". Licencjobiorca nie jest upowa¿niony do przenoszenia ani odsprzeda¿y Programów Pakietowych oddzielnie od pakietu wieloproduktowego. Do Programu Pakietowego mog± byæ do³±czone warunki licencji. W takim przypadku warunki te maj± zastosowanie do u¿ywania takiego Programu Pakietowego przez Licencjobiorcê. W przypadku sprzeczno¶ci miêdzy warunkami niniejszych Informacji licencyjnych a warunkami licencji Programu Pakietowego znaczenie rozstrzygaj±ce maj± warunki niniejszych Informacji licencyjnych. Kiedy prawo Licencjobiorcy do korzystania z Programu wyga¶nie lub zostanie mu wypowiedziane, Licencjobiorca musi zaprzestaæ korzystania z Programów Pakietowych oraz zniszczyæ lub niezw³ocznie zwróciæ wszystkie ich egzemplarze do strony, od której Licencjobiorca naby³ Program. Je¶li Licencjobiorca pobra³ Programy Pakietowe, powinien skontaktowaæ siê ze stron±, od której naby³ Program. Je¶li Licencjobiorca zamierza licencjonowaæ Programy Pakietowe w celu u¿ywania nieobjêtego ograniczeniami wyszczególnionymi powy¿ej, powinien skontaktowaæ siê z przedstawicielem handlowym IBM lub z podmiotem, od którego naby³ Program, w celu uzyskania odpowiedniej licencji. + +Poni¿ej wymieniono Programy Pakietowe licencjonowane z Programem: +IBM MQ Idle Standby V9.0.3 + +Komponenty nieu¿ywane do ustanawiania wymaganych uprawnieñ + +Przy ustalaniu liczby uprawnieñ wymaganych do instalowania lub u¿ywania Programu przez Licencjobiorcê nie bierze siê pod uwagê instalowania lub u¿ywania nastêpuj±cych komponentów Programu. Innymi s³owy, Licencjobiorca mo¿e zainstalowaæ nastêpuj±ce komponenty Programu i u¿ywaæ ich zgodnie z warunkami licencji, ale komponenty te nie mog± byæ u¿ywane do okre¶lania liczby uprawnieñ wymaganych dla Programu. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + +Poni¿sze jednostki miary maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Procesorowa Jednostka Warto¶ci ("PVU") + +Procesorowa Jednostka Warto¶ci (Processor Value Unit, zwana dalej "PVU") to jednostka miary, wed³ug której licencjonowany jest Program. Liczba wymaganych uprawnieñ PVU zale¿y od technologii procesorowej (zdefiniowanej wed³ug Dostawcy, Marki, Typu i Modelu Procesora w Tabeli PVU, pod adresem http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) oraz od liczby procesorów udostêpnionych dla Programu. Na potrzeby licencjonowania w oparciu o jednostki PVU, IBM w dalszym ci±gu definiuje jako procesor ka¿dy rdzeñ procesora w uk³adzie scalonym. I tak na przyk³ad procesor dwurdzeniowy traktowany jest jako dwa procesory. + +Licencjobiorca mo¿e zainstalowaæ Program, korzystaj±c albo z licencjonowania Pe³nej Mocy Obliczeniowej, albo z licencjonowania Mocy Obliczeniowej Wirtualizacji (Ograniczonej Mocy Obliczeniowej) zgodnie z warunkami Licencjonowania wed³ug Ograniczonej Mocy Obliczeniowej umowy Passport Advantage (patrz poni¿sza strona WWW). W przypadku licencjonowania Pe³nej Mocy Obliczeniowej, Licencjobiorca musi nabyæ uprawnienia PVU wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów* w fizycznym ¶rodowisku sprzêtowym dostêpnych dla Programu lub zarz±dzanych przez Program, z wyj±tkiem tych serwerów, z których Program trwale usuniêto. W przypadku licencjonowania Mocy Obliczeniowej Wirtualizacji, Licencjobiorca musi nabyæ uprawnienia wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów dostêpnych dla Programu lub zarz±dzanych przez Program, zdefiniowanych zgodnie z "Regu³ami Zliczania Licencji na Moc Obliczeniow± Wirtualizacji" (Virtualization Capacity License Counting Rules) pod adresem http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktywowany rdzeñ procesora to taki rdzeñ procesora, który jest dostêpny na u¿ytek w serwerze fizycznym lub wirtualnym, bez wzglêdu na to, czy moc obliczeniowa rdzenia procesora mo¿e byæ lub jest ograniczona z u¿yciem technologii wirtualizacji, komend systemu operacyjnego, ustawieñ systemu BIOS lub podobnych ograniczeñ. + +Ponadto u¿ywanie Programu przez Licencjobiorcê podlega nastêpuj±cym warunkom. + +Konfiguracje w trybie gotowo¶ci bezczynnej + +Na potrzeby niniejszego paragrafu konfiguracja "w trybie gotowo¶ci bezczynnej" oznacza tak± konfiguracjê, w której egzemplarz Programu jest zainstalowany na serwerze wchodz±cym w sk³ad rozwi±zania zapewniaj±cego wysok± dostêpno¶æ, na który to serwer Program jest prze³±czany awaryjnie w przypadku, gdy egzemplarz Programu uruchomiony na serwerze aktywnym przestanie byæ u¿yteczny. Serwer jest uwa¿any za bezczynny jedynie wówczas, gdy jest u¿ywany wy³±cznie w celu wykonania czynno¶ci administracyjnych, podejmowanych w sytuacjach prze³±czenia awaryjnego (do czasu wykonania prze³±czenia awaryjnego). + +Program nie mo¿e byæ instalowany na serwerze pracuj±cym w trybie gotowo¶ci bezczynnej, o ile nie jest objêty odpowiedni± licencj±. + +Je¶li Program jest u¿ywany w konfiguracji w trybie gotowo¶ci bezczynnej z opcj± Multi-Instance Queue Manager, to egzemplarz Programu mo¿e rezydowaæ i byæ uruchamiany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej na potrzeby kopii zapasowej, ale musi pozostaæ bezczynny i nie mo¿e s³u¿yæ do wykonywania jakichkolwiek zadañ produkcyjnych, o ile nie nast±pi prze³±czenie awaryjne z serwera aktywnego na serwer dzia³aj±cy w trybie gotowo¶ci bezczynnej, w którym to przypadku egzemplarz zainstalowany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej mo¿e byæ s³u¿yæ do wykonywania zadañ produkcyjnych w okresie trwania prze³±czenia awaryjnego. + +Je¶li Program jest u¿ywany w konfiguracji w trybie gotowo¶ci bezczynnej z innymi systemami zapewniaj±cymi wysok± dostêpno¶æ, to egzemplarz Programu mo¿e rezydowaæ na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej na potrzeby kopii zapasowej, ale nie mo¿e byæ uruchomiony (a w zwi±zku z tym, u¿ywany do wykonywania jakichkolwiek zadañ produkcyjnych); zostanie natomiast uruchomiony automatycznie przez komponenty ¶rodowiska wysokiej dostêpno¶ci w przypadku awarii serwera aktywnego, w którym to przypadku egzemplarz zainstalowany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej mo¿e s³u¿yæ do wykonywania zadañ produkcyjnych w okresie trwania prze³±czenia awaryjnego. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +WA¯NE INFORMACJE - PROSIMY PRZECZYTAÆ UWA¯NIE + +Poni¿ej przedstawione s± dwie umowy licencyjne: + +1. Miêdzynarodowa Umowa Licencyjna IBM na Próbne U¿ywanie Programów +2. Miêdzynarodowa Umowa Licencyjna IBM na Program + +Je¶li Licencjobiorca nabywa Program w celu u¿ywania w procesie produkcyjnym (a nie w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Je¶li Licencjobiorca nabywa Program w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji (zwanych ³±cznie "Próbnym U¿ywaniem"), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie zarówno (i) Miêdzynarodowej Umowy Licencyjnej na Próbne U¿ywanie Programów IBM (zwanej dalej "Licencj± na Próbne U¿ywanie") bez modyfikacji jak i (ii) Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Licencja na Próbne U¿ywanie bêdzie obowi±zywaæ przez ca³y okres Próbnego U¿ywania. + +Miêdzynarodowa Umowa Licencyjna na Program zacznie automatycznie obowi±zywaæ, je¶li Licencjobiorca zdecyduje siê zatrzymaæ Program po zakoñczeniu Próbnego U¿ywania (lub nabêdzie dodatkowe egzemplarze Programu w celu u¿ywania po zakoñczeniu Próbnego U¿ywania), zawieraj±c umowê kupna (tak± jak Miêdzynarodowa Umowa IBM Passport Advantage lub Miêdzynarodowa Umowa IBM Passport Advantage Express). + +Licencja na Próbne U¿ywanie oraz Miêdzynarodowa Umowa Licencyjna na Program nie obowi±zuj± jednocze¶nie; ¿adna z nich nie modyfikuje drugiej i nie jest od niej zale¿na. + +Poni¿ej znajduje siê pe³ny tekst obu tych umów licencyjnych. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Próbne U¿ywanie Programów (Z125-5543-05). + +Nazwa Programu (Numer Programu): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Poni¿sze standardowe warunki maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Okres próbnego u¿ywania + +Okres próbnego u¿ywania rozpoczyna siê w dniu, w którym Licencjobiorca wyrazi³ zgodê na warunki niniejszej Umowy i koñczy siê po liczbie dni równej 90. + +Programy Pakietowe + +Program jest licencjonowany w postaci pakietu wieloproduktowego, zawieraj±cego Programy Pakietowe okre¶lone poni¿ej. Licencjobiorca jest upowa¿niony do zainstalowania i u¿ywania takich Programów Pakietowych jedynie w zakresie ograniczeñ nak³adanych przez dokumenty Proof of Entitlement dla Programu oraz zgodnie z niniejszym dokumentem "Informacje Licencyjne". Licencjobiorca nie jest upowa¿niony do przenoszenia ani odsprzeda¿y Programów Pakietowych oddzielnie od pakietu wieloproduktowego. Do Programu Pakietowego mog± byæ do³±czone warunki licencji. W takim przypadku warunki te maj± zastosowanie do u¿ywania takiego Programu Pakietowego przez Licencjobiorcê. W przypadku sprzeczno¶ci miêdzy warunkami niniejszych Informacji licencyjnych a warunkami licencji Programu Pakietowego znaczenie rozstrzygaj±ce maj± warunki niniejszych Informacji licencyjnych. Kiedy prawo Licencjobiorcy do korzystania z Programu wyga¶nie lub zostanie mu wypowiedziane, Licencjobiorca musi zaprzestaæ korzystania z Programów Pakietowych oraz zniszczyæ lub niezw³ocznie zwróciæ wszystkie ich egzemplarze do strony, od której Licencjobiorca naby³ Program. Je¶li Licencjobiorca pobra³ Programy Pakietowe, powinien skontaktowaæ siê ze stron±, od której naby³ Program. Je¶li Licencjobiorca zamierza licencjonowaæ Programy Pakietowe w celu u¿ywania nieobjêtego ograniczeniami wyszczególnionymi powy¿ej, powinien skontaktowaæ siê z przedstawicielem handlowym IBM lub z podmiotem, od którego naby³ Program, w celu uzyskania odpowiedniej licencji. + +Poni¿ej wymieniono Programy Pakietowe licencjonowane z Programem: +IBM MQ V9.0.3 + +Ograniczenie dotycz±ce produktów dla programistów + +Je¶li Program jest oznaczony jako przeznaczony dla "Programistów", to mo¿e zostaæ zainstalowany na maszynie programisty jedynie do wewnêtrznych celów Licencjobiorcy zwi±zanych z programowaniem lub testami jednostkowymi. "Maszyna programisty" to fizyczne lub wirtualne ¶rodowisko pulpitu, w którym uruchamiane s± g³ówny system operacyjny oraz Program, przy czym zarówno g³ówny system operacyjny, jak i Program mog± byæ u¿ywane przez maksymalnie jednego okre¶lonego programistê. Licencjobiorca nie jest upowa¿niony do u¿ywania Programu w celu przetwarzania i symulowania obci±¿eñ produkcyjnych ani do testowania skalowalno¶ci dowolnego kodu, aplikacji czy systemu. Licencjobiorca nie jest upowa¿niony do u¿ywania jakiejkolwiek czê¶ci Programu do ¿adnych innych celów, chyba ¿e nabêdzie odpowiednie upowa¿nienie do u¿ywania do celów produkcyjnych. + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Program (Z125-3301-14). + +Nazwa Programu (Numer Programu): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Poni¿sze standardowe warunki maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Ograniczone prawo do u¿ywania + +Zgodnie z Miêdzynarodow± Umow± Licencyjn± na Program ("IPLA") i niniejszym dokumentem Informacje licencyjne IBM udziela Licencjobiorcy ograniczonego prawa do u¿ywania Programu. Prawo to jest ograniczone do poziomu Autoryzowanego U¿ywania, takiego jak Procesorowa Jednostka Warto¶ci ("PVU"), Jednostka Warto¶ci Zasobów ("RVU"), Jednostka Warto¶ci ("VU") lub inny okre¶lony poziom u¿ywania, op³acony przez Licencjobiorcê i potwierdzony dokumentem Proof of Entitlement (PoE). U¿ywanie Programu przez Licencjobiorcê mo¿e byæ równie¿ ograniczone do okre¶lonej maszyny, mo¿e podlegaæ innym ograniczeniom lub mo¿e obejmowaæ u¿ywanie Programu wy³±cznie jako Programu Wspieraj±cego. Jako ¿e Licencjobiorca nie zap³aci³ za ca³± warto¶æ ekonomiczn± Programu, u¿ywanie Programu w dowolnym innym celu bez uiszczenia dodatkowych op³at jest zabronione. Ponadto Licencjobiorca nie jest upowa¿niony do u¿ywania Programu do ¶wiadczenia osobom trzecim komercyjnych us³ug informatycznych, us³ug serwerowych ani us³ug podzia³u czasu, jak równie¿ nie jest upowa¿niony do udzielania dalszych licencji na Program oraz wypo¿yczania i wydzier¿awiania Programu, chyba ¿e stosowne umowy, na mocy których Licencjobiorca jest upowa¿niony do u¿ywania Programu, wyra¼nie stanowi± inaczej. Licencjobiorca mo¿e uzyskaæ dodatkowe prawa pod warunkiem uiszczenia dodatkowych op³at lub na mocy innych b±d¼ uzupe³niaj±cych warunków. IBM zastrzega sobie prawo do decydowania, czy takie dodatkowe prawa zostan± przyznane Licencjobiorcy. + +Specyfikacja + +Specyfikacje Programu znajduj± siê w zbiorczych punktach zawieraj±cych opisy i informacje techniczne w dokumentach "Aktualno¶ci produktowe" dotycz±cych Programu. + +Programy Pakietowe + +Program jest licencjonowany w postaci pakietu wieloproduktowego, zawieraj±cego Programy Pakietowe okre¶lone poni¿ej. Licencjobiorca jest upowa¿niony do zainstalowania i u¿ywania takich Programów Pakietowych jedynie w zakresie ograniczeñ nak³adanych przez dokumenty Proof of Entitlement dla Programu oraz zgodnie z niniejszym dokumentem "Informacje Licencyjne". Licencjobiorca nie jest upowa¿niony do przenoszenia ani odsprzeda¿y Programów Pakietowych oddzielnie od pakietu wieloproduktowego. Do Programu Pakietowego mog± byæ do³±czone warunki licencji. W takim przypadku warunki te maj± zastosowanie do u¿ywania takiego Programu Pakietowego przez Licencjobiorcê. W przypadku sprzeczno¶ci miêdzy warunkami niniejszych Informacji licencyjnych a warunkami licencji Programu Pakietowego znaczenie rozstrzygaj±ce maj± warunki niniejszych Informacji licencyjnych. Kiedy prawo Licencjobiorcy do korzystania z Programu wyga¶nie lub zostanie mu wypowiedziane, Licencjobiorca musi zaprzestaæ korzystania z Programów Pakietowych oraz zniszczyæ lub niezw³ocznie zwróciæ wszystkie ich egzemplarze do strony, od której Licencjobiorca naby³ Program. Je¶li Licencjobiorca pobra³ Programy Pakietowe, powinien skontaktowaæ siê ze stron±, od której naby³ Program. Je¶li Licencjobiorca zamierza licencjonowaæ Programy Pakietowe w celu u¿ywania nieobjêtego ograniczeniami wyszczególnionymi powy¿ej, powinien skontaktowaæ siê z przedstawicielem handlowym IBM lub z podmiotem, od którego naby³ Program, w celu uzyskania odpowiedniej licencji. + +Poni¿ej wymieniono Programy Pakietowe licencjonowane z Programem: +IBM MQ V9.0.3 + +Ograniczenie dotycz±ce produktów dla programistów + +Je¶li Program jest oznaczony jako przeznaczony dla "Programistów", to mo¿e zostaæ zainstalowany na maszynie programisty jedynie do wewnêtrznych celów Licencjobiorcy zwi±zanych z programowaniem lub testami jednostkowymi. "Maszyna programisty" to fizyczne lub wirtualne ¶rodowisko pulpitu, w którym uruchamiane s± g³ówny system operacyjny oraz Program, przy czym zarówno g³ówny system operacyjny, jak i Program mog± byæ u¿ywane przez maksymalnie jednego okre¶lonego programistê. Licencjobiorca nie jest upowa¿niony do u¿ywania Programu w celu przetwarzania i symulowania obci±¿eñ produkcyjnych ani do testowania skalowalno¶ci dowolnego kodu, aplikacji czy systemu. Licencjobiorca nie jest upowa¿niony do u¿ywania jakiejkolwiek czê¶ci Programu do ¿adnych innych celów, chyba ¿e nabêdzie odpowiednie upowa¿nienie do u¿ywania do celów produkcyjnych. + +Komponenty nieu¿ywane do ustanawiania wymaganych uprawnieñ + +Przy ustalaniu liczby uprawnieñ wymaganych do instalowania lub u¿ywania Programu przez Licencjobiorcê nie bierze siê pod uwagê instalowania lub u¿ywania nastêpuj±cych komponentów Programu. Innymi s³owy, Licencjobiorca mo¿e zainstalowaæ nastêpuj±ce komponenty Programu i u¿ywaæ ich zgodnie z warunkami licencji, ale komponenty te nie mog± byæ u¿ywane do okre¶lania liczby uprawnieñ wymaganych dla Programu. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + +Poni¿sze jednostki miary maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Instalacja + +Instalacja to jednostka miary, wed³ug której licencjonowany jest Program. Instalacja to zainstalowany egzemplarz Programu na dysku fizycznym lub wirtualnym, który mo¿na uruchamiaæ na komputerze. Licencjobiorca musi nabyæ uprawnienie dla ka¿dej Instalacji Programu. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +WA¯NE INFORMACJE - PROSIMY PRZECZYTAÆ UWA¯NIE + +Poni¿ej przedstawione s± dwie umowy licencyjne: + +1. Miêdzynarodowa Umowa Licencyjna IBM na Próbne U¿ywanie Programów +2. Miêdzynarodowa Umowa Licencyjna IBM na Program + +Je¶li Licencjobiorca nabywa Program w celu u¿ywania w procesie produkcyjnym (a nie w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Je¶li Licencjobiorca nabywa Program w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji (zwanych ³±cznie "Próbnym U¿ywaniem"), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie zarówno (i) Miêdzynarodowej Umowy Licencyjnej na Próbne U¿ywanie Programów IBM (zwanej dalej "Licencj± na Próbne U¿ywanie") bez modyfikacji jak i (ii) Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Licencja na Próbne U¿ywanie bêdzie obowi±zywaæ przez ca³y okres Próbnego U¿ywania. + +Miêdzynarodowa Umowa Licencyjna na Program zacznie automatycznie obowi±zywaæ, je¶li Licencjobiorca zdecyduje siê zatrzymaæ Program po zakoñczeniu Próbnego U¿ywania (lub nabêdzie dodatkowe egzemplarze Programu w celu u¿ywania po zakoñczeniu Próbnego U¿ywania), zawieraj±c umowê kupna (tak± jak Miêdzynarodowa Umowa IBM Passport Advantage lub Miêdzynarodowa Umowa IBM Passport Advantage Express). + +Licencja na Próbne U¿ywanie oraz Miêdzynarodowa Umowa Licencyjna na Program nie obowi±zuj± jednocze¶nie; ¿adna z nich nie modyfikuje drugiej i nie jest od niej zale¿na. + +Poni¿ej znajduje siê pe³ny tekst obu tych umów licencyjnych. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Próbne U¿ywanie Programów (Z125-5543-05). + +Nazwa Programu: IBM MQ Managed File Transfer Service V9.0.1 +Numer Programu: Evaluation + +Nazwa Programu: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Numer Programu: Evaluation + +Nazwa Programu: IBM MQ Managed File Transfer Agent V9.0.1 +Numer Programu: Evaluation + +Okres próbnego u¿ywania + +Okres próbnego u¿ywania rozpoczyna siê w dniu, w którym Licencjobiorca wyrazi³ zgodê na warunki niniejszej Umowy i koñczy siê po liczbie dni równej 90. + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Program (Z125-3301-14). + +Nazwa Programu: IBM MQ Managed File Transfer Service V9.0.1 +Numer Programu: 5724-H72 + +Nazwa Programu: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Numer Programu: 5724-H72 + +Nazwa Programu: IBM MQ Managed File Transfer Agent V9.0.1 +Numer Programu: 5724-H72 + +Zgodnie z Miêdzynarodow± Umow± Licencyjn± na Program ("IPLA") i niniejszym dokumentem Informacje licencyjne IBM udziela Licencjobiorcy ograniczonego prawa do u¿ywania Programu. Prawo to jest ograniczone do poziomu Autoryzowanego U¿ywania, takiego jak Procesorowa Jednostka Warto¶ci ("PVU"), Jednostka Warto¶ci Zasobów ("RVU"), Jednostka Warto¶ci ("VU") lub inny okre¶lony poziom u¿ywania, op³acony przez Licencjobiorcê i potwierdzony dokumentem Proof of Entitlement (PoE). U¿ywanie Programu przez Licencjobiorcê mo¿e byæ równie¿ ograniczone do okre¶lonej maszyny, mo¿e podlegaæ innym ograniczeniom lub mo¿e obejmowaæ u¿ywanie Programu wy³±cznie jako Programu Wspieraj±cego. Jako ¿e Licencjobiorca nie zap³aci³ za ca³± warto¶æ ekonomiczn± Programu, u¿ywanie Programu w dowolnym innym celu bez uiszczenia dodatkowych op³at jest zabronione. Ponadto Licencjobiorca nie jest upowa¿niony do u¿ywania Programu do ¶wiadczenia osobom trzecim komercyjnych us³ug informatycznych, us³ug serwerowych ani us³ug podzia³u czasu, jak równie¿ nie jest upowa¿niony do udzielania dalszych licencji na Program oraz wypo¿yczania i wydzier¿awiania Programu, chyba ¿e stosowne umowy, na mocy których Licencjobiorca jest upowa¿niony do u¿ywania Programu, wyra¼nie stanowi± inaczej. Licencjobiorca mo¿e uzyskaæ dodatkowe prawa pod warunkiem uiszczenia dodatkowych op³at lub na mocy innych b±d¼ uzupe³niaj±cych warunków. IBM zastrzega sobie prawo do decydowania, czy takie dodatkowe prawa zostan± przyznane Licencjobiorcy. + +Specyfikacje Programu znajduj± siê w zbiorczych punktach zawieraj±cych opisy i informacje techniczne w dokumentach "Aktualno¶ci produktowe" dotycz±cych Programu. + +Elementy Podlegaj±ce Redystrybucji + +Je¶li Program zawiera komponenty bêd±ce Elementami Podlegaj±cymi Redystrybucji, zostan± one zidentyfikowane w pliku REDIST do³±czonym do Programu. Poza prawami licencyjnymi przyznanymi na mocy Umowy, Licencjobiorca mo¿e dystrybuowaæ Elementy Podlegaj±ce Redystrybucji na nastêpuj±cych warunkach: +1) Musz± byæ one redystrybuowane w postaci kodu wynikowego oraz zgodnie z wszystkimi wskazówkami, instrukcjami i specyfikacjami w pliku REDIST lub dokumentacji do³±czonej do Programu; +2) Je¶li dokumentacja do³±czona do Programu wyra¼nie zezwala Licencjobiorcy na modyfikowanie Plików Podlegaj±cych Redystrybucji, wówczas takie modyfikacje musz± byæ zgodne z wszystkimi wskazówkami, instrukcjami i specyfikacjami w tej dokumentacji i byæ traktowane jak Pliki Podlegaj±ce Redystrybucji; +3) Pliki Podlegaj±ce Redystrybucji mo¿na dystrybuowaæ jedynie jako czê¶æ aplikacji Licencjobiorcy opracowanej z u¿yciem Programu (zwanej dalej "Aplikacj± Licencjobiorcy") i jedynie do wspierania klientów Licencjobiorcy w zwi±zku z u¿ywaniem przez nich Aplikacji Licencjobiorcy. Aplikacja Licencjobiorcy musi stanowiæ istotn± warto¶æ dodan±, tak aby Pliki Podlegaj±ce Redystrybucji nie stanowi³y istotnej motywacji do nabycia przez u¿ytkowników koñcowych oprogramowania Licencjobiorcy; +4) Je¶li Pliki Podlegaj±ce Redystrybucji obejmuj± ¶rodowisko Java Runtime Environment, Licencjobiorca musi równie¿ do³±czyæ do Aplikacji Licencjobiorcy inne ni¿ Java Pliki Podlegaj±ce Redystrybucji, chyba ¿e Aplikacja ta jest zaprojektowana z my¶l± o uruchamianiu jedynie na urz±dzeniach komputerowych ogólnego zastosowania (na przyk³ad laptopach, desktopach i serwerach), a nie na urz±dzeniach kieszonkowych ani przeno¶nych (tzn. urz±dzeniach zawieraj±cych mikroprocesor, ale nie bêd±cych przede wszystkich urz±dzeniami obliczeniowymi); +5) Licencjobiorca nie mo¿e usuwaæ ¿adnych plików z uwagami dotycz±cymi praw autorskich i innymi zawartych w Plikach Podlegaj±cych Redystrybucji; +6) Licencjobiorca bêdzie chroniæ IBM, dostawców IBM i dystrybutorów IBM przed wszelkimi roszczeniami wynikaj±cymi z u¿ywania lub rozpowszechniania Aplikacji Licencjobiorcy; +7) Licencjobiorca nie mo¿e korzystaæ ze ¶cie¿ek o tej samej nazwie, co ¶cie¿ki do oryginalnych plików/modu³ów Plików Podlegaj±cych Redystrybucji; +8) Licencjobiorca nie mo¿e wykorzystywaæ - w zwi±zku z czynno¶ciami marketingowymi odnosz±cymi siê do Aplikacji Licencjobiorcy - nazw ani znaków towarowych IBM, dostawców IBM ani dystrybutorów IBM bez ich wcze¶niejszej pisemnej zgody; +9) IBM, dostawcy IBM i dystrybutorzy IBM dostarczaj± Pliki Podlegaj±ce Redystrybucji oraz zwi±zan± z nimi dokumentacjê bez zobowi±zania do wsparcia i W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU; +10) Licencjobiorca ponosi odpowiedzialno¶æ za wszelk± pomoc techniczn± dotycz±c± Aplikacji Licencjobiorcy oraz wszelkich modyfikacji Elementów Podlegaj±cych Redystrybucji; +11) Umowa licencyjna Licencjobiorcy z u¿ytkownikiem koñcowym Aplikacji Licencjobiorcy musi powiadamiaæ u¿ytkownika koñcowego, ¿e Plików Podlegaj±cych Redystrybucji oraz ich modyfikacji nie mo¿na i) u¿ywaæ do celów innych ni¿ umo¿liwienie dzia³ania Aplikacji Licencjobiorcy, ii) kopiowaæ (z wyj±tkiem tworzenia kopii zapasowych), iii) dalej dystrybuowaæ ani przenosiæ bez Aplikacji Licencjobiorcy ani iv) deasemblowaæ, dekompilowaæ ani poddawaæ translacji w inny sposób, z wyj±tkiem przypadków wyra¼nie dozwolonych przez prawo, bez mo¿liwo¶ci wy³±czenia na mocy umowy. Ponadto umowa licencyjna Licencjobiorcy musi zapewniaæ IBM ochronê co najmniej równ± zapewnianej przez warunki niniejszej Umowy. + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + +W przypadku Komponentów ¬ród³owych i Materia³ów Przyk³adowych wymienionych w pliku REDIST Programu Licencjobiorca mo¿e redystrybuowaæ zmodyfikowane wersje tych Komponentów ¬ród³owych i Materia³ów Przyk³adowych, zgodnie z warunkami niniejszej licencji oraz wszelkimi instrukcjami w pliku REDIST. + +Instalacja + +Instalacja to jednostka miary, wed³ug której licencjonowany jest Program. Instalacja to zainstalowany egzemplarz Programu na dysku fizycznym lub wirtualnym, który mo¿na uruchamiaæ na komputerze. Licencjobiorca musi nabyæ uprawnienie dla ka¿dej Instalacji Programu. + +Procesorowa Jednostka Warto¶ci ("PVU") + +Procesorowa Jednostka Warto¶ci (Processor Value Unit, zwana dalej "PVU") to jednostka miary, wed³ug której licencjonowany jest Program. Liczba wymaganych uprawnieñ PVU zale¿y od technologii procesorowej (zdefiniowanej wed³ug Dostawcy, Marki, Typu i Modelu Procesora w Tabeli PVU, pod adresem http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) oraz od liczby procesorów udostêpnionych dla Programu. Na potrzeby licencjonowania w oparciu o jednostki PVU, IBM w dalszym ci±gu definiuje jako procesor ka¿dy rdzeñ procesora w uk³adzie scalonym. I tak na przyk³ad procesor dwurdzeniowy traktowany jest jako dwa procesory. + +Licencjobiorca mo¿e zainstalowaæ Program, korzystaj±c albo z licencjonowania Pe³nej Mocy Obliczeniowej, albo z licencjonowania Mocy Obliczeniowej Wirtualizacji (Ograniczonej Mocy Obliczeniowej) zgodnie z warunkami Licencjonowania wed³ug Ograniczonej Mocy Obliczeniowej umowy Passport Advantage (patrz poni¿sza strona WWW). W przypadku licencjonowania Pe³nej Mocy Obliczeniowej, Licencjobiorca musi nabyæ uprawnienia PVU wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów* w fizycznym ¶rodowisku sprzêtowym dostêpnych dla Programu lub zarz±dzanych przez Program, z wyj±tkiem tych serwerów, z których Program trwale usuniêto. W przypadku licencjonowania Mocy Obliczeniowej Wirtualizacji, Licencjobiorca musi nabyæ uprawnienia wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów dostêpnych dla Programu lub zarz±dzanych przez Program, zdefiniowanych zgodnie z "Regu³ami Zliczania Licencji na Moc Obliczeniow± Wirtualizacji" (Virtualization Capacity License Counting Rules) pod adresem http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktywowany rdzeñ procesora to taki rdzeñ procesora, który jest dostêpny na u¿ytek w serwerze fizycznym lub wirtualnym, bez wzglêdu na to, czy moc obliczeniowa rdzenia procesora mo¿e byæ lub jest ograniczona z u¿yciem technologii wirtualizacji, komend systemu operacyjnego, ustawieñ systemu BIOS lub podobnych ograniczeñ. + +Warunki specyficzne dla Programów + +Konfiguracje w trybie gotowo¶ci bezczynnej + +Na potrzeby niniejszego paragrafu konfiguracja "w trybie gotowo¶ci bezczynnej" oznacza tak± konfiguracjê, w której egzemplarz Programu jest zainstalowany na serwerze wchodz±cym w sk³ad rozwi±zania zapewniaj±cego wysok± dostêpno¶æ, na który to serwer Program jest prze³±czany awaryjnie w przypadku, gdy egzemplarz Programu uruchomiony na serwerze aktywnym przestanie byæ u¿yteczny. Serwer jest uwa¿any za bezczynny jedynie wówczas, gdy jest u¿ywany wy³±cznie w celu wykonania czynno¶ci administracyjnych, podejmowanych w sytuacjach prze³±czenia awaryjnego (do czasu wykonania prze³±czenia awaryjnego). + +Program nie mo¿e byæ instalowany na serwerze pracuj±cym w trybie gotowo¶ci bezczynnej, o ile nie jest objêty odpowiedni± licencj±. + +Je¶li Program jest u¿ywany w konfiguracji w trybie gotowo¶ci bezczynnej z opcj± Multi-Instance Queue Manager, to egzemplarz Programu mo¿e rezydowaæ i byæ uruchamiany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej na potrzeby kopii zapasowej, ale musi pozostaæ bezczynny i nie mo¿e s³u¿yæ do wykonywania jakichkolwiek zadañ produkcyjnych, o ile nie nast±pi prze³±czenie awaryjne z serwera aktywnego na serwer dzia³aj±cy w trybie gotowo¶ci bezczynnej, w którym to przypadku egzemplarz zainstalowany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej mo¿e byæ s³u¿yæ do wykonywania zadañ produkcyjnych w okresie trwania prze³±czenia awaryjnego. + +Je¶li Program jest u¿ywany w konfiguracji w trybie gotowo¶ci bezczynnej z innymi systemami zapewniaj±cymi wysok± dostêpno¶æ, to egzemplarz Programu mo¿e rezydowaæ na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej na potrzeby kopii zapasowej, ale nie mo¿e byæ uruchomiony (a w zwi±zku z tym, u¿ywany do wykonywania jakichkolwiek zadañ produkcyjnych); zostanie natomiast uruchomiony automatycznie przez komponenty ¶rodowiska wysokiej dostêpno¶ci w przypadku awarii serwera aktywnego, w którym to przypadku egzemplarz zainstalowany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej mo¿e s³u¿yæ do wykonywania zadañ produkcyjnych w okresie trwania prze³±czenia awaryjnego. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +WA¯NE INFORMACJE - PROSIMY PRZECZYTAÆ UWA¯NIE + +Poni¿ej przedstawione s± dwie umowy licencyjne: + +1. Miêdzynarodowa Umowa Licencyjna IBM na Próbne U¿ywanie Programów +2. Miêdzynarodowa Umowa Licencyjna IBM na Program + +Je¶li Licencjobiorca nabywa Program w celu u¿ywania w procesie produkcyjnym (a nie w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Je¶li Licencjobiorca nabywa Program w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji (zwanych ³±cznie "Próbnym U¿ywaniem"), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie zarówno (i) Miêdzynarodowej Umowy Licencyjnej na Próbne U¿ywanie Programów IBM (zwanej dalej "Licencj± na Próbne U¿ywanie") bez modyfikacji jak i (ii) Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Licencja na Próbne U¿ywanie bêdzie obowi±zywaæ przez ca³y okres Próbnego U¿ywania. + +Miêdzynarodowa Umowa Licencyjna na Program zacznie automatycznie obowi±zywaæ, je¶li Licencjobiorca zdecyduje siê zatrzymaæ Program po zakoñczeniu Próbnego U¿ywania (lub nabêdzie dodatkowe egzemplarze Programu w celu u¿ywania po zakoñczeniu Próbnego U¿ywania), zawieraj±c umowê kupna (tak± jak Miêdzynarodowa Umowa IBM Passport Advantage lub Miêdzynarodowa Umowa IBM Passport Advantage Express). + +Licencja na Próbne U¿ywanie oraz Miêdzynarodowa Umowa Licencyjna na Program nie obowi±zuj± jednocze¶nie; ¿adna z nich nie modyfikuje drugiej i nie jest od niej zale¿na. + +Poni¿ej znajduje siê pe³ny tekst obu tych umów licencyjnych. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Próbne U¿ywanie Programów (Z125-5543-05). + +Nazwa Programu: IBM MQ Advanced Message Security V9.0.1 +Numer Programu: Evaluation + +Nazwa Programu: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Numer Programu: Evaluation + +Nazwa Programu: IBM MQ Telemetry V9.0.1 +Numer Programu: Evaluation + +Okres próbnego u¿ywania + +Okres próbnego u¿ywania rozpoczyna siê w dniu, w którym Licencjobiorca wyrazi³ zgodê na warunki niniejszej Umowy i koñczy siê po liczbie dni równej 90. + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + + + +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Program (Z125-3301-14). + +Nazwa Programu: IBM MQ Advanced Message Security V9.0.1 +Numer Programu: 5724-H72 + +Nazwa Programu: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Numer Programu: 5724-H72 + +Nazwa Programu: IBM MQ Telemetry V9.0.1 +Numer Programu: 5724-H72 + +Zgodnie z Miêdzynarodow± Umow± Licencyjn± na Program ("IPLA") i niniejszym dokumentem Informacje licencyjne IBM udziela Licencjobiorcy ograniczonego prawa do u¿ywania Programu. Prawo to jest ograniczone do poziomu Autoryzowanego U¿ywania, takiego jak Procesorowa Jednostka Warto¶ci ("PVU"), Jednostka Warto¶ci Zasobów ("RVU"), Jednostka Warto¶ci ("VU") lub inny okre¶lony poziom u¿ywania, op³acony przez Licencjobiorcê i potwierdzony dokumentem Proof of Entitlement (PoE). U¿ywanie Programu przez Licencjobiorcê mo¿e byæ równie¿ ograniczone do okre¶lonej maszyny, mo¿e podlegaæ innym ograniczeniom lub mo¿e obejmowaæ u¿ywanie Programu wy³±cznie jako Programu Wspieraj±cego. Jako ¿e Licencjobiorca nie zap³aci³ za ca³± warto¶æ ekonomiczn± Programu, u¿ywanie Programu w dowolnym innym celu bez uiszczenia dodatkowych op³at jest zabronione. Ponadto Licencjobiorca nie jest upowa¿niony do u¿ywania Programu do ¶wiadczenia osobom trzecim komercyjnych us³ug informatycznych, us³ug serwerowych ani us³ug podzia³u czasu, jak równie¿ nie jest upowa¿niony do udzielania dalszych licencji na Program oraz wypo¿yczania i wydzier¿awiania Programu, chyba ¿e stosowne umowy, na mocy których Licencjobiorca jest upowa¿niony do u¿ywania Programu, wyra¼nie stanowi± inaczej. Licencjobiorca mo¿e uzyskaæ dodatkowe prawa pod warunkiem uiszczenia dodatkowych op³at lub na mocy innych b±d¼ uzupe³niaj±cych warunków. IBM zastrzega sobie prawo do decydowania, czy takie dodatkowe prawa zostan± przyznane Licencjobiorcy. + +Specyfikacje Programu znajduj± siê w zbiorczych punktach zawieraj±cych opisy i informacje techniczne w dokumentach "Aktualno¶ci produktowe" dotycz±cych Programu. + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + +Instalacja + +Instalacja to jednostka miary, wed³ug której licencjonowany jest Program. Instalacja to zainstalowany egzemplarz Programu na dysku fizycznym lub wirtualnym, który mo¿na uruchamiaæ na komputerze. Licencjobiorca musi nabyæ uprawnienie dla ka¿dej Instalacji Programu. + +Procesorowa Jednostka Warto¶ci ("PVU") + +Procesorowa Jednostka Warto¶ci (Processor Value Unit, zwana dalej "PVU") to jednostka miary, wed³ug której licencjonowany jest Program. Liczba wymaganych uprawnieñ PVU zale¿y od technologii procesorowej (zdefiniowanej wed³ug Dostawcy, Marki, Typu i Modelu Procesora w Tabeli PVU, pod adresem http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) oraz od liczby procesorów udostêpnionych dla Programu. Na potrzeby licencjonowania w oparciu o jednostki PVU, IBM w dalszym ci±gu definiuje jako procesor ka¿dy rdzeñ procesora w uk³adzie scalonym. I tak na przyk³ad procesor dwurdzeniowy traktowany jest jako dwa procesory. + +Licencjobiorca mo¿e zainstalowaæ Program, korzystaj±c albo z licencjonowania Pe³nej Mocy Obliczeniowej, albo z licencjonowania Mocy Obliczeniowej Wirtualizacji (Ograniczonej Mocy Obliczeniowej) zgodnie z warunkami Licencjonowania wed³ug Ograniczonej Mocy Obliczeniowej umowy Passport Advantage (patrz poni¿sza strona WWW). W przypadku licencjonowania Pe³nej Mocy Obliczeniowej, Licencjobiorca musi nabyæ uprawnienia PVU wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów* w fizycznym ¶rodowisku sprzêtowym dostêpnych dla Programu lub zarz±dzanych przez Program, z wyj±tkiem tych serwerów, z których Program trwale usuniêto. W przypadku licencjonowania Mocy Obliczeniowej Wirtualizacji, Licencjobiorca musi nabyæ uprawnienia wystarczaj±ce do objêcia wszystkich aktywowanych rdzeni procesorów dostêpnych dla Programu lub zarz±dzanych przez Program, zdefiniowanych zgodnie z "Regu³ami Zliczania Licencji na Moc Obliczeniow± Wirtualizacji" (Virtualization Capacity License Counting Rules) pod adresem http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktywowany rdzeñ procesora to taki rdzeñ procesora, który jest dostêpny na u¿ytek w serwerze fizycznym lub wirtualnym, bez wzglêdu na to, czy moc obliczeniowa rdzenia procesora mo¿e byæ lub jest ograniczona z u¿yciem technologii wirtualizacji, komend systemu operacyjnego, ustawieñ systemu BIOS lub podobnych ograniczeñ. + +Warunki specyficzne dla Programów + +Konfiguracje w trybie gotowo¶ci bezczynnej + +Na potrzeby niniejszego paragrafu konfiguracja "w trybie gotowo¶ci bezczynnej" oznacza tak± konfiguracjê, w której egzemplarz Programu jest zainstalowany na serwerze wchodz±cym w sk³ad rozwi±zania zapewniaj±cego wysok± dostêpno¶æ, na który to serwer Program jest prze³±czany awaryjnie w przypadku, gdy egzemplarz Programu uruchomiony na serwerze aktywnym przestanie byæ u¿yteczny. Serwer jest uwa¿any za bezczynny jedynie wówczas, gdy jest u¿ywany wy³±cznie w celu wykonania czynno¶ci administracyjnych, podejmowanych w sytuacjach prze³±czenia awaryjnego (do czasu wykonania prze³±czenia awaryjnego). + +Program nie mo¿e byæ instalowany na serwerze pracuj±cym w trybie gotowo¶ci bezczynnej, o ile nie jest objêty odpowiedni± licencj±. + +Je¶li Program jest u¿ywany w konfiguracji w trybie gotowo¶ci bezczynnej z opcj± Multi-Instance Queue Manager, to egzemplarz Programu mo¿e rezydowaæ i byæ uruchamiany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej na potrzeby kopii zapasowej, ale musi pozostaæ bezczynny i nie mo¿e s³u¿yæ do wykonywania jakichkolwiek zadañ produkcyjnych, o ile nie nast±pi prze³±czenie awaryjne z serwera aktywnego na serwer dzia³aj±cy w trybie gotowo¶ci bezczynnej, w którym to przypadku egzemplarz zainstalowany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej mo¿e byæ s³u¿yæ do wykonywania zadañ produkcyjnych w okresie trwania prze³±czenia awaryjnego. + +Je¶li Program jest u¿ywany w konfiguracji w trybie gotowo¶ci bezczynnej z innymi systemami zapewniaj±cymi wysok± dostêpno¶æ, to egzemplarz Programu mo¿e rezydowaæ na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej na potrzeby kopii zapasowej, ale nie mo¿e byæ uruchomiony (a w zwi±zku z tym, u¿ywany do wykonywania jakichkolwiek zadañ produkcyjnych); zostanie natomiast uruchomiony automatycznie przez komponenty ¶rodowiska wysokiej dostêpno¶ci w przypadku awarii serwera aktywnego, w którym to przypadku egzemplarz zainstalowany na serwerze dzia³aj±cym w trybie gotowo¶ci bezczynnej mo¿e s³u¿yæ do wykonywania zadañ produkcyjnych w okresie trwania prze³±czenia awaryjnego. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +WA¯NE INFORMACJE - PROSIMY PRZECZYTAÆ UWA¯NIE! + +Poni¿ej przedstawione s± dwie umowy licencyjne: + +1. Miêdzynarodowa Umowa Licencyjna IBM na Próbne U¿ywanie Programów +2. Miêdzynarodowa Umowa Licencyjna IBM na Program + +Je¶li Licencjobiorca nabywa Program w celu u¿ywania w procesie produkcyjnym (a nie w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Je¶li Licencjobiorca nabywa Program w celu oceny, testowania, próbnego u¿ywania w programie "try or buy" czy te¿ demonstracji (zwanych ³±cznie "Próbnym U¿ywaniem"), to klikaj±c poni¿szy przycisk "Akceptujê", potwierdza zaakceptowanie zarówno (i) Miêdzynarodowej Umowy Licencyjnej na Próbne U¿ywanie Programów IBM (zwanej dalej "Licencj± na Próbne U¿ywanie") bez modyfikacji jak i (ii) Miêdzynarodowej Umowy Licencyjnej IBM na Program bez modyfikacji. + +Licencja na Próbne U¿ywanie bêdzie obowi±zywaæ przez ca³y okres Próbnego U¿ywania. + +Miêdzynarodowa Umowa Licencyjna na Program zacznie automatycznie obowi±zywaæ, je¶li Licencjobiorca zdecyduje siê zatrzymaæ Program po zakoñczeniu Próbnego U¿ywania (lub nabêdzie dodatkowe egzemplarze Programu w celu u¿ywania po zakoñczeniu Próbnego U¿ywania), zawieraj±c umowê kupna (tak± jak Miêdzynarodowa Umowa IBM Passport Advantage lub Miêdzynarodowa Umowa IBM Passport Advantage Express). + +Licencja na Próbne U¿ywanie oraz Miêdzynarodowa Umowa Licencyjna na Program nie obowi±zuj± jednocze¶nie; ¿adna z nich nie modyfikuje drugiej i nie jest od niej zale¿na. + +Poni¿ej znajduje siê pe³ny tekst obu tych umów licencyjnych. + + +Miêdzynarodowa Umowa Licencyjna na Próbne U¿ywanie Programów + +Czê¶æ 1 - Warunki ogólne + +POBIERANIE, INSTALOWANIE, KOPIOWANIE, OTWIERANIE, KLIKANIE PRZYCISKU "AKCEPTUJÊ" ORAZ U¯YWANIE PROGRAMU W JAKIKOLWIEK INNY SPOSÓB OZNACZA AKCEPTACJÊ WARUNKÓW NINIEJSZEJ UMOWY. ZAAKCEPTOWANIE PRZEZ U¯YTKOWNIKA NINIEJSZYCH WARUNKÓW W IMIENIU LICENCJOBIORCY OZNACZA, ¯E U¯YTKOWNIK GWARANTUJE POSIADANIE PE£NYCH UPRAWNIEÑ DO PODPORZ¡DKOWANIA LICENCJOBIORCY NINIEJSZYM WARUNKOM. JE¦LI U¯YTKOWNIK NIE WYRA¯A ZGODY NA NINIEJSZE WARUNKI, + +* NIE BÊDZIE POBIERAÆ, INSTALOWAÆ, KOPIOWAÆ, OTWIERAÆ, KLIKAÆ PRZYCISKU "AKCEPTUJÊ" ANI U¯YWAÆ PROGRAMU W INNY SPOSÓB; ORAZ + +* NATYCHMIAST ZWRÓCI NIEWYKORZYSTANE NO¦NIKI ORAZ DOKUMENTACJÊ PODMIOTOWI, OD KTÓREGO NABY£ PROGRAM. JE¦LI PROGRAM ZOSTA£ POBRANY, NALE¯Y ZNISZCZYÆ WSZELKIE JEGO KOPIE. + +1. Definicje + +"Autoryzowane U¿ywanie" - okre¶la poziom upowa¿nienia Licencjobiorcy do wykonywania lub uruchamiania Programu. Poziom ten mo¿e byæ mierzony liczb± u¿ytkowników, liczb± milionów jednostek serwisowych (millions of service units - MSU), liczb± procesorowych jednostek warto¶ci (Processor Value Units - PVU) lub w inny sposób okre¶lony przez IBM. + +"IBM" - oznacza International Business Machines Corporation lub jedno z przedsiêbiorstw podporz±dkowanych IBM Corp. + +"Informacje Licencyjne" (License Information - LI) - oznaczaj± dokument zawieraj±cy informacje oraz warunki dodatkowe odnosz±ce siê do Programu. Informacje Licencyjne odnosz±ce siê do Programu mo¿na znale¼æ w katalogu Programu, u¿ywaj±c komendy systemowej. Dokument ten mo¿e te¿ byæ do³±czony do Programu w postaci broszury. + +"Program" - oznacza orygina³ oraz pe³ne lub czê¶ciowe kopie: 1) instrukcji i danych w formie zapisu maszynowego, 2) komponentów, plików i modu³ów, 3) zapisów audiowizualnych (takich jak obrazy, tekst, nagrania lub ilustracje), 4) odnosz±cych siê do Programu materia³ów licencjonowanych (takich jak klucze i dokumentacja). + +2. Struktura Umowy + +Niniejsza Umowa zawiera Czê¶æ 1 - Warunki ogólne, Czê¶æ 2 - Warunki specyficzne dla poszczególnych krajów (o ile maj± zastosowanie) oraz Informacje Licencyjne, które razem tworz± kompletn± umowê miêdzy Licencjobiorc± i IBM dotycz±c± u¿ywania Programu. Umowa ta zastêpuje wszelkie wcze¶niejsze ustne lub pisemne ustalenia dokonane miêdzy Licencjobiorc± i IBM w zakresie u¿ywania Programu. W przypadku jakiejkolwiek sprzeczno¶ci, warunki dokumentu "Informacje Licencyjne" maj± znaczenie rozstrzygaj±ce nad warunkami obu Czê¶ci. + +3. Udzielenie licencji + +Program ten jest w³asno¶ci± IBM lub dostawcy IBM. Program ten jest chroniony prawem autorskim i stanowi przedmiot umowy licencyjnej, a nie umowy sprzeda¿y. + +IBM udziela Licencjobiorcy ograniczonej, niewy³±cznej, nieprzenoszalnej licencji na 1) pobieranie, instalowanie i u¿ywanie Programu w okresie próbnego u¿ywania, do poziomu Autoryzowanego u¿ywania okre¶lonego w dokumencie "Informacje Licencyjne", wy³±cznie do wewnêtrznej oceny, testowania lub demonstrowania na zasadzie próby; 2) wykonywanie i instalowanie uzasadnionej liczby kopii na potrzeby takiego Autoryzowanego U¿ywania oraz 3) wykonywanie kopii zapasowych, pod warunkiem ¿e + +a. Licencjobiorca naby³ Program legalnie i przestrzega warunków niniejszej Umowy; + +b. taka kopia zapasowa nie bêdzie u¿ywana dopóki Program, z którego zosta³a zrobiona, bêdzie dzia³aæ; + +c. Licencjobiorca powieli wszelkie uwagi dotycz±ce praw autorskich oraz wszelkie informacje o prawach w³asno¶ci na ka¿dej pe³nej lub czê¶ciowej kopii Programu; + +d. Licencjobiorca zachowa zapis wszystkich kopii Programu oraz zapewni, ¿e jakakolwiek osoba korzystaj±ca z Programu (lokalnie lub zdalnie) 1) dokonuje tego jedynie w imieniu Licencjobiorcy oraz 2) przestrzega warunków niniejszej Umowy; + +e. Licencjobiorca nie bêdzie 1) u¿ywaæ Programu do celów produkcyjnych ani w inny sposób u¿ywaæ, kopiowaæ, modyfikowaæ i dystrybuowaæ Programu z wyj±tkiem sytuacji wyra¼nie dozwolonych w niniejszej Umowie; 2) deasemblowaæ, dekompilowaæ Programu i dokonywaæ jego translacji w inny sposób ani odtwarzaæ kodu ¼ród³owego, z wyj±tkiem sytuacji dozwolonych przez bezwzglêdnie obowi±zuj±ce przepisy prawa, bez mo¿liwo¶ci wy³±czenia go w drodze umowy; 3) u¿ywaæ jakichkolwiek komponentów Programu, jego plików, modu³ów, tre¶ci audiowizualnych ani zwi±zanych z nim materia³ów licencjonowanych niezale¿nie od Programu; 4) udzielaæ dalszych licencji na Program, wypo¿yczaæ go ani wydzier¿awiaæ (leasingowaæ); ani 5) u¿ywaæ Programu do ¶wiadczenia us³ug sewerowych dla aplikacji komercyjnych; oraz + +f. je¶li Licencjobiorca nabywa niniejszy Program jako Program Dodatkowy, to bêdzie go u¿ywaæ jedynie do obs³ugi Programu G³ównego, zgodnie z ograniczeniami okre¶lonymi w licencji na Program G³ówny lub, je¶li Licencjobiorca nabywa Program jako Program G³ówny, to bêdzie u¿ywaæ wszystkich Programów Dodatkowych jedynie w celu obs³ugi tego Programu, zgodnie z ograniczeniami okre¶lonymi w niniejszej Umowie. Na potrzeby punktu "f" przyjmuje siê, ¿e "Program Dodatkowy" oznacza Program stanowi±cy czê¶æ innego Programu IBM ("Program G³ówny"), okre¶lany jako Program Dodatkowy w Informacjach Licencyjnych dla Programu G³ównego. (W celu nabycia oddzielnej licencji na u¿ywanie Programu Dodatkowego bez ograniczeñ, Licencjobiorca powinien skontaktowaæ siê z podmiotem, od którego naby³ Program Dodatkowy). + +Niniejsza licencja ma zastosowanie do ka¿dej kopii Programu wykonanej przez Licencjobiorcê. + +3.1 Aktualizacje i poprawki + +Otrzymanie przez Licencjobiorcê aktualizacji lub poprawek do Programu oznacza, ¿e Licencjobiorca akceptuje wszelkie dodatkowe lub odmienne warunki maj±ce zastosowanie do takich aktualizacji i poprawek, okre¶lone w Informacjach Licencyjnych dla Programu. W przypadku braku dodatkowych lub odmiennych warunków, aktualizacje i poprawki podlegaj± wy³±cznie postanowieniom niniejszej Umowy. Je¶li Program zostanie zast±piony aktualizacj±, Licencjobiorca wyra¿a zgodê na natychmiastowe zaprzestanie korzystania z zastêpowanej wersji Programu. + +3.2 Czas trwania i rozwi±zanie + +Okres próbnego u¿ywania rozpoczyna siê z dat± zaakceptowania przez Licencjobiorcê warunków niniejszej Umowy a koñczy wraz z wcze¶niejsz± z nastêpuj±cych dat: 1) dat± zakoñczenia okresu próbnego lub dat± okre¶lon± przez IBM w dokumencie "Informacje Licencyjne" lub w dokumencie transakcyjnym albo 2) dat± automatycznego samozablokowania siê Programu. Licencjobiorca zniszczy Program oraz wszystkie jego kopie w ci±gu dziesiêciu dni od zakoñczenia okresu próbnego u¿ywania. Je¶li IBM okre¶li w dokumencie "Informacje Licencyjne", ¿e Licencjobiorca mo¿e zatrzymaæ Program, a Licencjobiorca zdecyduje siê na to, wówczas Program bêdzie podlegaæ warunkom innej umowy licencyjnej, któr± IBM dostarczy Licencjobiorcy. Z tego tytu³u Licencjobiorca mo¿e ponie¶æ op³aty. + +IBM mo¿e rozwi±zaæ licencjê udzielon± Licencjobiorcy, je¶li Licencjobiorca nie bêdzie przestrzegaæ warunków niniejszej Umowy. Je¶li licencja zostanie rozwi±zana przez któr±kolwiek ze Stron z dowolnej przyczyny, Licencjobiorca wyra¿a zgodê na natychmiastowe zaprzestanie u¿ywania Programu oraz zniszczenie wszelkich posiadanych jego kopii. Wszelkie postanowienia niniejszej Umowy, które ze wzglêdu na swój charakter pozostaj± w mocy po jej rozwi±zaniu, bêd± mieæ zastosowanie do momentu ich wype³nienia i obowi±zywaæ bêd± nastêpców prawnych i cesjonariuszy obu Stron. + +PROGRAM MO¯E ZAWIERAÆ MECHANIZM BLOKUJ¡CY, KTÓRY BÊDZIE ZABEZPIECZAÆ PROGRAM PRZED U¯YWANIEM PO ZAKOÑCZENIU OKRESU PRÓBNEGO U¯YWANIA. LICENCJOBIORCA ZOBOWI¡ZUJE SIÊ NIE MANIPULOWAÆ MECHANIZMEM BLOKUJ¡CYM ANI PROGRAMEM. LICENCJOBIORCA ZOBOWI¡ZUJE SIÊ PODJ¡Æ STOSOWNE ¦RODKI OSTRO¯NO¦CI, ABY UNIKN¡Æ UTRATY DANYCH MOG¡CEJ WYNIKN¡Æ Z NIEMO¯NO¦CI DALSZEGO KORZYSTANIA Z PROGRAMU. + +4. Op³aty + +Licencjobiorca nie ponosi op³at za korzystanie z Programu w okresie próbnego u¿ywania. + +5. Brak gwarancji + +Z ZASTRZE¯ENIEM BEZWZGLÊDNIE OBOWI¡ZUJ¡CYCH WARUNKÓW, KTÓRYCH NIE MO¯NA WYKLUCZYÆ, IBM NIE UDZIELA JAKICHKOLWIEK GWARANCJI (W TYM TAK¯E RÊKOJMI) ORAZ NIE USTALA WARUNKÓW, ZARÓWNO WYRA¬NYCH JAK I DOMNIEMANYCH, DLA PROGRAMU I EWENTUALNEGO WSPARCIA, A W SZCZEGÓLNO¦CI DOMNIEMANYCH GWARANCJI LUB WARUNKÓW PRZYDATNO¦CI HANDLOWEJ, PRZYDATNO¦CI DO OKRE¦LONEGO CELU, ZADOWALAJ¡CEJ JAKO¦CI, PRAWA W£ASNO¦CI ORAZ GWARANCJI LUB WARUNKÓW NIENARUSZANIA PRAW OSÓB TRZECICH. + +USTAWODAWSTWA NIEKTÓRYCH KRAJÓW NIE DOPUSZCZAJ¡ WY£¡CZENIA WYRA¬NYCH LUB DOMNIEMANYCH GWARANCJI. W ZWI¡ZKU Z TYM POWY¯SZE WY£¡CZENIE MO¯E NIE MIEÆ ZASTOSOWANIA DO LICENCJOBIORCY. W TAKIM PRZYPADKU CZAS TRWANIA TAKICH GWARANCJI JEST OGRANICZONY DO MINIMALNEGO OKRESU WYMAGANEGO PRZEZ PRAWO. PO TYM OKRESIE NIE BÊD¡ OBOWI¡ZYWAÆ ¯ADNE GWARANCJE. USTAWODAWSTWA NIEKTÓRYCH KRAJÓW NIE DOPUSZCZAJ¡ OGRANICZENIA CZASU TRWANIA GWARANCJI DOMNIEMANYCH, W ZWI¡ZKU Z TYM POWY¯SZE OGRANICZENIE MO¯E NIE MIEÆ ZASTOSOWANIA DO LICENCJOBIORCY. LICENCJOBIORCY MOG¡ PRZYS£UGIWAÆ INNE PRAWA, W ZALE¯NO¦CI OD OBOWI¡ZUJ¡CEGO W DANYM KRAJU USTAWODAWSTWA. + +ZASTRZE¯ENIA I WYKLUCZENIA ZAWARTE W PARAGRAFIE 5 MAJ¡ RÓWNIE¯ ZASTOSOWANIE DO PROGRAMISTÓW I DOSTAWCÓW IBM. + +PRODUCENCI, DOSTAWCY I WYDAWCY PROGRAMÓW INNYCH NI¯ PROGRAMY IBM MOG¡ DOSTARCZAÆ SWOJE W£ASNE GWARANCJE. + +IBM NIE ¦WIADCZY ¯ADNYCH US£UG WSPARCIA, CHYBA ¯E IBM OKRE¦LI INACZEJ. W TAKIM PRZYPADKU WSZELKIE US£UGI WSPARCIA ¦WIADCZONE PRZEZ IBM PODLEGAJ¡ ZASTRZE¯ENIOM I WY£¡CZENIOM NINIEJSZEGO PARAGRAFU 5. + +6. Dane i bazy danych Licencjobiorcy + +W celu udzielenia Licencjobiorcy pomocy przy okre¶leniu przyczyny problemu z Programem, IBM mo¿e za¿±daæ, aby Licencjobiorca 1) zezwoli³ IBM na zdalny dostêp do swoich systemów lub 2) przes³a³ do IBM informacje na temat swoich systemów lub dane systemowe. Jednak¿e IBM nie jest zobowi±zany do zapewnienia takiej pomocy, chyba ¿e IBM i Licencjobiorca podpisz± oddzieln± umowê, w ramach której IBM wyrazi zgodê na ¶wiadczenie na rzecz Licencjobiorcy tego rodzaju wsparcia w zakresie przekraczaj±cym zobowi±zania IBM okre¶lone niniejsz± Umow±. W ka¿dym przypadku IBM wykorzystuje informacje o b³êdach i problemach w celu udoskonalania swych produktów i us³ug oraz udzielania pomocy przy ich dostarczaniu w ramach powi±zanych z nimi ofert wsparcia. Przy realizacji tych celów IBM mo¿e korzystaæ z pomocy oddzia³ów IBM i podwykonawców IBM (znajduj±cych siê nie tylko w kraju lokalizacji Licencjobiorcy, ale i poza nim), a Licencjobiorca upowa¿nia IBM do takiego dzia³ania. + +Licencjobiorca pozostaje odpowiedzialny za 1) wszelkie dane i zawarto¶æ bazy danych, które udostêpnia IBM, 2) wybór i implementacjê procedur oraz mechanizmów kontrolnych dotycz±cych dostêpu do danych, ich bezpieczeñstwa, szyfrowania, u¿ywania i transmisji (w tym wszelkich danych identyfikuj±cych osobê fizyczn±) oraz 3) tworzenie i odtwarzanie kopii zapasowych ka¿dej bazy danych i wszelkich gromadzonych danych. Licencjobiorca nie bêdzie wysy³aæ ani udostêpniaæ IBM jakichkolwiek informacji identyfikuj±cych osobê fizyczn± (w postaci danych lub jakiejkolwiek innej) i bêdzie odpowiedzialny za uregulowanie uzasadnionych kosztów i innych obci±¿eñ, które mo¿e ponie¶æ IBM w zwi±zku z omy³kowym udostêpnieniem takich informacji IBM b±d¼ za utratê lub ujawnienie takich informacji przez IBM, w tym informacji wynikaj±cych z roszczeñ osób trzecich. + +7. Ograniczenie odpowiedzialno¶ci + +Ograniczenia i zastrze¿enia paragrafu 7 (Ograniczenie odpowiedzialno¶ci) maj± zastosowanie w pe³nym zakresie i nie s± zakazane przepisami obowi±zuj±cego prawa, bez mo¿liwo¶ci wy³±czenia takiego prawa w ramach umowy. + +7.1 Sytuacje, w których IBM mo¿e ponosiæ odpowiedzialno¶æ + +W przypadku wyst±pienia okre¶lonych okoliczno¶ci, za które odpowiedzialno¶æ ponosi IBM, a w wyniku których Licencjobiorca dozna³ szkody, Licencjobiorca bêdzie uprawniony do uzyskania od IBM odszkodowania. Bez wzglêdu na podstawê, na jakiej Licencjobiorca jest uprawniony do domagania siê odszkodowania od IBM (w³±czywszy w to naruszenie istotnych postanowieñ niniejszej Umowy, niedbalstwo, wprowadzenie w b³±d lub inne roszczenia z tytu³u odpowiedzialno¶ci kontraktowej lub deliktowej), ca³kowita odpowiedzialno¶æ IBM z tytu³u wszelkich zsumowanych roszczeñ wynikaj±cych z lub odnosz±cych siê do ka¿dego Programu b±d¼ wynikaj±cych z niniejszej Umowy nie przekroczy: 1) kwoty odpowiedzialno¶ci za uszczerbek na zdrowiu (³±cznie ze ¶mierci±) oraz za szkody wyrz±dzone w nieruchomo¶ciach lub maj±tku ruchomym, 2) w przypadku innych rzeczywistych szkód bezpo¶rednich - kwoty 10.000 USD (lub równowarto¶ci w walucie miejscowej). + +Ograniczenie to ma równie¿ zastosowanie do programistów i dostawców Programów IBM. Wskazany powy¿ej zakres odpowiedzialno¶ci stanowi ca³o¶æ odpowiedzialno¶ci ponoszonej ³±cznie przez IBM oraz programistów i dostawców Programów IBM. + +7.2 Sytuacje, w których IBM nie ponosi odpowiedzialno¶ci + +W ¯ADNYCH OKOLICZNO¦CIACH IBM, ANI TE¯ PROGRAMI¦CI CZY DOSTAWCY PROGRAMÓW IBM, NIE PONOSZ¡ ODPOWIEDZIALNO¦CI ZA NASTÊPUJ¡CE SZKODY, NAWET JE¦LI ZOSTALI POINFORMOWANI O MO¯LIWO¦CI ICH WYST¡PIENIA: + +a. UTRATÊ LUB USZKODZENIE DANYCH; + +b. SZKODY NADZWYCZAJNE, UBOCZNE, WYNIKAJ¡CE Z NARUSZENIA DÓBR OSOBISTYCH, PO¦REDNIE ORAZ SZKODY, KTÓRYCH NIE MO¯NA BY£O PRZEWIDZIEÆ PRZY ZAWIERANIU UMOWY, ANI TE¯ + +c. UTRACONE ZYSKI, KONTAKTY HANDLOWE, PRZYCHODY, REPUTACJÊ (GOODWILL) ANI PRZEWIDYWANE OSZCZÊDNO¦CI. + +8. Weryfikacja zgodno¶ci + +Na potrzeby niniejszego paragrafu 8 (Weryfikacja zgodno¶ci), przyjmuje siê, ¿e termin "Warunki dla Programów do Próbnego U¿ywania" oznacza 1) niniejsz± Umowê oraz odpowiednie poprawki i dokumenty transakcyjne dostarczone przez IBM, a tak¿e 2) strategie IBM dotycz±ce oprogramowania, dostêpne w serwisie WWW (www.ibm.com/softwarepolicies), a w szczególno¶ci strategie dotycz±ce tworzenia kopii zapasowych, okre¶lania cen przy ograniczonej mocy obliczeniowej oraz migracji. + +Prawa i obowi±zki przedstawione w niniejszym paragrafie 8 obowi±zuj± w okresie licencjonowania Programu na rzecz Licencjobiorcy oraz dwa lata po tym okresie. + +8.1 Proces weryfikacji + +Licencjobiorca zgadza siê tworzyæ, przechowywaæ oraz dostarczaæ IBM i rewidentom IBM dok³adn± pisemn± dokumentacjê, dane wyj¶ciowe narzêdzi systemowych oraz inne informacje systemowe wystarczaj±ce do zapewnienia mo¿liwo¶ci weryfikacji, ¿e korzystanie przez Licencjobiorcê ze wszystkich Programów odbywa siê zgodnie z Warunkami dla Programów do Próbnego U¿ywania, a w szczególno¶ci ze wszystkimi obowi±zuj±cymi warunkami IBM w zakresie licencjonowania i cen. Licencjobiorca jest odpowiedzialny za 1) zapewnienie, ¿e nie zosta³ przekroczony poziom Autoryzowanego U¿ywania oraz 2) przestrzeganie zgodno¶ci z Warunkami dla Programów do Próbnego U¿ywania. + +IBM mo¿e zweryfikowaæ, informuj±c o takim zamiarze z odpowiednim wyprzedzeniem, czy Licencjobiorca przestrzega Warunków dla Programów do Próbnego U¿ywania we wszystkich o¶rodkach i ¶rodowiskach, gdzie Licencjobiorca u¿ywa Programów do jakichkolwiek celów zgodnie z Warunkami dla Programów do Próbnego U¿ywania. Weryfikacja taka mo¿e byæ przeprowadzana na terenie Licencjobiorcy, w normalnych godzinach pracy i bêdzie realizowana w sposób w minimalnym stopniu zak³ócaj±cy tê pracê. IBM mo¿e przy takiej weryfikacji skorzystaæ z us³ug niezale¿nego rewidenta, pod warunkiem, ¿e zosta³a z nim podpisana umowa o zachowaniu poufno¶ci. + +8.2 Rozstrzygniêcia + +IBM poinformuje Licencjobiorcê na pi¶mie, je¶li weryfikacja wyka¿e, ¿e Licencjobiorca przekroczy³ poziom Autoryzowanego U¿ywania lub w inny sposób naruszy³ Warunki dla Programów do Próbnego U¿ywania. Licencjobiorca wyra¿a zgodê na natychmiastowe i bezpo¶rednie uiszczenie na rzecz IBM op³at wyszczególnionych przez IBM na fakturze z tytu³u: 1) u¿ywania niezgodnego z Warunkami, 2) ¶wiadczenia wsparcia w czasie takiego u¿ywania lub przez okres dwóch lat, w zale¿no¶ci od tego, który z tych okresów by³ krótszy oraz 3) dodatkowych op³at i innych zobowi±zañ okre¶lonych w trakcie przeprowadzonej weryfikacji. + +9. Uwagi osób trzecich + +Program mo¿e zawieraæ kod osób trzecich, który bêdzie licencjonowany na rzecz Licencjobiorcy w ramach niniejszej Umowy przez IBM, a nie przez osobê trzeci±. Ewentualne Uwagi na temat kodu osób trzecich (Uwagi Osób Trzecich) s± do³±czane jedynie w celu powiadomienia Licencjobiorcy. Uwagi te mo¿na znale¼æ w pliku NOTICES do³±czonym do Programu. Informacje na temat uzyskania kodu ¼ród³owego dla konkretnego kodu osób trzecich mo¿na znale¼æ w Uwagach Osób Trzecich. Je¶li w Uwagach Osób Trzecich IBM okre¶li kod osób trzecich jako "Modyfikowany Kod Osób Trzecich", to IBM upowa¿ni Licencjobiorcê do 1) modyfikacji Modyfikowanego Kodu Osób Trzecich oraz 2) odtwarzania kodu ¼ród³owego modu³ów Programu, które s± bezpo¶rednio wykorzystywane przez Modyfikowany Kod Osób Trzecich pod warunkiem, ¿e czynno¶æ ta zostanie podjêta jedynie w celu debugowania modyfikacji Licencjobiorcy na potrzeby takiego kodu osób trzecich. Ewentualne zobowi±zania IBM w zakresie us³ug i wsparcia dotycz± jedynie Programu niezmodyfikowanego. + +10. Postanowienia ogólne + +a. Postanowienia zawarte w niniejszej Umowie pozostaj± bez wp³ywu na uprawnienia przys³uguj±ce konsumentom na podstawie bezwzglêdnie obowi±zuj±cych przepisów prawa. + +b. W przypadku niewa¿no¶ci lub niewykonalno¶ci któregokolwiek z postanowieñ niniejszej Umowy, pozosta³e postanowienia niniejszej Umowy zachowuj± pe³n± moc prawn± i skuteczno¶æ. + +c. Eksportowanie Programu przez Licencjobiorcê jest zabronione. + +d. Licencjobiorca upowa¿nia International Business Machines Corporation oraz przedsiêbiorstwa podporz±dkowane IBM Corp. (ich nastêpców prawnych i cesjonariuszy, wykonawców i Partnerów Handlowych IBM) do przechowywania i u¿ywania biznesowych informacji kontaktowych Licencjobiorcy, bez wzglêdu na miejsce prowadzonej dzia³alno¶ci, w zwi±zku z produktami i us³ugami IBM lub w celu utrzymania kontaktów handlowych miêdzy Stronami. + +e. Ka¿da ze Stron stworzy drugiej Stronie rozs±dne mo¿liwo¶ci wype³nienia zobowi±zañ, zanim zarzuci drugiej Stronie ich niewype³nienie w ramach niniejszej Umowy. Strony podejm± w dobrej wierze próbê rozstrzygniêcia sporów, nieporozumieñ lub roszczeñ powsta³ych miêdzy nimi w zwi±zku z Umow±. + +f. O ile obowi±zuj±ce prawo nie stanowi inaczej, bez mo¿liwo¶ci wy³±czenia takiego prawa w ramach umowy: 1) ¿adna ze Stron nie podejmie dzia³añ prawnych, w jakiejkolwiek formie, zwi±zanych z roszczeniem wynikaj±cym z niniejszej Umowy lub pozostaj±cym z ni± w zwi±zku po okresie dwóch lat od czasu pojawienia siê przyczyny podjêcia takich dzia³añ; oraz 2) po wyga¶niêciu takiego okresu, wszelkie roszczenia przedawniaj± siê i prawa z nimi zwi±zane wygasaj±. + +g. Ani Licencjobiorca, ani IBM nie odpowiadaj± za niedope³nienie jakichkolwiek obowi±zków, je¶li przyczyny takiego niedope³nienia le¿a³y poza ich kontrol±. + +h. Niniejsza Umowa nie daje osobom trzecim jakichkolwiek praw ani te¿ podstawy do roszczeñ, a IBM nie ponosi odpowiedzialno¶ci za jakiekolwiek roszczenie osób trzecich wobec Licencjobiorcy, z wyj±tkiem zakresu przewidzianego w paragrafie 7.1 (Sytuacje, w których IBM mo¿e nie ponosiæ odpowiedzialno¶ci) powy¿ej, w czê¶ci dotycz±cej uszczerbku na zdrowiu (³±cznie ze ¶mierci±) lub szkód wyrz±dzonych w nieruchomo¶ciach lub w maj±tku ruchomym, za które IBM ponosi odpowiedzialno¶æ prawn± wobec osób trzecich. + +i. Przystêpuj±c do niniejszej Umowy ¿adna ze Stron nie korzysta z ¿adnych ustaleñ, które nie zosta³y okre¶lone w Umowie, a w szczególno¶ci z ¿adnych ustaleñ w zakresie: 1) wydajno¶ci lub dzia³ania Programu odbiegaj±cych od wyra¼nie gwarantowanych w paragrafie 5 (Brak gwarancji) powy¿ej; 2) do¶wiadczeñ czy rekomendacji osób trzecich lub 3) wyników lub oszczêdno¶ci, jakie mo¿e osi±gn±æ Licencjobiorca. + +j. IBM podpisa³ umowy z konkretnymi organizacjami (zwanymi "Partnerami Handlowymi IBM") w celu promocji i sprzeda¿y okre¶lonych Programów oraz udzielania dla nich wsparcia. Partnerzy Handlowi IBM dzia³aj± oddzielnie i niezale¿nie od IBM. IBM nie ponosi odpowiedzialno¶ci za dzia³ania lub o¶wiadczenia Partnerów Handlowych IBM ani za ich zobowi±zania wobec Licencjobiorcy. + +k. Warunki licencji oraz warunki dotycz±ce zabezpieczenia i ochrony w³asno¶ci intelektualnej okre¶lone w innych umowach Licencjobiorcy z IBM (na przyk³ad w Umowie IBM z Klientem) nie maj± zastosowania do licencji na Program udzielonych na mocy niniejszej Umowy. + +11. Obowi±zuj±ce ustawodawstwo i jurysdykcja + +11.1 Obowi±zuj±ce ustawodawstwo + +Obie Strony przyjmuj± jako obowi±zuj±ce prawo kraju, w którym licencja na Program zosta³a nabyta, oraz wyra¿aj± zgodê na stosowanie takiego prawa przy interpretowaniu oraz egzekwowaniu wszelkich praw, obowi±zków i zobowi±zañ Stron, wynikaj±cych z niniejszej Umowy lub maj±cych w jakikolwiek sposób z ni± zwi±zek, bez odwo³ywania siê do zasad kolizji przepisów prawnych. + +Konwencja ONZ dotycz±ca umów o Miêdzynarodowej Sprzeda¿y Towarów (United Nations Convention on Contracts for the International Sale of Goods) nie ma zastosowania. + +11.2 Jurysdykcja + +Wszelkie prawa, obowi±zki i zobowi±zania podlegaj± w³a¶ciwym s±dom kraju nabycia licencji na Program przez Licencjobiorcê. + +Czê¶æ 2 - Warunki specyficzne dla poszczególnych krajów + +W przypadku licencji udzielanych na terenie Polski, poni¿sze warunki zastêpuj± lub modyfikuj± warunki okre¶lone w Czê¶ci 1. Wszystkie warunki Czê¶ci 1, których nie dotyczy niniejsza poprawka, nie ulegaj± zmianom i pozostaj± w mocy. W sk³ad Czê¶ci 2 wchodz±: + +* Zmiany krajowe do Czê¶ci 1, paragraf 11 (Obowi±zuj±ce ustawodawstwo i jurysdykcja) oraz + +* Zmiany krajowe do innych warunków Umowy dotycz±ce Europy, Bliskiego Wschodu i Afryki. + +Zmiany krajowe do Czê¶ci 1, paragraf 11 (Obowi±zuj±ce ustawodawstwo i jurysdykcja) + +11.1 Obowi±zuj±ce ustawodawstwo + +Fraza "prawo kraju, w którym licencja na Program zosta³a nabyta" w pierwszym akapicie paragrafu 11.1 (Obowi±zuj±ce ustawodawstwo) zostaje w przypadku Polski zast±piona nastêpuj±cym tekstem: + +prawo Austrii. + +11.3 Arbitra¿ + +Nastêpuj±cy akapit maj±cy zastosowanie w Polsce zostaje dodany jako nowy do paragrafu 11.3 (Arbitra¿). Postanowienia paragrafu 11.3 maj± znaczenie rozstrzygaj±ce nad postanowieniami paragrafu 11.2 (Jurysdykcja) w zakresie, w jakim zezwala na to obowi±zuj±ce ustawodawstwo i zasady proceduralne: + +Wszelkie kwestie sporne wynikaj±ce z niniejszej Umowy lub zwi±zane z jej naruszeniem, wypowiedzeniem lub niewa¿no¶ci± bêd± rozstrzygane w sposób ostateczny zgodnie z Zasadami Postêpowania Arbitra¿owego i Ugodowego Miêdzynarodowego Centrum Arbitra¿u przy Federalnej Izbie Gospodarczej (Rules of Arbitration and Conciliation of the International Arbitral Center of the Federal Economic Chamber) w Wiedniu (Vienna Rules), przez trzech arbitrów, powo³anych zgodnie ze wspomnianymi zasadami. Arbitra¿ bêdzie mia³ miejsce w Wiedniu, w Austrii. Jêzykiem obowi±zuj±cym podczas postêpowania bêdzie jêzyk angielski. Orzeczenia arbitrów bêd± ostateczne i wi±¿±ce dla obu Stron. Oznacza to, ¿e zgodnie z artyku³em 598(2) Austriackiego Kodeksu Postêpowania Cywilnego (Austrian Code of Civil Procedure), Strony rezygnuj± ze stosowania artyku³u 595(1) punkt 7 tego Kodeksu. Tym niemniej powy¿sze warunki w ¿adnym stopniu nie ograniczaj± prawa IBM do wszczêcia postêpowania przed dowolnym w³a¶ciwym s±dem w kraju instalacji. + +ZMIANY KRAJOWE DOTYCZ¡CE EUROPY, BLISKIEGO WSCHODU I AFRYKI + +KRAJE CZ£ONKOWSKIE UNII EUROPEJSKIEJ + +5. Brak gwarancji + +Nastêpuj±cy tekst zosta³ dodany do paragrafu 5 (Brak gwarancji): + +W krajach Unii Europejskiej ("UE") klientom przys³uguj± prawa wynikaj±ce z obowi±zuj±cego ustawodawstwa krajowego, któremu podlega sprzeda¿ artyku³ów konsumpcyjnych. Postanowienia zawarte w paragrafie 5 (Brak gwarancji) pozostaj± bez wp³ywu na te prawa. + +KRAJE CZ£ONKOWSKIE UNII EUROPEJSKIEJ I KRAJE WYSZCZEGÓLNIONE PONI¯EJ + +Ka¿dy kraj europejski, który uchwali³ lokalne akty prawne dotycz±ce ochrony danych zbli¿one do modelu obowi±zuj±cego w Unii Europejskiej. + +10. Postanowienia ogólne + +Nastêpuj±cy tekst zastêpuje punkt 10.d: + +(1) Definicje - Do punktu 10.d maj± zastosowanie nastêpuj±ce definicje dodatkowe: + +(a) Biznesowe Informacje Kontaktowe - oznaczaj± informacje maj±ce zwi±zek z dzia³alno¶ci± gospodarcz±, ujawnione IBM przez Licencjobiorcê, w tym imiona i nazwiska, stanowiska, adresy s³u¿bowe, numery telefonów oraz adresy e-mail pracowników i wykonawców Licencjobiorcy. W przypadku Austrii, W³och i Szwajcarii Biznesowe Informacje Kontaktowe obejmuj± równie¿ informacje o Licencjobiorcy oraz jego wykonawcach posiadaj±cych osobowo¶æ prawn± (na przyk³ad dane na temat przychodów Licencjobiorcy i inne informacje o transakcjach). + +(b) Biznesowy Personel Kontaktowy - oznacza pracowników i wykonawców Licencjobiorcy, do których odnosz± siê Biznesowe Informacje Kontaktowe. + +(c) Urz±d Ochrony Danych - oznacza organ powo³any zgodnie z Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej w okre¶lonym kraju lub w przypadku krajów spoza Unii Europejskiej, organ odpowiedzialny za nadzór nad ochron± danych osobowych w takim kraju b±d¼ (w obu powy¿szych przypadkach) ka¿dy nastêpca prawny takiego organu powo³any w odpowiedni sposób. + +(d) Ustawodawstwo o ochronie danych i ³±czno¶ci elektronicznej - oznacza (i) obowi±zuj±ce prawo i przepisy krajowe wdra¿aj±ce wymagania dyrektywy Unii Europejskiej 95/46/WE (w sprawie ochrony osób fizycznych w zakresie przetwarzania danych osobowych i swobodnego przep³ywu tych danych) oraz dyrektywy 2002/58/WE (dotycz±cej przetwarzania danych osobowych i ochrony prywatno¶ci w sektorze ³±czno¶ci elektronicznej); lub (ii) w przypadku krajów spoza Unii Europejskiej, prawa i przepisy obowi±zuj±ce w takich krajach i odnosz±ce siê do ochrony danych osobowych i przepisów o ³±czno¶ci elektronicznej z wykorzystaniem danych osobowych, w tym (w obu powy¿szych przypadkach) ich ustawowe nowe wersje i modyfikacje. + +(e) Grupa IBM - oznacza International Business Machines Corporation z siedzib± w Armonk, Nowy Jork, USA, przedsiêbiorstwa podporz±dkowane International Business Machines Corporation oraz ich odpowiednich Partnerów Handlowych i podwykonawców. + +(2) Licencjobiorca upowa¿nia IBM do: + +(a) przetwarzania i u¿ywania Biznesowych Informacji Kontaktowych w ramach Grupy IBM w celu obs³ugi Licencjobiorcy, w tym w celu ¶wiadczenia us³ug wsparcia oraz rozszerzania relacji handlowych miêdzy Licencjobiorc± i Grup± IBM, a w szczególno¶ci nawi±zywania kontaktów z Biznesowym Personelem Kontaktowym (za po¶rednictwem poczty e-mail lub w inny sposób) oraz sprzeda¿y produktów i us³ug Grupy IBM (zwanym dalej "Okre¶lonym Celem"); oraz + +(b) ujawniania Biznesowych Informacji Kontaktowych innym cz³onkom Grupy IBM jedynie na potrzeby realizacji Okre¶lonego Celu. + +(3) IBM wyra¿a zgodê na przetwarzanie Biznesowych Informacji Kontaktowych zgodnie z Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej. + +(4) Licencjobiorca o¶wiadcza, ¿e w zakresie wymaganym Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej (a) uzyska³ (lub uzyska) zgodê Biznesowego Personelu Kontaktowego na przetwarzanie i u¿ywanie przez Grupê IBM Biznesowych Informacji Kontaktowych do realizacji Okre¶lonego Celu, oraz ¿e przygotowa³ (lub przygotuje) powiadomienie dla Biznesowego Personelu Kontaktowego w tej sprawie. + +(5) Licencjobiorca upowa¿nia IBM do przesy³ania Biznesowych Informacji Kontaktowych poza Europejsk± Strefê Ekonomiczn± pod warunkiem, ¿e bêdzie to realizowane na warunkach zatwierdzonych przez Urz±d Ochrony Danych lub zgodnie z Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej. + +Z125-5543-05 (07/2011) + + +Miêdzynarodowa Umowa Licencyjna na Program + +Czê¶æ 1 - Warunki ogólne + +POBIERANIE, INSTALOWANIE, KOPIOWANIE, OTWIERANIE, KLIKANIE PRZYCISKU "AKCEPTUJÊ" ORAZ U¯YWANIE PROGRAMU W JAKIKOLWIEK INNY SPOSÓB OZNACZA AKCEPTACJÊ WARUNKÓW NINIEJSZEJ UMOWY. ZAAKCEPTOWANIE PRZEZ U¯YTKOWNIKA NINIEJSZYCH WARUNKÓW W IMIENIU LICENCJOBIORCY OZNACZA, ¯E U¯YTKOWNIK GWARANTUJE POSIADANIE PE£NYCH UPRAWNIEÑ DO PODPORZ¡DKOWANIA LICENCJOBIORCY NINIEJSZYM WARUNKOM. JE¦LI U¯YTKOWNIK NIE WYRA¯A ZGODY NA NINIEJSZE WARUNKI, + +* NIE BÊDZIE POBIERAÆ, INSTALOWAÆ, KOPIOWAÆ, OTWIERAÆ, KLIKAÆ PRZYCISKU "AKCEPTUJÊ" ANI U¯YWAÆ PROGRAMU W INNY SPOSÓB; ORAZ + +* NATYCHMIAST ZWRÓCI NIEWYKORZYSTANE NO¦NIKI, DOKUMENTACJÊ ORAZ DOKUMENT PROOF OF ENTITLEMENT PODMIOTOWI, OD KTÓREGO NABY£ PROGRAM, ABY UZYSKAÆ ZWROT ZAP£ACONEJ KWOTY. JE¦LI PROGRAM ZOSTA£ POBRANY, NALE¯Y ZNISZCZYÆ WSZELKIE JEGO KOPIE. + +1. Definicje + +"Autoryzowane U¿ywanie" okre¶la poziom, do jakiego Licencjobiorca ma upowa¿nienie do wykonywania lub uruchamiania Programu. Poziom ten mo¿e byæ mierzony liczb± u¿ytkowników, liczb± jednostek MSU (millions of service units), liczb± procesorowych jednostek warto¶ci (PVU - Processor Value Units) lub w inny sposób okre¶lony przez IBM. + +"IBM" oznacza International Business Machines Corporation lub jedno z przedsiêbiorstw podporz±dkowanych IBM Corp. + +"Informacje Licencyjne" ("LI") oznaczaj± dokument zawieraj±cy informacje i inne warunki dodatkowe na temat Programu. Dokument "Informacje Licencyjne" dla Programu jest dostêpny pod adresem www.ibm.com/software/sla. Informacje Licencyjne mo¿na te¿ znale¼æ w katalogu Programu, u¿ywaj±c komend systemowych. Dokument ten mo¿e te¿ byæ zawarty w Programie. + +"Program" oznacza orygina³ oraz pe³ne lub czê¶ciowe kopie: 1) instrukcji i danych w formie zapisu maszynowego, 2) komponentów, plików i modu³ów, 3) zapisów audiowizualnych (takich jak obrazy, tekst, nagrania lub ilustracje), 4) odnosz±cych siê do Programu materia³ów licencjonowanych (takich jak klucze i dokumentacja). + +"Proof of Entitlement" ("PoE") oznacza dokument upowa¿niaj±cy Licencjobiorcê do Autoryzowanego U¿ywania. Dokument PoE stanowi równie¿ dowód uprawniaj±cy Licencjobiorcê do korzystania z gwarancji, z cen obowi±zuj±cych na kolejne aktualizacje, je¶li takowe maj± zastosowanie, oraz ewentualnych specjalnych ofert i promocji. Je¶li IBM nie udostêpni Licencjobiorcy dokumentu PoE, to IBM mo¿e zaakceptowaæ jako PoE oryginalny op³acony rachunek lub inny dokument potwierdzaj±cy sprzeda¿, otrzymany od podmiotu, od którego Licencjobiorca naby³ Program (od IBM lub reselera IBM), pod warunkiem ¿e na dokumencie takim wyszczególniona jest nazwa nabytego Programu oraz nabyty poziom Autoryzowanego U¿ywania. + +"Okres Gwarancyjny" oznacza jeden rok pocz±wszy od daty udzielenia licencji pierwotnemu Licencjobiorcy. + +2. Struktura Umowy + +Niniejsza Umowa zawiera Czê¶æ 1 - Warunki ogólne, Czê¶æ 2 - Warunki specyficzne dla poszczególnych krajów (o ile maj± zastosowanie), Informacje Licencyjne oraz dokument PoE, które tworz± kompletn± umowê miêdzy Licencjobiorc± i IBM dotycz±c± u¿ywania Programu. Umowa ta zastêpuje wszelkie wcze¶niejsze ustne lub pisemne ustalenia dokonane miêdzy Licencjobiorc± i IBM w zakresie u¿ywania Programu. W przypadku jakiejkolwiek sprzeczno¶ci, warunki dokumentu "Informacje Licencyjne" maj± znaczenie rozstrzygaj±ce nad warunkami obu Czê¶ci. + +3. Udzielenie licencji + +Program ten jest w³asno¶ci± IBM lub dostawcy IBM. Program ten jest chroniony prawem autorskim i stanowi przedmiot umowy licencyjnej, a nie umowy sprzeda¿y. + +IBM udziela Licencjobiorcy niewy³±cznej licencji na 1) u¿ywanie Programu do poziomu Autoryzowanego U¿ywania okre¶lonego w dokumencie PoE, 2) wykonywanie i instalowanie kopii w celu ¶wiadczenia wsparcia do takiego Autoryzowanego U¿ywania oraz 3) wykonywanie kopii zapasowych, pod warunkiem ¿e + +a. Licencjobiorca naby³ Program legalnie i przestrzega warunków niniejszej Umowy; + +b. taka kopia zapasowa nie bêdzie u¿ywana dopóki Program, z którego zosta³a zrobiona, bêdzie dzia³aæ; + +c. Licencjobiorca powieli wszelkie uwagi dotycz±ce praw autorskich oraz wszelkie informacje o prawach w³asno¶ci na ka¿dej pe³nej lub czê¶ciowej kopii Programu; + +d. Licencjobiorca zapewni, ¿e jakakolwiek osoba korzystaj±ca z Programu (lokalnie lub zdalnie) 1) dokonuje tego jedynie w imieniu Licencjobiorcy oraz 2) przestrzega warunków niniejszej Umowy; + +e. Licencjobiorca nie bêdzie 1) u¿ywaæ, kopiowaæ, modyfikowaæ ani dystrybuowaæ Programu z wyj±tkiem sytuacji wyra¼nie wskazanych w niniejszej Umowie; 2) deasemblowaæ, dekompilowaæ Programu i dokonywaæ jego translacji w inny sposób ani odtwarzaæ kodu ¼ród³owego, z wyj±tkiem sytuacji dozwolonych przez bezwzglêdnie obowi±zuj±ce przepisy prawa, bez mo¿liwo¶ci wy³±czenia go w drodze umowy; 3) u¿ywaæ jakichkolwiek komponentów Programu, jego plików, modu³ów, tre¶ci audiowizualnych ani zwi±zanych z nim materia³ów licencjonowanych niezale¿nie od Programu; 4) udzielaæ dalszych licencji na Program, wypo¿yczaæ go ani wydzier¿awiaæ; oraz + +f. je¶li Licencjobiorca nabywa niniejszy Program jako Program Dodatkowy, to bêdzie go u¿ywaæ jedynie do obs³ugi Programu G³ównego, zgodnie z ograniczeniami okre¶lonymi w licencji na Program G³ówny lub, je¶li Licencjobiorca nabywa Program jako Program G³ówny, to bêdzie u¿ywaæ wszystkich Programów Dodatkowych jedynie w celu obs³ugi tego Programu, zgodnie z ograniczeniami okre¶lonymi w niniejszej Umowie. Na potrzeby punktu "f" przyjmuje siê, ¿e "Program Dodatkowy" oznacza Program stanowi±cy czê¶æ innego Programu IBM ("Program G³ówny"), okre¶lany jako Program Dodatkowy w Informacjach Licencyjnych dla Programu G³ównego. (W celu nabycia oddzielnej licencji na u¿ywanie Programu Dodatkowego bez ograniczeñ, Licencjobiorca powinien skontaktowaæ siê z podmiotem, od którego naby³ Program Dodatkowy). + +Niniejsza licencja ma zastosowanie do ka¿dej kopii Programu wykonanej przez Licencjobiorcê. + +3.1 Nowsze wersje Programu, aktualizacje i poprawki + +3.1.1 Nowsze wersje Programu + +Je¶li Program zostanie zast±piony Programem nowszej wersji, licencja na zastêpowany Program wygasa ze skutkiem natychmiastowym. + +3.1.2 Aktualizacje i poprawki + +Otrzymanie przez Licencjobiorcê aktualizacji lub poprawek do Programu oznacza, ¿e Licencjobiorca akceptuje wszelkie dodatkowe lub odmienne warunki maj±ce zastosowanie do takich aktualizacji i poprawek, okre¶lone w Informacjach Licencyjnych dla Programu. W przypadku braku dodatkowych lub odmiennych warunków, aktualizacje i poprawki podlegaj± wy³±cznie postanowieniom niniejszej Umowy. Je¶li Program zostanie zast±piony aktualizacj±, Licencjobiorca wyra¿a zgodê na natychmiastowe zaprzestanie korzystania z zastêpowanej wersji Programu. + +3.2 Licencje czasowe + +Je¶li IBM licencjonuje Program na wyznaczony termin, to licencja udzielona Licencjobiorcy koñczy siê wraz z koñcem wyznaczonego terminu, chyba ¿e Licencjobiorca i IBM wyra¿± zgodê na jej odnowienie. + +3.3 Czas trwania i rozwi±zanie + +Niniejsza Umowa obowi±zuje do momentu jej rozwi±zania. + +IBM mo¿e rozwi±zaæ licencjê udzielon± Licencjobiorcy, je¶li Licencjobiorca nie bêdzie przestrzegaæ warunków niniejszej Umowy. + +Je¶li licencja zostanie rozwi±zana przez któr±kolwiek ze Stron z dowolnej przyczyny, Licencjobiorca wyra¿a zgodê na natychmiastowe zaprzestanie u¿ywania Programu oraz zniszczenie wszelkich posiadanych jego kopii. Wszelkie postanowienia niniejszej Umowy, które ze wzglêdu na swój charakter pozostaj± w mocy po jej rozwi±zaniu, bêd± mieæ zastosowanie do momentu ich wype³nienia i obowi±zywaæ bêd± nastêpców prawnych i cesjonariuszy obu Stron. + +4. Op³aty + +Op³aty s± naliczane na podstawie nabytego poziomu Autoryzowanego U¿ywania, okre¶lonego w dokumencie PoE. IBM nie zwraca wcze¶niej wniesionych lub nale¿nych op³at ani nie uwzglêdnia ich w rozliczeniach, chyba ¿e niniejsza Umowa stanowi inaczej. + +Je¶li Licencjobiorca zamierza podwy¿szyæ poziom Autoryzowanego U¿ywania, musi on powiadomiæ z wyprzedzeniem IBM lub autoryzowanego reselera IBM i wnie¶æ odpowiednie op³aty. + +5. Podatki + +Je¶li odpowiednie w³adze na³o¿± na Program op³atê skarbow±, podatek, op³atê egzekucyjn± lub prowizjê, z wy³±czeniem op³at wynikaj±cych z dochodu netto IBM, Licencjobiorca zgadza siê ui¶ciæ tak± op³atê w kwocie okre¶lonej na fakturze lub dostarczyæ dokumentacjê stwierdzaj±c± prawo do zwolnienia z tej op³aty. Od daty nabycia Programu Licencjobiorca ponosi odpowiedzialno¶æ z tytu³u nale¿nego podatku po¶redniego. Je¶li odpowiednie w³adze na³o¿± op³atê skarbow±, podatek, op³atê egzekucyjn± lub prowizjê w zwi±zku z importem lub eksportem, transferem, uzyskaniem dostêpu b±d¼ korzystaniem z Programu poza krajem, w którym zosta³a udzielona licencja pierwotnemu Licencjobiorcy, to Licencjobiorca przyjmuje na siebie odpowiedzialno¶æ za wszelkie na³o¿one op³aty oraz za ich uiszczenie. + +6. Gwarancja zwrotu pieniêdzy + +Je¶li z jakiegokolwiek powodu Licencjobiorca nie jest zadowolony z Programu, a jest pierwotnym Licencjobiorc±, to mo¿e rozwi±zaæ licencjê i uzyskaæ zwrot kwoty zap³aconej za Program pod warunkiem zwrotu Programu i dokumentu PoE do podmiotu, od którego je naby³, w ci±gu 30 dni od daty wydania dokumentu PoE Licencjobiorcy. Je¶li licencja jest licencj± czasow± podlegaj±c± odnowieniu, to Licencjobiorca mo¿e otrzymaæ zwrot kwoty pod warunkiem, ¿e Program wraz z dokumentem PoE zostan± zwrócone w ci±gu pierwszych 30 dni pocz±tkowego okresu obowi±zywania. W przypadku pobrania Programu drog± elektroniczn± Licencjobiorca powinien skontaktowaæ siê z podmiotem, od którego naby³ Program, aby dowiedzieæ siê, w jaki sposób uzyskaæ zwrot kwoty. + +7. Przeniesienie Programu + +Licencjobiorca mo¿e przenie¶æ Program oraz wszelkie przys³uguj±ce mu prawa i obowi±zki licencyjne na osobê trzeci±, o ile osoba taka zaakceptuje warunki niniejszej Umowy. Je¶li licencja zostanie rozwi±zana przez któr±kolwiek ze Stron z dowolnej przyczyny, to Licencjobiorca nie ma prawa do przeniesienia Programu na osobê trzeci±. Licencjobiorca nie mo¿e przenosiæ czê¶ci 1) Programu ani 2) praw do Autoryzowanego U¿ywania Programu. Wraz z przeniesieniem Programu Licencjobiorca jest zobowi±zany do przeniesienia egzemplarza niniejszej Umowy w postaci wydruku, ³±cznie z Informacjami Licencyjnymi i dokumentem PoE. Licencja Licencjobiorcy wygasa natychmiast po dokonaniu takiego przeniesienia. + +8. Gwarancje i zastrze¿enia + +8.1 Ograniczona gwarancja + +IBM gwarantuje, ¿e Program u¿ywany w okre¶lonym ¶rodowisku pracy bêdzie dzia³aæ zgodnie ze specyfikacjami. Specyfikacje Programu oraz informacje dotycz±ce okre¶lonego ¶rodowiska pracy mog± znajdowaæ siê w dokumentacji za³±czonej do Programu (na przyk³ad w pliku read-me) lub w formie innej informacji og³oszonej przez IBM (na przyk³ad w dokumencie announcement letter). Licencjobiorca zgadza siê, ¿e taka dokumentacja i inne informacje dotycz±ce Programu mog± byæ dostarczane jedynie w jêzyku angielskim, chyba ¿e prawo krajowe stanowi inaczej, bez mo¿liwo¶ci wy³±czenia go w ramach umowy. + +Gwarancja ma zastosowanie jedynie do niezmodyfikowanych fragmentów Programu. IBM nie gwarantuje nieprzerwanego ani wolnego od b³êdów dzia³ania Programu, ani te¿ usuniêcia wszystkich jego defektów. Licencjobiorca ponosi odpowiedzialno¶æ za wyniki u¿ywania Programu. + +W Okresie Gwarancyjnym IBM zapewnia Licencjobiorcy bezp³atny dostêp do baz danych IBM zawieraj±cych informacje na temat znanych defektów Programu, poprawek defektów, ograniczeñ i mo¿liwo¶ci obej¶cia tych¿e defektów. Wiêcej informacji na ten temat zawiera Podrêcznik Wsparcia dla Oprogramowania IBM (IBM Software Support Handbook) pod adresem www.ibm.com/software/support. + +W przypadku, gdy w Okresie gwarancyjnym Program nie dzia³a zgodnie z gwarancj±, a problemu nie mo¿na rozwi±zaæ, korzystaj±c z informacji dostêpnych w bazach danych IBM, Licencjobiorca ma prawo zwróciæ Program i odnosz±cy siê do niego dokument PoE podmiotowi, od którego naby³ Program (IBM lub reselerowi IBM) i otrzymaæ zwrot zap³aconej kwoty. Licencja Licencjobiorcy wygasa natychmiast po dokonaniu zwrotu Programu. W przypadku pobrania Programu drog± elektroniczn± Licencjobiorca powinien skontaktowaæ siê z podmiotem, od którego naby³ Program, aby dowiedzieæ siê, w jaki sposób uzyskaæ zwrot kwoty. + +8.2 Zastrze¿enia + +NINIEJSZE GWARANCJE S¡ WY£¡CZNYMI GWARANCJAMI UDZIELANYMI LICENCJOBIORCY ORAZ ZASTÊPUJ¡ WSZELKIE INNE GWARANCJE LUB WARUNKI (W TYM TAK¯E RÊKOJMIÊ), WYRA¬NE LUB DOMNIEMANE, A W SZCZEGÓLNO¦CI DOMNIEMANE GWARANCJE LUB WARUNKI PRZYDATNO¦CI HANDLOWEJ, PRZYDATNO¦CI DO OKRE¦LONEGO CELU, ZADOWALAJ¡CEJ JAKO¦CI, PRAWA W£ASNO¦CI ORAZ GWARANCJE LUB WARUNKI NIENARUSZANIA PRAW OSÓB TRZECICH. USTAWODAWSTWA NIEKTÓRYCH KRAJÓW NIE DOPUSZCZAJ¡ WY£¡CZENIA WYRA¬NYCH LUB DOMNIEMANYCH GWARANCJI. W ZWI¡ZKU Z TYM POWY¯SZE WY£¡CZENIE MO¯E NIE MIEÆ ZASTOSOWANIA DO LICENCJOBIORCY. W TAKIM PRZYPADKU CZAS TRWANIA TAKICH GWARANCJI JEST OGRANICZONY DO OKRESU GWARANCYJNEGO. PO TYM OKRESIE NIE BÊD¡ OBOWI¡ZYWAÆ ¯ADNE GWARANCJE. USTAWODAWSTWA NIEKTÓRYCH KRAJÓW NIE DOPUSZCZAJ¡ OGRANICZENIA CZASU TRWANIA GWARANCJI DOMNIEMANYCH, W ZWI¡ZKU Z TYM POWY¯SZE OGRANICZENIE MO¯E NIE MIEÆ ZASTOSOWANIA DO LICENCJOBIORCY. + +NA MOCY NINIEJSZYCH GWARANCJI LICENCJOBIORCY PRZYZNAWANE S¡ SZCZEGÓLNE PRAWA. LICENCJOBIORCY MOG¡ RÓWNIE¯ PRZYS£UGIWAÆ INNE PRAWA, W ZALE¯NO¦CI OD OBOWI¡ZUJ¡CEGO W DANYM KRAJU USTAWODAWSTWA. + +GWARANCJE OKRE¦LONE W PARAGRAFIE 8 (GWARANCJE I ZASTRZE¯ENIA) S¡ UDZIELANE WY£¡CZNIE PRZEZ IBM. ZASTRZE¯ENIA OKRE¦LONE W PARAGRAFIE 8.2 (ZASTRZE¯ENIA) MAJ¡ RÓWNIE¯ ZASTOSOWANIE DO DOSTAWCÓW IBM, KTÓRZY DOSTARCZAJ¡ KOD OSÓB TRZECICH. DOSTAWCY CI DOSTARCZAJ¡ TAKI KOD BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI I USTALANIA WARUNKÓW (W TYM TAK¯E RÊKOJMI). ZAPISY TEGO AKAPITU NIE UNIEWA¯NIAJ¡ OBOWI¡ZKÓW IBM WYNIKAJ¡CYCH Z GWARANCJI OKRE¦LONYCH NINIEJSZ¡ UMOW¡. + +9. Dane i bazy danych Licencjobiorcy + +W celu udzielenia Licencjobiorcy pomocy przy okre¶leniu przyczyny problemu z Programem, IBM mo¿e za¿±daæ, aby Licencjobiorca 1) zezwoli³ IBM na zdalny dostêp do swoich systemów lub 2) przes³a³ do IBM informacje na temat swoich systemów lub dane systemowe. Jednak¿e IBM nie jest zobowi±zany do zapewnienia takiej pomocy, chyba ¿e IBM i Licencjobiorca podpisz± oddzieln± umowê, w ramach której IBM wyrazi zgodê na ¶wiadczenie na rzecz Licencjobiorcy tego rodzaju wsparcia w zakresie przekraczaj±cym zobowi±zania gwarancyjne IBM okre¶lone niniejsz± Umow±. W ka¿dym przypadku IBM wykorzystuje informacje o b³êdach i problemach w celu udoskonalania swych produktów i us³ug oraz udzielania pomocy przy ich dostarczaniu w ramach powi±zanych z nimi ofert wsparcia. Przy realizacji tych celów IBM mo¿e korzystaæ z pomocy oddzia³ów IBM i podwykonawców IBM (znajduj±cych siê nie tylko w kraju lokalizacji Licencjobiorcy, ale i poza nim), a Licencjobiorca upowa¿nia IBM do takiego dzia³ania. + +Licencjobiorca pozostaje odpowiedzialny za 1) wszelkie dane i zawarto¶æ bazy danych, które udostêpnia IBM, 2) wybór i implementacjê procedur oraz mechanizmów kontrolnych dotycz±cych dostêpu do danych, ich bezpieczeñstwa, szyfrowania, u¿ywania i transmisji (w tym wszelkich danych identyfikuj±cych osobê fizyczn±) oraz 3) tworzenie i odtwarzanie kopii zapasowych ka¿dej bazy danych i wszelkich gromadzonych danych. Licencjobiorca nie bêdzie wysy³aæ ani udostêpniaæ IBM jakichkolwiek informacji identyfikuj±cych osobê fizyczn± (w postaci danych lub jakiejkolwiek innej) i bêdzie odpowiedzialny za uregulowanie uzasadnionych kosztów i innych obci±¿eñ, które mo¿e ponie¶æ IBM w zwi±zku z omy³kowym udostêpnieniem takich informacji IBM b±d¼ za utratê lub ujawnienie takich informacji przez IBM, w tym informacji wynikaj±cych z roszczeñ osób trzecich. + +10. Ograniczenie odpowiedzialno¶ci + +Ograniczenia i zastrze¿enia paragrafu 10 (Ograniczenie odpowiedzialno¶ci) maj± zastosowanie w pe³nym zakresie i nie s± zakazane przepisami obowi±zuj±cego prawa, bez mo¿liwo¶ci wy³±czenia takiego prawa w ramach umowy. + +10.1 Sytuacje, w których IBM mo¿e ponosiæ odpowiedzialno¶æ + +W przypadku wyst±pienia okre¶lonych okoliczno¶ci, za które odpowiedzialno¶æ ponosi IBM, a w wyniku których Licencjobiorca dozna³ szkody, Licencjobiorca bêdzie uprawniony do uzyskania od IBM odszkodowania. Bez wzglêdu na podstawê, na jakiej Licencjobiorca jest uprawniony do domagania siê odszkodowania od IBM (w³±czywszy w to naruszenie istotnych postanowieñ niniejszej Umowy, niedbalstwo, wprowadzenie w b³±d lub inne roszczenia z tytu³u odpowiedzialno¶ci kontraktowej lub deliktowej), ca³kowita odpowiedzialno¶æ IBM z tytu³u wszelkich zsumowanych roszczeñ wynikaj±cych z lub odnosz±cych siê do ka¿dego Programu b±d¼ wynikaj±cych z niniejszej Umowy nie przekroczy: 1) kwoty odpowiedzialno¶ci za uszczerbek na zdrowiu (³±cznie ze ¶mierci±) oraz za szkody wyrz±dzone w nieruchomo¶ciach lub maj±tku ruchomym, 2) w przypadku innych rzeczywi¶cie poniesionych szkód - wysoko¶ci op³at (je¶li Program podlega op³atom czasowym - wysoko¶ci op³at za dwana¶cie miesiêcy) uiszczanych przez Licencjobiorcê za Program bêd±cy przedmiotem roszczenia. + +Ograniczenie to ma równie¿ zastosowanie do programistów i dostawców Programów IBM. Wskazany powy¿ej zakres odpowiedzialno¶ci stanowi ca³o¶æ odpowiedzialno¶ci ponoszonej ³±cznie przez IBM oraz programistów i dostawców Programów IBM. + +10.2 Sytuacje, w których IBM nie ponosi odpowiedzialno¶ci + +W ¯ADNYCH OKOLICZNO¦CIACH IBM, ANI TE¯ PROGRAMI¦CI CZY DOSTAWCY PROGRAMÓW IBM, NIE PONOSZ¡ ODPOWIEDZIALNO¦CI ZA NASTÊPUJ¡CE SZKODY, NAWET JE¦LI ZOSTALI POINFORMOWANI O MO¯LIWO¦CI ICH WYST¡PIENIA: + +a. UTRATÊ LUB USZKODZENIE DANYCH; + +b. SZKODY SZCZEGÓLNE, UBOCZNE, WYNIKAJ¡CE Z NARUSZENIA DÓBR OSOBISTYCH, PO¦REDNIE ORAZ SZKODY, KTÓRYCH NIE MO¯NA BY£O PRZEWIDZIEÆ PRZY ZAWIERANIU UMOWY, ANI TE¯ + +c. UTRACONE ZYSKI, KONTAKTY HANDLOWE, PRZYCHODY, REPUTACJÊ (GOODWILL) ANI PRZEWIDYWANE OSZCZÊDNO¦CI. + +11. Weryfikacja zgodno¶ci + +Na potrzeby niniejszego paragrafu 11 (Weryfikacja zgodno¶ci), przyjmuje siê, ¿e termin "Warunki IPLA dla Programu " oznacza 1) niniejsz± Umowê oraz odpowiednie poprawki i dokumenty transakcyjne dostarczone przez IBM, a tak¿e 2) strategie IBM dotycz±ce oprogramowania, dostêpn± w serwisie WWW IBM Software Policy (www.ibm.com/softwarepolicies), a w szczególno¶ci strategie dotycz±ce tworzenia kopii zapasowych, okre¶lania cen przy ograniczonej mocy obliczeniowej oraz migracji. + +Prawa i obowi±zki przedstawione w niniejszym paragrafie 11 obowi±zuj± w okresie licencjonowania Programu na rzecz Licencjobiorcy oraz dwa lata po tym okresie. + +11.1 Proces weryfikacji + +Licencjobiorca zgadza siê tworzyæ, przechowywaæ oraz dostarczaæ IBM i rewidentom IMB dok³adn± pisemn± dokumentacjê, dane wyj¶ciowe narzêdzi systemowych oraz inne informacje systemowe wystarczaj±ce do zapewnienia mo¿liwo¶ci weryfikacji, ¿e korzystanie przez Licencjobiorcê ze wszystkich Programów odbywa siê zgodnie z Warunkami IPLA dla Programu, a w szczególno¶ci ze wszystkimi obowi±zuj±cymi warunkami IBM w zakresie licencjonowania i cen. Licencjobiorca jest odpowiedzialny za 1) zapewnienie, ¿e nie zosta³ przekroczony poziom Autoryzowanego U¿ywania oraz 2) przestrzeganie zgodno¶ci z Warunkami IPLA dla Programu. + +IBM mo¿e zweryfikowaæ, informuj±c o takim zamiarze z odpowiednim wyprzedzeniem, czy Licencjobiorca przestrzega Warunków IPLA dla Programu we wszystkich o¶rodkach i ¶rodowiskach, gdzie Licencjobiorca u¿ywa Programów do jakichkolwiek celów zgodnie z Warunkami IPLA dla Programu. Weryfikacja taka mo¿e byæ przeprowadzana na terenie Licencjobiorcy, w normalnych godzinach pracy i bêdzie realizowana w sposób w minimalnym stopniu zak³ócaj±cy tê pracê. IBM mo¿e przy takiej weryfikacji skorzystaæ z us³ug niezale¿nego rewidenta, pod warunkiem, ¿e zosta³a z nim podpisana umowa o zachowaniu poufno¶ci. + +11.2 Postanowienia + +IBM poinformuje Licencjobiorcê na pi¶mie, je¶li weryfikacja wyka¿e, ¿e Licencjobiorca przekroczy³ poziom Autoryzowanego U¿ywania lub w inny sposób naruszy³ Warunki IPLA dla Programu. Licencjobiorca wyra¿a zgodê na natychmiastowe i bezpo¶rednie uiszczenie na rzecz IBM op³at wyszczególnionych przez IBM na fakturze z tytu³u: 1) u¿ywania niezgodnego z Warunkami, 2) ¶wiadczenia wsparcia w czasie takiego u¿ywania lub przez okres dwóch lat, w zale¿no¶ci od tego, który z tych okresów by³ krótszy oraz 3) dodatkowych op³at i innych zobowi±zañ okre¶lonych w trakcie przeprowadzonej weryfikacji. + +12. Uwagi osób trzecich + +Program mo¿e zawieraæ kod osób trzecich, który bêdzie licencjonowany na rzecz Licencjobiorcy w ramach niniejszej Umowy przez IBM, a nie przez osobê trzeci±. Ewentualne Uwagi na temat kodu osób trzecich (Uwagi Osób Trzecich) s± do³±czane jedynie w celu powiadomienia Licencjobiorcy. Uwagi te mo¿na znale¼æ w pliku NOTICES do³±czonym do Programu. Informacje na temat uzyskania kodu ¼ród³owego dla konkretnego kodu osób trzecich mo¿na znale¼æ w Uwagach Osób Trzecich. Je¶li w Uwagach Osób Trzecich IBM okre¶li kod osób trzecich jako "Modyfikowany Kod Osób Trzecich", to IBM upowa¿ni Licencjobiorcê do 1) modyfikacji Modyfikowanego Kodu Osób Trzecich oraz 2) odtwarzania kodu ¼ród³owego modu³ów Programu, które s± bezpo¶rednio wykorzystywane przez Modyfikowany Kod Osób Trzecich pod warunkiem, ¿e czynno¶æ ta zostanie podjêta jedynie w celu debugowania modyfikacji Licencjobiorcy na potrzeby takiego kodu osób trzecich. Ewentualne zobowi±zania IBM w zakresie us³ug i wsparcia dotycz± jedynie Programu niezmodyfikowanego. + +13. Postanowienia ogólne + +a. Postanowienia zawarte w niniejszej Umowie pozostaj± bez wp³ywu na uprawnienia przys³uguj±ce konsumentom na podstawie bezwzglêdnie obowi±zuj±cych przepisów prawa. + +b. W przypadku Programów, które IBM dostarcza Licencjobiorcy w formie materialnej, IBM wype³nia swe obowi±zki w zakresie wysy³ki i dostawy z chwil± dostarczenia takich Programów do wyznaczonego przez siebie przewo¼nika, chyba ¿e Licencjobiorca uzgodni³ z IBM na pi¶mie inny tryb postêpowania. + +c. W przypadku niewa¿no¶ci lub niewykonalno¶ci któregokolwiek z postanowieñ niniejszej Umowy, pozosta³e postanowienia niniejszej Umowy zachowuj± pe³n± moc prawn± i skuteczno¶æ. + +d. Licencjobiorca wyra¿a zgodê na przestrzeganie wszelkich obowi±zuj±cych praw i przepisów w zakresie eksportu i importu, w tym przepisów Stanów Zjednoczonych dotycz±cych embarga i sankcji oraz zakazu eksportu do lub na rzecz okre¶lonych u¿ytkowników koñcowych. + +e. Licencjobiorca upowa¿nia International Business Machines Corporation oraz przedsiêbiorstwa podporz±dkowane IBM Corp. (ich nastêpców prawnych i cesjonariuszy, wykonawców i Partnerów Handlowych IBM) do przechowywania i u¿ywania biznesowych informacji kontaktowych Licencjobiorcy, bez wzglêdu na miejsce prowadzonej dzia³alno¶ci, w zwi±zku z produktami i us³ugami IBM lub w celu utrzymania kontaktów handlowych miêdzy Stronami. + +f. Ka¿da ze Stron stworzy drugiej Stronie rozs±dne mo¿liwo¶ci wype³nienia zobowi±zañ, zanim zarzuci drugiej Stronie ich niewype³nienie w ramach niniejszej Umowy. Strony podejm± w dobrej wierze próbê rozstrzygniêcia sporów, nieporozumieñ lub roszczeñ powsta³ych miêdzy nimi w zwi±zku z Umow±. + +g. O ile obowi±zuj±ce prawo nie stanowi inaczej bez mo¿liwo¶ci wy³±czenia takiego prawa w ramach umowy: 1) ¿adna ze Stron nie podejmie dzia³añ prawnych, w jakiejkolwiek formie, zwi±zanych z roszczeniem wynikaj±cym z niniejszej Umowy lub pozostaj±cym z ni± w zwi±zku po okresie dwóch lat od czasu pojawienia siê przyczyny podjêcia takich dzia³añ; oraz 2) po wyga¶niêciu takiego okresu, wszelkie roszczenia przedawniaj± siê i prawa z nimi zwi±zane wygasaj±. + +h. Ani Licencjobiorca, ani IBM nie odpowiadaj± za niedope³nienie jakichkolwiek obowi±zków, je¶li przyczyny takiego niedope³nienia le¿a³y poza ich kontrol±. + +i. Niniejsza Umowa nie daje osobom trzecim jakichkolwiek praw ani te¿ podstawy do roszczeñ, a IBM nie ponosi odpowiedzialno¶ci za jakiekolwiek roszczenie osób trzecich wobec Licencjobiorcy, z wyj±tkiem zakresu przewidzianego w paragrafie 10.1 (Sytuacje, w których IBM mo¿e nie ponosiæ odpowiedzialno¶ci) powy¿ej, w czê¶ci dotycz±cej uszczerbku na zdrowiu (³±cznie ze ¶mierci±) lub szkód wyrz±dzonych w nieruchomo¶ciach lub w maj±tku ruchomym, za które IBM ponosi odpowiedzialno¶æ prawn± wobec osób trzecich. + +j. Przystêpuj±c do niniejszej Umowy ¿adna ze Stron nie korzysta z ¿adnych ustaleñ, które nie zosta³y okre¶lone w Umowie, a w szczególno¶ci z ¿adnych ustaleñ w zakresie: 1) wydajno¶ci lub dzia³ania Programu odbiegaj±cych od wyra¼nie gwarantowanych w paragrafie 8 (Gwarancje i zastrze¿enia) powy¿ej; 2) do¶wiadczeñ czy rekomendacji osób trzecich lub 3) wyników lub oszczêdno¶ci, jakie mo¿e osi±gn±æ Licencjobiorca. + +k. IBM podpisa³ umowy z konkretnymi organizacjami (zwanymi "Partnerami Handlowymi IBM") w celu promocji i sprzeda¿y okre¶lonych Programów oraz udzielania dla nich wsparcia. Partnerzy Handlowi IBM dzia³aj± oddzielnie i niezale¿nie od IBM. IBM nie ponosi odpowiedzialno¶ci za dzia³ania lub o¶wiadczenia Partnerów Handlowych IBM ani za ich zobowi±zania wobec Licencjobiorcy. + +l. Warunki licencji oraz warunki dotycz±ce zabezpieczenia i ochrony w³asno¶ci intelektualnej okre¶lone w innych umowach Licencjobiorcy z IBM (na przyk³ad w Umowie IBM z Klientem) nie maj± zastosowania do licencji na Program udzielonych na mocy niniejszej Umowy. + +14. Zasiêg geograficzny i obowi±zuj±ce ustawodawstwo + +14.1 Obowi±zuj±ce ustawodawstwo + +Obie Strony przyjmuj± jako obowi±zuj±ce prawo kraju, w którym licencja na Program zosta³a nabyta, oraz wyra¿aj± zgodê na stosowanie takiego prawa przy interpretowaniu oraz egzekwowaniu wszelkich praw, obowi±zków i zobowi±zañ Stron, wynikaj±cych z niniejszej Umowy lub maj±cych w jakikolwiek sposób z ni± zwi±zek, bez odwo³ywania siê do zasad kolizji przepisów prawnych. + +Konwencja ONZ dotycz±ca umów o Miêdzynarodowej Sprzeda¿y Towarów (United Nations Convention on Contracts for the International Sale of Goods) nie ma zastosowania. + +14.2 Jurysdykcja + +Wszelkie prawa, obowi±zki i zobowi±zania podlegaj± w³a¶ciwym s±dom kraju nabycia licencji na Program przez Licencjobiorcê. + +Czê¶æ 2 - Warunki specyficzne dla poszczególnych krajów + +W przypadku licencji udzielanych na terenie Polski, poni¿sze warunki zastêpuj± lub modyfikuj± warunki okre¶lone w Czê¶ci 1. Wszystkie warunki Czê¶ci 1, których nie dotyczy niniejsza poprawka, nie ulegaj± zmianom i pozostaj± w mocy. W sk³ad Czê¶ci 2 wchodz±: + +* Zmiany krajowe do Czê¶ci 1, paragraf 14 (Zasiêg geograficzny i obowi±zuj±ce ustawodawstwo) oraz + +* Zmiany krajowe do innych warunków Umowy dotycz±ce Europy, Bliskiego Wschodu i Afryki. + +Zmiany krajowe do Czê¶ci 1, paragraf 14 (Zasiêg geograficzny i obowi±zuj±ce ustawodawstwo) + +14.1 Obowi±zuj±ce ustawodawstwo + +Fraza "prawo kraju, w którym licencja na Program zosta³a nabyta" w pierwszym akapicie paragrafu 14.1 Obowi±zuj±ce ustawodawstwo zostaje w przypadku Polski zast±piona nastêpuj±cym tekstem: + +prawo Austrii; + +14.3 Arbitra¿ + +Nastêpuj±cy akapit maj±cy zastosowanie w Polsce zostaje dodany jako nowy do paragrafu 14.3 (Arbitra¿). Postanowienia paragrafu 14.3 maj± znaczenie rozstrzygaj±ce nad postanowieniami paragrafu 14.2 (Jurysdykcja) w zakresie, w jakim zezwala na to obowi±zuj±ce ustawodawstwo i zasady proceduralne: + +Wszelkie kwestie sporne wynikaj±ce z niniejszej Umowy lub zwi±zane z jej naruszeniem, wypowiedzeniem lub niewa¿no¶ci± bêd± rozstrzygane w sposób ostateczny zgodnie z Zasadami Postêpowania Arbitra¿owego i Ugodowego Miêdzynarodowego Centrum Arbitra¿u przy Federalnej Izbie Gospodarczej (Rules of Arbitration and Conciliation of the International Arbitral Center of the Federal Economic Chamber) w Wiedniu (Vienna Rules), przez trzech arbitrów, powo³anych zgodnie ze wspomnianymi zasadami. Arbitra¿ bêdzie mia³ miejsce w Wiedniu, w Austrii. Jêzykiem obowi±zuj±cym podczas postêpowania bêdzie jêzyk angielski. Orzeczenia arbitrów bêd± ostateczne i wi±¿±ce dla obu Stron. Oznacza to, ¿e zgodnie z artyku³em 598(2) Austriackiego Kodeksu Postêpowania Cywilnego (Austrian Code of Civil Procedure), Strony rezygnuj± ze stosowania artyku³u 595(1) punkt 7 tego Kodeksu. Tym niemniej powy¿sze warunki w ¿adnym stopniu nie ograniczaj± prawa IBM do wszczêcia postêpowania przed dowolnym w³a¶ciwym s±dem w kraju instalacji. + +8. Gwarancje i zastrze¿enia + +Nastêpuj±cy tekst zosta³ dodany do paragrafu 8 (Gwarancje i zastrze¿enia): + +W krajach Unii Europejskiej ("UE") klientom przys³uguj± prawa wynikaj±ce z obowi±zuj±cego ustawodawstwa krajowego, któremu podlega sprzeda¿ artyku³ów konsumpcyjnych. Postanowienia zawarte w paragrafie 8, Gwarancje i zastrze¿enia pozostaj± bez wp³ywu na te prawa. Ograniczona gwarancja ma zasiêg ogólno¶wiatowy. + +13. Postanowienia ogólne + +Nastêpuj±cy tekst zastêpuje punkt 13.e: + +(1) Definicje - do punktu 13.e maj± zastosowanie nastêpuj±ce definicje dodatkowe: + +(a) Biznesowe Informacje Kontaktowe - oznaczaj± informacje maj±ce zwi±zek z dzia³alno¶ci± gospodarcz±, ujawnione IBM przez Licencjobiorcê, w tym imiona i nazwiska, stanowiska, adresy s³u¿bowe, numery telefonów oraz adresy e-mail pracowników i wykonawców Licencjobiorcy. W przypadku Austrii, W³och i Szwajcarii Biznesowe Informacje Kontaktowe obejmuj± równie¿ informacje o Licencjobiorcy oraz jego wykonawcach posiadaj±cych osobowo¶æ prawn± (na przyk³ad dane na temat przychodów Licencjobiorcy i inne informacje o transakcjach). + +(b) Biznesowy Personel Kontaktowy oznacza pracowników i wykonawców Licencjobiorcy, do których odnosz± siê Biznesowe Informacje Kontaktowe. + +(c) Urz±d Ochrony Danych oznacza organ powo³any zgodnie z Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej w okre¶lonym kraju lub w przypadku krajów spoza Unii Europejskiej, organ odpowiedzialny za nadzór nad ochron± danych osobowych w takim kraju b±d¼ (w obu powy¿szych przypadkach) ka¿dy nastêpca prawny takiego organu powo³any w odpowiedni sposób. + +(d) Ustawodawstwo o ochronie danych i ³±czno¶ci elektronicznej oznacza (i) obowi±zuj±ce prawo i przepisy krajowe wdra¿aj±ce wymagania dyrektywy Unii Europejskiej 95/46/WE (w sprawie ochrony osób fizycznych w zakresie przetwarzania danych osobowych i swobodnego przep³ywu tych danych) oraz dyrektywy 2002/58/WE (dotycz±cej przetwarzania danych osobowych i ochrony prywatno¶ci w sektorze ³±czno¶ci elektronicznej); lub (ii) w przypadku krajów spoza Unii Europejskiej, prawa i przepisy obowi±zuj±ce w takich krajach i odnosz±ce siê do ochrony danych osobowych i przepisów o ³±czno¶ci elektronicznej z wykorzystaniem danych osobowych, w tym (w obu powy¿szych przypadkach) ich ustawowe nowe wersje i modyfikacje. + +(e) Grupa IBM oznacza International Business Machines Corporation z siedzib± w Armonk, Nowy Jork, USA, przedsiêbiorstwa podporz±dkowane International Business Machines Corporation oraz ich odpowiednich Partnerów Handlowych i podwykonawców. + +(2) Licencjobiorca upowa¿nia IBM do: + +(a) przetwarzania i u¿ywania Biznesowych Informacji Kontaktowych w ramach Grupy IBM w celu obs³ugi Licencjobiorcy, w tym w celu ¶wiadczenia us³ug wsparcia oraz rozszerzania relacji handlowych miêdzy Licencjobiorc± i Grup± IBM, a w szczególno¶ci nawi±zywania kontaktów z Biznesowym Personelem Kontaktowym (za po¶rednictwem poczty e-mail lub w inny sposób) oraz sprzeda¿y produktów i us³ug Grupy IBM (zwanym dalej "Okre¶lonym Celem"); oraz + +(b) ujawniania Biznesowych Informacji Kontaktowych innym cz³onkom Grupy IBM jedynie na potrzeby realizacji Okre¶lonego Celu. + +(3) IBM wyra¿a zgodê na przetwarzanie Biznesowych Informacji Kontaktowych zgodnie z Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej. + +(4) Licencjobiorca o¶wiadcza, ¿e w zakresie wymaganym Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej (a) uzyska³ (lub uzyska) zgodê Biznesowego Personelu Kontaktowego na przetwarzanie i u¿ywanie przez Grupê IBM Biznesowych Informacji Kontaktowych do realizacji Okre¶lonego Celu, oraz ¿e przygotowa³ (lub przygotuje) powiadomienie dla Biznesowego Personelu Kontaktowego w tej sprawie. + +(5) Licencjobiorca upowa¿nia IBM do przesy³ania Biznesowych Informacji Kontaktowych poza Europejsk± Strefê Ekonomiczn± pod warunkiem, ¿e bêdzie to realizowane na warunkach zatwierdzonych przez Urz±d Ochrony Danych lub zgodnie z Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_pt b/charts/mq-advancedserver/LICENSE_locale/LICENSE_pt new file mode 100644 index 0000000..4b30ada --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_pt @@ -0,0 +1,1213 @@ +AVISO + +Esse documento inclui os documentos de Informação sobre a Licença abaixo para diversos Programas. Cada documento de Informação sobre a Licença identifica o(s) Programa(s) ao(s) qual(is) ele se aplica. É aplicável apenas àqueles documentos de Informação sobre a Licença para o(s) Programa(s) para o(s) qual(is) o Licenciado adquiriu titularidades. + + +============================================== + + +IMPORTANTE: LEIA CUIDADOSAMENTE + +Dois contratos de licença/acordos de licenciamento são apresentados abaixo. + +1. Contrato de Licença Internacional IBM para Avaliação de Programas +2. Contrato Internacional IBM de Licença de Programa + +Se o Licenciado obtiver o Programa para propósitos/fins de utilização produtiva (que não avaliação, teste, "avaliação ou compra" ou demonstração): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o Contrato Internacional IBM de Licença de Programa, sem modificações. + +Se o Licenciado obtiver o Programa com o propósito/fim de avaliação, teste, "avaliação ou compra" ou demonstração (coletivamente/colectivamente, uma "Avaliação"): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o (i) o Contrato de Licença Internacional IBM para Avaliação de Programas (a "Licença de Avaliação"), sem modificações; e (ii) o Contrato Internacional IBM de Licença de Programa (o "IPLA"), sem modificações. + +A Licença de Avaliação será aplicável durante o prazo de Avaliação do Licenciado. + +O IPLA será automaticamente aplicável se o Licenciado decidir manter o Programa após a Avaliação (ou obtiver cópias adicionais do Programa para utilizar após a Avaliação) assinando um contrato/acordo de compra (por exemplo, os contratos/acordos IBM International Passport Advantage ou IBM Passport Advantage Express). + +A Licença de Avaliação e o IPLA não têm efeito simultâneo; nenhum modifica o outro; e cada um é independente do outro. + +O texto completo de cada um destes dois contratos de licença/acordos de licenciamento está localizado a seguir. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato de Licença Internacional para Avaliação de Programas (Z125-5543-05) será aplicável. + +Nome do Programa (Número do Programa): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Os termos padrão a seguir se aplicam o uso do Programa pelo Licenciado. + +Período de Avaliação + +O período de avaliação começa na data em que o Licenciado concorda com os termos deste Contrato/Acordo e termina após 90 dias. + +Programas de Suporte + +O Programa está licenciado como um pacote de multi-produto e inclui os Programas de Suporte identificados abaixo. O Licenciado está autorizado a instalar e usar tais Programas de Suporte apenas para suportar o uso do Programa Principal pelo Licenciado sob este/ao abrigo deste Contrato/Acordo e dentro dos limites das Provas de Titularidade para o Programa (salvo se forem fornecidos direitos mais amplos em qualquer ou parte deste documento de Informação sobre Licença). A frase "para suportar o uso pelo Licenciado" incluiria apenas aqueles usos necessários ou, de alguma maneira, relacionados diretamente/directamente com um uso licenciado do Programa Principal ou com outro Programa de Suporte. Os Programas de Suporte não podem ser usados para qualquer outro propósito/fim. O Licenciado não está autorizado a transferir ou recomercializar os Programas de Suporte separados do Programa Principal. Um Programa de Suporte pode ser acompanhado pelos termos de licença, e tais termos, se houver algum, se aplicam ao uso desse Programa de Suporte pelo Licenciado. Em caso de conflito, os termos presentes neste documento de Informação sobre a Licença suplantam os termos do Programa de Suporte. Quando expira ou termina o direito do Licenciado de usar o Programa, o Licenciado deve descontinuar o uso, destruir ou devolver de imediato todas as cópias dos Programas de Suporte para o terceiro do qual o Licenciado adquiriu o Programa. Se o Licenciado tiver feito download dos Programas de Suporte, o Licenciado deve entrar em contato/contacto com o terceiro do qual o Licenciado adquiriu o Programa. Se o Licenciado deseja licenciar os Programas de Suporte para qualquer uso além dos limites definidos acima, deve entrar em contato/contacto com um Representante de Vendas IBM ou com o terceiro do qual o Licenciado adquiriu o Programa para obter a licença apropriada. + +A seguir estão os Programas de Suporte que são licenciados com o Programa: +IBM WebSphere Application Server Liberty V17.0 + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato Internacional de Licença de Programa (Z125-3301-14) será aplicável. + +Nome do Programa (Número do Programa): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Os termos padrão a seguir se aplicam o uso do Programa pelo Licenciado. + +Direito de uso/utilização limitado + +Conforme descrito no Contrato de Licença Internacional de Programas ("IPLA") e nesta Informação sobre a Licença, a IBM concede ao Licenciado um direito limitado para usar/utilizar o Programa. Esse direito é limitado ao nível do/a Uso/Utilização Autorizado/a, tal como um Processor Value Unit ("PVU"), um Resource Value Unit ("RVU"), um Value Unit ("VU"), ou outro nível especificado de uso/utilização, pago pelo Licenciado, conforme evidenciado na Prova de Titularidade. O uso/A utilização do licenciado também pode ser limitado/a ao uma máquina especificada ou apenas a um Programa de Suporte ou estar sujeito/a a outras restrições. Como o Licenciado não pagou por todo o valor económico do Programa, nenhum outro uso/nenhuma outra utilização lhe é permitido/a sem o pagamento de encargos adicionais. Além disso, o Licenciado não está autorizado a usar/utilizar o Programa para fornecer serviços de TI comerciais a terceiros, para fornecer hosting comercial ou timesharing, ou sublicenciar alugar ou arrendar o Programa, a menos que expressamente definido nos contratos/acordos aplicáveis sob os quais/ao abrigo dos quais o Licenciado obtém/adquire autorizações para usar/utilizar o Programa. Direitos adicionais podem ser disponibilizados ao Licenciado mediante o pagamento de encargos adicionais ou sob/ao abrigo de termos diferentes ou complementares. A IBM reserva-se o direito de determinar se disponibilizará tais direitos adicionais ao Licenciado. + +Especificações + +Especificações do Programa podem ser localizadas nas seções/secções coletivas/colectivas de Descrição e Informações Técnicas das Cartas de Anúncio do Programa. + +Programas de Suporte + +O Programa está licenciado como um pacote de multi-produto e inclui os Programas de Suporte identificados abaixo. O Licenciado está autorizado a instalar e usar tais Programas de Suporte apenas para suportar o uso do Programa Principal pelo Licenciado sob este/ao abrigo deste Contrato/Acordo e dentro dos limites das Provas de Titularidade para o Programa (salvo se forem fornecidos direitos mais amplos em qualquer ou parte deste documento de Informação sobre Licença). A frase "para suportar o uso pelo Licenciado" incluiria apenas aqueles usos necessários ou, de alguma maneira, relacionados diretamente/directamente com um uso licenciado do Programa Principal ou com outro Programa de Suporte. Os Programas de Suporte não podem ser usados para qualquer outro propósito/fim. O Licenciado não está autorizado a transferir ou recomercializar os Programas de Suporte separados do Programa Principal. Um Programa de Suporte pode ser acompanhado pelos termos de licença, e tais termos, se houver algum, se aplicam ao uso desse Programa de Suporte pelo Licenciado. Em caso de conflito, os termos presentes neste documento de Informação sobre a Licença suplantam os termos do Programa de Suporte. Quando expira ou termina o direito do Licenciado de usar o Programa, o Licenciado deve descontinuar o uso, destruir ou devolver de imediato todas as cópias dos Programas de Suporte para o terceiro do qual o Licenciado adquiriu o Programa. Se o Licenciado tiver feito download dos Programas de Suporte, o Licenciado deve entrar em contato/contacto com o terceiro do qual o Licenciado adquiriu o Programa. Se o Licenciado deseja licenciar os Programas de Suporte para qualquer uso além dos limites definidos acima, deve entrar em contato/contacto com um Representante de Vendas IBM ou com o terceiro do qual o Licenciado adquiriu o Programa para obter a licença apropriada. + +A seguir estão os Programas de Suporte que são licenciados com o Programa: +IBM WebSphere Application Server Liberty V17.0 + +Componentes Não Usados para Estabelecer Titularidades Necessárias + +Ao determinar o número de titularidades necessárias para a instalação ou o uso do Programa pelo Licenciado, a instalação ou o uso dos seguintes componentes do Programa não são considerados. Em outras palavras, o Licenciado pode instalar e usar os seguintes componentes do Programa, sob os/ao abrigo dos termos de licença, mas esses componentes não são usados para determinar o número de titularidades necessárias para o Programa. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Redistribuíveis + +Se o Programa incluir componentes que são Redistribuíveis, eles serão identificados no arquivo/ficheiro REDIST que acompanha o Programa. Além dos direitos de licença concedidos no Contrato/Acordo, o Licenciado pode distribuir os Redistribuíveis sujeitos aos seguintes termos: +1) A redistribuição deve ser apenas em formato de código objeto/objecto e deve estar em conformidade com todas as orientações, instruções e especificações no REDIST ou na documentação que acompanha o Programa; +2) Se a documentação que acompanha o Programa permitir expressamente que o Licenciado modifique os Redistribuíveis, tal modificação deve estar em conformidade com todas as orientações, instruções e especificações contidas naquela documentação, e essas modificações, caso existam, devem ser tratadas como Redistribuíveis; +3) Os Redistribuíveis podem ser distribuídos apenas como parte do aplicativo/da aplicação do Licenciado que foi desenvolvido(a) usando o Programa ("Aplicativo/Aplicação do Licenciado") e apenas para suportar os clientes do Licenciado com respeito ao uso que fizerem do Aplicativo/da Aplicação do Licenciado. O Aplicativo/a Aplicação do Licenciado deve constituir um significativo valor acrescentado tal, que os Redistribuíveis não sejam uma motivação substancial para a aquisição, pelos usuários/utilizadores finais, do produto de software do Licenciado; +4) Se os Redistribuíveis incluírem um Java Runtime Environment, o Licenciado deve também incluir outros Redistribuíveis não Java ao Aplicativo/à Aplicação do Licenciado, salvo se o Aplicativo/a Aplicação for concebido(a) para ser executado(a) apenas em recursos informáticos em geral (por exemplo: laptops, desktops e servidores) e não em dispositivos portáteis ou outras patentes (isto é, dispositivos que contêm um microprocessador, mas que não têm o uso de computador como o seu propósito/fim primário); +5) O Licenciado não pode remover quaisquer arquivos/ficheiros de avisos ou de copyright contidos nos Redistribuíveis; +6) O Licenciado deve defender a IBM, os seus fornecedores ou distribuidores de e contra qualquer reclamação advinda do uso ou distribuição do Aplicativo/da Aplicação do Licenciado; +7) O Licenciado não pode usar o mesmo nome de caminho que os arquivos/ficheiros/módulos originais dos Redistribuíveis; +8) O Licenciado não pode usar os nomes ou marcas registradas/registadas da IBM, de seus fornecedores ou distribuidores com respeito à comercialização do Aplicativo/da Aplicação do Licenciado sem o prévio consentimento por escrito da IBM ou daquele fornecedor ou distribuidor; +9) A IBM, seus fornecedores e distribuidores fornecem os Redistribuíveis e a documentação relacionada sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM GARANTIA DE QUALQUER ESPÉCIE, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO/INCLUSIVE A GARANTIA DE TÍTULO, DE NÃO VIOLAÇÃO OU DE NÃO INTERFERÊNCIA E AS GARANTIAS E CONDIÇÕES IMPLÍCITAS DE COMERCIALIZAÇÃO E ADEQUAÇÃO A UM DETERMINADO PROPÓSITO/FIM; +10) O Licenciado é responsável por toda a assistência técnica para o Aplicativo/a Aplicação do Licenciado e por quaisquer modificações aos Redistribuíveis; e +11) O contrato de licença/acordo de licenciamento do Licenciado com o usuário/utilizador final do Aplicativo/da Aplicação do Licenciado deve informar o usuário/utilizador final que os Redistribuíveis ou as suas modificações não podem ser i) usados para qualquer propósito/fim que não seja ativar/activar o Aplicativo/a Aplicação do Licenciado, ii) copiados (exceto/excepto para propósitos/fins de backup), iii) redistribuídos ou transferidos sem o Aplicativo/a Aplicação do Licenciado ou iv) montados de forma inversa, compilados de forma inversa ou, de qualquer forma, serem convertidos exceto/excepto conforme especificamente permitido pela lei e sem a possibilidade de uma renúncia contratual. Além disso, o contrato de licença/acordo de licenciamento do Licenciado deve, pelo menos, proteger a IBM tanto quanto os termos deste Contrato/Acordo. + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + +Para os Componentes Fonte e Materiais de Amostra listados num arquivo/ficheiro REDIST do Programa, o Licenciado pode redistribuir versões modificadas desses Componentes Fonte ou Materiais de Amostra que sejam consistentes com os termos desta licença e quaisquer instruções presentes no arquivo/ficheiro REDIST. + +As unidades de medida a seguir se aplicam o uso do Programa pelo Licenciado. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) é uma unidade de medida pela qual o Programa pode ser licenciado. O número de titularidades de PVU necessário é baseado na tecnologia de processador (definida dentro da Tabela de PVU por Fornecedor, Marca, Tipo e Número de Modelo do Processador em http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e o número de processadores disponibilizado para o Programa. A IBM continua a definir um processador, para o propósito/fim de licenciamento baseado em PVU, para cada núcleo de processador num chip. Um chip de processador de núcleo duplo, por exemplo, tem dois núcleos de processador. + +O Licenciado pode implementar o Programa usando o licenciamento de Capacidade Total ou o licenciamento de Capacidade de Virtualização (Subcapacidade) de acordo com os Termos para Licenciamento de Subcapacidade do Passport Advantage (consulte a página da Web abaixo). Se usar o licenciamento de Capacidade Total, o Licenciado deverá obter titularidades de PVU suficientes para cobrir todos os núcleos de processador ativados/activados* no ambiente de hardware físico disponibilizado para ou gerenciado/gerido pelo Programa, exceto/excepto para aqueles servidores dos quais o Programa tenha sido definitivamente removido. Se estiver usando/a usar o licenciamento de Capacidade de Virtualização, o Licenciado deverá obter titularidades suficientes para cobrir todos os núcleos de processador ativados/activados disponibilizados para ou gerenciados/geridos pelo Programa, conforme definido de acordo com as Virtualization Capacity License Counting Rules em http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Um Núcleo de processador ativado/activado é um núcleo de processador que está disponível para uso/utilização num servidor físico ou virtual, independentemente se a capacidade do núcleo do processador puder ser ou for limitada por meio de tecnologias de virtualização, comandos de sistema operacional/operativo, configurações do BIOS ou restrições similares. + +Núcleo do Processador Virtual + +O Núcleo do Processador Virtual é uma unidade de medida pela qual o Programa pode ser licenciado. Um Servidor Físico é um computador físico que é composto por unidades de processamento, memória e recursos de entrada/saída, além de executar procedimentos, comandos ou aplicativos/aplicações necessários para um ou maus usuários/utilizadores ou dispositivos do cliente. Em que racks, gabinetes blade ou outro equipamento semelhante estão sendo implementados, cada dispositivo físico separável (por exemplo, um dispositivo montado em rack ou blade) que tenha os componentes necessários é considerado por si próprio um Servidor Físico separado. Um Servidor Virtual é um computador virtual criado ao particionar os recursos disponíveis para um Servidor Físico em um Servidor Físico não particionado. Um Núcleo do Processador (normalmente denominado processador ou CPU) é uma unidade funcional em um dispositivo de cálculo que interpreta e executa instruções. Um Núcleo do Processador consiste em, pelo menos, uma unidade de controle/controlo de instrução e uma ou mais unidades aritméticas ou lógicas. Um Núcleo do Processador Virtual é um Núcleo do Processador em um Servidor Físico não particionado ou um núcleo virtual designado a um Servidor Virtual. O Licenciado deve obter/adquirir titularidade para cada Núcleo do Processador Virtual disponibilizado para o Programa. + +Para cada Servidor físico, o Licenciado deve ter titularidades suficientes menores que a 1) a soma de todos os Núcleos do Processador Virtual disponíveis em todos os Servidores Virtuais disponibilizados para o Programa ou 2) todos os Núcleos do Processador Virtual disponíveis no Servidor Físico. + +Além do apresentado acima, os termos a seguir se aplicam ao uso do Programa pelo Licenciado. + +Configurações de Idle Standby + +Para os propósitos/fins desta seção/secção, uma configuração "Idle Standby" é aquela onde uma cópia do Programa está instalada em um servidor que faz parte de uma solução de alta disponibilidade e é o servidor para o qual o Programa falhará no caso em que a cópia do Programa no servidor ativo/activo deixa de ser utilizável. Um servidor é considerado "idle" apenas se, até que ocorra um failover, for usado/utilizado exclusivamente para ações/acções administrativas que auxiliam em cenários de failover. + +O Programa não pode ser instalado em um servidor Idle Standby, exceto/excepto se devidamente licenciado. + +Se o Programa for usado/utilizado em uma configuração Idle Standby com o recurso Multi-Instance Queue Manager, então, uma cópia do Programa pode residir para propósitos/fins de backup em um servidor Idle Standby, ser iniciado, mas deve permanecer "idle" e não ser usada/utilizada para realizar um trabalho de ambiente de produção de qualquer tipo, salvo se o servidor ativo/activo falhar em relação ao servidor Idle Standby, caso em que a cópia Idle Standby pode ser usada/utilizada para realizar trabalho de ambiente de produção durante o período de failover. + +Se o Programa for usado/utilizado em uma configuração Idle Standby com outros sistemas de Alta Disponibilidade, uma cópia do Programa pode residir para propósitos/fins de backup em um servidor Idle Standby, mas que não tenha sido iniciado (e, portanto, não pode ser usada/utilizada para realizar trabalho de ambiente de produção de qualquer tipo), mas será iniciado automaticamente pelos componentes de Alta Disponibilidade no caso de o servidor ativo/activo falhar, caso em que a cópia de Idle Standby poderá ser usada/utilizada para realizar trabalho produtivo durante o período de failover. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +IMPORTANTE: LEIA CUIDADOSAMENTE + +Dois contratos de licença/acordos de licenciamento são apresentados abaixo. + +1. Contrato de Licença Internacional IBM para Avaliação de Programas +2. Contrato Internacional IBM de Licença de Programa + +Se o Licenciado obtiver o Programa para propósitos/fins de utilização produtiva (que não avaliação, teste, "avaliação ou compra" ou demonstração): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o Contrato Internacional IBM de Licença de Programa, sem modificações. + +Se o Licenciado obtiver o Programa com o propósito/fim de avaliação, teste, "avaliação ou compra" ou demonstração (coletivamente/colectivamente, uma "Avaliação"): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o (i) o Contrato de Licença Internacional IBM para Avaliação de Programas (a "Licença de Avaliação"), sem modificações; e (ii) o Contrato Internacional IBM de Licença de Programa (o "IPLA"), sem modificações. + +A Licença de Avaliação será aplicável durante o prazo de Avaliação do Licenciado. + +O IPLA será automaticamente aplicável se o Licenciado decidir manter o Programa após a Avaliação (ou obtiver cópias adicionais do Programa para utilizar após a Avaliação) assinando um contrato/acordo de compra (por exemplo, os contratos/acordos IBM International Passport Advantage ou IBM Passport Advantage Express). + +A Licença de Avaliação e o IPLA não têm efeito simultâneo; nenhum modifica o outro; e cada um é independente do outro. + +O texto completo de cada um destes dois contratos de licença/acordos de licenciamento está localizado a seguir. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato de Licença Internacional para Avaliação de Programas (Z125-5543-05) será aplicável. + +Nome do Programa (Número do Programa): +IBM MQ Advanced V9.0.3 (Evaluation) + +Os termos padrão a seguir se aplicam o uso do Programa pelo Licenciado. + +Período de Avaliação + +O período de avaliação começa na data em que o Licenciado concorda com os termos deste Contrato/Acordo e termina após 90 dias. + +Programas em Pacote/Lote + +O Programa é licenciado como um pacote de multiprodutos que consiste nos Programas em Pacote Configurável identificados abaixo. O Licenciado está autorizado a instalar e usar/utilizar esses Programas em Pacote Configurável dentro dos limites das Provas de Titularidade para o Programa, conforme estabelecido nesse documento de Informação sobre a Licença. O Licenciado não está autorizado a transferir ou recomercializar os Programas em Pacote Configurável separadamente do pacote de multiprodutos. Um Programa em Pacote Configurável pode ser acompanhado pelos termos da licença, e esses termos, se houver, aplicam-se ao/à uso/utilização desse Programa em Pacote Configurável pelo Licenciado. Em caso de conflito, os termos nesse documento de Informação sobre a Licença sobressaem os termos do Programa em Pacote Configurável. Quando o direito do Licenciado de usar/utilizar o Programa expirar ou terminar, o Licenciado deverá descontinuar o/a uso/utilização, destruir ou retornar todas as cópias prontamente dos Programas em Pacote Configurável para a parte de quem o Licenciado adquiriu o Programa. Se o Licenciado tiver transferido por download os Programas em Pacote Configurável, o Licenciado deverá entrar em contato com a parte a quem o Licenciado adquiriu o Programa. Se o Licenciado desejar autorizar os Programas em Pacote Configurável para qualquer uso/utilização além dos limites definidos acima, entre em contato com um Representante de Vendas IBM ou com a parte a quem o Licenciado adquiriu o Programa para obter/adquirir a licença adequada. + +Segue os Programas em Pacote Configurável licenciados com o Programa: +IBM MQ V9.0.3 + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato Internacional de Licença de Programa (Z125-3301-14) será aplicável. + +Nome do Programa (Número do Programa): +IBM MQ Advanced V9.0.3 (5724-H72) + +Os termos padrão a seguir se aplicam o uso do Programa pelo Licenciado. + +Direito de uso/utilização limitado + +Conforme descrito no Contrato de Licença Internacional de Programas ("IPLA") e nesta Informação sobre a Licença, a IBM concede ao Licenciado um direito limitado para usar/utilizar o Programa. Esse direito é limitado ao nível do/a Uso/Utilização Autorizado/a, tal como um Processor Value Unit ("PVU"), um Resource Value Unit ("RVU"), um Value Unit ("VU"), ou outro nível especificado de uso/utilização, pago pelo Licenciado, conforme evidenciado na Prova de Titularidade. O uso/A utilização do licenciado também pode ser limitado/a ao uma máquina especificada ou apenas a um Programa de Suporte ou estar sujeito/a a outras restrições. Como o Licenciado não pagou por todo o valor económico do Programa, nenhum outro uso/nenhuma outra utilização lhe é permitido/a sem o pagamento de encargos adicionais. Além disso, o Licenciado não está autorizado a usar/utilizar o Programa para fornecer serviços de TI comerciais a terceiros, para fornecer hosting comercial ou timesharing, ou sublicenciar alugar ou arrendar o Programa, a menos que expressamente definido nos contratos/acordos aplicáveis sob os quais/ao abrigo dos quais o Licenciado obtém/adquire autorizações para usar/utilizar o Programa. Direitos adicionais podem ser disponibilizados ao Licenciado mediante o pagamento de encargos adicionais ou sob/ao abrigo de termos diferentes ou complementares. A IBM reserva-se o direito de determinar se disponibilizará tais direitos adicionais ao Licenciado. + +Especificações + +Especificações do Programa podem ser localizadas nas seções/secções coletivas/colectivas de Descrição e Informações Técnicas das Cartas de Anúncio do Programa. + +Programas em Pacote/Lote + +O Programa é licenciado como um pacote de multiprodutos que consiste nos Programas em Pacote Configurável identificados abaixo. O Licenciado está autorizado a instalar e usar/utilizar esses Programas em Pacote Configurável dentro dos limites das Provas de Titularidade para o Programa, conforme estabelecido nesse documento de Informação sobre a Licença. O Licenciado não está autorizado a transferir ou recomercializar os Programas em Pacote Configurável separadamente do pacote de multiprodutos. Um Programa em Pacote Configurável pode ser acompanhado pelos termos da licença, e esses termos, se houver, aplicam-se ao/à uso/utilização desse Programa em Pacote Configurável pelo Licenciado. Em caso de conflito, os termos nesse documento de Informação sobre a Licença sobressaem os termos do Programa em Pacote Configurável. Quando o direito do Licenciado de usar/utilizar o Programa expirar ou terminar, o Licenciado deverá descontinuar o/a uso/utilização, destruir ou retornar todas as cópias prontamente dos Programas em Pacote Configurável para a parte de quem o Licenciado adquiriu o Programa. Se o Licenciado tiver transferido por download os Programas em Pacote Configurável, o Licenciado deverá entrar em contato com a parte a quem o Licenciado adquiriu o Programa. Se o Licenciado desejar autorizar os Programas em Pacote Configurável para qualquer uso/utilização além dos limites definidos acima, entre em contato com um Representante de Vendas IBM ou com a parte a quem o Licenciado adquiriu o Programa para obter/adquirir a licença adequada. + +Segue os Programas em Pacote Configurável licenciados com o Programa: +IBM MQ V9.0.3 + +Componentes Não Usados para Estabelecer Titularidades Necessárias + +Ao determinar o número de titularidades necessárias para a instalação ou o uso do Programa pelo Licenciado, a instalação ou o uso dos seguintes componentes do Programa não são considerados. Em outras palavras, o Licenciado pode instalar e usar os seguintes componentes do Programa, sob os/ao abrigo dos termos de licença, mas esses componentes não são usados para determinar o número de titularidades necessárias para o Programa. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + +As unidades de medida a seguir se aplicam o uso do Programa pelo Licenciado. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) é uma unidade de medida pela qual o Programa pode ser licenciado. O número de titularidades de PVU necessário é baseado na tecnologia de processador (definida dentro da Tabela de PVU por Fornecedor, Marca, Tipo e Número de Modelo do Processador em http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e o número de processadores disponibilizado para o Programa. A IBM continua a definir um processador, para o propósito/fim de licenciamento baseado em PVU, para cada núcleo de processador num chip. Um chip de processador de núcleo duplo, por exemplo, tem dois núcleos de processador. + +O Licenciado pode implementar o Programa usando o licenciamento de Capacidade Total ou o licenciamento de Capacidade de Virtualização (Subcapacidade) de acordo com os Termos para Licenciamento de Subcapacidade do Passport Advantage (consulte a página da Web abaixo). Se usar o licenciamento de Capacidade Total, o Licenciado deverá obter titularidades de PVU suficientes para cobrir todos os núcleos de processador ativados/activados* no ambiente de hardware físico disponibilizado para ou gerenciado/gerido pelo Programa, exceto/excepto para aqueles servidores dos quais o Programa tenha sido definitivamente removido. Se estiver usando/a usar o licenciamento de Capacidade de Virtualização, o Licenciado deverá obter titularidades suficientes para cobrir todos os núcleos de processador ativados/activados disponibilizados para ou gerenciados/geridos pelo Programa, conforme definido de acordo com as Virtualization Capacity License Counting Rules em http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Um Núcleo de processador ativado/activado é um núcleo de processador que está disponível para uso/utilização num servidor físico ou virtual, independentemente se a capacidade do núcleo do processador puder ser ou for limitada por meio de tecnologias de virtualização, comandos de sistema operacional/operativo, configurações do BIOS ou restrições similares. + +Núcleo do Processador Virtual + +O Núcleo do Processador Virtual é uma unidade de medida pela qual o Programa pode ser licenciado. Um Servidor Físico é um computador físico que é composto por unidades de processamento, memória e recursos de entrada/saída, além de executar procedimentos, comandos ou aplicativos/aplicações necessários para um ou maus usuários/utilizadores ou dispositivos do cliente. Em que racks, gabinetes blade ou outro equipamento semelhante estão sendo implementados, cada dispositivo físico separável (por exemplo, um dispositivo montado em rack ou blade) que tenha os componentes necessários é considerado por si próprio um Servidor Físico separado. Um Servidor Virtual é um computador virtual criado ao particionar os recursos disponíveis para um Servidor Físico em um Servidor Físico não particionado. Um Núcleo do Processador (normalmente denominado processador ou CPU) é uma unidade funcional em um dispositivo de cálculo que interpreta e executa instruções. Um Núcleo do Processador consiste em, pelo menos, uma unidade de controle/controlo de instrução e uma ou mais unidades aritméticas ou lógicas. Um Núcleo do Processador Virtual é um Núcleo do Processador em um Servidor Físico não particionado ou um núcleo virtual designado a um Servidor Virtual. O Licenciado deve obter/adquirir titularidade para cada Núcleo do Processador Virtual disponibilizado para o Programa. + +Para cada Servidor físico, o Licenciado deve ter titularidades suficientes menores que a 1) a soma de todos os Núcleos do Processador Virtual disponíveis em todos os Servidores Virtuais disponibilizados para o Programa ou 2) todos os Núcleos do Processador Virtual disponíveis no Servidor Físico. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +IMPORTANTE: LEIA CUIDADOSAMENTE + +Dois contratos de licença/acordos de licenciamento são apresentados abaixo. + +1. Contrato de Licença Internacional IBM para Avaliação de Programas +2. Contrato Internacional IBM de Licença de Programa + +Se o Licenciado obtiver o Programa para propósitos/fins de utilização produtiva (que não avaliação, teste, "avaliação ou compra" ou demonstração): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o Contrato Internacional IBM de Licença de Programa, sem modificações. + +Se o Licenciado obtiver o Programa com o propósito/fim de avaliação, teste, "avaliação ou compra" ou demonstração (coletivamente/colectivamente, uma "Avaliação"): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o (i) o Contrato de Licença Internacional IBM para Avaliação de Programas (a "Licença de Avaliação"), sem modificações; e (ii) o Contrato Internacional IBM de Licença de Programa (o "IPLA"), sem modificações. + +A Licença de Avaliação será aplicável durante o prazo de Avaliação do Licenciado. + +O IPLA será automaticamente aplicável se o Licenciado decidir manter o Programa após a Avaliação (ou obtiver cópias adicionais do Programa para utilizar após a Avaliação) assinando um contrato/acordo de compra (por exemplo, os contratos/acordos IBM International Passport Advantage ou IBM Passport Advantage Express). + +A Licença de Avaliação e o IPLA não têm efeito simultâneo; nenhum modifica o outro; e cada um é independente do outro. + +O texto completo de cada um destes dois contratos de licença/acordos de licenciamento está localizado a seguir. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato de Licença Internacional para Avaliação de Programas (Z125-5543-05) será aplicável. + +Nome do Programa (Número do Programa): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Os termos padrão a seguir se aplicam o uso do Programa pelo Licenciado. + +Período de Avaliação + +O período de avaliação começa na data em que o Licenciado concorda com os termos deste Contrato/Acordo e termina após 90 dias. + +Programas em Pacote/Lote + +O Programa é licenciado como um pacote de multiprodutos que consiste nos Programas em Pacote Configurável identificados abaixo. O Licenciado está autorizado a instalar e usar/utilizar esses Programas em Pacote Configurável dentro dos limites das Provas de Titularidade para o Programa, conforme estabelecido nesse documento de Informação sobre a Licença. O Licenciado não está autorizado a transferir ou recomercializar os Programas em Pacote Configurável separadamente do pacote de multiprodutos. Um Programa em Pacote Configurável pode ser acompanhado pelos termos da licença, e esses termos, se houver, aplicam-se ao/à uso/utilização desse Programa em Pacote Configurável pelo Licenciado. Em caso de conflito, os termos nesse documento de Informação sobre a Licença sobressaem os termos do Programa em Pacote Configurável. Quando o direito do Licenciado de usar/utilizar o Programa expirar ou terminar, o Licenciado deverá descontinuar o/a uso/utilização, destruir ou retornar todas as cópias prontamente dos Programas em Pacote Configurável para a parte de quem o Licenciado adquiriu o Programa. Se o Licenciado tiver transferido por download os Programas em Pacote Configurável, o Licenciado deverá entrar em contato com a parte a quem o Licenciado adquiriu o Programa. Se o Licenciado desejar autorizar os Programas em Pacote Configurável para qualquer uso/utilização além dos limites definidos acima, entre em contato com um Representante de Vendas IBM ou com a parte a quem o Licenciado adquiriu o Programa para obter/adquirir a licença adequada. + +Segue os Programas em Pacote Configurável licenciados com o Programa: +IBM MQ Idle Standby V9.0.3 + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato Internacional de Licença de Programa (Z125-3301-14) será aplicável. + +Nome do Programa (Número do Programa): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Os termos padrão a seguir se aplicam o uso do Programa pelo Licenciado. + +Direito de uso/utilização limitado + +Conforme descrito no Contrato de Licença Internacional de Programas ("IPLA") e nesta Informação sobre a Licença, a IBM concede ao Licenciado um direito limitado para usar/utilizar o Programa. Esse direito é limitado ao nível do/a Uso/Utilização Autorizado/a, tal como um Processor Value Unit ("PVU"), um Resource Value Unit ("RVU"), um Value Unit ("VU"), ou outro nível especificado de uso/utilização, pago pelo Licenciado, conforme evidenciado na Prova de Titularidade. O uso/A utilização do licenciado também pode ser limitado/a ao uma máquina especificada ou apenas a um Programa de Suporte ou estar sujeito/a a outras restrições. Como o Licenciado não pagou por todo o valor económico do Programa, nenhum outro uso/nenhuma outra utilização lhe é permitido/a sem o pagamento de encargos adicionais. Além disso, o Licenciado não está autorizado a usar/utilizar o Programa para fornecer serviços de TI comerciais a terceiros, para fornecer hosting comercial ou timesharing, ou sublicenciar alugar ou arrendar o Programa, a menos que expressamente definido nos contratos/acordos aplicáveis sob os quais/ao abrigo dos quais o Licenciado obtém/adquire autorizações para usar/utilizar o Programa. Direitos adicionais podem ser disponibilizados ao Licenciado mediante o pagamento de encargos adicionais ou sob/ao abrigo de termos diferentes ou complementares. A IBM reserva-se o direito de determinar se disponibilizará tais direitos adicionais ao Licenciado. + +Especificações + +Especificações do Programa podem ser localizadas nas seções/secções coletivas/colectivas de Descrição e Informações Técnicas das Cartas de Anúncio do Programa. + +Programas em Pacote/Lote + +O Programa é licenciado como um pacote de multiprodutos que consiste nos Programas em Pacote Configurável identificados abaixo. O Licenciado está autorizado a instalar e usar/utilizar esses Programas em Pacote Configurável dentro dos limites das Provas de Titularidade para o Programa, conforme estabelecido nesse documento de Informação sobre a Licença. O Licenciado não está autorizado a transferir ou recomercializar os Programas em Pacote Configurável separadamente do pacote de multiprodutos. Um Programa em Pacote Configurável pode ser acompanhado pelos termos da licença, e esses termos, se houver, aplicam-se ao/à uso/utilização desse Programa em Pacote Configurável pelo Licenciado. Em caso de conflito, os termos nesse documento de Informação sobre a Licença sobressaem os termos do Programa em Pacote Configurável. Quando o direito do Licenciado de usar/utilizar o Programa expirar ou terminar, o Licenciado deverá descontinuar o/a uso/utilização, destruir ou retornar todas as cópias prontamente dos Programas em Pacote Configurável para a parte de quem o Licenciado adquiriu o Programa. Se o Licenciado tiver transferido por download os Programas em Pacote Configurável, o Licenciado deverá entrar em contato com a parte a quem o Licenciado adquiriu o Programa. Se o Licenciado desejar autorizar os Programas em Pacote Configurável para qualquer uso/utilização além dos limites definidos acima, entre em contato com um Representante de Vendas IBM ou com a parte a quem o Licenciado adquiriu o Programa para obter/adquirir a licença adequada. + +Segue os Programas em Pacote Configurável licenciados com o Programa: +IBM MQ Idle Standby V9.0.3 + +Componentes Não Usados para Estabelecer Titularidades Necessárias + +Ao determinar o número de titularidades necessárias para a instalação ou o uso do Programa pelo Licenciado, a instalação ou o uso dos seguintes componentes do Programa não são considerados. Em outras palavras, o Licenciado pode instalar e usar os seguintes componentes do Programa, sob os/ao abrigo dos termos de licença, mas esses componentes não são usados para determinar o número de titularidades necessárias para o Programa. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + +As unidades de medida a seguir se aplicam o uso do Programa pelo Licenciado. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) é uma unidade de medida pela qual o Programa pode ser licenciado. O número de titularidades de PVU necessário é baseado na tecnologia de processador (definida dentro da Tabela de PVU por Fornecedor, Marca, Tipo e Número de Modelo do Processador em http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e o número de processadores disponibilizado para o Programa. A IBM continua a definir um processador, para o propósito/fim de licenciamento baseado em PVU, para cada núcleo de processador num chip. Um chip de processador de núcleo duplo, por exemplo, tem dois núcleos de processador. + +O Licenciado pode implementar o Programa usando o licenciamento de Capacidade Total ou o licenciamento de Capacidade de Virtualização (Subcapacidade) de acordo com os Termos para Licenciamento de Subcapacidade do Passport Advantage (consulte a página da Web abaixo). Se usar o licenciamento de Capacidade Total, o Licenciado deverá obter titularidades de PVU suficientes para cobrir todos os núcleos de processador ativados/activados* no ambiente de hardware físico disponibilizado para ou gerenciado/gerido pelo Programa, exceto/excepto para aqueles servidores dos quais o Programa tenha sido definitivamente removido. Se estiver usando/a usar o licenciamento de Capacidade de Virtualização, o Licenciado deverá obter titularidades suficientes para cobrir todos os núcleos de processador ativados/activados disponibilizados para ou gerenciados/geridos pelo Programa, conforme definido de acordo com as Virtualization Capacity License Counting Rules em http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Um Núcleo de processador ativado/activado é um núcleo de processador que está disponível para uso/utilização num servidor físico ou virtual, independentemente se a capacidade do núcleo do processador puder ser ou for limitada por meio de tecnologias de virtualização, comandos de sistema operacional/operativo, configurações do BIOS ou restrições similares. + +Além do apresentado acima, os termos a seguir se aplicam ao uso do Programa pelo Licenciado. + +Configurações de Idle Standby + +Para os propósitos/fins desta seção/secção, uma configuração "Idle Standby" é aquela onde uma cópia do Programa está instalada em um servidor que faz parte de uma solução de alta disponibilidade e é o servidor para o qual o Programa falhará no caso em que a cópia do Programa no servidor ativo/activo deixa de ser utilizável. Um servidor é considerado "idle" apenas se, até que ocorra um failover, for usado/utilizado exclusivamente para ações/acções administrativas que auxiliam em cenários de failover. + +O Programa não pode ser instalado em um servidor Idle Standby, exceto/excepto se devidamente licenciado. + +Se o Programa for usado/utilizado em uma configuração Idle Standby com o recurso Multi-Instance Queue Manager, então, uma cópia do Programa pode residir para propósitos/fins de backup em um servidor Idle Standby, ser iniciado, mas deve permanecer "idle" e não ser usada/utilizada para realizar um trabalho de ambiente de produção de qualquer tipo, salvo se o servidor ativo/activo falhar em relação ao servidor Idle Standby, caso em que a cópia Idle Standby pode ser usada/utilizada para realizar trabalho de ambiente de produção durante o período de failover. + +Se o Programa for usado/utilizado em uma configuração Idle Standby com outros sistemas de Alta Disponibilidade, uma cópia do Programa pode residir para propósitos/fins de backup em um servidor Idle Standby, mas que não tenha sido iniciado (e, portanto, não pode ser usada/utilizada para realizar trabalho de ambiente de produção de qualquer tipo), mas será iniciado automaticamente pelos componentes de Alta Disponibilidade no caso de o servidor ativo/activo falhar, caso em que a cópia de Idle Standby poderá ser usada/utilizada para realizar trabalho produtivo durante o período de failover. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +IMPORTANTE: LEIA CUIDADOSAMENTE + +Dois contratos de licença/acordos de licenciamento são apresentados abaixo. + +1. Contrato de Licença Internacional IBM para Avaliação de Programas +2. Contrato Internacional IBM de Licença de Programa + +Se o Licenciado obtiver o Programa para propósitos/fins de utilização produtiva (que não avaliação, teste, "avaliação ou compra" ou demonstração): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o Contrato Internacional IBM de Licença de Programa, sem modificações. + +Se o Licenciado obtiver o Programa com o propósito/fim de avaliação, teste, "avaliação ou compra" ou demonstração (coletivamente/colectivamente, uma "Avaliação"): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o (i) o Contrato de Licença Internacional IBM para Avaliação de Programas (a "Licença de Avaliação"), sem modificações; e (ii) o Contrato Internacional IBM de Licença de Programa (o "IPLA"), sem modificações. + +A Licença de Avaliação será aplicável durante o prazo de Avaliação do Licenciado. + +O IPLA será automaticamente aplicável se o Licenciado decidir manter o Programa após a Avaliação (ou obtiver cópias adicionais do Programa para utilizar após a Avaliação) assinando um contrato/acordo de compra (por exemplo, os contratos/acordos IBM International Passport Advantage ou IBM Passport Advantage Express). + +A Licença de Avaliação e o IPLA não têm efeito simultâneo; nenhum modifica o outro; e cada um é independente do outro. + +O texto completo de cada um destes dois contratos de licença/acordos de licenciamento está localizado a seguir. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato de Licença Internacional para Avaliação de Programas (Z125-5543-05) será aplicável. + +Nome do Programa (Número do Programa): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Os termos padrão a seguir se aplicam o uso do Programa pelo Licenciado. + +Período de Avaliação + +O período de avaliação começa na data em que o Licenciado concorda com os termos deste Contrato/Acordo e termina após 90 dias. + +Programas em Pacote/Lote + +O Programa é licenciado como um pacote de multiprodutos que consiste nos Programas em Pacote Configurável identificados abaixo. O Licenciado está autorizado a instalar e usar/utilizar esses Programas em Pacote Configurável dentro dos limites das Provas de Titularidade para o Programa, conforme estabelecido nesse documento de Informação sobre a Licença. O Licenciado não está autorizado a transferir ou recomercializar os Programas em Pacote Configurável separadamente do pacote de multiprodutos. Um Programa em Pacote Configurável pode ser acompanhado pelos termos da licença, e esses termos, se houver, aplicam-se ao/à uso/utilização desse Programa em Pacote Configurável pelo Licenciado. Em caso de conflito, os termos nesse documento de Informação sobre a Licença sobressaem os termos do Programa em Pacote Configurável. Quando o direito do Licenciado de usar/utilizar o Programa expirar ou terminar, o Licenciado deverá descontinuar o/a uso/utilização, destruir ou retornar todas as cópias prontamente dos Programas em Pacote Configurável para a parte de quem o Licenciado adquiriu o Programa. Se o Licenciado tiver transferido por download os Programas em Pacote Configurável, o Licenciado deverá entrar em contato com a parte a quem o Licenciado adquiriu o Programa. Se o Licenciado desejar autorizar os Programas em Pacote Configurável para qualquer uso/utilização além dos limites definidos acima, entre em contato com um Representante de Vendas IBM ou com a parte a quem o Licenciado adquiriu o Programa para obter/adquirir a licença adequada. + +Segue os Programas em Pacote Configurável licenciados com o Programa: +IBM MQ V9.0.3 + +Limitação de Desenvolvedor + +Se o Programa estiver designado como sendo para "Desenvolvedores", o Programa pode ser implementado apenas como parte do desenvolvimento interno do Licenciado e teste de unidade numa máquina de desenvolvedor. Uma máquina de desenvolvimento é um ambiente de área de trabalho físico ou virtual que executa um sistema operacional/operativo primário e o Programa, e que ambos estejam acessíveis e sejam usados por não mais que um desenvolvedor/programador especificado. O Licenciado não está autorizado a usar o Programa para processamento de cargas de trabalho de produção, simulação de cargas de trabalho de produção ou teste de escalabilidade de qualquer código, aplicativo/aplicação ou sistema. O Licenciado não está autorizado a usar qualquer parte do Programa para quaisquer outros propósitos/fins sem adquirir as titularidades de produção apropriadas. + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato Internacional de Licença de Programa (Z125-3301-14) será aplicável. + +Nome do Programa (Número do Programa): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Os termos padrão a seguir se aplicam o uso do Programa pelo Licenciado. + +Direito de uso/utilização limitado + +Conforme descrito no Contrato de Licença Internacional de Programas ("IPLA") e nesta Informação sobre a Licença, a IBM concede ao Licenciado um direito limitado para usar/utilizar o Programa. Esse direito é limitado ao nível do/a Uso/Utilização Autorizado/a, tal como um Processor Value Unit ("PVU"), um Resource Value Unit ("RVU"), um Value Unit ("VU"), ou outro nível especificado de uso/utilização, pago pelo Licenciado, conforme evidenciado na Prova de Titularidade. O uso/A utilização do licenciado também pode ser limitado/a ao uma máquina especificada ou apenas a um Programa de Suporte ou estar sujeito/a a outras restrições. Como o Licenciado não pagou por todo o valor económico do Programa, nenhum outro uso/nenhuma outra utilização lhe é permitido/a sem o pagamento de encargos adicionais. Além disso, o Licenciado não está autorizado a usar/utilizar o Programa para fornecer serviços de TI comerciais a terceiros, para fornecer hosting comercial ou timesharing, ou sublicenciar alugar ou arrendar o Programa, a menos que expressamente definido nos contratos/acordos aplicáveis sob os quais/ao abrigo dos quais o Licenciado obtém/adquire autorizações para usar/utilizar o Programa. Direitos adicionais podem ser disponibilizados ao Licenciado mediante o pagamento de encargos adicionais ou sob/ao abrigo de termos diferentes ou complementares. A IBM reserva-se o direito de determinar se disponibilizará tais direitos adicionais ao Licenciado. + +Especificações + +Especificações do Programa podem ser localizadas nas seções/secções coletivas/colectivas de Descrição e Informações Técnicas das Cartas de Anúncio do Programa. + +Programas em Pacote/Lote + +O Programa é licenciado como um pacote de multiprodutos que consiste nos Programas em Pacote Configurável identificados abaixo. O Licenciado está autorizado a instalar e usar/utilizar esses Programas em Pacote Configurável dentro dos limites das Provas de Titularidade para o Programa, conforme estabelecido nesse documento de Informação sobre a Licença. O Licenciado não está autorizado a transferir ou recomercializar os Programas em Pacote Configurável separadamente do pacote de multiprodutos. Um Programa em Pacote Configurável pode ser acompanhado pelos termos da licença, e esses termos, se houver, aplicam-se ao/à uso/utilização desse Programa em Pacote Configurável pelo Licenciado. Em caso de conflito, os termos nesse documento de Informação sobre a Licença sobressaem os termos do Programa em Pacote Configurável. Quando o direito do Licenciado de usar/utilizar o Programa expirar ou terminar, o Licenciado deverá descontinuar o/a uso/utilização, destruir ou retornar todas as cópias prontamente dos Programas em Pacote Configurável para a parte de quem o Licenciado adquiriu o Programa. Se o Licenciado tiver transferido por download os Programas em Pacote Configurável, o Licenciado deverá entrar em contato com a parte a quem o Licenciado adquiriu o Programa. Se o Licenciado desejar autorizar os Programas em Pacote Configurável para qualquer uso/utilização além dos limites definidos acima, entre em contato com um Representante de Vendas IBM ou com a parte a quem o Licenciado adquiriu o Programa para obter/adquirir a licença adequada. + +Segue os Programas em Pacote Configurável licenciados com o Programa: +IBM MQ V9.0.3 + +Limitação de Desenvolvedor + +Se o Programa estiver designado como sendo para "Desenvolvedores", o Programa pode ser implementado apenas como parte do desenvolvimento interno do Licenciado e teste de unidade numa máquina de desenvolvedor. Uma máquina de desenvolvimento é um ambiente de área de trabalho físico ou virtual que executa um sistema operacional/operativo primário e o Programa, e que ambos estejam acessíveis e sejam usados por não mais que um desenvolvedor/programador especificado. O Licenciado não está autorizado a usar o Programa para processamento de cargas de trabalho de produção, simulação de cargas de trabalho de produção ou teste de escalabilidade de qualquer código, aplicativo/aplicação ou sistema. O Licenciado não está autorizado a usar qualquer parte do Programa para quaisquer outros propósitos/fins sem adquirir as titularidades de produção apropriadas. + +Componentes Não Usados para Estabelecer Titularidades Necessárias + +Ao determinar o número de titularidades necessárias para a instalação ou o uso do Programa pelo Licenciado, a instalação ou o uso dos seguintes componentes do Programa não são considerados. Em outras palavras, o Licenciado pode instalar e usar os seguintes componentes do Programa, sob os/ao abrigo dos termos de licença, mas esses componentes não são usados para determinar o número de titularidades necessárias para o Programa. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + +As unidades de medida a seguir se aplicam o uso do Programa pelo Licenciado. + +Instalação + +Instalação é uma unidade de medida pela qual o Programa pode ser licenciado. Uma Instalação é uma cópia instalada do Programa num disco físico ou virtual disponibilizado para ser executado num computador. O Licenciado deve obter uma titularidade para cada Instalação do Programa. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +IMPORTANTE: LEIA CUIDADOSAMENTE + +Dois contratos de licença/acordos de licenciamento são apresentados abaixo. + +1. Contrato de Licença Internacional IBM para Avaliação de Programas +2. Contrato Internacional IBM de Licença de Programa + +Se o Licenciado obtiver o Programa para propósitos/fins de utilização produtiva (que não avaliação, teste, "avaliação ou compra" ou demonstração): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o Contrato Internacional IBM de Licença de Programa, sem modificações. + +Se o Licenciado obtiver o Programa com o propósito/fim de avaliação, teste, "avaliação ou compra" ou demonstração (coletivamente/colectivamente, uma "Avaliação"): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o (i) o Contrato de Licença Internacional IBM para Avaliação de Programas (a "Licença de Avaliação"), sem modificações; e (ii) o Contrato Internacional IBM de Licença de Programa (o "IPLA"), sem modificações. + +A Licença de Avaliação será aplicável durante o prazo de Avaliação do Licenciado. + +O IPLA será automaticamente aplicável se o Licenciado decidir manter o Programa após a Avaliação (ou obtiver cópias adicionais do Programa para utilizar após a Avaliação) assinando um contrato/acordo de compra (por exemplo, os contratos/acordos IBM International Passport Advantage ou IBM Passport Advantage Express). + +A Licença de Avaliação e o IPLA não têm efeito simultâneo; nenhum modifica o outro; e cada um é independente do outro. + +O texto completo de cada um destes dois contratos de licença/acordos de licenciamento está localizado a seguir. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato de Licença Internacional para Avaliação de Programas (Z125-5543-05) será aplicável. + +Nome do Programa: IBM MQ Managed File Transfer Service V9.0.1 +Número do Programa: Evaluation + +Nome do Programa: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Número do Programa: Evaluation + +Nome do Programa: IBM MQ Managed File Transfer Agent V9.0.1 +Número do Programa: Evaluation + +Período de Avaliação + +O período de avaliação começa na data em que o Licenciado concorda com os termos deste Contrato/Acordo e termina após 90 dias. + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato Internacional de Licença de Programa (Z125-3301-14) será aplicável. + +Nome do Programa: IBM MQ Managed File Transfer Service V9.0.1 +Número do Programa: 5724-H72 + +Nome do Programa: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Número do Programa: 5724-H72 + +Nome do Programa: IBM MQ Managed File Transfer Agent V9.0.1 +Número do Programa: 5724-H72 + +Conforme descrito no Contrato de Licença Internacional de Programas ("IPLA") e nesta Informação sobre a Licença, a IBM concede ao Licenciado um direito limitado para usar/utilizar o Programa. Esse direito é limitado ao nível do/a Uso/Utilização Autorizado/a, tal como um Processor Value Unit ("PVU"), um Resource Value Unit ("RVU"), um Value Unit ("VU"), ou outro nível especificado de uso/utilização, pago pelo Licenciado, conforme evidenciado na Prova de Titularidade. O uso/A utilização do licenciado também pode ser limitado/a ao uma máquina especificada ou apenas a um Programa de Suporte ou estar sujeito/a a outras restrições. Como o Licenciado não pagou por todo o valor económico do Programa, nenhum outro uso/nenhuma outra utilização lhe é permitido/a sem o pagamento de encargos adicionais. Além disso, o Licenciado não está autorizado a usar/utilizar o Programa para fornecer serviços de TI comerciais a terceiros, para fornecer hosting comercial ou timesharing, ou sublicenciar alugar ou arrendar o Programa, a menos que expressamente definido nos contratos/acordos aplicáveis sob os quais/ao abrigo dos quais o Licenciado obtém/adquire autorizações para usar/utilizar o Programa. Direitos adicionais podem ser disponibilizados ao Licenciado mediante o pagamento de encargos adicionais ou sob/ao abrigo de termos diferentes ou complementares. A IBM reserva-se o direito de determinar se disponibilizará tais direitos adicionais ao Licenciado. + +Especificações do Programa podem ser localizadas nas seções/secções coletivas/colectivas de Descrição e Informações Técnicas das Cartas de Anúncio do Programa. + +Redistribuíveis + +Se o Programa incluir componentes que são Redistribuíveis, eles serão identificados no arquivo/ficheiro REDIST que acompanha o Programa. Além dos direitos de licença concedidos no Contrato/Acordo, o Licenciado pode distribuir os Redistribuíveis sujeitos aos seguintes termos: +1) A redistribuição deve ser apenas em formato de código objeto/objecto e deve estar em conformidade com todas as orientações, instruções e especificações no REDIST ou na documentação que acompanha o Programa; +2) Se a documentação que acompanha o Programa permitir expressamente que o Licenciado modifique os Redistribuíveis, tal modificação deve estar em conformidade com todas as orientações, instruções e especificações contidas naquela documentação, e essas modificações, caso existam, devem ser tratadas como Redistribuíveis; +3) Os Redistribuíveis podem ser distribuídos apenas como parte do aplicativo/da aplicação do Licenciado que foi desenvolvido(a) usando o Programa ("Aplicativo/Aplicação do Licenciado") e apenas para suportar os clientes do Licenciado com respeito ao uso que fizerem do Aplicativo/da Aplicação do Licenciado. O Aplicativo/a Aplicação do Licenciado deve constituir um significativo valor acrescentado tal, que os Redistribuíveis não sejam uma motivação substancial para a aquisição, pelos usuários/utilizadores finais, do produto de software do Licenciado; +4) Se os Redistribuíveis incluírem um Java Runtime Environment, o Licenciado deve também incluir outros Redistribuíveis não Java ao Aplicativo/à Aplicação do Licenciado, salvo se o Aplicativo/a Aplicação for concebido(a) para ser executado(a) apenas em recursos informáticos em geral (por exemplo: laptops, desktops e servidores) e não em dispositivos portáteis ou outras patentes (isto é, dispositivos que contêm um microprocessador, mas que não têm o uso de computador como o seu propósito/fim primário); +5) O Licenciado não pode remover quaisquer arquivos/ficheiros de avisos ou de copyright contidos nos Redistribuíveis; +6) O Licenciado deve defender a IBM, os seus fornecedores ou distribuidores de e contra qualquer reclamação advinda do uso ou distribuição do Aplicativo/da Aplicação do Licenciado; +7) O Licenciado não pode usar o mesmo nome de caminho que os arquivos/ficheiros/módulos originais dos Redistribuíveis; +8) O Licenciado não pode usar os nomes ou marcas registradas/registadas da IBM, de seus fornecedores ou distribuidores com respeito à comercialização do Aplicativo/da Aplicação do Licenciado sem o prévio consentimento por escrito da IBM ou daquele fornecedor ou distribuidor; +9) A IBM, seus fornecedores e distribuidores fornecem os Redistribuíveis e a documentação relacionada sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM GARANTIA DE QUALQUER ESPÉCIE, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO/INCLUSIVE A GARANTIA DE TÍTULO, DE NÃO VIOLAÇÃO OU DE NÃO INTERFERÊNCIA E AS GARANTIAS E CONDIÇÕES IMPLÍCITAS DE COMERCIALIZAÇÃO E ADEQUAÇÃO A UM DETERMINADO PROPÓSITO/FIM; +10) O Licenciado é responsável por toda a assistência técnica para o Aplicativo/a Aplicação do Licenciado e por quaisquer modificações aos Redistribuíveis; e +11) O contrato de licença/acordo de licenciamento do Licenciado com o usuário/utilizador final do Aplicativo/da Aplicação do Licenciado deve informar o usuário/utilizador final que os Redistribuíveis ou as suas modificações não podem ser i) usados para qualquer propósito/fim que não seja ativar/activar o Aplicativo/a Aplicação do Licenciado, ii) copiados (exceto/excepto para propósitos/fins de backup), iii) redistribuídos ou transferidos sem o Aplicativo/a Aplicação do Licenciado ou iv) montados de forma inversa, compilados de forma inversa ou, de qualquer forma, serem convertidos exceto/excepto conforme especificamente permitido pela lei e sem a possibilidade de uma renúncia contratual. Além disso, o contrato de licença/acordo de licenciamento do Licenciado deve, pelo menos, proteger a IBM tanto quanto os termos deste Contrato/Acordo. + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + +Para os Componentes Fonte e Materiais de Amostra listados num arquivo/ficheiro REDIST do Programa, o Licenciado pode redistribuir versões modificadas desses Componentes Fonte ou Materiais de Amostra que sejam consistentes com os termos desta licença e quaisquer instruções presentes no arquivo/ficheiro REDIST. + +Instalação + +Instalação é uma unidade de medida pela qual o Programa pode ser licenciado. Uma Instalação é uma cópia instalada do Programa num disco físico ou virtual disponibilizado para ser executado num computador. O Licenciado deve obter uma titularidade para cada Instalação do Programa. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) é uma unidade de medida pela qual o Programa pode ser licenciado. O número de titularidades de PVU necessário é baseado na tecnologia de processador (definida dentro da Tabela de PVU por Fornecedor, Marca, Tipo e Número de Modelo do Processador em http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e o número de processadores disponibilizado para o Programa. A IBM continua a definir um processador, para o propósito/fim de licenciamento baseado em PVU, para cada núcleo de processador num chip. Um chip de processador de núcleo duplo, por exemplo, tem dois núcleos de processador. + +O Licenciado pode implementar o Programa usando o licenciamento de Capacidade Total ou o licenciamento de Capacidade de Virtualização (Subcapacidade) de acordo com os Termos para Licenciamento de Subcapacidade do Passport Advantage (consulte a página da Web abaixo). Se usar o licenciamento de Capacidade Total, o Licenciado deverá obter titularidades de PVU suficientes para cobrir todos os núcleos de processador ativados/activados* no ambiente de hardware físico disponibilizado para ou gerenciado/gerido pelo Programa, exceto/excepto para aqueles servidores dos quais o Programa tenha sido definitivamente removido. Se estiver usando/a usar o licenciamento de Capacidade de Virtualização, o Licenciado deverá obter titularidades suficientes para cobrir todos os núcleos de processador ativados/activados disponibilizados para ou gerenciados/geridos pelo Programa, conforme definido de acordo com as Virtualization Capacity License Counting Rules em http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Um Núcleo de processador ativado/activado é um núcleo de processador que está disponível para uso/utilização num servidor físico ou virtual, independentemente se a capacidade do núcleo do processador puder ser ou for limitada por meio de tecnologias de virtualização, comandos de sistema operacional/operativo, configurações do BIOS ou restrições similares. + +Termos Exclusivos do Programa + +Configurações de Idle Standby + +Para os propósitos/fins desta seção/secção, uma configuração "Idle Standby" é aquela onde uma cópia do Programa está instalada em um servidor que faz parte de uma solução de alta disponibilidade e é o servidor para o qual o Programa falhará no caso em que a cópia do Programa no servidor ativo/activo deixa de ser utilizável. Um servidor é considerado "idle" apenas se, até que ocorra um failover, for usado/utilizado exclusivamente para ações/acções administrativas que auxiliam em cenários de failover. + +O Programa não pode ser instalado em um servidor Idle Standby, exceto/excepto se devidamente licenciado. + +Se o Programa for usado/utilizado em uma configuração Idle Standby com o recurso Multi-Instance Queue Manager, então, uma cópia do Programa pode residir para propósitos/fins de backup em um servidor Idle Standby, ser iniciado, mas deve permanecer "idle" e não ser usada/utilizada para realizar um trabalho de ambiente de produção de qualquer tipo, salvo se o servidor ativo/activo falhar em relação ao servidor Idle Standby, caso em que a cópia Idle Standby pode ser usada/utilizada para realizar trabalho de ambiente de produção durante o período de failover. + +Se o Programa for usado/utilizado em uma configuração Idle Standby com outros sistemas de Alta Disponibilidade, uma cópia do Programa pode residir para propósitos/fins de backup em um servidor Idle Standby, mas que não tenha sido iniciado (e, portanto, não pode ser usada/utilizada para realizar trabalho de ambiente de produção de qualquer tipo), mas será iniciado automaticamente pelos componentes de Alta Disponibilidade no caso de o servidor ativo/activo falhar, caso em que a cópia de Idle Standby poderá ser usada/utilizada para realizar trabalho produtivo durante o período de failover. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +IMPORTANTE: LEIA CUIDADOSAMENTE + +Dois contratos de licença/acordos de licenciamento são apresentados abaixo. + +1. Contrato de Licença Internacional IBM para Avaliação de Programas +2. Contrato Internacional IBM de Licença de Programa + +Se o Licenciado obtiver o Programa para propósitos/fins de utilização produtiva (que não avaliação, teste, "avaliação ou compra" ou demonstração): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o Contrato Internacional IBM de Licença de Programa, sem modificações. + +Se o Licenciado obtiver o Programa com o propósito/fim de avaliação, teste, "avaliação ou compra" ou demonstração (coletivamente/colectivamente, uma "Avaliação"): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o (i) o Contrato de Licença Internacional IBM para Avaliação de Programas (a "Licença de Avaliação"), sem modificações; e (ii) o Contrato Internacional IBM de Licença de Programa (o "IPLA"), sem modificações. + +A Licença de Avaliação será aplicável durante o prazo de Avaliação do Licenciado. + +O IPLA será automaticamente aplicável se o Licenciado decidir manter o Programa após a Avaliação (ou obtiver cópias adicionais do Programa para utilizar após a Avaliação) assinando um contrato/acordo de compra (por exemplo, os contratos/acordos IBM International Passport Advantage ou IBM Passport Advantage Express). + +A Licença de Avaliação e o IPLA não têm efeito simultâneo; nenhum modifica o outro; e cada um é independente do outro. + +O texto completo de cada um destes dois contratos de licença/acordos de licenciamento está localizado a seguir. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato de Licença Internacional para Avaliação de Programas (Z125-5543-05) será aplicável. + +Nome do Programa: IBM MQ Advanced Message Security V9.0.1 +Número do Programa: Evaluation + +Nome do Programa: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Número do Programa: Evaluation + +Nome do Programa: IBM MQ Telemetry V9.0.1 +Número do Programa: Evaluation + +Período de Avaliação + +O período de avaliação começa na data em que o Licenciado concorda com os termos deste Contrato/Acordo e termina após 90 dias. + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + + + +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato Internacional de Licença de Programa (Z125-3301-14) será aplicável. + +Nome do Programa: IBM MQ Advanced Message Security V9.0.1 +Número do Programa: 5724-H72 + +Nome do Programa: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Número do Programa: 5724-H72 + +Nome do Programa: IBM MQ Telemetry V9.0.1 +Número do Programa: 5724-H72 + +Conforme descrito no Contrato de Licença Internacional de Programas ("IPLA") e nesta Informação sobre a Licença, a IBM concede ao Licenciado um direito limitado para usar/utilizar o Programa. Esse direito é limitado ao nível do/a Uso/Utilização Autorizado/a, tal como um Processor Value Unit ("PVU"), um Resource Value Unit ("RVU"), um Value Unit ("VU"), ou outro nível especificado de uso/utilização, pago pelo Licenciado, conforme evidenciado na Prova de Titularidade. O uso/A utilização do licenciado também pode ser limitado/a ao uma máquina especificada ou apenas a um Programa de Suporte ou estar sujeito/a a outras restrições. Como o Licenciado não pagou por todo o valor económico do Programa, nenhum outro uso/nenhuma outra utilização lhe é permitido/a sem o pagamento de encargos adicionais. Além disso, o Licenciado não está autorizado a usar/utilizar o Programa para fornecer serviços de TI comerciais a terceiros, para fornecer hosting comercial ou timesharing, ou sublicenciar alugar ou arrendar o Programa, a menos que expressamente definido nos contratos/acordos aplicáveis sob os quais/ao abrigo dos quais o Licenciado obtém/adquire autorizações para usar/utilizar o Programa. Direitos adicionais podem ser disponibilizados ao Licenciado mediante o pagamento de encargos adicionais ou sob/ao abrigo de termos diferentes ou complementares. A IBM reserva-se o direito de determinar se disponibilizará tais direitos adicionais ao Licenciado. + +Especificações do Programa podem ser localizadas nas seções/secções coletivas/colectivas de Descrição e Informações Técnicas das Cartas de Anúncio do Programa. + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + +Instalação + +Instalação é uma unidade de medida pela qual o Programa pode ser licenciado. Uma Instalação é uma cópia instalada do Programa num disco físico ou virtual disponibilizado para ser executado num computador. O Licenciado deve obter uma titularidade para cada Instalação do Programa. + +Processor Value Unit (PVU) + +Processor Value Unit (PVU) é uma unidade de medida pela qual o Programa pode ser licenciado. O número de titularidades de PVU necessário é baseado na tecnologia de processador (definida dentro da Tabela de PVU por Fornecedor, Marca, Tipo e Número de Modelo do Processador em http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) e o número de processadores disponibilizado para o Programa. A IBM continua a definir um processador, para o propósito/fim de licenciamento baseado em PVU, para cada núcleo de processador num chip. Um chip de processador de núcleo duplo, por exemplo, tem dois núcleos de processador. + +O Licenciado pode implementar o Programa usando o licenciamento de Capacidade Total ou o licenciamento de Capacidade de Virtualização (Subcapacidade) de acordo com os Termos para Licenciamento de Subcapacidade do Passport Advantage (consulte a página da Web abaixo). Se usar o licenciamento de Capacidade Total, o Licenciado deverá obter titularidades de PVU suficientes para cobrir todos os núcleos de processador ativados/activados* no ambiente de hardware físico disponibilizado para ou gerenciado/gerido pelo Programa, exceto/excepto para aqueles servidores dos quais o Programa tenha sido definitivamente removido. Se estiver usando/a usar o licenciamento de Capacidade de Virtualização, o Licenciado deverá obter titularidades suficientes para cobrir todos os núcleos de processador ativados/activados disponibilizados para ou gerenciados/geridos pelo Programa, conforme definido de acordo com as Virtualization Capacity License Counting Rules em http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Um Núcleo de processador ativado/activado é um núcleo de processador que está disponível para uso/utilização num servidor físico ou virtual, independentemente se a capacidade do núcleo do processador puder ser ou for limitada por meio de tecnologias de virtualização, comandos de sistema operacional/operativo, configurações do BIOS ou restrições similares. + +Termos Exclusivos do Programa + +Configurações de Idle Standby + +Para os propósitos/fins desta seção/secção, uma configuração "Idle Standby" é aquela onde uma cópia do Programa está instalada em um servidor que faz parte de uma solução de alta disponibilidade e é o servidor para o qual o Programa falhará no caso em que a cópia do Programa no servidor ativo/activo deixa de ser utilizável. Um servidor é considerado "idle" apenas se, até que ocorra um failover, for usado/utilizado exclusivamente para ações/acções administrativas que auxiliam em cenários de failover. + +O Programa não pode ser instalado em um servidor Idle Standby, exceto/excepto se devidamente licenciado. + +Se o Programa for usado/utilizado em uma configuração Idle Standby com o recurso Multi-Instance Queue Manager, então, uma cópia do Programa pode residir para propósitos/fins de backup em um servidor Idle Standby, ser iniciado, mas deve permanecer "idle" e não ser usada/utilizada para realizar um trabalho de ambiente de produção de qualquer tipo, salvo se o servidor ativo/activo falhar em relação ao servidor Idle Standby, caso em que a cópia Idle Standby pode ser usada/utilizada para realizar trabalho de ambiente de produção durante o período de failover. + +Se o Programa for usado/utilizado em uma configuração Idle Standby com outros sistemas de Alta Disponibilidade, uma cópia do Programa pode residir para propósitos/fins de backup em um servidor Idle Standby, mas que não tenha sido iniciado (e, portanto, não pode ser usada/utilizada para realizar trabalho de ambiente de produção de qualquer tipo), mas será iniciado automaticamente pelos componentes de Alta Disponibilidade no caso de o servidor ativo/activo falhar, caso em que a cópia de Idle Standby poderá ser usada/utilizada para realizar trabalho produtivo durante o período de failover. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +IMPORTANTE: LEIA CUIDADOSAMENTE + +Dois contratos de licença/acordos de licenciamento são apresentados abaixo. + +1. Contrato de Licença Internacional IBM para Avaliação de Programas +2. Contrato Internacional IBM de Licença de Programa + +Se o Licenciado obtiver o Programa para propósitos/fins de utilização produtiva (que não avaliação, teste, "avaliação ou compra" ou demonstração): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o Contrato Internacional IBM de Licença de Programa, sem modificações. + +Se o Licenciado obtiver o Programa com o propósito/fim de avaliação, teste, "avaliação ou compra" ou demonstração (coletivamente/colectivamente, uma "Avaliação"): Ao clicar no botão "Aceitar" abaixo, o Licenciado aceita o (i) o Contrato de Licença Internacional IBM para Avaliação de Programas (a "Licença de Avaliação"), sem modificações; e (ii) o Contrato Internacional IBM de Licença de Programa (o "IPLA"), sem modificações. + +A Licença de Avaliação será aplicável durante o prazo de Avaliação do Licenciado. + +O IPLA será automaticamente aplicável se o Licenciado decidir manter o Programa após a Avaliação (ou obtiver cópias adicionais do Programa para utilizar após a Avaliação) assinando um contrato/acordo de compra (por exemplo, os contratos/acordos IBM International Passport Advantage ou IBM Passport Advantage Express). + +A Licença de Avaliação e o IPLA não têm efeito simultâneo; nenhum modifica o outro; e cada um é independente do outro. + +O texto completo de cada um destes dois contratos de licença/acordos de licenciamento está localizado a seguir. + + +Contrato de Licença Internacional para Avaliação de Programas + +Parte 1 - Termos Gerais + +AO FAZER O DOWNLOAD, INSTALAR, COPIAR, ACEDER, CLICAR NO BOTÃO "ACEITAR" OU DE QUALQUER OUTRA FORMA UTILIZAR O PROGRAMA, O LICENCIADO ACEITA OS TERMOS DESTE CONTRATO. SE O CLIENTE ACEITAR ESTES TERMOS EM NOME DO LICENCIADO, O CLIENTE DECLARA E GARANTE QUE POSSUI PLENOS PODERES PARA VINCULAR O LICENCIADO A ESTES TERMOS. CASO O CLIENTE NÃO CONCORDE COM ESTES TERMOS, + +* NÃO DEVERÁ FAZER DOWNLOAD, INSTALAR, COPIAR, ACEDER, CLICAR NO BOTÃO "ACEITAR", NEM UTILIZAR O PROGRAMA; E + +* DEVERÁ IMEDIATAMENTE DEVOLVER A MÍDIA/O MEDIA NÃO USADA(O) E A DOCUMENTAÇÃO À ENTIDADE À QUAL FORAM ADQUIRIDOS. SE O PROGRAMA FOI OBTIDO POR DOWNLOAD, O CLIENTE COMPROMETE-SE A DESTRUIR TODAS AS CÓPIAS DO PROGRAMA. + +1. Definições + +"Uso Autorizado" - o nível especificado no qual o Licenciado está autorizado a executar ou a operar o Programa. Tal nível pode ser medido pelo número de utilizadores, por milhões de unidades de serviços ("MSUs"), por Unidades de Valor do Processador ("PVUs") ou outro nível de uso especificado pela IBM. + +"IBM" - International Business Machines Corporation ou uma das suas subsidiárias. + +"Informações sobre Licença" ("LI") - um documento que fornece informações e quaisquer termos adicionais específicos para um Programa. A LI do Programa pode ser encontrada no directório do Programa, através da utilização de um comando do sistema, ou como um folheto incluído com o Programa. + +"Programa" - os itens seguintes, incluindo o original e todas as cópias integrais ou parciais: 1) instruções e dados legíveis pela máquina, 2) componentes, ficheiros e módulos, 3) conteúdo audiovisual (tais como imagens, texto, gravações ou figuras) e 4) materiais licenciados relacionados (tais como chaves e documentação). + +2. Estrutura do Contrato + +Este Contrato inclui a Parte 1 - Termos Gerais, a Parte 2 - Termos Exclusivos do País (caso haja) e a LI, e é o acordo integral entre o Licenciado e a IBM, no que diz respeito ao uso do Programa. E substitui qualquer comunicação prévia oral ou escrita entre o Licenciado e a IBM relativa ao uso do Programa pelo Licenciado. Os termos da Parte 2 podem substituir ou modificar os termos da Parte 1. Em caso de conflito, a LI prevalece sobre ambas as Partes. + +3. Concessão de Licença + +O Programa é propriedade da IBM ou de uma entidade fornecedora da IBM, estando protegido por direitos de autor (copyrighted) sob licença e não vendido. + +A IBM concede ao Licenciado uma licença limitada, não exclusiva e intransmissível para 1) fazer o download, instalar e usar o Programa durante o período de avaliação até o Uso Autorizado especificado na LI, única e exclusivamente para fins de avaliação interna, teste ou demonstração a título de experiência; 2) fazer e instalar um número razoável de cópias para suportar tal Uso Autorizado e 3) fazer uma cópia de backup, desde que + +a. o Licenciado tenha adquirido o Programa legalmente e cumpra com os termos deste Contrato; + +b. a cópia de "backup" não seja executada a menos que o Programa do qual foi feito "backup" não possa ser executado; + +c. o Licenciado reproduza todos os avisos de direitos de autor (copyright) e outras legendas de propriedade em cada cópia total ou parcial do Programa; + +d. o Licenciado mantenha um registro de todas as cópias do Programa e garanta que qualquer pessoa que use o Programa (acedido local ou remotamente) 1) o fará apenas em nome do Licenciado e 2) que respeitará os termos deste Contrato; + +e. o Licenciado não 1) use o Programa para propósitos/fins produtivos ou, de outra forma, use, copie, modifique ou distribua o Programa exceto/excepto conforme expressamente permitido neste Contrato/Acordo; 2) faça engenharia reversa, compilação reversa ou, de outra forma, converta ou faça engenharia reversa no Programa, exceto/excepto conforme expressamente permitido por lei sem a possibilidade de renúncia contratual; 3) use qualquer um dos componentes, arquivos/ficheiros, módulos, conteúdo áudio-visual ou materiais licenciados relacionados do Programa separadamente desse Programa; 4) sublicencie, alugue ou arrende o Programa ou 5) use o Programa para hospedagem de aplicativo/aplicação comercial e + +f. se o Licenciado adquirir este Programa como um Programa de Suporte, o Licenciado use este Programa apenas para suportar o Programa Principal e sujeito a quaisquer limitações na licença para o Programa Principal, ou, se o Licenciado adquirir este Programa como um Programa Principal, o Licenciado use todos os Programas de Suporte apenas para suportar este Programa e sujeito a quaisquer limitações neste Contrato. Para os fins deste Item "f," um "Programa de Suporte" é um Programa que faz parte de outro Programa IBM ("Programa Principal") e identificado como um Programa de Suporte na LI do Programa Principal. (Para adquirir uma licença separada para um Programa de Suporte sem essas restrições, o Licenciado deverá entrar em contacto com a a entidade da qual obteve o Programa de Suporte.) + +Esta licença é aplicável a cada cópia do Programa que o Licenciado fizer. + +3.1 Atualizações, Correções e Patches + +Quando o Licenciado recebe uma atualização, uma correção ou um patch para um Programa, aceita quaisquer termos adicionais ou diferentes que são aplicáveis a tal atualização, correção ou patch que são especificados em sua LI. Se nenhum termo adicional ou diferente for fornecido, então a atualização, a correção ou o patch estarão exclusivamente sujeitos a este Contrato. Se o Programa for substituído por uma atualização, o Licenciado concorda em interromper imediatamente o uso do Programa substituído. + +3.2 Termo e Rescisão + +O período de avaliação começa na data em que o Licenciado concordar com os termos deste Contrato e termina 1) no final do período da duração ou na data especificada pela IBM, nas Informações sobre Licença ou num documento de transacção; ou 2) a data na qual o programa for automaticamente desativado; o que ocorrer primeiro. O Licenciado destruirá o Programa e todas as cópias que tenha efectuado no prazo de 10 dias a contar da data de fim do período de avaliação. Se a IBM especificar nas LI que o Licenciado poderá manter o Programa e o Licenciado optar por fazê-lo, então o Programa estará sujeito a um contrato de licença diferente, que a IBM fornecerá ao Licenciado. Além de que, um encargo poderá ser aplicado. + +A IBM pode rescindir a licença do Licenciado caso não cumpra com os termos deste Contrato. Se a licença for rescindida por qualquer motivo por qualquer uma das partes, o Licenciado concorda em interromper imediatamente o uso do Programa e destruir todas as cópias do Programa. Quaisquer termos deste Contrato que pela sua natureza produzam os seus efeitos para além da data de denúncia, resolução ou rescisão produzirão efeitos até ao total cumprimento, aplicando-se a ambas as partes, respectivos sucessores e cessionários. + +O PROGRAMA PODE CONTER UM DISPOSITIVO DE DESACTIVAÇÃO QUE O IMPEDE DE SER UTILIZADO APÓS O TERMO DO PERÍODO DE AVALIAÇÃO. O LICENCIADO CONCORDA EM NÃO VIOLAR ESTE DISPOSITIVO DE DESATIVAÇÃO OU O PROGRAMA. O LICENCIADO DEVERÁ TOMAR PRECAUÇÕES PARA EVITAR QUALQUER PERDA DE DADOS QUE POSSA OCORRER QUANDO O PROGRAMA NÃO PUDER MAIS SER USADO. + +4. Encargos + +Não há encargos para o uso do Programa durante o período de avaliação. + +5. Sem Garantias + +SUJEITA A QUAISQUER GARANTIAS LEGAIS AS QUAIS NÃO PODEM SER EXCLUÍDAS, A IBM NÃO CONCEDE QUAISQUER GARANTIAS OU CONDIÇÕES, EXPRESSAS OU IMPLÍCITAS, RELATIVAS AO PROGRAMA OU SUPORTE, SE HOUVER, INCLUINDO, MAS NÃO SE LIMITANDO A QUAISQUER GARANTIAS OU CONDIÇÕES IMPLÍCITAS DE COMERCIALIZAÇÃO, QUALIDADE SATISFATÓRIA, ADEQUAÇÃO A UM DETERMINADO FIM E DE QUALQUER GARANTIA DE TÍTULO, OU DE NÃO VIOLAÇÃO. + +ALGUNS ESTADOS OU JURISDIÇÕES NÃO PERMITEM A EXCLUSÃO DE GARANTIAS EXPRESSAS OU IMPLÍCITAS, PELO QUE, A EXCLUSÃO ACIMA PODE NÃO SE APLICAR AO LICENCIADO. NESTE CASO, TAIS GARANTIAS ESTÃO LIMITADAS À DURAÇÃO DO PERÍODO MÍNIMO EXIGIDO POR LEI. NENHUMA GARANTIA É APLICÁVEL APÓS TAL PERÍODO. ALGUNS ESTADOS OU JURISDIÇÕES NÃO PERMITEM LIMITAÇÕES ENQUANTO DURAR UMA GARANTIA IMPLÍCITA, DE FORMA QUE A LIMITAÇÃO ACIMA PODE NÃO SE APLICAR AO LICENCIADO. O LICENCIADO PODE TER OUTROS DIREITOS QUE VARIAM DE ESTADO PARA ESTADO OU DE JURISDIÇÃO PARA JURISDIÇÃO. + +AS RENÚNCIAS DE RESPONSABILIDADE E EXCLUSÕES NESTA SECÇÃO 5 TAMBÉM SÃO APLICÁVEIS A QUALQUER UM DOS FORNECEDORES OU A ENTIDADES QUE DESENVOLVEM PROGRAMAS DA IBM. + +FABRICANTES, FORNECEDORES OU EDITORES DE PROGRAMAS NÃO-IBM PODEM FORNECER AS SUAS PRÓPRIAS GARANTIAS. + +A IBM NÃO FORNECE SUPORTE DE NENHUM TIPO, A MENOS QUE A IBM ESPECIFIQUE DE OUTRA FORMA. NESTE CASO, QUALQUER SUPORTE FORNECIDO PELA IBM ESTÁ SUJEITO ÀS RENÚNCIAS DE RESPONSABILIDADE E EXCLUSÕES NESTA SECÇÃO 5. + +6. Dados e Bases de Dados do Licenciado + +Para auxiliar o Licenciado no isolamento da causa de um problema com o Programa, a IBM pode solicitar que o Licenciado 1) permita que a IBM acesa ao seu sistema remotamente ou 2) envie informações ou dados do seu sistema para a IBM. Contudo, a IBM não está obrigada a fornecer tal assistência, a menos que a IBM e o Licenciado celebrem um contrato por escrito separado ao abrigo do qual a IBM concorde em fornecer ao Licenciado esse tipo de suporte, que esteja para além das obrigações da IBM ao abrigo deste Contrato. Neste caso, a IBM utilizará informações sobre erros e problemas para melhorar os seus produtos e serviços, além de auxiliar com o fornecimento de ofertas de suporte relacionadas. Para esses fins, a IBM pode utilizar entidades e subcontratados da IBM (incluindo em um ou mais países que não aquele no qual o Licenciado está localizado) e o Licenciado autoriza a IBM a fazê-lo. + +O Licenciado permanece responsável 1) por quaisquer dados e pelo conteúdo de qualquer base de dados que disponibilize à IBM, 2) pela selecção e implementação de procedimentos e controles relativos ao acesso, à segurança, à encriptação, ao uso e à transmissão de dados (incluindo quaisquer dados pessoalmente identificáveis) e 3) pelo "backup" e pela recuperação de qualquer base de dados e quaisquer dados armazenados. O Licenciado não enviará ou fornecerá à IBM acesso a quaisquer informações pessoalmente identificáveis, seja no formato de dados ou em qualquer outro formato e será responsável pelas custas razoáveis e outros valores em que a IBM possa incorrer em relação a qualquer uma destas informações erroneamente fornecidas à IBM ou pela perda ou divulgação de tais informações pela IBM, incluindo aqueles montantes que resultem de qualquer reclamação de terceiros. + +7. Limitação de Responsabilidade + +A limitação e exclusão de responsabilidade descritas nesta Secção 7 (Limitação de Responsabilidade) aplicam-se até ao limite máximo em que não sejam proibidas pela lei aplicável, sem a possibilidade de renúncia contratual. + +7.1 Itens pelos quais a IBM Pode Ser Responsável + +Podem surgir circunstâncias em que o Licenciado tenha o direito que a IBM o compense por danos sofridos. Independentemente da base sobre a qual o Licenciado tenha direito a reclamar por danos causados pela IBM (incluindo incumprimento contratual, negligência, deturpação de factos ou outra reclamação contratual ou extra-contratual), a responsabilidade total da IBM por todas as reclamações em agregado resultantes de, ou relacionadas com cada Programa ou, de outra forma, resultantes ao abrigo deste Contrato, não excederá o montante de quaisquer 1) danos corporais (incluindo morte) e danos em bens móveis e imóveis e 2) outros danos reais directos até ao montante de US$ 10.000 (ou equivalente na moeda local). + +Este limite também se aplica a qualquer entidade que desenvolva Programas e a fornecedores de Programas da IBM. Este é o valor máximo pelo qual a IBM, os seus fornecedores e as entidades que desenvolvem Programas são colectivamente responsáveis. + +7.2 Casos em que a IBM Não é Responsável + +EM CASO ALGUM A IBM, OS SEUS FORNECEDORES OU ENTIDADES QUE DESENVOLVEM PROGRAMAS SÃO RESPONSÁVEIS PELOS SEGUINTES DANOS, AINDA QUE TENHAM SIDO INFORMADOS SOBRE A POSSIBILIDADE DA SUA OCORRÊNCIA: + +a. PERDA DE DADOS OU DANOS NOS DADOS; + +b. DANOS ESPECIAIS, INCIDENTAIS, EXEMPLARES OU DANOS INDIRETOS; OU QUAISQUER DANOS ECONÔMICOS CONSEQUENCIAIS; OU + +c. LUCROS CESSANTES, PERDA DE NEGÓCIOS, RECEITAS, CLIENTELA, OU POUPANÇAS PERDIDAS + +8. Verificação de Conformidade + +Para os fins desta Secção 8 (Verificação de Conformidade), "Termos do Programa de Avaliação" significam 1) este Contrato e os aditamentos aplicáveis e os documentos de transacção fornecidos pela IBM e 2) políticas de software IBM que podem ser encontradas no Web site IBM Software Policy (www.ibm.com/softwarepolicies), incluindo, mas não se limitando, àquelas políticas relativas a backup, preços de subcapacidade e migração. + +Os direitos e obrigações definidos nesta Secção 8 permanecem em vigor durante o período em que o Programa está licenciado ao Licenciado e nos dois anos subsequentes. + +8.1 Processo de Verificação + +O Licenciado concorda em criar, manter e fornecer à IBM e aos seus auditores registos escritos precisos, emitidos por ferramentas do sistema e outras informações do sistema, suficientes para possibilitar a verificação em qualquer auditoria de que o uso de todos os Programas pelo Licenciado está em conformidade com os Termos do Programa de Avaliação, sem limitação, todos os termos de qualificação aplicáveis de licenciamento e de definição de preços da IBM. O Licenciado é responsável por garantir que 1) não excederá o seu Uso Autorizado e 2) permanecerá em conformidade com os Termos do Programa de Avaliação. + +Mediante aviso razoável, a IBM poderá verificar a conformidade do Licenciado com os Termos do Programa de Avaliação em todas as localizações e para todos os ambientes em que o Licenciado usa (para qualquer fim) os Programas sujeitos aos Termos do Programa de Avaliação. Esta verificação será realizada nas instalações do Cliente durante o seu horário de trabalho e de forma a minimizar o impacto nas actividades do negócio do Licenciado. A IBM pode usar um auditor independente para fazer esta verificação, desde que a IBM e o auditor tenham assinado um acordo de confidencialidade. + +8.2 Resolução + +A IBM notificará o Licenciado, por escrito, se tal verificação indicar que o Licenciado usou qualquer Programa para além do seu Uso Autorizado ou se, de outra forma, não estiver em conformidade com os Termos do Programa de Avaliação. O Licenciado concorda em pagar imediatamente e directamente à IBM os encargos que a IBM especificar numa fatura/factura por 1) qualquer uso em excesso, 2) suporte para tal uso em excesso para o menor período entre a duração de tal uso em excesso ou dois anos e 3) quaisquer encargos adicionais e outras obrigações, apurados como resultado de tal verificação. + +9. Avisos de Terceiros + +O Programa pode incluir código de terceiros que a IBM, e não o terceiro, licencia ao Licenciado ao abrigo deste Contrato. Os Avisos, se houver algum, para o código de terceiros ("Avisos de Terceiros") são incluídos apenas para informação do Licenciado. Estes avisos podem ser encontrados no(s) ficheiro(s) AVISOS do Programa. Informações sobre como obter o código fonte para determinado código de terceiros podem ser encontradas nos Avisos de Terceiros. Se nos Avisos de Terceiros, a IBM identificar o código de terceiros como "Código de Terceiros Modificável," a IBM autoriza o Licenciado a 1) modificar o Código de Terceiros Modificável e 2) inverter a engenharia dos módulos do Programa que estabelecem interface diretamente com o Código de Terceiros Modificável desde que seja apenas com o de "debugging" às modificações do Licenciado em tal código de terceiros. As obrigações de serviço e suporte da IBM, se houver, aplicam-se apenas ao Programa não modificado. + +10. Geral + +a. Nada neste Contrato afeta quaisquer direitos legais dos consumidores que não sejam passíveis de renúncia ou limitação contratual. + +b. Caso alguma disposição deste Contrato for considerada inválida ou ineficaz, as restantes disposições deste Contrato manter-se-ão em vigor. + +c. O Licenciado está proibido de exportar o Programa. + +d. O Licenciado autoriza a International Business Machines Corporation e as suas subsidiárias (e seus sucessores e cessionários, entidades contratadas e Parceiros de Negócios IBM) a armazenar e usar informações de contato comercial do Licenciado em qualquer lugar em que façam negócios, com respeito a produtos e serviços IBM ou na promoção do relacionamento comercial da IBM com o Licenciado. + +e. Cada uma das partes concederá à outra oportunidade razoável para cumprir com as suas obrigações ao abrigo deste Contrato antes de reclamar que a outra parte está em falta quanto ao cumprimento das suas obrigações. As partes tentarão resolver de boa-fé todas as disputas, discordâncias ou demandas entre elas relativas a este Contrato. + +f. Excepto se de outra forma exigido pela lei aplicável sem possibilidade de renúncia ou limitação contratual, 1) nenhuma das partes intentará acção judicial, independentemente da forma, resultante ou relacionada com este Contrato decorridos que sejam mais de dois anos após a ocorrência da causa da acção; e 2) após tal limite temporal, qualquer acção judicial resultante deste Contrato e todos os respectivos direitos relacionados com essa acção, prescreverão. + +g. Nenhuma das partes é responsável por falhas no cumprimento de quaisquer obrigações devido a causas fora do seu controle. + +h. Este Contrato não cria nenhum nem nenhuma causa de acção referente a terceiros, nem que a IBM é responsável por qualquer reclamação de terceiros contra o Licenciado, excepto conforme indicado acima na Subsecção 7.1 (Itens pelos quais a IBM Pode Ser Responsável), por danos corporais (incluindo morte) ou danos em bens móveis e imóveis, pelos quais a IBM seja legalmente responsável perante esses terceiros. + +i. Ao tomar parte neste Contrato, nenhuma das partes se baseia em qualquer declaração que não esteja especificada neste Contrato, incluindo, mas não se limitando, qualquer declaração relativa: 1) ao desempenho ou função do Programa, que não conforme expressamente garantido acima na Secção 5 (Sem Garantias); 2) às experiências ou recomendações de outras partes; ou 3) a quaisquer resultados ou poupanças que o Licenciado possa obter. + +j. A IBM assinou contratos com determinadas organizações (denominadas "Parceiros de Negócios IBM") para promover, comercializar e prestar suporte a determinados Programas. Os Parceiros de Negócios IBM permanecem independentes e separados da IBM. A IBM não é responsável por acções ou declarações dos Parceiros de Negócios IBM ou por quaisquer obrigações destes para com o Licenciado. + +k. Os termos de indemnização da licença e de propriedade intelectual de outros acordos do Licenciado com a IBM (tal como as Condições Gerais IBM) não se aplicam às licenças do Programa concedidas ao abrigo deste Contrato. + +11. Âmbito Geográfico e Lei Aplicável + +11.1 Lei Aplicável + +Ambas as partes concordam com a aplicação das leis do país no qual o Licenciado obteve a licença do Programa para reger, interpretar e fazer cumprir todos os direitos, deveres e obrigações do Licenciado e da IBM que surjam ou que estejam de algum modo relacionados com o objecto deste Contrato, independentemente dos princípios referentes a conflitos leis. + +A Convenção das Nações Unidas não se aplica nos Contratos para Venda Internacional de Bens. + +11.2 Jurisdição + +Todos os direitos, deveres e obrigações estão sujeitos aos tribunais do país no qual o Licenciado obteve a licença do Programa. + +Parte 2 - Termos Exclusivos do País + +Para licenças concedidas nos países identificados abaixo, os seguintes termos substituem ou modificam os termos referidos na Parte 1. Todos os termos na Parte 1 que não forem alterados por esses termos permanecem inalterados e em vigor. Esta Parte 2 está organizada da seguinte forma: + +* Aditamentos de diversos de países para a Parte 1, Secção 11 (Lei Aplicável e Jurisdição); + +* Aditamentos de países das Américas a outros termos do Contrato; e + +* Aditamentos de países da Europa, Médio Oriente e África a outros termos do Contrato. + +Aditamentos de diversos países para a Parte 1, Secção 11 (Lei Aplicável e Jurisdição) + +11.1 Lei Aplicável + +A frase "as leis do país no qual o Licenciado obteve a licença do Programa", no primeiro parágrafo da 11.1 Lei Aplicável, é substituída pelas seguintes frases nos países identificados abaixo: + +EUROPA, MÉDIO ORIENTE E ÁFRICA + +(1) Na Guiné-Bissau: as leis de França; e + +(2) Em Angola e Moçambique: as leis de Inglaterra. + +11.2 Jurisdição + +O seguinte parágrafo pertence à jurisdição e substitui a Subsecção 11.2 (Jurisdição), na forma como se aplica aos países identificados abaixo: + +Todos os direitos, deveres e obrigações estão sujeitos aos tribunais do país no qual o Licenciado obteve a licença do Programa, salvo, nos países identificados abaixo, todos os litígios provenientes de ou relacionados com este Contrato, serão apreciados e os procedimentos iniciados exclusivamente no seguinte tribunal: + +AMÉRICAS + +(1) No Brasil: o tribunal do Rio de Janeiro, RJ; + +EUROPA, MÉDIO ORIENTE E ÁFRICA + +(2) Na Guiné-Bissau: o Tribunal Comercial de Paris; + +(3) Em Angola, Moçambique e São Tomé e Príncipe: os tribunais ingleses; e + +(4) Em Portugal: os tribunais de Lisboa. + +ADITAMENTOS DA EUROPA, MÉDIO ORIENTE E ÁFRICA (EMEA) + +ESTADOS MEMBROS DA UNIÃO EUROPEIA + +5. Sem Garantias + +O seguinte é incluído na Secção 5 (Sem Garantias): + +Na União Europeia ("UE"), consumidores têm direitos legais ao abrigo da legislação nacional aplicável que regula a venda de mercadorias ao consumidor. Tais direitos não são afectados pelas disposições estipuladas nesta Secção 5 (Sem Garantias). + +ESTADOS MEMBROS DA UE E PAÍSES IDENTIFICADOS ABAIXO + +Qualquer país da Europa que tenha promulgado uma legislação local de protecção ou privacidade de dados semelhante ao modelo da UE. + +10. Geral + +A frase seguinte substitui o Item 10.d: + +(1) Definições - Para os fins deste Item 10.d, as seguintes definições adicionais aplicam-se: + +(a) Informação de Contacto Comercial - significa informação de contacto de caráter comercial divulgada pelo Licenciado à IBM, incluindo nomes, títulos profissionais, endereços profissionais, números de telefone e endereços de e-mail dos empregados e subcontratados do Licenciado. Para Áustria, Itália e Suíça, a Informação de Contacto Comercial também inclui informação sobre a Licença e seus subcontratados como pessoas jurídicas (por exemplo, dados da receita da Licença e outra informação transaccional) + +(b) Pessoal de Contacto Comercial - significa empregados e subcontratados do Licenciado a quem a Informação de Contacto Comercial diz respeito. + +(c) Autoridade de Protecção de Dados, - significa a autoridade estabelecida pela Legislação de Protecção de Dados e Comunicações Electrónicas aplicável no país da UE, ou, para países fora da UE, a autoridade responsável por supervisionar a protecção de dados pessoais nesse país ou (para qualquer dos itens anteriores) qualquer entidade sucessora devidamente nomeada para o efeito. + +(d) Legislação Protecção de Dados & e de Comunicações Electrónicas - (i) a legislação local aplicável e os regulamentos em vigor implementando os requisitos da Directiva da UE 95/46/EC (sobre a protecção dos indivíduos no que respeita ao processamento de dados pessoais e sobre a livre circulação de tais dados) e da Directiva da UE 2002/58/EC (referente ao processamento de dados pessoais e à protecção da privacidade no sector de comunicações electrónicas); ou (ii) para países não europeus, a legislação e/ou os regulamentos oficiais aplicáveis no país, no que respeita à protecção de dados pessoais e à regulação de comunicações electrónicas envolvendo dados pessoais, incluindo (para qualquer um dos antecedentes) qualquer substituição estabelecida por lei para o efeito. + +(e) Grupo IBM - a International Business Machines Corporation de Armonk, Nova Iorque, EUA, as suas subsidiárias e os seus Parceiros de Negócio e subcontratados desta. + +(2) O Licenciado autoriza a IBM: + +(a) a processar e usar Informação de Contacto Comercial dentro do Grupo IBM para prestar suporte ao Licenciado, incluindo o fornecimento de serviços de suporte, e com a finalidade de assegurar a gestão da relação comercial entre o Licenciado e o Grupo IBM, incluindo, sem limitação, entrar em contacto com o Pessoal de Contacto Comercial (por e-mail ou de alguma outra forma) e realizar acções de marketing de produtos e serviços do GrupoIBM (a "Finalidade Especificada"); e + +(b) divulgar a Informação de Contacto Comercial para outros membros do Grupo IBM visando alcançar a Finalidade Especificada. + +(3) A IBM concorda que toda a Informação de Contacto Comercial será processada em conformidade com a Legislação de Protecção de Dados de Comunicações Electrónicas e será utilizada apenas para a Finalidade Especificada. + +(4) Na medida em que tal seja exigido pela Legislação de Protecção de Dados e de Comunicações Electrónicas, o Licenciado declara que (a) obteve (ou irá obter) quaisquer consentimentos do (e que emitiu (ou irá emitir) quaisquer notificações ao) Pessoal de Contacto Comercial pertinentes de forma a permitir que o Grupo IBM processe e use a Informação de Contacto Comercial para a Finalidade Especificada. + +(5) O Licenciado autoriza a IBM a transferir a Informação de Contacto Comercial para fora do Espaço Económico Europeu, desde que tal transferência seja feita nos termos contratuais aprovados pela Autoridade de Protecção de Dados ou que a transferência seja permitida de alguma outra forma ao abrigo da Legislação de Protecção de Dados e de Comunicações Electrónicas. + +Z125-5543-05 (07/2011) + + +Contrato Internacional de Licença de Programa + +Parte 1 - Termos Gerais + +AO FAZER O DOWNLOAD, INSTALAR, COPIAR, ACESSAR, CLICAR EM UM BOTÃO "ACEITAR" OU UTILIZAR O PROGRAMA DE QUALQUER OUTRA FORMA, O LICENCIADO CONCORDA COM OS TERMOS DESTE CONTRATO. SE UM TERCEIRO ACEITAR ESTES TERMOS EM NOME DO LICENCIADO, O TERCEIRO DECLARA E GARANTE QUE POSSUI TOTAL AUTORIDADE PARA VINCULAR O LICENCIADO A ESTES TERMOS. CASO O CLIENTE NÃO CONCORDE COM ESTES TERMOS, + +* NÃO DEVERÁ FAZER DOWNLOAD, INSTALAR, COPIAR, ACESSAR, CLICAR EM UM BOTÃO "ACEITAR" NEM UTILIZAR O PROGRAMA; E + +* DEVERÁ RETORNAR IMEDIATAMENTE A MÍDIA NÃO-UTILIZADA, A DOCUMENTAÇÃO E O CERTIFICADO DE TITULARIDADE PARA A PARTE DA QUAL FORAM OBTIDOS PARA TER UM REEMBOLSO DO VALOR PAGO. SE O PROGRAMA FOI TRANSFERIDO POR DOWNLOAD, TODAS AS CÓPIAS DO PROGRAMA DEVERÃO SER DESTRUÍDAS. + +1. Definições + +"Uso Autorizado" - o nível especificado no qual o Licenciado está autorizado a executar ou operar o Programa. Tal nível pode ser medido pelo número de usuários, por milhões de unidades de serviço ("MSUs"), por Unidades de Valor do Processador ("PVUs") ou por outro nível de uso especificado pela IBM. + +"IBM" - International Business Machines Corporation ou uma de suas subsidiárias. + +"Informações sobre Licença" ("LI") - um documento que fornece informações e quaisquer termos adicionais específicos para um Programa. A LI do Programa está disponível no endereço www.ibm.com/software/sla. A LI também pode ser encontrada no diretório do Programa, através da utilização de um comando do sistema ou como um folheto incluído com o Programa. + +"Programa" - os itens a seguir, incluindo o original e todas as cópias integrais ou parciais: 1) instruções e dados legíveis por máquinas; 2) componentes, arquivos e módulos; 3) conteúdo audiovisual (tais como imagens, texto, registros ou ilustrações) e 4) materiais licenciados relacionados (tais como chaves e documentação). + +"Certificado de Titularidade" ("PoE") - evidência do Uso Autorizado do Licenciado. A PoE também é a evidência da elegibilidade do Licenciado para garantia, futuras atualizações de preços, se houver, e possíveis oportunidades especiais ou promocionais. Se a IBM não fornecer uma PoE ao Licenciado, então a IBM pode aceitar como PoE o recibo de venda original pago ou outro registro de venda da parte (ou a IBM ou seu revendedor) da qual o Licenciado obteve o Programa, contanto que este especifique o nome do Programa e o Uso Autorizado obtido. + +"Período de Garantia" - um ano, a partir da data em que o Licenciado original tenha recebido a licença. + +2. Estrutura do Contrato + +Este Contrato inclui a Parte 1 - Termos Gerais, a Parte 2 - Termos Exclusivos do País (se houver algum), a LI e a PoE, e representa o acordo completo entre o Licenciado e a IBM relativo ao uso do Programa. Ele substitui qualquer comunicação prévia verbal ou escrita entre o Licenciado e a IBM relativa ao uso do Programa pelo Licenciado. Os termos da Parte 2 podem substituir ou modificar os termos da Parte 1. Em caso de conflito, a LI prevalece sobre ambas as Partes. + +3. Concessão de Licença + +O Programa é de propriedade da IBM ou de um fornecedor da IBM, é sujeito a direito autoral e é licenciado, não vendido. + +A IBM concede ao Licenciado uma licença não-exclusiva para 1) o uso do Programa até o limite do Uso Autorizado especificado na PoE, 2) fazer e instalar cópias de acordo com o nível de Uso Autorizado e 3) fazer uma cópia de "backup", tudo isso desde que + +a. o Licenciado tenha obtido o Programa legalmente e cumpra com os termos deste Contrato; + +b. a cópia de "backup" não seja executada a menos que o Programa do qual foi feito "backup" não possa ser executado; + +c. o Licenciado reproduza todos os avisos de direitos autorais e outras indicações de propriedade em cada cópia total ou parcial do Programa; + +d. o Licenciado garanta que qualquer pessoa que use o Programa (via acesso local ou remoto) 1) o faça apenas em nome do Licenciado e 2) cumpra com todos os termos deste Contrato; + +e. o Licenciado não 1) utilize, copie, modifique ou distribua o Programa, exceto conforme expressamente permitido neste Contrato; 2) reverta a montagem, reverta a compilação, ou de qualquer outra forma, traduza o Programa, exceto conforme expressamente permitido pela lei, sem a possibilidade de renúncia contratual; 3) use nenhum dos componentes, arquivos, módulos, conteúdo audiovisual ou materiais licenciados correlatos do Programa separadamente de tal Programa; ou 4) sublicencie, alugue ou arrende o Programa; e + +f. caso o Licenciado obtiver este Programa como um Programa de Suporte, que o Licenciado use este Programa apenas para suportar o Programa Principal e sujeito a quaisquer limitações na licença para o Programa Principal, ou, caso o Licenciado obtiver este Programa como um Programa Principal, que o Licenciado use todos os Programas de Suporte apenas para suportar este Programa e sujeito a quaisquer limitações neste Contrato. Para os propósitos deste Item "f," um "Programa de Suporte" é um Programa que faz parte de outro Programa IBM ("Programa Principal") e identificado como um Programa de Suporte na LI do Programa Principal. (Para obter uma licença separada para um Programa de Suporte sem estas restrições, o Licenciado deve entrar em contato com a parte da qual obteve o Programa de Suporte). + +Esta licença é aplicável a cada cópia do Programa que o Licenciado fizer. + +3.1 Trocas ("Trade-ups"), Atualizações, Correções e Patches + +3.1.1 Trade-ups + +Se o Programa for substituído por um Programa trade-up, a licença do Programa substituído será imediatamente rescindida. + +3.1.2 Atualizações, Correções e Patches + +Quando o Licenciado recebe uma atualização, uma correção ou um patch para um Programa, aceita quaisquer termos adicionais ou diferentes que são aplicáveis a tal atualização, correção ou patch que são especificados em sua LI. Se nenhum termo adicional ou diferente for fornecido, então a atualização, a correção ou o patch estarão exclusivamente sujeitos a este Contrato. Se o Programa for substituído por uma atualização, o Licenciado concorda em interromper imediatamente o uso do Programa substituído. + +3.2 Licença de Prazo Fixo + +Se a IBM licenciar o Programa por um prazo fixo, a licença do Licenciado será rescindida ao final do prazo fixo, a menos que o Licenciado e a IBM concordem em renová-la. + +3.3 Termo e Rescisão + +Este Contrato permanece em vigor até a sua rescisão. + +A IBM pode rescindir a licença do Licenciado caso este falhe em cumprir com os termos deste Contrato. + +Se a licença for rescindida por qualquer motivo por qualquer uma das partes, o Licenciado concorda em interromper imediatamente o uso e destruir todas as cópias do Programa. Quaisquer termos deste Contrato que por sua natureza se estendam além do término deste Contrato permanecem em vigor até que sejam cumpridos e aplicam-se aos respectivos sucessores e cessionários de ambas as partes. + +4. Encargos + +Os encargos são baseados no Uso Autorizado obtido, que é especificado na PoE. A IBM não concede créditos ou reembolsos para encargos já devidos ou pagos, salvo se especificado de outra forma neste Contrato. + +Se o Licenciado desejar aumentar seu Uso Autorizado, deverá notificar a IBM ou um revendedor IBM autorizado com antecedência e pagar quaisquer encargos aplicáveis. + +5. Tributos + +Se qualquer autoridade impuser ao Programa um tributo, imposto, taxa ou contribuição, excluindo os baseados na renda líquida da IBM, o Licenciado concorda em pagar tais valores, conforme especificado em uma fatura ou fornecer documentos de isenção. O Licenciado é responsável por quaisquer tributos sobre a propriedade pessoal de cada Programa a partir da data que o obtiver. Se qualquer autoridade impuser um tributo, imposto, taxa ou contribuição aduaneira para a importação, exportação, transferência, acesso ou uso do Programa fora do país no qual o Licenciado original recebeu a concessão da licença, o Licenciado concorda que é responsável e pagará qualquer valor imposto. + +6. Garantia de Reembolso + +Se o Licenciado não estiver satisfeito com o Programa por qualquer motivo e for o Licenciado original, este pode rescindir a licença e obter um reembolso do valor pago pelo Programa, desde que devolva o Programa e a PoE para a parte da qual os obteve dentro de 30 dias da data em que a PoE foi emitida. Se a licença for para um prazo fixo que está sujeito a renovação, então o Licenciado poderá obter um reembolso apenas se o Programa e sua PoE forem devolvidos dentro dos primeiros 30 dias do prazo inicial. Se o Licenciado tiver transferido o Programa por download, deverá entrar em contato com a parte da qual o adquiriu para obter instruções sobre como obter o reembolso. + +7. Transferência do Programa + +O Licenciado pode transferir o Programa e todos os seus direitos de licença e obrigações para outra parte apenas se esta parte concordar com os termos deste Contrato. Se a licença for rescindida por qualquer motivo por qualquer uma das partes, o Licenciado está proibido de transferir o Programa para outra parte. O Licenciado não pode transferir uma parte 1) do Programa ou 2) o Uso Autorizado do Programa. Quando o Licenciado transferir o Programa, também deverá transferir uma cópia física deste Contrato, incluindo a LI e a PoE. Imediatamente após a transferência, a licença do Licenciado é rescindida. + +8. Garantia e Exclusões + +8.1 Garantia Limitada + +Durante um ano após o licenciamento ao Licenciado, a IBM garante que o Programa, quando utilizado em seu ambiente operacional especificado, estará de acordo com suas especificações. As especificações do Programa e as informações do ambiente operacional especificado podem ser encontradas na documentação que acompanha o Programa (tal como um arquivo "leia-me") ou outras informações publicadas pela IBM (tal como uma carta de anúncio). O Licenciado concorda que tal documentação e outro conteúdo do Programa pode ser fornecido apenas no idioma inglês, a menos que exigido de outra forma pela lei local, sem a possibilidade de renúncia ou limitação contratual. + +A garantia é aplicável somente à parte não-modificada do Programa. A IBM não garante a operação ininterrupta nem livre de erros do Programa, e também não garante que poderá corrigir todos os defeitos do Programa. O Licenciado é responsável pelos resultados obtidos do uso do Programa. + +Durante o Período de Garantia, a IBM fornece ao Licenciado acesso aos bancos de dados IBM contendo informações sobre defeitos conhecidos do Programa, correções de defeitos, restrições e medidas de contorno sem encargos adicionais. Consulte o documento IBM Software Support Handbook para obter informações adicionais no endereço www.ibm.com/software/support. + +Se o Programa não funcionar conforme garantido durante o primeiro ano após a aquisição da respectiva licença e a IBM não for capaz de fazê-lo funcionar, o Licenciado poderá devolver o Programa e sua PoE para a parte (seja a IBM ou seu revendedor) da qual os obteve e esta lhe reembolsará o valor pago pelo mesmo. Após retornar o Programa, a licença do Licenciado é rescindida. Se o Licenciado tiver transferido o Programa por download, deverá entrar em contato com a parte da qual o adquiriu para obter instruções sobre como obter o reembolso. + +8.2 Exclusões + +ESTAS GARANTIAS SÃO AS ÚNICAS GARANTIAS EXCLUSIVAS DO LICENCIADO E SUBSTITUEM TODAS AS DEMAIS GARANTIAS OU CONDIÇÕES, EXPRESSAS OU IMPLÍCITAS, INCLUINDO, MAS NÃO SE LIMITANDO, ÀS GARANTIAS IMPLÍCITAS OU CONDIÇÕES DE USO, QUALIDADE SATISFATÓRIA, ADEQUAÇÃO A UM FIM ESPECÍFICO, TÍTULO E QUALQUER GARANTIA OU CONDIÇÃO DE NÃO-VIOLAÇÃO. ALGUNS ESTADOS OU JURISDIÇÕES NÃO PERMITEM A EXCLUSÃO DE GARANTIAS EXPRESSAS OU IMPLÍCITAS, PORTANTO, A EXCLUSÃO ACIMA PODE NÃO SE APLICAR AO LICENCIADO. NESTE CASO, TAIS GARANTIAS ESTÃO LIMITADAS À DURAÇÃO DO PERÍODO DE GARANTIA. NENHUMA GARANTIA É APLICÁVEL APÓS TAL PERÍODO. ALGUNS ESTADOS OU JURISDIÇÕES NÃO PERMITEM LIMITAÇÕES SOBRE QUANTO DURA UMA GARANTIA IMPLÍCITA, PORTANTO A LIMITAÇÃO ACIMA PODE NÃO SE APLICAR AO LICENCIADO. + +ESTAS GARANTIAS FORNECEM AO LICENCIADO DIREITOS LEGAIS ESPECÍFICOS. O LICENCIADO TAMBÉM PODE TER OUTROS DIREITOS QUE VARIAM DE ESTADO PARA ESTADO OU DE JURISDIÇÃO PARA JURISDIÇÃO. + +AS GARANTIAS NESTA SEÇÃO 8 (GARANTIA E EXCLUSÕES) SÃO FORNECIDAS EXCLUSIVAMENTE PELA IBM. ENTRETANTO, AS RENÚNCIAS DE RESPONSABILIDADE NESTA SUBSEÇÃO 8.2 (EXCLUSÕES), TAMBÉM SÃO APLICÁVEIS AOS FORNECEDORES DE CÓDIGOS DE TERCEIROS DA IBM. TAIS FORNECEDORES FORNECEM TAL CÓDIGO SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO. ESTE PARÁGRAFO NÃO ANULA AS OBRIGAÇÕES DE GARANTIA DA IBM SOB ESTE CONTRATO. + +9. Dados e Bancos de Dados do Licenciado + +Para auxiliar o Licenciado no isolamento da causa de um problema com o Programa, a IBM pode solicitar que o Licenciado 1) permita que a IBM acesse seu sistema remotamente ou 2) envie informações ou dados do seu sistema para a IBM. Entretanto, a IBM não tem a obrigação de fornecer tal assistência, a menos que a IBM e o Licenciado estabeleçam um contrato por escrito e separado sob o qual a IBM concorde em fornecer ao Licenciado tal tipo de suporte, que está além das obrigações de garantia da IBM neste Contrato. Neste caso, a IBM utilizará informações sobre erros e problemas para aprimorar seus produtos e serviços, além de auxiliar com o fornecimento de ofertas de suporte relacionadas. Para estes propósitos, a IBM pode utilizar entidades e subcontratados da IBM (incluindo um ou mais países que não aquele no qual o Licenciado está localizado) e o Licenciado autoriza a IBM a fazê-lo. + +O Licenciado permanece responsável por 1) quaisquer dados e pelo conteúdo de qualquer banco de dados que disponibilize para a IBM, 2) pela seleção e implementação de procedimentos e controles relativos ao acesso, à segurança, à criptografia, ao uso e à transmissão de dados (incluindo quaisquer dados pessoalmente identificáveis) e 3) pelo "backup" e pela recuperação de qualquer banco de dados e quaisquer dados armazenados. O Licenciado não enviará ou fornecerá à IBM acesso a quaisquer informações pessoalmente identificáveis, seja no formato de dados ou em qualquer outro formato e será responsável pelas despesas razoáveis e outros valores que a IBM possa incorrer em relação a qualquer uma destas informações erroneamente fornecidas para a IBM ou pela perda ou divulgação de tais informações pela IBM, incluindo aqueles valores decorrentes de qualquer reclamação de terceiros. + +10. Limitação de Responsabilidade + +Exceto conforme expressamente exigido por lei, sem possibilidade de renúncia contratual, o Licenciado e a IBM concordam que a limitação de responsabilidade desta Seção 10 (Limitação de Responsabilidade) aplica-se a danos resultantes de quaisquer tipos de ações judiciais e reivindicações. Se qualquer limitação ou exclusão de responsabilidade estabelecida nesta seção for considerada nula ou sem efeito em Juízo em um caso específico, as partes concordam que as disposições desta seção permanecerão aplicáveis para as demais reivindicações sob esta seção. + +10.1 Itens pelos Quais a IBM Pode Ser Responsável + +Podem ocorrer circunstâncias em que o Licenciado possa reivindicar ressarcimentos por danos causados pela IBM sob este Contrato. Independentemente do fundamento que faculta o Licenciado a reivindicar ressarcimentos por danos causados pela IBM, a responsabilidade total da IBM pela soma de todas as demandas advindas de ou relacionadas a cada Programa ou de outra forma oriunda deste Contrato não excederá o valor de quaisquer 1) danos por lesão corporal (inclusive morte) e danos a bens móveis e imóveis e 2) outros danos reais diretos até o limite dos encargos que o Licenciado pagou pelo Programa que é o objeto da demanda. Na hipótese de encargos de prazo fixo serão considerados os valores relativos aos últimos 12 (doze) meses. + +Este limite também se aplica a qualquer desenvolvedor e fornecedor de Programas da IBM. É o máximo pelo qual a IBM e seus desenvolvedores e fornecedores de Programas são coletivamente responsáveis. + +10.2 Itens Pelos Quais a IBM Não Se Responsabiliza + +EXCETO CONFORME EXPRESSAMENTE EXIGIDO POR LEI, SEM POSSIBILIDADE DE RENÚNCIA CONTRATUAL, A IBM, SEUS DESENVOLVEDORES OU FORNECEDORES DE PROGRAMAS NÃO SERÃO RESPONSÁVEIS, EM QUALQUER CIRCUNSTÂNCIA, POR QUALQUER DAS SEGUINTES HIPÓTESES, AINDA QUE TENHAM SIDO INFORMADOS SOBRE TAIS POSSIBILIDADES: + +a. PERDA DE OU DANOS A DADOS; + +b. DANOS INDIRETOS; OU + +c. LUCROS CESSANTES. + +11. Verificação de Adequação + +Para os propósitos desta Seção 11 (Verificação de Adequação), "Termos do Programa IPLA" significam 1) este Contrato e os termos de aditamento e os documentos de transação aplicáveis fornecidos pela IBM e 2) políticas de software IBM que podem ser localizados no "Web site" IBM Software Policy (www.ibm.com/softwarepolicies), incluindo mas não se limitando a tais políticas relativas a "backup", preços de sub-capacidade e migração. + +Os direitos e obrigações estabelecidos nesta Seção 11 permanecem em efeito durante o período em que o Programa está licenciado ao Licenciado e por dois anos após esse período. + +11.1 Processo de Verificação + +O Licenciado concorda em criar, reter e fornecer à IBM e aos seus auditores registros precisos e por escrito, relatórios de ferramentas de sistema e outras informações de sistema que sejam suficientes para possibilitar a verificação auditável de que o uso de todos os Programas pelo Licenciado esteja adequado com os Termos do Programa IPLA, incluindo, sem limitação, todos os termos aplicáveis de licenciamento e de qualificação de preços da IBM. O Licenciado é responsável por 1) garantir que não excederá seu Uso Autorizado e 2) permanecerá em conformidade com os Termos do Programa IPLA. + +Mediante notificação com prazo razoável, a IBM poderá verificar a adequação do Licenciado aos Termos do Programa IPLA em todos os locais e para todos os ambientes no qual o Licenciado usa (para qualquer propósito) Programas sujeito aos Termos do Programa IPLA. Esta verificação será realizada nas instalações do Cliente durante o seu horário comercial e de forma a minimizar o impacto nos negócios do Licenciado. A IBM pode usar um auditor independente para fazer esta verificação, desde que a IBM e o auditor tenham assinado um contrato de confidencialidade. + +11.2 Resolução + +A IBM notificará o Licenciado por escrito se qualquer uma destas verificações indicar que o Licenciado utilizou qualquer Programa além de seu Uso Autorizado ou de qualquer outra forma, não estiver em conformidade com os Termos do Programa IPLA. O Licenciado concorda em pagar imediatamente e diretamente à IBM pelos encargos que a IBM especificar em uma fatura por 1) qualquer uso em excesso, 2) suporte para tal uso em excesso para o menor período entre a duração de tal uso em excesso ou dois anos e 3) quaisquer encargos adicionais e outras obrigações, apurados como resultado de tal verificação. + +12. Aviso de Terceiros + +O Programa pode incluir código de terceiros que a IBM, e não o terceiro, licencia para o Licenciado sob este Contrato. Os Avisos, se houver algum, para o código de terceiros ("Avisos de Terceiros") são incluídos apenas para informação do Licenciado. Estes avisos podem ser localizados no(s) arquivo(s) NOTICES do Programa. Informações sobre como obter o código fonte para determinado código de terceiros podem ser encontradas nos Avisos de Terceiros. Se nos Avisos de Terceiros, a IBM identificar o código de terceiros como "Código de Terceiros Modificável," a IBM autoriza o Licenciado a 1) modificar o Código de Terceiros Modificável e 2) reverter a engenharia dos módulos do Programa que estabelecem interface diretamente com o Código de Terceiros Modificável contanto que seja apenas com o propósito de depurar as modificações do Licenciado em tal código de terceiros. As obrigações de serviço e suporte da IBM, se houver, aplicam-se apenas ao Programa não-modificado. + +13. Geral + +a. Nada neste Contrato afeta quaisquer direitos legais dos consumidores que não sejam passíveis de renúncia ou limitação contratual. + +b. Em relação a Programas que a IBM fornece ao Licenciado por meio de mídia (forma tangível), a IBM terá cumprido suas obrigações de remessa e envio mediante a entrega de tais Programas à transportadora designada pela IBM, salvo se acordado de outra forma por escrito entre o Licenciado e a IBM. + +c. Se qualquer provisão deste Contrato for considerada inválida ou inexequível, as demais provisões deste Contrato permanecerão totalmente em pleno vigor e efeito. + +d. O Licenciado concorda em cumprir com todas as leis e regulamentos de exportação e importação aplicáveis, incluindo regulamentos de embargo e sanções e proibições dos Estados Unidos relativos à exportação para certos usos finais ou certos usuários. + +e. O Licenciado autoriza a International Business Machines Corporation e suas subsidiárias (e seus sucessores e cessionários, contratados e Parceiros Comerciais IBM) a armazenar e usar informações de contato comercial do Licenciado em qualquer lugar em que conduzam negócios, com relação a produtos e serviços IBM ou na promoção do relacionamento comercial da IBM com o Licenciado. + +f. Cada uma das partes concederá à outra oportunidade razoável para cumprir suas obrigações sob este Contrato antes de reclamar seu cumprimento. As partes tentarão resolver de boa-fé todas as disputas, discordâncias ou demandas entre elas relativas a este Contrato. + +g. Os prazos prescricionais observarão o disposto nos artigos 205 e 206 do Código Civil Brasileiro, Lei nº 10.406 de 10 de janeiro de 2002. + +h. Nenhuma das partes é responsável por falhas no cumprimento de quaisquer obrigações devido a causas fora do seu controle. + +i. Este Contrato não criará quaisquer ações judiciais e reivindicações para qualquer terceiro, nem a IBM será responsável por quaisquer demandas de terceiros contra o Licenciado, exceto conforme permitido na Subseção 10.1 (Itens pelo Quais a IBM Pode Ser Responsável) acima para lesões corporais (incluindo morte) ou danos a bens móveis ou imóveis pelos quais a IBM seja legalmente responsável perante aquele terceiro. Desta forma, o Licenciado não poderá requerer responsabilidades da IBM por danos que o Licenciado vier incorrer em razão de reivindicações de terceiros. + +j. Ao celebrar este Contrato, nenhuma das partes está se baseando em qualquer declaração que não esteja especificada neste Contrato, incluindo, sem se limitar a, qualquer declaração relativa: 1) ao desempenho ou funcionalidade do Programa, que não tenha sido expressamente garantido na Seção 8 (Garantia e Exclusões) acima; 2) às experiências ou recomendações de outras partes; ou 3) a quaisquer resultados ou economias que o Licenciado possa obter. + +k. A IBM assinou contratos com algumas organizações (denominadas "Parceiros Comerciais IBM") para promover, comercializar e prestar suporte a determinados Programas. Os Parceiros Comerciais IBM permanecem independentes e separados da IBM. A IBM não é responsável por ações ou declarações dos Parceiros Comerciais ou por quaisquer obrigações destes com o Licenciado. + +l. Os termos da licença e da indenização da propriedade intelectual de outros contratos do Licenciado com a IBM (tal como o Contrato de Produtos e Serviços IBM) não se aplicam às licenças do Programa concedidas sob este Contrato. + +14. Escopo Geográfico e Legislação Aplicável + +14.1 Legislação Aplicável + +Ambas as partes concordam com a aplicação das leis do país no qual o Licenciado obteve a licença do Programa para reger, interpretar e executar todos os direitos, deveres e obrigações do Licenciado e da IBM decorrentes de ou relacionados de qualquer maneira ao objeto deste Contrato, não obstante conflitos de princípios legais. + +A Convenção das Nações Unidas não se aplica nos Contratos para Venda Internacional de Bens. + +14.2 Jurisdição + +Todos os direitos, deveres e obrigações estão sujeitos aos tribunais do país no qual o Licenciado obteve a licença do Programa. + +Parte 2 - Termos Exclusivos do País + +Para licenças concedidas nos países especificados abaixo, os termos a seguir substituem ou modificam os termos citados na Parte 1. Todos os termos na Parte 1 que não são alterados por estes termos de aditamento permanecem inalterados e em vigor. Esta Parte 2 é organizada da seguinte forma: + +* Termos de aditamento para a Parte 1, Seção 14 (Legislação Aplicável e Jurisdição) de vários países; + +* Termos de aditamento para outros termos do Contrato de países das Américas; e + +* Termos de aditamento para outros termos do Contrato de países da Europa, Oriente Médio e África. + +Termos de aditamento para a Parte 1, Seção 14 (Legislação Aplicável e Jurisdição) de vários países + +14.1 Legislação Aplicável + +A frase "as leis do país no qual o Licenciado obteve a licença do Programa" no primeiro parágrafo de 14.1 Lei Aplicável é substituída pelas seguintes frases nos países abaixo: + +EUROPA, ORIENTE MÉDIO E ÁFRICA + +(1) na Guiné-Bissau: as leis da França; e + +(2) em Angola e em Moçambique: as leis da Inglaterra. + +14.2 Jurisdição + +O seguinte parágrafo é relativo à jurisdição e substitui a Subseção 14.2 (Jurisdição) já que é aplicável a tais países identificados abaixo: + +Todos os direitos, deveres e obrigações estão sujeitos aos tribunais do país no qual o Licenciado obteve a licença do Programa, exceto nos países identificados abaixo, nos quais todas as disputas decorrentes ou relacionados a este Contrato, incluindo procedimentos sumários, serão iniciados e estarão sujeitos à jurisdição exclusiva dos seguintes tribunais da jurisdição competente: + +AMÉRICAS + +(1) no Brasil: As partes elegem o foro central da cidade do Rio de Janeiro, estado do Rio de Janeiro, para dirimir questões advindas deste Contrato; + +EUROPA, ORIENTE MÉDIO E ÁFRICA + +(2) na Guiné-Bissau: o Tribunal Comercial de Paris; + +(3) em Angola, Moçambique, São Tomé e Príncipe: os tribunais da Inglaterra; + +(4) em Portugal: os tribunais de Lisboa. + +TERMOS DE ADITAMENTO DE PAÍSES DA EMEA (EUROPA, ORIENTE MÉDIO, ÁFRICA) + +ESTADOS MEMBROS DA UNIÃO EUROPEIA + +8. Garantia e Exclusões + +O seguinte é incluído na Seção 8 (Garantia e Exclusão): + +Na União Europeia ("EU"), os consumidores possuem direitos legais sob a legislação nacional aplicável que rege a venda de bens de consumo. Tais direitos não são afetados pelas provisões definidas nesta Seção 8 Garantia e Exclusões. O escopo territorial da Garantia Limitada é mundial. + +13. Geral + +O seguinte substitui o Item 13.e: + +(1) Definições - Para os propósitos deste Item 13.e, as seguintes definições adicionais são aplicáveis: + +(a) Informação de Contacto Comercial - significa informação de contacto de caráter comercial divulgada pelo Licenciado à IBM, incluindo nomes, títulos profissionais, endereços profissionais, números de telefone e endereços de e-mail dos empregados e subcontratados do Licenciado. Para Áustria, Itália e Suíça, a Informação de Contacto Comercial também inclui informação sobre a Licença e seus subcontratados como pessoas jurídicas (por exemplo, dados da receita da Licença e outra informação transaccional) + +(b) Pessoal de Contato Comercial - funcionários e contratados do Licenciado aos quais as Informações de Contato Comercial se relacionam. + +(c) Autoridade de Proteção de Dados - a autoridade estabelecida pela Legislação de Proteção de Dados e Comunicações de Dados no país aplicável, ou para países não pertencentes à EU, a autoridade responsável pela supervisão de dados pessoais em tal país ou (para qualquer um dos anteriores) qualquer entidade sucessora convenientemente apontada para isso. + +(d) Legislação de Proteção de Dados e Comunicações Eletrônicas - (i) a legislação e os regulamentos locais aplicáveis em vigor que implementam os requisitos da EU Directive 95/46/EC (na proteção de indivíduos com relação ao processamento de dados pessoais na livre movimentação de tais dados) e da EU Directive 2002/58/EC (relativa ao processamento de dados pessoais e a proteção da privacidade no setor de comunicações eletrônicas); ou (ii) para países não pertencentes à EU, a legislação e/ou os regulamentos transmitidos no país aplicável em relação à proteção de dados pessoais e o regulamento das comunicações eletrônicas envolvendo dados pessoais, incluindo (para qualquer um dos anteriores) qualquer substituição ou modificação estatutária. + +(e) Grupo IBM - International Business Machines Corporation de Armonk, Nova York, EUA, suas subsidiárias e seus respectivos Parceiros Comerciais e subcontratados. + +(2) O Licenciado autoriza a IBM: + +(a) a processar e utilizar Informações de Contato Comercial no Grupo IBM no suporte do Licenciado, incluindo o fornecimento de serviços de suporte e para o propósito do favorecimento do relacionamento de negócios entre o Licenciado e o Grupo IBM, incluindo, sem limitação, entrar em contato com o Pessoal de Contato Comercial (por e-mail ou de qualquer outra forma) e comercializar produtos e serviços do Grupo IBM (o "Propósito Especificado"); e + +(b) divulgar Informações de Contato Comercial para outros membros do Grupo IBM apenas em busca do Propósito Especificado. + +(3) A IBM concorda que todas as Informações de Contato Comercial serão processadas de acordo com a Legislação de Proteção de Dados e Comunicações Eletrônicas e serão utilizadas apenas para o Propósito Especificado. + +(4) Até o limite exigido pela Legislação de Proteção de Dados e Comunicações Eletrônicas, o Licenciado declara que (a) obteve (ou obterá) quaisquer consentimentos do (e que emitiu (ou emitirá) quaisquer avisos para) Pessoal de Contato Comercial conforme necessários para possibilitar que o Grupo IBM processe e utilize as Informações de Contato Comercial para o Propósito Especificado. + +(5) O Licenciado autoriza a IBM a transferir Informações de Contato Comercial fora da Área Econômica Europeia, contanto que a transferência seja feita em termos contratuais aprovados pela Autoridade de Proteção de Dados ou que a transferência seja de qualquer outra forma permitida sob a Legislação de Proteção de Dados e Comunicações Eletrônicas. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_ru b/charts/mq-advancedserver/LICENSE_locale/LICENSE_ru new file mode 100644 index 0000000..aa79ce4 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_ru @@ -0,0 +1,1173 @@ +·°¼µÇ°½¸µ + +² ÝÐáâÞïéØÙ ÔÞÚãÜÕÝâ ÒÚÛîçÕÝë ÔÞÚãÜÕÝâë á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ÔÛï ÝÕáÚÞÛìÚØå ¿àÞÓàÐÜÜ. ² ÚÐÖÔÞÜ ÔÞÚãÜÕÝâÕ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ãÚÐ×ÐÝÐ ¿àÞÓàÐÜÜÐ, Ú ÚÞâÞàÞÙ ÞÝ ÞâÝÞáØâáï. ¿àØÜÕÝïîâáï âÞÛìÚÞ ÔÞÚãÜÕÝâë á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ÔÛï âÕå ¿àÞÓàÐÜÜ, ÔÛï ÚÞâÞàëå »ØæÕÝרÐâ ßàØÞÑàÕÛ àÐ×àÕèÕÝØï. + + +============================================== + + +²°¶½¾: ¿À¾Ç¸µ ²½¸¼°Âµ»Ì½¾ + +½ØÖÕ ßàÕÔáâÐÒÛÕÝë ÔÒÐ ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØï. + +1. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ +2. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ßàÞØ×ÒÞÔáâÒÕÝÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï (ÝÕ ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ. + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ (áÞÒÜÕáâÝÞ ØÜÕÝãÕÜëå "¾æÕÝÚÐ"): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï (i) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ ("»ØæÕÝרï ÝÐ ¾æÕÝÚã") Ø (ii) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA"). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã ßàØÜÕÝïÕâáï Ò âÕçÕÝØÕ áàÞÚÐ ¾æÕÝÚØ »ØæÕÝרÐâÐ. + +IPLA ÑãÔÕâ ÐÒâÞÜÐâØçÕáÚØ ßàØÜÕÝïâìáï, ÕáÛØ »ØæÕÝרÐâ àÕèØâ áÞåàÐÝØâì ¿àÞÓàÐÜÜã ßÞáÛÕ ÞÚÞÝçÐÝØï ßÕàØÞÔÐ ¾æÕÝÚØ (ØÛØ ßÞÛãçØâì ÔÞßÞÛÝØâÕÛìÝëÕ ÚÞßØØ ¿àÞÓàÐÜÜë ÔÛï ØáßÞÛì×ÞÒÐÝØï ßÞáÛÕ ÞÚÞÝçÐÝØï ¾æÕÝÚØ), ×ÐÚÛîçØÒ áÞÓÛÐèÕÝØÕ Þ ßàØÞÑàÕâÕÝØØ (ÝÐßàØÜÕà, ¼ÕÖÔãÝÐàÞÔÝÞÕ áÞÓÛÐèÕÝØÕ IBM Passport Advantage ØÛØ ÁÞÓÛÐèÕÝØÕ IBM Passport Advantage Express). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã Ø IPLA ÝÕ ÔÕÙáâÒãîâ ÞÔÝÞÒàÕÜÕÝÝÞ; ÝØ ÞÔÝÞ Ø× íâØå áÞÓÛÐèÕÝØÙ ÝÕ Ø×ÜÕÝïÕâ ãáÛÞÒØÙ ÔàãÓÞÓÞ; Ø ÚÐÖÔÞÕ áÞÓÛÐèÕÝØÕ ÝÕ ×ÐÒØáØâ Þâ ÔàãÓÞÓÞ. + +¿ÞÛÝëÙ âÕÚáâ ÞÑÞØå ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØÙ ßàØÒÞÔØâáï ÝØÖÕ. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ (Z125-5543-05). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë (½ÞÜÕà ¿àÞÓàÐÜÜë): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +ÁÛÕÔãîéØÕ áâÐÝÔÐàâÝëÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +¿ÕàØÞÔ ¾æÕÝÚØ + +¿ÕàØÞÔ ÞæÕÝÚØ ÝÐçØÝÐÕâáï Ò ÔÐâã, ÚÞÓÔÐ »ØæÕÝרÐâ áÞÓÛÐèÐÕâáï á ãáÛÞÒØïÜØ ÔÐÝÝÞÓÞ ÁÞÓÛÐèÕÝØï, Ø ×ÐÚÐÝçØÒÐÕâáï çÕàÕ× 90 ÔÝÕÙ. + +²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë + +¿àÞÓàÐÜÜÐ ÛØæÕÝרàãÕâáï ÚÐÚ ßÐÚÕâ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ Ø ÒÚÛîçÐÕâ ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë, ãÚÐ×ÐÝÝëÕ ÝØÖÕ. »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÐÒÛØÒÐâì Ø ØáßÞÛì×ÞÒÐâì âÐÚØÕ ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë âÞÛìÚÞ ÔÛï ßÞÔÔÕàÖÚØ ØáßÞÛì×ÞÒÐÝØï »ØæÕÝרÐâÞÜ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë Ò áÞÞâÒÕâáâÒØØ á ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ Ø Ò ßàÕÔÕÛÐå ÁÒØÔÕâÕÛìáâÒ Þ ¿àÐÒÐå ÝÐ ¿àÞÓàÐÜÜã (ÕáÛØ ÑÞÛÕÕ èØàÞÚØÕ ßàÐÒÐ ÝÕ ßàÕÔÞáâÐÒÛÕÝë ÔàãÓØÜØ ßÞÛÞÖÕÝØïÜØ ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ). ÄàÐ×Ð "ÔÛï ßÞÔÔÕàÖÚØ ØáßÞÛì×ÞÒÐÝØï »ØæÕÝרÐâÞÜ" ßÞÔàÐ×ãÜÕÒÐÕâ âÞÛìÚÞ âÐÚØÕ áßÞáÞÑë ØáßÞÛì×ÞÒÐÝØï, ÚÞâÞàëÕ ÝÕÞÑåÞÔØÜë ÔÛï ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ÝÕßÞáàÕÔáâÒÕÝÝÞ áÒï×ÐÝë á ÛØæÕÝרÞÝÝëÜ ØáßÞÛì×ÞÒÐÝØÕÜ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë ØÛØ ÔàãÓÞÙ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë. ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë ÝÕ ÔÞÛÖÝë ØáßÞÛì×ÞÒÐâìáï ÔÛï ÚÐÚÞÙ-ÛØÑÞ ÔàãÓÞÙ æÕÛØ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ßÕàÕÔÐÒÐâì ØÛØ ßÕàÕßàÞÔÐÒÐâì ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë ÞâÔÕÛìÝÞ Þâ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë. º ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜÕ ÜÞÓãâ ßàØÛÐÓÐâìáï ÛØæÕÝרÞÝÝëÕ ßÞÛÞÖÕÝØï, Ø íâØ ßÞÛÞÖÕÝØï, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ßàØÜÕÝïîâáï Ú ØáßÞÛì×ÞÒÐÝØî »ØæÕÝרÐâÞÜ âÐÚÞÙ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë. ² áÛãçÐÕ ßàÞâØÒÞàÕçØÙ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ×ÐÜÕÝïîâ áÞÑÞÙ ßÞÛÞÖÕÝØï ÔÛï ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë. ºÞÓÔÐ ßàÐÒÞ »ØæÕÝרÐâÐ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ØáâÕÚÐÕâ ØÛØ ßàÕÚàÐéÐÕâáï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÕàÕáâÐâì ØáßÞÛì×ÞÒÐâì, ãÝØçâÞÖØâì ØÛØ ÝÕ×ÐÜÕÔÛØâÕÛìÝÞ ÒÕàÝãâì ÒáÕ ÚÞßØØ ²áßÞÜÞÓÐâÕÛìÝëå ¿àÞÓàÐÜÜ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ ÞÝ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÛãçØâì ÛØæÕÝרî ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ²áßÞÜÞÓÐâÕÛìÝëå ¿àÞÓàÐÜÜ áÒÕàå ßàÕÔÕÛÞÒ, ãÚÐ×ÐÝÝëå ÒëèÕ, ÞÑàÐéÐÙâÕáì Ú ¿àÕÔáâÐÒØâÕÛî IBM ßÞ ¿àÞÔÐÖÐÜ ØÛØ Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, çâÞÑë ßÞÛãçØâì áÞÞâÒÕâáâÒãîéãî ÛØæÕÝרî. + +½ØÖÕßÕàÕçØáÛÕÝÝÞÕ ïÒÛïÕâáï ²áßÞÜÞÓÐâÕÛìÝëÜØ ¿àÞÓàÐÜÜÐÜØ, ÛØæÕÝרàãÕÜëÜØ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ: +IBM WebSphere Application Server Liberty V17.0 + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ (Z125-3301-14). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë (½ÞÜÕà ¿àÞÓàÐÜÜë): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +ÁÛÕÔãîéØÕ áâÐÝÔÐàâÝëÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +¿àÐÒÞ ÝÐ ÞÓàÐÝØçÕÝÝÞÕ ØáßÞÛì×ÞÒÐÝØÕ + +ºÐÚ ãÚÐ×ÐÝÞ Ò ¼ÕÖÔãÝÐàÞÔÝÞÜ »ØæÕÝרÞÝÝÞÜ ÁÞÓÛÐèÕÝØØ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA") Ø ÝÐáâÞïéÕÙ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ, IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÞÓàÐÝØçÕÝÝÞÕ ßàÐÒÞ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. ÍâÞ ßàÐÒÞ ÞÓàÐÝØçØÒÐÕâáï ãàÞÒÝÕÜ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ÝÐßàØÜÕà, µÔØÝØæÐÜØ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ ("PVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ÀÕáãàáÞÒ ("RVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ("VU") ØÛØ ÔàãÓØÜ ãÚÐ×ÐÝÝëÜ ãàÞÒÝÕÜ ØáßÞÛì×ÞÒÐÝØï, ÞßÛÐçÕÝÝëÜ »ØæÕÝרÐâÞÜ, ÚÐÚ ïÒáâÒãÕâ Ø× ÁÒØÔÕâÕÛìáâÒÐ Þ ¿àÐÒÐå. ¸áßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ ÜÞÖÕâ âÐÚÖÕ Ñëâì ÞÓàÐÝØçÕÝÞ ÞßàÕÔÕÛÕÝÝÞÙ ÜÐèØÝÞÙ ØÛØ ØáßÞÛì×ÞÒÐÝØÕÜ âÞÛìÚÞ Ò ÚÐçÕáâÒÕ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë ÛØÑÞ ÜÞÖÕâ ßÞÔßÐÔÐâì ßÞÔ ÔàãÓØÕ ÞÓàÐÝØçÕÝØï. ¿ÞáÚÞÛìÚã »ØæÕÝרÐâ ÞßÛÐâØÛ ÝÕ Òáî íÚÞÝÞÜØçÕáÚãî áâÞØÜÞáâì ¿àÞÓàÐÜÜë, ÝØÚÐÚÞÕ ÔàãÓÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÝÕ àÐ×àÕèÐÕâáï ÑÕ× ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ. ºàÞÜÕ âÞÓÞ, »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï ßàÕÔÞáâÐÒÛÕÝØï ÚÞÜÜÕàçÕáÚØå ¸Â-ãáÛãÓ ÚÐÚÞÜã-ÛØÑÞ âàÕâìÕÜã ÛØæã, ÔÛï ÞáãéÕáâÒÛÕÝØï ÚÞÜÜÕàçÕáÚÞÓÞ åÞáâØÝÓÐ ØÛØ ØáßÞÛì×ÞÒÐÝØï Ò àÕÖØÜÕ àÐ×ÔÕÛÕÝØï ÒàÕÜÕÝØ, Ð âÐÚÖÕ ÝÕ àÐ×àÕèÐÕâáï áãÑÛØæÕÝרàÞÒÐâì ¿àÞÓàÐÜÜã, áÔÐÒÐâì ÕÕ Ò ÐàÕÝÔã ØÛØ ÛØ×ØÝÓ, ÕáÛØ íâÞ ïÒÝÞ ÝÕ ãÚÐ×ÐÝÞ Ò áÞÞâÒÕâáâÒãîéØå áÞÓÛÐèÕÝØïå, ÝÐ ÞáÝÞÒÐÝØØ ÚÞâÞàëå »ØæÕÝרÐâ ßÞÛãçÐÕâ àÐ×àÕèÕÝØÕ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. »ØæÕÝרÐâ ÜÞÖÕâ ßÞÛãçÐâì ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ Ò àÕ×ãÛìâÐâÕ ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ ØÛØ ÝÐ ÞáÝÞÒÐÝØØ ÔÞßÞÛÝØâÕÛìÝëå ãáÛÞÒØÙ. IBM ÞáâÐÒÛïÕâ ×Ð áÞÑÞÙ ßàÐÒÞ ÞßàÕÔÕÛïâì, áâÞØâ ÛØ ßàÕÔÞáâÐÒÛïâì »ØæÕÝרÐâã âÐÚØÕ ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ. + +ÁßÕæØäØÚÐæØØ + +ÁßÕæØäØÚÐæØØ ¿àÞÓàÐÜÜë ÜÞÖÝÞ ÝÐÙâØ Ò ÞÑêÕÔØÝÕÝÝëå àÐ×ÔÕÛÐå "¾ßØáÐÝØÕ Ø âÕåÝØçÕáÚÐï ØÝäÞàÜÐæØï" ¾ÑêïÒÛÕÝØÙ Þ ÒëßãáÚÕ ¿àÞÓàÐÜÜë. + +²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë + +¿àÞÓàÐÜÜÐ ÛØæÕÝרàãÕâáï ÚÐÚ ßÐÚÕâ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ Ø ÒÚÛîçÐÕâ ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë, ãÚÐ×ÐÝÝëÕ ÝØÖÕ. »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÐÒÛØÒÐâì Ø ØáßÞÛì×ÞÒÐâì âÐÚØÕ ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë âÞÛìÚÞ ÔÛï ßÞÔÔÕàÖÚØ ØáßÞÛì×ÞÒÐÝØï »ØæÕÝרÐâÞÜ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë Ò áÞÞâÒÕâáâÒØØ á ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ Ø Ò ßàÕÔÕÛÐå ÁÒØÔÕâÕÛìáâÒ Þ ¿àÐÒÐå ÝÐ ¿àÞÓàÐÜÜã (ÕáÛØ ÑÞÛÕÕ èØàÞÚØÕ ßàÐÒÐ ÝÕ ßàÕÔÞáâÐÒÛÕÝë ÔàãÓØÜØ ßÞÛÞÖÕÝØïÜØ ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ). ÄàÐ×Ð "ÔÛï ßÞÔÔÕàÖÚØ ØáßÞÛì×ÞÒÐÝØï »ØæÕÝרÐâÞÜ" ßÞÔàÐ×ãÜÕÒÐÕâ âÞÛìÚÞ âÐÚØÕ áßÞáÞÑë ØáßÞÛì×ÞÒÐÝØï, ÚÞâÞàëÕ ÝÕÞÑåÞÔØÜë ÔÛï ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ÝÕßÞáàÕÔáâÒÕÝÝÞ áÒï×ÐÝë á ÛØæÕÝרÞÝÝëÜ ØáßÞÛì×ÞÒÐÝØÕÜ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë ØÛØ ÔàãÓÞÙ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë. ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë ÝÕ ÔÞÛÖÝë ØáßÞÛì×ÞÒÐâìáï ÔÛï ÚÐÚÞÙ-ÛØÑÞ ÔàãÓÞÙ æÕÛØ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ßÕàÕÔÐÒÐâì ØÛØ ßÕàÕßàÞÔÐÒÐâì ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë ÞâÔÕÛìÝÞ Þâ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë. º ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜÕ ÜÞÓãâ ßàØÛÐÓÐâìáï ÛØæÕÝרÞÝÝëÕ ßÞÛÞÖÕÝØï, Ø íâØ ßÞÛÞÖÕÝØï, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ßàØÜÕÝïîâáï Ú ØáßÞÛì×ÞÒÐÝØî »ØæÕÝרÐâÞÜ âÐÚÞÙ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë. ² áÛãçÐÕ ßàÞâØÒÞàÕçØÙ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ×ÐÜÕÝïîâ áÞÑÞÙ ßÞÛÞÖÕÝØï ÔÛï ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë. ºÞÓÔÐ ßàÐÒÞ »ØæÕÝרÐâÐ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ØáâÕÚÐÕâ ØÛØ ßàÕÚàÐéÐÕâáï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÕàÕáâÐâì ØáßÞÛì×ÞÒÐâì, ãÝØçâÞÖØâì ØÛØ ÝÕ×ÐÜÕÔÛØâÕÛìÝÞ ÒÕàÝãâì ÒáÕ ÚÞßØØ ²áßÞÜÞÓÐâÕÛìÝëå ¿àÞÓàÐÜÜ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ ÞÝ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÛãçØâì ÛØæÕÝרî ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ²áßÞÜÞÓÐâÕÛìÝëå ¿àÞÓàÐÜÜ áÒÕàå ßàÕÔÕÛÞÒ, ãÚÐ×ÐÝÝëå ÒëèÕ, ÞÑàÐéÐÙâÕáì Ú ¿àÕÔáâÐÒØâÕÛî IBM ßÞ ¿àÞÔÐÖÐÜ ØÛØ Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, çâÞÑë ßÞÛãçØâì áÞÞâÒÕâáâÒãîéãî ÛØæÕÝרî. + +½ØÖÕßÕàÕçØáÛÕÝÝÞÕ ïÒÛïÕâáï ²áßÞÜÞÓÐâÕÛìÝëÜØ ¿àÞÓàÐÜÜÐÜØ, ÛØæÕÝרàãÕÜëÜØ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ: +IBM WebSphere Application Server Liberty V17.0 + +ºÞÜßÞÝÕÝâë, ÚÞâÞàëÕ ÝÕ ØáßÞÛì×ãîâáï ÔÛï ßÞÛãçÕÝØï âàÕÑãÕÜëå àÐ×àÕèÕÝØÙ + +¿àØ ÞßàÕÔÕÛÕÝØØ ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ãáâÐÝÞÒÚØ ØÛØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ, ãçØâëÒÐÕâáï ãáâÐÝÞÒÚÐ ØÛØ ØáßÞÛì×ÞÒÐÝØÕ áÛÕÔãîéØå ÚÞÜßÞÝÕÝâÞÒ ¿àÞÓàÐÜÜë. ´àãÓØÜØ áÛÞÒÐÜØ, »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÞÒØâì Ø ØáßÞÛì×ÞÒÐâì áÛÕÔãîéØÕ ÚÞÜßÞÝÕÝâë ¿àÞÓàÐÜÜë á áÞÑÛîÔÕÝØÕÜ ãáÛÞÒØÙ ÛØæÕÝרØ, ÞÔÝÐÚÞ íâØ ÚÞÜßÞÝÕÝâë ÝÕ ØáßÞÛì×ãîâáï ÔÛï ÞßàÕÔÕÛÕÝØï ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ¿àÞÓàÐÜÜë. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë + +µáÛØ ¿àÞÓàÐÜÜÐ áÞÔÕàÖØâ ÚÞÜßÞÝÕÝâë, ÚÞâÞàëÕ ïÒÛïîâáï ÀÐáßàÞáâàÐÝïÕÜëÜØ ÍÛÕÜÕÝâÐÜØ, âÞ ÞÝØ ÑãÔãâ ãÚÐ×ÐÝë Ò äÐÙÛÕ REDIST, ßàØÛÐÓÐÕÜÞÜ Ú ¿àÞÓàÐÜÜÕ. ² ÔÞßÞÛÝÕÝØÕ Ú ÛØæÕÝרÞÝÝëÜ ßàÐÒÐÜ, ßàÕÔÞáâÐÒÛÕÝÝëÜ Ò àÐÜÚÐå ÁÞÓÛÐèÕÝØï, »ØæÕÝרÐâ ØÜÕÕâ ßàÐÒÞ àÐáßàÞáâàÐÝïâì ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ: +1) ÀÐáßàÞáâàÐÝÕÝØÕ ÔÞÛÖÝÞ ßàÞØ×ÒÞÔØâìáï âÞÛìÚÞ Ò ÒØÔÕ ÞÑêÕÚâÝÞÓÞ ÚÞÔÐ Ø ÔÞÛÖÝÞ áÞÞâÒÕâáâÒÞÒÐâì ÒáÕÜ ãÚÐ×ÐÝØïÜ, ØÝáâàãÚæØïÜ Ø áßÕæØäØÚÐæØïÜ, ÚÞâÞàëÕ ßàØÒÕÔÕÝë Ò ßàØÛÐÓÐÕÜÞÜ Ú ¿àÞÓàÐÜÜÕ äÐÙÛÕ REDIST ØÛØ Ò ÔÞÚãÜÕÝâÐæØØ. +2) µáÛØ ßàØÛÐÓÐÕÜÐï Ú ¿àÞÓàÐÜÜÕ ÔÞÚãÜÕÝâÐæØï Ò ïÒÝÞÙ äÞàÜÕ àÐ×àÕèÐÕâ »ØæÕÝרÐâã ÜÞÔØäØæØàÞÒÐâì ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë, âÐÚÐï ÜÞÔØäØÚÐæØï ÔÞÛÖÝÐ ÞáãéÕáâÒÛïâìáï Ò áÞÞâÒÕâáâÒØØ áÞ ÒáÕÜØ ãÚÐ×ÐÝØïÜØ, ØÝáâàãÚæØïÜØ Ø áßÕæØäØÚÐæØïÜØ, ßàØÒÕÔÕÝÝëÜØ Ò íâÞÙ ÔÞÚãÜÕÝâÐæØØ; íâØ ÜÞÔØäØÚÐæØØ, ÕáÛØ âÐÚÞÒëÕ ØÜÕîâ ÜÕáâÞ, ÔÞÛÖÝë àÐááÜÐâàØÒÐâìáï ÚÐÚ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë. +3) ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë ÜÞÖÝÞ àÐáßàÞáâàÐÝïâì âÞÛìÚÞ ÚÐÚ çÐáâì ßàØÛÞÖÕÝØï »ØæÕÝרÐâÐ, ÚÞâÞàÞÕ ÑëÛÞ àÐ×àÐÑÞâÐÝÞ á ØáßÞÛì×ÞÒÐÝØÕÜ ¿àÞÓàÐÜÜë ("¿àØÛÞÖÕÝØÕ »ØæÕÝרÐâÐ"), Ø âÞÛìÚÞ Ò æÕÛïå ßÞÔÔÕàÖÚØ ×ÐÚÐ×çØÚÞÒ »ØæÕÝרÐâÐ Ò áÒïר á ØáßÞÛì×ÞÒÐÝØÕÜ ØÜØ ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ. ¿àØÛÞÖÕÝØÕ »ØæÕÝרÐâÐ ÔÞÛÖÝÞ ØÜÕâì ×ÝÐçØâÕÛìÝãî ÔÞßÞÛÝØâÕÛìÝãî æÕÝÝÞáâì, á âÕÜ çâÞÑë ßÞÛãçÕÝØÕ ÀÐáßàÞáâàÐÝïÕÜëå ÍÛÕÜÕÝâÞÒ ÝÕ ïÒÛïÛÞáì ÞáÝÞÒÝÞÙ ÜÞâØÒÐæØÕÙ ÚÞÝÕçÝÞÓÞ ßÞÛì×ÞÒÐâÕÛï ßàØ ßàØÞÑàÕâÕÝØØ ßàÞÓàÐÜÜÝÞÓÞ ßàÞÔãÚâÐ »ØæÕÝרÐâÐ. +4) µáÛØ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë ÒÚÛîçÐîâ áàÕÔã Java Runtime Environment, »ØæÕÝרÐâ ÔÞÛÖÕÝ âÐÚÖÕ ÒÚÛîçØâì Ò ¿àØÛÞÖÕÝØÕ »ØæÕÝרÐâÐ ÔàãÓØÕ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë ßÞÜØÜÞ Java, ÚàÞÜÕ áÛãçÐÕÒ, ÚÞÓÔÐ ¿àØÛÞÖÕÝØÕ ßàÕÔÝÐ×ÝÐçÕÝÞ ÔÛï ÒëßÞÛÝÕÝØï âÞÛìÚÞ ÝÐ ÚÞÜßìîâÕàÝëå ãáâàÞÙáâÒÐå ÞÑéÕÓÞ ÝÐ×ÝÐçÕÝØï (ÝÐßàØÜÕà, ÝÐ ßÞàâÐâØÒÝëå ÚÞÜßìîâÕàÐå, ÝÐáâÞÛìÝëå ÚÞÜßìîâÕàÐå Ø áÕàÒÕàÐå), Ð ÝÕ ÝÐ ÚÐàÜÐÝÝëå ØÛØ ÔàãÓØå ÜÞÑØÛìÝëå ãáâàÞÙáâÒÐå (ÝÐßàØÜÕà, ÝÐ ãáâàÞÙáâÒÐå, ÚÞâÞàëÕ áÞÔÕàÖÐâ ÜØÚàÞßàÞæÕááÞà, ÝÞ ÞáÝÞÒÝëÜ ßàÕÔÝÐ×ÝÐçÕÝØÕÜ ÚÞâÞàëå ÝÕ ïÒÛïîâáï ÒëçØáÛÕÝØï). +5) »ØæÕÝרÐâ ÝÕ ÜÞÖÕâ ãÔÐÛïâì ÚÐÚØÕ-ÛØÑÞ äÐÙÛë á ãÒÕÔÞÜÛÕÝØÕÜ ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå ØÛØ äÐÙÛë ×ÐÜÕçÐÝØÙ, áÞÔÕàÖÐéØÕáï Ò ÀÐáßàÞáâàÐÝïÕÜëå ÍÛÕÜÕÝâÐå. +6) »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÓàÐÖÔÐâì IBM, ÕÕ ßÞáâÐÒéØÚÞÒ Ø ÔØáâàØÑìîâÞàÞÒ Þâ ÞâÒÕâáâÒÕÝÝÞáâØ Ò áÛãçÐÕ ÛîÑëå ßàÕâÕÝרÙ, ÒÞ×ÝØÚÐîéØå Ò àÕ×ãÛìâÐâÕ ØáßÞÛì×ÞÒÐÝØï ØÛØ àÐáßàÞáâàÐÝÕÝØï ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ. +7) »ØæÕÝרÐâ ÝÕ ÜÞÖÕâ ØáßÞÛì×ÞÒÐâì âÕ ÖÕ ØÜÕÝÐ ßãâÕÙ, çâÞ Ø ã ØáåÞÔÝëå äÐÙÛÞÒ/ÜÞÔãÛÕÙ ÀÐáßàÞáâàÐÝïÕÜëå ÍÛÕÜÕÝâÞÒ. +8) »ØæÕÝרÐâ ÝÕ ØÜÕÕâ ßàÐÒÐ ØáßÞÛì×ÞÒÐâì ÝÐ×ÒÐÝØï ØÛØ âÞÒÐàÝëÕ ×ÝÐÚØ IBM, ÕÕ ßÞáâÐÒéØÚÞÒ ØÛØ ÔØáâàØÑìîâÞàÞÒ Ò áÒïר á àÐáßàÞáâàÐÝÕÝØÕÜ ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ ÑÕ× ßàÕÔÒÐàØâÕÛìÝÞÓÞ ßØáìÜÕÝÝÞÓÞ áÞÓÛÐáØï IBM, âÐÚÞÓÞ ßÞáâÐÒéØÚÐ ØÛØ ÔØáâàØÑìîâÞàÐ. +9) IBM, ÕÕ ßÞáâÐÒéØÚØ Ø ÔØáâàØÑìîâÞàë ßàÕÔÞáâÐÒÛïîâ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë Ø áÒï×ÐÝÝãî á ÝØÜØ ÔÞÚãÜÕÝâÐæØî ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. +10) »ØæÕÝרÐâ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð ÒáÕ âÕåÝØçÕáÚÞÕ áÞÔÕÙáâÒØÕ ÔÛï ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ Ø ÛîÑëå ÜÞÔØäØÚÐæØÙ ÀÐáßàÞáâàÐÝïÕÜëå ÍÛÕÜÕÝâÞÒ. +11) »ØæÕÝרÞÝÝÞÕ áÞÓÛÐèÕÝØÕ »ØæÕÝרÐâÐ á ÚÞÝÕçÝëÜ ßÞÛì×ÞÒÐâÕÛÕÜ ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ ÔÞÛÖÝÞ ãÒÕÔÞÜÛïâì ÚÞÝÕçÝÞÓÞ ßÞÛì×ÞÒÐâÕÛï, çâÞ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë Ø Øå ÜÞÔØäØÚÐæØØ ÝÕÛì×ï: i) ØáßÞÛì×ÞÒÐâì ÔÛï ÚÐÚÞÙ-ÛØÑÞ æÕÛØ ßÞÜØÜÞ ÞÑÕáßÕçÕÝØï àÐÑÞâë ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ, ii) ÚÞߨàÞÒÐâì (×Ð ØáÚÛîçÕÝØÕÜ áÞ×ÔÐÝØï àÕ×ÕàÒÝëå ÚÞߨÙ), iii) àÐáßàÞáâàÐÝïâì ÔÐÛÕÕ ØÛØ ßÕàÕÔÐÒÐâì ÑÕ× ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ, Ð âÐÚÖÕ iv) ÔÕ×ÐááÕÜÑÛØàÞÒÐâì, ÔÕÚÞÜßØÛØàÞÒÐâì ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ßàÕÞÑàÐ×ÞÒëÒÐâì, ×Ð ØáÚÛîçÕÝØÕÜ áÛãçÐÕÒ, ÚÞÓÔÐ íâÞ ÞáÞÑÞ àÐ×àÕèÕÝÞ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÔÞÓÞÒÞàÝÞÓÞ Ø×êïâØï íâÞÓÞ ßàÐÒÐ. ºàÞÜÕ âÞÓÞ, ÛØæÕÝרÞÝÝÞÕ áÞÓÛÐèÕÝØÕ »ØæÕÝרÐâÐ ÔÞÛÖÝÞ ÞÑÕáßÕçØÒÐâì, ßÞ ÜÕÝìèÕÙ ÜÕàÕ, âã ÖÕ áâÕßÕÝì ×ÐéØâë IBM, çâÞ Ø ÝÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ. + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + +»ØæÕÝרÐâ ÜÞÖÕâ àÐáßàÞáâàÐÝïâì Ø×ÜÕÝÕÝÝëÕ ÒÕàáØØ ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÞÒ Ø ¾ÑàÐ׿ÞÒ ¼ÐâÕàØÐÛÞÒ, ßÕàÕçØáÛÕÝÝëå Ò äÐÙÛÕ REDIST ÔÛï ¿àÞÓàÐÜÜë, Ò áÞÞâÒÕâáâÒØØ á ßÞÛÞÖÕÝØïÜØ ÝÐáâÞïéÕÙ ÛØæÕÝ×ØØ Ø ÛîÑëÜØ ØÝáâàãÚæØïÜØ, áÞÔÕàÖÐéØÜØáï Ò äÐÙÛÕ REDIST. + +ÁÛÕÔãîéØÕ ÕÔØÝØæë Ø×ÜÕàÕÝØï ÜÞÓãâ ßàØÜÕÝïâìáï Ú ØáßÞÛì×ÞÒÐÝØî ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +µÔØÝØæÐ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ (PVU) + +µÔØÝØæÐ ÜÞéÝÞáâØ ßàÞæÕááÞàÐ (PVU) - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï íâÐ ¿àÞÓàÐÜÜÐ. ÇØáÛÞ ÝÕÞÑåÞÔØÜëå àÐ×àÕèÕÝØÙ ÝÐ ÞáÝÞÒÕ PVU ×ÐÒØáØâ Þâ ßàÞæÕááÞàÝÞÙ âÕåÝÞÛÞÓØØ (ÞßàÕÔÕÛïÕâáï ßÞ ¿ÞáâÐÒéØÚã ¿àÞæÕááÞàÐ, ÂÞàÓÞÒÞÙ ¼ÐàÚÕ, ÂØßã Ø ½ÞÜÕàã ¼ÞÔÕÛØ Ò ÂÐÑÛØæÕ PVU, àÐ×ÜÕéÕÝÝÞÙ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) Ø çØáÛÐ ßàÞæÕááÞàÞÒ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë. ´Ûï æÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ PVU IBM ßÞ-ßàÕÖÝÕÜã ÞßàÕÔÕÛïÕâ ßàÞæÕááÞà ÚÐÚ ßàÞæÕááÞàÝÞÕ ïÔàÞ ÝÐ ÜØÚàÞáåÕÜÕ. ¼ØÚàÞáåÕÜÐ ÔÒãåêïÔÕàÝÞÓÞ ßàÞæÕááÞàÐ, ÝÐßàØÜÕà, áÞÔÕàÖØâ ÔÒÐ ßàÞæÕááÞàÝëå ïÔàÐ. + +»ØæÕÝרÐâ ÜÞÖÕâ ÒÝÕÔàØâì ¿àÞÓàÐÜÜã á ØáßÞÛì×ÞÒÐÝØÕÜ ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ, ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ (½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ) Ò áÞÞâÒÕâáâÒØØ á ÃáÛÞÒØïÜØ »ØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ ßÞ ßàÞÓàÐÜÜÕ Passport Advantage (áÜ. ÝØÖÕãÚÐ×ÐÝÝãî Web-áâàÐÝØæã). ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï ÝÐ ÞáÝÞÒÕ PVU Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà* Ò äØ×ØçÕáÚÞÙ ÐßßÐàÐâÝÞÙ áàÕÔÕ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, ×Ð ØáÚÛîçÕÝØÕÜ âÕå áÕàÒÕàÞÒ, á ÚÞâÞàëå ¿àÞÓàÐÜÜÐ ãÔÐÛÕÝÐ ÝÐÒáÕÓÔÐ. ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, Ò áÞÞâÒÕâáâÒØØ á ¿àÐÒØÛÐÜØ ¿ÞÔáçÕâÐ çØáÛÐ »ØæÕÝ×ØÙ ÔÛï ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ ÝÐ Web-áâàÐÝØæÕ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* °ÚâØÒØàÞÒÐÝÝÞÕ ßàÞæÕááÞàÝÞÕ ïÔàÞ - íâÞ ßàÞæÕááÞàÝÞÕ ïÔàÞ, ÔÞáâãßÝÞÕ ÔÛï ØáßÞÛì×ÞÒÐÝØï ÝÐ äØ×ØçÕáÚÞÜ ØÛØ ÒØàâãÐÛìÝÞÜ áÕàÒÕàÕ, ÔÐÖÕ Ò âÞÜ áÛãçÐÕ, ÕáÛØ ÜÞéÝÞáâì ßàÞæÕááÞàÝëå ïÔÕà ÜÞÖÕâ Ñëâì ÞÓàÐÝØçÕÝÐ ØÛØ ÞÓàÐÝØçØÒÐÕâáï á ßÞÜÞéìî âÕåÝÞÛÞÓØÙ ÒØàâãÐÛØ×ÐæØØ, ÚÞÜÐÝÔ ÞßÕàÐæØÞÝÝÞÙ áØáâÕÜë, ßÐàÐÜÕâàÞÒ ÝÐáâàÞÙÚØ BIOS ØÛØ ÐÝÐÛÞÓØçÝëå ÞÓàÐÝØçÕÝØÙ. + +²ØàâãÐÛìÝÞÕ ¿àÞæÕááÞàÝÞÕ ÏÔàÞ + +²ØàâãÐÛìÝÞÕ ¿àÞæÕááÞàÝÞÕ ÏÔàÞ - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï ¿àÞÓàÐÜÜÐ. ĨרçÕáÚØÙ ÁÕàÒÕà - íâÞ äØ×ØçÕáÚØÙ ÚÞÜßìîâÕà, ÚÞâÞàëÙ áÞáâÞØâ Ø× ßàÞæÕááÞàÞÒ, ßÐÜïâØ Ø áàÕÔáâÒ ÒÒÞÔÐ/ÒëÒÞÔÐ Ø ÚÞâÞàëÙ ÒëßÞÛÝïÕâ ßàÞæÕÔãàë, ÚÞÜÐÝÔë ØÛØ ßàØÛÞÖÕÝØï ßÞ ×ÐßàÞáã ÞÔÝÞÓÞ ØÛØ ÝÕáÚÞÛìÚØå ßÞÛì×ÞÒÐâÕÛÕÙ ØÛØ ÚÛØÕÝâáÚØå ãáâàÞÙáâÒ. ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï áâÞÕÚ, ÚÞàßãáÞÒ ÔÛï blade-áÕàÒÕàÞÒ ØÛØ ØÝÞÓÞ ßÞÔÞÑÝÞÓÞ ÞÑÞàãÔÞÒÐÝØï ÚÐÖÔÞÕ ÞâÔÕÛìÝÞÕ äØ×ØçÕáÚÞÕ ãáâàÞÙáâÒÞ (ÝÐßàØÜÕà, blade-áÕàÒÕà ØÛØ ãáâàÞÙáâÒÞ, ãáâÐÝÞÒÛÕÝÝÞÕ Ò áâÞÙÚã), áÞÔÕàÖÐéÕÕ ÝÕÞÑåÞÔØÜëÕ ÚÞÜßÞÝÕÝâë, áçØâÐÕâáï ÚÐÚ âÐÚÞÒÞÕ ÞâÔÕÛìÝëÜ ÄØ×ØçÕáÚØÜ ÁÕàÒÕàÞÜ. ²ØàâãÐÛìÝëÙ ÁÕàÒÕà - íâÞ ØÛØ ÒØàâãÐÛìÝëÙ ÚÞÜßìîâÕà, áÞ×ÔÐÝÝëÙ ßãâÕÜ àÐ×ÑØÕÝØï ÝÐ àÐ×ÔÕÛë àÕáãàáÞÒ, ÔÞáâãßÝëå ĨרçÕáÚÞÜã ÁÕàÒÕàã, ØÛØ ÄØ×ØçÕáÚØÙ ÁÕàÒÕà, Ò ÚÞâÞàÞÜ ÝÕâ àÐ×ÑØÕÝØï ÝÐ àÐ×ÔÕÛë. ¿àÞæÕááÞàÝÞÕ ÏÔàÞ (ÞÑëçÝÞ ÝÐ×ëÒÐÕÜÞÕ ßàÞæÕááÞàÞÜ ØÛØ Æ¿) - íâÞ äãÝÚæØÞÝÐÛìÝëÙ ÜÞÔãÛì Ò ÒëçØáÛØâÕÛìÝÞÜ ãáâàÞÙáâÒÕ, ÚÞâÞàëÙ ØÝâÕàßàÕâØàãÕâ Ø ÒëßÞÛÝïÕâ ÚÞÜÐÝÔë. ¿àÞæÕááÞàÝÞÕ ÏÔàÞ áÞáâÞØâ ßÞ ÜÕÝìèÕÙ ÜÕàÕ Ø× ÞÔÝÞÓÞ ÑÛÞÚÐ ÞÑàÐÑÞâÚØ ÚÞÜÐÝÔ Ø ÞÔÝÞÓÞ ØÛØ ÝÕáÚÞÛìÚØå ÐàØäÜÕâØçÕáÚØå ØÛØ ÛÞÓØçÕáÚØå ãáâàÞÙáâÒ. ²ØàâãÐÛìÝÞÕ ¿àÞæÕááÞàÝÞÕ ÏÔàÞ - íâÞ ¿àÞæÕááÞàÝÞÕ ÏÔàÞ ÝÐ ÄØ×ØçÕáÚÞÜ ÁÕàÒÕàÕ, Ò ÚÞâÞàÞÜ ÝÕâ àÐ×ÑØÕÝØï ÝÐ àÐ×ÔÕÛë, ØÛØ ÒØàâãÐÛìÝÞÕ ïÔàÞ, ÒëÔÕÛÕÝÝÞÕ ²ØàâãÐÛìÝÞÜã ÁÕàÒÕàã. »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï ÔÛï ÚÐÖÔÞÓÞ ²ØàâãÐÛìÝÞÓÞ ¿àÞæÕááÞàÝÞÓÞ ÏÔàÐ, ÔÞáâãßÝÞÓÞ ¿àÞÓàÐÜÜÕ. + +´Ûï ÚÐÖÔÞÓÞ ÄØ×ØçÕáÚÞÓÞ ÁÕàÒÕàÐ »ØæÕÝרÐâ ÔÞÛÖÕÝ ØÜÕâì ÚÞÛØçÕáâÒÞ àÐ×àÕèÕÝØÙ, ÔÞáâÐâÞçÝÞÕ ÔÛï ÞåÒÐâÐ ÜÕÝìèÕÓÞ Ø× áÛÕÔãîéØå ×ÝÐçÕÝØÙ: 1) áãÜÜÐ ÒáÕå ÔÞáâãßÝëå ²ØàâãÐÛìÝëå ¿àÞæÕááÞàÝëå ÏÔÕà ÝÐ ÒáÕå ²ØàâãÐÛìÝëå ÁÕàÒÕàÐå, ÚÞâÞàëÕ ÔÞáâãßÝë ÔÛï ¿àÞÓàÐÜÜë, ØÛØ 2) ÒáÕ ÔÞáâãßÝëÕ ¿àÞæÕááÞàÝëÕ ÏÔàÐ ÝÐ ÄØ×ØçÕáÚÞÜ ÁÕàÒÕàÕ. + +² ÔÞßÞÛÝÕÝØÕ Ú ÒëèÕáÚÐ×ÐÝÝÞÜã áÛÕÔãîéØÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +ºÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ + +² ÔÐÝÝÞÜ àÐ×ÔÕÛÕ ßÞÔ ÚÞÝäØÓãàÐæØÕÙ "á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ" ßÞÝØÜÐÕâáï âÐÚÐï ÚÞÝäØÓãàÐæØï, ÚÞÓÔÐ ÚÞßØï ¿àÞÓàÐÜÜë ãáâÐÝÞÒÛÕÝÐ ÝÐ áÕàÒÕàÕ, ÚÞâÞàëÙ ïÒÛïÕâáï çÐáâìî àÕèÕÝØï ßÞ ÞÑÕáßÕçÕÝØî ÒëáÞÚÞÙ ÔÞáâãßÝÞáâØ Ø ÝÐ ÚÞâÞàëÙ ÑãÔÕâ ßÕàÕÚÛîçÐâìáï ¿àÞÓàÐÜÜÐ Ò âÕå áÛãçÐïå, ÕáÛØ ÚÞßØï ¿àÞÓàÐÜÜë ÝÐ ÐÚâØÒÝÞÜ áÕàÒÕàÕ ÝÕ ÜÞÖÕâ íÚáßÛãÐâØàÞÒÐâìáï. ÁÕàÒÕà áçØâÐÕâáï "ÝÕÐÚâØÒÝëÜ" âÞÛìÚÞ Ò âÕå áÛãçÐïå, ÕáÛØ, ÔÞ ÜÞÜÕÝâÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ, ÞÝ ØáßÞÛì×ãÕâáï ØáÚÛîçØâÕÛìÝÞ ÔÛï ÞßÕàÐæØÙ ÐÔÜØÝØáâàØàÞÒÐÝØï, ßÞÔÔÕàÖØÒÐîéØå áæÕÝÐàØØ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +¿àÞÓàÐÜÜã ÝÕÛì×ï ãáâÐÝÐÒÛØÒÐâì ÝÐ ½ÕÐÚâØÒÝëÙ ÀÕ×ÕàÒÝëÙ áÕàÒÕà, ÕáÛØ ÝÕâ ÝÐÔÛÕÖÐéÕÙ ÛØæÕÝרØ. + +µáÛØ ¿àÞÓàÐÜÜÐ ØáßÞÛì×ãÕâáï Ò ÚÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ áÞÒÜÕáâÝÞ á äãÝÚæØÕÙ Multi-Instance Queue Manager, ÚÞßØï ¿àÞÓàÐÜÜë ÜÞÖÕâ àÐ×ÜÕéÐâìáï ÔÛï æÕÛÕÙ àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï ÝÐ ½ÕÐÚâØÒÝÞÜ ÀÕ×ÕàÒÝÞÜ áÕàÒÕàÕ Ø ÜÞÖÕâ ×ÐßãáÚÐâìáï, ÝÞ ÔÞÛÖÝÐ ÞáâÐÒÐâìáï "ÝÕÐÚâØÒÝÞÙ" Ø ÝÕ ÔÞÛÖÝÐ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç ÚÐÚÞÓÞ-ÛØÑÞ âØßÐ, ×Ð ØáÚÛîçÕÝØÕÜ áÛãçÐÕÒ ßÕàÕÚÛîçÕÝØï ÝÐ ½ÕÐÚâØÒÝëÙ ÀÕ×ÕàÒÝëÙ áÕàÒÕà ßàØ ÞâÚÐ×Õ ÐÚâØÒÝÞÓÞ áÕàÒÕàÐ, Ò ÚÐÚÞÒÞÜ áÛãçÐÕ ½ÕÐÚâØÒÝÐï ÀÕ×ÕàÒÝÐï ÚÞߨï ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç Ò âÕçÕÝØÕ ßÕàØÞÔÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +µáÛØ ¿àÞÓàÐÜÜÐ ØáßÞÛì×ãÕâáï Ò ÚÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ áÞÒÜÕáâÝÞ á ÔàãÓØÜØ áØáâÕÜÐÜØ ²ëáÞÚÞÙ ´ÞáâãßÝÞáâØ, ÚÞßØï ¿àÞÓàÐÜÜë ÜÞÖÕâ àÐ×ÜÕéÐâìáï ÔÛï æÕÛÕÙ àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï ÝÐ ½ÕÐÚâØÒÝÞÜ ÀÕ×ÕàÒÝÞÜ áÕàÒÕàÕ, ÝÞ ÝÕ ÜÞÖÕâ ×ÐßãáÚÐâìáï (Ø, áÞÞâÒÕâáâÒÕÝÝÞ, ÝÕ ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç ÚÐÚÞÓÞ-ÛØÑÞ âØßÐ), ÞÔÝÐÚÞ âÐÚÐï ÚÞߨï ÑãÔÕâ ×ÐßãéÕÝÐ ÐÒâÞÜÐâØçÕáÚØ ÚÞÜßÞÝÕÝâÐÜØ ÞÑÕáßÕçÕÝØï ²ëáÞÚÞÙ ´ÞáâãßÝÞáâØ Ò áÛãçÐÕ ÒëåÞÔÐ Ø× áâàÞï ÐÚâØÒÝÞÓÞ áÕàÒÕàÐ, Ò ÚÐÚÞÒÞÜ áÛãçÐÕ ½ÕÐÚâØÒÝÐï ÀÕ×ÕàÒÝÐï ÚÞߨï ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç Ò âÕçÕÝØÕ ßÕàØÞÔÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +²°¶½¾: ¿À¾Ç¸µ ²½¸¼°Âµ»Ì½¾ + +½ØÖÕ ßàÕÔáâÐÒÛÕÝë ÔÒÐ ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØï. + +1. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ +2. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ßàÞØ×ÒÞÔáâÒÕÝÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï (ÝÕ ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ. + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ (áÞÒÜÕáâÝÞ ØÜÕÝãÕÜëå "¾æÕÝÚÐ"): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï (i) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ ("»ØæÕÝרï ÝÐ ¾æÕÝÚã") Ø (ii) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA"). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã ßàØÜÕÝïÕâáï Ò âÕçÕÝØÕ áàÞÚÐ ¾æÕÝÚØ »ØæÕÝרÐâÐ. + +IPLA ÑãÔÕâ ÐÒâÞÜÐâØçÕáÚØ ßàØÜÕÝïâìáï, ÕáÛØ »ØæÕÝרÐâ àÕèØâ áÞåàÐÝØâì ¿àÞÓàÐÜÜã ßÞáÛÕ ÞÚÞÝçÐÝØï ßÕàØÞÔÐ ¾æÕÝÚØ (ØÛØ ßÞÛãçØâì ÔÞßÞÛÝØâÕÛìÝëÕ ÚÞßØØ ¿àÞÓàÐÜÜë ÔÛï ØáßÞÛì×ÞÒÐÝØï ßÞáÛÕ ÞÚÞÝçÐÝØï ¾æÕÝÚØ), ×ÐÚÛîçØÒ áÞÓÛÐèÕÝØÕ Þ ßàØÞÑàÕâÕÝØØ (ÝÐßàØÜÕà, ¼ÕÖÔãÝÐàÞÔÝÞÕ áÞÓÛÐèÕÝØÕ IBM Passport Advantage ØÛØ ÁÞÓÛÐèÕÝØÕ IBM Passport Advantage Express). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã Ø IPLA ÝÕ ÔÕÙáâÒãîâ ÞÔÝÞÒàÕÜÕÝÝÞ; ÝØ ÞÔÝÞ Ø× íâØå áÞÓÛÐèÕÝØÙ ÝÕ Ø×ÜÕÝïÕâ ãáÛÞÒØÙ ÔàãÓÞÓÞ; Ø ÚÐÖÔÞÕ áÞÓÛÐèÕÝØÕ ÝÕ ×ÐÒØáØâ Þâ ÔàãÓÞÓÞ. + +¿ÞÛÝëÙ âÕÚáâ ÞÑÞØå ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØÙ ßàØÒÞÔØâáï ÝØÖÕ. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ (Z125-5543-05). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë (½ÞÜÕà ¿àÞÓàÐÜÜë): +IBM MQ Advanced V9.0.3 (Evaluation) + +ÁÛÕÔãîéØÕ áâÐÝÔÐàâÝëÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +¿ÕàØÞÔ ¾æÕÝÚØ + +¿ÕàØÞÔ ÞæÕÝÚØ ÝÐçØÝÐÕâáï Ò ÔÐâã, ÚÞÓÔÐ »ØæÕÝרÐâ áÞÓÛÐèÐÕâáï á ãáÛÞÒØïÜØ ÔÐÝÝÞÓÞ ÁÞÓÛÐèÕÝØï, Ø ×ÐÚÐÝçØÒÐÕâáï çÕàÕ× 90 ÔÝÕÙ. + +²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë + +¿àÞÓàÐÜÜÐ ÛØæÕÝרàãÕâáï ÚÐÚ ßÐÚÕâ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ, áÞáâÞïéØÙ Ø× ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ, ãÚÐ×ÐÝÝëå ÝØÖÕ. »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÐÒÛØÒÐâì Ø ØáßÞÛì×ÞÒÐâì âÐÚØÕ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë Ò ßàÕÔÕÛÐå ÁÒØÔÕâÕÛìáâÒ Þ ¿àÐÒÐå ÝÐ ¿àÞÓàÐÜÜã Ø ÚÐÚ ãÚÐ×ÐÝÞ Ò ÝÐáâÞïéÕÜ ÔÞÚãÜÕÝâÕ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ßÕàÕÔÐÒÐâì ØÛØ ßÕàÕßàÞÔÐÒÐâì ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë ÞâÔÕÛìÝÞ Þâ ßÐÚÕâÐ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ. º ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜÕ ÜÞÓãâ ßàØÛÐÓÐâìáï ÛØæÕÝרÞÝÝëÕ ßÞÛÞÖÕÝØï, Ø íâØ ßÞÛÞÖÕÝØï, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ßàØÜÕÝïîâáï Ú ØáßÞÛì×ÞÒÐÝØî »ØæÕÝרÐâÞÜ âÐÚÞÙ ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ² áÛãçÐÕ ßàÞâØÒÞàÕçØÙ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ×ÐÜÕÝïîâ áÞÑÞÙ ßÞÛÞÖÕÝØï ÔÛï ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ºÞÓÔÐ ßàÐÒÞ »ØæÕÝרÐâÐ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ØáâÕÚÐÕâ ØÛØ ßàÕÚàÐéÐÕâáï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÕàÕáâÐâì ØáßÞÛì×ÞÒÐâì, ãÝØçâÞÖØâì ØÛØ ÝÕ×ÐÜÕÔÛØâÕÛìÝÞ ÒÕàÝãâì ÒáÕ ÚÞßØØ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ ÞÝ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÛãçØâì ÛØæÕÝרî ÝÐ ÛîÑÞÕ ØáßÞÛì×ÞÒÐÝØÕ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áÒÕàå ßàÕÔÕÛÞÒ, ãÚÐ×ÐÝÝëå ÒëèÕ, áÛÕÔãÕâ ÞÑàÐéÐâìáï Ú ¿àÕÔáâÐÒØâÕÛî IBM ßÞ ¿àÞÔÐÖÐÜ ØÛØ Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, çâÞÑë ßÞÛãçØâì áÞÞâÒÕâáâÒãîéãî ÛØæÕÝרî. + +½ØÖÕ ßÕàÕçØáÛÕÝë ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, ÛØæÕÝרàãÕÜëÕ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ: +IBM MQ V9.0.3 + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ (Z125-3301-14). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë (½ÞÜÕà ¿àÞÓàÐÜÜë): +IBM MQ Advanced V9.0.3 (5724-H72) + +ÁÛÕÔãîéØÕ áâÐÝÔÐàâÝëÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +¿àÐÒÞ ÝÐ ÞÓàÐÝØçÕÝÝÞÕ ØáßÞÛì×ÞÒÐÝØÕ + +ºÐÚ ãÚÐ×ÐÝÞ Ò ¼ÕÖÔãÝÐàÞÔÝÞÜ »ØæÕÝרÞÝÝÞÜ ÁÞÓÛÐèÕÝØØ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA") Ø ÝÐáâÞïéÕÙ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ, IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÞÓàÐÝØçÕÝÝÞÕ ßàÐÒÞ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. ÍâÞ ßàÐÒÞ ÞÓàÐÝØçØÒÐÕâáï ãàÞÒÝÕÜ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ÝÐßàØÜÕà, µÔØÝØæÐÜØ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ ("PVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ÀÕáãàáÞÒ ("RVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ("VU") ØÛØ ÔàãÓØÜ ãÚÐ×ÐÝÝëÜ ãàÞÒÝÕÜ ØáßÞÛì×ÞÒÐÝØï, ÞßÛÐçÕÝÝëÜ »ØæÕÝרÐâÞÜ, ÚÐÚ ïÒáâÒãÕâ Ø× ÁÒØÔÕâÕÛìáâÒÐ Þ ¿àÐÒÐå. ¸áßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ ÜÞÖÕâ âÐÚÖÕ Ñëâì ÞÓàÐÝØçÕÝÞ ÞßàÕÔÕÛÕÝÝÞÙ ÜÐèØÝÞÙ ØÛØ ØáßÞÛì×ÞÒÐÝØÕÜ âÞÛìÚÞ Ò ÚÐçÕáâÒÕ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë ÛØÑÞ ÜÞÖÕâ ßÞÔßÐÔÐâì ßÞÔ ÔàãÓØÕ ÞÓàÐÝØçÕÝØï. ¿ÞáÚÞÛìÚã »ØæÕÝרÐâ ÞßÛÐâØÛ ÝÕ Òáî íÚÞÝÞÜØçÕáÚãî áâÞØÜÞáâì ¿àÞÓàÐÜÜë, ÝØÚÐÚÞÕ ÔàãÓÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÝÕ àÐ×àÕèÐÕâáï ÑÕ× ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ. ºàÞÜÕ âÞÓÞ, »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï ßàÕÔÞáâÐÒÛÕÝØï ÚÞÜÜÕàçÕáÚØå ¸Â-ãáÛãÓ ÚÐÚÞÜã-ÛØÑÞ âàÕâìÕÜã ÛØæã, ÔÛï ÞáãéÕáâÒÛÕÝØï ÚÞÜÜÕàçÕáÚÞÓÞ åÞáâØÝÓÐ ØÛØ ØáßÞÛì×ÞÒÐÝØï Ò àÕÖØÜÕ àÐ×ÔÕÛÕÝØï ÒàÕÜÕÝØ, Ð âÐÚÖÕ ÝÕ àÐ×àÕèÐÕâáï áãÑÛØæÕÝרàÞÒÐâì ¿àÞÓàÐÜÜã, áÔÐÒÐâì ÕÕ Ò ÐàÕÝÔã ØÛØ ÛØ×ØÝÓ, ÕáÛØ íâÞ ïÒÝÞ ÝÕ ãÚÐ×ÐÝÞ Ò áÞÞâÒÕâáâÒãîéØå áÞÓÛÐèÕÝØïå, ÝÐ ÞáÝÞÒÐÝØØ ÚÞâÞàëå »ØæÕÝרÐâ ßÞÛãçÐÕâ àÐ×àÕèÕÝØÕ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. »ØæÕÝרÐâ ÜÞÖÕâ ßÞÛãçÐâì ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ Ò àÕ×ãÛìâÐâÕ ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ ØÛØ ÝÐ ÞáÝÞÒÐÝØØ ÔÞßÞÛÝØâÕÛìÝëå ãáÛÞÒØÙ. IBM ÞáâÐÒÛïÕâ ×Ð áÞÑÞÙ ßàÐÒÞ ÞßàÕÔÕÛïâì, áâÞØâ ÛØ ßàÕÔÞáâÐÒÛïâì »ØæÕÝרÐâã âÐÚØÕ ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ. + +ÁßÕæØäØÚÐæØØ + +ÁßÕæØäØÚÐæØØ ¿àÞÓàÐÜÜë ÜÞÖÝÞ ÝÐÙâØ Ò ÞÑêÕÔØÝÕÝÝëå àÐ×ÔÕÛÐå "¾ßØáÐÝØÕ Ø âÕåÝØçÕáÚÐï ØÝäÞàÜÐæØï" ¾ÑêïÒÛÕÝØÙ Þ ÒëßãáÚÕ ¿àÞÓàÐÜÜë. + +²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë + +¿àÞÓàÐÜÜÐ ÛØæÕÝרàãÕâáï ÚÐÚ ßÐÚÕâ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ, áÞáâÞïéØÙ Ø× ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ, ãÚÐ×ÐÝÝëå ÝØÖÕ. »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÐÒÛØÒÐâì Ø ØáßÞÛì×ÞÒÐâì âÐÚØÕ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë Ò ßàÕÔÕÛÐå ÁÒØÔÕâÕÛìáâÒ Þ ¿àÐÒÐå ÝÐ ¿àÞÓàÐÜÜã Ø ÚÐÚ ãÚÐ×ÐÝÞ Ò ÝÐáâÞïéÕÜ ÔÞÚãÜÕÝâÕ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ßÕàÕÔÐÒÐâì ØÛØ ßÕàÕßàÞÔÐÒÐâì ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë ÞâÔÕÛìÝÞ Þâ ßÐÚÕâÐ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ. º ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜÕ ÜÞÓãâ ßàØÛÐÓÐâìáï ÛØæÕÝרÞÝÝëÕ ßÞÛÞÖÕÝØï, Ø íâØ ßÞÛÞÖÕÝØï, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ßàØÜÕÝïîâáï Ú ØáßÞÛì×ÞÒÐÝØî »ØæÕÝרÐâÞÜ âÐÚÞÙ ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ² áÛãçÐÕ ßàÞâØÒÞàÕçØÙ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ×ÐÜÕÝïîâ áÞÑÞÙ ßÞÛÞÖÕÝØï ÔÛï ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ºÞÓÔÐ ßàÐÒÞ »ØæÕÝרÐâÐ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ØáâÕÚÐÕâ ØÛØ ßàÕÚàÐéÐÕâáï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÕàÕáâÐâì ØáßÞÛì×ÞÒÐâì, ãÝØçâÞÖØâì ØÛØ ÝÕ×ÐÜÕÔÛØâÕÛìÝÞ ÒÕàÝãâì ÒáÕ ÚÞßØØ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ ÞÝ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÛãçØâì ÛØæÕÝרî ÝÐ ÛîÑÞÕ ØáßÞÛì×ÞÒÐÝØÕ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áÒÕàå ßàÕÔÕÛÞÒ, ãÚÐ×ÐÝÝëå ÒëèÕ, áÛÕÔãÕâ ÞÑàÐéÐâìáï Ú ¿àÕÔáâÐÒØâÕÛî IBM ßÞ ¿àÞÔÐÖÐÜ ØÛØ Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, çâÞÑë ßÞÛãçØâì áÞÞâÒÕâáâÒãîéãî ÛØæÕÝרî. + +½ØÖÕ ßÕàÕçØáÛÕÝë ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, ÛØæÕÝרàãÕÜëÕ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ: +IBM MQ V9.0.3 + +ºÞÜßÞÝÕÝâë, ÚÞâÞàëÕ ÝÕ ØáßÞÛì×ãîâáï ÔÛï ßÞÛãçÕÝØï âàÕÑãÕÜëå àÐ×àÕèÕÝØÙ + +¿àØ ÞßàÕÔÕÛÕÝØØ ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ãáâÐÝÞÒÚØ ØÛØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ, ãçØâëÒÐÕâáï ãáâÐÝÞÒÚÐ ØÛØ ØáßÞÛì×ÞÒÐÝØÕ áÛÕÔãîéØå ÚÞÜßÞÝÕÝâÞÒ ¿àÞÓàÐÜÜë. ´àãÓØÜØ áÛÞÒÐÜØ, »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÞÒØâì Ø ØáßÞÛì×ÞÒÐâì áÛÕÔãîéØÕ ÚÞÜßÞÝÕÝâë ¿àÞÓàÐÜÜë á áÞÑÛîÔÕÝØÕÜ ãáÛÞÒØÙ ÛØæÕÝרØ, ÞÔÝÐÚÞ íâØ ÚÞÜßÞÝÕÝâë ÝÕ ØáßÞÛì×ãîâáï ÔÛï ÞßàÕÔÕÛÕÝØï ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ¿àÞÓàÐÜÜë. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + +ÁÛÕÔãîéØÕ ÕÔØÝØæë Ø×ÜÕàÕÝØï ÜÞÓãâ ßàØÜÕÝïâìáï Ú ØáßÞÛì×ÞÒÐÝØî ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +µÔØÝØæÐ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ (PVU) + +µÔØÝØæÐ ÜÞéÝÞáâØ ßàÞæÕááÞàÐ (PVU) - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï íâÐ ¿àÞÓàÐÜÜÐ. ÇØáÛÞ ÝÕÞÑåÞÔØÜëå àÐ×àÕèÕÝØÙ ÝÐ ÞáÝÞÒÕ PVU ×ÐÒØáØâ Þâ ßàÞæÕááÞàÝÞÙ âÕåÝÞÛÞÓØØ (ÞßàÕÔÕÛïÕâáï ßÞ ¿ÞáâÐÒéØÚã ¿àÞæÕááÞàÐ, ÂÞàÓÞÒÞÙ ¼ÐàÚÕ, ÂØßã Ø ½ÞÜÕàã ¼ÞÔÕÛØ Ò ÂÐÑÛØæÕ PVU, àÐ×ÜÕéÕÝÝÞÙ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) Ø çØáÛÐ ßàÞæÕááÞàÞÒ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë. ´Ûï æÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ PVU IBM ßÞ-ßàÕÖÝÕÜã ÞßàÕÔÕÛïÕâ ßàÞæÕááÞà ÚÐÚ ßàÞæÕááÞàÝÞÕ ïÔàÞ ÝÐ ÜØÚàÞáåÕÜÕ. ¼ØÚàÞáåÕÜÐ ÔÒãåêïÔÕàÝÞÓÞ ßàÞæÕááÞàÐ, ÝÐßàØÜÕà, áÞÔÕàÖØâ ÔÒÐ ßàÞæÕááÞàÝëå ïÔàÐ. + +»ØæÕÝרÐâ ÜÞÖÕâ ÒÝÕÔàØâì ¿àÞÓàÐÜÜã á ØáßÞÛì×ÞÒÐÝØÕÜ ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ, ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ (½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ) Ò áÞÞâÒÕâáâÒØØ á ÃáÛÞÒØïÜØ »ØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ ßÞ ßàÞÓàÐÜÜÕ Passport Advantage (áÜ. ÝØÖÕãÚÐ×ÐÝÝãî Web-áâàÐÝØæã). ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï ÝÐ ÞáÝÞÒÕ PVU Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà* Ò äØ×ØçÕáÚÞÙ ÐßßÐàÐâÝÞÙ áàÕÔÕ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, ×Ð ØáÚÛîçÕÝØÕÜ âÕå áÕàÒÕàÞÒ, á ÚÞâÞàëå ¿àÞÓàÐÜÜÐ ãÔÐÛÕÝÐ ÝÐÒáÕÓÔÐ. ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, Ò áÞÞâÒÕâáâÒØØ á ¿àÐÒØÛÐÜØ ¿ÞÔáçÕâÐ çØáÛÐ »ØæÕÝ×ØÙ ÔÛï ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ ÝÐ Web-áâàÐÝØæÕ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* °ÚâØÒØàÞÒÐÝÝÞÕ ßàÞæÕááÞàÝÞÕ ïÔàÞ - íâÞ ßàÞæÕááÞàÝÞÕ ïÔàÞ, ÔÞáâãßÝÞÕ ÔÛï ØáßÞÛì×ÞÒÐÝØï ÝÐ äØ×ØçÕáÚÞÜ ØÛØ ÒØàâãÐÛìÝÞÜ áÕàÒÕàÕ, ÔÐÖÕ Ò âÞÜ áÛãçÐÕ, ÕáÛØ ÜÞéÝÞáâì ßàÞæÕááÞàÝëå ïÔÕà ÜÞÖÕâ Ñëâì ÞÓàÐÝØçÕÝÐ ØÛØ ÞÓàÐÝØçØÒÐÕâáï á ßÞÜÞéìî âÕåÝÞÛÞÓØÙ ÒØàâãÐÛØ×ÐæØØ, ÚÞÜÐÝÔ ÞßÕàÐæØÞÝÝÞÙ áØáâÕÜë, ßÐàÐÜÕâàÞÒ ÝÐáâàÞÙÚØ BIOS ØÛØ ÐÝÐÛÞÓØçÝëå ÞÓàÐÝØçÕÝØÙ. + +²ØàâãÐÛìÝÞÕ ¿àÞæÕááÞàÝÞÕ ÏÔàÞ + +²ØàâãÐÛìÝÞÕ ¿àÞæÕááÞàÝÞÕ ÏÔàÞ - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï ¿àÞÓàÐÜÜÐ. ĨרçÕáÚØÙ ÁÕàÒÕà - íâÞ äØ×ØçÕáÚØÙ ÚÞÜßìîâÕà, ÚÞâÞàëÙ áÞáâÞØâ Ø× ßàÞæÕááÞàÞÒ, ßÐÜïâØ Ø áàÕÔáâÒ ÒÒÞÔÐ/ÒëÒÞÔÐ Ø ÚÞâÞàëÙ ÒëßÞÛÝïÕâ ßàÞæÕÔãàë, ÚÞÜÐÝÔë ØÛØ ßàØÛÞÖÕÝØï ßÞ ×ÐßàÞáã ÞÔÝÞÓÞ ØÛØ ÝÕáÚÞÛìÚØå ßÞÛì×ÞÒÐâÕÛÕÙ ØÛØ ÚÛØÕÝâáÚØå ãáâàÞÙáâÒ. ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï áâÞÕÚ, ÚÞàßãáÞÒ ÔÛï blade-áÕàÒÕàÞÒ ØÛØ ØÝÞÓÞ ßÞÔÞÑÝÞÓÞ ÞÑÞàãÔÞÒÐÝØï ÚÐÖÔÞÕ ÞâÔÕÛìÝÞÕ äØ×ØçÕáÚÞÕ ãáâàÞÙáâÒÞ (ÝÐßàØÜÕà, blade-áÕàÒÕà ØÛØ ãáâàÞÙáâÒÞ, ãáâÐÝÞÒÛÕÝÝÞÕ Ò áâÞÙÚã), áÞÔÕàÖÐéÕÕ ÝÕÞÑåÞÔØÜëÕ ÚÞÜßÞÝÕÝâë, áçØâÐÕâáï ÚÐÚ âÐÚÞÒÞÕ ÞâÔÕÛìÝëÜ ÄØ×ØçÕáÚØÜ ÁÕàÒÕàÞÜ. ²ØàâãÐÛìÝëÙ ÁÕàÒÕà - íâÞ ØÛØ ÒØàâãÐÛìÝëÙ ÚÞÜßìîâÕà, áÞ×ÔÐÝÝëÙ ßãâÕÜ àÐ×ÑØÕÝØï ÝÐ àÐ×ÔÕÛë àÕáãàáÞÒ, ÔÞáâãßÝëå ĨרçÕáÚÞÜã ÁÕàÒÕàã, ØÛØ ÄØ×ØçÕáÚØÙ ÁÕàÒÕà, Ò ÚÞâÞàÞÜ ÝÕâ àÐ×ÑØÕÝØï ÝÐ àÐ×ÔÕÛë. ¿àÞæÕááÞàÝÞÕ ÏÔàÞ (ÞÑëçÝÞ ÝÐ×ëÒÐÕÜÞÕ ßàÞæÕááÞàÞÜ ØÛØ Æ¿) - íâÞ äãÝÚæØÞÝÐÛìÝëÙ ÜÞÔãÛì Ò ÒëçØáÛØâÕÛìÝÞÜ ãáâàÞÙáâÒÕ, ÚÞâÞàëÙ ØÝâÕàßàÕâØàãÕâ Ø ÒëßÞÛÝïÕâ ÚÞÜÐÝÔë. ¿àÞæÕááÞàÝÞÕ ÏÔàÞ áÞáâÞØâ ßÞ ÜÕÝìèÕÙ ÜÕàÕ Ø× ÞÔÝÞÓÞ ÑÛÞÚÐ ÞÑàÐÑÞâÚØ ÚÞÜÐÝÔ Ø ÞÔÝÞÓÞ ØÛØ ÝÕáÚÞÛìÚØå ÐàØäÜÕâØçÕáÚØå ØÛØ ÛÞÓØçÕáÚØå ãáâàÞÙáâÒ. ²ØàâãÐÛìÝÞÕ ¿àÞæÕááÞàÝÞÕ ÏÔàÞ - íâÞ ¿àÞæÕááÞàÝÞÕ ÏÔàÞ ÝÐ ÄØ×ØçÕáÚÞÜ ÁÕàÒÕàÕ, Ò ÚÞâÞàÞÜ ÝÕâ àÐ×ÑØÕÝØï ÝÐ àÐ×ÔÕÛë, ØÛØ ÒØàâãÐÛìÝÞÕ ïÔàÞ, ÒëÔÕÛÕÝÝÞÕ ²ØàâãÐÛìÝÞÜã ÁÕàÒÕàã. »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï ÔÛï ÚÐÖÔÞÓÞ ²ØàâãÐÛìÝÞÓÞ ¿àÞæÕááÞàÝÞÓÞ ÏÔàÐ, ÔÞáâãßÝÞÓÞ ¿àÞÓàÐÜÜÕ. + +´Ûï ÚÐÖÔÞÓÞ ÄØ×ØçÕáÚÞÓÞ ÁÕàÒÕàÐ »ØæÕÝרÐâ ÔÞÛÖÕÝ ØÜÕâì ÚÞÛØçÕáâÒÞ àÐ×àÕèÕÝØÙ, ÔÞáâÐâÞçÝÞÕ ÔÛï ÞåÒÐâÐ ÜÕÝìèÕÓÞ Ø× áÛÕÔãîéØå ×ÝÐçÕÝØÙ: 1) áãÜÜÐ ÒáÕå ÔÞáâãßÝëå ²ØàâãÐÛìÝëå ¿àÞæÕááÞàÝëå ÏÔÕà ÝÐ ÒáÕå ²ØàâãÐÛìÝëå ÁÕàÒÕàÐå, ÚÞâÞàëÕ ÔÞáâãßÝë ÔÛï ¿àÞÓàÐÜÜë, ØÛØ 2) ÒáÕ ÔÞáâãßÝëÕ ¿àÞæÕááÞàÝëÕ ÏÔàÐ ÝÐ ÄØ×ØçÕáÚÞÜ ÁÕàÒÕàÕ. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +²°¶½¾: ¿À¾Ç¸µ ²½¸¼°Âµ»Ì½¾ + +½ØÖÕ ßàÕÔáâÐÒÛÕÝë ÔÒÐ ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØï. + +1. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ +2. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ßàÞØ×ÒÞÔáâÒÕÝÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï (ÝÕ ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ. + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ (áÞÒÜÕáâÝÞ ØÜÕÝãÕÜëå "¾æÕÝÚÐ"): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï (i) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ ("»ØæÕÝרï ÝÐ ¾æÕÝÚã") Ø (ii) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA"). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã ßàØÜÕÝïÕâáï Ò âÕçÕÝØÕ áàÞÚÐ ¾æÕÝÚØ »ØæÕÝרÐâÐ. + +IPLA ÑãÔÕâ ÐÒâÞÜÐâØçÕáÚØ ßàØÜÕÝïâìáï, ÕáÛØ »ØæÕÝרÐâ àÕèØâ áÞåàÐÝØâì ¿àÞÓàÐÜÜã ßÞáÛÕ ÞÚÞÝçÐÝØï ßÕàØÞÔÐ ¾æÕÝÚØ (ØÛØ ßÞÛãçØâì ÔÞßÞÛÝØâÕÛìÝëÕ ÚÞßØØ ¿àÞÓàÐÜÜë ÔÛï ØáßÞÛì×ÞÒÐÝØï ßÞáÛÕ ÞÚÞÝçÐÝØï ¾æÕÝÚØ), ×ÐÚÛîçØÒ áÞÓÛÐèÕÝØÕ Þ ßàØÞÑàÕâÕÝØØ (ÝÐßàØÜÕà, ¼ÕÖÔãÝÐàÞÔÝÞÕ áÞÓÛÐèÕÝØÕ IBM Passport Advantage ØÛØ ÁÞÓÛÐèÕÝØÕ IBM Passport Advantage Express). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã Ø IPLA ÝÕ ÔÕÙáâÒãîâ ÞÔÝÞÒàÕÜÕÝÝÞ; ÝØ ÞÔÝÞ Ø× íâØå áÞÓÛÐèÕÝØÙ ÝÕ Ø×ÜÕÝïÕâ ãáÛÞÒØÙ ÔàãÓÞÓÞ; Ø ÚÐÖÔÞÕ áÞÓÛÐèÕÝØÕ ÝÕ ×ÐÒØáØâ Þâ ÔàãÓÞÓÞ. + +¿ÞÛÝëÙ âÕÚáâ ÞÑÞØå ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØÙ ßàØÒÞÔØâáï ÝØÖÕ. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ (Z125-5543-05). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë (½ÞÜÕà ¿àÞÓàÐÜÜë): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +ÁÛÕÔãîéØÕ áâÐÝÔÐàâÝëÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +¿ÕàØÞÔ ¾æÕÝÚØ + +¿ÕàØÞÔ ÞæÕÝÚØ ÝÐçØÝÐÕâáï Ò ÔÐâã, ÚÞÓÔÐ »ØæÕÝרÐâ áÞÓÛÐèÐÕâáï á ãáÛÞÒØïÜØ ÔÐÝÝÞÓÞ ÁÞÓÛÐèÕÝØï, Ø ×ÐÚÐÝçØÒÐÕâáï çÕàÕ× 90 ÔÝÕÙ. + +²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë + +¿àÞÓàÐÜÜÐ ÛØæÕÝרàãÕâáï ÚÐÚ ßÐÚÕâ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ, áÞáâÞïéØÙ Ø× ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ, ãÚÐ×ÐÝÝëå ÝØÖÕ. »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÐÒÛØÒÐâì Ø ØáßÞÛì×ÞÒÐâì âÐÚØÕ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë Ò ßàÕÔÕÛÐå ÁÒØÔÕâÕÛìáâÒ Þ ¿àÐÒÐå ÝÐ ¿àÞÓàÐÜÜã Ø ÚÐÚ ãÚÐ×ÐÝÞ Ò ÝÐáâÞïéÕÜ ÔÞÚãÜÕÝâÕ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ßÕàÕÔÐÒÐâì ØÛØ ßÕàÕßàÞÔÐÒÐâì ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë ÞâÔÕÛìÝÞ Þâ ßÐÚÕâÐ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ. º ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜÕ ÜÞÓãâ ßàØÛÐÓÐâìáï ÛØæÕÝרÞÝÝëÕ ßÞÛÞÖÕÝØï, Ø íâØ ßÞÛÞÖÕÝØï, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ßàØÜÕÝïîâáï Ú ØáßÞÛì×ÞÒÐÝØî »ØæÕÝרÐâÞÜ âÐÚÞÙ ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ² áÛãçÐÕ ßàÞâØÒÞàÕçØÙ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ×ÐÜÕÝïîâ áÞÑÞÙ ßÞÛÞÖÕÝØï ÔÛï ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ºÞÓÔÐ ßàÐÒÞ »ØæÕÝרÐâÐ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ØáâÕÚÐÕâ ØÛØ ßàÕÚàÐéÐÕâáï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÕàÕáâÐâì ØáßÞÛì×ÞÒÐâì, ãÝØçâÞÖØâì ØÛØ ÝÕ×ÐÜÕÔÛØâÕÛìÝÞ ÒÕàÝãâì ÒáÕ ÚÞßØØ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ ÞÝ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÛãçØâì ÛØæÕÝרî ÝÐ ÛîÑÞÕ ØáßÞÛì×ÞÒÐÝØÕ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áÒÕàå ßàÕÔÕÛÞÒ, ãÚÐ×ÐÝÝëå ÒëèÕ, áÛÕÔãÕâ ÞÑàÐéÐâìáï Ú ¿àÕÔáâÐÒØâÕÛî IBM ßÞ ¿àÞÔÐÖÐÜ ØÛØ Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, çâÞÑë ßÞÛãçØâì áÞÞâÒÕâáâÒãîéãî ÛØæÕÝרî. + +½ØÖÕ ßÕàÕçØáÛÕÝë ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, ÛØæÕÝרàãÕÜëÕ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ: +IBM MQ Idle Standby V9.0.3 + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ (Z125-3301-14). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë (½ÞÜÕà ¿àÞÓàÐÜÜë): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +ÁÛÕÔãîéØÕ áâÐÝÔÐàâÝëÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +¿àÐÒÞ ÝÐ ÞÓàÐÝØçÕÝÝÞÕ ØáßÞÛì×ÞÒÐÝØÕ + +ºÐÚ ãÚÐ×ÐÝÞ Ò ¼ÕÖÔãÝÐàÞÔÝÞÜ »ØæÕÝרÞÝÝÞÜ ÁÞÓÛÐèÕÝØØ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA") Ø ÝÐáâÞïéÕÙ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ, IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÞÓàÐÝØçÕÝÝÞÕ ßàÐÒÞ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. ÍâÞ ßàÐÒÞ ÞÓàÐÝØçØÒÐÕâáï ãàÞÒÝÕÜ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ÝÐßàØÜÕà, µÔØÝØæÐÜØ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ ("PVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ÀÕáãàáÞÒ ("RVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ("VU") ØÛØ ÔàãÓØÜ ãÚÐ×ÐÝÝëÜ ãàÞÒÝÕÜ ØáßÞÛì×ÞÒÐÝØï, ÞßÛÐçÕÝÝëÜ »ØæÕÝרÐâÞÜ, ÚÐÚ ïÒáâÒãÕâ Ø× ÁÒØÔÕâÕÛìáâÒÐ Þ ¿àÐÒÐå. ¸áßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ ÜÞÖÕâ âÐÚÖÕ Ñëâì ÞÓàÐÝØçÕÝÞ ÞßàÕÔÕÛÕÝÝÞÙ ÜÐèØÝÞÙ ØÛØ ØáßÞÛì×ÞÒÐÝØÕÜ âÞÛìÚÞ Ò ÚÐçÕáâÒÕ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë ÛØÑÞ ÜÞÖÕâ ßÞÔßÐÔÐâì ßÞÔ ÔàãÓØÕ ÞÓàÐÝØçÕÝØï. ¿ÞáÚÞÛìÚã »ØæÕÝרÐâ ÞßÛÐâØÛ ÝÕ Òáî íÚÞÝÞÜØçÕáÚãî áâÞØÜÞáâì ¿àÞÓàÐÜÜë, ÝØÚÐÚÞÕ ÔàãÓÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÝÕ àÐ×àÕèÐÕâáï ÑÕ× ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ. ºàÞÜÕ âÞÓÞ, »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï ßàÕÔÞáâÐÒÛÕÝØï ÚÞÜÜÕàçÕáÚØå ¸Â-ãáÛãÓ ÚÐÚÞÜã-ÛØÑÞ âàÕâìÕÜã ÛØæã, ÔÛï ÞáãéÕáâÒÛÕÝØï ÚÞÜÜÕàçÕáÚÞÓÞ åÞáâØÝÓÐ ØÛØ ØáßÞÛì×ÞÒÐÝØï Ò àÕÖØÜÕ àÐ×ÔÕÛÕÝØï ÒàÕÜÕÝØ, Ð âÐÚÖÕ ÝÕ àÐ×àÕèÐÕâáï áãÑÛØæÕÝרàÞÒÐâì ¿àÞÓàÐÜÜã, áÔÐÒÐâì ÕÕ Ò ÐàÕÝÔã ØÛØ ÛØ×ØÝÓ, ÕáÛØ íâÞ ïÒÝÞ ÝÕ ãÚÐ×ÐÝÞ Ò áÞÞâÒÕâáâÒãîéØå áÞÓÛÐèÕÝØïå, ÝÐ ÞáÝÞÒÐÝØØ ÚÞâÞàëå »ØæÕÝרÐâ ßÞÛãçÐÕâ àÐ×àÕèÕÝØÕ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. »ØæÕÝרÐâ ÜÞÖÕâ ßÞÛãçÐâì ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ Ò àÕ×ãÛìâÐâÕ ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ ØÛØ ÝÐ ÞáÝÞÒÐÝØØ ÔÞßÞÛÝØâÕÛìÝëå ãáÛÞÒØÙ. IBM ÞáâÐÒÛïÕâ ×Ð áÞÑÞÙ ßàÐÒÞ ÞßàÕÔÕÛïâì, áâÞØâ ÛØ ßàÕÔÞáâÐÒÛïâì »ØæÕÝרÐâã âÐÚØÕ ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ. + +ÁßÕæØäØÚÐæØØ + +ÁßÕæØäØÚÐæØØ ¿àÞÓàÐÜÜë ÜÞÖÝÞ ÝÐÙâØ Ò ÞÑêÕÔØÝÕÝÝëå àÐ×ÔÕÛÐå "¾ßØáÐÝØÕ Ø âÕåÝØçÕáÚÐï ØÝäÞàÜÐæØï" ¾ÑêïÒÛÕÝØÙ Þ ÒëßãáÚÕ ¿àÞÓàÐÜÜë. + +²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë + +¿àÞÓàÐÜÜÐ ÛØæÕÝרàãÕâáï ÚÐÚ ßÐÚÕâ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ, áÞáâÞïéØÙ Ø× ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ, ãÚÐ×ÐÝÝëå ÝØÖÕ. »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÐÒÛØÒÐâì Ø ØáßÞÛì×ÞÒÐâì âÐÚØÕ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë Ò ßàÕÔÕÛÐå ÁÒØÔÕâÕÛìáâÒ Þ ¿àÐÒÐå ÝÐ ¿àÞÓàÐÜÜã Ø ÚÐÚ ãÚÐ×ÐÝÞ Ò ÝÐáâÞïéÕÜ ÔÞÚãÜÕÝâÕ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ßÕàÕÔÐÒÐâì ØÛØ ßÕàÕßàÞÔÐÒÐâì ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë ÞâÔÕÛìÝÞ Þâ ßÐÚÕâÐ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ. º ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜÕ ÜÞÓãâ ßàØÛÐÓÐâìáï ÛØæÕÝרÞÝÝëÕ ßÞÛÞÖÕÝØï, Ø íâØ ßÞÛÞÖÕÝØï, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ßàØÜÕÝïîâáï Ú ØáßÞÛì×ÞÒÐÝØî »ØæÕÝרÐâÞÜ âÐÚÞÙ ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ² áÛãçÐÕ ßàÞâØÒÞàÕçØÙ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ×ÐÜÕÝïîâ áÞÑÞÙ ßÞÛÞÖÕÝØï ÔÛï ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ºÞÓÔÐ ßàÐÒÞ »ØæÕÝרÐâÐ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ØáâÕÚÐÕâ ØÛØ ßàÕÚàÐéÐÕâáï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÕàÕáâÐâì ØáßÞÛì×ÞÒÐâì, ãÝØçâÞÖØâì ØÛØ ÝÕ×ÐÜÕÔÛØâÕÛìÝÞ ÒÕàÝãâì ÒáÕ ÚÞßØØ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ ÞÝ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÛãçØâì ÛØæÕÝרî ÝÐ ÛîÑÞÕ ØáßÞÛì×ÞÒÐÝØÕ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áÒÕàå ßàÕÔÕÛÞÒ, ãÚÐ×ÐÝÝëå ÒëèÕ, áÛÕÔãÕâ ÞÑàÐéÐâìáï Ú ¿àÕÔáâÐÒØâÕÛî IBM ßÞ ¿àÞÔÐÖÐÜ ØÛØ Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, çâÞÑë ßÞÛãçØâì áÞÞâÒÕâáâÒãîéãî ÛØæÕÝרî. + +½ØÖÕ ßÕàÕçØáÛÕÝë ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, ÛØæÕÝרàãÕÜëÕ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ: +IBM MQ Idle Standby V9.0.3 + +ºÞÜßÞÝÕÝâë, ÚÞâÞàëÕ ÝÕ ØáßÞÛì×ãîâáï ÔÛï ßÞÛãçÕÝØï âàÕÑãÕÜëå àÐ×àÕèÕÝØÙ + +¿àØ ÞßàÕÔÕÛÕÝØØ ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ãáâÐÝÞÒÚØ ØÛØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ, ãçØâëÒÐÕâáï ãáâÐÝÞÒÚÐ ØÛØ ØáßÞÛì×ÞÒÐÝØÕ áÛÕÔãîéØå ÚÞÜßÞÝÕÝâÞÒ ¿àÞÓàÐÜÜë. ´àãÓØÜØ áÛÞÒÐÜØ, »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÞÒØâì Ø ØáßÞÛì×ÞÒÐâì áÛÕÔãîéØÕ ÚÞÜßÞÝÕÝâë ¿àÞÓàÐÜÜë á áÞÑÛîÔÕÝØÕÜ ãáÛÞÒØÙ ÛØæÕÝרØ, ÞÔÝÐÚÞ íâØ ÚÞÜßÞÝÕÝâë ÝÕ ØáßÞÛì×ãîâáï ÔÛï ÞßàÕÔÕÛÕÝØï ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ¿àÞÓàÐÜÜë. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + +ÁÛÕÔãîéØÕ ÕÔØÝØæë Ø×ÜÕàÕÝØï ÜÞÓãâ ßàØÜÕÝïâìáï Ú ØáßÞÛì×ÞÒÐÝØî ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +µÔØÝØæÐ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ (PVU) + +µÔØÝØæÐ ÜÞéÝÞáâØ ßàÞæÕááÞàÐ (PVU) - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï íâÐ ¿àÞÓàÐÜÜÐ. ÇØáÛÞ ÝÕÞÑåÞÔØÜëå àÐ×àÕèÕÝØÙ ÝÐ ÞáÝÞÒÕ PVU ×ÐÒØáØâ Þâ ßàÞæÕááÞàÝÞÙ âÕåÝÞÛÞÓØØ (ÞßàÕÔÕÛïÕâáï ßÞ ¿ÞáâÐÒéØÚã ¿àÞæÕááÞàÐ, ÂÞàÓÞÒÞÙ ¼ÐàÚÕ, ÂØßã Ø ½ÞÜÕàã ¼ÞÔÕÛØ Ò ÂÐÑÛØæÕ PVU, àÐ×ÜÕéÕÝÝÞÙ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) Ø çØáÛÐ ßàÞæÕááÞàÞÒ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë. ´Ûï æÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ PVU IBM ßÞ-ßàÕÖÝÕÜã ÞßàÕÔÕÛïÕâ ßàÞæÕááÞà ÚÐÚ ßàÞæÕááÞàÝÞÕ ïÔàÞ ÝÐ ÜØÚàÞáåÕÜÕ. ¼ØÚàÞáåÕÜÐ ÔÒãåêïÔÕàÝÞÓÞ ßàÞæÕááÞàÐ, ÝÐßàØÜÕà, áÞÔÕàÖØâ ÔÒÐ ßàÞæÕááÞàÝëå ïÔàÐ. + +»ØæÕÝרÐâ ÜÞÖÕâ ÒÝÕÔàØâì ¿àÞÓàÐÜÜã á ØáßÞÛì×ÞÒÐÝØÕÜ ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ, ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ (½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ) Ò áÞÞâÒÕâáâÒØØ á ÃáÛÞÒØïÜØ »ØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ ßÞ ßàÞÓàÐÜÜÕ Passport Advantage (áÜ. ÝØÖÕãÚÐ×ÐÝÝãî Web-áâàÐÝØæã). ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï ÝÐ ÞáÝÞÒÕ PVU Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà* Ò äØ×ØçÕáÚÞÙ ÐßßÐàÐâÝÞÙ áàÕÔÕ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, ×Ð ØáÚÛîçÕÝØÕÜ âÕå áÕàÒÕàÞÒ, á ÚÞâÞàëå ¿àÞÓàÐÜÜÐ ãÔÐÛÕÝÐ ÝÐÒáÕÓÔÐ. ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, Ò áÞÞâÒÕâáâÒØØ á ¿àÐÒØÛÐÜØ ¿ÞÔáçÕâÐ çØáÛÐ »ØæÕÝ×ØÙ ÔÛï ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ ÝÐ Web-áâàÐÝØæÕ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* °ÚâØÒØàÞÒÐÝÝÞÕ ßàÞæÕááÞàÝÞÕ ïÔàÞ - íâÞ ßàÞæÕááÞàÝÞÕ ïÔàÞ, ÔÞáâãßÝÞÕ ÔÛï ØáßÞÛì×ÞÒÐÝØï ÝÐ äØ×ØçÕáÚÞÜ ØÛØ ÒØàâãÐÛìÝÞÜ áÕàÒÕàÕ, ÔÐÖÕ Ò âÞÜ áÛãçÐÕ, ÕáÛØ ÜÞéÝÞáâì ßàÞæÕááÞàÝëå ïÔÕà ÜÞÖÕâ Ñëâì ÞÓàÐÝØçÕÝÐ ØÛØ ÞÓàÐÝØçØÒÐÕâáï á ßÞÜÞéìî âÕåÝÞÛÞÓØÙ ÒØàâãÐÛØ×ÐæØØ, ÚÞÜÐÝÔ ÞßÕàÐæØÞÝÝÞÙ áØáâÕÜë, ßÐàÐÜÕâàÞÒ ÝÐáâàÞÙÚØ BIOS ØÛØ ÐÝÐÛÞÓØçÝëå ÞÓàÐÝØçÕÝØÙ. + +² ÔÞßÞÛÝÕÝØÕ Ú ÒëèÕáÚÐ×ÐÝÝÞÜã áÛÕÔãîéØÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +ºÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ + +² ÔÐÝÝÞÜ àÐ×ÔÕÛÕ ßÞÔ ÚÞÝäØÓãàÐæØÕÙ "á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ" ßÞÝØÜÐÕâáï âÐÚÐï ÚÞÝäØÓãàÐæØï, ÚÞÓÔÐ ÚÞßØï ¿àÞÓàÐÜÜë ãáâÐÝÞÒÛÕÝÐ ÝÐ áÕàÒÕàÕ, ÚÞâÞàëÙ ïÒÛïÕâáï çÐáâìî àÕèÕÝØï ßÞ ÞÑÕáßÕçÕÝØî ÒëáÞÚÞÙ ÔÞáâãßÝÞáâØ Ø ÝÐ ÚÞâÞàëÙ ÑãÔÕâ ßÕàÕÚÛîçÐâìáï ¿àÞÓàÐÜÜÐ Ò âÕå áÛãçÐïå, ÕáÛØ ÚÞßØï ¿àÞÓàÐÜÜë ÝÐ ÐÚâØÒÝÞÜ áÕàÒÕàÕ ÝÕ ÜÞÖÕâ íÚáßÛãÐâØàÞÒÐâìáï. ÁÕàÒÕà áçØâÐÕâáï "ÝÕÐÚâØÒÝëÜ" âÞÛìÚÞ Ò âÕå áÛãçÐïå, ÕáÛØ, ÔÞ ÜÞÜÕÝâÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ, ÞÝ ØáßÞÛì×ãÕâáï ØáÚÛîçØâÕÛìÝÞ ÔÛï ÞßÕàÐæØÙ ÐÔÜØÝØáâàØàÞÒÐÝØï, ßÞÔÔÕàÖØÒÐîéØå áæÕÝÐàØØ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +¿àÞÓàÐÜÜã ÝÕÛì×ï ãáâÐÝÐÒÛØÒÐâì ÝÐ ½ÕÐÚâØÒÝëÙ ÀÕ×ÕàÒÝëÙ áÕàÒÕà, ÕáÛØ ÝÕâ ÝÐÔÛÕÖÐéÕÙ ÛØæÕÝרØ. + +µáÛØ ¿àÞÓàÐÜÜÐ ØáßÞÛì×ãÕâáï Ò ÚÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ áÞÒÜÕáâÝÞ á äãÝÚæØÕÙ Multi-Instance Queue Manager, ÚÞßØï ¿àÞÓàÐÜÜë ÜÞÖÕâ àÐ×ÜÕéÐâìáï ÔÛï æÕÛÕÙ àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï ÝÐ ½ÕÐÚâØÒÝÞÜ ÀÕ×ÕàÒÝÞÜ áÕàÒÕàÕ Ø ÜÞÖÕâ ×ÐßãáÚÐâìáï, ÝÞ ÔÞÛÖÝÐ ÞáâÐÒÐâìáï "ÝÕÐÚâØÒÝÞÙ" Ø ÝÕ ÔÞÛÖÝÐ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç ÚÐÚÞÓÞ-ÛØÑÞ âØßÐ, ×Ð ØáÚÛîçÕÝØÕÜ áÛãçÐÕÒ ßÕàÕÚÛîçÕÝØï ÝÐ ½ÕÐÚâØÒÝëÙ ÀÕ×ÕàÒÝëÙ áÕàÒÕà ßàØ ÞâÚÐ×Õ ÐÚâØÒÝÞÓÞ áÕàÒÕàÐ, Ò ÚÐÚÞÒÞÜ áÛãçÐÕ ½ÕÐÚâØÒÝÐï ÀÕ×ÕàÒÝÐï ÚÞߨï ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç Ò âÕçÕÝØÕ ßÕàØÞÔÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +µáÛØ ¿àÞÓàÐÜÜÐ ØáßÞÛì×ãÕâáï Ò ÚÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ áÞÒÜÕáâÝÞ á ÔàãÓØÜØ áØáâÕÜÐÜØ ²ëáÞÚÞÙ ´ÞáâãßÝÞáâØ, ÚÞßØï ¿àÞÓàÐÜÜë ÜÞÖÕâ àÐ×ÜÕéÐâìáï ÔÛï æÕÛÕÙ àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï ÝÐ ½ÕÐÚâØÒÝÞÜ ÀÕ×ÕàÒÝÞÜ áÕàÒÕàÕ, ÝÞ ÝÕ ÜÞÖÕâ ×ÐßãáÚÐâìáï (Ø, áÞÞâÒÕâáâÒÕÝÝÞ, ÝÕ ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç ÚÐÚÞÓÞ-ÛØÑÞ âØßÐ), ÞÔÝÐÚÞ âÐÚÐï ÚÞߨï ÑãÔÕâ ×ÐßãéÕÝÐ ÐÒâÞÜÐâØçÕáÚØ ÚÞÜßÞÝÕÝâÐÜØ ÞÑÕáßÕçÕÝØï ²ëáÞÚÞÙ ´ÞáâãßÝÞáâØ Ò áÛãçÐÕ ÒëåÞÔÐ Ø× áâàÞï ÐÚâØÒÝÞÓÞ áÕàÒÕàÐ, Ò ÚÐÚÞÒÞÜ áÛãçÐÕ ½ÕÐÚâØÒÝÐï ÀÕ×ÕàÒÝÐï ÚÞߨï ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç Ò âÕçÕÝØÕ ßÕàØÞÔÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +²°¶½¾: ¿À¾Ç¸µ ²½¸¼°Âµ»Ì½¾ + +½ØÖÕ ßàÕÔáâÐÒÛÕÝë ÔÒÐ ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØï. + +1. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ +2. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ßàÞØ×ÒÞÔáâÒÕÝÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï (ÝÕ ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ. + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ (áÞÒÜÕáâÝÞ ØÜÕÝãÕÜëå "¾æÕÝÚÐ"): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï (i) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ ("»ØæÕÝרï ÝÐ ¾æÕÝÚã") Ø (ii) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA"). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã ßàØÜÕÝïÕâáï Ò âÕçÕÝØÕ áàÞÚÐ ¾æÕÝÚØ »ØæÕÝרÐâÐ. + +IPLA ÑãÔÕâ ÐÒâÞÜÐâØçÕáÚØ ßàØÜÕÝïâìáï, ÕáÛØ »ØæÕÝרÐâ àÕèØâ áÞåàÐÝØâì ¿àÞÓàÐÜÜã ßÞáÛÕ ÞÚÞÝçÐÝØï ßÕàØÞÔÐ ¾æÕÝÚØ (ØÛØ ßÞÛãçØâì ÔÞßÞÛÝØâÕÛìÝëÕ ÚÞßØØ ¿àÞÓàÐÜÜë ÔÛï ØáßÞÛì×ÞÒÐÝØï ßÞáÛÕ ÞÚÞÝçÐÝØï ¾æÕÝÚØ), ×ÐÚÛîçØÒ áÞÓÛÐèÕÝØÕ Þ ßàØÞÑàÕâÕÝØØ (ÝÐßàØÜÕà, ¼ÕÖÔãÝÐàÞÔÝÞÕ áÞÓÛÐèÕÝØÕ IBM Passport Advantage ØÛØ ÁÞÓÛÐèÕÝØÕ IBM Passport Advantage Express). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã Ø IPLA ÝÕ ÔÕÙáâÒãîâ ÞÔÝÞÒàÕÜÕÝÝÞ; ÝØ ÞÔÝÞ Ø× íâØå áÞÓÛÐèÕÝØÙ ÝÕ Ø×ÜÕÝïÕâ ãáÛÞÒØÙ ÔàãÓÞÓÞ; Ø ÚÐÖÔÞÕ áÞÓÛÐèÕÝØÕ ÝÕ ×ÐÒØáØâ Þâ ÔàãÓÞÓÞ. + +¿ÞÛÝëÙ âÕÚáâ ÞÑÞØå ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØÙ ßàØÒÞÔØâáï ÝØÖÕ. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ (Z125-5543-05). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë (½ÞÜÕà ¿àÞÓàÐÜÜë): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +ÁÛÕÔãîéØÕ áâÐÝÔÐàâÝëÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +¿ÕàØÞÔ ¾æÕÝÚØ + +¿ÕàØÞÔ ÞæÕÝÚØ ÝÐçØÝÐÕâáï Ò ÔÐâã, ÚÞÓÔÐ »ØæÕÝרÐâ áÞÓÛÐèÐÕâáï á ãáÛÞÒØïÜØ ÔÐÝÝÞÓÞ ÁÞÓÛÐèÕÝØï, Ø ×ÐÚÐÝçØÒÐÕâáï çÕàÕ× 90 ÔÝÕÙ. + +²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë + +¿àÞÓàÐÜÜÐ ÛØæÕÝרàãÕâáï ÚÐÚ ßÐÚÕâ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ, áÞáâÞïéØÙ Ø× ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ, ãÚÐ×ÐÝÝëå ÝØÖÕ. »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÐÒÛØÒÐâì Ø ØáßÞÛì×ÞÒÐâì âÐÚØÕ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë Ò ßàÕÔÕÛÐå ÁÒØÔÕâÕÛìáâÒ Þ ¿àÐÒÐå ÝÐ ¿àÞÓàÐÜÜã Ø ÚÐÚ ãÚÐ×ÐÝÞ Ò ÝÐáâÞïéÕÜ ÔÞÚãÜÕÝâÕ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ßÕàÕÔÐÒÐâì ØÛØ ßÕàÕßàÞÔÐÒÐâì ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë ÞâÔÕÛìÝÞ Þâ ßÐÚÕâÐ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ. º ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜÕ ÜÞÓãâ ßàØÛÐÓÐâìáï ÛØæÕÝרÞÝÝëÕ ßÞÛÞÖÕÝØï, Ø íâØ ßÞÛÞÖÕÝØï, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ßàØÜÕÝïîâáï Ú ØáßÞÛì×ÞÒÐÝØî »ØæÕÝרÐâÞÜ âÐÚÞÙ ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ² áÛãçÐÕ ßàÞâØÒÞàÕçØÙ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ×ÐÜÕÝïîâ áÞÑÞÙ ßÞÛÞÖÕÝØï ÔÛï ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ºÞÓÔÐ ßàÐÒÞ »ØæÕÝרÐâÐ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ØáâÕÚÐÕâ ØÛØ ßàÕÚàÐéÐÕâáï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÕàÕáâÐâì ØáßÞÛì×ÞÒÐâì, ãÝØçâÞÖØâì ØÛØ ÝÕ×ÐÜÕÔÛØâÕÛìÝÞ ÒÕàÝãâì ÒáÕ ÚÞßØØ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ ÞÝ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÛãçØâì ÛØæÕÝרî ÝÐ ÛîÑÞÕ ØáßÞÛì×ÞÒÐÝØÕ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áÒÕàå ßàÕÔÕÛÞÒ, ãÚÐ×ÐÝÝëå ÒëèÕ, áÛÕÔãÕâ ÞÑàÐéÐâìáï Ú ¿àÕÔáâÐÒØâÕÛî IBM ßÞ ¿àÞÔÐÖÐÜ ØÛØ Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, çâÞÑë ßÞÛãçØâì áÞÞâÒÕâáâÒãîéãî ÛØæÕÝרî. + +½ØÖÕ ßÕàÕçØáÛÕÝë ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, ÛØæÕÝרàãÕÜëÕ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ: +IBM MQ V9.0.3 + +¾ÓàÐÝØçÕÝØÕ "ÔÛï ÀÐ×àÐÑÞâçØÚÞÒ" + +µáÛØ ¿àÞÓàÐÜÜÐ ØÜÕÕâ ÞÑÞ×ÝÐçÕÝØÕ "´Ûï ÀÐ×àÐÑÞâçØÚÞÒ" (Developers), âÞ íâã ¿àÞÓàÐÜÜã ÜÞÖÝÞ ÒÝÕÔàØâì âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÙ àÐ×àÐÑÞâÚØ Ø ÑÛÞÚ-âÕáâØàÞÒÐÝØï »ØæÕÝרÐâÐ ÝÐ ÜÐèØÝÕ àÐ×àÐÑÞâçØÚÐ. ¼ÐèØÝÐ àÐ×àÐÑÞâçØÚÐ ? íâÞ äØ×ØçÕáÚÐï ØÛØ ÒØàâãÐÛìÝÐï áàÕÔÐ ÝÐáâÞÛìÝÞÓÞ ÚÞÜßìîâÕàÐ, ÝÐ ÚÞâÞàÞÜ ÒëßÞÛÝïîâáï ÞáÝÞÒÝÐï ÞßÕàÐæØÞÝÝÐï áØáâÕÜÐ Ø ¿àÞÓàÐÜÜÐ, Ú ÚÞâÞàëÜ ÞáãéÕáâÒÛïÕâ ÔÞáâãß Ø ÚÞâÞàëÕ ØáßÞÛì×ãÕâ ÝÕ ÑÞÛÕÕ çÕÜ ÞÔØÝ ÞßàÕÔÕÛÕÝÝëÙ àÐ×àÐÑÞâçØÚ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï ßàÞØ×ÒÞÔáâÒÕÝÝëå àÐÑÞçØå ÝÐÓàã×ÞÚ, áÒï×ÐÝÝëå á ÞÑàÐÑÞâÚÞÙ, ÜÞÔÕÛØàÞÒÐÝØÕÜ ØÛØ âÕáâØàÞÒÐÝØÕÜ ÛîÑÞÓÞ ÚÞÔÐ, ßàØÛÞÖÕÝØï ØÛØ áØáâÕÜë. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ÚÐÚãî-ÛØÑÞ çÐáâì ¿àÞÓàÐÜÜë ÔÛï ÛîÑëå ØÝëå æÕÛÕÙ ÑÕ× ßàØÞÑàÕâÕÝØï áÞÞâÒÕâáâÒãîéØå àÐ×àÕèÕÝØÙ ÝÐ ßàÞØ×ÒÞÔáâÒÕÝÝÞÕ ØáßÞÛì×ÞÒÐÝØÕ. + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ (Z125-3301-14). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë (½ÞÜÕà ¿àÞÓàÐÜÜë): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +ÁÛÕÔãîéØÕ áâÐÝÔÐàâÝëÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +¿àÐÒÞ ÝÐ ÞÓàÐÝØçÕÝÝÞÕ ØáßÞÛì×ÞÒÐÝØÕ + +ºÐÚ ãÚÐ×ÐÝÞ Ò ¼ÕÖÔãÝÐàÞÔÝÞÜ »ØæÕÝרÞÝÝÞÜ ÁÞÓÛÐèÕÝØØ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA") Ø ÝÐáâÞïéÕÙ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ, IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÞÓàÐÝØçÕÝÝÞÕ ßàÐÒÞ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. ÍâÞ ßàÐÒÞ ÞÓàÐÝØçØÒÐÕâáï ãàÞÒÝÕÜ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ÝÐßàØÜÕà, µÔØÝØæÐÜØ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ ("PVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ÀÕáãàáÞÒ ("RVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ("VU") ØÛØ ÔàãÓØÜ ãÚÐ×ÐÝÝëÜ ãàÞÒÝÕÜ ØáßÞÛì×ÞÒÐÝØï, ÞßÛÐçÕÝÝëÜ »ØæÕÝרÐâÞÜ, ÚÐÚ ïÒáâÒãÕâ Ø× ÁÒØÔÕâÕÛìáâÒÐ Þ ¿àÐÒÐå. ¸áßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ ÜÞÖÕâ âÐÚÖÕ Ñëâì ÞÓàÐÝØçÕÝÞ ÞßàÕÔÕÛÕÝÝÞÙ ÜÐèØÝÞÙ ØÛØ ØáßÞÛì×ÞÒÐÝØÕÜ âÞÛìÚÞ Ò ÚÐçÕáâÒÕ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë ÛØÑÞ ÜÞÖÕâ ßÞÔßÐÔÐâì ßÞÔ ÔàãÓØÕ ÞÓàÐÝØçÕÝØï. ¿ÞáÚÞÛìÚã »ØæÕÝרÐâ ÞßÛÐâØÛ ÝÕ Òáî íÚÞÝÞÜØçÕáÚãî áâÞØÜÞáâì ¿àÞÓàÐÜÜë, ÝØÚÐÚÞÕ ÔàãÓÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÝÕ àÐ×àÕèÐÕâáï ÑÕ× ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ. ºàÞÜÕ âÞÓÞ, »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï ßàÕÔÞáâÐÒÛÕÝØï ÚÞÜÜÕàçÕáÚØå ¸Â-ãáÛãÓ ÚÐÚÞÜã-ÛØÑÞ âàÕâìÕÜã ÛØæã, ÔÛï ÞáãéÕáâÒÛÕÝØï ÚÞÜÜÕàçÕáÚÞÓÞ åÞáâØÝÓÐ ØÛØ ØáßÞÛì×ÞÒÐÝØï Ò àÕÖØÜÕ àÐ×ÔÕÛÕÝØï ÒàÕÜÕÝØ, Ð âÐÚÖÕ ÝÕ àÐ×àÕèÐÕâáï áãÑÛØæÕÝרàÞÒÐâì ¿àÞÓàÐÜÜã, áÔÐÒÐâì ÕÕ Ò ÐàÕÝÔã ØÛØ ÛØ×ØÝÓ, ÕáÛØ íâÞ ïÒÝÞ ÝÕ ãÚÐ×ÐÝÞ Ò áÞÞâÒÕâáâÒãîéØå áÞÓÛÐèÕÝØïå, ÝÐ ÞáÝÞÒÐÝØØ ÚÞâÞàëå »ØæÕÝרÐâ ßÞÛãçÐÕâ àÐ×àÕèÕÝØÕ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. »ØæÕÝרÐâ ÜÞÖÕâ ßÞÛãçÐâì ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ Ò àÕ×ãÛìâÐâÕ ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ ØÛØ ÝÐ ÞáÝÞÒÐÝØØ ÔÞßÞÛÝØâÕÛìÝëå ãáÛÞÒØÙ. IBM ÞáâÐÒÛïÕâ ×Ð áÞÑÞÙ ßàÐÒÞ ÞßàÕÔÕÛïâì, áâÞØâ ÛØ ßàÕÔÞáâÐÒÛïâì »ØæÕÝרÐâã âÐÚØÕ ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ. + +ÁßÕæØäØÚÐæØØ + +ÁßÕæØäØÚÐæØØ ¿àÞÓàÐÜÜë ÜÞÖÝÞ ÝÐÙâØ Ò ÞÑêÕÔØÝÕÝÝëå àÐ×ÔÕÛÐå "¾ßØáÐÝØÕ Ø âÕåÝØçÕáÚÐï ØÝäÞàÜÐæØï" ¾ÑêïÒÛÕÝØÙ Þ ÒëßãáÚÕ ¿àÞÓàÐÜÜë. + +²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë + +¿àÞÓàÐÜÜÐ ÛØæÕÝרàãÕâáï ÚÐÚ ßÐÚÕâ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ, áÞáâÞïéØÙ Ø× ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ, ãÚÐ×ÐÝÝëå ÝØÖÕ. »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÐÒÛØÒÐâì Ø ØáßÞÛì×ÞÒÐâì âÐÚØÕ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë Ò ßàÕÔÕÛÐå ÁÒØÔÕâÕÛìáâÒ Þ ¿àÐÒÐå ÝÐ ¿àÞÓàÐÜÜã Ø ÚÐÚ ãÚÐ×ÐÝÞ Ò ÝÐáâÞïéÕÜ ÔÞÚãÜÕÝâÕ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ßÕàÕÔÐÒÐâì ØÛØ ßÕàÕßàÞÔÐÒÐâì ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë ÞâÔÕÛìÝÞ Þâ ßÐÚÕâÐ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ. º ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜÕ ÜÞÓãâ ßàØÛÐÓÐâìáï ÛØæÕÝרÞÝÝëÕ ßÞÛÞÖÕÝØï, Ø íâØ ßÞÛÞÖÕÝØï, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ßàØÜÕÝïîâáï Ú ØáßÞÛì×ÞÒÐÝØî »ØæÕÝרÐâÞÜ âÐÚÞÙ ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ² áÛãçÐÕ ßàÞâØÒÞàÕçØÙ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ×ÐÜÕÝïîâ áÞÑÞÙ ßÞÛÞÖÕÝØï ÔÛï ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ºÞÓÔÐ ßàÐÒÞ »ØæÕÝרÐâÐ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ØáâÕÚÐÕâ ØÛØ ßàÕÚàÐéÐÕâáï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÕàÕáâÐâì ØáßÞÛì×ÞÒÐâì, ãÝØçâÞÖØâì ØÛØ ÝÕ×ÐÜÕÔÛØâÕÛìÝÞ ÒÕàÝãâì ÒáÕ ÚÞßØØ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ ÞÝ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÛãçØâì ÛØæÕÝרî ÝÐ ÛîÑÞÕ ØáßÞÛì×ÞÒÐÝØÕ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áÒÕàå ßàÕÔÕÛÞÒ, ãÚÐ×ÐÝÝëå ÒëèÕ, áÛÕÔãÕâ ÞÑàÐéÐâìáï Ú ¿àÕÔáâÐÒØâÕÛî IBM ßÞ ¿àÞÔÐÖÐÜ ØÛØ Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, çâÞÑë ßÞÛãçØâì áÞÞâÒÕâáâÒãîéãî ÛØæÕÝרî. + +½ØÖÕ ßÕàÕçØáÛÕÝë ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, ÛØæÕÝרàãÕÜëÕ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ: +IBM MQ V9.0.3 + +¾ÓàÐÝØçÕÝØÕ "ÔÛï ÀÐ×àÐÑÞâçØÚÞÒ" + +µáÛØ ¿àÞÓàÐÜÜÐ ØÜÕÕâ ÞÑÞ×ÝÐçÕÝØÕ "´Ûï ÀÐ×àÐÑÞâçØÚÞÒ" (Developers), âÞ íâã ¿àÞÓàÐÜÜã ÜÞÖÝÞ ÒÝÕÔàØâì âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÙ àÐ×àÐÑÞâÚØ Ø ÑÛÞÚ-âÕáâØàÞÒÐÝØï »ØæÕÝרÐâÐ ÝÐ ÜÐèØÝÕ àÐ×àÐÑÞâçØÚÐ. ¼ÐèØÝÐ àÐ×àÐÑÞâçØÚÐ ? íâÞ äØ×ØçÕáÚÐï ØÛØ ÒØàâãÐÛìÝÐï áàÕÔÐ ÝÐáâÞÛìÝÞÓÞ ÚÞÜßìîâÕàÐ, ÝÐ ÚÞâÞàÞÜ ÒëßÞÛÝïîâáï ÞáÝÞÒÝÐï ÞßÕàÐæØÞÝÝÐï áØáâÕÜÐ Ø ¿àÞÓàÐÜÜÐ, Ú ÚÞâÞàëÜ ÞáãéÕáâÒÛïÕâ ÔÞáâãß Ø ÚÞâÞàëÕ ØáßÞÛì×ãÕâ ÝÕ ÑÞÛÕÕ çÕÜ ÞÔØÝ ÞßàÕÔÕÛÕÝÝëÙ àÐ×àÐÑÞâçØÚ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï ßàÞØ×ÒÞÔáâÒÕÝÝëå àÐÑÞçØå ÝÐÓàã×ÞÚ, áÒï×ÐÝÝëå á ÞÑàÐÑÞâÚÞÙ, ÜÞÔÕÛØàÞÒÐÝØÕÜ ØÛØ âÕáâØàÞÒÐÝØÕÜ ÛîÑÞÓÞ ÚÞÔÐ, ßàØÛÞÖÕÝØï ØÛØ áØáâÕÜë. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ÚÐÚãî-ÛØÑÞ çÐáâì ¿àÞÓàÐÜÜë ÔÛï ÛîÑëå ØÝëå æÕÛÕÙ ÑÕ× ßàØÞÑàÕâÕÝØï áÞÞâÒÕâáâÒãîéØå àÐ×àÕèÕÝØÙ ÝÐ ßàÞØ×ÒÞÔáâÒÕÝÝÞÕ ØáßÞÛì×ÞÒÐÝØÕ. + +ºÞÜßÞÝÕÝâë, ÚÞâÞàëÕ ÝÕ ØáßÞÛì×ãîâáï ÔÛï ßÞÛãçÕÝØï âàÕÑãÕÜëå àÐ×àÕèÕÝØÙ + +¿àØ ÞßàÕÔÕÛÕÝØØ ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ãáâÐÝÞÒÚØ ØÛØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ, ãçØâëÒÐÕâáï ãáâÐÝÞÒÚÐ ØÛØ ØáßÞÛì×ÞÒÐÝØÕ áÛÕÔãîéØå ÚÞÜßÞÝÕÝâÞÒ ¿àÞÓàÐÜÜë. ´àãÓØÜØ áÛÞÒÐÜØ, »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÞÒØâì Ø ØáßÞÛì×ÞÒÐâì áÛÕÔãîéØÕ ÚÞÜßÞÝÕÝâë ¿àÞÓàÐÜÜë á áÞÑÛîÔÕÝØÕÜ ãáÛÞÒØÙ ÛØæÕÝרØ, ÞÔÝÐÚÞ íâØ ÚÞÜßÞÝÕÝâë ÝÕ ØáßÞÛì×ãîâáï ÔÛï ÞßàÕÔÕÛÕÝØï ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ¿àÞÓàÐÜÜë. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + +ÁÛÕÔãîéØÕ ÕÔØÝØæë Ø×ÜÕàÕÝØï ÜÞÓãâ ßàØÜÕÝïâìáï Ú ØáßÞÛì×ÞÒÐÝØî ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +ÃáâÐÝÞÒÚÐ + +ÃáâÐÝÞÒÚÐ - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï ¿àÞÓàÐÜÜÐ. ÃáâÐÝÞÒÚÐ - íâÞ ÚÞßØï ¿àÞÓàÐÜÜë, ãáâÐÝÞÒÛÕÝÝÐï ÝÐ äØ×ØçÕáÚÞÜ ØÛØ ÒØàâãÐÛìÝÞÜ ÔØáÚÕ Ø ÔÞáâãßÝÐï ÔÛï ÒëßÞÛÝÕÝØï ÝÐ ÚÞÜßìîâÕàÕ. »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÞÛãçØâì àÐ×àÕèÕÝØÕ ÔÛï ÚÐÖÔÞÙ ÃáâÐÝÞÒÚØ ¿àÞÓàÐÜÜë. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +²°¶½¾: ¿À¾Ç¸µ ²½¸¼°Âµ»Ì½¾ + +½ØÖÕ ßàÕÔáâÐÒÛÕÝë ÔÒÐ ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØï. + +1. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ +2. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ßàÞØ×ÒÞÔáâÒÕÝÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï (ÝÕ ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ. + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ (áÞÒÜÕáâÝÞ ØÜÕÝãÕÜëå "¾æÕÝÚÐ"): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï (i) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ ("»ØæÕÝרï ÝÐ ¾æÕÝÚã") Ø (ii) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA"). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã ßàØÜÕÝïÕâáï Ò âÕçÕÝØÕ áàÞÚÐ ¾æÕÝÚØ »ØæÕÝרÐâÐ. + +IPLA ÑãÔÕâ ÐÒâÞÜÐâØçÕáÚØ ßàØÜÕÝïâìáï, ÕáÛØ »ØæÕÝרÐâ àÕèØâ áÞåàÐÝØâì ¿àÞÓàÐÜÜã ßÞáÛÕ ÞÚÞÝçÐÝØï ßÕàØÞÔÐ ¾æÕÝÚØ (ØÛØ ßÞÛãçØâì ÔÞßÞÛÝØâÕÛìÝëÕ ÚÞßØØ ¿àÞÓàÐÜÜë ÔÛï ØáßÞÛì×ÞÒÐÝØï ßÞáÛÕ ÞÚÞÝçÐÝØï ¾æÕÝÚØ), ×ÐÚÛîçØÒ áÞÓÛÐèÕÝØÕ Þ ßàØÞÑàÕâÕÝØØ (ÝÐßàØÜÕà, ¼ÕÖÔãÝÐàÞÔÝÞÕ áÞÓÛÐèÕÝØÕ IBM Passport Advantage ØÛØ ÁÞÓÛÐèÕÝØÕ IBM Passport Advantage Express). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã Ø IPLA ÝÕ ÔÕÙáâÒãîâ ÞÔÝÞÒàÕÜÕÝÝÞ; ÝØ ÞÔÝÞ Ø× íâØå áÞÓÛÐèÕÝØÙ ÝÕ Ø×ÜÕÝïÕâ ãáÛÞÒØÙ ÔàãÓÞÓÞ; Ø ÚÐÖÔÞÕ áÞÓÛÐèÕÝØÕ ÝÕ ×ÐÒØáØâ Þâ ÔàãÓÞÓÞ. + +¿ÞÛÝëÙ âÕÚáâ ÞÑÞØå ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØÙ ßàØÒÞÔØâáï ÝØÖÕ. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ (Z125-5543-05). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Managed File Transfer Service V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: Evaluation + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: Evaluation + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Managed File Transfer Agent V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: Evaluation + +¿ÕàØÞÔ ¾æÕÝÚØ + +¿ÕàØÞÔ ÞæÕÝÚØ ÝÐçØÝÐÕâáï Ò ÔÐâã, ÚÞÓÔÐ »ØæÕÝרÐâ áÞÓÛÐèÐÕâáï á ãáÛÞÒØïÜØ ÔÐÝÝÞÓÞ ÁÞÓÛÐèÕÝØï, Ø ×ÐÚÐÝçØÒÐÕâáï çÕàÕ× 90 ÔÝÕÙ. + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ (Z125-3301-14). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Managed File Transfer Service V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: 5724-H72 + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: 5724-H72 + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Managed File Transfer Agent V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: 5724-H72 + +ºÐÚ ãÚÐ×ÐÝÞ Ò ¼ÕÖÔãÝÐàÞÔÝÞÜ »ØæÕÝרÞÝÝÞÜ ÁÞÓÛÐèÕÝØØ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA") Ø ÝÐáâÞïéÕÙ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ, IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÞÓàÐÝØçÕÝÝÞÕ ßàÐÒÞ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. ÍâÞ ßàÐÒÞ ÞÓàÐÝØçØÒÐÕâáï ãàÞÒÝÕÜ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ÝÐßàØÜÕà, µÔØÝØæÐÜØ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ ("PVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ÀÕáãàáÞÒ ("RVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ("VU") ØÛØ ÔàãÓØÜ ãÚÐ×ÐÝÝëÜ ãàÞÒÝÕÜ ØáßÞÛì×ÞÒÐÝØï, ÞßÛÐçÕÝÝëÜ »ØæÕÝרÐâÞÜ, ÚÐÚ ïÒáâÒãÕâ Ø× ÁÒØÔÕâÕÛìáâÒÐ Þ ¿àÐÒÐå. ¸áßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ ÜÞÖÕâ âÐÚÖÕ Ñëâì ÞÓàÐÝØçÕÝÞ ÞßàÕÔÕÛÕÝÝÞÙ ÜÐèØÝÞÙ ØÛØ ØáßÞÛì×ÞÒÐÝØÕÜ âÞÛìÚÞ Ò ÚÐçÕáâÒÕ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë ÛØÑÞ ÜÞÖÕâ ßÞÔßÐÔÐâì ßÞÔ ÔàãÓØÕ ÞÓàÐÝØçÕÝØï. ¿ÞáÚÞÛìÚã »ØæÕÝרÐâ ÞßÛÐâØÛ ÝÕ Òáî íÚÞÝÞÜØçÕáÚãî áâÞØÜÞáâì ¿àÞÓàÐÜÜë, ÝØÚÐÚÞÕ ÔàãÓÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÝÕ àÐ×àÕèÐÕâáï ÑÕ× ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ. ºàÞÜÕ âÞÓÞ, »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï ßàÕÔÞáâÐÒÛÕÝØï ÚÞÜÜÕàçÕáÚØå ¸Â-ãáÛãÓ ÚÐÚÞÜã-ÛØÑÞ âàÕâìÕÜã ÛØæã, ÔÛï ÞáãéÕáâÒÛÕÝØï ÚÞÜÜÕàçÕáÚÞÓÞ åÞáâØÝÓÐ ØÛØ ØáßÞÛì×ÞÒÐÝØï Ò àÕÖØÜÕ àÐ×ÔÕÛÕÝØï ÒàÕÜÕÝØ, Ð âÐÚÖÕ ÝÕ àÐ×àÕèÐÕâáï áãÑÛØæÕÝרàÞÒÐâì ¿àÞÓàÐÜÜã, áÔÐÒÐâì ÕÕ Ò ÐàÕÝÔã ØÛØ ÛØ×ØÝÓ, ÕáÛØ íâÞ ïÒÝÞ ÝÕ ãÚÐ×ÐÝÞ Ò áÞÞâÒÕâáâÒãîéØå áÞÓÛÐèÕÝØïå, ÝÐ ÞáÝÞÒÐÝØØ ÚÞâÞàëå »ØæÕÝרÐâ ßÞÛãçÐÕâ àÐ×àÕèÕÝØÕ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. »ØæÕÝרÐâ ÜÞÖÕâ ßÞÛãçÐâì ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ Ò àÕ×ãÛìâÐâÕ ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ ØÛØ ÝÐ ÞáÝÞÒÐÝØØ ÔÞßÞÛÝØâÕÛìÝëå ãáÛÞÒØÙ. IBM ÞáâÐÒÛïÕâ ×Ð áÞÑÞÙ ßàÐÒÞ ÞßàÕÔÕÛïâì, áâÞØâ ÛØ ßàÕÔÞáâÐÒÛïâì »ØæÕÝרÐâã âÐÚØÕ ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ. + +ÁßÕæØäØÚÐæØØ ¿àÞÓàÐÜÜë ÜÞÖÝÞ ÝÐÙâØ Ò ÞÑêÕÔØÝÕÝÝëå àÐ×ÔÕÛÐå "¾ßØáÐÝØÕ Ø âÕåÝØçÕáÚÐï ØÝäÞàÜÐæØï" ¾ÑêïÒÛÕÝØÙ Þ ÒëßãáÚÕ ¿àÞÓàÐÜÜë. + +ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë + +µáÛØ ¿àÞÓàÐÜÜÐ áÞÔÕàÖØâ ÚÞÜßÞÝÕÝâë, ÚÞâÞàëÕ ïÒÛïîâáï ÀÐáßàÞáâàÐÝïÕÜëÜØ ÍÛÕÜÕÝâÐÜØ, âÞ ÞÝØ ÑãÔãâ ãÚÐ×ÐÝë Ò äÐÙÛÕ REDIST, ßàØÛÐÓÐÕÜÞÜ Ú ¿àÞÓàÐÜÜÕ. ² ÔÞßÞÛÝÕÝØÕ Ú ÛØæÕÝרÞÝÝëÜ ßàÐÒÐÜ, ßàÕÔÞáâÐÒÛÕÝÝëÜ Ò àÐÜÚÐå ÁÞÓÛÐèÕÝØï, »ØæÕÝרÐâ ØÜÕÕâ ßàÐÒÞ àÐáßàÞáâàÐÝïâì ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ: +1) ÀÐáßàÞáâàÐÝÕÝØÕ ÔÞÛÖÝÞ ßàÞØ×ÒÞÔØâìáï âÞÛìÚÞ Ò ÒØÔÕ ÞÑêÕÚâÝÞÓÞ ÚÞÔÐ Ø ÔÞÛÖÝÞ áÞÞâÒÕâáâÒÞÒÐâì ÒáÕÜ ãÚÐ×ÐÝØïÜ, ØÝáâàãÚæØïÜ Ø áßÕæØäØÚÐæØïÜ, ÚÞâÞàëÕ ßàØÒÕÔÕÝë Ò ßàØÛÐÓÐÕÜÞÜ Ú ¿àÞÓàÐÜÜÕ äÐÙÛÕ REDIST ØÛØ Ò ÔÞÚãÜÕÝâÐæØØ. +2) µáÛØ ßàØÛÐÓÐÕÜÐï Ú ¿àÞÓàÐÜÜÕ ÔÞÚãÜÕÝâÐæØï Ò ïÒÝÞÙ äÞàÜÕ àÐ×àÕèÐÕâ »ØæÕÝרÐâã ÜÞÔØäØæØàÞÒÐâì ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë, âÐÚÐï ÜÞÔØäØÚÐæØï ÔÞÛÖÝÐ ÞáãéÕáâÒÛïâìáï Ò áÞÞâÒÕâáâÒØØ áÞ ÒáÕÜØ ãÚÐ×ÐÝØïÜØ, ØÝáâàãÚæØïÜØ Ø áßÕæØäØÚÐæØïÜØ, ßàØÒÕÔÕÝÝëÜØ Ò íâÞÙ ÔÞÚãÜÕÝâÐæØØ; íâØ ÜÞÔØäØÚÐæØØ, ÕáÛØ âÐÚÞÒëÕ ØÜÕîâ ÜÕáâÞ, ÔÞÛÖÝë àÐááÜÐâàØÒÐâìáï ÚÐÚ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë. +3) ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë ÜÞÖÝÞ àÐáßàÞáâàÐÝïâì âÞÛìÚÞ ÚÐÚ çÐáâì ßàØÛÞÖÕÝØï »ØæÕÝרÐâÐ, ÚÞâÞàÞÕ ÑëÛÞ àÐ×àÐÑÞâÐÝÞ á ØáßÞÛì×ÞÒÐÝØÕÜ ¿àÞÓàÐÜÜë ("¿àØÛÞÖÕÝØÕ »ØæÕÝרÐâÐ"), Ø âÞÛìÚÞ Ò æÕÛïå ßÞÔÔÕàÖÚØ ×ÐÚÐ×çØÚÞÒ »ØæÕÝרÐâÐ Ò áÒïר á ØáßÞÛì×ÞÒÐÝØÕÜ ØÜØ ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ. ¿àØÛÞÖÕÝØÕ »ØæÕÝרÐâÐ ÔÞÛÖÝÞ ØÜÕâì ×ÝÐçØâÕÛìÝãî ÔÞßÞÛÝØâÕÛìÝãî æÕÝÝÞáâì, á âÕÜ çâÞÑë ßÞÛãçÕÝØÕ ÀÐáßàÞáâàÐÝïÕÜëå ÍÛÕÜÕÝâÞÒ ÝÕ ïÒÛïÛÞáì ÞáÝÞÒÝÞÙ ÜÞâØÒÐæØÕÙ ÚÞÝÕçÝÞÓÞ ßÞÛì×ÞÒÐâÕÛï ßàØ ßàØÞÑàÕâÕÝØØ ßàÞÓàÐÜÜÝÞÓÞ ßàÞÔãÚâÐ »ØæÕÝרÐâÐ. +4) µáÛØ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë ÒÚÛîçÐîâ áàÕÔã Java Runtime Environment, »ØæÕÝרÐâ ÔÞÛÖÕÝ âÐÚÖÕ ÒÚÛîçØâì Ò ¿àØÛÞÖÕÝØÕ »ØæÕÝרÐâÐ ÔàãÓØÕ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë ßÞÜØÜÞ Java, ÚàÞÜÕ áÛãçÐÕÒ, ÚÞÓÔÐ ¿àØÛÞÖÕÝØÕ ßàÕÔÝÐ×ÝÐçÕÝÞ ÔÛï ÒëßÞÛÝÕÝØï âÞÛìÚÞ ÝÐ ÚÞÜßìîâÕàÝëå ãáâàÞÙáâÒÐå ÞÑéÕÓÞ ÝÐ×ÝÐçÕÝØï (ÝÐßàØÜÕà, ÝÐ ßÞàâÐâØÒÝëå ÚÞÜßìîâÕàÐå, ÝÐáâÞÛìÝëå ÚÞÜßìîâÕàÐå Ø áÕàÒÕàÐå), Ð ÝÕ ÝÐ ÚÐàÜÐÝÝëå ØÛØ ÔàãÓØå ÜÞÑØÛìÝëå ãáâàÞÙáâÒÐå (ÝÐßàØÜÕà, ÝÐ ãáâàÞÙáâÒÐå, ÚÞâÞàëÕ áÞÔÕàÖÐâ ÜØÚàÞßàÞæÕááÞà, ÝÞ ÞáÝÞÒÝëÜ ßàÕÔÝÐ×ÝÐçÕÝØÕÜ ÚÞâÞàëå ÝÕ ïÒÛïîâáï ÒëçØáÛÕÝØï). +5) »ØæÕÝרÐâ ÝÕ ÜÞÖÕâ ãÔÐÛïâì ÚÐÚØÕ-ÛØÑÞ äÐÙÛë á ãÒÕÔÞÜÛÕÝØÕÜ ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå ØÛØ äÐÙÛë ×ÐÜÕçÐÝØÙ, áÞÔÕàÖÐéØÕáï Ò ÀÐáßàÞáâàÐÝïÕÜëå ÍÛÕÜÕÝâÐå. +6) »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÓàÐÖÔÐâì IBM, ÕÕ ßÞáâÐÒéØÚÞÒ Ø ÔØáâàØÑìîâÞàÞÒ Þâ ÞâÒÕâáâÒÕÝÝÞáâØ Ò áÛãçÐÕ ÛîÑëå ßàÕâÕÝרÙ, ÒÞ×ÝØÚÐîéØå Ò àÕ×ãÛìâÐâÕ ØáßÞÛì×ÞÒÐÝØï ØÛØ àÐáßàÞáâàÐÝÕÝØï ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ. +7) »ØæÕÝרÐâ ÝÕ ÜÞÖÕâ ØáßÞÛì×ÞÒÐâì âÕ ÖÕ ØÜÕÝÐ ßãâÕÙ, çâÞ Ø ã ØáåÞÔÝëå äÐÙÛÞÒ/ÜÞÔãÛÕÙ ÀÐáßàÞáâàÐÝïÕÜëå ÍÛÕÜÕÝâÞÒ. +8) »ØæÕÝרÐâ ÝÕ ØÜÕÕâ ßàÐÒÐ ØáßÞÛì×ÞÒÐâì ÝÐ×ÒÐÝØï ØÛØ âÞÒÐàÝëÕ ×ÝÐÚØ IBM, ÕÕ ßÞáâÐÒéØÚÞÒ ØÛØ ÔØáâàØÑìîâÞàÞÒ Ò áÒïר á àÐáßàÞáâàÐÝÕÝØÕÜ ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ ÑÕ× ßàÕÔÒÐàØâÕÛìÝÞÓÞ ßØáìÜÕÝÝÞÓÞ áÞÓÛÐáØï IBM, âÐÚÞÓÞ ßÞáâÐÒéØÚÐ ØÛØ ÔØáâàØÑìîâÞàÐ. +9) IBM, ÕÕ ßÞáâÐÒéØÚØ Ø ÔØáâàØÑìîâÞàë ßàÕÔÞáâÐÒÛïîâ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë Ø áÒï×ÐÝÝãî á ÝØÜØ ÔÞÚãÜÕÝâÐæØî ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. +10) »ØæÕÝרÐâ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð ÒáÕ âÕåÝØçÕáÚÞÕ áÞÔÕÙáâÒØÕ ÔÛï ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ Ø ÛîÑëå ÜÞÔØäØÚÐæØÙ ÀÐáßàÞáâàÐÝïÕÜëå ÍÛÕÜÕÝâÞÒ. +11) »ØæÕÝרÞÝÝÞÕ áÞÓÛÐèÕÝØÕ »ØæÕÝרÐâÐ á ÚÞÝÕçÝëÜ ßÞÛì×ÞÒÐâÕÛÕÜ ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ ÔÞÛÖÝÞ ãÒÕÔÞÜÛïâì ÚÞÝÕçÝÞÓÞ ßÞÛì×ÞÒÐâÕÛï, çâÞ ÀÐáßàÞáâàÐÝïÕÜëÕ ÍÛÕÜÕÝâë Ø Øå ÜÞÔØäØÚÐæØØ ÝÕÛì×ï: i) ØáßÞÛì×ÞÒÐâì ÔÛï ÚÐÚÞÙ-ÛØÑÞ æÕÛØ ßÞÜØÜÞ ÞÑÕáßÕçÕÝØï àÐÑÞâë ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ, ii) ÚÞߨàÞÒÐâì (×Ð ØáÚÛîçÕÝØÕÜ áÞ×ÔÐÝØï àÕ×ÕàÒÝëå ÚÞߨÙ), iii) àÐáßàÞáâàÐÝïâì ÔÐÛÕÕ ØÛØ ßÕàÕÔÐÒÐâì ÑÕ× ¿àØÛÞÖÕÝØï »ØæÕÝרÐâÐ, Ð âÐÚÖÕ iv) ÔÕ×ÐááÕÜÑÛØàÞÒÐâì, ÔÕÚÞÜßØÛØàÞÒÐâì ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ßàÕÞÑàÐ×ÞÒëÒÐâì, ×Ð ØáÚÛîçÕÝØÕÜ áÛãçÐÕÒ, ÚÞÓÔÐ íâÞ ÞáÞÑÞ àÐ×àÕèÕÝÞ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÔÞÓÞÒÞàÝÞÓÞ Ø×êïâØï íâÞÓÞ ßàÐÒÐ. ºàÞÜÕ âÞÓÞ, ÛØæÕÝרÞÝÝÞÕ áÞÓÛÐèÕÝØÕ »ØæÕÝרÐâÐ ÔÞÛÖÝÞ ÞÑÕáßÕçØÒÐâì, ßÞ ÜÕÝìèÕÙ ÜÕàÕ, âã ÖÕ áâÕßÕÝì ×ÐéØâë IBM, çâÞ Ø ÝÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ. + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + +»ØæÕÝרÐâ ÜÞÖÕâ àÐáßàÞáâàÐÝïâì Ø×ÜÕÝÕÝÝëÕ ÒÕàáØØ ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÞÒ Ø ¾ÑàÐ׿ÞÒ ¼ÐâÕàØÐÛÞÒ, ßÕàÕçØáÛÕÝÝëå Ò äÐÙÛÕ REDIST ÔÛï ¿àÞÓàÐÜÜë, Ò áÞÞâÒÕâáâÒØØ á ßÞÛÞÖÕÝØïÜØ ÝÐáâÞïéÕÙ ÛØæÕÝ×ØØ Ø ÛîÑëÜØ ØÝáâàãÚæØïÜØ, áÞÔÕàÖÐéØÜØáï Ò äÐÙÛÕ REDIST. + +ÃáâÐÝÞÒÚÐ + +ÃáâÐÝÞÒÚÐ - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï ¿àÞÓàÐÜÜÐ. ÃáâÐÝÞÒÚÐ - íâÞ ÚÞßØï ¿àÞÓàÐÜÜë, ãáâÐÝÞÒÛÕÝÝÐï ÝÐ äØ×ØçÕáÚÞÜ ØÛØ ÒØàâãÐÛìÝÞÜ ÔØáÚÕ Ø ÔÞáâãßÝÐï ÔÛï ÒëßÞÛÝÕÝØï ÝÐ ÚÞÜßìîâÕàÕ. »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÞÛãçØâì àÐ×àÕèÕÝØÕ ÔÛï ÚÐÖÔÞÙ ÃáâÐÝÞÒÚØ ¿àÞÓàÐÜÜë. + +µÔØÝØæÐ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ (PVU) + +µÔØÝØæÐ ÜÞéÝÞáâØ ßàÞæÕááÞàÐ (PVU) - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï íâÐ ¿àÞÓàÐÜÜÐ. ÇØáÛÞ ÝÕÞÑåÞÔØÜëå àÐ×àÕèÕÝØÙ ÝÐ ÞáÝÞÒÕ PVU ×ÐÒØáØâ Þâ ßàÞæÕááÞàÝÞÙ âÕåÝÞÛÞÓØØ (ÞßàÕÔÕÛïÕâáï ßÞ ¿ÞáâÐÒéØÚã ¿àÞæÕááÞàÐ, ÂÞàÓÞÒÞÙ ¼ÐàÚÕ, ÂØßã Ø ½ÞÜÕàã ¼ÞÔÕÛØ Ò ÂÐÑÛØæÕ PVU, àÐ×ÜÕéÕÝÝÞÙ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) Ø çØáÛÐ ßàÞæÕááÞàÞÒ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë. ´Ûï æÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ PVU IBM ßÞ-ßàÕÖÝÕÜã ÞßàÕÔÕÛïÕâ ßàÞæÕááÞà ÚÐÚ ßàÞæÕááÞàÝÞÕ ïÔàÞ ÝÐ ÜØÚàÞáåÕÜÕ. ¼ØÚàÞáåÕÜÐ ÔÒãåêïÔÕàÝÞÓÞ ßàÞæÕááÞàÐ, ÝÐßàØÜÕà, áÞÔÕàÖØâ ÔÒÐ ßàÞæÕááÞàÝëå ïÔàÐ. + +»ØæÕÝרÐâ ÜÞÖÕâ ÒÝÕÔàØâì ¿àÞÓàÐÜÜã á ØáßÞÛì×ÞÒÐÝØÕÜ ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ, ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ (½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ) Ò áÞÞâÒÕâáâÒØØ á ÃáÛÞÒØïÜØ »ØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ ßÞ ßàÞÓàÐÜÜÕ Passport Advantage (áÜ. ÝØÖÕãÚÐ×ÐÝÝãî Web-áâàÐÝØæã). ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï ÝÐ ÞáÝÞÒÕ PVU Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà* Ò äØ×ØçÕáÚÞÙ ÐßßÐàÐâÝÞÙ áàÕÔÕ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, ×Ð ØáÚÛîçÕÝØÕÜ âÕå áÕàÒÕàÞÒ, á ÚÞâÞàëå ¿àÞÓàÐÜÜÐ ãÔÐÛÕÝÐ ÝÐÒáÕÓÔÐ. ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, Ò áÞÞâÒÕâáâÒØØ á ¿àÐÒØÛÐÜØ ¿ÞÔáçÕâÐ çØáÛÐ »ØæÕÝ×ØÙ ÔÛï ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ ÝÐ Web-áâàÐÝØæÕ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* °ÚâØÒØàÞÒÐÝÝÞÕ ßàÞæÕááÞàÝÞÕ ïÔàÞ - íâÞ ßàÞæÕááÞàÝÞÕ ïÔàÞ, ÔÞáâãßÝÞÕ ÔÛï ØáßÞÛì×ÞÒÐÝØï ÝÐ äØ×ØçÕáÚÞÜ ØÛØ ÒØàâãÐÛìÝÞÜ áÕàÒÕàÕ, ÔÐÖÕ Ò âÞÜ áÛãçÐÕ, ÕáÛØ ÜÞéÝÞáâì ßàÞæÕááÞàÝëå ïÔÕà ÜÞÖÕâ Ñëâì ÞÓàÐÝØçÕÝÐ ØÛØ ÞÓàÐÝØçØÒÐÕâáï á ßÞÜÞéìî âÕåÝÞÛÞÓØÙ ÒØàâãÐÛØ×ÐæØØ, ÚÞÜÐÝÔ ÞßÕàÐæØÞÝÝÞÙ áØáâÕÜë, ßÐàÐÜÕâàÞÒ ÝÐáâàÞÙÚØ BIOS ØÛØ ÐÝÐÛÞÓØçÝëå ÞÓàÐÝØçÕÝØÙ. + +¾áÞÑëÕ ¿ÞÛÞÖÕÝØï ÔÛï ¿àÞÓàÐÜÜë + +ºÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ + +² ÔÐÝÝÞÜ àÐ×ÔÕÛÕ ßÞÔ ÚÞÝäØÓãàÐæØÕÙ "á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ" ßÞÝØÜÐÕâáï âÐÚÐï ÚÞÝäØÓãàÐæØï, ÚÞÓÔÐ ÚÞßØï ¿àÞÓàÐÜÜë ãáâÐÝÞÒÛÕÝÐ ÝÐ áÕàÒÕàÕ, ÚÞâÞàëÙ ïÒÛïÕâáï çÐáâìî àÕèÕÝØï ßÞ ÞÑÕáßÕçÕÝØî ÒëáÞÚÞÙ ÔÞáâãßÝÞáâØ Ø ÝÐ ÚÞâÞàëÙ ÑãÔÕâ ßÕàÕÚÛîçÐâìáï ¿àÞÓàÐÜÜÐ Ò âÕå áÛãçÐïå, ÕáÛØ ÚÞßØï ¿àÞÓàÐÜÜë ÝÐ ÐÚâØÒÝÞÜ áÕàÒÕàÕ ÝÕ ÜÞÖÕâ íÚáßÛãÐâØàÞÒÐâìáï. ÁÕàÒÕà áçØâÐÕâáï "ÝÕÐÚâØÒÝëÜ" âÞÛìÚÞ Ò âÕå áÛãçÐïå, ÕáÛØ, ÔÞ ÜÞÜÕÝâÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ, ÞÝ ØáßÞÛì×ãÕâáï ØáÚÛîçØâÕÛìÝÞ ÔÛï ÞßÕàÐæØÙ ÐÔÜØÝØáâàØàÞÒÐÝØï, ßÞÔÔÕàÖØÒÐîéØå áæÕÝÐàØØ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +¿àÞÓàÐÜÜã ÝÕÛì×ï ãáâÐÝÐÒÛØÒÐâì ÝÐ ½ÕÐÚâØÒÝëÙ ÀÕ×ÕàÒÝëÙ áÕàÒÕà, ÕáÛØ ÝÕâ ÝÐÔÛÕÖÐéÕÙ ÛØæÕÝרØ. + +µáÛØ ¿àÞÓàÐÜÜÐ ØáßÞÛì×ãÕâáï Ò ÚÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ áÞÒÜÕáâÝÞ á äãÝÚæØÕÙ Multi-Instance Queue Manager, ÚÞßØï ¿àÞÓàÐÜÜë ÜÞÖÕâ àÐ×ÜÕéÐâìáï ÔÛï æÕÛÕÙ àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï ÝÐ ½ÕÐÚâØÒÝÞÜ ÀÕ×ÕàÒÝÞÜ áÕàÒÕàÕ Ø ÜÞÖÕâ ×ÐßãáÚÐâìáï, ÝÞ ÔÞÛÖÝÐ ÞáâÐÒÐâìáï "ÝÕÐÚâØÒÝÞÙ" Ø ÝÕ ÔÞÛÖÝÐ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç ÚÐÚÞÓÞ-ÛØÑÞ âØßÐ, ×Ð ØáÚÛîçÕÝØÕÜ áÛãçÐÕÒ ßÕàÕÚÛîçÕÝØï ÝÐ ½ÕÐÚâØÒÝëÙ ÀÕ×ÕàÒÝëÙ áÕàÒÕà ßàØ ÞâÚÐ×Õ ÐÚâØÒÝÞÓÞ áÕàÒÕàÐ, Ò ÚÐÚÞÒÞÜ áÛãçÐÕ ½ÕÐÚâØÒÝÐï ÀÕ×ÕàÒÝÐï ÚÞߨï ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç Ò âÕçÕÝØÕ ßÕàØÞÔÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +µáÛØ ¿àÞÓàÐÜÜÐ ØáßÞÛì×ãÕâáï Ò ÚÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ áÞÒÜÕáâÝÞ á ÔàãÓØÜØ áØáâÕÜÐÜØ ²ëáÞÚÞÙ ´ÞáâãßÝÞáâØ, ÚÞßØï ¿àÞÓàÐÜÜë ÜÞÖÕâ àÐ×ÜÕéÐâìáï ÔÛï æÕÛÕÙ àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï ÝÐ ½ÕÐÚâØÒÝÞÜ ÀÕ×ÕàÒÝÞÜ áÕàÒÕàÕ, ÝÞ ÝÕ ÜÞÖÕâ ×ÐßãáÚÐâìáï (Ø, áÞÞâÒÕâáâÒÕÝÝÞ, ÝÕ ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç ÚÐÚÞÓÞ-ÛØÑÞ âØßÐ), ÞÔÝÐÚÞ âÐÚÐï ÚÞߨï ÑãÔÕâ ×ÐßãéÕÝÐ ÐÒâÞÜÐâØçÕáÚØ ÚÞÜßÞÝÕÝâÐÜØ ÞÑÕáßÕçÕÝØï ²ëáÞÚÞÙ ´ÞáâãßÝÞáâØ Ò áÛãçÐÕ ÒëåÞÔÐ Ø× áâàÞï ÐÚâØÒÝÞÓÞ áÕàÒÕàÐ, Ò ÚÐÚÞÒÞÜ áÛãçÐÕ ½ÕÐÚâØÒÝÐï ÀÕ×ÕàÒÝÐï ÚÞߨï ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç Ò âÕçÕÝØÕ ßÕàØÞÔÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +²°¶½¾: ¿À¾Ç¸µ ²½¸¼°Âµ»Ì½¾ + +½ØÖÕ ßàÕÔáâÐÒÛÕÝë ÔÒÐ ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØï. + +1. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ +2. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ßàÞØ×ÒÞÔáâÒÕÝÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï (ÝÕ ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ. + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ (áÞÒÜÕáâÝÞ ØÜÕÝãÕÜëå "¾æÕÝÚÐ"): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï (i) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ ("»ØæÕÝרï ÝÐ ¾æÕÝÚã") Ø (ii) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA"). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã ßàØÜÕÝïÕâáï Ò âÕçÕÝØÕ áàÞÚÐ ¾æÕÝÚØ »ØæÕÝרÐâÐ. + +IPLA ÑãÔÕâ ÐÒâÞÜÐâØçÕáÚØ ßàØÜÕÝïâìáï, ÕáÛØ »ØæÕÝרÐâ àÕèØâ áÞåàÐÝØâì ¿àÞÓàÐÜÜã ßÞáÛÕ ÞÚÞÝçÐÝØï ßÕàØÞÔÐ ¾æÕÝÚØ (ØÛØ ßÞÛãçØâì ÔÞßÞÛÝØâÕÛìÝëÕ ÚÞßØØ ¿àÞÓàÐÜÜë ÔÛï ØáßÞÛì×ÞÒÐÝØï ßÞáÛÕ ÞÚÞÝçÐÝØï ¾æÕÝÚØ), ×ÐÚÛîçØÒ áÞÓÛÐèÕÝØÕ Þ ßàØÞÑàÕâÕÝØØ (ÝÐßàØÜÕà, ¼ÕÖÔãÝÐàÞÔÝÞÕ áÞÓÛÐèÕÝØÕ IBM Passport Advantage ØÛØ ÁÞÓÛÐèÕÝØÕ IBM Passport Advantage Express). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã Ø IPLA ÝÕ ÔÕÙáâÒãîâ ÞÔÝÞÒàÕÜÕÝÝÞ; ÝØ ÞÔÝÞ Ø× íâØå áÞÓÛÐèÕÝØÙ ÝÕ Ø×ÜÕÝïÕâ ãáÛÞÒØÙ ÔàãÓÞÓÞ; Ø ÚÐÖÔÞÕ áÞÓÛÐèÕÝØÕ ÝÕ ×ÐÒØáØâ Þâ ÔàãÓÞÓÞ. + +¿ÞÛÝëÙ âÕÚáâ ÞÑÞØå ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØÙ ßàØÒÞÔØâáï ÝØÖÕ. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ (Z125-5543-05). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Advanced Message Security V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: Evaluation + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Advanced Message Security Idle Standby V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: Evaluation + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Telemetry V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: Evaluation + +¿ÕàØÞÔ ¾æÕÝÚØ + +¿ÕàØÞÔ ÞæÕÝÚØ ÝÐçØÝÐÕâáï Ò ÔÐâã, ÚÞÓÔÐ »ØæÕÝרÐâ áÞÓÛÐèÐÕâáï á ãáÛÞÒØïÜØ ÔÐÝÝÞÓÞ ÁÞÓÛÐèÕÝØï, Ø ×ÐÚÐÝçØÒÐÕâáï çÕàÕ× 90 ÔÝÕÙ. + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + + + +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ (Z125-3301-14). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Advanced Message Security V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: 5724-H72 + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Advanced Message Security Idle Standby V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: 5724-H72 + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë: IBM MQ Telemetry V9.0.1 +½ÞÜÕà ¿àÞÓàÐÜÜë: 5724-H72 + +ºÐÚ ãÚÐ×ÐÝÞ Ò ¼ÕÖÔãÝÐàÞÔÝÞÜ »ØæÕÝרÞÝÝÞÜ ÁÞÓÛÐèÕÝØØ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA") Ø ÝÐáâÞïéÕÙ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ, IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÞÓàÐÝØçÕÝÝÞÕ ßàÐÒÞ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. ÍâÞ ßàÐÒÞ ÞÓàÐÝØçØÒÐÕâáï ãàÞÒÝÕÜ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ÝÐßàØÜÕà, µÔØÝØæÐÜØ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ ("PVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ÀÕáãàáÞÒ ("RVU"), µÔØÝØæÐÜØ ¾æÕÝÚØ ("VU") ØÛØ ÔàãÓØÜ ãÚÐ×ÐÝÝëÜ ãàÞÒÝÕÜ ØáßÞÛì×ÞÒÐÝØï, ÞßÛÐçÕÝÝëÜ »ØæÕÝרÐâÞÜ, ÚÐÚ ïÒáâÒãÕâ Ø× ÁÒØÔÕâÕÛìáâÒÐ Þ ¿àÐÒÐå. ¸áßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ ÜÞÖÕâ âÐÚÖÕ Ñëâì ÞÓàÐÝØçÕÝÞ ÞßàÕÔÕÛÕÝÝÞÙ ÜÐèØÝÞÙ ØÛØ ØáßÞÛì×ÞÒÐÝØÕÜ âÞÛìÚÞ Ò ÚÐçÕáâÒÕ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë ÛØÑÞ ÜÞÖÕâ ßÞÔßÐÔÐâì ßÞÔ ÔàãÓØÕ ÞÓàÐÝØçÕÝØï. ¿ÞáÚÞÛìÚã »ØæÕÝרÐâ ÞßÛÐâØÛ ÝÕ Òáî íÚÞÝÞÜØçÕáÚãî áâÞØÜÞáâì ¿àÞÓàÐÜÜë, ÝØÚÐÚÞÕ ÔàãÓÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÝÕ àÐ×àÕèÐÕâáï ÑÕ× ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ. ºàÞÜÕ âÞÓÞ, »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï ßàÕÔÞáâÐÒÛÕÝØï ÚÞÜÜÕàçÕáÚØå ¸Â-ãáÛãÓ ÚÐÚÞÜã-ÛØÑÞ âàÕâìÕÜã ÛØæã, ÔÛï ÞáãéÕáâÒÛÕÝØï ÚÞÜÜÕàçÕáÚÞÓÞ åÞáâØÝÓÐ ØÛØ ØáßÞÛì×ÞÒÐÝØï Ò àÕÖØÜÕ àÐ×ÔÕÛÕÝØï ÒàÕÜÕÝØ, Ð âÐÚÖÕ ÝÕ àÐ×àÕèÐÕâáï áãÑÛØæÕÝרàÞÒÐâì ¿àÞÓàÐÜÜã, áÔÐÒÐâì ÕÕ Ò ÐàÕÝÔã ØÛØ ÛØ×ØÝÓ, ÕáÛØ íâÞ ïÒÝÞ ÝÕ ãÚÐ×ÐÝÞ Ò áÞÞâÒÕâáâÒãîéØå áÞÓÛÐèÕÝØïå, ÝÐ ÞáÝÞÒÐÝØØ ÚÞâÞàëå »ØæÕÝרÐâ ßÞÛãçÐÕâ àÐ×àÕèÕÝØÕ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë. »ØæÕÝרÐâ ÜÞÖÕâ ßÞÛãçÐâì ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ Ò àÕ×ãÛìâÐâÕ ãßÛÐâë ÔÞßÞÛÝØâÕÛìÝëå Ò×ÝÞáÞÒ ØÛØ ÝÐ ÞáÝÞÒÐÝØØ ÔÞßÞÛÝØâÕÛìÝëå ãáÛÞÒØÙ. IBM ÞáâÐÒÛïÕâ ×Ð áÞÑÞÙ ßàÐÒÞ ÞßàÕÔÕÛïâì, áâÞØâ ÛØ ßàÕÔÞáâÐÒÛïâì »ØæÕÝרÐâã âÐÚØÕ ÔÞßÞÛÝØâÕÛìÝëÕ ßàÐÒÐ. + +ÁßÕæØäØÚÐæØØ ¿àÞÓàÐÜÜë ÜÞÖÝÞ ÝÐÙâØ Ò ÞÑêÕÔØÝÕÝÝëå àÐ×ÔÕÛÐå "¾ßØáÐÝØÕ Ø âÕåÝØçÕáÚÐï ØÝäÞàÜÐæØï" ¾ÑêïÒÛÕÝØÙ Þ ÒëßãáÚÕ ¿àÞÓàÐÜÜë. + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + +ÃáâÐÝÞÒÚÐ + +ÃáâÐÝÞÒÚÐ - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï ¿àÞÓàÐÜÜÐ. ÃáâÐÝÞÒÚÐ - íâÞ ÚÞßØï ¿àÞÓàÐÜÜë, ãáâÐÝÞÒÛÕÝÝÐï ÝÐ äØ×ØçÕáÚÞÜ ØÛØ ÒØàâãÐÛìÝÞÜ ÔØáÚÕ Ø ÔÞáâãßÝÐï ÔÛï ÒëßÞÛÝÕÝØï ÝÐ ÚÞÜßìîâÕàÕ. »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÞÛãçØâì àÐ×àÕèÕÝØÕ ÔÛï ÚÐÖÔÞÙ ÃáâÐÝÞÒÚØ ¿àÞÓàÐÜÜë. + +µÔØÝØæÐ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ (PVU) + +µÔØÝØæÐ ÜÞéÝÞáâØ ßàÞæÕááÞàÐ (PVU) - íâÞ ÕÔØÝØæÐ Ø×ÜÕàÕÝØï, ßÞ ÚÞâÞàÞÙ ÜÞÖÕâ ÛØæÕÝרàÞÒÐâìáï íâÐ ¿àÞÓàÐÜÜÐ. ÇØáÛÞ ÝÕÞÑåÞÔØÜëå àÐ×àÕèÕÝØÙ ÝÐ ÞáÝÞÒÕ PVU ×ÐÒØáØâ Þâ ßàÞæÕááÞàÝÞÙ âÕåÝÞÛÞÓØØ (ÞßàÕÔÕÛïÕâáï ßÞ ¿ÞáâÐÒéØÚã ¿àÞæÕááÞàÐ, ÂÞàÓÞÒÞÙ ¼ÐàÚÕ, ÂØßã Ø ½ÞÜÕàã ¼ÞÔÕÛØ Ò ÂÐÑÛØæÕ PVU, àÐ×ÜÕéÕÝÝÞÙ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) Ø çØáÛÐ ßàÞæÕááÞàÞÒ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë. ´Ûï æÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ PVU IBM ßÞ-ßàÕÖÝÕÜã ÞßàÕÔÕÛïÕâ ßàÞæÕááÞà ÚÐÚ ßàÞæÕááÞàÝÞÕ ïÔàÞ ÝÐ ÜØÚàÞáåÕÜÕ. ¼ØÚàÞáåÕÜÐ ÔÒãåêïÔÕàÝÞÓÞ ßàÞæÕááÞàÐ, ÝÐßàØÜÕà, áÞÔÕàÖØâ ÔÒÐ ßàÞæÕááÞàÝëå ïÔàÐ. + +»ØæÕÝרÐâ ÜÞÖÕâ ÒÝÕÔàØâì ¿àÞÓàÐÜÜã á ØáßÞÛì×ÞÒÐÝØÕÜ ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ, ÛØÑÞ ÜÞÔÕÛØ ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ (½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ) Ò áÞÞâÒÕâáâÒØØ á ÃáÛÞÒØïÜØ »ØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ½ÕßÞÛÝëå ¼ÞéÝÞáâÕÙ ßÞ ßàÞÓàÐÜÜÕ Passport Advantage (áÜ. ÝØÖÕãÚÐ×ÐÝÝãî Web-áâàÐÝØæã). ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ¿ÞÛÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï ÝÐ ÞáÝÞÒÕ PVU Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà* Ò äØ×ØçÕáÚÞÙ ÐßßÐàÐâÝÞÙ áàÕÔÕ, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, ×Ð ØáÚÛîçÕÝØÕÜ âÕå áÕàÒÕàÞÒ, á ÚÞâÞàëå ¿àÞÓàÐÜÜÐ ãÔÐÛÕÝÐ ÝÐÒáÕÓÔÐ. ² áÛãçÐÕ ØáßÞÛì×ÞÒÐÝØï ÛØæÕÝרàÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ »ØæÕÝרÐâ ÔÞÛÖÕÝ ßàØÞÑàÕáâØ àÐ×àÕèÕÝØï Ò ÞÑêÕÜÕ, ÔÞáâÐâÞçÝÞÜ ÔÛï ÞåÒÐâÐ ÒáÕå ÐÚâØÒØàÞÒÐÝÝëå ßàÞæÕááÞàÝëå ïÔÕà, ÔÞáâãßÝëå ÔÛï ¿àÞÓàÐÜÜë ØÛØ ãßàÐÒÛïÕÜëå Õî, Ò áÞÞâÒÕâáâÒØØ á ¿àÐÒØÛÐÜØ ¿ÞÔáçÕâÐ çØáÛÐ »ØæÕÝ×ØÙ ÔÛï ²ØàâãÐÛØ×ÞÒÐÝÝëå ¼ÞéÝÞáâÕÙ ÝÐ Web-áâàÐÝØæÕ ßÞ ÐÔàÕáã http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* °ÚâØÒØàÞÒÐÝÝÞÕ ßàÞæÕááÞàÝÞÕ ïÔàÞ - íâÞ ßàÞæÕááÞàÝÞÕ ïÔàÞ, ÔÞáâãßÝÞÕ ÔÛï ØáßÞÛì×ÞÒÐÝØï ÝÐ äØ×ØçÕáÚÞÜ ØÛØ ÒØàâãÐÛìÝÞÜ áÕàÒÕàÕ, ÔÐÖÕ Ò âÞÜ áÛãçÐÕ, ÕáÛØ ÜÞéÝÞáâì ßàÞæÕááÞàÝëå ïÔÕà ÜÞÖÕâ Ñëâì ÞÓàÐÝØçÕÝÐ ØÛØ ÞÓàÐÝØçØÒÐÕâáï á ßÞÜÞéìî âÕåÝÞÛÞÓØÙ ÒØàâãÐÛØ×ÐæØØ, ÚÞÜÐÝÔ ÞßÕàÐæØÞÝÝÞÙ áØáâÕÜë, ßÐàÐÜÕâàÞÒ ÝÐáâàÞÙÚØ BIOS ØÛØ ÐÝÐÛÞÓØçÝëå ÞÓàÐÝØçÕÝØÙ. + +¾áÞÑëÕ ¿ÞÛÞÖÕÝØï ÔÛï ¿àÞÓàÐÜÜë + +ºÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ + +² ÔÐÝÝÞÜ àÐ×ÔÕÛÕ ßÞÔ ÚÞÝäØÓãàÐæØÕÙ "á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ" ßÞÝØÜÐÕâáï âÐÚÐï ÚÞÝäØÓãàÐæØï, ÚÞÓÔÐ ÚÞßØï ¿àÞÓàÐÜÜë ãáâÐÝÞÒÛÕÝÐ ÝÐ áÕàÒÕàÕ, ÚÞâÞàëÙ ïÒÛïÕâáï çÐáâìî àÕèÕÝØï ßÞ ÞÑÕáßÕçÕÝØî ÒëáÞÚÞÙ ÔÞáâãßÝÞáâØ Ø ÝÐ ÚÞâÞàëÙ ÑãÔÕâ ßÕàÕÚÛîçÐâìáï ¿àÞÓàÐÜÜÐ Ò âÕå áÛãçÐïå, ÕáÛØ ÚÞßØï ¿àÞÓàÐÜÜë ÝÐ ÐÚâØÒÝÞÜ áÕàÒÕàÕ ÝÕ ÜÞÖÕâ íÚáßÛãÐâØàÞÒÐâìáï. ÁÕàÒÕà áçØâÐÕâáï "ÝÕÐÚâØÒÝëÜ" âÞÛìÚÞ Ò âÕå áÛãçÐïå, ÕáÛØ, ÔÞ ÜÞÜÕÝâÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ, ÞÝ ØáßÞÛì×ãÕâáï ØáÚÛîçØâÕÛìÝÞ ÔÛï ÞßÕàÐæØÙ ÐÔÜØÝØáâàØàÞÒÐÝØï, ßÞÔÔÕàÖØÒÐîéØå áæÕÝÐàØØ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +¿àÞÓàÐÜÜã ÝÕÛì×ï ãáâÐÝÐÒÛØÒÐâì ÝÐ ½ÕÐÚâØÒÝëÙ ÀÕ×ÕàÒÝëÙ áÕàÒÕà, ÕáÛØ ÝÕâ ÝÐÔÛÕÖÐéÕÙ ÛØæÕÝרØ. + +µáÛØ ¿àÞÓàÐÜÜÐ ØáßÞÛì×ãÕâáï Ò ÚÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ áÞÒÜÕáâÝÞ á äãÝÚæØÕÙ Multi-Instance Queue Manager, ÚÞßØï ¿àÞÓàÐÜÜë ÜÞÖÕâ àÐ×ÜÕéÐâìáï ÔÛï æÕÛÕÙ àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï ÝÐ ½ÕÐÚâØÒÝÞÜ ÀÕ×ÕàÒÝÞÜ áÕàÒÕàÕ Ø ÜÞÖÕâ ×ÐßãáÚÐâìáï, ÝÞ ÔÞÛÖÝÐ ÞáâÐÒÐâìáï "ÝÕÐÚâØÒÝÞÙ" Ø ÝÕ ÔÞÛÖÝÐ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç ÚÐÚÞÓÞ-ÛØÑÞ âØßÐ, ×Ð ØáÚÛîçÕÝØÕÜ áÛãçÐÕÒ ßÕàÕÚÛîçÕÝØï ÝÐ ½ÕÐÚâØÒÝëÙ ÀÕ×ÕàÒÝëÙ áÕàÒÕà ßàØ ÞâÚÐ×Õ ÐÚâØÒÝÞÓÞ áÕàÒÕàÐ, Ò ÚÐÚÞÒÞÜ áÛãçÐÕ ½ÕÐÚâØÒÝÐï ÀÕ×ÕàÒÝÐï ÚÞߨï ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç Ò âÕçÕÝØÕ ßÕàØÞÔÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + +µáÛØ ¿àÞÓàÐÜÜÐ ØáßÞÛì×ãÕâáï Ò ÚÞÝäØÓãàÐæØØ á ÀÕ×ÕàÒØàÞÒÐÝØÕÜ Ò ½ÕÐÚâØÒÝÞÜ ÀÕÖØÜÕ áÞÒÜÕáâÝÞ á ÔàãÓØÜØ áØáâÕÜÐÜØ ²ëáÞÚÞÙ ´ÞáâãßÝÞáâØ, ÚÞßØï ¿àÞÓàÐÜÜë ÜÞÖÕâ àÐ×ÜÕéÐâìáï ÔÛï æÕÛÕÙ àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï ÝÐ ½ÕÐÚâØÒÝÞÜ ÀÕ×ÕàÒÝÞÜ áÕàÒÕàÕ, ÝÞ ÝÕ ÜÞÖÕâ ×ÐßãáÚÐâìáï (Ø, áÞÞâÒÕâáâÒÕÝÝÞ, ÝÕ ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç ÚÐÚÞÓÞ-ÛØÑÞ âØßÐ), ÞÔÝÐÚÞ âÐÚÐï ÚÞߨï ÑãÔÕâ ×ÐßãéÕÝÐ ÐÒâÞÜÐâØçÕáÚØ ÚÞÜßÞÝÕÝâÐÜØ ÞÑÕáßÕçÕÝØï ²ëáÞÚÞÙ ´ÞáâãßÝÞáâØ Ò áÛãçÐÕ ÒëåÞÔÐ Ø× áâàÞï ÐÚâØÒÝÞÓÞ áÕàÒÕàÐ, Ò ÚÐÚÞÒÞÜ áÛãçÐÕ ½ÕÐÚâØÒÝÐï ÀÕ×ÕàÒÝÐï ÚÞߨï ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï ÔÛï ÒëßÞÛÝÕÝØï ßàÞØ×ÒÞÔáâÒÕÝÝëå ×ÐÔÐç Ò âÕçÕÝØÕ ßÕàØÞÔÐ ßÕàÕÚÛîçÕÝØï ßàØ ÞâÚÐ×Õ. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +²°¶½¾: ¿À¾Ç¸µ ²½¸¼°Âµ»Ì½¾ + +½ØÖÕ ßàÕÔáâÐÒÛÕÝë ÔÒÐ ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØï. + +1. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ +2. ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ßàÞØ×ÒÞÔáâÒÕÝÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï (ÝÕ ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ. + +µáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã ÔÛï æÕÛÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï, ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï Ò àÐÜÚÐå ßàÕÔÛÞÖÕÝØï "try or buy" ØÛØ ÔÕÜÞÝáâàÐæØØ (áÞÒÜÕáâÝÞ ØÜÕÝãÕÜëå "¾æÕÝÚÐ"): ½ÐÖØÜÐï àÐáßÞÛÞÖÕÝÝãî ÝØÖÕ ÚÝÞßÚã "¿àØÝØÜÐî", »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÑÕ× Ø×ÜÕÝÕÝØÙ ãáÛÞÒØï (i) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ ("»ØæÕÝרï ÝÐ ¾æÕÝÚã") Ø (ii) ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï IBM Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ ("IPLA"). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã ßàØÜÕÝïÕâáï Ò âÕçÕÝØÕ áàÞÚÐ ¾æÕÝÚØ »ØæÕÝרÐâÐ. + +IPLA ÑãÔÕâ ÐÒâÞÜÐâØçÕáÚØ ßàØÜÕÝïâìáï, ÕáÛØ »ØæÕÝרÐâ àÕèØâ áÞåàÐÝØâì ¿àÞÓàÐÜÜã ßÞáÛÕ ÞÚÞÝçÐÝØï ßÕàØÞÔÐ ¾æÕÝÚØ (ØÛØ ßÞÛãçØâì ÔÞßÞÛÝØâÕÛìÝëÕ ÚÞßØØ ¿àÞÓàÐÜÜë ÔÛï ØáßÞÛì×ÞÒÐÝØï ßÞáÛÕ ÞÚÞÝçÐÝØï ¾æÕÝÚØ), ×ÐÚÛîçØÒ áÞÓÛÐèÕÝØÕ Þ ßàØÞÑàÕâÕÝØØ (ÝÐßàØÜÕà, ¼ÕÖÔãÝÐàÞÔÝÞÕ áÞÓÛÐèÕÝØÕ IBM Passport Advantage ØÛØ ÁÞÓÛÐèÕÝØÕ IBM Passport Advantage Express). + +»ØæÕÝרï ÝÐ ¾æÕÝÚã Ø IPLA ÝÕ ÔÕÙáâÒãîâ ÞÔÝÞÒàÕÜÕÝÝÞ; ÝØ ÞÔÝÞ Ø× íâØå áÞÓÛÐèÕÝØÙ ÝÕ Ø×ÜÕÝïÕâ ãáÛÞÒØÙ ÔàãÓÞÓÞ; Ø ÚÐÖÔÞÕ áÞÓÛÐèÕÝØÕ ÝÕ ×ÐÒØáØâ Þâ ÔàãÓÞÓÞ. + +¿ÞÛÝëÙ âÕÚáâ ÞÑÞØå ÛØæÕÝרÞÝÝëå áÞÓÛÐèÕÝØÙ ßàØÒÞÔØâáï ÝØÖÕ. + + +¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÞÑ ¾æÕÝÚÕ ¿àÞÓàÐÜÜ + +ÇÐáâì 1 - ¾ÑéØÕ ÃáÛÞÒØï + +·°³Àö°Ï, ÃÁ°½°²»¸²°Ï, º¾¿¸ÀÃÏ, ¾ÁÃɵÁ²»ÏÏ ´¾ÁÂÿ, ½°¶¸¼°Ï º½¾¿ºÃ "¿À¸½¸¼°Î" ¸»¸ ¸½Ë¼ ¾±À°·¾¼ ¸Á¿¾»Ì·ÃÏ ¿À¾³À°¼¼Ã, »¸Æµ½·¸°Â Á¾³»°È°µÂÁÏ Á ÃÁ»¾²¸Ï¼¸ ½°Á¾Ïɵ³¾ Á¾³»°Èµ½¸Ï. µÁ»¸ ²Ë ¿À¸½¸¼°µÂµ ´°½½Ëµ ÃÁ»¾²¸Ï ¾Â ¸¼µ½¸ »¸Æµ½·¸°Â°, ²Ë ·°Ï²»ÏµÂµ ¸ ³°À°½Â¸Àõµ, Ǿ ²Ë ¸¼µµÂµ ²Áµ ¿¾»½¾¼¾Ç¸Ï, Ǿ±Ë ¾±Ï·°ÂÌ »¸Æµ½·¸°Â° Á¾±»Î´°ÂÌ Í¸ ÃÁ»¾²¸Ï. µÁ»¸ ²Ë ½µ Á¾³»°Á½Ë Á ½°Á¾Ïɸ¼¸ ÃÁ»¾²¸Ï¼¸, + +* ½µ ·°³Àö°¹Âµ, ½µ ÃÁ°½°²»¸²°¹Âµ, ½µ º¾¿¸Àùµ, ½µ ¾ÁÃɵÁ²»Ï¹Âµ ´¾ÁÂÿ, ½µ ½°¶¸¼°¹Âµ º½¾¿ºÃ "¿À¸½¸¼°Î" ¸ ½µ ¸Á¿¾»Ì·Ã¹Âµ ¿À¾³À°¼¼Ã; ¸ + +* ½µ·°¼µ´»¸Âµ»Ì½¾ ²µÀ½¸Âµ ½µ¸Á¿¾»Ì·¾²°½½Ë¹ ½¾Á¸Âµ»Ì ¸ ´¾ºÃ¼µ½Â°Æ¸Î Á¾À¾½µ, à º¾Â¾À¾¹ ²Ë ¸Å ¿À¸¾±Àµ»¸. µÁ»¸ ¿À¾³À°¼¼° ±Ë»° ·°³Àöµ½°, ý¸Ç¾¶Ìµ ²Áµ º¾¿¸¸ ¿À¾³À°¼¼Ë. + +1. ¾ßàÕÔÕÛÕÝØï + +"°ÒâÞàØ×ÞÒÐÝÝÞÕ ¸áßÞÛì×ÞÒÐÝØÕ" - ãÚÐ×ÐÝÝëÙ ãàÞÒÕÝì, ßàØ ÚÞâÞàÞÜ »ØæÕÝרÐâã àÐ×àÕèÕÝÞ ÒëßÞÛÝïâì ØÛØ ×ÐßãáÚÐâì ¿àÞÓàÐÜÜã. ÃàÞÒÕÝì ÜÞÖÕâ Ø×ÜÕàïâìáï çØáÛÞÜ ßÞÛì×ÞÒÐâÕÛÕÙ, ÜØÛÛØÞÝÐÜØ ÕÔØÝØæ ÞÑáÛãÖØÒÐÝØï (MSU), µÔØÝØæÐÜØ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ (PVU) ØÛØ ÔàãÓØÜ ßÞÚÐ×ÐâÕÛÕÜ ãàÞÒÝï ØáßÞÛì×ÞÒÐÝØï, ×ÐÔÐÝÝëÜ IBM. + +"IBM" - International Business Machines Corporation ØÛØ ÞÔÝÐ Ø× ÕÕ ÔÞçÕàÝØå ÚÞÜßÐÝØÙ. + +"»ØæÕÝרÞÝÝÐï ¸ÝäÞàÜÐæØï" ("»¸") - ÔÞÚãÜÕÝâ, áÞÔÕàÖÐéØÙ ØÝäÞàÜÐæØî Ø ÛîÑëÕ ÔÞßÞÛÝØâÕÛìÝëÕ ãáÛÞÒØï, ÚÐáÐîéØÕáï ÚÞÝÚàÕâÝÞÙ ¿àÞÓàÐÜÜë. »ØæÕÝרÞÝÝãî ¸ÝäÞàÜÐæØî ÜÞÖÝÞ ÝÐÙâØ Ò ÚÐâÐÛÞÓÕ ¿àÞÓàÐÜÜë, á ßÞÜÞéìî áØáâÕÜÝÞÙ ÚÞÜÐÝÔë ØÛØ Ò ÑãÚÛÕâÕ, ßàÕÔÞáâÐÒÛïÕÜÞÜ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ. + +"¿àÞÓàÐÜÜÐ" - ÝØÖÕßÕàÕçØáÛÕÝÝÞÕ, ÒÚÛîçÐï ÞàØÓØÝÐÛ Ø ÒáÕ ßÞÛÝëÕ ØÛØ çÐáâØçÝëÕ ÚÞߨØ: 1) ÜÐèØÝÞçØâÐÕÜëÕ ØÝáâàã򾯯 Ø ÔÐÝÝëÕ, 2) ÚÞÜßÞÝÕÝâë, äÐÙÛë Ø ÜÞÔãÛØ, 3) ÐãÔØÞÒØ×ãÐÛìÝÞÕ áÞÔÕàÖØÜÞÕ (ÝÐßàØÜÕà, Ø×ÞÑàÐÖÕÝØï, âÕÚáâ, ÐãÔØÞ×ÐßØáØ ØÛØ àØáãÝÚØ) Ø 4) ÞâÝÞáïéØÕáï Ú ÛØæÕÝ×ØØ ÜÐâÕàØÐÛë (ÝÐßàØÜÕà, ÚÛîçØ Ø ÔÞÚãÜÕÝâÐæØï). + +2. ÁâàãÚâãàÐ ÁÞÓÛÐèÕÝØï + +½ÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ ÒÚÛîçÐÕâ Ò áÕÑï ÇÐáâì 1 - ¾ÑéØÕ ÃáÛÞÒØï, ÇÐáâì 2 - ¾áÞÑëÕ ÃáÛÞÒØï ÔÛï ½ÕÚÞâÞàëå ÁâàÐÝ (ÕáÛØ Õáâì) Ø »ØæÕÝרÞÝÝãî ¸ÝäÞàÜÐæØî Ø ïÒÛïÕâáï ßÞÛÝëÜ Ø ØáçÕàßëÒÐîéØÜ áÞÓÛÐèÕÝØÕÜ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë. ¾ÝÞ ×ÐÜÕÝïÕâ áÞÑÞÙ ÛîÑëÕ ßàÕÔèÕáâÒãîéØÕ ãáâÝëÕ ØÛØ ßØáìÜÕÝÝëÕ ÔÞÓÞÒÞàÕÝÝÞáâØ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM ÞâÝÞáØâÕÛìÝÞ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. ÃáÛÞÒØï ÇÐáâØ 2 ÜÞÓãâ ×ÐÜÕÝïâì ØÛØ Ø×ÜÕÝïâì ãáÛÞÒØï, ßàÕÔãáÜÞâàÕÝÝëÕ ÇÐáâìî 1. ² áÛãçÐÕ ÚÐÚØå-ÛØÑÞ ßàÞâØÒÞàÕçØÙ »¸ ØÜÕÕâ ßàÕØÜãéÕáâÒÕÝÝãî áØÛã ßÞ ÞâÝÞèÕÝØî Ú ÞÑÕØÜ ÇÐáâïÜ ÁÞÓÛÐèÕÝØï. + +3. ¿àÕÔÞáâÐÒÛïÕÜÐï »ØæÕÝרï + +¿àÞÓàÐÜÜÐ ßàØÝÐÔÛÕÖØâ IBM ØÛØ ßÞáâÐÒéØÚã IBM Ø ×ÐéØéÕÝÐ ÐÒâÞàáÚØÜ ßàÐÒÞÜ Ø ßàÕÔÞáâÐÒÛïÕâáï ßÞ ÛØæÕÝרØ, Ð ÝÕ ßàÞÔÐÕâáï. + +IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÞÓàÐÝØçÕÝÝãî, ÝÕØáÚÛîçØâÕÛìÝãî, ÝÕßÕàÕÔÐÒÐÕÜãî ÛØæÕÝרî ÝÐ 1) ×ÐÓàã×Úã, ãáâÐÝÞÒÚã Ø ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë Ò âÕçÕÝØÕ ßÕàØÞÔÐ ÞæÕÝÚØ Ò ÞÑêÕÜÕ ÀÐ×àÕèÕÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ÞߨáÐÝÝÞÓÞ Ò »¸, ØáÚÛîçØâÕÛìÝÞ ÔÛï ÒÝãâàÕÝÝÕÙ ÞæÕÝÚØ, âÕáâØàÞÒÐÝØï ØÛØ Ò ÔÕÜÞÝáâàÐæØÞÝÝëå æÕÛïå ÝÐ ãáÛÞÒØïå ßàÞÑÝÞÓÞ ØáßÞÛì×ÞÒÐÝØï, 2) áÞ×ÔÐÝØÕ Ø ãáâÐÝÞÒÚã àÐ×ãÜÝÞ ÝÕÞÑåÞÔØÜÞÓÞ çØáÛÐ ÚÞߨÙ, ÔÞáâÐâÞçÝÞÓÞ ÔÛï ßÞÔÔÕàÖÚØ âÐÚÞÓÞ ÀÐ×àÕèÕÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, Ø 3) áÞ×ÔÐÝØÕ àÕ×ÕàÒÝÞÙ ÚÞߨØ, ßàØ ãáÛÞÒØØ çâÞ: + +a. »ØæÕÝרÐâ ßÞÛãçØÛ ¿àÞÓàÐÜÜã ×ÐÚÞÝÝëÜ ÞÑàÐ×ÞÜ Ø áÞÑÛîÔÐÕâ ãáÛÞÒØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï; + +b. àÕ×ÕàÒÝÐï ÚÞߨï ÒëßÞÛÝïÕâáï, ÕáÛØ ÝÕÒÞ×ÜÞÖÝÞ ÒëßÞÛÝÕÝØÕ áÐÜÞÙ ¿àÞÓàÐÜÜë; + +c. »ØæÕÝרÐâ ÒÞáßàÞØ×ÒÞÔØâ ÒáÕ ãÒÕÔÞÜÛÕÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå Ø ÔàãÓØÕ ×ÐÜÕçÐÝØï Þ ßàÐÒÐå áÞÑáâÒÕÝÝÞáâØ ÝÐ ÚÐÖÔÞÙ ßÞÛÝÞÙ ØÛØ çÐáâØçÝÞÙ ÚÞßØØ ¿àÞÓàÐÜÜë; + +d. »ØæÕÝרÐâ ÒÕÔÕâ ãçÕâ ÒáÕå ÚÞßØÙ ¿àÞÓàÐÜÜë Ø ÓÐàÐÝâØàãÕâ, çâÞ ÛîÑÞÕ ÛØæÞ, ØáßÞÛì×ãîéÕÕ ¿àÞÓàÐÜÜã (ßÞáàÕÔáâÒÞÜ ÛÞÚÐÛìÝÞÓÞ ØÛØ ÔØáâÐÝæØÞÝÝÞÓÞ ÔÞáâãßÐ), 1) ÔÕÛÐÕâ íâÞ âÞÛìÚÞ Þâ ØÜÕÝØ »ØæÕÝרÐâÐ Ø 2) áÞÑÛîÔÐÕâ ãáÛÞÒØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï; + +e. »ØæÕÝרÐâ ÝÕ ÑãÔÕâ 1) ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã Ò ßàÞØ×ÒÞÔáâÒÕÝÝëå æÕÛïå ØÛØ ØáßÞÛì×ÞÒÐâì, ÚÞߨàÞÒÐâì, ÜÞÔØäØæØàÞÒÐâì ØÛØ àÐáßàÞáâàÐÝïâì ¿àÞÓàÐÜÜã ØÝëÜØ áßÞáÞÑÐÜØ ßÞÜØÜÞ ßàïÜÞ àÐ×àÕèÕÝÝëå Ò ÝÐáâÞïéÕÜ ÁÞÓÛÐèÕÝØØ, 2) ÞáãéÕáâÒÛïâì ÔÕ×ÐááÕÜÑÛØàÞÒÐÝØÕ, ÔÕÚÞÜßØÛØàÞÒÐÝØÕ ØÛØ ØÝÞÕ ßàÕÞÑàÐ×ÞÒÐÝØÕ ÛØÑÞ ÞÑàÐâÝÞÕ ßàÞÕÚâØàÞÒÐÝØÕ ¿àÞÓàÐÜÜë, ÚàÞÜÕ âÕå áÛãçÐÕÒ, ÚÞÓÔÐ íâÞ ßàïÜÞ àÐ×àÕèÕÝÞ ÔÕÙáâÒãîéØÜØ ×ÐÚÞÝÐÜØ ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÞÓàÐÝØçÕÝØï íâØå ßàÐÒ Ò àÐÜÚÐå ÔÞÓÞÒÞàÐ, 3) ØáßÞÛì×ÞÒÐâì ÚÐÚØÕ-ÛØÑÞ ÚÞÜßÞÝÕÝâë, äÐÙÛë, ÜÞÔãÛØ, ÐãÔØÞÒØ×ãÐÛìÝÞÕ áÞÔÕàÖØÜÞÕ ¿àÞÓàÐÜÜë ØÛØ áÒï×ÐÝÝëÕ ÛØæÕÝרÞÝÝëÕ ÜÐâÕàØÐÛë ÞâÔÕÛìÝÞ Þâ ¿àÞÓàÐÜÜë; 4) ßàÕÔÞáâÐÒÛïâì ¿àÞÓàÐÜÜã ÝÐ ãáÛÞÒØïå áãÑÛØæÕÝרØ, ÐàÕÝÔë ØÛØ ÛØ×ØÝÓÐ; ÛØÑÞ 5) ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï åÞáâØÝÓÐ ÚÞÜÜÕàçÕáÚØå ßàØÛÞÖÕÝØÙ; Ð âÐÚÖÕ + +f. ÕáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã Ò ÚÐçÕáâÒÕ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ØáßÞÛì×ãÕâ íâã ¿àÞÓàÐÜÜã âÞÛìÚÞ ÔÛï ßÞÔÔÕàÖÚØ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë ßàØ áÞÑÛîÔÕÝØØ ÛîÑëå ÞÓàÐÝØçÕÝØÙ, ßàÕÔãáÜÞâàÕÝÝëå ÛØæÕÝרÕÙ ÝÐ ¾áÝÞÒÝãî ¿àÞÓàÐÜÜã; ÛØÑÞ, ÕáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã Ò ÚÐçÕáâÒÕ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ØáßÞÛì×ãÕâ ÒáÕ ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë âÞÛìÚÞ ÔÛï ßÞÔÔÕàÖÚØ ÔÐÝÝÞÙ ¿àÞÓàÐÜÜë ßàØ áÞÑÛîÔÕÝØØ ÛîÑëå ÞÓàÐÝØçÕÝØÙ, ßàÕÔãáÜÞâàÕÝÝëå ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ. ² æÕÛïå ÔÐÝÝÞÓÞ ßãÝÚâÐ f "²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜÞÙ" ÝÐ×ëÒÐÕâáï ¿àÞÓàÐÜÜÐ, ïÒÛïîéÐïáï çÐáâìî ÔàãÓÞÙ ¿àÞÓàÐÜÜë IBM ("¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë") Ø ÞßàÕÔÕÛÕÝÝÐï ÚÐÚ ²áßÞÜÞÓÐâÕÛìÝÐï ¿àÞÓàÐÜÜÐ Ò »¸ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë. (ÇâÞÑë ßÞÛãçØâì ÞâÔÕÛìÝãî ÛØæÕÝרî ÝÐ ²áßÞÜÞÓÐâÕÛìÝãî ¿àÞÓàÐÜÜã ÑÕ× íâØå ÞÓàÐÝØçÕÝØÙ, »ØæÕÝרÐâã áÛÕÔãÕâ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ²áßÞÜÞÓÐâÕÛìÝãî ¿àÞÓàÐÜÜã.) + +´ÐÝÝÐï ÛØæÕÝרï ßàØÜÕÝïÕâáï Ú ÚÐÖÔÞÙ ÚÞßØØ ¿àÞÓàÐÜÜë, áÞ×ÔÐÒÐÕÜÞÙ »ØæÕÝרÐâÞÜ. + +3.1. ¾ÑÝÞÒÛÕÝØï, ¸áßàÐÒÛÕÝØï Ø ¸×ÜÕÝÕÝØï + +ºÞÓÔÐ »ØæÕÝרÐâ ßÞÛãçÐÕâ ÞÑÝÞÒÛÕÝØÕ, ØáßàÐÒÛÕÝØÕ ØÛØ Ø×ÜÕÝÕÝØÕ ÔÛï ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÛîÑëÕ ÔÞßÞÛÝØâÕÛìÝëÕ ØÛØ ÞáÞÑëÕ ãáÛÞÒØï, ßàØÜÕÝØÜëÕ Ò ÞâÝÞèÕÝØØ âÐÚÞÓÞ ÞÑÝÞÒÛÕÝØï, ØáßàÐÒÛÕÝØï ØÛØ Ø×ÜÕÝÕÝØï Ø ãÚÐ×ÐÝÝëÕ Ò ÕÓÞ »¸. ¿àØ ÞâáãâáâÒØØ ÔÞßÞÛÝØâÕÛìÝëå ØÛØ ÞáÞÑëå ãáÛÞÒØÙ ØáßÞÛì×ÞÒÐÝØÕ ÞÑÝÞÒÛÕÝØï, ØáßàÐÒÛÕÝØï ØÛØ Ø×ÜÕÝÕÝØï àÕÓãÛØàãÕâáï âÞÛìÚÞ ãáÛÞÒØïÜØ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï. µáÛØ ¿àÞÓàÐÜÜÐ ×ÐÜÕÝïÕâáï ÞÑÝÞÒÛÕÝØÕÜ, âÞ »ØæÕÝרÐâ ÞÑï×ãÕâáï ÝÕÜÕÔÛÕÝÝÞ ßàÕÚàÐâØâì ØáßÞÛì×ÞÒÐÝØÕ ×ÐÜÕÝÕÝÝÞÙ ¿àÞÓàÐÜÜë. + +3.2. ÁàÞÚ ÔÕÙáâÒØï Ø ¿àÕÚàÐéÕÝØÕ ÔÕÙáâÒØï + +¿ÕàØÞÔ ÞæÕÝÚØ ÝÐçØÝÐÕâáï á ÜÞÜÕÝâÐ ßàØÝïâØï »ØæÕÝרÐâÞÜ ãáÛÞÒØÙ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï Ø ×ÐÚÐÝçØÒÐÕâáï ÛØÑÞ 1) ßÞáÛÕ ØáâÕçÕÝØï áàÞÚÐ ØÛØ ÝÐáâãßÛÕÝØï ÔÐâë, ãÚÐ×ÐÝÝÞÙ IBM Ò »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ ØÛØ Ò ÔÞÚãÜÕÝâÕ Þ âàÐÝ×Ð򾯯, ÛØÑÞ 2) ßÞ ÝÐáâãßÛÕÝØØ ÔÐâë ÐÒâÞÜÐâØçÕáÚÞÙ ÑÛÞÚØàÞÒÚØ ¿àÞÓàÐÜÜë. »ØæÕÝרÐâ ÔÞÛÖÕÝ ãÝØçâÞÖØâì ¿àÞÓàÐÜÜã Ø ÒáÕ áÞ×ÔÐÝÝëÕ ÚÞßØØ ¿àÞÓàÐÜÜë Ò âÕçÕÝØÕ ÔÕáïâØ ÔÝÕÙ ßÞáÛÕ ÞÚÞÝçÐÝØï ßÕàØÞÔÐ ÞæÕÝÚØ. µáÛØ IBM ãÚÐ×ëÒÐÕâ Ò »¸, çâÞ »ØæÕÝרÐâ ÜÞÖÕâ áÞåàÐÝØâì ¿àÞÓàÐÜÜã, Ø »ØæÕÝרÐâ Ø×êïÒØâ âÐÚÞÕ ÖÕÛÐÝØÕ, âÞ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ÑãÔÕâ àÕÓãÛØàÞÒÐâìáï ÔàãÓØÜ ÛØæÕÝרÞÝÝëÜ áÞÓÛÐèÕÝØÕÜ, ÚÞâÞàÞÕ IBM ßàÕÔÞáâÐÒØâ »ØæÕÝרÐâã. ºàÞÜÕ âÞÓÞ, ÜÞÖÕâ ÒרÜÐâìáï ßÛÐâÐ. + +IBM ÜÞÖÕâ ßàÕÚàÐâØâì ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ »ØæÕÝרÐâÐ, ÕáÛØ »ØæÕÝרÐâ ÝÕ áÞÑÛîÔÐÕâ ãáÛÞÒØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï. µáÛØ ÛØæÕÝרÞÝÝÞÕ áÞÓÛÐèÕÝØÕ àÐáâÞàÓÐÕâáï ßÞ ÛîÑÞÙ ßàØçØÝÕ ÛîÑÞÙ Ø× áâÞàÞÝ, »ØæÕÝרÐâ áÞÓÛÐèÐÕâáï ÝÕÜÕÔÛÕÝÝÞ ßàÕÚàÐâØâì ØáßÞÛì×ÞÒÐÝØÕ ÒáÕå ÚÞßØÙ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÐ Ø ÝÕÜÕÔÛÕÝÝÞ ãÝØçâÞÖØâì ÒáÕ ÚÞßØØ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÐ. »îÑëÕ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÚÞâÞàëÕ ßÞ áÒÞÕÜã åÐàÐÚâÕàã ÞáâÐîâáï Ò áØÛÕ ßÞáÛÕ ÕÓÞ àÐáâÞàÖÕÝØï, ÔÕÙáâÒãîâ ÔÞ âÕå ßÞà, ßÞÚÐ ÝÕ ÑãÔãâ ØáßÞÛÝÕÝë, Ø ßàØÜÕÝïîâáï ÚÞ ÒáÕÜ áÞÞâÒÕâáâÒãîéØÜ ÝÐáÛÕÔÝØÚÐÜ Ø ßàÐÒÞßàÕÕÜÝØÚÐÜ ÞÑÕØå áâÞàÞÝ. + +¿À¾³À°¼¼° ¼¾¶µÂ Á¾´µÀ¶°ÂÌ ¾Âº»ÎǰÎɸ¹ ¼µÅ°½¸·¼, º¾Â¾À˹ ½µ ¿¾·²¾»¸Â ¸Á¿¾»Ì·¾²°ÂÌ µµ ¿¾Á»µ ¾º¾½Ç°½¸Ï ¿µÀ¸¾´° ¾Æµ½º¸. »¸Æµ½·¸°Â ¾±Ï·ÃµÂÁÏ ½µ ²·»°¼Ë²°ÂÌ ¾Âº»ÎǰÎɸ¹ ¼µÅ°½¸·¼ ¸»¸ ¿À¾³À°¼¼Ã. »¸Æµ½·¸°Â ´¾»¶µ½ ¿À¸½ÏÂÌ ¼µÀË ¿Àµ´¾Á¾À¾¶½¾Á¸, Ǿ±Ë ¸·±µ¶°ÂÌ ¿¾ÂµÀ¸ ´°½½ËÅ ² Àµ·Ã»Ì°µ ½µ²¾·¼¾¶½¾Á¸ ´°»Ì½µ¹Èµ³¾ ¸Á¿¾»Ì·¾²°½¸Ï ¿À¾³À°¼¼Ë. + +4. ¿ÛÐâÕÖØ + +² âÕçÕÝØÕ ßÕàØÞÔÐ ÞæÕÝÚØ ßÛÐâÐ ×Ð ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ÝÕ ÒרÜÐÕâáï. + +5. ¾âáãâáâÒØÕ ³ÐàÐÝâØÙ + +Á Ãǵ¾¼ »Î±ËÅ ¿Àµ´ÃÁ¼¾ÂÀµ½½ËÅ ·°º¾½¾¼ ³°À°½Â¸¹, º¾Â¾À˵ ½µ»Ì·Ï ¸Áº»ÎǸÂÌ, IBM ½µ ´°µÂ ½¸º°º¸Å ³°À°½Â¸¹ ¸»¸ ÃÁ»¾²¸¹, ϲ½¾ ²ËÀ°¶µ½½ËÅ ¸»¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ² ¾Â½¾Èµ½¸¸ ¿À¾³À°¼¼Ë ¸»¸ ¿¾´´µÀ¶º¸, ¿À¸ ½°»¸Ç¸¸ °º¾²¾¹, ²º»ÎǰÏ, ½¾ ½µ ¾³À°½¸Ç¸²°ÏÁÌ Í¸¼, »Î±Ëµ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸»¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸, ô¾²»µÂ²¾À¸Âµ»Ì½¾³¾ º°ÇµÁ²°, Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸ ¸ ¿À°²° Á¾±Á²µ½½¾Á¸ ¸ »Î±ÃÎ ³°À°½Â¸Î ¸»¸ ÃÁ»¾²¸µ ½µ½°ÀÃȵ½¸Ï ¿À°². + +½µº¾Â¾À˵ ³¾Áô°ÀÁ²° ¸»¸ ÎÀ¸Á´¸ºÆ¸¸ ½µ À°·ÀµÈ°Î ¾Âº°· ¾Â ϲ½¾ ²ËÀ°¶µ½½ËÅ ¸»¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ ³°À°½Â¸¹; ¿¾Í¾¼Ã ¿À¸²µ´µ½½¾µ ²Ëȵ ¸Áº»Îǵ½¸µ ¼¾¶µÂ ½µ ¿À¸¼µ½ÏÂÌÁÏ º »¸Æµ½·¸°ÂÃ. ² ;¼ Áûǰµ ´µ¹Á²¸µ °º¸Å ³°À°½Â¸¹ ¾³À°½¸Çµ½¾ ¼¸½¸¼°»Ì½Ë¼ ÁÀ¾º¾¼, ÂÀµ±Ãµ¼Ë¼ ·°º¾½¾¼. ¿¾ ¸Áµǵ½¸¸ ;³¾ ÁÀ¾º° ½¸º°º¸µ ³°À°½Â¸¸ ½µ ¿À¸¼µ½¸¼Ë. ½µº¾Â¾À˵ ³¾Áô°ÀÁ²° ¸»¸ ÎÀ¸Á´¸ºÆ¸¸ ½µ ´¾¿ÃÁº°Î ¾³À°½¸Çµ½¸µ ÁÀ¾º° ´µ¹Á²¸Ï ¿¾´À°·Ã¼µ²°µ¼ËÅ ³°À°½Â¸¹; ¿¾Í¾¼Ã ¿À¸²µ´µ½½¾µ ²Ëȵ ¸Áº»Îǵ½¸µ ¼¾¶µÂ ½µ ¿À¸¼µ½ÏÂÌÁÏ º »¸Æµ½·¸°ÂÃ. »¸Æµ½·¸°Â ¼¾¶µÂ ¸¼µÂÌ ´Àó¸µ ¿À°²°, º¾Â¾À˵ ¼¾³Ã À°·»¸Ç°ÂÌÁÏ ¾Â ÁÂÀ°½Ë º ÁÂÀ°½µ ¸»¸ ¾Â ÎÀ¸Á´¸ºÆ¸¸ º ÎÀ¸Á´¸ºÆ¸¸. + +·°Ï²»µ½¸Ï ¾± ¾Âº°·µ ¾Â ³°À°½Â¸¹ ¸ ¸Áº»Îǵ½¸Ï, ¿À¸²µ´µ½½Ëµ ² ´°½½¾¼ À°·´µ»µ 5, ¿À¸¼µ½ÏÎÂÁÏ Â°º¶µ º »Î±Ë¼ À°·À°±¾ÂǸº°¼ ¸ ¿¾Á°²É¸º°¼ ¿À¾³À°¼¼ IBM. + +¸·³¾Â¾²¸Âµ»¸, ¿¾Á°²É¸º¸ ¸»¸ ¸·´°Âµ»¸ ¿À¾³À°¼¼ ½µ-IBM ¼¾³Ã ¿Àµ´¾Á°²»ÏÂÌ Á²¾¸ Á¾±Á²µ½½Ëµ ³°À°½Â¸¸. + +IBM ½µ ¿Àµ´¾Á°²»ÏµÂ ¿¾´´µÀ¶ºÃ º°º¾³¾-»¸±¾ À¾´°, µÁ»¸ IBM ½µ ú°·Ë²°µÂ ¸½¾µ. ² °º¾¼ Á»Ãǰµ »Î±°Ï ¿¾´´µÀ¶º°, º¾Â¾ÀÃÎ ¿Àµ´¾Á°²»ÏµÂ IBM, ϲ»ÏµÂÁÏ ¾±ÊµºÂ¾¼ ·°Ï²»µ½¸¹ ¾± ¾Âº°·µ ¾Â ³°À°½Â¸¹ ¸ ¸Áº»Îǵ½¸¹, ¿À¸²µ´µ½½ËÅ ² ´°½½¾¼ À°·´µ»µ 5. + +6. ´ÐÝÝëÕ Ø ±Ð×ë ÔÐÝÝëå »ØæÕÝרÐâÐ + +ÇâÞÑë ßÞÜÞçì »ØæÕÝרÐâã ÞßàÕÔÕÛØâì ßàØçØÝã ßàÞÑÛÕÜë, áÒï×ÐÝÝÞÙ á ¿àÞÓàÐÜÜÞÙ, IBM ÜÞÖÕâ ×ÐßàÞáØâì, çâÞÑë »ØæÕÝרÐâ 1) ßàÕÔÞáâÐÒØÛ IBM ãÔÐÛÕÝÝëÙ ÔÞáâãß Ú áØáâÕÜÕ »ØæÕÝרÐâÐ ØÛØ 2) ÞâßàÐÒØÛ Ò IBM ØÝäÞàÜÐæØî Þ »ØæÕÝרÐâÕ ØÛØ áØáâÕÜÝëÕ ÔÐÝÝëÕ. ¾ÔÝÐÚÞ IBM ÝÕ ÞÑï×ÐÝÐ ßàÕÔÞáâÐÒÛïâì ßÞÔÞÑÝãî ßÞÜÞéì, ÕáÛØ IBM Ø »ØæÕÝרÐâ ÝÕ ×ÐÚÛîçØÛØ ÞâÔÕÛìÝÞÕ ßØáìÜÕÝÝÞÕ áÞÓÛÐèÕÝØÕ, ßÞ ÚÞâÞàÞÜã IBM áÞÓÛÐáÝÐ ßàÕÔÞáâÐÒÛïâì »ØæÕÝרÐâã âÐÚÞÙ ÒØÔ ßÞÔÔÕàÖÚØ, ÚÞâÞàëÙ ÒëåÞÔØâ ×Ð ßàÕÔÕÛë ÞÑï×ÐâÕÛìáâÒ IBM ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. ² ÛîÑÞÜ áÛãçÐÕ IBM ØáßÞÛì×ãÕâ ØÝäÞàÜÐæØî ÞÑ ÞèØÑÚÐå Ø ßàÞÑÛÕÜÐå ÔÛï ãÛãçèÕÝØï ÕÕ ßàÞÔãÚâÞÒ Ø ãáÛãÓ Ø ÔÛï áÞÔÕÙáâÒØï ßàÕÔÞáâÐÒÛÕÝØî áÞÞâÒÕâáâÒãîéØå ßàÕÔÛÞÖÕÝØÙ ßÞÔÔÕàÖÚØ. ´Ûï íâØå æÕÛÕÙ IBM ÜÞÖÕâ ØáßÞÛì×ÞÒÐâì îàØÔØçÕáÚØå ÛØæ IBM Ø áãÑßÞÔàïÔçØÚÞÒ IBM (Ò âÞÜ çØáÛÕ, Ò ÞÔÝÞÙ ØÛØ ÝÕáÚÞÛìÚØå áâàÐÝÐå, ÞâÛØçÝëå Þâ áâàÐÝë, Ò ÚÞâÞàÞÙ ÝÐåÞÔØâáï »ØæÕÝרÐâ), Ø »ØæÕÝרÐâ àÐ×àÕèÐÕâ IBM ÔÕÙáâÒÞÒÐâì âÐÚØÜ ÞÑàÐ×ÞÜ. + +»ØæÕÝרÐâ ÞáâÐÕâáï ÞâÒÕâáâÒÕÝÝëÜ ×Ð 1) ÛîÑëÕ ÔÐÝÝëÕ Ø áÞÔÕàÖØÜÞÕ ÑÐ× ÔÐÝÝëå, ÔÞáâãß Ú ÚÞâÞàëÜ »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ IBM, 2) ÒëÑÞà Ø ÒÝÕÔàÕÝØÕ ßàÞæÕÔãà Ø áàÕÔáâÒ ãßàÐÒÛÕÝØï, ÚÐáÐîéØåáï ÔÞáâãßÐ, ÑÕ×ÞßÐáÝÞáâØ, èØäàÞÒÐÝØï, ØáßÞÛì×ÞÒÐÝØï Ø ßÕàÕÔÐçØ ÔÐÝÝëå (ÒÚÛîçÐï ÛîÑëÕ ßÕàáÞÝÐÛìÝëÕ ÔÐÝÝëÕ) Ø 3) àÕ×ÕàÒÝÞÕ ÚÞߨàÞÒÐÝØÕ Ø ÒÞááâÐÝÞÒÛÕÝØÕ ÛîÑëå ÑÐ× ÔÐÝÝëå Ø áÞåàÐÝÕÝÝëå ÔÐÝÝëå. »ØæÕÝרÐâ ÝÕ ÑãÔÕâ ÞâßàÐÒÛïâì Ø ßàÕÔÞáâÐÒÛïâì IBM ÔÞáâãß Ú ÛîÑÞÙ ßÕàáÞÝÐÛìÝÞÙ ØÝäÞàÜÐæØØ (Ò ÒØÔÕ ÔÐÝÝëå ØÛØ Ò ØÝÞÙ äÞàÜÕ) Ø ÑãÔÕâ ÝÕáâØ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð àÐ×ãÜÝëÕ àÐáåÞÔë Ø ØÝëÕ áãÜÜë, ÚÞâÞàëÕ IBM ÜÞÖÕâ ßÞÝÕáâØ Ò áÒïר á ÞèØÑÞçÝÞÙ ßÕàÕÔÐçÕÙ IBM âÐÚÞÙ ØÝäÞàÜÐæØØ, ãâàÐâÞÙ ØÛØ àÐ×ÓÛÐèÕÝØÕÜ IBM ßÞÔÞÑÝÞÙ ØÝäÞàÜÐæØØ, ÒÚÛîçÐï àÐáåÞÔë, ÒÞ×ÝØÚÐîéØÕ Ø× ÛîÑëå ßàÕâÕÝ×ØÙ âàÕâìØå áâÞàÞÝ. + +7. ¾ÓàÐÝØçÕÝØÕ ¾âÒÕâáâÒÕÝÝÞáâØ + +¾ÓàÐÝØçÕÝØï Ø ØáÚÛîçÕÝØï, Ø×ÛÞÖÕÝÝëÕ Ò ÔÐÝÝÞÜ ÀÐ×ÔÕÛÕ 7 (¾ÓàÐÝØçÕÝØÕ ¾âÒÕâáâÒÕÝÝÞáâØ), ßàØÜÕÝïîâáï Ò ßÞÛÝÞÜ ÞÑêÕÜÕ, Ò ÚÞâÞàÞÜ ÞÝØ ÝÕ ×ÐßàÕéÕÝë ßàØÜÕÝØÜëÜ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÞáÒÞÑÞÖÔÕÝØï Þâ ÞÑï×ÐâÕÛìáâÒ ßÞ ÔÞÓÞÒÞàã. + +7.1. ÂÞ, ×Ð ÇâÞ IBM ¼ÞÖÕâ ½ÕáâØ ¾âÒÕâáâÒÕÝÝÞáâì + +¼ÞÓãâ ÒÞ×ÝØÚÝãâì ÞÑáâÞïâÕÛìáâÒÐ, ÚÞÓÔÐ Ø×-×Ð ÝÕØáßÞÛÝÕÝØï ÞÑï×ÐâÕÛìáâÒ áÞ áâÞàÞÝë IBM ØÛØ ßÞ ØÝÞÙ ßàØçØÝÕ ÝÐáâãßÛÕÝØï ÞâÒÕâáâÒÕÝÝÞáâØ »ØæÕÝרÐâ ØÜÕÕâ ßàÐÒÞ ÝÐ ÒÞ×ÜÕéÕÝØÕ ãÑëâÚÞÒ áÞ áâÞàÞÝë IBM. ½Õ×ÐÒØáØÜÞ Þâ âÞÓÞ, ÝÐ ÚÐÚÞÜ ÞáÝÞÒÐÝØØ »ØæÕÝרÐâ ØÜÕÕâ ßàÐÒÞ âàÕÑÞÒÐâì ÒÞ×ÜÕéÕÝØï ãÑëâÚÞÒ áÞ áâÞàÞÝë IBM (ÒÚÛîçÐï áãéÕáâÒÕÝÝÞÕ ÝÐàãèÕÝØÕ, ÝÕÑàÕÖÝÞáâì, ÒÒÕÔÕÝØÕ Ò ×ÐÑÛãÖÔÕÝØÕ ØÛØ ØÝÞÕ ÞáÝÞÒÐÝØÕ Ò áØÛã ÔÞÓÞÒÞàÐ ØÛØ ÔÕÛØÚâÐ), áÞÒÞÚãßÝÐï ÞâÒÕâáâÒÕÝÝÞáâì IBM ßÞ ÒáÕÜ ßàÕâÕÝרïÜ Ò æÕÛÞÜ, ÒÞ×ÝØÚÐîéØÜ Ø× ØÛØ áÒï×ÐÝÝëÜ á ÚÐÖÔÞÙ ¿àÞÓàÐÜÜÞÙ ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ÒÞ×ÝØÚÐîéØÜ ÝÐ ÞáÝÞÒÐÝØØ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÝÕ ÑãÔÕâ ßàÕÒëèÐâì áãÜÜã ÛîÑëå 1) ÚÞÜßÕÝáÐæØÙ ×Ð ÝÐÝÕáÕÝØÕ âÕÛÕáÝëå ßÞÒàÕÖÔÕÝØÙ (ÒÚÛîçÐï áÜÕàâì) Ø ãéÕàÑ, ßàØçØÝÕÝÝëÙ ÝÕÔÒØÖØÜÞÜã Ø ÜÐâÕàØÐÛìÝÞÜã ÔÒØÖØÜÞÜã ØÜãéÕáâÒã, Ø 2) ÔàãÓØå äÐÚâØçÕáÚØå ßàïÜëå ãÑëâÚÞÒ Ò àÐ×ÜÕàÕ, ÝÕ ßàÕÒëèÐîéÕÜ 10 000 ÔÞÛÛÐàÞÒ ÁȰ (ØÛØ íÚÒØÒÐÛÕÝâÐ íâÞÙ áãÜÜë Ò ÜÕáâÝÞÙ ÒÐÛîâÕ). + +´ÐÝÝÞÕ ÞÓàÐÝØçÕÝØÕ âÐÚÖÕ ßàØÜÕÝïÕâáï ÚÞ ÒáÕÜ àÐ×àÐÑÞâçØÚÐÜ Ø ßÞáâÐÒéØÚÐÜ ¿àÞÓàÐÜÜë IBM. ÍâÞ ÜÐÚáØÜãÜ, ×Ð ÚÞâÞàëÙ IBM Ø ÕÕ àÐ×àÐÑÞâçØÚØ ¿àÞÓàÐÜÜë Ø ßÞáâÐÒéØÚØ ÒáÕ ÒÜÕáâÕ ÝÕáãâ ÞâÒÕâáâÒÕÝÝÞáâì. + +7.2. ÂÞ, ×Ð ÇâÞ IBM ½Õ ½ÕáÕâ ¾âÒÕâáâÒÕÝÝÞáâØ + +½¸ ¿À¸ º°º¸Å ¾±Á¾Ïµ»ÌÁ²°Å IBM, µµ À°·À°±¾ÂǸº¸ ¿À¾³À°¼¼ ¸»¸ ¿¾Á°²É¸º¸ ½µ ½µÁà¾Â²µÂÁ²µ½½¾Á¸ ·° »Î±¾µ ¸· ½¸¶µÁ»µ´ÃÎɵ³¾, ´°¶µ µÁ»¸ ¾½¸ ±Ë»¸ ¿À¾¸½Ä¾À¼¸À¾²°½Ë ¾ ²¾·¼¾¶½¾Á¸ °º¾²¾³¾: + +a. ¿¾ÂµÀÏ ¸»¸ ¿¾²Àµ¶´µ½¸µ ´°½½ËÅ; + +b. ¾Á¾±Ëµ, ½µ¿Àµ´²¸´µ½½Ëµ ¸»¸ ½µ¿Àϼ˵ ñ˺¸ ¸»¸ »Î±Ëµ º¾Á²µ½½Ëµ ͺ¾½¾¼¸ÇµÁº¸µ ñ˺¸; + +c. ÿÃɵ½½Ëµ ´¾Å¾´Ë, ²¾·¼¾¶½¾ÁÂÌ ¿À¾²µ´µ½¸Ï ´µ»¾²¾¹ °ºÂ¸²½¾Á¸, ¿À¸±Ë»Ì, Àµ¿ÃÂ°Æ¸Ï ¸»¸ ¾¶¸´°µ¼Ëµ Á±µÀµ¶µ½¸Ï. + +8. ¿àÞÒÕàÚÐ ÁÞÑÛîÔÕÝØï ãáÛÞÒØÙ + +´Ûï æÕÛÕÙ ÝÐáâÞïéÕÓÞ ÀÐ×ÔÕÛÐ 8 ("¿àÞÒÕàÚÐ ÁÞÑÛîÔÕÝØï ãáÛÞÒØÙ") âÕàÜØÝ "ÃáÛÞÒØï ¾æÕÝÚØ ¿àÞÓàÐÜÜ" Þ×ÝÐçÐÕâ 1) ÝÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ Ø ßàØÜÕÝØÜëÕ ÔÞßÞÛÝÕÝØï Ø ÔÞÚãÜÕÝâë Þ âàÐÝ×ÐÚæØïå, ßàÕÔÞáâÐÒÛÕÝÝëÕ IBM, Ø 2) ßÞÛØâØÚØ IBM Ò ÞâÝÞèÕÝØØ ßàÞÓàÐÜÜÝÞÓÞ ÞÑÕáßÕçÕÝØï, ÚÞâÞàëÕ ÜÞÖÝÞ ÝÐÙâØ ÝÐ Web-áÐÙâÕ IBM Software Policy (www.ibm.com/softwarepolicies), ÒÚÛîçÐï, ÝÞ ÝÕ ÞÓàÐÝØçØÒÐïáì ØÜØ, ßÞÛØâØÚØ Ò ÞâÝÞèÕÝØØ àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï, æÕÝÞÞÑàÐ×ÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ÝÕßÞÛÝëå ÜÞéÝÞáâÕÙ Ø ÜØÓàÐæØØ. + +¿àÐÒÐ Ø ÞÑï×ÐÝÝÞáâØ, Ø×ÛÞÖÕÝÝëÕ Ò ÀÐ×ÔÕÛÕ 8, ÞáâÐîâáï Ò áØÛÕ Ò âÕçÕÝØÕ ßÕàØÞÔÐ ÔÕÙáâÒØï ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã ÔÛï »ØæÕÝרÐâÐ Ø Ò âÕçÕÝØÕ ÔÒãå ÛÕâ ßÞáÛÕ ÕÓÞ ÞÚÞÝçÐÝØï. + +8.1. ¿àÞæÕáá ¿àÞÒÕàÚØ + +»ØæÕÝרÐâ áÞÓÛÐáÕÝ áÞ×ÔÐÒÐâì, áÞåàÐÝïâì Ø ßàÕÔÞáâÐÒÛïâì IBM Ø ÕÕ ÐãÔØâÞàÐÜ âÞçÝëÕ ßØáìÜÕÝÝëÕ ×ÐߨáØ, ÒëåÞÔÝëÕ ÔÐÝÝëÕ áØáâÕÜÝëå áàÕÔáâÒ Ø ÔàãÓãî ØÝäÞàÜÐæØî Þ áØáâÕÜÕ, ÚÞâÞàëÕ ÔÞáâÐâÞçÝë ÔÛï ßÞÔâÒÕàÖÔÕÝØï âÞÓÞ, çâÞ »ØæÕÝרÐâ ØáßÞÛì×ãÕâ ÒáÕ ¿àÞÓàÐÜÜë Ò áÞÞâÒÕâáâÒØØ á ÃáÛÞÒØïÜØ ¾æÕÝÚØ ¿àÞÓàÐÜÜ, ÒÚÛîçÐï, ÑÕ× ÞÓàÐÝØçÕÝØï, ÒáÕ ßàØÜÕÝØÜëÕ ãáÛÞÒØï ÛØæÕÝרàÞÒÐÝØï Ø æÕÝÞÞÑàÐ×ÞÒÐÝØï IBM. »ØæÕÝרÐâ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð 1) ÝÕßàÕÒëèÕÝØÕ ãàÞÒÝï °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï Ø 2) áÞÑÛîÔÕÝØÕ ÃáÛÞÒØÙ ¾æÕÝÚØ ¿àÞÓàÐÜÜ. + +¿ÞáÛÕ àÐ×ãÜÝÞÓÞ ãÒÕÔÞÜÛÕÝØï IBM ÜÞÖÕâ ßàÞÒÕàØâì áÞÑÛîÔÕÝØÕ »ØæÕÝרÐâÞÜ ÃáÛÞÒØÙ ¾æÕÝÚØ ¿àÞÓàÐÜÜ ÒÞ ÒáÕå ÞäØáÐå Ø ÒÞ ÒáÕå áàÕÔÐå, Ò ÚÞâÞàëå »ØæÕÝרÐâ ØáßÞÛì×ãÕâ (Ò ÛîÑëå æÕÛïå) ¿àÞÓàÐÜÜë, ÝÐ ÚÞâÞàëÕ àÐáßàÞáâàÐÝïîâáï ÃáÛÞÒØï ¾æÕÝÚØ ¿àÞÓàÐÜÜ. ÂÐÚÐï ßàÞÒÕàÚÐ ÑãÔÕâ ßàÞÒÞÔØâìáï áßÞáÞÑÞÜ, ÚÞâÞàëÙ ãÜÕÝìèÐÕâ ßÞÜÕåØ ÔÛï ÔÕïâÕÛìÝÞáâØ »ØæÕÝרÐâÐ, Ø ÜÞÖÕâ ßàÞåÞÔØâì Ò ßÞÜÕéÕÝØïå »ØæÕÝרÐâÐ Ò ÞÑëçÝëÕ àÐÑÞçØÕ çÐáë. IBM ÜÞÖÕâ ØáßÞÛì×ÞÒÐâì ÝÕ×ÐÒØáØÜÞÓÞ ÐãÔØâÞàÐ ÔÛï ßÞÜÞéØ Ò ßàÞÒÕÔÕÝØØ ßàÞÒÕàÚØ, ßàØ ãáÛÞÒØØ çâÞ ã IBM Õáâì ߨáìÜÕÝÝÞÕ áÞÓÛÐèÕÝØÕ Þ ÚÞÝäØÔÕÝæØÐÛìÝÞáâØ á âÐÚØÜ ÐãÔØâÞàÞÜ. + +8.2. ÀÐ×àÕèÕÝØÕ áßÞàÞÒ + +µáÛØ Ò åÞÔÕ ÛîÑÞÙ ßÞÔÞÑÝÞÙ ßàÞÒÕàÚØ ÑãÔÕâ ãáâÐÝÞÒÛÕÝÞ, çâÞ »ØæÕÝרÐâ ØáßÞÛì×ÞÒÐÛ ÚÐÚãî-ÛØÑÞ ¿àÞÓàÐÜÜã á ßàÕÒëèÕÝØÕÜ ãàÞÒÝï °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ÝÕ áÞÑÛîÔÐÕâ ÃáÛÞÒØï ¾æÕÝÚØ ¿àÞÓàÐÜÜ, IBM ÝÐßàÐÒØâ »ØæÕÝרÐâã ߨáìÜÕÝÝÞÕ ãÒÕÔÞÜÛÕÝØÕ. »ØæÕÝרÐâ áÞÓÛÐáÕÝ ÝÕÜÕÔÛÕÝÝÞ ÒëßÛÐâØâì ÝÕßÞáàÕÔáâÒÕÝÝÞ IBM áãÜÜã, ãÚÐ×ÐÝÝãî IBM Ò áçÕâÕ, ×Ð 1) ÛîÑÞÕ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ áÒÕàå ãáâÐÝÞÒÛÕÝÝëå ßàÕÔÕÛÞÒ, 2) ÔÞßÞÛÝØâÕÛìÝãî ßÞÔÔÕàÖÚã ÔÛï âÐÚÞÓÞ ØáßÞÛì×ÞÒÐÝØï áÒÕàå ãáâÐÝÞÒÛÕÝÝëå ßàÕÔÕÛÞÒ ×Ð ÜÕÝìèØÙ Ø× áÛÕÔãîéØå ßÕàØÞÔÞÒ: ßÕàØÞÔ âÐÚÞÓÞ ØáßÞÛì×ÞÒÐÝØï ØÛØ ÔÒÐ ÓÞÔÐ, Ø 3) ÛîÑëÕ ÔÞßÞÛÝØâÕÛìÝëÕ àÐáåÞÔë Ø ÔàãÓØÕ ÞÑï×ÐâÕÛìáâÒÐ, ÒëïÒÛÕÝÝëÕ Ò àÕ×ãÛìâÐâÕ âÐÚÞÙ ßàÞÒÕàÚØ. + +9. ÃÒÕÔÞÜÛÕÝØï ÂàÕâìØå ÁâÞàÞÝ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ßàÞÓàÐÜÜÝëÙ ÚÞÔ âàÕâìÕÙ áâÞàÞÝë, ÚÞâÞàëÙ IBM, Ð ÝÕ âàÕâìï áâÞàÞÝÐ, ÛØæÕÝרàãÕâ »ØæÕÝרÐâã ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. ÃÒÕÔÞÜÛÕÝØï, ÕáÛØ âÐÚÞÒëÕ Õáâì, Þ ßàÞÓàÐÜÜÝÞÜ ÚÞÔÕ, ßàÕÔÞáâÐÒÛÕÝÝÞÜ âàÕâìÕÙ áâÞàÞÝÞÙ ("ÃÒÕÔÞÜÛÕÝØï ÂàÕâìØå ÁâÞàÞÝ"), ßàØÒÞÔïâáï âÞÛìÚÞ ÔÛï áÒÕÔÕÝØï »ØæÕÝרÐâÐ. ÍâØ ãÒÕÔÞÜÛÕÝØï ÜÞÖÝÞ ÝÐÙâØ Ò äÐÙÛÕ (äÐÙÛÐå) NOTICES ÔÛï ¿àÞÓàÐÜÜë. ¸ÝäÞàÜÐæØî Þ âÞÜ, ÚÐÚ ßÞÛãçØâì ØáåÞÔÝëÙ ÚÞÔ ÔÛï âÞÓÞ ØÛØ ØÝÞÓÞ ßàÞÓàÐÜÜÝÞÓÞ ÚÞÔÐ âàÕâìÕÙ áâÞàÞÝë, ÜÞÖÝÞ ÝÐÙâØ Ò ÃÒÕÔÞÜÛÕÝØïå ÂàÕâìØå ÁâÞàÞÝ. µáÛØ Ò ÃÒÕÔÞÜÛÕÝØïå ÂàÕâìØå ÁâÞàÞÝ IBM ÞßàÕÔÕÛïÕâ ßàÞÓàÐÜÜÝëÙ ÚÞÔ, ßàÕÔÞáâÐÒÛÕÝÝëÙ âàÕâìÕÙ áâÞàÞÝÞÙ, ÚÐÚ "¸×ÜÕÝïÕÜëÙ ¿àÞÓàÐÜÜÝëÙ ÚÞÔ ÂàÕâìÕÙ ÁâÞàÞÝë", âÞ IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ßàÐÒÐ ÝÐ 1) Ø×ÜÕÝÕÝØÕ ¸×ÜÕÝïÕÜÞÓÞ ¿àÞÓàÐÜÜÝÞÓÞ ÚÞÔÐ ÂàÕâìÕÙ ÁâÞàÞÝë Ø 2) ÞÑàÐâÝÞÕ ßàÕÞÑàÐ×ÞÒÐÝØÕ ÜÞÔãÛÕÙ ¿àÞÓàÐÜÜë, ÚÞâÞàëÕ ÝÕßÞáàÕÔáâÒÕÝÝÞ Ò×ÐØÜÞÔÕÙáâÒãîâ á ¸×ÜÕÝïÕÜëÜ ¿àÞÓàÐÜÜÝëÜ ÚÞÔÞÜ ÂàÕâìÕÙ ÁâÞàÞÝë, ßàØ ãáÛÞÒØØ çâÞ íâÞ ÔÕÛÐÕâáï âÞÛìÚÞ á æÕÛìî ÞâÛÐÔÚØ Ø×ÜÕÝÕÝØÙ, ÒÝÕáÕÝÝëå »ØæÕÝרÐâÞÜ Ò âÐÚÞÙ ßàÞÓàÐÜÜÝëÙ ÚÞÔ âàÕâìÕÙ áâÞàÞÝë. ¾Ñï×ÐâÕÛìáâÒÐ IBM ßÞ ÞÑáÛãÖØÒÐÝØî Ø ßÞÔÔÕàÖÚÕ, ÕáÛØ âÐÚÞÒëÕ Õáâì, ßàØÜÕÝïîâáï âÞÛìÚÞ Ú ÝÕØ×ÜÕÝÕÝÝÞÙ ¿àÞÓàÐÜÜÕ. + +10. ¾ÑéØÕ ãáÛÞÒØï + +a. ½ØçâÞ Ò ÝÐáâÞïéÕÜ ÁÞÓÛÐèÕÝØØ ÝÕ ×ÐâàÐÓØÒÐÕâ ÚÐÚØå-ÛØÑÞ ãáâÐÝÞÒÛÕÝÝëå ×ÐÚÞÝÞÜ ßàÐÒ ßÞâàÕÑØâÕÛÕÙ, ÚÞâÞàëÕ ÝÕ ÜÞÓãâ Ñëâì ÞâÚÛÞÝÕÝë ØÛØ ÞÓàÐÝØçÕÝë ßÞ ÔÞÓÞÒÞàã. + +b. µáÛØ ÚÐÚÞÕ-ÛØÑÞ ãáÛÞÒØÕ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï ÑãÔÕâ ßàØ×ÝÐÝÞ ÝÕÔÕÙáâÒØâÕÛìÝëÜ ØÛØ ÛØèÕÝÝëÜ ØáÚÞÒÞÙ áØÛë, ÞáâÐÛìÝëÕ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï ßàÞÔÞÛÖÐîâ ÔÕÙáâÒÞÒÐâì Ò ßÞÛÝÞÜ ÞÑêÕÜÕ. + +c. »ØæÕÝרÐâã ×ÐßàÕéÕÝÞ íÚáßÞàâØàÞÒÐâì ¿àÞÓàÐÜÜã. + +d. »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ ÚÞÜßÐÝØØ International Business Machines Corporation Ø ÕÕ ÔÞçÕàÝØÜ ÚÞÜßÐÝØïÜ (Ð âÐÚÖÕ Øå ÝÐáÛÕÔÝØÚÐÜ Ø ßàÐÒÞßàÕÕÜÝØÚÐÜ, ßÞÔàïÔçØÚÐÜ Ø ±Ø×ÝÕá-¿ÐàâÝÕàÐÜ IBM) ßàÐÒÞ ÝÐ åàÐÝÕÝØÕ ÚÞÝâÐÚâÝÞÙ ØÝäÞàÜÐæØØ »ØæÕÝרÐâÐ Ø ÕÕ ØáßÞÛì×ÞÒÐÝØÕ Ò ÛîÑÞÜ ÜÕáâÕ ÒÕÔÕÝØï ÔÕÛÞÒÞÙ ÐÚâØÒÝÞáâØ, Ò áÒïר á ßàÞÔãÚâÐÜØ Ø ãáÛãÓÐÜØ IBM ØÛØ ÔÛï ÔÐÛìÝÕÙèÕÙ ßÞÔÔÕàÖÚØ ÔÕÛÞÒëå ÞâÝÞèÕÝØÙ IBM á »ØæÕÝרÐâÞÜ. + +e. ºÐÖÔÐï áâÞàÞÝÐ ßàÕÔÞáâÐÒØâ ÔàãÓÞÙ áâÞàÞÝÕ àÐ×ãÜÝãî ÒÞ×ÜÞÖÝÞáâì ÒëßÞÛÝØâì áÒÞØ ÞÑï×ÐâÕÛìáâÒÐ ÔÞ âÞÓÞ, ÚÐÚ ×ÐïÒØâ Þ ÝÕÒëßÞÛÝÕÝØØ ÔàãÓÞÙ áâÞàÞÝÞÙ ÕÕ ÞÑï×ÐâÕÛìáâÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. ÁâÞàÞÝë ÑãÔãâ ßëâÐâìáï ÔÞÑàÞáÞÒÕáâÝÞ àÐ×àÕèÐâì ÒáÕ áßÞàë, àÐ×ÝÞÓÛÐáØï ØÛØ ßàÕâÕÝ×ØØ ÜÕÖÔã áâÞàÞÝÐÜØ, ÞâÝÞáïéØÕáï Ú ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. + +f. µáÛØ ØÝÞÕ ÝÕ ßàÕÔãáÜÞâàÕÝÞ ßàØÜÕÝØÜëÜ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ, ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÞâÚÐ×Ð Þâ ßàÐÒ ßÞ ÔÞÓÞÒÞàã ØÛØ Øå ÞÓàÐÝØçÕÝØï, âÞ: 1) ÝØ ÞÔÝÐ Ø× áâÞàÞÝ ÝÕ ÑãÔÕâ ÒÞ×ÑãÖÔÐâì áãÔÕÑÝëÕ ØáÚØ Ò ÛîÑÞÙ äÞàÜÕ Ø ßÞ ÛîÑÞÙ ßàÕâÕÝרØ, áÒï×ÐÝÝÞÙ á ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ, ßÞ×ÔÝÕÕ çÕÜ çÕàÕ× ÔÒÐ ÓÞÔÐ ßÞáÛÕ ÒÞ×ÝØÚÝÞÒÕÝØï ÞáÝÞÒÐÝØï ÔÛï ØáÚÐ, Ø 2) ßÞ ØáâÕçÕÝØØ ÔÐÝÝÞÓÞ áàÞÚÐ ÛîÑëÕ ßÞÔÞÑÝëÕ ßàÕâÕÝ×ØØ Ø áÒï×ÐÝÝëÕ á ÝØÜØ ßàÐÒÐ ãâàÐçØÒÐîâ áØÛã. + +g. ½Ø »ØæÕÝרÐâ, ÝØ IBM ÝÕ ÝÕáãâ ÞâÒÕâáâÒÕÝÝÞáâØ ×Ð ÝÕÒëßÞÛÝÕÝØÕ ÚÐÚØå-ÛØÑÞ ÞÑï×ÐâÕÛìáâÒ ßÞ ßàØçØÝÐÜ, ÝÐ ÚÞâÞàëÕ ÞÝØ ÝÕ ÜÞÓãâ ßÞÒÛØïâì. + +h. ½ÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ ÝÕ áÞ×ÔÐÕâ ÚÐÚØå-ÛØÑÞ ßàÐÒ ØÛØ ÞáÝÞÒÐÝØÙ ÔÛï ØáÚÐ ÚÐÚØå-ÛØÑÞ âàÕâìØå ÛØæ, Ø IBM ÝÕ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâØ ×Ð ÚÐÚØÕ-ÛØÑÞ ßàÕâÕÝ×ØØ âàÕâìØå ÛØæ Ú »ØæÕÝרÐâã, ×Ð ØáÚÛîçÕÝØÕÜ âÞÓÞ, çâÞ àÐ×àÕèÕÝÞ Ò ¿ÞÔàÐ×ÔÕÛÕ 7.1 (ÂÞ, ×Ð ÇâÞ IBM ¼ÞÖÕâ ½ÕáâØ ¾âÒÕâáâÒÕÝÝÞáâì) ÒëèÕ Ò áÒïר á ÝÐÝÕáÕÝØÕÜ âÕÛÕáÝëå ßÞÒàÕÖÔÕÝØÙ (ÒÚÛîçÐï áÜÕàâì) ØÛØ ßÞÒàÕÖÔÕÝØÕÜ ÝÕÔÒØÖØÜÞÓÞ ØÛØ ÜÐâÕàØÐÛìÝÞÓÞ ÔÒØÖØÜÞÓÞ ØÜãéÕáâÒÐ, ×Ð ÚÞâÞàëÕ IBM ÝÕáÕâ îàØÔØçÕáÚãî ÞâÒÕâáâÒÕÝÝÞáâì ßÕàÕÔ âÐÚÞÙ âàÕâìÕÙ áâÞàÞÝÞÙ. + +i. ·ÐÚÛîçÐï ÝÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ, ÝØ ÞÔÝÐ Ø× áâÞàÞÝ ÝÕ ßÞÛÐÓÐÕâáï ÝØ ÝÐ ÚÐÚØÕ ×ÐïÒÛÕÝØï, ÝÕ ãÚÐ×ÐÝÝëÕ Ò ÔÐÝÝÞÜ ÁÞÓÛÐèÕÝØØ, ÒÚÛîçÐï, ÝÞ ÝÕ ÞÓàÐÝØçØÒÐïáì ØÜØ, ×ÐïÒÛÕÝØï ÞâÝÞáØâÕÛìÝÞ: 1) ßàÞØ×ÒÞÔØâÕÛìÝÞáâØ ØÛØ äãÝÚæØÞÝØàÞÒÐÝØï ¿àÞÓàÐÜÜë, ÚàÞÜÕ ÓÐàÐÝâØÙ, ßàïÜÞ ßàÕÔãáÜÞâàÕÝÝëå ÒëèÕ Ò ÀÐ×ÔÕÛÕ 5 ("¾âáãâáâÒØÕ ³ÐàÐÝâØÙ"), 2) ÜÝÕÝØÙ Ø àÕÚÞÜÕÝÔÐæØÙ ÔàãÓØå áâÞàÞÝ ØÛØ 3) ÚÐÚØå-ÛØÑÞ àÕ×ãÛìâÐâÞÒ Ø íÚÞÝÞÜØçÕáÚØå ÒëÓÞÔ, ÚÞâÞàëå ÜÞÖÕâ ÔÞáâØçì »ØæÕÝרÐâ. + +j. IBM ßÞÔߨáÐÛÐ áÞÓÛÐèÕÝØï á ÝÕÚÞâÞàëÜØ ÞàÓÐÝØ×ÐæØïÜØ (ØÜÕÝãÕÜëÜØ "±Ø×ÝÕá-¿ÐàâÝÕàÐÜØ IBM") Þ ßàÞÔÒØÖÕÝØØ ÝÐ àëÝÚÕ, ßàÞÔÐÖÕ Ø ßÞÔÔÕàÖÚÕ ÞßàÕÔÕÛÕÝÝëå ¿àÞÓàÐÜÜ. ±Ø×ÝÕá-¿ÐàâÝÕàë IBM ÞáâÐîâáï áÐÜÞáâÞïâÕÛìÝëÜØ Ø ÝÕ×ÐÒØáØÜëÜØ Þâ IBM ÚÞÜßÐÝØïÜØ. IBM ÝÕ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâØ ×Ð ÔÕÙáâÒØï ØÛØ ×ÐïÒÛÕÝØï ±Ø×ÝÕá-¿ÐàâÝÕàÞÒ IBM ØÛØ ÞÑï×ÐâÕÛìáâÒÐ, ÚÞâÞàëÕ ÞÝØ ØÜÕîâ ßÕàÕÔ »ØæÕÝרÐâÞÜ. + +k. ÃáÛÞÒØï Þ ÒÞ×ÜÕéÕÝØïå, ÚÐáÐîéØÕáï ÛØæÕÝ×ØÙ ØÛØ ØÝâÕÛÛÕÚâãÐÛìÝÞÙ áÞÑáâÒÕÝÝÞáâØ, ÔàãÓØå áÞÓÛÐèÕÝØÙ »ØæÕÝרÐâÐ á IBM (ÝÐßàØÜÕà, ÁÞÓÛÐèÕÝØï IBM á ·ÐÚÐ×çØÚÞÜ), ÝÕ ßàØÜÕÝïîâáï Ú ÛØæÕÝרïÜ ÝÐ ¿àÞÓàÐÜÜë, ßàÕÔÞáâÐÒÛïÕÜëÜ Ò áÞÞâÒÕâáâÒØØ á ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ. + +11. ³ÕÞÓàÐäØçÕáÚØÕ ÀÐÜÚØ Ø ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ + +11.1. ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ + +¾ÑÕ áâÞàÞÝë áÞÓÛÐèÐîâáï ÝÐ ßàØÜÕÝÕÝØÕ ×ÐÚÞÝÞÒ áâàÐÝë, Ò ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ÛØæÕÝרî ÝÐ ¿àÞÓàÐÜÜã, çâÞÑë àÕÓãÛØàÞÒÐâì, ØÝâÕàßàÕâØàÞÒÐâì Ø ßàØÔÐÒÐâì ØáÚÞÒãî ×ÐéØâã ÒáÕÜ ßàÐÒÐÜ, ÞÑï×ÐÝÝÞáâïÜ Ø ÞÑï×ÐâÕÛìáâÒÐÜ »ØæÕÝרÐâÐ Ø IBM, ÒÞ×ÝØÚÐîéØÜ ÒáÛÕÔáâÒØÕ ØÛØ Ò ÚÐÚÞÙ-ÛØÑÞ áÒïר á ßàÕÔÜÕâÞÜ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÑÕ×ÞâÝÞáØâÕÛìÝÞ Ú ÝÞàÜÐÜ ÚÞÛÛØ×ØÞÝÝÞÓÞ ßàÐÒÐ. + +ºÞÝÒÕÝæØï ¾àÓÐÝØ×ÐæØØ ¾ÑêÕÔØÝÕÝÝëå ½ÐæØÙ Þ ÔÞÓÞÒÞàÐå ÜÕÖÔãÝÐàÞÔÝÞÙ ÚãßÛØ-ßàÞÔÐÖØ âÞÒÐàÞÒ ÝÕ ßàØÜÕÝïÕâáï. + +11.2. ÎàØáÔØÚæØï + +²áÕ ßàÐÒÐ, ÞÑï×ÐÝÝÞáâØ Ø ÞÑï×ÐâÕÛìáâÒÐ ßÞÔÛÕÖÐâ àÐááÜÞâàÕÝØî áãÔÐÜØ áâàÐÝë, Ò ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ÛØæÕÝרî ÝÐ ¿àÞÓàÐÜÜã. + +ÇÐáâì 2 - ¾áÞÑëÕ ÃáÛÞÒØï ÔÛï ½ÕÚÞâÞàëå ÁâàÐÝ + +´Ûï ÛØæÕÝרÙ, ßàÕÔÞáâÐÒÛÕÝÝëå Ò ßÕàÕçØáÛÕÝÝëå ÝØÖÕ áâàÐÝÐå, áÛÕÔãîéØÕ ãáÛÞÒØï ×ÐÜÕÝïîâ ØÛØ Ø×ÜÕÝïîâ áÞÞâÒÕâáâÒãîéØÕ ãáÛÞÒØï Ò ÇÐáâØ 1. ²áÕ ãáÛÞÒØï Ò ÇÐáâØ 1, ÚÞâÞàëÕ ÝÕ Ø×ÜÕÝïîâáï íâØÜØ ßÞßàÐÒÚÐÜØ, ÞáâÐîâáï Ò áØÛÕ ÑÕ× Ø×ÜÕÝÕÝØÙ. ÇÐáâì 2 ØÜÕÕâ áÛÕÔãîéãî áâàãÚâãàã: + +* ¿ÞßàÐÒÚØ ÔÛï ÝÕáÚÞÛìÚØå áâàÐÝ Ú ÇÐáâØ 1, ÀÐ×ÔÕÛã 11 ("ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ" Ø "ÎàØáÔØÚæØï"); Ø + +* ¿ÞßàÐÒÚØ ÔÛï áâàÐÝ µÒàÞßë, ±ÛØÖÝÕÓÞ Ø ÁàÕÔÝÕÓÞ ²ÞáâÞÚÐ Ø °äàØÚØ Ú ÔàãÓØÜ ãáÛÞÒØïÜ ÁÞÓÛÐèÕÝØï. + +¿ÞßàÐÒÚØ ÔÛï ÝÕáÚÞÛìÚØå áâàÐÝ Ú ÇÐáâØ 1, ÀÐ×ÔÕÛã 11 ("ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ" Ø "ÎàØáÔØÚæØï") + +11.1. ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ + +ÄàÐ×Ð "×ÐÚÞÝÞÒ áâàÐÝë, Ò ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ÛØæÕÝרî ÝÐ ¿àÞÓàÐÜÜã" Ò ßÕàÒÞÜ ÐÑ×ÐæÕ ßÞÔàÐ×ÔÕÛÐ 11.1 ("ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ") ×ÐÜÕÝïÕâáï Ò ßÕàÕçØáÛÕÝÝëå ÝØÖÕ áâàÐÝÐå áÛÕÔãîéØÜØ äàÐ×ÐÜØ: + +µ²À¾¿°, ±»¸¶½¸¹ ¸ ÁÀµ´½¸¹ ²¾Á¾º ¸ °ÄÀ¸º° + +² ±ÕÛÐàãáØ, ºÐ×ÐåáâÐÝÕ, ºëàÓë×áâÐÝÕ Ø ÀÞááØØ: ×ÐÚÞÝÞÒ °ÒáâàØØ. + +11.3. °àÑØâàÐÖ + +ÁÛÕÔãîéØÙ ÐÑ×Ðæ ÔÞÑÐÒÛïÕâáï Ò ÚÐçÕáâÒÕ ÝÞÒÞÓÞ ¿ÞÔàÐ×ÔÕÛÐ 11.3 ("°àÑØâàÐÖ") Ò âÞÙ áâÕßÕÝØ, Ò ÚÞâÞàÞÙ ÞÝ ßàØÜÕÝïÕâáï Ò ßÕàÕçØáÛÕÝÝëå ÝØÖÕ áâàÐÝÐå. ¿ÞÛÞÖÕÝØï ÔÐÝÝÞÓÞ ßÞÔàÐ×ÔÕÛÐ 11.3 ØÜÕîâ ßàÕØÜãéÕáâÒÕÝÝãî áØÛã ßÕàÕÔ ßÞÛÞÖÕÝØïÜØ ßÞÔàÐ×ÔÕÛÐ 11.2 ("ÎàØáÔØÚæØï") Ò âÞÙ ÜÕàÕ, Ò ÚÞâÞàÞÙ íâÞ ÔÞßãáÚÐÕâáï ßàØÜÕÝØÜëÜ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Ø ßàÞæÕááãÐÛìÝëÜØ ÝÞàÜÐÜØ. + +µ²À¾¿°, ±»¸¶½¸¹ ¸ ÁÀµ´½¸¹ ²¾Á¾º ¸ °ÄÀ¸º° + +² ±ÕÛÐàãáØ, ºÐ×ÐåáâÐÝÕ, ºëàÓë×áâÐÝÕ Ø ÀÞááØØ: + +²áÕ áßÞàë, ÒÞ×ÝØÚÐîéØÕ Ø× ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï ØÛØ áÒï×ÐÝÝëÕ á ÕÓÞ ÝÐàãèÕÝØÕÜ, ßàÕÚàÐéÕÝØÕÜ ÔÕÙáâÒØï ØÛØ ßàØ×ÝÐÝØÕÜ ÝÕÔÕÙáâÒØâÕÛìÝëÜ, ßÞÔÛÕÖÐâ ÞÚÞÝçÐâÕÛìÝÞÜã ãàÕÓãÛØàÞÒÐÝØî Ò áÞÞâÒÕâáâÒØØ á ¿àÐÒØÛÐÜØ °àÑØâàÐÖÐ Ø ÃàÕÓãÛØàÞÒÐÝØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ °àÑØâàÐÖÝÞÓÞ ÆÕÝâàÐ ÄÕÔÕàÐÛìÝÞÙ ÍÚÞÝÞÜØçÕáÚÞÙ ¿ÐÛÐâë Ò ²ÕÝÕ (²ÕÝáÚØÕ ¿àÐÒØÛÐ) âàÕÜï ÐàÑØâàÐÜØ, ÝÐ×ÝÐçÕÝÝëÜØ Ò áÞÞâÒÕâáâÒØØ á ÔÐÝÝëÜØ ßàÐÒØÛÐÜØ. °àÑØâàÐÖÝÞÕ àÐ×ÑØàÐâÕÛìáâÒÞ ÑãÔÕâ ßàÞÒÞÔØâìáï Ò ²ÕÝÕ (°ÒáâàØï), Ø Þ䨿ØÐÛìÝëÜ ï×ëÚÞÜ àÐ×ÑØàÐâÕÛìáâÒÐ ÑãÔÕâ ÐÝÓÛØÙáÚØÙ. ÀÕèÕÝØÕ ÐàÑØâàÞÒ ïÒÛïÕâáï ÞÚÞÝçÐâÕÛìÝëÜ Ø ÞÑï×ÐâÕÛìÝëÜ ÔÛï ÞÑÕØå áâÞàÞÝ. ¿ÞíâÞÜã, Ò áÞÞâÒÕâáâÒØØ á ßÐàÐÓàÐäÞÜ 598 (2) °ÒáâàØÙáÚÞÓÞ ³àÐÖÔÐÝáÚÞ-ßàÞæÕááãÐÛìÝÞÓÞ ÚÞÔÕÚáÐ, áâÞàÞÝë Ò ïÒÝÞ ÒëàÐÖÕÝÝÞÙ äÞàÜÕ ÞâÚÐ×ëÒÐîâáï Þâ ßàØÜÕÝÕÝØï ßÐàÐÓàÐäÐ 595 (1), ßãÝÚâÐ 7 ºÞÔÕÚáÐ. IBM ÜÞÖÕâ, ÞÔÝÐÚÞ, ÒÞ×ÑãÔØâì àÐ×ÑØàÐâÕÛìáâÒÞ Ò ÚÞÜßÕâÕÝâÝÞÜ áãÔÕ Ò áâàÐÝÕ ãáâÐÝÞÒÚØ. + +¿¾¿À°²º¸ ´»Ï ÁÂÀ°½ µ²À¾¿Ë, ±»¸¶½µ³¾ ¸ ÁÀµ´½µ³¾ ²¾Á¾º° ¸ °ÄÀ¸º¸ (EMEA) + +»îÑÐï ÕÒàÞßÕÙáÚÐï áâàÐÝÐ, ÚÞâÞàÐï ßàØÝïÛÐ ÜÕáâÝëÕ ×ÐÚÞÝë Þ ÚÞÝäØÔÕÝæØÐÛìÝÞáâØ ØÛØ ×ÐéØâÕ ÔÐÝÝëå, ÐÝÐÛÞÓØçÝëÕ ÜÞÔÕÛØ µÁ. + +10. ¾ÑéØÕ ãáÛÞÒØï + +¿ãÝÚâ 10.d ×ÐÜÕÝïÕâáï áÛÕÔãîéØÜ: + +(1) ¾ßàÕÔÕÛÕÝØï - Ò ¿ãÝÚâÕ 10.d ØáßÞÛì×ãîâáï áÛÕÔãîéØÕ ÔÞßÞÛÝØâÕÛìÝëÕ ÞßàÕÔÕÛÕÝØï: + +(a) ´ÕÛÞÒÐï ºÞÝâÐÚâÝÐï ¸ÝäÞàÜÐæØï - ÔÕÛÞÒÐï ÚÞÝâÐÚâÝÐï ØÝäÞàÜÐæØï, ÚÞâÞàãî »ØæÕÝרÐâ àÐáÚàëÒÐÕâ IBM, ÒÚÛîçÐîéÐï ØÜÕÝÐ, ÔÞÛÖÝÞáâØ, áÛãÖÕÑÝëÕ ÐÔàÕáÐ, ÝÞÜÕàÐ âÕÛÕäÞÝÞÒ Ø ÐÔàÕáÐ íÛÕÚâàÞÝÝÞÙ ßÞçâë áÞâàãÔÝØÚÞÒ Ø ßÞÔàïÔçØÚÞÒ »ØæÕÝרÐâÐ. ² °ÒáâàØØ, ¸âÐÛØØ Ø ÈÒÕÙæÐàØØ ´ÕÛÞÒÐï ºÞÝâÐÚâÝÐï ¸ÝäÞàÜÐæØï âÐÚÖÕ ÒÚÛîçÐÕâ ØÝäÞàÜÐæØî Þ »ØæÕÝרÐâÕ Ø ÕÓÞ ßÞÔàïÔçØÚÐå ÚÐÚ Þ îàØÔØçÕáÚØå ÛØæÐå (ÝÐßàØÜÕà, ÔÐÝÝëÕ Þ ÔÞåÞÔÐå »ØæÕÝרÐâÐ Ø ÔàãÓãî ØÝäÞàÜÐæØî Þ âàÐÝ×ÐÚæØïå). + +(b) ´ÕÛÞÒëÕ ºÞÝâÐÚâÝëÕ »ØæÐ - áÞâàãÔÝØÚØ Ø ßÞÔàïÔçØÚØ »ØæÕÝרÐâÐ, Ú ÚÞâÞàëÜ ÞâÝÞáØâáï ´ÕÛÞÒÐï ºÞÝâÐÚâÝÐï ¸ÝäÞàÜÐæØï. + +(c) ³ÞáãÔÐàáâÒÕÝÝëÙ ÞàÓÐÝ ßÞ ·ÐéØâÕ ´ÐÝÝëå - ÞàÓÐÝ ãßàÐÒÛÕÝØï, áÞ×ÔÐÝÝëÙ Ò áÞÞâÒÕâáâÒØØ á ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר Ò áÞÞâÒÕâáâÒãîéÕÙ áâàÐÝÕ, ØÛØ, ÔÛï áâàÐÝ, ÝÕ ÒåÞÔïéØå Ò µÁ, - ÞàÓÐÝ, ÞáãéÕáâÒÛïîéØÙ ÝÐÔ×Þà ×Ð ×ÐéØâÞÙ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ò íâÞÙ áâàÐÝÕ; ØÛØ (ÔÛï ÒáÕå ÒëèÕãßÞÜïÝãâëå) ÛîÑÐï ÝÐÔÛÕÖÐéØÜ ÞÑàÐ×ÞÜ ãßÞÛÝÞÜÞçÕÝÝÐï ÞàÓÐÝØ×ÐæØï, ïÒÛïîéÐïáï Øå ßàÐÒÞßàÕÕÜÝØÚÞÜ. + +(d) ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר - (i) ßàØÜÕÝØÜÞÕ ÜÕáâÝÞÕ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞ Ø ÔÕÙáâÒãîéØÕ ÝÞàÜÐâØÒÝëÕ ÐÚâë, ÒÒÞÔïéØÕ Ò ÔÕÙáâÒØÕ ´ØàÕÚâØÒã µÁ 95/46/EC (Þ ×ÐéØâÕ ßàÐÒ äØ×ØçÕáÚØå ÛØæ ßàØ ÞÑàÐÑÞâÚÕ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ø áÒÞÑÞÔÝÞÙ ßÕàÕÔÐçÕ âÐÚØå ÔÐÝÝëå) Ø ´ØàÕÚâØÒã µÁ 2002/58/EC (Ò ÞâÝÞèÕÝØØ ÞÑàÐÑÞâÚØ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ø ×ÐéØâë ÚÞÝäØÔÕÝæØÐÛìÝÞáâØ Ò áäÕàÕ íÛÕÚâàÞÝÝëå áàÕÔáâÒ áÒïר), ØÛØ (ii) ÔÛï áâàÐÝ, ÝÕ ÒåÞÔïéØå Ò µÁ, - ßàØÝïâëÕ Ò ÔÐÝÝÞÙ áâàÐÝÕ ×ÐÚÞÝë Ø/ØÛØ ÝÞàÜÐâØÒÝëÕ ÐÚâë, ÚÐáÐîéØÕáï ×ÐéØâë ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ø ×ÐÚÞÝÞÔÐâÕÛìÝÞÓÞ àÕÓãÛØàÞÒÐÝØï Ò áäÕàÕ íÛÕÚâàÞÝÝëå áàÕÔáâÒ áÒïר á ØáßÞÛì×ÞÒÐÝØÕÜ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå, ÒÚÛîçÐï (ÔÛï ÒáÕå ÒëèÕãßÞÜïÝãâëå) ÛîÑëÕ ×ÐÜÕÝïîéØÕ Øå ÝÞàÜÐâØÒÝëÕ ÐÚâë Ø ßÞßàÐÒÚØ Ú ÝØÜ. + +(e) IBM Group - íâÞ International Business Machines Corporation, èâÐÑ-ÚÒÐàâØàÐ ÚÞâÞàÞÙ ÝÐåÞÔØâáï Ò °àÜÞÝÚÕ, èâÐâ ½ìî-¹ÞàÚ (ÁȰ), ÕÕ ÔÞçÕàÝØÕ ÚÞÜßÐÝØØ Ø Øå áÞÞâÒÕâáâÒãîéØÕ ±Ø×ÝÕá-¿ÐàâÝÕàë Ø áãÑßÞÔàïÔçØÚØ. + +(2) »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ IBM ßàÐÒÞ: + +(a) ÞÑàÐÑÐâëÒÐâì Ø ØáßÞÛì×ÞÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî Ò ßàÕÔÕÛÐå IBM Group Ò ßÞÔÔÕàÖÚã »ØæÕÝרÐâÐ, ÒÚÛîçÐï ßàÕÔÞáâÐÒÛÕÝØÕ ãáÛãÓ ßÞÔÔÕàÖÚØ, Ø ÔÛï æÕÛÕÙ ßàÞÔÞÛÖÕÝØï ÔÕÛÞÒëå ÞâÝÞèÕÝØÙ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM Group, ÒÚÛîçÐï, ÑÕ× ÞÓàÐÝØçÕÝØÙ, ÞÑàÐéÕÝØÕ Ú ´ÕÛÞÒëÜ ºÞÝâÐÚâÝëÜ »ØæÐÜ (ßÞ íÛÕÚâàÞÝÝÞÙ ßÞçâÕ ØÛØ ØÝëÜ áßÞáÞÑÞÜ) Ø ÜÐàÚÕâØÝÓ ßàÞÔãÚâÞÒ Ø ãáÛãÓ IBM Group ("ÃÚÐ×ÐÝÝÐï ÆÕÛì"); Ø + +(b) àÐáÚàëÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî ÔàãÓØÜ ãçÐáâÝØÚÐÜ IBM Group âÞÛìÚÞ ÔÛï ÃÚÐ×ÐÝÝÞÙ ÆÕÛØ. + +(3) IBM áÞÓÛÐèÐÕâáï ÞÑàÐÑÐâëÒÐâì Òáî ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî Ò áÞÞâÒÕâáâÒØØ á ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר Ø ØáßÞÛì×ÞÒÐâì ÕÕ âÞÛìÚÞ ÔÛï ÃÚÐ×ÐÝÝÞÙ ÆÕÛØ. + +(4) ² ÞÑêÕÜÕ, âàÕÑãÕÜÞÜ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר, »ØæÕÝרÐâ ×ÐïÒÛïÕâ, çâÞ (a) ßÞÛãçØÛ (ØÛØ ßÞÛãçØâ) ÛîÑëÕ áÞÓÛÐáØï Þâ (Ø ÝÐßàÐÒØÛ (ØÛØ ÝÐßàÐÒØâ) ÛîÑëÕ ãÒÕÔÞÜÛÕÝØï) ´ÕÛÞÒëå ºÞÝâÐÚâÝëå »Øæ, ÚÐÚ âÞ ÝÕÞÑåÞÔØÜÞ ÔÛï âÞÓÞ, çâÞÑë àÐ×àÕèØâì IBM Group ÞÑàÐÑÐâëÒÐâì Ø ØáßÞÛì×ÞÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî ÔÛï ÃÚÐ×ÐÝÝÞÙ ÆÕÛØ. + +(5) »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ IBM ßàÐÒÞ ßÕàÕÔÐÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî ×Ð ßàÕÔÕÛë µÒàÞßÕÙáÚÞÙ ÍÚÞÝÞÜØçÕáÚÞÙ ·ÞÝë ßàØ ãáÛÞÒØØ, çâÞ ßÕàÕÔÐçÐ ÑãÔÕâ ÒëßÞÛÝïâìáï á áÞÑÛîÔÕÝØÕÜ ÔÞÓÞÒÞàÝëå ãáÛÞÒØÙ, ÞÔÞÑàÕÝÝëå ³ÞáãÔÐàáâÒÕÝÝëÜ ÞàÓÐÝÞÜ ßÞ ·ÐéØâÕ ´ÐÝÝëå, ØÛØ Ò ØÝëå áÛãçÐïå, ÚÞÓÔÐ ßÕàÕÔÐçÐ àÐ×àÕèÕÝÐ Ò áÞÞâÒÕâáâÒØØ á ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר. + +Z125-5543-05 (07/2011) + + +¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ + +ÇÐáâì 1 - ¾ÑéØÕ ÃáÛÞÒØï + +·°³Àö°Ï, ÃÁ°½°²»¸²°Ï, º¾¿¸ÀÃÏ, ¾ÁÃɵÁ²»ÏÏ ´¾ÁÂÿ, ½°¶¸¼°Ï º½¾¿ºÃ "¿À¸½¸¼°Î" ¸»¸ ¸½Ë¼ ¾±À°·¾¼ ¸Á¿¾»Ì·ÃÏ ¿À¾³À°¼¼Ã, »¸Æµ½·¸°Â Á¾³»°È°µÂÁÏ Á ÃÁ»¾²¸Ï¼¸ ½°Á¾Ïɵ³¾ Á¾³»°Èµ½¸Ï. µÁ»¸ ²Ë ¿À¸½¸¼°µÂµ ´°½½Ëµ ÃÁ»¾²¸Ï ¾Â ¸¼µ½¸ »¸Æµ½·¸°Â°, ²Ë ·°Ï²»ÏµÂµ ¸ ³°À°½Â¸Àõµ, Ǿ ²Ë ¸¼µµÂµ ²Áµ ¿¾»½¾¼¾Ç¸Ï, Ǿ±Ë ¾±Ï·°ÂÌ »¸Æµ½·¸°Â° Á¾±»Î´°ÂÌ Í¸ ÃÁ»¾²¸Ï. µÁ»¸ ²Ë ½µ Á¾³»°Á½Ë Á ½°Á¾Ïɸ¼¸ ÃÁ»¾²¸Ï¼¸, + +* ½µ ·°³Àö°¹Âµ, ½µ ÃÁ°½°²»¸²°¹Âµ, ½µ º¾¿¸Àùµ, ½µ ¾ÁÃɵÁ²»Ï¹Âµ ´¾ÁÂÿ, ½µ ½°¶¸¼°¹Âµ º½¾¿ºÃ "¿À¸½¸¼°Î" ¸ ½µ ¸Á¿¾»Ì·Ã¹Âµ ¿À¾³À°¼¼Ã; ¸ + +* ½µ·°¼µ´»¸Âµ»Ì½¾ ²µÀ½¸Âµ ½µ¸Á¿¾»Ì·¾²°½½Ë¹ ½¾Á¸Âµ»Ì, ´¾ºÃ¼µ½Â°Æ¸Î ¸ Á²¸´µÂµ»ÌÁ²¾ ¾ ¿À°²°Å Á¾À¾½µ, à º¾Â¾À¾¹ ²Ë ¸Å ¿À¸¾±Àµ»¸, Ǿ±Ë ¿¾»ÃǸÂÌ ½°·°´ ÿ»°Çµ½½ÃÎ Áü¼Ã. µÁ»¸ ¿À¾³À°¼¼° ±Ë»° ·°³Àöµ½°, ý¸Ç¾¶Ìµ ²Áµ º¾¿¸¸ ¿À¾³À°¼¼Ë. + +1. ¾ßàÕÔÕÛÕÝØï + +"°ÒâÞàØ×ÞÒÐÝÝÞÕ ¸áßÞÛì×ÞÒÐÝØÕ" - ãÚÐ×ÐÝÝëÙ ãàÞÒÕÝì, ßàØ ÚÞâÞàÞÜ »ØæÕÝרÐâã àÐ×àÕèÕÝÞ ÒëßÞÛÝïâì ØÛØ ×ÐßãáÚÐâì ¿àÞÓàÐÜÜã. ÃàÞÒÕÝì ÜÞÖÕâ Ø×ÜÕàïâìáï çØáÛÞÜ ßÞÛì×ÞÒÐâÕÛÕÙ, ÜØÛÛØÞÝÐÜØ ÕÔØÝØæ ÞÑáÛãÖØÒÐÝØï (MSU), µÔØÝØæÐÜØ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ (PVU) ØÛØ ÔàãÓØÜ ßÞÚÐ×ÐâÕÛÕÜ ãàÞÒÝï ØáßÞÛì×ÞÒÐÝØï, ×ÐÔÐÝÝëÜ IBM. + +"IBM" - International Business Machines Corporation ØÛØ ÞÔÝÐ Ø× ÕÕ ÔÞçÕàÝØå ÚÞÜßÐÝØÙ. + +"»ØæÕÝרÞÝÝÐï ¸ÝäÞàÜÐæØï" ("»¸") - ÔÞÚãÜÕÝâ, áÞÔÕàÖÐéØÙ ØÝäÞàÜÐæØî Ø ÛîÑëÕ ÔÞßÞÛÝØâÕÛìÝëÕ ãáÛÞÒØï, ÚÐáÐîéØÕáï ÚÞÝÚàÕâÝÞÙ ¿àÞÓàÐÜÜë. »¸ Þ ¿àÞÓàÐÜÜÕ ÔÞáâãßÝÐ ÝÐ áÐÙâÕ www.ibm.com/software/sla. »¸ âÐÚÖÕ ÜÞÖÝÞ ÝÐÙâØ Ò ÚÐâÐÛÞÓÕ ¿àÞÓàÐÜÜë, á ßÞÜÞéìî áØáâÕÜÝÞÙ ÚÞÜÐÝÔë ØÛØ Ò ÑãÚÛÕâÕ, ßàÕÔÞáâÐÒÛïÕÜÞÜ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ. + +"¿àÞÓàÐÜÜÐ" - ÝØÖÕßÕàÕçØáÛÕÝÝÞÕ, ÒÚÛîçÐï ÞàØÓØÝÐÛ Ø ÒáÕ ßÞÛÝëÕ ØÛØ çÐáâØçÝëÕ ÚÞߨØ: 1) ÜÐèØÝÞçØâÐÕÜëÕ ØÝáâàã򾯯 Ø ÔÐÝÝëÕ, 2) ÚÞÜßÞÝÕÝâë, äÐÙÛë Ø ÜÞÔãÛØ, 3) ÐãÔØÞÒØ×ãÐÛìÝÞÕ áÞÔÕàÖØÜÞÕ (ÝÐßàØÜÕà, Ø×ÞÑàÐÖÕÝØï, âÕÚáâ, ÐãÔØÞ×ÐßØáØ ØÛØ àØáãÝÚØ) Ø 4) ÞâÝÞáïéØÕáï Ú ÛØæÕÝ×ØØ ÜÐâÕàØÐÛë (ÝÐßàØÜÕà, ÚÛîçØ Ø ÔÞÚãÜÕÝâÐæØï). + +"ÁÒØÔÕâÕÛìáâÒÞ Þ ¿àÐÒÐå" ("ÁÞ¿") - áÒØÔÕâÕÛìáâÒÞ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. ÁÞ¿ ïÒÛïÕâáï âÐÚÖÕ ßÞÔâÒÕàÖÔÕÝØÕÜ ßàÐÒÞÜÞçØÙ »ØæÕÝרÐâÐ ÝÐ ÓÐàÐÝâØÙÝÞÕ ÞÑáÛãÖØÒÐÝØÕ, ßàÕÔÛÞÖÕÝØï æÕÝ ÝÐ ßÞáÛÕÔãîéØÕ ÞÑÝÞÒÛÕÝØï, ÕáÛØ âÐÚØÕ ØÜÕîâáï, Ø ÝÐ ÒÞ×ÜÞÖÝëÕ áßÕæØÐÛìÝëÕ Ø ÛìÓÞâÝëÕ ßàÕÔÛÞÖÕÝØï. µáÛØ IBM ÝÕ ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÁÞ¿, âÞÓÔÐ Ò ÚÐçÕáâÒÕ ÁÞ¿ IBM ÜÞÖÕâ ßàØÝïâì ÞàØÓØÝÐÛ ÞßÛÐçÕÝÝÞÙ ÚÒØâÐÝæØØ Þ ßàÞÔÐÖÕ ØÛØ ÔàãÓÞÙ ßÞÔâÒÕàÖÔÐîéØÙ ßàÞÔÐÖã ÔÞÚãÜÕÝâ, ßÞÛãçÕÝÝëÙ Þâ áâÞàÞÝë (IBM ØÛØ ÕÕ àÕáÕÛÛÕàÐ), ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, ßàØ ãáÛÞÒØØ çâÞ Ò ÔÞÚãÜÕÝâÕ ãÚÐ×ÐÝÞ ÝÐ×ÒÐÝØÕ ¿àÞÓàÐÜÜë Ø ßàÕÔÞáâÐÒÛÕÝÝëÙ ãàÞÒÕÝì °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï. + +"³ÐàÐÝâØÙÝëÙ ÁàÞÚ" - ÞÔØÝ ÓÞÔ, ÝÐçØÝÐï á ÔÐâë ßàÕÔÞáâÐÒÛÕÝØï ÛØæÕÝ×ØØ ßÕàÒÞÝÐçÐÛìÝÞÜã »ØæÕÝרÐâã. + +2. ÁâàãÚâãàÐ ÁÞÓÛÐèÕÝØï + +½ÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ ÒÚÛîçÐÕâ Ò áÕÑï ÇÐáâì 1 - ¾ÑéØÕ ÃáÛÞÒØï, ÇÐáâì 2 - ¾áÞÑëÕ ÃáÛÞÒØï ÔÛï ½ÕÚÞâÞàëå ÁâàÐÝ (ßàØ ÝÐÛØçØØ), »¸ Ø ÁÞ¿ Ø ïÒÛïÕâáï ßÞÛÝëÜ Ø ØáçÕàßëÒÐîéØÜ áÞÓÛÐèÕÝØÕÜ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë. ¾ÝÞ ×ÐÜÕÝïÕâ áÞÑÞÙ ÛîÑëÕ ßàÕÔèÕáâÒãîéØÕ ãáâÝëÕ ØÛØ ßØáìÜÕÝÝëÕ ÔÞÓÞÒÞàÕÝÝÞáâØ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM ÞâÝÞáØâÕÛìÝÞ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. ÃáÛÞÒØï ÇÐáâØ 2 ÜÞÓãâ ×ÐÜÕÝïâì ØÛØ Ø×ÜÕÝïâì ãáÛÞÒØï, ßàÕÔãáÜÞâàÕÝÝëÕ ÇÐáâìî 1. ² áÛãçÐÕ ÚÐÚØå-ÛØÑÞ ßàÞâØÒÞàÕçØÙ »¸ ØÜÕÕâ ßàÕØÜãéÕáâÒÕÝÝãî áØÛã ßÞ ÞâÝÞèÕÝØî Ú ÞÑÕØÜ ÇÐáâïÜ ÁÞÓÛÐèÕÝØï. + +3. ¿àÕÔÞáâÐÒÛïÕÜÐï »ØæÕÝרï + +¿àÞÓàÐÜÜÐ ßàØÝÐÔÛÕÖØâ IBM ØÛØ ßÞáâÐÒéØÚã IBM Ø ×ÐéØéÕÝÐ ÐÒâÞàáÚØÜ ßàÐÒÞÜ Ø ßàÕÔÞáâÐÒÛïÕâáï ßÞ ÛØæÕÝרØ, Ð ÝÕ ßàÞÔÐÕâáï. + +IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÝÕØáÚÛîçØâÕÛìÝãî ÛØæÕÝרî ÝÐ 1) ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë Ò ßàÕÔÕÛÐå °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ãÚÐ×ÐÝÝÞÓÞ Ò ÁÞ¿, 2) áÞ×ÔÐÝØÕ Ø ãáâÐÝÞÒÚã ÚÞߨÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ßÞÔÔÕàÖÚØ âÐÚÞÓÞ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, Ø 3) áÞ×ÔÐÝØÕ àÕ×ÕàÒÝÞÙ ÚÞßØØ ßàØ ãáÛÞÒØØ, çâÞ: + +a. »ØæÕÝרÐâ ßÞÛãçØÛ ¿àÞÓàÐÜÜã ×ÐÚÞÝÝëÜ ÞÑàÐ×ÞÜ Ø áÞÑÛîÔÐÕâ ãáÛÞÒØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï; + +b. àÕ×ÕàÒÝÐï ÚÞߨï ÒëßÞÛÝïÕâáï, ÕáÛØ ÝÕÒÞ×ÜÞÖÝÞ ÒëßÞÛÝÕÝØÕ áÐÜÞÙ ¿àÞÓàÐÜÜë; + +c. »ØæÕÝרÐâ ÒÞáßàÞØ×ÒÞÔØâ ÒáÕ ãÒÕÔÞÜÛÕÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå Ø ÔàãÓØÕ ×ÐÜÕçÐÝØï Þ ßàÐÒÐå áÞÑáâÒÕÝÝÞáâØ ÝÐ ÚÐÖÔÞÙ ßÞÛÝÞÙ ØÛØ çÐáâØçÝÞÙ ÚÞßØØ ¿àÞÓàÐÜÜë; + +d. »ØæÕÝרÐâ ÓÐàÐÝâØàãÕâ, çâÞ ÛîÑÞÕ ÛØæÞ, ØáßÞÛì×ãîéÕÕ ¿àÞÓàÐÜÜã (ßÞáàÕÔáâÒÞÜ ÛÞÚÐÛìÝÞÓÞ ØÛØ ÔØáâÐÝæØÞÝÝÞÓÞ ÔÞáâãßÐ), 1) ÔÕÛÐÕâ íâÞ âÞÛìÚÞ Þâ ØÜÕÝØ »ØæÕÝרÐâÐ Ø 2) áÞÑÛîÔÐÕâ ãáÛÞÒØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï; + +e. »ØæÕÝרÐâ ÝÕ ÜÞÖÕâ 1) ØáßÞÛì×ÞÒÐâì, ÚÞߨàÞÒÐâì, ÜÞÔØäØæØàÞÒÐâì ØÛØ àÐáßàÞáâàÐÝïâì ¿àÞÓàÐÜÜã ×Ð ØáÚÛîçÕÝØÕÜ âÞÓÞ, ÚÐÚ ïÒÝÞ àÐ×àÕèÕÝÞ Ò ÝÐáâÞïéÕÜ ÁÞÓÛÐèÕÝØØ, 2) ÞáãéÕáâÒÛïâì ÞÑàÐâÝÞÕ ÐááÕÜÑÛØàÞÒÐÝØÕ, ÞÑàÐâÝÞÕ ÚÞÜßØÛØàÞÒÐÝØÕ ØÛØ ØÝÞÕ ßàÕÞÑàÐ×ÞÒÐÝØÕ, ÛØÑÞ ÒáÚàëÒÐâì âÕåÝÞÛÞÓØî ¿àÞÓàÐÜÜë, ÚàÞÜÕ âÕå áÛãçÐÕÒ, ÚÞÓÔÐ áÞÞâÒÕâáâÒãîéØÕ ÔÕÙáâÒØï ßàïÜÞ àÐ×àÕèÕÝë ÔÕÙáâÒãîéØÜØ ×ÐÚÞÝÐÜØ, ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÞÓàÐÝØçÕÝØï íâØå ßàÐÒ Ò ãáÛÞÒØïå ÔÞÓÞÒÞàÐ; 3) ØáßÞÛì×ÞÒÐâì ÚÐÚØÕ-ÛØÑÞ ÚÞÜßÞÝÕÝâë, äÐÙÛë, ÜÞÔãÛØ, ÐãÔØÞ-ÒØ×ãÐÛìÝÞÕ áÞÔÕàÖØÜÞÕ ØÛØ áÒï×ÐÝÝëÕ ÛØæÕÝרÞÝÝëÕ ÜÐâÕàØÐÛë ÞâÔÕÛìÝÞ Þâ ¿àÞÓàÐÜÜë, 4) áãÑÛØæÕÝרàÞÒÐâì, ßàÕÔÞáâÐÒÛïâì ¿àÞÓàÐÜÜã ÝÐ ãáÛÞÒØïå ÐàÕÝÔë ØÛØ ÛØ×ØÝÓÐ; Ø + +f. ÕáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã Ò ÚÐçÕáâÒÕ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ØáßÞÛì×ãÕâ íâã ¿àÞÓàÐÜÜã âÞÛìÚÞ ÔÛï ßÞÔÔÕàÖÚØ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë ßàØ áÞÑÛîÔÕÝØØ ÛîÑëå ÞÓàÐÝØçÕÝØÙ, ßàÕÔãáÜÞâàÕÝÝëå ÛØæÕÝרÕÙ ÝÐ ¾áÝÞÒÝãî ¿àÞÓàÐÜÜã; ÛØÑÞ, ÕáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã Ò ÚÐçÕáâÒÕ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ØáßÞÛì×ãÕâ ÒáÕ ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë âÞÛìÚÞ ÔÛï ßÞÔÔÕàÖÚØ ÔÐÝÝÞÙ ¿àÞÓàÐÜÜë ßàØ áÞÑÛîÔÕÝØØ ÛîÑëå ÞÓàÐÝØçÕÝØÙ, ßàÕÔãáÜÞâàÕÝÝëå ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ. ² æÕÛïå ÔÐÝÝÞÓÞ ßãÝÚâÐ f "²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜÞÙ" ÝÐ×ëÒÐÕâáï ¿àÞÓàÐÜÜÐ, ïÒÛïîéÐïáï çÐáâìî ÔàãÓÞÙ ¿àÞÓàÐÜÜë IBM ("¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë") Ø ÞßàÕÔÕÛÕÝÝÐï ÚÐÚ ²áßÞÜÞÓÐâÕÛìÝÐï ¿àÞÓàÐÜÜÐ Ò »¸ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë. (ÇâÞÑë ßÞÛãçØâì ÞâÔÕÛìÝãî ÛØæÕÝרî ÝÐ ²áßÞÜÞÓÐâÕÛìÝãî ¿àÞÓàÐÜÜã ÑÕ× íâØå ÞÓàÐÝØçÕÝØÙ, »ØæÕÝרÐâã áÛÕÔãÕâ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ²áßÞÜÞÓÐâÕÛìÝãî ¿àÞÓàÐÜÜã.) + +´ÐÝÝÐï ÛØæÕÝרï ßàØÜÕÝïÕâáï Ú ÚÐÖÔÞÙ ÚÞßØØ ¿àÞÓàÐÜÜë, áÞ×ÔÐÒÐÕÜÞÙ »ØæÕÝרÐâÞÜ. + +3.1 ºÞÜÜÕàçÕáÚØÕ ÞÑÝÞÒÛÕÝØï, ¾ÑÝÞÒÛÕÝØï, ¸áßàÐÒÛÕÝØï Ø ¸×ÜÕÝÕÝØï + +3.1.1 ºÞÜÜÕàçÕáÚØÕ ÞÑÝÞÒÛÕÝØï + +µáÛØ ¿àÞÓàÐÜÜÐ ×ÐÜÕÝïÕâáï ÚÞÜÜÕàçÕáÚØÜ ÞÑÝÞÒÛÕÝØÕÜ ¿àÞÓàÐÜÜë, âÞ ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ ÝÐ ×ÐÜÕÝÕÝÝãî ¿àÞÓàÐÜÜã ÝÕÜÕÔÛÕÝÝÞ ßàÕÚàÐéÐÕâáï. + +3.1.2 ¾ÑÝÞÒÛÕÝØï, ¸áßàÐÒÛÕÝØï Ø ¸×ÜÕÝÕÝØï + +ºÞÓÔÐ »ØæÕÝרÐâ ßÞÛãçÐÕâ ÞÑÝÞÒÛÕÝØÕ, ØáßàÐÒÛÕÝØÕ ØÛØ Ø×ÜÕÝÕÝØÕ ÔÛï ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÛîÑëÕ ÔÞßÞÛÝØâÕÛìÝëÕ ØÛØ ÞáÞÑëÕ ãáÛÞÒØï, ßàØÜÕÝØÜëÕ Ò ÞâÝÞèÕÝØØ âÐÚÞÓÞ ÞÑÝÞÒÛÕÝØï, ØáßàÐÒÛÕÝØï ØÛØ Ø×ÜÕÝÕÝØï Ø ãÚÐ×ÐÝÝëÕ Ò ÕÓÞ »¸. ¿àØ ÞâáãâáâÒØØ ÔÞßÞÛÝØâÕÛìÝëå ØÛØ ÞáÞÑëå ãáÛÞÒØÙ ØáßÞÛì×ÞÒÐÝØÕ ÞÑÝÞÒÛÕÝØï, ØáßàÐÒÛÕÝØï ØÛØ Ø×ÜÕÝÕÝØï àÕÓãÛØàãÕâáï âÞÛìÚÞ ãáÛÞÒØïÜØ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï. µáÛØ ¿àÞÓàÐÜÜÐ ×ÐÜÕÝïÕâáï ÞÑÝÞÒÛÕÝØÕÜ, âÞ »ØæÕÝרÐâ ÞÑï×ãÕâáï ÝÕÜÕÔÛÕÝÝÞ ßàÕÚàÐâØâì ØáßÞÛì×ÞÒÐÝØÕ ×ÐÜÕÝÕÝÝÞÙ ¿àÞÓàÐÜÜë. + +3.2 »ØæÕÝ×ØØ á ÄØÚáØàÞÒÐÝÝëÜ ÁàÞÚÞÜ ´ÕÙáâÒØï + +µáÛØ IBM ÛØæÕÝרàãÕâ ¿àÞÓàÐÜÜã ÝÐ äØÚáØàÞÒÐÝÝëÙ áàÞÚ, ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ »ØæÕÝרÐâÐ ßàÕÚàÐéÐÕâáï ßÞ ØáâÕçÕÝØØ íâÞÓÞ äØÚáØàÞÒÐÝÝÞÓÞ áàÞÚÐ, ÕáÛØ âÞÛìÚÞ »ØæÕÝרÐâ Ø IBM ÝÕ áÞÓÛÐáïâáï ßàÞÔÛØâì ÕÓÞ. + +3.3 ÁàÞÚ ÔÕÙáâÒØï Ø ¿àÕÚàÐéÕÝØÕ ÔÕÙáâÒØï + +½ÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ ÔÕÙáâÒãÕâ ÔÞ ßàÕÚàÐéÕÝØï ÔÕÙáâÒØï. + +IBM ÜÞÖÕâ ßàÕÚàÐâØâì ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ »ØæÕÝרÐâÐ, ÕáÛØ »ØæÕÝרÐâ ÝÕ áÞÑÛîÔÐÕâ ãáÛÞÒØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï. + +µáÛØ ÛØæÕÝרÞÝÝÞÕ áÞÓÛÐèÕÝØÕ àÐáâÞàÓÐÕâáï ßÞ ÛîÑÞÙ ßàØçØÝÕ ÛîÑÞÙ Ø× áâÞàÞÝ, »ØæÕÝרÐâ áÞÓÛÐèÐÕâáï ÝÕÜÕÔÛÕÝÝÞ ßàÕÚàÐâØâì ØáßÞÛì×ÞÒÐÝØÕ ÒáÕå ÚÞßØÙ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÐ Ø ÝÕÜÕÔÛÕÝÝÞ ãÝØçâÞÖØâì ÒáÕ ÚÞßØØ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÐ. »îÑëÕ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÚÞâÞàëÕ ßÞ áÒÞÕÜã åÐàÐÚâÕàã ÞáâÐîâáï Ò áØÛÕ ßÞáÛÕ ÕÓÞ àÐáâÞàÖÕÝØï, ÔÕÙáâÒãîâ ÔÞ âÕå ßÞà, ßÞÚÐ ÝÕ ÑãÔãâ ØáßÞÛÝÕÝë, Ø ßàØÜÕÝïîâáï ÚÞ ÒáÕÜ áÞÞâÒÕâáâÒãîéØÜ ÝÐáÛÕÔÝØÚÐÜ Ø ßàÐÒÞßàÕÕÜÝØÚÐÜ ÞÑÕØå áâÞàÞÝ. + +4. ¿ÛÐâÕÖØ + +¿ÛÐâÕÖØ ÞáÝÞÒëÒÐîâáï ÝÐ ßàØÞÑàÕâÕÝÝÞÜ ãàÞÒÝÕ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ÚÞâÞàëÙ ãÚÐ×ÐÝ Ò ÁÞ¿. IBM ÝÕ ßàÕÔÞáâÐÒÛïÕâ ÚàÕÔØâÐ ØÛØ ÒÞ×ÒàÐâÐ ãÖÕ ãßÛÐçÕÝÝëå áãÜÜ ØÛØ áãÜÜ, áàÞÚ ãßÛÐâë ÚÞâÞàëå ãÖÕ ÝÐáâãߨÛ, ×Ð ØáÚÛîçÕÝØÕÜ âÞÓÞ, ÚÐÚ ãÚÐ×ÐÝÞ ÓÔÕ-ÛØÑÞ Ò ÝÐáâÞïéÕÜ ÁÞÓÛÐèÕÝØØ. + +µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÒëáØâì ãàÞÒÕÝì °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ×ÐàÐÝÕÕ ãÒÕÔÞÜØâì ÞÑ íâÞÜ IBM ØÛØ ÐÒâÞàØ×ÞÒÐÝÝÞÓÞ àÕáÕÛÛÕàÐ IBM Ø ÒÝÕáâØ ÒáÕ ßàØÜÕÝØÜëÕ ßÛÐâÕÖØ. + +5. ½ÐÛÞÓØ + +µáÛØ ÚÐÚÐï-ÛØÑÞ ÓÞáãÔÐàáâÒÕÝÝÐï áâàãÚâãàÐ ÒÒÕÔÕâ ÝÐ ¿àÞÓàÐÜÜã ÚÐÚÞÙ-ÛØÑÞ ÝÐÛÞÓ, áÑÞà ØÛØ ßÞèÛØÝã, ×Ð ØáÚÛîçÕÝØÕÜ âÕå, ÚÞâÞàëÕ ÞáÝÞÒëÒÐîâáï ÝÐ çØáâÞÜ ÔÞåÞÔÕ IBM, âÞÓÔÐ »ØæÕÝרÐâ ÞÑï×ãÕâáï ÒëßÛÐâØâì íâã áãÜÜã, ÚÐÚ ãÚÐ×ÐÝÞ Ò áçÕâÕ, ØÛØ ßàÕÔÞáâÐÒØâì ÔÞÚãÜÕÝâë, ßÞÔâÒÕàÖÔÐîéØÕ ÞáÒÞÑÞÖÔÕÝØÕ Þâ ãßÛÐâë. »ØæÕÝרÐâ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð ÒëßÛÐâã ÛîÑëå ÝÐÛÞÓÞÒ ÝÐ ÛØçÝÞÕ ÔÒØÖØÜÞÕ ØÜãéÕáâÒÞ, ÚÞâÞàëÜØ ÞÑÛÐÓÐÕâáï ¿àÞÓàÐÜÜÐ, ÝÐçØÝÐï á ÔÐâë ÕÕ ßÞÛãçÕÝØï »ØæÕÝרÐâÞÜ. µáÛØ ÚÐÚÐï-ÛØÑÞ ÓÞáãÔÐàáâÒÕÝÝÐï áâàãÚâãàÐ ÒÒÕÔÕâ ÝÐ ¿àÞÓàÐÜÜã âÐÜÞÖÕÝÝëÕ ßÞèÛØÝë, ÝÐÛÞÓØ, áÑÞàë ØÛØ ÞâçØáÛÕÝØï ×Ð ØÜßÞàâ ØÛØ íÚáßÞàâ, ßÕàÕÔÐçã, ÔÞáâãß Ú ØÛØ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ×Ð ßàÕÔÕÛÐÜØ âÞÙ áâàÐÝë, Ò ÚÞâÞàÞÙ ßÕàÒÞÝÐçÐÛìÝÞÜã »ØæÕÝרÐâã ÑëÛÐ ßàÕÔÞáâÐÒÛÕÝÐ ÛØæÕÝרï, âÞ »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÝÐ áÕÑï ÞâÒÕâáâÒÕÝÝÞáâì ×Ð ÝØå Ø ÞßÛÐâØâ ÛîÑãî ÝÐÛÞÖÕÝÝãî áãÜÜã. + +6. ³ÐàÐÝâØï ÒÞ×ÒàÐâÐ ¾ßÛÐâë + +µáÛØ »ØæÕÝרÐâ ÝÕ ãÔÞÒÛÕâÒÞàÕÝ ¿àÞÓàÐÜÜÞÙ ßÞ ÚÐÚÞÙ-ÛØÑÞ ßàØçØÝÕ Ø ïÒÛïÕâáï ßÕàÒÞÝÐçÐÛìÝëÜ »ØæÕÝרÐâÞÜ, »ØæÕÝרÐâ ÜÞÖÕâ ßàÕÚàÐâØâì ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ Ø ßÞÛãçØâì ÒÞ×ÜÕéÕÝØÕ áãÜÜë, ãßÛÐçÕÝÝÞÙ ×Ð ¿àÞÓàÐÜÜã »ØæÕÝרÐâÞÜ, ßàØ ãáÛÞÒØØ çâÞ »ØæÕÝרÐâ Ò âÕçÕÝØÕ 30 ÔÝÕÙ á ÔÐâë ÒëÔÐçØ ÁÞ¿ »ØæÕÝרÐâã ÒÕàÝÕâ ¿àÞÓàÐÜÜã Ø ÁÞ¿ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ Øå ßàØÞÑàÕÛ. µáÛØ ÛØæÕÝרï ÒëÔÐÝÐ ÝÐ äØÚáØàÞÒÐÝÝëÙ áàÞÚ, ÚÞâÞàëÙ ÜÞÖÕâ Ñëâì ßàÞÔÛÕÝ, âÞÓÔÐ »ØæÕÝרÐâ ÜÞÖÕâ ßÞÛãçØâì ÒÞ×ÜÕéÕÝØÕ ãßÛÐçÕÝÝÞÙ áãÜÜë, âÞÛìÚÞ ÕáÛØ ¿àÞÓàÐÜÜÐ Ø ÁÞ¿ ÒÞ×ÒàÐéÕÝë Ò âÕçÕÝØÕ ßÕàÒëå 30 ÔÝÕÙ ßÕàÒÞÝÐçÐÛìÝÞÓÞ áàÞÚÐ ÔÕÙáâÒØï. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ¿àÞÓàÐÜÜã, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, ×Ð àÐ×êïáÝÕÝØïÜØ, ÚÐÚ ßÞÛãçØâì ÒÞ×ÜÕéÕÝØÕ. + +7. ¿ÕàÕÔÐçÐ ¿àÞÓàÐÜÜë + +»ØæÕÝרÐâ ÜÞÖÕâ ßÕàÕÔÐâì ¿àÞÓàÐÜÜã Ø ÒáÕ ÛØæÕÝרÞÝÝëÕ ßàÐÒÐ Ø ÞÑï×ÐâÕÛìáâÒÐ »ØæÕÝרÐâÐ ÔàãÓÞÙ áâÞàÞÝÕ, âÞÛìÚÞ ÕáÛØ âÐÚÐï áâÞàÞÝÐ áÞÓÛÐáÝÐ á ãáÛÞÒØïÜØ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï. µáÛØ ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ ßàÕÚàÐéÕÝÞ ßÞ ÛîÑÞÙ ßàØçØÝÕ ÛîÑÞÙ Ø× áâÞàÞÝ, »ØæÕÝרÐâã ×ÐßàÕéÐÕâáï ßÕàÕÔÐÒÐâì ¿àÞÓàÐÜÜã ÔàãÓÞÙ áâÞàÞÝÕ. »ØæÕÝרÐâã ×ÐßàÕéÐÕâáï ßÕàÕÔÐÒÐâì çÐáâì 1) ¿àÞÓàÐÜÜë ØÛØ 2) ãàÞÒÝï °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë. ¿àØ ßÕàÕÔÐçÕ ¿àÞÓàÐÜÜë »ØæÕÝרÐâ âÐÚÖÕ ÞÑï×ÐÝ ßÕàÕÔÐâì ßÕçÐâÝãî ÚÞߨî ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÒÚÛîçÐï »¸ Ø ÁÞ¿. ´ÕÙáâÒØÕ ÛØæÕÝ×ØØ »ØæÕÝרÐâÐ ßàÕÚàÐéÐÕâáï áàÐ×ã ßÞáÛÕ ßÕàÕÔÐçØ ¿àÞÓàÐÜÜë. + +8. ³ÐàÐÝâØï Ø ¸áÚÛîçÕÝØï + +8.1 ¾ÓàÐÝØçÕÝÝÐï ³ÐàÐÝâØï + +IBM ÓÐàÐÝâØàãÕâ, çâÞ ßàØ ØáßÞÛì×ÞÒÐÝØØ Ò ßàÕÔãáÜÞâàÕÝÝÞÙ ÞßÕàÐæØÞÝÝÞÙ áàÕÔÕ ¿àÞÓàÐÜÜÐ ÑãÔÕâ áÞÞâÒÕâáâÒÞÒÐâì áÒÞØÜ áßÕæØäØÚÐæØïÜ. ÁßÕæØäØÚÐæØØ ¿àÞÓàÐÜÜë Ø ØÝäÞàÜÐæØî Þ ßàÕÔãáÜÞâàÕÝÝÞÙ ÞßÕàÐæØÞÝÝÞÙ áàÕÔÕ ÜÞÖÝÞ ÝÐÙâØ Ò ßàØÛÐÓÐÕÜÞÙ Ú ¿àÞÓàÐÜÜÕ ÔÞÚãÜÕÝâÐæØØ (ÝÐßàØÜÕà, Ò äÐÙÛÕ readme) ØÛØ Ò ØÝëå ÜÐâÕàØÐÛÐå, ÚÞâÞàëÕ ßãÑÛØÚãÕâ IBM (ÝÐßàØÜÕà, Ò ßØáìÜÕ-ÞÑêïÒÛÕÝØØ). »ØæÕÝרÐâ áÞÓÛÐáÕÝ á âÕÜ, çâÞ âÐÚÐï ÔÞÚãÜÕÝâÐæØï Ø ÔàãÓÞÕ áÞÔÕàÖØÜÞÕ ¿àÞÓàÐÜÜë ÜÞÖÕâ ßÞáâÐÒÛïâìáï âÞÛìÚÞ ÝÐ ÐÝÓÛØÙáÚÞÜ ï×ëÚÕ, ÕáÛØ ÜÕáâÝÞÕ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞ ÝÕ ãáâÐÝÐÒÛØÒÐÕâ ØÝëÕ âàÕÑÞÒÐÝØï, ÝÕ ÔÞßãáÚÐîéØÕ ÞáÒÞÑÞÖÔÕÝØÕ Þâ ÞÑï×ÐâÕÛìáâÒ ßÞ ÔÞÓÞÒÞàã ØÛØ Øå ÞÓàÐÝØçÕÝØÕ. + +³ÐàÐÝâØï ßàØÜÕÝïÕâáï âÞÛìÚÞ Ú ÝÕØ×ÜÕÝÕÝÝÞÙ çÐáâØ ¿àÞÓàÐÜÜë. IBM ÝÕ ÓÐàÐÝâØàãÕâ ÝÕßàÕàëÒÝÞÙ ØÛØ ÑÕ×ÞèØÑÞçÝÞÙ àÐÑÞâë ¿àÞÓàÐÜÜë, ØÛØ çâÞ IBM ØáßàÐÒØâ ÒáÕ ÔÕäÕÚâë ¿àÞÓàÐÜÜë. »ØæÕÝרÐâ ÞâÒÕçÐÕâ ×Ð àÕ×ãÛìâÐâë, ßÞÛãçÕÝÝëÕ Þâ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë. + +² âÕçÕÝØÕ ³ÐàÐÝâØÙÝÞÓÞ ÁàÞÚÐ IBM ÑÕ× ÔÞßÞÛÝØâÕÛìÝëÙ ßÛÐâë ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÔÞáâãß Ú ÑÐ×ÐÜ ÔÐÝÝëå IBM, áÞÔÕàÖÐéØÜ áÒÕÔÕÝØï ÞÑ Ø×ÒÕáâÝëå ÔÕäÕÚâÐå ¿àÞÓàÐÜÜë, ØáßàÐÒÛÕÝØïå ÔÕäÕÚâÞÒ, ÞÓàÐÝØçÕÝØïå Ø ÞÑåÞÔÝëå ßãâïå. ´ÞßÞÛÝØâÕÛìÝãî ØÝäÞàÜÐæØî ÜÞÖÝÞ ÝÐÙâØ Ò áßàÐÒÞçÝØÚÕ ßÞ ßÞÔÔÕàÖÚÕ ßàÞÓàÐÜÜÝÞÓÞ ÞÑÕáßÕçÕÝØï IBM Software Support Handbook ßÞ ÐÔàÕáã www.ibm.com/software/support. + +µáÛØ ¿àÞÓàÐÜÜÐ ÝÕ äãÝÚæØÞÝØàãÕâ ÚÐÚ ÓÐàÐÝâØàÞÒÐÝÞ Ò âÕçÕÝØÕ ³ÐàÐÝâØÙÝÞÓÞ ÁàÞÚÐ Ø ßàÞÑÛÕÜÐ ÝÕ ÜÞÖÕâ Ñëâì àÕèÕÝÐ á ßÞÜÞéìî ØÝäÞàÜÐæØØ, ÔÞáâãßÝÞÙ Ò ÑÐ×Ðå ÔÐÝÝëå IBM, »ØæÕÝרÐâ ÜÞÖÕâ ÒÕàÝãâì ¿àÞÓàÐÜÜã Ø ÕÕ ÁÞ¿ âÞÙ áâÞàÞÝÕ (ØÛØ IBM, ØÛØ ÕÕ àÕáÕÛÛÕàã), ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ÕÕ ßàØÞÑàÕÛ, Ø ßÞÛãçØâì ÒÞ×ÜÕéÕÝØÕ Ò àÐ×ÜÕàÕ áãÜÜë, ãßÛÐçÕÝÝÞÙ »ØæÕÝרÐâÞÜ ×Ð ¿àÞÓàÐÜÜã. ¿ÞáÛÕ ÒÞ×ÒàÐâÐ ¿àÞÓàÐÜÜë ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ »ØæÕÝרÐâÐ ßàÕÚàÐéÐÕâáï. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ¿àÞÓàÐÜÜã, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, ×Ð àÐ×êïáÝÕÝØïÜØ, ÚÐÚ ßÞÛãçØâì ÒÞ×ÜÕéÕÝØÕ. + +8.2 ¸áÚÛîçÕÝØï + +͸ ³°À°½Â¸¸ ϲ»ÏÎÂÁÏ ¸Áº»ÎǸµ»Ì½Ë¼¸ ³°À°½Â¸Ï¼¸ »¸Æµ½·¸°Â° ¸ ·°¼µ½ÏΠÁ¾±¾¹ ²Áµ ¸½Ëµ ³°À°½Â¸¸ ¸»¸ ÃÁ»¾²¸Ï, ϲ½¾ ²ËÀ°¶µ½½Ëµ ¸»¸ ¿¾´À°·Ã¼µ²°µ¼Ëµ, ²º»ÎǰÏ, ½¾ ½µ ¾³À°½¸Ç¸²°ÏÁÌ Í¸¼, ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸»¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸, ô¾²»µÂ²¾À¸Âµ»Ì½¾³¾ º°ÇµÁ²°, Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸, ¿À°²° Á¾±Á²µ½½¾Á¸ ¸ »Î±ÃÎ ³°À°½Â¸Î ¸»¸ ÃÁ»¾²¸µ ½µ½°ÀÃȵ½¸Ï ¿À°². ½µº¾Â¾À˵ ³¾Áô°ÀÁ²° ¸»¸ ÎÀ¸Á´¸ºÆ¸¸ ½µ À°·ÀµÈ°Î ¾Âº°· ¾Â ϲ½¾ ²ËÀ°¶µ½½ËÅ ¸»¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ ³°À°½Â¸¹; ¿¾Í¾¼Ã ¿À¸²µ´µ½½¾µ ²Ëȵ ¸Áº»Îǵ½¸µ ¼¾¶µÂ ½µ ¿À¸¼µ½ÏÂÌÁÏ º »¸Æµ½·¸°ÂÃ. ² ;¼ Á»Ãǰµ ´µ¹Á²¸µ °º¸Å ³°À°½Â¸¹ ¾³À°½¸Çµ½¾ ³°À°½Â¸¹½Ë¼ ÁÀ¾º¾¼. ¿¾ ¸Áµǵ½¸¸ ;³¾ ÁÀ¾º° ½¸º°º¸µ ³°À°½Â¸¸ ½µ ¿À¸¼µ½¸¼Ë. ½µº¾Â¾À˵ ³¾Áô°ÀÁ²° ¸»¸ ÎÀ¸Á´¸ºÆ¸¸ ½µ ´¾¿ÃÁº°Î ¾³À°½¸Çµ½¸µ ÁÀ¾º° ´µ¹Á²¸Ï ¿¾´À°·Ã¼µ²°µ¼ËÅ ³°À°½Â¸¹; ¿¾Í¾¼Ã ¿À¸²µ´µ½½¾µ ²Ëȵ ¸Áº»Îǵ½¸µ ¼¾¶µÂ ½µ ¿À¸¼µ½ÏÂÌÁÏ º »¸Æµ½·¸°ÂÃ. + +´°½½Ëµ ³°À°½Â¸¸ ´°Î »¸Æµ½·¸°Âà ¾¿Àµ´µ»µ½½Ëµ ÎÀ¸´¸ÇµÁº¸µ ¿À°²°. »¸Æµ½·¸°Â ¼¾¶µÂ °º¶µ ¸¼µÂÌ ´Àó¸µ ¿À°²°, º¾Â¾À˵ ¼¾³Ã À°·»¸Ç°ÂÌÁÏ ¾Â ÁÂÀ°½Ë º ÁÂÀ°½µ ¸»¸ ¾Â ÎÀ¸Á´¸ºÆ¸¸ º ÎÀ¸Á´¸ºÆ¸¸. + +³°À°½Â¸¸, ¾¿¸Á°½½Ëµ ² À°·´µ»µ 8 (³°À°½Â¸Ï ¸ ¸Áº»Îǵ½¸Ï), ¿Àµ´¾Á°²»ÏÎÂÁÏ ¸Áº»ÎǸµ»Ì½¾ IBM. ·°Ï²»µ½¸Ï ¾± ¾Âº°·µ ¾Â ³°À°½Â¸¹, ¿À¸²µ´µ½½Ëµ ² ´°½½¾¼ ¿¾´À°·´µ»µ 8.2 (¸Áº»Îǵ½¸Ï), ¿À¸¼µ½ÏÎÂÁÏ Â°º¶µ º ¿¾Á°²É¸º°¼ IBM, ¿Àµ´¾Á°²»ÏÎɸ¼ ¿À¾³À°¼¼½Ë¹ º¾´ ÂÀµÂ̸ŠÁ¾À¾½. ͸ ¿¾Á°²É¸º¸ ¿Àµ´¾Á°²»ÏΠ°º¾¹ º¾´ ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹ ¸ ÃÁ»¾²¸¹. ½°Á¾Ïɸ¹ °±·°Æ ½µ ¾Â¼µ½ÏµÂ ³°À°½Â¸¹½ËÅ ¾±Ï·°Âµ»ÌÁ² IBM ¿¾ ½°Á¾Ïɵ¼Ã Á¾³»°Èµ½¸Î. + +9. ´ÐÝÝëÕ Ø ±Ð×ë ÔÐÝÝëå »ØæÕÝרÐâÐ + +ÇâÞÑë ßÞÜÞçì »ØæÕÝרÐâã ÞßàÕÔÕÛØâì ßàØçØÝã ßàÞÑÛÕÜë, áÒï×ÐÝÝÞÙ á ¿àÞÓàÐÜÜÞÙ, IBM ÜÞÖÕâ ×ÐßàÞáØâì, çâÞÑë »ØæÕÝרÐâ 1) ßàÕÔÞáâÐÒØÛ IBM ãÔÐÛÕÝÝëÙ ÔÞáâãß Ú áØáâÕÜÕ »ØæÕÝרÐâÐ ØÛØ 2) ÞâßàÐÒØÛ Ò IBM ØÝäÞàÜÐæØî Þ »ØæÕÝרÐâÕ ØÛØ áØáâÕÜÝëÕ ÔÐÝÝëÕ. ¾ÔÝÐÚÞ IBM ÝÕ ÞÑï×ÐÝÐ ßàÕÔÞáâÐÒÛïâì ßÞÔÞÑÝãî ßÞÜÞéì, ÕáÛØ IBM Ø »ØæÕÝרÐâ ÝÕ ×ÐÚÛîçØÛØ ÞâÔÕÛìÝÞÕ ßØáìÜÕÝÝÞÕ áÞÓÛÐèÕÝØÕ, ßÞ ÚÞâÞàÞÜã IBM áÞÓÛÐáÝÐ ßàÕÔÞáâÐÒÛïâì »ØæÕÝרÐâã âÐÚÞÙ ÒØÔ ßÞÔÔÕàÖÚØ, ÚÞâÞàëÙ ÒëåÞÔØâ ×Ð ßàÕÔÕÛë ÓÐàÐÝâØÙÝëå ÞÑï×ÐâÕÛìáâÒ IBM ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. ² ÛîÑÞÜ áÛãçÐÕ IBM ØáßÞÛì×ãÕâ ØÝäÞàÜÐæØî ÞÑ ÞèØÑÚÐå Ø ßàÞÑÛÕÜÐå ÔÛï ãÛãçèÕÝØï ÕÕ ßàÞÔãÚâÞÒ Ø ãáÛãÓ Ø ÔÛï áÞÔÕÙáâÒØï ßàÕÔÞáâÐÒÛÕÝØî áÞÞâÒÕâáâÒãîéØå ßàÕÔÛÞÖÕÝØÙ ßÞÔÔÕàÖÚØ. ´Ûï íâØå æÕÛÕÙ IBM ÜÞÖÕâ ØáßÞÛì×ÞÒÐâì îàØÔØçÕáÚØå ÛØæ IBM Ø áãÑßÞÔàïÔçØÚÞÒ IBM (Ò âÞÜ çØáÛÕ, Ò ÞÔÝÞÙ ØÛØ ÝÕáÚÞÛìÚØå áâàÐÝÐå, ÞâÛØçÝëå Þâ áâàÐÝë, Ò ÚÞâÞàÞÙ ÝÐåÞÔØâáï »ØæÕÝרÐâ), Ø »ØæÕÝרÐâ àÐ×àÕèÐÕâ IBM ÔÕÙáâÒÞÒÐâì âÐÚØÜ ÞÑàÐ×ÞÜ. + +»ØæÕÝרÐâ ÞáâÐÕâáï ÞâÒÕâáâÒÕÝÝëÜ ×Ð 1) ÛîÑëÕ ÔÐÝÝëÕ Ø áÞÔÕàÖØÜÞÕ ÑÐ× ÔÐÝÝëå, ÔÞáâãß Ú ÚÞâÞàëÜ »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ IBM, 2) ÒëÑÞà Ø ÒÝÕÔàÕÝØÕ ßàÞæÕÔãà Ø áàÕÔáâÒ ãßàÐÒÛÕÝØï, ÚÐáÐîéØåáï ÔÞáâãßÐ, ÑÕ×ÞßÐáÝÞáâØ, èØäàÞÒÐÝØï, ØáßÞÛì×ÞÒÐÝØï Ø ßÕàÕÔÐçØ ÔÐÝÝëå (ÒÚÛîçÐï ÛîÑëÕ ßÕàáÞÝÐÛìÝëÕ ÔÐÝÝëÕ) Ø 3) àÕ×ÕàÒÝÞÕ ÚÞߨàÞÒÐÝØÕ Ø ÒÞááâÐÝÞÒÛÕÝØÕ ÛîÑëå ÑÐ× ÔÐÝÝëå Ø áÞåàÐÝÕÝÝëå ÔÐÝÝëå. »ØæÕÝרÐâ ÝÕ ÑãÔÕâ ÞâßàÐÒÛïâì Ø ßàÕÔÞáâÐÒÛïâì IBM ÔÞáâãß Ú ÛîÑÞÙ ßÕàáÞÝÐÛìÝÞÙ ØÝäÞàÜÐæØØ (Ò ÒØÔÕ ÔÐÝÝëå ØÛØ Ò ØÝÞÙ äÞàÜÕ) Ø ÑãÔÕâ ÝÕáâØ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð àÐ×ãÜÝëÕ àÐáåÞÔë Ø ØÝëÕ áãÜÜë, ÚÞâÞàëÕ IBM ÜÞÖÕâ ßÞÝÕáâØ Ò áÒïר á ÞèØÑÞçÝÞÙ ßÕàÕÔÐçÕÙ IBM âÐÚÞÙ ØÝäÞàÜÐæØØ, ãâàÐâÞÙ ØÛØ àÐ×ÓÛÐèÕÝØÕÜ IBM ßÞÔÞÑÝÞÙ ØÝäÞàÜÐæØØ, ÒÚÛîçÐï àÐáåÞÔë, ÒÞ×ÝØÚÐîéØÕ Ø× ÛîÑëå ßàÕâÕÝ×ØÙ âàÕâìØå áâÞàÞÝ. + +10. ¾ÓàÐÝØçÕÝØÕ ¾âÒÕâáâÒÕÝÝÞáâØ + +¾ÓàÐÝØçÕÝØï Ø ØáÚÛîçÕÝØï, Ø×ÛÞÖÕÝÝëÕ Ò ÔÐÝÝÞÜ ÀÐ×ÔÕÛÕ 10 (¾ÓàÐÝØçÕÝØÕ ¾âÒÕâáâÒÕÝÝÞáâØ), ßàØÜÕÝïîâáï Ò ßÞÛÝÞÜ ÞÑêÕÜÕ, Ò ÚÞâÞàÞÜ ÞÝØ ÝÕ ×ÐßàÕéÕÝë ßàØÜÕÝØÜëÜ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÞáÒÞÑÞÖÔÕÝØï Þâ ÞÑï×ÐâÕÛìáâÒ ßÞ ÔÞÓÞÒÞàã. + +10.1 ÂÞ, ×Ð ÇâÞ IBM ¼ÞÖÕâ ½ÕáâØ ¾âÒÕâáâÒÕÝÝÞáâì + +¼ÞÓãâ ÒÞ×ÝØÚÝãâì ÞÑáâÞïâÕÛìáâÒÐ, ÚÞÓÔÐ Ø×-×Ð ÝÕØáßÞÛÝÕÝØï ÞÑï×ÐâÕÛìáâÒ áÞ áâÞàÞÝë IBM ØÛØ ßÞ ØÝÞÙ ßàØçØÝÕ ÝÐáâãßÛÕÝØï ÞâÒÕâáâÒÕÝÝÞáâØ »ØæÕÝרÐâ ØÜÕÕâ ßàÐÒÞ ÝÐ ÒÞ×ÜÕéÕÝØÕ ãÑëâÚÞÒ áÞ áâÞàÞÝë IBM. ½Õ×ÐÒØáØÜÞ Þâ âÞÓÞ, ÝÐ ÚÐÚÞÜ ÞáÝÞÒÐÝØØ »ØæÕÝרÐâ ØÜÕÕâ ßàÐÒÞ âàÕÑÞÒÐâì ÒÞ×ÜÕéÕÝØï ãÑëâÚÞÒ áÞ áâÞàÞÝë IBM (ÒÚÛîçÐï áãéÕáâÒÕÝÝÞÕ ÝÐàãèÕÝØÕ, ÝÕÑàÕÖÝÞáâì, ÒÒÕÔÕÝØÕ Ò ×ÐÑÛãÖÔÕÝØÕ ØÛØ ØÝÞÕ ÔÞÓÞÒÞàÝÞÕ ÝÐàãèÕÝØÕ ÛØÑÞ ÔÕÛØÚâÝÞÕ ßàÐÒÞÝÐàãèÕÝØÕ), áÞÒÞÚãßÝÐï ÞâÒÕâáâÒÕÝÝÞáâì IBM ßÞ ÒáÕÜ ßàÕâÕÝרïÜ Ò æÕÛÞÜ, ÒÞ×ÝØÚèØÜ Ø× ØÛØ áÒï×ÐÝÝëÜ á ÚÐÖÔÞÙ ¿àÞÓàÐÜÜÞÙ ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ÒÞ×ÝØÚÐîéØÜ ÝÐ ÞáÝÞÒÐÝØØ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÝÕ ÑãÔÕâ ßàÕÒëèÐâì áãÜÜã ÛîÑëå 1) ÚÞÜßÕÝáÐæØÙ ×Ð ÝÐÝÕáÕÝØÕ âÕÛÕáÝëå ßÞÒàÕÖÔÕÝØÙ (ÒÚÛîçÐï áÜÕàâì) Ø ãéÕàÑ, ßàØçØÝÕÝÝëÙ ÝÕÔÒØÖØÜÞÜã Ø ÜÐâÕàØÐÛìÝÞÜã ÔÒØÖØÜÞÜã ØÜãéÕáâÒã, Ø 2) ÔàãÓØå äÐÚâØçÕáÚØå ßàïÜëå ãÑëâÚÞÒ Ò àÐ×ÜÕàÕ, ÝÕ ßàÕÒëèÐîéÕÜ áãÜÜë, ãßÛÐçÕÝÝÞÙ »ØæÕÝרÐâÞÜ ×Ð ¿àÞÓàÐÜÜã, ïÒÛïîéãîáï ÞÑêÕÚâÞÜ ßàÕâÕÝ×ØØ (ÕáÛØ ¿àÞÓàÐÜÜÐ ßàÕÔÞáâÐÒÛÕÝÐ ßÞ ÛØæÕÝ×ØØ á äØÚáØàÞÒÐÝÝëÜ áàÞÚÞÜ - ÝÕ ßàÕÒëèÐîéÕÜ áãÜÜë ÞßÛÐâë ×Ð 12 ÜÕáïæÕÒ). + +´ÐÝÝÞÕ ÞÓàÐÝØçÕÝØÕ âÐÚÖÕ ßàØÜÕÝïÕâáï ÚÞ ÒáÕÜ àÐ×àÐÑÞâçØÚÐÜ Ø ßÞáâÐÒéØÚÐÜ ¿àÞÓàÐÜÜë IBM. ÍâÞ ÜÐÚáØÜãÜ, ×Ð ÚÞâÞàëÙ IBM Ø ÕÕ àÐ×àÐÑÞâçØÚØ ¿àÞÓàÐÜÜë Ø ßÞáâÐÒéØÚØ ÒáÕ ÒÜÕáâÕ ÝÕáãâ ÞâÒÕâáâÒÕÝÝÞáâì. + +10.2 ÂÞ, ×Ð ÇâÞ IBM ½Õ ½ÕáÕâ ¾âÒÕâáâÒÕÝÝÞáâØ + +½¸ ¿À¸ º°º¸Å ¾±Á¾Ïµ»ÌÁ²°Å IBM, µµ À°·À°±¾ÂǸº¸ ¿À¾³À°¼¼ ¸»¸ ¿¾Á°²É¸º¸ ½µ ½µÁà¾Â²µÂÁ²µ½½¾Á¸ ·° »Î±¾µ ¸· ½¸¶µÁ»µ´ÃÎɵ³¾, ´°¶µ µÁ»¸ ¾½¸ ±Ë»¸ ¿À¾¸½Ä¾À¼¸À¾²°½Ë ¾ ²¾·¼¾¶½¾Á¸ °º¾²¾³¾: + +a. ¿¾ÂµÀÏ ¸»¸ ¿¾²Àµ¶´µ½¸µ ´°½½ËÅ; + +b. ¾Á¾±Ëµ, ½µ¿Àµ´²¸´µ½½Ëµ ¸»¸ ½µ¿Àϼ˵ ñ˺¸ ¸»¸ »Î±Ëµ º¾Á²µ½½Ëµ ͺ¾½¾¼¸ÇµÁº¸µ ñ˺¸; + +c. ÿÃɵ½½Ëµ ´¾Å¾´Ë, ²¾·¼¾¶½¾ÁÂÌ ¿À¾²µ´µ½¸Ï ´µ»¾²¾¹ °ºÂ¸²½¾Á¸, ¿À¸±Ë»Ì, Àµ¿ÃÂ°Æ¸Ï ¸»¸ ¾¶¸´°µ¼Ëµ Á±µÀµ¶µ½¸Ï. + +11. ¿àÞÒÕàÚÐ ÁÞÑÛîÔÕÝØï ãáÛÞÒØÙ + +² æÕÛïå ÔÐÝÝÞÓÞ ÀÐ×ÔÕÛÐ 11 (¿àÞÒÕàÚÐ ÁÞÑÛîÔÕÝØï ãáÛÞÒØÙ) âÕàÜØÝ "ÃáÛÞÒØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ »ØæÕÝרÞÝÝÞÓÞ ÁÞÓÛÐèÕÝØï Ò ÞâÝÞèÕÝØØ ¿àÞÓàÐÜÜ (IPLA Program Terms)" Þ×ÝÐçÐÕâ 1) ÝÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ Ø ßàØÜÕÝØÜëÕ ÔÞßÞÛÝÕÝØï Ø ÔÞÚãÜÕÝâë Þ âàÐÝ×Ð򾯯, ßàÕÔÞáâÐÒÛÕÝÝëÕ IBM, Ø 2) ßÞÛØâØÚØ IBM Ò ÞâÝÞèÕÝØØ ßàÞÓàÐÜÜÝÞÓÞ ÞÑÕáßÕçÕÝØï, ÚÞâÞàëÕ ÜÞÖÝÞ ÝÐÙâØ ÝÐ Web-áÐÙâÕ IBM Software Policy (www.ibm.com/softwarepolicies), ÒÚÛîçÐï, ÝÞ ÝÕ ÞÓàÐÝØçØÒÐïáì ØÜØ, ßÞÛØâØÚØ, ÚÐáÐîéØÕáï àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï, æÕÝÞÞÑàÐ×ÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ÝÕßÞÛÝëå ÜÞéÝÞáâÕÙ Ø ÜØÓàÐæØØ. + +¿àÐÒÐ Ø ÞÑï×ÐÝÝÞáâØ, Ø×ÛÞÖÕÝÝëÕ Ò ÀÐ×ÔÕÛÕ 11, ÞáâÐîâáï Ò áØÛÕ Ò âÕçÕÝØÕ ßÕàØÞÔÐ ÔÕÙáâÒØï ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã ÔÛï »ØæÕÝרÐâÐ Ø Ò âÕçÕÝØÕ ÔÒãå ÛÕâ ßÞáÛÕ ÕÓÞ ÞÚÞÝçÐÝØï. + +11.1 ¿àÞæÕáá ¿àÞÒÕàÚØ + +»ØæÕÝרÐâ áÞÓÛÐáÕÝ áÞ×ÔÐÒÐâì, áÞåàÐÝïâì Ø ßàÕÔÞáâÐÒÛïâì IBM Ø ÕÕ ÐãÔØâÞàÐÜ âÞçÝëÕ ßØáìÜÕÝÝëÕ ×ÐߨáØ, ÒëåÞÔÝëÕ ÔÐÝÝëÕ áØáâÕÜÝëå áàÕÔáâÒ Ø ÔàãÓãî ØÝäÞàÜÐæØî Þ áØáâÕÜÕ, ÚÞâÞàëÕ ÔÞáâÐâÞçÝë ÔÛï ßÞÔâÒÕàÖÔÕÝØï âÞÓÞ, çâÞ »ØæÕÝרÐâ ØáßÞÛì×ãÕâ ÒáÕ ¿àÞÓàÐÜÜë Ò áÞÞâÒÕâáâÒØØ á IPLA Program Terms, ÒÚÛîçÐï, ÑÕ× ÞÓàÐÝØçÕÝØï, ÒáÕ ßàØÜÕÝØÜëÕ ãáÛÞÒØï ÛØæÕÝרàÞÒÐÝØï Ø æÕÝÞÞÑàÐ×ÞÒÐÝØï IBM. »ØæÕÝרÐâ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð 1) ÝÕßàÕÒëèÕÝØÕ ãàÞÒÝï °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï Ø 2) áÞÑÛîÔÕÝØÕ IPLA Program Terms. + +¿ÞáÛÕ àÐ×ãÜÝÞÓÞ ãÒÕÔÞÜÛÕÝØï IBM ÜÞÖÕâ ßàÞÒÕàØâì áÞÑÛîÔÕÝØÕ »ØæÕÝרÐâÞÜ IPLA Program Terms ÒÞ ÒáÕå ÞäØáÐå Ø ÒÞ ÒáÕå áàÕÔÐå, Ò ÚÞâÞàëå »ØæÕÝרÐâ ØáßÞÛì×ãÕâ (Ò ÛîÑëå æÕÛïå) ¿àÞÓàÐÜÜë, ÝÐ ÚÞâÞàëÕ àÐáßàÞáâàÐÝïîâáï IPLA Program Terms. ÂÐÚÐï ßàÞÒÕàÚÐ ÑãÔÕâ ßàÞÒÞÔØâìáï áßÞáÞÑÞÜ, ÚÞâÞàëÙ ãÜÕÝìèÐÕâ ßÞÜÕåØ ÔÛï ÔÕïâÕÛìÝÞáâØ »ØæÕÝרÐâÐ, Ø ÜÞÖÕâ ßàÞåÞÔØâì Ò ßÞÜÕéÕÝØïå »ØæÕÝרÐâÐ Ò ÞÑëçÝëÕ àÐÑÞçØÕ çÐáë. IBM ÜÞÖÕâ ØáßÞÛì×ÞÒÐâì ÝÕ×ÐÒØáØÜÞÓÞ ÐãÔØâÞàÐ ÔÛï ßÞÜÞéØ Ò ßàÞÒÕÔÕÝØØ ßàÞÒÕàÚØ, ßàØ ãáÛÞÒØØ çâÞ ã IBM Õáâì ߨáìÜÕÝÝÞÕ áÞÓÛÐèÕÝØÕ Þ ÚÞÝäØÔÕÝæØÐÛìÝÞáâØ á âÐÚØÜ ÐãÔØâÞàÞÜ. + +11.2 ÀÐ×àÕèÕÝØÕ áßÞàÞÒ + +µáÛØ Ò åÞÔÕ ÛîÑÞÙ ßÞÔÞÑÝÞÙ ßàÞÒÕàÚØ ÑãÔÕâ ãáâÐÝÞÒÛÕÝÞ, çâÞ »ØæÕÝרÐâ ØáßÞÛì×ÞÒÐÛ ÚÐÚãî-ÛØÑÞ ¿àÞÓàÐÜÜã á ßàÕÒëèÕÝØÕÜ ãàÞÒÝï °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ÝÕ áÞÑÛîÔÐÕâ IPLA Program Terms, IBM ÝÐßàÐÒØâ »ØæÕÝרÐâã ߨáìÜÕÝÝÞÕ ãÒÕÔÞÜÛÕÝØÕ. »ØæÕÝרÐâ áÞÓÛÐáÕÝ ÝÕÜÕÔÛÕÝÝÞ ÒëßÛÐâØâì ÝÕßÞáàÕÔáâÒÕÝÝÞ IBM áãÜÜã, ãÚÐ×ÐÝÝãî IBM Ò áçÕâÕ, ×Ð 1) ÛîÑÞÕ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ áÒÕàå ãáâÐÝÞÒÛÕÝÝëå ßàÕÔÕÛÞÒ, 2) ÔÞßÞÛÝØâÕÛìÝãî ßÞÔÔÕàÖÚã ÔÛï âÐÚÞÓÞ ØáßÞÛì×ÞÒÐÝØï áÒÕàå ãáâÐÝÞÒÛÕÝÝëå ßàÕÔÕÛÞÒ ×Ð ÜÕÝìèØÙ Ø× áÛÕÔãîéØå ßÕàØÞÔÞÒ: ßÕàØÞÔ âÐÚÞÓÞ ØáßÞÛì×ÞÒÐÝØï ØÛØ ÔÒÐ ÓÞÔÐ, Ø 3) ÛîÑëÕ ÔÞßÞÛÝØâÕÛìÝëÕ àÐáåÞÔë Ø ÔàãÓØÕ ÞÑï×ÐâÕÛìáâÒÐ, ÒëïÒÛÕÝÝëÕ Ò àÕ×ãÛìâÐâÕ âÐÚÞÙ ßàÞÒÕàÚØ. + +12. ÃÒÕÔÞÜÛÕÝØï ÂàÕâìØå ÁâÞàÞÝ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ßàÞÓàÐÜÜÝëÙ ÚÞÔ âàÕâìÕÙ áâÞàÞÝë, ÚÞâÞàëÙ IBM, Ð ÝÕ âàÕâìï áâÞàÞÝÐ, ÛØæÕÝרàãÕâ »ØæÕÝרÐâã ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. ÃÒÕÔÞÜÛÕÝØï, ÕáÛØ âÐÚÞÒëÕ Õáâì, Þ ßàÞÓàÐÜÜÝÞÜ ÚÞÔÕ, ßàÕÔÞáâÐÒÛÕÝÝÞÜ âàÕâìÕÙ áâÞàÞÝÞÙ ("ÃÒÕÔÞÜÛÕÝØï ÂàÕâìØå ÁâÞàÞÝ"), ßàØÒÞÔïâáï âÞÛìÚÞ ÔÛï áÒÕÔÕÝØï »ØæÕÝרÐâÐ. ÍâØ ãÒÕÔÞÜÛÕÝØï ÜÞÖÝÞ ÝÐÙâØ Ò äÐÙÛÕ (äÐÙÛÐå) NOTICES ÔÛï ¿àÞÓàÐÜÜë. ¸ÝäÞàÜÐæØî Þ âÞÜ, ÚÐÚ ßÞÛãçØâì ØáåÞÔÝëÙ ÚÞÔ ÔÛï âÞÓÞ ØÛØ ØÝÞÓÞ ßàÞÓàÐÜÜÝÞÓÞ ÚÞÔÐ âàÕâìÕÙ áâÞàÞÝë, ÜÞÖÝÞ ÝÐÙâØ Ò ÃÒÕÔÞÜÛÕÝØïå ÂàÕâìØå ÁâÞàÞÝ. µáÛØ Ò ÃÒÕÔÞÜÛÕÝØïå ÂàÕâìØå ÁâÞàÞÝ IBM ÞßàÕÔÕÛïÕâ ßàÞÓàÐÜÜÝëÙ ÚÞÔ, ßàÕÔÞáâÐÒÛÕÝÝëÙ âàÕâìÕÙ áâÞàÞÝÞÙ, ÚÐÚ "¸×ÜÕÝïÕÜëÙ ¿àÞÓàÐÜÜÝëÙ ÚÞÔ ÂàÕâìÕÙ ÁâÞàÞÝë", âÞ IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ßàÐÒÐ ÝÐ 1) Ø×ÜÕÝÕÝØÕ ¸×ÜÕÝïÕÜÞÓÞ ¿àÞÓàÐÜÜÝÞÓÞ ÚÞÔÐ ÂàÕâìÕÙ ÁâÞàÞÝë Ø 2) ÞÑàÐâÝÞÕ ßàÕÞÑàÐ×ÞÒÐÝØÕ ÜÞÔãÛÕÙ ¿àÞÓàÐÜÜë, ÚÞâÞàëÕ ÝÕßÞáàÕÔáâÒÕÝÝÞ Ò×ÐØÜÞÔÕÙáâÒãîâ á ¸×ÜÕÝïÕÜëÜ ¿àÞÓàÐÜÜÝëÜ ÚÞÔÞÜ ÂàÕâìÕÙ ÁâÞàÞÝë, ßàØ ãáÛÞÒØØ çâÞ íâÞ ÔÕÛÐÕâáï âÞÛìÚÞ á æÕÛìî ÞâÛÐÔÚØ Ø×ÜÕÝÕÝØÙ, ÒÝÕáÕÝÝëå »ØæÕÝרÐâÞÜ Ò âÐÚÞÙ ßàÞÓàÐÜÜÝëÙ ÚÞÔ âàÕâìÕÙ áâÞàÞÝë. ¾Ñï×ÐâÕÛìáâÒÐ IBM ßÞ ÞÑáÛãÖØÒÐÝØî Ø ßÞÔÔÕàÖÚÕ, ÕáÛØ âÐÚÞÒëÕ Õáâì, ßàØÜÕÝïîâáï âÞÛìÚÞ Ú ÝÕØ×ÜÕÝÕÝÝÞÙ ¿àÞÓàÐÜÜÕ. + +13. ¾ÑéØÕ ãáÛÞÒØï + +a. ½ØçâÞ Ò ÝÐáâÞïéÕÜ ÁÞÓÛÐèÕÝØØ ÝÕ ×ÐâàÐÓØÒÐÕâ ÚÐÚØå-ÛØÑÞ ãáâÐÝÞÒÛÕÝÝëå ×ÐÚÞÝÞÜ ßàÐÒ ßÞâàÕÑØâÕÛÕÙ, ÚÞâÞàëÕ ÝÕ ÜÞÓãâ Ñëâì ÞâÚÛÞÝÕÝë ØÛØ ÞÓàÐÝØçÕÝë ßÞ ÔÞÓÞÒÞàã. + +b. ´Ûï ¿àÞÓàÐÜÜ, ßàÕÔÞáâÐÒÛïÕÜëå IBM »ØæÕÝרÐâã ÝÐ ÝÞáØâÕÛïå, ÞÑï×ÐâÕÛìáâÒÐ IBM ßÞ ßÞáâÐÒÚÕ áçØâÐîâáï ÒëßÞÛÝÕÝÝëÜØ Ò ÜÞÜÕÝâ ÔÞáâÐÒÚØ âÐÚØå ¿àÞÓàÐÜÜ âàÐÝáßÞàâÝÞÙ ÚÞÜßÐÝØØ, ÝÐ×ÝÐçÕÝÝÞÙ IBM, ÕáÛØ ØÝÞÕ ÝÕ áÞÓÛÐáÞÒÐÝÞ Ò ßØáìÜÕÝÝÞÜ ÒØÔÕ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM. + +c. µáÛØ ÚÐÚÞÕ-ÛØÑÞ ãáÛÞÒØÕ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï ÑãÔÕâ ßàØ×ÝÐÝÞ ÝÕÔÕÙáâÒØâÕÛìÝëÜ ØÛØ ÛØèÕÝÝëÜ ØáÚÞÒÞÙ áØÛë, ÞáâÐÛìÝëÕ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï ßàÞÔÞÛÖÐîâ ÔÕÙáâÒÞÒÐâì Ò ßÞÛÝÞÜ ÞÑêÕÜÕ. + +d. »ØæÕÝרÐâ áÞÓÛÐáÕÝ áÞÑÛîÔÐâì ÒáÕ ßàØÜÕÝØÜëÕ ×ÐÚÞÝë Ø ßàÐÒØÛÐ íÚáßÞàâÐ Ø ØÜßÞàâÐ, ÒÚÛîçÐï ×ÐÚÞÝÞÔÐâÕÛìÝëÕ ÐÚâë ÁȰ ÞÑ íÜÑÐàÓÞ, áÐÝÚæØïå Ø ×ÐßàÕâÕ ÝÐ íÚáßÞàâ ÔÛï ÞßàÕÔÕÛÕÝÝëå ÚÞÝÕçÝëå ßÞÛì×ÞÒÐâÕÛÕÙ ØÛØ ÔÛï ØáßÞÛì×ÞÒÐÝØï Ò ÞßàÕÔÕÛÕÝÝëå æÕÛïå. + +e. »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ ÚÞÜßÐÝØØ International Business Machines Corporation Ø ÕÕ ÔÞçÕàÝØÜ ÚÞÜßÐÝØïÜ (Ð âÐÚÖÕ Øå ÝÐáÛÕÔÝØÚÐÜ Ø ßàÐÒÞßàÕÕÜÝØÚÐÜ, ßÞÔàïÔçØÚÐÜ Ø ±Ø×ÝÕá-¿ÐàâÝÕàÐÜ IBM) ßàÐÒÞ ÝÐ åàÐÝÕÝØÕ ÚÞÝâÐÚâÝÞÙ ØÝäÞàÜÐæØØ »ØæÕÝרÐâÐ Ø ÕÕ ØáßÞÛì×ÞÒÐÝØÕ Ò ÛîÑÞÜ ÜÕáâÕ ÒÕÔÕÝØï ÔÕÛÞÒÞÙ ÐÚâØÒÝÞáâØ, Ò áÒïר á ßàÞÔãÚâÐÜØ Ø ãáÛãÓÐÜØ IBM ØÛØ ÔÛï ÔÐÛìÝÕÙèÕÙ ßÞÔÔÕàÖÚØ ÔÕÛÞÒëå ÞâÝÞèÕÝØÙ IBM á »ØæÕÝרÐâÞÜ. + +f. ºÐÖÔÐï áâÞàÞÝÐ ßàÕÔÞáâÐÒØâ ÔàãÓÞÙ áâÞàÞÝÕ àÐ×ãÜÝãî ÒÞ×ÜÞÖÝÞáâì ÒëßÞÛÝØâì áÒÞØ ÞÑï×ÐâÕÛìáâÒÐ ÔÞ âÞÓÞ, ÚÐÚ ×ÐïÒØâ Þ ÝÕÒëßÞÛÝÕÝØØ ÔàãÓÞÙ áâÞàÞÝÞÙ ÕÕ ÞÑï×ÐâÕÛìáâÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. ÁâÞàÞÝë ÑãÔãâ ßëâÐâìáï ÔÞÑàÞáÞÒÕáâÝÞ àÐ×àÕèÐâì ÒáÕ áßÞàë, àÐ×ÝÞÓÛÐáØï ØÛØ ßàÕâÕÝ×ØØ ÜÕÖÔã áâÞàÞÝÐÜØ, ÞâÝÞáïéØÕáï Ú ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. + +g. µáÛØ ØÝÞÕ ÝÕ ßàÕÔãáÜÞâàÕÝÞ ßàØÜÕÝØÜëÜ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ, ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÞâÚÐ×Ð Þâ ßàÐÒ ßÞ ÔÞÓÞÒÞàã ØÛØ Øå ÞÓàÐÝØçÕÝØï, âÞ: 1) ÝØ ÞÔÝÐ Ø× áâÞàÞÝ ÝÕ ÑãÔÕâ ÒÞ×ÑãÖÔÐâì áãÔÕÑÝëÕ ØáÚØ Ò ÛîÑÞÙ äÞàÜÕ Ø ßÞ ÛîÑÞÙ ßàÕâÕÝרØ, áÒï×ÐÝÝÞÙ á ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ, ßÞ×ÔÝÕÕ çÕÜ çÕàÕ× ÔÒÐ ÓÞÔÐ ßÞáÛÕ ÒÞ×ÝØÚÝÞÒÕÝØï ÞáÝÞÒÐÝØï ÔÛï ØáÚÐ, Ø 2) ßÞ ØáâÕçÕÝØØ ÔÐÝÝÞÓÞ áàÞÚÐ ÛîÑëÕ ßÞÔÞÑÝëÕ ßàÕâÕÝ×ØØ Ø áÒï×ÐÝÝëÕ á ÝØÜØ ßàÐÒÐ ãâàÐçØÒÐîâ áØÛã. + +h. ½Ø »ØæÕÝרÐâ, ÝØ IBM ÝÕ ÝÕáãâ ÞâÒÕâáâÒÕÝÝÞáâØ ×Ð ÝÕÒëßÞÛÝÕÝØÕ ÚÐÚØå-ÛØÑÞ ÞÑï×ÐâÕÛìáâÒ ßÞ ßàØçØÝÐÜ, ÝÐ ÚÞâÞàëÕ ÞÝØ ÝÕ ÜÞÓãâ ßÞÒÛØïâì. + +i. ½ÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ ÝÕ áÞ×ÔÐÕâ ÚÐÚØå-ÛØÑÞ ßàÐÒ ØÛØ ÞáÝÞÒÐÝØÙ ÔÛï ØáÚÐ ÚÐÚØå-ÛØÑÞ âàÕâìØå ÛØæ, Ø IBM ÝÕ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâØ ×Ð ÚÐÚØÕ-ÛØÑÞ ßàÕâÕÝ×ØØ âàÕâìØå ÛØæ Ú »ØæÕÝרÐâã, ×Ð ØáÚÛîçÕÝØÕÜ âÞÓÞ, çâÞ àÐ×àÕèÕÝÞ Ò ¿ÞÔàÐ×ÔÕÛÕ 10.1 (ÂÞ, ×Ð ÇâÞ IBM ¼ÞÖÕâ ½ÕáâØ ¾âÒÕâáâÒÕÝÝÞáâì) ÒëèÕ Ò áÒïר á ÝÐÝÕáÕÝØÕÜ âÕÛÕáÝëå ßÞÒàÕÖÔÕÝØÙ (ÒÚÛîçÐï áÜÕàâì) ØÛØ ßÞÒàÕÖÔÕÝØÕÜ ÝÕÔÒØÖØÜÞÓÞ ØÛØ ÜÐâÕàØÐÛìÝÞÓÞ ÔÒØÖØÜÞÓÞ ØÜãéÕáâÒÐ, ×Ð ÚÞâÞàëÕ IBM ÝÕáÕâ îàØÔØçÕáÚãî ÞâÒÕâáâÒÕÝÝÞáâì ßÕàÕÔ âÐÚÞÙ âàÕâìÕÙ áâÞàÞÝÞÙ. + +j. ·ÐÚÛîçÐï ÝÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ, ÝØ ÞÔÝÐ Ø× áâÞàÞÝ ÝÕ ßÞÛÐÓÐÕâáï ÝÐ ÛîÑëÕ ×ÐïÒÛÕÝØï, ÝÕ ãÚÐ×ÐÝÝëÕ Ò ÔÐÝÝÞÜ ÁÞÓÛÐèÕÝØØ, ÒÚÛîçÐï, ÝÞ ÝÕ ÞÓàÐÝØçØÒÐïáì ØÜØ, ×ÐïÒÛÕÝØï ÞâÝÞáØâÕÛìÝÞ: 1) ßàÞØ×ÒÞÔØâÕÛìÝÞáâØ ØÛØ äãÝÚæØÞÝØàÞÒÐÝØï ¿àÞÓàÐÜÜë, ÚàÞÜÕ âÞÓÞ, ÚÐÚ íâÞ ßàïÜÞ ÓÐàÐÝâØàÞÒÐÝÞ ÒëèÕ Ò ÀÐ×ÔÕÛÕ 8 (³ÐàÐÝâØï Ø ¸áÚÛîçÕÝØï), 2) ÜÝÕÝØÙ Ø àÕÚÞÜÕÝÔÐæØÙ ÔàãÓØå áâÞàÞÝ; ØÛØ 3) ÚÐÚØå-ÛØÑÞ àÕ×ãÛìâÐâÞÒ Ø íÚÞÝÞÜØçÕáÚÞÙ ÒëÓÞÔë, ÚÞâÞàëå ÜÞÖÕâ ÔÞáâØçì »ØæÕÝרÐâ. + +k. IBM ßÞÔߨáÐÛÐ áÞÓÛÐèÕÝØï á ÝÕÚÞâÞàëÜØ ÞàÓÐÝØ×ÐæØïÜØ (ØÜÕÝãÕÜëÜØ "±Ø×ÝÕá-¿ÐàâÝÕàÐÜØ IBM") Þ ßàÞÔÒØÖÕÝØØ ÝÐ àëÝÚÕ, ßàÞÔÐÖÕ Ø ßÞÔÔÕàÖÚÕ ÞßàÕÔÕÛÕÝÝëå ¿àÞÓàÐÜÜ. ±Ø×ÝÕá-¿ÐàâÝÕàë IBM ÞáâÐîâáï áÐÜÞáâÞïâÕÛìÝëÜØ Ø ÝÕ×ÐÒØáØÜëÜØ Þâ IBM ÚÞÜßÐÝØïÜØ. IBM ÝÕ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâØ ×Ð ÔÕÙáâÒØï ØÛØ ×ÐïÒÛÕÝØï ±Ø×ÝÕá-¿ÐàâÝÕàÞÒ IBM ØÛØ ÞÑï×ÐâÕÛìáâÒÐ, ÚÞâÞàëÕ ÞÝØ ØÜÕîâ ßÕàÕÔ »ØæÕÝרÐâÞÜ. + +l. ÃáÛÞÒØï Þ ÒÞ×ÜÕéÕÝØïå, ÚÐáÐîéØÕáï ÛØæÕÝ×ØÙ ØÛØ ØÝâÕÛÛÕÚâãÐÛìÝÞÙ áÞÑáâÒÕÝÝÞáâØ, ÔàãÓØå áÞÓÛÐèÕÝØÙ »ØæÕÝרÐâÐ á IBM (ÝÐßàØÜÕà, ÁÞÓÛÐèÕÝØï IBM á ·ÐÚÐ×çØÚÞÜ), ÝÕ ßàØÜÕÝïîâáï Ú ÛØæÕÝרïÜ ÝÐ ¿àÞÓàÐÜÜë, ßàÕÔÞáâÐÒÛïÕÜëÜ Ò áÞÞâÒÕâáâÒØØ á ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ. + +14. ³ÕÞÓàÐäØçÕáÚØÕ ÀÐÜÚØ Ø ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ + +14.1 ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ + +¾ÑÕ áâÞàÞÝë áÞÓÛÐèÐîâáï ÝÐ ßàØÜÕÝÕÝØÕ ×ÐÚÞÝÞÒ áâàÐÝë, Ò ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ÛØæÕÝרî ÝÐ ¿àÞÓàÐÜÜã, çâÞÑë àÕÓãÛØàÞÒÐâì, ØÝâÕàßàÕâØàÞÒÐâì Ø ßàØÔÐÒÐâì ØáÚÞÒãî ×ÐéØâã ÒáÕÜ ßàÐÒÐÜ, ÞÑï×ÐÝÝÞáâïÜ Ø ÞÑï×ÐâÕÛìáâÒÐÜ »ØæÕÝרÐâÐ Ø IBM, ÒÞ×ÝØÚÐîéØÜ ÒáÛÕÔáâÒØÕ ØÛØ Ò ÚÐÚÞÙ-ÛØÑÞ áÒïר á ßàÕÔÜÕâÞÜ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÑÕ×ÞâÝÞáØâÕÛìÝÞ Ú ÝÞàÜÐÜ ÚÞÛÛØ×ØÞÝÝÞÓÞ ßàÐÒÐ. + +ºÞÝÒÕÝæØï ¾àÓÐÝØ×ÐæØØ ¾ÑêÕÔØÝÕÝÝëå ½ÐæØÙ Þ ÔÞÓÞÒÞàÐå ÜÕÖÔãÝÐàÞÔÝÞÙ ÚãßÛØ-ßàÞÔÐÖØ âÞÒÐàÞÒ ÝÕ ßàØÜÕÝïÕâáï. + +14.2 ÎàØáÔØÚæØï + +²áÕ ßàÐÒÐ, ÞÑï×ÐÝÝÞáâØ Ø ÞÑï×ÐâÕÛìáâÒÐ ßÞÔÛÕÖÐâ àÐááÜÞâàÕÝØî áãÔÐÜØ áâàÐÝë, Ò ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ÛØæÕÝרî ÝÐ ¿àÞÓàÐÜÜã. + +ÇÐáâì 2 - ¾áÞÑëÕ ÃáÛÞÒØï ÔÛï ½ÕÚÞâÞàëå ÁâàÐÝ + +´Ûï ÛØæÕÝרÙ, ßàÕÔÞáâÐÒÛÕÝÝëå Ò ßÕàÕçØáÛÕÝÝëå ÝØÖÕ áâàÐÝÐå, áÛÕÔãîéØÕ ãáÛÞÒØï ×ÐÜÕÝïîâ ØÛØ Ø×ÜÕÝïîâ áÞÞâÒÕâáâÒãîéØÕ ãáÛÞÒØï Ò ÇÐáâØ 1. ²áÕ ãáÛÞÒØï Ò ÇÐáâØ 1, ÚÞâÞàëÕ ÝÕ Ø×ÜÕÝïîâáï íâØÜØ ßÞßàÐÒÚÐÜØ, ÞáâÐîâáï Ò áØÛÕ ÑÕ× Ø×ÜÕÝÕÝØÙ. ÇÐáâì 2 ØÜÕÕâ áÛÕÔãîéãî áâàãÚâãàã: + +* ßÞßàÐÒÚØ ÔÛï ÝÕáÚÞÛìÚØå áâàÐÝ Ú ÇÐáâØ 1, ÀÐ×ÔÕÛã "ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ Ø ÎàØáÔØÚæØï"; Ø + +* ßÞßàÐÒÚØ ÔÛï áâàÐÝ µÒàÞßë, ±ÛØÖÝÕÓÞ Ø ÁàÕÔÝÕÓÞ ²ÞáâÞÚÐ Ø °äàØÚØ Ú ÔàãÓØÜ ãáÛÞÒØïÜ ÁÞÓÛÐèÕÝØï. + +¿ÞßàÐÒÚØ ÔÛï ÝÕáÚÞÛìÚØå áâàÐÝ Ú ÇÐáâØ 1, ÀÐ×ÔÕÛã 14 ("ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ Ø ÎàØáÔØÚæØï") + +14.1 ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ + +ÄàÐ×Ð "×ÐÚÞÝÞÒ áâàÐÝë, Ò ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ÛØæÕÝרî ÝÐ ¿àÞÓàÐÜÜã" Ò ßÕàÒÞÜ ÐÑ×ÐæÕ ßÞÔàÐ×ÔÕÛÐ 14.1 ("ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ") ×ÐÜÕÝïÕâáï Ò ßÕàÕçØáÛÕÝÝëå ÝØÖÕ áâàÐÝÐå áÛÕÔãîéØÜØ äàÐ×ÐÜØ: + +µ²À¾¿°, ±»¸¶½¸¹ ¸ ÁÀµ´½¸¹ ²¾Á¾º ¸ °ÄÀ¸º° + +Ò ±ÕÛÐàãáØ, ºÐ×ÐåáâÐÝÕ, ºëàÓë×áâÐÝÕ Ø ÀÞááØØ: ×ÐÚÞÝÞÒ °ÒáâàØØ; + +14.3 °àÑØâàÐÖ + +ÁÛÕÔãîéØÙ ÐÑ×Ðæ ÔÞÑÐÒÛïÕâáï Ò ÚÐçÕáâÒÕ ÝÞÒÞÓÞ ¿ÞÔàÐ×ÔÕÛÐ 14.3 ("°àÑØâàÐÖ") Ò âÞÙ áâÕßÕÝØ, Ò ÚÞâÞàÞÙ ÞÝ ßàØÜÕÝïÕâáï Ò ßÕàÕçØáÛÕÝÝëå ÝØÖÕ áâàÐÝÐå. ¿ÞÛÞÖÕÝØï ÔÐÝÝÞÓÞ ßÞÔàÐ×ÔÕÛÐ 14.3 ØÜÕîâ ßàÕØÜãéÕáâÒÕÝÝãî áØÛã ßÕàÕÔ ßÞÛÞÖÕÝØïÜØ ßÞÔàÐ×ÔÕÛÐ 14.2 ("ÎàØáÔØÚæØï") Ò âÞÙ ÜÕàÕ, Ò ÚÞâÞàÞÙ íâÞ ÔÞßãáÚÐÕâáï ßàØÜÕÝØÜëÜ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Ø ßàÞæÕááãÐÛìÝëÜØ ÝÞàÜÐÜØ: + +µ²À¾¿°, ±»¸¶½¸¹ ¸ ÁÀµ´½¸¹ ²¾Á¾º ¸ °ÄÀ¸º° + +² ±ÕÛÐàãáØ, ºÐ×ÐåáâÐÝÕ, ºëàÓë×áâÐÝÕ Ø ÀÞááØØ: + +²áÕ áßÞàë, ÒÞ×ÝØÚÐîéØÕ Ø× ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï ØÛØ áÒï×ÐÝÝëÕ á ÕÓÞ ÝÐàãèÕÝØÕÜ, ßàÕÚàÐéÕÝØÕÜ ÔÕÙáâÒØï ØÛØ ßàØ×ÝÐÝØÕÜ ÝÕÔÕÙáâÒØâÕÛìÝëÜ, ßÞÔÛÕÖÐâ ÞÚÞÝçÐâÕÛìÝÞÜã ãàÕÓãÛØàÞÒÐÝØî Ò áÞÞâÒÕâáâÒØØ á ¿àÐÒØÛÐÜØ °àÑØâàÐÖÐ Ø ÃàÕÓãÛØàÞÒÐÝØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ °àÑØâàÐÖÝÞÓÞ ÆÕÝâàÐ ÄÕÔÕàÐÛìÝÞÙ ÍÚÞÝÞÜØçÕáÚÞÙ ¿ÐÛÐâë Ò ²ÕÝÕ (²ÕÝáÚØÕ ¿àÐÒØÛÐ) âàÕÜï ÐàÑØâàÐÜØ, ÝÐ×ÝÐçÕÝÝëÜØ Ò áÞÞâÒÕâáâÒØØ á ÔÐÝÝëÜØ ßàÐÒØÛÐÜØ. °àÑØâàÐÖÝÞÕ àÐ×ÑØàÐâÕÛìáâÒÞ ÑãÔÕâ ßàÞÒÞÔØâìáï Ò ²ÕÝÕ (°ÒáâàØï), Ø Þ䨿ØÐÛìÝëÜ ï×ëÚÞÜ àÐ×ÑØàÐâÕÛìáâÒÐ ÑãÔÕâ ÐÝÓÛØÙáÚØÙ. ÀÕèÕÝØÕ ÐàÑØâàÞÒ ïÒÛïÕâáï ÞÚÞÝçÐâÕÛìÝëÜ Ø ÞÑï×ÐâÕÛìÝëÜ ÔÛï ÞÑÕØå áâÞàÞÝ. ¿ÞíâÞÜã, Ò áÞÞâÒÕâáâÒØØ á ßÐàÐÓàÐäÞÜ 598 (2) °ÒáâàØÙáÚÞÓÞ ³àÐÖÔÐÝáÚÞ-ßàÞæÕááãÐÛìÝÞÓÞ ÚÞÔÕÚáÐ, áâÞàÞÝë Ò ïÒÝÞ ÒëàÐÖÕÝÝÞÙ äÞàÜÕ ÞâÚÐ×ëÒÐîâáï Þâ ßàØÜÕÝÕÝØï ßÐàÐÓàÐäÐ 595 (1), ßãÝÚâÐ 7 ºÞÔÕÚáÐ. IBM ÜÞÖÕâ, ÞÔÝÐÚÞ, ÒÞ×ÑãÔØâì àÐ×ÑØàÐâÕÛìáâÒÞ Ò ÚÞÜßÕâÕÝâÝÞÜ áãÔÕ Ò áâàÐÝÕ ãáâÐÝÞÒÚØ. + +¿¾¿À°²º¸ ´»Ï ÁÂÀ°½ µ²À¾¿Ë, ±»¸¶½µ³¾ ¸ ÁÀµ´½µ³¾ ²¾Á¾º° ¸ °ÄÀ¸º¸ (EMEA) + +»Î±°Ï µ²À¾¿µ¹Áº°Ï ÁÂÀ°½°, ¿À¸½Ï²È°Ï ·°º¾½Ë ¾ º¾½Ä¸´µ½Æ¸°»Ì½¾Á¸ ¸ ·°É¸Âµ ´°½½ËÅ, °½°»¾³¸Ç½Ëµ ¼¾´µ»¸ µ²À¾¿µ¹Áº¾³¾ Á¾Î·°. + +13. ¾ÑéØÕ ãáÛÞÒØï + +¿ãÝÚâ 13.e ×ÐÜÕÝïÕâáï áÛÕÔãîéØÜ: + +(1) ¾ßàÕÔÕÛÕÝØï - Ò ¿ãÝÚâÕ 13.e ØáßÞÛì×ãîâáï áÛÕÔãîéØÕ ÔÞßÞÛÝØâÕÛìÝëÕ ÞßàÕÔÕÛÕÝØï: + +(a) ´ÕÛÞÒÐï ºÞÝâÐÚâÝÐï ¸ÝäÞàÜÐæØï - ÔÕÛÞÒÐï ÚÞÝâÐÚâÝÐï ØÝäÞàÜÐæØï, ÚÞâÞàãî »ØæÕÝרÐâ àÐáÚàëÒÐÕâ IBM, ÒÚÛîçÐîéÐï ØÜÕÝÐ, ÔÞÛÖÝÞáâØ, áÛãÖÕÑÝëÕ ÐÔàÕáÐ, ÝÞÜÕàÐ âÕÛÕäÞÝÞÒ Ø ÐÔàÕáÐ íÛÕÚâàÞÝÝÞÙ ßÞçâë áÞâàãÔÝØÚÞÒ Ø ßÞÔàïÔçØÚÞÒ »ØæÕÝרÐâÐ. ² °ÒáâàØØ, ¸âÐÛØØ Ø ÈÒÕÙæÐàØØ ´ÕÛÞÒÐï ºÞÝâÐÚâÝÐï ¸ÝäÞàÜÐæØï âÐÚÖÕ ÒÚÛîçÐÕâ ØÝäÞàÜÐæØî Þ »ØæÕÝרÐâÕ Ø ÕÓÞ ßÞÔàïÔçØÚÐå ÚÐÚ Þ îàØÔØçÕáÚØå ÛØæÐå (ÝÐßàØÜÕà, ÔÐÝÝëÕ Þ ÔÞåÞÔÐå »ØæÕÝרÐâÐ Ø ÔàãÓãî ØÝäÞàÜÐæØî Þ âàÐÝ×ÐÚæØïå). + +(b) ´ÕÛÞÒëÕ ºÞÝâÐÚâÝëÕ »ØæÐ - áÞâàãÔÝØÚØ Ø ßÞÔàïÔçØÚØ »ØæÕÝרÐâÐ, Ú ÚÞâÞàëÜ ÞâÝÞáØâáï ´ÕÛÞÒÐï ºÞÝâÐÚâÝÐï ¸ÝäÞàÜÐæØï. + +(c) ³ÞáãÔÐàáâÒÕÝÝëÙ ÞàÓÐÝ ßÞ ·ÐéØâÕ ´ÐÝÝëå - ÞàÓÐÝ ãßàÐÒÛÕÝØï, áÞ×ÔÐÝÝëÙ Ò áÞÞâÒÕâáâÒØØ á ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר Ò áÞÞâÒÕâáâÒãîéÕÙ áâàÐÝÕ, ØÛØ, ÔÛï áâàÐÝ, ÝÕ ÒåÞÔïéØå Ò µÁ, - ÞàÓÐÝ, ÞáãéÕáâÒÛïîéØÙ ÝÐÔ×Þà ×Ð ×ÐéØâÞÙ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ò íâÞÙ áâàÐÝÕ; ØÛØ (ÔÛï ÒáÕå ÒëèÕãßÞÜïÝãâëå) ÛîÑÐï ÝÐÔÛÕÖÐéØÜ ÞÑàÐ×ÞÜ ãßÞÛÝÞÜÞçÕÝÝÐï ÞàÓÐÝØ×ÐæØï, ïÒÛïîéÐïáï Øå ßàÐÒÞßàÕÕÜÝØÚÞÜ. + +(d) ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר - (i) ßàØÜÕÝØÜÞÕ ÜÕáâÝÞÕ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞ Ø ÔÕÙáâÒãîéØÕ ÝÞàÜÐâØÒÝëÕ ÐÚâë, ÒÒÞÔïéØÕ Ò ÔÕÙáâÒØÕ ´ØàÕÚâØÒã µÁ 95/46/EC (Þ ×ÐéØâÕ ßàÐÒ äØ×ØçÕáÚØå ÛØæ ßàØ ÞÑàÐÑÞâÚÕ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ø áÒÞÑÞÔÝÞÙ ßÕàÕÔÐçÕ âÐÚØå ÔÐÝÝëå) Ø ´ØàÕÚâØÒã µÁ 2002/58/EC (Ò ÞâÝÞèÕÝØØ ÞÑàÐÑÞâÚØ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ø ×ÐéØâë ÚÞÝäØÔÕÝæØÐÛìÝÞáâØ Ò áäÕàÕ íÛÕÚâàÞÝÝëå áàÕÔáâÒ áÒïר), ØÛØ (ii) ÔÛï áâàÐÝ, ÝÕ ÒåÞÔïéØå Ò µÁ, - ßàØÝïâëÕ Ò ÔÐÝÝÞÙ áâàÐÝÕ ×ÐÚÞÝë Ø/ØÛØ ÝÞàÜÐâØÒÝëÕ ÐÚâë, ÚÐáÐîéØÕáï ×ÐéØâë ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ø ×ÐÚÞÝÞÔÐâÕÛìÝÞÓÞ àÕÓãÛØàÞÒÐÝØï Ò áäÕàÕ íÛÕÚâàÞÝÝëå áàÕÔáâÒ áÒïר á ØáßÞÛì×ÞÒÐÝØÕÜ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå, ÒÚÛîçÐï (ÔÛï ÒáÕå ÒëèÕãßÞÜïÝãâëå) ÛîÑëÕ ×ÐÜÕÝïîéØÕ Øå ÝÞàÜÐâØÒÝëÕ ÐÚâë Ø ßÞßàÐÒÚØ Ú ÝØÜ. + +(e) IBM Group - International Business Machines Corporation, èâÐÑ-ÚÒÐàâØàÐ ÚÞâÞàÞÙ ÝÐåÞÔØâáï Ò °àÜÞÝÚÕ, èâÐâ ½ìî-¹ÞàÚ (ÁȰ), ÕÕ ÔÞçÕàÝØÕ ÚÞÜßÐÝØØ Ø Øå áÞÞâÒÕâáâÒãîéØÕ ±Ø×ÝÕá-¿ÐàâÝÕàë Ø áãÑßÞÔàïÔçØÚØ. + +(2) »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ IBM ßàÐÒÞ: + +(a) ÞÑàÐÑÐâëÒÐâì Ø ØáßÞÛì×ÞÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî Ò ßàÕÔÕÛÐå IBM Group ÔÛï æÕÛÕÙ ßÞÔÔÕàÖÚØ »ØæÕÝרÐâÐ, ÒÚÛîçÐï ßàÕÔÞáâÐÒÛÕÝØÕ ãáÛãÓ ßÞÔÔÕàÖÚØ, Ø ÔÛï æÕÛÕÙ ßàÞÔÞÛÖÕÝØï ÔÕÛÞÒëå ÞâÝÞèÕÝØÙ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM Group, ÒÚÛîçÐï, ÑÕ× ÞÓàÐÝØçÕÝØÙ, ÞÑàÐéÕÝØÕ Ú ´ÕÛÞÒëÜ ºÞÝâÐÚâÝëÜ »ØæÐÜ (ßÞ íÛÕÚâàÞÝÝÞÙ ßÞçâÕ ØÛØ ØÝëÜ áßÞáÞÑÞÜ) Ø ÜÐàÚÕâØÝÓ ßàÞÔãÚâÞÒ Ø ãáÛãÓ IBM Group ("ÃÚÐ×ÐÝÝÐï ÆÕÛì"); Ø + +(b) àÐáÚàëÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî ÔàãÓØÜ ãçÐáâÝØÚÐÜ IBM Group âÞÛìÚÞ ÔÛï ÃÚÐ×ÐÝÝÞÙ ÆÕÛØ. + +(3) IBM áÞÓÛÐèÐÕâáï ÞÑàÐÑÐâëÒÐâì Òáî ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî Ò áÞÞâÒÕâáâÒØØ á ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר Ø ØáßÞÛì×ÞÒÐâì ÕÕ âÞÛìÚÞ ÔÛï ÃÚÐ×ÐÝÝÞÙ ÆÕÛØ. + +(4) ² ÞÑêÕÜÕ, âàÕÑãÕÜÞÜ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר, »ØæÕÝרÐâ ×ÐïÒÛïÕâ, çâÞ (a) ßÞÛãçØÛ (ØÛØ ßÞÛãçØâ) ÛîÑëÕ áÞÓÛÐáØï Þâ (Ø ÝÐßàÐÒØÛ (ØÛØ ÝÐßàÐÒØâ) ÛîÑëÕ ãÒÕÔÞÜÛÕÝØï) ´ÕÛÞÒëå ºÞÝâÐÚâÝëå »Øæ, ÚÐÚ âÞ ÝÕÞÑåÞÔØÜÞ ÔÛï âÞÓÞ, çâÞÑë àÐ×àÕèØâì IBM Group ÞÑàÐÑÐâëÒÐâì Ø ØáßÞÛì×ÞÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî ÔÛï ÃÚÐ×ÐÝÝÞÙ ÆÕÛØ. + +(5) »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ IBM ßàÐÒÞ ßÕàÕÔÐÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî ×Ð ßàÕÔÕÛë µÒàÞßÕÙáÚÞÙ ÍÚÞÝÞÜØçÕáÚÞÙ ·ÞÝë ßàØ ãáÛÞÒØØ, çâÞ ßÕàÕÔÐçÐ ÑãÔÕâ ÒëßÞÛÝïâìáï á áÞÑÛîÔÕÝØÕÜ ÔÞÓÞÒÞàÝëå ãáÛÞÒØÙ, ÞÔÞÑàÕÝÝëå ³ÞáãÔÐàáâÒÕÝÝëÜ ÞàÓÐÝÞÜ ßÞ ·ÐéØâÕ ´ÐÝÝëå, ØÛØ Ò ØÝëå áÛãçÐïå, ÚÞÓÔÐ ßÕàÕÔÐçÐ àÐ×àÕèÕÝÐ Ò áÞÞâÒÕâáâÒØØ á ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_sl b/charts/mq-advancedserver/LICENSE_locale/LICENSE_sl new file mode 100644 index 0000000..b29b714 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_sl @@ -0,0 +1,1141 @@ +OBVESTILO + +Ta dokument vsebuje spodnje licenène informacije za veè programov. Vsaka licenèna informacija identificira programe, za katere velja. Veljajo samo tiste licenène informacije za programe, za katere je imetnik licence pridobil pooblastila. + + +============================================== + + +POMEMBNO: POZORNO PREBERITE + +Spodaj sta prikazani dve licenèni pogodbi. + +1. IBM-ova mednarodna licenèna pogodba za vrednotenje programov +2. IBM-ova mednarodna licenèna pogodba za program + +Èe pridobi imetnik licence program za namene produktivne uporabe (razen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja): s klikom spodnjega gumba "Sprejmem" imetnik licence sprejme IBM-ovo mednarodno licenèno pogodbo za programe brez popravkov. + +Èe pridobi imetnik licence program za namen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja (kar skupno imenujemo "vrednotenje"): s klikom spodnjega gumba "Sprejmem imetnik licence sprejme (i) IBM-ovo mednarodno licenèno pogodbo za ocenitev vrednotenje programov ("licenca za vrednotenje") brez popravkov; in (ii) IBM-ovo mednarodno licenèno pogodbo za programe ("IPLA") brez popravkov. + +Licenca za vrednotenje velja v èasu trajanja vrednotenja imetnika licence. + +Pogodba IPLA se uveljavi samodejno, èe se imetnik licence odloèi, da bo programe po konèanem obdobju vrednotenja obdr¾al (ali pridobil dodatne kopije programov za uporabo po konèanem obdobju vrednotenja), s sklepom nabavne pogodbe (to je IBM-ova mednarodna pogodba Passport Advantage ali IBM-ova pogodba Passport Advantage Express). + +Licenca za vrednotenje in pogodba IPLA nista v veljavi soèasno, nobena ne spreminja druge in sta neodvisni ena od druge. + +Celotno besedilo vsake od teh dveh licenènih pogodb sledi. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za vrednotenje programov (Z125-5543-05). + +Ime programa (©tevilka programa): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Za uporabo programa s strani imetnika licence veljajo naslednji standardni pogoji. + +Ocenjevalno obdobje + +Ocenjevalno obdobje se zaène na datum, na katerega imetnik licence poda svoje soglasje z doloèbami te pogodbe, in se izteèe èez 90 dni. + +Podporni programi + +Program je licenciran kot paket, sestavljen iz veè izdelkov, in vkljuèuje podporne programe, doloèene spodaj. Imetnik licence lahko namesti in uporablja tak¹ne podporne programe samo v podporo svoji uporabi glavnega programa na podlagi te pogodbe in znotraj obsega potrdila o upravièenosti za program (razen èe niso kjerkoli v tem dokumentu s podatki o licenciranju ponujene pravice v veèjem obsegu). Fraza "v podporo svoji uporabi" vkljuèuje samo tisto uporabo, ki je potrebna ali kako drugaèe neposredno povezana z licencirano uporabo glavnega programa ali drugega podpornega programa. Podpornih programov ni dovoljeno uporabljati za noben drug namen. Imetnik licence ne sme prenesti ali znova tr¾iti podpornih programov loèeno od glavnega programa. Podpornemu programu so lahko prilo¾ena licenèna doloèila, ki (èe obstajajo) veljajo za uporabo podpornega programa s strani imetnika licence. V primeru neskladij doloèbe iz teh licenènih informacij prevladajo nad doloèbami podpornega programa. Ko pravica imetnika licence za uporabo programa ugasne ali preneha, mora prenehati z uporabo, unièiti ali nemudoma vrniti vse kopije podpornih programov pogodbeni stranki, pri kateri je pridobil program. Èe je imetnik licence prenesel podporne programe, se mora obrniti na stranko, pri kateri je pridobil program. Èe ¾eli imetnik licence licencirati podporne programe za kakr¹nokoli uporabo, ki presega zgornje omejitve, naj se za pridobitev ustrezne licence obrne na IBM-ovega prodajnega predstavnika ali na stranko, pri kateri je pridobil program. + +Sledijo podporni programi, ki so licencirani s programom: +IBM WebSphere Application Server Liberty V17.0 + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za program (Z125-3301-14). + +Ime programa (©tevilka programa): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Za uporabo programa s strani imetnika licence veljajo naslednji standardni pogoji. + +Omejena pravica do uporabe + +Kot je opisano v dokumentu Mednarodna licenèna pogodba za program ("IPLA") in teh licenènih informacijah, dru¾ba IBM imetniku licence podeljuje omejeno pravico za uporabo programa. Ta pravica je omejena z ravnijo poobla¹èene uporabe, kot je enota vrednosti procesorja ("PVU"), enota vrednosti vira ("RVU"), enota vrednosti ("VU") ali druga doloèena raven uporabe, ki jo plaèuje imetnik licence, kot je razvidno iz dokazila o upravièenosti. Uporaba imetnika licence je lahko omejena tudi na doloèen raèunalnik ali le v obliki podpornega programa oziroma zanjo veljajo druge omejitve. Ker imetnik licence ni plaèal polne cene programa, brez doplaèila programa ne sme uporabljati na noben drug naèin. Imetnik licence poleg tega nima pooblastil za uporabo programa za namen izvajanja komercialnih storitev IT za katero koli tretjo osebo, za omogoèanje komercialnega gostovanja ali dodeljevanja èasa oziroma za podlicenciranje ali najem programa, razen èe je to izrecno navedeno v ustreznih pogodbah, po katerih imetnik licence pridobi pooblastila za uporabo programa. Imetniku licence so lahko na voljo dodatne pravice na podlagi doplaèila oziroma razliènih ali dodatnih pogojev. Dru¾ba IBM si pridr¾uje pravico odloèanja o tem, ali bo imetniku licence omogoèila tak¹ne dodatne pravice. + +Specifikacije + +Specifikacije tega programa so na voljo v skupnih razdelkih Opis in tehniène informacije v obvestilih za program. + +Podporni programi + +Program je licenciran kot paket, sestavljen iz veè izdelkov, in vkljuèuje podporne programe, doloèene spodaj. Imetnik licence lahko namesti in uporablja tak¹ne podporne programe samo v podporo svoji uporabi glavnega programa na podlagi te pogodbe in znotraj obsega potrdila o upravièenosti za program (razen èe niso kjerkoli v tem dokumentu s podatki o licenciranju ponujene pravice v veèjem obsegu). Fraza "v podporo svoji uporabi" vkljuèuje samo tisto uporabo, ki je potrebna ali kako drugaèe neposredno povezana z licencirano uporabo glavnega programa ali drugega podpornega programa. Podpornih programov ni dovoljeno uporabljati za noben drug namen. Imetnik licence ne sme prenesti ali znova tr¾iti podpornih programov loèeno od glavnega programa. Podpornemu programu so lahko prilo¾ena licenèna doloèila, ki (èe obstajajo) veljajo za uporabo podpornega programa s strani imetnika licence. V primeru neskladij doloèbe iz teh licenènih informacij prevladajo nad doloèbami podpornega programa. Ko pravica imetnika licence za uporabo programa ugasne ali preneha, mora prenehati z uporabo, unièiti ali nemudoma vrniti vse kopije podpornih programov pogodbeni stranki, pri kateri je pridobil program. Èe je imetnik licence prenesel podporne programe, se mora obrniti na stranko, pri kateri je pridobil program. Èe ¾eli imetnik licence licencirati podporne programe za kakr¹nokoli uporabo, ki presega zgornje omejitve, naj se za pridobitev ustrezne licence obrne na IBM-ovega prodajnega predstavnika ali na stranko, pri kateri je pridobil program. + +Sledijo podporni programi, ki so licencirani s programom: +IBM WebSphere Application Server Liberty V17.0 + +Komponente, ki niso zahtevane za vzpostavitev potrebnih pooblastil + +Pri doloèanju ¹tevila pooblastil, ki jih potrebuje imetnik licence za namestitev ali uporabo programa, ni upo¹tevana namestitev ali uporaba naslednjih komponent programa. Z drugimi besedami povedano to pomeni, da lahko imetnik licence namesti in uporablja naslednje komponente programa na podlagi licenènih pogojev, vendar se te komponente ne uporabljajo za doloèanje ¹tevila pooblastil, potrebnih za program. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Enote, ki jih je mogoèe redistribuirati + +Èe vkljuèuje program komponente, ki jih je mogoèe redistribuirati, bodo doloèene v datoteki REDIST, ki spremlja program. Poleg licenènih pravic, ki so dodeljene v pogodbi, lahko imetnik licence distribuira enote, ki jih je mogoèe redistribuirati, v skladu z naslednjimi doloèbami: +1) Redistribucija mora biti ponujena v obliki objektne kode in mora upo¹tevati vse smernice, navodila in specifikacije iz datoteke REDIST ali dokumentacije programa; +2) Èe spremljajoèa dokumentacija programa imetniku licence izrecno dovoljuje spreminjanje enot, ki jih je mogoèe redistribuirati, morajo tak¹ni popravki upo¹tevati vse smernice, navodila in specifikacije v tej dokumentaciji, in ti popravki (èe obstajajo) morajo biti obravnavani kot enote, ki jih je mogoèe redistribuirati; +3) Imetnik licence lahko distribuira enote, ki jih je mogoèe redistribuirati, samo kot del svoje aplikacije, ki je bila razvita s pomoèjo programa ("aplikacija imetnika licence"), in samo za nudenje podpore strankam imetnika licence v povezavi z njihovo uporabo aplikacije imetnika licence. Aplikacija imetnika licence mora predstavljati pomembno dodatno vrednost, tako da enote, ki jih je mogoèe redistribuirati, ne predstavljajo glavnega motiva, zaradi katerega bi konèni uporabniki pridobili izdelek programske opreme imetnika licence; +4) Èe vkljuèujejo enote, ki jih je mogoèe redistribuirati, izvajalno okolje Java, mora imetnik licence s svojo aplikacijo vkljuèiti tudi druge nejavanska enote, ki jih je mogoèe redistribuirati, razen èe je aplikacija oblikovana tako, da se izvaja samo na splo¹nih raèunalni¹kih napravah (to so prenosniki, namizni raèunalniki in stre¾niki) in ne na roènih ali drugih prodornih napravah (to so naprave, ki vsebujejo mikroprocesor, vendar raèunalni¹tvo ni njihov glavni namen); +5) Imetnik licence ne sme odstraniti nobenih datotek z avtorskimi pravicami ali obvestili, vsebovanimi v enotah, ki jih je mogoèe redistribuirati; +6) Imetnik licence mora zavarovati IBM, njegove dobavitelje ali distributerje pred kakr¹nimikoli zahtevki, vlo¾enimi zaradi uporabe ali distribucije aplikacije imetnika licence; +7) Imetnik licence ne sme uporabiti enakega imena poti kot izvirne datotek/moduli enot, ki jih je mogoèe redistribuirati; +8) Imetnik licence ne sme uporabljati imen ali blagovnih znamk IBM-a, njegovih dobaviteljev ali distributerjev v povezavi s tr¾enjem svoje aplikacije, ne da bi pred tem pridobil pisno soglasje IBM-a, tega dobavitelja ali distributerja; +9) IBM, njegovi dobavitelji in distributerji nudijo enote, ki jih je mogoèe redistribuirati, in povezano dokumentacijo, brez obveze za nudenje podpore in "TAK©NE, KAK©RNI SO", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO NASLOVA, NEKR©ENJA ALI NEOVIRANJA, IN NAKAZANE GARANCIJE IN POGOJE TR®NOSTI IN UPORABNOSTI ZA DOLOÈEN NAMEN; +10) Imetnik licence je odgovoren za vso tehnièno podporo za aplikacijo imetnika licence in za kakr¹nekoli popravke v enotah, ki jih je mogoèe redistribuirati; in +11) Imetnik licence mora v licenèni pogodbi, ki jo sklene s konènim uporabnikom aplikacije, konènega uporabnika obvestiti, da enot, ki jih je mogoèe redistribuirati, ali njihovih popravkov, ni dovoljeno i) uporabljati za noben drug namen, razen za omogoèenje aplikacije imetnika licence, ii) kopirati (razen za namene varnostnega kopiranja), iii) nadalje distribuirati ali prenesti brez aplikacije imetnika licence ali iv) vzvratno sestaviti, vzvratno prevesti ali kako drugaèe prevesti, razen èe to izrecno dopu¹èa zakon in brez mo¾nosti pogodbene odpovedi. Poleg tega mora biti licenèna pogodba imetnika licence vsaj v tolik¹ni meri ¹èititi IBM kot doloèbe te pogodbe. + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + +Za izvorne komponente in vzorèno gradivo, navedeno v datoteki REDIST programa, lahko imetnik licence redistribuira spremenjene razlièice teh izvornih komponent ali vzorènega gradiva v skladu z doloèbami te licence in katerihkoli navodil iz datoteke REDIST. + +Za uporabo programa s strani imetnika licence morda veljajo naslednje merske enote. + +Enota vrednosti procesorja (PVU) + +Enota vrednosti procesorja (PVU) je merska enota, na podlagi katere je lahko licenciran program. ©tevilo zahtevanih pooblastil PVU temelji na procesorski tehnologiji (definirani v tabeli PVU-jev s proizvajalcem procesorja, znamko, tipom in ¹tevilko modela na spletnem naslovu http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) in na ¹tevilu procesorjev, ki so na voljo za program. Za namen licenciranja, ki temelji na PVU-jih, definira IBM kot procesor vsako procesorsko jedro na èipu. Tako ima na primer procesorski èip z dvema jedroma dve procesorski jedri. + +Imetnik licence lahko namesti program z licenciranjem celotne kapacitete ali z licenciranjem virtualizacijske kapacitete (podkapacitete), ki je v skladu z doloèbami za licenciranje podkapacitete Passport Advantage (glejte spodnjo spletno stran). èe uporablja imetnik licence licenciranje celotne kapacitete, mora pridobiti pooblastila PVU, ki obsegajo vsa aktivirana procesorska jedra* v okolju fiziène strojne opreme, ki so na voljo za program ali jih ta upravlja, razen za tiste stre¾nike, s katerih je bil program trajno odstranjen. Èe uporablja imetnik licence licenciranje virtualizacijske kapacitete, mora pridobiti ¹tevilo pooblastil, ki zadostuje za kritje vseh aktiviranih procesorskih jeder, ki so na voljo za program ali jih ta upravlja, kot je definirano glede na pravila za ¹tetje licenc za virtualizacijsko kapaciteto na naslovu http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivirano procesorsko jedro je procesorsko jedro, ki je na voljo za uporabo na fiziènem ali navideznem stre¾niku, ne glede na to, ali je kapaciteta procesorskega jedra lahko omejena ali je omejena z virtualizacijskimi tehnologijami, ukazi operacijskega sistema, nastavitvami BIOS ali podobnimi omejitvami. + +Navidezno procesorsko jedro + +Navidezno procesorsko jedro je merska enota, na podlagi katere je mogoèe licencirati program. Fizièni stre¾nik je fizièni raèunalnik, sestavljen iz procesnih enot, pomnilnika in zmo¾nosti vhoda/izhoda, ki izvaja zahtevane postopke, ukaze ali aplikacije za eno ali veè uporabni¹kih ali odjemalskih naprav. Èe se uporabljajo omare, ohi¹ja stre¾ni¹kih rezin ali druga podobna oprema, ¹teje vsaka loèena fizièna naprava (to je rezina ali ohi¹na naprava), ki vsebuje zahtevane komponente, kot loèen fizièni stre¾nik. Navidezni stre¾nik je navidezni raèunalnik, ustvarjen s particioniranjem sredstev, ki so na voljo fiziènemu stre¾niku, ali neparticioniran fizièni stre¾nik. Procesorsko jedro (obièajno imenovano procesor ali centralna procesna enota) je funkcionalna enota znotraj raèunalni¹ke naprave, ki interpretira in izvaja navodila. Procesorsko jedro je sestavljeno iz vsaj ene enote za nadziranje navodil in ene ali veè aritmetiènih oziroma logiènih enot. Navidezno procesorsko jedro je procesorsko jedro v neparticioniranem fiziènem stre¾niku ali navidezno jedro, ki je dodeljeno virtualnemu stre¾niku. Imetnik licence mora pridobiti pooblastilo za vsako navidezno procesorsko jedro, ki je na voljo programu. + +Imetnik licence mora imeti za vsak fizièni stre¾nik zadostna pooblastila za 1) vsoto vseh razpolo¾ljivih navideznih procesorskih jeder v vseh navideznih stre¾nikih, ki so na voljo programu, ali 2) vsa razpolo¾ljiva procesorska jedra v fiziènem stre¾niku. + +Za uporabo programa s strani imetnike licence poleg zgoraj navedenih pogojev veljajo tudi naslednji pogoji. + +Konfiguracije mirujoèega stanja pripravljenosti + +Za namene tega razdelka je konfiguracija "mirujoèega stanja pripravljenosti" tista konfiguracija, kjer je kopija programa name¹èena v stre¾nik, ki je del re¹itve visoke razpolo¾ljivosti in je stre¾nik, na katerega bo program preklopil v primeru, da kopija programa v aktivnem stre¾niku ni veè uporabna. Stre¾nik je "mirujoè" le, èe se pred preklopom uporablja izkljuèno za skrbni¹ka dejanja, ki pomagajo pri scenarijih preklopa. + +Programa ni mogoèe namestiti na stre¾nik v mirujoèem stanju pripravljenosti, èe ni ustrezno licenciran. + +Èe se program uporablja v konfiguraciji mirujoèega stanja v pripravljenosti z veè primerki funkcije upravljalnika èakalne vrste, se lahko kopija programa za namen varnostnega kopiranja izvaja v stre¾niku z mirujoèim stanjem pripravljenosti, pri èemer mora ostati "mirujoèa" in se ne sme uporabljati za izvajanje nobenih proizvodnih del, razen èe aktivni stre¾nik preklopi na stre¾nik v mirujoèem stanju pripravljenosti, ko se lahko kopija v mirujoèem stanju pripravljenosti uporablja za izvajanje proizvodnih del v obdobju preklopa. + +Èe se program uporablja v konfiguraciji mirujoèega stanja pripravljenosti z drugimi sistemi visoke razpolo¾ljivosti, se lahko kopija programa za namene varnostnega kopiranja nahaja v stre¾niku z mirujoèim stanjem pripravljenosti, pri èemer ne sme biti zagnana (zato se ne sme uporabljati za izvajanje nobenih proizvodnih del), vendar jo bodo komponente visoke razpolo¾ljivosti samodejno zagnale v primeru preklopa aktivnega stre¾nika, ko se lahko kopija v mirujoèem stanju pripravljenosti uporablja za izvajanje proizvodnih del v obdobju preklopa. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +POMEMBNO: POZORNO PREBERITE + +Spodaj sta prikazani dve licenèni pogodbi. + +1. IBM-ova mednarodna licenèna pogodba za vrednotenje programov +2. IBM-ova mednarodna licenèna pogodba za program + +Èe pridobi imetnik licence program za namene produktivne uporabe (razen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja): s klikom spodnjega gumba "Sprejmem" imetnik licence sprejme IBM-ovo mednarodno licenèno pogodbo za programe brez popravkov. + +Èe pridobi imetnik licence program za namen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja (kar skupno imenujemo "vrednotenje"): s klikom spodnjega gumba "Sprejmem imetnik licence sprejme (i) IBM-ovo mednarodno licenèno pogodbo za ocenitev vrednotenje programov ("licenca za vrednotenje") brez popravkov; in (ii) IBM-ovo mednarodno licenèno pogodbo za programe ("IPLA") brez popravkov. + +Licenca za vrednotenje velja v èasu trajanja vrednotenja imetnika licence. + +Pogodba IPLA se uveljavi samodejno, èe se imetnik licence odloèi, da bo programe po konèanem obdobju vrednotenja obdr¾al (ali pridobil dodatne kopije programov za uporabo po konèanem obdobju vrednotenja), s sklepom nabavne pogodbe (to je IBM-ova mednarodna pogodba Passport Advantage ali IBM-ova pogodba Passport Advantage Express). + +Licenca za vrednotenje in pogodba IPLA nista v veljavi soèasno, nobena ne spreminja druge in sta neodvisni ena od druge. + +Celotno besedilo vsake od teh dveh licenènih pogodb sledi. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za vrednotenje programov (Z125-5543-05). + +Ime programa (©tevilka programa): +IBM MQ Advanced V9.0.3 (Evaluation) + +Za uporabo programa s strani imetnika licence veljajo naslednji standardni pogoji. + +Ocenjevalno obdobje + +Ocenjevalno obdobje se zaène na datum, na katerega imetnik licence poda svoje soglasje z doloèbami te pogodbe, in se izteèe èez 90 dni. + +Paketni programi + +Program je licenciran kot paket veè produktov, ki vsebuje spodaj navedene paketne programe. Imetnik licence je poobla¹èen za namestitev in uporabo takih paketnih programov v okviru omejitev v dokazilih o upravièenosti za program in kot je doloèeno v tem dokumentu z licenènimi podatki. Imetnik licence ni poobla¹èen za prenos ali ponovno tr¾enje paketnih programov loèeno od paketa veè produktov. Paketni program lahko vkljuèuje morebitna licenèna doloèila, ki veljajo za imetnika licence pri uporabi tega paketnega programa. V primeru navzkri¾ja doloèila v tem dokumentu z licenènimi podatki prevladajo nad doloèili za paketni program. Ko pravica imetnika licence do uporabe programa poteèe ali preneha biti veljavna, mora imetnik licence prenehati uporabljati vse kopije paketnih programov in jih unièiti ali nemudoma vrniti ponudniku, od katerega je pridobil program. Èe je imetnik licence prenesel paketne programe, se mora obrniti na ponudnika, od katerega je pridobil program. Èe ¾eli imetnik licence licencirati paketne programe za uporabo, ki ni omejena z zgoraj navedenimi doloèili, naj se za pridobitev ustrezne licence obrne na IBM-ovega prodajnega predstavnika ali ponudnika, od katerega je imetnik licence pridobil program. + +S programom so licencirani spodaj navedeni paketni programi: +IBM MQ V9.0.3 + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za program (Z125-3301-14). + +Ime programa (©tevilka programa): +IBM MQ Advanced V9.0.3 (5724-H72) + +Za uporabo programa s strani imetnika licence veljajo naslednji standardni pogoji. + +Omejena pravica do uporabe + +Kot je opisano v dokumentu Mednarodna licenèna pogodba za program ("IPLA") in teh licenènih informacijah, dru¾ba IBM imetniku licence podeljuje omejeno pravico za uporabo programa. Ta pravica je omejena z ravnijo poobla¹èene uporabe, kot je enota vrednosti procesorja ("PVU"), enota vrednosti vira ("RVU"), enota vrednosti ("VU") ali druga doloèena raven uporabe, ki jo plaèuje imetnik licence, kot je razvidno iz dokazila o upravièenosti. Uporaba imetnika licence je lahko omejena tudi na doloèen raèunalnik ali le v obliki podpornega programa oziroma zanjo veljajo druge omejitve. Ker imetnik licence ni plaèal polne cene programa, brez doplaèila programa ne sme uporabljati na noben drug naèin. Imetnik licence poleg tega nima pooblastil za uporabo programa za namen izvajanja komercialnih storitev IT za katero koli tretjo osebo, za omogoèanje komercialnega gostovanja ali dodeljevanja èasa oziroma za podlicenciranje ali najem programa, razen èe je to izrecno navedeno v ustreznih pogodbah, po katerih imetnik licence pridobi pooblastila za uporabo programa. Imetniku licence so lahko na voljo dodatne pravice na podlagi doplaèila oziroma razliènih ali dodatnih pogojev. Dru¾ba IBM si pridr¾uje pravico odloèanja o tem, ali bo imetniku licence omogoèila tak¹ne dodatne pravice. + +Specifikacije + +Specifikacije tega programa so na voljo v skupnih razdelkih Opis in tehniène informacije v obvestilih za program. + +Paketni programi + +Program je licenciran kot paket veè produktov, ki vsebuje spodaj navedene paketne programe. Imetnik licence je poobla¹èen za namestitev in uporabo takih paketnih programov v okviru omejitev v dokazilih o upravièenosti za program in kot je doloèeno v tem dokumentu z licenènimi podatki. Imetnik licence ni poobla¹èen za prenos ali ponovno tr¾enje paketnih programov loèeno od paketa veè produktov. Paketni program lahko vkljuèuje morebitna licenèna doloèila, ki veljajo za imetnika licence pri uporabi tega paketnega programa. V primeru navzkri¾ja doloèila v tem dokumentu z licenènimi podatki prevladajo nad doloèili za paketni program. Ko pravica imetnika licence do uporabe programa poteèe ali preneha biti veljavna, mora imetnik licence prenehati uporabljati vse kopije paketnih programov in jih unièiti ali nemudoma vrniti ponudniku, od katerega je pridobil program. Èe je imetnik licence prenesel paketne programe, se mora obrniti na ponudnika, od katerega je pridobil program. Èe ¾eli imetnik licence licencirati paketne programe za uporabo, ki ni omejena z zgoraj navedenimi doloèili, naj se za pridobitev ustrezne licence obrne na IBM-ovega prodajnega predstavnika ali ponudnika, od katerega je imetnik licence pridobil program. + +S programom so licencirani spodaj navedeni paketni programi: +IBM MQ V9.0.3 + +Komponente, ki niso zahtevane za vzpostavitev potrebnih pooblastil + +Pri doloèanju ¹tevila pooblastil, ki jih potrebuje imetnik licence za namestitev ali uporabo programa, ni upo¹tevana namestitev ali uporaba naslednjih komponent programa. Z drugimi besedami povedano to pomeni, da lahko imetnik licence namesti in uporablja naslednje komponente programa na podlagi licenènih pogojev, vendar se te komponente ne uporabljajo za doloèanje ¹tevila pooblastil, potrebnih za program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + +Za uporabo programa s strani imetnika licence morda veljajo naslednje merske enote. + +Enota vrednosti procesorja (PVU) + +Enota vrednosti procesorja (PVU) je merska enota, na podlagi katere je lahko licenciran program. ©tevilo zahtevanih pooblastil PVU temelji na procesorski tehnologiji (definirani v tabeli PVU-jev s proizvajalcem procesorja, znamko, tipom in ¹tevilko modela na spletnem naslovu http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) in na ¹tevilu procesorjev, ki so na voljo za program. Za namen licenciranja, ki temelji na PVU-jih, definira IBM kot procesor vsako procesorsko jedro na èipu. Tako ima na primer procesorski èip z dvema jedroma dve procesorski jedri. + +Imetnik licence lahko namesti program z licenciranjem celotne kapacitete ali z licenciranjem virtualizacijske kapacitete (podkapacitete), ki je v skladu z doloèbami za licenciranje podkapacitete Passport Advantage (glejte spodnjo spletno stran). èe uporablja imetnik licence licenciranje celotne kapacitete, mora pridobiti pooblastila PVU, ki obsegajo vsa aktivirana procesorska jedra* v okolju fiziène strojne opreme, ki so na voljo za program ali jih ta upravlja, razen za tiste stre¾nike, s katerih je bil program trajno odstranjen. Èe uporablja imetnik licence licenciranje virtualizacijske kapacitete, mora pridobiti ¹tevilo pooblastil, ki zadostuje za kritje vseh aktiviranih procesorskih jeder, ki so na voljo za program ali jih ta upravlja, kot je definirano glede na pravila za ¹tetje licenc za virtualizacijsko kapaciteto na naslovu http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivirano procesorsko jedro je procesorsko jedro, ki je na voljo za uporabo na fiziènem ali navideznem stre¾niku, ne glede na to, ali je kapaciteta procesorskega jedra lahko omejena ali je omejena z virtualizacijskimi tehnologijami, ukazi operacijskega sistema, nastavitvami BIOS ali podobnimi omejitvami. + +Navidezno procesorsko jedro + +Navidezno procesorsko jedro je merska enota, na podlagi katere je mogoèe licencirati program. Fizièni stre¾nik je fizièni raèunalnik, sestavljen iz procesnih enot, pomnilnika in zmo¾nosti vhoda/izhoda, ki izvaja zahtevane postopke, ukaze ali aplikacije za eno ali veè uporabni¹kih ali odjemalskih naprav. Èe se uporabljajo omare, ohi¹ja stre¾ni¹kih rezin ali druga podobna oprema, ¹teje vsaka loèena fizièna naprava (to je rezina ali ohi¹na naprava), ki vsebuje zahtevane komponente, kot loèen fizièni stre¾nik. Navidezni stre¾nik je navidezni raèunalnik, ustvarjen s particioniranjem sredstev, ki so na voljo fiziènemu stre¾niku, ali neparticioniran fizièni stre¾nik. Procesorsko jedro (obièajno imenovano procesor ali centralna procesna enota) je funkcionalna enota znotraj raèunalni¹ke naprave, ki interpretira in izvaja navodila. Procesorsko jedro je sestavljeno iz vsaj ene enote za nadziranje navodil in ene ali veè aritmetiènih oziroma logiènih enot. Navidezno procesorsko jedro je procesorsko jedro v neparticioniranem fiziènem stre¾niku ali navidezno jedro, ki je dodeljeno virtualnemu stre¾niku. Imetnik licence mora pridobiti pooblastilo za vsako navidezno procesorsko jedro, ki je na voljo programu. + +Imetnik licence mora imeti za vsak fizièni stre¾nik zadostna pooblastila za 1) vsoto vseh razpolo¾ljivih navideznih procesorskih jeder v vseh navideznih stre¾nikih, ki so na voljo programu, ali 2) vsa razpolo¾ljiva procesorska jedra v fiziènem stre¾niku. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +POMEMBNO: POZORNO PREBERITE + +Spodaj sta prikazani dve licenèni pogodbi. + +1. IBM-ova mednarodna licenèna pogodba za vrednotenje programov +2. IBM-ova mednarodna licenèna pogodba za program + +Èe pridobi imetnik licence program za namene produktivne uporabe (razen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja): s klikom spodnjega gumba "Sprejmem" imetnik licence sprejme IBM-ovo mednarodno licenèno pogodbo za programe brez popravkov. + +Èe pridobi imetnik licence program za namen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja (kar skupno imenujemo "vrednotenje"): s klikom spodnjega gumba "Sprejmem imetnik licence sprejme (i) IBM-ovo mednarodno licenèno pogodbo za ocenitev vrednotenje programov ("licenca za vrednotenje") brez popravkov; in (ii) IBM-ovo mednarodno licenèno pogodbo za programe ("IPLA") brez popravkov. + +Licenca za vrednotenje velja v èasu trajanja vrednotenja imetnika licence. + +Pogodba IPLA se uveljavi samodejno, èe se imetnik licence odloèi, da bo programe po konèanem obdobju vrednotenja obdr¾al (ali pridobil dodatne kopije programov za uporabo po konèanem obdobju vrednotenja), s sklepom nabavne pogodbe (to je IBM-ova mednarodna pogodba Passport Advantage ali IBM-ova pogodba Passport Advantage Express). + +Licenca za vrednotenje in pogodba IPLA nista v veljavi soèasno, nobena ne spreminja druge in sta neodvisni ena od druge. + +Celotno besedilo vsake od teh dveh licenènih pogodb sledi. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za vrednotenje programov (Z125-5543-05). + +Ime programa (©tevilka programa): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Za uporabo programa s strani imetnika licence veljajo naslednji standardni pogoji. + +Ocenjevalno obdobje + +Ocenjevalno obdobje se zaène na datum, na katerega imetnik licence poda svoje soglasje z doloèbami te pogodbe, in se izteèe èez 90 dni. + +Paketni programi + +Program je licenciran kot paket veè produktov, ki vsebuje spodaj navedene paketne programe. Imetnik licence je poobla¹èen za namestitev in uporabo takih paketnih programov v okviru omejitev v dokazilih o upravièenosti za program in kot je doloèeno v tem dokumentu z licenènimi podatki. Imetnik licence ni poobla¹èen za prenos ali ponovno tr¾enje paketnih programov loèeno od paketa veè produktov. Paketni program lahko vkljuèuje morebitna licenèna doloèila, ki veljajo za imetnika licence pri uporabi tega paketnega programa. V primeru navzkri¾ja doloèila v tem dokumentu z licenènimi podatki prevladajo nad doloèili za paketni program. Ko pravica imetnika licence do uporabe programa poteèe ali preneha biti veljavna, mora imetnik licence prenehati uporabljati vse kopije paketnih programov in jih unièiti ali nemudoma vrniti ponudniku, od katerega je pridobil program. Èe je imetnik licence prenesel paketne programe, se mora obrniti na ponudnika, od katerega je pridobil program. Èe ¾eli imetnik licence licencirati paketne programe za uporabo, ki ni omejena z zgoraj navedenimi doloèili, naj se za pridobitev ustrezne licence obrne na IBM-ovega prodajnega predstavnika ali ponudnika, od katerega je imetnik licence pridobil program. + +S programom so licencirani spodaj navedeni paketni programi: +IBM MQ Idle Standby V9.0.3 + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za program (Z125-3301-14). + +Ime programa (©tevilka programa): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Za uporabo programa s strani imetnika licence veljajo naslednji standardni pogoji. + +Omejena pravica do uporabe + +Kot je opisano v dokumentu Mednarodna licenèna pogodba za program ("IPLA") in teh licenènih informacijah, dru¾ba IBM imetniku licence podeljuje omejeno pravico za uporabo programa. Ta pravica je omejena z ravnijo poobla¹èene uporabe, kot je enota vrednosti procesorja ("PVU"), enota vrednosti vira ("RVU"), enota vrednosti ("VU") ali druga doloèena raven uporabe, ki jo plaèuje imetnik licence, kot je razvidno iz dokazila o upravièenosti. Uporaba imetnika licence je lahko omejena tudi na doloèen raèunalnik ali le v obliki podpornega programa oziroma zanjo veljajo druge omejitve. Ker imetnik licence ni plaèal polne cene programa, brez doplaèila programa ne sme uporabljati na noben drug naèin. Imetnik licence poleg tega nima pooblastil za uporabo programa za namen izvajanja komercialnih storitev IT za katero koli tretjo osebo, za omogoèanje komercialnega gostovanja ali dodeljevanja èasa oziroma za podlicenciranje ali najem programa, razen èe je to izrecno navedeno v ustreznih pogodbah, po katerih imetnik licence pridobi pooblastila za uporabo programa. Imetniku licence so lahko na voljo dodatne pravice na podlagi doplaèila oziroma razliènih ali dodatnih pogojev. Dru¾ba IBM si pridr¾uje pravico odloèanja o tem, ali bo imetniku licence omogoèila tak¹ne dodatne pravice. + +Specifikacije + +Specifikacije tega programa so na voljo v skupnih razdelkih Opis in tehniène informacije v obvestilih za program. + +Paketni programi + +Program je licenciran kot paket veè produktov, ki vsebuje spodaj navedene paketne programe. Imetnik licence je poobla¹èen za namestitev in uporabo takih paketnih programov v okviru omejitev v dokazilih o upravièenosti za program in kot je doloèeno v tem dokumentu z licenènimi podatki. Imetnik licence ni poobla¹èen za prenos ali ponovno tr¾enje paketnih programov loèeno od paketa veè produktov. Paketni program lahko vkljuèuje morebitna licenèna doloèila, ki veljajo za imetnika licence pri uporabi tega paketnega programa. V primeru navzkri¾ja doloèila v tem dokumentu z licenènimi podatki prevladajo nad doloèili za paketni program. Ko pravica imetnika licence do uporabe programa poteèe ali preneha biti veljavna, mora imetnik licence prenehati uporabljati vse kopije paketnih programov in jih unièiti ali nemudoma vrniti ponudniku, od katerega je pridobil program. Èe je imetnik licence prenesel paketne programe, se mora obrniti na ponudnika, od katerega je pridobil program. Èe ¾eli imetnik licence licencirati paketne programe za uporabo, ki ni omejena z zgoraj navedenimi doloèili, naj se za pridobitev ustrezne licence obrne na IBM-ovega prodajnega predstavnika ali ponudnika, od katerega je imetnik licence pridobil program. + +S programom so licencirani spodaj navedeni paketni programi: +IBM MQ Idle Standby V9.0.3 + +Komponente, ki niso zahtevane za vzpostavitev potrebnih pooblastil + +Pri doloèanju ¹tevila pooblastil, ki jih potrebuje imetnik licence za namestitev ali uporabo programa, ni upo¹tevana namestitev ali uporaba naslednjih komponent programa. Z drugimi besedami povedano to pomeni, da lahko imetnik licence namesti in uporablja naslednje komponente programa na podlagi licenènih pogojev, vendar se te komponente ne uporabljajo za doloèanje ¹tevila pooblastil, potrebnih za program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + +Za uporabo programa s strani imetnika licence morda veljajo naslednje merske enote. + +Enota vrednosti procesorja (PVU) + +Enota vrednosti procesorja (PVU) je merska enota, na podlagi katere je lahko licenciran program. ©tevilo zahtevanih pooblastil PVU temelji na procesorski tehnologiji (definirani v tabeli PVU-jev s proizvajalcem procesorja, znamko, tipom in ¹tevilko modela na spletnem naslovu http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) in na ¹tevilu procesorjev, ki so na voljo za program. Za namen licenciranja, ki temelji na PVU-jih, definira IBM kot procesor vsako procesorsko jedro na èipu. Tako ima na primer procesorski èip z dvema jedroma dve procesorski jedri. + +Imetnik licence lahko namesti program z licenciranjem celotne kapacitete ali z licenciranjem virtualizacijske kapacitete (podkapacitete), ki je v skladu z doloèbami za licenciranje podkapacitete Passport Advantage (glejte spodnjo spletno stran). èe uporablja imetnik licence licenciranje celotne kapacitete, mora pridobiti pooblastila PVU, ki obsegajo vsa aktivirana procesorska jedra* v okolju fiziène strojne opreme, ki so na voljo za program ali jih ta upravlja, razen za tiste stre¾nike, s katerih je bil program trajno odstranjen. Èe uporablja imetnik licence licenciranje virtualizacijske kapacitete, mora pridobiti ¹tevilo pooblastil, ki zadostuje za kritje vseh aktiviranih procesorskih jeder, ki so na voljo za program ali jih ta upravlja, kot je definirano glede na pravila za ¹tetje licenc za virtualizacijsko kapaciteto na naslovu http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivirano procesorsko jedro je procesorsko jedro, ki je na voljo za uporabo na fiziènem ali navideznem stre¾niku, ne glede na to, ali je kapaciteta procesorskega jedra lahko omejena ali je omejena z virtualizacijskimi tehnologijami, ukazi operacijskega sistema, nastavitvami BIOS ali podobnimi omejitvami. + +Za uporabo programa s strani imetnike licence poleg zgoraj navedenih pogojev veljajo tudi naslednji pogoji. + +Konfiguracije mirujoèega stanja pripravljenosti + +Za namene tega razdelka je konfiguracija "mirujoèega stanja pripravljenosti" tista konfiguracija, kjer je kopija programa name¹èena v stre¾nik, ki je del re¹itve visoke razpolo¾ljivosti in je stre¾nik, na katerega bo program preklopil v primeru, da kopija programa v aktivnem stre¾niku ni veè uporabna. Stre¾nik je "mirujoè" le, èe se pred preklopom uporablja izkljuèno za skrbni¹ka dejanja, ki pomagajo pri scenarijih preklopa. + +Programa ni mogoèe namestiti na stre¾nik v mirujoèem stanju pripravljenosti, èe ni ustrezno licenciran. + +Èe se program uporablja v konfiguraciji mirujoèega stanja v pripravljenosti z veè primerki funkcije upravljalnika èakalne vrste, se lahko kopija programa za namen varnostnega kopiranja izvaja v stre¾niku z mirujoèim stanjem pripravljenosti, pri èemer mora ostati "mirujoèa" in se ne sme uporabljati za izvajanje nobenih proizvodnih del, razen èe aktivni stre¾nik preklopi na stre¾nik v mirujoèem stanju pripravljenosti, ko se lahko kopija v mirujoèem stanju pripravljenosti uporablja za izvajanje proizvodnih del v obdobju preklopa. + +Èe se program uporablja v konfiguraciji mirujoèega stanja pripravljenosti z drugimi sistemi visoke razpolo¾ljivosti, se lahko kopija programa za namene varnostnega kopiranja nahaja v stre¾niku z mirujoèim stanjem pripravljenosti, pri èemer ne sme biti zagnana (zato se ne sme uporabljati za izvajanje nobenih proizvodnih del), vendar jo bodo komponente visoke razpolo¾ljivosti samodejno zagnale v primeru preklopa aktivnega stre¾nika, ko se lahko kopija v mirujoèem stanju pripravljenosti uporablja za izvajanje proizvodnih del v obdobju preklopa. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +POMEMBNO: POZORNO PREBERITE + +Spodaj sta prikazani dve licenèni pogodbi. + +1. IBM-ova mednarodna licenèna pogodba za vrednotenje programov +2. IBM-ova mednarodna licenèna pogodba za program + +Èe pridobi imetnik licence program za namene produktivne uporabe (razen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja): s klikom spodnjega gumba "Sprejmem" imetnik licence sprejme IBM-ovo mednarodno licenèno pogodbo za programe brez popravkov. + +Èe pridobi imetnik licence program za namen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja (kar skupno imenujemo "vrednotenje"): s klikom spodnjega gumba "Sprejmem imetnik licence sprejme (i) IBM-ovo mednarodno licenèno pogodbo za ocenitev vrednotenje programov ("licenca za vrednotenje") brez popravkov; in (ii) IBM-ovo mednarodno licenèno pogodbo za programe ("IPLA") brez popravkov. + +Licenca za vrednotenje velja v èasu trajanja vrednotenja imetnika licence. + +Pogodba IPLA se uveljavi samodejno, èe se imetnik licence odloèi, da bo programe po konèanem obdobju vrednotenja obdr¾al (ali pridobil dodatne kopije programov za uporabo po konèanem obdobju vrednotenja), s sklepom nabavne pogodbe (to je IBM-ova mednarodna pogodba Passport Advantage ali IBM-ova pogodba Passport Advantage Express). + +Licenca za vrednotenje in pogodba IPLA nista v veljavi soèasno, nobena ne spreminja druge in sta neodvisni ena od druge. + +Celotno besedilo vsake od teh dveh licenènih pogodb sledi. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za vrednotenje programov (Z125-5543-05). + +Ime programa (©tevilka programa): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Za uporabo programa s strani imetnika licence veljajo naslednji standardni pogoji. + +Ocenjevalno obdobje + +Ocenjevalno obdobje se zaène na datum, na katerega imetnik licence poda svoje soglasje z doloèbami te pogodbe, in se izteèe èez 90 dni. + +Paketni programi + +Program je licenciran kot paket veè produktov, ki vsebuje spodaj navedene paketne programe. Imetnik licence je poobla¹èen za namestitev in uporabo takih paketnih programov v okviru omejitev v dokazilih o upravièenosti za program in kot je doloèeno v tem dokumentu z licenènimi podatki. Imetnik licence ni poobla¹èen za prenos ali ponovno tr¾enje paketnih programov loèeno od paketa veè produktov. Paketni program lahko vkljuèuje morebitna licenèna doloèila, ki veljajo za imetnika licence pri uporabi tega paketnega programa. V primeru navzkri¾ja doloèila v tem dokumentu z licenènimi podatki prevladajo nad doloèili za paketni program. Ko pravica imetnika licence do uporabe programa poteèe ali preneha biti veljavna, mora imetnik licence prenehati uporabljati vse kopije paketnih programov in jih unièiti ali nemudoma vrniti ponudniku, od katerega je pridobil program. Èe je imetnik licence prenesel paketne programe, se mora obrniti na ponudnika, od katerega je pridobil program. Èe ¾eli imetnik licence licencirati paketne programe za uporabo, ki ni omejena z zgoraj navedenimi doloèili, naj se za pridobitev ustrezne licence obrne na IBM-ovega prodajnega predstavnika ali ponudnika, od katerega je imetnik licence pridobil program. + +S programom so licencirani spodaj navedeni paketni programi: +IBM MQ V9.0.3 + +Omejitev razvijalca + +Èe je program doloèen za "razvijalce", ga je mogoèe razmestiti samo kot del notranjega razvoja in testiranja enote imetnika licence v raèunalniku razvijalca. Raèunalnik razvijalca je fizièno ali navidezno okolje namizja, ki izvaja osnovni operacijski sistem in program, do obeh pa ima dostop in ju uporablja le en doloèen razvijalec. Imetnik licence nima pooblastil za uporabo programa za obdelavo delovnih obremenitev produkcije, simulacijo delovnih obremenitev produkcije ali preizku¹anje raz¹irljivosti katerekoli kode, aplikacije ali kateregakoli sistema. Imetnik licence ne sme uporabiti nobenega dela programa za noben drug namen, èe ne pridobi ustreznih pooblastil za produkcijsko uporabo. + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za program (Z125-3301-14). + +Ime programa (©tevilka programa): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Za uporabo programa s strani imetnika licence veljajo naslednji standardni pogoji. + +Omejena pravica do uporabe + +Kot je opisano v dokumentu Mednarodna licenèna pogodba za program ("IPLA") in teh licenènih informacijah, dru¾ba IBM imetniku licence podeljuje omejeno pravico za uporabo programa. Ta pravica je omejena z ravnijo poobla¹èene uporabe, kot je enota vrednosti procesorja ("PVU"), enota vrednosti vira ("RVU"), enota vrednosti ("VU") ali druga doloèena raven uporabe, ki jo plaèuje imetnik licence, kot je razvidno iz dokazila o upravièenosti. Uporaba imetnika licence je lahko omejena tudi na doloèen raèunalnik ali le v obliki podpornega programa oziroma zanjo veljajo druge omejitve. Ker imetnik licence ni plaèal polne cene programa, brez doplaèila programa ne sme uporabljati na noben drug naèin. Imetnik licence poleg tega nima pooblastil za uporabo programa za namen izvajanja komercialnih storitev IT za katero koli tretjo osebo, za omogoèanje komercialnega gostovanja ali dodeljevanja èasa oziroma za podlicenciranje ali najem programa, razen èe je to izrecno navedeno v ustreznih pogodbah, po katerih imetnik licence pridobi pooblastila za uporabo programa. Imetniku licence so lahko na voljo dodatne pravice na podlagi doplaèila oziroma razliènih ali dodatnih pogojev. Dru¾ba IBM si pridr¾uje pravico odloèanja o tem, ali bo imetniku licence omogoèila tak¹ne dodatne pravice. + +Specifikacije + +Specifikacije tega programa so na voljo v skupnih razdelkih Opis in tehniène informacije v obvestilih za program. + +Paketni programi + +Program je licenciran kot paket veè produktov, ki vsebuje spodaj navedene paketne programe. Imetnik licence je poobla¹èen za namestitev in uporabo takih paketnih programov v okviru omejitev v dokazilih o upravièenosti za program in kot je doloèeno v tem dokumentu z licenènimi podatki. Imetnik licence ni poobla¹èen za prenos ali ponovno tr¾enje paketnih programov loèeno od paketa veè produktov. Paketni program lahko vkljuèuje morebitna licenèna doloèila, ki veljajo za imetnika licence pri uporabi tega paketnega programa. V primeru navzkri¾ja doloèila v tem dokumentu z licenènimi podatki prevladajo nad doloèili za paketni program. Ko pravica imetnika licence do uporabe programa poteèe ali preneha biti veljavna, mora imetnik licence prenehati uporabljati vse kopije paketnih programov in jih unièiti ali nemudoma vrniti ponudniku, od katerega je pridobil program. Èe je imetnik licence prenesel paketne programe, se mora obrniti na ponudnika, od katerega je pridobil program. Èe ¾eli imetnik licence licencirati paketne programe za uporabo, ki ni omejena z zgoraj navedenimi doloèili, naj se za pridobitev ustrezne licence obrne na IBM-ovega prodajnega predstavnika ali ponudnika, od katerega je imetnik licence pridobil program. + +S programom so licencirani spodaj navedeni paketni programi: +IBM MQ V9.0.3 + +Omejitev razvijalca + +Èe je program doloèen za "razvijalce", ga je mogoèe razmestiti samo kot del notranjega razvoja in testiranja enote imetnika licence v raèunalniku razvijalca. Raèunalnik razvijalca je fizièno ali navidezno okolje namizja, ki izvaja osnovni operacijski sistem in program, do obeh pa ima dostop in ju uporablja le en doloèen razvijalec. Imetnik licence nima pooblastil za uporabo programa za obdelavo delovnih obremenitev produkcije, simulacijo delovnih obremenitev produkcije ali preizku¹anje raz¹irljivosti katerekoli kode, aplikacije ali kateregakoli sistema. Imetnik licence ne sme uporabiti nobenega dela programa za noben drug namen, èe ne pridobi ustreznih pooblastil za produkcijsko uporabo. + +Komponente, ki niso zahtevane za vzpostavitev potrebnih pooblastil + +Pri doloèanju ¹tevila pooblastil, ki jih potrebuje imetnik licence za namestitev ali uporabo programa, ni upo¹tevana namestitev ali uporaba naslednjih komponent programa. Z drugimi besedami povedano to pomeni, da lahko imetnik licence namesti in uporablja naslednje komponente programa na podlagi licenènih pogojev, vendar se te komponente ne uporabljajo za doloèanje ¹tevila pooblastil, potrebnih za program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + +Za uporabo programa s strani imetnika licence morda veljajo naslednje merske enote. + +Namestitev + +Namestitev je merska enota, na podlagi katere je lahko licenciran program. Namestitev je name¹èena kopija programa na fizièni ali navidezni disk, ki je na voljo za izvajanje na raèunalniku. Imetnik licence mora pridobiti pooblastilo za vsako namestitev programa. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +POMEMBNO: POZORNO PREBERITE + +Spodaj sta prikazani dve licenèni pogodbi. + +1. IBM-ova mednarodna licenèna pogodba za vrednotenje programov +2. IBM-ova mednarodna licenèna pogodba za program + +Èe pridobi imetnik licence program za namene produktivne uporabe (razen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja): s klikom spodnjega gumba "Sprejmem" imetnik licence sprejme IBM-ovo mednarodno licenèno pogodbo za programe brez popravkov. + +Èe pridobi imetnik licence program za namen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja (kar skupno imenujemo "vrednotenje"): s klikom spodnjega gumba "Sprejmem imetnik licence sprejme (i) IBM-ovo mednarodno licenèno pogodbo za ocenitev vrednotenje programov ("licenca za vrednotenje") brez popravkov; in (ii) IBM-ovo mednarodno licenèno pogodbo za programe ("IPLA") brez popravkov. + +Licenca za vrednotenje velja v èasu trajanja vrednotenja imetnika licence. + +Pogodba IPLA se uveljavi samodejno, èe se imetnik licence odloèi, da bo programe po konèanem obdobju vrednotenja obdr¾al (ali pridobil dodatne kopije programov za uporabo po konèanem obdobju vrednotenja), s sklepom nabavne pogodbe (to je IBM-ova mednarodna pogodba Passport Advantage ali IBM-ova pogodba Passport Advantage Express). + +Licenca za vrednotenje in pogodba IPLA nista v veljavi soèasno, nobena ne spreminja druge in sta neodvisni ena od druge. + +Celotno besedilo vsake od teh dveh licenènih pogodb sledi. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za vrednotenje programov (Z125-5543-05). + +Ime programa: IBM MQ Managed File Transfer Service V9.0.1 +©tevilka programa: Evaluation + +Ime programa: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +©tevilka programa: Evaluation + +Ime programa: IBM MQ Managed File Transfer Agent V9.0.1 +©tevilka programa: Evaluation + +Ocenjevalno obdobje + +Ocenjevalno obdobje se zaène na datum, na katerega imetnik licence poda svoje soglasje z doloèbami te pogodbe, in se izteèe èez 90 dni. + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za program (Z125-3301-14). + +Ime programa: IBM MQ Managed File Transfer Service V9.0.1 +©tevilka programa: 5724-H72 + +Ime programa: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +©tevilka programa: 5724-H72 + +Ime programa: IBM MQ Managed File Transfer Agent V9.0.1 +©tevilka programa: 5724-H72 + +Kot je opisano v dokumentu Mednarodna licenèna pogodba za program ("IPLA") in teh licenènih informacijah, dru¾ba IBM imetniku licence podeljuje omejeno pravico za uporabo programa. Ta pravica je omejena z ravnijo poobla¹èene uporabe, kot je enota vrednosti procesorja ("PVU"), enota vrednosti vira ("RVU"), enota vrednosti ("VU") ali druga doloèena raven uporabe, ki jo plaèuje imetnik licence, kot je razvidno iz dokazila o upravièenosti. Uporaba imetnika licence je lahko omejena tudi na doloèen raèunalnik ali le v obliki podpornega programa oziroma zanjo veljajo druge omejitve. Ker imetnik licence ni plaèal polne cene programa, brez doplaèila programa ne sme uporabljati na noben drug naèin. Imetnik licence poleg tega nima pooblastil za uporabo programa za namen izvajanja komercialnih storitev IT za katero koli tretjo osebo, za omogoèanje komercialnega gostovanja ali dodeljevanja èasa oziroma za podlicenciranje ali najem programa, razen èe je to izrecno navedeno v ustreznih pogodbah, po katerih imetnik licence pridobi pooblastila za uporabo programa. Imetniku licence so lahko na voljo dodatne pravice na podlagi doplaèila oziroma razliènih ali dodatnih pogojev. Dru¾ba IBM si pridr¾uje pravico odloèanja o tem, ali bo imetniku licence omogoèila tak¹ne dodatne pravice. + +Specifikacije tega programa so na voljo v skupnih razdelkih Opis in tehniène informacije v obvestilih za program. + +Enote, ki jih je mogoèe redistribuirati + +Èe vkljuèuje program komponente, ki jih je mogoèe redistribuirati, bodo doloèene v datoteki REDIST, ki spremlja program. Poleg licenènih pravic, ki so dodeljene v pogodbi, lahko imetnik licence distribuira enote, ki jih je mogoèe redistribuirati, v skladu z naslednjimi doloèbami: +1) Redistribucija mora biti ponujena v obliki objektne kode in mora upo¹tevati vse smernice, navodila in specifikacije iz datoteke REDIST ali dokumentacije programa; +2) Èe spremljajoèa dokumentacija programa imetniku licence izrecno dovoljuje spreminjanje enot, ki jih je mogoèe redistribuirati, morajo tak¹ni popravki upo¹tevati vse smernice, navodila in specifikacije v tej dokumentaciji, in ti popravki (èe obstajajo) morajo biti obravnavani kot enote, ki jih je mogoèe redistribuirati; +3) Imetnik licence lahko distribuira enote, ki jih je mogoèe redistribuirati, samo kot del svoje aplikacije, ki je bila razvita s pomoèjo programa ("aplikacija imetnika licence"), in samo za nudenje podpore strankam imetnika licence v povezavi z njihovo uporabo aplikacije imetnika licence. Aplikacija imetnika licence mora predstavljati pomembno dodatno vrednost, tako da enote, ki jih je mogoèe redistribuirati, ne predstavljajo glavnega motiva, zaradi katerega bi konèni uporabniki pridobili izdelek programske opreme imetnika licence; +4) Èe vkljuèujejo enote, ki jih je mogoèe redistribuirati, izvajalno okolje Java, mora imetnik licence s svojo aplikacijo vkljuèiti tudi druge nejavanska enote, ki jih je mogoèe redistribuirati, razen èe je aplikacija oblikovana tako, da se izvaja samo na splo¹nih raèunalni¹kih napravah (to so prenosniki, namizni raèunalniki in stre¾niki) in ne na roènih ali drugih prodornih napravah (to so naprave, ki vsebujejo mikroprocesor, vendar raèunalni¹tvo ni njihov glavni namen); +5) Imetnik licence ne sme odstraniti nobenih datotek z avtorskimi pravicami ali obvestili, vsebovanimi v enotah, ki jih je mogoèe redistribuirati; +6) Imetnik licence mora zavarovati IBM, njegove dobavitelje ali distributerje pred kakr¹nimikoli zahtevki, vlo¾enimi zaradi uporabe ali distribucije aplikacije imetnika licence; +7) Imetnik licence ne sme uporabiti enakega imena poti kot izvirne datotek/moduli enot, ki jih je mogoèe redistribuirati; +8) Imetnik licence ne sme uporabljati imen ali blagovnih znamk IBM-a, njegovih dobaviteljev ali distributerjev v povezavi s tr¾enjem svoje aplikacije, ne da bi pred tem pridobil pisno soglasje IBM-a, tega dobavitelja ali distributerja; +9) IBM, njegovi dobavitelji in distributerji nudijo enote, ki jih je mogoèe redistribuirati, in povezano dokumentacijo, brez obveze za nudenje podpore in "TAK©NE, KAK©RNI SO", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO NASLOVA, NEKR©ENJA ALI NEOVIRANJA, IN NAKAZANE GARANCIJE IN POGOJE TR®NOSTI IN UPORABNOSTI ZA DOLOÈEN NAMEN; +10) Imetnik licence je odgovoren za vso tehnièno podporo za aplikacijo imetnika licence in za kakr¹nekoli popravke v enotah, ki jih je mogoèe redistribuirati; in +11) Imetnik licence mora v licenèni pogodbi, ki jo sklene s konènim uporabnikom aplikacije, konènega uporabnika obvestiti, da enot, ki jih je mogoèe redistribuirati, ali njihovih popravkov, ni dovoljeno i) uporabljati za noben drug namen, razen za omogoèenje aplikacije imetnika licence, ii) kopirati (razen za namene varnostnega kopiranja), iii) nadalje distribuirati ali prenesti brez aplikacije imetnika licence ali iv) vzvratno sestaviti, vzvratno prevesti ali kako drugaèe prevesti, razen èe to izrecno dopu¹èa zakon in brez mo¾nosti pogodbene odpovedi. Poleg tega mora biti licenèna pogodba imetnika licence vsaj v tolik¹ni meri ¹èititi IBM kot doloèbe te pogodbe. + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + +Za izvorne komponente in vzorèno gradivo, navedeno v datoteki REDIST programa, lahko imetnik licence redistribuira spremenjene razlièice teh izvornih komponent ali vzorènega gradiva v skladu z doloèbami te licence in katerihkoli navodil iz datoteke REDIST. + +Namestitev + +Namestitev je merska enota, na podlagi katere je lahko licenciran program. Namestitev je name¹èena kopija programa na fizièni ali navidezni disk, ki je na voljo za izvajanje na raèunalniku. Imetnik licence mora pridobiti pooblastilo za vsako namestitev programa. + +Enota vrednosti procesorja (PVU) + +Enota vrednosti procesorja (PVU) je merska enota, na podlagi katere je lahko licenciran program. ©tevilo zahtevanih pooblastil PVU temelji na procesorski tehnologiji (definirani v tabeli PVU-jev s proizvajalcem procesorja, znamko, tipom in ¹tevilko modela na spletnem naslovu http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) in na ¹tevilu procesorjev, ki so na voljo za program. Za namen licenciranja, ki temelji na PVU-jih, definira IBM kot procesor vsako procesorsko jedro na èipu. Tako ima na primer procesorski èip z dvema jedroma dve procesorski jedri. + +Imetnik licence lahko namesti program z licenciranjem celotne kapacitete ali z licenciranjem virtualizacijske kapacitete (podkapacitete), ki je v skladu z doloèbami za licenciranje podkapacitete Passport Advantage (glejte spodnjo spletno stran). èe uporablja imetnik licence licenciranje celotne kapacitete, mora pridobiti pooblastila PVU, ki obsegajo vsa aktivirana procesorska jedra* v okolju fiziène strojne opreme, ki so na voljo za program ali jih ta upravlja, razen za tiste stre¾nike, s katerih je bil program trajno odstranjen. Èe uporablja imetnik licence licenciranje virtualizacijske kapacitete, mora pridobiti ¹tevilo pooblastil, ki zadostuje za kritje vseh aktiviranih procesorskih jeder, ki so na voljo za program ali jih ta upravlja, kot je definirano glede na pravila za ¹tetje licenc za virtualizacijsko kapaciteto na naslovu http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivirano procesorsko jedro je procesorsko jedro, ki je na voljo za uporabo na fiziènem ali navideznem stre¾niku, ne glede na to, ali je kapaciteta procesorskega jedra lahko omejena ali je omejena z virtualizacijskimi tehnologijami, ukazi operacijskega sistema, nastavitvami BIOS ali podobnimi omejitvami. + +Pogoji, specifièni za program + +Konfiguracije mirujoèega stanja pripravljenosti + +Za namene tega razdelka je konfiguracija "mirujoèega stanja pripravljenosti" tista konfiguracija, kjer je kopija programa name¹èena v stre¾nik, ki je del re¹itve visoke razpolo¾ljivosti in je stre¾nik, na katerega bo program preklopil v primeru, da kopija programa v aktivnem stre¾niku ni veè uporabna. Stre¾nik je "mirujoè" le, èe se pred preklopom uporablja izkljuèno za skrbni¹ka dejanja, ki pomagajo pri scenarijih preklopa. + +Programa ni mogoèe namestiti na stre¾nik v mirujoèem stanju pripravljenosti, èe ni ustrezno licenciran. + +Èe se program uporablja v konfiguraciji mirujoèega stanja v pripravljenosti z veè primerki funkcije upravljalnika èakalne vrste, se lahko kopija programa za namen varnostnega kopiranja izvaja v stre¾niku z mirujoèim stanjem pripravljenosti, pri èemer mora ostati "mirujoèa" in se ne sme uporabljati za izvajanje nobenih proizvodnih del, razen èe aktivni stre¾nik preklopi na stre¾nik v mirujoèem stanju pripravljenosti, ko se lahko kopija v mirujoèem stanju pripravljenosti uporablja za izvajanje proizvodnih del v obdobju preklopa. + +Èe se program uporablja v konfiguraciji mirujoèega stanja pripravljenosti z drugimi sistemi visoke razpolo¾ljivosti, se lahko kopija programa za namene varnostnega kopiranja nahaja v stre¾niku z mirujoèim stanjem pripravljenosti, pri èemer ne sme biti zagnana (zato se ne sme uporabljati za izvajanje nobenih proizvodnih del), vendar jo bodo komponente visoke razpolo¾ljivosti samodejno zagnale v primeru preklopa aktivnega stre¾nika, ko se lahko kopija v mirujoèem stanju pripravljenosti uporablja za izvajanje proizvodnih del v obdobju preklopa. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +POMEMBNO: POZORNO PREBERITE + +Spodaj sta prikazani dve licenèni pogodbi. + +1. IBM-ova mednarodna licenèna pogodba za vrednotenje programov +2. IBM-ova mednarodna licenèna pogodba za program + +Èe pridobi imetnik licence program za namene produktivne uporabe (razen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja): s klikom spodnjega gumba "Sprejmem" imetnik licence sprejme IBM-ovo mednarodno licenèno pogodbo za programe brez popravkov. + +Èe pridobi imetnik licence program za namen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja (kar skupno imenujemo "vrednotenje"): s klikom spodnjega gumba "Sprejmem imetnik licence sprejme (i) IBM-ovo mednarodno licenèno pogodbo za ocenitev vrednotenje programov ("licenca za vrednotenje") brez popravkov; in (ii) IBM-ovo mednarodno licenèno pogodbo za programe ("IPLA") brez popravkov. + +Licenca za vrednotenje velja v èasu trajanja vrednotenja imetnika licence. + +Pogodba IPLA se uveljavi samodejno, èe se imetnik licence odloèi, da bo programe po konèanem obdobju vrednotenja obdr¾al (ali pridobil dodatne kopije programov za uporabo po konèanem obdobju vrednotenja), s sklepom nabavne pogodbe (to je IBM-ova mednarodna pogodba Passport Advantage ali IBM-ova pogodba Passport Advantage Express). + +Licenca za vrednotenje in pogodba IPLA nista v veljavi soèasno, nobena ne spreminja druge in sta neodvisni ena od druge. + +Celotno besedilo vsake od teh dveh licenènih pogodb sledi. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za vrednotenje programov (Z125-5543-05). + +Ime programa: IBM MQ Advanced Message Security V9.0.1 +©tevilka programa: Evaluation + +Ime programa: IBM MQ Advanced Message Security Idle Standby V9.0.1 +©tevilka programa: Evaluation + +Ime programa: IBM MQ Telemetry V9.0.1 +©tevilka programa: Evaluation + +Ocenjevalno obdobje + +Ocenjevalno obdobje se zaène na datum, na katerega imetnik licence poda svoje soglasje z doloèbami te pogodbe, in se izteèe èez 90 dni. + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + + + +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za program (Z125-3301-14). + +Ime programa: IBM MQ Advanced Message Security V9.0.1 +©tevilka programa: 5724-H72 + +Ime programa: IBM MQ Advanced Message Security Idle Standby V9.0.1 +©tevilka programa: 5724-H72 + +Ime programa: IBM MQ Telemetry V9.0.1 +©tevilka programa: 5724-H72 + +Kot je opisano v dokumentu Mednarodna licenèna pogodba za program ("IPLA") in teh licenènih informacijah, dru¾ba IBM imetniku licence podeljuje omejeno pravico za uporabo programa. Ta pravica je omejena z ravnijo poobla¹èene uporabe, kot je enota vrednosti procesorja ("PVU"), enota vrednosti vira ("RVU"), enota vrednosti ("VU") ali druga doloèena raven uporabe, ki jo plaèuje imetnik licence, kot je razvidno iz dokazila o upravièenosti. Uporaba imetnika licence je lahko omejena tudi na doloèen raèunalnik ali le v obliki podpornega programa oziroma zanjo veljajo druge omejitve. Ker imetnik licence ni plaèal polne cene programa, brez doplaèila programa ne sme uporabljati na noben drug naèin. Imetnik licence poleg tega nima pooblastil za uporabo programa za namen izvajanja komercialnih storitev IT za katero koli tretjo osebo, za omogoèanje komercialnega gostovanja ali dodeljevanja èasa oziroma za podlicenciranje ali najem programa, razen èe je to izrecno navedeno v ustreznih pogodbah, po katerih imetnik licence pridobi pooblastila za uporabo programa. Imetniku licence so lahko na voljo dodatne pravice na podlagi doplaèila oziroma razliènih ali dodatnih pogojev. Dru¾ba IBM si pridr¾uje pravico odloèanja o tem, ali bo imetniku licence omogoèila tak¹ne dodatne pravice. + +Specifikacije tega programa so na voljo v skupnih razdelkih Opis in tehniène informacije v obvestilih za program. + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + +Namestitev + +Namestitev je merska enota, na podlagi katere je lahko licenciran program. Namestitev je name¹èena kopija programa na fizièni ali navidezni disk, ki je na voljo za izvajanje na raèunalniku. Imetnik licence mora pridobiti pooblastilo za vsako namestitev programa. + +Enota vrednosti procesorja (PVU) + +Enota vrednosti procesorja (PVU) je merska enota, na podlagi katere je lahko licenciran program. ©tevilo zahtevanih pooblastil PVU temelji na procesorski tehnologiji (definirani v tabeli PVU-jev s proizvajalcem procesorja, znamko, tipom in ¹tevilko modela na spletnem naslovu http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) in na ¹tevilu procesorjev, ki so na voljo za program. Za namen licenciranja, ki temelji na PVU-jih, definira IBM kot procesor vsako procesorsko jedro na èipu. Tako ima na primer procesorski èip z dvema jedroma dve procesorski jedri. + +Imetnik licence lahko namesti program z licenciranjem celotne kapacitete ali z licenciranjem virtualizacijske kapacitete (podkapacitete), ki je v skladu z doloèbami za licenciranje podkapacitete Passport Advantage (glejte spodnjo spletno stran). èe uporablja imetnik licence licenciranje celotne kapacitete, mora pridobiti pooblastila PVU, ki obsegajo vsa aktivirana procesorska jedra* v okolju fiziène strojne opreme, ki so na voljo za program ali jih ta upravlja, razen za tiste stre¾nike, s katerih je bil program trajno odstranjen. Èe uporablja imetnik licence licenciranje virtualizacijske kapacitete, mora pridobiti ¹tevilo pooblastil, ki zadostuje za kritje vseh aktiviranih procesorskih jeder, ki so na voljo za program ali jih ta upravlja, kot je definirano glede na pravila za ¹tetje licenc za virtualizacijsko kapaciteto na naslovu http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Aktivirano procesorsko jedro je procesorsko jedro, ki je na voljo za uporabo na fiziènem ali navideznem stre¾niku, ne glede na to, ali je kapaciteta procesorskega jedra lahko omejena ali je omejena z virtualizacijskimi tehnologijami, ukazi operacijskega sistema, nastavitvami BIOS ali podobnimi omejitvami. + +Pogoji, specifièni za program + +Konfiguracije mirujoèega stanja pripravljenosti + +Za namene tega razdelka je konfiguracija "mirujoèega stanja pripravljenosti" tista konfiguracija, kjer je kopija programa name¹èena v stre¾nik, ki je del re¹itve visoke razpolo¾ljivosti in je stre¾nik, na katerega bo program preklopil v primeru, da kopija programa v aktivnem stre¾niku ni veè uporabna. Stre¾nik je "mirujoè" le, èe se pred preklopom uporablja izkljuèno za skrbni¹ka dejanja, ki pomagajo pri scenarijih preklopa. + +Programa ni mogoèe namestiti na stre¾nik v mirujoèem stanju pripravljenosti, èe ni ustrezno licenciran. + +Èe se program uporablja v konfiguraciji mirujoèega stanja v pripravljenosti z veè primerki funkcije upravljalnika èakalne vrste, se lahko kopija programa za namen varnostnega kopiranja izvaja v stre¾niku z mirujoèim stanjem pripravljenosti, pri èemer mora ostati "mirujoèa" in se ne sme uporabljati za izvajanje nobenih proizvodnih del, razen èe aktivni stre¾nik preklopi na stre¾nik v mirujoèem stanju pripravljenosti, ko se lahko kopija v mirujoèem stanju pripravljenosti uporablja za izvajanje proizvodnih del v obdobju preklopa. + +Èe se program uporablja v konfiguraciji mirujoèega stanja pripravljenosti z drugimi sistemi visoke razpolo¾ljivosti, se lahko kopija programa za namene varnostnega kopiranja nahaja v stre¾niku z mirujoèim stanjem pripravljenosti, pri èemer ne sme biti zagnana (zato se ne sme uporabljati za izvajanje nobenih proizvodnih del), vendar jo bodo komponente visoke razpolo¾ljivosti samodejno zagnale v primeru preklopa aktivnega stre¾nika, ko se lahko kopija v mirujoèem stanju pripravljenosti uporablja za izvajanje proizvodnih del v obdobju preklopa. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +POMEMBNO: POZORNO PREBERITE + +Spodaj sta prikazani dve licenèni pogodbi. + +1. IBM-ova mednarodna licenèna pogodba za vrednotenje programov +2. IBM-ova mednarodna licenèna pogodba za program + +Èe pridobi imetnik licence program za namene produktivne uporabe (razen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja): s klikom spodnjega gumba "Sprejmem" imetnik licence sprejme IBM-ovo mednarodno licenèno pogodbo za programe brez popravkov. + +Èe pridobi imetnik licence program za namen vrednotenja, testiranja, preizku¹anja tipa "preizkusi ali kupi" ali demonstriranja (kar skupno imenujemo "vrednotenje"): s klikom spodnjega gumba "Sprejmem imetnik licence sprejme (i) IBM-ovo mednarodno licenèno pogodbo za ocenitev vrednotenje programov ("licenca za vrednotenje") brez popravkov; in (ii) IBM-ovo mednarodno licenèno pogodbo za programe ("IPLA") brez popravkov. + +Licenca za vrednotenje velja v èasu trajanja vrednotenja imetnika licence. + +Pogodba IPLA se uveljavi samodejno, èe se imetnik licence odloèi, da bo programe po konèanem obdobju vrednotenja obdr¾al (ali pridobil dodatne kopije programov za uporabo po konèanem obdobju vrednotenja), s sklepom nabavne pogodbe (to je IBM-ova mednarodna pogodba Passport Advantage ali IBM-ova pogodba Passport Advantage Express). + +Licenca za vrednotenje in pogodba IPLA nista v veljavi soèasno, nobena ne spreminja druge in sta neodvisni ena od druge. + +Celotno besedilo vsake od teh dveh licenènih pogodb sledi. + + +Mednarodna licenèna pogodba za vrednotenje programov + +1. del - splo¹ne doloèbe + +S TEM, KO IMETNIK LICENCE PRENESE, NAMESTI, PREKOPIRA, DOSTOPI DO, KLIKNE GUMB ?SPREJMEM? ALI KAKO DRUGAÈE UPORABI PROGRAM, SOGLA©A Z DOLOÈBAMI TE POGODBE. ÈE NAROÈNIK SPREJME TE DOLOÈBE V IMENU IMETNIKA LICENCE, ODGOVARJA IN JAMÈI, DA IMA VSA POOBLASTILA ZA POVEZAVO IMETNIKA LICENCE S TEMI DOLOÈBAMI. ÈE NAROÈNIK S TEMI DOLOÈBAMI NE SOGLA©A, + +* PROGRAMA NE SME PRENESTI, NAMESTITI, PREKOPIRATI, DO NJEGA DOSTOPATI, NITI KLIKNITI GUMBA ?SPREJMEM? ALI GA UPORABITI IN + +* NEMUDOMA VRNITI NEUPORABLJEN MEDIJ IN DOKUMENTACIJO STRANKI, PRI KATERI JU JE PRIDOBIL. ÈE JE NAROÈNIK PROGRAM PRENESEL, MORA UNIÈITI VSE NJEGOVE KOPIJE. + +1. Definicije + +?Poobla¹èena uporaba? - podana raven, na kateri lahko imetnik licence izvaja program. Raven je lahko merjena s ¹tevilom uporabnikov, milijoni storitvenih enot (?MSU-jev?), enotami vrednosti procesorja (?PVU-ji?) ali s kak¹no drugo ravnijo uporabe, ki jo doloèi IBM. + +?IBM? - International Business Machines Corporation ali ena od njegovih podru¾nic. + +?Podatki o licenciranju? (?LI?) - dokument, ki podaja informacije in kakr¹nekoli dodatne doloèbe, specifiène za program. Podatke o licenciranju programa je mogoèe najti v imeniku programa, z uporabo sistemskega ukaza ali v knji¾nici, ki je vkljuèena s programom. + +?Program? - naslednje, vkljuèno z izvirnikom in vsemi celotnimi ali delnimi kopijami: 1) strojno èitljiva navodila in podatki, 2) komponente, datoteke in moduli, 3) avdiovizualna vsebina (kot so slike, besedilo, posnetki ali slike) in 4) s tem povezano licenèno gradivo (kot so kljuèi in dokumentacija). + +2. Struktura pogodbe + +Ta pogodba je sestavljena iz 1. dela - splo¹ne doloèbe, iz 2. dela - pogoji, znaèilni za posamezne dr¾ave (èe obstajajo), podatkov o licenciranju in potrdila o upravièenosti. To je celotna pogodba med imetnikom licence in IBM-om v zvezi z uporabo programa. Kot tak¹na nadome¹èa vse predhodne ustne ali pisne komunikacije med imetnikom licence in IBM-om v zvezi z njegovo uporabo programa. Doloèbe iz 2. dela lahko nadomestijo ali spremenijo tiste iz 1. dela. V primeru, da pride do navzkri¾ja, imajo prednost pred obema deloma podatki o licenciranju. + +3. Odobritev pogodbe + +Lastnik programa je IBM ali IBM-ov dobavitelj. Program se ne prodaja, paè pa se zanj podeljujejo avtorske pravice in licenca. + +IBM podeli imetniku licence omejeno, neizkljuèno in neprenosljivo licenco za 1) prenos, namestitev in uporabo programa v ocenjevalnem obdobju, in sicer do ravni poobla¹èene uporabe, ki je doloèena v podatkih o licenciranju, in izkljuèno za namene notranjega ocenjevanja, preizku¹anja ali predstavitve na osnovi preizku¹anja; 2) izdelavo in namestitev smiselnega ¹tevila kopij za podporo tak¹ne poobla¹èene uporabe; in 3) izdelavo varnostne kopije, vendar vse pod pogojem, da + +a. je imetnik licence pridobil program na zakonit naèin in zadostuje doloèbam te pogodbe; + +b. se varnostna kopija uporabi samo, èe ni mogoèe zagnati programa, ki ima varnostno kopijo; + +c. imetnik licence opremi vsako kopijo ali delno kopijo programa z vsemi obvestili in drugimi oznakami o avtorskih pravicah, ki dokazujejo lastni¹tvo; + +d. imetnik licence vzdr¾uje vse kopije programa in zagotovi, da vsak uporabnik, ki dostopi do programa (lokalno ali na daljavo) 1) to naredi samo v imenu imetnika licence in 2) pri tem upo¹teva doloèbe te pogodbe; + +e. imetnik licence ne 1) uporablja programa za produkcijske namene ali kako drugaèe uporablja, kopira, spreminja ali distribuira programa, razen kot izrecno dovoli ta pogodba; 2) vzvratno sestavlja, vzvratno prevaja, kako drugaèe prevaja ali izvaja vzvratno in¾enirstvo v programu, razen kot to izrecno dopu¹èa zakon brez mo¾nosti pogodbene odpovedi; 3) uporablja katerihkoli komponent, datotek, modulov, avdio-vizualne vsebine ali povezanega licenènega gradiva programa loèeno od tega programa; 4) podlicencira programa ali ga daje v najem ali v zakup; ali 5) uporablja program za gostovanje komercialnih aplikacij; in + +f. èe pridobi imetnik licence ta program kot podporni program, ga bo uporabljal izkljuèno kot podporo glavnemu programu in je predmet vseh omejitev iz licence za glavni program; ali, èe pridobi imetnik licence ta program kot glavni program, bo uporabil vse podporne programe samo kot podporo temu programu in zanj veljajo vse omejitve iz te pogodbe. Za namen te toèke ?f? je ?podporni program? tisti program, ki je del drugega IBM-ovega programa (?glavni program?) in je v podatkih o licenciranju glavnega programa doloèen kot podporni program. (Èe ¾eli pridobiti imenik licence loèeno licenco za podporni program brez teh omejitev, naj se obrne na stranko, pri kateri ga je pridobil.) + +Ta licenca velja za vsako kopijo programa, ki jo izdela imetnik licence. + +3.1 Posodobitve in popravki + +Èe prejme imetnik licence posodobitev ali popravek, sogla¹a z vsemi dodatnimi ali drugaènimi doloèbami, ki veljajo za tak¹no posodobitev ali popravek, in so doloèene v njunih podatkih o licenciranju. Èe niso podane nobene dodatne ali drugaène doloèbe, za posodobitev ali popravek velja izkljuèno ta pogodba. Èe imetnik licence zamenja program s posodobitvijo, sogla¹a, da bo nemudoma prenehal uporabljati zamenjan program. + +3.2 Trajanje in zakljuèitev + +Ocenjevalno obdobje se zaène na datum, na katerega imenik licence sogla¹a z doloèbami te pogodbe, in se konèa 1) ob koncu trajanja ali na datum, ki ga je podal IBM v podatkih o licenciranju ali v transakcijskem dokumentu (kar je prej), ali 2) na datum, ko se program samodejno onemogoèi. Imetnik licence bo unièil program in vse njegove kopije, ki jih je izdelal, v desetih dneh po koncu obdobja vrednotenja. Èe IBM v podatkih o licenciranju doloèi, da lahko imetnik licence zadr¾i program in imetnik licence s tem sogla¹a, bo za program veljala druga licenèna pogodba, ki jo bo IBM posredoval imetniku licence. Poleg tega je lahko potrebno tudi plaèilo. + +IBM lahko odpove licenco imetnika licence, èe ta ne upo¹teva doloèb te pogodbe. Èe katerakoli stranka zaradi kakr¹negakoli razloga odpove licenco, imetnik licence sogla¹a, da bo nemudoma prenehal uporabljati vse kopije programa in jih bo unièil. Vse doloèbe te pogodbe, ki zaradi svoje narave ostanejo v veljavi tudi po izteku te pogodbe, ostanejo v veljavi do svoje izpolnitve, in veljajo za pravne naslednike in poobla¹èence obeh pogodbenih strank. + +PROGRAM LAHKO VSEBUJE NAPRAVO ZA ONEMOGOÈENJE, KI PREPREÈI UPORABO PO KONCU OCENJEVALNEGA OBDOBJA. IMETNIK LICENCE SOGLA©A, DA NE BO SPREMINJAL NAPRAVE ZA ONEMOGOÈENJE ALI PROGRAMA. IMETNIK LICENCE MORA UPO©TEVATI USTREZNE VARNOSTNE UKREPE, S KATERIMI BO PREPREÈIL IZGUBO PODATKOV, DO KATERE LAHKO PRIDE, KO PROGRAMA NI VEÈ MOGOÈE UPORABITI. + +4. Stro¹ki + +Uporaba programa je v èasu obdobja vrednotenja brezplaèna. + +5. Brez garancij + +V SKLADU S KATERIMIKOLI ZAKONITIMI GARANCIJAMI, KI JIH NI MOGOÈE IZKLJUÈITI, NE DAJE IBM NOBENIH GARANCIJ ALI POGOJEV, IZRECNIH ALI NAKAZANIH, V ZVEZI S PROGRAMOM ALI PODPORO, ÈE SPLOH, KAR VKLJUÈUJE TUDI (VENDAR NI OMEJENO NA) KAKR©NEKOLI NAKAZANE GARANCIJE ALI POGOJE TR®NOSTI, ZADOVOLJIVE KAKOVOSTI, UPORABNOSTI ZA DOLOÈEN NAMEN IN PRAVNI NASLOV TER KAKR©NEKOLI GARANCIJE ALI POGOJE NEKR©ENJA. + +NEKATERE DR®AVE ALI JURISDIKCIJE NE DOVOLIJO IZKLJUÈITVE IZRECNIH ALI NAKAZANIH GARANCIJ, ZATO ZGORNJA OMEJITEV ZA NAROÈNIKA MORDA NE VELJA. V TEM PRIMERU JE TRAJNOST TAK©NIH GARANCIJ OMEJENA NA MINIMALNO ZAKONSKO ZAHTEVANO OBDOBJE. PO IZTEKU TEGA ROKA NE VELJA VEÈ NOBENA GARANCIJA. NEKATERE DR®AVE ALI JURISDIKCIJE NE DOVOLIJO OMEJITVE V TRAJANJU NAKAZANIH GARANCIJ, ZATO ZGORNJA OMEJITEV MORDA NE VELJA ZA IMETNIKA LICENCE. IMETNIKU LICENCE LAHKO PRIPADAJO TUDI DRUGE PRAVICE, KI SE RAZLIKUJEJO OD DR®AVE DO DR®AVE IN OD JURISDIKCIJE DO JURISDIKCIJE. + +IZKLJUÈITVE IN IZVZETJA IZ TEGA 5. RAZDELKA VELJAJO TUDI ZA VSE IBM-OVE RAZVIJALCE IN DOBAVITELJE PROGRAMOV. + +PROIZVAJALCI, DOBAVITELJI ALI ZALO®NIKI PROGRAMOV, KI NISO IBM-OVI, LAHKO PODAJO SVOJE LASTNE GARANCIJE. + +IBM NE NUDI PODPORE KAKR©NEKOLI VRSTE, RAZEN ÈE NE DOLOÈI DRUGAÈE. V TAK©NEM PRIMERU JE KAKR©NAKOLI PODPORA, KI JO NUDI IBM, PREDMET IZKLJUÈITEV IN IZVZETIJ IZ TEGA 5. RAZDELKA. + +6. Podatki in baze podatkov imetnika licence + +Da bi imetniku licence pomagali pri osamitvi vzroka te¾ave v programu, lahko IBM od njega zahteva, da 1) omogoèi IBM-u oddaljen dostop do svojega sistema ali 2) IBM-u po¹lje podatke o licenciranju ali sistemske podatke. Toda IBM ni obvezan nuditi tak¹ne podpore, razen èe skleneta IBM in imetnik licence loèeno pisno pogodbo, na podlagi katere IBM sogla¹a, da bo nudil imetniku licence to vrsto podpore, ki presega obveznosti IBM-a iz te pogodbe. V vsakem primeru bo IBM uporabil informacije o napakah in te¾avah za izbolj¹anje svojih izdelkov in storitev in kot pomoè pri nudenju s tem povezanih ponudb za podporo. V ta namen lahko IBM vkljuèi IBM-ove pravne osebe in podpogodbenike (kar vkljuèuje tudi tiste v eni ali veè dr¾avah, v katerih se ne nahaja imetnik licence), imetnik licence pa daje IBM-u v ta namen pooblastilo. + +Imetnik licence ostaja odgovoren za 1) vse podatke in vsebino vseh baz podatkov, ki jih imetnik licence omogoèi IBM-u, 2) izbiro in uvedbo postopkov in nadzora v zvezi z dostopanjem, za¹èito, ¹ifriranjem, uporabljanjem in prena¹anjem podatkov (vkljuèno z vsemi osebnimi podatki) in 3) varnostno kopiranje in obnavljanje vseh baz podatkov in shranjenih podatkov. Imetnik licence IBM-u ne bo poslal ali priskrbel dostopa do osebnih informacij, ki so lahko v podatkovni ali kakr¹nikoli drugi obliki, in bo odgovoren za sprejemljive stro¹ke in druge zneske, ki jih lahko nalo¾i IBM v zvezi s tak¹nimi informacijami, ki so po nesreèi posredovane IBM-u, ali za izgubo ali razkritje tak¹nih informacij s strani IBM-a, vkljuèno s tistimi, do katerih pride zaradi zahtevkov katerihkoli tretjih strank. + +7. Omejitev odgovornosti + +Omejitve in izkljuèitve iz tega 7. razdelka (Omejitev odgovornosti) veljajo v celoti, èe jih ne prepoveduje ustrezen zakon brez mo¾nosti pogodbene odpovedi. + +7.1 Primeri, za katere je IBM lahko odgovoren + +Zaradi napake IBM-a ali zaradi kak¹ne druge obveznosti lahko pride do okoli¹èin, v katerih je imetnik licence od IBM-a upravièen terjati od¹kodnino. Ne glede na osnovo, na kateri je imetnik licence od IBM-a upravièen zahtevati od¹kodnino (vkljuèno z osnovno kr¹itvijo, malomarnostjo, napaèno predstavitvijo dejstev ali kak¹nim drugim pogodbenim ali kazenskim zahtevkom), celotna IBM-ova odgovornost za vse zahtevke skupaj, nastale zaradi vsakega programa ali v povezavi z njim ali kako drugaèe nastale na podlagi te pogodbe, ne presega zneska kakr¹nekoli 1) ¹kode za telesne po¹kodbe (vkljuèno s smrtjo) in ¹kodo na nepremièninah in v osebnih premièninah in 2) druge dejanske neposredne ¹kode do zneska 10.000 USD (ali enakovrednega zneska v lokalni valuti). + +Ta omejitev velja tudi za vse IBM-ove razvijalce in dobavitelje programa, in predstavlja maksimum, za katerega so IBM in razvijalci in dobavitelji programa kolektivno odgovorni. + +7.2 Primeri, za katere IBM ni odgovoren + +IBM IN NJEGOVI RAZVIJALCI ALI DOBAVITELJI PROGRAMA POD NOBENIMI POGOJI NE ODGOVARJAJO ZA NASLEDNJE PRIMERE, TUDI ÈE SO OBVE©ÈENI O MO®NOSTI, DA DO NJIH PRIDE: + +a. IZGUBO ALI PO©KODBO PODATKOV; + +b. POSEBNO, NAKLJUÈNO, KAZENSKO ALI POSLEDIÈNO ©KODO ALI KAKR©NOKOLI EKONOMSKO POSLEDIÈNO ©KODO; ALI + +c. IZGUBLJENE DOBIÈKE, POSLOVANJE, DOHODKE, DOBRO IME ALI PRIÈAKOVANE PRIHRANKE. + +8. Preverjanje skladnosti + +Za namene tega 8. razdelka (Preverjanje skladnosti) pomeni izraz "doloèbe programa za vrednotenje" 1) to pogodbo in ustrezne dodatke in transakcijske dokumente, ki jih posreduje IBM in 2) naèela za IBM-ovo programsko opremo, ki jih je mogoèe najti na spletnem mestu z naèeli za IBM-ovo programsko opremo (www.ibm.com/softwarepolicies), kar vkljuèuje tudi (vendar ni omejeno na) tista naèela, ki se nana¹ajo na varnostno kopiranje, doloèanje cen za podkapaciteto in selitev. + +Pravice in obveznosti iz tega 8. razdelka veljajo v obdobju, v katerem je program licenciran za imetnika licence in ¹e dve leti zatem. + +8.1 Postopek preverjanja + +Imetnik licence sogla¹a, da bo izdelal, ohranil in IBM-u in njegovim revizorjem omogoèil vpogled v natanène zabele¾ene zapise, izhodne podatke sistemskih orodij in druge sistemske informacije, ki zadostujejo za preverjanje, ali imetnik licence uporablja vse programe v skladu z doloèbami programa za ocenjevanje, kar brez omejitve vkljuèuje vse kvalifikacijske doloèbe za IBM-ovo ustrezno licenciranje in doloèanje cen. Imetnik licence mora 1) zagotoviti, da ne prese¾e svoje poobla¹èene uporabe in 2) da upo¹teva doloèbe programa za ocenjevanje. + +Na podlagi ustreznega predhodnega obvestila lahko IBM preveri, ali imetnik licence upo¹teva doloèbe programa za ocenjevanje vseh lokacijah in v vseh okoljih, kjer imetnik licence uporablja (za kakr¹enkoli namen) programe, ki so predmet doloèb programa za ocenjevanje.Pri tak¹nem preverjanju bo IBM posku¹al èim manj motiti poslovanje imetnika licence oziroma ga lahko opravi na lokaciji imetnika licence med obièajnimi poslovnimi urami. IBM lahko kot pomoè pri preverjanju vkljuèi neodvisnega revizorja, pod pogojem, da je IBM z njim podpisal pogodbo o izmenjavi zaupnih informacij. + +8.2 Razre¹itev + +IBM bo imetnika licence v pisni obliki obvestil, èe tak¹no preverjanje poka¾e, da je imetnik licence pri uporabi kateregakoli programa presegel poobla¹èeno uporabo ali èe kako drugaèe ne zadovoljuje doloèb programa za ocenjevanje. Imetnik licence sogla¹a, da bo IBM-u nemudoma in neposredno plaèal bremenitve, ki jih IBM poda na raèunu za 1) tak¹no prese¾eno uporabo, 2) podporo za tak¹no prese¾eno uporabo za trajanje tak¹ne prese¾ene uporabe ali za dve leti (kar je kraj¹e) in 3) vse dodatne stro¹ke in druge obveznosti, ki so ugotovljene kot rezultat tak¹nega preverjanja. + +9. Obvestila drugih proizvajalcev + +Program lahko vkljuèuje kodo drugega proizvajalca, za katero dodeli v tej pogodbi licenco IBM in ne drug proizvajalec. Opombe (èe obstajajo) za kodo drugega proizvajalca ("Obvestila drugih proizvajalcev") so vkljuèena zgolj kot informacija za imetnika licence. Ta obvestila je mogoèe najti v datoteki (datotekah) OPOMBE programa. Informacije o tem, kako pridobiti izvorno kodo za kodo doloèenih drugih proizvajalcev, je mogoèe najti v razdelku Obvestila drugih proizvajalcev. Èe IBM v razdelku Obvestila drugih proizvajalcev identificira kodo drugega proizvajala kot ?kodo drugega proizvajalca z mo¾nostjo spreminjanja?, daje IBM imetniku licence pooblastilo za 1) spreminjanje kode drugega proizvajalca z mo¾nostjo spreminjanja in 2) vzvratno in¾enirstvo v modulih programa, ki so v neposrednem stiku s kodo drugega proizvajalca z mo¾nostjo spreminjanja, pod pogojem, da gre izkljuèno za namen razhro¹èevanja (debugging) popravkov imetnika licence v tak¹ni kodi drugega proizvajalca. IBM-ove servisne in podporne obveznosti (èe obstajajo) veljajo samo za nespremenjen program. + +10. Splo¹no + +a. Noben del te pogodbe ne vpliva na nobene zakonite pravice potro¹nikov, ki jih ni mogoèe odpovedati ali omejiti s pogodbo. + +b. Èe se za katero doloèbo iz te pogodbe ugotovi, da ni veljavna ali da je neizvr¹ljiva, preostale doloèbe iz te pogodbe ostanejo v polni veljavi. + +c. Imetnik licence ne sme izvoziti programa. + +d. Imetnik licence poobla¹èa dru¾bo International Business Machines Corporation in njene podru¾nice (in njene naslednike in poobla¹èence, pogodbenike in IBM-ove poslovne partnerje) za shranjevanje in uporabo poslovnih kontaktnih informacij imetnika licence tam, kjer poslujejo, v povezavi z IBM-ovimi izdelki in storitvami ali pri pospe¹evanju IBM-ovega odnosa z imetnikom licence. + +e. Vsaka stranka bo drugi stranki omogoèila sprejemljivo prilo¾nost za podreditev doloèbam, preden bo zaèela trditi, da druga ne izpolnjuje svojih obveznosti iz te pogodbe. Stranki bosta poskusili v dobri veri razre¹iti vse spore, nesoglasja ali druge zahteve med strankama v povezavi s to pogodbo. + +f. Razen èe drugaèe ne zahteva lokalen zakon brez mo¾nosti pogodbene odpovedi ali omejitve: 1) nobena stranka ne bo spro¾ila pravnega postopka, ne glede na njegovo obliko, za katerokoli zahtevo, nastalo v povezavo s to pogodbo, veè kot dve leti po nastanku vzroka za zahtevo; in 2) po izteku tega èasovnega obdobja vsi tak¹ni zahtevki in druge ustrezne pravice, povezane z zahtevkom, zastarajo. + +g. Niti imetnik licence niti IBM nista odgovorna za neizpolnitev katerekoli obveznosti zaradi vzrokov, ki jih ni mogoèe nadzorovati. + +h. Ta pogodba ne daje pravne podlage za nobene pravice ali zahtevke katerihkoli tretjih strank, niti ni IBM odgovoren za nobene zahtevke tretjih strank zoper imetnika licence, razen kot dovoljuje zgornji podrazdelek 7.1 (Primeri, za katere je IBM lahko odgovoren) za telesne po¹kodbe (vkljuèno s smrtjo) ali ¹kodo na nepremièninah ali v osebnih premièninah, za katere je IBM zakonsko odgovoren tej tretji stranki. + +i. S podpisom te pogodbe se nobena pogodbena stranka ne zana¹a na nobeno predstavljeno dejstvo, ki ni doloèeno v tej pogodbi, kar vkljuèuje, vendar ni omejeno na nobeno predstavljeno dejstvo, ki se nana¹a na: 1) zmogljivost ali delovanje programa, razen kot je izrecno zajamèeno v 5. razdelku (Brez garancij) zgoraj; 2) izku¹nje ali priporoèila drugih strank; ali 3) kakr¹nekoli rezultate ali prihranke, ki jih lahko pridobi imetnik licence. + +j. IBM je z doloèenimi organizacijami (imenovanimi "IBM-ovi poslovni partnerji") podpisal pogodbe za promoviranje, tr¾enje in podpiranje doloèenih programov. IBM-ovi poslovni partnerji so neodvisni in loèeni od IBM-a. IBM ni odgovoren za dejanja ali izjave IBM-ovih poslovnih partnerjev ali za obveznosti, ki jih imajo do imetnika licence. + +k. Doloèbe v zvezi z od¹kodnino za licenco in intelektualno lastnino iz drugih pogodb, ki jih je imetnik licence podpisal z IBM-om (kot je na primer IBM-ova pogodba s stranko), ne veljajo za programske licence, dodeljene s to pogodbo. + +11. Zemljepisno podroèje in pristojna zakonodaja + +11.1 Zakonodaja + +Obe pogodbeni stranki sogla¹ata, da bodo zakoni dr¾ave, v kateri je imetnik licence pridobil licenco za program, uporabljeni za upravljanje, interpretiranje in uveljavljanje vseh ustreznih pravic, dol¾nosti in obveznosti imetnika licence in IBM-a, nastalih na osnovi predmeta te pogodbe ali v povezavi z njim, ne glede na navzkri¾je zakonskih naèel. + +Konvencija Zdru¾enih narodov v zvezi s pogodbami za mednarodno prodajo blaga ne velja. + +11.2 Sodna pristojnost + +Vse pravice, dol¾nosti in obveznosti bodo obravnavala sodi¹èa v dr¾avi, v kateri imetnik licence pridobi licenco za program. + +2. del - pogoji, znaèilni za posamezne dr¾ave + +Za licence, ki so dodeljene v Sloveniji, naslednje doloèbe nadome¹èajo ali spremenijo omenjene doloèbe iz 1. dela. Vse doloèbe iz 1. dela, ki jih ti popravki ne spremenijo, ostanejo nespremenjene in v veljavi. + +DOPOLNILA ZA DR®AVE V EVROPI, NA SREDNJEM VZHODU IN V AFRIKI (EMEA) + +DR®AVE ÈLANICE EVROPSKE UNIJE + +5. Brez garancij + +5. razdelku (Brez garancij) je dodana naslednja izjava: + +V Evropski uniji ("EU") pripadajo naroènikom zakonske pravice, ki izhajajo iz ustrezne dr¾avne zakonodaje, ki ureja prodajo potro¹ni¹kih dobrin. Na tak¹ne pravice ne vplivajo pogoji iz tega 5. razdelka (Brez garancij). + +DR®AVE ÈLANICE EU IN DR®AVE, DOLOÈENE SPODAJ + +Katerakoli evropska dr¾ava, ki je lokalno predpisala varstvo osebnih podatkov ali zakonodajo o varstvu podatkov, podobno modelu iz EU. + +10. Splo¹no + +Naslednje nadome¹èa toèko 10.d: + +(1) Definicije - Za namene te toèke 10.d veljajo naslednje dodatne definicije: + +(a) Poslovne kontaktne informacije - s podjetjem povezane kontaktne informacije, ki jih IBM-u razkrije imetnik licence, vkljuèno z imeni, naslovi delovnih mest, poslovnimi naslovi, telefonskimi ¹tevilkami in elektronskimi naslovi uslu¾bencev in pogodbenikov imetnika licence. Za Avstrijo, Italijo in ©vico vkljuèujejo poslovne kontaktne informacije tudi informacije o imetniku licence in njegovih pogodbenikih kot pravnih osebah (kot so na primer podatki o dohodkih imetnika licence in druge transakcijske informacije). + +(b) Kontaktno osebje podjetja - Uslu¾benci in pogodbeniki imetnika licence, s katerimi so povezane poslovne kontaktne informacije. + +(c) Urad za varstvo podatkov - urad, vzpostavljen na podlagi zakonodaje o varstvu podatkov in elektronskih komunikacijah v ustrezni dr¾avi, za dr¾ave, ki niso èlanice EU, pa urad, ki je odgovoren za nadzor varstva osebnih podatkov v tej dr¾avi ali (za karkoli od zgoraj omenjenega) katerikoli zakonito imenovan pravni naslednik. + +(d) Zakonodaja glede varstva podatkov in elektronskih komunikacij - (i) ustrezna lokalna zakonodaja in veljavni predpisi, ki izvajajo zahteve smernice EU 95/46/EC (glede za¹èite posameznikov v povezavi z obdelavo osebnih podatkov in prostega pretoka tak¹nih podatkov) in smernice EU 2002/58/EC (ki se nana¹a na obdelavo osebnih podatkov in za¹èito zasebnosti v sektorju elektronskih komunikacij); ali (ii) za dr¾ave, ki niso èlanice EU, zakonodaja in/ali predpisi, podani v ustrezni dr¾avi, ki se nana¹ajo na za¹èito osebnih podatkov in urejanje elektronskih komunikacij, ki vkljuèujejo osebne podatke, kar vkljuèuje tudi (za karkoli od zgoraj navedenega) kakr¹nekoli zakonske zamenjave ali popravke. + +(e) IBM-ova skupina - International Business Machines Corporation iz Armonka, New York, ZDA, njene podru¾nice in njeni poslovni partnerji in podpogodbeniki. + +(2) Imetnik licence poobla¹èa IBM za: + +(a) obdelavo in uporabo poslovnih kontaktnih informacij znotraj IBM-ove skupine, ki so v podporo imetniku licence, kar vkljuèuje tudi nudenje podpornih storitev, in za namene pospe¹evanja poslovnega odnosa med imetnikom licence in IBM-ovo skupino, kar vkljuèuje tudi (vendar ni omejeno na) stik s kontaktnim osebjem podjetja (po elektronski po¹ti ali kako drugaèe) in tr¾enje izdelkov in storitev IBM-ove skupine ("doloèen namen"); in + +(b) razkritje poslovnih kontaktnih informacij drugim èlanom IBM-ove skupine, vendar samo za izvajanje doloèenega namena. + +(3) IBM sogla¹a, da bodo vse poslovne kontaktne informacije obdelane v skladu z zakonodajo o varstvu podatkov in elektronskih komunikacijah in bodo uporabljene izkljuèno za "doloèen namen". + +(4) Do mere, ki jo zahteva zakonodaja za varstvo podatkov in elektronske komunikacije, imetnik licence izjavlja, da (a) je pridobil (ali bo pridobil) soglasja kontaktnega osebja podjetja (ali je izdal ali bo izdal obvestila zanje), potrebna, da bi IBM-ovi skupini omogoèil obdelavo in uporabo poslovnih kontaktnih informacij za "doloèen namen". + +(5) Imetnik licence daje IBM-u pooblastilo za prenos poslovnih kontaktnih informacij izven evropskega ekonomskega prostora, pod pogojem, da prenos temelji na pogodbenih doloèbah, ki jih odobri urad za varstvo podatkov, ali da je prenos kako drugaèe dovoljen na podlagi zakonodaje o varstvu podatkov in elektronskih komunikacijah. + +Z125-5543-05 (07/2011) + + +Mednarodna programska licenèna pogodba + +1. del - splo¹ne doloèbe + +S TEM, KO IMETNIK LICENCE PRENESE, NAMESTI, PREKOPIRA, DOSTOPI DO, KLIKNE GUMB ?SPREJMEM? ALI KAKO DRUGAÈE UPORABI PROGRAM, SOGLA©A Z DOLOÈBAMI TE POGODBE. ÈE SPREJMETE TE DOLOÈBE V IMENU IMETNIKA LICENCE, ODGOVARJATE IN JAMÈITE, DA IMATE VSA POOBLASTILA ZA POVEZAVO IMETNIKA LICENCE S TEMI DOLOÈBAMI. ÈE S TEMI DOLOÈBAMI NE SOGLA©ATE, + +* PROGRAMA NE PRENESITE, NE NAMESTITE, NE PREKOPIRAJTE, NE DOSTOPITE DO NJEGA, NE KLIKNITE GUMBA ?SPREJMEM? ALI GA NE UPORABITE IN + +* NEMUDOMA VRNITE NEUPORABLJEN MEDIJ, DOKUMENTACIJO IN DOKAZILO O UPRAVIÈENOSTI STRANKI, KI VAM JIH JE POSLALA, TA PA VAM BO POVRNILA PLAÈAN ZNESEK. ÈE STE PROGRAM PRENESLI, UNIÈITE VSE NJEGOVE KOPIJE. + +1. Definicije + +?Poobla¹èena uporaba? - podana raven, s katero lahko imetnik licence uporablja ali izvaja program. Ta raven je lahko merjena s ¹tevilom uporabnikov, z milijoni storitvenih enot (?MSU-ji?), enotami vrednosti procesorja ("PVU-ji") ali drugimi ravnmi uporabe, ki jih poda IBM. + +?IBM? - International Business Machines Corporation ali ena od njegovih podru¾nic. + +?Podatki o licenciranju? (?LI?) - dokument, ki podaja informacije in kakr¹nekoli dodatne pogoje, specifiène za program. Podatke o licenciranju programa si lahko ogledate na naslovu www.ibm.com/software/sla, najdete pa jih lahko tudi v imeniku programa, jih prika¾ete z vnosom sistemskega ukaza ali si jih ogledate v knji¾ici, ki je prilo¾ena programu. + +?Program? - naslednje, vkljuèno z izvirnikom in vsemi celotnimi ali delnimi kopijami: 1) strojno èitljiva navodila in podatki, 2) komponente, datoteke in moduli, 3) avdiovizualna vsebina (kot so slike, besedilo, posnetki ali slike) in 4) s tem povezano licenèno gradivo (kot so kljuèi in dokumentacija). + +?Potrdilo o upravièenosti? - dokazilo o poobla¹èeni uporabi imetnika licence. Potrdilo o upravièenosti dokazuje tudi kvalifikacijo imetnika licence za garancijo, cene bodoèih posodobitev (èe obstajajo) in potencialne posebne ali promocijske prilo¾nosti. Èe IBM imetniku licence ne posreduje potrdila o upravièenosti, lahko IBM namesto njega sprejme izvirno potrdilo o plaèilu ali kak¹en drug zapis o prodaji pri stranki (IBM ali njegov preprodajalec), pri kateri je imetnik licence pridobil program, in sicer pod pogojem, da podaja ime programa in pridobljeno poobla¹èeno uporabo. + +?Garancijski rok? - eno leto, ki zaène teèi na datum, na katerega je izvornemu imetniku licence odobrena licenca. + +2. Struktura pogodbe + +Ta pogodba je sestavljena iz 1. dela - splo¹ne doloèbe, iz 2. dela - pogoji, znaèilni za posamezne dr¾ave (èe obstajajo), podatkov o licenciranju in potrdila o upravièenosti. To je celotna pogodba med imetnikom licence in IBM-om v zvezi z uporabo programa. Kot tak¹na nadome¹èa vse predhodne ustne ali pisne komunikacije med imetnikom licence in IBM-om v zvezi z njegovo uporabo programa. Doloèbe iz 2. dela lahko nadomestijo ali spremenijo tiste iz 1. dela. V primeru, da pride do navzkri¾ja, imajo prednost pred obema deloma podatki o licenciranju. + +3. Odobritev pogodbe + +Lastnik programa je IBM ali IBM-ov dobavitelj. Program se ne prodaja, paè pa se zanj podeljujejo avtorske pravice in licenca. + +IBM dodeli imetniku licence neizkljuèno licenco za 1) uporabo programa v skladu s poobla¹èeno uporabo, doloèeno v potrdilu o upravièenosti, 2) izdelavo in namestitev kopij, ki bodo v podporo pri tak¹ni poobla¹èeni uporabi in 3) izdelavo varnostne kopije, vendar pod pogojem, da + +a. je imetnik licence pridobil program na zakonit naèin in zadovoljuje doloèbe te pogodbe; + +b. se varnostna kopija uporabi samo, èe ni mogoèe zagnati varnostno prekopiranega programa; + +c. imetnik licence opremi vsako kopijo ali delno kopijo programa z vsemi obvestili in drugimi oznakami o avtorskih pravicah, ki dokazujejo lastni¹tvo; + +d. imetnik licence zagotovi, da vsak uporabnik, ki dostopi do programa (lokalno ali na daljavo) 1) to naredi samo v imenu imetnika licence in 2) pri tem upo¹teva doloèbe te pogodbe; + +e. imetnik licence program 1) uporablja, kopira, spreminja ali distribuira izkljuèno v skladu z doloèbami te pogodbe; 2) v programu ne uporabi vzvratnega prevajanja, vzvratnega in¾enirstva ali ga kako drugaèe prevede, razen kot izrecno dopu¹èa zakon brez mo¾nosti odpovedi pogodbe; 3) ne uporabi komponent, datotek, modulov, avdiovizualne vsebine ali s tem povezanega licenènega gradiva loèeno od programa; ali 4) programa ne podlicencira, daje v najem ali v zakup; in + +f. èe pridobi imetnik licence ta program kot podporni program, ga bo uporabljal izkljuèno kot podporo glavnemu programu in je predmet vseh omejitev iz licence za glavni program; ali, èe pridobi imetnik licence ta program kot glavni program, bo uporabil vse podporne programe samo kot podporo temu programu in zanj veljajo vse omejitve iz te pogodbe. Za namen te toèke ?f? je ?podporni program? tisti program, ki je del drugega IBM-ovega programa (?glavni program?) in je v podatkih o licenciranju glavnega programa doloèen kot podporni program. (Èe ¾eli imetnik licence pridobiti loèeno licenco za podporni program brez teh omejitev, se mora obrniti na stranko, pri kateri je pridobil podporni program.) + +Ta licenca velja za vsako kopijo programa, ki jo izdela imetnik licence. + +3.1 Zamenjave, posodobitve in popravki + +3.1.1 Zamenjave + +Èe zamenjate program s programom iz zamenjave, licenca za zamenjan program nemudoma preneha veljati. + +3.1.2 Posodobitve in popravki + +Èe prejme imetnik licence posodobitev ali popravek za program, sprejme vse dodatne ali drugaène doloèbe, ki veljajo za tak¹no posodobitev ali popravek, in so podane v podatkih o licenciranju. Èe niso podane nobene dodatne ali drugaène doloèbe, za posodobitev ali popravek velja izkljuèno ta pogodba. Èe imetnik licence zamenja program s posodobitvijo, sogla¹a, da bo nemudoma prenehal uporabljati zamenjan program. + +3.2 Licence za doloèeno dobo + +Èe dodeli IBM licenco za program za doloèeno dobo, licenca imetnika licence preneha veljati ob koncu te dobe, razen v primeru, èe se imetnik licence in IBM dogovorita, da jo bosta podalj¹ala. + +3.3 Doba in prenehanje veljavnosti + +Ta pogodba ostane v veljavi, dokler se je ne odpove. + +IBM lahko odpove licenco imetnika licence, èe ta ne upo¹teva doloèb te pogodbe. + +Èe katerakoli stranka zaradi kakr¹negakoli razloga odpove licenco, imetnik licence sogla¹a, da bo nemudoma prenehal uporabljati vse kopije programa in jih bo unièil. Vse doloèbe te pogodbe, ki zaradi svoje narave ostanejo v veljavi tudi po izteku te pogodbe, ostanejo v veljavi do svoje izpolnitve, in veljajo za ustrezne naslednike in poobla¹èence obeh pogodbenih strank. + +4. Bremenitve + +Bremenitve temeljijo na pridobljeni poobla¹èeni uporabi, doloèeni v potrdilu o upravièenosti. IBM ne daje nobenih posojil ali povraèil za ¾e zapadle ali plaèane bremenitve, razen èe je to doloèeno kje drugje v tej pogodbi. + +Èe ¾eli imetnik licence poveèati svojo poobla¹èeno uporabo, mora o tem vnaprej obvestiti IBM ali poobla¹èenega IBM-ovega prodajalca in plaèati vse ustrezne bremenitve. + +5. Davki + +Èe ustrezna slu¾ba za program doloèi takso, davek, pristojbino ali prispevek, kar ne vkljuèuje tistih, ki temeljijo na IBM-ovem èistem dohodku, imetnik licence sogla¹a, da bo plaèal ta znesek, podan na raèunu, ali pa posredoval dokumente o oprostitvi. Imetnik licence je odgovoren za vse davke na osebno lastnino za program od datuma njegove pridobitve. Èe ustrezna slu¾ba doloèi carinsko takso, davek, dajatev ali pristojbino za uvoz ali izvoz, prenos, dostop do ali uporabo programa izven dr¾ave, v kateri je bila zanj imetniku licence dodeljena licenca, se imetnik licence strinja, da je odgovoren za kakr¹enkoli zaraèunan znesek in ga bo tudi plaèal. + +6. Garancija za vraèilo denarja + +Èe imetnik licence iz kakr¹negakoli vzroka ni zadovoljen s programom in je izvirni imetnik licence, lahko odpove licenco in si priskrbi povraèilo zneska, ki ga je plaèal za program, vendar pod pogojem, da imetnik licence vrne program in potrdilo o upravièenosti stranki, pri kateri ju je pridobil, v roku 30 dni od datuma izdaje potrdila o upravièenosti za imetnika licence. Èe gre za licenco za doloèeno dobo, ki je predmet podalj¹anja, si lahko imetnik licence priskrbi denarno vraèilo samo, èe vrne program in njegovo potrdilo u upravièenosti v prvih 30 dneh zaèetne dobe. Èe je imetnik licence prenesel program, naj se za navodila o denarnem vraèilu obrne na stranko, pri kateri ga je pridobil. + +7. Prenos programa + +Imetnik licence lahko prenese program in vse njegove pravice in dol¾nosti na drugo stranko samo, èe ta stranka sogla¹a z doloèbami te pogodbe. Èe katerakoli stran zaradi kakr¹negakoli vzroka prekine licenco, imetnik licence ne sme prenesti programa na drugo stranko. Imetnik licence ne sme prenesti dela 1) programa ali 2) poobla¹èene uporabe programa. Èe imetnik licence prenese program, mora prenesti tudi natisnjeno razlièico te pogodbe, vkljuèno s podatki o licenciranju in potrdilom o upravièenosti. Licenca imetnika licence preneha veljati nemudoma po prenosu. + +8. Garancija in izkljuèitve + +8.1 Omejena garancija + +IBM jamèi, da program pri uporabi v doloèenem operacijskem okolju ustreza njegovim specifikacijam. Specifikacije programa in informacije o doloèenem operacijskem okolju boste na¹li v dokumentaciji, ki ste jo dobili s programom (kot je na primer datoteka Preberi) ali v drugih informacijah, ki jih je objavil IBM (kot je na primer najava). Imetnik licence sogla¹a, da so lahko tak¹na dokumentacija in druga vsebina programa posredovani samo v angle¹kem jeziku, razen èe drugaèe zahteva zakon brez mo¾nosti pogodbene odpovedi ali omejitve. + +Garancija velja samo za nespremenjeni del programa. IBM ne jamèi neprekinjenega ali brezhibnega delovanja programa ali da bo IBM odpravil vse okvare v programu. Za rezultate pri uporabi programa je odgovoren imetnik licence sam. + +V èasu garancijskega roka nudi IBM imetniku licence brezplaèen dostop do IBM-ovih baz podatkov, ki vsebujejo informacije o znanih okvarah programa, popravkih okvar, omejitvah in zaobitjih. Za nadaljnje informacije preglejte priroènik za podporo IBM-ovi programski opremi na naslovu www.ibm.com/software/support. + +Èe program v èasu garancijskega roka ne deluje v skladu z jamstvi in te¾ave ni mogoèe razre¹iti z informacijami, ki so na voljo v IBM-ovih bazah podatkov, lahko imetnik licence vrne program in njegovo potrdilo o upravièenosti stranki (IBM-u ali njegovemu prodajalcu), pri kateri ga je pridobil in si priskrbi povraèilo za plaèan znesek. Po vrnitvi programa licenca imetnika licence preneha veljati. Èe je imetnik licence prenesel program, naj se za navodila o denarnem vraèilu obrne na stranko, pri kateri ga je pridobil. + +8.2 Izkljuèitve + +TE GARANCIJE SO IZKLJUÈNE GARANCIJE IMETNIKA LICENCE IN NADOME©ÈAJO VSE DRUGE GARANCIJE ALI POGOJE, PA NAJ BODO IZRECNI ALI NAKAZANI, KAR VKLJUÈUJE TUDI (VENDAR NI OMEJENO NA) ZAKONSKE GARANCIJE ALI POGOJE PRIMERNOSTI ZA PRODAJO, ZADOVOLJIVO KAKOVOST, USTREZNOST ZA DOLOÈEN NAMEN, NASLOV IN KAKR©NOKOLI GARANCIJO ALI POGOJ NEKR©ENJA. NEKATERE DR®AVE ALI SODNE PRISTOJNOSTI NE DOVOLJUJEJO IZKLJUÈITVE IZRECNIH ALI NAKAZANIH GARANCIJ, ZATO ZGORNJA OMEJITEV ZA VAS LAHKO NE VELJA. V TEM PRIMERU SO TAK©NE GARANCIJE OMEJENE NA TRAJANJE GARANCIJSKEGA ROKA. PO IZTEKU TEGA ROKA NE VELJA VEÈ NOBENA GARANCIJA. NEKATERE DR®AVE ALI SODNE PRISTOJNOSTI NE DOVOLJUJEJO OMEJITVE V TRAJANJU ZAKONSKE GARANCIJE, ZATO ZGORNJA OMEJITEV ZA IMETNIKA LICENCE LAHKO NE VELJA. + +TE GARANCIJE DAJEJO IMETNIKU LICENCE POSEBNE ZAKONSKE PRAVICE. IMETNIKU LICENCE LAHKO PRIPADAJO TUDI DRUGE PRAVICE, KI SE OD DR®AVE DO DR®AVE IN SODNE PRISTOJNOSTI DO SODNE PRISTOJNOSTI RAZLIKUJEJO. + +GARANCIJE V TEM 8. RAZDELKU (GARANCIJA IN IZKLJUÈITVE) DOLOÈA IZKLJUÈNO IBM. TODA IZKLJUÈITVE IZ TEGA PODRAZDELKA 8.2 (IZKLJUÈITVE) VELJAJO TUDI ZA IBM-OVE DOBAVITELJE KODE DRUGIH PROIZVAJALCEV. TI DOBAVITELJI NUDIJO TAK©NO KODO BREZ GARANCIJ ALI POGOJEV KAKR©NEKOLI VRSTE. TA ODSTAVEK NE RAZVELJAVLJA IBM-OVIH GARANCIJSKIH DOL®NOSTI, KI IZHAJAJO IZ TE POGODBE. + +9. Podatki in baze podatkov imetnika licence + +Da bi imetniku licence pomagali pri osamitvi vzroka te¾ave v programu, lahko IBM od njega zahteva, da 1) omogoèi IBM-u oddaljen dostop do svojega sistema ali 2) IBM-u po¹lje podatke o licenciranju ali sistemske podatke. Vendar pa IBM ni dol¾an nuditi tak¹ne pomoèi, èe IBM in imetnik licence ne podpi¹eta loèene pisne pogodbe, v skladu s katero IBM sogla¹a, da bo nudil imetniku licence to vrsto podpore, ki presega IBM-ove garancijske obveznosti iz te pogodbe. V vsakem primeru bo IBM uporabil informacije o napakah in te¾avah za izbolj¹anje svojih izdelkov in storitev in kot pomoè pri nudenju s tem povezanih ponudb za podporo. V ta namen lahko IBM vkljuèi IBM-ove pravne osebe in podpogodbenike (kar vkljuèuje tudi tiste v eni ali veè dr¾avah, v katerih se ne nahaja imetnik licence), imetnik licence pa daje IBM-u v ta namen pooblastilo. + +Imetnik licence ostaja odgovoren za 1) vse podatke in vsebino vseh baz podatkov, ki jih imetnik licence omogoèi za IBM, 2) izbiro in uvedbo postopkov in nadzora v zvezi z dostopanjem, za¹èito, ¹ifriranjem, uporabljanjem in prena¹anjem podatkov (vkljuèno z vsemi osebnimi podatki) in 3) varnostno kopiranje in obnavljanje vseh baz podatkov in shranjenih podatkov. Imetnik licence IBM-u ne bo poslal ali priskrbel dostopa do osebnih informacij, ki so lahko v podatkovni ali kakr¹nikoli drugi obliki, in bo odgovoren za sprejemljive stro¹ke in druge zneske, ki jih lahko nalo¾i IBM v zvezi s tak¹nimi informacijami, ki so po nesreèi posredovane IBM-u, ali za izgubo ali razkritje tak¹nih informacij s strani IBM-a, vkljuèno s tistimi, do katerih pride zaradi zahtevkov katerihkoli tretjih strani. + +10. Omejitev odgovornosti + +Omejitve in izkljuèitve iz tega razdelka 10 (Omejitev odgovornosti) veljajo v celoti, èe jih ne prepoveduje veljaven zakon brez mo¾nosti pogodbene odpovedi. + +10.1 Primeri, za katere je IBM lahko odgovoren + +Zaradi napake IBM-a ali zaradi kak¹ne druge obveznosti lahko pride do okoli¹èin, v katerih je imetnik licence od IBM-a upravièen terjati od¹kodnino. Ne glede na osnovo, na kateri je imetnik licence upravièen do od¹kodnine od IBM-a (vkljuèno s temeljno kr¹itvijo, malomarnostjo, napaèno predstavitvijo dejstev ali kak¹nim drugim pogodbenim ali kazenskim zahtevkom), je IBM-ova celotna odgovornost za vse zahtevke, ki so vlo¾eni skupaj v povezavi z vsakim programom ali kako drugaèe izhajajo iz te pogodbe, omejena na znesek kakr¹nekoli 1) od¹kodnine za telesne po¹kodbe (vkljuèno s smrtjo) in ¹kode v nepremièninah ali v osebnih premièninah in 2) drugo dejansko neposredno ¹kodo do zneska (èe je program predmet bremenitev za doloèeno dobo, do dvanajstmeseène bremenitve), ki ga je imetnik licence plaèal za program, ki je predmet zahtevka. + +Ta omejitev velja tudi za vse IBM-ove razvijalce in dobavitelje programa, in predstavlja maksimum, za katerega so IBM in razvijalci in dobavitelji programa kolektivno odgovorni. + +10.2 Primeri, za katere IBM ni odgovoren + +IBM IN NJEGOVI RAZVIJALCI ALI DOBAVITELJI PROGRAMA POD NOBENIMI POGOJI NE ODGOVARJAJO ZA NASLEDNJE PRIMERE, TUDI ÈE SO OBVE©ÈENI O MO®NOSTI, DA DO NJIH PRIDE: + +a. IZGUBO ALI PO©KODBO PODATKOV; + +b. POSEBNO, NAKLJUÈNO, KAZENSKO ALI POSLEDIÈNO ©KODO ALI KAKR©NOKOLI EKONOMSKO POSLEDIÈNO ©KODO; ALI + +c. IZGUBLJENE DOBIÈKE, POSLOVANJE, DOHODKE, DOBRO IME ALI PRIÈAKOVANE PRIHRANKE. + +11. Preverjanje skladnosti + +Za namen tega razdelka 11 (Preverjanje skladnosti) pomenijo ?Doloèbe programa IPLA? 1) to pogodbo in ustrezne dodatke in transakcijske dokumente, ki jih priskrbi IBM in 2) IBM-ova naèela za programsko opremo, ki se lahko najdejo na spletnem mestu IBM-ovih naèel za programsko opremo (www.ibm.com/softwarepolicies), kar vkljuèuje, vendar ni omejeno na tista naèela, ki se nana¹ajo na varnostno kopiranje, doloèanje cen za podkapaciteto in selitev. + +Pravice in obveznosti iz tega razdelka 11 ostanejo v veljavi v obdobju, v katerem je program licenciran za imetnika licence in ¹e dve leti zatem. + +11.1 Postopek preverjanja + +Imetnik licence sogla¹a, da bo izdelal, ohranil in IBM-u in njegovim revizorjem omogoèil vpogled v natanène zabele¾ene zapise, izhodne podatke sistemskih orodij in druge sistemske informacije, ki zadostujejo za preverjanje, ali imetnik licence uporablja vse programe v skladu z doloèbami programa IPLA, kar vkljuèuje, vendar ni omejeno na vse kvalifikacijske doloèbe za IBM-ovo ustrezno licenciranje in doloèanje cen. Dol¾nost imetnika licence je 1) zagotoviti, da ne prese¾e svoje poobla¹èene uporabe in 2) delovati v skladu z doloèbami programa IPLA. + +Na podlagi ustreznega predhodnega obvestila lahko IBM preveri, ali imetnik licence upo¹teva doloèbe programa IPLA na vseh lokacijah in v vseh okoljih, kjer imetnik licence uporablja (za kakr¹enkoli namen) programe, ki so predmet doloèb programa IPLA. Pri tak¹nem preverjanju bomo posku¹ali èim manj motiti poslovanje imetnika licence in ga lahko opravimo na lokaciji imetnika licence med obièajnimi poslovnimi urami. IBM lahko kot pomoè pri preverjanju vkljuèi neodvisnega revizorja, pod pogojem, da je IBM z njim podpisal pogodbo o zaupnosti. + +11.2 Razre¹itev + +IBM bo imetnika licence v pisni obliki obvestil, èe tak¹no preverjanje poka¾e, da je imetnik licence pri uporabi kateregakoli programa presegel poobla¹èeno uporabo ali èe kako drugaèe ne zadovoljuje doloèb programa IPLA. Imetnik licence sogla¹a, da bo IBM-u nemudoma in neposredno plaèal bremenitve, ki jih IBM poda na raèunu za 1) tak¹no prese¾eno uporabo, 2) podporo za tak¹no prese¾eno uporabo za trajanje tak¹ne prese¾ene uporabe ali za dve leti (kar je kraj¹e) in 3) vse dodatne stro¹ke in druge obveznosti, ki so ugotovljene kot rezultat tak¹nega preverjanja. + +12. Obvestila za druge proizvajalce + +Program lahko vkljuèuje kodo drugega proizvajalca, za katero dodeli v tej pogodbi licenco IBM in ne drug proizvajalec. Opombe (èe obstajajo) za kodo drugega proizvajalca ("Obvestila za druge proizvajalce") so vkljuèena zgolj kot informacija za imetnika licence. Ta obvestila boste na¹li v datoteki (datotekah) OPOMBE programa. Informacije o tem, kako pridobiti izvorno kodo za kodo doloèenih drugih proizvajalcev, boste na¹li v razdelku Obvestila za druge proizvajalce. Èe IBM v razdelku Obvestila za druge proizvajalce identificira kodo drugega proizvajala kot ?kodo drugega proizvajalca z mo¾nostjo spreminjanja?, daje IBM imetniku licence pooblastilo za 1) spreminjanje kode drugega proizvajalca z mo¾nostjo spreminjanja in 2) vzvratno in¾enirstvo v modulih programa, ki so v neposrednem stiku s kodo drugega proizvajalca z mo¾nostjo spreminjanja, pod pogojem, da gre izkljuèno za namen razhro¹èevanja (debugging) popravkov imetnika licence v tak¹ni kodi drugega proizvajalca. IBM-ove servisne in podporne obveznosti (èe obstajajo) veljajo samo za nespremenjen program. + +13. Splo¹no + +a. Noben del te pogodbe ne vpliva na nobene zakonite pravice potro¹nikov, ki jih ni mogoèe odpovedati ali omejiti s pogodbo. + +b. Za programe, ki jih IBM posreduje imetniku licence v materialni obliki, bo IBM izpolnil svoje obveznosti glede dobave in dostave ob dostavi tak¹nih programov ¹pediterju, ki ga imenuje IBM, razen èe se IBM in imetnik licence v pisni obliki ne dogovorita drugaèe. + +c. Èe se za katero doloèbo iz te pogodbe ugotovi, da ni veljavna ali da je ni mogoèe uveljaviti, preostale doloèbe iz te pogodbe ostanejo v polni veljavi. + +d. Imetnik licence sogla¹a, da bo upo¹teval vse lokalne zakone in predpise v zvezi z izva¾anjem in uva¾anjem, vkljuèno s predpisi in prepovedmi v povezavi z embargom in sankcijami o izvozu za doloèene konène uporabe ali za doloèene uporabnike. + +e. Imetnik licence poobla¹èa dru¾bo International Business Machines Corporation in njene podru¾nice (in njene naslednike in poobla¹èence, pogodbenike in IBM-ove poslovne partnerje) za shranjevanje in uporabo poslovnih kontaktnih informacij imetnika licence tam, kjer poslujejo, v povezavi z IBM-ovimi izdelki in storitvami ali pri pospe¹evanju IBM-ovega odnosa z imetnikom licence. + +f. Vsaka stran bo drugi strani omogoèila sprejemljivo prilo¾nost za zadovoljitev doloèb, preden bo zaèela trditi, da druga ne zadovoljuje svojih obveznosti iz te pogodbe. Strani bosta poskusili v dobri veri razre¹iti vse spore, nesoglasja ali druge zahteve med stranmi v povezavi s to pogodbo. + +g. Razen èe drugaèe ne zahteva lokalen zakon brez mo¾nosti pogodbene odpovedi ali omejitve: 1) nobena stranka ne bo spro¾ila pravnega postopka, ne glede na njegovo obliko, za katerokoli zahtevo, nastalo v povezavo s to pogodbo, veè kot dve leti po nastanku vzroka za zahtevo; in 2) po izteku tega èasovnega obdobja vsi tak¹ni zahtevki in druge ustrezne pravice, povezane z zahtevkom, zastarajo. + +h. Niti imetnik licence niti IBM nista odgovorna za neizpolnitev katerekoli obveznosti zaradi vzrokov, ki jih ni mogoèe nadzorovati. + +i. Ta pogodba ne daje osnove za nobene pravice ali zahtevke katerihkoli tretjih strank, niti ni IBM odgovoren za nobene zahtevke tretjih strank proti imetniku licence, razen kot dovoljuje zgornji podrazdelek 10.1 (Primeri, za katere je IBM lahko odgovoren) za telesne po¹kodbe (vkljuèno s smrtjo) ali ¹kodo na nepremièninah ali v osebnih premièninah, za katere je IBM zakonsko odgovoren tej tretji stranki. + +j. S podpisom te pogodbe se nobena pogodbena stranka ne zana¹a na nobeno predstavljeno dejstvo, ki ni doloèeno v tej pogodbi, kar vkljuèuje, vendar ni omejeno na nobeno predstavljeno dejstvo, ki se nana¹a na: 1) zmogljivost ali delovanje programa, razen kot je izrecno zajamèeno v razdelku 8 (Garancija in izkljuèitve) zgoraj; 2) izku¹nje ali priporoèila drugih strank; ali 3) kakr¹nekoli rezultate ali prihranke, ki jih lahko pridobi imetnik licence. + +k. IBM je z doloèenimi organizacijami (imenovanimi "IBM-ovi poslovni partnerji") podpisal pogodbe za promoviranje, tr¾enje in podpiranje doloèenih programov. IBM-ovi poslovni partnerji so neodvisni in loèeni od IBM-a. IBM ni odgovoren za dejanja ali izjave IBM-ovih poslovnih partnerjev ali za obveznosti, ki jih imajo do imetnika licence. + +l. Doloèbe v zvezi z od¹kodnino za licenco in intelektualno lastnino iz drugih pogodb, ki jih je imetnik licence podpisal z IBM-om (kot je na primer IBM-ova pogodba za stranke), ne veljajo za programske licence, dodeljene s to pogodbo. + +14. Geografsko podroèje in zakonodaja + +14.1 Zakonodaja + +Obe pogodbeni stranki sogla¹ata, da bodo zakoni dr¾ave, v kateri je imetnik licence pridobil licenco za program, uporabljeni za upravljanje, interpretiranje in uveljavljanje vseh ustreznih pravic, dol¾nosti in obveznosti imetnika licence in IBM-a, nastalih na osnovi predmeta te pogodbe ali v povezavi z njim, ne glede na navzkri¾je zakonskih naèel. + +Konvencija Zdru¾enih narodov v zvezi s pogodbami za mednarodno prodajo blaga ne velja. + +4.2 Sodna pristojnost + +Vse pravice, dol¾nosti in obveznosti bodo obravnavala sodi¹èa v dr¾avi, v kateri imetnik licence pridobi licenco za program. + +2. del - pogoji, znaèilni za posamezne dr¾ave + +Za licence, dodeljene v Sloveniji, naslednji pogoji nadomestijo ali spremenijo omenjene pogoje iz 1. dela. Vsi pogoji iz 1. dela, ki jih ta dopolnila ne spremenijo, ostanejo nespremenjeni in v veljavi. + +DOPOLNILA ZA DR®AVE EMEA (EVROPA, SREDNJI VZHOD, AFRIKA) + +DR®AVE ÈLANICE EVROPSKE UNIJE + +8. Garancija in izkljuèitve + +razdelku (Garancija in izkljuèitve) je dodano naslednje: + +V Evropski uniji ("EU") za porabnike veljajo zakonske pravice iz ustrezne lokalne zakonodaje, ki je v uporabi za prodajo potro¹ni¹kih dobrin. Na te pravice ne vplivajo doloèbe iz 8. razdelka z naslovom Garancija in izkljuèitve. Omejena garancija velja po vsem svetu. + +13. Splo¹no + +Naslednje nadome¹èa toèko 13.e: + +(1) Definicije - Za namene te toèke 13.e veljajo naslednje dodatne definicije: + +(a) Poslovne kontaktne informacije - s podjetjem povezane kontaktne informacije, ki jih IBM-u razkrije imetnik licence, vkljuèno z imeni, naslovi delovnih mest, poslovnimi naslovi, telefonskimi ¹tevilkami in elektronskimi naslovi uslu¾bencev in pogodbenikov imetnika licence. Za Avstrijo, Italijo in ©vico vkljuèujejo poslovne kontaktne informacije tudi informacije o imetniku licence in njegovih pogodbenikih kot pravnih osebah (kot so na primer podatki o dohodkih imetnika licence in druge transakcijske informacije). + +(b) Osebje poslovnega stika - uslu¾benci in pogodbeniki imetnika licence, s katerimi so povezane poslovne kontaktne informacije. + +(c) Slu¾ba za za¹èito podatkov - slu¾ba, osnovana na osnovi zakonodaje za za¹èito podatkov in elektronske komunikacije v ustrezni dr¾avi, za dr¾ave, ki niso v Evropski uniji pa slu¾ba, ki je odgovorna za nadzorovanje za¹èite osebnih podatkov v tej dr¾avi ali (za karkoli od zgoraj omenjenega) katerakoli njena ustrezno imenovana nasledna enota. + +(d) Zakonodaja za za¹èito podatkov in elektronske komunikacije - (i) ustrezna lokalna zakonodaja in predpisi, ki so v veljavi z namenom izvajanja zahtev smernice EU 95/46/EC (za za¹èito posameznikov pri obdelavi osebnih podatkov in pri prostem prena¹anju tak¹nih podatkov) in smernice EU 2002/58/EC (glede obdelave osebnih podatkov in za¹èite zasebnosti v sektorju elektronskih komunikacij); ali (ii) za dr¾ave, ki niso v Evropski uniji zakonodaja in/ali predpisi, ki so v veljavi v ustrezni dr¾avi za za¹èito osebnih podatkov in reguliranje elektronskih komunikacij, ki vkljuèujejo osebne podatke, kar vkljuèuje (za karkoli od zgoraj omenjenega) kakr¹nokoli njihovo ustavno zamenjavo ali popravek. + +(e) IBM-ova skupina - International Business Machines Corporation iz Armonka, New York, ZDA, njegove podru¾nice ter ustrezni poslovni partnerji in podpogodbeniki. + +(2) Imetnik licence poobla¹èa IBM za: + +(a) obdelavo in uporabo poslovnih kontaktnih informacij znotraj IBM-ove skupine za nudenje podpore imetniku licence, kar vkljuèuje tudi nudenje podpornih storitev, in za izbolj¹anje poslovnega odnosa med imetnikom licence in IBM-ovo skupno, kar brez omejitve vkljuèuje tudi stik z osebjem za poslovni stik (po elektronski po¹ti ali v kak¹ni drugi obliki), in tr¾enje izdelkov in storitev IBM-ove skupine ("doloèen namen"); in + +(b) razkritje poslovnih kontaktnih informacij drugim èlanom iz IBM-ove skupine izkljuèno za "doloèen namen". + +(3) IBM sogla¹a, da bodo vse poslovne kontaktne informacije obdelane v skladu z zakonodajo o za¹èiti podatkov in elektronske komunikacije in bodo uporabljene izkljuèno za "doloèen namen". + +(4) Do mere, ki jo zahteva zakonodaja za za¹èito podatkov in elektronske komunikacije, imetnik licence izjavlja, da (a) je pridobil (ali bo pridobil) privolitve osebja zstika (ali je izdal ali bo izdal obvestila zanje), potrebne, da bi IBM-ovi skupini omogoèil obdelavo in uporabo poslovnih kontaktnih informacij za "doloèen namen". + +(5) Imetnik licence poobla¹èa IBM za prenos poslovnih kontaktnih informacij izven evropskega tr¾nega prostora, pod pogojem, da je prenos izveden v skladu s pogodbenimi pogoji, ki jih odobri slu¾ba za za¹èito podatkov, ali da je kako drugaèe dovoljen z zakonodajo za za¹èito podatkov in elektronske komunikacije. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_tr b/charts/mq-advancedserver/LICENSE_locale/LICENSE_tr new file mode 100644 index 0000000..421d3e0 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_tr @@ -0,0 +1,1173 @@ +BÝLDÝRÝM + +Bu belge, birden çok Program için geçerli olan ve aþaðýda yer alan Lisans Bilgileri belgelerini içerir. Her bir Lisans Bilgileri belgesi geçerli olduðu Program(lar)ý tanýmlar. Yalnýzca, Lisans Alan Tarafýn kendilerine iliþkin yetkilerini satýn almýþ olduðu Program(lar)la ilgili Lisans Bilgileri belgeleri geçerlidir. + + +============================================== + + +ÖNEMLÝ: DÝKKATLE OKUYUN + +Aþaðýda iki lisans sözleþmesi sunulmuþtur. + +1. Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi +2. IBM Uluslararasý Program Lisans Sözleþmesi + +Lisans Alan Taraf, bu Programý (deðerlendirme, deneme, gösterimini yapma amaçlarý veya "dene veya satýn al" kampanyasý dýþýnda) üretim amacýyla kullanmak üzere satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak IBM Uluslararasý Program Lisans Sözleþmesi'ni hiçbir deðiþiklik olmaksýzýn kabul eder. + +Lisans Alan Taraf bu Programý, deðerlendirme, deneme, gösterimini yapma amaçlarýyla veya "dene veya satýn al" kampanyasý kapsamýnda kullanmak üzere (topluca "Deðerlendirme" olarak belirlenen amaçla) satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak (i) Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi'ni ("Deðerlendirme Lisansý") hiçbir deðiþiklik olmaksýzýn ve (ii) IBM Uluslararasý Program Lisans Sözleþmesi'ni ("UPLS") hiçbir deðiþiklik olmaksýzýn kabul eder. + +Deðerlendirme Lisansý, Lisans Alan Tarafýn Deðerlendirme süresi boyunca geçerli olacaktýr. + +Deðerlendirme süresi sonunda, Lisans Alan taraf, bir tedarik sözleþmesi (örneðin, IBM Uluslararasý Passport Advantage veya IBM Passport Express Advantage sözleþmeleri gibi) imzalayarak bu Programý edinmeyi (veya Deðerlendirme sürecinden sonra kullanmak üzere bu Programýn ek kopyalarýný edinmeyi) seçtiyse, Uluslararasý Program Lisans Sözleþmesi (UPLS) otomatik olarak geçerli olacaktýr. + +Deðerlendirme Lisansý ve UPLS ayný anda yürürlükte olamayacaðý gibi, bu Sözleþmelerden birinin koþullarý diðerinin koþullarýný deðiþtirmez. Deðerlendirme Lisansý ile UPLS birbirlerinden baðýmsýz sözleþmelerdir. + +Bu iki lisans sözleþmesinin tam metni aþaðýdadýr. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Programlarýn Deðerlendirilmesi Ýçin Uluslararasý Lisans Sözleþmesi (Z125-5543-05) geçerli olur. + +Program Adý (Program Numarasý): +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +Aþaðýdaki standart koþullar, Lisans Alan Tarafýn Programý kullanýmý için geçerlidir. + +Deðerlendirme Süresi + +Deðerlendirme süresi, Lisans Alan Tarafýn bu Sözleþmenin koþullarýný kabul ettiði tarihte baþlar ve 90 gün sonra sona erer. + +Destekleyici Programlar + +Bu Program birden çok ürünün bulunduðu bir paket olarak lisanslanýr ve aþaðýda belirtilen Destekleyici Programlarý içerir. Lisans Alan Tarafa, bu tür Destekleyici Programlarý, Lisans Alan Tarafýn Asýl Programý (Principal Program) (iþbu Lisans Bilgileri Belgesinin baþka herhangi bir yerinde daha geniþ yetkiler saðlanmadýðý sürece) yalnýzca bu Sözleþme kapsamýnda ve bu Programa iliþkin Yetki Belgesinin (POE) sýnýrlarý içinde kullanýmýný desteklemek üzere kurmasý ve kullanmasý için yetki verilir. "Lisans Alan Tarafýn .....kullanýmýný desteklemek üzere" ifadesi, Asýl Programýn veya diðer bir Destekleyici Programýn lisanslý kullanýmý için gerekli olan veya Asýl Programýn veya diðer bir Destekleyici Programýn lisanslý kullanýmýyla baþka bir þekilde doðrudan iliþkili olan bu tür kullanýmlarý içerir. Destekleyici Programlar, baþka hiçbir amaçla kullanýlamaz. Lisans Alan Tarafýn, Destekleyici Programlarý Asýl Programdan ayrý olarak devretme ya da yeniden pazarlama yetkisi yoktur. Bir Destekleyici Programla birlikte lisans koþullarý ve eðer varsa, Lisans Alan Tarafýn bu Destekleyici Programý kullanýmý için geçerli olan koþullar da gönderilebilir. Asýl Programýn koþullarýyla Destekleyici Programýn koþularý arasýnda bir çeliþki olmasý durumundan iþbu Lisans Bilgileri belgesinin koþullarý, Destekleyici Programýn koþullarýný hükümsüz kýlarak onlarýn yerine geçer. Lisans Alan Tarafýn bu Programý kullaným hakký sona erdiðinde ya da sonlandýrýldýðýnda, Destekleyici Programlarýn tüm kopyalarýný kullanmaya son vermesi, bunlarý yok etmesi veya derhal Programý edindiði üçüncü kiþiye iade etmesi gerekir. Lisans Alan Taraf, Destekleyici Programlarý yüklediyse, bu Programý edindiði tarafla baðlantýya geçmelidir. Lisans Alan Taraf, Destekleyici Programlarý, yukarýda belirtilen sýnýrlarý aþacak þekilde kullanmak amacýyla lisanslamak isterse, uygun lisansý edinmek için IBM Satýþ Temsilcisiyle veya bunlarý edindiði tarafla görüþmelidir. + +Bu Programlarla birlikte lisanslanan Destekleyici Programlar aþaðýda belirtilmiþtir: +IBM WebSphere Application Server Liberty V17.0 + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Uluslararasý Program Lisans Sözleþmesi (Z125-3301-14) geçerli olur. + +Program Adý (Program Numarasý): +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +Aþaðýdaki standart koþullar, Lisans Alan Tarafýn Programý kullanýmý için geçerlidir. + +Sýnýrlý kullaným hakký + +Uluslararasý Program Lisans Sözleþmesi'nde ("UPLS") ve bu Lisans Bilgileri belgesinde açýklandýðý þekilde IBM, Lisans Alan Tarafa bu Programý kullanmasý için sýnýrlý bir hak verir. Bu hak, Yetki Belgesinde kanýtlandýðý þekilde, Lisans Alan Tarafça ödemesi yapýlmýþ olan Ýþlemci Deðer Birimi ("PVU"), Kaynak Deðer Birimi ("RVU"), Deðer Birimi ("VU") ya da belirlenmiþ diðer bir kullaným seviyesi gibi bir Yetkili Kullaným seviyesiyle sýnýrlanmýþtýr. Ayrýca, Lisans Alan Tarafýn kullanýmý, ayrýca belirli bir makineyle ya da yalnýzca bir Destekleyici Programla ya da baþka kýsýtlamalara tabi olarak sýnýrlanabilir. Lisans Alan Taraf bu Programýn ekonomik deðerinin tümünü ödemediðinde, ek ücretler ödenmedikçe Programýn baþka hiçbir þekilde kullanýlmasýna izin verilmez. Ayrýca, Lisans Alan Tarafýn bu Programý kullanmak üzere edindiði yetkilerin tabi olduðu geçerli sözleþmelerde açýkça belirtilmediði sürece, Lisans Alan Tarafa bu Programý herhangi bir üçüncü kiþiye ticari BT hizmetleri saðlamak, ticari barýndýrma ya da zaman paylaþýmý sunmak ya da alt lisans vermek, kiralamak ya da finansal olarak kiralamak üzere kullanma yetkisi de verilmez. Ek ücretlerin ödenmesine baðlý olarak ya da farklý veya tamamlayýcý koþullar kapsamýnda Lisans Alan Tarafa ek haklar saðlanabilir. IBM, Lisans Alan Tarafa bu tür ek haklarý saðlayýp saðlamamaya iliþkin karar verme hakkýný saklý tutar. + +Belirtimler + +Programýn belirtimleri, Programýn Duyuru Mektuplarýndaki toplu Tanýtým ve Teknik Bilgiler (Description and Technical Information) baþlýklý bölümlerde bulunabilir. + +Destekleyici Programlar + +Bu Program birden çok ürünün bulunduðu bir paket olarak lisanslanýr ve aþaðýda belirtilen Destekleyici Programlarý içerir. Lisans Alan Tarafa, bu tür Destekleyici Programlarý, Lisans Alan Tarafýn Asýl Programý (Principal Program) (iþbu Lisans Bilgileri Belgesinin baþka herhangi bir yerinde daha geniþ yetkiler saðlanmadýðý sürece) yalnýzca bu Sözleþme kapsamýnda ve bu Programa iliþkin Yetki Belgesinin (POE) sýnýrlarý içinde kullanýmýný desteklemek üzere kurmasý ve kullanmasý için yetki verilir. "Lisans Alan Tarafýn .....kullanýmýný desteklemek üzere" ifadesi, Asýl Programýn veya diðer bir Destekleyici Programýn lisanslý kullanýmý için gerekli olan veya Asýl Programýn veya diðer bir Destekleyici Programýn lisanslý kullanýmýyla baþka bir þekilde doðrudan iliþkili olan bu tür kullanýmlarý içerir. Destekleyici Programlar, baþka hiçbir amaçla kullanýlamaz. Lisans Alan Tarafýn, Destekleyici Programlarý Asýl Programdan ayrý olarak devretme ya da yeniden pazarlama yetkisi yoktur. Bir Destekleyici Programla birlikte lisans koþullarý ve eðer varsa, Lisans Alan Tarafýn bu Destekleyici Programý kullanýmý için geçerli olan koþullar da gönderilebilir. Asýl Programýn koþullarýyla Destekleyici Programýn koþularý arasýnda bir çeliþki olmasý durumundan iþbu Lisans Bilgileri belgesinin koþullarý, Destekleyici Programýn koþullarýný hükümsüz kýlarak onlarýn yerine geçer. Lisans Alan Tarafýn bu Programý kullaným hakký sona erdiðinde ya da sonlandýrýldýðýnda, Destekleyici Programlarýn tüm kopyalarýný kullanmaya son vermesi, bunlarý yok etmesi veya derhal Programý edindiði üçüncü kiþiye iade etmesi gerekir. Lisans Alan Taraf, Destekleyici Programlarý yüklediyse, bu Programý edindiði tarafla baðlantýya geçmelidir. Lisans Alan Taraf, Destekleyici Programlarý, yukarýda belirtilen sýnýrlarý aþacak þekilde kullanmak amacýyla lisanslamak isterse, uygun lisansý edinmek için IBM Satýþ Temsilcisiyle veya bunlarý edindiði tarafla görüþmelidir. + +Bu Programlarla birlikte lisanslanan Destekleyici Programlar aþaðýda belirtilmiþtir: +IBM WebSphere Application Server Liberty V17.0 + +Gerekli Yetkilerin Oluþturulmasý için Kullanýlmayan Bileþenler + +Lisans Alan Tarafýn bu Programý kurmasý ya da kullanmasý için gereken yetki sayýsý belirlenirken, aþaðýda belirtilen Program bileþenlerinin kurulumu ve kullanýmý dikkate alýnmaz. Baþka bir deyiþle, Lisans Alan Taraf aþaðýdaki Program bileþenlerini lisans koþullarý kapsamýnda kurabilir ve kullanabilir, ancak bu bileþenler bu Program için gereken yetki sayýsýnýn belirlenmesinde kullanýlmaz. +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Yeniden Daðýtýlabilenler + +Bu Program, Yeniden Daðýtýlabilenler olarak adlandýrýlan bileþenleri içeriyorsa bunlar, bu Programla birlikte gönderilen REDIST adlý dosyada tanýmlanýr. Bu Sözleþmede saðlanan lisans haklarýna ek olarak Lisans Alan Taraf Yeniden Daðýtýlabilenleri aþaðýdaki koþullara uygun olarak daðýtabilir: +1) Yeniden Daðýtým iþlemi, yalnýzca nesne kodu biçiminde ve bu Programla birlikte gönderilen REDIST adlý dosyada veya diðer belgelerde yer alan yönergelere ve belirtimlere uygun olarak gerçekleþtirilebilir; +2) Bu Programla birlikte gönderilen belgelerde Lisans Alan Tarafa, Yeniden Daðýtýlabilenleri deðiþtirme izni açýkça veriliyorsa, Lisans Alan Tarafýn yapacaðý deðiþikliklerin ilgili belgelerdeki yönergelerin ve belirtimlerin tümüne uygun olmasý gerekir; eðer varsa, bu tür deðiþiklikler, Yeniden Daðýtýlabilenler olarak deðerlendirilmelidir; +3) Yeniden Daðýtýlabilenler, yalnýzca bu Program kullanýlarak geliþtirilen Lisans Alan Tarafýn Uygulamasýnýn ("Lisans Alan Tarafýn Uygulamasý") bir parçasý olarak ve yalnýzca Lisans Alan Tarafýn müþterilerini, ilgili Uygulamayý kullanmalarýyla baðlantýlý olarak desteklemek amacýyla daðýtýlabilir. Lisans Alan Tarafýn Uygulamasýnýn son kullanýcýlara, Lisans Alan Tarafýn yazýlým ürününün son kullanýcýlar tarafýndan edinilmesinde bu Yeniden Daðýtýlabilenlerin temel motivasyon olmayacaðý þekilde, önemli bir katma deðer saðlamasý gerekir; +4) Yeniden Daðýtýlabilenlerin Java Çalýþtýrma Zamaný Ortamý (Java Runtime Environment) içermesi durumunda, Uygulama, yalnýzca genel bilgisayar aygýtlarýnda (örneðin: dizüstü bilgisayarlar, masaüstü bilgisayarlar ve sunucular) çalýþtýrýlmak üzere tasarlandýysa ve elde taþýnabilen veya yaygýn olarak kullanýlan diðer aygýtlarda (örneðin: bir mikroiþlemci içeren ancak bilgiiþlem, birincil çalýþma amaçlarý olarak belirlenmiþ olmayan aygýtlar) çalýþtýrýlmak üzere tasarlanmadýysa, Lisans Alan Tarafýn kendi Uygulamasýyla birlikte diðer Java-dýþý Yeniden Daðýtýlabilenleri de içermesi gerekir; +5) Lisans Alan Taraf, Yeniden Daðýtýlabilenlerde yer alan herhangi bir telif hakký bildirimini veya bildirim dosyasýný kaldýramaz; +6) Lisans Alan Taraf, Lisans Alan Tarafýn Uygulamasýnýn kullanýlmasý veya daðýtýlmasýndan dolayý yöneltilen iddialara karþý IBM'i, IBM'in saðlayýcýlarýný ve distribütörlerini tazmin etmekle yükümlüdür; +7) Lisans Alan Taraf, orijinal Yeniden Daðýtýlabilen dosyalar/modüller ile ayný yol adýný kullanamaz; +8) Lisans Alan Taraf, IBM'in, saðlayýcýlarýnýn veya distribütörlerinin önceden yazýlý izni olmadan, IBM'in, saðlayýcýlarýnýn veya distribütörlerinin adlarýný veya ticari markalarýný, Lisans Alan Tarafýn Uygulamasýnýn pazarlanmasýyla baðlantýlý olarak kullanamaz; +9) IBM, saðlayýcýlarý veya distribütörleri, Yeniden Daðýtýlabilenleri ve iliþkili belgeleri herhangi bir destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALEYE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR; +10) Lisans Alan Tarafýn Uygulamasýnda ve Yeniden Daðýtýlabilenlerde yaptýðý deðiþikliklere iliþkin tüm teknik desteðin saðlanmasýndan tamamen Lisans Alan Taraf sorumludur; ve +11) Lisans Alan Taraf, Uygulamasýnýn son kullanýcýsý ile gerçekleþtireceði lisans sözleþmesinde, bu Yeniden Daðýtýlabilenlerin veya bunlardaki deðiþikliklerin, i) Uygulamasýnýn geçerli kýlýnmasý dýþýnda bir amaçla kullanýlamayacaðý, ii) kopyalanamayacaðý (yedekleme amacý dýþýnda), iii) Lisans Alan Tarafýn Uygulamasýndan ayrý olarak baþkalarýna daðýtýlamayacaðý veya devredilemeyeceði ya da iv) geçerli yasalarýn sözleþme ile deðiþtirilmesine olanak tanýmayarak açýkça izin verdiði durumlar dýþýnda, ters çevrilemeyeceði, ters derlenemeyeceði veya baþka bir yolla çevrilemeyeceði konusunda son kullanýcýyý önceden bilgilendirecektir. Ayrýca, Lisans Alan Tarafýn lisans sözleþmesindeki koþullarýn, IBM açýsýndan, en az bu Sözleþmede yer alan koþullar kadar koruyucu olmasý gereklidir. + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + +Lisans Alan Taraf, bir Programýn REDIST dosyasýnda listelenen Kaynak Bileþenlerin ve Örnek Malzemelerin deðiþtirilmiþ sürümlerini, bu lisansta ve REDIST dosyasýnda yer alan koþullara uygun olarak yeniden daðýtabilir. + +Aþaðýdaki ölçü birimleri, Lisans Alan Tarafýn Programý kullanýmý için geçerli olabilir. + +Ýþlemci Deðer Birimi (PVU) + +Ýþlemci Deðer Birimi (PVU), bu Programýn lisanslandýðý ölçüm birimidir. Gereken Ýþlemci Deðer Birimi (PVU) yetkilerinin sayýsý için iþlemci teknolojisi (Ýþlemci Satýcý Firmasý, Marka, Tip ve Model Numarasý esasýna göre þu adresteki PVU Tablosunda tanýmlanmýþtýr: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ve bu Program tarafýndan kullanýlan iþlemcilerin sayýsý esas alýnýr. IBM, PVU esasýna göre lisanslamanýn amacý açýsýndan bir çip üzerinde yer alan her iþlemci çekirdeði için bir iþlemci tanýmlamaya devam eder. Örneðin, bir çift çekirdekli iþlemci çipinde iki adet iþlemci çekirdeði bulunur. + +Lisans Alan Taraf, bu Programý, Passport Advantage Alt Kapasite Lisanslama Koþullarý'na (aþaðýda belirtilen Web sayfasýna bakýn) göre Tam Kapasite lisanslama veya Sanallaþtýrma Kapasitesi (Alt Kapasite) lisanslama esasýný kullanarak etkinleþtirebilir. Tam Kapasite lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, bu Programýn sürekli olarak kaldýrýldýðý sunucular hariç olmak üzere, bu Program tarafýndan kullanýlan veya yönetilen fiziksel donaným ortamýnda yer alan etkinleþtirilmiþ tüm iþlemci çekirdeklerini* kapsamaya yetecek sayýda Ýþlemci Deðer Birimi (PVU) yetkisi edinmesi gerekir. Sanallaþtýrma Kapasitesi lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, Sanallaþtýrma Kapasitesi Lisansý Sayým Kurallarý'na (Virtualization Capacity License Counting Rules) göre tanýmlanan ve bu Program tarafýndan kullanýlan veya yönetilen tüm etkin iþlemci çekirdeklerini kapsamaya yetecek sayýda yetkiyi edinmesi gerekir. Söz konusu kurallarla ilgili bilgi edinmek için aþaðýda yer alan adrese bakýn: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Etkinleþtirilmiþ iþlemci çekirdeði, iþlemci çekirdeklerinin kapasitesinin, sanallaþtýrma teknolojileri, iþletim sistemi komutlarý, BIOS ayarlarý veya benzeri sýnýrlamalarla sýnýrlandýrýlabilmesinden veya sýnýrlý olmasýndan baðýmsýz olarak herhangi bir fiziksel veya sanal sunucuda kullanýlabilir. + +Sanal Ýþlemci Çekirdeði + +Sanal Ýþlemci Çekirdeði, bu Programýn lisanslanabileceði bir ölçü birimidir. Fiziksel Sunucu, bir veya daha fazla kullanýcý ve istemci aygýtýnda istenen yordamlarý, komutlarý veya uygulamalarý yürüten ve iþlemci birimleri, bellek ve girdi/çýktý kapasitesine sahip fiziksel bir bilgisayardýr. Raflarýn, blade kasalarýnýn veya diðer benzer ekipmanýn kullanýlmasý durumunda, gerekli bileþenlere sahip her bir ayrýlabilir fiziksel aygýt (örneðin, bir blade aygýtý veya raf düzenekli bir aygýt) kendi baþýna ayrý bir Fiziksel Sunucu olarak deðerlendirilir. Sanal Sunucu, bir Fiziksel Sunucuda veya bölümlenmemiþ bir Fiziksel Sunucuda kullanýlmak üzere saðlanan kaynaklarýn bölümlenmesiyle oluþturulan bir sanal bilgisayar anlamýna gelir. Ýþlemci Çekirdeði (genellikle bir iþlemci veya CPU olarak adlandýrýlýr) bir bilgi iþlem aygýtý içinde yer alan ve yönergeleri yorumlayan ve yürüten iþlevsel birim anlamýna gelir. Bir Ýþlemci Çekirdeði, en az bir yönerge denetim birimi ve bir veya daha fazla aritmetik veya mantýksal birimi içerir. Sanal Ýþlemci Çekirdeði, bölümlenmemiþ bir Fiziksel Sunucudaki bir Ýþlemci Çekirdeði veya bir Sanal Sunucuya atanan bir sanal çekirdektir. Lisans Alan Tarafýn, bu Program tarafýndan kullanýlan her bir Sanal Ýþlemci Çekirdeði için yetki edinmesi gerekir. + +Her bir Fiziksel Sunucu için, Lisans Alan Tarafýn, hangisi daha azsa, 1) Program için saðlanan tüm Sanal Sunucular üzerindeki kullanýlabilir tüm Sanal Ýþlemci Çekirdeklerinin toplamý veya 2) Fiziksel Sunucu üzerindeki kullanýlabilir tüm Ýþlemci Çekirdekleri için yeterli sayýda yetkiye sahip olmasý gerekir. + +Yukarýdakilere ek olarak, aþaðýdaki koþullar Lisans Alan Tarafýn bu Programý kullanýmý için geçerlidir. + +Boþta Duran Yedekleme Konfigürasyonlarý + +Bu bölümün amaçlarý açýsýndan bir "Boþta Duran Yedekleme" konfigürasyonu için bu Programýn bir kopyasý, yüksek düzeyde kullanýlabilirlik çözümünün parçasýný oluþturan bir sunucunun üzerine kurulmuþtur ve etkin sunucu üzerindeki Program kopyasý kullanýlamaz duruma geldiðinde Program yedek sistem olarak iþlev gören bu sunucuya geçer. Bir sunucu, yalnýzca bir yedek sisteme geçiþ iþlemi gerçekleþinceye kadar, özel olarak yedek sisteme geçiþ senaryolarýna destek veren yönetim iþlemleri için kullanýldýðýnda, "boþta duran" olarak deðerlendirilir. + +Bu Program, uygun þekilde lisanslandýðý durumlar dýþýnda, bir Boþta Duran Yedekleme sunucusuna kurulamaz. + +Bu Program bir Boþta Duran Yedekleme konfigürasyonunda Multi-Instance Queue Manager (Birden Çok Eþgörünümlü Kuyruk Yöneticisi) özelliðiyle birlikte kullanýlýyorsa, bu Programýn bir kopyasý yedekleme amaçlarýyla bir Boþta Duran Yedekleme sunucusunda bulundurulabilir ve çalýþtýrýlabilir, ancak "boþta duran" özelliðini kaybetmemesi ve etkin sunucu yedek sisteme geçmek üzere Boþta Duran Yedekleme Sunucusuna geçmediði sürece hiçbir tür üretim amaçlý iþte kullanýlmamasý gerekir. Etkin sunucu yedek sisteme geçmek üzere Boþta Duran Yedekleme Sunucusuna geçtiðinde, Programýn Boþta Duran Yedekleme kopyasý hata süresi boyunca üretim amaçlý iþ görmek üzere kullanýlabilir. + +Bu Program bir Boþta Duran Yedekleme konfigürasyonunda Yüksek Düzeyde Kullanýlabilirlik sistemleriyle birlikte kullanýlýyorsa, bu Programýn bir kopyasý yedekleme amaçlarýyla Boþta Duran Yedekleme sunucusunda bulundurulabilir, ancak çalýþtýrýlamaz (ve bu nedenle hiçbir tür üretim amaçlý iþte kullanýlamaz). Ancak, etkin sunucunun bir hata nedeniyle çalýþmamasý durumunda Yüksek Düzeyde Kullanýlabilirlik bileþenleri tarafýndan otomatik olarak çalýþtýrýlýr ve bu durumda Programýn Boþta Duran Yedekleme sunucusunda bulunan kopyasý hata süresi boyunca üretim amaçlý iþ görmek üzere kullanýlabilir. + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +ÖNEMLÝ: DÝKKATLE OKUYUN + +Aþaðýda iki lisans sözleþmesi sunulmuþtur. + +1. Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi +2. IBM Uluslararasý Program Lisans Sözleþmesi + +Lisans Alan Taraf, bu Programý (deðerlendirme, deneme, gösterimini yapma amaçlarý veya "dene veya satýn al" kampanyasý dýþýnda) üretim amacýyla kullanmak üzere satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak IBM Uluslararasý Program Lisans Sözleþmesi'ni hiçbir deðiþiklik olmaksýzýn kabul eder. + +Lisans Alan Taraf bu Programý, deðerlendirme, deneme, gösterimini yapma amaçlarýyla veya "dene veya satýn al" kampanyasý kapsamýnda kullanmak üzere (topluca "Deðerlendirme" olarak belirlenen amaçla) satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak (i) Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi'ni ("Deðerlendirme Lisansý") hiçbir deðiþiklik olmaksýzýn ve (ii) IBM Uluslararasý Program Lisans Sözleþmesi'ni ("UPLS") hiçbir deðiþiklik olmaksýzýn kabul eder. + +Deðerlendirme Lisansý, Lisans Alan Tarafýn Deðerlendirme süresi boyunca geçerli olacaktýr. + +Deðerlendirme süresi sonunda, Lisans Alan taraf, bir tedarik sözleþmesi (örneðin, IBM Uluslararasý Passport Advantage veya IBM Passport Express Advantage sözleþmeleri gibi) imzalayarak bu Programý edinmeyi (veya Deðerlendirme sürecinden sonra kullanmak üzere bu Programýn ek kopyalarýný edinmeyi) seçtiyse, Uluslararasý Program Lisans Sözleþmesi (UPLS) otomatik olarak geçerli olacaktýr. + +Deðerlendirme Lisansý ve UPLS ayný anda yürürlükte olamayacaðý gibi, bu Sözleþmelerden birinin koþullarý diðerinin koþullarýný deðiþtirmez. Deðerlendirme Lisansý ile UPLS birbirlerinden baðýmsýz sözleþmelerdir. + +Bu iki lisans sözleþmesinin tam metni aþaðýdadýr. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Programlarýn Deðerlendirilmesi Ýçin Uluslararasý Lisans Sözleþmesi (Z125-5543-05) geçerli olur. + +Program Adý (Program Numarasý): +IBM MQ Advanced V9.0.3 (Evaluation) + +Aþaðýdaki standart koþullar, Lisans Alan Tarafýn Programý kullanýmý için geçerlidir. + +Deðerlendirme Süresi + +Deðerlendirme süresi, Lisans Alan Tarafýn bu Sözleþmenin koþullarýný kabul ettiði tarihte baþlar ve 90 gün sonra sona erer. + +Paketlenmiþ Programlar + +Bu Program, aþaðýda belirtilen Paketlenmiþ Programlardan oluþan, birden çok ürünün bulunduðu bir paket olarak lisanslanýr. Lisans Alan Tarafa, bu tür Paketlenmiþ Programlarý, Programa iliþkin Yetki Belgelerinin sýnýrlarý dahilinde ve Lisans Bilgileri belgesinde belirtildiði þekilde kurmasý ve kullanmasý için yetki verilir. Lisans Alan Tarafýn, Paketlenmiþ Programlarý birden çok ürünün yer aldýðý paketten ayrý olarak devretme ya da yeniden pazarlama yetkisi yoktur. Bir Paketlenmiþ Programla birlikte lisans koþullarý ve eðer varsa, Lisans Alan Tarafýn bu Paketlenmiþ Programý kullanýmý için geçerli olan koþullar da gönderilebilir. Herhangi bir çeliþki durumunda, bu Lisans Bilgileri belgesinde yer alan koþullar Paketlenmiþ Programýn koþullarýný hükümsüz kýlarak onlarýn yerine geçer. Lisans Alan Tarafýn, bu Programý kullaným hakký sona erdiðinde ya da sona erdirildiðinde, Paketlenmiþ Programlarýn tüm kopyalarýný kullanmaya son vermesi, bunlarý yok etmesi veya Programý edindiði üçüncü kiþiye derhal iade etmesi gerekir. Lisans Alan Taraf, Paketlenmiþ Programlarý karþýdan yüklediyse, bu Programý edindiði tarafla baðlantýya geçmelidir. Lisans Alan Taraf, Paketlenmiþ Programlarý, yukarýda belirtilen sýnýrlarý aþacak þekilde kullanmak amacýyla lisanslamak isterse, uygun lisansý edinmek için IBM Satýþ Temsilcisiyle veya Programý edindiði tarafla görüþmelidir. + +Bu Programlarla birlikte lisanslanan Paketlenmiþ Programlar aþaðýda belirtilmiþtir: +IBM MQ V9.0.3 + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Uluslararasý Program Lisans Sözleþmesi (Z125-3301-14) geçerli olur. + +Program Adý (Program Numarasý): +IBM MQ Advanced V9.0.3 (5724-H72) + +Aþaðýdaki standart koþullar, Lisans Alan Tarafýn Programý kullanýmý için geçerlidir. + +Sýnýrlý kullaným hakký + +Uluslararasý Program Lisans Sözleþmesi'nde ("UPLS") ve bu Lisans Bilgileri belgesinde açýklandýðý þekilde IBM, Lisans Alan Tarafa bu Programý kullanmasý için sýnýrlý bir hak verir. Bu hak, Yetki Belgesinde kanýtlandýðý þekilde, Lisans Alan Tarafça ödemesi yapýlmýþ olan Ýþlemci Deðer Birimi ("PVU"), Kaynak Deðer Birimi ("RVU"), Deðer Birimi ("VU") ya da belirlenmiþ diðer bir kullaným seviyesi gibi bir Yetkili Kullaným seviyesiyle sýnýrlanmýþtýr. Ayrýca, Lisans Alan Tarafýn kullanýmý, ayrýca belirli bir makineyle ya da yalnýzca bir Destekleyici Programla ya da baþka kýsýtlamalara tabi olarak sýnýrlanabilir. Lisans Alan Taraf bu Programýn ekonomik deðerinin tümünü ödemediðinde, ek ücretler ödenmedikçe Programýn baþka hiçbir þekilde kullanýlmasýna izin verilmez. Ayrýca, Lisans Alan Tarafýn bu Programý kullanmak üzere edindiði yetkilerin tabi olduðu geçerli sözleþmelerde açýkça belirtilmediði sürece, Lisans Alan Tarafa bu Programý herhangi bir üçüncü kiþiye ticari BT hizmetleri saðlamak, ticari barýndýrma ya da zaman paylaþýmý sunmak ya da alt lisans vermek, kiralamak ya da finansal olarak kiralamak üzere kullanma yetkisi de verilmez. Ek ücretlerin ödenmesine baðlý olarak ya da farklý veya tamamlayýcý koþullar kapsamýnda Lisans Alan Tarafa ek haklar saðlanabilir. IBM, Lisans Alan Tarafa bu tür ek haklarý saðlayýp saðlamamaya iliþkin karar verme hakkýný saklý tutar. + +Belirtimler + +Programýn belirtimleri, Programýn Duyuru Mektuplarýndaki toplu Tanýtým ve Teknik Bilgiler (Description and Technical Information) baþlýklý bölümlerde bulunabilir. + +Paketlenmiþ Programlar + +Bu Program, aþaðýda belirtilen Paketlenmiþ Programlardan oluþan, birden çok ürünün bulunduðu bir paket olarak lisanslanýr. Lisans Alan Tarafa, bu tür Paketlenmiþ Programlarý, Programa iliþkin Yetki Belgelerinin sýnýrlarý dahilinde ve Lisans Bilgileri belgesinde belirtildiði þekilde kurmasý ve kullanmasý için yetki verilir. Lisans Alan Tarafýn, Paketlenmiþ Programlarý birden çok ürünün yer aldýðý paketten ayrý olarak devretme ya da yeniden pazarlama yetkisi yoktur. Bir Paketlenmiþ Programla birlikte lisans koþullarý ve eðer varsa, Lisans Alan Tarafýn bu Paketlenmiþ Programý kullanýmý için geçerli olan koþullar da gönderilebilir. Herhangi bir çeliþki durumunda, bu Lisans Bilgileri belgesinde yer alan koþullar Paketlenmiþ Programýn koþullarýný hükümsüz kýlarak onlarýn yerine geçer. Lisans Alan Tarafýn, bu Programý kullaným hakký sona erdiðinde ya da sona erdirildiðinde, Paketlenmiþ Programlarýn tüm kopyalarýný kullanmaya son vermesi, bunlarý yok etmesi veya Programý edindiði üçüncü kiþiye derhal iade etmesi gerekir. Lisans Alan Taraf, Paketlenmiþ Programlarý karþýdan yüklediyse, bu Programý edindiði tarafla baðlantýya geçmelidir. Lisans Alan Taraf, Paketlenmiþ Programlarý, yukarýda belirtilen sýnýrlarý aþacak þekilde kullanmak amacýyla lisanslamak isterse, uygun lisansý edinmek için IBM Satýþ Temsilcisiyle veya Programý edindiði tarafla görüþmelidir. + +Bu Programlarla birlikte lisanslanan Paketlenmiþ Programlar aþaðýda belirtilmiþtir: +IBM MQ V9.0.3 + +Gerekli Yetkilerin Oluþturulmasý için Kullanýlmayan Bileþenler + +Lisans Alan Tarafýn bu Programý kurmasý ya da kullanmasý için gereken yetki sayýsý belirlenirken, aþaðýda belirtilen Program bileþenlerinin kurulumu ve kullanýmý dikkate alýnmaz. Baþka bir deyiþle, Lisans Alan Taraf aþaðýdaki Program bileþenlerini lisans koþullarý kapsamýnda kurabilir ve kullanabilir, ancak bu bileþenler bu Program için gereken yetki sayýsýnýn belirlenmesinde kullanýlmaz. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + +Aþaðýdaki ölçü birimleri, Lisans Alan Tarafýn Programý kullanýmý için geçerli olabilir. + +Ýþlemci Deðer Birimi (PVU) + +Ýþlemci Deðer Birimi (PVU), bu Programýn lisanslandýðý ölçüm birimidir. Gereken Ýþlemci Deðer Birimi (PVU) yetkilerinin sayýsý için iþlemci teknolojisi (Ýþlemci Satýcý Firmasý, Marka, Tip ve Model Numarasý esasýna göre þu adresteki PVU Tablosunda tanýmlanmýþtýr: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ve bu Program tarafýndan kullanýlan iþlemcilerin sayýsý esas alýnýr. IBM, PVU esasýna göre lisanslamanýn amacý açýsýndan bir çip üzerinde yer alan her iþlemci çekirdeði için bir iþlemci tanýmlamaya devam eder. Örneðin, bir çift çekirdekli iþlemci çipinde iki adet iþlemci çekirdeði bulunur. + +Lisans Alan Taraf, bu Programý, Passport Advantage Alt Kapasite Lisanslama Koþullarý'na (aþaðýda belirtilen Web sayfasýna bakýn) göre Tam Kapasite lisanslama veya Sanallaþtýrma Kapasitesi (Alt Kapasite) lisanslama esasýný kullanarak etkinleþtirebilir. Tam Kapasite lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, bu Programýn sürekli olarak kaldýrýldýðý sunucular hariç olmak üzere, bu Program tarafýndan kullanýlan veya yönetilen fiziksel donaným ortamýnda yer alan etkinleþtirilmiþ tüm iþlemci çekirdeklerini* kapsamaya yetecek sayýda Ýþlemci Deðer Birimi (PVU) yetkisi edinmesi gerekir. Sanallaþtýrma Kapasitesi lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, Sanallaþtýrma Kapasitesi Lisansý Sayým Kurallarý'na (Virtualization Capacity License Counting Rules) göre tanýmlanan ve bu Program tarafýndan kullanýlan veya yönetilen tüm etkin iþlemci çekirdeklerini kapsamaya yetecek sayýda yetkiyi edinmesi gerekir. Söz konusu kurallarla ilgili bilgi edinmek için aþaðýda yer alan adrese bakýn: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Etkinleþtirilmiþ iþlemci çekirdeði, iþlemci çekirdeklerinin kapasitesinin, sanallaþtýrma teknolojileri, iþletim sistemi komutlarý, BIOS ayarlarý veya benzeri sýnýrlamalarla sýnýrlandýrýlabilmesinden veya sýnýrlý olmasýndan baðýmsýz olarak herhangi bir fiziksel veya sanal sunucuda kullanýlabilir. + +Sanal Ýþlemci Çekirdeði + +Sanal Ýþlemci Çekirdeði, bu Programýn lisanslanabileceði bir ölçü birimidir. Fiziksel Sunucu, bir veya daha fazla kullanýcý ve istemci aygýtýnda istenen yordamlarý, komutlarý veya uygulamalarý yürüten ve iþlemci birimleri, bellek ve girdi/çýktý kapasitesine sahip fiziksel bir bilgisayardýr. Raflarýn, blade kasalarýnýn veya diðer benzer ekipmanýn kullanýlmasý durumunda, gerekli bileþenlere sahip her bir ayrýlabilir fiziksel aygýt (örneðin, bir blade aygýtý veya raf düzenekli bir aygýt) kendi baþýna ayrý bir Fiziksel Sunucu olarak deðerlendirilir. Sanal Sunucu, bir Fiziksel Sunucuda veya bölümlenmemiþ bir Fiziksel Sunucuda kullanýlmak üzere saðlanan kaynaklarýn bölümlenmesiyle oluþturulan bir sanal bilgisayar anlamýna gelir. Ýþlemci Çekirdeði (genellikle bir iþlemci veya CPU olarak adlandýrýlýr) bir bilgi iþlem aygýtý içinde yer alan ve yönergeleri yorumlayan ve yürüten iþlevsel birim anlamýna gelir. Bir Ýþlemci Çekirdeði, en az bir yönerge denetim birimi ve bir veya daha fazla aritmetik veya mantýksal birimi içerir. Sanal Ýþlemci Çekirdeði, bölümlenmemiþ bir Fiziksel Sunucudaki bir Ýþlemci Çekirdeði veya bir Sanal Sunucuya atanan bir sanal çekirdektir. Lisans Alan Tarafýn, bu Program tarafýndan kullanýlan her bir Sanal Ýþlemci Çekirdeði için yetki edinmesi gerekir. + +Her bir Fiziksel Sunucu için, Lisans Alan Tarafýn, hangisi daha azsa, 1) Program için saðlanan tüm Sanal Sunucular üzerindeki kullanýlabilir tüm Sanal Ýþlemci Çekirdeklerinin toplamý veya 2) Fiziksel Sunucu üzerindeki kullanýlabilir tüm Ýþlemci Çekirdekleri için yeterli sayýda yetkiye sahip olmasý gerekir. + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +ÖNEMLÝ: DÝKKATLE OKUYUN + +Aþaðýda iki lisans sözleþmesi sunulmuþtur. + +1. Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi +2. IBM Uluslararasý Program Lisans Sözleþmesi + +Lisans Alan Taraf, bu Programý (deðerlendirme, deneme, gösterimini yapma amaçlarý veya "dene veya satýn al" kampanyasý dýþýnda) üretim amacýyla kullanmak üzere satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak IBM Uluslararasý Program Lisans Sözleþmesi'ni hiçbir deðiþiklik olmaksýzýn kabul eder. + +Lisans Alan Taraf bu Programý, deðerlendirme, deneme, gösterimini yapma amaçlarýyla veya "dene veya satýn al" kampanyasý kapsamýnda kullanmak üzere (topluca "Deðerlendirme" olarak belirlenen amaçla) satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak (i) Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi'ni ("Deðerlendirme Lisansý") hiçbir deðiþiklik olmaksýzýn ve (ii) IBM Uluslararasý Program Lisans Sözleþmesi'ni ("UPLS") hiçbir deðiþiklik olmaksýzýn kabul eder. + +Deðerlendirme Lisansý, Lisans Alan Tarafýn Deðerlendirme süresi boyunca geçerli olacaktýr. + +Deðerlendirme süresi sonunda, Lisans Alan taraf, bir tedarik sözleþmesi (örneðin, IBM Uluslararasý Passport Advantage veya IBM Passport Express Advantage sözleþmeleri gibi) imzalayarak bu Programý edinmeyi (veya Deðerlendirme sürecinden sonra kullanmak üzere bu Programýn ek kopyalarýný edinmeyi) seçtiyse, Uluslararasý Program Lisans Sözleþmesi (UPLS) otomatik olarak geçerli olacaktýr. + +Deðerlendirme Lisansý ve UPLS ayný anda yürürlükte olamayacaðý gibi, bu Sözleþmelerden birinin koþullarý diðerinin koþullarýný deðiþtirmez. Deðerlendirme Lisansý ile UPLS birbirlerinden baðýmsýz sözleþmelerdir. + +Bu iki lisans sözleþmesinin tam metni aþaðýdadýr. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Programlarýn Deðerlendirilmesi Ýçin Uluslararasý Lisans Sözleþmesi (Z125-5543-05) geçerli olur. + +Program Adý (Program Numarasý): +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +Aþaðýdaki standart koþullar, Lisans Alan Tarafýn Programý kullanýmý için geçerlidir. + +Deðerlendirme Süresi + +Deðerlendirme süresi, Lisans Alan Tarafýn bu Sözleþmenin koþullarýný kabul ettiði tarihte baþlar ve 90 gün sonra sona erer. + +Paketlenmiþ Programlar + +Bu Program, aþaðýda belirtilen Paketlenmiþ Programlardan oluþan, birden çok ürünün bulunduðu bir paket olarak lisanslanýr. Lisans Alan Tarafa, bu tür Paketlenmiþ Programlarý, Programa iliþkin Yetki Belgelerinin sýnýrlarý dahilinde ve Lisans Bilgileri belgesinde belirtildiði þekilde kurmasý ve kullanmasý için yetki verilir. Lisans Alan Tarafýn, Paketlenmiþ Programlarý birden çok ürünün yer aldýðý paketten ayrý olarak devretme ya da yeniden pazarlama yetkisi yoktur. Bir Paketlenmiþ Programla birlikte lisans koþullarý ve eðer varsa, Lisans Alan Tarafýn bu Paketlenmiþ Programý kullanýmý için geçerli olan koþullar da gönderilebilir. Herhangi bir çeliþki durumunda, bu Lisans Bilgileri belgesinde yer alan koþullar Paketlenmiþ Programýn koþullarýný hükümsüz kýlarak onlarýn yerine geçer. Lisans Alan Tarafýn, bu Programý kullaným hakký sona erdiðinde ya da sona erdirildiðinde, Paketlenmiþ Programlarýn tüm kopyalarýný kullanmaya son vermesi, bunlarý yok etmesi veya Programý edindiði üçüncü kiþiye derhal iade etmesi gerekir. Lisans Alan Taraf, Paketlenmiþ Programlarý karþýdan yüklediyse, bu Programý edindiði tarafla baðlantýya geçmelidir. Lisans Alan Taraf, Paketlenmiþ Programlarý, yukarýda belirtilen sýnýrlarý aþacak þekilde kullanmak amacýyla lisanslamak isterse, uygun lisansý edinmek için IBM Satýþ Temsilcisiyle veya Programý edindiði tarafla görüþmelidir. + +Bu Programlarla birlikte lisanslanan Paketlenmiþ Programlar aþaðýda belirtilmiþtir: +IBM MQ Idle Standby V9.0.3 + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Uluslararasý Program Lisans Sözleþmesi (Z125-3301-14) geçerli olur. + +Program Adý (Program Numarasý): +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +Aþaðýdaki standart koþullar, Lisans Alan Tarafýn Programý kullanýmý için geçerlidir. + +Sýnýrlý kullaným hakký + +Uluslararasý Program Lisans Sözleþmesi'nde ("UPLS") ve bu Lisans Bilgileri belgesinde açýklandýðý þekilde IBM, Lisans Alan Tarafa bu Programý kullanmasý için sýnýrlý bir hak verir. Bu hak, Yetki Belgesinde kanýtlandýðý þekilde, Lisans Alan Tarafça ödemesi yapýlmýþ olan Ýþlemci Deðer Birimi ("PVU"), Kaynak Deðer Birimi ("RVU"), Deðer Birimi ("VU") ya da belirlenmiþ diðer bir kullaným seviyesi gibi bir Yetkili Kullaným seviyesiyle sýnýrlanmýþtýr. Ayrýca, Lisans Alan Tarafýn kullanýmý, ayrýca belirli bir makineyle ya da yalnýzca bir Destekleyici Programla ya da baþka kýsýtlamalara tabi olarak sýnýrlanabilir. Lisans Alan Taraf bu Programýn ekonomik deðerinin tümünü ödemediðinde, ek ücretler ödenmedikçe Programýn baþka hiçbir þekilde kullanýlmasýna izin verilmez. Ayrýca, Lisans Alan Tarafýn bu Programý kullanmak üzere edindiði yetkilerin tabi olduðu geçerli sözleþmelerde açýkça belirtilmediði sürece, Lisans Alan Tarafa bu Programý herhangi bir üçüncü kiþiye ticari BT hizmetleri saðlamak, ticari barýndýrma ya da zaman paylaþýmý sunmak ya da alt lisans vermek, kiralamak ya da finansal olarak kiralamak üzere kullanma yetkisi de verilmez. Ek ücretlerin ödenmesine baðlý olarak ya da farklý veya tamamlayýcý koþullar kapsamýnda Lisans Alan Tarafa ek haklar saðlanabilir. IBM, Lisans Alan Tarafa bu tür ek haklarý saðlayýp saðlamamaya iliþkin karar verme hakkýný saklý tutar. + +Belirtimler + +Programýn belirtimleri, Programýn Duyuru Mektuplarýndaki toplu Tanýtým ve Teknik Bilgiler (Description and Technical Information) baþlýklý bölümlerde bulunabilir. + +Paketlenmiþ Programlar + +Bu Program, aþaðýda belirtilen Paketlenmiþ Programlardan oluþan, birden çok ürünün bulunduðu bir paket olarak lisanslanýr. Lisans Alan Tarafa, bu tür Paketlenmiþ Programlarý, Programa iliþkin Yetki Belgelerinin sýnýrlarý dahilinde ve Lisans Bilgileri belgesinde belirtildiði þekilde kurmasý ve kullanmasý için yetki verilir. Lisans Alan Tarafýn, Paketlenmiþ Programlarý birden çok ürünün yer aldýðý paketten ayrý olarak devretme ya da yeniden pazarlama yetkisi yoktur. Bir Paketlenmiþ Programla birlikte lisans koþullarý ve eðer varsa, Lisans Alan Tarafýn bu Paketlenmiþ Programý kullanýmý için geçerli olan koþullar da gönderilebilir. Herhangi bir çeliþki durumunda, bu Lisans Bilgileri belgesinde yer alan koþullar Paketlenmiþ Programýn koþullarýný hükümsüz kýlarak onlarýn yerine geçer. Lisans Alan Tarafýn, bu Programý kullaným hakký sona erdiðinde ya da sona erdirildiðinde, Paketlenmiþ Programlarýn tüm kopyalarýný kullanmaya son vermesi, bunlarý yok etmesi veya Programý edindiði üçüncü kiþiye derhal iade etmesi gerekir. Lisans Alan Taraf, Paketlenmiþ Programlarý karþýdan yüklediyse, bu Programý edindiði tarafla baðlantýya geçmelidir. Lisans Alan Taraf, Paketlenmiþ Programlarý, yukarýda belirtilen sýnýrlarý aþacak þekilde kullanmak amacýyla lisanslamak isterse, uygun lisansý edinmek için IBM Satýþ Temsilcisiyle veya Programý edindiði tarafla görüþmelidir. + +Bu Programlarla birlikte lisanslanan Paketlenmiþ Programlar aþaðýda belirtilmiþtir: +IBM MQ Idle Standby V9.0.3 + +Gerekli Yetkilerin Oluþturulmasý için Kullanýlmayan Bileþenler + +Lisans Alan Tarafýn bu Programý kurmasý ya da kullanmasý için gereken yetki sayýsý belirlenirken, aþaðýda belirtilen Program bileþenlerinin kurulumu ve kullanýmý dikkate alýnmaz. Baþka bir deyiþle, Lisans Alan Taraf aþaðýdaki Program bileþenlerini lisans koþullarý kapsamýnda kurabilir ve kullanabilir, ancak bu bileþenler bu Program için gereken yetki sayýsýnýn belirlenmesinde kullanýlmaz. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + +Aþaðýdaki ölçü birimleri, Lisans Alan Tarafýn Programý kullanýmý için geçerli olabilir. + +Ýþlemci Deðer Birimi (PVU) + +Ýþlemci Deðer Birimi (PVU), bu Programýn lisanslandýðý ölçüm birimidir. Gereken Ýþlemci Deðer Birimi (PVU) yetkilerinin sayýsý için iþlemci teknolojisi (Ýþlemci Satýcý Firmasý, Marka, Tip ve Model Numarasý esasýna göre þu adresteki PVU Tablosunda tanýmlanmýþtýr: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ve bu Program tarafýndan kullanýlan iþlemcilerin sayýsý esas alýnýr. IBM, PVU esasýna göre lisanslamanýn amacý açýsýndan bir çip üzerinde yer alan her iþlemci çekirdeði için bir iþlemci tanýmlamaya devam eder. Örneðin, bir çift çekirdekli iþlemci çipinde iki adet iþlemci çekirdeði bulunur. + +Lisans Alan Taraf, bu Programý, Passport Advantage Alt Kapasite Lisanslama Koþullarý'na (aþaðýda belirtilen Web sayfasýna bakýn) göre Tam Kapasite lisanslama veya Sanallaþtýrma Kapasitesi (Alt Kapasite) lisanslama esasýný kullanarak etkinleþtirebilir. Tam Kapasite lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, bu Programýn sürekli olarak kaldýrýldýðý sunucular hariç olmak üzere, bu Program tarafýndan kullanýlan veya yönetilen fiziksel donaným ortamýnda yer alan etkinleþtirilmiþ tüm iþlemci çekirdeklerini* kapsamaya yetecek sayýda Ýþlemci Deðer Birimi (PVU) yetkisi edinmesi gerekir. Sanallaþtýrma Kapasitesi lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, Sanallaþtýrma Kapasitesi Lisansý Sayým Kurallarý'na (Virtualization Capacity License Counting Rules) göre tanýmlanan ve bu Program tarafýndan kullanýlan veya yönetilen tüm etkin iþlemci çekirdeklerini kapsamaya yetecek sayýda yetkiyi edinmesi gerekir. Söz konusu kurallarla ilgili bilgi edinmek için aþaðýda yer alan adrese bakýn: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Etkinleþtirilmiþ iþlemci çekirdeði, iþlemci çekirdeklerinin kapasitesinin, sanallaþtýrma teknolojileri, iþletim sistemi komutlarý, BIOS ayarlarý veya benzeri sýnýrlamalarla sýnýrlandýrýlabilmesinden veya sýnýrlý olmasýndan baðýmsýz olarak herhangi bir fiziksel veya sanal sunucuda kullanýlabilir. + +Yukarýdakilere ek olarak, aþaðýdaki koþullar Lisans Alan Tarafýn bu Programý kullanýmý için geçerlidir. + +Boþta Duran Yedekleme Konfigürasyonlarý + +Bu bölümün amaçlarý açýsýndan bir "Boþta Duran Yedekleme" konfigürasyonu için bu Programýn bir kopyasý, yüksek düzeyde kullanýlabilirlik çözümünün parçasýný oluþturan bir sunucunun üzerine kurulmuþtur ve etkin sunucu üzerindeki Program kopyasý kullanýlamaz duruma geldiðinde Program yedek sistem olarak iþlev gören bu sunucuya geçer. Bir sunucu, yalnýzca bir yedek sisteme geçiþ iþlemi gerçekleþinceye kadar, özel olarak yedek sisteme geçiþ senaryolarýna destek veren yönetim iþlemleri için kullanýldýðýnda, "boþta duran" olarak deðerlendirilir. + +Bu Program, uygun þekilde lisanslandýðý durumlar dýþýnda, bir Boþta Duran Yedekleme sunucusuna kurulamaz. + +Bu Program bir Boþta Duran Yedekleme konfigürasyonunda Multi-Instance Queue Manager (Birden Çok Eþgörünümlü Kuyruk Yöneticisi) özelliðiyle birlikte kullanýlýyorsa, bu Programýn bir kopyasý yedekleme amaçlarýyla bir Boþta Duran Yedekleme sunucusunda bulundurulabilir ve çalýþtýrýlabilir, ancak "boþta duran" özelliðini kaybetmemesi ve etkin sunucu yedek sisteme geçmek üzere Boþta Duran Yedekleme Sunucusuna geçmediði sürece hiçbir tür üretim amaçlý iþte kullanýlmamasý gerekir. Etkin sunucu yedek sisteme geçmek üzere Boþta Duran Yedekleme Sunucusuna geçtiðinde, Programýn Boþta Duran Yedekleme kopyasý hata süresi boyunca üretim amaçlý iþ görmek üzere kullanýlabilir. + +Bu Program bir Boþta Duran Yedekleme konfigürasyonunda Yüksek Düzeyde Kullanýlabilirlik sistemleriyle birlikte kullanýlýyorsa, bu Programýn bir kopyasý yedekleme amaçlarýyla Boþta Duran Yedekleme sunucusunda bulundurulabilir, ancak çalýþtýrýlamaz (ve bu nedenle hiçbir tür üretim amaçlý iþte kullanýlamaz). Ancak, etkin sunucunun bir hata nedeniyle çalýþmamasý durumunda Yüksek Düzeyde Kullanýlabilirlik bileþenleri tarafýndan otomatik olarak çalýþtýrýlýr ve bu durumda Programýn Boþta Duran Yedekleme sunucusunda bulunan kopyasý hata süresi boyunca üretim amaçlý iþ görmek üzere kullanýlabilir. + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +ÖNEMLÝ: DÝKKATLE OKUYUN + +Aþaðýda iki lisans sözleþmesi sunulmuþtur. + +1. Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi +2. IBM Uluslararasý Program Lisans Sözleþmesi + +Lisans Alan Taraf, bu Programý (deðerlendirme, deneme, gösterimini yapma amaçlarý veya "dene veya satýn al" kampanyasý dýþýnda) üretim amacýyla kullanmak üzere satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak IBM Uluslararasý Program Lisans Sözleþmesi'ni hiçbir deðiþiklik olmaksýzýn kabul eder. + +Lisans Alan Taraf bu Programý, deðerlendirme, deneme, gösterimini yapma amaçlarýyla veya "dene veya satýn al" kampanyasý kapsamýnda kullanmak üzere (topluca "Deðerlendirme" olarak belirlenen amaçla) satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak (i) Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi'ni ("Deðerlendirme Lisansý") hiçbir deðiþiklik olmaksýzýn ve (ii) IBM Uluslararasý Program Lisans Sözleþmesi'ni ("UPLS") hiçbir deðiþiklik olmaksýzýn kabul eder. + +Deðerlendirme Lisansý, Lisans Alan Tarafýn Deðerlendirme süresi boyunca geçerli olacaktýr. + +Deðerlendirme süresi sonunda, Lisans Alan taraf, bir tedarik sözleþmesi (örneðin, IBM Uluslararasý Passport Advantage veya IBM Passport Express Advantage sözleþmeleri gibi) imzalayarak bu Programý edinmeyi (veya Deðerlendirme sürecinden sonra kullanmak üzere bu Programýn ek kopyalarýný edinmeyi) seçtiyse, Uluslararasý Program Lisans Sözleþmesi (UPLS) otomatik olarak geçerli olacaktýr. + +Deðerlendirme Lisansý ve UPLS ayný anda yürürlükte olamayacaðý gibi, bu Sözleþmelerden birinin koþullarý diðerinin koþullarýný deðiþtirmez. Deðerlendirme Lisansý ile UPLS birbirlerinden baðýmsýz sözleþmelerdir. + +Bu iki lisans sözleþmesinin tam metni aþaðýdadýr. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Programlarýn Deðerlendirilmesi Ýçin Uluslararasý Lisans Sözleþmesi (Z125-5543-05) geçerli olur. + +Program Adý (Program Numarasý): +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +Aþaðýdaki standart koþullar, Lisans Alan Tarafýn Programý kullanýmý için geçerlidir. + +Deðerlendirme Süresi + +Deðerlendirme süresi, Lisans Alan Tarafýn bu Sözleþmenin koþullarýný kabul ettiði tarihte baþlar ve 90 gün sonra sona erer. + +Paketlenmiþ Programlar + +Bu Program, aþaðýda belirtilen Paketlenmiþ Programlardan oluþan, birden çok ürünün bulunduðu bir paket olarak lisanslanýr. Lisans Alan Tarafa, bu tür Paketlenmiþ Programlarý, Programa iliþkin Yetki Belgelerinin sýnýrlarý dahilinde ve Lisans Bilgileri belgesinde belirtildiði þekilde kurmasý ve kullanmasý için yetki verilir. Lisans Alan Tarafýn, Paketlenmiþ Programlarý birden çok ürünün yer aldýðý paketten ayrý olarak devretme ya da yeniden pazarlama yetkisi yoktur. Bir Paketlenmiþ Programla birlikte lisans koþullarý ve eðer varsa, Lisans Alan Tarafýn bu Paketlenmiþ Programý kullanýmý için geçerli olan koþullar da gönderilebilir. Herhangi bir çeliþki durumunda, bu Lisans Bilgileri belgesinde yer alan koþullar Paketlenmiþ Programýn koþullarýný hükümsüz kýlarak onlarýn yerine geçer. Lisans Alan Tarafýn, bu Programý kullaným hakký sona erdiðinde ya da sona erdirildiðinde, Paketlenmiþ Programlarýn tüm kopyalarýný kullanmaya son vermesi, bunlarý yok etmesi veya Programý edindiði üçüncü kiþiye derhal iade etmesi gerekir. Lisans Alan Taraf, Paketlenmiþ Programlarý karþýdan yüklediyse, bu Programý edindiði tarafla baðlantýya geçmelidir. Lisans Alan Taraf, Paketlenmiþ Programlarý, yukarýda belirtilen sýnýrlarý aþacak þekilde kullanmak amacýyla lisanslamak isterse, uygun lisansý edinmek için IBM Satýþ Temsilcisiyle veya Programý edindiði tarafla görüþmelidir. + +Bu Programlarla birlikte lisanslanan Paketlenmiþ Programlar aþaðýda belirtilmiþtir: +IBM MQ V9.0.3 + +Geliþtirici Sýnýrlamasý + +Bu Program, "Geliþtiriciler" için belirlendiyse, yalnýzca bir geliþtirici makinesinde Lisans Alan Tarafýn dahili geliþtirme ve birim denemesi amaçlarýyla devreye alýnabilir. Geliþtirici makinesi, her ikisi de eriþilebilir olan ve yalnýzca tek bir belirli geliþtirici tarafýndan kullanýlan birincil iþletim sistemini ve bu Programý çalýþtýran fiziksel ya da sanal bir masaüstü ortamýdýr. Lisans Alan Taraf bu Programý üretim iþyüklerinin iþlenmesi, üretimde ortaya çýkan iþyüklerinin benzerlerinin yaratýlmasý ya da herhangi bir kod, uygulama ya da sistemin ölçeklenebilirliðinin denenmesi için kullanamaz. Uygun ürün yetkilerini almadýðý sürece, Lisans Alan Tarafa, bu Programýn hiçbir bölümünü baþka herhangi bir amaçla kullanmasý için yetki verilmez. + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Uluslararasý Program Lisans Sözleþmesi (Z125-3301-14) geçerli olur. + +Program Adý (Program Numarasý): +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +Aþaðýdaki standart koþullar, Lisans Alan Tarafýn Programý kullanýmý için geçerlidir. + +Sýnýrlý kullaným hakký + +Uluslararasý Program Lisans Sözleþmesi'nde ("UPLS") ve bu Lisans Bilgileri belgesinde açýklandýðý þekilde IBM, Lisans Alan Tarafa bu Programý kullanmasý için sýnýrlý bir hak verir. Bu hak, Yetki Belgesinde kanýtlandýðý þekilde, Lisans Alan Tarafça ödemesi yapýlmýþ olan Ýþlemci Deðer Birimi ("PVU"), Kaynak Deðer Birimi ("RVU"), Deðer Birimi ("VU") ya da belirlenmiþ diðer bir kullaným seviyesi gibi bir Yetkili Kullaným seviyesiyle sýnýrlanmýþtýr. Ayrýca, Lisans Alan Tarafýn kullanýmý, ayrýca belirli bir makineyle ya da yalnýzca bir Destekleyici Programla ya da baþka kýsýtlamalara tabi olarak sýnýrlanabilir. Lisans Alan Taraf bu Programýn ekonomik deðerinin tümünü ödemediðinde, ek ücretler ödenmedikçe Programýn baþka hiçbir þekilde kullanýlmasýna izin verilmez. Ayrýca, Lisans Alan Tarafýn bu Programý kullanmak üzere edindiði yetkilerin tabi olduðu geçerli sözleþmelerde açýkça belirtilmediði sürece, Lisans Alan Tarafa bu Programý herhangi bir üçüncü kiþiye ticari BT hizmetleri saðlamak, ticari barýndýrma ya da zaman paylaþýmý sunmak ya da alt lisans vermek, kiralamak ya da finansal olarak kiralamak üzere kullanma yetkisi de verilmez. Ek ücretlerin ödenmesine baðlý olarak ya da farklý veya tamamlayýcý koþullar kapsamýnda Lisans Alan Tarafa ek haklar saðlanabilir. IBM, Lisans Alan Tarafa bu tür ek haklarý saðlayýp saðlamamaya iliþkin karar verme hakkýný saklý tutar. + +Belirtimler + +Programýn belirtimleri, Programýn Duyuru Mektuplarýndaki toplu Tanýtým ve Teknik Bilgiler (Description and Technical Information) baþlýklý bölümlerde bulunabilir. + +Paketlenmiþ Programlar + +Bu Program, aþaðýda belirtilen Paketlenmiþ Programlardan oluþan, birden çok ürünün bulunduðu bir paket olarak lisanslanýr. Lisans Alan Tarafa, bu tür Paketlenmiþ Programlarý, Programa iliþkin Yetki Belgelerinin sýnýrlarý dahilinde ve Lisans Bilgileri belgesinde belirtildiði þekilde kurmasý ve kullanmasý için yetki verilir. Lisans Alan Tarafýn, Paketlenmiþ Programlarý birden çok ürünün yer aldýðý paketten ayrý olarak devretme ya da yeniden pazarlama yetkisi yoktur. Bir Paketlenmiþ Programla birlikte lisans koþullarý ve eðer varsa, Lisans Alan Tarafýn bu Paketlenmiþ Programý kullanýmý için geçerli olan koþullar da gönderilebilir. Herhangi bir çeliþki durumunda, bu Lisans Bilgileri belgesinde yer alan koþullar Paketlenmiþ Programýn koþullarýný hükümsüz kýlarak onlarýn yerine geçer. Lisans Alan Tarafýn, bu Programý kullaným hakký sona erdiðinde ya da sona erdirildiðinde, Paketlenmiþ Programlarýn tüm kopyalarýný kullanmaya son vermesi, bunlarý yok etmesi veya Programý edindiði üçüncü kiþiye derhal iade etmesi gerekir. Lisans Alan Taraf, Paketlenmiþ Programlarý karþýdan yüklediyse, bu Programý edindiði tarafla baðlantýya geçmelidir. Lisans Alan Taraf, Paketlenmiþ Programlarý, yukarýda belirtilen sýnýrlarý aþacak þekilde kullanmak amacýyla lisanslamak isterse, uygun lisansý edinmek için IBM Satýþ Temsilcisiyle veya Programý edindiði tarafla görüþmelidir. + +Bu Programlarla birlikte lisanslanan Paketlenmiþ Programlar aþaðýda belirtilmiþtir: +IBM MQ V9.0.3 + +Geliþtirici Sýnýrlamasý + +Bu Program, "Geliþtiriciler" için belirlendiyse, yalnýzca bir geliþtirici makinesinde Lisans Alan Tarafýn dahili geliþtirme ve birim denemesi amaçlarýyla devreye alýnabilir. Geliþtirici makinesi, her ikisi de eriþilebilir olan ve yalnýzca tek bir belirli geliþtirici tarafýndan kullanýlan birincil iþletim sistemini ve bu Programý çalýþtýran fiziksel ya da sanal bir masaüstü ortamýdýr. Lisans Alan Taraf bu Programý üretim iþyüklerinin iþlenmesi, üretimde ortaya çýkan iþyüklerinin benzerlerinin yaratýlmasý ya da herhangi bir kod, uygulama ya da sistemin ölçeklenebilirliðinin denenmesi için kullanamaz. Uygun ürün yetkilerini almadýðý sürece, Lisans Alan Tarafa, bu Programýn hiçbir bölümünü baþka herhangi bir amaçla kullanmasý için yetki verilmez. + +Gerekli Yetkilerin Oluþturulmasý için Kullanýlmayan Bileþenler + +Lisans Alan Tarafýn bu Programý kurmasý ya da kullanmasý için gereken yetki sayýsý belirlenirken, aþaðýda belirtilen Program bileþenlerinin kurulumu ve kullanýmý dikkate alýnmaz. Baþka bir deyiþle, Lisans Alan Taraf aþaðýdaki Program bileþenlerini lisans koþullarý kapsamýnda kurabilir ve kullanabilir, ancak bu bileþenler bu Program için gereken yetki sayýsýnýn belirlenmesinde kullanýlmaz. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + +Aþaðýdaki ölçü birimleri, Lisans Alan Tarafýn Programý kullanýmý için geçerli olabilir. + +Kurulum + +Kurulum, bu Programýn lisanslandýðý ölçüm birimidir. Kurulum, Programýn bir bilgisayarda çalýþtýrýlmak üzere saðlanan fiziksel veya sanal bir diske kurulan kopyasýdýr. Lisans Alan Tarafýn, bu Programýn her Kurulumu için bir yetki edinmesi gerekir. + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +ÖNEMLÝ: DÝKKATLE OKUYUN + +Aþaðýda iki lisans sözleþmesi sunulmuþtur. + +1. Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi +2. IBM Uluslararasý Program Lisans Sözleþmesi + +Lisans Alan Taraf, bu Programý (deðerlendirme, deneme, gösterimini yapma amaçlarý veya "dene veya satýn al" kampanyasý dýþýnda) üretim amacýyla kullanmak üzere satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak IBM Uluslararasý Program Lisans Sözleþmesi'ni hiçbir deðiþiklik olmaksýzýn kabul eder. + +Lisans Alan Taraf bu Programý, deðerlendirme, deneme, gösterimini yapma amaçlarýyla veya "dene veya satýn al" kampanyasý kapsamýnda kullanmak üzere (topluca "Deðerlendirme" olarak belirlenen amaçla) satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak (i) Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi'ni ("Deðerlendirme Lisansý") hiçbir deðiþiklik olmaksýzýn ve (ii) IBM Uluslararasý Program Lisans Sözleþmesi'ni ("UPLS") hiçbir deðiþiklik olmaksýzýn kabul eder. + +Deðerlendirme Lisansý, Lisans Alan Tarafýn Deðerlendirme süresi boyunca geçerli olacaktýr. + +Deðerlendirme süresi sonunda, Lisans Alan taraf, bir tedarik sözleþmesi (örneðin, IBM Uluslararasý Passport Advantage veya IBM Passport Express Advantage sözleþmeleri gibi) imzalayarak bu Programý edinmeyi (veya Deðerlendirme sürecinden sonra kullanmak üzere bu Programýn ek kopyalarýný edinmeyi) seçtiyse, Uluslararasý Program Lisans Sözleþmesi (UPLS) otomatik olarak geçerli olacaktýr. + +Deðerlendirme Lisansý ve UPLS ayný anda yürürlükte olamayacaðý gibi, bu Sözleþmelerden birinin koþullarý diðerinin koþullarýný deðiþtirmez. Deðerlendirme Lisansý ile UPLS birbirlerinden baðýmsýz sözleþmelerdir. + +Bu iki lisans sözleþmesinin tam metni aþaðýdadýr. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Programlarýn Deðerlendirilmesi Ýçin Uluslararasý Lisans Sözleþmesi (Z125-5543-05) geçerli olur. + +Program Adý: IBM MQ Managed File Transfer Service V9.0.1 +Program Numarasý: Evaluation + +Program Adý: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Program Numarasý: Evaluation + +Program Adý: IBM MQ Managed File Transfer Agent V9.0.1 +Program Numarasý: Evaluation + +Deðerlendirme Süresi + +Deðerlendirme süresi, Lisans Alan Tarafýn bu Sözleþmenin koþullarýný kabul ettiði tarihte baþlar ve 90 gün sonra sona erer. + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Uluslararasý Program Lisans Sözleþmesi (Z125-3301-14) geçerli olur. + +Program Adý: IBM MQ Managed File Transfer Service V9.0.1 +Program Numarasý: 5724-H72 + +Program Adý: IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +Program Numarasý: 5724-H72 + +Program Adý: IBM MQ Managed File Transfer Agent V9.0.1 +Program Numarasý: 5724-H72 + +Uluslararasý Program Lisans Sözleþmesi'nde ("UPLS") ve bu Lisans Bilgileri belgesinde açýklandýðý þekilde IBM, Lisans Alan Tarafa bu Programý kullanmasý için sýnýrlý bir hak verir. Bu hak, Yetki Belgesinde kanýtlandýðý þekilde, Lisans Alan Tarafça ödemesi yapýlmýþ olan Ýþlemci Deðer Birimi ("PVU"), Kaynak Deðer Birimi ("RVU"), Deðer Birimi ("VU") ya da belirlenmiþ diðer bir kullaným seviyesi gibi bir Yetkili Kullaným seviyesiyle sýnýrlanmýþtýr. Ayrýca, Lisans Alan Tarafýn kullanýmý, ayrýca belirli bir makineyle ya da yalnýzca bir Destekleyici Programla ya da baþka kýsýtlamalara tabi olarak sýnýrlanabilir. Lisans Alan Taraf bu Programýn ekonomik deðerinin tümünü ödemediðinde, ek ücretler ödenmedikçe Programýn baþka hiçbir þekilde kullanýlmasýna izin verilmez. Ayrýca, Lisans Alan Tarafýn bu Programý kullanmak üzere edindiði yetkilerin tabi olduðu geçerli sözleþmelerde açýkça belirtilmediði sürece, Lisans Alan Tarafa bu Programý herhangi bir üçüncü kiþiye ticari BT hizmetleri saðlamak, ticari barýndýrma ya da zaman paylaþýmý sunmak ya da alt lisans vermek, kiralamak ya da finansal olarak kiralamak üzere kullanma yetkisi de verilmez. Ek ücretlerin ödenmesine baðlý olarak ya da farklý veya tamamlayýcý koþullar kapsamýnda Lisans Alan Tarafa ek haklar saðlanabilir. IBM, Lisans Alan Tarafa bu tür ek haklarý saðlayýp saðlamamaya iliþkin karar verme hakkýný saklý tutar. + +Programýn belirtimleri, Programýn Duyuru Mektuplarýndaki toplu Tanýtým ve Teknik Bilgiler (Description and Technical Information) baþlýklý bölümlerde bulunabilir. + +Yeniden Daðýtýlabilenler + +Bu Program, Yeniden Daðýtýlabilenler olarak adlandýrýlan bileþenleri içeriyorsa bunlar, bu Programla birlikte gönderilen REDIST adlý dosyada tanýmlanýr. Bu Sözleþmede saðlanan lisans haklarýna ek olarak Lisans Alan Taraf Yeniden Daðýtýlabilenleri aþaðýdaki koþullara uygun olarak daðýtabilir: +1) Yeniden Daðýtým iþlemi, yalnýzca nesne kodu biçiminde ve bu Programla birlikte gönderilen REDIST adlý dosyada veya diðer belgelerde yer alan yönergelere ve belirtimlere uygun olarak gerçekleþtirilebilir; +2) Bu Programla birlikte gönderilen belgelerde Lisans Alan Tarafa, Yeniden Daðýtýlabilenleri deðiþtirme izni açýkça veriliyorsa, Lisans Alan Tarafýn yapacaðý deðiþikliklerin ilgili belgelerdeki yönergelerin ve belirtimlerin tümüne uygun olmasý gerekir; eðer varsa, bu tür deðiþiklikler, Yeniden Daðýtýlabilenler olarak deðerlendirilmelidir; +3) Yeniden Daðýtýlabilenler, yalnýzca bu Program kullanýlarak geliþtirilen Lisans Alan Tarafýn Uygulamasýnýn ("Lisans Alan Tarafýn Uygulamasý") bir parçasý olarak ve yalnýzca Lisans Alan Tarafýn müþterilerini, ilgili Uygulamayý kullanmalarýyla baðlantýlý olarak desteklemek amacýyla daðýtýlabilir. Lisans Alan Tarafýn Uygulamasýnýn son kullanýcýlara, Lisans Alan Tarafýn yazýlým ürününün son kullanýcýlar tarafýndan edinilmesinde bu Yeniden Daðýtýlabilenlerin temel motivasyon olmayacaðý þekilde, önemli bir katma deðer saðlamasý gerekir; +4) Yeniden Daðýtýlabilenlerin Java Çalýþtýrma Zamaný Ortamý (Java Runtime Environment) içermesi durumunda, Uygulama, yalnýzca genel bilgisayar aygýtlarýnda (örneðin: dizüstü bilgisayarlar, masaüstü bilgisayarlar ve sunucular) çalýþtýrýlmak üzere tasarlandýysa ve elde taþýnabilen veya yaygýn olarak kullanýlan diðer aygýtlarda (örneðin: bir mikroiþlemci içeren ancak bilgiiþlem, birincil çalýþma amaçlarý olarak belirlenmiþ olmayan aygýtlar) çalýþtýrýlmak üzere tasarlanmadýysa, Lisans Alan Tarafýn kendi Uygulamasýyla birlikte diðer Java-dýþý Yeniden Daðýtýlabilenleri de içermesi gerekir; +5) Lisans Alan Taraf, Yeniden Daðýtýlabilenlerde yer alan herhangi bir telif hakký bildirimini veya bildirim dosyasýný kaldýramaz; +6) Lisans Alan Taraf, Lisans Alan Tarafýn Uygulamasýnýn kullanýlmasý veya daðýtýlmasýndan dolayý yöneltilen iddialara karþý IBM'i, IBM'in saðlayýcýlarýný ve distribütörlerini tazmin etmekle yükümlüdür; +7) Lisans Alan Taraf, orijinal Yeniden Daðýtýlabilen dosyalar/modüller ile ayný yol adýný kullanamaz; +8) Lisans Alan Taraf, IBM'in, saðlayýcýlarýnýn veya distribütörlerinin önceden yazýlý izni olmadan, IBM'in, saðlayýcýlarýnýn veya distribütörlerinin adlarýný veya ticari markalarýný, Lisans Alan Tarafýn Uygulamasýnýn pazarlanmasýyla baðlantýlý olarak kullanamaz; +9) IBM, saðlayýcýlarý veya distribütörleri, Yeniden Daðýtýlabilenleri ve iliþkili belgeleri herhangi bir destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALEYE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR; +10) Lisans Alan Tarafýn Uygulamasýnda ve Yeniden Daðýtýlabilenlerde yaptýðý deðiþikliklere iliþkin tüm teknik desteðin saðlanmasýndan tamamen Lisans Alan Taraf sorumludur; ve +11) Lisans Alan Taraf, Uygulamasýnýn son kullanýcýsý ile gerçekleþtireceði lisans sözleþmesinde, bu Yeniden Daðýtýlabilenlerin veya bunlardaki deðiþikliklerin, i) Uygulamasýnýn geçerli kýlýnmasý dýþýnda bir amaçla kullanýlamayacaðý, ii) kopyalanamayacaðý (yedekleme amacý dýþýnda), iii) Lisans Alan Tarafýn Uygulamasýndan ayrý olarak baþkalarýna daðýtýlamayacaðý veya devredilemeyeceði ya da iv) geçerli yasalarýn sözleþme ile deðiþtirilmesine olanak tanýmayarak açýkça izin verdiði durumlar dýþýnda, ters çevrilemeyeceði, ters derlenemeyeceði veya baþka bir yolla çevrilemeyeceði konusunda son kullanýcýyý önceden bilgilendirecektir. Ayrýca, Lisans Alan Tarafýn lisans sözleþmesindeki koþullarýn, IBM açýsýndan, en az bu Sözleþmede yer alan koþullar kadar koruyucu olmasý gereklidir. + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + +Lisans Alan Taraf, bir Programýn REDIST dosyasýnda listelenen Kaynak Bileþenlerin ve Örnek Malzemelerin deðiþtirilmiþ sürümlerini, bu lisansta ve REDIST dosyasýnda yer alan koþullara uygun olarak yeniden daðýtabilir. + +Kurulum + +Kurulum, bu Programýn lisanslandýðý ölçüm birimidir. Kurulum, Programýn bir bilgisayarda çalýþtýrýlmak üzere saðlanan fiziksel veya sanal bir diske kurulan kopyasýdýr. Lisans Alan Tarafýn, bu Programýn her Kurulumu için bir yetki edinmesi gerekir. + +Ýþlemci Deðer Birimi (PVU) + +Ýþlemci Deðer Birimi (PVU), bu Programýn lisanslandýðý ölçüm birimidir. Gereken Ýþlemci Deðer Birimi (PVU) yetkilerinin sayýsý için iþlemci teknolojisi (Ýþlemci Satýcý Firmasý, Marka, Tip ve Model Numarasý esasýna göre þu adresteki PVU Tablosunda tanýmlanmýþtýr: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ve bu Program tarafýndan kullanýlan iþlemcilerin sayýsý esas alýnýr. IBM, PVU esasýna göre lisanslamanýn amacý açýsýndan bir çip üzerinde yer alan her iþlemci çekirdeði için bir iþlemci tanýmlamaya devam eder. Örneðin, bir çift çekirdekli iþlemci çipinde iki adet iþlemci çekirdeði bulunur. + +Lisans Alan Taraf, bu Programý, Passport Advantage Alt Kapasite Lisanslama Koþullarý'na (aþaðýda belirtilen Web sayfasýna bakýn) göre Tam Kapasite lisanslama veya Sanallaþtýrma Kapasitesi (Alt Kapasite) lisanslama esasýný kullanarak etkinleþtirebilir. Tam Kapasite lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, bu Programýn sürekli olarak kaldýrýldýðý sunucular hariç olmak üzere, bu Program tarafýndan kullanýlan veya yönetilen fiziksel donaným ortamýnda yer alan etkinleþtirilmiþ tüm iþlemci çekirdeklerini* kapsamaya yetecek sayýda Ýþlemci Deðer Birimi (PVU) yetkisi edinmesi gerekir. Sanallaþtýrma Kapasitesi lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, Sanallaþtýrma Kapasitesi Lisansý Sayým Kurallarý'na (Virtualization Capacity License Counting Rules) göre tanýmlanan ve bu Program tarafýndan kullanýlan veya yönetilen tüm etkin iþlemci çekirdeklerini kapsamaya yetecek sayýda yetkiyi edinmesi gerekir. Söz konusu kurallarla ilgili bilgi edinmek için aþaðýda yer alan adrese bakýn: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Etkinleþtirilmiþ iþlemci çekirdeði, iþlemci çekirdeklerinin kapasitesinin, sanallaþtýrma teknolojileri, iþletim sistemi komutlarý, BIOS ayarlarý veya benzeri sýnýrlamalarla sýnýrlandýrýlabilmesinden veya sýnýrlý olmasýndan baðýmsýz olarak herhangi bir fiziksel veya sanal sunucuda kullanýlabilir. + +Programa Özgü Koþullar + +Boþta Duran Yedekleme Konfigürasyonlarý + +Bu bölümün amaçlarý açýsýndan bir "Boþta Duran Yedekleme" konfigürasyonu için bu Programýn bir kopyasý, yüksek düzeyde kullanýlabilirlik çözümünün parçasýný oluþturan bir sunucunun üzerine kurulmuþtur ve etkin sunucu üzerindeki Program kopyasý kullanýlamaz duruma geldiðinde Program yedek sistem olarak iþlev gören bu sunucuya geçer. Bir sunucu, yalnýzca bir yedek sisteme geçiþ iþlemi gerçekleþinceye kadar, özel olarak yedek sisteme geçiþ senaryolarýna destek veren yönetim iþlemleri için kullanýldýðýnda, "boþta duran" olarak deðerlendirilir. + +Bu Program, uygun þekilde lisanslandýðý durumlar dýþýnda, bir Boþta Duran Yedekleme sunucusuna kurulamaz. + +Bu Program bir Boþta Duran Yedekleme konfigürasyonunda Multi-Instance Queue Manager (Birden Çok Eþgörünümlü Kuyruk Yöneticisi) özelliðiyle birlikte kullanýlýyorsa, bu Programýn bir kopyasý yedekleme amaçlarýyla bir Boþta Duran Yedekleme sunucusunda bulundurulabilir ve çalýþtýrýlabilir, ancak "boþta duran" özelliðini kaybetmemesi ve etkin sunucu yedek sisteme geçmek üzere Boþta Duran Yedekleme Sunucusuna geçmediði sürece hiçbir tür üretim amaçlý iþte kullanýlmamasý gerekir. Etkin sunucu yedek sisteme geçmek üzere Boþta Duran Yedekleme Sunucusuna geçtiðinde, Programýn Boþta Duran Yedekleme kopyasý hata süresi boyunca üretim amaçlý iþ görmek üzere kullanýlabilir. + +Bu Program bir Boþta Duran Yedekleme konfigürasyonunda Yüksek Düzeyde Kullanýlabilirlik sistemleriyle birlikte kullanýlýyorsa, bu Programýn bir kopyasý yedekleme amaçlarýyla Boþta Duran Yedekleme sunucusunda bulundurulabilir, ancak çalýþtýrýlamaz (ve bu nedenle hiçbir tür üretim amaçlý iþte kullanýlamaz). Ancak, etkin sunucunun bir hata nedeniyle çalýþmamasý durumunda Yüksek Düzeyde Kullanýlabilirlik bileþenleri tarafýndan otomatik olarak çalýþtýrýlýr ve bu durumda Programýn Boþta Duran Yedekleme sunucusunda bulunan kopyasý hata süresi boyunca üretim amaçlý iþ görmek üzere kullanýlabilir. + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +ÖNEMLÝ: DÝKKATLE OKUYUN + +Aþaðýda iki lisans sözleþmesi sunulmuþtur. + +1. Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi +2. IBM Uluslararasý Program Lisans Sözleþmesi + +Lisans Alan Taraf, bu Programý (deðerlendirme, deneme, gösterimini yapma amaçlarý veya "dene veya satýn al" kampanyasý dýþýnda) üretim amacýyla kullanmak üzere satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak IBM Uluslararasý Program Lisans Sözleþmesi'ni hiçbir deðiþiklik olmaksýzýn kabul eder. + +Lisans Alan Taraf bu Programý, deðerlendirme, deneme, gösterimini yapma amaçlarýyla veya "dene veya satýn al" kampanyasý kapsamýnda kullanmak üzere (topluca "Deðerlendirme" olarak belirlenen amaçla) satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak (i) Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi'ni ("Deðerlendirme Lisansý") hiçbir deðiþiklik olmaksýzýn ve (ii) IBM Uluslararasý Program Lisans Sözleþmesi'ni ("UPLS") hiçbir deðiþiklik olmaksýzýn kabul eder. + +Deðerlendirme Lisansý, Lisans Alan Tarafýn Deðerlendirme süresi boyunca geçerli olacaktýr. + +Deðerlendirme süresi sonunda, Lisans Alan taraf, bir tedarik sözleþmesi (örneðin, IBM Uluslararasý Passport Advantage veya IBM Passport Express Advantage sözleþmeleri gibi) imzalayarak bu Programý edinmeyi (veya Deðerlendirme sürecinden sonra kullanmak üzere bu Programýn ek kopyalarýný edinmeyi) seçtiyse, Uluslararasý Program Lisans Sözleþmesi (UPLS) otomatik olarak geçerli olacaktýr. + +Deðerlendirme Lisansý ve UPLS ayný anda yürürlükte olamayacaðý gibi, bu Sözleþmelerden birinin koþullarý diðerinin koþullarýný deðiþtirmez. Deðerlendirme Lisansý ile UPLS birbirlerinden baðýmsýz sözleþmelerdir. + +Bu iki lisans sözleþmesinin tam metni aþaðýdadýr. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Programlarýn Deðerlendirilmesi Ýçin Uluslararasý Lisans Sözleþmesi (Z125-5543-05) geçerli olur. + +Program Adý: IBM MQ Advanced Message Security V9.0.1 +Program Numarasý: Evaluation + +Program Adý: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Program Numarasý: Evaluation + +Program Adý: IBM MQ Telemetry V9.0.1 +Program Numarasý: Evaluation + +Deðerlendirme Süresi + +Deðerlendirme süresi, Lisans Alan Tarafýn bu Sözleþmenin koþullarýný kabul ettiði tarihte baþlar ve 90 gün sonra sona erer. + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + + + +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Uluslararasý Program Lisans Sözleþmesi (Z125-3301-14) geçerli olur. + +Program Adý: IBM MQ Advanced Message Security V9.0.1 +Program Numarasý: 5724-H72 + +Program Adý: IBM MQ Advanced Message Security Idle Standby V9.0.1 +Program Numarasý: 5724-H72 + +Program Adý: IBM MQ Telemetry V9.0.1 +Program Numarasý: 5724-H72 + +Uluslararasý Program Lisans Sözleþmesi'nde ("UPLS") ve bu Lisans Bilgileri belgesinde açýklandýðý þekilde IBM, Lisans Alan Tarafa bu Programý kullanmasý için sýnýrlý bir hak verir. Bu hak, Yetki Belgesinde kanýtlandýðý þekilde, Lisans Alan Tarafça ödemesi yapýlmýþ olan Ýþlemci Deðer Birimi ("PVU"), Kaynak Deðer Birimi ("RVU"), Deðer Birimi ("VU") ya da belirlenmiþ diðer bir kullaným seviyesi gibi bir Yetkili Kullaným seviyesiyle sýnýrlanmýþtýr. Ayrýca, Lisans Alan Tarafýn kullanýmý, ayrýca belirli bir makineyle ya da yalnýzca bir Destekleyici Programla ya da baþka kýsýtlamalara tabi olarak sýnýrlanabilir. Lisans Alan Taraf bu Programýn ekonomik deðerinin tümünü ödemediðinde, ek ücretler ödenmedikçe Programýn baþka hiçbir þekilde kullanýlmasýna izin verilmez. Ayrýca, Lisans Alan Tarafýn bu Programý kullanmak üzere edindiði yetkilerin tabi olduðu geçerli sözleþmelerde açýkça belirtilmediði sürece, Lisans Alan Tarafa bu Programý herhangi bir üçüncü kiþiye ticari BT hizmetleri saðlamak, ticari barýndýrma ya da zaman paylaþýmý sunmak ya da alt lisans vermek, kiralamak ya da finansal olarak kiralamak üzere kullanma yetkisi de verilmez. Ek ücretlerin ödenmesine baðlý olarak ya da farklý veya tamamlayýcý koþullar kapsamýnda Lisans Alan Tarafa ek haklar saðlanabilir. IBM, Lisans Alan Tarafa bu tür ek haklarý saðlayýp saðlamamaya iliþkin karar verme hakkýný saklý tutar. + +Programýn belirtimleri, Programýn Duyuru Mektuplarýndaki toplu Tanýtým ve Teknik Bilgiler (Description and Technical Information) baþlýklý bölümlerde bulunabilir. + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + +Kurulum + +Kurulum, bu Programýn lisanslandýðý ölçüm birimidir. Kurulum, Programýn bir bilgisayarda çalýþtýrýlmak üzere saðlanan fiziksel veya sanal bir diske kurulan kopyasýdýr. Lisans Alan Tarafýn, bu Programýn her Kurulumu için bir yetki edinmesi gerekir. + +Ýþlemci Deðer Birimi (PVU) + +Ýþlemci Deðer Birimi (PVU), bu Programýn lisanslandýðý ölçüm birimidir. Gereken Ýþlemci Deðer Birimi (PVU) yetkilerinin sayýsý için iþlemci teknolojisi (Ýþlemci Satýcý Firmasý, Marka, Tip ve Model Numarasý esasýna göre þu adresteki PVU Tablosunda tanýmlanmýþtýr: http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html) ve bu Program tarafýndan kullanýlan iþlemcilerin sayýsý esas alýnýr. IBM, PVU esasýna göre lisanslamanýn amacý açýsýndan bir çip üzerinde yer alan her iþlemci çekirdeði için bir iþlemci tanýmlamaya devam eder. Örneðin, bir çift çekirdekli iþlemci çipinde iki adet iþlemci çekirdeði bulunur. + +Lisans Alan Taraf, bu Programý, Passport Advantage Alt Kapasite Lisanslama Koþullarý'na (aþaðýda belirtilen Web sayfasýna bakýn) göre Tam Kapasite lisanslama veya Sanallaþtýrma Kapasitesi (Alt Kapasite) lisanslama esasýný kullanarak etkinleþtirebilir. Tam Kapasite lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, bu Programýn sürekli olarak kaldýrýldýðý sunucular hariç olmak üzere, bu Program tarafýndan kullanýlan veya yönetilen fiziksel donaným ortamýnda yer alan etkinleþtirilmiþ tüm iþlemci çekirdeklerini* kapsamaya yetecek sayýda Ýþlemci Deðer Birimi (PVU) yetkisi edinmesi gerekir. Sanallaþtýrma Kapasitesi lisanslamasý kullanýlýyorsa, Lisans Alan Tarafýn, Sanallaþtýrma Kapasitesi Lisansý Sayým Kurallarý'na (Virtualization Capacity License Counting Rules) göre tanýmlanan ve bu Program tarafýndan kullanýlan veya yönetilen tüm etkin iþlemci çekirdeklerini kapsamaya yetecek sayýda yetkiyi edinmesi gerekir. Söz konusu kurallarla ilgili bilgi edinmek için aþaðýda yer alan adrese bakýn: http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html. + +* Etkinleþtirilmiþ iþlemci çekirdeði, iþlemci çekirdeklerinin kapasitesinin, sanallaþtýrma teknolojileri, iþletim sistemi komutlarý, BIOS ayarlarý veya benzeri sýnýrlamalarla sýnýrlandýrýlabilmesinden veya sýnýrlý olmasýndan baðýmsýz olarak herhangi bir fiziksel veya sanal sunucuda kullanýlabilir. + +Programa Özgü Koþullar + +Boþta Duran Yedekleme Konfigürasyonlarý + +Bu bölümün amaçlarý açýsýndan bir "Boþta Duran Yedekleme" konfigürasyonu için bu Programýn bir kopyasý, yüksek düzeyde kullanýlabilirlik çözümünün parçasýný oluþturan bir sunucunun üzerine kurulmuþtur ve etkin sunucu üzerindeki Program kopyasý kullanýlamaz duruma geldiðinde Program yedek sistem olarak iþlev gören bu sunucuya geçer. Bir sunucu, yalnýzca bir yedek sisteme geçiþ iþlemi gerçekleþinceye kadar, özel olarak yedek sisteme geçiþ senaryolarýna destek veren yönetim iþlemleri için kullanýldýðýnda, "boþta duran" olarak deðerlendirilir. + +Bu Program, uygun þekilde lisanslandýðý durumlar dýþýnda, bir Boþta Duran Yedekleme sunucusuna kurulamaz. + +Bu Program bir Boþta Duran Yedekleme konfigürasyonunda Multi-Instance Queue Manager (Birden Çok Eþgörünümlü Kuyruk Yöneticisi) özelliðiyle birlikte kullanýlýyorsa, bu Programýn bir kopyasý yedekleme amaçlarýyla bir Boþta Duran Yedekleme sunucusunda bulundurulabilir ve çalýþtýrýlabilir, ancak "boþta duran" özelliðini kaybetmemesi ve etkin sunucu yedek sisteme geçmek üzere Boþta Duran Yedekleme Sunucusuna geçmediði sürece hiçbir tür üretim amaçlý iþte kullanýlmamasý gerekir. Etkin sunucu yedek sisteme geçmek üzere Boþta Duran Yedekleme Sunucusuna geçtiðinde, Programýn Boþta Duran Yedekleme kopyasý hata süresi boyunca üretim amaçlý iþ görmek üzere kullanýlabilir. + +Bu Program bir Boþta Duran Yedekleme konfigürasyonunda Yüksek Düzeyde Kullanýlabilirlik sistemleriyle birlikte kullanýlýyorsa, bu Programýn bir kopyasý yedekleme amaçlarýyla Boþta Duran Yedekleme sunucusunda bulundurulabilir, ancak çalýþtýrýlamaz (ve bu nedenle hiçbir tür üretim amaçlý iþte kullanýlamaz). Ancak, etkin sunucunun bir hata nedeniyle çalýþmamasý durumunda Yüksek Düzeyde Kullanýlabilirlik bileþenleri tarafýndan otomatik olarak çalýþtýrýlýr ve bu durumda Programýn Boþta Duran Yedekleme sunucusunda bulunan kopyasý hata süresi boyunca üretim amaçlý iþ görmek üzere kullanýlabilir. + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +ÖNEMLÝ: DÝKKATLE OKUYUN + +Aþaðýda iki lisans sözleþmesi sunulmuþtur. + +1. Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi +2. IBM Uluslararasý Program Lisans Sözleþmesi + +Lisans Alan Taraf, bu Programý (deðerlendirme, deneme, gösterimini yapma amaçlarý veya "dene veya satýn al" kampanyasý dýþýnda) üretim amacýyla kullanmak üzere satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak IBM Uluslararasý Program Lisans Sözleþmesi'ni hiçbir deðiþiklik olmaksýzýn kabul eder. + +Lisans Alan Taraf bu Programý, deðerlendirme, deneme, gösterimini yapma amaçlarýyla veya "dene veya satýn al" kampanyasý kapsamýnda kullanmak üzere (topluca "Deðerlendirme" olarak belirlenen amaçla) satýn alýyorsa, aþaðýda yer alan "Kabul ediyorum" düðmesini týklatarak (i) Programlarýn Deðerlendirilmesi Ýçin IBM Uluslararasý Lisans Sözleþmesi'ni ("Deðerlendirme Lisansý") hiçbir deðiþiklik olmaksýzýn ve (ii) IBM Uluslararasý Program Lisans Sözleþmesi'ni ("UPLS") hiçbir deðiþiklik olmaksýzýn kabul eder. + +Deðerlendirme Lisansý, Lisans Alan Tarafýn Deðerlendirme süresi boyunca geçerli olacaktýr. + +Deðerlendirme süresi sonunda, Lisans Alan taraf, bir tedarik sözleþmesi (örneðin, IBM Uluslararasý Passport Advantage veya IBM Passport Express Advantage sözleþmeleri gibi) imzalayarak bu Programý edinmeyi (veya Deðerlendirme sürecinden sonra kullanmak üzere bu Programýn ek kopyalarýný edinmeyi) seçtiyse, Uluslararasý Program Lisans Sözleþmesi (UPLS) otomatik olarak geçerli olacaktýr. + +Deðerlendirme Lisansý ve UPLS ayný anda yürürlükte olamayacaðý gibi, bu Sözleþmelerden birinin koþullarý diðerinin koþullarýný deðiþtirmez. Deðerlendirme Lisansý ile UPLS birbirlerinden baðýmsýz sözleþmelerdir. + +Bu iki lisans sözleþmesinin tam metni aþaðýdadýr. + + +Programlarýn Deðerlendirilmesi Ýçin Uluslararasý Lisans Sözleþmesi + +Bölüm 1 - Genel Koþullar + +LÝSANS ALAN TARAF, BU PROGRAMI YÜKLEYEREK, KURARAK, KOPYALAYARAK, KULLANARAK "KABUL EDÝYORUM" DÜÐMESÝNÝ TIKLATARAK YA DA BU PROGRAMI HERHANGÝ BÝR BAÞKA ÞEKÝLDE KULLANARAK VEYA BU PROGRAMA ERÝÞÝM SAÐLAYARAK, BU SÖZLEÞMENÝN KOÞULLARINI KABUL ETMÝÞ SAYILIR. BU KOÞULLARI, LÝSANS ALAN TARAF ADINA KABUL EDÝYORSANIZ, LÝSANS ALAN TARAFIN SÖZ KONUSU KOÞULLARA UYACAÐINI TAAHHÜT EDECEK TAM YETKÝYE SAHÝP OLDUÐUNUZU BEYAN VE GARANTÝ EDERSÝNÝZ. BU KOÞULLARI KABUL ETMÝYORSANIZ; + +* BU PROGRAMI YÜKLEMEYÝNÝZ, KURMAYINIZ, KOPYALAMAYINIZ, "KABUL EDÝYORUM" DÜÐMESÝNÝ TIKLATMAYINIZ, KULLANMAYINIZ YA DA BU PROGRAMA ERÝÞMEYÝNÝZ; VE + +* KULLANILMAMIÞ ORTAMI VE BELGELERÝ PROGRAMI ALDIÐINIZ TARAFA DERHAL ÝADE EDÝNÝZ. PROGRAMI YÜKLEYEREK EDÝNDÝYSENÝZ, PROGRAMIN TÜM KOPYALARINI ÝMHA EDÝNÝZ. + +1. Tanýmlar + +"Yetkili Kullaným" - Lisans Alan Tarafýn, Programý yürütmeye veya çalýþtýrmaya yetkili olduðu belirtilen seviye. Bu seviye, kullanýcý sayýsý, milyon cinsinden hizmet birimi ("MSU"), Ýþlemci Deðer Birimi ("PVU") veya IBM tarafýndan belirlenen herhangi bir diðer kullaným seviyesi esas alýnarak ölçülebilir. + +"IBM" - International Business Machines Corporation veya baðlý kuruluþlarýndan biri. + +"Lisans Bilgileri" ("LI") - belirli bir Programa özgü bilgileri ve ek koþullarý içeren belge. Programýn Lisans Bilgileri (LI) belgesi ayný zamanda, bir sistem komutu kullanýlarak eriþilen Program dizininde bulunabilir ya da Programla birlikte bir kitapçýk biçiminde gönderilebilir. + +"Program" - orijinalleri ve onun tüm kýsmi veya tam kopyalarý da dahil olmak üzere, aþaðýdakiler anlamýndadýr: 1) makine tarafýndan okunabilir komutlar ve veriler, 2) bileþenler, dosyalar ve modüller, 3) iþitsel-görsel içerik (örneðin, görüntüler, metinler, kayýtlar ya da resimler) ve 4) iliþkili lisanslý malzemeler (örneðin, anahtarlar ve belgeler). + +2. Sözleþmenin Yapýsý + +Bu Sözleþme, Bölüm 1 - Genel Koþullar, Bölüm 2 - Ülkeye Özgü Koþullar (eðer varsa) adlý bölümleri ve Lisans Bilgileri'ni içerir ve bu Programýn kullanýmýna iliþkin Lisans Alan Tarafla IBM arasýndaki sözleþmenin tamamýný oluþturur. Bu Sözleþme, Lisans Alan Tarafýn Programý kullanmasýyla ilgili olarak IBM ile arasýnda daha önce gerçekleþtirilen her türlü sözlü ve yazýlý iletiþimin yerine geçer. Bölüm 2'de yer alan koþullar Bölüm 1'de yer alan koþullarýn yerine geçebilir veya onlarý deðiþtirebilir. Ýki Bölümün koþullarý arasýnda herhangi bir çeliþki olmasý durumunda, Lisans Bilgileri belgesi her iki Bölümün koþullarýndan daha öncelikli olarak uygulanýr. + +3. Lisans Verilmesi + +Bu Programýn sahibi IBM ya da bir IBM saðlayýcýsýdýr. Bu Program telif hakkýna tabidir ve lisanslanýr, satýlmaz. + +IBM, Lisans Alan Tarafa, aþaðýda belirtilen koþullarla: 1) Programý, deðerlendirme süresi boyunca Lisans Bilgilerinde belirtilen Yetkili Kullaným seviyesinde yalnýzca dahili deðerlendirme, test veya deneme esasýna dayalý olarak gösterimini yapma amaçlarýyla yüklemesi, kurmasý ve kullanmasý; 2) bu tür bir Yetkili Kullanýmý desteklemek için makul sayýda Program kopyasýný çýkarmasý ve kurmasý, ve 3) bir yedekleme kopyasý çýkarmasý için sýnýrlý, münhasýr olmayan, devredilemeyen bir lisans verir, þu þartla ki: + +a. Lisans Alan Tarafýn, Programý yasalara uygun olarak edinmiþ olmasý ve bu Sözleþmesinin koþullarýna uygun davranmasý gerekir; + +b. Yedekleme kopyasýný, yalnýzca yedeklenen Program çalýþtýrýlamaz olduðunda çalýþtýrmasý gerekir; + +c. Lisans Alan Tarafýn, tüm telif hakký bildirimlerini ve mülkiyete iliþkin diðer tüm açýklamalarý Programýn her kopyasýna veya kýsmi kopyasýna kopyalayarak eklemeyi kabul etmesi gerekir; + +d. Lisans Alan Taraf, bu Programýn tüm kopyalarýnýn kaydýný tutar ve bu Programý kullanan herkesin (yerel olarak veya uzaktan eriþim ile), 1) bu Programý yalnýzca Lisans Alan Taraf adýna kullanacaðýný ve 2) bu Sözleþmenin koþullarýna uymasýný saðlayacaðýný kabul etmiþ sayýlýr; + +e. Lisans Alan Taraf, 1) bu Programý üretime iliþkin amaçlarla kullanamaz veya Programý bu Sözleþmede açýkça izin verilenler dýþýnda baþka bir biçimde kullanamaz, kopyalayamaz, deðiþtiremez ya da daðýtamaz; 2) geçerli yasalarýn sözleþme ile deðiþtirilmesine olanak tanýmayarak açýkça izin verdiði durumlar dýþýnda, Programý ters düzenleyemez, ters derleyemez, baþka yöntemlerle çevirisini yapamaz veya amacý dýþýnda kullanamaz; 3) Programýn hiçbir bileþenini, dosyasýný, modülünü, iþitsel-görsel içeriðini veya ilgili lisanslý malzemeleri programdan ayrý olarak kullanamaz; 4) Programý alt lisanslayamaz, kiralayamaz ya da Program için finansal kiralama yapamaz; ya da 5) Programý ticari olarak uygulama barýndýrma amaçlarýyla kullanamaz; ve + +f. Lisans Alan Taraf, Programý Destekleyici Program (Supporting Program) olarak edinirse, bu Programý yalnýzca Asýl Programý (Principal Program) desteklemek üzere ve Asýl Programýn lisansýnda yer alan tüm sýnýrlamalara tabi olarak kullanýr. Lisans Alan Taraf, bu Programý Asýl Program olarak edinirse, tüm Destekleyici Programlarý yalnýzca bu Programý desteklemek üzere ve bu Sözleþmede yer alan tüm sýnýrlamalara tabi olarak kullanýr. Bu "f" maddenin amaçlarý açýsýndan "Destekleyici Program", baþka bir IBM Programýnýn ("Asýl Program") bir bölümüdür ve Asýl Programýn Lisans Bilgileri (LI) belgesinde Destekleyici Program olarak olarak belirtilir. (Bir Destekleyici Programý herhangi bir sýnýrlamaya tabi olmadan kullanmak üzere destekleyici Program için ayrý bir lisans almak amacýyla Lisans Alan Tarafýn, Destekleyici Programý edindiði tarafa baþvurmasý gerekir.) + +Bu lisans, Lisans Alan Tarafýn çýkardýðý tüm Program kopyalarý için geçerlidir. + +3.1 Güncellemeler, Düzeltmeler ve Yamalar + +Programla ilgili olarak bir güncelleme, düzeltme veya yama alan Lisans Alan Taraf, bu tür güncelleme, düzeltme veya yamalarýn Lisans Bilgileri belgelerinde belirtilen ve bu güncelleme, düzeltme veya yamalar için geçerli olan tüm ek veya farklý koþullarý kabul eder.Herhangi bir ek veya farklý koþul saðlanmadýysa, ilgili güncelleme, düzeltme veya yama için yalnýzca bu Sözleþmenin koþullarý geçerli olur. Lisans Alan Tarafýn, elindeki Program Programýn herhangi bir güncellemesi ile deðiþtirildiyse, deðiþtirilen Programý kullanmaya derhal son verecektir. + +3.2 Süre ve Sona Erdirme + +Deðerlendirme süresi, Lisans Alan Tarafýn bu Sözleþmenin koþullarýný onayladýðý tarihte baþlar ve aþaðýdaki durumlardan birinde (hangisi ilk önce gerçekleþirse) sona erer: 1) deðerlendirme süresinin sonunda veya IBM tarafýndan Lisans Bilgileri belgesinde veya bir iþlem belgesinde belirlenen bitiþ tarihi geldiðinde veya 2) Program kendisini otomatik olarak devre dýþý býraktýðýnda tarihte. Lisans Alan taraf, deðerlendirme süresinin sona ermesinden sonraki on (10) gün içerisinde bu Programý ve Programdan çýkarýlan tüm kopyalarý yok edecektir. IBM, Lisans Bilgileri belgesinde Lisans Alan Tarafýn Programý elinde tutmaya devam edebileceðini belirtmiþ ve Lisans Alan Taraf Programý elinde bulundurmaya devam etmeyi seçmiþse, Program, IBM'in Lisans Alan Tarafa saðlayabileceði farklý bir lisans sözleþmesine tabi olacaktýr. Ayrýca, bu durumda bir ücret ödenmesi de gerekebilir. + +Lisans Alan Tarafýn bu Sözleþmenin koþullarýna uygun davranmamasý durumunda IBM, Lisans Alan Tarafýn lisansýný sona erdirebilir. Lisans, taraflardan herhangi biri tarafýndan herhangi bir nedenle sona erdirildiyse, Lisans Alan Taraf derhal programý kullanmaya son verir ve Programýn kendisinde bulunan tüm kopyalarýný imha eder. Nitelikleri gereði Sözleþmenin sona erdirilmesi ile sona ermeyen Sözleþme hükümleri yerine getirilinceye kadar yürürlükte kalýr ve taraflarýn haleflerini ve devralanlarýný baðlar. + +BU PROGRAM, DEÐERLENDÝRME SÜRESÝNÝN SONA ERMESÝNDEN SONRA, KULLANILMASINI ÖNLEYECEK OLAN BÝR KULLANIMDAN ÇIKARMA AYGITI ÝÇEREBÝLÝR. LÝSANS ALAN TARAF, BU PROGRAMI VEYA KULLANIMDAN ÇIKARMA AYGITINI KURCALAMAMAYI KABUL EDER. LÝSANS ALAN TARAF, PROGRAMIN ARTIK KULLANILAMAMASI DURUMUNDA, ORTAYA ÇIKABÝLECEK HERHANGÝ BÝR VERÝ KAYBINI ÖNLEMEK ÜZERE GEREKEN ÖNLEMLERÝ ALMALIDIR. + +4. Ücretler + +Deðerlendirme süresi boyunca bu Programýn kullanýmýyla ilgili herhangi bir ücret alýnmaz. + +5. Garanti Verilmez + +TABÝ BULUNDUÐU KANUNLARIN GARANTÝ KAPSAMI DIÞINDA TUTULAMAYACAÐINI BELÝRTTÝÐÝ GARANTÝLER DIÞINDA IBM, BU PROGRAMA VEYA VARSA DESTEÐE ÝLÝÞKÝN HAK ÝHLALÝ YAPILMAYACAÐINA DAÝR GARANTÝLER VEYA KOÞULLAR ÝLE TÝCARÝLÝK, YETERLÝ KALÝTE VE BELÝRLÝ BÝR AMACA UYGUNLUK ÝÇÝN ZIMNÝ GARANTÝLER VEYA KOÞULLAR DA DAHÝL OLMAK, ANCAK BUNLARLA SINIRLI OLMAMAK ÜZERE AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEZ VEYA KOÞUL ÖNE SÜRMEZ. + +BAZI ÜLKELER YA DA HUKUK DÜZENLERÝ, AÇIK YA DA ZIMNÎ GARANTÝLERÝN HARÝÇ TUTULMASINA ÝZÝN VERMEZ, BU DURUMDA YUKARIDA HARÝÇ TUTULAN GARANTÝLER LÝSANS ALAN TARAF ÝÇÝN GEÇERLÝ OLMAYABÝLÝR. BÖYLE BÝR DURUMDA, BU TÜR GARANTÝLER YASAL OLARAK GEREKLÝ GÖRÜLEN EN KISA SÜREYLE SINIRLIDIR. BU SÜRE DOLDUKTAN SONRA HÝÇBÝR GARANTÝ GEÇERLÝ DEÐÝLDÝR. BAZI ÜLKELER YA DA HUKUK DÜZENLERÝ, ZIMNÝ GARANTÝNÝN NE KADAR SÜRECEÐÝNE ÝLÝÞKÝN SINIRLAMALARA ÝZÝN VERMEZ, BU DURUMDA YUKARIDAKÝ SINIRLAMALAR LÝSANS ALAN TARAF ÝÇÝN GEÇERLÝ OLMAYABÝLÝR. LÝSANS ALAN TARAF, ÜLKELERE YA DA HUKUK DÜZENLERÝNE GÖRE DEÐÝÞEN DÝÐER HAKLARA DA SAHÝP OLABÝLÝR. + +BU 5. BÖLÜMDE YER ALAN RED VE HARÝÇ TUTMA KOÞULLARI, AYRICA IBM'ÝN PROGRAM GELÝÞTÝRÝCÝLERÝ VE SAÐLAYICILARININ TÜMÜ ÝÇÝN DE GEÇERLÝDÝR. + +IBM DIÞI PROGRAMLARIN ÜRETÝCÝLERÝ, SAÐLAYICILARI VEYA YAYINCILARI KENDÝ GARANTÝLERÝNÝ VEREBÝLÝRLER. + +IBM AKSÝNÝ BELÝRTMEDÝÐÝ SÜRECE, HÝÇBÝR DESTEK SAÐLAMAZ. BU TÜR BÝR DURUMDA, IBM TARAFINDAN SAÐLANAN HER TÜRLÜ DESTEK ÝÞBU 5. BÖLÜMDE YER ALAN RED VE HARÝÇ TUTMA KOÞULLARINA TABÝ OLUR. + +6. Lisans Alan Tarafýn Verileri ve Veritabanlarý + +IBM, Lisans Alan Tarafa, bu Programla ilgili olarak ortaya çýkan bir sorunun nedenini ayrýþtýrmasýnda yardýmcý olmak için Lisans Alan Taraftan, 1) Lisans Alan Tarafýn sistemine uzaktan eriþmesi amacýyla IBM'e izin vermesini, ya da 2) Lisans Alan Tarafýn bilgilerini veya sistem verilerini IBM'e göndermesini isteyebilir. IBM'in iþbu Sözleþmeyle üstlendiði yükümlülüklerin kapsamý dýþýnda kalan bir desteði Lisans Alan Tarafa saðlamasý için IBM ile Lisans Alan Taraf arasýnda ayrý bir yazýlý sözleþmenin imzalanmasý ve bu sözleþmeyle IBM'in Lisans Alan Tarafa bu tür bir desteði vermeyi kabul etmiþ olmasý gerekir. Aksi durumda IBM Lisans Alan Tarafa bu tür bir desteði saðlamakla yükümlü olmaz. Her durumda, IBM, ürün ve hizmetlerini geliþtirmek amacýyla hata ve sorunlara iliþkin bilgileri kullanýr ve ilgili destek olanaklarýnýn saðlanmasýna yardýmcý olur. IBM, bu amaçla, (Lisans Alan Tarafýn yerleþik olduðu ülke dýþýndaki bir veya birden çok ülkede faaliyet gösterenler de dahil olmak üzere) IBM tüzel kiþiliklerini ve altyüklenicilerini kullanabilir ve Lisans Alan taraf da bu þekilde davranmasý için IBM'e yetki verir. + +Lisans Alan Taraf, 1) IBM'e saðladýðý tüm verilerden ve tüm veritabaný içeriklerinden, 2) (kiþisel olarak tanýmlanabilen veriler de dahil olmak üzere) verilere eriþilmesi, verilerin güvenliði, þifrelenmesi, kullanýmý ve aktarýmýyla ilgili prosedürlerin ve denetimlerin seçimi ve uygulanmasýndan ve 3) tüm veritabanlarýnýn ve depolanmýþ olan tüm verilerin yedeklenmesinden ve kurtarýlmasýndan sorumludur. Lisans Alan Taraf, hiçbir veriyi veya herhangi bir diðer biçimdeki kiþisel olarak tanýmlanabilen hiçbir bilgiyi IBM'e göndermeyecek veya saðlamayacaktýr ve IBM'e yanlýþlýkla saðlanan bu tür tüm bilgilerle ya da üçüncü kiþi iddialarýndan kaynaklananlar da dahil olmak üzere, bu türlü bilgilerin IBM tarafýndan kaybedilmesiyle veya açýklanmasýyla iliþkili olarak IBM'in ödemek zorunda kalabileceði tüm makul masraflardan ve diðer tutarlardan Lisans Alan Taraf sorumlu olacaktýr. + +7. Sorumluluklarýn Sýnýrý + +7 numaralý (Sorumluluklarýn Sýnýrý) bu bölümde yer alan tüm sýnýrlamalar ve hariç tutmalar, geçerli yasalar tarafýndan sözleþmeyle deðiþtirilmesine olanak tanýnmayarak yasaklanmadýðý sürece, tümüyle geçerlidir. + +7.1 IBM'in Sorumlu Olabileceði Maddeler + +IBM'in bir kusurundan veya sorumluluklarýný yerine getirmemesinden kaynaklanan ve Lisans Alan Tarafýn zararlarýný IBM'den talep etmeye hak kazandýðý durumlar olabilir. Lisans Alan Tarafýn, zararýný IBM'den talep etmesine olanak saðlayan yasal dayanak (esaslý ihlal, ihmal, yanlýþ beyan, diðer akdi veya haksýz fiil iddialarý dahil olmak üzere) her ne olursa olsun, IBM'in her bir Programdan kaynaklanan veya her bir Programla iliþkili veya baþka bir þekilde bu Sözleþmeden kaynaklanan tüm iddialar karþýsýndaki bütün sorumluluðu, 1)ölüm dahil cismani zarar ile taþýnmaz ve taþýnabilir kiþisel mallara verilen zararlar; ve 2) en çok 10.000 ABD Dolarýna (veya yerel para birimiyle eþdeðer bir tutara) kadar olmak koþuluyla, diðer gerçek doðrudan zararlar tutarýný aþmayacaktýr. + +Bu sýnýrlama, ayrýca IBM'in Program geliþtiricileri ve saðlayýcýlarý için de geçerlidir. Bu tutar, IBM ve Program geliþtiricilerinin ve saðlayýcýlarýnýn toplu olarak sorumlu olduklarý azami tutardýr. + +7.2 IBM'in Sorumlu Olmadýðý Maddeler + +OLASILIKLARI ÖNCEDEN BÝLDÝRÝLMÝÞ OLSA BÝLE, IBM, IBM'ÝN PROGRAM GELÝÞTÝRÝCÝLERÝ VEYA SAÐLAYICILARI AÞAÐIDAKÝLERÝN HÝÇBÝRÝNDEN HÝÇBÝR KOÞUL ALTINDA SORUMLU OLMAZLAR: + +a. VERÝLERDEKÝ KAYIP VEYA HASARDAN; + +b. ÖZEL, ARIZÝ, CEZAÝ VEYA DOLAYLI ZARARLARDAN VEYA BAÐLI EKONOMÝK ZARARLARDAN; VEYA + +c. KAR KAYBI, ÝÞ KAYBI, GELÝR KAYBI, ÝTÝBAR KAYBI VEYA BEKLENEN TASARRUFUN KAYBINDAN. + +8. Mevzuat Uyumluluðunun Doðrulanmasý + +8 numaralý (Mevzuat Uyumluluðunun Doðrulanmasý) bu bölümün amaçlarý açýsýdan, "Deðerlendirme Programý Koþullarý": 1) bu Sözleþme ve IBM tarafýndan saðlanan geçerli deðiþiklik ve iþlem belgeleri, ve 2) yedeklemeyle, alt kapasite fiyatlandýrmasýyla ve geçiþle ilgili ilkeler de dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere, IBM Software Policy (IBM Yazýlým Ýlkesi) Web sitesinde (www.ibm.com/softwarepolicies), bulunabilecek IBM yazýlým ilkeleri anlamýna gelir. + +8 numaralý bu bölümde belirtilen haklar ve yükümlülükler, Programýn Lisans Alan Tarafa lisanslandýðý dönem boyunca ve bu süreyi takip eden iki (2) yýl boyunca, geçerliliðini sürdürmeye devam eder. + +8.1 Doðrulama Süreci + +Lisans Alan Taraf, tüm Programlarý kullanýmýnýn, IBM'in yürülükte bulunan tüm lisans ve fiyatlandýrma koþullarý da dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere, Deðerlendirme Programý Koþullarýna uygun olup olmadýðýnýn belirlenmesi amacýyla doðru tutulmuþ yazýlý kayýtlarý, sistem araçlarý çýktýlarýný ve diðer sistem bilgilerini yaratmayý, bunlarý saklamayý ve IBM ve ve denetçilerine saðlamayý kabul eder. 1) Yetkili Kullaným sýnýrlarýný aþmadýðýný ve 2) Deðerlendirme Programý Koþullarýna uygun olduðunu kanýtlamak Lisans Alan Tarafýn sorumluluðundadýr. + +IBM'in, makul bir süre önceden bildirerek, Lisans Alan Tarafýn, Deðerlendirme Programý Koþullarýna tabi olan Programlarý (herhangi bir amaçla) kullandýðý tüm yerlerde ve tüm ortamlarda, Deðerlendirme Programý Koþullarýna uygun davranýp davranmadýðýný araþtýrabilir. Bu tür bir araþtýrma iþlemi, Lisans Alan Tarafýn iþine en az engel olacak þekilde ve normal iþ saatleri içinde Lisans Alan Tarafýn tesislerinde yapýlacaktýr. IBM'in, bu tür bir denetçiyle yazýlý bir gizlilik sözleþmesi yapmýþ olmasý koþuluyla, IBM bu tür bir araþtýrma iþleminde yardýmcý olacak baðýmsýz bir denetçi kullanabilir. + +8.2 Anlaþmazlýklarýn Çözümü + +Bu tür bir araþtýrmanýn sonunda, Lisans Alan Tarafýn herhangi bir Programý Yetkili Kullanýmý aþacak þekilde kullandýðýnýn ya da Deðerlendirme Programý Koþullarýna uygun davranmadýðýnýn belirlenmesi durumunda IBM, Lisans Alan Tarafa bu durumu yazýlý olarak bildirecektir. Lisans Alan Taraf, 1) bu tür yetkiyi aþan tüm kullanýmlara, 2) hangisi daha kýsaysa, bu tür yetkiyi aþan kullaným süresi veya iki yýl için verilen desteðe, ve 3) bu tür bir araþtýrmanýn sonucunda belirlenen tüm ek ücretlere ve diðer yükümlülüklere iliþkin IBM tarafýndan düzenlenecek bir faturada belirtilecek tüm ücretleri doðrudan ve derhal IBM'e ödemeyi kabul eder. + +9. Üçüncü Kiþi Bildirimleri + +Bu Program, Lisans Alan Tarafa bu Sözleþme kapsamýnda üçüncü kiþi tarafýndan deðil IBM tarafýndan lisanslanan üçüncü kiþi kodunu içerebilir. Eðer varsa, üçüncü kiþi koduna iliþkin Bildirimler ("Üçüncü Kiþi Bildirimleri"), Programa yalnýzca Lisans Alan Tarafa bilgi vermek üzere eklenmiþtir. Bu bildirimler, Programýn NOTICES dosyasýnda/dosyalarýnda bulunabilir. Bazý üçüncü kiþi kodlarýna iliþkin kaynak kodunun nasýl edinilebileceðine iliþkin bilgi, Üçüncü Kiþi Bildirimlerinde bulunabilir. IBM, Üçüncü Kiþi Bildirimlerinde üçüncü kiþi kodunu "Deðiþtirilebilir Üçüncü Kiþi Kodu" olarak tanýmlarsa, Lisans Alan Tarafa, 1) Deðiþtirilebilir Üçüncü Kiþi Kodunu deðiþtirme ve 2) yalnýzca, Lisans Alan Tarafýn bu tür bir üçüncü kiþi kodunda yaptýðý deðiþikliklerde hata ayýklama amacýyla olmak koþuluyla, Deðiþtirilebilir Üçüncü Kiþi Koduyla doðrudan arabirim oluþturan Program modülleri üzerinde ters mühendislik iþlemleri yapma yetkisi verir. IBM'in hizmet ve destek yükümlülükleri, eðer varsa, yalnýzca deðiþtirilmemiþ Program için geçerlidir. + +10. Genel Koþullar + +a. Bu Sözleþmenin hiçbir koþulu, tüketicilerin sözleþmeyle vazgeçilemeyen veya sýnýrlandýrýlamayan yasal haklarýný etkilemez. + +b. Bu Sözleþmenin herhangi bir hükmü geçersiz ya da uygulanamaz olduðunda, Sözleþmenin geri kalan hükümleri tam olarak yürürlükte kalmaya ve geçerli olmaya devam eder. + +c. Lisans Alan Tarafýn bu Programý ihraç etmesi yasaktýr. + +d. Lisans Alan Taraf, International Business Machines Corporation ve baðlý kuruluþlarýna (ve bunlarýn haleflerine ve devralanlarýna, yüklenicilerine ve IBM Çözüm Ortaklarýna), Lisans Alan Tarafýn IBM ürün ve hizmetleriyle ilgili veya IBM ile Lisans Alan Tarafýn iþ iliþkisini geliþtirmek amacýyla, Lisans Alan Tarafýn iletiþim bilgilerini iþ yaptýklarý herhangi bir yerde depolama ve kullanma izni verir. + +e. Taraflardan her biri, diðer tarafýn bu Sözleþmeyle ilgili yükümlülüklerini yerine getirmediði iddiasýnda bulunmadan önce, diðer tarafa ilgili yükümlülüðü yerine getirmesi için gereken makul fýrsatý tanýmayý kabul eder. Taraflar, bu Sözleþmeyle ilgili olarak ortaya çýkabilecek tüm ihtilaflarý, anlaþmazlýklarý veya iddialarý iyi niyetle çözmeye çalýþacaklardýr. + +f. Geçerli yasalarýn sözleþmeyle deðiþtirilmesine veya sýnýrlandýrýlmasýna olanak tanýmayarak aksini belirttiði durumlar dýþýnda: 1) taraflardan hiçbiri, bu Sözleþmeden kaynaklanan veya bu Sözleþmeyle ilgili olarak yasal iþlem gerektiren bir durumun üzerinden iki yýldan fazla bir süre geçtikten sonra hangi biçimde olursa olsun, yasal bir iþlemde bulunamaz; ve 2) bu sürenin sona ermesiyle birlikte, bu tür tüm iddialar ve bu iddialarla ilgili tüm haklar zamanaþýmýna uðrar. + +g. Taraflardan hiçbiri, elinde olmayan nedenlerden ötürü yükümlülüklerini yerine getirememekten sorumlu tutulamaz. + +h. Bu Sözleþme herhangi bir üçüncü kiþi için bir dava hakký ya da bir dava nedeni yaratmaz ve ayrýca IBM, yukarýda yer alan 7.1 numaralý (IBM'in Sorumlu Olabileceði Maddeler) baþlýklý bölümde izin verilenler dýþýnda ilgili üçüncü kiþiye karþý yasal olarak sorumlu olduðu (ölüm dahil) cismani zarar veya taþýnmaz ve taþýnabilir kiþisel mallara verilen zarar dýþýnda, üçüncü bir kiþi tarafýndan Lisans Alan tarafa yöneltilen herhangi bir iddiaya karþý sorumluluk üstlenmez. + +i. Bu Sözleþmeyi imzalamýþ olmakla, taraflardan hiçbiri: 1) bu Programa iliþkin yukarýdaki 5 numaralý (Garanti Verilmez) baþlýklý bölümde açýkça garanti edilenler dýþýndaki performans veya iþlevler; 2) diðer taraflarýn deneyimleri veya önerileri; veya 3) Lisans Alan Tarafýn elde edebileceði tüm sonuçlar veya tasarruflar da dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere bu Sözleþmede belirtilmemiþ olan hiçbir beyana itibar etmeyecektir. + +j. IBM, belirli kuruluþlarla ("IBM Çözüm Ortaklarý" olarak adlandýrýlýr) belirli Programlarý tanýtmak, pazarlamak ve desteklemek üzere sözleþmeler imzalamýþtýr. IBM Çözüm Ortaklarý, IBM'den ayrý ve baðýmsýz kuruluþlardýr. IBM, IBM Çözüm Ortaklarýnýn eylemlerinden veya bildirimlerinden ya da Lisans Alan Tarafa karþý yükümlülüklerinden sorumlu deðildir. + +k. Lisans Alan Tarafýn IBM ile yaptýðý diðer sözleþmelere (örneðin, IBM Müþteri Sözleþmesi) iliþkin lisans ve fikri mülkiyete iliþkin tazminat koþullarý bu Sözleþme kapsamýnda saðlanan Program lisanslarý için geçerli olmaz. + +11. Coðrafi Kapsam ve Geçerli Yasa + +11.1 Geçerli Yasa + +Taraflar, kanunlar ihtilafý prensibine bakýlmaksýzýn, bu Sözleþmenin konusundan doðan veya bir biçimde bu Sözleþmenin konusu ile ilgili olan haklar, görevler ve yükümlülüklerin, Lisans Alan Tarafýn lisansý edindiði ülkenin yasalarýna tabi olduðunu, yine bunlarýn yorumlanmasý ve uygulanmasýnda bu yasalarýn geçerli bulunduðunu kabul ederler. + +Birleþmiþ Milletler'in Uluslararasý Mal Satýþlarýna iliþkin Sözleþme Bildirgesi geçerli deðildir. + +11.2 Yetkili Mahkeme + +Taraflarýn tüm hak, görev ve yükümlülükleri, Lisans Alan tarafýn Program lisansýný edindiði ülkenin mahkemelerine tabidir. + +Bölüm 2 - Ülkeye Özgü Koþullar + +Aþaðýda belirtilen ülkelerde verilen lisanslara iliþkin olarak aþaðýda belirtilen koþullar Bölüm 1'de atýfta bulunulan koþullarýn yerine geçer veya onlarý deðiþtirir. Bölüm 1'de yer alan ve bu deðiþiklik eki tarafýndan deðiþtirilmeyen tüm koþullar deðiþmeksizin yürürlükte kalmaya devam eder. Bölüm 2 aþaðýda belirtilen þekilde düzenlenmiþtir: + +* Bölüm 1, Madde 11 (Geçerli Yasa ve Yetkili Mahkeme) için Ülkeye özgü deðiþiklikler; ve + +* Diðer Sözleþme hükümlerine iliþkin Avrupa, Orta Doðu ve Afrika ülkelerine özgü deðiþiklikler. + +Bölüm 1, Madde 11 (Geçerli Yasa ve Yetkili Mahkeme) için ülkeye özgü deðiþiklikler; + +11.2 Yetkili Mahkeme + +Aþaðýdaki paragraf yetkili mahkeme ile ilgilidir ve Türkiye için geçerli olduðundan Altbölüm 11.2 (Yetkili Mahkeme) içinde yer alan koþullarý deðiþtirir: + +Taraflarýn tüm hak, görev ve yükümlülükleri, Lisans Alan tarafýn Program lisansýný edindiði ülkenin mahkemelerine tabidir. Ancak, aþaðýda belirtilen ülkeler için, seri yargýlama usulü de dahil olmak üzere, bu Sözleþmeden doðan veya bu Sözleþmenin yürütülmesiyle ilgili tüm anlaþmazlýklar, aþaðýda belirtilen ve yetkili mahkeme olan mahkemelere tabi olacak ve bu mahkemelerde çözümlenecektir: + +Türkiye'de: Türkiye Cumhuriyeti'nin Ýstanbul Merkez Mahkemelerinde ya da Ýcra Dairelerinde çözümlenecektir. + +AVRUPA, ORTA DOÐU, AFRÝKA (EMEA) ÜLKELERÝNE ÝLÝÞKÝN DEÐÝÞÝKLÝKLER + +AVRUPA BÝRLÝÐÝ (AB) ÜLKELERÝ + +5. Garanti Verilmez + +Aþaðýdaki paragraf, 5 (Garanti Verilmez) numaralý bölüme eklenmiþtir: + +Avrupa Birliði'nde ("AB"), tüketicilerin, tüketim mallarýnýn satýþýna iliþkin geçerli ulusal mevzuat kapsamýnda yasal haklarý bulunmaktadýr. Bu haklar, 5 numaralý bölümde (Garanti Verilmez) yer alan hükümlerden etkilenmez. + +AB ÜYESÝ ÜLKELER VE TÜRKÝYE + +Verilerin gizliliðine veya korunmasýna iliþkin yerel mevzuatýný AB modeline uyumlu hale getirmiþ olan Türkiye veya herhangi bir diðer Avrupa ülkesi. + +10. Genel Koþullar + +Aþaðýdaki paragraf Madde 10.d'nin yerine geçer: + +(1) Tanýmlar - Madde 10.d'nin amacý açýsýndan aþaðýdaki ek tanýmlar geçerli olur: + +(a) Ýþ Ýletiþim Bilgileri - Lisans Alan Tarafýn çalýþanlarýna ve yüklenicilerine iliþkin adlar, görevler, iþ adresleri, telefon numaralarý ve e-posta adresleri de dahil olmak üzere Lisans Alan Tarafça IBM'e açýklanan iþle ilgili iletiþim bilgileri. Avusturya, Ýtalya ve Ýsviçre için Ýþ Ýletiþim Bilgileri, tüzel kiþilikler olan Lisans Alan Tarafa ve Lisans Alan Tarafýn yüklenicilerine iliþkin bilgileri (örneðin, Lisans Alan Tarafýn gelir verileri ve diðer iþlem bilgileri) de içerir. + +(b) Ýletiþim Sorumlularý - Ýþ Ýletiþim Bilgileriyle ilgili olan Lisans Alan Taraf çalýþanlarý ve yüklenicileri. + +(c) Veri Koruma Yetkilisi - Ýlgili ülkede geçerli Veri Koruma ve Elektronik Ýletiþim Mevzuatý tarafýndan belirlenen yetkili veya AB ülkeleri dýþýndaki ülkeler için, ilgili ülkedeki kiþisel verilerin korunmasý için danýþmanlýktan sorumlu yetkili veya (yukarýda belirtilenlerin herhangi biri için) usulüne uygun olarak bu tür yetkililerin halefi olarak atanan yetkili. + +(d) Veri Koruma & Elektronik Ýletiþim Mevzuatý - (i) 95/46/EC kodlu AB Yönergesinin (kiþisel verilerin iþlenmesiyle ve bu tür verilerin serbest dolaþýmýyla ilgili olarak kiþilerin korunmasýný amaçlar) ve 2002/58/EC kodlu AB Yönergesinin (elektronik iletiþim sektöründe kiþisel verilerin iþlenmesiyle ve korunmasýyla ilgilidir) koþullarýný uygulamak üzere yürürlükte olan yerel mevzuat ve düzenlemeler; ya da (ii) AB ülkeleri dýþýndaki ülkeler için, (yukarýda belirtilenlerden herhangi biri için) yasal mevzuat ve/veya düzenlemelerde yapýlan herhangi bir yasal deðiþiklik de dahil olmak üzere, ilgili ülkede, kiþisel verilerin korunmasýyla ve kiþisel verilerle ilgili elektronik iletiþimin düzenlenmesiyle ilgili yürürlükte olan yasal mevzuat ve/veya düzenlemeler. + +(e) IBM Group - International Business Machines Corporation of Armonk, New York, ABD, baðlý þirketleri ve bunlarýn ilgili Çözüm Ortaklarý ve altyüklenicileri. + +(2) Lisans Alan Taraf, IBM'e aþaðýda belirtilenlere iliþkin yetki verir: + +(a) Destek hizmetlerinin saðlanmasý da dahil olmak üzere, Lisans Alan Tarafý desteklemek amacýyla Ýletiþim Sorumlularýyla baðlantý kurulmasý (e-posta veya baþka yollarla) ve IBM Group ürünleri ve hizmetlerinin pazarlanmasý amacý da dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere, Lisans Alan Tarafla IBM Group arasýndaki iþ iliþkisinin geliþtirilmesini saðlanmasý amacýyla ("Belirlenen Amaç") IBM Group içinde Ýþle Ýlgili Ýletiþim Bilgilerinin iþlenmesi ve kullanýlmasý; ve + +(b) Ýþ Ýletiþim Bilgilerinin, yalnýzca Belirlenen Amaçla ilgili olarak IBM Group'un diðer üyelerine açýklanmasý. + +(3) IBM, Ýþle Ýlgili Ýletiþim Bilgilerinin, Veri Koruma & Elektronik Ýletiþim Mevzuatýna uygun olarak iþleneceðini ve yalnýzca Belirlenen amaç için kullanýlacaðýný kabul eder. + +(4) Veri Koruma & Elektronik Ýletiþim Mevzuatýnýn gerektirdiði ölçüde Lisans Alan Taraf, IBM Group'a Ýþle Ýlgili Ýletiþim Bilgilerinin Belirlenen Amaç için iþlenmesini ve kullanýlmasýný saðlamak amacýyla Ýletiþim Sorumlularýndan gereken tüm izinleri aldýðýný (ve alacaðýný) ve tüm bildirimleri Ýletiþim Sorumlularýna gönderdiðini (veya göndereceðini) beyan eder. + +(5) Lisans Alan Taraf, IBM'e Ýþle Ýlgili Ýletiþim Bilgilerini, aktarým iþleminin Veri Koruma Yetkilisi tarafýndan onaylanan sözleþme koþullarýna uygun olarak gerçekleþtirilmesi veya aktarým iþlemine Veri Koruma & Elektronik Ýletiþim Mevzuatý kapsamýnda izin verilmesi koþuluyla Avrupa Ekonomik Alaný dýþýna aktarma yetkisini verir. + +Z125-5543-05 (07/2011) + + +Uluslararasý Program Lisans Sözleþmesi + +Bölüm 1 - Genel Koþullar + +LÝSANS ALAN TARAF, BU PROGRAMI YÜKLEYEREK, KURARAK, KOPYALAYARAK, "KABUL EDÝYORUM" DÜÐMESÝNÝ TIKLATARAK YA DA BU PROGRAMI HERHANGÝ BÝR BAÞKA ÞEKÝLDE KULLANARAK VEYA BU PROGRAMA ERÝÞEREK, BU SÖZLEÞMENÝN KOÞULLARINI KABUL ETMÝÞ SAYILIR. BU KOÞULLARI, LÝSANS ALAN TARAF ADINA KABUL EDÝYORSANIZ, LÝSANS ALAN TARAFIN SÖZ KONUSU KOÞULLARA UYACAÐINI TAAHHÜT EDECEK TAM YETKÝYE SAHÝP OLDUÐUNUZU BEYAN VE GARANTÝ EDERSÝNÝZ. BU KOÞULLARI KABUL ETMÝYORSANIZ; + +* BU PROGRAMI YÜKLEMEYÝNÝZ, KURMAYINIZ, KOPYALAMAYINIZ, "KABUL EDÝYORUM" DÜÐMESÝNÝ TIKLATMAYINIZ, KULLANMAYINIZ YA DA BU PROGRAMA ERÝÞMEYÝNÝZ; VE + +* ÖDEDÝÐÝNÝZ TUTARIN GERÝ ÖDENMESÝ ÝÇÝN KULLANILMAMIÞ ORTAMI, BELGELERÝ VE YETKÝ BELGESÝNÝ PROGRAMI ALDIÐINIZ TARAFA DERHAL ÝADE EDÝNÝZ. PROGRAMI YÜKLEYEREK EDÝNDÝYSENÝZ, PROGRAMIN TÜM KOPYALARINI ÝMHA EDÝNÝZ. + +1. Tanýmlar + +"Yetkili Kullaným" - Lisans Alan Tarafýn, Programý yürütmeye veya çalýþtýrmaya yetkili olduðu belirtilen seviye. Bu seviye, kullanýcý sayýsý, milyon cinsinden hizmet birimi ("MSU"), Ýþlemci Deðer Birimi ("PVU") veya IBM tarafýndan belirlenen herhangi bir diðer kullaným seviyesi esas alýnarak ölçülebilir. + +"IBM" - International Business Machines Corporation veya baðlý kuruluþlarýndan biri. + +"Lisans Bilgileri" ("LI") - Belirli bir Programa özgü bilgileri ve ek koþullarý içeren belge. Programlara iliþkin Lisans Bilgileri belgelerine þu Web adresinden ulaþýlabilir: www.ibm.com/software/sla. Lisans Bilgileri (LI) belgesi ayný zamanda, bir sistem komutu kullanýlarak eriþilen Program dizininde bulunabilir ya da Programla birlikte bir kitapçýk biçiminde gönderilebilir. + +"Program" - orijinalleri ve onun tüm kýsmi veya tam kopyalarý da dahil olmak üzere, aþaðýdakiler anlamýndadýr: 1) makine tarafýndan okunabilir komutlar ve veriler, 2) bileþenler, dosyalar ve modüller, 3) iþitsel-görsel içerik (örneðin, görüntüler, metinler, kayýtlar ya da resimler) ve 4) iliþkili lisanslý malzemeler (örneðin, anahtarlar ve belgeler). + +"Yetki Belgesi" ("PoE") - Lisans Alan Tarafýn Kullaným Yetkisine sahip olduðuna iliþkin kanýt. Yetki Belgesi (PoE) ayný zamanda, Lisans Alan Tarafýn, garantiden, varsa, gelecekteki güncelleme ücretlerinden ve olasý özel olanaklar ya da promosyon olanaklarýndan yararlanmaya hak kazandýðýný da gösterir. IBM, Lisans Alan Tarafa bir Yetki Belgesi (PoE) saðlamazsa, üzerinde Programýn adýnýn ve Yetkili Kullaným düzeyinin belirtilmesi koþuluyla, Programýn alýndýðý tarafýn verdiði (IBM ya da yetkili satýcýsý) orijinal satýþ makbuzu ya da diðer satýþ kayýtlarý IBM tarafýndan Yetki Belgesi olarak kabul edilebilir. + +"Garanti Süresi" - orijinal Lisans Alan Tarafa lisansýn verildiði tarihten itibaren geçerli olmak üzere bir (1) yýl. + +2. Sözleþmenin Yapýsý + +Bu Sözleþme, Bölüm 1 - Genel Koþullar, Bölüm 2 - Ülkeye Özgü Koþullar (eðer varsa) adlý bölümleri, Lisans Bilgileri belgesini ve Yetki Belgesini içerir ve bu Programýn kullanýmýna iliþkin Lisans Alan Tarafla IBM arasýndaki sözleþmenin tamamýný oluþturur. Bu Sözleþme, Lisans Alan Tarafýn Programý kullanmasýyla ilgili olarak IBM ile arasýnda daha önce gerçekleþtirilen her türlü sözlü ve yazýlý iletiþimin yerine geçer. Bölüm 2'de yer alan koþullar, Bölüm 1'de yer alan koþullarýn yerine geçebilir veya onlarý deðiþtirebilir. Ýki Bölümün koþullarý arasýnda herhangi bir çeliþki olmasý durumunda, Lisans Bilgileri belgesi her iki Bölümün koþullarýndan daha öncelikli olarak uygulanýr. + +3. Lisans Verilmesi + +Bu Programýn sahibi IBM ya da bir IBM saðlayýcýsýdýr. Bu Program telif hakkýna tabidir ve lisanslanýr, satýlmaz. + +IBM, Lisans Alan Tarafa, aþaðýda belirtilen koþullarla 1) Programý Yetki Belgesinde belirtilen düzeye kadar Yetkili olarak Kullanmasý, 2) bu tür bir Yetkili Kullanýmý desteklemek için Program kopyalarýný çýkarmasý ve kurmasý, ve 3) bir yedekleme kopyasý çýkarmasý için münhasýr olmayan bir lisans verir: + +a. Lisans Alan Tarafýn Programý yasalara uygun olarak edinmiþ olmasý ve bu Sözleþmesinin koþullarýna uygun davranmasý gerekir; + +b. yedekleme kopyasýný, yalnýzca yedeklenen Program çalýþtýrýlamaz olduðunda çalýþtýrmasý gerekir; + +c. Lisans Alan Tarafýn tüm telif hakký bildirimlerini ve mülkiyete iliþkin diðer tüm açýklamalarý Programýn her kopyasýna veya kýsmi kopyasýna kopyalayarak eklemesi gerekir; + +d. Lisans Alan Taraf, bu Programý kullanan herkesin (yerel olarak veya uzaktan eriþim ile), 1) bu Programý yalnýzca Lisans Alan Taraf adýna kullanacaðýný ve 2) bu Sözleþmenin koþullarýna uymasýný saðlayacaðýný kabul etmiþ sayýlýr; + +e. Lisans Alan Taraf, 1) Programý bu Sözleþmede açýkça izin verilenden baþka bir biçimde kullanamaz, kopyalayamaz, deðiþtiremez ya da daðýtamaz; 2) geçerli yasalarýn sözleþme ile deðiþtirilmesine olanak tanýmayarak açýkça izin verdiði durumlar dýþýnda, Programý ters düzenleyemez, ters derleyemez veya baþka yöntemlerle çevirisini yapamaz; 3) Programýn hiçbir bileþenini, dosyasýný, modülünü, sesli ve görüntülü içeriðini veya iliþkili lisanslý malzemeleri programdan ayrý olarak kullanamaz; veya 4) Programý alt lisanslayamaz, kiralayamaz ya da Program için finansal kiralama yapamaz; ve + +f. Lisans Alan Taraf, Programý Destekleyici Program (Supporting Program) olarak edinirse, bu Programý yalnýzca Asýl Programý (Principal Program) desteklemek üzere ve Asýl Programýn lisansýnda yer alan tüm sýnýrlamalara tabi olarak kullanýr. Lisans Alan Taraf, bu Programý Asýl Program olarak edinirse, tüm Destekleyici Programlarý yalnýzca bu Programý desteklemek üzere ve bu Sözleþmede yer alan tüm sýnýrlamalara tabi olarak kullanýr. Bu maddenin ("f"), amaçlarý açýsýndan, "Destekleyici Program" baþka bir IBM Programýnýn ("Asýl Program") bir bölümüdür ve Asýl Programýn Lisans Bilgileri (LI) belgesinde Destekleyici Program olarak belirtilir. (Bir Destekleyici Programý herhangi bir sýnýrlamaya tabi olmadan kullanmak üzere destekleyici Program için ayrý bir Lisans almak için Lisans Alan Tarafýn, Destekleyici Programý edindiði tarafa baþvurmasý gerekir.) + +Bu lisans, Lisans Alan Tarafýn çýkardýðý tüm Program kopyalarý için geçerlidir. + +3.1 Geçiþ Amaçlý Büyütmeler, Güncellemeler, Düzeltmeler ve Yamalar + +3.1.1 Geçiþ Amaçlý Büyütmeler + +Bu Program, bir Geçiþ Amaçlý Büyütme Programýyla deðiþtirilirse, deðiþtirilen Programýn lisansý derhal sona erer. + +3.1.2 Güncellemeler, Düzeltmeler ve Yamalar + +Programla ilgili olarak bir güncelleme, düzeltme veya yama alan Lisans Alan Taraf, bu tür güncelleme, düzeltme veya yamalarýn Lisans Bilgileri belgelerinde belirtilen ve bu güncelleme, düzeltme veya yamalar için geçerli olan tüm ek veya farklý koþullarý kabul eder.Herhangi bir ek veya farklý koþul saðlanmadýysa, ilgili güncelleme, düzeltme veya yama için yalnýzca bu Sözleþmenin koþullarý geçerli olur. Lisans Alan Tarafýn, elindeki Program Programýn herhangi bir güncellemesi ile deðiþtirildiyse, deðiþtirilen Programý kullanmaya derhal son verecektir. + +3.2 Sabit Süre Lisanslarý + +IBM, Programý sabit bir süre için lisansladýysa, Lisans Alan Taraf ve IBM söz konusu sabit süreyi yenilemeye karar vermedikleri sürece, Lisans Alan Tarafýn lisansý bu sabit sürenin sonunda sona erer. + +3.3 Süre ve Sona Erdirme + +Bu Sözleþme sona erdirilinceye kadar geçerlidir. + +Lisans Alan Tarafýn bu Sözleþmenin koþullarýna uygun davranmamasý durumunda, IBM, Lisans Alan Tarafýn lisansýný sona erdirebilir. + +Lisans, taraflardan herhangi biri tarafýndan herhangi bir nedenle sona erdirildiyse, Lisans Alan Taraf derhal programý kullanmaya son verir ve Programýn kendisinde bulunan tüm kopyalarýný imha eder.Nitelikleri gereði Sözleþmenin sona erdirilmesi ile sona ermeyen Sözleþme hükümleri yerine getirilinceye kadar yürürlükte kalýr ve taraflarýn haleflerini ve devralanlarýný baðlar. + +4. Ücretler + +Ücretler, Yetki Belgesinde belirtilen, edinilen Yetkili Kullaným düzeyine baðlýdýr. IBM, bu Sözleþmenin baþka bir yerinde belirtilenler dýþýnda, muaccel olmuþ ya da ödenmiþ ücretler için Lisans Alan Tarafa bir kredi vermez ya da geri ödeme yapmaz. + +Yetkili Kullaným düzeyini artýrmak isteyen Lisans Alan Taraf, bu durumu önceden IBM'e veya bir IBM yetkili satýcýsýna bildirmeli ve geçerli tüm ücretleri ödemelidir. + +5. Vergiler + +Herhangi bir yetkili makam, Programla ilgili olarak, IBM'in net gelirine dayananlar hariç olmak üzere bir vergi, resim, harç veya baþkaca mali yükün ödenmesini zorunlu kýlarsa, Lisans Alan Taraf, bu tutarý bir faturada belirtildiði þekilde ödemeyi veya bunlardan muafsa, muaf olduðuna iliþkin belgeyi IBM'e saðlamayý kabul eder. Lisans Alan Taraf, Programla ilgili olarak, Programý edindiði tarihten sonraki tüm kiþisel mülkiyet vergilerinden kendisi sorumlu olur. Orijinal Lisans Alan Tarafýn lisans aldýðý ülkeye yapýlan ithalat nedeniyle veya orijinal Lisans Alan Tarafýn lisans aldýðý ülkeden yapýlan ihracat veya devir ya da Programýn orijinal Lisans Alan Tarafýn lisans aldýðý ülke dýþýnda kullanýmý veya Programa orijinal Lisans Alan Tarafýn lisans aldýðý ülke dýþýndan eriþilmesi nedeniyle herhangi bir yetkili makam, bir özel vergi, resim, harç veya baþkaca mali yükün ödenmesini zorunlu kýlarsa, Lisans Alan Taraf sözkonusu özel vergi, resim, harç veya baþkaca mali yükleri ödemekten sorumlu olduðunu ve bunlarý ödeyeceðini kabul eder. + +6. Para Ýadesi Garantisi + +Lisans Alan Taraf, herhangi bir nedenle Programdan memnun kalmazsa ve orijinal Lisans Alan Tarafsa, Programý ve Yetki Belgesini, Yetki Belgesinin kendisine gönderildiði tarihten itibaren otuz (30) gün içinde Programý edindiði tarafa iade etmesi koþuluyla, lisansý sona erdirebilir ve Program için ödediði ücreti geri alabilir. Lisans, yenilemeye tabi olan bir sabit süreli lisans ise, Lisans Alan Taraf, ancak ilk sabit sürenin baþlamasýndan sonraki otuz (30) gün içinde Programý ve Yetki Belgesini (PoE) iade ederse, Program için ödediði ücreti geri alabilir. Lisans Alan Taraf, Programý bir yerden yüklediyse, parasýnýn iade edilmesine iliþkin yönergeler için Programý edindiði tarafla baðlantý kurmalýdýr. + +7. Programýn Devri + +Lisans Alan Taraf, Programý ve tüm lisans haklarý ve yükümlülüklerini, yalnýzca devralan tarafýn bu Sözleþmenin koþullarýný kabul etmesi koþuluyla baþka bir tarafa devredebilir. Lisans, taraflardan herhangi biri tarafýndan herhangi bir nedenle sona erdirildiyse, Lisans Alan Tarafýn Programý üçüncü bir tarafa devretmesi yasaktýr. Lisans Alan Taraf, 1) Programýn veya 2) Programa iliþkin Yetkili Kullanýmýnýn bir kýsmýný devredemez. Lisans Alan Taraf Programý devrederse, Lisans Bilgileri belgesi ve Yetki Belgesi de dahil olmak üzere, bu Sözleþmenin basýlý bir kopyasýný da devretmelidir. Devir iþlemi tamamlandýktan hemen sonra, Lisans Alan Tarafýn lisansý sona erer. + +8. Garantiler ve Hariç Tutma + +8.1 Sýnýrlý Garanti + +IBM, tanýmlanmýþ iþletim ortamýnda kullanýldýðýnda, Programýn belirtimlerine uygun þekilde çalýþacaðýný garanti eder. Programýn belirtimleri ve tanýmlanmýþ iþletim ortamý bilgileri Programla birlikte gönderilen (READ-ME dosyasý gibi) belgelerde veya IBM tarafýndan yayýnlanan (duyuru mektubu gibi) diðer bilgilerde bulunabilir. Yerel yasalarýn, sözleþme ile deðiþtirilmesine veya sýnýrlandýrýlmasýna olanak tanýmayarak aksini belirttiði durumlar dýþýnda, Lisans Alan Taraf, bu tür belgelerin ve diðer Programa iliþkin içeriðin yalnýzca Ýngilizce olarak saðlanabileceðini kabul eder. + +Garanti, Programýn yalnýzca deðiþtirilmemiþ kýsýmlarý için geçerlidir.IBM Programýn kesintisiz ya da hatasýz çalýþacaðýný ya da IBM'in Programda olusan tüm hatalarý düzelteceðini garanti etmez. Bu Programýn kullanýmý sonucunda elde edilen sonuçlardan Lisans Alan Taraf sorumlu olur. + +Garanti Süresi Boyunca IBM, Lisans Alan Tarafýn, bilinen Program hatalarý, hata düzeltmeleri, sýnýrlamalar ve sorun atlatma gibi konularda bilgiler içeren IBM veritabanlarýna ek ücret ödemeden eriþmesini saðlar. Daha fazla bilgi edinmek için aþaðýda adresi verilen IBM Software Support Handbook (IBM Yazýlým Desteði Elkitabý) adlý belgeye bakýnýz: www.ibm.com/software/support. + +Eðer Program, Garanti Süresi içinde garanti edildiði gibi çalýþmazsa ve sorun IBM'in veritabanýnda bulunan bilgilerle çözülemezse, Lisans Alan Taraf Programý ve Yetki Belgesini, Programý edindiðiniz tarafa (IBM ya da yetkili satýcýsýna) iade edebilir ve program için ödemiþ olduðu ücreti geri alabilir. Programý iade ettikten sonra, Lisans Alan Tarafýn lisansý sona erer. Lisans Alan Taraf, Programý bir yerden yüklediyse, parasýnýn iade edilmesine iliþkin yönergeler için Programý edindiði tarafla baðlantý kurmalýdýr. + +8.2 Hariç Tutma + +BU GARANTÝLER LÝSANS ALAN TARAFA MÜNHASIR GARANTÝLER OLUP TÝCARÝLÝÐE, YETERLÝ KALÝTEYE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA VE MÜLKÝYETE DAÝR ZIMNÝ GARANTÝ VEYA KOÞULLAR ÝLE HAK ÝHLALÝ YAPILMAYACAÐINA DAÝR GARANTÝ VEYA KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ, DÝÐER TÜM GARANTÝ VEYA KOÞULLARIN YERÝNE GEÇER. BAZI ÜLKELER YA DA HUKUK DÜZENLERÝ, AÇIK YA DA ZIMNÎ GARANTÝLERÝN HARÝÇ TUTULMASINA ÝZÝN VERMEZ, BU DURUMDA YUKARIDA HARÝÇ TUTULAN GARANTÝLER LÝSANS ALAN TARAF ÝÇÝN GEÇERLÝ OLMAYABÝLÝR. BÖYLE BÝR DURUMDA, BU TÜR GARANTÝLER GARANTÝ SÜRESÝYLE SINIRLIDIR. BU SÜRE DOLDUKTAN SONRA HÝÇBÝR GARANTÝ GEÇERLÝ DEÐÝLDÝR. BAZI ÜLKELER YA DA HUKUK DÜZENLERÝ, ZIMNÝ BÝR GARANTÝNÝN NE KADAR SÜRECEÐÝNE ÝLÝÞKÝN SINIRLAMALARA ÝZÝN VERMEZ, BU DURUMDA YUKARIDAKÝ SINIRLAMALAR LÝSANS ALAN TARAF ÝÇÝN GEÇERLÝ OLMAYABÝLÝR. + +BU GARANTÝLER, LÝSANS ALAN TARAFA BELÝRLÝ YASAL HAKLAR KAZANDIRIR. LÝSANS ALAN TARAF, AYNI ZAMANDA ÜLKELERE YA DA HUKUK DÜZENLERÝNE GÖRE DEÐÝÞEN BAÞKA HAKLARA DA SAHÝP OLABÝLÝR. + +(GARANTÝLER VE HARÝÇ TUTMA) BAÞLIKLI BU 8. BÖLÜMDE YER ALAN GARANTÝLER, YALNIZCA IBM TARAFINDAN SAÐLANIR. ANCAK 8.2 NUMARALI (HARÝÇ TUTMA) BAÞLIKLI BU ALTBÖLÜMDE YER ALAN SORUMLULUÐUN REDDÝ ÝLE ÝLGÝLÝ HÜKÜMLER, IBM'ÝN ÜÇÜNCÜ KÝÞÝ KODU SAÐLAYICILARI ÝÇÝN DE GEÇERLÝDÝR. BU SAÐLAYICILAR, BU TÜR BÝR KODU HÝÇBÝR GARANTÝ VERMEKSÝZÝN VEYA KOÞUL ÖNE SÜRMEKSÝZÝN SAÐLARLAR. BU PARAGRAF, IBM'ÝN ÝÞBU SÖZLEÞME KAPSAMINDAKÝ GARANTÝ YÜKÜMLÜLÜKLERÝNÝ GEÇERSÝZ KILMAZ. + +9. Lisans Alan Tarafýn Verileri ve Veritabanlarý + +IBM, Lisans Alan tarafa, bu Programla ilgili olarak ortaya çýkan bir sorunun nedenini belirlemesinde yardýmcý olmak için Lisans Alan Taraftan, 1) Lisans Alan Tarafýn sistemine uzaktan eriþmesi amacýyla IBM'e izin vermesini ya da 2) Lisans Alan Tarafýn bilgilerini veya sistem verilerini IBM'e göndermesini talep edebilir. Ancak, IBM'in iþbu Sözleþmeyle üstlendiði garanti yükümlülüklerinin kapsamý dýþýnda kalan bir desteði Lisans Alan Tarafa saðlamasý için IBM ile Lisans Alan Taraf arasýnda ayrý bir yazýlý sözleþmenin imzalanmasý ve bu sözleþmeyle IBM'in Lisans Alan Tarafa bu tür bir desteði vermeyi kabul etmiþ olmasý gerekir. Aksi durumda, IBM Lisans Alan Tarafa bu tür bir desteði saðlamakla yükümlü olmaz. Her durumda, IBM, ürün ve hizmetlerini geliþtirmek amacýyla hata ve sorunlara iliþkin bilgileri kullanýr ve ilgili destek olanaklarýnýn saðlanmasýna yardýmcý olur. IBM bu amaçla, (Lisans Alan Tarafýn yerleþik olduðu ülke dýþýndaki bir veya birden çok ülkede faaliyet gösterenler de dahil olmak üzere) IBM tüzel kiþiliklerini ve altyüklenicilerini kullanabilir ve Lisans Alan taraf da bu þekilde davranmasý için IBM'e yetki verir. + +Lisans Alan Taraf, 1) IBM'e saðladýðý tüm verilerden ve tüm veritabaný içeriklerinden, 2) (kiþisel olarak tanýmlanabilen veriler de dahil olmak üzere) verilere eriþilmesi, verilerin güvenliði, þifrelenmesi, kullanýmý ve aktarýmýyla ilgili yordamlarýn ve denetimlerin seçimi ve uygulanmasýndan ve 3) tüm veritabanlarýnýn ve depolanmýþ olan tüm verilerin yedeklenmesinden ve kurtarýlmasýndan sorumludur. Lisans Alan Taraf, hiçbir veriyi veya herhangi bir diðer biçimdeki kiþisel olarak tanýmlanabilen hiçbir bilgiyi IBM'e göndermeyecek veya saðlamayacaktýr ve IBM'e yanlýþlýkla saðlanan bu tür tüm bilgilerle ya da üçüncü kiþi iddialarýndan kaynaklananlar da dahil olmak üzere, bu türlü bilgilerin IBM tarafýndan kaybedilmesiyle veya açýklanmasýyla iliþkili olarak IBM'in ödemek zorunda kalabileceði tüm makul masraflardan ve diðer tutarlardan Lisans Alan Taraf sorumlu olacaktýr. + +10. Sorumluluklarýn Sýnýrý + +10 numaralý (Sorumluluklarýn Sýnýrý) bu bölümde yer alan tüm sýnýrlamalar ve hariç tutmalar, geçerli yasalar tarafýndan sözleþmeyle deðiþtirilmesine olanak tanýnmayarak yasaklanmadýðý sürece, tümüyle geçerlidir. + +10.1 IBM'in Sorumlu Olabileceði Maddeler + +IBM'in bir kusurundan veya sorumluluklarýný yerine getirmemesinden kaynaklanan ve Lisans Alan Tarafýn zararlarýný IBM'den talep etmeye hak kazandýðý durumlar olabilir. Lisans Alan tarafýn, zararýný IBM'den talep etmesine olanak saðlayan yasal dayanak (Sözleþmenin esasa iliþkin ihlali, ihmal, yanlýþ beyan, diðer ahdi iddialar veya haksýz fiil iddialarý dahil olmak üzere) her ne olursa olsun, IBM'in her bir Programdan kaynaklanan veya her bir Programla iliþkili veya baþka bir þekilde bu Sözleþmeden kaynaklanan tüm iddialar karþýsýndaki bütün sorumluluðu aþaðýda belirtilenlerin tutarýný aþmayacaktýr: 1) ölüm dahil cismani zarar ile taþýnmaz ve taþýnabilir kiþisel mallara verilen zararlar; ve 2) Lisans Alan Tarafýn iddiaya konu olan Programa iliþkin ödediði ücreti aþmamak koþuluyla (eðer, Program sabit süreli lisans ücretine tabiyse, en çok on iki (12) aylýk ücrete kadar olmak koþuluyla) herhangi diðer gerçek doðrudan zararlar. + +Bu sýnýrlama, ayrýca IBM'in Program geliþtiricileri ve saðlayýcýlarý için de geçerlidir. Bu tutar, IBM ve Programgeliþtiricilerinin ve saðlayýcýlarýnýn toplu olarak sorumlu olduklarý azami tutardýr. + +10.2 IBM'in Sorumlu Olmadýðý Maddeler + +OLASILIKLARI ÖNCEDEN BÝLDÝRÝLMÝÞ OLSA BÝLE, IBM, IBM'ÝN PROGRAM GELÝÞTÝRÝCÝLERÝ VEYA SAÐLAYICILARI AÞAÐIDAKÝLERÝN HÝÇBÝRÝNDEN HÝÇBÝR KOÞUL ALTINDA SORUMLU OLMAZLAR: + +a. VERÝLERDEKÝ KAYIP VEYA HASARDAN; + +b. ÖZEL, ARIZÝ, CEZAÝ VEYA DOLAYLI ZARARLARDAN VEYA SONUÇTA ORTAYA ÇIKAN EKONOMÝK ZARARLARDAN; VEYA + +c. KAR KAYBI, ÝÞ KAYBI, GELÝR KAYBI, ÝTÝBAR KAYBI VEYA BEKLENEN TASARRUFUN KAYBINDAN. + +11. Uygunluk Doðrulamasý + +11 numaralý (Uygunluk Doðrulamasý) bu bölümün amaçlarý açýsýndan, "UPLS Program Koþullarý", 1) bu Sözleþme ve IBM tarafýndan saðlanan geçerli deðiþiklik ve iþlem belgeleri, ve 2) yedekleme, alt kapasite fiyatlandýrmasý ve geçiþ ile ilgili ilkeler de dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere, IBM Software Policy (IBM Yazýlým Ýlkesi) Web sitesinde bulunabilecek (www.ibm.com/softwarepolicies) IBM yazýlým ilkeleri anlamýna gelir. + +11 numaralý iþbu bölümde belirtilen haklar ve yükümlülükler, Programýn Lisans Alan Tarafa lisanslandýðý dönem boyunca ve bu süreyi takip eden iki (2) yýl boyunca, geçerliliðini sürdürmeye devam eder. + +11.1 Doðrulama Süreci + +Lisans Alan Taraf, tüm Programlarý kullanýmýnýn IBM'in hak kazanmaya iliþkin geçerli tüm lisans ve fiyatlandýrma koþullarý da dahil olmak, ancak tümü bunlarla sýnýrlý olmamak kaydýyla, UPLS Program Koþullarýna uygun olup olmadýðýnýn belirlenmesi amacýyla IBM ve denetçileri için, doðru tutulmuþ yazýlý kayýtlarý, sistem araçlarý çýktýlarýný ve diðer sistem bilgilerini yaratmayý, bunlarý saklamayý ve saðlamayý kabul eder. 1) Yetkili Kullanýmýna iliþkin sýnýrlarý aþmadýðýný ve 2) UPLS Program Koþullarýna uygun olduðunu kanýtlamak Lisans Alan Tarafýn sorumluluðudur. + +Makul bir süre önceden bildirerek, IBM, Lisans Alan Tarafýn Programlarý (herhangi bir amaçla) kullandýðý tüm yerlerde ve tüm ortamlarda UPLS Program Koþullarýna uygun davranýp davranmadýðýný doðrulayabilir. Bu tür bir doðrulama iþlemi, Lisans Alan Tarafýn iþine en az engel olacak þekilde ve normal iþ saatleri içinde Lisans Alan Tarafýn tesislerinde yapýlacaktýr. IBM'in, bu tür bir denetçiyle yazýlý bir gizlilik sözleþmesi yapmýþ olmasý koþuluyla, IBM bu tür bir doðrulama iþleminde yardýmcý olacak baðýmsýz bir denetçi kullanabilir. + +11.2 Karar + +Bu tür bir doðrulamanýn sonunda, Lisans Alan Tarafýn herhangi bir Programý Yetkili Kullanýmýný aþacak þekilde kullandýðýnýn ya da UPLS Program Koþullarýna uygun davranmadýðýnýn belirlenmesi durumunda, IBM, Lisans Alan Tarafa bu durumu yazýlý olarak bildirecektir. Lisans Alan Taraf, doðrudan IBM'e IBM'in bir faturada belirttiði 1) bu tür yetkiyi aþan tüm kullanýmlara, 2) hangisi daha kýsaysa, bu tür yetkiyi aþan kullaným süresi veya iki yýl için verilen desteðe, ve 3) bu tür bir doðrulamanýn sonucunda belirlenen tüm ek ücretlere ve diðer yükümlülüklere iliþkin ücretleri derhal ödemeyi kabul eder. + +12. Üçüncü Kiþi Bildirimleri + +Bu Program, Lisans Alan Tarafa bu Sözleþme kapsamýnda üçüncü kiþi tarafýndan deðil IBM tarafýndan lisanslanan üçüncü kiþi kodunu içerebilir. Eðer varsa, üçüncü kiþi koduna iliþkin Bildirimler ("Üçüncü Kiþi Bildirimleri"), Programa yalnýzca Lisans Alan Tarafa bilgi vermek üzere eklenmiþtir. Bu bildirimler, Programýn NOTICES dosyasýnda/dosyalarýnda bulunabilir. Bazý üçüncü kiþi kodlarýna iliþkin kaynak kodunun nasýl edinilebileceðine iliþkin bilgi, Üçüncü Kiþi Bildirimlerinde bulunabilir. IBM, Üçüncü Kiþi Bildirimlerinde üçüncü kiþi kodunu "Deðiþtirilebilir Üçüncü Kiþi Kodu" olarak tanýmlarsa, Lisans Alan Tarafa 1) Deðiþtirilebilir Üçüncü Kiþi Kodunu deðiþtirme ve 2) yalnýzca, Lisans Alan Tarafýn bu tür bir üçüncü kiþi kodunda yaptýðý deðiþikliklerde hata ayýklama amacýyla olmak koþuluyla, Deðiþtirilebilir Üçüncü Kiþi Koduyla doðrudan arabirim oluþturan Program modüllerini ters düzenleme yetkisini verir. IBM'in hizmet ve destek yükümlülükleri, eðer varsa, yalnýzca deðiþtirilmemiþ Program için geçerlidir. + +13. Genel Koþullar + +a. Bu Sözleþmenin hiçbir koþulu, tüketicilerin sözleþme yoluyla vazgeçilemeyen veya sýnýrlandýrýlamayan yasal haklarýný etkilemez. + +b. IBM'in Lisans Alan Tarafa somut bir ürün olarak saðladýðý Programlar için, Lisans Alan Taraf ile IBM arasýnda yazýlý olarak aksi kararlaþtýrýlmadýkça, IBM, bu Programlarý kendisi tarafýndan belirlenen taþýyýcýya teslim edildikten sonra ortaya çýkan teslimata ve sevkiyata iliþkin yükümlülüklerini yerine getirir. + +c. Bu Sözleþmenin herhangi bir hükmü geçersiz ya da uygulanamaz olduðunda, Sözleþmenin geri kalan hükümleri tam olarak yürürlükte kalmaya ve geçerli olmaya devam eder. + +d. Lisans Alan Taraf, belirli son kullaným türleri ve belirli kullanýcýlara yönelik ABD ambargosu ve yaptýrýmlarý da dahil olmak üzere, tüm geçerli ihracat ve ithalat yasa ve düzenlemelerine uygun davranmayý kabul eder. + +e. Lisans Alan Taraf, International Business Machines Corporation ve baðlý kuruluþlarýna (ve bunlarýn haleflerine ve devralanlarýna, yüklenicilerine ve IBM Çözüm Ortaklarýna) Lisans Alan Tarafýn IBM ürün ve hizmetleriyle ilgili veya IBM ile iþ iliþkisini geliþtirmek amacýyla iletiþim bilgilerini iþ yaptýklarý herhangi bir yerde depolama ve kullanma izni verir. + +f. Taraflardan her biri, diðer tarafýn bu Sözleþmeyle ilgili yükümlülüklerini yerine getirmediði iddiasýnda bulunmadan önce, diðer tarafa ilgili yükümlülüðü yerine getirmesi için gereken makul fýrsatý tanýmayý kabul eder. Taraflar, bu Sözleþmeyle ilgili olarak ortaya çýkabilecek tüm ihtilaflarý, anlaþmazlýklarý veya iddialarý iyi niyetle çözmeye çalýþacaklardýr. + +g. Geçerli yasalarýn sözleþmeyle deðiþtirilmesine veya sýnýrlandýrýlmasýna olanak tanýmayarak aksini belirttiði durumlar dýþýnda: 1) taraflardan hiçbiri, bu Sözleþmeden kaynaklanan veya bu Sözleþmeyle ilgili olarak yasal iþlem gerektiren bir durumun üzerinden iki yýldan fazla bir süre geçtikten sonra hangi biçimde olursa olsun, yasal bir iþlemde bulunamaz; ve 2) bu sürenin sona ermesiyle birlikte, bu tür tüm iddialar ve bu iddialarla ilgili tüm haklar zamanaþýmýna uðrar. + +h. Taraflardan hiçbiri, elinde olmayan nedenlerden ötürü yükümlülüklerini yerine getirememekten sorumlu tutulamaz. + +i. Bu Sözleþme herhangi bir üçüncü kiþi için bir dava hakký ya da bir dava nedeni yaratmaz ve ayrýca IBM, yukarýda yer alan 10.1 numaralý (IBM'in Sorumlu Olabileceði Maddeler) baþlýklý bölümde izin verilenler dýþýnda, IBM'in ilgili üçüncü kiþiye karþý yasal olarak sorumlu olduðu (ölüm dahil) cismani zarar veya taþýnmaz ve taþýnabilir kiþisel mallara verilen zarar dýþýnda, üçüncü bir kiþi tarafýndan Lisans Alan tarafa yöneltilen herhangi bir iddiaya karþý sorumluluk üstlenmez. + +j. Bu Sözleþmeyi imzalayarak, taraflardan hiçbiri: 1) bu Programa iliþkin yukarýdaki Garantiler ve Hariç Tutma baþlýklý Bölüm 8'de açýkça garanti edilenler dýþýndaki performans veya iþlevler; 2) diðer taraflarýn deneyimleri veya önerileri; veya 3) Lisans Alan Tarafýn elde edebileceði tüm sonuçlar veya tasarruflar da dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere bu Sözleþmede belirtilmemiþ olan hiçbir beyana itibar etmeyecektir. + +k. IBM, belirli kuruluþlarla ("IBM Çözüm Ortaklarý" olarak adlandýrýlýr) belirli Programlarý tanýtmak, pazarlamak ve desteklemek üzere sözleþmeler imzalamýþtýr. IBM Çözüm Ortaklarý, IBM'den ayrý ve baðýmsýz kuruluþlardýr. IBM, IBM Çözüm Ortaklarýnýn eylemlerinden veya bildirimlerinden ya da Lisans Alan Tarafa karþý yükümlülüklerinden sorumlu deðildir. + +l. Lisans Alan Tarafýn IBM ile yaptýðý diðer sözleþmelere (örneðin, IBM Müþteri Sözleþmesi) iliþkin lisans ve fikri mülkiyete iliþkin tazminat koþullarý bu Sözleþme kapsamýnda saðlanan Program lisanslarý için geçerli olmaz. + +14. Coðrafi Kapsam ve Geçerli Yasa + +14.1 Geçerli Yasa + +Taraflar, kanunlarýn ihtilafý prensibine bakýlmaksýzýn, bu Sözleþmenin konusundan doðan veya bir biçimde bu Sözleþmenin konusu ile ilgili olan haklar, görevler ve yükümlülüklerin, Lisans Alan Tarafýn lisansý edindiði ülkenin yasalarýna tabi olup, yine bunlarýn yorumlanmasý ve uygulanmasýnda bu yasalarýn geçerli olduðunu kabul ederler. + +Birleþmiþ Milletler'in Uluslararasý Mal Satýþlarýna iliþkin Sözleþme Bildirgesi geçerli deðildir. + +14.2 Yetkili Mahkeme + +Taraflarýn tüm hak, görev ve yükümlülükleri, Lisans Alan tarafýn Program lisansýný edindiði ülkenin mahkemelerine tabidir. + +Bölüm 2 - Ülkeye Özgü Koþullar + +Aþaðýda belirtilen ülkelerde verilen lisanslara iliþkin olarak aþaðýda belirtilen koþullar Bölüm 1'de atýfta bulunulan koþullarýn yerine geçer veya onlarý deðiþtirir. Bölüm 1'de yer alan ve bu deðiþiklik eki tarafýndan deðiþtirilmeyen tüm koþullar deðiþmeksizin yürürlükte kalmaya devam eder. Bölüm 2 aþaðýda belirtilen þekilde düzenlenmiþtir: + +* Bölüm 1, Madde 14 (Geçerli Yasa ve Yetkili Mahkeme) için Ülkeye özgü deðiþiklikler; ve + +* Diðer Sözleþme hükümlerine iliþkin Avrupa, Orta Doðu ve Afrika ülkelerine özgü deðiþiklikler. + +Bölüm 1, Madde 14 (Geçerli Yasa ve Yetkili Mahkeme) için ülkeye özgü deðiþiklikler; + +14.2 Yetkili Mahkeme + +Aþaðýdaki paragraf yetkili mahkeme ile ilgilidir ve aþaðýda belirtilen ülkeler için geçerli olduðundan bu ülkelerle ilgili Altbölüm 14.2 (Yetkili Mahkeme) içinde yer alan koþullarý deðiþtirir: + +Taraflarýn tüm hak, görev ve yükümlülükleri, Lisans Alan tarafýn Program lisansýný edindiði ülkenin mahkemelerine tabidir. Ancak, aþaðýda belirtilen ülkeler için, seri yargýlama usulü de dahil olmak üzere, bu Sözleþmeden doðan veya bu Sözleþmenin yürütülmesiyle ilgili tüm anlaþmazlýklar, aþaðýda belirtilen ve yetkili mahkeme olan mahkemelere tabi olacak ve bu mahkemelerde çözümlenecektir: + +AVRUPA, ORTA DOÐU VE AFRÝKA + +Türkiye'de: Türkiye Cumhuriyeti'nin Ýstanbul Merkez Mahkemelerinde ya da Ýcra Dairelerinde çözümlenecektir. + +AVRUPA, ORTA DOÐU, AFRÝKA (EMEA) ÜLKELERÝNE ÝLÝÞKÝN DEÐÝÞÝKLÝKLER + +AVRUPA BÝRLÝÐÝ (AB) ÜLKELERÝ + +8. Garanti ve Hariç Tutmalar + +Aþaðýdaki paragraf, 8 (Garanti ve Hariç Tutmalar) numaralý bölüme eklenmiþtir: + +Avrupa Birliði'nde ("AB") tüketicilerin, tüketim mallarýnýn satýþýna iliþkin geçerli ulusal mevzuat kapsamýnda yasal haklarý bulunmaktadýr. Bu haklar, 8 numaralý bölümde (Garanti ve Hariç Tutmalar) yer alan hükümlerden etkilenmez. Sýnýrlý Garantiye iliþkin madde, coðrafi olarak bütün dünyayý kapsar. + +AB ÜYESÝ ÜLKELER VE TÜRKÝYE + +13. Genel Koþullar + +Aþaðýdaki paragraf Madde 13.e'nin yerine geçer: + +(1) Tanýmlar - Madde 13.e'nin amacý açýsýndan aþaðýdaki ek tanýmlar geçerli olur: + +(a) Ýþ Ýletiþim Bilgileri - Lisans Alan Tarafýn çalýþanlarýna ve yüklenicilerine iliþkin adlar, görevler, iþ adresleri, telefon numaralarý ve e-posta adresleri de dahil olmak üzere Lisans Alan Taraf tarafýndan IBM'e açýklanan iþle ilgili iletiþim bilgileri. Avusturya, Ýtalya ve Ýsviçre için Ýþ Ýletiþim Bilgileri, tüzel kiþilikler olan Müþteri ve Müþterinin yüklenicilerine iliþkin bilgileri (örneðin, Müþterinin gelir verileri ve diðer iþlem bilgileri) de içerir. + +(b) Ýletiþim Sorumlularý - Ýþ Ýletiþim Bilgileriyle ilgili olan Lisans Alan Taraf çalýþanlarý ve yükleniciler. + +(c) Veri Koruma Yetkilisi - Ýlgili ülkede geçerli Veri Koruma ve Elektronik Ýletiþim Mevzuatý tarafýndan belirlenen yetkili veya AB ülkeleri dýþýndaki ülkeler için, ilgili ülkedeki kiþisel verilerin korunmasý için danýþmanlýktan sorumlu yetkili veya (yukarýda belirtilenlerin herhangi biri için) usulüne uygun olarak bu tür yetkililerin halefi olarak atanan yetkili. + +(d) Veri Koruma & Elektronik Ýletiþim Mevzuatý - (i) 95/46/EC kodlu AB Yönergesinin (kiþisel verilerin iþlenmesiyle ve bu tür verilerin serbest dolaþýmýyla ilgili olarak kiþilerin korunmasýný amaçlar) ve 2002/58/EC kodlu AB Yönergesinin (elektronik iletiþim sektöründe kiþisel verilerin iþlenmesiyle ve korunmasýyla ilgilidir) koþullarýný uygulamak üzere yürürlükte olan yasal mevzuat ve düzenlemeler; ya da (ii) AB ülkeleri dýþýndaki ülkeler için, (yukarýda belirtilenlerden herhangi biri için) yasal mevzuat ve/veya düzenlemelerde yapýlan herhangi bir yasal deðiþiklik de dahil olmak üzere, ilgili ülkede, kiþisel verilerin korunmasýyla ve kiþisel verilerle ilgili elektronik iletiþimin düzenlenmesiyle ilgili yürürlükte olan yasal mevzuat ve/veya düzenlemeler. + +(e) IBM Grubu - International Business Machines Corporation, Armonk, New York, ABD, baðlý þirketleri ve bunlarýn ilgili Çözüm Ortaklarý ve altyüklenicileri. + +(2) Lisans Alan Taraf, IBM'e aþaðýda belirtilenlere iliþkin yetki verir: + +(a) Destek hizmetlerinin saðlanmasý da dahil olmak üzere, Lisans Alan Tarafý desteklemek amacýyla Ýletiþim Sorumlularýyla baðlantý kurulmasý (e-posta veya baþka yollarla) ve IBM Grubu ürünleri ve hizmetlerinin pazarlanmasý amacý da dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere, Lisans Alan Tarafla IBM Grubu arasýndaki iþ iliþkisinin geliþtirilmesini saðlanmasý amacýyla ("Belirlenen Amaç") IBM Grubu içinde Ýþle Ýlgili Ýletiþim Bilgilerinin iþlenmesi ve kullanýlmasý; ve + +(b) Ýþ Ýletiþim Bilgilerinin, yalnýzca Belirlenen Amaçla ilgili olarak IBM Grubunun diðer üyelerine açýklanmasý. + +(3) IBM, Ýþle Ýlgili Ýletiþim Bilgilerinin, Veri Koruma & Elektronik Ýletiþim Mevzuatýna uygun olarak iþleneceðini ve yalnýzca Belirlenen amaç için kullanýlacaðýný kabul eder. + +(4) Veri Koruma & Elektronik Ýletiþim Mevzuatýnýn gerektirdiði ölçüde Lisans Alan Taraf, IBM Grubuna Ýþle Ýlgili Ýletiþim Bilgilerinin Belirlenen Amaç için iþlenmesini ve kullanýlmasýný saðlamak amacýyla Ýletiþim Sorumlularýndan gereken tüm izinleri aldýðýný (ve alacaðýný) ve tüm bildirimleri Ýletiþim Sorumlularýna gönderdiðini (veya göndereceðini) beyan eder. + +(5) Lisans Alan Taraf, IBM'e Ýþle Ýlgili Ýletiþim Bilgilerini, aktarým iþleminin Veri Koruma Yetkilisi tarafýndan onaylanan sözleþme koþullarýna uygun olarak gerçekleþtirilmesi veya aktarým iþlemine Veri Koruma & Elektronik Ýletiþim Mevzuatý kapsamýnda izin verilmesi koþuluyla Avrupa Ekonomik Alaný dýþýna aktarma yetkisini verir. + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_zh b/charts/mq-advancedserver/LICENSE_locale/LICENSE_zh new file mode 100644 index 0000000..245623f --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_zh @@ -0,0 +1,1157 @@ +ÉùÃ÷ + +±¾ÎĵµÔÚÏÂÃæ°üº¬Õë¶Ô¶à¸ö³ÌÐòµÄÐí¿ÉÐÅÏ¢Îĵµ¡£Ã¿·ÝÐí¿ÉÐÅÏ¢Îĵµ¶¼Õë¶ÔÆäÊÊÓõijÌÐò¡£Ö»Óб»Ðí¿É·½ÒÑ»ñȡȨÁ¦µÄ³ÌÐòµÄÄÇЩÐí¿ÉÐÅÏ¢ÎĵµÊÊÓᣠ+ + +============================================== + + +ÖØÒªÐÅÏ¢£ºÇë×ÐϸÔĶÁ + +ÏÂÃæÌṩÁËÁ½¸öÐí¿ÉЭÒé¡£ + +1. IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé +2. IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé + +Èç¹û±»Ðí¿É·½ÎªÁËÉú²úÐÔʹÓÃÄ¿µÄ£¨¶ø²»ÊÇΪÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£©»ñµÃ±¾³ÌÐò£¬µ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½½ÓÊÜ IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +Èç¹û±»Ðí¿É·½ÎªÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£¨Í³³ÆÎª¡°ÆÀ¹À¡±£©Ä¿µÄ»ñµÃ±¾³ÌÐò£ºµ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½Í¬Ê±½ÓÊÜ£¨i£©IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒ飨¡°ÆÀ¹ÀÐí¿É¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ģ»ºÍ£¨ii£©IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +ÔÚ±»Ðí¿É·½µÄÆÀ¹ÀÆÚ¼ä½«ÊÊÓá°ÆÀ¹ÀÐí¿É¡±¡£ + +Èç¹û±»Ðí¿É·½Í¨¹ýÇ©Êð²É¹ºÐ­Ò飨ÀýÈ磬IBM International Passport Advantage ЭÒé»ò IBM Passport Advantage Express ЭÒ飩ÔÚÆÀ¹ÀÖ®ºóÑ¡Ôñ±£Áô±¾³ÌÐò£¨»òÕß»ñµÃ¸½¼ÓµÄ±¾³ÌÐò¸±±¾¹©ÆÀ¹ÀÖ®ºóʹÓã©£¬IPLA ½«×Ô¶¯ÊÊÓᣠ+ +¡°ÆÀ¹ÀÐí¿É¡±ºÍ IPLA ²»ÄÜͬʱÓÐЧ£»Á½ÕßÖ®¼ä²»ÄÜ»¥ÏàÐ޸쬲¢Çұ˴˶ÀÁ¢¡£ + +ÕâÁ½¸öÐí¿ÉЭÒéÖÐÿ¸öЭÒéµÄÍêÕûÎı¾ÈçÏ¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé (Z125-5543-05) ÊÊÓᣠ+ +³ÌÐòÃû³Æ (³ÌÐòºÅ)£º +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +ÒÔϱê×¼Ìõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +ÆÀ¹ÀÆÚÏÞ + +ÆÀ¹ÀÆÚÏÞÓÚ±»Ðí¿É·½Í¬ÒⱾЭÒéÌõ¿îÖ®ÈÕ¿ªÊ¼£¬ÓÚ 90 ÈÕºóÖÕÖ¹¡£ + +Ö§³Ö³ÌÐò + +±¾³ÌÐòÊÇ×÷Ϊһ¸ö¶à²úÆ·³ÌÐò°üÐí¿ÉµÄ£¬°üÀ¨ÒÔÏÂËù±êʶµÄÖ§³Ö³ÌÐò¡£±»Ðí¿É·½±»ÊÚȨ°²×°ºÍʹÓôËÀàÖ§³Ö³ÌÐò£¬µ«½öÖ§³Ö±»Ðí¿É·½¸ù¾Ý±¾Ð­Ò飬ÔÚ±¾³ÌÐòµÄȨÀûÖ¤Ã÷ÏÞÖÆÏ£¬¶Ô±¾¡°Ö÷Ìå³ÌÐò¡±µÄʹÓ㨳ý·ÇÔÚ±¾¡°Ðí¿ÉÖ¤ÐÅÏ¢¡±ÎĵµÖÐµÄÆäËûµØ·½ÌṩÁ˸ü´óµÄȨÀû£©¡£¶ÌÓï¡°Ö§³Ö±»Ðí¿É·½Ê¹Óá±½«½ö°üº¬ÄÇЩ±ØÒªµÄʹÓ㬻òÕßÊÇÓë¡°Ö÷Ìå³ÌÐò¡±»òÁíÒ»Ö§³Ö³ÌÐòµÄÐí¿ÉʹÓÃÖ±½ÓÏà¹ØµÄÄÇЩʹÓᣲ»µÃ½«Ö§³Ö³ÌÐòÓÃÓÚÈÎºÎÆäËûÄ¿µÄ¡£±»Ðí¿É·½Î´±»ÊÚȨÔÚ¡°Ö÷Ìå³ÌÐò¡±Ö®ÍâתÈûòÔÙÏúÊÛÖ§³Ö³ÌÐò¡£Ö§³Ö³ÌÐò¿ÉÄÜËæ¸½ÓÐÐí¿ÉÌõ¿îÒÔ¼°ÊÊÓÃÓÚ±»Ðí¿É·½¶ÔÖ§³Ö³ÌÐòʹÓõÄÌõ¿î£¨Èç¹ûÓеϰ£©¡£Èç¹û·¢Éú³åÍ»£¬±¾Ðí¿ÉÐÅÏ¢ÎĵµµÄÌõ¿îÓÅÏÈÓÚÖ§³Ö³ÌÐòµÄÌõ¿î¡£µ±±»Ðí¿É·½Ê¹Óñ¾³ÌÐòµÄȨÀûµ½ÆÚ»òÖÕֹʱ£¬±»Ðí¿É·½±ØÐëֹͣʹÓá¢Ïú»ÙÖ§³Ö³ÌÐòµÄËùÓи±±¾»òÁ¢¼´½«ËùÓи±±¾ÍË»¹¸ø±»Ðí¿É·½´ÓÖлñµÃ±¾³ÌÐòµÄÒ»·½¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁËÖ§³Ö³ÌÐò£¬ÇÒ´ÓÒ»·½»ñµÃ±¾³ÌÐò£¬ÄÇô±»Ðí¿É·½Ó¦¸ÃÓë¸Ã·½È¡µÃÁªÏµ¡£Èç¹û±»Ðí¿É·½Ï£ÍûÐí¿ÉÖ§³Ö³ÌÐòÓÃÓÚÉÏÊö¹æ¶¨µÄÏÞÖÆ·¶Î§Ö®ÍâµÄÈκÎʹÓã¬ÇëÓë IBM ÏúÊÛ´ú±í»ò±»Ðí¿É·½´ÓÖлñµÃ±¾³ÌÐòµÄÒ»·½ÁªÏµ£¬ÒÔ»ñµÃÏàÓ¦µÄÐí¿É¡£ + +ÒÔÏÂÊÇËæ±¾³ÌÐòÒ»ÆðÐí¿ÉµÄÖ§³Ö³ÌÐò£º +IBM WebSphere Application Server Liberty V17.0 + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé (Z125-3301-14) ÊÊÓᣠ+ +³ÌÐòÃû³Æ (³ÌÐòºÅ)£º +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +ÒÔϱê×¼Ìõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +ÓÐÏÞµÄʹÓÃȨÏÞ + +¸ù¾Ý¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©ºÍ±¾Ðí¿ÉÐÅÏ¢ÖеÄÃèÊö£¬IBM ÊÚÓè±»Ðí¿É·½ÓÐÏÞµÄʹÓñ¾³ÌÐòµÄȨÀû¡£±¾È¨ÏÞ½öÏÞÓÚÊÚȨʹÓü¶±ð£¬Èç±»Ðí¿É·½¸ù¾Ý¡°È¨ÀûÖ¤Ã÷¡±Ö§¸¶µÄ´¦ÀíÆ÷¼ÛÖµµ¥Ôª£¨¡°PVU¡±£©¡¢×ÊÔ´¼ÛÖµµ¥Ôª£¨¡°RVU¡±£©¡¢¼ÛÖµµ¥Ôª(¡°VU¡±£©»òÆäËûÖ¸¶¨Ê¹Óü¶±ð¡£±»Ðí¿É·½µÄʹÓû¹¿ÉÄÜÏÞ¶¨ÓÚÌØ¶¨µÄ»úÆ÷£¬»ò½ö×÷Ϊ֧³Ö³ÌÐò£¬»ò×ñÑ­ÆäËûÏÞÖÆ¡£ÓÉÓÚ±»Ðí¿É·½Î´¹ºÂò³ÌÐòµÄÕû¸ö¾­¼Ã¼ÛÖµ£¬Òò´ËÔÚδ֧¸¶¶îÍâ·ÑÓÃʱ£¬²»ÔÊÐíʹÓÃÆäËûÏî¡£´ËÍ⣬³ý·ÇÊÊÓõÄЭÒéÖÐÃ÷È·±íÃ÷±»Ðí¿É·½»ñµÃʹÓñ¾³ÌÐòµÄÊÚȨ£¬·ñÔò±»Ðí¿É·½ÎÞȨʹÓñ¾³ÌÐòÏòÈκεÚÈý·½ÌṩÉÌÒµ IT ·þÎñ¡¢ÌṩÉÌÒµÍйܻòʱ¼ä¹²Ïí£¬»òÔÙÐí¿É¡¢³ö×â»ò×âÁÞ±¾³ÌÐò¡£Í¨¹ýÖ§¸¶¶îÍâ·ÑÓûò¸ù¾ÝÆäËû»ò²¹³äÌõ¿î£¬±»Ðí¿É·½¿ÉÄÜ»ñµÃ¸ü¶àȨÀû¡£IBM ±£Áô¾ö¶¨ÊÇ·ñÏò±»Ðí¿É·½Ìṩ´ËÀà¶îÍâȨÀûµÄȨÀû¡£ + +¹æ·¶ + +±¾³ÌÐòµÄ¹æ¸ñÏê¼û±¾³ÌÐò¹«¸æº¯µÄͳһÃèÊöºÍ¼¼ÊõÐÅÏ¢²¿·Ö¡£ + +Ö§³Ö³ÌÐò + +±¾³ÌÐòÊÇ×÷Ϊһ¸ö¶à²úÆ·³ÌÐò°üÐí¿ÉµÄ£¬°üÀ¨ÒÔÏÂËù±êʶµÄÖ§³Ö³ÌÐò¡£±»Ðí¿É·½±»ÊÚȨ°²×°ºÍʹÓôËÀàÖ§³Ö³ÌÐò£¬µ«½öÖ§³Ö±»Ðí¿É·½¸ù¾Ý±¾Ð­Ò飬ÔÚ±¾³ÌÐòµÄȨÀûÖ¤Ã÷ÏÞÖÆÏ£¬¶Ô±¾¡°Ö÷Ìå³ÌÐò¡±µÄʹÓ㨳ý·ÇÔÚ±¾¡°Ðí¿ÉÖ¤ÐÅÏ¢¡±ÎĵµÖÐµÄÆäËûµØ·½ÌṩÁ˸ü´óµÄȨÀû£©¡£¶ÌÓï¡°Ö§³Ö±»Ðí¿É·½Ê¹Óá±½«½ö°üº¬ÄÇЩ±ØÒªµÄʹÓ㬻òÕßÊÇÓë¡°Ö÷Ìå³ÌÐò¡±»òÁíÒ»Ö§³Ö³ÌÐòµÄÐí¿ÉʹÓÃÖ±½ÓÏà¹ØµÄÄÇЩʹÓᣲ»µÃ½«Ö§³Ö³ÌÐòÓÃÓÚÈÎºÎÆäËûÄ¿µÄ¡£±»Ðí¿É·½Î´±»ÊÚȨÔÚ¡°Ö÷Ìå³ÌÐò¡±Ö®ÍâתÈûòÔÙÏúÊÛÖ§³Ö³ÌÐò¡£Ö§³Ö³ÌÐò¿ÉÄÜËæ¸½ÓÐÐí¿ÉÌõ¿îÒÔ¼°ÊÊÓÃÓÚ±»Ðí¿É·½¶ÔÖ§³Ö³ÌÐòʹÓõÄÌõ¿î£¨Èç¹ûÓеϰ£©¡£Èç¹û·¢Éú³åÍ»£¬±¾Ðí¿ÉÐÅÏ¢ÎĵµµÄÌõ¿îÓÅÏÈÓÚÖ§³Ö³ÌÐòµÄÌõ¿î¡£µ±±»Ðí¿É·½Ê¹Óñ¾³ÌÐòµÄȨÀûµ½ÆÚ»òÖÕֹʱ£¬±»Ðí¿É·½±ØÐëֹͣʹÓá¢Ïú»ÙÖ§³Ö³ÌÐòµÄËùÓи±±¾»òÁ¢¼´½«ËùÓи±±¾ÍË»¹¸ø±»Ðí¿É·½´ÓÖлñµÃ±¾³ÌÐòµÄÒ»·½¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁËÖ§³Ö³ÌÐò£¬ÇÒ´ÓÒ»·½»ñµÃ±¾³ÌÐò£¬ÄÇô±»Ðí¿É·½Ó¦¸ÃÓë¸Ã·½È¡µÃÁªÏµ¡£Èç¹û±»Ðí¿É·½Ï£ÍûÐí¿ÉÖ§³Ö³ÌÐòÓÃÓÚÉÏÊö¹æ¶¨µÄÏÞÖÆ·¶Î§Ö®ÍâµÄÈκÎʹÓã¬ÇëÓë IBM ÏúÊÛ´ú±í»ò±»Ðí¿É·½´ÓÖлñµÃ±¾³ÌÐòµÄÒ»·½ÁªÏµ£¬ÒÔ»ñµÃÏàÓ¦µÄÐí¿É¡£ + +ÒÔÏÂÊÇËæ±¾³ÌÐòÒ»ÆðÐí¿ÉµÄÖ§³Ö³ÌÐò£º +IBM WebSphere Application Server Liberty V17.0 + +²»±»ÓÃÀ´¹¹½¨ËùÐèȨÀûµÄ×é¼þ + +È·¶¨±»Ðí¿É·½°²×°»òʹÓñ¾³ÌÐòËùÐèµÄȨÀûÊýÁ¿Ê±£¬½«²»¿¼ÂÇÒÔϳÌÐò×é¼þµÄ°²×°»òʹÓ᣻»¾ä»°Ëµ£¬±»Ðí¿É·½¿ÉÒÔ¸ù¾ÝÐí¿ÉÌõ¿î°²×°ºÍʹÓÃÒÔϳÌÐò×é¼þ£¬µ«ÕâЩ×é¼þ²»ÄÜÓÃÓÚÈ·¶¨±¾³ÌÐòËùÐèµÄȨÀûÊý¡£ +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +¿ÉÔÙ·Ö·¢²úÆ· + +Èç¹û±¾³ÌÐò°üº¬¿ÉÔÙ·Ö·¢µÄ×é¼þ£¬ÕâЩ×é¼þÔÚ±¾³ÌÐòËæ¸½µÄ REDIST ÎļþÖбêʶ¡£³ýÁ˱¾³ÌÐòÖÐÊÚÓèµÄÐí¿ÉȨÀû£¬±»Ðí¿É·½»¹¿É×ñÑ­ÒÔÏÂÌõ¿îÀ´·Ö·¢¿ÉÔÙ·Ö·¢µÄ¶ÔÏó£º +1) ¿ÉÔÙ·Ö·¢²úÆ·Ö»ÄÜÒÔ¶ÔÏó´úÂëµÄÐÎʽÔÙ·Ö·¢£¬²¢ÇÒÄú±ØÐë×ñÊØ±¾³ÌÐòËæ¸½µÄ REDIST »òÎĵµÖеÄËùÓй涨¡¢Ö¸Ê¾ºÍ¹æ·¶£» +2) Èç¹û±¾³ÌÐòËæ¸½µÄÎĵµÃ÷È·ÔÊÐí±»Ðí¿É·½Ð޸ĿÉÔÙ·Ö·¢²úÆ·£¬´ËÀàÐ޸ıØÐë×ñÊØ¸ÃÎĵµÖеÄËùÓй涨¡¢Ö¸Ê¾ºÍ¹æ·¶£»ÕâЩÐ޸ģ¨ÈçÓУ©±ØÐëÊÓΪ¡°¿ÉÔÙ·Ö·¢²úÆ·¡±£» +3) Ö»Äܽ«¿ÉÔÙ·Ö·¢²úÆ·×÷ΪʹÓñ¾³ÌÐò¿ª·¢µÄ±»Ðí¿É·½Ó¦ÓóÌÐò£¨¡°±»Ðí¿É·½µÄÓ¦ÓóÌÐò¡±£©µÄÒ»²¿·Ö½øÐзַ¢£¬²¢ÇÒÖ»ÄÜÓÃÓÚÖ§³Ö±»Ðí¿É·½¿Í»§¶Ô±»Ðí¿É·½µÄÓ¦ÓóÌÐòµÄÏà¹ØÊ¹Óᣱ»Ðí¿É·½µÄÓ¦ÓóÌÐò±ØÐë¹¹³É¼«¸ßµÄ¸½¼Ó¼ÛÖµ£¬ÒÔ±ÜÃâʹÕâЩ¿ÉÔÙ·Ö·¢²úÆ·³ÉΪ±»Ðí¿É·½Èí¼þ²úÆ·µÄ×îÖÕÓû§»ñµÃÄúÈí¼þ²úÆ·µÄÕæÊµÔ­Òò£» +4) Èç¹û¿ÉÔÙ·Ö·¢²úÆ·°üº¬ Java ÔËÐÐʱ»·¾³£¬±»Ðí¿É·½»¹±ØÐë°üº¬ÆäËûʹÓñ»Ðí¿É·½Ó¦ÓóÌÐòµÄ·Ç Java ¿ÉÔÙ·Ö·¢²úÆ·£¬³ý·Ç¸ÃÓ¦ÓóÌÐò½öÔÚ³£¹æ¼ÆËã»úÉ豸£¨Èç±Ê¼Ç±¾µçÄÔ¡¢Ì¨Ê½»úºÍ·þÎñÆ÷£©£¬¶ø²»ÔÚÕÆÉÏÖ÷»ú»òÆäËûÆÕ¼°ÐÍÉ豸£¨Èç°üº¬Î¢´¦ÀíÆ÷£¬µ«Ö÷ҪĿµÄ²»ÔÚÓÚ¼ÆË㣩ÉÏÔËÐУ» +5) ±»Ðí¿É·½²»µÃ³ýÈ¥¿ÉÔÙ·Ö·¢²úÆ·Öаüº¬µÄÈκΰæÈ¨»òÉùÃ÷Îļþ£» +6) ±»Ðí¿É·½Í¬ÒâÒòʹÓûò·Ö·¢±»Ðí¿É·½µÄÓ¦ÓóÌÐò¶øÒýÆðµÄÈκÎË÷Åâ¶øÏò IBM ¼°Æä¹©Ó¦ÉÌ»ò·ÖÏúÉÌ×ö³öÅâ³¥£» +7) ±»Ðí¿É·½²»µÃʹÓÃÓëÔ­¿ÉÔÙ·Ö·¢Îļþ/Ô­Ä£¿éÏàͬµÄ·¾¶Ãû£» +8) δ¾­ IBM ¼°Æä¹©Ó¦ÉÌ»ò·ÖÏúÉÌÊÂÏÈÊéÃæÐí¿É£¬±»Ðí¿É·½²»µÃ½« IBM ¼°Æä¹©Ó¦ÉÌ»ò·ÖÏúÉ̵ÄÃû³Æ»òÉ̱êÓÃÓÚÓªÏú±»Ðí¿É·½µÄÓ¦ÓóÌÐò£» +9) IBM¡¢Æä¹©Ó¦É̺ͷÖÏúÉÌ¡°°´ÏÖ×´¡±Ìṩ¿ÉÔÙ·Ö·¢²úÆ·ºÍÏà¹ØÎĵµ²»³Ðµ£ÈκÎÖ§³ÖÒåÎñ£¬Ò²²»´øÓÐÈκÎÃ÷ʾ»ò°µº¬µÄ±£Ö¤£¬°üÀ¨ÓйØËùÓÐȨ¡¢²»ÇÖȨ¡¢²»¸ÉÉæÒÔ¼°°µº¬µÄÊÊÏúÐÔºÍÊÊÓÃÓÚÄ³ÌØ¶¨ÓÃ;µÄ±£Ö¤ºÍÌõ¼þ£» +10) ±»Ðí¿É·½Ðë×ÔÐиºÔð±»Ðí¿É·½µÄÓ¦ÓóÌÐòµÄÈ«²¿¼¼ÊõÖ§³ÖÒÔ¼°¶Ô¿ÉÔÙ·Ö·¢²úÆ·µÄÈκÎÐ޸ģ»ÇÒ +11) ±»Ðí¿É·½Óë±»Ðí¿É·½µÄÓ¦ÓóÌÐòµÄ×îÖÕÓû§µÄÐí¿ÉЭÒéÖÐÐë¸æÖª×îÖÕÓû§´ËÀà¿ÉÔÙ·Ö·¢²úÆ·¼°ÆäÐ޸IJúÆ·²»µÃ±» i) ÓÃÓÚÖ§³Ö±»Ðí¿É·½µÄÓ¦ÓóÌÐòÖ®ÍâµÄÆäËûÄ¿µÄ£¬ii) ¸´ÖÆ£¨ÓÃÓÚ±¸·ÝÄ¿µÄµÄ³ýÍ⣩£¬iii) ½øÒ»²½·Ö·¢»òתÈ㨲»°üÀ¨±»Ðí¿É·½µÄÓ¦ÓóÌÐò£©£¬»ò iv) µ¹Ðò»ã±à¡¢·´Ïò±àÒë»òÒÔÆäËû·½Ê½½âÒ루ÊÊÓ÷¨ÂÉÌØ±ðÔÊÐíÇÒ²»µÃÒÔÔ¼¶¨·ÅÆúÕß³ýÍ⣩¡£²¢ÇÒ£¬±»Ðí¿É·½µÄÐí¿ÉЭÒ鱨ÐëÖÁÉÙÄÜ´Ó IBM »ñµÃÏñ±¾Ð­ÒéÌõ¿îÒ»ÑùµÄ±£»¤¡£ + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + +¶ÔÓÚ±¾³ÌÐò REDIST ÎļþÖÐÁгöµÄÔ´×é¼þºÍÑù±¾²ÄÁÏ£¬±»Ðí¿É·½¿É¸ù¾Ý±¾Ðí¿ÉÐÅÏ¢µÄÌõ¿îºÍ REDIST ÎļþÖеÄÈÎÒâָʾÐÅÏ¢ÖØÐ·ַ¢ÕâЩԭ×é¼þ»òÑù±¾²ÄÁϵÄÐ޸İ汾¡£ + +ÒÔϼÆÁ¿µ¥Î»¿ÉÄÜÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU) + +¡°´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU)¡±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£±ØÐèµÄ PVU ȨÀûµÄÊýÁ¿»ùÓÚ´¦ÀíÆ÷¼¼Êõ¶¨Ò壨°´ÕÕ´¦ÀíÆ÷¹©Ó¦ÉÌ¡¢Æ·ÅÆ¡¢ÀàÐͺÍÐͺÅÔÚÒÔÏ Web Õ¾µãÉ쵀 PVU ±í¸ñÖж¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html£©¼°Îª±¾³ÌÐòÌṩµÄ´¦ÀíÆ÷µÄÊýÁ¿¡£IBM ¼ÌÐø½«ÓÃÓÚ»ñÈ¡»ùÓÚ PVU Ðí¿ÉµÄ¡°Ò»¸ö´¦ÀíÆ÷¡±¶¨ÒåΪÔÚÒ»¸öоƬÉϵÄÿ¸ö´¦ÀíÆ÷ºËÐÄ¡£ÀýÈ磬˫ºË´¦ÀíÆ÷оƬӵÓÐÁ½¸ö´¦ÀíÆ÷ºË¡£ + +±»Ðí¿É·½¿ÉÒÔ¸ù¾Ý¡°Passport Advantage ´Î¼¶ÈÝÁ¿Ðí¿ÉÌõ¿î¡±£¨²ÎÔÄÒÔÏ Web Ò³Ãæ£©£¬Ê¹Óá°È«ÈÝÁ¿¡±Ðí¿É»ò¡°ÐéÄ⻯ÈÝÁ¿¡±£¨´Î¼¶ÈÝÁ¿£©Ðí¿É²¿Êð±¾³ÌÐò¡£Èç¹ûʹÓá°È«ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñÈ¡×ã¹»µÄ PVU ȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄÎïÀíÓ²¼þ»·¾³ÖеÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË*£¬³ýÁËÄÇЩ±¾³ÌÐòÒÑÓÀ¾Ã³ýÈ¥µÄ·þÎñÆ÷¡£Èç¹ûʹÓá°ÐéÄ⻯ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñµÃ×ã¹»µÄȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË£¬Èç¸ù¾ÝÒÔÏÂÕ¾µãµÄ¡°ÐéÄ⻯ÈÝÁ¿Ðí¿É¼ÆÊý¹æÔò¡±µÄ¶¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡£ + +* ÒѼ¤»î´¦ÀíÆ÷ºËÊÇ¿ÉÔÚÎïÀí»òÐéÄâ·þÎñÆ÷ÖÐʹÓõĴ¦ÀíÆ÷ºË£¬Óë´¦ÀíÆ÷ºËµÄ¼ÆËãÄÜÁ¦ÊÇ·ñ¿ÉÄÜ»òʵ¼ÊÉÏͨ¹ýÐéÄ⻯¼¼Êõ¡¢²Ù×÷ϵͳÃüÁî¡¢BIOS ÉèÖûòÀàËÆÔ¼Êø¶øÊܵ½ÏÞÖÆÎ޹ء£ + +ÐéÄâ´¦ÀíÆ÷ÄÚºË + +¡°ÐéÄâ´¦ÀíÆ÷Äںˡ±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£ÎïÀí·þÎñÆ÷ÊÇһ̨ÎïÀí¼ÆËã»ú£¬ÓÉ´¦Àíµ¥Ôª¡¢ÄÚ´æºÍÊäÈë/Êä³ö¹¦ÄÜ×é³É£¬¸Ã·þÎñÆ÷Ϊһ¸ö»ò¶à¸öÓû§»ò¿Í»§»úÉ豸ִÐÐËùÇëÇóµÄ¹ý³Ì¡¢ÃüÁî»òÓ¦ÓóÌÐò¡£Èç¹ûʹÓÃÁË»ú¼Ü¡¢µ¶Æ¬»úÏä»òÆäËûÀàËÆµÄÉ豸£¬ÄÇô¾ßÓÐËùÐè×é¼þµÄÿ̨¿É·ÖÀëµÄÎïÀíÉ豸£¨ÀýÈçһ̨µ¶Æ¬·þÎñÆ÷»ò°²×°ÔÚ»ú¼ÜÉϵÄÉ豸£©Æä±¾Éí¾ù±»ÊÓΪÊÇһ̨¶ÀÁ¢µÄÎïÀí·þÎñÆ÷¡£¡°ÐéÄâ·þÎñÆ÷¡±Ö¸µÄÊÇͨ¹ý¶ÔÎïÀí·þÎñÆ÷µÄ¿ÉÓÃ×ÊÔ´½øÐзÖÇø¶ø´´½¨µÄһ̨ÐéÄâ¼ÆËã»ú£¬»òһ̨δ·ÖÇøµÄÎïÀí·þÎñÆ÷¡£´¦ÀíÆ÷Äںˣ¨Í¨³£³Æ×÷´¦ÀíÆ÷»ò CPU£©Ö¸¼ÆËãÉ豸ÖÐÓÃÓÚ½â¶ÁºÍÖ´ÐÐÖ¸ÁîµÄ¹¦Äܵ¥Ôª¡£Ò»¸ö´¦ÀíÆ÷ÄÚºËÖÁÉÙ°üÀ¨Ò»¸öÖ¸Áî¿ØÖÆµ¥ÔªºÍÒ»¸ö»ò¶à¸öÔËËã»òÂß¼­µ¥Ôª¡£¡°ÐéÄâ´¦ÀíÆ÷Äںˡ±Ö¸µÄÊÇδ·ÖÇøµÄÎïÀí·þÎñÆ÷ÖеĴ¦ÀíÆ÷Äںˣ¬»òÕßÊÇ·ÖÅ䏸ÐéÄâ·þÎñÆ÷µÄÐéÄâÄںˡ£±»Ðí¿É·½±ØÐëΪ¶Ô±¾³ÌÐò¿ÉÓõÄÿ¸öÐéÄâ´¦ÀíÆ÷Äں˻ñȡȨÀû¡£ + +¶ÔÓÚÿ̨ÎïÀí·þÎñÆ÷¶øÑÔ£¬±»Ðí¿É·½±ØÐë¶ÔÒÔÏÂÏîÓµÓÐ×ã¹»µÄȨÀû£¬ÒÔ½ÏСÕßΪ׼£º 1) ±¾³ÌÐò¿ÉÓõÄËùÓÐÐéÄâ·þÎñÆ÷ÉϵÄËùÓпÉÓÃÐéÄâ´¦ÀíÆ÷ÄÚºË×ÜÊý»ò 2) ÎïÀí·þÎñÆ÷ÉϵÄËùÓпÉÓô¦ÀíÆ÷Äںˡ£ + +³ýÉÏÊöÄÚÈÝÖ®Í⣬ÒÔÏÂÌõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +¿ÕÏдý»úÅäÖà + +³öÓÚ±¾²¿·ÖµÄÄ¿µÄ£¬¡°¿ÕÏдý»ú¡±ÅäÖÃÊÇÖ¸½«±¾³ÌÐòµÄ¸±±¾°²×°ÔÚ¹¹³É¸ß¿ÉÓÃÐÔ½â¾ö·½°¸Ò»²¿·ÖµÄ·þÎñÆ÷ÉÏ£¬Èç¹û»î¶¯·þÎñÆ÷Éϱ¾³ÌÐòµÄ¸±±¾²»ÔÙ¿ÉÓ㬱¾³ÌÐò½«¹ÊÕÏ×ªÒÆÖÁ¸Ã·þÎñÆ÷¡£½öµ±·þÎñÆ÷רÃÅÓÃÓÚ¶Ô¹ÊÕÏ×ªÒÆ³¡¾°Æð°ïÖú×÷ÓõĹÜÀí²Ù×÷ʱ£¬²Å±»ÊÓΪ¡°¿ÕÏС±£¬Ö±ÖÁ·¢Éú¹ÊÕÏ×ªÒÆ¡£ + +²»µÃ½«±¾³ÌÐò°²×°ÔÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬³ý·Ç»ñµÃÁËÏàÓ¦µÄÐí¿É¡£ + +Èç¹ûÔÚ¾ßÓжàʵÀý¶ÓÁйÜÀíÆ÷¹¦ÄܵĿÕÏдý»úÅäÖÃÖÐʹÓñ¾³ÌÐò£¬ÄÇô±¾³ÌÐòµÄÒ»¸ö¸±±¾¿ÉÒÔ³öÓÚ±¸·ÝÄ¿µÄ´æÁôÓÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬²¢ÇÒÒÑÆô¶¯£¬µ«±ØÐë±£³Ö¡°¿ÕÏС±×´Ì¬£¬²»ÓÃÓÚÖ´ÐÐÈκÎÀàÐ͵ÄÉú²ú¹¤×÷£¬³ý·Ç»î¶¯·þÎñÆ÷¹ÊÕÏ×ªÒÆÖÁ¿ÕÏдý»ú·þÎñÆ÷£¬ÔÚÕâÖÖÇé¿öÏ£¬¿ÕÏдý»ú¸±±¾¿ÉÓÃÓÚÔÚ¹ÊÕÏ×ªÒÆÆÚ¼äÖ´ÐÐÉú²ú¹¤×÷¡£ + +Èç¹ûÔÚ¾ßÓÐÆäËû¸ß¿ÉÓÃÐÔϵͳµÄ¿ÕÏдý»úÅäÖÃÖÐʹÓñ¾³ÌÐò£¬ÄÇô±¾³ÌÐòµÄÒ»¸ö¸±±¾¿ÉÒÔ³öÓÚ±¸·ÝÄ¿µÄ´æÁôÓÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬µ«Î´Æô¶¯£¨Òò´Ë²»ÓÃÓÚÖ´ÐÐÈκÎÀàÐ͵ÄÉú²ú¹¤×÷£©£¬µ«Èç¹û»î¶¯·þÎñÆ÷·¢Éú¹ÊÕÏ£¬¸ß¿ÉÓÃÐÔ×é¼þ»á×Ô¶¯½«ÆäÆô¶¯£¬ÔÚÕâÖÖÇé¿öÏ£¬¿ÕÏдý»ú¸±±¾¿ÉÓÃÓÚÔÚ¹ÊÕÏ×ªÒÆÆÚ¼äÖ´ÐÐÉú²ú¹¤×÷¡£ + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +ÖØÒªÐÅÏ¢£ºÇë×ÐϸÔĶÁ + +ÏÂÃæÌṩÁËÁ½¸öÐí¿ÉЭÒé¡£ + +1. IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé +2. IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé + +Èç¹û±»Ðí¿É·½ÎªÁËÉú²úÐÔʹÓÃÄ¿µÄ£¨¶ø²»ÊÇΪÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£©»ñµÃ±¾³ÌÐò£¬µ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½½ÓÊÜ IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +Èç¹û±»Ðí¿É·½ÎªÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£¨Í³³ÆÎª¡°ÆÀ¹À¡±£©Ä¿µÄ»ñµÃ±¾³ÌÐò£ºµ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½Í¬Ê±½ÓÊÜ£¨i£©IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒ飨¡°ÆÀ¹ÀÐí¿É¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ģ»ºÍ£¨ii£©IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +ÔÚ±»Ðí¿É·½µÄÆÀ¹ÀÆÚ¼ä½«ÊÊÓá°ÆÀ¹ÀÐí¿É¡±¡£ + +Èç¹û±»Ðí¿É·½Í¨¹ýÇ©Êð²É¹ºÐ­Ò飨ÀýÈ磬IBM International Passport Advantage ЭÒé»ò IBM Passport Advantage Express ЭÒ飩ÔÚÆÀ¹ÀÖ®ºóÑ¡Ôñ±£Áô±¾³ÌÐò£¨»òÕß»ñµÃ¸½¼ÓµÄ±¾³ÌÐò¸±±¾¹©ÆÀ¹ÀÖ®ºóʹÓã©£¬IPLA ½«×Ô¶¯ÊÊÓᣠ+ +¡°ÆÀ¹ÀÐí¿É¡±ºÍ IPLA ²»ÄÜͬʱÓÐЧ£»Á½ÕßÖ®¼ä²»ÄÜ»¥ÏàÐ޸쬲¢Çұ˴˶ÀÁ¢¡£ + +ÕâÁ½¸öÐí¿ÉЭÒéÖÐÿ¸öЭÒéµÄÍêÕûÎı¾ÈçÏ¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé (Z125-5543-05) ÊÊÓᣠ+ +³ÌÐòÃû³Æ (³ÌÐòºÅ)£º +IBM MQ Advanced V9.0.3 (Evaluation) + +ÒÔϱê×¼Ìõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +ÆÀ¹ÀÆÚÏÞ + +ÆÀ¹ÀÆÚÏÞÓÚ±»Ðí¿É·½Í¬ÒⱾЭÒéÌõ¿îÖ®ÈÕ¿ªÊ¼£¬ÓÚ 90 ÈÕºóÖÕÖ¹¡£ + +À¦°ó³ÌÐò + +±¾³ÌÐòÊÇ×÷Ϊһ¸ö¶à²úÆ·³ÌÐò°üÐí¿ÉµÄ£¬°üÀ¨ÒÔÏÂËù±êʶµÄ¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½»ñµÃÊÚȨ£¬¿É¸ù¾Ý±¾³ÌÐòµÄȨÀûÖ¤Ã÷ÏÞÖÆÒÔ¼°±¾¡°Ðí¿ÉÖ¤ÐÅÏ¢¡±ÎĵµÖй涨µÄÏÞÖÆ£¬°²×°ºÍʹÓôËÀà¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½ÎÞȨÔÚ¡°¶à²úÆ·³ÌÐò°ü¡±Ö®ÍâתÈûòתÏú¡°À¦°ó³ÌÐò¡±¡£¡°À¦°ó³ÌÐò¡±¿ÉÄÜËæ¸½Ðí¿ÉÌõ¿îÒÔ¼°ÊÊÓÃÓÚ±»Ðí¿É·½¶Ô¡°À¦°ó³ÌÐò¡±Ê¹ÓõÄÌõ¿î£¨Èç¹ûÓеϰ£©¡£Èç¹û·¢Éú³åÍ»£¬±¾¡°Ðí¿ÉÐÅÏ¢¡±ÎĵµµÄÌõ¿îÓÅÏÈÓÚ¡°À¦°ó³ÌÐò¡±µÄÌõ¿î¡£µ±±»Ðí¿É·½Ê¹Óñ¾³ÌÐòµÄȨÀûµ½ÆÚ»òÖÕֹʱ£¬±»Ðí¿É·½±ØÐëֹͣʹÓûòÏú»Ù±¾¡°À¦°ó³ÌÐò¡±µÄËùÓи±±¾£¬»òÕßÁ¢¼´½«ËùÓи±±¾¹é»¹¸ø±¾³ÌÐòµÄÌṩ·½¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁË¡°À¦°ó³ÌÐò¡±£¬ÄÇôӦµ±Óë±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ¡£Èç¹û±»Ðí¿É·½Ï£ÍûÔÚÉÏÊöÏÞÖÆ·¶Î§Ö®Íâ»ñµÃ¡°À¦°ó³ÌÐò¡±µÄʹÓÃÐí¿É£¬ÇëÓë IBM ÏúÊÛ´ú±í»ò±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ£¬ÒÔ»ñµÃÏàÓ¦µÄÐí¿É¡£ + +ÒÔÏÂÊÇËæ±¾³ÌÐòÒ»ÆðÐí¿ÉµÄ¡°À¦°ó³ÌÐò¡±£º +IBM MQ V9.0.3 + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé (Z125-3301-14) ÊÊÓᣠ+ +³ÌÐòÃû³Æ (³ÌÐòºÅ)£º +IBM MQ Advanced V9.0.3 (5724-H72) + +ÒÔϱê×¼Ìõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +ÓÐÏÞµÄʹÓÃȨÏÞ + +¸ù¾Ý¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©ºÍ±¾Ðí¿ÉÐÅÏ¢ÖеÄÃèÊö£¬IBM ÊÚÓè±»Ðí¿É·½ÓÐÏÞµÄʹÓñ¾³ÌÐòµÄȨÀû¡£±¾È¨ÏÞ½öÏÞÓÚÊÚȨʹÓü¶±ð£¬Èç±»Ðí¿É·½¸ù¾Ý¡°È¨ÀûÖ¤Ã÷¡±Ö§¸¶µÄ´¦ÀíÆ÷¼ÛÖµµ¥Ôª£¨¡°PVU¡±£©¡¢×ÊÔ´¼ÛÖµµ¥Ôª£¨¡°RVU¡±£©¡¢¼ÛÖµµ¥Ôª(¡°VU¡±£©»òÆäËûÖ¸¶¨Ê¹Óü¶±ð¡£±»Ðí¿É·½µÄʹÓû¹¿ÉÄÜÏÞ¶¨ÓÚÌØ¶¨µÄ»úÆ÷£¬»ò½ö×÷Ϊ֧³Ö³ÌÐò£¬»ò×ñÑ­ÆäËûÏÞÖÆ¡£ÓÉÓÚ±»Ðí¿É·½Î´¹ºÂò³ÌÐòµÄÕû¸ö¾­¼Ã¼ÛÖµ£¬Òò´ËÔÚδ֧¸¶¶îÍâ·ÑÓÃʱ£¬²»ÔÊÐíʹÓÃÆäËûÏî¡£´ËÍ⣬³ý·ÇÊÊÓõÄЭÒéÖÐÃ÷È·±íÃ÷±»Ðí¿É·½»ñµÃʹÓñ¾³ÌÐòµÄÊÚȨ£¬·ñÔò±»Ðí¿É·½ÎÞȨʹÓñ¾³ÌÐòÏòÈκεÚÈý·½ÌṩÉÌÒµ IT ·þÎñ¡¢ÌṩÉÌÒµÍйܻòʱ¼ä¹²Ïí£¬»òÔÙÐí¿É¡¢³ö×â»ò×âÁÞ±¾³ÌÐò¡£Í¨¹ýÖ§¸¶¶îÍâ·ÑÓûò¸ù¾ÝÆäËû»ò²¹³äÌõ¿î£¬±»Ðí¿É·½¿ÉÄÜ»ñµÃ¸ü¶àȨÀû¡£IBM ±£Áô¾ö¶¨ÊÇ·ñÏò±»Ðí¿É·½Ìṩ´ËÀà¶îÍâȨÀûµÄȨÀû¡£ + +¹æ·¶ + +±¾³ÌÐòµÄ¹æ¸ñÏê¼û±¾³ÌÐò¹«¸æº¯µÄͳһÃèÊöºÍ¼¼ÊõÐÅÏ¢²¿·Ö¡£ + +À¦°ó³ÌÐò + +±¾³ÌÐòÊÇ×÷Ϊһ¸ö¶à²úÆ·³ÌÐò°üÐí¿ÉµÄ£¬°üÀ¨ÒÔÏÂËù±êʶµÄ¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½»ñµÃÊÚȨ£¬¿É¸ù¾Ý±¾³ÌÐòµÄȨÀûÖ¤Ã÷ÏÞÖÆÒÔ¼°±¾¡°Ðí¿ÉÖ¤ÐÅÏ¢¡±ÎĵµÖй涨µÄÏÞÖÆ£¬°²×°ºÍʹÓôËÀà¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½ÎÞȨÔÚ¡°¶à²úÆ·³ÌÐò°ü¡±Ö®ÍâתÈûòתÏú¡°À¦°ó³ÌÐò¡±¡£¡°À¦°ó³ÌÐò¡±¿ÉÄÜËæ¸½Ðí¿ÉÌõ¿îÒÔ¼°ÊÊÓÃÓÚ±»Ðí¿É·½¶Ô¡°À¦°ó³ÌÐò¡±Ê¹ÓõÄÌõ¿î£¨Èç¹ûÓеϰ£©¡£Èç¹û·¢Éú³åÍ»£¬±¾¡°Ðí¿ÉÐÅÏ¢¡±ÎĵµµÄÌõ¿îÓÅÏÈÓÚ¡°À¦°ó³ÌÐò¡±µÄÌõ¿î¡£µ±±»Ðí¿É·½Ê¹Óñ¾³ÌÐòµÄȨÀûµ½ÆÚ»òÖÕֹʱ£¬±»Ðí¿É·½±ØÐëֹͣʹÓûòÏú»Ù±¾¡°À¦°ó³ÌÐò¡±µÄËùÓи±±¾£¬»òÕßÁ¢¼´½«ËùÓи±±¾¹é»¹¸ø±¾³ÌÐòµÄÌṩ·½¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁË¡°À¦°ó³ÌÐò¡±£¬ÄÇôӦµ±Óë±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ¡£Èç¹û±»Ðí¿É·½Ï£ÍûÔÚÉÏÊöÏÞÖÆ·¶Î§Ö®Íâ»ñµÃ¡°À¦°ó³ÌÐò¡±µÄʹÓÃÐí¿É£¬ÇëÓë IBM ÏúÊÛ´ú±í»ò±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ£¬ÒÔ»ñµÃÏàÓ¦µÄÐí¿É¡£ + +ÒÔÏÂÊÇËæ±¾³ÌÐòÒ»ÆðÐí¿ÉµÄ¡°À¦°ó³ÌÐò¡±£º +IBM MQ V9.0.3 + +²»±»ÓÃÀ´¹¹½¨ËùÐèȨÀûµÄ×é¼þ + +È·¶¨±»Ðí¿É·½°²×°»òʹÓñ¾³ÌÐòËùÐèµÄȨÀûÊýÁ¿Ê±£¬½«²»¿¼ÂÇÒÔϳÌÐò×é¼þµÄ°²×°»òʹÓ᣻»¾ä»°Ëµ£¬±»Ðí¿É·½¿ÉÒÔ¸ù¾ÝÐí¿ÉÌõ¿î°²×°ºÍʹÓÃÒÔϳÌÐò×é¼þ£¬µ«ÕâЩ×é¼þ²»ÄÜÓÃÓÚÈ·¶¨±¾³ÌÐòËùÐèµÄȨÀûÊý¡£ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + +ÒÔϼÆÁ¿µ¥Î»¿ÉÄÜÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU) + +¡°´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU)¡±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£±ØÐèµÄ PVU ȨÀûµÄÊýÁ¿»ùÓÚ´¦ÀíÆ÷¼¼Êõ¶¨Ò壨°´ÕÕ´¦ÀíÆ÷¹©Ó¦ÉÌ¡¢Æ·ÅÆ¡¢ÀàÐͺÍÐͺÅÔÚÒÔÏ Web Õ¾µãÉ쵀 PVU ±í¸ñÖж¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html£©¼°Îª±¾³ÌÐòÌṩµÄ´¦ÀíÆ÷µÄÊýÁ¿¡£IBM ¼ÌÐø½«ÓÃÓÚ»ñÈ¡»ùÓÚ PVU Ðí¿ÉµÄ¡°Ò»¸ö´¦ÀíÆ÷¡±¶¨ÒåΪÔÚÒ»¸öоƬÉϵÄÿ¸ö´¦ÀíÆ÷ºËÐÄ¡£ÀýÈ磬˫ºË´¦ÀíÆ÷оƬӵÓÐÁ½¸ö´¦ÀíÆ÷ºË¡£ + +±»Ðí¿É·½¿ÉÒÔ¸ù¾Ý¡°Passport Advantage ´Î¼¶ÈÝÁ¿Ðí¿ÉÌõ¿î¡±£¨²ÎÔÄÒÔÏ Web Ò³Ãæ£©£¬Ê¹Óá°È«ÈÝÁ¿¡±Ðí¿É»ò¡°ÐéÄ⻯ÈÝÁ¿¡±£¨´Î¼¶ÈÝÁ¿£©Ðí¿É²¿Êð±¾³ÌÐò¡£Èç¹ûʹÓá°È«ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñÈ¡×ã¹»µÄ PVU ȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄÎïÀíÓ²¼þ»·¾³ÖеÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË*£¬³ýÁËÄÇЩ±¾³ÌÐòÒÑÓÀ¾Ã³ýÈ¥µÄ·þÎñÆ÷¡£Èç¹ûʹÓá°ÐéÄ⻯ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñµÃ×ã¹»µÄȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË£¬Èç¸ù¾ÝÒÔÏÂÕ¾µãµÄ¡°ÐéÄ⻯ÈÝÁ¿Ðí¿É¼ÆÊý¹æÔò¡±µÄ¶¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡£ + +* ÒѼ¤»î´¦ÀíÆ÷ºËÊÇ¿ÉÔÚÎïÀí»òÐéÄâ·þÎñÆ÷ÖÐʹÓõĴ¦ÀíÆ÷ºË£¬Óë´¦ÀíÆ÷ºËµÄ¼ÆËãÄÜÁ¦ÊÇ·ñ¿ÉÄÜ»òʵ¼ÊÉÏͨ¹ýÐéÄ⻯¼¼Êõ¡¢²Ù×÷ϵͳÃüÁî¡¢BIOS ÉèÖûòÀàËÆÔ¼Êø¶øÊܵ½ÏÞÖÆÎ޹ء£ + +ÐéÄâ´¦ÀíÆ÷ÄÚºË + +¡°ÐéÄâ´¦ÀíÆ÷Äںˡ±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£ÎïÀí·þÎñÆ÷ÊÇһ̨ÎïÀí¼ÆËã»ú£¬ÓÉ´¦Àíµ¥Ôª¡¢ÄÚ´æºÍÊäÈë/Êä³ö¹¦ÄÜ×é³É£¬¸Ã·þÎñÆ÷Ϊһ¸ö»ò¶à¸öÓû§»ò¿Í»§»úÉ豸ִÐÐËùÇëÇóµÄ¹ý³Ì¡¢ÃüÁî»òÓ¦ÓóÌÐò¡£Èç¹ûʹÓÃÁË»ú¼Ü¡¢µ¶Æ¬»úÏä»òÆäËûÀàËÆµÄÉ豸£¬ÄÇô¾ßÓÐËùÐè×é¼þµÄÿ̨¿É·ÖÀëµÄÎïÀíÉ豸£¨ÀýÈçһ̨µ¶Æ¬·þÎñÆ÷»ò°²×°ÔÚ»ú¼ÜÉϵÄÉ豸£©Æä±¾Éí¾ù±»ÊÓΪÊÇһ̨¶ÀÁ¢µÄÎïÀí·þÎñÆ÷¡£¡°ÐéÄâ·þÎñÆ÷¡±Ö¸µÄÊÇͨ¹ý¶ÔÎïÀí·þÎñÆ÷µÄ¿ÉÓÃ×ÊÔ´½øÐзÖÇø¶ø´´½¨µÄһ̨ÐéÄâ¼ÆËã»ú£¬»òһ̨δ·ÖÇøµÄÎïÀí·þÎñÆ÷¡£´¦ÀíÆ÷Äںˣ¨Í¨³£³Æ×÷´¦ÀíÆ÷»ò CPU£©Ö¸¼ÆËãÉ豸ÖÐÓÃÓÚ½â¶ÁºÍÖ´ÐÐÖ¸ÁîµÄ¹¦Äܵ¥Ôª¡£Ò»¸ö´¦ÀíÆ÷ÄÚºËÖÁÉÙ°üÀ¨Ò»¸öÖ¸Áî¿ØÖÆµ¥ÔªºÍÒ»¸ö»ò¶à¸öÔËËã»òÂß¼­µ¥Ôª¡£¡°ÐéÄâ´¦ÀíÆ÷Äںˡ±Ö¸µÄÊÇδ·ÖÇøµÄÎïÀí·þÎñÆ÷ÖеĴ¦ÀíÆ÷Äںˣ¬»òÕßÊÇ·ÖÅ䏸ÐéÄâ·þÎñÆ÷µÄÐéÄâÄںˡ£±»Ðí¿É·½±ØÐëΪ¶Ô±¾³ÌÐò¿ÉÓõÄÿ¸öÐéÄâ´¦ÀíÆ÷Äں˻ñȡȨÀû¡£ + +¶ÔÓÚÿ̨ÎïÀí·þÎñÆ÷¶øÑÔ£¬±»Ðí¿É·½±ØÐë¶ÔÒÔÏÂÏîÓµÓÐ×ã¹»µÄȨÀû£¬ÒÔ½ÏСÕßΪ׼£º 1) ±¾³ÌÐò¿ÉÓõÄËùÓÐÐéÄâ·þÎñÆ÷ÉϵÄËùÓпÉÓÃÐéÄâ´¦ÀíÆ÷ÄÚºË×ÜÊý»ò 2) ÎïÀí·þÎñÆ÷ÉϵÄËùÓпÉÓô¦ÀíÆ÷Äںˡ£ + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +ÖØÒªÐÅÏ¢£ºÇë×ÐϸÔĶÁ + +ÏÂÃæÌṩÁËÁ½¸öÐí¿ÉЭÒé¡£ + +1. IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé +2. IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé + +Èç¹û±»Ðí¿É·½ÎªÁËÉú²úÐÔʹÓÃÄ¿µÄ£¨¶ø²»ÊÇΪÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£©»ñµÃ±¾³ÌÐò£¬µ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½½ÓÊÜ IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +Èç¹û±»Ðí¿É·½ÎªÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£¨Í³³ÆÎª¡°ÆÀ¹À¡±£©Ä¿µÄ»ñµÃ±¾³ÌÐò£ºµ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½Í¬Ê±½ÓÊÜ£¨i£©IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒ飨¡°ÆÀ¹ÀÐí¿É¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ģ»ºÍ£¨ii£©IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +ÔÚ±»Ðí¿É·½µÄÆÀ¹ÀÆÚ¼ä½«ÊÊÓá°ÆÀ¹ÀÐí¿É¡±¡£ + +Èç¹û±»Ðí¿É·½Í¨¹ýÇ©Êð²É¹ºÐ­Ò飨ÀýÈ磬IBM International Passport Advantage ЭÒé»ò IBM Passport Advantage Express ЭÒ飩ÔÚÆÀ¹ÀÖ®ºóÑ¡Ôñ±£Áô±¾³ÌÐò£¨»òÕß»ñµÃ¸½¼ÓµÄ±¾³ÌÐò¸±±¾¹©ÆÀ¹ÀÖ®ºóʹÓã©£¬IPLA ½«×Ô¶¯ÊÊÓᣠ+ +¡°ÆÀ¹ÀÐí¿É¡±ºÍ IPLA ²»ÄÜͬʱÓÐЧ£»Á½ÕßÖ®¼ä²»ÄÜ»¥ÏàÐ޸쬲¢Çұ˴˶ÀÁ¢¡£ + +ÕâÁ½¸öÐí¿ÉЭÒéÖÐÿ¸öЭÒéµÄÍêÕûÎı¾ÈçÏ¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé (Z125-5543-05) ÊÊÓᣠ+ +³ÌÐòÃû³Æ (³ÌÐòºÅ)£º +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +ÒÔϱê×¼Ìõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +ÆÀ¹ÀÆÚÏÞ + +ÆÀ¹ÀÆÚÏÞÓÚ±»Ðí¿É·½Í¬ÒⱾЭÒéÌõ¿îÖ®ÈÕ¿ªÊ¼£¬ÓÚ 90 ÈÕºóÖÕÖ¹¡£ + +À¦°ó³ÌÐò + +±¾³ÌÐòÊÇ×÷Ϊһ¸ö¶à²úÆ·³ÌÐò°üÐí¿ÉµÄ£¬°üÀ¨ÒÔÏÂËù±êʶµÄ¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½»ñµÃÊÚȨ£¬¿É¸ù¾Ý±¾³ÌÐòµÄȨÀûÖ¤Ã÷ÏÞÖÆÒÔ¼°±¾¡°Ðí¿ÉÖ¤ÐÅÏ¢¡±ÎĵµÖй涨µÄÏÞÖÆ£¬°²×°ºÍʹÓôËÀà¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½ÎÞȨÔÚ¡°¶à²úÆ·³ÌÐò°ü¡±Ö®ÍâתÈûòתÏú¡°À¦°ó³ÌÐò¡±¡£¡°À¦°ó³ÌÐò¡±¿ÉÄÜËæ¸½Ðí¿ÉÌõ¿îÒÔ¼°ÊÊÓÃÓÚ±»Ðí¿É·½¶Ô¡°À¦°ó³ÌÐò¡±Ê¹ÓõÄÌõ¿î£¨Èç¹ûÓеϰ£©¡£Èç¹û·¢Éú³åÍ»£¬±¾¡°Ðí¿ÉÐÅÏ¢¡±ÎĵµµÄÌõ¿îÓÅÏÈÓÚ¡°À¦°ó³ÌÐò¡±µÄÌõ¿î¡£µ±±»Ðí¿É·½Ê¹Óñ¾³ÌÐòµÄȨÀûµ½ÆÚ»òÖÕֹʱ£¬±»Ðí¿É·½±ØÐëֹͣʹÓûòÏú»Ù±¾¡°À¦°ó³ÌÐò¡±µÄËùÓи±±¾£¬»òÕßÁ¢¼´½«ËùÓи±±¾¹é»¹¸ø±¾³ÌÐòµÄÌṩ·½¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁË¡°À¦°ó³ÌÐò¡±£¬ÄÇôӦµ±Óë±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ¡£Èç¹û±»Ðí¿É·½Ï£ÍûÔÚÉÏÊöÏÞÖÆ·¶Î§Ö®Íâ»ñµÃ¡°À¦°ó³ÌÐò¡±µÄʹÓÃÐí¿É£¬ÇëÓë IBM ÏúÊÛ´ú±í»ò±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ£¬ÒÔ»ñµÃÏàÓ¦µÄÐí¿É¡£ + +ÒÔÏÂÊÇËæ±¾³ÌÐòÒ»ÆðÐí¿ÉµÄ¡°À¦°ó³ÌÐò¡±£º +IBM MQ Idle Standby V9.0.3 + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé (Z125-3301-14) ÊÊÓᣠ+ +³ÌÐòÃû³Æ (³ÌÐòºÅ)£º +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +ÒÔϱê×¼Ìõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +ÓÐÏÞµÄʹÓÃȨÏÞ + +¸ù¾Ý¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©ºÍ±¾Ðí¿ÉÐÅÏ¢ÖеÄÃèÊö£¬IBM ÊÚÓè±»Ðí¿É·½ÓÐÏÞµÄʹÓñ¾³ÌÐòµÄȨÀû¡£±¾È¨ÏÞ½öÏÞÓÚÊÚȨʹÓü¶±ð£¬Èç±»Ðí¿É·½¸ù¾Ý¡°È¨ÀûÖ¤Ã÷¡±Ö§¸¶µÄ´¦ÀíÆ÷¼ÛÖµµ¥Ôª£¨¡°PVU¡±£©¡¢×ÊÔ´¼ÛÖµµ¥Ôª£¨¡°RVU¡±£©¡¢¼ÛÖµµ¥Ôª(¡°VU¡±£©»òÆäËûÖ¸¶¨Ê¹Óü¶±ð¡£±»Ðí¿É·½µÄʹÓû¹¿ÉÄÜÏÞ¶¨ÓÚÌØ¶¨µÄ»úÆ÷£¬»ò½ö×÷Ϊ֧³Ö³ÌÐò£¬»ò×ñÑ­ÆäËûÏÞÖÆ¡£ÓÉÓÚ±»Ðí¿É·½Î´¹ºÂò³ÌÐòµÄÕû¸ö¾­¼Ã¼ÛÖµ£¬Òò´ËÔÚδ֧¸¶¶îÍâ·ÑÓÃʱ£¬²»ÔÊÐíʹÓÃÆäËûÏî¡£´ËÍ⣬³ý·ÇÊÊÓõÄЭÒéÖÐÃ÷È·±íÃ÷±»Ðí¿É·½»ñµÃʹÓñ¾³ÌÐòµÄÊÚȨ£¬·ñÔò±»Ðí¿É·½ÎÞȨʹÓñ¾³ÌÐòÏòÈκεÚÈý·½ÌṩÉÌÒµ IT ·þÎñ¡¢ÌṩÉÌÒµÍйܻòʱ¼ä¹²Ïí£¬»òÔÙÐí¿É¡¢³ö×â»ò×âÁÞ±¾³ÌÐò¡£Í¨¹ýÖ§¸¶¶îÍâ·ÑÓûò¸ù¾ÝÆäËû»ò²¹³äÌõ¿î£¬±»Ðí¿É·½¿ÉÄÜ»ñµÃ¸ü¶àȨÀû¡£IBM ±£Áô¾ö¶¨ÊÇ·ñÏò±»Ðí¿É·½Ìṩ´ËÀà¶îÍâȨÀûµÄȨÀû¡£ + +¹æ·¶ + +±¾³ÌÐòµÄ¹æ¸ñÏê¼û±¾³ÌÐò¹«¸æº¯µÄͳһÃèÊöºÍ¼¼ÊõÐÅÏ¢²¿·Ö¡£ + +À¦°ó³ÌÐò + +±¾³ÌÐòÊÇ×÷Ϊһ¸ö¶à²úÆ·³ÌÐò°üÐí¿ÉµÄ£¬°üÀ¨ÒÔÏÂËù±êʶµÄ¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½»ñµÃÊÚȨ£¬¿É¸ù¾Ý±¾³ÌÐòµÄȨÀûÖ¤Ã÷ÏÞÖÆÒÔ¼°±¾¡°Ðí¿ÉÖ¤ÐÅÏ¢¡±ÎĵµÖй涨µÄÏÞÖÆ£¬°²×°ºÍʹÓôËÀà¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½ÎÞȨÔÚ¡°¶à²úÆ·³ÌÐò°ü¡±Ö®ÍâתÈûòתÏú¡°À¦°ó³ÌÐò¡±¡£¡°À¦°ó³ÌÐò¡±¿ÉÄÜËæ¸½Ðí¿ÉÌõ¿îÒÔ¼°ÊÊÓÃÓÚ±»Ðí¿É·½¶Ô¡°À¦°ó³ÌÐò¡±Ê¹ÓõÄÌõ¿î£¨Èç¹ûÓеϰ£©¡£Èç¹û·¢Éú³åÍ»£¬±¾¡°Ðí¿ÉÐÅÏ¢¡±ÎĵµµÄÌõ¿îÓÅÏÈÓÚ¡°À¦°ó³ÌÐò¡±µÄÌõ¿î¡£µ±±»Ðí¿É·½Ê¹Óñ¾³ÌÐòµÄȨÀûµ½ÆÚ»òÖÕֹʱ£¬±»Ðí¿É·½±ØÐëֹͣʹÓûòÏú»Ù±¾¡°À¦°ó³ÌÐò¡±µÄËùÓи±±¾£¬»òÕßÁ¢¼´½«ËùÓи±±¾¹é»¹¸ø±¾³ÌÐòµÄÌṩ·½¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁË¡°À¦°ó³ÌÐò¡±£¬ÄÇôӦµ±Óë±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ¡£Èç¹û±»Ðí¿É·½Ï£ÍûÔÚÉÏÊöÏÞÖÆ·¶Î§Ö®Íâ»ñµÃ¡°À¦°ó³ÌÐò¡±µÄʹÓÃÐí¿É£¬ÇëÓë IBM ÏúÊÛ´ú±í»ò±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ£¬ÒÔ»ñµÃÏàÓ¦µÄÐí¿É¡£ + +ÒÔÏÂÊÇËæ±¾³ÌÐòÒ»ÆðÐí¿ÉµÄ¡°À¦°ó³ÌÐò¡±£º +IBM MQ Idle Standby V9.0.3 + +²»±»ÓÃÀ´¹¹½¨ËùÐèȨÀûµÄ×é¼þ + +È·¶¨±»Ðí¿É·½°²×°»òʹÓñ¾³ÌÐòËùÐèµÄȨÀûÊýÁ¿Ê±£¬½«²»¿¼ÂÇÒÔϳÌÐò×é¼þµÄ°²×°»òʹÓ᣻»¾ä»°Ëµ£¬±»Ðí¿É·½¿ÉÒÔ¸ù¾ÝÐí¿ÉÌõ¿î°²×°ºÍʹÓÃÒÔϳÌÐò×é¼þ£¬µ«ÕâЩ×é¼þ²»ÄÜÓÃÓÚÈ·¶¨±¾³ÌÐòËùÐèµÄȨÀûÊý¡£ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + +ÒÔϼÆÁ¿µ¥Î»¿ÉÄÜÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU) + +¡°´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU)¡±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£±ØÐèµÄ PVU ȨÀûµÄÊýÁ¿»ùÓÚ´¦ÀíÆ÷¼¼Êõ¶¨Ò壨°´ÕÕ´¦ÀíÆ÷¹©Ó¦ÉÌ¡¢Æ·ÅÆ¡¢ÀàÐͺÍÐͺÅÔÚÒÔÏ Web Õ¾µãÉ쵀 PVU ±í¸ñÖж¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html£©¼°Îª±¾³ÌÐòÌṩµÄ´¦ÀíÆ÷µÄÊýÁ¿¡£IBM ¼ÌÐø½«ÓÃÓÚ»ñÈ¡»ùÓÚ PVU Ðí¿ÉµÄ¡°Ò»¸ö´¦ÀíÆ÷¡±¶¨ÒåΪÔÚÒ»¸öоƬÉϵÄÿ¸ö´¦ÀíÆ÷ºËÐÄ¡£ÀýÈ磬˫ºË´¦ÀíÆ÷оƬӵÓÐÁ½¸ö´¦ÀíÆ÷ºË¡£ + +±»Ðí¿É·½¿ÉÒÔ¸ù¾Ý¡°Passport Advantage ´Î¼¶ÈÝÁ¿Ðí¿ÉÌõ¿î¡±£¨²ÎÔÄÒÔÏ Web Ò³Ãæ£©£¬Ê¹Óá°È«ÈÝÁ¿¡±Ðí¿É»ò¡°ÐéÄ⻯ÈÝÁ¿¡±£¨´Î¼¶ÈÝÁ¿£©Ðí¿É²¿Êð±¾³ÌÐò¡£Èç¹ûʹÓá°È«ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñÈ¡×ã¹»µÄ PVU ȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄÎïÀíÓ²¼þ»·¾³ÖеÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË*£¬³ýÁËÄÇЩ±¾³ÌÐòÒÑÓÀ¾Ã³ýÈ¥µÄ·þÎñÆ÷¡£Èç¹ûʹÓá°ÐéÄ⻯ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñµÃ×ã¹»µÄȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË£¬Èç¸ù¾ÝÒÔÏÂÕ¾µãµÄ¡°ÐéÄ⻯ÈÝÁ¿Ðí¿É¼ÆÊý¹æÔò¡±µÄ¶¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡£ + +* ÒѼ¤»î´¦ÀíÆ÷ºËÊÇ¿ÉÔÚÎïÀí»òÐéÄâ·þÎñÆ÷ÖÐʹÓõĴ¦ÀíÆ÷ºË£¬Óë´¦ÀíÆ÷ºËµÄ¼ÆËãÄÜÁ¦ÊÇ·ñ¿ÉÄÜ»òʵ¼ÊÉÏͨ¹ýÐéÄ⻯¼¼Êõ¡¢²Ù×÷ϵͳÃüÁî¡¢BIOS ÉèÖûòÀàËÆÔ¼Êø¶øÊܵ½ÏÞÖÆÎ޹ء£ + +³ýÉÏÊöÄÚÈÝÖ®Í⣬ÒÔÏÂÌõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +¿ÕÏдý»úÅäÖà + +³öÓÚ±¾²¿·ÖµÄÄ¿µÄ£¬¡°¿ÕÏдý»ú¡±ÅäÖÃÊÇÖ¸½«±¾³ÌÐòµÄ¸±±¾°²×°ÔÚ¹¹³É¸ß¿ÉÓÃÐÔ½â¾ö·½°¸Ò»²¿·ÖµÄ·þÎñÆ÷ÉÏ£¬Èç¹û»î¶¯·þÎñÆ÷Éϱ¾³ÌÐòµÄ¸±±¾²»ÔÙ¿ÉÓ㬱¾³ÌÐò½«¹ÊÕÏ×ªÒÆÖÁ¸Ã·þÎñÆ÷¡£½öµ±·þÎñÆ÷רÃÅÓÃÓÚ¶Ô¹ÊÕÏ×ªÒÆ³¡¾°Æð°ïÖú×÷ÓõĹÜÀí²Ù×÷ʱ£¬²Å±»ÊÓΪ¡°¿ÕÏС±£¬Ö±ÖÁ·¢Éú¹ÊÕÏ×ªÒÆ¡£ + +²»µÃ½«±¾³ÌÐò°²×°ÔÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬³ý·Ç»ñµÃÁËÏàÓ¦µÄÐí¿É¡£ + +Èç¹ûÔÚ¾ßÓжàʵÀý¶ÓÁйÜÀíÆ÷¹¦ÄܵĿÕÏдý»úÅäÖÃÖÐʹÓñ¾³ÌÐò£¬ÄÇô±¾³ÌÐòµÄÒ»¸ö¸±±¾¿ÉÒÔ³öÓÚ±¸·ÝÄ¿µÄ´æÁôÓÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬²¢ÇÒÒÑÆô¶¯£¬µ«±ØÐë±£³Ö¡°¿ÕÏС±×´Ì¬£¬²»ÓÃÓÚÖ´ÐÐÈκÎÀàÐ͵ÄÉú²ú¹¤×÷£¬³ý·Ç»î¶¯·þÎñÆ÷¹ÊÕÏ×ªÒÆÖÁ¿ÕÏдý»ú·þÎñÆ÷£¬ÔÚÕâÖÖÇé¿öÏ£¬¿ÕÏдý»ú¸±±¾¿ÉÓÃÓÚÔÚ¹ÊÕÏ×ªÒÆÆÚ¼äÖ´ÐÐÉú²ú¹¤×÷¡£ + +Èç¹ûÔÚ¾ßÓÐÆäËû¸ß¿ÉÓÃÐÔϵͳµÄ¿ÕÏдý»úÅäÖÃÖÐʹÓñ¾³ÌÐò£¬ÄÇô±¾³ÌÐòµÄÒ»¸ö¸±±¾¿ÉÒÔ³öÓÚ±¸·ÝÄ¿µÄ´æÁôÓÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬µ«Î´Æô¶¯£¨Òò´Ë²»ÓÃÓÚÖ´ÐÐÈκÎÀàÐ͵ÄÉú²ú¹¤×÷£©£¬µ«Èç¹û»î¶¯·þÎñÆ÷·¢Éú¹ÊÕÏ£¬¸ß¿ÉÓÃÐÔ×é¼þ»á×Ô¶¯½«ÆäÆô¶¯£¬ÔÚÕâÖÖÇé¿öÏ£¬¿ÕÏдý»ú¸±±¾¿ÉÓÃÓÚÔÚ¹ÊÕÏ×ªÒÆÆÚ¼äÖ´ÐÐÉú²ú¹¤×÷¡£ + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +ÖØÒªÐÅÏ¢£ºÇë×ÐϸÔĶÁ + +ÏÂÃæÌṩÁËÁ½¸öÐí¿ÉЭÒé¡£ + +1. IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé +2. IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé + +Èç¹û±»Ðí¿É·½ÎªÁËÉú²úÐÔʹÓÃÄ¿µÄ£¨¶ø²»ÊÇΪÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£©»ñµÃ±¾³ÌÐò£¬µ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½½ÓÊÜ IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +Èç¹û±»Ðí¿É·½ÎªÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£¨Í³³ÆÎª¡°ÆÀ¹À¡±£©Ä¿µÄ»ñµÃ±¾³ÌÐò£ºµ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½Í¬Ê±½ÓÊÜ£¨i£©IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒ飨¡°ÆÀ¹ÀÐí¿É¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ģ»ºÍ£¨ii£©IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +ÔÚ±»Ðí¿É·½µÄÆÀ¹ÀÆÚ¼ä½«ÊÊÓá°ÆÀ¹ÀÐí¿É¡±¡£ + +Èç¹û±»Ðí¿É·½Í¨¹ýÇ©Êð²É¹ºÐ­Ò飨ÀýÈ磬IBM International Passport Advantage ЭÒé»ò IBM Passport Advantage Express ЭÒ飩ÔÚÆÀ¹ÀÖ®ºóÑ¡Ôñ±£Áô±¾³ÌÐò£¨»òÕß»ñµÃ¸½¼ÓµÄ±¾³ÌÐò¸±±¾¹©ÆÀ¹ÀÖ®ºóʹÓã©£¬IPLA ½«×Ô¶¯ÊÊÓᣠ+ +¡°ÆÀ¹ÀÐí¿É¡±ºÍ IPLA ²»ÄÜͬʱÓÐЧ£»Á½ÕßÖ®¼ä²»ÄÜ»¥ÏàÐ޸쬲¢Çұ˴˶ÀÁ¢¡£ + +ÕâÁ½¸öÐí¿ÉЭÒéÖÐÿ¸öЭÒéµÄÍêÕûÎı¾ÈçÏ¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé (Z125-5543-05) ÊÊÓᣠ+ +³ÌÐòÃû³Æ (³ÌÐòºÅ)£º +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +ÒÔϱê×¼Ìõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +ÆÀ¹ÀÆÚÏÞ + +ÆÀ¹ÀÆÚÏÞÓÚ±»Ðí¿É·½Í¬ÒⱾЭÒéÌõ¿îÖ®ÈÕ¿ªÊ¼£¬ÓÚ 90 ÈÕºóÖÕÖ¹¡£ + +À¦°ó³ÌÐò + +±¾³ÌÐòÊÇ×÷Ϊһ¸ö¶à²úÆ·³ÌÐò°üÐí¿ÉµÄ£¬°üÀ¨ÒÔÏÂËù±êʶµÄ¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½»ñµÃÊÚȨ£¬¿É¸ù¾Ý±¾³ÌÐòµÄȨÀûÖ¤Ã÷ÏÞÖÆÒÔ¼°±¾¡°Ðí¿ÉÖ¤ÐÅÏ¢¡±ÎĵµÖй涨µÄÏÞÖÆ£¬°²×°ºÍʹÓôËÀà¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½ÎÞȨÔÚ¡°¶à²úÆ·³ÌÐò°ü¡±Ö®ÍâתÈûòתÏú¡°À¦°ó³ÌÐò¡±¡£¡°À¦°ó³ÌÐò¡±¿ÉÄÜËæ¸½Ðí¿ÉÌõ¿îÒÔ¼°ÊÊÓÃÓÚ±»Ðí¿É·½¶Ô¡°À¦°ó³ÌÐò¡±Ê¹ÓõÄÌõ¿î£¨Èç¹ûÓеϰ£©¡£Èç¹û·¢Éú³åÍ»£¬±¾¡°Ðí¿ÉÐÅÏ¢¡±ÎĵµµÄÌõ¿îÓÅÏÈÓÚ¡°À¦°ó³ÌÐò¡±µÄÌõ¿î¡£µ±±»Ðí¿É·½Ê¹Óñ¾³ÌÐòµÄȨÀûµ½ÆÚ»òÖÕֹʱ£¬±»Ðí¿É·½±ØÐëֹͣʹÓûòÏú»Ù±¾¡°À¦°ó³ÌÐò¡±µÄËùÓи±±¾£¬»òÕßÁ¢¼´½«ËùÓи±±¾¹é»¹¸ø±¾³ÌÐòµÄÌṩ·½¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁË¡°À¦°ó³ÌÐò¡±£¬ÄÇôӦµ±Óë±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ¡£Èç¹û±»Ðí¿É·½Ï£ÍûÔÚÉÏÊöÏÞÖÆ·¶Î§Ö®Íâ»ñµÃ¡°À¦°ó³ÌÐò¡±µÄʹÓÃÐí¿É£¬ÇëÓë IBM ÏúÊÛ´ú±í»ò±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ£¬ÒÔ»ñµÃÏàÓ¦µÄÐí¿É¡£ + +ÒÔÏÂÊÇËæ±¾³ÌÐòÒ»ÆðÐí¿ÉµÄ¡°À¦°ó³ÌÐò¡±£º +IBM MQ V9.0.3 + +¿ª·¢ÈËÔ±ÏÞÖÆ + +Èç¹û±¾³ÌÐòÖ¸¶¨ÎªÕë¶Ô¡°¿ª·¢ÈËÔ±¡±£¬ÄÇô±¾³ÌÐò½ö¿É²¿ÊðΪ±»Ðí¿É·½ÔÚ¿ª·¢ÈËÔ±»úÆ÷ÉϽøÐеÄÄÚ²¿¿ª·¢ºÍµ¥Ôª²âÊÔµÄÒ»²¿·Ö¡£¿ª·¢ÈËÔ±»úÆ÷ÊÇÖ¸ÔËÐÐÖ÷²Ù×÷ϵͳºÍ±¾³ÌÐòµÄÎïÀí»òÐéÄâ×ÀÃæ»·¾³£¬Ö»ÓÐÒ»¸öÖ¸¶¨µÄ¿ª·¢ÈËÔ±Äܹ»·ÃÎʺÍʹÓᣱ»Ðí¿É·½Î´±»ÊÚȨʹÓñ¾³ÌÐò´¦ÀíÉú²ú¹¤×÷¸ºÔØ¡¢Ä£ÄâÉú²ú¹¤×÷¸ºÔØ»ò²âÊÔÈκδúÂë¡¢Ó¦ÓóÌÐò»òϵͳµÄ¿ÉÀ©Õ¹ÐÔ¡£ÔÚûÓлñÈ¡ÏàÓ¦µÄÉú²úȨÀûµÄÇé¿öÏ£¬±»Ðí¿É·½Î´±»ÊÚȨ½«±¾³ÌÐòµÄÈκβ¿·ÖÓÃÓÚÈÎºÎÆäËûÓÃ;¡£ + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé (Z125-3301-14) ÊÊÓᣠ+ +³ÌÐòÃû³Æ (³ÌÐòºÅ)£º +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +ÒÔϱê×¼Ìõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +ÓÐÏÞµÄʹÓÃȨÏÞ + +¸ù¾Ý¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©ºÍ±¾Ðí¿ÉÐÅÏ¢ÖеÄÃèÊö£¬IBM ÊÚÓè±»Ðí¿É·½ÓÐÏÞµÄʹÓñ¾³ÌÐòµÄȨÀû¡£±¾È¨ÏÞ½öÏÞÓÚÊÚȨʹÓü¶±ð£¬Èç±»Ðí¿É·½¸ù¾Ý¡°È¨ÀûÖ¤Ã÷¡±Ö§¸¶µÄ´¦ÀíÆ÷¼ÛÖµµ¥Ôª£¨¡°PVU¡±£©¡¢×ÊÔ´¼ÛÖµµ¥Ôª£¨¡°RVU¡±£©¡¢¼ÛÖµµ¥Ôª(¡°VU¡±£©»òÆäËûÖ¸¶¨Ê¹Óü¶±ð¡£±»Ðí¿É·½µÄʹÓû¹¿ÉÄÜÏÞ¶¨ÓÚÌØ¶¨µÄ»úÆ÷£¬»ò½ö×÷Ϊ֧³Ö³ÌÐò£¬»ò×ñÑ­ÆäËûÏÞÖÆ¡£ÓÉÓÚ±»Ðí¿É·½Î´¹ºÂò³ÌÐòµÄÕû¸ö¾­¼Ã¼ÛÖµ£¬Òò´ËÔÚδ֧¸¶¶îÍâ·ÑÓÃʱ£¬²»ÔÊÐíʹÓÃÆäËûÏî¡£´ËÍ⣬³ý·ÇÊÊÓõÄЭÒéÖÐÃ÷È·±íÃ÷±»Ðí¿É·½»ñµÃʹÓñ¾³ÌÐòµÄÊÚȨ£¬·ñÔò±»Ðí¿É·½ÎÞȨʹÓñ¾³ÌÐòÏòÈκεÚÈý·½ÌṩÉÌÒµ IT ·þÎñ¡¢ÌṩÉÌÒµÍйܻòʱ¼ä¹²Ïí£¬»òÔÙÐí¿É¡¢³ö×â»ò×âÁÞ±¾³ÌÐò¡£Í¨¹ýÖ§¸¶¶îÍâ·ÑÓûò¸ù¾ÝÆäËû»ò²¹³äÌõ¿î£¬±»Ðí¿É·½¿ÉÄÜ»ñµÃ¸ü¶àȨÀû¡£IBM ±£Áô¾ö¶¨ÊÇ·ñÏò±»Ðí¿É·½Ìṩ´ËÀà¶îÍâȨÀûµÄȨÀû¡£ + +¹æ·¶ + +±¾³ÌÐòµÄ¹æ¸ñÏê¼û±¾³ÌÐò¹«¸æº¯µÄͳһÃèÊöºÍ¼¼ÊõÐÅÏ¢²¿·Ö¡£ + +À¦°ó³ÌÐò + +±¾³ÌÐòÊÇ×÷Ϊһ¸ö¶à²úÆ·³ÌÐò°üÐí¿ÉµÄ£¬°üÀ¨ÒÔÏÂËù±êʶµÄ¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½»ñµÃÊÚȨ£¬¿É¸ù¾Ý±¾³ÌÐòµÄȨÀûÖ¤Ã÷ÏÞÖÆÒÔ¼°±¾¡°Ðí¿ÉÖ¤ÐÅÏ¢¡±ÎĵµÖй涨µÄÏÞÖÆ£¬°²×°ºÍʹÓôËÀà¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½ÎÞȨÔÚ¡°¶à²úÆ·³ÌÐò°ü¡±Ö®ÍâתÈûòתÏú¡°À¦°ó³ÌÐò¡±¡£¡°À¦°ó³ÌÐò¡±¿ÉÄÜËæ¸½Ðí¿ÉÌõ¿îÒÔ¼°ÊÊÓÃÓÚ±»Ðí¿É·½¶Ô¡°À¦°ó³ÌÐò¡±Ê¹ÓõÄÌõ¿î£¨Èç¹ûÓеϰ£©¡£Èç¹û·¢Éú³åÍ»£¬±¾¡°Ðí¿ÉÐÅÏ¢¡±ÎĵµµÄÌõ¿îÓÅÏÈÓÚ¡°À¦°ó³ÌÐò¡±µÄÌõ¿î¡£µ±±»Ðí¿É·½Ê¹Óñ¾³ÌÐòµÄȨÀûµ½ÆÚ»òÖÕֹʱ£¬±»Ðí¿É·½±ØÐëֹͣʹÓûòÏú»Ù±¾¡°À¦°ó³ÌÐò¡±µÄËùÓи±±¾£¬»òÕßÁ¢¼´½«ËùÓи±±¾¹é»¹¸ø±¾³ÌÐòµÄÌṩ·½¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁË¡°À¦°ó³ÌÐò¡±£¬ÄÇôӦµ±Óë±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ¡£Èç¹û±»Ðí¿É·½Ï£ÍûÔÚÉÏÊöÏÞÖÆ·¶Î§Ö®Íâ»ñµÃ¡°À¦°ó³ÌÐò¡±µÄʹÓÃÐí¿É£¬ÇëÓë IBM ÏúÊÛ´ú±í»ò±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ£¬ÒÔ»ñµÃÏàÓ¦µÄÐí¿É¡£ + +ÒÔÏÂÊÇËæ±¾³ÌÐòÒ»ÆðÐí¿ÉµÄ¡°À¦°ó³ÌÐò¡±£º +IBM MQ V9.0.3 + +¿ª·¢ÈËÔ±ÏÞÖÆ + +Èç¹û±¾³ÌÐòÖ¸¶¨ÎªÕë¶Ô¡°¿ª·¢ÈËÔ±¡±£¬ÄÇô±¾³ÌÐò½ö¿É²¿ÊðΪ±»Ðí¿É·½ÔÚ¿ª·¢ÈËÔ±»úÆ÷ÉϽøÐеÄÄÚ²¿¿ª·¢ºÍµ¥Ôª²âÊÔµÄÒ»²¿·Ö¡£¿ª·¢ÈËÔ±»úÆ÷ÊÇÖ¸ÔËÐÐÖ÷²Ù×÷ϵͳºÍ±¾³ÌÐòµÄÎïÀí»òÐéÄâ×ÀÃæ»·¾³£¬Ö»ÓÐÒ»¸öÖ¸¶¨µÄ¿ª·¢ÈËÔ±Äܹ»·ÃÎʺÍʹÓᣱ»Ðí¿É·½Î´±»ÊÚȨʹÓñ¾³ÌÐò´¦ÀíÉú²ú¹¤×÷¸ºÔØ¡¢Ä£ÄâÉú²ú¹¤×÷¸ºÔØ»ò²âÊÔÈκδúÂë¡¢Ó¦ÓóÌÐò»òϵͳµÄ¿ÉÀ©Õ¹ÐÔ¡£ÔÚûÓлñÈ¡ÏàÓ¦µÄÉú²úȨÀûµÄÇé¿öÏ£¬±»Ðí¿É·½Î´±»ÊÚȨ½«±¾³ÌÐòµÄÈκβ¿·ÖÓÃÓÚÈÎºÎÆäËûÓÃ;¡£ + +²»±»ÓÃÀ´¹¹½¨ËùÐèȨÀûµÄ×é¼þ + +È·¶¨±»Ðí¿É·½°²×°»òʹÓñ¾³ÌÐòËùÐèµÄȨÀûÊýÁ¿Ê±£¬½«²»¿¼ÂÇÒÔϳÌÐò×é¼þµÄ°²×°»òʹÓ᣻»¾ä»°Ëµ£¬±»Ðí¿É·½¿ÉÒÔ¸ù¾ÝÐí¿ÉÌõ¿î°²×°ºÍʹÓÃÒÔϳÌÐò×é¼þ£¬µ«ÕâЩ×é¼þ²»ÄÜÓÃÓÚÈ·¶¨±¾³ÌÐòËùÐèµÄȨÀûÊý¡£ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + +ÒÔϼÆÁ¿µ¥Î»¿ÉÄÜÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +°²×° + +¡°°²×°¡±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£Ò»¸ö°²×°ÊÇÎïÀí»òÐéÄâÓ²ÅÌÉÏ¿ÉÓÃÓÚÔÚ¼ÆËã»úÉÏÖ´ÐеÄÒ»¸ö±¾³ÌÐòÒѰ²×°¸±±¾¡£±»Ðí¿É·½±ØÐëΪ±¾³ÌÐòµÄÿ¸ö°²×°»ñµÃÒ»·ÝȨÀû¡£ + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +ÖØÒªÐÅÏ¢£ºÇë×ÐϸÔĶÁ + +ÏÂÃæÌṩÁËÁ½¸öÐí¿ÉЭÒé¡£ + +1. IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé +2. IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé + +Èç¹û±»Ðí¿É·½ÎªÁËÉú²úÐÔʹÓÃÄ¿µÄ£¨¶ø²»ÊÇΪÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£©»ñµÃ±¾³ÌÐò£¬µ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½½ÓÊÜ IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +Èç¹û±»Ðí¿É·½ÎªÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£¨Í³³ÆÎª¡°ÆÀ¹À¡±£©Ä¿µÄ»ñµÃ±¾³ÌÐò£ºµ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½Í¬Ê±½ÓÊÜ£¨i£©IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒ飨¡°ÆÀ¹ÀÐí¿É¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ģ»ºÍ£¨ii£©IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +ÔÚ±»Ðí¿É·½µÄÆÀ¹ÀÆÚ¼ä½«ÊÊÓá°ÆÀ¹ÀÐí¿É¡±¡£ + +Èç¹û±»Ðí¿É·½Í¨¹ýÇ©Êð²É¹ºÐ­Ò飨ÀýÈ磬IBM International Passport Advantage ЭÒé»ò IBM Passport Advantage Express ЭÒ飩ÔÚÆÀ¹ÀÖ®ºóÑ¡Ôñ±£Áô±¾³ÌÐò£¨»òÕß»ñµÃ¸½¼ÓµÄ±¾³ÌÐò¸±±¾¹©ÆÀ¹ÀÖ®ºóʹÓã©£¬IPLA ½«×Ô¶¯ÊÊÓᣠ+ +¡°ÆÀ¹ÀÐí¿É¡±ºÍ IPLA ²»ÄÜͬʱÓÐЧ£»Á½ÕßÖ®¼ä²»ÄÜ»¥ÏàÐ޸쬲¢Çұ˴˶ÀÁ¢¡£ + +ÕâÁ½¸öÐí¿ÉЭÒéÖÐÿ¸öЭÒéµÄÍêÕûÎı¾ÈçÏ¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé (Z125-5543-05) ÊÊÓᣠ+ +³ÌÐòÃû³Æ£ºIBM MQ Managed File Transfer Service V9.0.1 +³ÌÐòºÅ£ºEvaluation + +³ÌÐòÃû³Æ£ºIBM MQ Managed File Transfer Service Idle Standby V9.0.1 +³ÌÐòºÅ£ºEvaluation + +³ÌÐòÃû³Æ£ºIBM MQ Managed File Transfer Agent V9.0.1 +³ÌÐòºÅ£ºEvaluation + +ÆÀ¹ÀÆÚÏÞ + +ÆÀ¹ÀÆÚÏÞÓÚ±»Ðí¿É·½Í¬ÒⱾЭÒéÌõ¿îÖ®ÈÕ¿ªÊ¼£¬ÓÚ 90 ÈÕºóÖÕÖ¹¡£ + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé (Z125-3301-14) ÊÊÓᣠ+ +³ÌÐòÃû³Æ£ºIBM MQ Managed File Transfer Service V9.0.1 +³ÌÐòºÅ£º5724-H72 + +³ÌÐòÃû³Æ£ºIBM MQ Managed File Transfer Service Idle Standby V9.0.1 +³ÌÐòºÅ£º5724-H72 + +³ÌÐòÃû³Æ£ºIBM MQ Managed File Transfer Agent V9.0.1 +³ÌÐòºÅ£º5724-H72 + +¸ù¾Ý¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©ºÍ±¾Ðí¿ÉÐÅÏ¢ÖеÄÃèÊö£¬IBM ÊÚÓè±»Ðí¿É·½ÓÐÏÞµÄʹÓñ¾³ÌÐòµÄȨÀû¡£±¾È¨ÏÞ½öÏÞÓÚÊÚȨʹÓü¶±ð£¬Èç±»Ðí¿É·½¸ù¾Ý¡°È¨ÀûÖ¤Ã÷¡±Ö§¸¶µÄ´¦ÀíÆ÷¼ÛÖµµ¥Ôª£¨¡°PVU¡±£©¡¢×ÊÔ´¼ÛÖµµ¥Ôª£¨¡°RVU¡±£©¡¢¼ÛÖµµ¥Ôª(¡°VU¡±£©»òÆäËûÖ¸¶¨Ê¹Óü¶±ð¡£±»Ðí¿É·½µÄʹÓû¹¿ÉÄÜÏÞ¶¨ÓÚÌØ¶¨µÄ»úÆ÷£¬»ò½ö×÷Ϊ֧³Ö³ÌÐò£¬»ò×ñÑ­ÆäËûÏÞÖÆ¡£ÓÉÓÚ±»Ðí¿É·½Î´¹ºÂò³ÌÐòµÄÕû¸ö¾­¼Ã¼ÛÖµ£¬Òò´ËÔÚδ֧¸¶¶îÍâ·ÑÓÃʱ£¬²»ÔÊÐíʹÓÃÆäËûÏî¡£´ËÍ⣬³ý·ÇÊÊÓõÄЭÒéÖÐÃ÷È·±íÃ÷±»Ðí¿É·½»ñµÃʹÓñ¾³ÌÐòµÄÊÚȨ£¬·ñÔò±»Ðí¿É·½ÎÞȨʹÓñ¾³ÌÐòÏòÈκεÚÈý·½ÌṩÉÌÒµ IT ·þÎñ¡¢ÌṩÉÌÒµÍйܻòʱ¼ä¹²Ïí£¬»òÔÙÐí¿É¡¢³ö×â»ò×âÁÞ±¾³ÌÐò¡£Í¨¹ýÖ§¸¶¶îÍâ·ÑÓûò¸ù¾ÝÆäËû»ò²¹³äÌõ¿î£¬±»Ðí¿É·½¿ÉÄÜ»ñµÃ¸ü¶àȨÀû¡£IBM ±£Áô¾ö¶¨ÊÇ·ñÏò±»Ðí¿É·½Ìṩ´ËÀà¶îÍâȨÀûµÄȨÀû¡£ + +±¾³ÌÐòµÄ¹æ¸ñÏê¼û±¾³ÌÐò¹«¸æº¯µÄͳһÃèÊöºÍ¼¼ÊõÐÅÏ¢²¿·Ö¡£ + +¿ÉÔÙ·Ö·¢²úÆ· + +Èç¹û±¾³ÌÐò°üº¬¿ÉÔÙ·Ö·¢µÄ×é¼þ£¬ÕâЩ×é¼þÔÚ±¾³ÌÐòËæ¸½µÄ REDIST ÎļþÖбêʶ¡£³ýÁ˱¾³ÌÐòÖÐÊÚÓèµÄÐí¿ÉȨÀû£¬±»Ðí¿É·½»¹¿É×ñÑ­ÒÔÏÂÌõ¿îÀ´·Ö·¢¿ÉÔÙ·Ö·¢µÄ¶ÔÏó£º +1) ¿ÉÔÙ·Ö·¢²úÆ·Ö»ÄÜÒÔ¶ÔÏó´úÂëµÄÐÎʽÔÙ·Ö·¢£¬²¢ÇÒÄú±ØÐë×ñÊØ±¾³ÌÐòËæ¸½µÄ REDIST »òÎĵµÖеÄËùÓй涨¡¢Ö¸Ê¾ºÍ¹æ·¶£» +2) Èç¹û±¾³ÌÐòËæ¸½µÄÎĵµÃ÷È·ÔÊÐí±»Ðí¿É·½Ð޸ĿÉÔÙ·Ö·¢²úÆ·£¬´ËÀàÐ޸ıØÐë×ñÊØ¸ÃÎĵµÖеÄËùÓй涨¡¢Ö¸Ê¾ºÍ¹æ·¶£»ÕâЩÐ޸ģ¨ÈçÓУ©±ØÐëÊÓΪ¡°¿ÉÔÙ·Ö·¢²úÆ·¡±£» +3) Ö»Äܽ«¿ÉÔÙ·Ö·¢²úÆ·×÷ΪʹÓñ¾³ÌÐò¿ª·¢µÄ±»Ðí¿É·½Ó¦ÓóÌÐò£¨¡°±»Ðí¿É·½µÄÓ¦ÓóÌÐò¡±£©µÄÒ»²¿·Ö½øÐзַ¢£¬²¢ÇÒÖ»ÄÜÓÃÓÚÖ§³Ö±»Ðí¿É·½¿Í»§¶Ô±»Ðí¿É·½µÄÓ¦ÓóÌÐòµÄÏà¹ØÊ¹Óᣱ»Ðí¿É·½µÄÓ¦ÓóÌÐò±ØÐë¹¹³É¼«¸ßµÄ¸½¼Ó¼ÛÖµ£¬ÒÔ±ÜÃâʹÕâЩ¿ÉÔÙ·Ö·¢²úÆ·³ÉΪ±»Ðí¿É·½Èí¼þ²úÆ·µÄ×îÖÕÓû§»ñµÃÄúÈí¼þ²úÆ·µÄÕæÊµÔ­Òò£» +4) Èç¹û¿ÉÔÙ·Ö·¢²úÆ·°üº¬ Java ÔËÐÐʱ»·¾³£¬±»Ðí¿É·½»¹±ØÐë°üº¬ÆäËûʹÓñ»Ðí¿É·½Ó¦ÓóÌÐòµÄ·Ç Java ¿ÉÔÙ·Ö·¢²úÆ·£¬³ý·Ç¸ÃÓ¦ÓóÌÐò½öÔÚ³£¹æ¼ÆËã»úÉ豸£¨Èç±Ê¼Ç±¾µçÄÔ¡¢Ì¨Ê½»úºÍ·þÎñÆ÷£©£¬¶ø²»ÔÚÕÆÉÏÖ÷»ú»òÆäËûÆÕ¼°ÐÍÉ豸£¨Èç°üº¬Î¢´¦ÀíÆ÷£¬µ«Ö÷ҪĿµÄ²»ÔÚÓÚ¼ÆË㣩ÉÏÔËÐУ» +5) ±»Ðí¿É·½²»µÃ³ýÈ¥¿ÉÔÙ·Ö·¢²úÆ·Öаüº¬µÄÈκΰæÈ¨»òÉùÃ÷Îļþ£» +6) ±»Ðí¿É·½Í¬ÒâÒòʹÓûò·Ö·¢±»Ðí¿É·½µÄÓ¦ÓóÌÐò¶øÒýÆðµÄÈκÎË÷Åâ¶øÏò IBM ¼°Æä¹©Ó¦ÉÌ»ò·ÖÏúÉÌ×ö³öÅâ³¥£» +7) ±»Ðí¿É·½²»µÃʹÓÃÓëÔ­¿ÉÔÙ·Ö·¢Îļþ/Ô­Ä£¿éÏàͬµÄ·¾¶Ãû£» +8) δ¾­ IBM ¼°Æä¹©Ó¦ÉÌ»ò·ÖÏúÉÌÊÂÏÈÊéÃæÐí¿É£¬±»Ðí¿É·½²»µÃ½« IBM ¼°Æä¹©Ó¦ÉÌ»ò·ÖÏúÉ̵ÄÃû³Æ»òÉ̱êÓÃÓÚÓªÏú±»Ðí¿É·½µÄÓ¦ÓóÌÐò£» +9) IBM¡¢Æä¹©Ó¦É̺ͷÖÏúÉÌ¡°°´ÏÖ×´¡±Ìṩ¿ÉÔÙ·Ö·¢²úÆ·ºÍÏà¹ØÎĵµ²»³Ðµ£ÈκÎÖ§³ÖÒåÎñ£¬Ò²²»´øÓÐÈκÎÃ÷ʾ»ò°µº¬µÄ±£Ö¤£¬°üÀ¨ÓйØËùÓÐȨ¡¢²»ÇÖȨ¡¢²»¸ÉÉæÒÔ¼°°µº¬µÄÊÊÏúÐÔºÍÊÊÓÃÓÚÄ³ÌØ¶¨ÓÃ;µÄ±£Ö¤ºÍÌõ¼þ£» +10) ±»Ðí¿É·½Ðë×ÔÐиºÔð±»Ðí¿É·½µÄÓ¦ÓóÌÐòµÄÈ«²¿¼¼ÊõÖ§³ÖÒÔ¼°¶Ô¿ÉÔÙ·Ö·¢²úÆ·µÄÈκÎÐ޸ģ»ÇÒ +11) ±»Ðí¿É·½Óë±»Ðí¿É·½µÄÓ¦ÓóÌÐòµÄ×îÖÕÓû§µÄÐí¿ÉЭÒéÖÐÐë¸æÖª×îÖÕÓû§´ËÀà¿ÉÔÙ·Ö·¢²úÆ·¼°ÆäÐ޸IJúÆ·²»µÃ±» i) ÓÃÓÚÖ§³Ö±»Ðí¿É·½µÄÓ¦ÓóÌÐòÖ®ÍâµÄÆäËûÄ¿µÄ£¬ii) ¸´ÖÆ£¨ÓÃÓÚ±¸·ÝÄ¿µÄµÄ³ýÍ⣩£¬iii) ½øÒ»²½·Ö·¢»òתÈ㨲»°üÀ¨±»Ðí¿É·½µÄÓ¦ÓóÌÐò£©£¬»ò iv) µ¹Ðò»ã±à¡¢·´Ïò±àÒë»òÒÔÆäËû·½Ê½½âÒ루ÊÊÓ÷¨ÂÉÌØ±ðÔÊÐíÇÒ²»µÃÒÔÔ¼¶¨·ÅÆúÕß³ýÍ⣩¡£²¢ÇÒ£¬±»Ðí¿É·½µÄÐí¿ÉЭÒ鱨ÐëÖÁÉÙÄÜ´Ó IBM »ñµÃÏñ±¾Ð­ÒéÌõ¿îÒ»ÑùµÄ±£»¤¡£ + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + +¶ÔÓÚ±¾³ÌÐò REDIST ÎļþÖÐÁгöµÄÔ´×é¼þºÍÑù±¾²ÄÁÏ£¬±»Ðí¿É·½¿É¸ù¾Ý±¾Ðí¿ÉÐÅÏ¢µÄÌõ¿îºÍ REDIST ÎļþÖеÄÈÎÒâָʾÐÅÏ¢ÖØÐ·ַ¢ÕâЩԭ×é¼þ»òÑù±¾²ÄÁϵÄÐ޸İ汾¡£ + +°²×° + +¡°°²×°¡±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£Ò»¸ö°²×°ÊÇÎïÀí»òÐéÄâÓ²ÅÌÉÏ¿ÉÓÃÓÚÔÚ¼ÆËã»úÉÏÖ´ÐеÄÒ»¸ö±¾³ÌÐòÒѰ²×°¸±±¾¡£±»Ðí¿É·½±ØÐëΪ±¾³ÌÐòµÄÿ¸ö°²×°»ñµÃÒ»·ÝȨÀû¡£ + +´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU) + +¡°´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU)¡±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£±ØÐèµÄ PVU ȨÀûµÄÊýÁ¿»ùÓÚ´¦ÀíÆ÷¼¼Êõ¶¨Ò壨°´ÕÕ´¦ÀíÆ÷¹©Ó¦ÉÌ¡¢Æ·ÅÆ¡¢ÀàÐͺÍÐͺÅÔÚÒÔÏ Web Õ¾µãÉ쵀 PVU ±í¸ñÖж¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html£©¼°Îª±¾³ÌÐòÌṩµÄ´¦ÀíÆ÷µÄÊýÁ¿¡£IBM ¼ÌÐø½«ÓÃÓÚ»ñÈ¡»ùÓÚ PVU Ðí¿ÉµÄ¡°Ò»¸ö´¦ÀíÆ÷¡±¶¨ÒåΪÔÚÒ»¸öоƬÉϵÄÿ¸ö´¦ÀíÆ÷ºËÐÄ¡£ÀýÈ磬˫ºË´¦ÀíÆ÷оƬӵÓÐÁ½¸ö´¦ÀíÆ÷ºË¡£ + +±»Ðí¿É·½¿ÉÒÔ¸ù¾Ý¡°Passport Advantage ´Î¼¶ÈÝÁ¿Ðí¿ÉÌõ¿î¡±£¨²ÎÔÄÒÔÏ Web Ò³Ãæ£©£¬Ê¹Óá°È«ÈÝÁ¿¡±Ðí¿É»ò¡°ÐéÄ⻯ÈÝÁ¿¡±£¨´Î¼¶ÈÝÁ¿£©Ðí¿É²¿Êð±¾³ÌÐò¡£Èç¹ûʹÓá°È«ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñÈ¡×ã¹»µÄ PVU ȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄÎïÀíÓ²¼þ»·¾³ÖеÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË*£¬³ýÁËÄÇЩ±¾³ÌÐòÒÑÓÀ¾Ã³ýÈ¥µÄ·þÎñÆ÷¡£Èç¹ûʹÓá°ÐéÄ⻯ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñµÃ×ã¹»µÄȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË£¬Èç¸ù¾ÝÒÔÏÂÕ¾µãµÄ¡°ÐéÄ⻯ÈÝÁ¿Ðí¿É¼ÆÊý¹æÔò¡±µÄ¶¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡£ + +* ÒѼ¤»î´¦ÀíÆ÷ºËÊÇ¿ÉÔÚÎïÀí»òÐéÄâ·þÎñÆ÷ÖÐʹÓõĴ¦ÀíÆ÷ºË£¬Óë´¦ÀíÆ÷ºËµÄ¼ÆËãÄÜÁ¦ÊÇ·ñ¿ÉÄÜ»òʵ¼ÊÉÏͨ¹ýÐéÄ⻯¼¼Êõ¡¢²Ù×÷ϵͳÃüÁî¡¢BIOS ÉèÖûòÀàËÆÔ¼Êø¶øÊܵ½ÏÞÖÆÎ޹ء£ + +³ÌÐòÌØ±ðÌõ¿î + +¿ÕÏдý»úÅäÖà + +³öÓÚ±¾²¿·ÖµÄÄ¿µÄ£¬¡°¿ÕÏдý»ú¡±ÅäÖÃÊÇÖ¸½«±¾³ÌÐòµÄ¸±±¾°²×°ÔÚ¹¹³É¸ß¿ÉÓÃÐÔ½â¾ö·½°¸Ò»²¿·ÖµÄ·þÎñÆ÷ÉÏ£¬Èç¹û»î¶¯·þÎñÆ÷Éϱ¾³ÌÐòµÄ¸±±¾²»ÔÙ¿ÉÓ㬱¾³ÌÐò½«¹ÊÕÏ×ªÒÆÖÁ¸Ã·þÎñÆ÷¡£½öµ±·þÎñÆ÷רÃÅÓÃÓÚ¶Ô¹ÊÕÏ×ªÒÆ³¡¾°Æð°ïÖú×÷ÓõĹÜÀí²Ù×÷ʱ£¬²Å±»ÊÓΪ¡°¿ÕÏС±£¬Ö±ÖÁ·¢Éú¹ÊÕÏ×ªÒÆ¡£ + +²»µÃ½«±¾³ÌÐò°²×°ÔÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬³ý·Ç»ñµÃÁËÏàÓ¦µÄÐí¿É¡£ + +Èç¹ûÔÚ¾ßÓжàʵÀý¶ÓÁйÜÀíÆ÷¹¦ÄܵĿÕÏдý»úÅäÖÃÖÐʹÓñ¾³ÌÐò£¬ÄÇô±¾³ÌÐòµÄÒ»¸ö¸±±¾¿ÉÒÔ³öÓÚ±¸·ÝÄ¿µÄ´æÁôÓÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬²¢ÇÒÒÑÆô¶¯£¬µ«±ØÐë±£³Ö¡°¿ÕÏС±×´Ì¬£¬²»ÓÃÓÚÖ´ÐÐÈκÎÀàÐ͵ÄÉú²ú¹¤×÷£¬³ý·Ç»î¶¯·þÎñÆ÷¹ÊÕÏ×ªÒÆÖÁ¿ÕÏдý»ú·þÎñÆ÷£¬ÔÚÕâÖÖÇé¿öÏ£¬¿ÕÏдý»ú¸±±¾¿ÉÓÃÓÚÔÚ¹ÊÕÏ×ªÒÆÆÚ¼äÖ´ÐÐÉú²ú¹¤×÷¡£ + +Èç¹ûÔÚ¾ßÓÐÆäËû¸ß¿ÉÓÃÐÔϵͳµÄ¿ÕÏдý»úÅäÖÃÖÐʹÓñ¾³ÌÐò£¬ÄÇô±¾³ÌÐòµÄÒ»¸ö¸±±¾¿ÉÒÔ³öÓÚ±¸·ÝÄ¿µÄ´æÁôÓÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬µ«Î´Æô¶¯£¨Òò´Ë²»ÓÃÓÚÖ´ÐÐÈκÎÀàÐ͵ÄÉú²ú¹¤×÷£©£¬µ«Èç¹û»î¶¯·þÎñÆ÷·¢Éú¹ÊÕÏ£¬¸ß¿ÉÓÃÐÔ×é¼þ»á×Ô¶¯½«ÆäÆô¶¯£¬ÔÚÕâÖÖÇé¿öÏ£¬¿ÕÏдý»ú¸±±¾¿ÉÓÃÓÚÔÚ¹ÊÕÏ×ªÒÆÆÚ¼äÖ´ÐÐÉú²ú¹¤×÷¡£ + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +ÖØÒªÐÅÏ¢£ºÇë×ÐϸÔĶÁ + +ÏÂÃæÌṩÁËÁ½¸öÐí¿ÉЭÒé¡£ + +1. IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé +2. IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé + +Èç¹û±»Ðí¿É·½ÎªÁËÉú²úÐÔʹÓÃÄ¿µÄ£¨¶ø²»ÊÇΪÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£©»ñµÃ±¾³ÌÐò£¬µ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½½ÓÊÜ IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +Èç¹û±»Ðí¿É·½ÎªÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£¨Í³³ÆÎª¡°ÆÀ¹À¡±£©Ä¿µÄ»ñµÃ±¾³ÌÐò£ºµ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½Í¬Ê±½ÓÊÜ£¨i£©IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒ飨¡°ÆÀ¹ÀÐí¿É¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ģ»ºÍ£¨ii£©IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +ÔÚ±»Ðí¿É·½µÄÆÀ¹ÀÆÚ¼ä½«ÊÊÓá°ÆÀ¹ÀÐí¿É¡±¡£ + +Èç¹û±»Ðí¿É·½Í¨¹ýÇ©Êð²É¹ºÐ­Ò飨ÀýÈ磬IBM International Passport Advantage ЭÒé»ò IBM Passport Advantage Express ЭÒ飩ÔÚÆÀ¹ÀÖ®ºóÑ¡Ôñ±£Áô±¾³ÌÐò£¨»òÕß»ñµÃ¸½¼ÓµÄ±¾³ÌÐò¸±±¾¹©ÆÀ¹ÀÖ®ºóʹÓã©£¬IPLA ½«×Ô¶¯ÊÊÓᣠ+ +¡°ÆÀ¹ÀÐí¿É¡±ºÍ IPLA ²»ÄÜͬʱÓÐЧ£»Á½ÕßÖ®¼ä²»ÄÜ»¥ÏàÐ޸쬲¢Çұ˴˶ÀÁ¢¡£ + +ÕâÁ½¸öÐí¿ÉЭÒéÖÐÿ¸öЭÒéµÄÍêÕûÎı¾ÈçÏ¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé (Z125-5543-05) ÊÊÓᣠ+ +³ÌÐòÃû³Æ£ºIBM MQ Advanced Message Security V9.0.1 +³ÌÐòºÅ£ºEvaluation + +³ÌÐòÃû³Æ£ºIBM MQ Advanced Message Security Idle Standby V9.0.1 +³ÌÐòºÅ£ºEvaluation + +³ÌÐòÃû³Æ£ºIBM MQ Telemetry V9.0.1 +³ÌÐòºÅ£ºEvaluation + +ÆÀ¹ÀÆÚÏÞ + +ÆÀ¹ÀÆÚÏÞÓÚ±»Ðí¿É·½Í¬ÒⱾЭÒéÌõ¿îÖ®ÈÕ¿ªÊ¼£¬ÓÚ 90 ÈÕºóÖÕÖ¹¡£ + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + + + +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé (Z125-3301-14) ÊÊÓᣠ+ +³ÌÐòÃû³Æ£ºIBM MQ Advanced Message Security V9.0.1 +³ÌÐòºÅ£º5724-H72 + +³ÌÐòÃû³Æ£ºIBM MQ Advanced Message Security Idle Standby V9.0.1 +³ÌÐòºÅ£º5724-H72 + +³ÌÐòÃû³Æ£ºIBM MQ Telemetry V9.0.1 +³ÌÐòºÅ£º5724-H72 + +¸ù¾Ý¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©ºÍ±¾Ðí¿ÉÐÅÏ¢ÖеÄÃèÊö£¬IBM ÊÚÓè±»Ðí¿É·½ÓÐÏÞµÄʹÓñ¾³ÌÐòµÄȨÀû¡£±¾È¨ÏÞ½öÏÞÓÚÊÚȨʹÓü¶±ð£¬Èç±»Ðí¿É·½¸ù¾Ý¡°È¨ÀûÖ¤Ã÷¡±Ö§¸¶µÄ´¦ÀíÆ÷¼ÛÖµµ¥Ôª£¨¡°PVU¡±£©¡¢×ÊÔ´¼ÛÖµµ¥Ôª£¨¡°RVU¡±£©¡¢¼ÛÖµµ¥Ôª(¡°VU¡±£©»òÆäËûÖ¸¶¨Ê¹Óü¶±ð¡£±»Ðí¿É·½µÄʹÓû¹¿ÉÄÜÏÞ¶¨ÓÚÌØ¶¨µÄ»úÆ÷£¬»ò½ö×÷Ϊ֧³Ö³ÌÐò£¬»ò×ñÑ­ÆäËûÏÞÖÆ¡£ÓÉÓÚ±»Ðí¿É·½Î´¹ºÂò³ÌÐòµÄÕû¸ö¾­¼Ã¼ÛÖµ£¬Òò´ËÔÚδ֧¸¶¶îÍâ·ÑÓÃʱ£¬²»ÔÊÐíʹÓÃÆäËûÏî¡£´ËÍ⣬³ý·ÇÊÊÓõÄЭÒéÖÐÃ÷È·±íÃ÷±»Ðí¿É·½»ñµÃʹÓñ¾³ÌÐòµÄÊÚȨ£¬·ñÔò±»Ðí¿É·½ÎÞȨʹÓñ¾³ÌÐòÏòÈκεÚÈý·½ÌṩÉÌÒµ IT ·þÎñ¡¢ÌṩÉÌÒµÍйܻòʱ¼ä¹²Ïí£¬»òÔÙÐí¿É¡¢³ö×â»ò×âÁÞ±¾³ÌÐò¡£Í¨¹ýÖ§¸¶¶îÍâ·ÑÓûò¸ù¾ÝÆäËû»ò²¹³äÌõ¿î£¬±»Ðí¿É·½¿ÉÄÜ»ñµÃ¸ü¶àȨÀû¡£IBM ±£Áô¾ö¶¨ÊÇ·ñÏò±»Ðí¿É·½Ìṩ´ËÀà¶îÍâȨÀûµÄȨÀû¡£ + +±¾³ÌÐòµÄ¹æ¸ñÏê¼û±¾³ÌÐò¹«¸æº¯µÄͳһÃèÊöºÍ¼¼ÊõÐÅÏ¢²¿·Ö¡£ + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + +°²×° + +¡°°²×°¡±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£Ò»¸ö°²×°ÊÇÎïÀí»òÐéÄâÓ²ÅÌÉÏ¿ÉÓÃÓÚÔÚ¼ÆËã»úÉÏÖ´ÐеÄÒ»¸ö±¾³ÌÐòÒѰ²×°¸±±¾¡£±»Ðí¿É·½±ØÐëΪ±¾³ÌÐòµÄÿ¸ö°²×°»ñµÃÒ»·ÝȨÀû¡£ + +´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU) + +¡°´¦ÀíÆ÷¼ÛÖµµ¥Ôª (PVU)¡±ÊÇ»ñÈ¡±¾³ÌÐòÐí¿ÉËùʹÓõļÆÁ¿µ¥Î»¡£±ØÐèµÄ PVU ȨÀûµÄÊýÁ¿»ùÓÚ´¦ÀíÆ÷¼¼Êõ¶¨Ò壨°´ÕÕ´¦ÀíÆ÷¹©Ó¦ÉÌ¡¢Æ·ÅÆ¡¢ÀàÐͺÍÐͺÅÔÚÒÔÏ Web Õ¾µãÉ쵀 PVU ±í¸ñÖж¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html£©¼°Îª±¾³ÌÐòÌṩµÄ´¦ÀíÆ÷µÄÊýÁ¿¡£IBM ¼ÌÐø½«ÓÃÓÚ»ñÈ¡»ùÓÚ PVU Ðí¿ÉµÄ¡°Ò»¸ö´¦ÀíÆ÷¡±¶¨ÒåΪÔÚÒ»¸öоƬÉϵÄÿ¸ö´¦ÀíÆ÷ºËÐÄ¡£ÀýÈ磬˫ºË´¦ÀíÆ÷оƬӵÓÐÁ½¸ö´¦ÀíÆ÷ºË¡£ + +±»Ðí¿É·½¿ÉÒÔ¸ù¾Ý¡°Passport Advantage ´Î¼¶ÈÝÁ¿Ðí¿ÉÌõ¿î¡±£¨²ÎÔÄÒÔÏ Web Ò³Ãæ£©£¬Ê¹Óá°È«ÈÝÁ¿¡±Ðí¿É»ò¡°ÐéÄ⻯ÈÝÁ¿¡±£¨´Î¼¶ÈÝÁ¿£©Ðí¿É²¿Êð±¾³ÌÐò¡£Èç¹ûʹÓá°È«ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñÈ¡×ã¹»µÄ PVU ȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄÎïÀíÓ²¼þ»·¾³ÖеÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË*£¬³ýÁËÄÇЩ±¾³ÌÐòÒÑÓÀ¾Ã³ýÈ¥µÄ·þÎñÆ÷¡£Èç¹ûʹÓá°ÐéÄ⻯ÈÝÁ¿¡±Ðí¿É£¬ÄÇô±»Ðí¿É·½±ØÐë»ñµÃ×ã¹»µÄȨÀû£¬ÒÔ¸²¸Ç±¾³ÌÐò¿ÉʹÓûò±¾³ÌÐò¹ÜÀíµÄËùÓÐÒѼ¤»î´¦ÀíÆ÷ºË£¬Èç¸ù¾ÝÒÔÏÂÕ¾µãµÄ¡°ÐéÄ⻯ÈÝÁ¿Ðí¿É¼ÆÊý¹æÔò¡±µÄ¶¨Ò壺http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡£ + +* ÒѼ¤»î´¦ÀíÆ÷ºËÊÇ¿ÉÔÚÎïÀí»òÐéÄâ·þÎñÆ÷ÖÐʹÓõĴ¦ÀíÆ÷ºË£¬Óë´¦ÀíÆ÷ºËµÄ¼ÆËãÄÜÁ¦ÊÇ·ñ¿ÉÄÜ»òʵ¼ÊÉÏͨ¹ýÐéÄ⻯¼¼Êõ¡¢²Ù×÷ϵͳÃüÁî¡¢BIOS ÉèÖûòÀàËÆÔ¼Êø¶øÊܵ½ÏÞÖÆÎ޹ء£ + +³ÌÐòÌØ±ðÌõ¿î + +¿ÕÏдý»úÅäÖà + +³öÓÚ±¾²¿·ÖµÄÄ¿µÄ£¬¡°¿ÕÏдý»ú¡±ÅäÖÃÊÇÖ¸½«±¾³ÌÐòµÄ¸±±¾°²×°ÔÚ¹¹³É¸ß¿ÉÓÃÐÔ½â¾ö·½°¸Ò»²¿·ÖµÄ·þÎñÆ÷ÉÏ£¬Èç¹û»î¶¯·þÎñÆ÷Éϱ¾³ÌÐòµÄ¸±±¾²»ÔÙ¿ÉÓ㬱¾³ÌÐò½«¹ÊÕÏ×ªÒÆÖÁ¸Ã·þÎñÆ÷¡£½öµ±·þÎñÆ÷רÃÅÓÃÓÚ¶Ô¹ÊÕÏ×ªÒÆ³¡¾°Æð°ïÖú×÷ÓõĹÜÀí²Ù×÷ʱ£¬²Å±»ÊÓΪ¡°¿ÕÏС±£¬Ö±ÖÁ·¢Éú¹ÊÕÏ×ªÒÆ¡£ + +²»µÃ½«±¾³ÌÐò°²×°ÔÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬³ý·Ç»ñµÃÁËÏàÓ¦µÄÐí¿É¡£ + +Èç¹ûÔÚ¾ßÓжàʵÀý¶ÓÁйÜÀíÆ÷¹¦ÄܵĿÕÏдý»úÅäÖÃÖÐʹÓñ¾³ÌÐò£¬ÄÇô±¾³ÌÐòµÄÒ»¸ö¸±±¾¿ÉÒÔ³öÓÚ±¸·ÝÄ¿µÄ´æÁôÓÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬²¢ÇÒÒÑÆô¶¯£¬µ«±ØÐë±£³Ö¡°¿ÕÏС±×´Ì¬£¬²»ÓÃÓÚÖ´ÐÐÈκÎÀàÐ͵ÄÉú²ú¹¤×÷£¬³ý·Ç»î¶¯·þÎñÆ÷¹ÊÕÏ×ªÒÆÖÁ¿ÕÏдý»ú·þÎñÆ÷£¬ÔÚÕâÖÖÇé¿öÏ£¬¿ÕÏдý»ú¸±±¾¿ÉÓÃÓÚÔÚ¹ÊÕÏ×ªÒÆÆÚ¼äÖ´ÐÐÉú²ú¹¤×÷¡£ + +Èç¹ûÔÚ¾ßÓÐÆäËû¸ß¿ÉÓÃÐÔϵͳµÄ¿ÕÏдý»úÅäÖÃÖÐʹÓñ¾³ÌÐò£¬ÄÇô±¾³ÌÐòµÄÒ»¸ö¸±±¾¿ÉÒÔ³öÓÚ±¸·ÝÄ¿µÄ´æÁôÓÚ¿ÕÏдý»ú·þÎñÆ÷ÉÏ£¬µ«Î´Æô¶¯£¨Òò´Ë²»ÓÃÓÚÖ´ÐÐÈκÎÀàÐ͵ÄÉú²ú¹¤×÷£©£¬µ«Èç¹û»î¶¯·þÎñÆ÷·¢Éú¹ÊÕÏ£¬¸ß¿ÉÓÃÐÔ×é¼þ»á×Ô¶¯½«ÆäÆô¶¯£¬ÔÚÕâÖÖÇé¿öÏ£¬¿ÕÏдý»ú¸±±¾¿ÉÓÃÓÚÔÚ¹ÊÕÏ×ªÒÆÆÚ¼äÖ´ÐÐÉú²ú¹¤×÷¡£ + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +ÖØÒªÐÅÏ¢£ºÇë×ÐϸÔĶÁ + +ÏÂÃæÌṩÁËÁ½¸öÐí¿ÉЭÒé¡£ + +1. IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé +2. IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒé + +Èç¹û±»Ðí¿É·½ÎªÁËÉú²úÐÔʹÓÃÄ¿µÄ£¨¶ø²»ÊÇΪÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£©»ñµÃ±¾³ÌÐò£¬µ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½½ÓÊÜ IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +Èç¹û±»Ðí¿É·½ÎªÁËÆÀ¹À¡¢²âÊÔ¡¢ÊÔÓá°ÏÈÊÔºóÂò¡±»òÑÝʾ£¨Í³³ÆÎª¡°ÆÀ¹À¡±£©Ä¿µÄ»ñµÃ±¾³ÌÐò£ºµ¥»÷ÏÂÃæµÄ¡°½ÓÊÜ¡±°´Å¥¼´±íʾ±»Ðí¿É·½Í¬Ê±½ÓÊÜ£¨i£©IBM ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒ飨¡°ÆÀ¹ÀÐí¿É¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ģ»ºÍ£¨ii£©IBM ¹ú¼Ê³ÌÐòÐí¿ÉЭÒ飨¡°IPLA¡±£©£¬ÇÒ²»×÷ÈκÎÐ޸ġ£ + +ÔÚ±»Ðí¿É·½µÄÆÀ¹ÀÆÚ¼ä½«ÊÊÓá°ÆÀ¹ÀÐí¿É¡±¡£ + +Èç¹û±»Ðí¿É·½Í¨¹ýÇ©Êð²É¹ºÐ­Ò飨ÀýÈ磬IBM International Passport Advantage ЭÒé»ò IBM Passport Advantage Express ЭÒ飩ÔÚÆÀ¹ÀÖ®ºóÑ¡Ôñ±£Áô±¾³ÌÐò£¨»òÕß»ñµÃ¸½¼ÓµÄ±¾³ÌÐò¸±±¾¹©ÆÀ¹ÀÖ®ºóʹÓã©£¬IPLA ½«×Ô¶¯ÊÊÓᣠ+ +¡°ÆÀ¹ÀÐí¿É¡±ºÍ IPLA ²»ÄÜͬʱÓÐЧ£»Á½ÕßÖ®¼ä²»ÄÜ»¥ÏàÐ޸쬲¢Çұ˴˶ÀÁ¢¡£ + +ÕâÁ½¸öÐí¿ÉЭÒéÖÐÿ¸öЭÒéµÄÍêÕûÎı¾ÈçÏ¡£ + + +ÆÀ¹À³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé + +µÚÒ»²¿·Ö - ͨÓÃÌõ¿î + +ÏÂÔØ¡¢°²×°¡¢¸´ÖÆ¡¢·ÃÎÊ¡¢µ¥»÷¡°½ÓÊÜ¡±°´Å¥£¬»òÒÔÆäËû·½Ê½Ê¹ÓóÌÐò£¬¼´±íÃ÷±»Ðí¿É·½Í¬ÒⱾЭÒéµÄÌõ¿î¡£Èç¹ûÄú´ú±í±»Ðí¿É·½½ÓÊÜ´ËÀàÌõ¿î£¬ÔòÄú³ÂÊö²¢±£Ö¤ÄúÓµÓÐÍêÈ«µÄÊÚȨÒÔʹ¸Ã±»Ðí¿É·½½ÓÊÜ´ËÀàÌõ¿îµÄÔ¼Êø¡£Èç¹ûÄú²»Í¬Òâ´ËÀàÌõ¿î£¬ + +* ÔòÇëÎðÏÂÔØ¡¢°²×°¡¢¸´ÖÆ¡¢·ÃÎÊ¡¢µ¥»÷¡°½ÓÊÜ¡±°´Å¥£¬»òʹÓóÌÐò£»²¢ÇÒ + +* Á¢¼´½«Î´Ê¹ÓõĽéÖʺÍÎĵµÍË»¹ÖÁÌṩ·½¡£Èç¹ûÏÂÔØÁ˳ÌÐò£¬ÄÇôÇëÏú»Ù³ÌÐòµÄËùÓи±±¾¡£ + +1. ¶¨Òå + +¡°ÊÚȨʹÓá± - ±»Ðí¿É·½±»ÊÚȨִÐлòÔËÐгÌÐòµÄÖ¸¶¨¼¶±ð¡£¸Ã¼¶±ð¿É°´Óû§Êý¡¢°ÙÍò¸ö·þÎñµ¥Î»£¨MSUs£©¡¢´¦ÀíÆ÷¼ÛÖµµ¥Ôª£¨PVUs£©ºÍÆäËû IBM Ö¸¶¨µÄʹÓü¶±ð½øÐмÆÁ¿¡£ + +¡°IBM¡± - ¹ú¼ÊÉÌÒµ»úÆ÷¹«Ë¾£¨International Business Machines Corporation£©»òÆäÈÎÒ»×Ó¹«Ë¾¡£ + +¡°Ðí¿ÉÐÅÏ¢¡±£¨¡°LI¡±£© - ÌṩÓëÌØ¶¨³ÌÐòÏà¹ØµÄÐÅÏ¢»òÈκθ½¼ÓÌõ¿îµÄÎļþ¡£±¾³ÌÐòµÄ LI ¿ÉÒÔͨ¹ýʹÓÃϵͳÃüÁîÔÚ³ÌÐòĿ¼ÏÂÕÒµ½£¬»òÕß×÷ΪÊÖ²áÓë³ÌÐòÒ»ÆðÌṩ¡£ + +¡°³ÌÐò¡± - ÏÂÁи÷Ï°üÀ¨Ô­¼þ¼°ÆäËùÓеÄÍêÕûµÄ»ò²¿·ÖµÄ¸±±¾£º1£©»úÆ÷¿É¶ÁµÄÖ¸Áî»òÊý¾Ý£»2£©×é¼þ¡¢ÎļþºÍÄ£¿é£»3£©ÒôÏñÄÚÈÝ£¨ÀýÈçͼÏñ¡¢Îı¾¡¢Â¼Òô»òͼƬ£©£»ÒÔ¼° 4£©Ïà¹ØµÄÐí¿É²ÄÁÏ£¨±ÈÈçÃÜÔ¿ºÍÎĵµ£©¡£ + +2. ЭÒé½á¹¹ + +±¾Ð­Òé°üÀ¨£ºµÚÒ»²¿·Ö - ͨÓÃÌõ¿î¡¢µÚ¶þ²¿·Ö - ¹ú¼Ò»òµØÇøÌرðÌõ¿î£¨ÈçÓУ©ºÍ LI£¬¹¹³É±»Ðí¿É·½Óë IBM Ö®¼äÓйسÌÐòʹÓõÄÍêÕûЭÒé¡£±¾Ð­ÒéÌæ´ú±»Ðí¿É·½Óë IBM Ö®¼äÓйسÌÐòʹÓõÄÈκÎÏÈǰµÄ¿ÚÍ·»òÊéÃæÍ¨ÐÅ¡£µÚ¶þ²¿·ÖµÄÌõ¿î¿ÉÄÜÌæ´ú»òÐ޸ĵÚÒ»²¿·ÖµÄÏàÓ¦ÄÚÈÝ¡£ÈçÓгåÍ»£¬LI µÄÌõ¿îÓÅÏÈÓÚÕâÁ½²¿·ÖµÄ¹æ¶¨¡£ + +3. Ðí¿ÉÊÚÓè + +³ÌÐòÓÉ IBM »ò IBM ¹©Ó¦ÉÌËùÓУ¬ÊܰæÈ¨±£»¤¡£³ÌÐòϵÐí¿ÉʹÓ㬶ø·Ç³öÊÛ¡£ + +IBM ÊÚÓè±»Ðí¿É·½Ö´ÐÐÒÔϲÙ×÷µÄÊÜÏÞÖÆ¡¢·ÇרÓкͲ»¿ÉתÈõÄÐí¿É£¬ÒԱ㱻Ðí¿É·½£º1£©ÔÚ LI Öй涨µÄÊÚȨʹÓü¶±ðÄÚ½öΪÁËÄÚ²¿ÆÀ¹À¡¢²âÊÔ»òչʾĿµÄÒÔÊÔÓõķ½Ê½ÔÚÆÀ¹ÀÆÚÄÚÏÂÔØ¡¢°²×°ºÍÊÔÓñ¾³ÌÐò£»2£©ÖÆ×÷ºÍ°²×°ºÏÀíÊýÁ¿µÄ¸±±¾£¬ÒÔÖ§³Ö´ËÀàÊÚȨʹÓã¬3£©ÖÆ×÷±¸·Ý¸±±¾£¬Ç°ÌáÊÇ + +a. ±»Ðí¿É·½ÒѺϷ¨»ñÈ¡³ÌÐò£¬²¢×ñÊØ±¾Ð­ÒéµÄÌõ¿î£» + +b. ²»Ö´Ðб¸·Ý¸±±¾£¬³ý·Ç±»±¸·ÝµÄ³ÌÐòÎÞ·¨Ö´ÐУ» + +c. ±»Ðí¿É·½ÐëÔÚ³ÌÐòµÄÿһÍêÕû¸±±¾»ò²¿·Ö¸±±¾Öи´ÖÆËùÓеİæÈ¨ÉùÃ÷ºÍÆäËûËùÓÐȨ˵Ã÷£» + +d. ±»Ðí¿É·½Ðë±£Áô±¾³ÌÐòËùÓи±±¾µÄ¼Ç¼£¬ÒÔ¼°È·±£Ê¹ÓóÌÐòµÄËùÓÐÈËÔ±£¨²»ÂÛÊDZ¾µØ»òÔ¶³Ì·ÃÎÊ£©¶¼ 1£©½öΪ±»Ðí¿É·½µÄÀûÒæÊ¹ÓóÌÐò£»ÒÔ¼° 2£©×ñÊØ±¾Ð­ÒéµÄÌõ¿î£» + +e. ±»Ðí¿É·½²»µÃ 1£©½«±¾³ÌÐòÓÃÓÚÉú²úÓÃ;»òÒÔÆäËû·½Ê½Ê¹Óᢸ´ÖÆ¡¢Ð޸Ļò·Ö·¢³ÌÐò£¬³ý·Ç±¾Ð­ÒéÃ÷È·Ðí¿É£»2£©¶Ô±¾³ÌÐò½øÐз´»ã±à¡¢·´±àÒë»òÒÔÆäËû·½Ê½·­Òë»ò·´Ïò¹¤³Ì£»µ«·¨ÂÉÃ÷È·Ðí¿ÉÇÒ²»µÃÒÔÔ¼¶¨·ÅÆúÕß³ýÍ⣻3£©¶ÀÁ¢ÓÚ³ÌÐò¶øµ¥¶ÀʹÓóÌÐò×é¼þ¡¢Îļþ¡¢Ä£¿é¡¢ÒôÏñÄÚÈÝ»òÏà¹ØÐí¿É²ÄÁÏ£»4£©ÔÙÐí¿É¡¢³ö×â»ò×âÁÞ³ÌÐò£»»òÕß 5£©½«³ÌÐòÓÃÓÚÉÌÒµÓ¦ÓóÌÐòÍйܣ»²¢ÇÒ + +f. Èç¹û±»Ðí¿É·½»ñÈ¡±¾³ÌÐò×÷Ϊ֧³Ö³ÌÐò£¬ÄÇô±»Ðí¿É·½Ö»Äܽ«±¾³ÌÐòÓÃÓÚÖ§³ÖÖ÷³ÌÐò£¬²¢×ñÊØÖ÷³ÌÐòÐí¿ÉÖеÄÈκÎÏÞÖÆÌõ¿î¡£»òÕߣ¬Èç¹û±»Ðí¿É·½»ñÈ¡±¾³ÌÐò×÷ΪÖ÷³ÌÐò£¬ÄÇô±»Ðí¿É·½Ö»Äܽ«ËùÓÐÖ§³Ö³ÌÐòÓÃÓÚÖ§³Ö±¾Ö÷³ÌÐò£¬²¢×ñÊØ±¾Ð­ÒéÖеÄÈκÎÏÞÖÆÌõ¿î¡£±¾ f ÏîÖеġ°Ö§³Ö³ÌÐò¡±ÊÇÊôÓÚÁíÍâÒ»¸ö IBM ³ÌÐò£¨¡°Ö÷³ÌÐò¡±£©µÄÒ»²¿·ÖµÄ³ÌÐò£¬²¢ÇÒÔÚ¡°Ö÷³ÌÐò¡±µÄ LI Öб»±êʶΪ¡°Ö§³Ö³ÌÐò¡±¡££¨Òª»ñÈ¡²»´øÓÐÕâЩÏÞÖÆµÄ¡°Ö§³Ö³ÌÐò¡±µÄµ¥¶ÀÐí¿É£¬±»Ðí¿É·½Ó¦ÁªÏµÆä»ñÈ¡¡°Ö§³Ö³ÌÐò¡±µÄ¹©Ó¦·½¡££© + +´ËÐí¿ÉÊÊÓÃÓÚ±»Ðí¿É·½ÖÆ×÷µÄÿ·Ý³ÌÐò¸±±¾¡£ + +3.1 ¸üС¢ÐÞ¶©ºÍ²¹¶¡ + +±»Ðí¿É·½»ñµÃ³ÌÐòµÄ¸üС¢ÐÞ¶©»ò²¹¶¡Ê±£¬±»Ðí¿É·½Ðë½ÓÊÜÆä LI Öй涨µÄÊÊÓÃÓÚ´ËÀà¸üС¢ÐÞ¶©»ò²¹¶¡µÄÈκθ½¼Ó»ò²»Í¬µÄÌõ¿î¡£Èç¹ûδÌṩ¸½¼Ó»ò²»Í¬Ìõ¿î£¬ÄÇô¸üС¢ÐÞ¶©ºÍ²¹¶¡Ö»Ðè×ñÊØ±¾Ð­ÒéµÄ¹æ¶¨¡£Èç¹û³ÌÐò±»¸üÐÂÌæ»»£¬±»Ðí¿É·½Í¬ÒâÁ¢¼´Í£Ö¹¶Ô±»Ìæ»»³ÌÐòµÄʹÓᣠ+ +3.2 ÆÚÏÞºÍÖÕÖ¹ + +ÆÀ¹ÀÆÚ¿ªÊ¼ÓÚ±»Ðí¿É·½¶Ô±¾Ð­ÒéÌõ¿î±íʾͬÒâÖ®ÈÕ£¬²¢½áÊøÓÚÒÔÏÂÁ½ÕßÖеĽÏÔçÈÕÆÚ£º1£©IBM ÔÚÐí¿ÉÐÅÏ¢»ò½»Ò×ÎĵµÖÐÖ¸¶¨µÄ½áÊøÈÕÆÚ£¬»ò 2£©±¾³ÌÐò×ÔÉí×Ô¶¯½ûÓÃÖ®ÈÕ¡£±»Ðí¿É·½½«ÔÚÆÀ¹ÀÆÚ½áÊøµÄÊ®ÌìÖ®ÄÚÏú»Ù±¾³ÌÐòºÍÓñ¾³ÌÐòÖÆ×÷µÄËùÓи±±¾¡£Èç¹û IBM ÔÚ LI ÖÐÖ¸¶¨±»Ðí¿É·½¿ÉÒÔ±£Áô±¾³ÌÐò£¬²¢ÇÒ±»Ðí¿É·½Ñ¡ÔñÕâÑù×ö£¬ÄÇô±¾³ÌÐòÐèÒª×ñÊØ IBM ÁíÍâÏò±»Ðí¿É·½ÌṩµÄÐí¿ÉЭÒé¡£¶øÇÒÐèÒª½»ÄÉÒ»¶¨·ÑÓᣠ+ +Èç¹û±»Ðí¿É·½Î´ÄÜ×ñÊØ±¾Ð­ÒéÌõ¿î£¬Ôò IBM ¿ÉÒÔÖÕÖ¹±»Ðí¿É·½µÄÐí¿É¡£ Èç¹ûÐí¿ÉÓÉÓÚÈκÎÀíÓɱ»ÈÎÒâÒ»·½ÖÕÖ¹£¬±»Ðí¿É·½Í¬ÒâÁ¢¼´Í£Ö¹Ê¹Óò¢Ïú»Ù±»Ðí¿É·½ÖÆ×÷µÄ³ÌÐòµÄËùÓи±±¾¡£Èç¹û±¾Ð­ÒéµÄÈκÎÌõ¿îÒòÆäÐÔÖÊÖÂʹÆäÓÐЧÆÚ³¬³ö±¾Ð­ÒéÖÕÖ¹ÆÚÏÞ£¬ÄÇôÕâЩÌõ¿îÓ¦Ò»Ö±±£³ÖÓÐЧ£¬Ö±ÖÁÂÄÐÐÍê±Ï£¬²¢ÇÒÊÊÓÃÓÚË«·½¸÷×ԵļÌÈÎÕߺÍÊÜÈÃÈË¡£ + +±¾³ÌÐò¿ÉÄܰüº¬·ÀÖ¹ÔÚÆÀ¹ÀÆÚ½áÊøºó¼ÌÐøÊÔÓñ¾³ÌÐòµÄ½ûÓÃÉèÖᣱ»Ðí¿É·½Í¬Òâ²»ÆÆ»µ¸Ã½ûÓÃÉèÖûò±¾³ÌÐò¡£±»Ðí¿É·½Ó¦¸Ã²ÉȡԤ·À´ëÊ©À´·ÀÖ¹±¾³ÌÐò²»ÔÙÄܹ»Ê¹ÓÃʱ¿ÉÄÜ·¢ÉúµÄÈκÎÊý¾Ý¶ªÊ§¡£ + +4. ·ÑÓà + +ÆÀ¹ÀÆÚÄÚ±¾³ÌÐò¿ÉÒÔÃâ·ÑʹÓᣠ+ +5. ÎÞ±£Ö¤ + +³ýÁËÎÞ·¨ÅųýµÄÈκ稶¨±£Ö¤£¬IBM ²»×öÈκÎÓйر¾³ÌÐò»òÖ§³Ö£¨ÈçÓУ©µÄÃ÷ʾ»ò°µº¬µÄ±£Ö¤»òÌõ¼þ£¬°üÀ¨µ«²»ÏÞÓÚÈκΰµº¬µÄÓйØÊÊÏúÐÔ¡¢ÁîÈËÂúÒâµÄÖÊÁ¿¡¢ÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;¡¢ËùÓÐȨ¼°Èκβ»ÇÖȨµÄ±£Ö¤»òÌõ¼þ¡£ + +ijЩ¹ú¼Ò»ò˾·¨Ï½Çø²»ÔÊÐíÅųýÃ÷ʾµÄ»ò°µº¬µÄ±£Ö¤£¬Òò´ËÉÏÊö³ýÍâÌõ¿î¿ÉÄܲ¢²»ÊÊÓÃÓÚ±»Ðí¿É·½¡£ÔÚ´ËÇé¿öÏ£¬´ËÀà±£Ö¤½öÔÚ·¨ÂÉÒªÇóµÄ×î¶Ì±£Ö¤ÆÚÏÞÄÚÓÐЧ¡£Èκα£Ö¤ÔÚ±£ÐÞÆÚÏÞÖ®ºó½«²»ÔÙÊÊÓá£Ä³Ð©¹ú¼Ò»ò˾·¨Ï½Çø²»ÔÊÐíÏÞÖÆ°µº¬±£Ö¤µÄÆÚÏÞ£¬Òò´ËÉÏÊöÏÞÖÆ¿ÉÄܲ¢²»ÊÊÓÃÓÚ±»Ðí¿É·½¡£±»Ðí¿É·½¿ÉÄÜÓµÓÐÆäËûȨÀû£¬´ËÀàȨÀûÊÓ±»Ðí¿É·½ËùÔڵĹú¼Ò»ò˾·¨Ï½Çø¶ø¶¨¡£ + +±¾Ð¡½Ú 5 ÖеÄÃâÔðÉùÃ÷ºÍÅųýÌõ¿îͬÑùÊÊÓÃÓÚÈκΠIBM µÄ³ÌÐò¿ª·¢É̺͹©Ó¦ÉÌ¡£ + +·Ç IBM ³ÌÐòµÄÖÆÔìÉÌ¡¢¹©Ó¦ÉÌ»ò·¢²¼ÉÌ¿ÉÄÜÌṩÆä×Ô¼ºµÄ±£Ö¤¡£ + +IBM ²»ÌṩÈκÎÖ§³Ö£¬³ý·Ç IBM ÁíÐй涨¡£´ËÇé¿öÏ£¬IBM ÌṩµÄÈκÎÖ§³ÖÊܱ¾Ð¡½Ú 5 ÖеÄÃâÔðÉùÃ÷ºÍÅųýÌõ¿îµÄÔ¼Êø¡£ + +6. ±»Ðí¿É·½Êý¾ÝºÍÊý¾Ý¿â + +Ϊ°ïÖú±»Ðí¿É·½È·¶¨³ÌÐòÎÊÌâµÄ¸ùÔ´£¬IBM ¿ÉÄÜÒªÇó±»Ðí¿É·½ 1£©ÔÊÐí IBM Ô¶³Ì·ÃÎʱ»Ðí¿É·½µÄϵͳ£¬»ò 2£©Ïò IBM ·¢Ëͱ»Ðí¿É·½µÄÐÅÏ¢ºÍϵͳÊý¾Ý¡£µ«ÊÇ£¬IBM ûÓÐÒåÎñÌṩ´ËÀà°ïÖú£¬³ý·Ç IBM ºÍ±»Ðí¿É·½Ç©¶©Á˵¥¶ÀµÄÊéÃæÐ­Ò飬¹æ¶¨ IBM ÐëÏò±»Ðí¿É·½Ìṩ³¬³öÔÚ±¾Ð­ÒéÏ IBM ÒåÎñµÄÖ§³ÖÀàÐÍ¡£ÈκÎÇé¿öÏ£¬IBM ½«Ê¹ÓùØÓÚ´íÎóºÍÎÊÌâµÄÐÅÏ¢À´¸ÄÉÆÆä²úÆ·ºÍ·þÎñ£¬²¢°ïÖúÌṩÏà¹ØµÄÖ§³Ö¡£ÎªÁËÕâЩĿµÄ£¬IBM ¿ÉÒÔʹÓà IBM ʵÌåºÍ·Ö°üÉÌ£¨°üÀ¨±»Ðí¿É·½ËùÔÚ¹ú¼Ò»òµØÇøÖ®ÍâµÄÒ»¸ö»ò¶à¸ö¹ú¼Ò»òµØÇøµÄ IBM ʵÌåºÍ·Ö°üÉÌ£©£¬²¢ÇÒ±»Ðí¿É·½ÊÚȨ IBM ÕâÑù×ö¡£ + +±»Ðí¿É·½ÈÔ¸ºÔð 1£©±»Ðí¿É·½Ìṩ¸ø IBM µÄÈκÎÊý¾Ý¿âµÄÊý¾ÝºÍÄÚÈÝ£»2£©Ñ¡ÔñºÍʵʩ¹ØÓÚÊý¾Ý·ÃÎÊ¡¢°²È«ÐÔ¡¢¼ÓÃÜ¡¢Ê¹Óúʹ«Ê䣨°üÀ¨ÈκοÉʶ±ð¸öÈËÉí·ÝµÄÐÅÏ¢£©£»ÒÔ¼° 3£©±¸·ÝºÍ»Ö¸´ÈκÎÊý¾Ý¿â¼°ÒÑ´æ´¢Êý¾Ý¡£±»Ðí¿É·½½«²»Ïò IBM ·¢ËÍÈκÎÊý¾ÝÐÎʽ»òÆäËûÐÎʽµÄ¿Éʶ±ð¸öÈËÉí·ÝµÄÐÅÏ¢»òÌṩ´ËÀàÐÅÏ¢µÄ·ÃÎÊ¡£Èç¹ûÓÉÓÚÏò IBM ´íÎó·¢ËÍ´ËÀàÐÅÏ¢»ò IBM ¶ªÊ§»ò͸¶´ËÀàÐÅÏ¢¶øÔì³ÉËðʧ£¬°üÀ¨ÈκεÚÈý·½Ë÷ÅâµÄËðʧ£¬ÄÇô±»Ðí¿É·½½«¸ºÔðÖ§¸¶ºÏÀíµÄ·ÑÓÃºÍÆäËû¿îÏî¡£ + +7. ÔðÈÎÏÞÖÆ + +µÚ 7 ²¿·Ö£¨ÔðÈÎÏÞÖÆ£©ÖеÄÏÞÖÆºÍ³ýÍâÔÚ²»µÃÒÔºÏͬ·ÅÆúȨÀûµÄÊÊÓ÷¨ÂÉδ×÷³ö½ûÖ¹ÐԹ涨µÄÏÞ¶ÈÄÚÍêÈ«ÊÊÓᣠ+ +7.1 IBM ¿ÉÄܳе£ÔðÈεÄÏîÄ¿ + +Èç¹û·¢ÉúÒòΪ IBM Î¥Ô¼»òÐë³Ðµ£ÆäËûÔðÈεÄÇé¿ö£¬±»Ðí¿É·½ÓÐȨҪÇó IBM Åâ³¥Ëðʧ¡£ÎÞÂÛ±»Ðí¿É·½ÒÔºÎÖÖÒÀ¾ÝÒªÇó IBM Åâ³¥Ëðʧ£¨°üÀ¨ÖØ´óÎ¥Ô¼¡¢¹ýʧ¡¢Ê§Êµ³ÂÊö»òÆäËûºÏÔ¼»òÇÖȨ·½ÃæµÄË÷Å⣩£¬IBM µÄÈ«²¿ÔðÈνöÏÞÓÚ 1£©ÈËÉíÉ˺¦£¨°üÀ¨ËÀÍö£©Ëðº¦Åâ³¥¡¢²»¶¯²úºÍÓÐÐζ¯²úµÄË𺦣¬ÒÔ¼° 2£©ÈÎºÎÆäËûʵ¼ÊÖ±½ÓËðº¦Åâ³¥£¬Åâ³¥¶î×î¸ßΪ 10,000 ÃÀÔª£¨»òµÈÖµµÄµ±µØ»õ±Ò£©¡£ + +´ËÔðÈÎÏÞÖÆÒ²ÊÊÓÃÓÚÈκΠIBM µÄ³ÌÐò¿ª·¢É̺͹©Ó¦ÉÌ¡£ÕâÊÇ IBM ÓëÆä³ÌÐò¿ª·¢É̺͹©Ó¦É̹²Í¬µÄ×î¸ßÅâ³¥ÏÞ¶î¡£ + +7.2 IBM ²»³Ðµ£ÔðÈεÄÏîÄ¿ + +ÎÞÂÛÈçºÎ£¬IBM ¼°Æä³ÌÐò¿ª·¢É̺͹©Ó¦É̾ù²»¶ÔÏÂÁи÷ÏÔ𣬼´Ê¹Òѱ»¸æÖªÆä·¢ÉúµÄ¿ÉÄÜÐÔ£º + +a. Êý¾ÝµÄ¶ªÊ§»òË𻵣» + +b. ÌØ±ðµÄ¡¢¸½´øµÄ¡¢³Í·£ÐԵĻò¼ä½ÓµÄËðº¦Åâ³¥£¬»òÈκκó¹ûÐÔ¾­¼ÃËðº¦Åâ³¥£»»ò + +c. ÀûÈó¡¢ÒµÎñ¡¢ÊÕÈë¡¢ÉÌÓþ»òÔ¤ÆÚ¿É½ÚÊ¡½ð¶îµÄËðʧ¡£ + +8. ºÏ¹æÐÔÑéÖ¤ + +´ËµÚ 8 ²¿·Ö£¨ºÏ¹æÐÔÑéÖ¤£©ÖУ¬¡°ÆÀ¹À³ÌÐòÌõ¿î¡±Ö¸µÄÊÇ 1£©±¾Ð­ÒéºÍ IBM ÌṩµÄÊÊÓõIJ¹³äЭÒéºÍ½»Ò×Îļþ£¬ÒÔ¼° 2£©IBM Èí¼þÕþ²ß£¬¸ÃÕþ²ß¿ÉÔÚ IBM Èí¼þÕþ²ßÕ¾µã£¨www.ibm.com/softwarepolicies£©ÉÏÕÒµ½£¬°üÀ¨µ«²»ÏÞÓÚ¹ØÓÚ±¸·Ý¡¢´Î¼¶ÈÝÁ¿¶¨¼ÛºÍÇ¨ÒÆµÄÕþ²ß¡£ + +µÚ 8 ²¿·Ö¹æ¶¨µÄȨÀûºÍÒåÎñÔÚ³ÌÐò±»Ðí¿É¸ø±»Ðí¿É·½µÄÆÚÏÞ¼°Ö®ºóÁ½ÄêÄÚ±£³ÖÓÐЧ¡£ + +8.1 ÑéÖ¤Á÷³Ì + +±»Ðí¿É·½Í¬Òâ´´½¨¡¢±£Áô²¢Ïò IBM ¼°ÆäÉó²éÔ±Ìṩ׼ȷÊéÃæ¼Ç¼¡¢ÏµÍ³¹¤¾ßÊä³ö½á¹ûÒÔ¼°ÆäËûϵͳÐÅÏ¢£¬ÉÏÊöÄÚÈÝÓ¦³ä·ÖÒÔ±ãÌṩ±»Ðí¿É·½¶ÔËùÓгÌÐòµÄʹÓþù·ûºÏÆÀ¹À³ÌÐòÌõ¿î£¨°üÀ¨µ«²»ÏÞÓÚËùÓÐ IBM ÊÊÓõÄÐí¿ÉºÍ¶¨¼ÛÉêÇëÌõ¿î£©µÄ¿ÉÉ󼯵ÄÑéÖ¤¡£±»Ðí¿É·½¸ºÔð 1£©È·±£ÆäʹÓò»³¬³öÊÚȨʹÓü¶±ð£¬ÒÔ 2£©Ê¼ÖÕ×ñÊØÆÀ¹À³ÌÐòÌõ¿î¡£ + +ÔÚÊÂÏȺÏÀí֪ͨµÄÇé¿öÏ£¬IBM ¿ÉÒÔÑéÖ¤±»Ðí¿É·½ÎªÁËÈκÎÄ¿µÄÔÚËùÓеĵصãÒÔ¼°ËùÓл·¾³ÖжÔÊÜÆÀ¹À³ÌÐòÌõ¿î¹ÜϽµÄ³ÌÐòµÄʹÓÃÊÇ·ñ×ñÊØÆÀ¹À³ÌÐòÌõ¿î¡£´ËÀàÑéÖ¤½«ÒÔ¾¡Á¿²»¸ÉÈű»Ðí¿É·½µÄÒµÎñµÄ·½Ê½½øÐУ¬²¢ÇÒ¿ÉÒÔÔÚÕý³£ÓªÒµÊ±¼äÔÚ±»Ðí¿É·½µÄ³¡Ëù½øÐС£IBM ¿ÉÒÔʹÓöÀÁ¢Éó²éԱЭÖú´ËÀàÑéÖ¤£¬µ«Ç°ÌáÊÇ IBM ºÍ´ËÉó²éԱǩ¶©Êʵ±µÄÊéÃæ±£ÃÜЭÒé¡£ + +8.2 ½â¾ö + +Èç¹ûÈκδËÀàÑéÖ¤ÏÔʾ±»Ðí¿É·½¶Ô³ÌÐòµÄʹÓó¬³öÆäÊÚȨʹÓü¶±ð»òÕßδ×ñÊØÆÀ¹À³ÌÐòÌõ¿î£¬ÄÇô IBM »áÊéÃæÍ¨Öª±»Ðí¿É·½¡£±»Ðí¿É·½Í¬ÒâÁ¢¼´Ïò IBM Ö§¸¶ IBM ÔÚ·¢Æ±ÖÐÖ¸¶¨µÄÒÔÏ·½Ãæ·ÑÓãº1£©ÈκδËÀ೬¼¶±ðʹÓã»2£©³¬¼¶±ðʹÓÃµÄÆÚ¼ä»òÁ½Ä꣨ÒԽ϶ÌÕßΪ׼£©¶Ô´ËÀ೬¼¶±ðʹÓõÄÖ§³Ö£»ÒÔ¼° 3£©´ËÑéÖ¤ËùÈ·¶¨µÄÈκζîÍâ·ÑÓÃºÍÆäËûÔðÈΡ£ + +9. µÚÈý·½ÉùÃ÷ + +±¾³ÌÐò¿ÉÄܰüº¬µÚÈý·½´úÂ룬ÕâЩ´úÂëÓÉ IBM£¬¶ø²»ÊǵÚÈý·½£¬¸ù¾Ý±¾Ð­ÒéÏò±»Ðí¿É·½Ðí¿É¡£Ë渽µÄµÚÈý·½´úÂëµÄÉùÃ÷£¨µÚÈý·½ÉùÃ÷£¬ÈçÓУ©½ö¹©¸æÖª±»Ðí¿É·½¡£ÕâЩÉùÃ÷¿ÉÒÔÔÚ³ÌÐòµÄÉùÃ÷ÎļþÖÐÕÒµ½¡£¹ØÓÚÈçºÎ»ñȡijЩµÚÈý·½´úÂëµÄÔ´´úÂëµÄÐÅÏ¢¿ÉÒÔÔÚµÚÈý·½ÉùÃ÷ÖÐÕÒµ½¡£Èç¹ûÔÚµÚÈý·½ÉùÃ÷ÖУ¬IBM ½«µÚÈý·½´úÂë±êʶΪ¡°¿ÉÐ޸ĵÚÈý·½´úÂ롱£¬ÄÇô IBM ÊÚȨ±»Ðí¿É·½ 1£©Ð޸ĿÉÐ޸ĵÚÈý·½´úÂ룬ÒÔ¼° 2£©¶ÔÓÚ¿ÉÐ޸ĵÚÈý·½´úÂëÖ±½Ó½Ó¿ÚµÄ³ÌÐòÄ£¿é½øÐз´Ïò¹¤³Ì£¬Ç°ÌáÊÇÕâÑù×öµÄΨһĿµÄÊÇΪÁ˶Ա»Ðí¿É·½¶Ô´ËÀàµÚÈý·½´úÂëµÄÐ޸ĽøÐе÷ÊÔ¡£IBM µÄ·þÎñºÍÖ§³ÖÒåÎñ£¨ÈçÓУ©½öÊÊÓÃÓÚδ¾­Ð޸ĵijÌÐò¡£ + +10. Ò»°ãÌõ¿î + +a. ±¾Ð­ÒéÖеÄÈκι涨¾ù²»Ó°ÏìÏû·ÑÕßÓµÓе쬶øÇÒ²»µÃÒÔЭÒéÐÎʽ¼ÓÒÔÏÞ¶¨»òÃâ³ýµÄ·¨¶¨È¨Àû¡£ + +b. Èç¹û±¾Ð­ÒéµÄÈÎÒ»Ìõ¿î¹æ¶¨±»È϶¨ÎÞЧ»ò²»¿ÉÖ´ÐУ¬±¾Ð­ÒéµÄÆäÓàÌõ¿îÒÀÈ»¼ÌÐøÍêÈ«ÓÐЧ¡£ + +c. ±»Ðí¿É·½±»½ûÖ¹³ö¿Ú±¾³ÌÐò¡£ + +d. ±»Ðí¿É·½ÊÚȨ¹ú¼ÊÉÌÒµ»úÆ÷¹«Ë¾£¨International Business Machines Corporation£©¼°Æä×Ó¹«Ë¾£¨ºÍÆä¼Ì³ÐÈ˺ÍÊÜÈÃÈË¡¢³Ð°üÉ̼° IBM ÒµÎñºÏ×÷»ï°é£©ÔÚÆä¿ªÕ¹ÒµÎñµÄÈκεط½´æ´¢ºÍʹÓñ»Ðí¿É·½µÄÒµÎñÁªÏµÐÅÏ¢£¬ÒÔ¿ªÕ¹Óë IBM ²úÆ·ºÍ·þÎñÏà¹ØµÄÒµÎñ»òÍÆ½ø IBM Óë±»Ðí¿É·½Ö®¼äµÄÒµÎñ¹ØÏµ¡£ + +e. ÔÚÖ÷ÕÅÁíÒ»·½Î´ÂÄÐб¾Ð­ÒéϵÄÒåÎñǰ£¬Ò»·½Ó¦ÔÊÐíÁíÒ»·½ÓкÏÀíµÄ»ú»áÀ´×ñÊØÐ­Ò顣˫·½½«Å¬Á¦Í¨¹ýÓѺ÷½Ê½½â¾öË«·½Ö®¼äÓ뱾ЭÒéÏà¹ØµÄËùÓÐÕùÒé¡¢·ÖÆçºÍȨÀûÖ÷ÕÅ¡£ + +f. ³ý·ÇÊÊÓ÷¨ÂÉÁíÓй涨¶øÎÞ·¨Ô¼¶¨·ÅÆú»òÏÞÖÆ£¬·ñÔò£º1£©ÈκÎÒ»·½¶¼²»»áÔÚÓ뱾ЭÒéÏà¹ØµÄË÷ÅâËßÒò·¢Éú³¬¹ýÁ½ÄêºóÌáÆðÈκÎÐÎʽµÄ·¨ÂÉËßËÏ£»ÒÔ¼° 2£©ÔÚ´ËÀàʱ¼äÏÞÖÆ¹ýÆÚÖ®ºóÈκδËÀàË÷ÅâÒÔ¼°ÓëË÷ÅâÏà¹ØµÄËùÓи÷×ÔµÄȨÀû¶¼½«¹éÓÚÎÞЧ¡£ + +g. ÎÞÂÛÊDZ»Ðí¿É·½»¹ÊÇ IBM£¬¾ù²»¶ÔÒòÆä²»¿É¿ØÖƵÄÔ­Òò¶øÎÞ·¨ÂÄÐеÄÈκÎÒåÎñ¸ºÔð¡£ + +h. ±¾Ð­ÒéûÓÐΪÈκεÚÈý·½ÉèÁ¢ËßËϵÄȨÀû»òËßÒò£¬IBM Ò²²»¶ÔÈκεÚÈý·½¶Ô±»Ðí¿É·½µÄË÷Å⸺Ô𣬵«ÈçÒÔÉÏµÚ 7.1 ×Ó½Ú £¨IBM ¿ÉÄܳе£ÔðÈεÄÏîÄ¿£©ËùÔÊÐíµÄ£¬¶ÔÓÚ IBM Ó¦¶ÔµÚÈý·½³Ðµ£·¨ÂÉÔðÈεÄÈËÉíÉ˺¦£¨°üÀ¨ËÀÍö£©»ò²»¶¯²ú»òÓÐÐζ¯²úµÄË÷Åâ³ýÍâ¡£ + +i. Ç©Êð±¾Ð­Òéʱ£¬Ë«·½¾ùδÒÀÀµÎ´ÔÚ±¾Ð­ÒéÖй涨µÄÈκγÂÊö£¬°üÀ¨µ«²»ÏÞÓÚ¹ØÓÚÒÔÏ·½ÃæµÄ³ÂÊö 1£©³ÌÐòµÄÐÔÄÜ»ò¹¦ÄÜ£¬ÒÔÉÏµÚ 5 ²¿·Ö£¨ÎÞ±£Ö¤Ìõ¿î£©Ã÷È·±£Ö¤µÄ³ýÍ⣻2£©ÆäËû·½µÄ¾­Ñé»ò½¨Ò飻»ò 3£©Èκα»Ðí¿É·½¿ÉÄÜʵÏֵĽá¹û»ò¿É½ÚÊ¡½ð¶î¡£ + +j. IBM ÒѾ­ÓëijЩ×éÖ¯£¨³Æ×÷ IBM ÒµÎñºÏ×÷»ï°é£©Ç©ÊðЭÒ飬ÒÔÍÆ¹ã¡¢ÓªÏúºÍÖ§³ÖijЩ³ÌÐò¡£IBM ÒµÎñºÏ×÷»ï°é¶ÀÁ¢ÓÚ IBM¡£¶ÔÓÚ IBM ÒµÎñºÏ×÷»ï°éµÄÐÐΪºÍ³ÂÊö»òÕß¶Ô±»Ðí¿É·½µÄÒåÎñ£¬IBM ²»³Ðµ£ÔðÈΡ£ + +k. ±»Ðí¿É·½Óë IBM µÄÆäËûЭÒ飨±ÈÈç IBM ¿Í»§Ð­Ò飩ϵÄÐí¿ÉºÍ֪ʶ²úȨÅâ³¥Ìõ¿î²»ÊÊÓÃÓÚ¸ù¾Ý±¾Ð­ÒéÊÚÓèµÄ³ÌÐòÐí¿É¡£ + +11. µØÀí·¶Î§ºÍÊÊÓ÷¨ÂÉ + +11.1 ÊÊÓ÷¨ÂÉ + +Ë«·½¾ùͬÒ⣬±»Ðí¿É·½»ñµÃ³ÌÐòÐí¿ÉËùÔڵĹú¼Ò»òµØÇøµÄ·¨Âɽ«¹ÜϽ¡¢½âÊͺÍÇ¿ÖÆÖ´ÐÐÓɱ¾Ð­Òé±êµÄÒýÆðµÄ»òÒÔÈκη½Ê½ÓëÖ®Ïà¹ØµÄ±»Ðí¿É·½Óë IBM µÄȨÀû¡¢ÔðÈκÍÒåÎñ£¬¶ø²»¿¼ÂÇ·¨ÂɳåͻԭÔò¡£ + +¡¶ÁªºÏ¹ú¹ú¼Ê»õÎïÏúÊÛºÏͬ¹«Ô¼¡·²»ÊÊÓÚÓñ¾Ð­Òé¡£ + +11.2 ¹ÜϽȨ + +Ë«·½µÄËùÓÐȨÀû¡¢ÔðÈκÍÒåÎñ¾ùÊܱ»Ðí¿É·½»ñµÃ³ÌÐòÐí¿ÉËùÔڵĹú¼Ò»òµØÇøµÄ·¨ÔºµÄ¹ÜϽ¡£ + +µÚ¶þ²¿·Ö - ¹ú¼Ò»òµØÇøÌرðÌõ¿î + +¶ÔÓÚÒÔÏÂÖ¸¶¨¹ú¼Ò»òµØÇøÖÐÊÚÓèµÄÐí¿É£¬ÒÔÏÂÌõ¿îÌæ´ú»òÐÞ¸ÄµÚ 1 ²¿·ÖÖÐÒýÓõÄÌõ¿î¡£µÚ 1 ²¿·ÖÖÐδͨ¹ýÕâЩÐÞÕý¸ü¸ÄµÄËùÓÐÌõ¿î¾ù±£³Ö²»±ä²¢±£³ÖÆäЧÁ¦¡£´ËµÚ 2 ²¿·Ö×é֯Ϊ£º + +* µÚ 1 ²¿·ÖµÄ¹ú¼Ò»òµØÇøÐÞÕý£¬µÚ 11 С½Ú£¨ÊÊÓ÷¨Âɺ͹ÜϽȨ£©£»ÒÔ¼° + +* ¶ÔÆäËûЭÒéÌõ¿îµÄÑÇÌ«¹ú¼Ò»òµØÇøÐÞÕý¡£ + +µÚ 1 ²¿·ÖµÄ¹ú¼Ò»òµØÇøÐÞÕý£¬µÚ 11 С½Ú£¨ÊÊÓ÷¨Âɺ͹ÜϽȨ£© + +11.3 Öٲà + +ÒÔ϶ÎÂäÊÊÓÃÓÚÖлªÈËÃñ¹²ºÍ¹ú£¬Òò¶øÌí¼ÓΪÐÂµÄµÚ 11.3 ×Ó½Ú£¨Öٲã©¡£ÔÚÊÊÓÃÊÊÓ÷¨ÂɺͳÌÐò¹æÔòÔÊÐíµÄ·¶Î§ÄÚ£¬¸ÃµÚ 11.3 ×Ó½ÚµÄÌõ¿îÓÅÏÈÓÚµÚ 11.2 ×Ó½Ú£¨¹ÜϽȨ£©µÄÌõ¿î£º + +Èç¹ûδ´ï³É½â¾ö£¬ÕùÒ齫Ìá½»¸øÖйú¹ú¼Ê¾­¼ÃóÒ×ÖÙ²ÃίԱ»á£¬ÒÔ¸ù¾Ý¸ÃÖÙ²ÃίԱ»áµ±Ê±ÓÐЧµÄ¹æÔò½øÐÐÖٲá£Öٲý«ÔÚ±±¾©ÒÔÖÐÎĽøÐС£Öٲþö¶¨¾ßÓÐ×îÖÕЧÁ¦²¢¶ÔË«·½¾ßÓÐÔ¼ÊøÁ¦¡£ÖÙ²ÃÆÚ¼ä£¬±¾Ð­Ò齫µÃµ½¼ÌÐøÂÄÐУ¬µ«Ë«·½²úÉúÕùÒé²¢ÕýÔÚ½øÐÐÖٲõIJ¿·Ö³ýÍâ¡£ + +ÑÇÌ«µØÇø¹ú¼Ò»òµØÇøÐÞÕý + +ÐÂ¼ÓÆÂ + +7.2 IBM ²»³Ðµ£ÔðÈεÄÏîÄ¿ + +´ÊÓï¡°ÌØ±ðµÄ¡±ºÍ¡°¾­¼Ã¡±±»´ÓµÚ 7.2b ×Ó½Úɾ³ý¡£ + +10. Ò»°ãÌõ¿î + +ÒÔÏÂÄÚÈÝÌæ´úµÚ 10.h ÏîµÄÌõ¿î£º + +h. °´ÕÕÒÔÉÏµÚ 7 С½Ú£¨ÔðÈÎÏÞÖÆ£©Ïò IBM µÄ¹©Ó¦É̺ͳÌÐò¿ª·¢ÉÌÌṩµÄȨÀû£¬²»ÊDZ¾Ð­ÒéÒ»·½µÄÈËԱûÓÐȨÀû£¨µÚÈý·½È¨Àû£©¸ù¾Ý¡¶ºÏͬ·¨¡·À´Ö´ÐÐÈÎºÎÆäÌõ¿î¡£ + +Z125-5543-05 (07/2011) + + +¹ú¼Ê³ÌÐòÐí¿ÉЭÒé + +µÚÒ»²¿·Ö - ͨÓÃÌõ¿î + +ÏÂÔØ¡¢°²×°¡¢¸´ÖÆ¡¢·ÃÎÊ¡¢µ¥»÷¡°½ÓÊÜ¡±°´Å¥£¬»òÒÔÆäËû·½Ê½Ê¹ÓóÌÐò£¬¼´±íÃ÷±»Ðí¿É·½Í¬ÒⱾЭÒéµÄÌõ¿î¡£Èç¹ûÄú´ú±í±»Ðí¿É·½½ÓÊÜ´ËÀàÌõ¿î£¬ÔòÄú³ÂÊö²¢±£Ö¤ÄúÓµÓÐÍêÈ«µÄÊÚȨÒÔʹ¸Ã±»Ðí¿É·½½ÓÊÜ´ËÀàÌõ¿îµÄÔ¼Êø¡£Èç¹ûÄú²»Í¬Òâ´ËÀàÌõ¿î£¬ + +* ÔòÇëÎðÏÂÔØ¡¢°²×°¡¢¸´ÖÆ¡¢·ÃÎÊ¡¢µ¥»÷¡°½ÓÊÜ¡±°´Å¥£¬»òʹÓóÌÐò£»²¢ÇÒ + +* Á¢¼´½«Î´Ê¹ÓõĽéÖÊ¡¢ÎĵµºÍȨÀûÖ¤Ã÷ÍË»¹ÖÁÌṩ·½£¬ÒÔ±ã»ñµÃÄúËùÖ§¸¶½ð¶îµÄÍ˿Èç¹ûÏÂÔØÁ˳ÌÐò£¬ÄÇôÇëÏú»Ù³ÌÐòµÄËùÓи±±¾¡£ + +1. ¶¨Òå + +¡°ÊÚȨʹÓá± - ±»Ðí¿É·½±»ÊÚȨִÐлòÔËÐгÌÐòµÄÖ¸¶¨¼¶±ð¡£¸Ã¼¶±ð¿É°´Óû§Êý¡¢°ÙÍò¸ö·þÎñµ¥Î»£¨MSUs£©¡¢´¦ÀíÆ÷¼ÛÖµµ¥Ôª£¨PVUs£©ºÍÆäËû IBM Ö¸¶¨µÄʹÓü¶±ð½øÐмÆÁ¿¡£ + +¡°IBM¡± - ¹ú¼ÊÉÌÒµ»úÆ÷¹«Ë¾£¨International Business Machines Corporation£©»òÆäÈÎÒ»×Ó¹«Ë¾¡£ + +¡°Ðí¿ÉÐÅÏ¢¡±£¨¡°LI¡±£© - ÌṩÓëÌØ¶¨³ÌÐòÏà¹ØµÄÐÅÏ¢»òÈκθ½¼ÓÌõ¿îµÄÎļþ¡£³ÌÐòµÄ LI ¿Éͨ¹ýÒÔÏÂÕ¾µã»ñÈ¡£ºwww.ibm.com/software/sla¡£¸Ã LI Ò²¿ÉÒÔͨ¹ýʹÓÃϵͳÃüÁîÔÚ³ÌÐòĿ¼ÏÂÕÒµ½£¬»òÕß×÷ΪÊÖ²áÓë³ÌÐòÒ»ÆðÌṩ¡£ + +¡°³ÌÐò¡± - ÏÂÁи÷Ï°üÀ¨Ô­¼þ¼°ÆäËùÓеÄÍêÕûµÄ»ò²¿·ÖµÄ¸±±¾£º1£©»úÆ÷¿É¶ÁµÄÖ¸Áî»òÊý¾Ý£»2£©×é¼þ¡¢ÎļþºÍÄ£¿é£»3£©ÒôÏñÄÚÈÝ£¨ÀýÈçͼÏñ¡¢Îı¾¡¢Â¼Òô»òͼƬ£©£»ÒÔ¼° 4£©Ïà¹ØµÄÐí¿É²ÄÁÏ£¨±ÈÈçÃÜÔ¿ºÍÎĵµ£©¡£ + +¡°È¨ÀûÖ¤Ã÷¡±£¨¡°PoE¡±£© - ±»Ðí¿É·½µÄÊÚȨʹÓÃÖ¤Ã÷¡£PoE Ò²ÊDZ»Ðí¿É·½ÏíÓб£ÐÞ¡¢½«À´µÄ¸üм۸ñ£¨ÈçÓУ©ºÍ¿ÉÄܵÄÌØ±ð»ú»á»ò´ÙÏú»ú»áµÄ×ʸñÖ¤Ã÷¡£Èç¹û IBM ²»Ïò±»Ðí¿É·½Ìṩ PoE£¬Ôò IBM ¿É½ÓÊÜÒѸ¶ÆýµÄÊÕ¾ÝÕý±¾»ò³ÌÐòÌṩ·½£¨IBM »òÆäתÊÛÉÌ£©µÄÆäËûÏúÊۼǼ×÷Ϊ PoE£¬Ç°ÌáÊÇ´ËÀàÊվݻò¼Ç¼±ØÐëÔØÃ÷³ÌÐòµÄÃû³ÆÒÔ¼°Ëù»ñµÃµÄʹÓü¶±ð¡£ + +¡°±£ÐÞÆÚ¡± - ×ÔÔ­±»Ðí¿É·½±»ÊÚÓè³ÌÐòÐí¿ÉÖ®ÈÕÆðÒ»Äê¡£ + +2. ЭÒé½á¹¹ + +±¾Ð­Òé°üÀ¨£º µÚÒ»²¿·Ö - ͨÓÃÌõ¿î¡¢µÚ¶þ²¿·Ö - ¹ú¼Ò»òµØÇøÌرðÌõ¿î£¨ÈçÓУ©¡¢LI ºÍȨÀûÖ¤Ã÷£¬¹¹³É±»Ðí¿É·½Óë IBM Ö®¼äÓйسÌÐòʹÓõÄÍêÕûЭÒé¡£±¾Ð­ÒéÌæ´ú±»Ðí¿É·½Óë IBM Ö®¼äÓйسÌÐòʹÓõÄÈκÎÏÈǰµÄ¿ÚÍ·»òÊéÃæÍ¨ÐÅ¡£µÚ¶þ²¿·ÖµÄÌõ¿î¿ÉÄÜÌæ´ú»òÐ޸ĵÚÒ»²¿·ÖµÄÏàÓ¦ÄÚÈÝ¡£ÈçÓгåÍ»£¬LI µÄÌõ¿îÓÅÏÈÓÚÕâÁ½²¿·ÖµÄ¹æ¶¨¡£ + +3. Ðí¿ÉÊÚÓè + +³ÌÐòÓÉ IBM »ò IBM ¹©Ó¦ÉÌËùÓУ¬ÊܰæÈ¨±£»¤¡£³ÌÐòϵÐí¿ÉʹÓ㬶ø·Ç³öÊÛ¡£ + +IBM ÊÚÓè±»Ðí¿É·½Ö´ÐÐÒÔϲÙ×÷µÄ·ÇרÓÐÐí¿É£¬ÒԱ㱻Ðí¿É·½£º1£©ÔÚ PoE Öй涨µÄÊÚȨʹÓü¶±ðÄÚʹÓóÌÐò£¬2£©ÖÆ×÷ºÍ°²×°¸±±¾£¬ÒÔÖ§³Ö´ËÀàÊÚȨʹÓã¬3£©ÖÆ×÷±¸·Ý¸±±¾£¬Ç°ÌáÊÇ£º + +a. ±»Ðí¿É·½ÒѺϷ¨»ñÈ¡³ÌÐò£¬²¢×ñÊØ±¾Ð­ÒéµÄÌõ¿î£» + +b. ²»Ö´Ðб¸·Ý¸±±¾£¬³ý·Ç±»±¸·ÝµÄ³ÌÐòÎÞ·¨Ö´ÐУ» + +c. ±»Ðí¿É·½ÐëÔÚ³ÌÐòµÄÿһÍêÕû¸±±¾»ò²¿·Ö¸±±¾Öи´ÖÆËùÓеİæÈ¨ÉùÃ÷ºÍÆäËûËùÓÐȨ˵Ã÷£» + +d. ±»Ðí¿É·½ÐëÈ·±£Ê¹ÓóÌÐòµÄËùÓÐÈËÔ±£¨²»ÂÛÊDZ¾µØ»òÔ¶³Ì·ÃÎÊ£©¶¼ 1£©½öΪ±»Ðí¿É·½µÄÀûÒæÊ¹ÓóÌÐò£»ÒÔ¼° 2£©×ñÊØ±¾Ð­ÒéµÄÌõ¿î£» + +e. ±»Ðí¿É·½²»µÃ 1£©Ê¹Óᢸ´ÖÆ¡¢Ð޸Ļò·Ö·¢³ÌÐò£¬³ý·Ç±¾Ð­ÒéÃ÷È·Ðí¿É£»2£©¶Ô±¾³ÌÐò½øÐз´»ã±à¡¢·´±àÒë»òÒÔÆäËû·½Ê½·­Òë»ò·´Ïò¹¤³Ì£»µ«·¨ÂÉÃ÷È·Ðí¿ÉÇÒ²»µÃÒÔÔ¼¶¨·ÅÆúÕß³ýÍ⣻3£©¶ÀÁ¢ÓÚ³ÌÐò¶øµ¥¶ÀʹÓóÌÐò×é¼þ¡¢Îļþ¡¢Ä£¿é¡¢ÒôÏñÄÚÈÝ»òÏà¹ØÐí¿É²ÄÁÏ£»»ò 4£©ÔÙÐí¿É¡¢³ö×â»ò×âÁÞ³ÌÐò£»²¢ÇÒ + +f. Èç¹û±»Ðí¿É·½»ñÈ¡±¾³ÌÐò×÷Ϊ֧³Ö³ÌÐò£¬ÄÇô±»Ðí¿É·½Ö»Äܽ«±¾³ÌÐòÓÃÓÚÖ§³ÖÖ÷³ÌÐò£¬²¢×ñÊØÖ÷³ÌÐòÐí¿ÉÖеÄÈκÎÏÞÖÆÌõ¿î¡£»òÕߣ¬Èç¹û±»Ðí¿É·½»ñÈ¡±¾³ÌÐò×÷ΪÖ÷³ÌÐò£¬ÄÇô±»Ðí¿É·½Ö»Äܽ«ËùÓÐÖ§³Ö³ÌÐòÓÃÓÚÖ§³Ö±¾Ö÷³ÌÐò£¬²¢×ñÊØ±¾Ð­ÒéÖеÄÈκÎÏÞÖÆÌõ¿î¡£±¾ f ÏîÖеġ°Ö§³Ö³ÌÐò¡±ÊÇÊôÓÚÁíÍâÒ»¸ö IBM ³ÌÐò£¨¡°Ö÷³ÌÐò¡±£©µÄÒ»²¿·ÖµÄ³ÌÐò£¬²¢ÇÒÔÚ¡°Ö÷³ÌÐò¡±µÄ LI Öб»±êʶΪ¡°Ö§³Ö³ÌÐò¡±¡££¨Òª»ñÈ¡²»´øÓÐÕâЩÏÞÖÆµÄ¡°Ö§³Ö³ÌÐò¡±µÄµ¥¶ÀÐí¿É£¬±»Ðí¿É·½Ó¦ÁªÏµÆä»ñÈ¡¡°Ö§³Ö³ÌÐò¡±µÄ¹©Ó¦·½¡££© + +´ËÐí¿ÉÊÊÓÃÓÚ±»Ðí¿É·½ÖÆ×÷µÄÿ·Ý³ÌÐò¸±±¾¡£ + +3.1 »»¹º¡¢¸üС¢ÐÞ¶©ºÍ²¹¶¡ + +3.1.1 »»¹º + +Èç¹û³ÌÐò±»»»¹º³ÌÐòÌæ»»£¬ÄÇô±»Ìæ»»³ÌÐòµÄÐí¿É½«Á¢¼´±»ÖÕÖ¹¡£ + +3.1.2 ¸üС¢ÐÞ¶©ºÍ²¹¶¡ + +±»Ðí¿É·½»ñµÃ³ÌÐòµÄ¸üС¢ÐÞ¶©»ò²¹¶¡Ê±£¬±»Ðí¿É·½Ðë½ÓÊÜÆä LI Öй涨µÄÊÊÓÃÓÚ´ËÀà¸üС¢ÐÞ¶©»ò²¹¶¡µÄÈκθ½¼Ó»ò²»Í¬µÄÌõ¿î¡£Èç¹ûδÌṩ¸½¼Ó»ò²»Í¬Ìõ¿î£¬ÄÇô¸üС¢ÐÞ¶©ºÍ²¹¶¡Ö»Ðè×ñÊØ±¾Ð­ÒéµÄ¹æ¶¨¡£Èç¹û³ÌÐò±»¸üÐÂÌæ»»£¬±»Ðí¿É·½Í¬ÒâÁ¢¼´Í£Ö¹¶Ô±»Ìæ»»³ÌÐòµÄʹÓᣠ+ +3.2 ¹Ì¶¨ÆÚÏÞÐí¿É + +Èç¹û IBM ÊÚÓè¹Ì¶¨ÆÚÏ޵ijÌÐòÐí¿É£¬ÄÇô±»Ðí¿É·½µÄÐí¿É½«Ôڹ̶¨ÆÚ¼ä½áÊøÊ±±»ÖÕÖ¹£¬³ý·Ç±»Ðí¿É·½ºÍ IBM ͬÒâÐøÇ©Ðí¿ÉЭÒé¡£ + +3.3 ÆÚÏÞºÍÖÕÖ¹ + +±¾Ð­ÒéÔÚ±»ÖÕֹǰһֱ±£³ÖÓÐЧ¡£ + +Èç¹û±»Ðí¿É·½Î´ÄÜ×ñÊØ±¾Ð­ÒéÌõ¿î£¬Ôò IBM ¿ÉÒÔÖÕÖ¹±»Ðí¿É·½µÄÐí¿É¡£ + +Èç¹ûÐí¿ÉÓÉÓÚÈκÎÀíÓɱ»ÈÎÒâÒ»·½ÖÕÖ¹£¬±»Ðí¿É·½Í¬ÒâÁ¢¼´Í£Ö¹Ê¹Óò¢Ïú»Ù±»Ðí¿É·½ÖÆ×÷µÄ³ÌÐòµÄËùÓи±±¾¡£Èç¹û±¾Ð­ÒéµÄÈκÎÌõ¿îÒòÆäÐÔÖÊÖÂʹÆäÓÐЧÆÚ³¬³ö±¾Ð­ÒéÖÕÖ¹ÆÚÏÞ£¬ÄÇôÕâЩÌõ¿îÓ¦Ò»Ö±±£³ÖÓÐЧ£¬Ö±ÖÁÂÄÐÐÍê±Ï£¬²¢ÇÒÊÊÓÃÓÚË«·½¸÷×ԵļÌÈÎÕߺÍÊÜÈÃÈË¡£ + +4. ·ÑÓà + +·ÑÓûùÓÚ PoE Öй涨µÄËù»ñµÃµÄÊÚȨʹÓü¶±ð¡£¶ÔÓÚÓ¦¸¶»òÒѸ¶¿îÏIBM ²»¸øÓè´û¼Ç½ð¶î»òÍ˿³ý·Ç±¾Ð­ÒéÖÐÁíÓй涨¡£ + +Èç¹û±»Ðí¿É·½Ï£ÍûÌá¸ßÊÚȨʹÓü¶±ð£¬ÄÇô±»Ðí¿É·½±ØÐëÌáǰ֪ͨ IBM »ò¾­ÊÚȨµÄ IBM ¾­ÏúÉÌ£¬²¢Ö§¸¶ÈκÎÊÊÓõķÑÓᣠ+ +5. ˰ÊÕ + +ÈçÓÐÈκÎÕþ¸®»ú¹¹¶Ô³ÌÐòÕ÷ÊÕ˰¿î»òÆäËû·ÑÓ㨲»°üÀ¨»ùÓÚ IBM ¾»ÊÕÈëµÄ²¿·Ö£©£¬Ôò±»Ðí¿É·½ÐëͬÒâÖ§¸¶·¢Æ±Öй涨µÄ½ð¶î£¬»òÌṩÏà¹ØË°·ÑµÄ»íÃâÎļþ¡£»ñµÃ³ÌÐòÖ®ºó£¬±»Ðí¿É·½Ðë×ÔÐиºÔðÖ§¸¶ÓйسÌÐòµÄÈκθöÈ˲Ʋú˰¡£Èç¹ûÓÉÓÚ³ö¿Ú¡¢½ø¿Ú¡¢×ªÈûòÔÚÔ­±»Ðí¿É·½»ñÈ¡Ðí¿ÉµÄ¹ú¼Ò»òµØÇøÖ®Íâ·ÃÎÊ»òʹÓñ¾³ÌÐò£¬Õþ¸®»ú¹¹Òò´ËÕ÷ÊÕ˰¿î»òÆäËû·ÑÓã¬ÄÇô±»Ðí¿É·½Í¬Ò⸺Ôð²¢Ö§¸¶Õ÷ÊÕµÄ˰¿î»ò·ÑÓᣠ+ +6. Í˿֤ + +Èç¹û±»Ðí¿É·½ÓÉÓÚÈκÎÔ­Òò¶Ô³ÌÐò²»ÂúÒ⣬²¢ÇÒÊÇÔ­±»Ðí¿É·½£¬ÄÇô±»Ðí¿É·½¿ÉÒÔÖÕÖ¹±¾Ðí¿É£¬²¢»ñµÃ¾Í³ÌÐòÒÑÖ§¸¶½ð¶îµÄÍ˿ǰÌáÊDZ»Ðí¿É·½ÔÚ PoE ·¢¸ø±»Ðí¿É·½µÄ 30 ÌìÄÚ½«±¾³ÌÐòºÍ PoE ÍË»¹¸øÆäÈ¡µÃ³ÌÐò¼°È¨ÀûÖ¤Ã÷µÄÒ»·½¡£Èç¹ûÐí¿ÉÊǿɽøÐÐÐøÇ©µÄ¹Ì¶¨ÆÚÏÞÐí¿É£¬ÄÇôֻÓб»Ðí¿É·½ÔÚ³õʼÆÚÏÞµÄǰ 30 ÌìÄÚÍË»¹±¾³ÌÐòºÍ PoE£¬²ÅÄÜ»ñµÃÍ˿Èç¹û±»Ðí¿É·½ÏÂÔØÁ˳ÌÐò£¬Ôò±»Ðí¿É·½Ó¦Óë³ÌÐòÌṩ·½ÁªÏµÒÔÁ˽â»ñµÃÍË¿îµÄÖ¸µ¼¡£ + +7. ³ÌÐòתÈà + +½öµ±ÁíÒ»·½Í¬ÒⱾЭÒéµÄÌõ¿îʱ£¬±»Ðí¿É·½·½¿É½«³ÌÐòºÍËùÓеÄÐí¿ÉȨÀûºÍÒåÎñתÈÃÖÁ¸Ã·½¡£Èç¹ûÐí¿ÉÓÉÓÚÈκÎÀíÓɱ»ÈÎÒâÒ»·½ÖÕÖ¹£¬±»Ðí¿É·½²»µÃ½«³ÌÐòתÈøøÁíÒ»·½¡£±»Ðí¿É·½²»µÃתÈò¿·Ö 1£©³ÌÐò»ò 2£©³ÌÐòµÄÊÚȨʹÓᣱ»Ðí¿É·½×ªÈóÌÐòʱ£¬»¹±ØÐëתÈñ¾Ð­ÒéµÄÒ»·ÝÓ²¿½±´£¬°üÀ¨ LI ºÍ PoE¡£×ªÈÃÖ®ºó£¬±»Ðí¿É·½µÄÐí¿É½«Á¢¼´±»ÖÕÖ¹¡£ + +8. ±£Ö¤ºÍ³ýÍâÌõ¿î + +8.1 ÓÐÏÞ±£Ö¤ + +IBM ±£Ö¤£º³ÌÐòÔÚÆä¹æ¶¨µÄ²Ù×÷»·¾³ÖÐʹÓÃʱ·ûºÏÆä¹æ¸ñ¡£³ÌÐòµÄ¹æ¸ñºÍ¹æ¶¨²Ù×÷»·¾³µÄÐÅÏ¢£¬¿ÉÒÔÔÚËæ±¾³ÌÐòÌṩµÄÎĵµ£¨ÀýÈç×ÔÊöÎļþ£©ÖÐÕÒµ½£¬Ò²¿Éͨ¹ý IBM ·¢²¼µÄÆäËûÐÅÏ¢£¨ÀýÈç²úÆ··¢²¼¹«¸æº¯£©ÕÒµ½¡£ ±»Ðí¿É·½Í¬Ò⣺´ËÀàÎĵµºÍÆäËû³ÌÐòÄÚÈݽöÒÔÓ¢ÎÄÌṩ£¬³ý·Çµ±µØ·¨Âɹ涨²»µÃÔ¼¶¨·ÅÆú»òÏÞÖÆ¡£ + +¸Ã±£Ö¤½öÊÊÓÃÓÚ³ÌÐòδ¾­Ð޸ĵIJ¿·Ö¡£IBM ²»±£Ö¤³ÌÐò²»ÖжϻòÎÞ´íÎóÔËÐУ¬IBM Ò²²»±£Ö¤»á¾ÀÕýËùÓеijÌÐò覴᣶ÔÓÚʹÓóÌÐòËù»ñµÃµÄ½á¹û£¬±»Ðí¿É·½×ÔÐиºÔð¡£ + +±£ÐÞÆÚÄÚ£¬IBM Ïò±»Ðí¿É·½Ìṩµ½ IBM Êý¾Ý¿âµÄ·ÃÎʶø²»¶îÍâÊÕ·Ñ¡£¸ÃÊý¾Ý¿â°üº¬ÒÑÖª³ÌÐòȱÏÝ¡¢È±ÏݾÀÕý¡¢ÏÞÖÆºÍÅÔ·µÄÓйØÐÅÏ¢¡£¸ü¶àÐÅÏ¢Çë²ÎÔÄ IBM Èí¼þÖ§³ÖÊֲ᣺www.ibm.com/software/support¡£ + +Èç¹û³ÌÐòÔÚ±£ÐÞÆÚÏÞÄÚδÄÜÈç±£Ö¤µÄÄÇÑùÔËÐУ¬²¢ÇÒÒ²²»ÄÜͨ¹ýʹÓà IBM Êý¾Ý¿âÖÐÌṩµÄÐÅÏ¢µÃÒÔ½â¾ö£¬Ôò±»Ðí¿É·½¿ÉÒÔ½«³ÌÐò¼°Æä PoE ÍË»ØÖÁ³ÌÐò¼°Æä PoE µÄÌṩ·½£¨IBM »òÆäתÊÛÉÌ£©ÒÔ»ñµÃ±»Ðí¿É·½ËùÖ§¸¶½ð¶îµÄÍ˿Í˻سÌÐòÖ®ºó£¬±»Ðí¿É·½µÄÐí¿É½«Á¢¼´±»ÖÕÖ¹¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁ˳ÌÐò£¬Ôò±»Ðí¿É·½Ó¦Óë³ÌÐòÌṩ·½ÁªÏµÒÔÁ˽â»ñµÃÍË¿îµÄÖ¸µ¼¡£ + +8.2 ³ýÍâÌõ¿î + +ÕâЩ±£Ö¤ÊǶԱ»Ðí¿É·½µÄÈ«²¿±£Ö¤£¬²¢È¡´úËùÓÐÆäËûÃ÷ʾµÄ»ò°µº¬µÄ±£Ö¤»òÌõ¼þ£¬°üÀ¨µ«²»ÏÞÓÚÈκΰµº¬µÄÓйØÊÊÏúÐÔ¡¢ÁîÈËÂúÒâµÄÖÊÁ¿¡¢ÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;¡¢È¨ÊôµÄ±£Ö¤»òÌõ¼þÒÔ¼°Èκβ»ÇÖȨµÄ±£Ö¤»òÌõ¼þ¡£Ä³Ð©¹ú¼Ò»ò˾·¨Ï½Çø²»ÔÊÐíÅųýÃ÷ʾµÄ»ò°µº¬µÄ±£Ö¤£¬Òò´ËÉÏÊö³ýÍâÌõ¿î¿ÉÄܲ¢²»ÊÊÓÃÓÚ±»Ðí¿É·½¡£ÔÚ´ËÇé¿öÏ£¬´ËÀà±£Ö¤½öÔÚ±£ÐÞÆÚÏÞÄÚÓÐЧ¡£Èκα£Ö¤ÔÚ±£ÐÞÆÚÏÞÖ®ºó½«²»ÔÙÊÊÓá£Ä³Ð©¹ú¼Ò»ò˾·¨Ï½Çø²»ÔÊÐíÏÞÖÆ°µº¬±£Ö¤µÄÆÚÏÞ£¬Òò´ËÉÏÊöÏÞÖÆ¿ÉÄܲ¢²»ÊÊÓÃÓÚ±»Ðí¿É·½¡£ + +ÕâЩ±£Ö¤¸øÓè±»Ðí¿É·½Ìض¨µÄ·¨ÂÉȨÀû¡£±»Ðí¿É·½¿ÉÄÜ»¹ÓµÓÐÆäËûȨÀû£¬´ËÀàȨÀûÊÓ±»Ðí¿É·½ËùÔڵĹú¼Ò»ò˾·¨Ï½Çø¶ø¶¨¡£ + +´ËµÚ 8 ²¿·Ö£¨±£Ö¤ºÍ³ýÍâÌõ¿î£©µÄ±£Ö¤½öÓÉ IBM Ìṩ¡£µ«´Ë 8.2 ×Ó½Ú£¨³ýÍâÌõ¿î£©ÖеÄÃâÔðÉùÃ÷Ò²ÊÊÓÃÓÚ IBM µÄµÚÈý·½´úÂ빩ӦÉÌ¡£ÕâЩ¹©Ó¦ÉÌÌṩÕâЩ´úÂëʱ²»¸½´øÈκÎÖÖÀàµÄ±£Ö¤»òÌõ¼þ¡£ ´Ë¶ÎÂä²»Åųý IBM ÔÚ±¾Ð­Òéϵı£Ö¤ÒåÎñ¡£ + +9. ±»Ðí¿É·½Êý¾ÝºÍÊý¾Ý¿â + +Ϊ°ïÖú±»Ðí¿É·½È·¶¨³ÌÐòÎÊÌâµÄ¸ùÔ´£¬IBM ¿ÉÄÜÒªÇó±»Ðí¿É·½ 1£©ÔÊÐí IBM Ô¶³Ì·ÃÎʱ»Ðí¿É·½µÄϵͳ£¬»ò 2£©Ïò IBM ·¢Ëͱ»Ðí¿É·½µÄÐÅÏ¢ºÍϵͳÊý¾Ý¡£µ«ÊÇ£¬IBM ûÓÐÒåÎñÌṩ´ËÀà°ïÖú£¬³ý·Ç IBM ºÍ±»Ðí¿É·½Ç©¶©Á˵¥¶ÀµÄÊéÃæÐ­Ò飬¹æ¶¨ IBM ÐëÏò±»Ðí¿É·½Ìṩ³¬³ö IBM ÔÚ±¾Ð­Òéϵı£ÐÞÒåÎñµÄÖ§³ÖÀàÐÍ¡£ÈκÎÇé¿öÏ£¬IBM ½«Ê¹ÓùØÓÚ´íÎóºÍÎÊÌâµÄÐÅÏ¢À´¸ÄÉÆÆä²úÆ·ºÍ·þÎñ£¬²¢°ïÖúÌṩÏà¹ØµÄÖ§³Ö¡£ÎªÁËÕâЩĿµÄ£¬IBM ¿ÉÒÔʹÓà IBM ʵÌåºÍ·Ö°üÉÌ£¨°üÀ¨±»Ðí¿É·½ËùÔÚ¹ú¼Ò»òµØÇøÖ®ÍâµÄÒ»¸ö»ò¶à¸ö¹ú¼Ò»òµØÇøµÄ IBM ʵÌåºÍ·Ö°üÉÌ£©£¬²¢ÇÒ±»Ðí¿É·½ÊÚȨ IBM ÕâÑù×ö¡£ + +±»Ðí¿É·½ÈÔ¸ºÔð 1£©±»Ðí¿É·½Ìṩ¸ø IBM µÄÈκÎÊý¾Ý¿âµÄÊý¾ÝºÍÄÚÈÝ£»2£©Ñ¡ÔñºÍʵʩ¹ØÓÚÊý¾Ý·ÃÎÊ¡¢°²È«ÐÔ¡¢¼ÓÃÜ¡¢Ê¹Óúʹ«Ê䣨°üÀ¨ÈκοÉʶ±ð¸öÈËÉí·ÝµÄÐÅÏ¢£©£»ÒÔ¼° 3£©±¸·ÝºÍ»Ö¸´ÈκÎÊý¾Ý¿â¼°ÒÑ´æ´¢Êý¾Ý¡£±»Ðí¿É·½½«²»Ïò IBM ·¢ËÍÈκÎÊý¾ÝÐÎʽ»òÆäËûÐÎʽµÄ¿Éʶ±ð¸öÈËÉí·ÝµÄÐÅÏ¢»òÌṩ´ËÀàÐÅÏ¢µÄ·ÃÎÊ¡£Èç¹ûÓÉÓÚÏò IBM ´íÎó·¢ËÍ´ËÀàÐÅÏ¢»ò IBM ¶ªÊ§»ò͸¶´ËÀàÐÅÏ¢¶øÔì³ÉËðʧ£¬°üÀ¨ÈκεÚÈý·½Ë÷ÅâµÄËðʧ£¬ÄÇô±»Ðí¿É·½½«¸ºÔðÖ§¸¶ºÏÀíµÄ·ÑÓÃºÍÆäËû¿îÏî¡£ + +10. ÔðÈÎÏÞÖÆ + +µÚ 10 ²¿·Ö£¨ÔðÈÎÏÞÖÆ£©ÖеÄÏÞÖÆºÍ³ýÍâÔÚ²»µÃÒÔºÏͬ·ÅÆúȨÀûµÄÊÊÓ÷¨ÂÉδ×÷³ö½ûÖ¹ÐԹ涨µÄÏÞ¶ÈÄÚÍêÈ«ÊÊÓᣠ+ +10.1 IBM ¿ÉÄܳе£ÔðÈεÄÏîÄ¿ + +Èç¹û·¢ÉúÒòΪ IBM Î¥Ô¼»òÐë³Ðµ£ÆäËûÔðÈεÄÇé¿ö£¬±»Ðí¿É·½ÓÐȨҪÇó IBM Åâ³¥Ëðʧ¡£ÎÞÂÛ±»Ðí¿É·½ÒÔºÎÖÖÒÀ¾ÝÒªÇó IBM Åâ³¥Ëðʧ£¨°üÀ¨ÖØ´óÎ¥Ô¼¡¢¹ýʧ¡¢Ê§Êµ³ÂÊö»òÆäËûºÏÔ¼»òÇÖȨ·½ÃæµÄË÷Å⣩£¬IBM µÄÈ«²¿ÔðÈνöÏÞÓÚ 1£©ÈËÉíÉ˺¦£¨°üÀ¨ËÀÍö£©Ëðº¦Åâ³¥¡¢²»¶¯²úºÍÓÐÐζ¯²úµÄË𺦣¬ÒÔ¼° 2£©ÈÎºÎÆäËûʵ¼ÊÖ±½ÓËðº¦Åâ³¥£¬Åâ³¥¶î×î¸ßΪ IBM ¶Ô×÷ΪË÷Åâ±êµÄÎïµÄ³ÌÐòËùÊÕÈ¡µÄ·ÑÓã¨Èç¹û³ÌÐò°´¹Ì¶¨ÆÚÏÞÐí¿ÉÊÕ·Ñ£¬Ôò×î¸ßΪ 12 ¸öÔµÄÊÕ·Ñ£©¡£ + +´ËÔðÈÎÏÞÖÆÒ²ÊÊÓÃÓÚÈκΠIBM µÄ³ÌÐò¿ª·¢É̺͹©Ó¦ÉÌ¡£ÕâÊÇ IBM ÓëÆä³ÌÐò¿ª·¢É̺͹©Ó¦É̹²Í¬µÄ×î¸ßÅâ³¥ÏÞ¶î¡£ + +10.2 IBM ²»³Ðµ£ÔðÈεÄÏîÄ¿ + +ÎÞÂÛÈçºÎ£¬IBM ¼°Æä³ÌÐò¿ª·¢É̺͹©Ó¦É̾ù²»¶ÔÏÂÁи÷ÏÔ𣬼´Ê¹Òѱ»¸æÖªÆä·¢ÉúµÄ¿ÉÄÜÐÔ£º + +a. Êý¾ÝµÄ¶ªÊ§»òË𻵣» + +b. ÌØ±ðµÄ¡¢¸½´øµÄ¡¢³Í·£ÐԵĻò¼ä½ÓµÄËðº¦Åâ³¥£¬»òÈκκó¹ûÐÔ¾­¼ÃËðº¦Åâ³¥£»»ò + +c. ÀûÈó¡¢ÒµÎñ¡¢ÊÕÈë¡¢ÉÌÓþ»òÔ¤ÆÚ¿É½ÚÊ¡½ð¶îµÄËðʧ¡£ + +11. ºÏ¹æÐÔÑéÖ¤ + +´ËµÚ 11 ²¿·Ö£¨ºÏ¹æÐÔÑéÖ¤£©ÖУ¬¡°IPLA ³ÌÐòÌõ¿î¡±Ö¸µÄÊÇ 1£©±¾Ð­ÒéºÍ IBM ÌṩµÄÊÊÓõIJ¹³äЭÒéºÍ½»Ò×Îļþ£¬ÒÔ¼° 2£©IBM Èí¼þÕþ²ß£¬¸ÃÕþ²ß¿ÉÔÚ IBM Èí¼þÕþ²ßÕ¾µã£¨www.ibm.com/softwarepolicies£©ÉÏÕÒµ½£¬°üÀ¨µ«²»ÏÞÓÚ¹ØÓÚ±¸·Ý¡¢´Î¼¶ÈÝÁ¿¶¨¼ÛºÍÇ¨ÒÆµÄÕþ²ß¡£ + +µÚ 11 ²¿·Ö¹æ¶¨µÄȨÀûºÍÒåÎñÔÚ³ÌÐò±»Ðí¿É¸ø±»Ðí¿É·½µÄÆÚÏÞ¼°Ö®ºóÁ½ÄêÄÚ±£³ÖÓÐЧ¡£ + +11.1 ÑéÖ¤Á÷³Ì + +±»Ðí¿É·½Í¬Òâ´´½¨¡¢±£Áô²¢Ïò IBM ¼°ÆäÉó²éÔ±Ìṩ׼ȷÊéÃæ¼Ç¼¡¢ÏµÍ³¹¤¾ßÊä³ö½á¹ûÒÔ¼°ÆäËûϵͳÐÅÏ¢£¬ÉÏÊöÄÚÈÝÓ¦³ä·ÖÒÔ±ãÌṩ±»Ðí¿É·½¶ÔËùÓгÌÐòµÄʹÓþù·ûºÏ IPLA ³ÌÐòÌõ¿î£¨°üÀ¨µ«²»ÏÞÓÚËùÓÐ IBM ÊÊÓõÄÐí¿ÉºÍ¶¨¼ÛÉêÇëÌõ¿î£©µÄ¿ÉÉ󼯵ÄÑéÖ¤¡£±»Ðí¿É·½¸ºÔð 1£©È·±£ÆäʹÓò»³¬³öÊÚȨʹÓü¶±ð£¬ÒÔ¼° 2£©Ê¼ÖÕ×ñÊØ IPLA ³ÌÐòÌõ¿î¡£ + +ÔÚÊÂÏȺÏÀí֪ͨµÄÇé¿öÏ£¬IBM ¿ÉÒÔÑéÖ¤±»Ðí¿É·½ÎªÁËÈκÎÄ¿µÄÔÚËùÓеĵصãÒÔ¼°ËùÓл·¾³ÖжÔÊÜ IPLA ³ÌÐòÌõ¿î¹ÜϽµÄ³ÌÐòµÄʹÓÃÊÇ·ñ×ñÊØ IPLA ³ÌÐòÌõ¿î¡£´ËÀàÑéÖ¤½«ÒÔ¾¡Á¿²»¸ÉÈű»Ðí¿É·½µÄÒµÎñµÄ·½Ê½½øÐУ¬²¢ÇÒ¿ÉÒÔÔÚÕý³£ÓªÒµÊ±¼äÔÚ±»Ðí¿É·½µÄ³¡Ëù½øÐС£IBM ¿ÉÒÔʹÓöÀÁ¢Éó²éԱЭÖú´ËÀàÑéÖ¤£¬µ«Ç°ÌáÊÇ IBM ºÍ´ËÉó²éԱǩ¶©Êʵ±µÄÊéÃæ±£ÃÜЭÒé¡£ + +11.2 ½â¾ö + +Èç¹ûÈκδËÀàÑéÖ¤ÏÔʾ±»Ðí¿É·½¶Ô³ÌÐòµÄʹÓó¬³öÆäÊÚȨʹÓü¶±ð»òÕßδ×ñÊØ IPLA ³ÌÐòÌõ¿î£¬ÄÇô IBM »áÊéÃæÍ¨Öª±»Ðí¿É·½¡£±»Ðí¿É·½Í¬ÒâÁ¢¼´Ïò IBM Ö§¸¶ IBM ÔÚ·¢Æ±ÖÐÖ¸¶¨µÄÒÔÏ·½Ãæ·ÑÓãº1£©ÈκδËÀ೬¼¶±ðʹÓã»2£©³¬¼¶±ðʹÓÃµÄÆÚ¼ä»òÁ½Ä꣨ÒԽ϶ÌÕßΪ׼£©¶Ô´ËÀ೬¼¶±ðʹÓõÄÖ§³Ö£»ÒÔ¼° 3£©´ËÑéÖ¤ËùÈ·¶¨µÄÈκζîÍâ·ÑÓÃºÍÆäËûÔðÈΡ£ + +12. µÚÈý·½ÉùÃ÷ + +±¾³ÌÐò¿ÉÄܰüº¬µÚÈý·½´úÂ룬ÕâЩ´úÂëÓÉ IBM£¬¶ø²»ÊǵÚÈý·½£¬¸ù¾Ý±¾Ð­ÒéÏò±»Ðí¿É·½Ðí¿É¡£Ë渽µÄµÚÈý·½´úÂëµÄÉùÃ÷£¨µÚÈý·½ÉùÃ÷£¬ÈçÓУ©½ö¹©¸æÖª±»Ðí¿É·½¡£ÕâЩÉùÃ÷¿ÉÒÔÔÚ³ÌÐòµÄÉùÃ÷ÎļþÖÐÕÒµ½¡£¹ØÓÚÈçºÎ»ñȡijЩµÚÈý·½´úÂëµÄÔ´´úÂëµÄÐÅÏ¢¿ÉÒÔÔÚµÚÈý·½ÉùÃ÷ÖÐÕÒµ½¡£Èç¹ûÔÚµÚÈý·½ÉùÃ÷ÖУ¬IBM ½«µÚÈý·½´úÂë±êʶΪ¡°¿ÉÐ޸ĵÚÈý·½´úÂ롱£¬ÄÇô IBM ÊÚȨ±»Ðí¿É·½ 1£©Ð޸ĿÉÐ޸ĵÚÈý·½´úÂ룬ÒÔ¼° 2£©¶ÔÓÚ¿ÉÐ޸ĵÚÈý·½´úÂëÖ±½Ó½Ó¿ÚµÄ³ÌÐòÄ£¿é½øÐз´Ïò¹¤³Ì£¬Ç°ÌáÊÇÕâÑù×öµÄΨһĿµÄÊÇΪÁ˶Ա»Ðí¿É·½¶Ô´ËÀàµÚÈý·½´úÂëµÄÐ޸ĽøÐе÷ÊÔ¡£IBM µÄ·þÎñºÍÖ§³ÖÒåÎñ£¨ÈçÓУ©½öÊÊÓÃÓÚδ¾­Ð޸ĵijÌÐò¡£ + +13. Ò»°ãÌõ¿î + +a. ±¾Ð­ÒéÖеÄÈκι涨¾ù²»Ó°ÏìÏû·ÑÕßÓµÓе쬶øÇÒ²»µÃÒÔЭÒéÐÎʽ¼ÓÒÔÏÞ¶¨»òÃâ³ýµÄ·¨¶¨È¨Àû¡£ + +b. ³ý·Ç±»Ðí¿É·½Óë IBM Ö®¼äÒÔÊéÃæÐÎʽÁíÐÐÔ¼¶¨£¬¶ÔÓÚ IBM ÒÔÓÐÐεķ½Ê½ÌṩµÄ³ÌÐò£¬ÔÚ½«´ËÀà³ÌÐò½»¸¶¸ø IBM Ö¸¶¨µÄ³ÐÔËÈËÖ®ºó£¬IBM ¼´Íê³ÉÁËÆä×°Ô˺ͽ»¸¶µÄÒåÎñ¡£ + +c. Èç¹û±¾Ð­ÒéµÄÈÎÒ»Ìõ¿î¹æ¶¨±»È϶¨ÎÞЧ»ò²»¿ÉÖ´ÐУ¬±¾Ð­ÒéµÄÆäÓàÌõ¿îÒÀÈ»¼ÌÐøÍêÈ«ÓÐЧ¡£ + +d. ±»Ðí¿É·½Í¬Òâ×ñÊØËùÓÐÊÊÓõijö¿ÚºÍ½ø¿Ú·¨Âɼ°·¨¹æ£¬°üÀ¨ÃÀ¹ú½ûÔ˺ÍÖÆ²Ã·¨¹æÒÔ¼°¶Ô³ö¿Úµ½Ä³Ð©×îÖÕÓû§»òÓÃ;µÄÏÞÖÆ¹æ¶¨¡£ + +e. ±»Ðí¿É·½ÊÚȨ¹ú¼ÊÉÌÒµ»úÆ÷¹«Ë¾£¨International Business Machines Corporation£©¼°Æä×Ó¹«Ë¾£¨ºÍÆä¼Ì³ÐÈ˺ÍÊÜÈÃÈË¡¢³Ð°üÉ̼° IBM ÒµÎñºÏ×÷»ï°é£©ÔÚÆä¿ªÕ¹ÒµÎñµÄÈκεط½´æ´¢ºÍʹÓñ»Ðí¿É·½µÄÒµÎñÁªÏµÐÅÏ¢£¬ÒÔ¿ªÕ¹Óë IBM ²úÆ·ºÍ·þÎñÏà¹ØµÄÒµÎñ»òÍÆ½ø IBM Óë±»Ðí¿É·½Ö®¼äµÄÒµÎñ¹ØÏµ¡£ + +f. ÔÚÖ÷ÕÅÁíÒ»·½Î´ÂÄÐб¾Ð­ÒéϵÄÒåÎñǰ£¬Ò»·½Ó¦ÔÊÐíÁíÒ»·½ÓкÏÀíµÄ»ú»áÀ´×ñÊØÐ­Ò顣˫·½½«Å¬Á¦Í¨¹ýÓѺ÷½Ê½½â¾öË«·½Ö®¼äÓ뱾ЭÒéÏà¹ØµÄËùÓÐÕùÒé¡¢·ÖÆçºÍȨÀûÖ÷ÕÅ¡£ + +g. ³ý·ÇÊÊÓ÷¨ÂÉÁíÓй涨¶øÎÞ·¨Ô¼¶¨·ÅÆú»òÏÞÖÆ£¬·ñÔò£º1£©ÈκÎÒ»·½¶¼²»»áÔÚÓ뱾ЭÒéÏà¹ØµÄË÷ÅâËßÒò·¢Éú³¬¹ýÁ½ÄêºóÌáÆðÈκÎÐÎʽµÄ·¨ÂÉËßËÏ£»ÒÔ¼° 2£©ÔÚ´ËÀàʱ¼äÏÞÖÆ¹ýÆÚÖ®ºóÈκδËÀàË÷ÅâÒÔ¼°ÓëË÷ÅâÏà¹ØµÄËùÓи÷×ÔµÄȨÀû¶¼½«¹éÓÚÎÞЧ¡£ + +h. ÎÞÂÛÊDZ»Ðí¿É·½»¹ÊÇ IBM£¬¾ù²»¶ÔÒòÆä²»¿É¿ØÖƵÄÔ­Òò¶øÎÞ·¨ÂÄÐеÄÈκÎÒåÎñ¸ºÔð¡£ + +i. ±¾Ð­ÒéûÓÐΪÈκεÚÈý·½ÉèÁ¢ËßËϵÄȨÀû»òËßÒò£¬IBM Ò²²»¶ÔÈκεÚÈý·½¶Ô±»Ðí¿É·½µÄË÷Å⸺Ô𣬵«ÈçÒÔÉÏµÚ 10.1 ×Ó½Ú£¨IBM ¿ÉÄܳе£ÔðÈεÄÏîÄ¿£©ËùÔÊÐíµÄ£¬¶ÔÓÚIBM Ó¦¶ÔµÚÈý·½³Ðµ£·¨ÂÉÔðÈεÄÈËÉíÉ˺¦£¨°üÀ¨ËÀÍö£©»ò²»¶¯²ú»òÓÐÐζ¯²úµÄË÷Åâ³ýÍâ¡£ + +j. Ç©Êð±¾Ð­Òéʱ£¬Ë«·½¾ùδÒÀÀµÎ´ÔÚ±¾Ð­ÒéÖй涨µÄÈκγÂÊö£¬°üÀ¨µ«²»ÏÞÓÚ¹ØÓÚÒÔÏ·½ÃæµÄ³ÂÊö 1£©³ÌÐòµÄÐÔÄÜ»ò¹¦ÄÜ£¬ÒÔÉÏµÚ 8 ²¿·Ö£¨±£Ö¤ºÍ³ýÍâÌõ¿î£©Ã÷È·±£Ö¤µÄ³ýÍ⣻2£©ÆäËû·½µÄ¾­Ñé»ò½¨Ò飻»ò 3£©Èκα»Ðí¿É·½¿ÉÄÜʵÏֵĽá¹û»ò¿É½ÚÊ¡½ð¶î¡£ + +k. IBM ÒѾ­ÓëijЩ×éÖ¯£¨³Æ×÷ IBM ÒµÎñºÏ×÷»ï°é£©Ç©ÊðЭÒ飬ÒÔÍÆ¹ã¡¢ÓªÏúºÍÖ§³ÖijЩ³ÌÐò¡£IBM ÒµÎñºÏ×÷»ï°éÒÀÈ»¶ÀÁ¢ÓÚ IBM¡£¶ÔÓÚ IBM ÒµÎñºÏ×÷»ï°éµÄÐÐΪºÍ³ÂÊö»òÕß¶Ô±»Ðí¿É·½µÄÒåÎñ£¬IBM ²»³Ðµ£ÔðÈΡ£ + +l. ±»Ðí¿É·½Óë IBM µÄÆäËûЭÒ飨±ÈÈç IBM ¿Í»§Ð­Ò飩ϵÄÐí¿ÉºÍ֪ʶ²úȨÅâ³¥Ìõ¿î²»ÊÊÓÃÓÚ¸ù¾Ý±¾Ð­ÒéÊÚÓèµÄ³ÌÐòÐí¿É¡£ + +14. µØÀí·¶Î§ºÍÊÊÓ÷¨ÂÉ + +14.1 ÊÊÓ÷¨ÂÉ + +Ë«·½¾ùͬÒ⣬±»Ðí¿É·½»ñµÃ³ÌÐòÐí¿ÉËùÔڵĹú¼Ò»òµØÇøµÄ·¨Âɽ«¹ÜϽ¡¢½âÊͺÍÇ¿ÖÆÖ´ÐÐÓɱ¾Ð­Òé±êµÄÒýÆðµÄ»òÒÔÈκη½Ê½ÓëÖ®Ïà¹ØµÄ±»Ðí¿É·½Óë IBM µÄȨÀû¡¢ÔðÈκÍÒåÎñ£¬¶ø²»¿¼ÂÇ·¨ÂɳåͻԭÔò¡£ + +¡¶ÁªºÏ¹ú¹ú¼Ê»õÎïÏúÊÛºÏͬ¹«Ô¼¡·²»ÊÊÓÚÓñ¾Ð­Òé¡£ + +14.2 ¹ÜϽȨ + +Ë«·½µÄËùÓÐȨÀû¡¢ÔðÈκÍÒåÎñ¾ùÊܱ»Ðí¿É·½»ñµÃ³ÌÐòÐí¿ÉËùÔڵĹú¼Ò»òµØÇøµÄ·¨ÔºµÄ¹ÜϽ¡£ + +µÚ¶þ²¿·Ö - ¹ú¼Ò»òµØÇøÌرðÌõ¿î + +¶ÔÓÚÒÔÏÂÖ¸¶¨¹ú¼Ò»òµØÇøÖÐÊÚÓèµÄÐí¿É£¬ÒÔÏÂÌõ¿îÌæ´ú»òÐÞ¸ÄµÚ 1 ²¿·ÖÖÐÒýÓõÄÌõ¿î¡£µÚ 1 ²¿·ÖÖÐδͨ¹ýÕâЩÐÞÕý¸ü¸ÄµÄËùÓÐÌõ¿î¾ù±£³Ö²»±ä²¢±£³ÖÆäЧÁ¦¡£´ËµÚ 2 ²¿·Ö×é֯Ϊ£º + +* µÚ 1 ²¿·ÖµÄ¶à¸ö¹ú¼Ò»òµØÇøÐÞÕý£¬µÚ 14 С½Ú£¨ÊÊÓ÷¨Âɺ͹ÜϽȨ£©ÒÔ¼° + +* ¶ÔÆäËûЭÒéÌõ¿îµÄÑÇÌ«¹ú¼Ò»òµØÇøÐÞÕý¡£ + +µÚ 1 ²¿·ÖµÄ¶à¸ö¹ú¼Ò»òµØÇøÐÞÕý£¬µÚ 14 С½Ú£¨ÊÊÓ÷¨Âɺ͹ÜϽȨ£© + +14.1 ÊÊÓ÷¨ÂÉ + +µÚ 14.1 С½ÚµÚÒ»¶ÎµÄ´ÊÓï¡°±»Ðí¿É·½»ñÈ¡³ÌÐòÐí¿ÉËùÔڵĹú¼Ò»òµØÇø¡±ÔÚÒÔϹú¼Ò»òµØÇøÖÐÌæ»»ÎªÒÔÏ´ÊÓ + +ÑÇÌ«µØÇø + +(1) ÔÚÖйúÏã¸ÛÌØ±ðÐÐÕþÇøºÍÖйú°ÄÃÅÌØ±ðÐÐÕþÇø£ºÏã¸ÛÌØ±ðÐÐÕþÇø£¨¡°SAR¡±£©µÄ·¨ÂÉÒÔ¼° + +(2) ÔŲ́Í壺̨ÍåµÄ·¨ÂÉ¡£ + +14.3 Öٲà + +ÒÔ϶ÎÂäÊÊÓÃÓÚÒÔϹú¼Ò»òµØÇø£¬Òò¶øÌí¼ÓΪÐÂµÄµÚ 14.3 ×Ó½Ú£¨Öٲã©¡£ÔÚÊÊÓÃÊÊÓ÷¨ÂɺͳÌÐò¹æÔòÔÊÐíµÄ·¶Î§ÄÚ£¬¸ÃµÚ 14.3 ×Ó½ÚµÄÌõ¿îÓÅÏÈÓÚµÚ 14.2 ×Ó½Ú£¨¹ÜϽȨ£©µÄÌõ¿î£º + +ÑÇÌ«µØÇø + +ÔÚÖлªÈËÃñ¹²ºÍ¹ú£º + +Èç¹ûδ´ï³É½â¾ö£¬ÕùÒ齫Ìá½»¸øÖйú¹ú¼Ê¾­¼ÃóÒ×ÖÙ²ÃίԱ»á£¬ÒÔ¸ù¾Ý¸ÃÖÙ²ÃίԱ»áµ±Ê±ÓÐЧµÄ¹æÔò½øÐÐÖٲá£Öٲý«ÔÚ±±¾©ÒÔÖÐÎĽøÐС£Öٲþö¶¨¾ßÓÐ×îÖÕЧÁ¦²¢¶ÔË«·½¾ßÓÐÔ¼ÊøÁ¦¡£ÖÙ²ÃÆÚ¼ä£¬±¾Ð­Ò齫µÃµ½¼ÌÐøÂÄÐУ¬µ«Ë«·½²úÉúÕùÒé²¢ÕýÔÚ½øÐÐÖٲõIJ¿·Ö³ýÍâ¡£ + +ÔÚÑÇÌ«µØÇø¹ú¼Ò»òµØÇøÐÞÕý + +ÔÚÖйúÏã¸ÛÌØ±ðÐÐÕþÇø¡¢Öйú°ÄÃÅÌØ±ðÐÐÕþÇøºĮ́Íå + +ÔÚ¶ÔÓÚÊÊÓÃÓÚÔŲ́ÍåºÍÌØ±ðÐÐÕþÇø»ñÈ¡µÄÐí¿É£¬±¾Ð­ÒéÈ«ÎÄÖк¬ÓдÊÓï¡°¹ú¼Ò»òµØÇø¡±µÄ¶ÌÓÀýÈç¡°Ïòԭʼ±»Ðí¿É·½ÊÚÓèÐí¿ÉµÄ¹ú¼Ò»òµØÇø¡±ºÍ¡°±»Ðí¿É·½»ñÈ¡³ÌÐòÐí¿ÉËùÔڵĹú¼Ò»òµØÇø¡±£©Ì滻ΪÒÔ϶ÌÓ + +(1) ÔÚÖйúÏã¸ÛÌØ±ðÐÐÕþÇø£º¡°ÖйúÏã¸ÛÌØ±ðÐÐÕþÇø¡± + +(2) ÔÚÖйú°ÄÃÅÌØ±ðÐÐÕþÇø¡°Öйú°ÄÃÅÌØ±ðÐÐÕþÇø¡±£¬µ«ÊÊÓ÷¨ÂÉÌõ¿î£¨µÚ 14.1 С½Ú£©³ýÍâ + +(3) ÔŲ́Í壺¡°Ì¨Íå¡£¡± + +ÖлªÈËÃñ¹²ºÍ¹ú + +4. ·ÑÓà + +Ìí¼ÓÒÔÏÂÄÚÈÝ£º + +ËùÓÐÔÚÖлªÈËÃñ¹²ºÍ¹úÖ®ÄÚ·¢ÉúµÄÒøÐзÑÓþùÓɱ»Ðí¿É·½³Ðµ££¬ÔÚÖлªÈËÃñ¹²ºÍ¹úÒÔÍâ·¢ÉúµÄÒøÐзÑÓþùÓÉ IBM ³Ðµ£¡£ + +ÐÂ¼ÓÆÂ + +10.2 IBM ²»³Ðµ£ÔðÈεÄÏîÄ¿ + +´ÊÓï¡°ÌØ±ðµÄ¡±ºÍ¡°¾­¼Ã¡±±»´ÓµÚ 10.2b ×Ó½Úɾ³ý + +13. Ò»°ãÌõ¿î + +ÒÔÏÂÄÚÈÝÌæ´úµÚ 13.i ÏîµÄÌõ¿î£º + +°´ÕÕÒÔÉÏµÚ 10 С½Ú£¨ÔðÈÎÏÞÖÆ£©Ïò IBM µÄ¹©Ó¦É̺ͳÌÐò¿ª·¢ÉÌÌṩµÄȨÀû£¬²»ÊDZ¾Ð­ÒéÒ»·½µÄÈËԱûÓÐȨÀû£¨µÚÈý·½È¨Àû£©¸ù¾Ý¡¶ºÏͬ·¨¡·À´Ö´ÐÐÈÎºÎÆäÌõ¿î¡£ + +̨Íå + +8.1 ÓÐÏÞ±£Ö¤ + +ɾ³ý×îºóÒ»¶Î¡£ + +10.1 IBM ¿ÉÄܳе£ÔðÈεÄÏîÄ¿ + +ɾ³ýÒÔϾä×Ó + +´ËÏîÅųýÒ²ÊÊÓÃÓÚÈκΠIBM µÄ³ÌÐò¿ª·¢É̺͹©Ó¦ÉÌ¡£ÕâÊÇ IBM ÓëÆä³ÌÐò¿ª·¢É̺͹©Ó¦É̹²Í¬µÄ×î¸ßÅâ³¥ÏÞ¶î¡£ + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/LICENSE_locale/LICENSE_zh_TW b/charts/mq-advancedserver/LICENSE_locale/LICENSE_zh_TW new file mode 100644 index 0000000..1c0fd87 --- /dev/null +++ b/charts/mq-advancedserver/LICENSE_locale/LICENSE_zh_TW @@ -0,0 +1,1167 @@ +ÎÃãôËçâú + +ÆÛÅÆÇµÄùÉÖĶÇÄÇéÓìá£È¢ïËÆîÄæÚæûâÅÃÅõ¡¤ÇÖÚæûâÅÃÅõšɱÑÀÍü̧ïËÆîÄææÚ¡¾æÚá«¡¿á£È¢¡¤Ý·ÚæûâÄ©ÄØÌ½ÚµÚæûâÄææÚ¡¾æÚá«¡¿á£È¢ÄæÚæûâÅÃÅõÅÉ×äïËÆî¡¤ + + +============================================== + + +ÓìÓÑËçâú¡¨îùÅêÜØïåûô + +ÅèĶÇÄÅøÄ¨Ç¹ÚæûâÇÙÒü¡¤ + +1. IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ +2. IBM ÙÏëãá£È¢ÚæûâÇÙÒü + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³ÆßÈ¢É¢äÆÆîÝ䡾ÈÔÏæâ£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆü â¸ÐêÅÂÉùÇÀÚÙÌ¿ÇÀÝå IBM ÙÏëãá£È¢ÚæûâÇÙÒü¡¤ + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³â£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¾ÜÓꢡÖâ£Èõ¡×¡¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑÕëÚÙÌ¿ (i) ÇÀÝåÄæ IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ¡¾¡Öâ£ÈõÚæûâÇÙÒü¡×¡¿¡§Å¯ (ii) ÇÀÝåÄæ IBM ÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA")¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ïËÆîÍõÝ·ÚæûâĩĿâ£Èõßæ¡¤ + +Ó¼Ý·ÚæûâÄ©Íõâ£ÈõßæÑ¥øÜÓÔÚèõÕÇÙÒü¡¾ËóÇñ¡¨IBM ÙÏëã Passport Advantage ÍÐ IBM Passport Advantage Express ÇÙÒü¡¿ÈÔòÙðåÏñÖçÆÛá£È¢¡¾ÍÐ̽ڵÆÛá£È¢Äæ÷ìÆÀÇ¹í°¡¢ÅèËòâ£ÈõßæÑ¥ËðÆî¡¿¡¢Ð¬ IPLA ÈÜÙ¯ïËÆî¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ů IPLA ÄâÚµÇÑÕëÆíÕæ¡§Ì§ÄãǶġÇÙÒüÄâÚµÔºÊÑÆ¶Ä¡ÇÙÒü¡§ÅâȺĨǹҳÇÖÈÜñÁÇ¡ÄæÇÙÒü¡¤ + +ÅèĶҳæÚá«Ä¨Ç¹ÚæûâÇÙÒüÄæÉùðìÄùÕ©¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ (Z125-5543-05)¡¤ + +á£È¢ÇØê¢ (á£È¢î¾æÀ)¡¨ +IBM MQ V9.0.3 (Evaluation) +IBM MQ Idle Standby V9.0.3 (Evaluation) + +ĶÇÄíºäíÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +â£Èõßæ + +â£ÈõßæÈÜÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÛ¾à¡ÄæÅÊØÄê«¡¢Íõ 90 ÅÊÑ¥ÜÜÅÏ¡¤ + +ÅÅßÎá£È¢ + +ÆÛá£È¢ÏûÅèÇéÓìܨÐÂÔïæÒÝÔüÕÄæÅÉÈ¢Úæûâ¡¢ËäÅýÑÄÅèĶç¥ÍüÄæÅÅßÎá£È¢¡¤ËíÆÛÇÙÒüůÍõÆÛá£È¢ûâɳøýÍüÕóÄæÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÍõÒ³ÅÅßÎÝ·ÚæûâÄ©è×ÅäÓÑá£È¢ÄæËðÆî¡¢ÈÔÇøæÒůËðÆîæÚá«ÅÅßÎá£È¢¡¾ÈþÆÛ¡ÖÚæûâÅÃÅõ¡×ÅÆÇµÆ¶È´Ý½Ìùç¤ÇéûâɳϯÄâÇãȺÓî¡¿¡¤¡ÖÒ³ÅÅßÎÝ·ÚæûâÄ©ËðÆî¡×ÄæÆî룡¢ã¯ÅýÑÄÆÒÓÑÄæËðÆî¡¢ÍÐêØÅäÓÑá£È¢ÍÐ̧ÅìÅÅßÎá£È¢ÄæÚæûâËðÆîÎþÚÙÒÞùÃÄæËðÆî¡¤¡ÖÅÅßÎá£È¢¡×ÄâÚµÆîÍõǶÈô̧ÅìÆîÝä¡¤Ý·ÚæûâÄ©ÄâÚµñÁÇ¡ÍõÅäÓÑá£È¢ÄæÆÀ¡¢ÈÔ÷ËüéÍÐ÷ËÙÇÅÅßÎá£È¢¡¤¡ÖÅÅßÎá£È¢¡×Æ«×äóôÏáÚæûâ۾ࡡ¢È´óôÏáϯ¡¢æÚá«ÚæûâÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©è׿ÚÅÅßÎá£È¢ÄæËðÆî¡¤È´Íêú½Ï¯¡¢ÆÛÚæûâÅÃÅõÄãÄæÛ¾à¡ç¤æÚÅÅßÎá£È¢ÄæÛ¾à¡óÀÇ¿ïËÆî¡¤Ý·ÚæûâĩĿÆÛá£È¢ËðÆîûâÌ¯ßæÍÐÜÜÅÏÕë¡¢Ý·ÚæûâÄ©âüØôÆî¡£ïÚäÚÍÐǡɻö×õäÅÅßÎá£È¢ÄæÄ¡Å¢îïÆÛÄèÝ·ÚæûâÄ©ÍÔÆñ̽ڵÆÛá£È¢ÄæÅìÅÉ¡¤Ó¼Ý·ÚæûâÄ©ÏûĶç¥Ì½ÚµÅÅßÎá£È¢¡¢Ý·ÚæûâÄ©óÜêØÍÔÆñ̽ڵÆÛá£È¢ÄæÅìÅÉôúᾡ¤Ó¼Ý·ÚæûâÄ©ÛÃ̽ڵç·â½Ä¸ÓÝÓî̱ݽÌùÄæÚæûâÅèËðÆîÅÅßÎá£È¢¡¢îùÝ·ÚæûâÄ©êØ IBM äÆÙ­ÅîÏÐÍÐêØÝ·ÚæûâÄ©ÍÔÆñ̽ڵÆÛá£È¢ÄææÚÅÉôúᾡ¢Åè̽ڵïËåµÚæû⡤ + +ĶÇÄÒ³òñÆÛá£È¢Ä¡Ë÷ÚæûâÄæÅÅßÎá£È¢¡¨ +IBM WebSphere Application Server Liberty V17.0 + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãá£È¢ÚæûâÇÙÒü (Z125-3301-14)¡¤ + +á£È¢ÇØê¢ (á£È¢î¾æÀ)¡¨ +IBM MQ V9.0.3 (5724-H72) +IBM MQ Idle Standby V9.0.3 (5724-H72) + +ĶÇÄíºäíÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +È´ÓîËðÆîûâ + +ÇñÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA") ůÆÛÚæûâÅÃÅõÍÔÓÝ¡¢IBM ÚæÄèÝ·ÚæûâÄ©¡ÖÆÛá£È¢¡×ÄæÓî̱ËðÆîûâɳ¡¤ÈºÚæûâÅèÝ·ÚæûâÄ©ËíûâɳøýÍüÕóÄæÑÀÆüÅéà¡ÄæÚæûâËðÆîìÒ×ÈÒ³Óî¡¢ËóÇñݨܡðÂì¤Ô«ÞÌÈí ("PVU")¡£æñäãì¤Ô«ÞÌÄ÷ ("RVU")¡£ì¤Ô«ÞÌÈí ("VU") ÍÐ̧ÅìÑÀÌùËðÆîìÒ×È¡¤ÈºÆÀ¡¢Ð©ÓÝÚæû⡢ƫ×äÝ·ÚæûâĩĿËðÆîÅèÑÀÌùñ¢ðÂÒ³Óî¡¢ÍÐã¯ÓîÙòÆÛá£È¢åµÉ¢ÅÅßÎá£È¢¡¢ÍÐ̧̿ÅìÓî̱ÍíÊÖ¡¤ÇÞÝ·ÚæûâÄ©ÆÜÞó¡ÖÆÛá£È¢¡×ĿġŢåîô¤ì¤Ô«ÈÔÅéà¡¡¢ÑÒÅè¡¢ÆÜÅÅÅé÷ìÆÀâ¶Æîϯ¡¢ÄâÚµÈçËð̧ÅìËðÆîÈçÒ³¡¤ÈºÆÀ¡¢Ý·ÚæûâÄ©ÆÜô½ÚæûâËðÆî¡ÖÆÛá£È¢¡×ßÈËòÙ¸Æî IT Τ٭ÄèǶÈôÜÉĵĩ¡£ßÈËòÙ¸ÆîÅäñ¢É¢äÆÍÐÅ¡Õë¡¢ÍÐèׯÛá£È¢ÈçËðÇÂÚæûâ¡£Åø×µÍÐ×µæõÄæÈçÒ³¡§ÈþÝ·ÚæûâÄ©ðãÅè̽ڵÆÛá£È¢ËðÆîÚæûâÄæïËÆîÇÙÒüƶȴÍüÅÆÝ½ÌùϯÄâÇãȺÓÑÒÉÁËêÈ´÷ìÆÀûâɳ¡¢ËíÝ·ÚæûâÄ©ÅÅÅé÷ìÆÀâ¶ÆîÍÐËíÄâÇÑÍÐæÐÅòÛ¾à¡ÄæÝ½ÌùÈÔÌù¡¤IBM ÏñÖçÊîÌùÑÒÉÁÚæÄèÝ·ÚæûâĩЩâú÷ìÆÀûâɳĿûâɳ¡¤ + +ݽ֪ + +á£È¢ÄæÝ½Öªç¥ÍüÍõÆÛá£È¢Ý×Ï¡ÌªÄæÜÓê¢Ò³¡Öë©ÍüêØÊÀÝ´æñع¡×ÝýåçÄ㡤 + +ÅÅßÎá£È¢ + +ÆÛá£È¢ÏûÅèÇéÓìܨÐÂÔïæÒÝÔüÕÄæÅÉÈ¢Úæûâ¡¢ËäÅýÑÄÅèĶç¥ÍüÄæÅÅßÎá£È¢¡¤ËíÆÛÇÙÒüůÍõÆÛá£È¢ûâɳøýÍüÕóÄæÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÍõÒ³ÅÅßÎÝ·ÚæûâÄ©è×ÅäÓÑá£È¢ÄæËðÆî¡¢ÈÔÇøæÒůËðÆîæÚá«ÅÅßÎá£È¢¡¾ÈþÆÛ¡ÖÚæûâÅÃÅõ¡×ÅÆÇµÆ¶È´Ý½Ìùç¤ÇéûâɳϯÄâÇãȺÓî¡¿¡¤¡ÖÒ³ÅÅßÎÝ·ÚæûâÄ©ËðÆî¡×ÄæÆî룡¢ã¯ÅýÑÄÆÒÓÑÄæËðÆî¡¢ÍÐêØÅäÓÑá£È¢ÍÐ̧ÅìÅÅßÎá£È¢ÄæÚæûâËðÆîÎþÚÙÒÞùÃÄæËðÆî¡¤¡ÖÅÅßÎá£È¢¡×ÄâÚµÆîÍõǶÈô̧ÅìÆîÝä¡¤Ý·ÚæûâÄ©ÄâÚµñÁÇ¡ÍõÅäÓÑá£È¢ÄæÆÀ¡¢ÈÔ÷ËüéÍÐ÷ËÙÇÅÅßÎá£È¢¡¤¡ÖÅÅßÎá£È¢¡×Æ«×äóôÏáÚæûâ۾ࡡ¢È´óôÏáϯ¡¢æÚá«ÚæûâÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©è׿ÚÅÅßÎá£È¢ÄæËðÆî¡¤È´Íêú½Ï¯¡¢ÆÛÚæûâÅÃÅõÄãÄæÛ¾à¡ç¤æÚÅÅßÎá£È¢ÄæÛ¾à¡óÀÇ¿ïËÆî¡¤Ý·ÚæûâĩĿÆÛá£È¢ËðÆîûâÌ¯ßæÍÐÜÜÅÏÕë¡¢Ý·ÚæûâÄ©âüØôÆî¡£ïÚäÚÍÐǡɻö×õäÅÅßÎá£È¢ÄæÄ¡Å¢îïÆÛÄèÝ·ÚæûâÄ©ÍÔÆñ̽ڵÆÛá£È¢ÄæÅìÅÉ¡¤Ó¼Ý·ÚæûâÄ©ÏûĶç¥Ì½ÚµÅÅßÎá£È¢¡¢Ý·ÚæûâÄ©óÜêØÍÔÆñ̽ڵÆÛá£È¢ÄæÅìÅÉôúᾡ¤Ó¼Ý·ÚæûâÄ©ÛÃ̽ڵç·â½Ä¸ÓÝÓî̱ݽÌùÄæÚæûâÅèËðÆîÅÅßÎá£È¢¡¢îùÝ·ÚæûâÄ©êØ IBM äÆÙ­ÅîÏÐÍÐêØÝ·ÚæûâÄ©ÍÔÆñ̽ڵÆÛá£È¢ÄææÚÅÉôúᾡ¢Åè̽ڵïËåµÚæû⡤ + +ĶÇÄÒ³òñÆÛá£È¢Ä¡Ë÷ÚæûâÄæÅÅßÎá£È¢¡¨ +IBM WebSphere Application Server Liberty V17.0 + +ÏæÆîÍõÐúÇ¡ÆÒÓÑÚæûâÄæÄ÷ǵ + +ÍõɲöËÝ·ÚæûâÄ©ÇøæÒÍÐËðÆîÆÛá£È¢ÍÔëæÄæÚæûâí°âØÕ롢ĶÇÄá£È¢Ä÷ÇµÄæÇøæÒÍÐËðÆîÄâÄèÅèÈÓâØ¡¤Ç©É»¡¢Ý·ÚæûâĩڵËíÚæûâÛ¾à¡ÇøæÒůËðÆîĶÇÄá£È¢Ä÷ǵ¡¢ÈþæÚá«Ä÷ǵÄâÆîÅèɲöËÆÛá£È¢ÍÔëæÄæÚæûâí°âØ¡¤ +IBM MQ Client 9.0.3 +IBM WebSphere Application Server Liberty 17.0 + +Æ«ÇÂßׯÌÝÔüÕ + +ÆÛá£È¢ÄùÉÖÆ«ÇÂßׯÌÄ÷ǵϯ¡¢æÚá«Ä÷ǵóÜç¥ÍüÍõÆÛá£È¢óôÏáÄæ REDIST óòÄã¡¤ØæÆÛÇÙÒüÍÔÚæÄèÄæûâɳÆÀ¡¢ÍõĶÇÄÛ¾à¡Ý½Ìùî¯ÞØÄù¡¢Ý·ÚæûâÄ©ÅÉÚµß×ÆÌÆ«ÇÂßׯÌÝÔüÕ¡¨ +1) ã¯ÓîÅèÚèÆîÆøÎûî£ÄæÖªÈ¢ÇÂß×ÆÌ¡¢ËäóÜò×ÇöÆÛá£È¢óôÏáÄæ REDIST ÍÐÅÆÇµÄãĿġŢÑÀÆü¡£ë©Íüůá£È¢Ý½Öª¡§ +2) ÆÛá£È¢óôÏáÅÆÇµÍüÅÆÝ½ÌùÝ·ÚæûâĩڵԺÊÑÆ«ÇÂßׯÌÝÔüÕϯ¡¢æÚÔºÊÑÈçÒ³óÜÜÊÇÙæÚÅÆÇµÄãĿġŢÑÀÆü¡£ë©Íüůá£È¢Ý½Öª¡§ÇñÈ´ÔºÊÑ¡¢æÚá«ÔºÊÑâúÆøáþÒ³¡ÖÆ«ÇÂßׯÌÝÔüաס§ +3) Ý·ÚæûâÄ©ã¯ÓîÙò̧ɢҳɳÆîÆÛá£È¢âäàõÄæÝ·ÚæûâÄ©óÜÆîá£È¢¡¾¡ÖÝ·ÚæûâÄ©óÜÆîá£È¢¡×¡¿ÄæÄ¡ÝåÅ¡¡¢ÅÉÚµß×ÆÌÆ«ÇÂßׯÌÝÔüÕ¡¢Åâã¯ÓîÆîÅèÅÅßÎÝ·ÚæûâĩĿÐêÅ¡¢Ëð̧ڵÅè䮨ÙËðÆîÝ·ÚæûâÄ©óÜÆîá£È¢¡¤Ý·ÚæûâĩĿóÜÆîá£È¢óÜ̦ȴÓìÄËÏáÅûì¤Ô«¡¢ËÍÅèËðÝ·ÚæûâÄ©ÝÔüÕܨÐÂÄæËðÆîÏ¯ÏæÅè̽ڵƫÇÂßׯÌÝÔüÕÒ³ÅäÓÑÙ¯ñ¢ÈÔõÕâ¹æÚÝÔüÕܨС§ +4) ÇñÆ«ÇÂßׯÌÝÔüÕÅýÑÄ Java Runtime Environment¡¢Ð¬Ý·ÚæûâĩǩóÜÙò̧ÅìÏæ Java Æ«ÇÂßׯÌÝÔüÕ×ÊÄ«Ý·ÚæûâĩĿóÜÆîá£È¢Äã¡¢ÈþæÚóÜÆîá£È¢ÏûÙñÒ³ÍõÄ¡×ïçÙæªæÒåô¡¾ËóÇñ¡¨á­Ø´ÐÎçÙæª¡£Ö¤Ä¸ÐÎçÙæªÅ¯ÈùΤð¡¿ÈÔÏæÍõ߿ĸÐÎÍÐæñعÇô̽æÒåô¡¾Ç©É»¡¢ÄùÉÖãòݨܡðÂÈþÄâÅèçªê«Ò³Ì§ÅäÓÑÆîÝäÄææÒåô¡¿ÙÚÈçÈÔÝÃÓÓϯ¡¢ÄâÇãȺÓî¡§ +5) Ý·ÚæûâÄ©ÄâÚµÜÃØæÆ«ÇÂßׯÌÝÔüÕÍÔÉÖÄæÇ¶ÈôááÉ¢ûâíºÆüÍÐÎÃãôËçâúóòÕù¡§ +6) è×ÍõÇÞËðÆîÍÐßׯÌÝ·ÚæûâÄ©óÜÆîá£È¢ÈÔßÈÅøÄæïªóÁîùÊåϯ¡¢Ý·ÚæûâÄ©óÜËð IBM¡£Ì§ËòóÜÙ¸ÍÐåîïÚٸɭ̿ä´Õ¤Å¯ßÈÅøÊ¾û³¡§ +7) Ý·ÚæûâÄ©ÄâÚµËðÆîêØÆ«ÇÂßׯÌÝÔüÕÔÏÌîóò/í¼ÜÚÒÞÇÑÄææûÕÀÇØê¢¡§ +8) ÆÜËçǿ̽ڵ IBM¡£Ì§ËòóÜÙ¸ÍÐåîïÚÙ¸ÄæÕóÓòÇÑãô¡¢Ý·ÚæûâÄ©ÍõïÚÙÇÝ·ÚæûâÄ©óÜÆîá£È¢ÕëÄâÚµËðÆî IBM ÍÐæÚËòóÜÙ¸ÍÐåîïÚÙ¸ÄæÇØê¢ÍÐÙ¸íº¡§ +9) IBM¡£Ì§ËòóÜٸůåîïÚÙ¸Åè¡ÖÜ¢Îí¡×ßÈËòÆ«ÇÂßׯÌÝÔüÕů̧ÒÞùÃÅÆÇµ¡¢ËäàÒÅÅßÎÄæåøÙ­¡¢Ç©ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡§ +10) Ý·ÚæûâÄ©óÜÆîá£È¢Å¯Æ«ÇÂßׯÌÝÔüÕÄæÔºÊÑ¡¢Ì§Ä¡Å¢ÊÀݴ̶ɷ¡¢äÍÆñÝ·ÚæûâÄ©ÈÜÈçÓ×ÝÊ¡§Å¯ +11) ÍõÝ·ÚæûâÄ©êØÝ·ÚæûâÄ©óÜÆîá£È¢ËðÆîϯÍÔÓÔÚæûâÇÙÒüÄã¡¢Ý·ÚæûâÄ©óÜÉËÏ¡æÚËðÆîϯƫÇÂßׯÌÝÔüÕÍÐ̧ԺÊÑâúÆø i) ÄâÚµÆîÍõÚöÆîÝ·ÚæûâÄ©óÜÆîá£È¢ÅèÆÀÄæÆîÝä¡§ii) ÄâÚµîïêû¡¾ÈþÆîÍõެǹϯÄâÇãȺÓî¡¿¡§iii) ã¯Óî䮨ÙÝ·ÚæûâÄ©óÜÆîá£È¢ÅÉÚµÇÂßׯÌÍÐÇÂ÷Ëüé¡§ÍÐ iv) ÄâÚµØËÇ×ÜÚÇÙ¡£ØËÇ×î¾ú¬ÍÐÅȩ̀ÅìÅÉÎÎæØúÁ¡¢ÈþÎÎÑ£ÖÖɱݽÌùÄâÚµÅèÐÖÒüÓî̱ϯ¡¢ÄâÇãȺÓȺÆÀ¡¢Ý·ÚæûâÄ©ÄæÚæûâÇÙÒüè× IBM ÄæÏñû¬¡¢ÈÝÅ·óÜêØÆÛÇÙÒüÄæÛ¾à¡ÒÞÇÑ¡¤ + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + +Þóá£È¢Äæ REDIST óòÄãÍÔÇÄÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢Ý·ÚæûâÄ©ËíÆÛÚæûâÛ¾à¡Å¯ REDIST óòÄãÄæÑÀÆü¡¢ÚµÇÂß×ÆÌæÚá«ÔÏÌîî£Ä÷ǵԺÓÔÎêÍÐî¯ËóááÉ¢Î졤 + +ĶÇÄÓÓâØÞÌÈíïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +ݨܡðÂì¤Ô«ÞÌÄ÷ (PVU) + +ꢡÖݨܡðÂì¤Ô«ÞÌÄ÷ (PVU)¡×ϯ¡¢ÏûÑÀÆÛá£È¢ÄæÚæûâÓÓâØÞÌÈí¡¤ÍÔëæ PVU ÚæûâÄæÇ¹í°¡¢ÏûÅèݨܡðÂÊÀÝ´¡¾ËíݨܡðÂËòóÜÙ¸¡£ÐÂàÖ¡£ñ¢ÐÎůÐÎæÀÈÔÝ·ÌùåøÍõ PVU ÏС¢æÚÏÐÈíÍõ http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ê½Éß¡¿Å¯ËòÆÛá£È¢ËðÆîÄæÝ¨Ü¡ðÂí°âØÒ³Ù×öð¡¤IBM Ù×ÍõÅè PVU Ò³ÚæûâÓÓâØÞÌÈíÄæÆøÎû¡¢Ñ½úýÙòġԶݨܡðÂÌùåøÒ³ßÞÅÚďĿÊäġݨܡðÂÕøÅÀ¡¤ËóÇñ¡¢÷äÕøÅÀݨܡðÂßÞÅÚȴĨԶݨܡðÂÕøÅÀ¡¤ + +Ý·ÚæûâÄ©Ëí Passport Advantage ÄÍÕ©âØÚæûâ۾ࡡ¾îùÙ¶ïåĶÇÄê½Ó÷¡¿¡¢ÚµËðÆî¡ÖÉùðìÕ©âØ¡×ÚæûâÍСÖáðóéÅ§Õ©âØ¡¾ÄÍÕ©âØ¡¿¡×ÚæûâÝåå÷ÆÛá£È¢¡¤Ó¼ÚèÆî¡ÖÉùðìÕ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©óÜ̽ڵËÍÅèÛàêäèÒüÕàýüÕô¿èºÄãËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀ* PVU Úæûâ¡¢ÈþÄØÆãļÜÃØæÆÛá£È¢ÄææÚá«ÈùΤðÂØæÆÀ¡¤Ó¼ËðÆî¡ÖáðóéÅ§Õ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©ëæËí¡ÖáðóéŧթâØÚæûâÓÓí°Ý½Ð¬¡×ÄæÌùåø¡¢Ì½ÚµËÍÅèÛàêäËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀÄæÚæûâí°âØ¡¢ê½ÉßÇñĶ¡¨http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡¤ + +*¡ÖÄØÚöٯݨܡðÂÕøÅÀ¡×ÏûÑÀÆ«ËðÆîÍõèÒüÕÍÐáðóéÈùΤðÂÄãÄæÝ¨Ü¡ðÂÕøÅÀ¡¢Äâï¢Ý¨Ü¡ðÂÕøÅÀÄæÕ©âØÑÒÉÁÆ«÷³ÆñÍÐÄØ÷³ÆñáðóéŧÊÀÝ´¡£É¢äÆË·ÜÓÑÀÅï¡£BIOS ÝÃÌùÍÐùËÈýÓî̱ÈÔÅûÅèÓî̱ϯ¡¢ÉáÇÑ¡¤ + +áðóéݨܡðÂÕøÅÀ + +¡ÖáðóéݨܡðÂÕøÅÀ¡×ÏûÑÀ¡ÖÆÛá£È¢¡×ÄæÚæûâÓÓâØÞÌÈí¡¤ÞÌÄ¡¡ÖèÒüÕÈùΤð¡×ÏûÑÀÆñݨܡæÒåô¡£Ø´ðÙüÕůòÓÄ«/òÓÅøÅü×äÜÚÈ©¡¢ËäҳġÍÐÇéÔ¶ËðÆîϯÍÐÆîÅÂê¦æÒåôÙÚÈçÍÔëæÄæá£Ê©¡£ÑÀÅïÍÐóÜÆîá£È¢ÄæÄ¡Ì¦èÒüÕçÙæª¡¤Ó¼çªÆîÕúÑÞ¡£Ä®ïàÈùΤðÂñ¢î®ÍÐ̧ÅìùËÈýÝÃÞ¬¡¢Ð¬ÊäġެȴÍÔëæÄ÷ÇµÄæÆ«Å¡÷âèÒüÕæÒåô¡¾ËóÇñ¡¨Ä®ïàÈùΤðÂÍÐÕúÑÞæÒç¥æÒåô¡¿ÆÛËÎÉ»áþҳġÝåԶɱ¡ÖèÒüÕÈùΤð¡ס¤¡ÖáðóéÈùΤð¡×ÑÒÄ¡Ýå÷³Æñš޴ƫËò¡ÖèÒüÕÈùΤð¡×ÍÐÆÜš޴¡ÖèÒüÕÈùΤð¡×ËðÆîÄææñäãÈÔÐúÇ¡ÄæáðóéçÙæª¡¤¡ÖݨܡðÂÕøÅÀ¡×¡¾Ý×Ú¦ê¢Ò³Ý¨Ü¡ðÂÍÐ CPU¡¿ÏûÑÀÍõçªê«æÒåôÄùæØúÁůÙÚÈçÑÀÅïÄæÅü×äÞÌÈí¡¤Ä¡Ô¶¡ÖݨܡðÂÕøÅÀ¡×ÆñÈÝŷġԶÑÀÅïÚÕ̱ÞÌÈíůġÍÐÇéÔ¶ê«Ý´ÍÐüÊòÒÞÌÈíÍÔé¬È©¡¤¡ÖáðóéݨܡðÂÕøÅÀ¡×ÏûÑÀÆÜš޴¡ÖèÒüÕÈùΤð¡×ÄùÄæ¡ÖݨܡðÂÕøÅÀ¡×¡¢ÍÐÑÀҦῡÖáðóéÈùΤð¡×ďĿáðóéÕøÅÀ¡¤Ý·ÚæûâÄ©óÜÒ³ËòÆÛá£È¢ËðÆîÄæÊäÄ¡¡ÖáðóéݨܡðÂÕøÅÀ¡×Ì½ÚµÚæûâËðÆî¡¤ + +ÞóÇÖÝå¡ÖèÒüÕÈùΤð¡ס¢Ý·ÚæûâÄ©óÜÈÝŷ̽ڵĶÇÄ̧ÄãÄ¡âúÄæËÍ÷ìÚæûâí°¡¨ 1) ÆÛá£È¢Ä¸ÍÔÈ´Æ«Æî¡ÖáðóéÈùΤð¡×ďĿÍÔÈ´Æ«Æî¡ÖáðóéݨܡðÂÕøÅÀ¡×í°âØôêÌÏ¡§ÍÐ 2)¡ÖèÒüÕÈùΤð¡×ďĿÍÔÈ´Æ«Æî¡ÖݨܡðÂÕøÅÀ¡×¡¤ + +ØæÐ©ßËÛ¾à¡ÆÀ¡¢Ä¶ÇÄÛ¾à¡Ç©ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +âçåôÑ¡ÌÔØÙåô + +Ù×ÍõÆÛåçÄæÆøÎû¡¢¡ÖâçåôÑ¡ÌÔ¡×ØÙåôÏûÑÀÜÊÇÙĶÇÄÚÅÊ°ÄæØÙåô¡¨ÆÛá£È¢ÄæîïÆÛÇøæÒÍõÑÜÈùΤðÂĸ¡¢æÚÈùΤðÂé¬È©ØíÆ«ÆîÍÌæØÊîÅÉÕùĿġÝåÅ¡¡¢ÅâæÚÈùΤðÂÏûÍõÉ¢ÆîÄãÈùΤðÂďĿæÚÆÛá£È¢îïÆÛàÒÎÎú«úýËðÆîÕëÉ¢Ò³ÆÛá£È¢ÆÂÕæÚÙê§ÄæÈùΤðÂϯ¡¤ã¯ÓîÍõÑÜÈùΤðÂÙñËò̶ɷÆÂÕæÚÙê§èÒÙ­Äæê§Ü¡Ù¯É¢ËðÆîÕë¡¢æÚÈùΤðÂÌîáþÇÑ¡Öâçåô¡×¡¤ + +ÆÛá£È¢Äâ򵂿æÒÍõ¡ÖâçåôÑ¡ÌÔ¡×ÈùΤð¡¢Èþ̽ڵïËåµÚæûâϯÄâÇãȺÓ + +Ó¼ÆÛá£È¢ËðÆîÍõÄùÉÖ Multi-Instance Queue Manager ÜÚÇµÄæ¡ÖâçåôÑ¡ÌÔ¡×ØÙåô¡¢Ð¬ÆÛá£È¢îïÆÛÚµÙ×ÍõÞ¬Ç¹ÆøÎûÈÔÈíÍõâçåôÑ¡ÌÔÈùΤð¡¢ÅâÄèÅèÚöÙ¯¡¢ÈþóÜÄóêÄѽ¡Öâçåô¡×¡¢ÅâÄâÚµÆîÍõÙÚÈçǶÈôÆßȢɢäÆÄÖÉ¢¡¢ÈþÉ¢ÆîÄãÈùΤðÂÆñâçåôÑ¡ÌÔÈùΤðÂÆÂÕæÚÙê§Ï¯ÄâÇãȺÓî¡¢ÇãȺÚÅÎÓĶ¡¢æÚâçåôÑ¡ÌÔîïÆÛÚµÍõÆÂÕæÚÙê§ÄæßæâæÆîÍõÙÚÈçÆßȢɢäÆÄÖÉ¢¡¤ + +Ó¼ÆÛá£È¢ËðÆîÍõÄùÉÖ̧ÅìØíÆ«ÆîÍÌË·ÜÓÄæ¡ÖâçåôÑ¡ÌÔ¡×ØÙåô¡¢Ð¬ÆÛá£È¢îïÆÛÚµÙ×ÍõÞ¬Ç¹ÆøÎûÈÔÈíÍõâçåôÑ¡ÌÔÈùΤð¡¢ÚÍÄâÚµÄèÅèÚöÙ¯¡¾ÇÞÈÔÄâÚµÆîÍõÙÚÈçǶÈôÆßȢɢäÆÄÖÉ¢¡¿¡¢ÈþÙòÍõÉ¢ÆîÄãÈùΤðÂÆÂÕæÕëÆñØíÆ«ÆîÍÌÄ÷ǵÈÜÙ¯ÄèÅèÚöÙ¯¡¢ÇãȺÚÅÎÓĶ¡¢æÚâçåôÑ¡ÌÔîïÆÛÚµÍõÆÂÕæÚÙê§ÄæßæâæÆîÍõÙÚÈçÆßȢɢäÆÄÖÉ¢¡¤ + +L/N: L-APIG-AKHJ8V +D/N: L-APIG-AKHJ8V +P/N: L-APIG-AKHJ8V + + + +============================================== + + +ÓìÓÑËçâú¡¨îùÅêÜØïåûô + +ÅèĶÇÄÅøÄ¨Ç¹ÚæûâÇÙÒü¡¤ + +1. IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ +2. IBM ÙÏëãá£È¢ÚæûâÇÙÒü + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³ÆßÈ¢É¢äÆÆîÝ䡾ÈÔÏæâ£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆü â¸ÐêÅÂÉùÇÀÚÙÌ¿ÇÀÝå IBM ÙÏëãá£È¢ÚæûâÇÙÒü¡¤ + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³â£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¾ÜÓꢡÖâ£Èõ¡×¡¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑÕëÚÙÌ¿ (i) ÇÀÝåÄæ IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ¡¾¡Öâ£ÈõÚæûâÇÙÒü¡×¡¿¡§Å¯ (ii) ÇÀÝåÄæ IBM ÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA")¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ïËÆîÍõÝ·ÚæûâĩĿâ£Èõßæ¡¤ + +Ó¼Ý·ÚæûâÄ©Íõâ£ÈõßæÑ¥øÜÓÔÚèõÕÇÙÒü¡¾ËóÇñ¡¨IBM ÙÏëã Passport Advantage ÍÐ IBM Passport Advantage Express ÇÙÒü¡¿ÈÔòÙðåÏñÖçÆÛá£È¢¡¾ÍÐ̽ڵÆÛá£È¢Äæ÷ìÆÀÇ¹í°¡¢ÅèËòâ£ÈõßæÑ¥ËðÆî¡¿¡¢Ð¬ IPLA ÈÜÙ¯ïËÆî¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ů IPLA ÄâÚµÇÑÕëÆíÕæ¡§Ì§ÄãǶġÇÙÒüÄâÚµÔºÊÑÆ¶Ä¡ÇÙÒü¡§ÅâȺĨǹҳÇÖÈÜñÁÇ¡ÄæÇÙÒü¡¤ + +ÅèĶҳæÚá«Ä¨Ç¹ÚæûâÇÙÒüÄæÉùðìÄùÕ©¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ (Z125-5543-05)¡¤ + +á£È¢ÇØê¢ (á£È¢î¾æÀ)¡¨ +IBM MQ Advanced V9.0.3 (Evaluation) + +ĶÇÄíºäíÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +â£Èõßæ + +â£ÈõßæÈÜÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÛ¾à¡ÄæÅÊØÄê«¡¢Íõ 90 ÅÊÑ¥ÜÜÅÏ¡¤ + +òññ¢Îêá£È¢ + +ÆÛá£È¢ÏûÅèÇéÓìܨÐÂÔïæÒÝÔüÕÄæÅÉÈ¢Úæûâ¡¢ËäÅýÑÄÅèĶÍÔç¥òññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ã¯ÓîËíÆÛÚæûâÅÃÅõÄæÝ½Ìù¡¢ÍõÆÛá£È¢ûâɳøýÍüÕóÄæÓî̱î¯ÞØÄùÇøæÒůËðÆîЩßËòññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ÄâÚµñÁÇ¡ÍõÇéÓìܨÐÂÔïæÒÝÔüÕÄæÆÀ¡¢ÈÔ÷ËüéÍÐ÷ËÙÇòññ¢Îêá£È¢¡¤òññ¢Îêá£È¢Æ«×äóôÏáÚæûâ۾ࡡ¢È´óôÏáϯ¡¢æÚá«ÚæûâÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©è׿Úòññ¢Îêá£È¢ÄæËðÆî¡¤È´Íêú½Ï¯¡¢ÆÛÚæûâÅÃÅõÄãÄæÛ¾à¡ç¤æÚòññ¢Îêá£È¢ÄæÛ¾à¡óÀÇ¿ïËÆî¡¤Ý·ÚæûâĩĿÆÛá£È¢ËðÆîûâÌ¯ßæÍÐÜÜÅÏÕë¡¢Ý·ÚæûâÄ©âüØôÆî¡£ïÚäÚÍÐǡɻö×õäòññ¢Îêá£È¢ÄæÄ¡Å¢îïÆÛÄèÝ·Úæûâĩڷ̧̽ڵ¡ÖÆÛá£È¢¡×ÄæÅìÅÉ¡¤Ó¼Ý·ÚæûâÄ©ÏûĶç¥Ì½Úµòññ¢Îêá£È¢¡¢Ý·ÚæûâÄ©óÜêØÚ·Ì§Ì½ÚµÆÛá£È¢ÄæÅìÅÉôúᾡ¤Ó¼Ý·ÚæûâÄ©ÛÃ̽ڵç·â½Ä¸ÓÝÓî̱ݽÌùÄæÚæûâÅèËðÆîòññ¢Îêá£È¢¡¢îùÝ·ÚæûâÄ©êØ IBM äÆÙ­ÅîÏÐÍÐêØÝ·Úæûâĩڷ̧̽ڵÆÛá£È¢ÄæÅìÅÉôúᾡ¢Åè̽ڵïËåµÚæû⡤ + +ĶÇÄÒ³òñÆÛá£È¢Ä¡Ë÷ÚæûâÄæòññ¢Îêá£È¢¡¨ +IBM MQ V9.0.3 + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãá£È¢ÚæûâÇÙÒü (Z125-3301-14)¡¤ + +á£È¢ÇØê¢ (á£È¢î¾æÀ)¡¨ +IBM MQ Advanced V9.0.3 (5724-H72) + +ĶÇÄíºäíÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +È´ÓîËðÆîûâ + +ÇñÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA") ůÆÛÚæûâÅÃÅõÍÔÓÝ¡¢IBM ÚæÄèÝ·ÚæûâÄ©¡ÖÆÛá£È¢¡×ÄæÓî̱ËðÆîûâɳ¡¤ÈºÚæûâÅèÝ·ÚæûâÄ©ËíûâɳøýÍüÕóÄæÑÀÆüÅéà¡ÄæÚæûâËðÆîìÒ×ÈÒ³Óî¡¢ËóÇñݨܡðÂì¤Ô«ÞÌÈí ("PVU")¡£æñäãì¤Ô«ÞÌÄ÷ ("RVU")¡£ì¤Ô«ÞÌÈí ("VU") ÍÐ̧ÅìÑÀÌùËðÆîìÒ×È¡¤ÈºÆÀ¡¢Ð©ÓÝÚæû⡢ƫ×äÝ·ÚæûâĩĿËðÆîÅèÑÀÌùñ¢ðÂÒ³Óî¡¢ÍÐã¯ÓîÙòÆÛá£È¢åµÉ¢ÅÅßÎá£È¢¡¢ÍÐ̧̿ÅìÓî̱ÍíÊÖ¡¤ÇÞÝ·ÚæûâÄ©ÆÜÞó¡ÖÆÛá£È¢¡×ĿġŢåîô¤ì¤Ô«ÈÔÅéà¡¡¢ÑÒÅè¡¢ÆÜÅÅÅé÷ìÆÀâ¶Æîϯ¡¢ÄâÚµÈçËð̧ÅìËðÆîÈçÒ³¡¤ÈºÆÀ¡¢Ý·ÚæûâÄ©ÆÜô½ÚæûâËðÆî¡ÖÆÛá£È¢¡×ßÈËòÙ¸Æî IT Τ٭ÄèǶÈôÜÉĵĩ¡£ßÈËòÙ¸ÆîÅäñ¢É¢äÆÍÐÅ¡Õë¡¢ÍÐèׯÛá£È¢ÈçËðÇÂÚæûâ¡£Åø×µÍÐ×µæõÄæÈçÒ³¡§ÈþÝ·ÚæûâÄ©ðãÅè̽ڵÆÛá£È¢ËðÆîÚæûâÄæïËÆîÇÙÒüƶȴÍüÅÆÝ½ÌùϯÄâÇãȺÓÑÒÉÁËêÈ´÷ìÆÀûâɳ¡¢ËíÝ·ÚæûâÄ©ÅÅÅé÷ìÆÀâ¶ÆîÍÐËíÄâÇÑÍÐæÐÅòÛ¾à¡ÄæÝ½ÌùÈÔÌù¡¤IBM ÏñÖçÊîÌùÑÒÉÁÚæÄèÝ·ÚæûâĩЩâú÷ìÆÀûâɳĿûâɳ¡¤ + +ݽ֪ + +á£È¢ÄæÝ½Öªç¥ÍüÍõÆÛá£È¢Ý×Ï¡ÌªÄæÜÓê¢Ò³¡Öë©ÍüêØÊÀÝ´æñع¡×ÝýåçÄ㡤 + +òññ¢Îêá£È¢ + +ÆÛá£È¢ÏûÅèÇéÓìܨÐÂÔïæÒÝÔüÕÄæÅÉÈ¢Úæûâ¡¢ËäÅýÑÄÅèĶÍÔç¥òññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ã¯ÓîËíÆÛÚæûâÅÃÅõÄæÝ½Ìù¡¢ÍõÆÛá£È¢ûâɳøýÍüÕóÄæÓî̱î¯ÞØÄùÇøæÒůËðÆîЩßËòññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ÄâÚµñÁÇ¡ÍõÇéÓìܨÐÂÔïæÒÝÔüÕÄæÆÀ¡¢ÈÔ÷ËüéÍÐ÷ËÙÇòññ¢Îêá£È¢¡¤òññ¢Îêá£È¢Æ«×äóôÏáÚæûâ۾ࡡ¢È´óôÏáϯ¡¢æÚá«ÚæûâÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©è׿Úòññ¢Îêá£È¢ÄæËðÆî¡¤È´Íêú½Ï¯¡¢ÆÛÚæûâÅÃÅõÄãÄæÛ¾à¡ç¤æÚòññ¢Îêá£È¢ÄæÛ¾à¡óÀÇ¿ïËÆî¡¤Ý·ÚæûâĩĿÆÛá£È¢ËðÆîûâÌ¯ßæÍÐÜÜÅÏÕë¡¢Ý·ÚæûâÄ©âüØôÆî¡£ïÚäÚÍÐǡɻö×õäòññ¢Îêá£È¢ÄæÄ¡Å¢îïÆÛÄèÝ·Úæûâĩڷ̧̽ڵ¡ÖÆÛá£È¢¡×ÄæÅìÅÉ¡¤Ó¼Ý·ÚæûâÄ©ÏûĶç¥Ì½Úµòññ¢Îêá£È¢¡¢Ý·ÚæûâÄ©óÜêØÚ·Ì§Ì½ÚµÆÛá£È¢ÄæÅìÅÉôúᾡ¤Ó¼Ý·ÚæûâÄ©ÛÃ̽ڵç·â½Ä¸ÓÝÓî̱ݽÌùÄæÚæûâÅèËðÆîòññ¢Îêá£È¢¡¢îùÝ·ÚæûâÄ©êØ IBM äÆÙ­ÅîÏÐÍÐêØÝ·Úæûâĩڷ̧̽ڵÆÛá£È¢ÄæÅìÅÉôúᾡ¢Åè̽ڵïËåµÚæû⡤ + +ĶÇÄÒ³òñÆÛá£È¢Ä¡Ë÷ÚæûâÄæòññ¢Îêá£È¢¡¨ +IBM MQ V9.0.3 + +ÏæÆîÍõÐúÇ¡ÆÒÓÑÚæûâÄæÄ÷ǵ + +ÍõɲöËÝ·ÚæûâÄ©ÇøæÒÍÐËðÆîÆÛá£È¢ÍÔëæÄæÚæûâí°âØÕ롢ĶÇÄá£È¢Ä÷ÇµÄæÇøæÒÍÐËðÆîÄâÄèÅèÈÓâØ¡¤Ç©É»¡¢Ý·ÚæûâĩڵËíÚæûâÛ¾à¡ÇøæÒůËðÆîĶÇÄá£È¢Ä÷ǵ¡¢ÈþæÚá«Ä÷ǵÄâÆîÅèɲöËÆÛá£È¢ÍÔëæÄæÚæûâí°âØ¡¤ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + +ĶÇÄÓÓâØÞÌÈíïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +ݨܡðÂì¤Ô«ÞÌÄ÷ (PVU) + +ꢡÖݨܡðÂì¤Ô«ÞÌÄ÷ (PVU)¡×ϯ¡¢ÏûÑÀÆÛá£È¢ÄæÚæûâÓÓâØÞÌÈí¡¤ÍÔëæ PVU ÚæûâÄæÇ¹í°¡¢ÏûÅèݨܡðÂÊÀÝ´¡¾ËíݨܡðÂËòóÜÙ¸¡£ÐÂàÖ¡£ñ¢ÐÎůÐÎæÀÈÔÝ·ÌùåøÍõ PVU ÏС¢æÚÏÐÈíÍõ http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ê½Éß¡¿Å¯ËòÆÛá£È¢ËðÆîÄæÝ¨Ü¡ðÂí°âØÒ³Ù×öð¡¤IBM Ù×ÍõÅè PVU Ò³ÚæûâÓÓâØÞÌÈíÄæÆøÎû¡¢Ñ½úýÙòġԶݨܡðÂÌùåøÒ³ßÞÅÚďĿÊäġݨܡðÂÕøÅÀ¡¤ËóÇñ¡¢÷äÕøÅÀݨܡðÂßÞÅÚȴĨԶݨܡðÂÕøÅÀ¡¤ + +Ý·ÚæûâÄ©Ëí Passport Advantage ÄÍÕ©âØÚæûâ۾ࡡ¾îùÙ¶ïåĶÇÄê½Ó÷¡¿¡¢ÚµËðÆî¡ÖÉùðìÕ©âØ¡×ÚæûâÍСÖáðóéÅ§Õ©âØ¡¾ÄÍÕ©âØ¡¿¡×ÚæûâÝåå÷ÆÛá£È¢¡¤Ó¼ÚèÆî¡ÖÉùðìÕ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©óÜ̽ڵËÍÅèÛàêäèÒüÕàýüÕô¿èºÄãËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀ* PVU Úæûâ¡¢ÈþÄØÆãļÜÃØæÆÛá£È¢ÄææÚá«ÈùΤðÂØæÆÀ¡¤Ó¼ËðÆî¡ÖáðóéÅ§Õ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©ëæËí¡ÖáðóéŧթâØÚæûâÓÓí°Ý½Ð¬¡×ÄæÌùåø¡¢Ì½ÚµËÍÅèÛàêäËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀÄæÚæûâí°âØ¡¢ê½ÉßÇñĶ¡¨http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡¤ + +*¡ÖÄØÚöٯݨܡðÂÕøÅÀ¡×ÏûÑÀÆ«ËðÆîÍõèÒüÕÍÐáðóéÈùΤðÂÄãÄæÝ¨Ü¡ðÂÕøÅÀ¡¢Äâï¢Ý¨Ü¡ðÂÕøÅÀÄæÕ©âØÑÒÉÁÆ«÷³ÆñÍÐÄØ÷³ÆñáðóéŧÊÀÝ´¡£É¢äÆË·ÜÓÑÀÅï¡£BIOS ÝÃÌùÍÐùËÈýÓî̱ÈÔÅûÅèÓî̱ϯ¡¢ÉáÇÑ¡¤ + +áðóéݨܡðÂÕøÅÀ + +¡ÖáðóéݨܡðÂÕøÅÀ¡×ÏûÑÀ¡ÖÆÛá£È¢¡×ÄæÚæûâÓÓâØÞÌÈí¡¤ÞÌÄ¡¡ÖèÒüÕÈùΤð¡×ÏûÑÀÆñݨܡæÒåô¡£Ø´ðÙüÕůòÓÄ«/òÓÅøÅü×äÜÚÈ©¡¢ËäҳġÍÐÇéÔ¶ËðÆîϯÍÐÆîÅÂê¦æÒåôÙÚÈçÍÔëæÄæá£Ê©¡£ÑÀÅïÍÐóÜÆîá£È¢ÄæÄ¡Ì¦èÒüÕçÙæª¡¤Ó¼çªÆîÕúÑÞ¡£Ä®ïàÈùΤðÂñ¢î®ÍÐ̧ÅìùËÈýÝÃÞ¬¡¢Ð¬ÊäġެȴÍÔëæÄ÷ÇµÄæÆ«Å¡÷âèÒüÕæÒåô¡¾ËóÇñ¡¨Ä®ïàÈùΤðÂÍÐÕúÑÞæÒç¥æÒåô¡¿ÆÛËÎÉ»áþҳġÝåԶɱ¡ÖèÒüÕÈùΤð¡ס¤¡ÖáðóéÈùΤð¡×ÑÒÄ¡Ýå÷³Æñš޴ƫËò¡ÖèÒüÕÈùΤð¡×ÍÐÆÜš޴¡ÖèÒüÕÈùΤð¡×ËðÆîÄææñäãÈÔÐúÇ¡ÄæáðóéçÙæª¡¤¡ÖݨܡðÂÕøÅÀ¡×¡¾Ý×Ú¦ê¢Ò³Ý¨Ü¡ðÂÍÐ CPU¡¿ÏûÑÀÍõçªê«æÒåôÄùæØúÁůÙÚÈçÑÀÅïÄæÅü×äÞÌÈí¡¤Ä¡Ô¶¡ÖݨܡðÂÕøÅÀ¡×ÆñÈÝŷġԶÑÀÅïÚÕ̱ÞÌÈíůġÍÐÇéÔ¶ê«Ý´ÍÐüÊòÒÞÌÈíÍÔé¬È©¡¤¡ÖáðóéݨܡðÂÕøÅÀ¡×ÏûÑÀÆÜš޴¡ÖèÒüÕÈùΤð¡×ÄùÄæ¡ÖݨܡðÂÕøÅÀ¡×¡¢ÍÐÑÀҦῡÖáðóéÈùΤð¡×ďĿáðóéÕøÅÀ¡¤Ý·ÚæûâÄ©óÜÒ³ËòÆÛá£È¢ËðÆîÄæÊäÄ¡¡ÖáðóéݨܡðÂÕøÅÀ¡×Ì½ÚµÚæûâËðÆî¡¤ + +ÞóÇÖÝå¡ÖèÒüÕÈùΤð¡ס¢Ý·ÚæûâÄ©óÜÈÝŷ̽ڵĶÇÄ̧ÄãÄ¡âúÄæËÍ÷ìÚæûâí°¡¨ 1) ÆÛá£È¢Ä¸ÍÔÈ´Æ«Æî¡ÖáðóéÈùΤð¡×ďĿÍÔÈ´Æ«Æî¡ÖáðóéݨܡðÂÕøÅÀ¡×í°âØôêÌÏ¡§ÍÐ 2)¡ÖèÒüÕÈùΤð¡×ďĿÍÔÈ´Æ«Æî¡ÖݨܡðÂÕøÅÀ¡×¡¤ + +L/N: L-APIG-AKHJJP +D/N: L-APIG-AKHJJP +P/N: L-APIG-AKHJJP + + + +============================================== + + +ÓìÓÑËçâú¡¨îùÅêÜØïåûô + +ÅèĶÇÄÅøÄ¨Ç¹ÚæûâÇÙÒü¡¤ + +1. IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ +2. IBM ÙÏëãá£È¢ÚæûâÇÙÒü + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³ÆßÈ¢É¢äÆÆîÝ䡾ÈÔÏæâ£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆü â¸ÐêÅÂÉùÇÀÚÙÌ¿ÇÀÝå IBM ÙÏëãá£È¢ÚæûâÇÙÒü¡¤ + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³â£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¾ÜÓꢡÖâ£Èõ¡×¡¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑÕëÚÙÌ¿ (i) ÇÀÝåÄæ IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ¡¾¡Öâ£ÈõÚæûâÇÙÒü¡×¡¿¡§Å¯ (ii) ÇÀÝåÄæ IBM ÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA")¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ïËÆîÍõÝ·ÚæûâĩĿâ£Èõßæ¡¤ + +Ó¼Ý·ÚæûâÄ©Íõâ£ÈõßæÑ¥øÜÓÔÚèõÕÇÙÒü¡¾ËóÇñ¡¨IBM ÙÏëã Passport Advantage ÍÐ IBM Passport Advantage Express ÇÙÒü¡¿ÈÔòÙðåÏñÖçÆÛá£È¢¡¾ÍÐ̽ڵÆÛá£È¢Äæ÷ìÆÀÇ¹í°¡¢ÅèËòâ£ÈõßæÑ¥ËðÆî¡¿¡¢Ð¬ IPLA ÈÜÙ¯ïËÆî¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ů IPLA ÄâÚµÇÑÕëÆíÕæ¡§Ì§ÄãǶġÇÙÒüÄâÚµÔºÊÑÆ¶Ä¡ÇÙÒü¡§ÅâȺĨǹҳÇÖÈÜñÁÇ¡ÄæÇÙÒü¡¤ + +ÅèĶҳæÚá«Ä¨Ç¹ÚæûâÇÙÒüÄæÉùðìÄùÕ©¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ (Z125-5543-05)¡¤ + +á£È¢ÇØê¢ (á£È¢î¾æÀ)¡¨ +IBM MQ Advanced Idle Standby V9.0.3 (Evaluation) + +ĶÇÄíºäíÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +â£Èõßæ + +â£ÈõßæÈÜÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÛ¾à¡ÄæÅÊØÄê«¡¢Íõ 90 ÅÊÑ¥ÜÜÅÏ¡¤ + +òññ¢Îêá£È¢ + +ÆÛá£È¢ÏûÅèÇéÓìܨÐÂÔïæÒÝÔüÕÄæÅÉÈ¢Úæûâ¡¢ËäÅýÑÄÅèĶÍÔç¥òññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ã¯ÓîËíÆÛÚæûâÅÃÅõÄæÝ½Ìù¡¢ÍõÆÛá£È¢ûâɳøýÍüÕóÄæÓî̱î¯ÞØÄùÇøæÒůËðÆîЩßËòññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ÄâÚµñÁÇ¡ÍõÇéÓìܨÐÂÔïæÒÝÔüÕÄæÆÀ¡¢ÈÔ÷ËüéÍÐ÷ËÙÇòññ¢Îêá£È¢¡¤òññ¢Îêá£È¢Æ«×äóôÏáÚæûâ۾ࡡ¢È´óôÏáϯ¡¢æÚá«ÚæûâÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©è׿Úòññ¢Îêá£È¢ÄæËðÆî¡¤È´Íêú½Ï¯¡¢ÆÛÚæûâÅÃÅõÄãÄæÛ¾à¡ç¤æÚòññ¢Îêá£È¢ÄæÛ¾à¡óÀÇ¿ïËÆî¡¤Ý·ÚæûâĩĿÆÛá£È¢ËðÆîûâÌ¯ßæÍÐÜÜÅÏÕë¡¢Ý·ÚæûâÄ©âüØôÆî¡£ïÚäÚÍÐǡɻö×õäòññ¢Îêá£È¢ÄæÄ¡Å¢îïÆÛÄèÝ·Úæûâĩڷ̧̽ڵ¡ÖÆÛá£È¢¡×ÄæÅìÅÉ¡¤Ó¼Ý·ÚæûâÄ©ÏûĶç¥Ì½Úµòññ¢Îêá£È¢¡¢Ý·ÚæûâÄ©óÜêØÚ·Ì§Ì½ÚµÆÛá£È¢ÄæÅìÅÉôúᾡ¤Ó¼Ý·ÚæûâÄ©ÛÃ̽ڵç·â½Ä¸ÓÝÓî̱ݽÌùÄæÚæûâÅèËðÆîòññ¢Îêá£È¢¡¢îùÝ·ÚæûâÄ©êØ IBM äÆÙ­ÅîÏÐÍÐêØÝ·Úæûâĩڷ̧̽ڵÆÛá£È¢ÄæÅìÅÉôúᾡ¢Åè̽ڵïËåµÚæû⡤ + +ĶÇÄÒ³òñÆÛá£È¢Ä¡Ë÷ÚæûâÄæòññ¢Îêá£È¢¡¨ +IBM MQ Idle Standby V9.0.3 + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãá£È¢ÚæûâÇÙÒü (Z125-3301-14)¡¤ + +á£È¢ÇØê¢ (á£È¢î¾æÀ)¡¨ +IBM MQ Advanced Idle Standby V9.0.3 (5724-H72) + +ĶÇÄíºäíÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +È´ÓîËðÆîûâ + +ÇñÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA") ůÆÛÚæûâÅÃÅõÍÔÓÝ¡¢IBM ÚæÄèÝ·ÚæûâÄ©¡ÖÆÛá£È¢¡×ÄæÓî̱ËðÆîûâɳ¡¤ÈºÚæûâÅèÝ·ÚæûâÄ©ËíûâɳøýÍüÕóÄæÑÀÆüÅéà¡ÄæÚæûâËðÆîìÒ×ÈÒ³Óî¡¢ËóÇñݨܡðÂì¤Ô«ÞÌÈí ("PVU")¡£æñäãì¤Ô«ÞÌÄ÷ ("RVU")¡£ì¤Ô«ÞÌÈí ("VU") ÍÐ̧ÅìÑÀÌùËðÆîìÒ×È¡¤ÈºÆÀ¡¢Ð©ÓÝÚæû⡢ƫ×äÝ·ÚæûâĩĿËðÆîÅèÑÀÌùñ¢ðÂÒ³Óî¡¢ÍÐã¯ÓîÙòÆÛá£È¢åµÉ¢ÅÅßÎá£È¢¡¢ÍÐ̧̿ÅìÓî̱ÍíÊÖ¡¤ÇÞÝ·ÚæûâÄ©ÆÜÞó¡ÖÆÛá£È¢¡×ĿġŢåîô¤ì¤Ô«ÈÔÅéà¡¡¢ÑÒÅè¡¢ÆÜÅÅÅé÷ìÆÀâ¶Æîϯ¡¢ÄâÚµÈçËð̧ÅìËðÆîÈçÒ³¡¤ÈºÆÀ¡¢Ý·ÚæûâÄ©ÆÜô½ÚæûâËðÆî¡ÖÆÛá£È¢¡×ßÈËòÙ¸Æî IT Τ٭ÄèǶÈôÜÉĵĩ¡£ßÈËòÙ¸ÆîÅäñ¢É¢äÆÍÐÅ¡Õë¡¢ÍÐèׯÛá£È¢ÈçËðÇÂÚæûâ¡£Åø×µÍÐ×µæõÄæÈçÒ³¡§ÈþÝ·ÚæûâÄ©ðãÅè̽ڵÆÛá£È¢ËðÆîÚæûâÄæïËÆîÇÙÒüƶȴÍüÅÆÝ½ÌùϯÄâÇãȺÓÑÒÉÁËêÈ´÷ìÆÀûâɳ¡¢ËíÝ·ÚæûâÄ©ÅÅÅé÷ìÆÀâ¶ÆîÍÐËíÄâÇÑÍÐæÐÅòÛ¾à¡ÄæÝ½ÌùÈÔÌù¡¤IBM ÏñÖçÊîÌùÑÒÉÁÚæÄèÝ·ÚæûâĩЩâú÷ìÆÀûâɳĿûâɳ¡¤ + +ݽ֪ + +á£È¢ÄæÝ½Öªç¥ÍüÍõÆÛá£È¢Ý×Ï¡ÌªÄæÜÓê¢Ò³¡Öë©ÍüêØÊÀÝ´æñع¡×ÝýåçÄ㡤 + +òññ¢Îêá£È¢ + +ÆÛá£È¢ÏûÅèÇéÓìܨÐÂÔïæÒÝÔüÕÄæÅÉÈ¢Úæûâ¡¢ËäÅýÑÄÅèĶÍÔç¥òññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ã¯ÓîËíÆÛÚæûâÅÃÅõÄæÝ½Ìù¡¢ÍõÆÛá£È¢ûâɳøýÍüÕóÄæÓî̱î¯ÞØÄùÇøæÒůËðÆîЩßËòññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ÄâÚµñÁÇ¡ÍõÇéÓìܨÐÂÔïæÒÝÔüÕÄæÆÀ¡¢ÈÔ÷ËüéÍÐ÷ËÙÇòññ¢Îêá£È¢¡¤òññ¢Îêá£È¢Æ«×äóôÏáÚæûâ۾ࡡ¢È´óôÏáϯ¡¢æÚá«ÚæûâÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©è׿Úòññ¢Îêá£È¢ÄæËðÆî¡¤È´Íêú½Ï¯¡¢ÆÛÚæûâÅÃÅõÄãÄæÛ¾à¡ç¤æÚòññ¢Îêá£È¢ÄæÛ¾à¡óÀÇ¿ïËÆî¡¤Ý·ÚæûâĩĿÆÛá£È¢ËðÆîûâÌ¯ßæÍÐÜÜÅÏÕë¡¢Ý·ÚæûâÄ©âüØôÆî¡£ïÚäÚÍÐǡɻö×õäòññ¢Îêá£È¢ÄæÄ¡Å¢îïÆÛÄèÝ·Úæûâĩڷ̧̽ڵ¡ÖÆÛá£È¢¡×ÄæÅìÅÉ¡¤Ó¼Ý·ÚæûâÄ©ÏûĶç¥Ì½Úµòññ¢Îêá£È¢¡¢Ý·ÚæûâÄ©óÜêØÚ·Ì§Ì½ÚµÆÛá£È¢ÄæÅìÅÉôúᾡ¤Ó¼Ý·ÚæûâÄ©ÛÃ̽ڵç·â½Ä¸ÓÝÓî̱ݽÌùÄæÚæûâÅèËðÆîòññ¢Îêá£È¢¡¢îùÝ·ÚæûâÄ©êØ IBM äÆÙ­ÅîÏÐÍÐêØÝ·Úæûâĩڷ̧̽ڵÆÛá£È¢ÄæÅìÅÉôúᾡ¢Åè̽ڵïËåµÚæû⡤ + +ĶÇÄÒ³òñÆÛá£È¢Ä¡Ë÷ÚæûâÄæòññ¢Îêá£È¢¡¨ +IBM MQ Idle Standby V9.0.3 + +ÏæÆîÍõÐúÇ¡ÆÒÓÑÚæûâÄæÄ÷ǵ + +ÍõɲöËÝ·ÚæûâÄ©ÇøæÒÍÐËðÆîÆÛá£È¢ÍÔëæÄæÚæûâí°âØÕ롢ĶÇÄá£È¢Ä÷ÇµÄæÇøæÒÍÐËðÆîÄâÄèÅèÈÓâØ¡¤Ç©É»¡¢Ý·ÚæûâĩڵËíÚæûâÛ¾à¡ÇøæÒůËðÆîĶÇÄá£È¢Ä÷ǵ¡¢ÈþæÚá«Ä÷ǵÄâÆîÅèɲöËÆÛá£È¢ÍÔëæÄæÚæûâí°âØ¡¤ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + +ĶÇÄÓÓâØÞÌÈíïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +ݨܡðÂì¤Ô«ÞÌÄ÷ (PVU) + +ꢡÖݨܡðÂì¤Ô«ÞÌÄ÷ (PVU)¡×ϯ¡¢ÏûÑÀÆÛá£È¢ÄæÚæûâÓÓâØÞÌÈí¡¤ÍÔëæ PVU ÚæûâÄæÇ¹í°¡¢ÏûÅèݨܡðÂÊÀÝ´¡¾ËíݨܡðÂËòóÜÙ¸¡£ÐÂàÖ¡£ñ¢ÐÎůÐÎæÀÈÔÝ·ÌùåøÍõ PVU ÏС¢æÚÏÐÈíÍõ http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ê½Éß¡¿Å¯ËòÆÛá£È¢ËðÆîÄæÝ¨Ü¡ðÂí°âØÒ³Ù×öð¡¤IBM Ù×ÍõÅè PVU Ò³ÚæûâÓÓâØÞÌÈíÄæÆøÎû¡¢Ñ½úýÙòġԶݨܡðÂÌùåøÒ³ßÞÅÚďĿÊäġݨܡðÂÕøÅÀ¡¤ËóÇñ¡¢÷äÕøÅÀݨܡðÂßÞÅÚȴĨԶݨܡðÂÕøÅÀ¡¤ + +Ý·ÚæûâÄ©Ëí Passport Advantage ÄÍÕ©âØÚæûâ۾ࡡ¾îùÙ¶ïåĶÇÄê½Ó÷¡¿¡¢ÚµËðÆî¡ÖÉùðìÕ©âØ¡×ÚæûâÍСÖáðóéÅ§Õ©âØ¡¾ÄÍÕ©âØ¡¿¡×ÚæûâÝåå÷ÆÛá£È¢¡¤Ó¼ÚèÆî¡ÖÉùðìÕ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©óÜ̽ڵËÍÅèÛàêäèÒüÕàýüÕô¿èºÄãËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀ* PVU Úæûâ¡¢ÈþÄØÆãļÜÃØæÆÛá£È¢ÄææÚá«ÈùΤðÂØæÆÀ¡¤Ó¼ËðÆî¡ÖáðóéÅ§Õ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©ëæËí¡ÖáðóéŧթâØÚæûâÓÓí°Ý½Ð¬¡×ÄæÌùåø¡¢Ì½ÚµËÍÅèÛàêäËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀÄæÚæûâí°âØ¡¢ê½ÉßÇñĶ¡¨http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡¤ + +*¡ÖÄØÚöٯݨܡðÂÕøÅÀ¡×ÏûÑÀÆ«ËðÆîÍõèÒüÕÍÐáðóéÈùΤðÂÄãÄæÝ¨Ü¡ðÂÕøÅÀ¡¢Äâï¢Ý¨Ü¡ðÂÕøÅÀÄæÕ©âØÑÒÉÁÆ«÷³ÆñÍÐÄØ÷³ÆñáðóéŧÊÀÝ´¡£É¢äÆË·ÜÓÑÀÅï¡£BIOS ÝÃÌùÍÐùËÈýÓî̱ÈÔÅûÅèÓî̱ϯ¡¢ÉáÇÑ¡¤ + +ØæÐ©ßËÛ¾à¡ÆÀ¡¢Ä¶ÇÄÛ¾à¡Ç©ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +âçåôÑ¡ÌÔØÙåô + +Ù×ÍõÆÛåçÄæÆøÎû¡¢¡ÖâçåôÑ¡ÌÔ¡×ØÙåôÏûÑÀÜÊÇÙĶÇÄÚÅÊ°ÄæØÙåô¡¨ÆÛá£È¢ÄæîïÆÛÇøæÒÍõÑÜÈùΤðÂĸ¡¢æÚÈùΤðÂé¬È©ØíÆ«ÆîÍÌæØÊîÅÉÕùĿġÝåÅ¡¡¢ÅâæÚÈùΤðÂÏûÍõÉ¢ÆîÄãÈùΤðÂďĿæÚÆÛá£È¢îïÆÛàÒÎÎú«úýËðÆîÕëÉ¢Ò³ÆÛá£È¢ÆÂÕæÚÙê§ÄæÈùΤðÂϯ¡¤ã¯ÓîÍõÑÜÈùΤðÂÙñËò̶ɷÆÂÕæÚÙê§èÒÙ­Äæê§Ü¡Ù¯É¢ËðÆîÕë¡¢æÚÈùΤðÂÌîáþÇÑ¡Öâçåô¡×¡¤ + +ÆÛá£È¢Äâ򵂿æÒÍõ¡ÖâçåôÑ¡ÌÔ¡×ÈùΤð¡¢Èþ̽ڵïËåµÚæûâϯÄâÇãȺÓ + +Ó¼ÆÛá£È¢ËðÆîÍõÄùÉÖ Multi-Instance Queue Manager ÜÚÇµÄæ¡ÖâçåôÑ¡ÌÔ¡×ØÙåô¡¢Ð¬ÆÛá£È¢îïÆÛÚµÙ×ÍõÞ¬Ç¹ÆøÎûÈÔÈíÍõâçåôÑ¡ÌÔÈùΤð¡¢ÅâÄèÅèÚöÙ¯¡¢ÈþóÜÄóêÄѽ¡Öâçåô¡×¡¢ÅâÄâÚµÆîÍõÙÚÈçǶÈôÆßȢɢäÆÄÖÉ¢¡¢ÈþÉ¢ÆîÄãÈùΤðÂÆñâçåôÑ¡ÌÔÈùΤðÂÆÂÕæÚÙê§Ï¯ÄâÇãȺÓî¡¢ÇãȺÚÅÎÓĶ¡¢æÚâçåôÑ¡ÌÔîïÆÛÚµÍõÆÂÕæÚÙê§ÄæßæâæÆîÍõÙÚÈçÆßȢɢäÆÄÖÉ¢¡¤ + +Ó¼ÆÛá£È¢ËðÆîÍõÄùÉÖ̧ÅìØíÆ«ÆîÍÌË·ÜÓÄæ¡ÖâçåôÑ¡ÌÔ¡×ØÙåô¡¢Ð¬ÆÛá£È¢îïÆÛÚµÙ×ÍõÞ¬Ç¹ÆøÎûÈÔÈíÍõâçåôÑ¡ÌÔÈùΤð¡¢ÚÍÄâÚµÄèÅèÚöÙ¯¡¾ÇÞÈÔÄâÚµÆîÍõÙÚÈçǶÈôÆßȢɢäÆÄÖÉ¢¡¿¡¢ÈþÙòÍõÉ¢ÆîÄãÈùΤðÂÆÂÕæÕëÆñØíÆ«ÆîÍÌÄ÷ǵÈÜÙ¯ÄèÅèÚöÙ¯¡¢ÇãȺÚÅÎÓĶ¡¢æÚâçåôÑ¡ÌÔîïÆÛÚµÍõÆÂÕæÚÙê§ÄæßæâæÆîÍõÙÚÈçÆßȢɢäÆÄÖÉ¢¡¤ + +L/N: L-APIG-AKHJKX +D/N: L-APIG-AKHJKX +P/N: L-APIG-AKHJKX + + + +============================================== + + +ÓìÓÑËçâú¡¨îùÅêÜØïåûô + +ÅèĶÇÄÅøÄ¨Ç¹ÚæûâÇÙÒü¡¤ + +1. IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ +2. IBM ÙÏëãá£È¢ÚæûâÇÙÒü + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³ÆßÈ¢É¢äÆÆîÝ䡾ÈÔÏæâ£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆü â¸ÐêÅÂÉùÇÀÚÙÌ¿ÇÀÝå IBM ÙÏëãá£È¢ÚæûâÇÙÒü¡¤ + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³â£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¾ÜÓꢡÖâ£Èõ¡×¡¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑÕëÚÙÌ¿ (i) ÇÀÝåÄæ IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ¡¾¡Öâ£ÈõÚæûâÇÙÒü¡×¡¿¡§Å¯ (ii) ÇÀÝåÄæ IBM ÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA")¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ïËÆîÍõÝ·ÚæûâĩĿâ£Èõßæ¡¤ + +Ó¼Ý·ÚæûâÄ©Íõâ£ÈõßæÑ¥øÜÓÔÚèõÕÇÙÒü¡¾ËóÇñ¡¨IBM ÙÏëã Passport Advantage ÍÐ IBM Passport Advantage Express ÇÙÒü¡¿ÈÔòÙðåÏñÖçÆÛá£È¢¡¾ÍÐ̽ڵÆÛá£È¢Äæ÷ìÆÀÇ¹í°¡¢ÅèËòâ£ÈõßæÑ¥ËðÆî¡¿¡¢Ð¬ IPLA ÈÜÙ¯ïËÆî¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ů IPLA ÄâÚµÇÑÕëÆíÕæ¡§Ì§ÄãǶġÇÙÒüÄâÚµÔºÊÑÆ¶Ä¡ÇÙÒü¡§ÅâȺĨǹҳÇÖÈÜñÁÇ¡ÄæÇÙÒü¡¤ + +ÅèĶҳæÚá«Ä¨Ç¹ÚæûâÇÙÒüÄæÉùðìÄùÕ©¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ (Z125-5543-05)¡¤ + +á£È¢ÇØê¢ (á£È¢î¾æÀ)¡¨ +IBM MQ Advanced for Developers V9.0.3 (Evaluation) + +ĶÇÄíºäíÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +â£Èõßæ + +â£ÈõßæÈÜÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÛ¾à¡ÄæÅÊØÄê«¡¢Íõ 90 ÅÊÑ¥ÜÜÅÏ¡¤ + +òññ¢Îêá£È¢ + +ÆÛá£È¢ÏûÅèÇéÓìܨÐÂÔïæÒÝÔüÕÄæÅÉÈ¢Úæûâ¡¢ËäÅýÑÄÅèĶÍÔç¥òññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ã¯ÓîËíÆÛÚæûâÅÃÅõÄæÝ½Ìù¡¢ÍõÆÛá£È¢ûâɳøýÍüÕóÄæÓî̱î¯ÞØÄùÇøæÒůËðÆîЩßËòññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ÄâÚµñÁÇ¡ÍõÇéÓìܨÐÂÔïæÒÝÔüÕÄæÆÀ¡¢ÈÔ÷ËüéÍÐ÷ËÙÇòññ¢Îêá£È¢¡¤òññ¢Îêá£È¢Æ«×äóôÏáÚæûâ۾ࡡ¢È´óôÏáϯ¡¢æÚá«ÚæûâÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©è׿Úòññ¢Îêá£È¢ÄæËðÆî¡¤È´Íêú½Ï¯¡¢ÆÛÚæûâÅÃÅõÄãÄæÛ¾à¡ç¤æÚòññ¢Îêá£È¢ÄæÛ¾à¡óÀÇ¿ïËÆî¡¤Ý·ÚæûâĩĿÆÛá£È¢ËðÆîûâÌ¯ßæÍÐÜÜÅÏÕë¡¢Ý·ÚæûâÄ©âüØôÆî¡£ïÚäÚÍÐǡɻö×õäòññ¢Îêá£È¢ÄæÄ¡Å¢îïÆÛÄèÝ·Úæûâĩڷ̧̽ڵ¡ÖÆÛá£È¢¡×ÄæÅìÅÉ¡¤Ó¼Ý·ÚæûâÄ©ÏûĶç¥Ì½Úµòññ¢Îêá£È¢¡¢Ý·ÚæûâÄ©óÜêØÚ·Ì§Ì½ÚµÆÛá£È¢ÄæÅìÅÉôúᾡ¤Ó¼Ý·ÚæûâÄ©ÛÃ̽ڵç·â½Ä¸ÓÝÓî̱ݽÌùÄæÚæûâÅèËðÆîòññ¢Îêá£È¢¡¢îùÝ·ÚæûâÄ©êØ IBM äÆÙ­ÅîÏÐÍÐêØÝ·Úæûâĩڷ̧̽ڵÆÛá£È¢ÄæÅìÅÉôúᾡ¢Åè̽ڵïËåµÚæû⡤ + +ĶÇÄÒ³òñÆÛá£È¢Ä¡Ë÷ÚæûâÄæòññ¢Îêá£È¢¡¨ +IBM MQ V9.0.3 + +âäàõÄ©ÔÞÓî̱ + +Ó¼ÆÛá£È¢ÏûÝ·ÑÀÌùÒ³ïËÆî¡ÖâäàõÄ©Ôޡס¢Ð¬ÆÛá£È¢ã¯ÓîÝåå÷Ò³Ý·ÚæûâÄ©ÍõâäàõÄ©ÔÞñ¢ðÂÍÔÒ³ÄùÝåâäàõůÞÌÄ÷àÁæÜÆîÝäĿġÝåÅ¡¡¤ÍÔê¢âäàõÄ©ÔÞñ¢ð¡¢ÏûÑÀÙÚÈçÅäÓÑÉ¢äÆË·ÜÓůÆÛá£È¢ÄæèÒüÕÍÐáðóéÖ¤Óòô¿èº¡¢æÚÅäÓÑÉ¢äÆË·ÜÓůÆÛá£È¢ã¯ÓîÆñÄâÇéÍõÄ¡ÈíÄæÑÀÌùâäàõÄ©ÔÞÇô̽ůËðÆîÄæ¡¤Ý·ÚæûâÄ©ÄâÚµÙòÆÛá£È¢ÆîÍõݨܡÆßȢɢäÆÄÖÉ¢Ó×Ý£¡£í¼óéÆßȢɢäÆÄÖÉ¢Ó×Ý£ÍÐàÁæÜǶÈôá£È¢î£¡£óÜÆîá£È¢ÍÐË·ÜÓÄæÝ½í¼Í·Õ­ÍÌ¡¤ÆÜ̽ڵïËåµÄæÆßȢɢäÆÚæûâϯ¡¢Ý·ÚæûâÄ©ÄâÚµÙòÆÛá£È¢ÄæÇ¶ÈôÝåÅ¡ÆîÍõǶÈô̧ÅìÆîÝ䡤 + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãá£È¢ÚæûâÇÙÒü (Z125-3301-14)¡¤ + +á£È¢ÇØê¢ (á£È¢î¾æÀ)¡¨ +IBM MQ Advanced for Developers V9.0.3 (5724-H72) + +ĶÇÄíºäíÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +È´ÓîËðÆîûâ + +ÇñÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA") ůÆÛÚæûâÅÃÅõÍÔÓÝ¡¢IBM ÚæÄèÝ·ÚæûâÄ©¡ÖÆÛá£È¢¡×ÄæÓî̱ËðÆîûâɳ¡¤ÈºÚæûâÅèÝ·ÚæûâÄ©ËíûâɳøýÍüÕóÄæÑÀÆüÅéà¡ÄæÚæûâËðÆîìÒ×ÈÒ³Óî¡¢ËóÇñݨܡðÂì¤Ô«ÞÌÈí ("PVU")¡£æñäãì¤Ô«ÞÌÄ÷ ("RVU")¡£ì¤Ô«ÞÌÈí ("VU") ÍÐ̧ÅìÑÀÌùËðÆîìÒ×È¡¤ÈºÆÀ¡¢Ð©ÓÝÚæû⡢ƫ×äÝ·ÚæûâĩĿËðÆîÅèÑÀÌùñ¢ðÂÒ³Óî¡¢ÍÐã¯ÓîÙòÆÛá£È¢åµÉ¢ÅÅßÎá£È¢¡¢ÍÐ̧̿ÅìÓî̱ÍíÊÖ¡¤ÇÞÝ·ÚæûâÄ©ÆÜÞó¡ÖÆÛá£È¢¡×ĿġŢåîô¤ì¤Ô«ÈÔÅéà¡¡¢ÑÒÅè¡¢ÆÜÅÅÅé÷ìÆÀâ¶Æîϯ¡¢ÄâÚµÈçËð̧ÅìËðÆîÈçÒ³¡¤ÈºÆÀ¡¢Ý·ÚæûâÄ©ÆÜô½ÚæûâËðÆî¡ÖÆÛá£È¢¡×ßÈËòÙ¸Æî IT Τ٭ÄèǶÈôÜÉĵĩ¡£ßÈËòÙ¸ÆîÅäñ¢É¢äÆÍÐÅ¡Õë¡¢ÍÐèׯÛá£È¢ÈçËðÇÂÚæûâ¡£Åø×µÍÐ×µæõÄæÈçÒ³¡§ÈþÝ·ÚæûâÄ©ðãÅè̽ڵÆÛá£È¢ËðÆîÚæûâÄæïËÆîÇÙÒüƶȴÍüÅÆÝ½ÌùϯÄâÇãȺÓÑÒÉÁËêÈ´÷ìÆÀûâɳ¡¢ËíÝ·ÚæûâÄ©ÅÅÅé÷ìÆÀâ¶ÆîÍÐËíÄâÇÑÍÐæÐÅòÛ¾à¡ÄæÝ½ÌùÈÔÌù¡¤IBM ÏñÖçÊîÌùÑÒÉÁÚæÄèÝ·ÚæûâĩЩâú÷ìÆÀûâɳĿûâɳ¡¤ + +ݽ֪ + +á£È¢ÄæÝ½Öªç¥ÍüÍõÆÛá£È¢Ý×Ï¡ÌªÄæÜÓê¢Ò³¡Öë©ÍüêØÊÀÝ´æñع¡×ÝýåçÄ㡤 + +òññ¢Îêá£È¢ + +ÆÛá£È¢ÏûÅèÇéÓìܨÐÂÔïæÒÝÔüÕÄæÅÉÈ¢Úæûâ¡¢ËäÅýÑÄÅèĶÍÔç¥òññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ã¯ÓîËíÆÛÚæûâÅÃÅõÄæÝ½Ìù¡¢ÍõÆÛá£È¢ûâɳøýÍüÕóÄæÓî̱î¯ÞØÄùÇøæÒůËðÆîЩßËòññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ÄâÚµñÁÇ¡ÍõÇéÓìܨÐÂÔïæÒÝÔüÕÄæÆÀ¡¢ÈÔ÷ËüéÍÐ÷ËÙÇòññ¢Îêá£È¢¡¤òññ¢Îêá£È¢Æ«×äóôÏáÚæûâ۾ࡡ¢È´óôÏáϯ¡¢æÚá«ÚæûâÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©è׿Úòññ¢Îêá£È¢ÄæËðÆî¡¤È´Íêú½Ï¯¡¢ÆÛÚæûâÅÃÅõÄãÄæÛ¾à¡ç¤æÚòññ¢Îêá£È¢ÄæÛ¾à¡óÀÇ¿ïËÆî¡¤Ý·ÚæûâĩĿÆÛá£È¢ËðÆîûâÌ¯ßæÍÐÜÜÅÏÕë¡¢Ý·ÚæûâÄ©âüØôÆî¡£ïÚäÚÍÐǡɻö×õäòññ¢Îêá£È¢ÄæÄ¡Å¢îïÆÛÄèÝ·Úæûâĩڷ̧̽ڵ¡ÖÆÛá£È¢¡×ÄæÅìÅÉ¡¤Ó¼Ý·ÚæûâÄ©ÏûĶç¥Ì½Úµòññ¢Îêá£È¢¡¢Ý·ÚæûâÄ©óÜêØÚ·Ì§Ì½ÚµÆÛá£È¢ÄæÅìÅÉôúᾡ¤Ó¼Ý·ÚæûâÄ©ÛÃ̽ڵç·â½Ä¸ÓÝÓî̱ݽÌùÄæÚæûâÅèËðÆîòññ¢Îêá£È¢¡¢îùÝ·ÚæûâÄ©êØ IBM äÆÙ­ÅîÏÐÍÐêØÝ·Úæûâĩڷ̧̽ڵÆÛá£È¢ÄæÅìÅÉôúᾡ¢Åè̽ڵïËåµÚæû⡤ + +ĶÇÄÒ³òñÆÛá£È¢Ä¡Ë÷ÚæûâÄæòññ¢Îêá£È¢¡¨ +IBM MQ V9.0.3 + +âäàõÄ©ÔÞÓî̱ + +Ó¼ÆÛá£È¢ÏûÝ·ÑÀÌùÒ³ïËÆî¡ÖâäàõÄ©Ôޡס¢Ð¬ÆÛá£È¢ã¯ÓîÝåå÷Ò³Ý·ÚæûâÄ©ÍõâäàõÄ©ÔÞñ¢ðÂÍÔÒ³ÄùÝåâäàõůÞÌÄ÷àÁæÜÆîÝäĿġÝåÅ¡¡¤ÍÔê¢âäàõÄ©ÔÞñ¢ð¡¢ÏûÑÀÙÚÈçÅäÓÑÉ¢äÆË·ÜÓůÆÛá£È¢ÄæèÒüÕÍÐáðóéÖ¤Óòô¿èº¡¢æÚÅäÓÑÉ¢äÆË·ÜÓůÆÛá£È¢ã¯ÓîÆñÄâÇéÍõÄ¡ÈíÄæÑÀÌùâäàõÄ©ÔÞÇô̽ůËðÆîÄæ¡¤Ý·ÚæûâÄ©ÄâÚµÙòÆÛá£È¢ÆîÍõݨܡÆßȢɢäÆÄÖÉ¢Ó×Ý£¡£í¼óéÆßȢɢäÆÄÖÉ¢Ó×Ý£ÍÐàÁæÜǶÈôá£È¢î£¡£óÜÆîá£È¢ÍÐË·ÜÓÄæÝ½í¼Í·Õ­ÍÌ¡¤ÆÜ̽ڵïËåµÄæÆßȢɢäÆÚæûâϯ¡¢Ý·ÚæûâÄ©ÄâÚµÙòÆÛá£È¢ÄæÇ¶ÈôÝåÅ¡ÆîÍõǶÈô̧ÅìÆîÝ䡤 + +ÏæÆîÍõÐúÇ¡ÆÒÓÑÚæûâÄæÄ÷ǵ + +ÍõɲöËÝ·ÚæûâÄ©ÇøæÒÍÐËðÆîÆÛá£È¢ÍÔëæÄæÚæûâí°âØÕ롢ĶÇÄá£È¢Ä÷ÇµÄæÇøæÒÍÐËðÆîÄâÄèÅèÈÓâØ¡¤Ç©É»¡¢Ý·ÚæûâĩڵËíÚæûâÛ¾à¡ÇøæÒůËðÆîĶÇÄá£È¢Ä÷ǵ¡¢ÈþæÚá«Ä÷ǵÄâÆîÅèɲöËÆÛá£È¢ÍÔëæÄæÚæûâí°âØ¡¤ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + +ĶÇÄÓÓâØÞÌÈíïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +ÇøæÒ + +ꢡÖÇøæÒ¡×ϯ¡¢ÏûÑÀÆÛá£È¢ÄæÚæûâÓÓâØÞÌÈí¡¤¡ÖÇøæÒ¡×ÏûÑÀÆ«ÍõçÙæªÄæèÒüÕÍÐáðóééöé÷ĸÙÚÈçÄæÆÛá£È¢ÄæÄØÇøæÒîïÆÛ¡¤Ý·ÚæûâÄ©óÜÒ³ÆÛá£È¢ÄæÊäÄ¡¡ÖÇøæÒ¡×Ì½ÚµÄ¡Ç¹Úæû⡤ + +L/N: L-APIG-AKHJMD +D/N: L-APIG-AKHJMD +P/N: L-APIG-AKHJMD + + + +============================================== + + +ÓìÓÑËçâú¡¨îùÅêÜØïåûô + +ÅèĶÇÄÅøÄ¨Ç¹ÚæûâÇÙÒü¡¤ + +1. IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ +2. IBM ÙÏëãá£È¢ÚæûâÇÙÒü + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³ÆßÈ¢É¢äÆÆîÝ䡾ÈÔÏæâ£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆü â¸ÐêÅÂÉùÇÀÚÙÌ¿ÇÀÝå IBM ÙÏëãá£È¢ÚæûâÇÙÒü¡¤ + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³â£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¾ÜÓꢡÖâ£Èõ¡×¡¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑÕëÚÙÌ¿ (i) ÇÀÝåÄæ IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ¡¾¡Öâ£ÈõÚæûâÇÙÒü¡×¡¿¡§Å¯ (ii) ÇÀÝåÄæ IBM ÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA")¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ïËÆîÍõÝ·ÚæûâĩĿâ£Èõßæ¡¤ + +Ó¼Ý·ÚæûâÄ©Íõâ£ÈõßæÑ¥øÜÓÔÚèõÕÇÙÒü¡¾ËóÇñ¡¨IBM ÙÏëã Passport Advantage ÍÐ IBM Passport Advantage Express ÇÙÒü¡¿ÈÔòÙðåÏñÖçÆÛá£È¢¡¾ÍÐ̽ڵÆÛá£È¢Äæ÷ìÆÀÇ¹í°¡¢ÅèËòâ£ÈõßæÑ¥ËðÆî¡¿¡¢Ð¬ IPLA ÈÜÙ¯ïËÆî¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ů IPLA ÄâÚµÇÑÕëÆíÕæ¡§Ì§ÄãǶġÇÙÒüÄâÚµÔºÊÑÆ¶Ä¡ÇÙÒü¡§ÅâȺĨǹҳÇÖÈÜñÁÇ¡ÄæÇÙÒü¡¤ + +ÅèĶҳæÚá«Ä¨Ç¹ÚæûâÇÙÒüÄæÉùðìÄùÕ©¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ (Z125-5543-05)¡¤ + +á£È¢ÇØê¢¡¨IBM MQ Managed File Transfer Service V9.0.1 +á£È¢î¾æÀ¡¨Evaluation + +á£È¢ÇØê¢¡¨IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +á£È¢î¾æÀ¡¨Evaluation + +á£È¢ÇØê¢¡¨IBM MQ Managed File Transfer Agent V9.0.1 +á£È¢î¾æÀ¡¨Evaluation + +â£Èõßæ + +â£ÈõßæÈÜÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÛ¾à¡ÄæÅÊØÄê«¡¢Íõ 90 ÅÊÑ¥ÜÜÅÏ¡¤ + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãá£È¢ÚæûâÇÙÒü (Z125-3301-14)¡¤ + +á£È¢ÇØê¢¡¨IBM MQ Managed File Transfer Service V9.0.1 +á£È¢î¾æÀ¡¨5724-H72 + +á£È¢ÇØê¢¡¨IBM MQ Managed File Transfer Service Idle Standby V9.0.1 +á£È¢î¾æÀ¡¨5724-H72 + +á£È¢ÇØê¢¡¨IBM MQ Managed File Transfer Agent V9.0.1 +á£È¢î¾æÀ¡¨5724-H72 + +ÇñÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA") ůÆÛÚæûâÅÃÅõÍÔÓÝ¡¢IBM ÚæÄèÝ·ÚæûâÄ©¡ÖÆÛá£È¢¡×ÄæÓî̱ËðÆîûâɳ¡¤ÈºÚæûâÅèÝ·ÚæûâÄ©ËíûâɳøýÍüÕóÄæÑÀÆüÅéà¡ÄæÚæûâËðÆîìÒ×ÈÒ³Óî¡¢ËóÇñݨܡðÂì¤Ô«ÞÌÈí ("PVU")¡£æñäãì¤Ô«ÞÌÄ÷ ("RVU")¡£ì¤Ô«ÞÌÈí ("VU") ÍÐ̧ÅìÑÀÌùËðÆîìÒ×È¡¤ÈºÆÀ¡¢Ð©ÓÝÚæû⡢ƫ×äÝ·ÚæûâĩĿËðÆîÅèÑÀÌùñ¢ðÂÒ³Óî¡¢ÍÐã¯ÓîÙòÆÛá£È¢åµÉ¢ÅÅßÎá£È¢¡¢ÍÐ̧̿ÅìÓî̱ÍíÊÖ¡¤ÇÞÝ·ÚæûâÄ©ÆÜÞó¡ÖÆÛá£È¢¡×ĿġŢåîô¤ì¤Ô«ÈÔÅéà¡¡¢ÑÒÅè¡¢ÆÜÅÅÅé÷ìÆÀâ¶Æîϯ¡¢ÄâÚµÈçËð̧ÅìËðÆîÈçÒ³¡¤ÈºÆÀ¡¢Ý·ÚæûâÄ©ÆÜô½ÚæûâËðÆî¡ÖÆÛá£È¢¡×ßÈËòÙ¸Æî IT Τ٭ÄèǶÈôÜÉĵĩ¡£ßÈËòÙ¸ÆîÅäñ¢É¢äÆÍÐÅ¡Õë¡¢ÍÐèׯÛá£È¢ÈçËðÇÂÚæûâ¡£Åø×µÍÐ×µæõÄæÈçÒ³¡§ÈþÝ·ÚæûâÄ©ðãÅè̽ڵÆÛá£È¢ËðÆîÚæûâÄæïËÆîÇÙÒüƶȴÍüÅÆÝ½ÌùϯÄâÇãȺÓÑÒÉÁËêÈ´÷ìÆÀûâɳ¡¢ËíÝ·ÚæûâÄ©ÅÅÅé÷ìÆÀâ¶ÆîÍÐËíÄâÇÑÍÐæÐÅòÛ¾à¡ÄæÝ½ÌùÈÔÌù¡¤IBM ÏñÖçÊîÌùÑÒÉÁÚæÄèÝ·ÚæûâĩЩâú÷ìÆÀûâɳĿûâɳ¡¤ + +á£È¢ÄæÝ½Öªç¥ÍüÍõÆÛá£È¢Ý×Ï¡ÌªÄæÜÓê¢Ò³¡Öë©ÍüêØÊÀÝ´æñع¡×ÝýåçÄ㡤 + +Æ«ÇÂßׯÌÝÔüÕ + +ÆÛá£È¢ÄùÉÖÆ«ÇÂßׯÌÄ÷ǵϯ¡¢æÚá«Ä÷ǵóÜç¥ÍüÍõÆÛá£È¢óôÏáÄæ REDIST óòÄã¡¤ØæÆÛÇÙÒüÍÔÚæÄèÄæûâɳÆÀ¡¢ÍõĶÇÄÛ¾à¡Ý½Ìùî¯ÞØÄù¡¢Ý·ÚæûâÄ©ÅÉÚµß×ÆÌÆ«ÇÂßׯÌÝÔüÕ¡¨ +1) ã¯ÓîÅèÚèÆîÆøÎûî£ÄæÖªÈ¢ÇÂß×ÆÌ¡¢ËäóÜò×ÇöÆÛá£È¢óôÏáÄæ REDIST ÍÐÅÆÇµÄãĿġŢÑÀÆü¡£ë©Íüůá£È¢Ý½Öª¡§ +2) ÆÛá£È¢óôÏáÅÆÇµÍüÅÆÝ½ÌùÝ·ÚæûâĩڵԺÊÑÆ«ÇÂßׯÌÝÔüÕϯ¡¢æÚÔºÊÑÈçÒ³óÜÜÊÇÙæÚÅÆÇµÄãĿġŢÑÀÆü¡£ë©Íüůá£È¢Ý½Öª¡§ÇñÈ´ÔºÊÑ¡¢æÚá«ÔºÊÑâúÆøáþÒ³¡ÖÆ«ÇÂßׯÌÝÔüաס§ +3) Ý·ÚæûâÄ©ã¯ÓîÙò̧ɢҳɳÆîÆÛá£È¢âäàõÄæÝ·ÚæûâÄ©óÜÆîá£È¢¡¾¡ÖÝ·ÚæûâÄ©óÜÆîá£È¢¡×¡¿ÄæÄ¡ÝåÅ¡¡¢ÅÉÚµß×ÆÌÆ«ÇÂßׯÌÝÔüÕ¡¢Åâã¯ÓîÆîÅèÅÅßÎÝ·ÚæûâĩĿÐêÅ¡¢Ëð̧ڵÅè䮨ÙËðÆîÝ·ÚæûâÄ©óÜÆîá£È¢¡¤Ý·ÚæûâĩĿóÜÆîá£È¢óÜ̦ȴÓìÄËÏáÅûì¤Ô«¡¢ËÍÅèËðÝ·ÚæûâÄ©ÝÔüÕܨÐÂÄæËðÆîÏ¯ÏæÅè̽ڵƫÇÂßׯÌÝÔüÕÒ³ÅäÓÑÙ¯ñ¢ÈÔõÕâ¹æÚÝÔüÕܨС§ +4) ÇñÆ«ÇÂßׯÌÝÔüÕÅýÑÄ Java Runtime Environment¡¢Ð¬Ý·ÚæûâĩǩóÜÙò̧ÅìÏæ Java Æ«ÇÂßׯÌÝÔüÕ×ÊÄ«Ý·ÚæûâĩĿóÜÆîá£È¢Äã¡¢ÈþæÚóÜÆîá£È¢ÏûÙñÒ³ÍõÄ¡×ïçÙæªæÒåô¡¾ËóÇñ¡¨á­Ø´ÐÎçÙæª¡£Ö¤Ä¸ÐÎçÙæªÅ¯ÈùΤð¡¿ÈÔÏæÍõ߿ĸÐÎÍÐæñعÇô̽æÒåô¡¾Ç©É»¡¢ÄùÉÖãòݨܡðÂÈþÄâÅèçªê«Ò³Ì§ÅäÓÑÆîÝäÄææÒåô¡¿ÙÚÈçÈÔÝÃÓÓϯ¡¢ÄâÇãȺÓî¡§ +5) Ý·ÚæûâÄ©ÄâÚµÜÃØæÆ«ÇÂßׯÌÝÔüÕÍÔÉÖÄæÇ¶ÈôááÉ¢ûâíºÆüÍÐÎÃãôËçâúóòÕù¡§ +6) è×ÍõÇÞËðÆîÍÐßׯÌÝ·ÚæûâÄ©óÜÆîá£È¢ÈÔßÈÅøÄæïªóÁîùÊåϯ¡¢Ý·ÚæûâÄ©óÜËð IBM¡£Ì§ËòóÜÙ¸ÍÐåîïÚٸɭ̿ä´Õ¤Å¯ßÈÅøÊ¾û³¡§ +7) Ý·ÚæûâÄ©ÄâÚµËðÆîêØÆ«ÇÂßׯÌÝÔüÕÔÏÌîóò/í¼ÜÚÒÞÇÑÄææûÕÀÇØê¢¡§ +8) ÆÜËçǿ̽ڵ IBM¡£Ì§ËòóÜÙ¸ÍÐåîïÚÙ¸ÄæÕóÓòÇÑãô¡¢Ý·ÚæûâÄ©ÍõïÚÙÇÝ·ÚæûâÄ©óÜÆîá£È¢ÕëÄâÚµËðÆî IBM ÍÐæÚËòóÜÙ¸ÍÐåîïÚÙ¸ÄæÇØê¢ÍÐÙ¸íº¡§ +9) IBM¡£Ì§ËòóÜٸůåîïÚÙ¸Åè¡ÖÜ¢Îí¡×ßÈËòÆ«ÇÂßׯÌÝÔüÕů̧ÒÞùÃÅÆÇµ¡¢ËäàÒÅÅßÎÄæåøÙ­¡¢Ç©ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡§ +10) Ý·ÚæûâÄ©óÜÆîá£È¢Å¯Æ«ÇÂßׯÌÝÔüÕÄæÔºÊÑ¡¢Ì§Ä¡Å¢ÊÀݴ̶ɷ¡¢äÍÆñÝ·ÚæûâÄ©ÈÜÈçÓ×ÝÊ¡§Å¯ +11) ÍõÝ·ÚæûâÄ©êØÝ·ÚæûâÄ©óÜÆîá£È¢ËðÆîϯÍÔÓÔÚæûâÇÙÒüÄã¡¢Ý·ÚæûâÄ©óÜÉËÏ¡æÚËðÆîϯƫÇÂßׯÌÝÔüÕÍÐ̧ԺÊÑâúÆø i) ÄâÚµÆîÍõÚöÆîÝ·ÚæûâÄ©óÜÆîá£È¢ÅèÆÀÄæÆîÝä¡§ii) ÄâÚµîïêû¡¾ÈþÆîÍõެǹϯÄâÇãȺÓî¡¿¡§iii) ã¯Óî䮨ÙÝ·ÚæûâÄ©óÜÆîá£È¢ÅÉÚµÇÂßׯÌÍÐÇÂ÷Ëüé¡§ÍÐ iv) ÄâÚµØËÇ×ÜÚÇÙ¡£ØËÇ×î¾ú¬ÍÐÅȩ̀ÅìÅÉÎÎæØúÁ¡¢ÈþÎÎÑ£ÖÖɱݽÌùÄâÚµÅèÐÖÒüÓî̱ϯ¡¢ÄâÇãȺÓȺÆÀ¡¢Ý·ÚæûâÄ©ÄæÚæûâÇÙÒüè× IBM ÄæÏñû¬¡¢ÈÝÅ·óÜêØÆÛÇÙÒüÄæÛ¾à¡ÒÞÇÑ¡¤ + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + +Þóá£È¢Äæ REDIST óòÄãÍÔÇÄÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢Ý·ÚæûâÄ©ËíÆÛÚæûâÛ¾à¡Å¯ REDIST óòÄãÄæÑÀÆü¡¢ÚµÇÂß×ÆÌæÚá«ÔÏÌîî£Ä÷ǵԺÓÔÎêÍÐî¯ËóááÉ¢Î졤 + +ÇøæÒ + +ꢡÖÇøæÒ¡×ϯ¡¢ÏûÑÀÆÛá£È¢ÄæÚæûâÓÓâØÞÌÈí¡¤¡ÖÇøæÒ¡×ÏûÑÀÆ«ÍõçÙæªÄæèÒüÕÍÐáðóééöé÷ĸÙÚÈçÄæÆÛá£È¢ÄæÄØÇøæÒîïÆÛ¡¤Ý·ÚæûâÄ©óÜÒ³ÆÛá£È¢ÄæÊäÄ¡¡ÖÇøæÒ¡×Ì½ÚµÄ¡Ç¹Úæû⡤ + +ݨܡðÂì¤Ô«ÞÌÄ÷ (PVU) + +ꢡÖݨܡðÂì¤Ô«ÞÌÄ÷ (PVU)¡×ϯ¡¢ÏûÑÀÆÛá£È¢ÄæÚæûâÓÓâØÞÌÈí¡¤ÍÔëæ PVU ÚæûâÄæÇ¹í°¡¢ÏûÅèݨܡðÂÊÀÝ´¡¾ËíݨܡðÂËòóÜÙ¸¡£ÐÂàÖ¡£ñ¢ÐÎůÐÎæÀÈÔÝ·ÌùåøÍõ PVU ÏС¢æÚÏÐÈíÍõ http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ê½Éß¡¿Å¯ËòÆÛá£È¢ËðÆîÄæÝ¨Ü¡ðÂí°âØÒ³Ù×öð¡¤IBM Ù×ÍõÅè PVU Ò³ÚæûâÓÓâØÞÌÈíÄæÆøÎû¡¢Ñ½úýÙòġԶݨܡðÂÌùåøÒ³ßÞÅÚďĿÊäġݨܡðÂÕøÅÀ¡¤ËóÇñ¡¢÷äÕøÅÀݨܡðÂßÞÅÚȴĨԶݨܡðÂÕøÅÀ¡¤ + +Ý·ÚæûâÄ©Ëí Passport Advantage ÄÍÕ©âØÚæûâ۾ࡡ¾îùÙ¶ïåĶÇÄê½Ó÷¡¿¡¢ÚµËðÆî¡ÖÉùðìÕ©âØ¡×ÚæûâÍСÖáðóéÅ§Õ©âØ¡¾ÄÍÕ©âØ¡¿¡×ÚæûâÝåå÷ÆÛá£È¢¡¤Ó¼ÚèÆî¡ÖÉùðìÕ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©óÜ̽ڵËÍÅèÛàêäèÒüÕàýüÕô¿èºÄãËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀ* PVU Úæûâ¡¢ÈþÄØÆãļÜÃØæÆÛá£È¢ÄææÚá«ÈùΤðÂØæÆÀ¡¤Ó¼ËðÆî¡ÖáðóéÅ§Õ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©ëæËí¡ÖáðóéŧթâØÚæûâÓÓí°Ý½Ð¬¡×ÄæÌùåø¡¢Ì½ÚµËÍÅèÛàêäËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀÄæÚæûâí°âØ¡¢ê½ÉßÇñĶ¡¨http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡¤ + +*¡ÖÄØÚöٯݨܡðÂÕøÅÀ¡×ÏûÑÀÆ«ËðÆîÍõèÒüÕÍÐáðóéÈùΤðÂÄãÄæÝ¨Ü¡ðÂÕøÅÀ¡¢Äâï¢Ý¨Ü¡ðÂÕøÅÀÄæÕ©âØÑÒÉÁÆ«÷³ÆñÍÐÄØ÷³ÆñáðóéŧÊÀÝ´¡£É¢äÆË·ÜÓÑÀÅï¡£BIOS ÝÃÌùÍÐùËÈýÓî̱ÈÔÅûÅèÓî̱ϯ¡¢ÉáÇÑ¡¤ + +á£È¢ÖÖɱ۾ࡠ+ +âçåôÑ¡ÌÔØÙåô + +Ù×ÍõÆÛåçÄæÆøÎû¡¢¡ÖâçåôÑ¡ÌÔ¡×ØÙåôÏûÑÀÜÊÇÙĶÇÄÚÅÊ°ÄæØÙåô¡¨ÆÛá£È¢ÄæîïÆÛÇøæÒÍõÑÜÈùΤðÂĸ¡¢æÚÈùΤðÂé¬È©ØíÆ«ÆîÍÌæØÊîÅÉÕùĿġÝåÅ¡¡¢ÅâæÚÈùΤðÂÏûÍõÉ¢ÆîÄãÈùΤðÂďĿæÚÆÛá£È¢îïÆÛàÒÎÎú«úýËðÆîÕëÉ¢Ò³ÆÛá£È¢ÆÂÕæÚÙê§ÄæÈùΤðÂϯ¡¤ã¯ÓîÍõÑÜÈùΤðÂÙñËò̶ɷÆÂÕæÚÙê§èÒÙ­Äæê§Ü¡Ù¯É¢ËðÆîÕë¡¢æÚÈùΤðÂÌîáþÇÑ¡Öâçåô¡×¡¤ + +ÆÛá£È¢Äâ򵂿æÒÍõ¡ÖâçåôÑ¡ÌÔ¡×ÈùΤð¡¢Èþ̽ڵïËåµÚæûâϯÄâÇãȺÓ + +Ó¼ÆÛá£È¢ËðÆîÍõÄùÉÖ Multi-Instance Queue Manager ÜÚÇµÄæ¡ÖâçåôÑ¡ÌÔ¡×ØÙåô¡¢Ð¬ÆÛá£È¢îïÆÛÚµÙ×ÍõÞ¬Ç¹ÆøÎûÈÔÈíÍõâçåôÑ¡ÌÔÈùΤð¡¢ÅâÄèÅèÚöÙ¯¡¢ÈþóÜÄóêÄѽ¡Öâçåô¡×¡¢ÅâÄâÚµÆîÍõÙÚÈçǶÈôÆßȢɢäÆÄÖÉ¢¡¢ÈþÉ¢ÆîÄãÈùΤðÂÆñâçåôÑ¡ÌÔÈùΤðÂÆÂÕæÚÙê§Ï¯ÄâÇãȺÓî¡¢ÇãȺÚÅÎÓĶ¡¢æÚâçåôÑ¡ÌÔîïÆÛÚµÍõÆÂÕæÚÙê§ÄæßæâæÆîÍõÙÚÈçÆßȢɢäÆÄÖÉ¢¡¤ + +Ó¼ÆÛá£È¢ËðÆîÍõÄùÉÖ̧ÅìØíÆ«ÆîÍÌË·ÜÓÄæ¡ÖâçåôÑ¡ÌÔ¡×ØÙåô¡¢Ð¬ÆÛá£È¢îïÆÛÚµÙ×ÍõÞ¬Ç¹ÆøÎûÈÔÈíÍõâçåôÑ¡ÌÔÈùΤð¡¢ÚÍÄâÚµÄèÅèÚöÙ¯¡¾ÇÞÈÔÄâÚµÆîÍõÙÚÈçǶÈôÆßȢɢäÆÄÖÉ¢¡¿¡¢ÈþÙòÍõÉ¢ÆîÄãÈùΤðÂÆÂÕæÕëÆñØíÆ«ÆîÍÌÄ÷ǵÈÜÙ¯ÄèÅèÚöÙ¯¡¢ÇãȺÚÅÎÓĶ¡¢æÚâçåôÑ¡ÌÔîïÆÛÚµÍõÆÂÕæÚÙê§ÄæßæâæÆîÍõÙÚÈçÆßȢɢäÆÄÖÉ¢¡¤ + + +L/N: L-APIG-ABMG8R +D/N: L-APIG-ABMG8R +P/N: L-APIG-ABMG8R + + + +============================================== + + +ÓìÓÑËçâú¡¨îùÅêÜØïåûô + +ÅèĶÇÄÅøÄ¨Ç¹ÚæûâÇÙÒü¡¤ + +1. IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ +2. IBM ÙÏëãá£È¢ÚæûâÇÙÒü + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³ÆßÈ¢É¢äÆÆîÝ䡾ÈÔÏæâ£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆü â¸ÐêÅÂÉùÇÀÚÙÌ¿ÇÀÝå IBM ÙÏëãá£È¢ÚæûâÇÙÒü¡¤ + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³â£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¾ÜÓꢡÖâ£Èõ¡×¡¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑÕëÚÙÌ¿ (i) ÇÀÝåÄæ IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ¡¾¡Öâ£ÈõÚæûâÇÙÒü¡×¡¿¡§Å¯ (ii) ÇÀÝåÄæ IBM ÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA")¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ïËÆîÍõÝ·ÚæûâĩĿâ£Èõßæ¡¤ + +Ó¼Ý·ÚæûâÄ©Íõâ£ÈõßæÑ¥øÜÓÔÚèõÕÇÙÒü¡¾ËóÇñ¡¨IBM ÙÏëã Passport Advantage ÍÐ IBM Passport Advantage Express ÇÙÒü¡¿ÈÔòÙðåÏñÖçÆÛá£È¢¡¾ÍÐ̽ڵÆÛá£È¢Äæ÷ìÆÀÇ¹í°¡¢ÅèËòâ£ÈõßæÑ¥ËðÆî¡¿¡¢Ð¬ IPLA ÈÜÙ¯ïËÆî¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ů IPLA ÄâÚµÇÑÕëÆíÕæ¡§Ì§ÄãǶġÇÙÒüÄâÚµÔºÊÑÆ¶Ä¡ÇÙÒü¡§ÅâȺĨǹҳÇÖÈÜñÁÇ¡ÄæÇÙÒü¡¤ + +ÅèĶҳæÚá«Ä¨Ç¹ÚæûâÇÙÒüÄæÉùðìÄùÕ©¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ (Z125-5543-05)¡¤ + +á£È¢ÇØê¢¡¨IBM MQ Advanced Message Security V9.0.1 +á£È¢î¾æÀ¡¨Evaluation + +á£È¢ÇØê¢¡¨IBM MQ Advanced Message Security Idle Standby V9.0.1 +á£È¢î¾æÀ¡¨Evaluation + +á£È¢ÇØê¢¡¨IBM MQ Telemetry V9.0.1 +á£È¢î¾æÀ¡¨Evaluation + +â£Èõßæ + +â£ÈõßæÈÜÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÛ¾à¡ÄæÅÊØÄê«¡¢Íõ 90 ÅÊÑ¥ÜÜÅÏ¡¤ + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + + + +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãá£È¢ÚæûâÇÙÒü (Z125-3301-14)¡¤ + +á£È¢ÇØê¢¡¨IBM MQ Advanced Message Security V9.0.1 +á£È¢î¾æÀ¡¨5724-H72 + +á£È¢ÇØê¢¡¨IBM MQ Advanced Message Security Idle Standby V9.0.1 +á£È¢î¾æÀ¡¨5724-H72 + +á£È¢ÇØê¢¡¨IBM MQ Telemetry V9.0.1 +á£È¢î¾æÀ¡¨5724-H72 + +ÇñÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA") ůÆÛÚæûâÅÃÅõÍÔÓÝ¡¢IBM ÚæÄèÝ·ÚæûâÄ©¡ÖÆÛá£È¢¡×ÄæÓî̱ËðÆîûâɳ¡¤ÈºÚæûâÅèÝ·ÚæûâÄ©ËíûâɳøýÍüÕóÄæÑÀÆüÅéà¡ÄæÚæûâËðÆîìÒ×ÈÒ³Óî¡¢ËóÇñݨܡðÂì¤Ô«ÞÌÈí ("PVU")¡£æñäãì¤Ô«ÞÌÄ÷ ("RVU")¡£ì¤Ô«ÞÌÈí ("VU") ÍÐ̧ÅìÑÀÌùËðÆîìÒ×È¡¤ÈºÆÀ¡¢Ð©ÓÝÚæû⡢ƫ×äÝ·ÚæûâĩĿËðÆîÅèÑÀÌùñ¢ðÂÒ³Óî¡¢ÍÐã¯ÓîÙòÆÛá£È¢åµÉ¢ÅÅßÎá£È¢¡¢ÍÐ̧̿ÅìÓî̱ÍíÊÖ¡¤ÇÞÝ·ÚæûâÄ©ÆÜÞó¡ÖÆÛá£È¢¡×ĿġŢåîô¤ì¤Ô«ÈÔÅéà¡¡¢ÑÒÅè¡¢ÆÜÅÅÅé÷ìÆÀâ¶Æîϯ¡¢ÄâÚµÈçËð̧ÅìËðÆîÈçÒ³¡¤ÈºÆÀ¡¢Ý·ÚæûâÄ©ÆÜô½ÚæûâËðÆî¡ÖÆÛá£È¢¡×ßÈËòÙ¸Æî IT Τ٭ÄèǶÈôÜÉĵĩ¡£ßÈËòÙ¸ÆîÅäñ¢É¢äÆÍÐÅ¡Õë¡¢ÍÐèׯÛá£È¢ÈçËðÇÂÚæûâ¡£Åø×µÍÐ×µæõÄæÈçÒ³¡§ÈþÝ·ÚæûâÄ©ðãÅè̽ڵÆÛá£È¢ËðÆîÚæûâÄæïËÆîÇÙÒüƶȴÍüÅÆÝ½ÌùϯÄâÇãȺÓÑÒÉÁËêÈ´÷ìÆÀûâɳ¡¢ËíÝ·ÚæûâÄ©ÅÅÅé÷ìÆÀâ¶ÆîÍÐËíÄâÇÑÍÐæÐÅòÛ¾à¡ÄæÝ½ÌùÈÔÌù¡¤IBM ÏñÖçÊîÌùÑÒÉÁÚæÄèÝ·ÚæûâĩЩâú÷ìÆÀûâɳĿûâɳ¡¤ + +á£È¢ÄæÝ½Öªç¥ÍüÍõÆÛá£È¢Ý×Ï¡ÌªÄæÜÓê¢Ò³¡Öë©ÍüêØÊÀÝ´æñع¡×ÝýåçÄ㡤 + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + +ÇøæÒ + +ꢡÖÇøæÒ¡×ϯ¡¢ÏûÑÀÆÛá£È¢ÄæÚæûâÓÓâØÞÌÈí¡¤¡ÖÇøæÒ¡×ÏûÑÀÆ«ÍõçÙæªÄæèÒüÕÍÐáðóééöé÷ĸÙÚÈçÄæÆÛá£È¢ÄæÄØÇøæÒîïÆÛ¡¤Ý·ÚæûâÄ©óÜÒ³ÆÛá£È¢ÄæÊäÄ¡¡ÖÇøæÒ¡×Ì½ÚµÄ¡Ç¹Úæû⡤ + +ݨܡðÂì¤Ô«ÞÌÄ÷ (PVU) + +ꢡÖݨܡðÂì¤Ô«ÞÌÄ÷ (PVU)¡×ϯ¡¢ÏûÑÀÆÛá£È¢ÄæÚæûâÓÓâØÞÌÈí¡¤ÍÔëæ PVU ÚæûâÄæÇ¹í°¡¢ÏûÅèݨܡðÂÊÀÝ´¡¾ËíݨܡðÂËòóÜÙ¸¡£ÐÂàÖ¡£ñ¢ÐÎůÐÎæÀÈÔÝ·ÌùåøÍõ PVU ÏС¢æÚÏÐÈíÍõ http://www.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html ê½Éß¡¿Å¯ËòÆÛá£È¢ËðÆîÄæÝ¨Ü¡ðÂí°âØÒ³Ù×öð¡¤IBM Ù×ÍõÅè PVU Ò³ÚæûâÓÓâØÞÌÈíÄæÆøÎû¡¢Ñ½úýÙòġԶݨܡðÂÌùåøÒ³ßÞÅÚďĿÊäġݨܡðÂÕøÅÀ¡¤ËóÇñ¡¢÷äÕøÅÀݨܡðÂßÞÅÚȴĨԶݨܡðÂÕøÅÀ¡¤ + +Ý·ÚæûâÄ©Ëí Passport Advantage ÄÍÕ©âØÚæûâ۾ࡡ¾îùÙ¶ïåĶÇÄê½Ó÷¡¿¡¢ÚµËðÆî¡ÖÉùðìÕ©âØ¡×ÚæûâÍСÖáðóéÅ§Õ©âØ¡¾ÄÍÕ©âØ¡¿¡×ÚæûâÝåå÷ÆÛá£È¢¡¤Ó¼ÚèÆî¡ÖÉùðìÕ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©óÜ̽ڵËÍÅèÛàêäèÒüÕàýüÕô¿èºÄãËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀ* PVU Úæûâ¡¢ÈþÄØÆãļÜÃØæÆÛá£È¢ÄææÚá«ÈùΤðÂØæÆÀ¡¤Ó¼ËðÆî¡ÖáðóéÅ§Õ©âØ¡×Úæûâ¡¢Ý·ÚæûâÄ©ëæËí¡ÖáðóéŧթâØÚæûâÓÓí°Ý½Ð¬¡×ÄæÌùåø¡¢Ì½ÚµËÍÅèÛàêäËòÆÛá£È¢ËðÆîÍÐÆñÆÛá£È¢ê§Ü¡ÄæÄ¡Å¢ÄØÚöٯݨܡðÂÕøÅÀÄæÚæûâí°âØ¡¢ê½ÉßÇñĶ¡¨http://www.ibm.com/software/lotus/passportadvantage/Counting_Software_licenses_using_specific_virtualization_technologies.html¡¤ + +*¡ÖÄØÚöٯݨܡðÂÕøÅÀ¡×ÏûÑÀÆ«ËðÆîÍõèÒüÕÍÐáðóéÈùΤðÂÄãÄæÝ¨Ü¡ðÂÕøÅÀ¡¢Äâï¢Ý¨Ü¡ðÂÕøÅÀÄæÕ©âØÑÒÉÁÆ«÷³ÆñÍÐÄØ÷³ÆñáðóéŧÊÀÝ´¡£É¢äÆË·ÜÓÑÀÅï¡£BIOS ÝÃÌùÍÐùËÈýÓî̱ÈÔÅûÅèÓî̱ϯ¡¢ÉáÇÑ¡¤ + +á£È¢ÖÖɱ۾ࡠ+ +âçåôÑ¡ÌÔØÙåô + +Ù×ÍõÆÛåçÄæÆøÎû¡¢¡ÖâçåôÑ¡ÌÔ¡×ØÙåôÏûÑÀÜÊÇÙĶÇÄÚÅÊ°ÄæØÙåô¡¨ÆÛá£È¢ÄæîïÆÛÇøæÒÍõÑÜÈùΤðÂĸ¡¢æÚÈùΤðÂé¬È©ØíÆ«ÆîÍÌæØÊîÅÉÕùĿġÝåÅ¡¡¢ÅâæÚÈùΤðÂÏûÍõÉ¢ÆîÄãÈùΤðÂďĿæÚÆÛá£È¢îïÆÛàÒÎÎú«úýËðÆîÕëÉ¢Ò³ÆÛá£È¢ÆÂÕæÚÙê§ÄæÈùΤðÂϯ¡¤ã¯ÓîÍõÑÜÈùΤðÂÙñËò̶ɷÆÂÕæÚÙê§èÒÙ­Äæê§Ü¡Ù¯É¢ËðÆîÕë¡¢æÚÈùΤðÂÌîáþÇÑ¡Öâçåô¡×¡¤ + +ÆÛá£È¢Äâ򵂿æÒÍõ¡ÖâçåôÑ¡ÌÔ¡×ÈùΤð¡¢Èþ̽ڵïËåµÚæûâϯÄâÇãȺÓ + +Ó¼ÆÛá£È¢ËðÆîÍõÄùÉÖ Multi-Instance Queue Manager ÜÚÇµÄæ¡ÖâçåôÑ¡ÌÔ¡×ØÙåô¡¢Ð¬ÆÛá£È¢îïÆÛÚµÙ×ÍõÞ¬Ç¹ÆøÎûÈÔÈíÍõâçåôÑ¡ÌÔÈùΤð¡¢ÅâÄèÅèÚöÙ¯¡¢ÈþóÜÄóêÄѽ¡Öâçåô¡×¡¢ÅâÄâÚµÆîÍõÙÚÈçǶÈôÆßȢɢäÆÄÖÉ¢¡¢ÈþÉ¢ÆîÄãÈùΤðÂÆñâçåôÑ¡ÌÔÈùΤðÂÆÂÕæÚÙê§Ï¯ÄâÇãȺÓî¡¢ÇãȺÚÅÎÓĶ¡¢æÚâçåôÑ¡ÌÔîïÆÛÚµÍõÆÂÕæÚÙê§ÄæßæâæÆîÍõÙÚÈçÆßȢɢäÆÄÖÉ¢¡¤ + +Ó¼ÆÛá£È¢ËðÆîÍõÄùÉÖ̧ÅìØíÆ«ÆîÍÌË·ÜÓÄæ¡ÖâçåôÑ¡ÌÔ¡×ØÙåô¡¢Ð¬ÆÛá£È¢îïÆÛÚµÙ×ÍõÞ¬Ç¹ÆøÎûÈÔÈíÍõâçåôÑ¡ÌÔÈùΤð¡¢ÚÍÄâÚµÄèÅèÚöÙ¯¡¾ÇÞÈÔÄâÚµÆîÍõÙÚÈçǶÈôÆßȢɢäÆÄÖÉ¢¡¿¡¢ÈþÙòÍõÉ¢ÆîÄãÈùΤðÂÆÂÕæÕëÆñØíÆ«ÆîÍÌÄ÷ǵÈÜÙ¯ÄèÅèÚöÙ¯¡¢ÇãȺÚÅÎÓĶ¡¢æÚâçåôÑ¡ÌÔîïÆÛÚµÍõÆÂÕæÚÙê§ÄæßæâæÆîÍõÙÚÈçÆßȢɢäÆÄÖÉ¢¡¤ + + +L/N: L-APIG-ACVHBA +D/N: L-APIG-ACVHBA +P/N: L-APIG-ACVHBA + + + + + +ÓìÓÑËçâú¡¨îùÅêÜØïåûô + +ÅèĶÇÄÅøÄ¨Ç¹ÚæûâÇÙÒü¡¤ + +1. IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ +2. IBM ÙÏëãá£È¢ÚæûâÇÙÒü + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³ÆßÈ¢É¢äÆÆîÝ䡾ÈÔÏæâ£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆü â¸ÐêÅÂÉùÇÀÚÙÌ¿ÇÀÝå IBM ÙÏëãá£È¢ÚæûâÇÙÒü¡¤ + +Ó¼Ý·Úæûâĩ̽ڵÆÛá£È¢ÄæÆøÎûÒ³â£Èõ¡£àÁæÜ¡£æÜÆî¡¾æÜÑ¥ÇÂ⹡¿ÍÐÆü¾ÜÓꢡÖâ£Èõ¡×¡¿¡¨ÑºÄ¡Ä¶¡ÖÚÙÌ¿¡×ĿĶÅÉѺâÚ¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑÕëÚÙÌ¿ (i) ÇÀÝåÄæ IBM ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ¡¾¡Öâ£ÈõÚæûâÇÙÒü¡×¡¿¡§Å¯ (ii) ÇÀÝåÄæ IBM ÙÏëãá£È¢ÚæûâÇÙÒü ("IPLA")¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ïËÆîÍõÝ·ÚæûâĩĿâ£Èõßæ¡¤ + +Ó¼Ý·ÚæûâÄ©Íõâ£ÈõßæÑ¥øÜÓÔÚèõÕÇÙÒü¡¾ËóÇñ¡¨IBM ÙÏëã Passport Advantage ÍÐ IBM Passport Advantage Express ÇÙÒü¡¿ÈÔòÙðåÏñÖçÆÛá£È¢¡¾ÍÐ̽ڵÆÛá£È¢Äæ÷ìÆÀÇ¹í°¡¢ÅèËòâ£ÈõßæÑ¥ËðÆî¡¿¡¢Ð¬ IPLA ÈÜÙ¯ïËÆî¡¤ + +¡Öâ£ÈõÚæûâÇÙÒü¡×ů IPLA ÄâÚµÇÑÕëÆíÕæ¡§Ì§ÄãǶġÇÙÒüÄâÚµÔºÊÑÆ¶Ä¡ÇÙÒü¡§ÅâȺĨǹҳÇÖÈÜñÁÇ¡ÄæÇÙÒü¡¤ + +ÅèĶҳæÚá«Ä¨Ç¹ÚæûâÇÙÒüÄæÉùðìÄùÕ©¡¤ + + +ÙÏëãÚæûâÇÙÒü - á£È¢â£Èõ + +ÜÉÄ¡ÝåÅ¡ - Ä¡×ï۾ࡠ+ +Ý·ÚæûâĩġÆÙĶ祡£ÇøæÒ¡£îïêû¡£Çô̽¡£ÑºÄ¶¡ÖÚÙÌ¿¡×ѺâÚÍÐËðÆîÆÛ¡Öá£È¢¡×¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÄæÛ¾à¡¡¤Ó¼ â¸ÐêÅÂÏûÅîÏÐÝ·ÚæûâÄ©ÚÙÌ¿æÚá«Û¾à¡¡¢Ð¬ â¸ÐêÅÂôøÍüËäÏñøý â¸ÐêÅÂðßÈ´ÅòÅ¡ûâÓîÚµÅèËðÝ·Úæûâĩ̿Ⱥá«Û¾à¡ÍíÊÖ¡¤Ó¼ â¸ÐêÅÂÄâÇÑãôÆÛÇÙÒüÛ¾à¡Õë¡¢ + +* îùŦĶ祡£ÇøæÒ¡£îïêû¡£Çô̽¡£ÑºÄ¶¡ÖÚÙÌ¿¡×ѺâÚÍÐËðÆîÆÛ¡Öá£È¢¡×¡§Å¯ + +* îùǡɻÙòÆÜËðÆîÄæÞèüÕêØë©ÍüÅÆÇµØÍÇßÔÏËòÝÌìÞÙ¸¡¾IBM ÍÐ̧÷ËïÚÙ¸¡¿¡¤Ó¼ÄØÄ¶ç¥ÆÛ¡Öá£È¢¡×¡¢Ð¬óÜïÚäÚÆÛ¡Öá£È¢¡×ĿġŢîïÆÛ¡¤ + +1. Ìùåø + +¡ÖÚæûâËðÆî¡× - Ý·ÚæûâÄ©Ì½ÚµÚæûâÅèÙÚÈçÆÛ¡Öá£È¢¡×ÄæÖÖÌùìÒ×È¡¤æÚìÒ×ÈÄæÐùâØÞÌÄ÷¡¢ÚµËíËðÆîϯí°âØ¡£ÈËåÜΤ٭ÞÌÄ÷ ("MSU")¡£Ý¨Ü¡ðÂì¤Ô«ÞÌÄ÷ ("PVU") ÍÐ̧Åì IBM ÑÀÌùÄæËðÆîìÒ×ÈÒ³Äæ¡¤ + +¡ÖIBM¡× - ÏûÑÀ International Business Machines Corporation ÍÐ̧ÄÍÄüƳ¡¤ + +¡ÖÚæûâÅÃÅõ¡×("LI") - ÏûÑÀÄùÉÖÑÜ¡Öá£È¢¡×ÖÖÌùæñعůǶÈôÏáÅûÛ¾à¡ÄæÅÆÇµ¡¤ÆÛ¡Öá£È¢¡×Äæ¡ÖÚæûâÅÃÅõ¡×Æ«×äÈíÍõÆÛ¡Öá£È¢¡×ÑÜÆøòçÄæóòÕùÄù¡¢ÅèËðÆîË·ÜÓÑÀÅïÅÉÈ¢ÏíÆ«ÊÆÌ¯¡¢ÈºÆÀ¡¢Ç©Æ«×äÅèÄÑÅõÄÍʰȢóôÏáÍõÆÛ¡Öá£È¢¡×¡¤ + +¡Öá£È¢¡× - ÏûÑÀá£È¢ÔÏÎêů̧ÇÀÝåÍÐÝåÅ¡îïÆÛ¡¢ÅýÑÄ¡¨1) ñ¢ðÂÆ«ïåûôÑÀÅïêØæñÕè¡§2) Ä÷ǵ¡£óòÕùůí¼ÜÚ¡§3) ôø/ìàÄùÕ©¡¾Çñè·çù¡£ÅÆî¥¡£òçÓö¡¢ÍÐäùÅÚá«¡¿¡§Å¯ 4) ÒÞùÃÚæûâááÉ¢Î졾ÇñÚæûâî£Å¯ë©ÍüÅÆÇµá«¡¿¡¤ + +2. ÇÙÒüÑÞé¬ + +ÆÛÇÙÒüÅýÑÄÜÉÄ¡ÝåÅ¡ - Ä¡×ï۾ࡡ£ÜÉĨÝåÅ¡ - ÇÖÙÏÙñÈ´Û¾à¡Å¯¡ÖÚæûâÅÃÅõ¡×¡¢Ò³È´ùÃÝ·ÚæûâÄ©ËðÆîÆÛá£È¢ÄæÉùðìÇÙÒü¡¢Åâ̽ÅîÝ·ÚæûâÄ©Ç¿Ð©êØ IBM ÍÔɢĿġŢÄÇó¤ÍÐÕóÓò̶ú¾¡¤ÜÉĨÝåš۾à¡ÚµÌ½ÅîÍÐÔºÓÔÜÉÄ¡ÝåÅ¡ÄæÛ¾à¡¡¤Çñ¡ÖÚæûâÅÃÅõ¡×êØÆÛÇÙÒüÜÉÄ¡ÝåšůÜÉĨÝåš۾à¡Ò¾ú½Ï¯¡¢¡ÖÚæûâÅÃÅõ¡×ç¤æÚÌ¥Ýåš۾à¡óÀÇ¿ïËÆî¡¤ + +3. Úæûâ + +IBM ÍÐ IBM ÄæËòóÜÙ¸ðßÈ´ÆÛ¡Öá£È¢¡×ÄæááÉ¢ûâ¡¢ÆÛÇÙÒüÒ³ÚæûâÇÙÒüÈÔÏæááÉ¢ûâüéÙÇÇÙÒü¡¤ + +IBM ï¬ÄèÝ·ÚæûâĩȴÓîÎû¡£ÏæÙñúèÍÌÅâÄâÆ«÷ËüéÄæÚæûâ¡¢Ý·ÚæûâĩڵËíæÚÚæûâÈçËðĶÇÄÈçÒ³¡¨1) Íõâ£Èõßæâæ¡¢Ëí¡ÖÚæûâÅÃÅõ¡×ç¥ÍüÄæÚæûâËðÆîݽÌùĶ祡£ÇøæÒůËðÆîÆÛ¡Öá£È¢¡×¡¢ÚÍã¯ÚµÅèÏæÆßȢɢäÆÄææÜÆîÒ³Ù×öð¡¢Ù×ÍõÄùÝåâ£Èõ¡£àÁæÜÍÐÆüî¯á«ÆøÎûÈÔĶ祡£ÇøæÒůËðÆîÄæ¡§2) êûÉ¢Å¯ÇøæÒÇÙÜ¡í°âØÄæîïÆÛÅèÅÅßÎæÚÚæûâËðÆî¡§Å¯ 3) êûɢެǹ¡§ÚÍëæÜÊÇÙĶÇÄݽÌù¡¨ + +a. Ý·ÚæûâĩĨÇÙÎÎ̽ڵÆÛ¡Öá£È¢¡×¡¢Ëäò×ÇöÆÛÇÙÒüÄæÛ¾à¡¡§ + +b. ØæÏæ¡Öá£È¢¡×àÒÎÎÙÚÈç¡¢ÉÁЬ¡Öá£È¢¡×ÄæÞ¬Ç¹ÄâÚµÙÚÈç¡§ + +c. Ý·ÚæûâÄ©îïêûÆÛ¡Öá£È¢¡×Õë¡¢Äâï¢Ì§ÏûÇÀÝåÍÐÝåÅ¡îïÆÛ¡¢ÉáëæÍõæÚîïÆÛĸîïêûÆÛ¡Öá£È¢¡×ĿġŢááÉ¢ûâíºÆüů̧ÅìÈ´ùÃÄæÍÔÈ´ûâÉ³íºÆü¡§ + +d. Ý·ÚæûâÄ©óÜÏñÇôÆÛ¡Öá£È¢¡×ÍÔÈ´îïÆÛÄæØ´òçËäíýÏñǶÈôÄ©ÍõËðÆîÆÛ¡Öá£È¢¡×Õ롾Äâï¢ÚèÆÛê¦ÍÐë¿ê¦ÅÉÈ¢Çô̽¡¿¡¢1) ÏûÅîÏÐÝ·ÚæûâÄ©ÈÔËðÆîÄæ¡§Å¯ 2) Éá×äò×ÇöÆÛÇÙÒüÛ¾à¡ÄæÝ½Ìù¡§ + +e. ØæÆÛÇÙÒüƶȴݽÌùÆÀ¡¢Ý·ÚæûâÄ©ÄâÚµ¡¨1) ÙòÆÛ¡Öá£È¢¡×ÆîÍõÆßÈ¢É¢äÆÆîÝä¡¢ÍÐËðÆî¡£îïêû¡£ÔºÊÑÍÐß×ÆÌÆÛ¡Öá£È¢¡×¡§2) ØËÇ×ÜÚÇÙ (reverse assemble)¡£ØËÇ×î¾ú¬ (reverse compile)¡£ØËÇ×ÄÖᣠ(reverse engineer) ÍÐÅȩ̀ÅìÅÉÎÎæØúÁÆÛ¡Öá£È¢¡×¡¢ÈþÎÎѣݽÌùÄâÚµÅèÐÖÒüÓî̱ϯ¡¢ÄâÇãȺÓî¡§3) Üë÷âæÚ¡Öá£È¢¡×ÈÔÞÌñÁËðÆî̧ÍÔÅýÉÖÄæÇ¶ÈôÄ÷ǵ¡£óòÕù¡£í¼ÜÚ¡£ôø/ìàÄùÕ©ÍÐÒÞùÃÚæûâááÉ¢Îì¡§4) ÷ËÚæûâÍÐÅø×µÆÛ¡Öá£È¢¡×¡§ÍÐ 5) ÙòÆÛ¡Öá£È¢¡×ÆîÍõٸ٭óÜÆîá£È¢Åîê§ÆîÝä¡§Åâ + +f. Ó¼Ý·ÚæûâÄ©Ì½ÚµÄæÆÛ¡Öá£È¢¡×Ò³¡ÖÅÅßÎá£È¢¡×¡¢Ý·ÚæûâÄ©ã¯ÚµÉ³ÆîÆÛ¡Öá£È¢¡×ÅÅßΡÖÅäÓÑá£È¢¡×¡¢ËäÌ¿¡ÖÅäÓÑá£È¢¡×ÚæûâÛ¾à¡ÄæÍíÊÖ¡§ÍÐϯ¡¢Ó¼Ý·ÚæûâÄ©Ì½ÚµÄæÆÛ¡Öá£È¢¡×Ò³¡ÖÅäÓÑá£È¢¡×¡¢Ý·ÚæûâÄ©ã¯ÚµÉ³ÆîġŢ¡ÖÅÅßÎá£È¢¡×ÅèÅÅßÎÆÛ¡Öá£È¢¡×¡¢ËäÌ¿ÆÛÇÙÒüÛ¾à¡ÄæÍíÊÖ¡¤Ù×ÍõÆÛ "f" âúÄæÆøÎû¡¢¡ÖÅÅßÎá£È¢¡×ÏûÑÀúèÍõ̧Åì IBM á£È¢¡¾¡ÖÅäÓÑá£È¢¡×¡¿Ä¡ÝåšĿá£È¢¡¢ËäÍõ¡ÖÅäÓÑá£È¢¡×ÚæûâÅÃÅõç¥ÍüÒ³¡ÖÅÅßÎá£È¢¡×¡¤¡¾Ó¼ÓÑ̽ڵÆÜÉÖæÚá«ÓîÌ±Äæ¡ÖÅÅßÎá£È¢¡×ÄæÔ¶É±Úæûâ¡¢Ý·ÚæûâÄ©óÜêØßÈËò̧¡ÖÅÅßÎá£È¢¡×ÄæÔÏËòÝÌìÞÙ¸ôúᾡ¤¡¿ + +ÆÛÚæûâïËÆîÍõÝ·ÚæûâÄ©êûɢĿÆÛ¡Öá£È¢¡×ÇÖîïÆÛ¡¤ + +3.1 ÊÕä»á£È¢¡£ÔºÆßá£È¢Å¯ÔºæÐá£È¢ + +Ý·ÚæûâÄ©ÚÙÈ­¡Öá£È¢¡×ÄæÊÕä»á£È¢¡£ÔºÆßá£È¢ÍÐÔºæÐá£È¢Õë¡¢ÏÐÆüÝ·ÚæûâÄ©ÚÙÌ¿æÚ¡ÖÚæûâÅÃÅõ¡×Äùç¥ÍüÆ«ïËÆîÍõÇÖæÚÊÕä»á£È¢¡£ÔºÆßá£È¢ÍÐÔºæÐá£È¢ÄæÇ¶ÈôÏáÅûÛ¾à¡ÍÐÄâÇÑ۾ࡡ¤Ó¼àÒÏáÅûÛ¾à¡ÍÐÄâÇÑ۾ࡡ¢Ð¬ÇÖæÚÊÕä»á£È¢¡£ÔºÆßá£È¢ÍÐÔºæÐá£È¢ã¯Ì¿ÆÛÇÙÒüÍíÊÖ¡¤Ó¼ÆÛ¡Öá£È¢¡×ÆñÊÕä»á£È¢Ì½Åî¡¢Ý·ÚæûâÄ©ÇÑãôǡɻØôÅÏËðÆîæÚݷ̽ÅîÄæ¡Öá£È¢¡×¡¤ + +3.2 ÇÙÒüßæâæêØÜÜÅÏ + +â£ÈõßæÈÜÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÛ¾à¡ÄæÅÊØÄÆíÕæ¡¢ËäÍõĶÇÄÚÅÎÓàõÆíÕëÜÜÅÏ¡¾Åè޲ȮàõÆíϯҳäí¡¿¡¨1) IBM Çã¡ÖÚæûâÅÃÅõ¡×ÍÐÇ¨ÍøÅÆÇµÄãÑÀÌùÄæßæâæÍ£éÈÍÐÖÖÌùÅÊßæÍ£ÈÝÕë¡§ÍÐ 2) ÆÛ¡Öá£È¢¡×ÆÛËÎÈÜÙ¯ØôÆîÕë¡¤Ý·ÚæûâÄ©ÆÒâüÇãæÜÆîßæÜÜÅÏѥIJŲÄùïÚäÚÆÛ¡Öá£È¢¡×ů̧ÍÔÈ´Îû¡Öá£È¢¡×îïÆÛ¡¤Ó¼ IBM Çã¡ÖÚæûâÅÃÅõ¡×ÄãÑÀÍüÝ·ÚæûâĩڵÏñÖçÆÛ¡Öá£È¢¡×¡¢ÅâÝ·ÚæûâĩǩòÙðåÏñÖçÄæ¡¢Ð¬ÆÛ¡Öá£È¢¡×óÜ̧̿ÅìÄâÇÑÚæûâÇÙÒüÍíÊÖ¡¢IBM Í£ÕëÙòßÈËòæÚÄâÇÑÚæûâÇÙÒüÄèÝ·ÚæûâÄ©¡¤ÈºÆÀ¡¢Æ«×äÓÑÆ¶Ò³ÓÓâ¶¡¤ + +Ý·ÚæûâÄ©ÆÜò×ÇöÆÛÇÙÒüÄæÛ¾à¡Ï¯¡¢IBM ÚµÜÜÅÏÚæû⡤ǶġÅÉåµËçÄ©ÇÞÑÊÜÜÅÏÆÛÚæûâÕë¡¢Ý·ÚæûâÄ©ÇÑãôǡɻØôÅÏËðÆîËäïÚô·Ì§Ñ½È´ÄæÄ¡Å¢ÆÛ¡Öá£È¢¡×îïÆÛ¡¤Ç¶ÈôÆÛÇÙÒüÄãËí̧ÍÌï³óÜÍõÇÙÒüÜÜÅÏÑ¥ÇôúýÄæÛ¾à¡¡¢ÍõæÚÛ¾à¡ÉùÇÀìÓÈçЩÄóúèÈ´Õæ¡¢Ç©ïËÆîÍõ â¸Ê¼÷äÅÉÔ¶É±Äæú«Ì¿Ä©Å¯Ì¿üéÄ©¡¤ + +ÆÛá£È¢Æ«×äÄùÉÖġԶØôÆîæÒåô¡¢ÅèËßÅÏæÜÆîßæéÈÑ¥ÄæËðÆî¡¤Ý·ÚæûâÄ©ÄâÚµðÞÈÜöõÊÑȺØôÆîæÒåôÍÐÆÛá£È¢¡¤Ý·ÚæûâÄ©óÜÈÜÈçËçÇ¿Úè̽çßËßÚÝÑÌÅèõâÉ­ÇÞÄâÇÂ×äËðÆîÆÛá£È¢ÈÔÆ«×äÝßÈ©ÄææñÕèäæÆÂ¡¤ + +4.ÓÓâ¶ + +Íõâ£ÈõßæËðÆîÆÛá£È¢Ï¯¡¢àÒëæÅÅÅéǶÈôâ¶Æî¡¤ + +5. àÒÏñøýËçâú + +ØæËíÎÎѣݽÌùÄâÚµÚêØæÄæÏñøýÆÀ¡¢IBM ÞóÆÛá£È¢ÍÐÅÅßÎÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÅâÄâÓîÍõïËÙÇÍÌ¡£ÐÂï³éÈãôÐù¡£ÜÊÇÙÖÖÖ±ÕæÆî¡£ÍÔÈ´ûâÅèůǶÈôÆÜÖÄÏëûâÄæÏñøý¡¤ + +Ô¸ÎÎѣݽÌùÄâÚµÚêØæÍüÆüÍÐó¼ÆüÄæÏñøý¡¢Ð¬Ä¸â䨿ÆÀÛ¾à¡ÄâïËÆî¡¤ÇãȺê¡ÚÅÎÓĶ¡¢Èºá«Ïñøýã¯ÍõÎÎÑ£ÓÑÊåÄæÞ²àûßæâæÈ´Õ桤æÚßæâæÑ¥Ä¡Å¢ÏñøýÉáÞÆÆÂտİ¡¤Ô¸ÎÎѣݽÌùÄâÚµÓî̱ó¼ÆüÏñøýÄæÈ´Õæßæâæ¡¢Ð¬æÚÓî̱àÒÕæ¡¤ÕüðãÄâÇÑÙÏÕ¥ÍÐÇâÙ´ÄæÝ½Ìù¡¢Ý·Úæûâĩǩƫ×äËêȴ̧ÅìÎÎÌùûâɳ¡¤ + +ÆÛÜÉ 5 åçÄãĿɭÝÊôøÍüêØØæÆÀ۾ࡡ¢Ç©ïËÆîÍõǶÈô IBM á£È¢âäàõϯêØËòóÜÙ¸¡¤ + +Ïæ IBM á£È¢ÄæêûÝßÙ¸¡£ËòóÜÙ¸ÍÐàõɩϯڵßÈËò̧ÈÜÄ×ÄæÏñøý¡¤ + +IBM ÄâßÈËòǶÈôùËÐÎÄæÊÀÝ´ÅÅßΡ¢Èþ IBM ƶȴÑÀÍüϯÄâÇãȺÓÇñÈ´ÑÀÍü¡¢IBM ÍÔßÈËòÄæÇ¶ÈôÊÀÝ´ÅÅßÎÌ¿ÆÛÜÉ 5 åçÄãĿɭÝÊôøÍüÅ¯ØæÆÀÛ¾à¡ÍíÊÖ¡¤ + +6. Ý·ÚæûâĩĿæñÕèêØæñÕèÕ» + +Ò³Ì¶É·Ý·ÚæûâĩٴçÒÆÛ¡Öá£È¢¡×ÍÔÓ³ÙÂ÷îÄæÈ©ÇÞ¡¢IBM ÚµÓÑÊåÝ·ÚæûâÄ© 1) ÄøÝ IBM Åèë¿ê¦ÅÉÈ¢ÇôÌ½Ý·ÚæûâÄ©ÄæË·ÜÓ¡¢ÍÐ 2) ã®ØÊÝ·ÚæûâĩĿæñعÍÐË·ÜÓæñÕèÈÝ IBM¡¤IBM ËäàÒåøÙ­ßÈËòЩâú̶ɷ¡¢ÚÍÓ¼ IBM êØÝ·ÚæûâĩƶǡԶɱÕóÓòÇÙÒü¡¢Åâ IBM ËíæÚÇÙÒüÇÑãôÒ³Ý·ÚæûâÄ©ßÈËòÆÛÇÙÒüݽÌùåøÙ­ÅèÆÀÄæÅÅßÎùËÐÎϯ¡¢ÄâÇãȺÓàÒï¢Ç¶ÈôÚÅÎÓ¡¢IBM ÙòɳÆîêØòãë¨Å¯ÙÂ÷îÒÞùÃÄææñعÍõÊÑâÐ̧ܨÐÂêØÎ¤Ù­¡¢Ëä̶ɷßÈËòÒÞùÃÄæÅÅßÎËòóÜâúÆø¡¤Ù×Íõ鼇ǮøÎû¡¢IBM ڵɳÆî̧Åì IBM èÒüÕêØ÷ËÅýÙ¸¡¾ÅýÑÄÈíÍõÝ·ÚæûâÄ©ÍÔÇãÙÏÕ¥ÍÐÇâÙ´ÅèÆÀĿġÍÐÇéÔ¶ÙÏÕ¥ÍÐÇâÙ´ÄææÚá«èÒüÕêØ÷ËÅýÙ¸¡¿¡¢ÅâÝ·ÚæûâÄ©ÇãÈºÚæûâ IBM Ⱥá«çªÆîÈçÒ³¡¤ + +ÚÍÞóĶÇÄËçâú¡¢Ý·ÚæûâÄ©ÄóóÜÈÜÈçÓ×ÝÊ¡¨1) Ý·ÚæûâÄ©ßÈËòÄè IBM ÄæÇ¶ÈôæñÕèůǶÈôæñÕèջĿÄùÕ©¡§2) òÙðåůèÒÑÌÈ´ùÃæñÕèÄæÇô̽¡£ÇøÇÀ¡£ÅûÙï¡£ËðÆîůã®òÓÄæá£Ê©êØÚÕê§¡¾ÅýÑÄǶÈôÆ«òÕøüÔ¶Ä©ËΚĿæñÕè¡¿¡§Å¯ 3) ެǹůÇßߦǶÈôæñÕèջůǶÈôóÃÇôæñÕè¡¤Ý·ÚæûâÄ©ÄâÚµã®ØÊǶÈôÆ«òÕøüÔ¶Ä©ËΚĿí°ðãæñÕèÍÐ̧ÅìùËÐÎæñÕè¡¢ÍÐßÈËòæÚá«æñØ¹ÄæÇô̽ûâÓîÄè IBM¡¤Ý·ÚæûâÄ©ÇÞ̧òãë¨ßÈËòæÚá«æñعÄè IBM ÄæÚÅËç¡¢Ó³Ëð IBM ÇÞòÜÆÂÍÐßËû¿æÚá«æñعÍÔÓÏÆíÇÙÜ¡â¶Æîů̧Åìà¡âú¡¢ÅýÑÄÇÞǶÈôÜÉĵĩĿ×ÄïªÍÔÆíâ¶Æîůà¡âú¡¢óÜÆñÝ·ÚæûâÄ©Ó×ÝÊ¡¤ + +7. ïªóÁĸÓî + +ÆÛÜÉ 7 å硾¡ÖïªóÁĸÓî¡×¡¿ÄãÄæÓîÌ±êØØæÆÀ۾ࡡ¢ØæÎÎѣݽÌùÄâÚµÅèÐÖÒüÓîÌ±ÄæÚÅÎÓÆÀ¡¢Ì§ÅìÚÅÎÓġѣïËÆî¡¤ + +7.1 IBM óÜÓ×ÝÊïªóÁÄæâúÆø + +ÇÞ IBM ç°ÒüÍÐ̧ÅìÆ«ö×ÝÊËçÆñ¡¢Ý·ÚæûâĩڵÇ× IBM îùÊåä´Õ¤ïªóÁ¡¤àÒï¢Ý·ÚæûâÄ©Ù×ÍõÈôê¡ûâɳîùÊåïªóÁ¡¾ÅýÑÄÓìÄËç°Òü¡£ç´ÆÂ¡£ÄâèÒÝóÓÝÍÐ̧ÅìÐÖÒüîùÊåÍÐÏëûâÈçÒ³¡¿¡¢è×ÍõÇÖ¡Öá£È¢¡×ÆÛËÎÍÔàõÆíÍÐÒÞùÃÄæÇÀÝåîùÊåÍÐ̧ÅìÙ×ÍõÆÛÇÙÒüÍÔÆíÄæîùÊå¡¢IBM ÄæïªóÁÝÊǶã¯ÓîÍõ 1) Ä©ËÎã²Õ¤¡¾ÅýÑÄÈ»ÄÁ¡¿Äæä´Õ¤¡£ÄâٯܨůȴʰԶĩæñ܍ĿäÚä´¡§2) ̧ÅìÎþÚÙèÒëãä´Õ¤¡¢ÅâÅèÓ¡ÏÚ 10,000 Ä÷¡¾ÍÐåµÇâÝÌèÜá«Ô«ÏÚ÷졿ҳ̧ĸÓ + +ȺâúÓî̱ǩïËÆîÍõǶÈô IBM Äæ¡Öá£È¢¡×âäàõϯêØËòóÜÙ¸¡¤ÈºâúÓî̱Ïû IBM ů IBM Äæ¡Öá£È¢¡×âäàõϯêØËòóÜÙ¸ÄæÇÁÇÑïªóÁĸÓ + +7.2 IBM ÅÑëæÓ×ÝÊïªóÁÄæâúÆø + +ÇãǶÈôÚÅÎÓĶ¡¢IBM¡£IBM Äæ¡Öá£È¢¡×âäàõϯÍÐËòóÜÙ¸è×ĶÇÄÚÅËçÉáÄâÓ×ïªóÁÝÊǶ¡¢É»ËðÝ·ÉËÏ¡æÚÚÅËçÈ´Æ«×äàõÆíÕ롢ǩÇÑ¡¨ + +a. æñÕèĿ俯ÂÍÐäÚä´¡§ + +b. ÖÖÖ±ä´Õ¤¡£ÏáÚ§ä´Õ¤¡£ø´êÈÍÌä´Õ¤¡£âæÚÙä´Õ¤ÍÐǶÈôÓÏÆíÍÌåîô¤ä´Õ¤¡§ÍÐ + +c. ÍÔÆÂɳÖô¡£É³íס£ô²äÆ¡£È­Öô¡£Ù¸û­ÍÐçßßæá¸ïõá«âúÄæä´ÆÂ¡¤ + +8. ÑçÕøÛ¾à¡ + +Ù×ÍõÆÛ 8 å硾¡ÖÑçÕøÛ¾à¡¡×¡¿ÄæÆøÎû¡¢¡Öâ£Èõá£È¢Û¾à¡¡×ÏûÑÀ 1) ÆÛÇÙÒüů IBM ÍÔßÈËòÈÔêØÆÛÇÙÒüÒÞùÃÄæÐÖÒüÔºÓÔÅ¯Ç¨ÍøÅÆÇµ¡§Å¯ 2) IBM ÝÔüÕݽ¾Èºá«Ý½î¯Æ«ËÄÍõ IBM Software Policy ê½×» (www.ibm.com/softwarepolicies)¡¢ÅýÑÄÈþÄâÓîÍõÈ´ùÃެǹ¡£ÄÍÕ©âØÓÓì¤Å¯ÜÃ÷ËÄæÔÏЬ¡¤ + +ÆÛÜÉ 8 åçÍÔݽÌùÄæûâɳåøÙ­¡¢ÍõǶÈôÆÛ¡Öá£È¢¡×ÚæûâßæâæÅ¯Ì§Ñ¥Ä¨È¡ÄùÈ´Õæ¡¤ + +8.1 ÑçÕøá£Ê© + +Ý·ÚæûâÄ©ÇÑãôêûÉ¢¡£ÏñÖçÅèĶÇÖâúæñÕèËäÙò̧ßÈËòÄèÆÛÄüƳů̧î¨ÕøÔÞ¡¨ÆßíýÄæÕóÓòØ´ò硣˷ÜÓÄÖ̦òÓÅøÅ¯Ì§ÅìÆÒÓÑË·ÜÓæñع¡¢ÅèÑçÕøÝ·ÚæûâÄ©ËðÆîġŢ¡Öá£È¢¡×ÕëÑÒÉÁò×Çöâ£Èõá£È¢Û¾à¡¡¾ÅýÑÄ IBM ÄæÚæûâůÓÓì¤Û¾à¡¡¿¡¤Ý·ÚæûâÄ©ÞóĶÇÄËçâúÓ×ÝÊ¡¨1) íýÏñÆÜç·Ì§ÚæûâËðÆîÄæî¯ÞØ¡§Å¯ 2) ò×Ú·â£Èõá£È¢Û¾à¡¡¤ + +IBM ÚµÍõÇÙܡĿÝ×ϡѥ¡¢ÑçÕøÝ·ÚæûâÄ©ÍõġŢÇâöµÍÐô¿èºÙ×ÍõǶÈôÆøÎûËðÆîÌ¿â£Èõá£È¢Û¾à¡ÍíÊÖÄæ¡Öá£È¢¡×ÕëÑÒÉÁò×ß§â£Èõá£È¢Û¾à¡¡¤æÚâúÑçÕø¡¢ÙòÅèç¤ÄâÄÛöÆÝ·ÚæûâÄ©äÆÙ­ÄæÅÉÈ¢Ò³Äæ¡¢ËäÚµÍõÝ·ÚæûâĩĿÆßڦĸÖÝÕëâæÄù¡¢ÇãÝ·ÚæûâÄ©ÍÔÇãݨÍÔÒ³Äæ¡¤IBM ÚµîùÊåñÁÇ¡î¨ÕøÔÞ̶ɷâÐÈçæÚâúÑçÕø¡¢ÚÍ IBM óÜêØæÚî¨ÕøÔÞÓÔÇ¡ïËåµÄæÕóÓòÏñÙïÇÙÒü¡¤ + +8.2 ÑçÕøÝ¨åô + +ÇñæÚâúÑçÕøÑÀÅøÝ·ÚæûâÄ©ËðÆîÆÛ¡Öá£È¢¡×Õëç·â½Ì§ÚæûâËðÆîî¯ÞØÍÐÆÜò×Çöâ£Èõá£È¢Û¾à¡Ï¯¡¢IBM ÙòÅèÕóÓòÝ×Ï¡Ý·ÚæûâÄ©¡¤Ý·ÚæûâÄ©ÇÑãôǡɻÅÅÅé IBM ÍõàõÜÁç¥ÍüĿĶÇÄâ¶Æî¡¨1) ç·â½ÚæûâËðÆîî¯ÞØÄæÇ¶ÈôËðÆîÈçÒ³ÄæóÜÅéâ¶Æî¡§2) ç·â½ÚæûâËðÆîî¯ÞØÄæËðÆîßæâæÍÔóÜÅÅÅéÄæá£È¢ÅÅßÎâ¶Æî¡¢ÚÍÞ²ØíÄâÚµâ¾ç´Ä¨È¡¡§Å¯ 3) ÇÞÑçÕøá¸ÎªÍÔܨÆíÄæÇ¶ÈôÏáÅûâ¶Æîů̧ÅìïªóÁÝÊǶ¡¤ + +9. ÜÉĵĩÎÃãôËçâú + +ÆÛ¡Öá£È¢¡×Æ«×äÄùÉÖÜÉĵĩá£È¢î£¡¢æÚá£È¢î£ÏûÆñ IBM¡¾ÈÔÏæÜÉĵĩ¡¿ËíÆÛÇÙÒüßÈËòÚæûâÄèÝ·ÚæûâÄ©¡¤óôÏáÄæÜÉĵĩá£È¢î£ÎÃãôËçâú¡¾¡ÖÜÉĵĩÎÃãôËçâú¡×¡¿ã¯ËòÝ·ÚæûâĩٶÈÓÄæÆî¡¤æÚá«ÎÃãôËçâúÆ«ÍõÆÛ¡Öá£È¢¡×Äæ NOTICES óòÄãÊÆÌ¯¡¤È´ùÃÇñÈô̽ڵÑÜËèÜÉĵĩá£È¢î£Äææñع¡¢Æ«Íõ¡ÖÜÉĵĩÎÃãôËçâú¡×ÄãÊÆÌ¯¡¤Ó¼ IBM Íõ¡ÖÜÉĵĩÎÃãôËçâú¡×ÄãÑÀÅøÜÉĵĩá£È¢î£Ò³¡ÖƫԺÊÑÜÉĵĩá£È¢î£¡×¡¢Ð¬ IBM ÚæÄèÝ·ÚæûâĩĶÇÄûâɳ¡¨1) ÔºÊÑ¡ÖÆ«ÔºÊÑÜÉĵĩá£È¢î£¡×ů 2) è×ÎþÚÙÝÙá¸¡ÖÆ«ÔºÊÑÜÉĵĩá£È¢î£¡×Äæ¡Öá£È¢¡×í¼ÜÚâÐÈçõäÔÏÄÖᣡ¢ÚÍÝ·ÚæûâÄ©ã¯ÚµÙ×ÍõÞóæÚÜÉĵĩá£È¢î£ÍÔÒ³ÔºÊÑÄæØæòãÆøÎûÈÔÒ³Äæ¡¤IBM ÄæÎ¤Ù­êØÅÅßÎåøÙ­¡¢ã¯ïËÆîÍõÆÜÔºÊÑÄæ¡Öá£È¢¡×¡¤ + +10. Ä¡×ï۾ࡠ+ +a. ÇÙÒüÄâìàûÀǶÈôÄâÚµÅèÐÖÒüÓî̱ÍÐÍáÛ¹ÄæÎÎÌùÖ¼â¶Ï¯ûâÖô¡¤ + +b. ÆÛÇÙÒüÄãȴǶÈôÛ¾à¡Ý·ÚäÌùÒ³ÆÂÕæÍÐÄâ×äÙÚÈçϯ¡¢ÆÛÇÙÒüÄæÌ§ïõÛ¾à¡Äó̦ÉùðìÄæÎÎÌùտİ¡¤ + +c. Ý·ÚæûâÄ©ÄâÚµã¾ÅøÆÛ¡Öá£È¢¡×¡¤ + +d. Ý·ÚæûâÄ©ÇÑãôÚæûâ International Business Machines Corporation (IBM) ů̧ÄÍÄüƳ¡¾Å¯Ì§ú«Ì¿Ä©êØÌ¿üéÄ©¡£ÍÕÅýٸů IBM ËçäÆèÁÈò¡¿¡¢ÚµÍõ̧á«âÐÈçäÆÙ­ÄæÇ¶ÈôݨÍÔ¡¢ÙÚÈçÈ´ùÃܨÐÂůΤ٭äÆÙ­¡¢ÍÐÏòâÐ IBM êØÝ·ÚæûâĩĿäÆÙ­ùÃÏûÕë¡¢óÃÇôËäËðÆîÝ·ÚæûâĩĿäÆÙ­ôúá¾æñع¡¤ + +e. ǶġÅÉÍõÅäÚ¯ÅìÅÉÆÜËíÆÛÇÙÒüìÓÈç̧åøÙ­ÄæÐ©¡¢ÉáóÜá¿ÄèÅìÅÉÈ´ÇÙÜ¡æÐÆßÄæñ¢äÄ¡¤÷äÅÉóÜÆÛÍõæâÏêÔÏЬæØÊî÷äÅÉÄæâæÈ´ùÃÆÛÇÙÒüĿġŢ×ÌÎè¡£Îèï¢ÍÐÅäÚ¯¡¤ + +f. ØæÏæÎÎÑ£åÛÅÏÅèÇÙÒüÍóÛ¹ÍÐÓîÌ±Äæ¡¢ÉÁЬ¡¨(1) ǶġÅÉÉáÄâÚµÍõâ«ÝÄËçÆñàõÆíç·Ä¨È¡Ñ¥¡¢ÞóÆÛÇÙÒüÍÐËí̧ÍÔÒ³ÄæÇ¶ÈôÇ¨ÍøÍÔÆíÍÐÒÞùÃËçÆñÈÔßÈÅøÇ¶ÈôÊ°È¢ÄæÎÎÑ£â«ÝÄ¡§Åâ (2) ÍõæÚÕëÓîÑ¥¡¢ÞóÆÛÇÙÒüÍÐËí̧ÍÔÒ³ÄæÇ¶ÈôÇ¨ÍøÍÔÆíÍÐÒÞùÃËçÆñÈÔßÈÅøÄæÇ¶ÈôÎÎÑ£â«ÝÄůÅäÚ¯¡¢Ä¡Ñ£ÞÆÆÂ̧ÎÎÑ£ÕæÄ°¡¤ + +g. Ý·ÚæûâÄ©êØ IBM ÉáàÒëæè×ÄâÆ«Ê¾Ä°ÇÞ×ÃÝßÈ©Äæä´Õ¤Ó×ÝÊ¡¤ + +h. ÆÛÇÙÒüÄâҳǶÈôÜÉĵĩ޶ÝÃûâɳÍÐâ«ÝÄÎÎďĿîùÊåû⡢ȺÆÀ¡¢Ç¶ÈôÜÉĵĩÇ×Ý·ÚæûâÄ©ßÈÅøÄæ×ÄïªÓÑÊå¡¢IBM Ç©äÍÄâÓ×ÝÊ¡¢ÈþĸÇÄÜÉ 7.1 ÄÍå硾¡ÖIBM óÜÓ×ÝÊïªóÁÄæâúÆø¡×ƶȴݽÌù¡¢IBM ËíÎÎóÜè׿ÚÜÉĵĩÓ×ÝÊĿĩËÎã²Õ¤¡¾ÅýÑÄÈ»ÄÁ¡¿ÍÐÄâٯܨ¡£Ô¶Ä©È´Ê°æñ܍ĿäÚä´óÜÓ×ïªóÁÄæÝÊ¡¢ÄâÇãȺÓ + +i. ÓÔÇ¡ÆÛÇÙÒüÕ롢ǶġÅÉÉáÆÜËíòÊÆÜç¥ÍüÍõÆÛÇÙÒüÄæÇ¶ÈôÝóÓÝÈÔÓÔÒü¡¢ÅýÑÄÈþÄâÓîÍõÅèĶÇÖâúÝóÓÝ¡¨1) ÆÜÍüÇÄÍõÆÛÇÙÒüÜÉ 5 å硾¡ÖàÒÏñøýËçâú¡×¡¿ÈÔÈ´ùÃÆÛ¡Öá£È¢¡×ÄæÕæ×äÍÐÅü×äÄæÏñøý¡§2) ÅìÅÉÄæåîüÓÍÐÐúú¾¡§ÍÐ 3) Ý·Úæûâĩƫ×äç®È©ÄæÕæÎªÍÐÒØïõ¡¤ + +j. IBM êØÑÜËèñ¢é¬¡¾ê¢Ò³¡ÖIBM ËçäÆèÁÈò¡×¡¿øÜå÷ÇÙÒü¡¢ÅèÚäìÝ¡£ïÚÙÇůÅÅßÎÑÜËè¡Öá£È¢¡×¡¤IBM ËçäÆèÁÈòêØ IBM ÏñѽñÁǡůšâäÄæùÃÏû¡¤IBM Þó IBM ËçäÆèÁÈòÄæÈçÒ³ÍÐôøÍü¡¢ÍÐ̧è×Ý·ÚæûâÄ©óÜéðÄæåøÙ­¡¢ÉáÄâÓ×ÝÊǶ¡¤ + +k. Ý·ÚæûâÄ©êØ IBM ÍÔǡ̧ÅìÇÙÒü¡¾Çñ¡ÖIBM ÐêÅÂÇÙÒü¡×¡¿ÄæÚæûâêØßáìäØÂܨïªóÁ۾ࡡ¢ÄâïËÆîÍõÆÛÇÙÒüï¬ÄèÄæá£È¢Úæû⡤ + +11. ÇâÙÑî¯ÞØÅ¯äíðãÎÎ + +11.1 äíðãÎÎ + +ÇãÄâÛôÖÄÎÎÑ£îíÒóÔÏÐ¬ÄæÐ©ßÈĶ¡¢ â¸Ê¼÷äÅÉÇÑãôÅèÝ·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÚæûâåµÇâÄæÎÎÑ£Ò³äíðãÎΡ¢ðãÅèݽ£æØúËůÙÚÈçÆÛÇÙÒüÅä÷îÍÔÓÏÆíÍÐÒÞùÃÄæÝ·ÚæûâÄ©êØ IBM ÷äÅÉÄæÇÖɱûâɳ¡£÷ªÝÊůåøÙ­¡¤ + +ÆÛÇÙÒüÄâïËÆîôúÇÙÙÏÙÏëãÙ¸ÐÂâ¹ï±ÐÖÒüÄüÒüÄæÝ½Ìù¡¤ + +11.2 ê§õÝ + +ġŢûâɳ¡£÷ªÝÊůåøÙ­ÉáÌ¿Ý·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÚæûâåµÇâÄæÎÎÕ¼ê§õÝ¡¤ + +ÜÉĨÝåÅ¡ - ÇÖÙÏÙñȴ۾ࡠ+ +ÞóÅèĶÇÖÙÏÍÔÝ·ÚæÄèÄæ¡Öá£È¢¡×Úæû⡢ĶÇÄÛ¾à¡ÚµÌ½ÅîÍÐÔºÊÑÆÛÇÙÒüÜÉÄ¡ÝåÅ¡ÄãÄæÒÞùÃ۾ࡡ¤ÆÛÇÙÒüÜÉÄ¡ÝåÅ¡ÍÔÇÄÄæÇ¶Èô۾ࡡ¢ÇñÆÜåîȺݨԺÓÔϯ¡¢Ì§ÕæÄ°êÄѽÄâüÈ¡¤ÆÛÜÉĨÝåšĿÄùÕ©î¾ÚêÇñĶ¡¨ + +* Çéê¡ÙÏÕ¥è×ÇÙÒüÜÉÄ¡ÝåÅ¡ÜÉ 11 å硾¡ÖäíðãÎÎêØê§õݡס¿ÄæÔºÓÔ۾ࡡ§Å¯ + +* ËéÅ´ÇâÙ´ÙÏÕ¥è×ÇÙÒü̧ÅìÛ¾à¡ÄæÔºÓÔ۾ࡡ¤ + +Çéí°ÙÏÕ¥è×ÇÙÒüÜÉÄ¡ÝåÅ¡ÜÉ 11 å硾¡ÖäíðãÎÎêØê§õݡס¿ÄæÔºÓÔ۾ࡠ+ +11.1 äíðãÎÎ + +ÜÉ 11.1 åç¡ÖäíðãÎΡ×ÜÉÄ¡ÑôÄæ¡ÖÝ·Úæûâĩ̽ڵ¡Öá£È¢¡×ÚæûâåµÇâÄæÎÎÑ£¡×ÅÆÆ»¡¢ÍõĶÇÄÙÏÕ¥ÍÐÇâÙ´ÄãóÜÆñĶÇÄÅÆÆ»Ì½Å + +ËéÅ´ÇâÙ´ + +(1) ÇãÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´êØÄãÙÏñ®ÏÜÖÖɱÈçÑÉÙ´¡¨ÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´ (Hong Kong Special Administrative Region, "SAR") ÄæÎÎÑ£¡§Å¯ + +(2) Çãê×ý¤¡¨ê×ý¤ÄæÎÎÑ£¡¤ + +ËéÅ´ÙÏÕ¥ÔºÓÔ۾ࡠ+ +ÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´¡£ÄãÙÏñ®ÏÜÖÖɱÈçÑÉٴůê×ý¤ + +ÞóïËÆîÍõÇãê×ý¤Å¯ÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´¡£ÄãÙÏñ®ÏÜÖÖɱÈçÑÉÙ´Ì½ÚµÄæÚæûâ¡¢ÆÛÇÙÒüÄãÉÖÈ´¡ÖÙÏÕ¥ÍÐÇâÙ´¡×ÄæÇ󯻡¾ËóÇñ¡¨¡ÖÔÏÌîÝ·Úæûâĩݷï¬ÄèÚæûâÄæÙÏÕ¥ÍÐÇâÙ´¡×ů¡ÖÝ·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÚæûâÄæÙÏÕ¥ÍÐÇâÙ´¡×¡¿óÜÅèĶÇÄÇÖÇóÈù̽Å + +(1) ÇãÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´¡¨¡ÖÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´¡× + +(2) ÇãÄãÙÏñ®ÏÜÖÖɱÈçÑÉÙ´¡¨¡ÖÄãÙÏñ®ÏÜÖÖɱÈçÑÉÙ´¡×¡¾ÈþÄâïËÆîÍõÜÉ 11.1 åç¡ÖäíðãÎΡ×۾ࡡ¿ + +(3) Çãê×ý¤¡¨¡Öê×ý¤¡×¡¤ + +ê×ý¤ + +7.1 IBM óÜÓ×ÝÊïªóÁÄæâúÆø + +É´ØæÄ¶ÇÄÅÆÆ»¡¨ + +ÆÛÓî̱ǩïËÆîÍõ IBM Äæ÷ËÅýٸůá£È¢âäàõÄ©ÔÞ¡¤ÈºâúÓî̱Ïû IBM ů IBM Äæ¡Öá£È¢¡×âäàõϯêØ÷ËÅýÙ¸ÄæÇÁÇÑïªóÁĸÓ + +Z125-5543-05 (07/2011) + + +ÙÏëãá£È¢ÚæûâÇÙÒü + +ÜÉÄ¡ÝåÅ¡ - Ä¡×ï۾ࡠ+ +Ý·ÚæûâĩġÆÙĶ祡£ÇøæÒ¡£îïêû¡£Çô̽¡£ÑºÄ¶¡ÖÚÙÌ¿¡×ѺâÚÍÐÎþÚÙËðÆîÆÛ¡Öá£È¢¡×¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÄæÛ¾à¡¡¤Ó¼ â¸ÐêÅÂÏûÅîÏÐÝ·ÚæûâÄ©ÚÙÌ¿æÚá«Û¾à¡¡¢Ð¬ â¸ÐêÅÂôøÍüËäÏñøý â¸ÐêÅÂðßÈ´ÅòÅ¡ûâÓîÚµÅèËðÝ·Úæûâĩ̿Ⱥá«Û¾à¡ÍíÊÖ¡¤Ó¼ â¸ÐêÅÂÄâÇÑãôÆÛÇÙÒüÛ¾à¡Õë¡¢ + +* îùŦĶ祡£ÇøæÒ¡£îïêû¡£Çô̽¡£ÑºÄ¶¡ÖÚÙÌ¿¡×ѺâÚÍÐËðÆîÆÛ¡Öá£È¢¡×¡§Å¯ + +* ǡɻÙòÆÜËðÆîÄæÞèüÕ¡£ë©ÍüÅÆÇµÅ¯ûâɳøýÍüÕóØÍÇßÔÏËòÝÌìÞÙ¸¡¾IBM ÍÐ̧÷ËïÚÙ¸¡¿¡¢ËäÓÑÊåØÍõäÄØÅéà¡âú¡¤Ó¼ÄØÄ¶ç¥ÆÛ¡Öá£È¢¡×¡¢Ð¬óÜïÚäÚÆÛ¡Öá£È¢¡×ĿġŢîïÆÛ¡¤ + +1. Ìùåø + +¡ÖÚæûâËðÆî¡× - Ý·ÚæûâÄ©Ì½ÚµÚæûâÅèÙÚÈçÆÛ¡Öá£È¢¡×ÄæÖÖÌùìÒ×È¡¤æÚìÒ×ÈÄæÐùâØÞÌÄ÷¡¢ÚµËíËðÆîϯí°âØ¡£ÈËåÜΤ٭ÞÌÄ÷ ("MSU")¡£Ý¨Ü¡ðÂì¤Ô«ÞÌÄ÷ ("PVU") ÍÐ̧Åì IBM ÑÀÌùÄæËðÆîìÒ×ÈÒ³Äæ¡¤ + +¡ÖIBM¡× - International Business Machines Corporation ÍÐ̧ÄÍÄüƳ¡¤ + +¡ÖÚæûâÅÃÅõ¡×("LI") - ÄùÉÖÑÜ¡Öá£È¢¡×ÖÖÌùæñعůǶÈôÏáÅûÛ¾à¡ÄæÅÆÇµ¡¤ÆÛ¡Öá£È¢¡×Äæ¡ÖÚæûâÅÃÅõ¡×Æ«Íõ www.ibm.com/software/sla ê½×»Ì½Úµ¡¤ÆÛ¡ÖÚæûâÅÃÅõ¡×ǩƫ×äÈíÍõÆÛ¡Öá£È¢¡×ÄæÑÜÆøòçÄù¡¢ÅèËðÆîË·ÜÓÑÀÅïÅÉÈ¢ÏíÆ«ÊÆÌ¯¡¢ÈºÆÀ¡¢Ç©Æ«×äÅèÄÑÅõÄÍʰȢóôÏáÍõÆÛ¡Öá£È¢¡×¡¤ + +¡Öá£È¢¡× - á£È¢ÔÏÎêů̧ÇÀÝåÍÐÝåÅ¡ÑÂËÊ¡¢ÅýÑÄ¡¨1) ñ¢ðÂÆ«ïåûôÑÀÅïêØæñÕè¡§2) Ä÷ǵ¡£óòÕùůí¼ÜÚ¡§3) ôø/ìàÄùÕ©¡¾Çñè·çù¡£ÅÆî¥¡£òçÓö¡¢ÍÐäùÅÚá«¡¿¡§Å¯ 4) ÒÞùÃÚæûâááÉ¢Î졾ÇñÚæûâî£Å¯ë©ÍüÅÆÇµá«¡¿¡¤ + +¡ÖûâɳøýÍüÕó¡×("PoE") - Ý·ÚæûâÄ©ÄæÚæûâËðÆîøýÍüÕó¡¤Ý·ÚæûâĩӼÓÑÊåßÈËòÏñÌÖΤ٭ÍÐá£È¢ÊÕä»óÀß­ì¤ÖªÍÐ̧ÅìÏòïÚóÀß­Õë¡¢óÜÅøÆüæÚ¡ÖûâɳøýÍüÕó¡×¡¤Ó¼ IBM ÆÜßÈËò¡ÖûâɳøýÍüÕó¡×ÄèÝ·ÚæûâÄ©¡¢Ð¬ IBM ÚµÚÙÌ¿ßÈËò¡Öá£È¢¡×ÄèÝ·ÚæûâĩĿÔÏËòÝÌìÞÙ¸¡¾ÑÀ IBM ÍÐ̧÷ËïÚÙ¸¡¿ÍÔßÈËòÄæÔÏÌîÄØÅéà¡ïÚÝÌÈ­ðã¡£àõÜÁÍÐ̧ÅìïÚÝÌØ´òçÉ¢Ò³¡ÖûâɳøýÍüÕó¡×¡¢ÚÍæÚÈ­ðã¡£àõÜÁÍÐØ´òçëæÑÀÍü¡Öá£È¢¡×ÇØê¢Å¯ÍÔÚµ¡ÖÚæûâËðÆî¡×¡¤ + +¡ÖÏñÌÖßæ¡× - ÈÜÔÏÝ·Úæûâĩݷï¬ÄèÚæûâÄæåµÅÊØÄÒ³ßæÄ¡È¡¡¤ + +2. ÇÙÒüÑÞé¬ + +ÆÛÇÙÒüÅýÑÄÜÉÄ¡ÝåÅ¡ - Ä¡×ï۾ࡡ£ÜÉĨÝåÅ¡ - ÇÖÙÏÙñȴ۾ࡡ£¡ÖÚæûâÅÃÅõ¡×Åèů¡ÖûâɳøýÍüÕó¡×¡¢Ò³È´ùÃÝ·ÚæûâÄ©ËðÆîÆÛá£È¢ÄæÉùðìÇÙÒü¡¢Åâ̽ÅîÝ·ÚæûâÄ©Ç¿Ð©êØ IBM ÍÔɢĿġŢÄÇó¤ÍÐÕóÓò̶ú¾¡¤ÜÉĨÝåš۾à¡ÚµÌ½ÅîÍÐÔºÓÔÜÉÄ¡ÝåÅ¡ÄæÛ¾à¡¡¤ÄëÈ´îíÒóϯ¡¢¡ÖÚæûâÅÃÅõ¡×ç¤æÚá«Ä¨ÝåÅ¡óÀÇ¿ïËÆî¡¤ + +3. Úæûâ + +IBM ÍÐ IBM ÄæËòóÜÙ¸ðßÈ´ÆÛ¡Öá£È¢¡×ÄæááÉ¢ûâ¡¢ÆÛÇÙÒüÒ³ÚæûâÇÙÒüÈÔÏæááÉ¢ûâüéÙÇÇÙÒü¡¤ + +IBM ï¬ÄèÝ·ÚæûâÄ©ÏæÙñúèÍÌÚæûâ¡¢Ý·ÚæûâĩڵËíæÚÚæûâÈçËðĶÇÄÈçÒ³¡¨1) Ëí¡ÖûâɳøýÍüÕó¡×ç¥ÍüÄæÚæûâËðÆîݽÌùËðÆîÆÛ¡Öá£È¢¡×¡§2) êûÉ¢Å¯ÇøæÒÇéǹîïÆÛÅèÅÅßÎæÚÚæûâËðÆî¡§Å¯ 3) êûɢެǹ¡§ÚÍëæÜÊÇÙĶÇÄݽÌù¡¨ + +a. Ý·ÚæûâĩĨÇÙÎÎ̽ڵÆÛ¡Öá£È¢¡×¡¢Ëäò×ÇöÆÛÇÙÒüÄæÛ¾à¡¡§ + +b. ÄâÙÚÈçæÚެǹ¡¢Èþ¡Öá£È¢¡×àÒÎÎÙÚÈçϯÄâÇãȺÓî¡§ + +c. Ý·ÚæûâÄ©îïêûÆÛ¡Öá£È¢¡×Õë¡¢Äâï¢Ì§ÏûÇÀÝåÍÐÝåÅ¡îïÆÛ¡¢ÉáëæÍõæÚîïÆÛĸîïêûÆÛ¡Öá£È¢¡×ĿġŢááÉ¢ûâíºÆüů̧ÅìÈ´ùÃÄæÍÔÈ´ûâÉ³íºÆü¡§ + +d. Ý·ÚæûâÄ©óÜíýÏñǶÈôÄ©ÍõËðÆîÆÛ¡Öá£È¢¡×Õ롾Äâï¢÷³ÆñÆÛÇâÍÐë¿ê¦Çô̽¡¿¡¢1) ã¯ÍõÝ·ÚæûâÄ©Ý·ÚæûâÎûî¯ÞØÄùËðÆî¡¢2) Ëä×äò×ÇöÆÛÇÙÒüÛ¾à¡ÄæÝ½Ìù¡§ + +e. ØæÆÛÇÙÒüÍüÅÆÝÂÆ«ÆÀ¡¢Ý·ÚæûâÄ©ÄâÚµ¡¨(1) ËðÆî¡£îïêû¡£ÔºÊÑÍÐß×ÆÌÆÛ¡Öá£È¢¡×¡§(2) ØËÇ×ÜÚÇÙ (reverse assemble)¡£ØËÇ×î¾ú¬ (reverse compile)¡£ØËÇ×ÄÖᣡ¾reverse engineer¡¿ÍÐÅȩ̀ÅìÅÉÎÎæØúÁÆÛ¡Öá£È¢¡×¡¢ÈþÎÎѣݽÌùÄâÚµÅèÐÖÒüÓî̱ϯ¡¢ÄâÇãȺÓî¡§3) ñÁÇ¡ÍõæÚ¡Öá£È¢¡×ÆÀÈÔËðÆî̧ǶÈôÄ÷ǵ¡£óòÕù¡£í¼ÜÚ¡£ôø/ìàÄùÕ©ÍÐÒÞùÃÚæûâááÉ¢Îì¡§ÍÐ 4) ÷ËÚæûâ¡£ÇÂÚæûâÍÐÅø×µÆÛ¡Öá£È¢¡×¡§Å¯ + +f. Ó¼Ý·ÚæûâÄ©Ì½ÚµÄæÆÛ¡Öá£È¢¡×Ò³¡ÖÅÅßÎá£È¢¡×¡¢Ý·ÚæûâÄ©ã¯ÚµÉ³ÆîÆÛ¡Öá£È¢¡×ÅÅßΡÖÅäÓÑá£È¢¡×¡¢ËäÌ¿¡ÖÅäÓÑá£È¢¡×ÚæûâÛ¾à¡ÄæÍíÊÖ¡§ÍÐϯ¡¢Ó¼Ý·ÚæûâÄ©Ì½ÚµÄæÆÛ¡Öá£È¢¡×Ò³¡ÖÅäÓÑá£È¢¡×¡¢Ý·ÚæûâÄ©ã¯ÚµÉ³ÆîġŢ¡ÖÅÅßÎá£È¢¡×ÅèÅÅßÎÆÛ¡Öá£È¢¡×¡¢ËäÌ¿ÆÛÇÙÒüÛ¾à¡ÄæÍíÊÖ¡¤Ù×ÍõÆÛ "f" âúÄæÆøÎû¡¢¡ÖÅÅßÎá£È¢¡×ÏûÑÀúèÍõ̧Åì IBM á£È¢¡¾¡ÖÅäÓÑá£È¢¡×¡¿Ä¡ÝåšĿá£È¢¡¢ËäÍõ¡ÖÅäÓÑá£È¢¡×ÚæûâÅÃÅõç¥ÍüÒ³¡ÖÅÅßÎá£È¢¡×¡¤¡¾Ó¼ÓÑ̽ڵÆÜÉÖæÚá«ÓîÌ±Äæ¡ÖÅÅßÎá£È¢¡×ÄæÔ¶É±Úæûâ¡¢Ý·ÚæûâÄ©óÜêØßÈËò̧¡ÖÅÅßÎá£È¢¡×ÄæÔÏËòÝÌìÞÙ¸ôúᾡ¤¡¿ + +ÆÛÚæûâïËÆîÍõÝ·ÚæûâÄ©êûɢĿÆÛ¡Öá£È¢¡×ÇÖîïÆÛ¡¤ + +3.1 ÊËì¤ßÐõÕ¡£ÊÕä»á£È¢¡£ÔºÆßá£È¢Å¯ÔºæÐá£È¢ + +3.1.1 ÊËì¤ßÐõÕ + +Ó¼ÆÛ¡Öá£È¢¡×ÆñÊËì¤ßÐõÕ¡Öá£È¢¡×̽Åݷ̽Åî¡Öá£È¢¡×ÄæÚæûâǡɻÜÜÅÏ¡¤ + +3.1.2 ÊÕä»á£È¢¡£ÔºÆßá£È¢Å¯ÔºæÐá£È¢ + +Ý·ÚæûâÄ©ÚÙÈ­¡Öá£È¢¡×ÄæÊÕä»á£È¢¡£ÔºÆßá£È¢ÍÐÔºæÐá£È¢Õë¡¢ÏÐÆüÝ·ÚæûâÄ©ÚÙÌ¿æÚ¡ÖÚæûâÅÃÅõ¡×Äùç¥ÍüÆ«ïËÆîÍõÇÖæÚÊÕä»á£È¢¡£ÔºÆßá£È¢ÍÐÔºæÐá£È¢ÄæÇ¶ÈôÏáÅûÛ¾à¡ÍÐÄâÇÑ۾ࡡ¤Ó¼àÒÏáÅûÛ¾à¡ÍÐÄâÇÑ۾ࡡ¢Ð¬ÇÖæÚÊÕä»á£È¢¡£ÔºÆßá£È¢ÍÐÔºæÐá£È¢ã¯Ì¿ÆÛÇÙÒüÍíÊÖ¡¤Ó¼ÆÛ¡Öá£È¢¡×ÆñÊÕä»á£È¢Ì½Åî¡¢Ý·ÚæûâÄ©ÇÑãôǡɻØôÅÏËðÆîæÚݷ̽ÅîÄæ¡Öá£È¢¡×¡¤ + +3.2 ÌÖÌùßæâæÚæûâ + +Ó¼ IBM ÏûßÈËòÆÛ¡Öá£È¢¡×ÄæÌÖÌùßæâæÚæûâ¡¢Ý·ÚæûâÄ©ÍÔÌ½ÚµÄæÚæûâÍõßæâæËÕÅÊÜÜÅÏ¡¢ÚÍÝ·ÚæûâÄ©êØ IBM ÇÑãôխͷϯ¡¢ÄâÇãȺÓ + +3.3 ÇÙÒüßæâæêØÜÜÅÏ + +ÆÛÇÙÒüÍõÜÜÅÏЩÉáúèÈ´Õæ¡¤ + +Ý·ÚæûâÄ©ÆÜò×ÇöÆÛÇÙÒüÄæÛ¾à¡Ï¯¡¢IBM ÚµÜÜÅÏÚæû⡤ + +ǶġÅÉåµËçÄ©ÇÞÑÊÜÜÅÏÆÛÚæûâÕë¡¢Ý·ÚæûâÄ©ÇÑãôǡɻØôÅÏËðÆîËäïÚô·Ì§Ñ½È´ÄæÄ¡Å¢ÆÛ¡Öá£È¢¡×îïÆÛ¡¤Ç¶ÈôÆÛÇÙÒüÄãËí̧ÍÌï³óÜÍõÇÙÒüÜÜÅÏÑ¥ÇôúýÄæÛ¾à¡¡¢ÍõæÚÛ¾à¡ÉùÇÀìÓÈçЩÄóúèÈ´Õæ¡¢Ç©ïËÆîÍõ â¸Ê¼÷äÅÉÔ¶É±Äæú«Ì¿Ä©Å¯Ì¿üéÄ©¡¤ + +4.ÓÓâ¶ + +â¶ÆîÄæÓÓê«¡¢Ì§ËíðãÒ³¡ÖûâɳøýÍüÕó¡×ç¥ÍüÄæ¡ÖÚæûâËðÆî¡×¡¤IBM ÞóǶÈôçßÅéà¡âúÍÐ̧ÅìÄØàõÆíÍÐÄØÅÅÅéÄæâ¶ÆîÄâÄèØÍâ¶¡¢ÚÍÆÛÇÙÒüƶȴݽÌùϯ¡¢ÄâÇãȺÓ + +Ó¼Ý·ÚæûâÄ©ÛÃìÁÅû̧¡ÖÚæûâËðÆî¡×¡¢Ý·ÚæûâÄ©óÜËçÇ¿Ý×Ï¡ IBM ÍÐ IBM ÚæûâåîïÚÙ¸¡¢ËäÅÅÅéǶÈôÒÞùÃâ¶Æî¡¤ + +5. á¤ÏÚ + +ǶÈôÅäê§ñ¢ùÃè×ÆÛ¡Öá£È¢¡×îûÅèá¤ÏÚ¡£ÄüîûÍÐâ¶Æî¡¾ÄâÉÖè× IBM ÄæÍÔÚµÍÔîûÄæá¤à¡¡¿¡¢Ý·ÚæûâÄ©ÇÑãôËíàõÜÁç¥ÍüÄæÏÚ÷ìÅÅÅé¡¢ÚÍÝ·ÚæûâÄ©ßÈËòÉ­á¤ÅÆÇµÏ¯ÄâÇãȺÓÈÜÝ·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÄæÅÊØÄ¡¢ â¸ÐêÅÂóÜÞóæÚ¡Öá£È¢¡×ÈÜÈçÓ×ÝÊǶÈôÔ¶Ä©ØÂܨᤡ¤Ó¼Ç¶ÈôÅäê§ñ¢é¬ÞóÆÛ¡Öá£È¢¡×ÍõÔÏÝ·Úæûâĩݷï¬ÄèÚæûâÕëÍÔÇãÙÏÕ¥ÍÐÇâÙ´ÄæèºÆÀÍÔÒ³ÆÛá£È¢Äæã¾Ä«ÍÐã¾Åø¡£÷Ëüé¡£Çô̽ÍÐËðÆîîûÅèá¤ÏÚ¡¢Ý·ÚæûâÄ©ÇÑãôÈÜÈçÓ×ÝÊÅÅÅéǶÈôÍÔîûÏÚ÷졤 + +6. ØÍà¡Ïñøý + +Ó¼Ý·ÚæûâÄ©ÇÞÑÊÄâéÈãôÆÛ¡Öá£È¢¡×¡¢ÅâÝ·ÚæûâĩҳÔÏÌîÝ·ÚæûâÄ©¡¢Ý·ÚæûâĩڵÜÜÅÏÆÛÚæûâ¡¢Ëä×ÄÇßÔÏÄØÅéà¡âú¡¢ÚÍÝ·ÚæûâÄ©ëæÍõûâɳøýÍüÕóÕøàõÅÊĵIJŲÄù¡¢ÙòÆÛ¡Öá£È¢¡×ů¡ÖûâɳøýÍüÕó¡×ØÍõäßÈËòÆÛ¡Öá£È¢¡×ů¡ÖûâɳøýÍüÕó¡×ÄèÝ·ÚæûâĩĿÔÏËòÝÌìÞÙ¸¡¤Ó¼æÚÚæûâÏûúèÆ«Õ­Í·ßæâæÄæÌÖÌùßæâæÚæûâ¡¢Ý·ÚæûâÄ©ëæÍõÓûÈ¹ÚæûâßæâæÄæÐ©ÄµÄ²ÅÊÄùØÍõäÆÛ¡Öá£È¢¡×ů̧¡ÖûâɳøýÍüÕó¡×¡¢Ìîڵ̽ÇßÄØÅéà¡âú¡¤Ó¼Ý·ÚæûâÄ©ÄØÄ¶ç¥ÆÛ¡Öá£È¢¡×¡¢Ý·ÚæûâÄ©óÜêØßÈËòÆÛ¡Öá£È¢¡×ÄèÝ·ÚæûâĩĿÔÏËòÝÌìÞÙ¸ôúᾡ¢ËäËí̧ÑÀÆüÅè̽ÇßÄØÅéà¡âú¡¤ + +7. á£È¢÷Ëüé + +Æ·È´ÇãÜÉĵĩÇÑãôÆÛÇÙÒüÛ¾à¡Õë¡¢Ý·ÚæûâÄ©ÌîÚµ÷ËüéÆÛ¡Öá£È¢¡×Å¯ÚæûâÄæÒÞùÃûâɳåøÙ­¡¤Ç¶Ä¡ÅÉåµËçÄ©ÇÞÑÊÜÜÅÏÆÛÚæûâÑ¥¡¢Ý·ÚæûâĩɻÄâÚµ÷ËüéÆÛ¡Öá£È¢¡×ÄèÅìÄ©¡¤Ý·ÚæûâÄ©ÄâÚµÝåÅ¡÷Ëüé 1) ÆÛ¡Öá£È¢¡×¡¢ÍÐ 2) ÆÛ¡Öá£È¢¡×Äæ¡ÖÚæûâËðÆî¡×¡¤Ý·ÚæûâÄ©÷ËüéÆÛá£È¢ÄæÇÑÕ롢ǩóÜǨÅéġǹÆÛÇÙÒüÄæÇÍÌ­ÆÛ¡¢ÅýÑÄ¡ÖÚæûâÅÃÅõ¡×ů¡ÖûâɳøýÍüÕó¡×¡¤÷ËüéÑ¥¡¢Ý·ÚæûâÄ©Ì½ÚµÄæÚæûâÉ»ÉËÜÜÅÏ¡¤ + +8. ÏñøýêØØæÆÀ۾ࡠ+ +8.1 È´ÓîÏñøý + +IBM ÏñøýåµÆÛ¡Öá£È¢¡×ËðÆîÍõÖÖÌùçªÉ¢ô¿èºÕë¡¢ÜÊÇÙ̧ݽ֪¡¤ÆÛ¡Öá£È¢¡×ÄæÝ½ÖªÅ¯ÖÖÌùçªÉ¢ô¿èºæñع¡¢Æ«ÍõÆÛ¡Öá£È¢¡×óôÏáë©ÍüÅÆÇµ¡¾Çñ Readme óò¡¿ÍÐÍõ IBM ÄüÉ©ÄæÌ§Åìæñع¡¾ÇñÝ×ϡ̪¡¿ÄãÊÆÌ¯¡¤Ý·ÚæûâÄ©ÇÑãô¡¢æÚá«ÅÆÇµÅ¯Ì§Åì¡Öá£È¢¡×ÄùÕ©Æ«×äã¯ÅèÓÁÅÆßÈËò¡¢ÈþåµÇâÎÎѣݽÌùÄâÚµÅèÐÖÒüÓî̱ϯ¡¢ÄâÇãȺÓ + +ȺâúÏñøýã¯ïËÆîÍõÆÛ¡Öá£È¢¡×ÆÜåîÔºÊÑÄæÝåÅ¡¡¤IBM ÄâÏñøýÆÛá£È¢ÄæçªÉ¢ÄâäÄÄãöËÍÐÇÀàÒòã먡¢Ç©ÄâÏñøýá£È¢ÄæÄ¡Å¢×ÍÝøÉáÆ«ÊÑÆß¡¤ËðÆîÆÛ¡Öá£È¢¡×ÍÔÆíÄæá¸Îª¡¢ÆñÝ·ÚæûâÄ©ÈÜÈçÓ×ÝÊ¡¤ + +ÍõÏñøýßæâæ¡¢IBM ßÈËòÇô̽ûâÄèÝ·ÚæûâÄ©¡¢ËðÝ·ÚæûâĩڵÅèÇô̽ÄùÉÖĶÇÄâúÆøÒÞùÃæñØ¹Äæ IBM æñÕèÕ»¡¢ÅâÄâÆ¶È­Ç¶Èôâ¶Æî¡¨ÆÛ¡Öá£È¢¡×ÄæÄØÏ¡å­Ü°¡£å­Ü°ÊÕÆß¡£Óî̱ůܩ紡¤îùÑçïå IBM Software Support Handbook¡¢Åè̽ڵâÐÄ¡Êãæñع¡¢Ì§ê½ÉßÇñĶ¡¨www.ibm.com/software/support¡¤ + +ÍõÏñøýßæâæÄù¡¢Ô¸ÆÛ¡Öá£È¢¡×ÄæÅü×äÇãËðÆîÍõÖÖÌùçªÉ¢ô¿èºÕëàÒÎÎÜÊÇÙ̧ݽ֪¡¢ÅâÍÔÆíÙÂ÷îàÒÎÎ÷³Æñ IBM æñÕèÕ»ÍÔßÈËòÄææñعô½ÚµæØÊî¡¢Ý·ÚæûâĩڵÙòÆÛ¡Öá£È¢¡×ů̧¡ÖûâɳøýÍüÕó¡×ØÍÇßÔÏËòÝÌìÞÙ¸¡¾IBM ÍÐ̧åîïÚÙ¸¡¿¡¢Åè̽ÇßÄØÅéà¡âú¡¤ØÍÇ߯Ûá£È¢Ñ¥¡¢Ý·ÚæûâÄ©Ì½ÚµÄæÚæûâÉ»ÉËÜÜÅÏ¡¤Ó¼Ý·ÚæûâÄ©ÄØÄ¶ç¥ÆÛ¡Öá£È¢¡×¡¢Ý·ÚæûâÄ©óÜêØßÈËòÆÛ¡Öá£È¢¡×ÄèÝ·ÚæûâĩĿÔÏËòÝÌìÞÙ¸ôúᾡ¢ËäËí̧ÑÀÆüÅè̽ÇßÄØÅéà¡âú¡¤ + +8.2 ØæÆÀ۾ࡠ+ +Åèĸҳ IBM è×Ý·ÚæûâĩĿÇÀÝåÏñøýÝÊǶ¡¢Ì½Åî̧ÅìġŢÍüÆüÍÐó¼ÆüÄæðêÏñ¡¾ÅýÑÄÈþÄâÓîÍõÆ«ÙÇÍÌ¡£ÐÂï³éÈãôÐù¡£ÜÊÇÙÖÖÖ±ÕæÆî¡£ÍÔÈ´ûâÅèůǶÈôÆÜÖÄÏëûâÄæÏñøý¡¤¡¿Ô¸ÎÎѣݽÌùÄâÚµÚêØæÍüÆüÍÐó¼ÆüÄæÏñøý¡¢Ð¬Ä¸â䨿ÆÀÛ¾à¡ÄâïËÆî¡¤ÇãȺê¡ÚÅÎÓĶ¡¢Ïñøýã¯ÍõÏñøýßæâæÈ´Õ桤æÚßæâæÑ¥Ä¡Å¢ÏñøýÉáÞÆÆÂտİ¡¤Ô¸ÎÎѣݽÌùÄâÚµÓî̱ó¼ÆüÏñøýÄæÈ´Õæßæâæ¡¢Ð¬æÚÓî̱àÒÕæ¡¤ + +Ⱥá«Ïñøýï¬ÄèÝ·ÚæûâÄ©ÖÖÌùÎÎÌùûâɳ¡¢ÕüðãÄâÇÑÙÏÕ¥ÍÐÇâÙ´ÄæÝ½Ìù¡¢Ý·Úæûâĩǩƫ×äËêȴ̧ÅìÎÎÌùûâɳ¡¤ + +ÜÉ 8 åçÄæÏñøý¡¾¡ÖÏñøýêØØæÆÀ۾ࡡס¿ã¯Æñ IBM ßÈËò¡¢ÈþÜÉ 8.2 ÄÍåçÄãĿɭÝÊôøÍü¡¾¡ÖØæÆÀ۾ࡡס¿Ç©ïËÆîÍõßÈËòÜÉĵĩá£È¢î£Äæ IBM ËòóÜÙ¸¡¤Èºá«ËòóÜÙ¸ßÈËòæÚá£È¢î£Õë¡¢ÄâÉÖǶÈôÏñøýÍÐ۾ǵ¡¤ÆÛÑôÆÜìÙØæÆÛÇÙÒüݽÌùÄæ IBM ÏñøýåøÙ­¡¤ + +9. Ý·ÚæûâĩĿæñÕèêØæñÕèÕ» + +Ò³Ì¶É·Ý·ÚæûâĩٴçÒÆÛ¡Öá£È¢¡×ÍÔÓ³ÙÂ÷îÄæÈ©ÇÞ¡¢IBM ÚµÓÑÊåÝ·ÚæûâÄ© 1) ÄøÝ IBM Åèë¿ê¦ÅÉÈ¢ÇôÌ½Ý·ÚæûâÄ©ÄæË·ÜÓ¡¢ÍÐ 2) ã®ØÊÝ·ÚæûâĩĿæñعÍÐË·ÜÓæñÕèÈÝ IBM¡¤IBM ËäàÒåøÙ­ßÈËòЩâú̶ɷ¡¢ÚÍ IBM êØÝ·ÚæûâĩƶǡԶɱÕóÓòÇÙÒü¡¢Åâ IBM ËíæÚÇÙÒüÇÑãôÒ³Ý·ÚæûâÄ©ßÈËòÆÛÇÙÒüݽÌùÏñøýåøÙ­ÅèÆÀÄæÅÅßÎùËÐÎϯ¡¢ÄâÇãȺÓ IBM óÜËðÆîòãë¨êØÙÂ÷îÒÞùÃæñعÅèÊÑâÐ̧ܨÐÂêØÎ¤Ù­¡¢Ëä̶ɷßÈËòÒÞùÃÄæÅÅßÎËòóÜâúÆø¡¤Ù×Íõ鼇ǮøÎû¡¢IBM ڵɳÆî̧Åì IBM èÒüÕêØ÷ËÅýÙ¸¡¾ÅýÑÄÈíÍõÝ·ÚæûâÄ©ÍÔÇãÙÏÕ¥ÍÐÇâÙ´ÅèÆÀĿġÍÐÇéÔ¶ÙÏÕ¥ÍÐÇâÙ´ÄææÚá«èÒüÕêØ÷ËÅýÙ¸¡¿¡¢ÅâÝ·ÚæûâÄ©ÇãÈºÚæûâ IBM Ⱥá«çªÆîÈçÒ³¡¤ + +ÚÍÞóĶÇÄËçâú¡¢Ý·ÚæûâÄ©ÄóóÜÈÜÈçÓ×ÝÊ¡¨1) Ý·ÚæûâÄ©ßÈËòÄè IBM ÄæÇ¶ÈôæñÕèůǶÈôæñÕèջĿÄùÕ©¡§2) òÙðåůèÒÑÌÈ´ùÃæñÕèÄæÇô̽¡£ÇøÇÀ¡£ÅûÙï¡£ËðÆîůã®òÓÄæá£Ê©êØÚÕê§¡¾ÅýÑÄǶÈôÆ«òÕøüÔ¶Ä©ËΚĿæñÕè¡¿¡§Å¯ 3) ެǹůÇßߦǶÈôæñÕèջůǶÈôóÃÇôæñÕè¡¤Ý·ÚæûâÄ©ÄâÚµã®ØÊǶÈôÆ«òÕøüÔ¶Ä©ËΚĿí°ðãæñÕèÍÐ̧ÅìùËÐÎæñÕè¡¢ÍÐßÈËòæÚá«æñØ¹ÄæÇô̽ûâÓîÄè IBM¡¤Ý·ÚæûâÄ©ÇÞ̧òãë¨ßÈËòæÚá«æñعÄè IBM ÄæÚÅËç¡¢Ó³Ëð IBM ÇÞòÜÆÂÍÐßËû¿æÚá«æñعÍÔÓÏÆíÇÙÜ¡â¶Æîů̧Åìà¡âú¡¢ÅýÑÄÇÞǶÈôÜÉĵĩĿ×ÄïªÍÔÆíâ¶Æîůà¡âú¡¢óÜÆñÝ·ÚæûâÄ©Ó×ÝÊ¡¤ + +10. ïªóÁĸÓî + +ÆÛÜÉ 10 å硾¡ÖïªóÁĸÓî¡×¡¿ÄãÄæÓîÌ±êØØæÆÀ۾ࡡ¢ØæÎÎѣݽÌùÄâÚµÅèÐÖÒüÓîÌ±ÄæÚÅÎÓÆÀ¡¢Ì§ÅìÚÅÎÓġѣïËÆî¡¤ + +10.1 IBM óÜÓ×ÝÊïªóÁÄæâúÆø + +ÇÞ IBM ç°ÒüÍÐ̧ÅìÆ«ö×ÝÊËçÆñ¡¢Ý·ÚæûâĩڵÇ× IBM îùÊåä´Õ¤ïªóÁ¡¤àÒï¢Ý·ÚæûâÄ©Ù×ÍõÈôê¡ûâɳîùÊåïªóÁ¡¾ÅýÑÄÓìÄËç°Òü¡£ç´ÆÂ¡£ÄâèÒÝóÓÝÍÐ̧ÅìÐÖÒüîùÊåÍÐÏëûâÈçÒ³¡¿¡¢IBM ÞóÇÖ¡Öá£È¢¡×ÆÛËÎÍÔàõÆíÍÐÒÞùÃÄæÇÀÝåîùÊåÍÐ̧ÅìÙ×ÍõÆÛÇÙÒüÍÔÆíÄæîùÊå¡¢IBM ÄæïªóÁÝÊǶã¯ÓîÍõ 1) Ä©ËÎã²Õ¤¡¾ÅýÑÄÈ»ÄÁ¡¿Äæä´Õ¤¡£ÄâٯܨůȴʰԶĩæñ܍ĿäÚä´¡§2) ̧ÅìèÒëãÎþÚÙä´Õ¤¡¢ÚÍÄâÚµâ¾ç´Ý·ÚæûâÄ©ÞóæÚ¡Öá£È¢¡×ÍÔÅÅÅéÄæÚæûââ¶Æî¡¾Ó¼æÚ¡Öá£È¢¡×Ò³ÌùßæÅéà¡Ï¯¡¢Ð¬Ä¸ÓîҳIJĨԶÅÌÄæâ¶Æî¡¿¡¤ + +ȺâúÓî̱ǩïËÆîÍõǶÈô IBM Äæ¡Öá£È¢¡×âäàõϯêØËòóÜÙ¸¡¤ÈºâúÓî̱Ïû IBM ů IBM Äæ¡Öá£È¢¡×âäàõϯêØËòóÜÙ¸ÄæÇÁÇÑïªóÁĸÓ + +10.2 IBM ÅÑëæÓ×ÝÊïªóÁÄæâúÆø + +ÇãǶÈôÚÅÎÓĶ¡¢IBM¡£IBM Äæ¡Öá£È¢¡×âäàõϯÍÐËòóÜÙ¸è×ĶÇÄÚÅËçÉáÄâÓ×ïªóÁÝÊǶ¡¢É»ËðÝ·ÉËÏ¡æÚÚÅËçÈ´Æ«×äàõÆíÕ롢ǩÇÑ¡¨ + +a. æñÕèĿ俯ÂÍÐäÚä´¡§ + +b. ÖÖÖ±ä´Õ¤¡£ÏáÚ§ä´Õ¤¡£ø´êÈÍÌä´Õ¤¡£âæÚÙä´Õ¤ÍÐǶÈôÓÏÆíÍÌåîô¤ä´Õ¤¡§ÍÐ + +c. ÍÔÆÂɳÖô¡£É³íס£ô²äÆ¡£È­Öô¡£Ù¸û­ÍÐçßßæá¸ïõá«âúÄæä´ÆÂ¡¤ + +11. ÑçÕøÛ¾à¡ + +Ù×ÍõÆÛ 11 å硾¡ÖÑçÕøÛ¾à¡¡×¡¿ÄæÆøÎû¡¢¡ÖIPLA á£È¢Û¾à¡¡×ÏûÑÀ 1) ÆÛÇÙÒüêØ IBM ÍÔßÈËòÄæÒÞùÃÐÖÒüÔºÓÔÅ¯Ç¨ÍøÅÆÇµ¡§Å¯ 2) IBM ÝÔüÕݽ¾Èºá«Ý½î¯Æ«Íõ IBM Software Policy ê½×» (www.ibm.com/softwarepolicies) ÊÆÌ¯¡¿¡¢ÅýÑÄÈþÄâÓîÍõÈ´ùÃެǹ¡£ÄÍÕ©âØÓÓì¤Å¯ÜÃ÷ËÄæÔÏЬ¡¤ + +ÆÛÜÉ 11 åçÍÔݽÌùÄæûâɳåøÙ­¡¢ÍõǶÈôÆÛ¡Öá£È¢¡×ÚæûâßæâæÅ¯Ì§Ñ¥Ä¨È¡ÄùÈ´Õæ¡¤ + +11.1 ÑçÕøá£Ê© + +Ý·ÚæûâÄ©ÇÑãôɢȩ¡£ÏñÖçÅèĶÇÖâúæñÕèËäÙò̧ßÈËòÄèÆÛÄüƳů̧î¨ÕøÔÞ¡¨ÕóÓòØ´ò硣˷ÜÓÄÖ̦òÓÅøÅ¯Ì§ÅìËÍÅèÑçÕøÝ·ÚæûâÄ©ÇøæÒůËðÆîÆÛ¡Öá£È¢¡×ÕëÑÒÉÁò×Çö IPLA á£È¢Û¾à¡¡¾ÅýÑÄ IBM ÄæÚæûâůÓÓì¤Û¾à¡¡¿ÄæË·ÜÓæñع¡¤Ý·ÚæûâÄ©ÞóĶÇÄËçâúÓ×ÝÊ¡¨1) íýÏñÆÜç·Ì§ÚæûâËðÆîÄæî¯ÞØ¡§Å¯ 2) ò×Ú· IPLA á£È¢Û¾à¡¡¤ + +IBM Ò³ÇÙܡ߿âæÄæÝ×ϡѥ¡¢ÚµÑçÕøÈ´ùÃÝ·ÚæûâÄ©ÍõġŢÇâöµÍÐô¿èºÙ×ÍõǶÈôÆøÎûÇøæÒÍÐËðÆîÆÛ¡Öá£È¢¡×ÕëÑÒÉÁò×ß§ÆÛÇÙÒü̧Åì۾ࡡ¾ÅýÑÄÒÞùÃÄæÏáÇµÅ¯Ç¨ÍøÅÆÇµ¡¿¡¤æÚâúÑçÕø¡¢ÙòÅèç¤ÄâÄÛöÆÝ·ÚæûâÄ©äÆÙ­ÄæÅÉÈ¢Ò³Äæ¡¢ËäÚµÍõÝ·ÚæûâĩĿÆßڦĸÖÝÕëâæÄù¡¢ÇãÝ·ÚæûâÄ©ÍÔÇãݨÍÔÒ³Äæ¡¤IBM ÚµîùÊåñÁÇ¡î¨ÕøÔÞ̶ɷâÐÈçæÚâúÑçÕø¡¢ÚÍ IBM óÜêØæÚî¨ÕøÔÞÓÔÇ¡ïËåµÄæÕóÓòÏñÙïÇÙÒü¡¤ + +11.2 ×ÌÎèæØÊî + +ÇñæÚâúÑçÕøÑÀÅøÝ·ÚæûâÄ©ËðÆîÆÛ¡Öá£È¢¡×Õëç·â½Ì§ÚæûâËðÆîî¯ÞØÍÐÆÜò×Çö IPLA á£È¢Û¾à¡Ï¯¡¢IBM ÙòÅèÕóÓòÝ×Ï¡Ý·ÚæûâÄ©¡¤Ý·ÚæûâÄ©ÇÑãôǡɻÅÅÅé IBM ÍõàõÜÁç¥ÍüĿĶÇÄâ¶Æî¡¨1) ç·â½ÚæûâËðÆîî¯ÞØÄæÇ¶ÈôËðÆîÈçÒ³ÄæóÜÅéâ¶Æî¡§2) ç·â½ÚæûâËðÆîî¯ÞØÄæËðÆîßæâæÍÔóÜÅÅÅéÄæá£È¢ÅÅßÎâ¶Æî¡¢ÚÍÞ²ØíÄâÚµâ¾ç´Ä¨È¡¡§Å¯ 3) ÇÞÑçÕøÍÔÓ³ÆíÄæÏáÅûâ¶Æîů̧ÅìïªóÁÝÊǶ¡¤ + +12. ÜÉĵĩÎÃãôËçâú + +ÆÛ¡Öá£È¢¡×Æ«×äÄùÉÖÜÉĵĩá£È¢î£¡¢æÚá£È¢î£ÏûÆñ IBM¡¾ÈÔÏæÜÉĵĩ¡¿ËíÆÛÇÙÒüßÈËòÚæûâÄèÝ·ÚæûâÄ©¡¤óôÏáÄæÜÉĵĩá£È¢î£ÎÃãôËçâú¡¾¡ÖÜÉĵĩÎÃãôËçâú¡×¡¿ã¯ËòÝ·ÚæûâĩٶÈÓÄæÆî¡¤æÚá«ÎÃãôËçâúÆ«ÍõÆÛ¡Öá£È¢¡×Äæ NOTICES óòÄãÊÆÌ¯¡¤È´ùÃÇñÈô̽ڵÑÜËèÜÉĵĩá£È¢î£Äææñع¡¢Æ«Íõ¡ÖÜÉĵĩÎÃãôËçâú¡×ÄãÊÆÌ¯¡¤Ó¼ IBM Íõ¡ÖÜÉĵĩÎÃãôËçâú¡×ÄãÑÀÅøÜÉĵĩá£È¢î£Ò³¡ÖƫԺÊÑÜÉĵĩá£È¢î£¡×¡¢Ð¬ IBM ÚæÄèÝ·ÚæûâĩĶÇÄûâɳ¡¨1) ÔºÊÑ¡ÖÆ«ÔºÊÑÜÉĵĩá£È¢î£¡×ů 2) è×ÎþÚÙÝÙá¸¡ÖÆ«ÔºÊÑÜÉĵĩá£È¢î£¡×Äæ¡Öá£È¢¡×í¼ÜÚâÐÈçõäÔÏÄÖᣡ¢ÚÍÝ·ÚæûâÄ©ã¯ÚµÙ×ÍõÞóæÚÜÉĵĩá£È¢î£ÍÔÒ³ÔºÊÑÄæØæòãÆøÎûÈÔÒ³Äæ¡¤IBM ÄæÎ¤Ù­êØÅÅßÎåøÙ­¡¢ã¯ïËÆîÍõÆÜÔºÊÑÄæ¡Öá£È¢¡×¡¤ + +13. Ä¡×ï۾ࡠ+ +a. ÇÙÒüÄâìàûÀǶÈôÄâÚµÅèÐÖÒüÓî̱ÍÐÍáÛ¹ÄæÎÎÌùÖ¼â¶Ï¯ûâÖô¡¤ + +b. Ó¼ IBM ÏûÅèÈ´üÕÎìÄæÊ°È¢ßÈËò¡Öá£È¢¡×ÄèÝ·ÚæûâÄ©¡¢IBM ÍõǨÅéæÚá«¡Öá£È¢¡×Äè IBM ÑÀÌùÄæçªòÓÄ©Õ롢ɻÉùÈ©Ì§ÅøÝÌůǨÅéÄæåøÙ­¡¢ÈþÝ·ÚæûâÄ©êØ IBM ƶȴÕóÓòÇÙãôϯ¡¢ÄâÇãȺÓ + +c. ÆÛÇÙÒüÄãȴǶÈôÛ¾à¡Ý·ÚäÌùÒ³ÆÂÕæÍÐÄâ×äÙÚÈçϯ¡¢ÆÛÇÙÒüÄæÌ§ïõÛ¾à¡Äó̦ÉùðìÄæÎÎÌùտİ¡¤ + +d. Ý·ÚæûâÄ©ÇÑãôò×ڷġŢâÐÅøÄÇÒÞùÃÎÎÅïݽÝý¡¢ÅýÑÄÓ¡ÙÏÞóÓ¼ÄÛÜÜê¦ËðÆîÈçÒ³ÍÐÓ¼ÄÛËðÆîϯÍÔÇ¡ÅøÄÇåÛçªêØÌ±áúÄæÎÎÅïݽÝýůåÛ̱Å + +e. Ý·ÚæûâÄ©ÇÑãôÚæûâ International Business Machines Corporation (IBM) ů̧ÄÍÄüƳ¡¾Å¯Ì§ú«Ì¿Ä©êØÌ¿üéÄ©¡£ÍÕÅýٸů IBM ËçäÆèÁÈò¡¿¡¢ÚµÍõ̧á«âÐÈçäÆÙ­ÄæÇ¶ÈôݨÍÔ¡¢ÙÚÈçÈ´ùÃܨÐÂůΤ٭äÆÙ­¡¢ÍÐÏòâÐ IBM êØÝ·ÚæûâĩĿäÆÙ­ùÃÏûÕë¡¢ÚµóÃÇôËäËðÆîÝ·ÚæûâĩĿäÆÙ­ôúá¾æñع¡¤ + +f. ǶġÅÉÍõÅäÚ¯ÅìÅÉÆÜËíÆÛÇÙÒüìÓÈç̧åøÙ­ÄæÐ©¡¢ÉáóÜá¿ÄèÅìÅÉÈ´ÇÙÜ¡æÐÆßÄæñ¢äÄ¡¤÷äÅÉóÜÆÛÍõæâÏêÔÏЬæØÊî÷äÅÉÄæâæÈ´ùÃÆÛÇÙÒüĿġŢ×ÌÎè¡£Îèï¢ÍÐÅäÚ¯¡¤ + +g. ØæÏæÎÎÑ£åÛÅÏÅèÇÙÒüÍáÛ¹ÍÐÓîÌ±Äæ¡¢ÉÁЬ¡¨(1) ǶġÅÉÉáÄâÚµÍõâ«ÝÄËçÆñàõÆíç·Ä¨È¡Ñ¥¡¢ÞóÆÛÇÙÒüÍÐËí̧ÍÔҳǶÈôÇ¨ÍøÍÔÆíÍÐÒÞùÃËçÆñßÈÅøÇ¶ÈôÊ°È¢ÄæÎÎÑ£â«ÝÄ¡§Åâ (2) ÍõæÚÕëÓîÑ¥¡¢ÞóÆÛÇÙÒüÍÐËí̧ÍÔҳǶÈôÇ¨ÍøÍÔÆíÍÐÒÞùÃËçÆñßÈÅøÄæÇ¶ÈôÎÎÑ£â«ÝÄ¡¢Å¯Ä¡Å¢È´ùÃÇÖæÚâ«ÝÄÄæÔ¶É±ûâɳ¡¢Ä¡Ñ£ÞÆÆÂ̧ÎÎÑ£ÕæÄ°¡¤ + +h. Ý·ÚæûâÄ©êØ IBM ÉáàÒëæè×ÄâÆ«Ê¾Ä°ÇÞ×ÃÝßÈ©Äæä´Õ¤Ó×ÝÊ¡¤ + +i. ÆÛÇÙÒüÄâҳǶÈôÜÉĵĩ޶ÝÃûâɳÍÐâ«ÝÄÎÎďĿîùÊåû⡢ȺÆÀ¡¢Ç¶ÈôÜÉĵĩÇ×Ý·ÚæûâÄ©ßÈÅøÄæ×ÄïªÓÑÊå¡¢IBM Ç©äÍÄâÓ×ÝÊ¡¢ÈþĸÇÄÜÉ 10.1 ÄÍå硾¡ÖIBM óÜÓ×ÝÊïªóÁÄæâúÆø¡×ƶȴݽÌù¡¢IBM ËíÎÎóÜè׿ÚÜÉĵĩÓ×ÝÊĿĩËÎã²Õ¤¡¾ÅýÑÄÈ»ÄÁ¡¿ÍÐÄâٯܨ¡£Ô¶Ä©È´Ê°æñ܍ĿäÚä´óÜÓ×ïªóÁÄæÝÊ¡¢ÄâÇãȺÓ + +j. ÓÔÇ¡ÆÛÇÙÒüÕë¡¢÷äÅÉåµËçÄ©ÄæÇ¶Ä¡ÅÉÉáÆÜËíòÊÆÛÇÙÒüÆÜç¥ÍüÄæÇ¶ÈôÝóÓÝ¡¢ÅýÑÄÈþÄâÓîÍõÞóÅèĶÇÖâúÍÔÒ³ÄæÇ¶ÈôÝóÓÝ¡¨1) ÅèĸÜÉ 8 å硾¡ÖÏñøýêØØæÆÀ۾ࡡס¿ÆÜØ´ç¥ÄæÆÛ¡Öá£È¢¡×ÄæÕæ×äÍÐÅü×ä¡§2) ÅìÅÉÄæåîüÓÍÐÐúú¾¡§ÍÐ 3) Ý·Úæûâĩƫ×äç®È©ÄæÕæÎªÍÐÒØïõ¡¤ + +k. IBM êØÑÜËèñ¢é¬¡¾ê¢Ò³¡ÖIBM ËçäÆèÁÈò¡×¡¿øÜå÷ÇÙÒü¡¢ÅèÚäìÝ¡£ïÚÙÇůÅÅßÎÑÜËè¡Öá£È¢¡×¡¤IBM ËçäÆèÁÈòêØ IBM ÏñѽñÁǡůšâäÄæùÃÏû¡¤IBM Þó IBM ËçäÆèÁÈòÄæÈçÒ³ÍÐôøÍü¡¢ÍÐ̧è×Ý·ÚæûâÄ©óÜéðÄæåøÙ­¡¢ÉáÄâÓ×ÝÊǶ¡¤ + +l. Ý·ÚæûâÄ©êØ IBM ÍÔǡ̧ÅìÇÙÒü¡¾Çñ¡ÖIBM ÐêÅÂÇÙÒü¡×¡¿ÄæÚæûâêØßáìäØÂܨïªóÁ۾ࡡ¢ÄâïËÆîÍõÆÛÇÙÒüï¬ÄèÄæá£È¢Úæû⡤ + +14. ÇâÙÑî¯ÞØÅ¯äíðãÎÎ + +14.1 äíðãÎÎ + +ÇãÄâÛôÖÄÎÎÑ£îíÒóÔÏÐ¬ÄæÐ©ßÈĶ¡¢ â¸Ê¼÷äÅÉÇÑãôÅèÝ·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÚæûâåµÇâÄæÎÎÑ£Ò³äíðãÎΡ¢ðãÅèݽ£æØúËůÙÚÈçÆÛÇÙÒüÅä÷îÍÔÓÏÆíÍÐÒÞùÃÄæÝ·ÚæûâÄ©êØ IBM ÷äÅÉÄæÇÖɱûâɳ¡£÷ªÝÊůåøÙ­¡¤ + +ÆÛÇÙÒüÄâïËÆîôúÇÙÙÏÙÏëãÙ¸ÐÂâ¹ï±ÐÖÒüÄüÒüÄæÝ½Ìù¡¤ + +14.2 ê§õÝ + +ġŢûâɳ¡£÷ªÝÊůåøÙ­ÉáÌ¿Ý·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÚæûâåµÇâÄæÎÎÕ¼ê§õÝ¡¤ + +ÜÉĨÝåÅ¡ - ÇÖÙÏÙñȴ۾ࡠ+ +ÞóÍõÅèĶÇÖÙÏÄãï¬ÄèÄæÚæû⡢ĶÇÄÛ¾à¡ÚµÌ½ÅîÍÐÔºÊÑÜÉÄ¡ÝåÅ¡ÄãÄæÒÞùÃ۾ࡡ¤ÜÉÄ¡ÝåÅ¡ÍÔÇÄÄæÇ¶Èô۾ࡡ¢ÇñÆÜåîȺݨԺÓÔϯ¡¢ÕæÄ°êÄѽÄâüÈ¡¤ÆÛÜÉĨÝåšĿÄùÕ©î¾ÚêÇñĶ¡¨ + +* ÜÉÄ¡ÝåÅ¡ÜÉ 14 å硾¡ÖäíðãÎÎêØê§õݡס¿ÄæÇéê¡ÙÏÕ¥ÔºÓÔ۾ࡡ§Å¯ + +* ̧ÅìÇÙÒüÛ¾à¡ÄæËéÅ´ÙÏÕ¥ÔºÓÔ۾ࡡ¤ + +ÜÉÄ¡ÝåÅ¡ÜÉ 14 å硾¡ÖäíðãÎÎêØê§õݡס¿ÄæÇéê¡ÙÏÕ¥ÔºÓÔ۾ࡠ+ +14.1 äíðãÎÎ + +ÜÉ 14.1 åç¡ÖäíðãÎΡ×ÜÉÄ¡ÑôÄæ¡ÖÝ·Úæûâĩ̽ڵ¡Öá£È¢¡×ÚæûâåµÇâÄæÎÎÑ£¡×ÅÆÆ»¡¢ÍõĶÇÄÙÏÕ¥ÍÐÇâÙ´ÄãóÜÆñĶÇÄÅÆÆ»Ì½Å + +ËéÅ´ÇâÙ´ + +(1) ÇãÓüà«ÖÖɱÈçÑÉÙ´êØñ®ÏÜÖÖɱÈçÑÉÙ´¡¨Óüà«ÖÖɱÈçÑÉÙ´ (Hong Kong Special Administrative Region, "SAR") ÄæÎÎÑ£¡§Å¯ + +(2) ÇãÆºý¤¡¨Æºý¤ÄæÎÎÑ£¡¤ + +14.3 Ç´áú + +ïËÆîÍõĶÇÄÅèÜÏüÕÑÀÅøÄæÙÏÕ¥ÍÐÇâÙ´Õ롢ĶÇÄÑôæ¯óÜìÁÒ³ÜÉ 14.3 å硾¡ÖÇ´áú¡×¡¿¡¤ÇãïËÆîäíðãÎÎÑ£êØá£Ê©Ý½ÝýÝÂÆ«Äæî¯ÞØÄù¡¢ÆÛÜÉ 14.3 ÄÍåçÄæÝ½Ìùç¤ÜÉ 14.2 å硾¡Öê§õݡס¿óÀÇ¿ïËÆî¡¤ + +ËéÅ´ÇâÙ´ + +ÇãÄãáÞÄ©ÆáÇÁÌÏÙÏ¡¨ + +Ó¼÷äÅÉÆÜ×äÞóÎèú¾ç®È©ÇÙãô¡¢÷äÅÉÇÑãôϯ¡¢Ç¨ÆñÄãÙÏÙÏëãåîâ»Ç´áúÌçÔÞäÄ¡¢ËíȺÌçÔÞäÄÄæåµÕëÈ´ÕæÝ½ÌùÄèÅèÇ´áú¡¤Ç´áúá£Ê©óÜÇãÆ¡ËëâÐÈç¡¢ËäÅèÄãÅÆÒ³Äæ¡¤ÈºáúÌùá¸ÎªÏûÞ²ÜÜáúÊî¡¢Ëäè×÷äÅÉåµËçÄ©Éá̦ȴÎÎÌùÍíÊÖİ¡¤ÍõÇ´áúá£Ê©Äã¡¢ØæåµËçĩȴÍÔÎèú¾ËäâÐÈçÇ´áúÄæÝåÅ¡ÆÀ¡¢ÆÛÇÙÒüÙòѽúýÙÚÈ硤 + +ËéÅ´ÙÏÕ¥ÔºÓÔ + +Óüà«ÖÖɱÈçÑÉÙ´¡£ñ®ÏÜÖÖɱÈçÑÉٴůƺý¤ + +ÞóïËÆîÍõÇãÆºý¤Å¯ÖÖɱÈçÑÉÙ´Ì½ÚµÄæÚæûâ¡¢ÆÛÇÙÒüÄãÉÖÈ´¡ÖÙÏÕ¥ÍÐÇâÙ´¡×ÄæÇ󯻡¾ËóÇñ¡¨¡ÖÔÏÌîÝ·Úæûâĩݷï¬ÄèÚæûâÄæÙÏÕ¥ÍÐÇâÙ´¡×ů¡ÖÝ·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÚæûâÄæÙÏÕ¥ÍÐÇâÙ´¡×¡¿óÜÅèĶÇÄÇÖÇóÈù̽Å + +(1) ÇãÓüà«ÖÖɱÈçÑÉÙ´¡¨¡ÖÓüà«ÖÖɱÈçÑÉÙ´¡× + +(2) Çãñ®ÏÜÖÖɱÈçÑÉÙ´¡¨¡Öñ®ÏÜÖÖɱÈçÑÉÙ´¡× + +(3) ÇãÆºý¤¡¨¡Öƺý¤¡×¡¤ + +ÄãáÞÄ©ÆáÇÁÌÏÙÏ + +4. ÓÓâ¶ + +ä»ìÁĶÇÄ۾ࡡ¨ + +ÄãáÞÄ©ÆáÇÁÌÏÙÏÍÔÆíëÑÈçÅÃúýâ¶ÆîÆñÝ·ÚæûâÄ©Ó×ðê¡¢ÄãáÞÄ©ÆáÇÁÌÏÙÏèºÆÀÍÔÆíëÑÈçÅÃúýâ¶ÆîÆñ IBM Ó×ðꡤ + +ä»ÅûÌÛ + +10.2 IBM ÅÑëæÓ×ÝÊïªóÁÄæâúÆø + +É´Øæ 10.2b ÄãÄæÇó⤡ÖÖÖÖ±¡×ů¡Öåîô¤¡× + +13. Ä¡×ï۾ࡠ+ +ĶÇÄÛ¾à¡Ì½ÅîÜÉ 13.i âúÄæÛ¾à¡¡¨ + +ËíðãÜÉIJå硾ïªóÁĸÓî¡¿ÍÔßÈËòÄè IBM ËòóÜٸů¡Öá£È¢¡×âäàõÏ¯ÄæûâɳݽÌù¡¢ÏæÆÛÇÙÒüåµËçĩϯ¡¢ÄâÚµÅäÚ¯Ò³ÐÖÒüĿɳÖôÜÉĵĩÈÔÙÚÈçÆÛÇÙÒüǶÈô۾ࡡ¤ + +ƺý¤ + +8.1 È´ÓîÏñøý + +޲ѥġÑôÉ´Øæ¡¤ + +10.1 IBM óÜÓ×ÝÊïªóÁÄæâúÆø + +É´ØæÄ¶ÇÄÅÆÆ» + +ÆÛÓî̱ǩïËÆîÍõ IBM Äæ÷ËÅýٸů¡Öá£È¢¡×âäàõϯ¡¤ ȺâúÓî̱Ïû IBM ů IBM Äæ¡Öá£È¢¡×âäàõϯêØ÷ËÅýÙ¸ÄæÇÁÇÑïªóÁĸÓ + +Z125-3301-14 (07/2011) + + diff --git a/charts/mq-advancedserver/README.md b/charts/mq-advancedserver/README.md new file mode 100644 index 0000000..d572611 --- /dev/null +++ b/charts/mq-advancedserver/README.md @@ -0,0 +1,74 @@ +

+ +# IBM MQ + +IBM® MQ is messaging middleware that simplifies and accelerates the integration of diverse applications and business data across multiple platforms. It uses message queues to facilitate the exchanges of information and offers a single messaging solution for cloud, mobile, Internet of Things (IoT) and on-premises environments. + +# Introduction + +This chart deploys a single IBM MQ Advanced server (queue manager) into an IBM Cloud private or other Kubernetes environment. + +## Prerequisites + +- Kubernetes 1.5 or greater, with beta APIs enabled +- If persistence is enabled (see [configuration](#configuration)), then you either need to create a PersistentVolume, or specify a Storage Class if classes are defined in your cluster. + +## Installing the Chart + +To install the chart with the release name `foo`: + +```bash +helm install --name foo stable/mq-advancedserver --set license=accept +``` + +This command accepts the [IBM MQ Advanced license](LICENSE) and deploys an MQ Advanced server on the Kubernetes cluster. The [configuration](#configuration) section lists the parameters that can be configured during installation. + +> **Tip**: See all the resources deployed by the chart using `kubectl get all -l release=foo` + +## Verifying the Chart +See NOTES.txt associated with this chart for verification instructions + +## Uninstalling the Chart + +To uninstall/delete the `foo` release: + +```bash +helm delete foo +``` + +The command removes all the Kubernetes components associated with the chart, except any Persistent Volume Claims (PVCs). This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. In order to delete the Queue Manager's data, you can delete the PVC using the following command: + +```bash +kubectl delete pvc -l release=foo +``` + +## Configuration +The following table lists the configurable parameters of the `mq-advancedserver` chart and their default values. + +| Parameter | Description | Default | +| ---------------------------- | --------------------------------------------- | ---------------------------------------------------------- | +| `license` | Set to `accept` to accept the terms of the IBM license | `not accepted` | +| `image.name` | Image name | `nil` | +| `image.tag` | Image tag | `nil` | +| `image.pullPolicy` | Image pull policy | `IfNotPresent` | +| `image.pullSecret` | Image pull secret, if you are using a private Docker registry | `nil` | +| `data.persistence.enabled` | Use a PersistentVolume to persist MQ data (under `/var/mqm`) | `true` | +| `data.persistence.storageClass` | Storage class of backing Persistent Volume | `nil` | +| `data.persistence.size` | Size of data volume | `2Gi` | +| `service.name` | Name of the Kubernetes service to create | `qmgr` | +| `service.type` | Kubernetes service type exposing ports, e.g. `NodePort` | `ClusterIP` | +| `queuemanager.name` | MQ Queue Manager name | Helm release name | + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Persistence + +The chart mounts a [Persistent Volume](http://kubernetes.io/docs/user-guide/persistent-volumes/). + +# Copyright + +© Copyright IBM Corporation 2017 \ No newline at end of file diff --git a/charts/mq-advancedserver/templates/NOTES.txt b/charts/mq-advancedserver/templates/NOTES.txt new file mode 100644 index 0000000..99b0fbf --- /dev/null +++ b/charts/mq-advancedserver/templates/NOTES.txt @@ -0,0 +1,3 @@ +MQ can be accessed via port 1414 on the following DNS name from within your cluster: +{{ template "fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local + diff --git a/charts/mq-advancedserver/templates/_helpers.tpl b/charts/mq-advancedserver/templates/_helpers.tpl new file mode 100644 index 0000000..fcbde7a --- /dev/null +++ b/charts/mq-advancedserver/templates/_helpers.tpl @@ -0,0 +1,29 @@ +# © Copyright IBM Corporation 2017 +# +# 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. +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 24 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 24 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 24 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/mq-advancedserver/templates/service.yaml b/charts/mq-advancedserver/templates/service.yaml new file mode 100644 index 0000000..243db5c --- /dev/null +++ b/charts/mq-advancedserver/templates/service.yaml @@ -0,0 +1,32 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "fullname" . }} + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + type: {{ .Values.service.type }} + ports: + - port: 1414 + name: {{ .Values.service.name }}-1 + # - port: 9443 + #name: {{ .Values.service.name }}-2 + selector: + app: {{ template "fullname" . }} diff --git a/charts/mq-advancedserver/templates/stateful-set.yaml b/charts/mq-advancedserver/templates/stateful-set.yaml new file mode 100644 index 0000000..af284a1 --- /dev/null +++ b/charts/mq-advancedserver/templates/stateful-set.yaml @@ -0,0 +1,97 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: {{ template "fullname" . }} + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + serviceName: {{ .Values.service.name }} + replicas: 1 + template: + metadata: + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + QM_IDENTIFIER: "{{ .Release.Name }}" + spec: + {{- if .Values.image.pullSecret }} + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + {{- end }} + containers: + - name: qmgr + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 1414 + #- containerPort: 9443 + env: + - name: LICENSE + value: {{ .Values.license }} + - name: MQ_QMGR_NAME + value: {{ .Values.queuemanager.name | default .Release.Name | replace "-" "" }} + {{- if .Values.data.persistence.enabled }} + volumeMounts: + - mountPath: "/mnt/mqm" + name: {{ template "fullname" . }}-{{ .Values.data.name }} + {{- end }} + # Set liveness probe to determine if the queue manager is running + livenessProbe: + exec: + command: + - chkmqhealthy + initialDelaySeconds: 60 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 1 + # Set readiness probe to determine if the MQ listener is running + readinessProbe: + exec: + command: + - chkmqready + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 3 + failureThreshold: 1 + resources: + limits: +{{ toYaml .Values.resources.limits | indent 14 }} + requests: +{{ toYaml .Values.resources.requests | indent 14 }} + volumeClaimTemplates: + {{- if .Values.data.persistence.enabled }} + - metadata: + name: {{ template "fullname" . }}-{{ .Values.data.name }} + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + spec: + {{- if .Values.data.persistence.storageClassName }} + storageClassName: {{ .Values.data.persistence.storageClassName | quote }} + {{- end }} + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: {{ .Values.data.persistence.size | quote }} + {{- end }} diff --git a/charts/mq-advancedserver/templates/test.yaml b/charts/mq-advancedserver/templates/test.yaml new file mode 100644 index 0000000..c1db25d --- /dev/null +++ b/charts/mq-advancedserver/templates/test.yaml @@ -0,0 +1,40 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +apiVersion: v1 +kind: Pod +metadata: + name: "{{.Release.Name}}-test" + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + annotations: + "helm.sh/hook": test-success +spec: + containers: + - name: {{.Release.Name}}-test + image: alpine:latest + env: + # Host name for the service running an MQ queue manager + - name: MQ_HOST + value: {{ template "fullname" . }} + # Time to try before giving up and failing the test (in seconds) + - name: TIMEOUT + value: "10" + command: ["sh"] + # Check that port 1414 is listening + args: ["-xc", "nc -v -z -w$(TIMEOUT) $(MQ_HOST) 1414"] + restartPolicy: Never diff --git a/charts/mq-advancedserver/values.yaml b/charts/mq-advancedserver/values.yaml new file mode 100644 index 0000000..d08fa97 --- /dev/null +++ b/charts/mq-advancedserver/values.yaml @@ -0,0 +1,49 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +# license must be set to "accept" to accept the terms of the IBM license +license: "not accepted" +image: + # repository is the container repository to use, which must contain IBM MQ Advanced + repository: + # tag is the tag to use for the container repository + tag: + # pullSecret is the secret to use when pulling the image from a private registry + pullSecret: + # pullPolicy is either IfNotPresent or Always (https://kubernetes.io/docs/concepts/containers/images/) + pullPolicy: IfNotPresent +# data section specifies settings for the main persistent volume claim, which is used for data in /var/mqm +data: + # name sets part of the name for this persistent volume claim + name: "data" + persistence: + enabled: true + ## storageClassName is the name of the storage class to use, or an empty string for no storage class + storageClassName: "" + ## size is the minimum size of the persistent volume + size: 2Gi +service: + name: qmgr + type: ClusterIP +resources: + limits: + cpu: 1 + memory: 1Gi + requests: + cpu: 1 + memory: 1Gi +queuemanager: + name: +# nameOverride can be set to partially override the name of the resources created by this chart +nameOverride: \ No newline at end of file diff --git a/charts/mq-devserver/Chart.yaml b/charts/mq-devserver/Chart.yaml new file mode 100644 index 0000000..d766b61 --- /dev/null +++ b/charts/mq-devserver/Chart.yaml @@ -0,0 +1,19 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +apiVersion: v1 +description: IBM MQ queue manager +name: mq-devserver +version: 1.0.0 +icon: https://developer.ibm.com/messaging/wp-content/uploads/sites/18/2017/07/IBM-MQ-Square-200.png \ No newline at end of file diff --git a/charts/mq-devserver/LICENSE b/charts/mq-devserver/LICENSE new file mode 100644 index 0000000..8b6db6f --- /dev/null +++ b/charts/mq-devserver/LICENSE @@ -0,0 +1,737 @@ +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Non-Warranted Programs (Z125-5589-05) applies. + +Program Name (Program Number): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Developer Limitation + +If the Program is designated as for "Developers", the Program can only be deployed as part of Licensee's internal development and unit testing on a developer machine. A developer machine is a physical or virtual desktop environment, running a primary operating system and the Program, both of which are accessible and used by no more than one specified developer. Licensee is not authorized to use the Program for processing production workloads, simulating production workloads or testing scalability of any code, application or system. Licensee is not authorized to use any part of the Program for any other purposes without acquiring the appropriate production entitlements. + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +International License Agreement for Non-Warranted Programs + +Part 1 - General Terms + +BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, CLICKING ON AN "ACCEPT" BUTTON, OR OTHERWISE USING THE PROGRAM, LICENSEE AGREES TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCEPTING THESE TERMS ON BEHALF OF LICENSEE, YOU REPRESENT AND WARRANT THAT YOU HAVE FULL AUTHORITY TO BIND LICENSEE TO THESE TERMS. IF YOU DO NOT AGREE TO THESE TERMS, + +* DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, CLICK ON AN "ACCEPT" BUTTON, OR USE THE PROGRAM; AND + +* PROMPTLY RETURN THE UNUSED MEDIA AND DOCUMENTATION TO THE PARTY FROM WHOM IT WAS OBTAINED FOR A REFUND OF THE AMOUNT PAID. IF THE PROGRAM WAS DOWNLOADED, DESTROY ALL COPIES OF THE PROGRAM. + +1. Definitions + +"Authorized Use" - the specified level at which Licensee is authorized to execute or run the Program. That level may be measured by number of users, millions of service units ("MSUs"), Processor Value Units ("PVUs"), or other level of use specified by IBM. + +"IBM" - International Business Machines Corporation or one of its subsidiaries. + +"License Information" ("LI") - a document that provides information and any additional terms specific to a Program. The Program's LI is available at www.ibm.com/software/sla. The LI can also be found in the Program's directory, by the use of a system command, or as a booklet included with the Program. + +"Program" - the following, including the original and all whole or partial copies: 1) machine-readable instructions and data, 2) components, files, and modules, 3) audio-visual content (such as images, text, recordings, or pictures), and 4) related licensed materials (such as keys and documentation). + +2. Agreement Structure + +This Agreement includes Part 1 - General Terms, Part 2 - Country-unique Terms (if any) and the LI and is the complete agreement between Licensee and IBM regarding the use of the Program. It replaces any prior oral or written communications between Licensee and IBM concerning Licensee's use of the Program. The terms of Part 2 may replace or modify those of Part 1. To the extent of any conflict, the LI prevails over both Parts. + +3. License Grant + +The Program is owned by IBM or an IBM supplier, and is copyrighted and licensed, not sold. + +IBM grants Licensee a nonexclusive license to 1) use the Program up to the Authorized Use specified in the invoice, 2) make and install copies to support such Authorized Use, and 3) make a backup copy, all provided that + +a. Licensee has lawfully obtained the Program and complies with the terms of this Agreement; + +b. the backup copy does not execute unless the backed-up Program cannot execute; + +c. Licensee reproduces all copyright notices and other legends of ownership on each copy, or partial copy, of the Program; + +d. Licensee ensures that anyone who uses the Program (accessed either locally or remotely) 1) does so only on Licensee's behalf and 2) complies with the terms of this Agreement; + +e. Licensee does not 1) use, copy, modify, or distribute the Program except as expressly permitted in this Agreement; 2) reverse assemble, reverse compile, otherwise translate, or reverse engineer the Program, except as expressly permitted by law without the possibility of contractual waiver; 3) use any of the Program's components, files, modules, audio-visual content, or related licensed materials separately from that Program; or 4) sublicense, rent, or lease the Program; and + +f. if Licensee obtains this Program as a Supporting Program, Licensee uses this Program only to support the Principal Program and subject to any limitations in the license to the Principal Program, or, if Licensee obtains this Program as a Principal Program, Licensee uses all Supporting Programs only to support this Program, and subject to any limitations in this Agreement. For purposes of this Item "f," a "Supporting Program" is a Program that is part of another IBM Program ("Principal Program") and identified as a Supporting Program in the Principal Program's LI. (To obtain a separate license to a Supporting Program without these restrictions, Licensee should contact the party from whom Licensee obtained the Supporting Program.) + +This license applies to each copy of the Program that Licensee makes. + +3.1 Trade-ups, Updates, Fixes, and Patches + +3.1.1 Trade-ups + +If the Program is replaced by a trade-up Program, the replaced Program's license is promptly terminated. + +3.1.2 Updates, Fixes, and Patches + +When Licensee receives an update, fix, or patch to a Program, Licensee accepts any additional or different terms that are applicable to such update, fix, or patch that are specified in its LI. If no additional or different terms are provided, then the update, fix, or patch is subject solely to this Agreement. If the Program is replaced by an update, Licensee agrees to promptly discontinue use of the replaced Program. + +3.2 Fixed Term Licenses + +If IBM licenses the Program for a fixed term, Licensee's license is terminated at the end of the fixed term, unless Licensee and IBM agree to renew it. + +3.3 Term and Termination + +This Agreement is effective until terminated. + +IBM may terminate Licensee's license if Licensee fails to comply with the terms of this Agreement. + +If the license is terminated for any reason by either party, Licensee agrees to promptly discontinue use of and destroy all of Licensee's copies of the Program. Any terms of this Agreement that by their nature extend beyond termination of this Agreement remain in effect until fulfilled, and apply to both parties' respective successors and assignees. + +4. Charges + +Charges, if any, are based on Authorized Use obtained, which is specified in the invoice. IBM does not give credits or refunds for charges already due or paid, except as specified elsewhere in this Agreement. + +If Licensee wishes to increase its Authorized Use, Licensee must notify IBM or an authorized IBM reseller in advance and pay any applicable charges. + +5. Taxes + +If any authority imposes on the Program a duty, tax, levy, or fee, excluding those based on IBM's net income, then Licensee agrees to pay that amount, as specified in an invoice, or supply exemption documentation. Licensee is responsible for any personal property taxes for the Program from the date that Licensee obtains it. If any authority imposes a customs duty, tax, levy, or fee for the import into or the export, transfer, access, or use of the Program outside the country in which the original Licensee was granted the license, then Licensee agrees that it is responsible for, and will pay, any amount imposed. + +6. Money-back Guarantee + +If Licensee is dissatisfied with the Program for any reason and is the original Licensee, Licensee may terminate the license and obtain a refund of the amount Licensee paid, if any, for the Program, provided that Licensee returns the Program to the party from whom Licensee obtained it within 30 days of the invoice date. If the license is for a fixed term that is subject to renewal, then Licensee may obtain a refund only if the Program is returned within the first 30 days of the initial term. If Licensee downloaded the Program, Licensee should contact the party from whom Licensee obtained it for instructions on how to obtain the refund. + +7. Program Transfer + +Licensee may transfer the Program and all of Licensee's license rights and obligations to another party only if that party agrees to the terms of this Agreement. If the license is terminated for any reason by either party, Licensee is prohibited from transferring the Program to another party. Licensee may not transfer a portion of 1) the Program or 2) the Program's Authorized Use. When Licensee transfers the Program, Licensee must also transfer a hard copy of this Agreement, including the LI. Immediately after the transfer, Licensee's license terminates. + +8. No Warranties + +SUBJECT TO ANY STATUTORY WARRANTIES THAT CANNOT BE EXCLUDED, IBM MAKES NO WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, REGARDING THE PROGRAM OR SUPPORT, IF ANY, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND TITLE, AND ANY WARRANTY OR CONDITION OF NON-INFRINGEMENT. + +SOME STATES OR JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF EXPRESS OR IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO LICENSEE. IN THAT EVENT, SUCH WARRANTIES ARE LIMITED IN DURATION TO THE MINIMUM PERIOD REQUIRED BY LAW. NO WARRANTIES APPLY AFTER THAT PERIOD. SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY LASTS, SO THE ABOVE LIMITATION MAY NOT APPLY TO LICENSEE. LICENSEE MAY HAVE OTHER RIGHTS THAT VARY FROM STATE TO STATE OR JURISDICTION TO JURISDICTION. + +THE DISCLAIMERS AND EXCLUSIONS IN THIS SECTION 8 ALSO APPLY TO ANY OF IBM'S PROGRAM DEVELOPERS AND SUPPLIERS. + +MANUFACTURERS, SUPPLIERS, OR PUBLISHERS OF NON-IBM PROGRAMS MAY PROVIDE THEIR OWN WARRANTIES. + +IBM DOES NOT PROVIDE SUPPORT OF ANY KIND, UNLESS IBM SPECIFIES OTHERWISE. IN SUCH EVENT, ANY SUPPORT PROVIDED BY IBM IS SUBJECT TO THE DISCLAIMERS AND EXCLUSIONS IN THIS SECTION 8. + +9. Licensee Data and Databases + +To assist Licensee in isolating the cause of a problem with the Program, IBM may request that Licensee 1) allow IBM to remotely access Licensee's system or 2) send Licensee information or system data to IBM. However, IBM is not obligated to provide such assistance unless IBM and Licensee enter a separate written agreement under which IBM agrees to provide to Licensee that type of support, which is beyond IBM's obligations in this Agreement. In any event, IBM uses information about errors and problems to improve its products and services, and assist with its provision of related support offerings. For these purposes, IBM may use IBM entities and subcontractors (including in one or more countries other than the one in which Licensee is located), and Licensee authorizes IBM to do so. + +Licensee remains responsible for 1) any data and the content of any database Licensee makes available to IBM, 2) the selection and implementation of procedures and controls regarding access, security, encryption, use, and transmission of data (including any personally-identifiable data), and 3) backup and recovery of any database and any stored data. Licensee will not send or provide IBM access to any personally-identifiable information, whether in data or any other form, and will be responsible for reasonable costs and other amounts that IBM may incur relating to any such information mistakenly provided to IBM or the loss or disclosure of such information by IBM, including those arising out of any third party claims. + +10. Limitation of Liability + +The limitations and exclusions in this Section 10 (Limitation of Liability) apply to the full extent they are not prohibited by applicable law without the possibility of contractual waiver. + +10.1 Items for Which IBM May Be Liable + +Circumstances may arise where, because of a default on IBM's part or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), IBM's entire liability for all claims in the aggregate arising from or related to each Program or otherwise arising under this Agreement will not exceed the amount of any 1) damages for bodily injury (including death) and damage to real property and tangible personal property and 2) other actual direct damages up to the charges (if the Program is subject to fixed term charges, up to twelve months' charges) Licensee paid for the Program that is the subject of the claim. + +This limit also applies to any of IBM's Program developers and suppliers. It is the maximum for which IBM and its Program developers and suppliers are collectively responsible. + +10.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM, ITS PROGRAM DEVELOPERS OR SUPPLIERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: + +a. LOSS OF, OR DAMAGE TO, DATA; + +b. SPECIAL, INCIDENTAL, EXEMPLARY, OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; OR + +c. LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. + +11. Compliance Verification + +For purposes of this Section 11 (Compliance Verification), "ILAN Program Terms" means 1) this Agreement and applicable amendments and transaction documents provided by IBM, and 2) IBM software policies that may be found at the IBM Software Policy website (www.ibm.com/softwarepolicies), including but not limited to those policies concerning backup, sub-capacity pricing, and migration. + +The rights and obligations set forth in this Section 11 remain in effect during the period the Program is licensed to Licensee, and for two years thereafter. + +11.1 Verification Process + +Licensee agrees to create, retain, and provide to IBM and its auditors accurate written records, system tool outputs, and other system information sufficient to provide auditable verification that Licensee's use of all Programs is in compliance with the ILAN Program Terms, including, without limitation, all of IBM's applicable licensing and pricing qualification terms. Licensee is responsible for 1) ensuring that it does not exceed its Authorized Use, and 2) remaining in compliance with ILAN Program Terms. + +Upon reasonable notice, IBM may verify Licensee's compliance with ILAN Program Terms at all sites and for all environments in which Licensee uses (for any purpose) Programs subject to ILAN Program Terms. Such verification will be conducted in a manner that minimizes disruption to Licensee's business, and may be conducted on Licensee's premises, during normal business hours. IBM may use an independent auditor to assist with such verification, provided IBM has a written confidentiality agreement in place with such auditor. + +11.2 Resolution + +IBM will notify Licensee in writing if any such verification indicates that Licensee has used any Program in excess of its Authorized Use or is otherwise not in compliance with the ILAN Program Terms. Licensee agrees to promptly pay directly to IBM the charges that IBM specifies in an invoice for 1) any such excess use, 2) support for such excess use for the lesser of the duration of such excess use or two years, and 3) any additional charges and other liabilities determined as a result of such verification. + +12. Third Party Notices + +The Program may include third party code that IBM, not the third party, licenses to Licensee under this Agreement. Notices, if any, for the third party code ("Third Party Notices") are included for Licensee's information only. These notices can be found in the Program's NOTICES file(s). Information on how to obtain source code for certain third party code can be found in the Third Party Notices. If in the Third Party Notices IBM identifies third party code as "Modifiable Third Party Code," IBM authorizes Licensee to 1) modify the Modifiable Third Party Code and 2) reverse engineer the Program modules that directly interface with the Modifiable Third Party Code provided that it is only for the purpose of debugging Licensee's modifications to such third party code. IBM's service and support obligations, if any, apply only to the unmodified Program. + +13. General + +a. Nothing in this Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. + +b. For Programs IBM provides to Licensee in tangible form, IBM fulfills its shipping and delivery obligations upon the delivery of such Programs to the IBM-designated carrier, unless otherwise agreed to in writing by Licensee and IBM. + +c. If any provision of this Agreement is held to be invalid or unenforceable, the remaining provisions of this Agreement remain in full force and effect. + +d. Licensee agrees to comply with all applicable export and import laws and regulations, including U.S. embargo and sanctions regulations and prohibitions on export for certain end uses or to certain users. + +e. Licensee authorizes International Business Machines Corporation and its subsidiaries (and their successors and assigns, contractors and IBM Business Partners) to store and use Licensee's business contact information wherever they do business, in connection with IBM products and services, or in furtherance of IBM's business relationship with Licensee. + +f. Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. + +g. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation: 1) neither party will bring a legal action, regardless of form, for any claim arising out of or related to this Agreement more than two years after the cause of action arose; and 2) upon the expiration of such time limit, any such claim and all respective rights related to the claim lapse. + +h. Neither Licensee nor IBM is responsible for failure to fulfill any obligations due to causes beyond its control. + +i. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except as permitted in Subsection 10.1 (Items for Which IBM May Be Liable) above for bodily injury (including death) or damage to real or tangible personal property for which IBM is legally liable to that third party. + +j. In entering into this Agreement, neither party is relying on any representation not specified in this Agreement, including but not limited to any representation concerning: 1) the performance or function of the Program; 2) the experiences or recommendations of other parties; or 3) any results or savings that Licensee may achieve. + +k. IBM has signed agreements with certain organizations (called "IBM Business Partners") to promote, market, and support certain Programs. IBM Business Partners remain independent and separate from IBM. IBM is not responsible for the actions or statements of IBM Business Partners or obligations they have to Licensee. + +l. The license and intellectual property indemnification terms of Licensee's other agreements with IBM (such as the IBM Customer Agreement) do not apply to Program licenses granted under this Agreement. + +m. Both parties agree that all information exchanged is nonconfidential. If either party requires the exchange of confidential information, it will be made under a signed confidentiality agreement. + +14. Geographic Scope and Governing Law + +14.1 Governing Law + +Both parties agree to the application of the laws of the country in which Licensee obtained the Program license to govern, interpret, and enforce all of Licensee's and IBM's respective rights, duties, and obligations arising from, or relating in any manner to, the subject matter of this Agreement, without regard to conflict of law principles. + +The United Nations Convention on Contracts for the International Sale of Goods does not apply. + +14.2 Jurisdiction + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license. + +Part 2 - Country-unique Terms + +For licenses granted in the countries specified below, the following terms replace or modify the referenced terms in Part 1. All terms in Part 1 that are not changed by these amendments remain unchanged and in effect. This Part 2 is organized as follows: + +* Multiple country amendments to Part 1, Section 14 (Governing Law and Jurisdiction); + +* Americas country amendments to other Agreement terms; + +* Asia Pacific country amendments to other Agreement terms; and + +* Europe, Middle East, and Africa country amendments to other Agreement terms. + +Multiple country amendments to Part 1, Section 14 (Governing Law and Jurisdiction) + +14.1 Governing Law + +The phrase "the laws of the country in which Licensee obtained the Program license" in the first paragraph of 14.1 Governing Law is replaced by the following phrases in the countries below: + +AMERICAS + +(1) In Canada: the laws in the Province of Ontario; + +(2) in Mexico: the federal laws of the Republic of Mexico; + +(3) in the United States, Anguilla, Antigua/Barbuda, Aruba, British Virgin Islands, Cayman Islands, Dominica, Grenada, Guyana, Saint Kitts and Nevis, Saint Lucia, Saint Maarten, and Saint Vincent and the Grenadines: the laws of the State of New York, United States; + +(4) in Venezuela: the laws of the Bolivarian Republic of Venezuela; + +ASIA PACIFIC + +(5) in Cambodia and Laos: the laws of the State of New York, United States; + +(6) in Australia: the laws of the State or Territory in which the transaction is performed; + +(7) in Hong Kong SAR and Macau SAR: the laws of Hong Kong Special Administrative Region ("SAR"); + +(8) in Taiwan: the laws of Taiwan; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: the laws of Austria; + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the laws of France; + +(11) in Estonia, Latvia, and Lithuania: the laws of Finland; + +(12) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the laws of England; and + +(13) in South Africa, Namibia, Lesotho, and Swaziland: the laws of the Republic of South Africa. + +14.2 Jurisdiction + +The following paragraph pertains to jurisdiction and replaces Subsection 14.2 (Jurisdiction) as it applies for those countries identified below: + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license except that in the countries identified below all disputes arising out of or related to this Agreement, including summary proceedings, will be brought before and subject to the exclusive jurisdiction of the following courts of competent jurisdiction: + +AMERICAS + +(1) In Argentina: the Ordinary Commercial Court of the city of Buenos Aires; + +(2) in Brazil: the court of Rio de Janeiro, RJ; + +(3) in Chile: the Civil Courts of Justice of Santiago; + +(4) in Ecuador: the civil judges of Quito for executory or summary proceedings (as applicable); + +(5) in Mexico: the courts located in Mexico City, Federal District; + +(6) in Peru: the judges and tribunals of the judicial district of Lima, Cercado; + +(7) in Uruguay: the courts of the city of Montevideo; + +(8) in Venezuela: the courts of the metropolitan area of the city of Caracas; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Austria: the court of law in Vienna, Austria (Inner-City); + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, France, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Monaco, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the Commercial Court of Paris; + +(11) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the English courts; + +(12) in South Africa, Namibia, Lesotho, and Swaziland: the High Court in Johannesburg; + +(13) in Greece: the competent court of Athens; + +(14) in Israel: the courts of Tel Aviv-Jaffa; + +(15) in Italy: the courts of Milan; + +(16) in Portugal: the courts of Lisbon; + +(17) in Spain: the courts of Madrid; and + +(18) in Turkey: the Istanbul Central Courts and Execution Directorates of Istanbul, the Republic of Turkey. + +14.3 Arbitration + +The following paragraph is added as a new Subsection 14.3 (Arbitration) as it applies for those countries identified below. The provisions of this Subsection 14.3 prevail over those of Subsection 14.2 (Jurisdiction) to the extent permitted by the applicable governing law and rules of procedure: + +ASIA PACIFIC + +(1) In Cambodia, India, Laos, Philippines, and Vietnam: + +Disputes arising out of or in connection with this Agreement will be finally settled by arbitration which will be held in Singapore in accordance with the Arbitration Rules of Singapore International Arbitration Center ("SIAC Rules") then in effect. The arbitration award will be final and binding for the parties without appeal and will be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators will be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties will appoint a third arbitrator who will act as chairman of the proceedings. Vacancies in the post of chairman will be filled by the president of the SIAC. Other vacancies will be filled by the respective nominating party. Proceedings will continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator will be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings will be conducted, including all documents presented in such proceedings, in the English language. The English language version of this Agreement prevails over any other language version. + +(2) In the People's Republic of China: + +In case no settlement can be reached, the disputes will be submitted to China International Economic and Trade Arbitration Commission for arbitration according to the then effective rules of the said Arbitration Commission. The arbitration will take place in Beijing and be conducted in Chinese. The arbitration award will be final and binding on both parties. During the course of arbitration, this agreement will continue to be performed except for the part which the parties are disputing and which is undergoing arbitration. + +(3) In Indonesia: + +Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation, i) neither party will bring a legal action, regardless of form, arising out of or related to this Agreement or any transaction under it more than two years after the cause of action arose; and ii) after such time limit, any legal action arising out of this Agreement or any transaction under it and all respective rights related to any such action lapse. + +Disputes arising out of or in connection with this Agreement shall be finally settled by arbitration that shall be held in Jakarta, Indonesia in accordance with the rules of Board of the Indonesian National Board of Arbitration (Badan Arbitrase Nasional Indonesia or "BANI") then in effect. The arbitration award shall be final and binding for the parties without appeal and shall be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators shall be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties shall appoint a third arbitrator who shall act as chairman of the proceedings. Vacancies in the post of chairman shall be filled by the chairman of the BANI. Other vacancies shall be filled by the respective nominating party. Proceedings shall continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator shall be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings shall be conducted, including all documents presented in such proceedings, in the English and/or Indonesian language. + +EUROPE, MIDDLE EAST, AND AFRICA + +(4) In Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: + +All disputes arising out of this Agreement or related to its violation, termination or nullity will be finally settled under the Rules of Arbitration and Conciliation of the International Arbitral Center of the Federal Economic Chamber in Vienna (Vienna Rules) by three arbitrators appointed in accordance with these rules. The arbitration will be held in Vienna, Austria, and the official language of the proceedings will be English. The decision of the arbitrators will be final and binding upon both parties. Therefore, pursuant to paragraph 598 (2) of the Austrian Code of Civil Procedure, the parties expressly waive the application of paragraph 595 (1) figure 7 of the Code. IBM may, however, institute proceedings in a competent court in the country of installation. + +(5) In Estonia, Latvia, and Lithuania: + +All disputes arising in connection with this Agreement will be finally settled in arbitration that will be held in Helsinki, Finland in accordance with the arbitration laws of Finland then in effect. Each party will appoint one arbitrator. The arbitrators will then jointly appoint the chairman. If arbitrators cannot agree on the chairman, then the Central Chamber of Commerce in Helsinki will appoint the chairman. + +AMERICAS COUNTRY AMENDMENTS + +CANADA + +10.1 Items for Which IBM May Be Liable + +The following replaces Item 1 in the first paragraph of this Subsection 10.1 (Items for Which IBM May Be Liable): + +1) damages for bodily injury (including death) and physical harm to real property and tangible personal property caused by IBM's negligence; and + +13. General + +The following replaces Item 13.d: + +d. Licensee agrees to comply with all applicable export and import laws and regulations, including those of that apply to goods of United States origin and that prohibit or limit export for certain uses or to certain users. + +The following replaces Item 13.i: + +i. No right or cause of action for any third party is created by this Agreement or any transaction under it, nor is IBM responsible for any third party claims against Licensee except as permitted by the Limitation of Liability section above for bodily injury (including death) or physical harm to real or tangible personal property caused by IBM's negligence for which IBM is legally liable to that third party. + +The following is added as Item 13.n: + +n. For purposes of this Item 13.n, "Personal Data" refers to information relating to an identified or identifiable individual made available by one of the parties, its personnel or any other individual to the other in connection with this Agreement. The following provisions apply in the event that one party makes Personal Data available to the other: + +(1) General + +(a) Each party is responsible for complying with any obligations applying to it under applicable Canadian data privacy laws and regulations ("Laws"). + +(b) Neither party will request Personal Data beyond what is necessary to fulfill the purpose(s) for which it is requested. The purpose(s) for requesting Personal Data must be reasonable. Each party will agree in advance as to the type of Personal Data that is required to be made available. + +(2) Security Safeguards + +(a) Each party acknowledges that it is solely responsible for determining and communicating to the other the appropriate technological, physical and organizational security measures required to protect Personal Data. + +(b) Each party will ensure that Personal Data is protected in accordance with the security safeguards communicated and agreed to by the other. + +(c) Each party will ensure that any third party to whom Personal Data is transferred is bound by the applicable terms of this section. + +(d) Additional or different services required to comply with the Laws will be deemed a request for new services. + +(3) Use + +Each party agrees that Personal Data will only be used, accessed, managed, transferred, disclosed to third parties or otherwise processed to fulfill the purpose(s) for which it was made available. + +(4) Access Requests + +(a) Each party agrees to reasonably cooperate with the other in connection with requests to access or amend Personal Data. + +(b) Each party agrees to reimburse the other for any reasonable charges incurred in providing each other assistance. + +(c) Each party agrees to amend Personal Data only upon receiving instructions to do so from the other party or its personnel. + +(5) Retention + +Each party will promptly return to the other or destroy all Personal Data that is no longer necessary to fulfill the purpose(s) for which it was made available, unless otherwise instructed by the other or its personnel or required by law. + +(6) Public Bodies Who Are Subject to Public Sector Privacy Legislation + +For Licensees who are public bodies subject to public sector privacy legislation, this Item 13.n applies only to Personal Data made available to Licensee in connection with this Agreement, and the obligations in this section apply only to Licensee, except that: 1) section (2)(a) applies only to IBM; 2) sections (1)(a) and (4)(a) apply to both parties; and 3) section (4)(b) and the last sentence in (1)(b) do not apply. + +PERU + +10. Limitation of Liability + +The following is added to the end of this Section 10 (Limitation of Liability): + +Except as expressly required by law without the possibility of contractual waiver, Licensee and IBM intend that the limitation of liability in this Limitation of Liability section applies to damages caused by all types of claims and causes of action. If any limitation on or exclusion from liability in this section is held by a court of competent jurisdiction to be unenforceable with respect to a particular claim or cause of action, the parties intend that it nonetheless apply to the maximum extent permitted by applicable law to all other claims and causes of action. + +10.1 Items for Which IBM May Be Liable + +The following is added to the end of this Subsection 10.1: + +In accordance with Article 1328 of the Peruvian Civil Code, the limitations and exclusions specified in this section will not apply to damages caused by IBM's willful misconduct ("dolo") or gross negligence ("culpa inexcusable"). + +UNITED STATES OF AMERICA + +5. Taxes + +The following is added to the end of this Section 5 (Taxes): + +For Programs delivered electronically in the United States for which Licensee claims a state sales and use tax exemption, Licensee agrees not to receive any tangible personal property (e.g., media and publications) associated with the electronic program. + +Licensee agrees to be responsible for any sales and use tax liabilities that may arise as a result of Licensee's subsequent redistribution of Programs after delivery by IBM. + +13. General + +The following is added to Section 13 as Item 13.n: + +n. U.S. Government Users Restricted Rights - Use, duplication or disclosure is restricted by the GSA IT Schedule 70 Contract with the IBM Corporation. + +The following is added to Item 13.f: + +Each party waives any right to a jury trial in any proceeding arising out of or related to this Agreement. + +ASIA PACIFIC COUNTRY AMENDMENTS + +AUSTRALIA + +5. Taxes + +The following sentences replace the first two sentences of Section 5 (Taxes): + +If any government or authority imposes a duty, tax (other than income tax), levy, or fee, on this Agreement or on the Program itself, that is not otherwise provided for in the amount payable, Licensee agrees to pay it when IBM invoices Licensee. If the rate of GST changes, IBM may adjust the charge or other amount payable to take into account that change from the date the change becomes effective. + +8. No Warranties + +The following is added to the first paragraph of Section 8 (No Warranties): + +Although IBM specifies that there are no warranties, Licensee may have certain rights under the Competition and Consumer Act 2010 or other legislation and are only limited to the extent permitted by the applicable legislation. + +10.1 Items for Which IBM May Be Liable + +The following is added to Subsection 10.1 (Items for Which IBM Maybe Liable): + +Where IBM is in breach of a condition or warranty implied by the Competition and Consumer Act 2010, IBM's liability is limited to the repair or replacement of the goods, or the supply of equivalent goods. Where that condition or warranty relates to right to sell, quiet possession or clear title, or the goods are of a kind ordinarily obtained for personal, domestic or household use or consumption, then none of the limitations in this paragraph apply. + +HONG KONG SAR, MACAU SAR, AND TAIWAN + +As applies to licenses obtained in Taiwan and the special administrative regions, phrases throughout this Agreement containing the word "country" (for example, "the country in which the original Licensee was granted the license" and "the country in which Licensee obtained the Program license") are replaced with the following: + +(1) In Hong Kong SAR: "Hong Kong SAR" + +(2) In Macau SAR: "Macau SAR" except in the Governing Law clause (Section 14.1) + +(3) In Taiwan: "Taiwan." + +INDIA + +10.1 Items for Which IBM May Be Liable + +The following replaces the terms of Items 1 and 2 of the first paragraph: + +1) liability for bodily injury (including death) or damage to real property and tangible personal property will be limited to that caused by IBM's negligence; and 2) as to any other actual damage arising in any situation involving nonperformance by IBM pursuant to, or in any way related to the subject of this Agreement, IBM's liability will be limited to the charge paid by Licensee for the individual Program that is the subject of the claim. + +13. General + +The following replaces the terms of Item 13.g: + +g. If no suit or other legal action is brought, within three years after the cause of action arose, in respect of any claim that either party may have against the other, the rights of the concerned party in respect of such claim will be forfeited and the other party will stand released from its obligations in respect of such claim. + +INDONESIA + +3.3 Term and Termination + +The following is added to the last paragraph: + +Both parties waive the provision of article 1266 of the Indonesian Civil Code, to the extent the article provision requires such court decree for the termination of an agreement creating mutual obligations. + +JAPAN + +13. General + +The following is inserted as Item 13.n: + +n. Any doubts concerning this Agreement will be initially resolved between us in good faith and in accordance with the principle of mutual trust. + +MALAYSIA + +10.2 Items for Which IBM Is Not Liable + +The word "SPECIAL" in Item 10.2b is deleted. + +NEW ZEALAND + +8. No Warranties + +The following is added to the first paragraph of this Section 8 (No Warranties): + +Although IBM specifies that there are no warranties, Licensee may have certain rights under the Consumer Guarantees Act 1993 or other legislation which cannot be excluded or limited. The Consumer Guarantees Act 1993 will not apply in respect of any goods which IBM provides, if Licensee requires the goods for the purposes of a business as defined in that Act. + +10. Limitation of Liability + +The following is added: + +Where Programs are not obtained for the purposes of a business as defined in the Consumer Guarantees Act 1993, the limitations in this Section are subject to the limitations in that Act. + +PEOPLE'S REPUBLIC OF CHINA + +4. Charges + +The following is added: + +All banking charges incurred in the People's Republic of China will be borne by Licensee and those incurred outside the People's Republic of China will be borne by IBM. + +PHILIPPINES + +10.2 Items for Which IBM Is Not Liable + +The following replaces the terms of Item 10.2b: + +b. special (including nominal and exemplary damages), moral, incidental, or indirect damages or for any economic consequential damages; or + +SINGAPORE + +10.2 Items for Which IBM Is Not Liable + +The words "SPECIAL" and "ECONOMIC" are deleted from Item 10.2b. + +13. General + +The following replaces the terms of Item 13.i: + +i. Subject to the rights provided to IBM's suppliers and Program developers as provided in Section 10 above (Limitation of Liability), a person who is not a party to this Agreement will have no right under the Contracts (Right of Third Parties) Act to enforce any of its terms. + +TAIWAN + +10.1 Items for Which IBM May Be Liable + +The following sentences are deleted: + +This limit also applies to any of IBM's subcontractors and Program developers. It is the maximum for which IBM and its subcontractors and Program developers are collectively responsible. + +EUROPE, MIDDLE EAST, AFRICA (EMEA) COUNTRY AMENDMENTS + +EUROPEAN UNION MEMBER STATES + +8. No Warranties + +The following is added to Section 8 (No Warranties): + +In the European Union ("EU"), consumers have legal rights under applicable national legislation governing the sale of consumer goods. Such rights are not affected by the provisions set out in this Section 8 (No Warranties). + +EU MEMBER STATES AND THE COUNTRIES IDENTIFIED BELOW + +Iceland, Liechtenstein, Norway, Switzerland, Turkey, and any other European country that has enacted local data privacy or protection legislation similar to the EU model. + +13. General + +The following replaces Item 13.e: + +(1) Definitions - For the purposes of this Item 13.e, the following additional definitions apply: + +(a) Business Contact Information - business-related contact information disclosed by Licensee to IBM, including names, job titles, business addresses, telephone numbers and email addresses of Licensee's employees and contractors. For Austria, Italy and Switzerland, Business Contact Information also includes information about Licensee and its contractors as legal entities (for example, Licensee's revenue data and other transactional information) + +(b) Business Contact Personnel - Licensee employees and contractors to whom the Business Contact Information relates. + +(c) Data Protection Authority - the authority established by the Data Protection and Electronic Communications Legislation in the applicable country or, for non-EU countries, the authority responsible for supervising the protection of personal data in that country, or (for any of the foregoing) any duly appointed successor entity thereto. + +(d) Data Protection & Electronic Communications Legislation - (i) the applicable local legislation and regulations in force implementing the requirements of EU Directive 95/46/EC (on the protection of individuals with regard to the processing of personal data and on the free movement of such data) and of EU Directive 2002/58/EC (concerning the processing of personal data and the protection of privacy in the electronic communications sector); or (ii) for non-EU countries, the legislation and/or regulations passed in the applicable country relating to the protection of personal data and the regulation of electronic communications involving personal data, including (for any of the foregoing) any statutory replacement or modification thereof. + +(e) IBM Group - International Business Machines Corporation of Armonk, New York, USA, its subsidiaries, and their respective Business Partners and subcontractors. + +(2) Licensee authorizes IBM: + +(a) to process and use Business Contact Information within IBM Group in support of Licensee including the provision of support services, and for the purpose of furthering the business relationship between Licensee and IBM Group, including, without limitation, contacting Business Contact Personnel (by email or otherwise) and marketing IBM Group products and services (the "Specified Purpose"); and + +(b) to disclose Business Contact Information to other members of IBM Group in pursuit of the Specified Purpose only. + +(3) IBM agrees that all Business Contact Information will be processed in accordance with the Data Protection & Electronic Communications Legislation and will be used only for the Specified Purpose. + +(4) To the extent required by the Data Protection & Electronic Communications Legislation, Licensee represents that (a) it has obtained (or will obtain) any consents from (and has issued (or will issue) any notices to) the Business Contact Personnel as are necessary in order to enable IBM Group to process and use the Business Contact Information for the Specified Purpose. + +(5) Licensee authorizes IBM to transfer Business Contact Information outside the European Economic Area, provided that the transfer is made on contractual terms approved by the Data Protection Authority or the transfer is otherwise permitted under the Data Protection & Electronic Communications Legislation. + +AUSTRIA + +8. No Warranties + +In Austria (and Germany) the following replaces Section 8 (No Warranties) in its entirety, including its title, if Licensee paid a charge to obtain the Program. + +8. Warranties and Exclusions + +The warranty period is twelve months from the date of delivery. The limitation period for consumers in action for breach of warranty is the statutory period as a minimum. + +The warranty for an IBM Program covers the functionality of the Program for its normal use and the Program's conformity to its specifications. + +IBM warrants that when the Program is used in the specified operating environment it will conform to its specifications. IBM does not warrant uninterrupted or error-free operation of the Program or that IBM will correct all Program defects. Licensee is responsible for the results obtained from the use of the Program. + +The warranty applies only to the unmodified portion of the Program. + +If the Program does not function as warranted during the warranty period and the problem cannot be resolved with information available, Licensee may return the Program to the party from whom Licensee acquired it and receive a refund of the amount Licensee paid. If Licensee down loaded the Program, Licensee may contact the party from whom Licensee acquired it to obtain the refund. + +This is IBM's sole obligation to Licensee, except as otherwise required by applicable statutory law. + +10. Limitation of Liability + +The following is added: + +The following limitations and exclusions of IBM's liability do not apply for damages caused by gross negligence or willful misconduct. + +10.1 Items for Which IBM May Be Liable + +The following replaces the first sentence in the first paragraph: + +Circumstances may arise where, because of a default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. + +In the second sentence of the first paragraph, delete entirely the parenthetical phrase: + +"(including fundamental breach, negligence, misrepresentation, or other contract or tort claim)". + +10.2 Items for Which IBM Is Not Liable + +The following replaces Item 10.2b: + +b. indirect damages or consequential damages; or + +BELGIUM, FRANCE, ITALY, AND LUXEMBOURG + +10. Limitation of Liability + +The following replaces the terms of Section 10 (Limitation of Liability) in its entirety: + +Except as otherwise provided by mandatory law: + +10.1 Items for Which IBM May Be Liable + +IBM's entire liability for all claims in the aggregate for any damages and losses that may arise as a consequence of the fulfillment of its obligations under or in connection with this Agreement or due to any other cause related to this Agreement is limited to the compensation of only those damages and losses proved and actually arising as an immediate and direct consequence of the non-fulfillment of such obligations (if IBM is at fault) or of such cause, for a maximum amount equal to the charges (if the Program is subject to fixed term charges, up to twelve months' charges) Licensee paid for the Program that has caused the damages. + +The above limitation will not apply to damages for bodily injuries (including death) and damages to real property and tangible personal property for which IBM is legally liable. + +10.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM OR ANY OF ITS PROGRAM DEVELOPERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: 1) LOSS OF, OR DAMAGE TO, DATA; 2) INCIDENTAL, EXEMPLARY OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; AND / OR 3) LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS, EVEN IF THEY ARISE AS AN IMMEDIATE CONSEQUENCE OF THE EVENT THAT GENERATED THE DAMAGES. + +10.3 Suppliers and Program Developers + +The limitation and exclusion of liability herein agreed applies not only to the activities performed by IBM but also to the activities performed by its suppliers and Program developers, and represents the maximum amount for which IBM as well as its suppliers and Program developers are collectively responsible. + +GERMANY + +8. No Warranties + +This Section 8 (No Warranties) is amended as specified for AUSTRIA. + +10. Limitation of Liability + +The following replaces this Section 10 (Limitation of Liability) in its entirety: + +a. IBM will be liable without limit for 1) loss or damage caused by a breach of an express guarantee; 2) damages or losses resulting in bodily injury (including death); and 3) damages caused intentionally or by gross negligence. + +b. In the event of loss, damage and frustrated expenditures caused by slight negligence or in breach of essential contractual obligations, IBM will be liable, regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), per claim only up to the greater of 500,000 euro or the charges (if the Program is subject to fixed term charges, up to 12 months' charges) Licensee paid for the Program that caused the loss or damage. A number of defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one default. + +c. In the event of loss, damage and frustrated expenditures caused by slight negligence, IBM will not be liable for indirect or consequential damages, even if IBM was informed about the possibility of such loss or damage. + +d. In case of delay on IBM's part: 1) IBM will pay to Licensee an amount not exceeding the loss or damage caused by IBM's delay and 2) IBM will be liable only in respect of the resulting damages that Licensee suffers, subject to the provisions of Items a and b above. + +13. General + +The following replaces the provisions of 13.g: + +g. Any claims resulting from this Agreement are subject to a limitation period of three years, except as stated in Section 8 (No Warranties) of this Agreement. + +The following replaces the provisions of 13.i: + +i. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except (to the extent permitted in Section 10 (Limitation of Liability)) for: i) bodily injury (including death); or ii) damage to real or tangible personal property for which (in either case) IBM is legally liable to that third party. + +IRELAND + +8. No Warranties + +The following sentence is added to the second paragraph of this Section 8 (No Warranties): + +Except as expressly provided in these terms and conditions, or Section 12 of the Sale of Goods Act 1893 as amended by the Sale of Goods and Supply of Services Act, 1980 (the "1980 Act"), all conditions or warranties (express or implied, statutory or otherwise) are hereby excluded including, without limitation, any warranties implied by the Sale of Goods Act 1893 as amended by the 1980 Act (including, for the avoidance of doubt, Section 39 of the 1980 Act). + +IRELAND AND UNITED KINGDOM + +2. Agreement Structure + +The following sentence is added: + +Nothing in this paragraph shall have the effect of excluding or limiting liability for fraud. + +10.1 Items for Which IBM May Be Liable + +The following replaces the first paragraph of the Subsection: + +For the purposes of this section, a "Default" means any act, statement, omission or negligence on the part of IBM in connection with, or in relation to, the subject matter of an Agreement in respect of which IBM is legally liable to Licensee, whether in contract or in tort. A number of Defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one Default. + +Circumstances may arise where, because of a Default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM and except as expressly required by law without the possibility of contractual waiver, IBM's entire liability for any one Default will not exceed the amount of any direct damages, to the extent actually suffered by Licensee as an immediate and direct consequence of the Default, up to the greater of (1) 500,000 euro (or the equivalent in local currency) or (2) 125% of the charges (if the Program is subject to fixed term charges, up to 12 months' charges) for the Program that is the subject of the claim. Notwithstanding the foregoing, the amount of any damages for bodily injury (including death) and damage to real property and tangible personal property for which IBM is legally liable is not subject to such limitation. + +10.2 Items for Which IBM Is Not Liable + +The following replaces Items 10.2b and 10.2c: + +b. special, incidental, exemplary, or indirect damages or consequential damages; or + +c. wasted management time or lost profits, business, revenue, goodwill, or anticipated savings. + +Z125-5589-05 (07/2011) + + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_cs b/charts/mq-devserver/LICENSE_locale/LICENSE_cs new file mode 100644 index 0000000..fd56254 --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_cs @@ -0,0 +1,266 @@ +LICENÈNÍ INFORMACE + +Ní¾e uvedené Programy jsou licencovány na základì následujících podmínek uvedených v dokumentu Licenèní informace, které doplòují licenèní podmínky pro Program, s nimi¾ døíve Zákazník a IBM vyjádøili souhlas Pokud Zákazník døíve nevyjádøil souhlas s úèinnými licenèními podmínkami pro Program, uplatní se licence Mezinárodní licenèní smlouva pro programy bez záruky (Z125-5589-05). + +Název Programu (Èíslo Programu): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Na pou¾ívání Programu Dr¾itelem licence se vztahují následující standardní podmínky. + +Programy v balíku + +Program je licencován jako multiproduktový balík sestávající z ní¾e uvedených Programù v balíku. Dr¾itel licence je oprávnìn tyto Programy v balíku nainstalovat a pou¾ívat v souladu s omezeními uvedenými v dokumentech o oprávnìní (Proofs of Entitlement) pro Program a v tomto dokumentu Licenèní informace. Dr¾itel licence není oprávnìn Programy v balíku pøevádìt nebo dále prodávat oddìlenì od multiproduktového balíku. Program v balíku mohou doprovázet licenèní podmínky, a tyto pøípadné licenèní podmínky se pak vztahují na u¾ívání Programu v balíku Dr¾itelem licence. V pøípadì rozporu mají podmínky v tomto dokumentu Licenèní informace pøednost pøed podmínkami u¾ívání Programu v balíku. Poté, co právo Dr¾itele licence pou¾ívat Program skonèí nebo je ukonèeno, musí Dr¾itel licence pøestat pou¾ívat ve¹keré kopie Programù v balíku, znièit je nebo je okam¾itì vrátit stranì, od které Dr¾itel licence Program získal. Pokud Dr¾itel licence Programy v balíku stáhnul, mìl by Dr¾itel licence kontaktovat stranu, od které Dr¾itel licence Program získal. Pokud chce Dr¾itel licence Programy v balíku licencovat pro jakékoli pou¾ití nad rámec vý¹e uvedených omezení, kontaktujte za úèelem získání pøíslu¹né licence prodejního zástupce IBM nebo stranu, od které Dr¾itel licence Program získal. + +Spoleènì s Programem jsou licencovány následující Programy v balíku: +IBM MQ V9.0.3 + +Omezení u¾ívání - pouze pro vývojáøe + +Je-li v názvu Programu uveden výraz "For Developers", mù¾e být Program implementován pouze v rámci interního vývoje a testování jednotek Dr¾itele licence na stroji vývojáøe. Stroj vývojáøe je prostøedí fyzického nebo virtuálního poèítaèe, na nìm¾ je provozován primární operaèní systém a Program, pøièem¾ jak tento operaèní systém, tak i Program jsou dostupné a u¾ívané nejvý¹e jedním urèeným vývojáøem. Dr¾itel licence není oprávnìn u¾ívat Program ke zpracování pracovních zátì¾í, simulování produktivních pracovních zátì¾í nebo k testování roz¹iøitelnosti jakéhokoliv kódu, aplikace nebo systému. Dr¾itel licence není oprávnìn u¾ívat ¾ádnou èást Programu k jakýmkoliv jiným úèelùm, leda¾e by si zakoupil pøíslu¹ná oprávnìní k u¾ívání v produktivním prostøedí. + +Komponenty nepou¾ívané k vytvoøení po¾adovaných oprávnìní + +Pøi urèování poètu oprávnìní, která Dr¾itel licence potøebuje pro instalaci nebo u¾ívání Programu, jsou rozhodující instalace nebo u¾ívání pouze následujících komponent Programu. Jinými slovy, Dr¾itel licence je oprávnìn nainstalovat a pou¾ívat na základì licenèních podmínek následující komponenty Programu, av¹ak tyto komponenty nejsou rozhodující pro stanovení poètu oprávnìní po¾adovaných pro Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponenty ve vzorovém kódu a Vzorové materiály + +Program mù¾e obsahovat nìkteré komponenty ve formì zdrojového kódu ("Komponenty ve zdrojovém kódu") a jiné materiály oznaèované jako Vzorové materiály. Dr¾itel licence smí kopírovat a mìnit Komponenty ve zdrojovém kódu a Vzorové materiály pouze pro interní u¾ívání a pouze pod podmínkou, ¾e toto u¾ívání bude v souladu s omezeními licenèních oprávnìní stanovenými touto Smlouvou. Dr¾itel licence v¹ak nesmí mìnit ani odstraòovat ¾ádné informace nebo výhrady týkající se autorských práv obsa¾ené v Komponentách ve zdrojovém kódu nebo ve Vzorových materiálech. IBM poskytuje tyto Komponenty ve zdrojovém kódu a Vzorové materiály bez závazku podpory a "JAK JSOU", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, VYJÁDØENÉ VÝSLOVNÌ ÈI VYPLÝVAJÍCÍ Z OKOLNOSTÍ, VÈETNÌ ZÁRUKY VLASTNICTVÍ, NEPORU©ENÍ PRÁV TØETÍCH STRAN A ZÁRUK A PODMÍNEK PRODEJNOSTI A VHODNOSTI PRO DANÝ ÚÈEL. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Mezinárodní licenèní smlouva pro programy bez záruky + +Èást 1 - Obecná ustanovení + +STA®ENÍM, INSTALACÍ, ZKOPÍROVÁNÍM, PØÍSTUPEM K PROGRAMU NEBO KLEPNUTÍM NA TLAÈÍTKO "SOUHLASÍM" NEBO JINÝM POU®ITÍM PROGRAMU VYJADØUJE DR®ITEL LICENCE SVÙJ SOUHLAS S TOUTO SMLOUVOU. JESTLI®E TYTO PODMÍNKY AKCEPTUJETE JMÉNEM DR®ITELE LICENCE, PROHLA©UJETE A ZARUÈUJETE, ®E JSTE ZMOCNÌNI VÁZAT DR®ITELE LICENCE TÌMITO PODMÍNKAMI. JESTLI®E S TÌMITO PODMÍNKAMI NESOUHLASÍTE: + +* NESTAHUJTE, NEINSTALUJTE, NEKOPÍRUJTE PROGRAM, NEPØISTUPUJTE K PROGRAMU, NEPOU®ÍVEJTE TLAÈÍTKO "SOUHLASÍM", ANI PROGRAM NEPOU®ÍVEJTE; A + +* NEPRODLENÌ VRA«TE NEPOU®ITÉ NOSIÈE A DOKUMENTACI STRANÌ, OD KTERÉ JSTE JE ZÍSKALI, A BUDE VÁM VRÁCENA ÈÁSTKA, KTEROU JSTE ZA NÌ UHRADILI (JE-LI TO RELEVANTNÍ). POKUD BYL PROGRAM STA®EN, VE©KERÉ JEHO KOPIE ZNIÈTE. + +1. Definice + +"Oprávnìné u¾ívání" - stanovená úroveò oprávnìní Dr¾itele licence provádìt nebo spou¹tìt Program. Tuto úroveò lze mìøit na základì poètu u¾ivatelù, miliónù servisních jednotek ("jednotky MSU"), jednotek Processor Value Units ("jednotky PVU") nebo na základì jiné úrovnì u¾ívání, kterou stanoví IBM. + +"IBM" - spoleènost International Business Machines Corporation nebo nìkterá z jejích dceøiných spoleèností. + +"Licenèní informace" ("LI") - dokument uvádìjící informace a jakékoli dodateèné podmínky specifické pro Program. Dokument Licenèní informace k programu je k dispozici na adrese www.ibm.com/software/sla. Licenèní informace lze rovnì¾ nalézt v adresáøi s Programem - prostøednictvím systémového pøíkazu - nebo ve formì pøíruèky, kterou obdr¾íte s Programem. + +"Program" - ní¾e uvedené komponenty, vèetnì originálu a v¹ech úplných nebo dílèích kopií: 1) strojovì èitelné instrukce a data, 2) komponenty, soubory a moduly, 3) audiovizuální obsah (jako jsou obrazy, text, nahrávky nebo obrázky) a 4) související licenèní materiály (jako jsou licenèní klíèe a dokumentace). + +2. Struktura smlouvy + +Tato smlouva zahrnuje Èást 1 - Obecná ustanovení, Èást 2 - Podmínky specifické pro zemi (jsou-li nìjaká) a dokument Licenèní informace a pøedstavuje úplnou dohodu mezi Dr¾itelem licence a IBM ve vztahu k u¾ívání Programu. Nahrazuje ve¹kerá pøedchozí ústní nebo písemná ujednání mezi Dr¾itelem licence a IBM ohlednì jeho u¾ívání Programu. Podmínky Èásti 2 mohou nahrazovat nebo upravovat podmínky Èásti 1. V míøe, v ní¾ se vyskytne rozpor podmínek, mají podmínky dokumentu Licenèní informace pøednost pøed podmínkami obou Èástí. + +3. Udìlení licence + +Program je vlastnictvím IBM nebo dodavatele IBM, je chránìn autorskými právy a je k nìmu poskytováno právo u¾ívání, není prodáván. + +IBM udìluje Dr¾iteli licence nevýhradní licenci na 1) u¾ívání Programu a¾ do úrovnì Oprávnìného u¾ívání uvedené na faktuøe, 2) vytvoøení a instalaci kopií na podporu takového Oprávnìného u¾ívání, a 3) vytvoøení zálo¾ní kopie, to v¹e za pøedpokladu, ¾e: + +a. Dr¾itel licence získal Program zákonným zpùsobem a dodr¾uje podmínky této Smlouvy; + +b. zálo¾ní kopie není spou¹tìna, leda¾e nelze spustit zálohovaný Program; + +c. Dr¾itel licence uvádí v¹echna upozornìní o autorských právech a dal¹í výhrady vlastnických práv na ka¾dé kopii nebo dílèí kopii Programu; + +d. Dr¾itel licence zajistí, aby ka¾dá osoba (s lokálním nebo vzdáleným pøístupem) pou¾ívající Program 1) tak èinila pouze jménem Dr¾itele licence, a 2) tak èinila v souladu s podmínkami této Smlouvy; + +e. Dr¾itel licence nesmí 1) pou¾ívat, kopírovat, upravovat nebo distribuovat Program jinak, ne¾ je výslovnì dovoleno touto Smlouvou; 2) zpìtnì sestavovat, zpìtnì kompilovat èi jakkoliv pøekládat Program, není-li to výslovnì dovoleno zákonem bez mo¾nosti toto povolení smluvnì vylouèit; 3) u¾ívat kterékoli komponenty, soubory, moduly, audiovizuální obsah nebo související licenèní materiály nezávisle na Programu; nebo 4) Program sublicencovat, pronajímat èi poskytovat formou leasingu; a + +f. jestli¾e Dr¾itel licence získá tento Program jako Podpùrný program, bude jej pou¾ívat pouze na podporu Základního programu a v souladu s ve¹kerými omezeními uvedenými v licenci na Základní program, nebo - jestli¾e Dr¾itel licence získá tento program jako Základní program - bude pou¾ívat v¹echny Podpùrné programy pouze na podporu tohoto Programu a v souladu s ve¹kerými omezeními stanovenými v této Smlouvì. Pro úèely tohoto bodu "f" znamená "Podpùrný program" program, který je souèástí jiného programu IBM ("Základní program") a je v Licenèních informacích k Základnímu programu jako Podpùrný program uveden. (Chce-li Dr¾itel licence získat samostatnou licenci na neomezené u¾ívání Podpùrného programu, musí se obrátit na subjekt, od nìho¾ Podpùrný program zakoupil.) + +Tato licence se vztahuje na ka¾dou kopii Programu, kterou Dr¾itel licence vytvoøí. + +3.1 Pøechody typu Trade-up, aktualizace a opravy + +3.1.1 Pøechody typu Trade-up + +V pøípadì nahrazení Programu programem typu Trade-up platnost licence nahrazeného Programu okam¾itì konèí. + +3.1.2 Aktualizace, opravy a záplaty + +Pokud Dr¾itel licence obdr¾í aktualizaci nebo opravu k Programu, akceptuje ve¹keré dodateèné nebo odli¹né podmínky, které jsou uvedeny v Licenèních informacích pro tuto aktualizaci nebo opravu. Nejsou-li k aktualizaci èi opravì dodateèné nebo odli¹né podmínky pøipojeny, pak se taková aktualizace èi oprava øídí výluènì podmínkami této Smlouvy. Dr¾itel licence se zavazuje, ¾e v pøípadì nahrazení Programu aktualizací pøestane pùvodní Program okam¾itì pou¾ívat. + +3.2 Licence na dobu urèitou + +Licencuje-li IBM Program na dobu urèitou, pak licenèní oprávnìní Dr¾itele licence konèí ke konci takové doby urèité, leda¾e se Dr¾itel licence a IBM dohodli na prodlou¾ení licence. + +3.3 Trvání a ukonèení Smlouvy + +Tato Smlouva je úèinná a¾ do jejího ukonèení. + +IBM je oprávnìna ukonèit licenci Dr¾itele licence, jestli¾e tento nedodr¾uje podmínky této Smlouvy. + +Ukonèí-li kterákoli ze stran licenci z jakéhokoli dùvodu, Dr¾itel licence je povinen okam¾itì pøestat pou¾ívat a znièit v¹echny kopie Programu, které má ve svém dr¾ení. Podmínky této Smlouvy, je¾ svou povahou pøesahují dobu její platnosti, zùstávají plnì v platnosti a jsou úèinné a¾ do okam¾iku jejich splnìní a platí i pro pøípadné právní nástupce a postupníky smluvních stran. + +4. Cena + +Poplatky (jsou-li nìjaké) jsou zalo¾eny na úrovni Oprávnìného u¾ívání, která je uvedena na faktuøe. IBM nevrací ani jinak nerefunduje ji¾ splatné nebo zaplacené èástky, s výjimkou pøípadù, které jsou specifikovány jinde v této smlouvì. + +Pøeje-li si Dr¾itel licence úroveò Oprávnìného u¾ívání zvý¹it, je povinen o této skuteènosti pøedem informovat IBM nebo oprávnìného prodejce IBM a uhradit ve¹keré pøíslu¹né poplatky. + +5. Danì + +Bude-li na Program nìkterým úøadem uvaleno clo, daò èi poplatek, vyjma tìch, které jsou zalo¾eny na èistém pøíjmu IBM, pak se Dr¾itel licence zavazuje tuto èástku uhradit ve vý¹i uvedené na faktuøe, pokud nepøedlo¾í potvrzení prokazující jeho osvobození od takové povinnosti. Od data obdr¾ení Programu je Dr¾itel licence odpovìdný za úhradu ve¹kerých pøípadných majetkových daní. Jestli¾e nìkterý orgán k tomu oprávnìný uvalí clo, daò èi poplatek na import nebo export, pøenos, pøístup nebo u¾ívání Programu mimo zemi, v ní¾ byla pùvodnímu Dr¾iteli licence udìlena licence, pak je Dr¾itel licence povinen uhradit jakoukoli takto uvalenou èástku. + +6. Záruka vrácení penìz + +Není-li Dr¾itel licence z jakéhokoli dùvodu spokojen s Programem a je pùvodním Dr¾itelem licence, je oprávnìn ukonèit licenci a má nárok na refundaci èástky, kterou za Program zaplatil (pokud nìjakou èástku zaplatil), av¹ak za pøedpokladu, ¾e Dr¾itel licence vrátí Program stranì, od které jej získal, bìhem 30 dní od data faktury. Jedná-li se o licenci na dobu urèitou, která podléhá prodlou¾ení, má Dr¾itel licence nárok na refundaci pouze v pøípadì, ¾e Program vrátí bìhem prvních 30 dní pùvodního období. Pokud Dr¾itel licence Program stáhnul, mìl by po¾ádat subjekt, od kterého jej získal, o pokyny, jak dosáhnout vrácení penìz. + +7. Pøevod programu + +Dr¾itel licence je oprávnìn pøevést Program a ve¹kerá licenèní práva a povinnosti Dr¾itele licence na jinou smluvní stranu za pøedpokladu, ¾e tato strana akceptuje podmínky této Smlouvy. V pøípadì ukonèení licence kteroukoli smluvní stranou bez ohledu na dùvod nesmí Dr¾itel licence Program na jinou smluvní stranu pøevést. Dr¾itel licence není oprávnìn pøevádìt èást 1) Programu; nebo 2) Oprávnìné u¾ívání programu. V pøípadì pøevodu Programu musí Dr¾itel licence pøevést rovnì¾ ti¹tìnou verzi této Smlouvy, vèetnì dokumentu Licenèní informace. Licenèní oprávnìní Dr¾itele licence okam¾itì po pøevodu konèí. + +8. Vylouèení záruky + +V SOULADU S VE©KERÝMI ZÁKONNÝMI ZÁRUKAMI, KTERÉ NELZE VYLOUÈIT, NEPOSKYTUJE IBM ®ÁDNÉ ZÁRUKY ÈI PODMÍNKY, VYJÁDØENÉ VÝSLOVNÌ NEBO VYPLÝVAJÍCÍ Z OKOLNOSTÍ, POKUD JDE O PROGRAM NEBO PODPORU (JE-LI NÌJAKÁ POSKYTOVÁNA), VÈETNÌ - A TO ZEJMÉNA - VE©KERÝCH ZÁRUK ÈI PODMÍNEK PRODEJNOSTI, USPOKOJIVÉ KVALITY, VHODNOSTI PRO URÈITÝ ÚÈEL A VLASTNICKÉHO NÁROKU, A JAKÉKOLI ZÁRUKY ÈI PODMÍNKY NEPORU©ENÍ PRÁV TØETÍCH STRAN. + +NÌKTERÉ STÁTY NEBO JURISDIKCE NEPØIPOU©TÌJÍ VYLOUÈENÍ ZÁRUK VYJÁDØENÝCH VÝSLOVNÌ NEBO VYPLÝVAJÍCÍCH Z OKOLNOSTÍ, A PROTO SE VÝ©E UVEDENÉ ZÁRUKY NEMUSÍ NA DR®ITELE LICENCE VZTAHOVAT. V TAKOVÉM PØÍPADÌ JSOU TAKOVÉ ZÁRUKY ÈASOVÌ OMEZENY POUZE NA MINIMÁLNÍ DOBU PO®ADOVANOU ZÁKONEM. PO UKONÈENÍ TÉTO DOBY IBM NEPOSKYTUJE ®ÁDNÉ DAL©Í ZÁRUKY. NÌKTERÉ STÁTY NEBO JURISDIKCE NEPØIPOU©TÌJÍ OMEZENÍ DOBY TRVÁNÍ IMPLICITNÍ ZÁRUKY, A PROTO SE VÝ©E UVEDENÉ OMEZENÍ NA DR®ITELE LICENCE NEMUSÍ VZTAHOVAT. DR®ITEL LICENCE MÙ®E MÍT I DAL©Í PRÁVA, KTERÁ SE LI©Í STÁT OD STÁTU NEBO JURISDIKCE OD JURISDIKCE. + +VYLOUÈENÍ ZÁRUKY UVEDENÁ V TOMTO ODDÍLU 8 SE VZTAHUJÍ ROVNÌ® NA VE©KERÉ VÝVOJÁØE A DODAVATELE IBM. + +VÝROBCI, DODAVATELÉ NEBO DISTRIBUTOØI PROGRAMÙ OD JINÝCH DODAVATELÙ MOHOU POSKYTOVAT SVÉ VLASTNÍ ZÁRUKY. + +NESTANOVÍ-LI IBM VÝSLOVNÌ JINAK, PAK IBM NEPOSKYTUJE PODPORU ®ÁDNÉHO DRUHU. V TAKOVÉM PØÍPADÌ SE NA JAKOUKOLI PODPORU POSKYTOVANOU SPOLEÈNOSTÍ IBM VZTAHUJÍ VYLOUÈENÍ ZÁRUKY UVEDENÁ V TOMTO ODDÍLU 8. + +9. Data a databáze Dr¾itele licence + +IBM mù¾e s cílem pomoci Dr¾iteli licence s urèením problému s Programem po¾adovat, aby Dr¾itel licence 1) umo¾nil IBM vzdálený pøístup k systému Dr¾itele licence, nebo 2) aby zaslal IBM pøíslu¹né údaje nebo systémová data. IBM v¹ak není povinna poskytnout takovou asistenci, pokud IBM a Dr¾itel licence neuzavøeli samostatnou písemnou dohodu, na jejím¾ základì se IBM zavazuje, ¾e bude Dr¾iteli licence poskytovat tento typ podpory, který pøesahuje povinnosti IBM vyplývající z této Smlouvy. IBM za v¹ech okolností pou¾ívá informace o chybách a problémech ke zdokonalování jejích produktù a slu¾eb a poskytuje klientùm asistenci prostøednictvím souvisejících nabídek podpory. K tomuto úèelu mù¾e IBM vyu¾ít slu¾eb subjektù a dodavatelù IBM (vèetnì subjektù a dodavatelù z jedné nebo více jiných zemí, ne¾ je zemì, v ní¾ má sídlo Dr¾itel licence) a Dr¾itel licence opravòuje IBM k takovému vyu¾ití slu¾eb subjektù a dodavatelù IBM. + +Dr¾itel licence zùstává odpovìdný za 1) ve¹kerá data a obsah jakékoli databáze, kterou pro IBM zpøístupní, 2) výbìr a implementaci postupù a kontrol týkajících se pøístupu, zabezpeèení, ¹ifrování, u¾ívání a pøenosu dat (vèetnì ve¹kerých osobních údajù), a 3) zálohování a obnovu jakékoli databáze a ve¹kerých ulo¾ených dat. Dr¾itel licence nesmí odeslat IBM ¾ádné osobní údaje nebo poskytnout IBM pøístup k ¾ádným osobním údajùm, a» u¾ ve formì dat nebo v nìjaké jiné formì, a nese odpovìdnost za ve¹keré pøimìøené náklady nebo jiné výdaje, které mohou IBM vzniknout v souvislosti s neoprávnìným poskytnutím takových informací IBM nebo v souvislosti se ztrátou èi zpøístupnìním informací ze strany IBM, vèetnì tìch zalo¾ených na nárocích tøetích stran. + +10. Omezení odpovìdnosti + +Omezení odpovìdnosti a vylouèení záruky v tomto oddíle 10 (Omezení odpovìdnosti) se aplikuje v plném rozsahu, pokud není zakázáno ze zákona, bez mo¾nosti smluvního zøeknutí se. + +10.1 Polo¾ky, za které IBM nese odpovìdnost + +Mohou nastat okolnosti, kdy má Dr¾itel licence z dùvodu neplnìní závazku na stranì IBM nebo jiné odpovìdnosti nárok na náhradu ¹kody od IBM. Bez ohledu na pøíèinu vzniku nároku Dr¾itele licence na náhradu ¹kody od IBM (vèetnì podstatného poru¹ení, nedbalosti, pøivedení v omyl nebo jiného poru¹ení závazkového èi mimozávazkového vztahu), odpovídá IBM pouze za nároky vzniklé na základì ka¾dého Programu nebo ve spojení s ním nebo za nároky jinak vzniklé na základì této Smlouvy, a tato odpovìdnost nesmí pøesáhnout èástku jakýchkoli 1) ¹kod na zdraví (vèetnì smrti) a ¹kod na nemovitém a osobním hmotném majetku, a 2) jiných skuteèných pøímých ¹kod, a¾ do vý¹e poplatkù, které Dr¾itel licence zaplatil za Program, který je pøedmìtem nároku (pokud je Program licencován na dobu urèitou, pak do vý¹e dvanácti mìsíèních poplatkù). + +Toto omezení se vztahuje rovnì¾ i na v¹echny vývojáøe a dodavatele Programù IBM. Jedná se o maximum, za které IBM a její vývojáøi a dodavatelé Programù spoleènì odpovídají. + +10.2 Polo¾ky, za které IBM nenese odpovìdnost + +VYJMA PØÍPADÙ, KDY JE TO VÝSLOVNÌ PO®ADOVÁNO PRÁVNÍMI PØEDPISY BEZ MO®NOSTI VZDÁNÍ SE PRÁVA SMLUVNÌ, NEBUDOU IBM, JEJÍ SUBDODAVATELÉ ANI VÝVOJÁØI PROGRAMÙ ZA ®ÁDNÝCH OKOLNOSTÍ ODPOVÌDNI ZA NÁSLEDUJÍCÍ, A TO V PØÍPADÌ, ®E BY IBM BYLA NA TAKOVOU MO®NOST UPOZORNÌNA: + +a. ZA ZTRÁTU DAT NEBO ©KODU NA DATECH; + +b. ZA ZVLÁ©TNÍ, NAHODILÉ NEBO NEPØÍMÉ ©KODY ÈI ZA NÁSLEDNÉ HOSPODÁØSKÉ ©KODY; NEBO + +c. ZA U©LÝ ZISK, ZTRÁTU OBCHODNÍCH PØÍLE®ITOSTÍ, U©LÉ PØÍJMY, ÚJMU ZPÙSOBENOU PO©KOZENÍM DOBRÉHO JMÉNA NEBO ZA NEDOSA®ENÉ PØEDPOKLÁDANÉ ÚSPORY. + +11. Kontrola dodr¾ování podmínek + +Pro úèely tohoto oddílu 11 (Kontrola dodr¾ování podmínek), znamenají "Podmínky ILAN" 1) tuto Smlouvu a pøíslu¹né dodatky a transakèní dokumenty poskytnuté IBM, a 2) softwarové postupy IBM, které jsou k dispozici na webových stránkách IBM Software Policy (www.ibm.com/softwarepolicies) vèetnì - a to zejména - postupù týkajících se zálohování, cen pro neúplný server a migrace. + +Práva a povinnosti uvedená dále v tomto oddílu 11 zùstávají v platnosti po dobu trvání licence a dva roky poté. + +11.1 Proces ovìøování + +Dr¾itel licence souhlasí, ¾e vytvoøí, bude uchovávat a poskytne IBM a jejím auditorùm pøesné písemné záznamy, výstupy systémových nástrojù a dal¹í systémové informace, které budou dostateèné k ovìøení, ¾e Dr¾itel licence u¾ívá v¹echny Programy v souladu s podmínkami smlouvy ILAN, vèetnì v¹ech pøíslu¹ných podmínek IBM týkajících se licencování a cen. Dr¾itel licence nese odpovìdnost za 1) zaji¹tìní, ¾e nepøekroèí svou úroveò Oprávnìného u¾ívání, a 2) bude jednat v souladu s podmínkami smlouvy ILAN. + +IBM je na základì oznámení zaslaného v pøimìøené dlouhé lhùtì pøedem oprávnìna ovìøit si, zda Dr¾itel licence dodr¾uje podmínky smlouvy ILAN na v¹ech pracovi¹tích a pro v¹echna prostøedí, v nich¾ pou¾ívá Programy (k jakémukoli úèelu) v souladu s podmínkami smlouvy ILAN. Takové ovìøení bude provedeno zpùsobem, jen¾ bude minimalizovat ru¹ení obchodní èinnosti Dr¾itele licence a smí být provedeno v prostorách Dr¾itele licence bìhem øádné pracovní doby. IBM je oprávnìna vyu¾ít k takové kontrole slu¾eb nezávislého auditora, a to za pøedpokladu, ¾e IBM s tímto auditorem uzavøe písemnou smlouvu o ochranì dùvìrných informací. + +11.2 Rozhodnutí + +IBM bude Dr¾itele písemnì informovat, jestli¾e bude v rámci kontroly dodr¾ování podmínek zji¹tìno, ¾e Dr¾itel licence u¾ívá Program v rozsahu pøesahujícím úroveò jeho Oprávnìného u¾ívání nebo jiným zpùsobem nedodr¾uje podmínky smlouvy ILAN. Dr¾itel licence se zavazuje, ¾e neprodlenì uhradí pøímo IBM poplatky, které IBM uvede na faktuøe za 1) jakékoli takové nadmìrné u¾ívání, 2) podporu pro takové nadmìrné u¾ívání za dobu trvání takového nadmìrného u¾ívání nebo za dva roky (podle toho, které období je krat¹í), a 3) jakékoli dodateèné poplatky nebo jiné èástky, které budou stanoveny na základì výsledkù takové kontroly. + +12. Poznámky tøetích stran + +Program mù¾e zahrnovat kód tøetích stran, ke kterému Dr¾iteli licence poskytuje licenci na základì této Smlouvy IBM, nikoli tøetí strana. Jsou-li uvedeny jakékoli poznámky vztahující se ke kódu tøetích stran ("Poznámky tøetích stran"), jsou uvedeny pouze pro informaci Dr¾itele licence. Tyto poznámky mohou být uvedeny v souboru(ech) NOTICES k Programu. Informace o zpùsobu získání zdrojového kódu pro urèitý kód tøetích stran najdete v Poznámkách tøetích stran. Jestli¾e IBM v Poznámkách tøetích stran oznaèí kód tøetích stran za "Kód tøetích stran s mo¾ností modifikace", pak IBM opravòuje Dr¾itele licence k 1) modifikaci Kódu tøetích stran s mo¾ností modifikace a 2) ke zpìtné kompilaci Programových modulù, které mají pøímé rozhraní ke Kódu tøetích stran s mo¾ností modifikace, za pøedpokladu, ¾e tyto èinnosti budou slou¾it výhradnì k ladìní modifikací provádìných Dr¾itelem licence u takového Kódu tøetích stran. Závazek IBM týkající se servisu a podpory (je-li nìjaký) se vztahuje pouze na nemodifikovaný Program. + +13. V¹eobecná ustanovení + +a. Touto Smlouvou nejsou dotèena zákonná práva spotøebitelù, jich¾ se není mo¾no smluvnì zøíci nebo je¾ nemohou být smluvnì omezena. + +b. Není-li mezi Dr¾itelem licence a IBM písemnì dohodnuto jinak, splní IBM u Programù, které dodává Dr¾iteli licence v hmotné podobì, svùj závazek odeslat a dodat pøedmìtné Programy jejich pøedáním pøepravci urèenému IBM. + +c. V pøípadì, ¾e by nìkteré ustanovení této Smlouvy bylo pova¾ováno za neplatné nebo nevymahatelné, zùstanou zbývající ustanovení této Smlouvy v plné platnosti a úèinnosti. + +d. Ka¾dá ze smluvních stran bude postupovat v souladu s pøíslu¹nými vývozními a dovozními právními pøedpisy, vèetnì právních pøedpisù Spojených státù amerických, které zakazují èi omezují vývoz pro úèely urèitého pou¾ití èi pro urèité koncové u¾ivatele. Dr¾itel licence se zavazuje, ¾e bude postupovat v souladu s pøíslu¹nými vývozními a dovozními právními pøedpisy, vèetnì právních pøedpisù Spojených státù amerických, které zakazují èi omezují vývoz pro úèely urèitého pou¾ití èi pro urèité koncové u¾ivatele. + +e. Dr¾itel licence souhlasí s tím, ¾e umo¾ní spoleènosti International Business Machines Corporation a jejím dceøiným spoleènostem (vèetnì jejich právních nástupcù, postupníkù, subdodavatelù a obchodních partnerù) ukládat a u¾ívat jeho kontaktní informace v¹ude, kde tito uskuteèòují svou obchodní èinnost související s produkty a slu¾bami IBM, nebo v rámci podpory obchodního vztahu mezi IBM a dr¾itelem Licence. + +f. Ka¾dá ze smluvních stran poskytne druhé stranì pøimìøenì mo¾nost nápravy pøedtím, ne¾ vùèi druhé stranì vznese nároky související s neplnìním jejích povinností z této Smlouvy. Smluvní strany se pokusí v dobré vùli vyøe¹it jakékoli spory, neshody èi nároky vztahující se k této Smlouvì. + +g. Nevy¾adují-li pøíslu¹né právní pøedpisy jinak, bez mo¾nosti smluvního zøeknutí se nebo omezení: 1) ¾ádná ze smluvních stran nezahájí právní úkon (bez ohledu na jeho formu) ohlednì jakéhokoli nároku vzniklého na základì této Smlouvy nebo ve spojení s touto Smlouvou pozdìji ne¾ dva roky od data vzniku pøíèiny takového právního úkonu; a 2) ve¹keré takové nároky a v¹echna pøíslu¹ná práva vztahující se k takovým nárokùm se po vypr¹ení takového èasového limitu pova¾ují za promlèené. + +h. ®ádná ze smluvních stran nenese odpovìdnost za nesplnìní jakýchkoli závazkù, pokud k takovému neplnìní do¹lo z dùvodù vzniklých nezávisle na její vùli. + +i. Tato Smlouva nezakládá pro ¾ádnou tøetí stranu ¾ádné právo nebo dùvod k ¾alobì a IBM nenese odpovìdnost za ¾ádné nároky tøetích stran vznesené vùèi Dr¾iteli licence, s výjimkou, jak uvádí odstavec 10.1 (Polo¾ky, za které IBM nenese odpovìdnost) vý¹e, ¹kody na zdraví (vèetnì smrti) nebo ¹kody na nemovitém nebo hmotném osobním majetku, za které je IBM vùèi takové tøetí stranì právnì odpovìdná. + +j. Smluvní strany se dohodly, ¾e se po uzavøení toto Smlouvy nebudou odvolávat na ¾ádné prohlá¹ení, které není v této Smlouvì uvedeno, vèetnì jakéhokoli prohlá¹ení, které se týká: 1) výkonu èi fungování Programu; 2) zku¹eností nebo doporuèení jiných stran; nebo 3) jakýchkoli výsledkù èi úspor, kterých mù¾e Dr¾itel licence dosáhnout. + +k. IBM uzavøela smlouvy s urèitými organizacemi (dále jen "Obchodní partneøi IBM") za úèelem nabízení, zprostøedkování prodeje a podpory vybraných Programù. Obchodní partneøi IBM zùstávají organizacemi nezávislými na IBM. IBM nenese odpovìdnost za jednání nebo prohlá¹ení Obchodních partnerù IBM, ani za jejich závazky vùèi Dr¾iteli licence. + +l. Licenèní podmínky a podmínky týkající se od¹kodnìní ve vztahu k právu du¹evního vlastnictví uvedené v jiných smlouvách, je¾ Dr¾itel licence uzavøel s IBM (jako je napøíklad smlouva IBM Customer Agreement), se nevztahují na licence na Program udìlené na základì této Smlouvy. + +m. Obì smluvní strany berou na vìdomí, ¾e ve¹keré vzájemnì sdìlené informace nejsou dùvìrné. Vy¾aduje-li nìkterá ze smluvních stran výmìnu dùvìrných informací, pak taková výmìna musí probìhnout na základì smlouvy o utajení dùvìrných informací; + +14. Geografický rozsah a rozhodné právo + +14.1 Rozhodné právo + +Smluvní strany souhlasí s pou¾itím práva zemì, v ní¾ Dr¾itel licence zakoupil licenci na Program, podle kterého se budou øídit, vykládat a uplatòovat ve¹keré práva, povinnosti a závazky Dr¾itele licence a IBM z této Smlouvy èi vztahující se k jejímu pøedmìtu a to bez ohledu na rozpor právních zásad. + +Úmluva OSN o smlouvách o mezinárodní koupi zbo¾í se neaplikuje. + +14.2 Jurisdikce + +V¹echna práva, povinnosti a závazky budou podléhat rozhodnutím pøíslu¹ných soudù zemì, v ní¾ Dr¾itel licence obdr¾el licenci na Program. + +Èást 2 - Podmínky specifické pro zemi + +Pro licence udìlené v Èeské republice platí, ¾e ní¾e uvedené podmínky nahrazují nebo mìní podmínky uvedené v Èásti 1. Ve¹keré podmínky uvedené v Èásti 1, které nejsou tìmito dodatky dotèeny, zùstávají v plné platnosti. + +DODATKY PRO ZEMÌ EVROPY, STØEDNÍHO VÝCHODU A AFRIKY (EMEA) + +ÈLENSKÉ STÁTY EVROPSKÉ UNIE + +8. Záruka a vylouèení záruky + +Ní¾e uvedený text se pøidává k oddílu 8 (Záruka a vylouèení záruky): + +Spotøebitelé z Evropské unie ("EU") mají zákonná práva, která vyplývají z platné národní legislativy vztahující se na prodej spotøebního zbo¾í. Tato práva nejsou dotèena ustanoveními tohoto oddílu 8 (Záruka a vylouèení záruky). + +ÈLENSKÉ STÁTY EU A ZEMÌ UVEDENÉ NÍ®E + +Jakákoliv evropská zemì, v které platí právní pøedpisy upravující ochranu osobních údajù a ochranu soukromí podobnì jako právní pøedpisy EU. + +13. V¹eobecná ustanovení + +Ní¾e uvedený text nahrazuje bod 13.e: + +(1) Definice - Pro úèely tohoto bodu 13.e platí následující dodateèné definice: + +(a) Informace o obchodních kontaktech - kontaktní informace vztahující se k obchodním vztahùm, které Dr¾itel licence zpøístupní IBM, vèetnì jmen, funkcí, obchodních adres, telefonních èísel, e-mailových adres zamìstnancù a dodavatelù Dr¾itele licence. Pro Rakousko, Itálii a ©výcarsko zahrnují Informace o obchodních kontaktech rovnì¾ údaje o Dr¾iteli licence a jeho dodavatelích, kteøí jsou právnickými osobami (napøíklad údaje o pøíjmech Dr¾itele licence a dal¹í informace týkající se transakcí). + +(b) Obchodní kontakty - zamìstnanci a dodavatelé Dr¾itele licence, jich¾ se týkají Informace o obchodních kontaktech. + +(c) Úøad na ochranu osobních údajù - úøad zøízený dle zákona o ochranì osobních údajù a zákona o elektronických komunikacích pøíslu¹né zemì nebo (v zemích, je¾ nejsou èleny EU) úøad odpovìdný za kontrolu ochrany osobních údajù v této zemi, nebo (pro kteroukoli z vý¹e uvedených mo¾ností) øádnì jmenovaný právní nástupce takového úøadu. + +(d) Právní pøedpisy na ochranu osobních údajù a o elektronických komunikacích - i) pøíslu¹né místní právní pøedpisy v platném znìní, které implementují po¾adavky Smìrnice Evropského parlamentu a Rady 95/46/ES (o ochranì fyzických osob v souvislosti se zpracováním osobních údajù a o volném pohybu tìchto údajù) a Smìrnice Evropského parlamentu a Rady 2002/58/ES (o zpracování osobních údajù a ochranì soukromí v odvìtví elektronických komunikací); nebo (ii) u zemí, je¾ nejsou èleny EU, právní pøedpisy schválené v pøíslu¹né zemi a týkající se ochrany osobních údajù a regulace elektronických komunikací, vèetnì (pro kteroukoli z vý¹e uvedených mo¾ností) jakékoli jejich zákonné náhrady nebo zmìny. + +(e) Skupina IBM - International Business Machines Corporation, Armonk, New York, USA, její dceøiné spoleènosti a jejich pøíslu¹ní Obchodní partneøi a subdodavatelé. + +(2) Dr¾itel licence opravòuje IBM: + +(a) ke zpracování a pou¾ívání Informací o obchodních kontaktech v rámci Skupiny IBM pro úèely poskytování podpory Dr¾iteli licence, vèetnì poskytování slu¾eb, a pro úèely podporování obchodních vztahù mezi Dr¾itelem licence a Skupinou IBM, vèetnì komunikace s Obchodními kontakty (e-mailem nebo jinak) a marketingu produktù a slu¾eb Skupiny IBM ("Uvedený úèel"); a + +(b) ke zpøístupnìní Informací o obchodních kontaktech ostatním èlenùm Skupiny IBM, a to pouze v souvislosti s Uvedeným úèelem. + +(3) IBM se zavazuje zpracovávat Informace o obchodních kontaktech v souladu s platnými právními pøedpisy na ochranu osobních údajù a o elektronických komunikacích a u¾ívat je pouze pro Uvedený úèel. + +(4) Dr¾itel licence prohla¹uje, ¾e získal (nebo získá), a to v rozsahu, v jakém to po¾adují právní pøedpisy na ochranu osobních údajù a o elektronických komunikacích, pøíslu¹né souhlasy od Obchodních kontaktù, které patøiènì o této skuteènosti informoval (nebo informuje), aby bylo Skupinì IBM umo¾nìno zpracovávat a u¾ívat Informace o obchodních kontaktech za úèelem komunikace s tìmito kontakty, vèetnì komunikace emailem, a to v souladu s Uvedeným úèelem. + +(5) Dr¾itel licence opravòuje IBM k pøená¹ení Informací o obchodních kontaktech mimo oblast Evropského hospodáøského prostoru za pøedpokladu, ¾e takový pøenos bude probíhat na základì smluvních podmínek schválených Úøadem na ochranu osobních údajù, pøípadnì, ¾e takový pøenos bude jinak povolen právními pøedpisy na ochranu osobních údajù a o elektronických komunikacích. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_de b/charts/mq-devserver/LICENSE_locale/LICENSE_de new file mode 100644 index 0000000..eed85cb --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_de @@ -0,0 +1,350 @@ +LIZENZINFORMATION + +Für die Lizenzierung der nachstehend aufgelisteten Programme gelten zusätzlich zu den bereits zwischen dem Kunden und IBM vereinbarten Programmlizenzbedingungen die Bedingungen der folgenden Lizenzinformation. Falls der Kunde den für das Programm geltenden Lizenzbedingungen nicht bereits zugestimmt hat, kommt Internationale Nutzungsbedingungen für Programme ohne Gewährleistung (Z125-5589-05) zur Anwendung. + +Programmname (Programmnummer): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Die folgenden Standardbedingungen gelten für die Programmnutzung durch den Lizenznehmer. + +Gebündelte Programme + +Das Programm wird als Multiproduktpaket lizenziert, das aus den nachfolgend aufgeführten gebündelten Programmen (sog. Bundled Programs) besteht. Der Lizenznehmer ist berechtigt, diese gebündelten Programme im Rahmen der Berechtigungsnachweise (Proofs of Entitlement = PoEs) für das Programm und gemäß diesem Lizenzinformationsdokument zu installieren und zu verwenden. Der Lizenznehmer ist nicht berechtigt, die gebündelten Programme getrennt vom Multiproduktpaket zu übertragen oder weiterzuvertreiben. Einem gebündelten Programm können Lizenzbedingungen beigefügt sein, denen die Nutzung des betreffenden Programms durch den Lizenznehmer unterliegt. Im Falle eines Widerspruchs haben die Bedingungen dieses Lizenzinformationsdokuments Vorrang vor den Bedingungen des gebündelten Programms. Wenn das Recht des Lizenznehmers zur Nutzung des Programms abläuft oder erlischt, muss er die Nutzung einstellen und alle Kopien der gebündelten Programme löschen oder unverzüglich bei der Stelle zurückgeben, von der er das Programm bezogen hat. Hat der Lizenznehmer die gebündelten Programme heruntergeladen, sollte er sich an die Stelle wenden, von der er das Programm bezogen hat. Um die gebündelten Programme für eine Nutzung ohne die obigen Beschränkungen zu lizenzieren, sollte sich der Lizenznehmer bitte an einen IBM Vertriebsbeauftragten oder an die Stelle wenden, von der er das Programmpaket bezogen hat, um die entsprechende Lizenz zu erwerben. + +Dies sind die gebündelten Programme, die mit dem Programm lizenziert werden: +IBM MQ V9.0.3 + +Beschränkung auf Entwickler + +Wenn das Programm als "Developer"-Version ausgewiesen ist, darf es nur für interne Entwicklungszwecke und Komponententests auf einer Entwicklermaschine eingesetzt werden. Eine Entwicklermaschine ist eine physische oder virtuelle Desktopumgebung, in der ein primäres Betriebssystem und das Programm ausgeführt werden, die beide für maximal einen angegebenen Entwickler zugänglich und nutzbar sind. Der Lizenznehmer ist nicht berechtigt, das Programm zur Verarbeitung oder Simulation von Produktionsworkloads oder zum Testen der Skalierbarkeit von Code, Anwendungen oder Systemen zu nutzen. Der Lizenznehmer ist nicht berechtigt, irgendwelche Bestandteile des Programms für andere Zwecke zu nutzen, ohne die entsprechenden Produktionsberechtigungen zu erwerben. + +Komponenten, die bei der Ermittlung der erforderlichen Berechtigungen nicht berücksichtigt werden + +Bei der Bestimmung der Anzahl der Berechtigungen, die für die Installation oder Nutzung des Programms durch den Lizenznehmer erforderlich sind, wird die Installation oder Nutzung der folgenden Programmkomponenten nicht berücksichtigt. Mit anderen Worten: Der Lizenznehmer darf die folgenden Programmkomponenten unter den Lizenzbedingungen installieren und nutzen, diese Komponenten werden bei der Bestimmung der erforderlichen Anzahl an Berechtigungen für das Programm aber nicht berücksichtigt. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Quellenkomponenten und Mustermaterialien + +Das Programm kann einige Komponenten in Form von Quellcode ("Quellenkomponenten") und sonstige Materialien, die als Mustermaterialien gekennzeichnet sind, enthalten. Der Lizenznehmer darf die Quellenkomponenten und Mustermaterialien nur für den internen Gebrauch kopieren und ändern, sofern eine solche Verwendung im Rahmen der Lizenzrechte dieser Vereinbarung erfolgt und der Lizenznehmer die in den Quellenkomponenten oder Mustermaterialien enthaltenen Copyrightvermerke oder Hinweise weder ändert noch löscht. IBM stellt die Quellenkomponenten und Mustermaterialien ohne eine Verpflichtung zur Unterstützung, ohne Wartung (auf "as-is"-Basis) und ohne jegliche Gewährleistung (ausdrücklich oder stillschweigend) zur Verfügung, insbesondere ohne Gewährleistung für Rechtsmängel, für die Freiheit von Rechten Dritter, für das Recht auf Nichtbeeinträchtigung, für die Handelsüblichkeit und für die Verwendungsfähigkeit für einen bestimmten Zweck. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Internationale Nutzungsbedingungen für Programme ohne Gewährleistung + +Teil 1 - Allgemeine Bedingungen + +Durch Herunterladen, Installieren oder Kopieren des Programms, die Zustimmung zur Vereinbarung per Mausklick, den Zugriff auf das Programm oder eine anderweitige Nutzung des Programms erklärt sich der Lizenznehmer mit den Bedingungen dieser Vereinbarung einverstanden. Wenn Sie diese Bedingungen im Namen des Lizenznehmers akzeptieren, gewährleisten und bestätigen Sie damit, dass Sie berechtigt sind, den Lizenznehmer zur Einhaltung dieser Bedingungen zu verpflichten. Wenn Sie mit diesen Bedingungen nicht einverstanden sind, + +* dürfen Sie das Programm nicht herunterladen, installieren, kopieren, die Vereinbarung per Mausklick akzeptieren, auf das Programm zugreifen oder das Programm nutzen und + +* müssen Sie die unbenutzten Datenträger und die Dokumentation unverzüglich bei der Stelle, von der Sie das Programm bezogen haben, gegen Rückerstattung des gezahlten Betrags zurückgeben. Wurde das Programm heruntergeladen, müssen alle Kopien des Programms vernichtet werden. + +1. Begriffsbestimmungen + +"Berechtigte Nutzung" - die Nutzungsstufe, die festlegt, in welchem Umfang der Lizenznehmer zur Ausführung des Programms berechtigt ist. Die Nutzungsstufe kann anhand der Anzahl der Benutzer, der Millionen Serviceeinheiten pro Stunde (Millions of Service Units = "MSUs"), der Prozessor-Value-Units ("PVUs") oder einer anderen von IBM angegebenen Nutzungsstufe ermittelt werden. + +"IBM" - International Business Machines Corporation oder deren verbundene Unternehmen. + +"Lizenzinformation" ("LI") - ein Dokument, das Informationen und zusätzliche programmspezifische Bedingungen enthält. Die Lizenzinformation eines Programms kann unter www.ibm.com/software/sla abgerufen werden. Darüber hinaus kann sie im Verzeichnis des Programms zur Verfügung gestellt oder über einen entsprechenden Systembefehl abgerufen werden oder ist dem Programm als Broschüre beigelegt. + +"Programm" - umfasst das Originalprogramm sowie vollständige oder Teilkopien hiervon und kann aus 1) maschinenlesbaren Instruktionen und Daten, 2) Komponenten, Dateien und Modulen, 3) audiovisuellen Inhalten (z. B. Abbildungen, Texte, Aufzeichnungen oder Bilder) und 4) zugehörigem Lizenzmaterial (z. B. Schlüssel und Dokumentation) bestehen. + +2. Struktur dieser Vereinbarung + +Diese Vereinbarung besteht aus Teil 1 - Allgemeine Bedingungen, Teil 2 - Länderspezifische Bedingungen (sofern vorhanden) und den Lizenzinformationen und stellt die vollständige Vereinbarung zwischen dem Lizenznehmer und IBM zur Nutzung des Programms dar. Sie ersetzt alle zuvor getroffenen mündlichen oder schriftlichen Absprachen zwischen dem Lizenznehmer und IBM in Bezug auf die Nutzung des Programms durch den Lizenznehmer. Die Bedingungen von Teil 2 können diejenigen in Teil 1 ersetzen oder ergänzen. Im Falle eines Widerspruchs haben die Lizenzinformationen Vorrang vor Teil 1 und Teil 2 dieser Vereinbarung. + +3. Lizenz + +Das Programm ist Eigentum von IBM oder eines IBM Lieferanten und wird urheberrechtlich geschützt und lizenziert, jedoch nicht verkauft. + +IBM erteilt dem Lizenznehmer eine nicht ausschließliche Lizenz, 1) das Programm bis zu der auf der Rechnung angegebenen berechtigten Nutzung zu verwenden, 2) Kopien des Programms zur Unterstützung der berechtigten Nutzung zu erstellen und zu installieren und 3) eine Sicherungskopie zu erstellen, sofern + +a. der Lizenznehmer das Programm rechtmäßig bezogen hat und die Bedingungen dieser Vereinbarung einhält; + +b. die Sicherungskopie erst ausgeführt wird, wenn das gesicherte Programm nicht mehr ausführbar ist; + +c. der Lizenznehmer auf jeder Kopie oder Teilkopie des Programms alle Copyrightvermerke und sonstigen Eigentumshinweise anbringt; + +d. der Lizenznehmer sicherstellt, dass jeder Benutzer (unabhängig davon, ob der Zugriff lokal oder von einem fernen System aus erfolgt) das Programm 1) nur für Geschäftszwecke des Lizenznehmers nutzt und 2) die Bedingungen dieser Vereinbarung einhält; + +e. der Lizenznehmer sich verpflichtet, 1) das Programm nicht abweichend von den Bedingungen dieser Vereinbarung zu nutzen, zu kopieren, zu ändern oder weiterzugeben; 2) das Programm nicht rückumzuwandeln (reverse assemble, reverse compile) oder in anderer Weise zu übersetzen, soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgeschrieben ist; 3) die Komponenten, Dateien, Module, audiovisuellen Inhalte und das zugehörige Lizenzmaterial des Programms nicht ohne das Programm zu nutzen; oder 4) das Programm nicht in Unterlizenz zu vergeben, zu vermieten oder zu verleasen; und, + +f. wenn der Lizenznehmer dieses Programm als Unterstützungsprogramm erhält, dieses Programm nur zur Unterstützung des Hauptprogramms und unter Einhaltung sämtlicher Einschränkungen in der Lizenz für das Hauptprogramm zu nutzen, oder wenn der Lizenznehmer dieses Programm als Hauptprogramm erhält, alle Unterstützungsprogramme nur zur Unterstützung dieses Programms und unter Einhaltung sämtlicher Einschränkungen in dieser Vereinbarung zu nutzen. In diesem Abschnitt bezeichnet ein "Unterstützungsprogramm" ein Programm, das Teil eines anderen IBM Programms ("Hauptprogramm") ist und in der Lizenzinformation des Hauptprogramms als Unterstützungsprogramm aufgeführt wird. (Um eine separate Lizenz für das Unterstützungsprogramm ohne diese Einschränkungen zu erwerben, sollte sich der Lizenznehmer an die Stelle wenden, von der er das Unterstützungsprogramm bezogen hat.) + +Diese Lizenz gilt für jede Kopie des Programms, die der Lizenznehmer erstellt. + +3.1 Trade-ups, Updates, Fixes und Patches + +3.1.1 Trade-ups + +Wird das Programm durch ein Trade-up-Programm ersetzt, dann erlischt die Lizenz des ersetzten Programms unverzüglich. + +3.1.2 Updates, Fixes und Patches + +Wenn der Lizenznehmer Updates, Fixes oder Patches für ein Programm erhält, dann akzeptiert er alle zusätzlichen oder abweichenden Bedingungen, die in der Lizenzinformation für die Updates, Fixes oder Patches aufgeführt sind. Werden keine zusätzlichen oder abweichenden Bedingungen bereitgestellt, unterliegen die Updates, Fixes oder Patches ausschließlich dieser Vereinbarung. Wird das Programm durch ein Update ersetzt, erklärt sich der Lizenznehmer damit einverstanden, die Nutzung des ersetzten Programms unverzüglich einzustellen. + +3.2 Lizenzen mit fester Laufzeit + +Wenn IBM das Programm für eine feste Laufzeit lizenziert, dann erlischt die Lizenz des Lizenznehmers mit dem Ablauf der festen Laufzeit, sofern der Lizenznehmer und IBM die Lizenz nicht in beidseitigem Einverständnis verlängern. + +3.3 Laufzeit und Kündigung + +Diese Vereinbarung bleibt bis zur Kündigung wirksam. + +IBM kann die Lizenz des Lizenznehmers kündigen, wenn der Lizenznehmer die Bedingungen dieser Vereinbarung nicht erfüllt. + +Wird die Lizenz von einer der Vertragsparteien aus irgendeinem Grund gekündigt, erklärt sich der Lizenznehmer damit einverstanden, die Nutzung des Programms unverzüglich einzustellen und alle Programmkopien zu vernichten. Bedingungen, die sich ihrer Natur nach auf die Zeit nach einer Beendigung dieser Vereinbarung erstrecken, bleiben bis zu ihrer Erfüllung in Kraft und gelten auch für eventuelle Rechtsnachfolger und Zessionare. + +4. Gebühren + +Die Gebühren (sofern Gebühren anfallen) basieren auf der erworbenen berechtigten Nutzung, die auf der Rechnung angegeben ist. IBM gewährt keine Gutschriften oder Rückerstattungen für bereits fällige oder gezahlte Gebühren, mit Ausnahme anderslautender Bestimmungen in dieser Vereinbarung. + +Wenn der Lizenznehmer die berechtigte Nutzung erhöhen will, wird er IBM oder einen autorisierten IBM Reseller vorab benachrichtigen und die anfallenden Gebühren bezahlen. + +5. Steuern + +Der Lizenznehmer trägt die mit dem Programm verbundenen und von IBM angegebenen Steuern, Abgaben und Gebühren (mit Ausnahme solcher auf den Ertrag von IBM) oder weist eine entsprechende Befreiung nach. Ab dem Datum, an dem der Lizenznehmer das Programm erhält, ist er für alle das Programm betreffenden Vermögenssteuern verantwortlich. Wenn durch den Import oder den Export des Programms, die Übertragung, den Zugriff auf das Programm oder die Nutzung des Programms außerhalb des Landes, in dem der ursprüngliche Lizenznehmer die Lizenz erhalten hat, Zölle, Steuern, Abgaben oder Gebühren auf das Programm erhoben werden, trägt der Lizenznehmer alle entsprechenden Steuern, Abgaben oder Gebühren und wird den in Rechnung gestellten Betrag bezahlen. + +6. Geld-zurück-Garantie + +Falls der Lizenznehmer aus irgendeinem Grund mit dem Programm nicht zufrieden ist und wenn er der ursprüngliche Lizenznehmer des Programms ist, kann er die Lizenz kündigen und sich den für das Programm gezahlten Betrag zurückerstatten lassen, sofern er das Programm innerhalb von 30 Tagen nach dem Rechnungsdatum an die Stelle zurückgibt, von der er das Programm bezogen hat. Wenn es sich um eine Lizenz mit fester Laufzeit handelt, die verlängert werden kann, kann der Lizenznehmer nur dann eine Rückerstattung anfordern, wenn er das Programm in den ersten 30 Tagen der Erstlaufzeit zurückgibt. Wenn der Lizenznehmer das Programm heruntergeladen hat, erhält er von der Stelle, von der er das Programm bezogen hat, weitere Anweisungen zur Erstattung des gezahlten Betrags. + +7. Programmübertragung + +Der Lizenznehmer darf das Programm und alle Lizenzrechte und -pflichten nur an Dritte übertragen, wenn diese sich mit den Bedingungen dieser Vereinbarung einverstanden erklären. Wird die Lizenz von einer der Vertragsparteien aus irgendeinem Grund gekündigt, ist es dem Lizenznehmer untersagt, das Programm an Dritte weiterzugeben. Es ist dem Lizenznehmer nicht gestattet, einen Teil 1) des Programms oder 2) der berechtigten Nutzung des Programms zu übertragen. Wird das Programm übertragen, muss der Lizenznehmer auch eine Hardcopy dieser Vereinbarung einschließlich der Lizenzinformation beifügen. Die Lizenz des Lizenznehmers erlischt mit der Übertragung. + +8. Gewährleistungsausschluss + +Vorbehaltlich einer gesetzlichen Gewährleistung, die nicht ausgeschlossen werden kann, übernimmt IBM keine Gewährleistung (ausdrücklich oder stillschweigend) hinsichtlich des Programms oder der Unterstützung (sofern vorgesehen), einschließlich, aber nicht begrenzt auf die zufriedenstellende Qualität, Handelsüblichkeit, Verwendungsfähigkeit für einen bestimmten Zweck, Eigentumsrecht und die Freiheit von Rechten Dritter. + +Nach der Rechtsordnung bzw. Gerichtsbarkeit einiger Länder ist der Ausschluss oder die Begrenzung von ausdrücklichen und/oder stillschweigenden Zusicherungen/Gewährleistungen nicht erlaubt, sodass obige Einschränkungen und Ausschlüsse für den Lizenznehmer möglicherweise nicht anwendbar sind. In diesem Fall sind derartige Gewährleistungen auf die gesetzliche Mindestgewährleistungsdauer begrenzt. Nach Ablauf des Gewährleistungszeitraums wird keinerlei Gewährleistung mehr erbracht. Nach der Rechtsordnung bzw. Gerichtsbarkeit einiger Länder ist der Ausschluss oder die Begrenzung von ausdrücklichen und/oder stillschweigenden Zusicherungen/Gewährleistungen nicht erlaubt, sodass obige Einschränkungen und Ausschlüsse für den Lizenznehmer möglicherweise nicht anwendbar sind. Der Lizenznehmer kann gegebenenfalls weitere Rechte geltend machen, die abhängig vom jeweiligen Land und der jeweiligen Rechtsordnung bzw. Gerichtsbarkeit unterschiedlich sein können. + +Die Gewährleistungsausschlüsse und sonstigen Ausschlüsse in diesem Abschnitt 8 gelten auch für die Programmentwickler und Lieferanten von IBM. + +Für Nicht-IBM Programme können die Hersteller, Lieferanten und Herausgeber ihre eigenen Gewährleistungen mitliefern. + +IBM leistet nur Unterstützung, wenn dies ausdrücklich angegeben ist. Falls IBM Unterstützung leistet, unterliegt diese den Gewährleistungsausschlüssen und sonstigen Ausschlüssen in diesem Abschnitt 8. + +9. Daten und Datenbanken des Lizenznehmers + +Um den Lizenznehmer bei der Eingrenzung eines Problems mit dem Programm zu unterstützen, kann IBM den Lizenznehmer auffordern, 1) IBM Fernzugriff auf sein System zu gestatten oder 2) Informationen oder Systemdaten an IBM zu senden. IBM ist jedoch nicht zur Erbringung solcher Unterstützungsleistungen verpflichtet, es sei denn, IBM und der Lizenznehmer treffen eine separate schriftliche Vereinbarung, in der IBM sich bereit erklärt, Unterstützung für den Lizenznehmer in einem Umfang zu leisten, der die Verpflichtungen von IBM unter dieser Vereinbarung überschreitet. In jedem Fall wird IBM die Informationen über Fehler und Probleme zur Verbesserung der IBM Produkte und Services nutzen und Unterstützung durch die Bereitstellung entsprechender Unterstützungsangebote leisten. Zu diesem Zweck kann IBM andere IBM Organisationen und Subunternehmer (auch in Ländern außerhalb des Landes, in welchem der Lizenznehmer seinen Sitz hat) beauftragen, und der Lizenznehmer wird IBM dies gestatten. + +Der Lizenznehmer bleibt verantwortlich für 1) alle Daten und den Inhalt der Datenbanken, die er IBM zur Verfügung stellt, 2) die Auswahl und Implementierung von Prozeduren und Kontrollmechanismen im Hinblick auf Datenzugriff, -sicherheit, -verschlüsselung, -nutzung und -übertragung (einschließlich aller personenbezogenen Daten) und 3) die Sicherung und Wiederherstellung der Datenbanken und der gespeicherten Daten. Der Lizenznehmer wird IBM keine personenbezogenen Informationen, weder als Daten noch in anderer Form, senden oder Zugriff darauf erteilen und muss für alle angemessenen Kosten und sonstigen Ausgaben aufkommen, die IBM im Zusammenhang mit solchen Informationen entstehen, die versehentlich an IBM weitergegeben wurden oder deren Verlust oder Offenlegung durch IBM verursacht wurde, einschließlich der Aufwendungen, die sich aus den Ansprüchen Dritter ergeben. + +10. Haftungsbegrenzung + +Die Beschränkungen und Ausschlüsse in Abschnitt 10 gelten, soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgesehen ist. + +10.1 Fälle, in denen IBM haftbar gemacht werden kann + +Soweit IBM dem Lizenznehmer gegenüber schadenersatzpflichtig ist, hat er Anspruch auf Entschädigung durch IBM. Unabhängig vom Rechtsgrund, auf dem der an IBM gerichtete Schadensersatzanspruch des Lizenznehmers beruht (einschließlich Vertragsverletzung, Fahrlässigkeit, unrichtiger Angaben oder anderer Ansprüche aus dem Vertrag oder aufgrund unerlaubter Handlungen), ist die Gesamthaftung von IBM für sämtliche Ansprüche in Bezug auf ein einzelnes Programm oder andere Ansprüche, die aus dieser Vereinbarung entstehen, begrenzt auf 1) Personenschäden (einschließlich Tod) und Schäden an Immobilien und beweglichen Sachen und 2) bei anderen direkten Schäden auf maximal die Gebühren (maximal zwölf Monatsgebühren, wenn die Gebühren für das Programm nach einer festen Laufzeit berechnet werden), die der Lizenznehmer für das Programm entrichtet hat, das die Grundlage des Rechtsanspruches ist. + +Diese Haftungsbegrenzung gilt auch für alle Programmentwickler und Lieferanten von IBM. Dies ist der maximale Betrag, für den IBM und diese gemeinsam haftbar gemacht werden können. + +10.2 Fälle, in denen IBM nicht haftbar ist + +Auf keinen Fall sind IBM oder die Programmentwickler und Lieferanten von IBM in folgenden Fällen haftbar, auch wenn sie auf die Möglichkeit solcher Schäden hingewiesen wurden: + +a. Verlust oder Beschädigung von Daten; + +b. unmittelbare oder mittelbare Schäden oder sonstige wirtschaftliche Folgeschäden; oder + +c. entgangene Gewinne, Geschäftsabschlüsse, Umsätze, Schädigung des guten Namens oder Verlust erwarteter Einsparungen. + +11. Einsichts- und Prüfungsrecht + +In diesem Abschnitt 11 bezeichnet "Nutzungsbedingungen" 1) diese Vereinbarung sowie alle anwendbaren Anlagen und Auftragsdokumente, die von IBM bereitgestellt werden, und 2) IBM Softwarerichtlinien, die auf der IBM Software Policy Website (www.ibm.com/softwarepolicies) zu finden sind, einschließlich der Richtlinien, die sich auf Sicherungen, das Sub-Capacity-Preismodell und die Migration beziehen. + +Die Rechte und Verpflichtungen im Rahmen dieses Abschnitts 11 bleiben während der Lizenzlaufzeit und danach für weitere zwei Jahre in Kraft. + +11.1 Prüfungsprozess + +Der Lizenznehmer verpflichtet sich, korrekte schriftliche Aufzeichnungen, Ausgaben von Systemtools und sonstige Systemdaten zu erstellen, aufzubewahren und IBM sowie den beauftragten Prüfern bereitzustellen, um gegenüber IBM prüffähige Nachweise dafür zu erbringen, dass die Nutzung der Programme in Übereinstimmung mit den Nutzungsbedingungen erfolgt, einschließlich der angewandten IBM Lizenz- und Preisbedingungen. Der Lizenznehmer ist dafür verantwortlich, 1) sicherzustellen, dass die berechtigte Nutzung nicht überschritten wird und 2) die Nutzungsbedingungen eingehalten werden. + +Nach angemessener Vorankündigung ist IBM dazu berechtigt, die Einhaltung der Nutzungsbedingungen an allen Standorten des Lizenznehmers und für alle Umgebungen, an denen der Lizenznehmer die den Nutzungsbedingungen unterliegenden Programme (zu irgendeinem Zweck) nutzt, zu überprüfen. Die Prüfung findet während der üblichen Geschäftszeiten in den Räumlichkeiten des Lizenznehmers statt. IBM wird sich bemühen, den Geschäftsbetrieb des Lizenznehmers dabei so wenig wie möglich zu beeinträchtigen. IBM ist berechtigt, die Prüfung durch einen unabhängigen Prüfer durchführen zu lassen, soweit dieser durch eine schriftliche Vertraulichkeitsvereinbarung zur Geheimhaltung verpflichtet ist. + +11.2 Prüfergebnis + +IBM wird den Lizenznehmer schriftlich benachrichtigen, sofern eine solche Überprüfung ergibt, dass der Lizenznehmer die berechtigte Nutzung eines Programms überschritten hat oder der Lizenznehmer die ihm aus dieser Vereinbarung obliegenden Verpflichtungen nicht einhält. Der Lizenznehmer erklärt sich dazu bereit, die in einer Rechnung von IBM aufgeführten Gebühren für 1) die Nutzungsüberschreitung, 2) die Unterstützung während der Nutzungsüberschreitung entweder für die Dauer der Nutzungsüberschreitung oder für zwei Jahre, je nachdem, welcher Zeitraum kürzer ist, und 3) alle anfallenden zusätzlichen Gebühren und anderen Verbindlichkeiten, die sich aufgrund der Prüfung ergeben, unverzüglich direkt an IBM zu entrichten. + +12. Hinweise von Drittherstellern + +Das Programm kann Drittherstellercode enthalten, für den IBM und nicht der Dritthersteller dem Lizenznehmer eine Lizenz unter dieser Vereinbarung erteilt. Falls Hinweise auf den Drittherstellercode ("Third Party Notices") mitgeliefert werden, geschieht dies nur zu Informationszwecken. Diese Hinweise können in den NOTICES-Dateien des Programms enthalten sein. Informationen über den Erhalt des Quellcodes für einen bestimmten Drittherstellercode befinden sich in den Third Party Notices. Kennzeichnet IBM Drittherstellercode in den Third Party Notices als "Modifiable Third Party Code" (Drittherstellercode, der geändert werden kann), so erteilt IBM dem Lizenznehmer damit die Berechtigung, 1) den Modifiable Third Party Code zu verändern und 2) die Programmmodule rückzuentwickeln, die eine direkte Schnittstelle zu dem Modifiable Third Party Code darstellen, sofern dies ausschließlich zu dem Zweck erfolgt, die Änderungen des Lizenznehmers am Drittherstellercode per Debugging zu testen. Die Service- und Unterstützungsverpflichtungen von IBM (sofern verfügbar) beziehen sich nur auf das unveränderte Programm. + +13. Allgemeines + +a. Gesetzlich unabdingbare Verbraucherschutzrechte haben Vorrang vor den Bedingungen dieser Vereinbarung. + +b. Werden die Programme auf Datenträgern an den Lizenznehmer geliefert, geht - sofern nicht zwischen den Parteien etwas Abweichendes schriftlich vereinbart wurde - die Gefahr auf den Lizenznehmer über, sobald IBM den Datenträger an den von IBM bestimmten Spediteur/Frachtführer oder die sonst zur Ausführung der Auslieferung bestimmte Person oder Anstalt ausgeliefert hat. + +c. Falls eine der Bedingungen dieser Vereinbarung im Rahmen des geltenden Rechts ungültig oder undurchführbar ist, sind die übrigen Bedingungen dieser Vereinbarung davon nicht betroffen und gelten weiterhin in vollem Umfang. + +d. Der Lizenznehmer verpflichtet sich zur Einhaltung aller anwendbaren Export- und Importgesetze und -bestimmungen, einschließlich der US-Embargo- und -Sanktionsbestimmungen sowie des Exportverbots für bestimmte Verwendungszwecke oder an bestimmte Personen. + +e. Der Lizenznehmer ist damit einverstanden, dass International Business Machines Corporation und deren verbundene Unternehmen (sowie deren Rechtsnachfolger und Zessionare, Vertragspartner und IBM Business Partner) die Kontaktinformationen des Lizenznehmers in allen Ländern, in denen sie geschäftlich tätig sind, in Verbindung mit IBM Produkten und Services oder zur Förderung der Geschäftsbeziehung zwischen IBM und dem Lizenznehmer speichern und nutzen dürfen. + +f. Jede Vertragspartei wird der anderen Partei ausreichend Gelegenheit geben, ihren vertraglichen Verpflichtungen nachzukommen, bevor sie rechtliche Schritte wegen Nichterfüllung von Vertragsbedingungen unternimmt. Die Vertragsparteien werden versuchen, alle Streitfälle, Meinungsverschiedenheiten oder Ansprüche zwischen den Parteien in Bezug auf diese Vereinbarung einvernehmlich beizulegen. + +g. Soweit nicht durch gesetzliche Regelung etwas anderes zwingend vorgesehen ist, stimmen beide Vertragsparteien überein, 1) im Rahmen dieser Vereinbarung keine Klage später als zwei Jahre nach Auftreten des Klagegegenstands einzureichen, und 2) dass nach Ablauf dieser Frist alle Ansprüche und alle damit in Zusammenhang stehenden Rechte verjähren. + +h. Weder der Lizenznehmer noch IBM sind für die Nichterfüllung von vertraglichen Verpflichtungen aus Gründen haftbar, die von den Vertragsparteien nicht beeinflusst werden können. + +i. Aus dieser Vereinbarung ergibt sich kein Recht auf Klage oder Klagegegenstand für Dritte, und IBM ist nicht haftbar für Ansprüche Dritter gegen den Lizenznehmer, die nicht oben in Unterabschnitt 10.1 (Fälle, in denen IBM haftbar gemacht werden kann) für Personenschäden (einschließlich Tod) und Schäden an Immobilien und beweglichen Sachen aufgeführt sind, für die IBM nach den gesetzlichen Bestimmungen haftbar ist. + +j. Durch Anerkennung dieser Vereinbarung stimmen beide Vertragsparteien darin überein, sich nicht auf irgendwelche Darstellungen zu verlassen, die nicht auf dieser Vereinbarung beruhen, einschließlich 1) der Angaben zu Leistung oder Funktion des Programms; und 2) der Erfahrungen oder Empfehlungen Dritter; oder 3) der Ergebnisse oder Einsparungen, die der Lizenznehmer eventuell erzielen kann. + +k. IBM hat mit bestimmten Partnern ("IBM Business Partner" genannt) Vereinbarungen zur Vermarktung und Unterstützung bestimmter Programme geschlossen. IBM Business Partner sind eigenständig und von IBM unabhängig. IBM ist weder für die Geschäftstätigung der IBM Business Partner noch für deren Aussagen oder Verpflichtungen gegenüber dem Lizenznehmer verantwortlich. + +l. Die Lizenzbedingungen und Freistellungsregelungen in anderen (Rahmen-)Vereinbarungen zwischen dem Lizenznehmer und IBM (z. B. den Allgemeinen Geschäftsbedingungen von IBM) gelten nicht für Programmlizenzen, die unter dieser Vereinbarung erteilt werden. + +m. Beide Vertragsparteien stimmen darin überein, dass alle ausgetauschten Informationen nicht vertraulich sind. Falls eine der Vertragsparteien den Austausch vertraulicher Informationen als erforderlich ansieht, geschieht dies im Rahmen einer unterzeichneten Vertraulichkeitsvereinbarung. + +14. Geltungsbereich und geltendes Recht + +14.1 Geltendes Recht + +Beide Vertragsparteien sind damit einverstanden, dass die Gesetze des Landes zur Anwendung kommen, in dem der Lizenznehmer die Programmlizenz erworben hat, um die Rechte, Pflichten und Verpflichtungen des Lizenznehmers und von IBM, die sich aus dem Inhalt dieser Vereinbarung ergeben oder in irgendeiner Weise damit in Zusammenhang stehen, zu regeln, zu interpretieren und durchzuführen, ungeachtet unterschiedlicher Rechtsgrundlagen. + +Die Vertragskonvention der Vereinten Nationen für den internationalen Warenverkauf kommt nicht zur Anwendung. + +14.2 Rechtsprechung + +Alle Rechte, Pflichten und Verpflichtungen unterliegen der Rechtsprechung des Landes, in dem der Lizenznehmer die Programmlizenz erworben hat. + +Teil 2 - Länderspezifische Bedingungen + +Für Lizenzen, die in den unten aufgeführten Ländern erteilt werden, ersetzen oder ergänzen die nachfolgenden länderspezifischen Regelungen die betreffenden Bedingungen für die jeweiligen Länder in Teil 1. Alle Bedingungen in Teil 1, die von diesen Änderungen oder Ergänzungen nicht betroffen sind, bleiben unverändert und behalten ihre Gültigkeit. Teil 2 ist wie folgt aufgebaut: + +* Landesspezifische Ergänzung zu Teil 1, Abschnitt 14 (Geltendes Recht und Rechtsprechung); und + +* Ergänzungen zu anderen Bedingungen dieser Vereinbarung, die für die EMEA-Länder (Europa, Naher/Mittlerer Osten und Afrika) gelten + +Landesspezifische Ergänzung zu Teil 1, Abschnitt 14 (Geltendes Recht und Rechtsprechung) + +14.2 Rechtsprechung + +Der folgende Absatz bezieht sich auf die Rechtsprechung und ersetzt Unterabschnitt 14.2 (Rechtsprechung) für Österreich: + +Alle Rechte, Pflichten und Verpflichtungen unterliegen der Rechtsprechung des Landes, in dem der Lizenznehmer die Programmlizenz erworben hat, mit Ausnahme der unten aufgeführten Länder, in denen sämtliche Rechtsstreitigkeiten, die sich aus dieser Vereinbarung ergeben oder damit in Zusammenhang stehen, einschließlich etwaiger Schnellverfahren, ausschließlich in die Zuständigkeit der folgenden Gerichte fallen: + +des zuständigen Gerichts in Wien, Österreich (Innenstadt) + +ERGÄNZUNGEN FÜR DIE EMEA-LÄNDER + +MITGLIEDSSTAATEN DER EUROPÄISCHEN UNION + +8. Gewährleistungsausschluss + +Der folgende Text wird Abschnitt 8 (Gewährleistungsausschluss) hinzugefügt: + +In der Europäischen Union ("EU") sind für Verbraucher unter den geltenden nationalen rechtlichen Bestimmungen Rechte für den Verkauf von Verbrauchsgütern definiert. Diese Rechte sind von den Bestimmungen in Abschnitt 8 (Gewährleistungsausschluss) nicht betroffen. + +EU-MITGLIEDSSTAATEN UND DIE UNTEN AUFGEFÜHRTEN LÄNDER + +Liechtenstein, die Schweiz und alle anderen europäischen Länder, die nationale Datenschutzbestimmungen nach dem EU-Modell per Gesetz eingeführt haben. + +13. Allgemeines + +Der folgende Text ersetzt Abschnitt 13.e: + +(1) Begriffsbestimmungen - Für die Zwecke von Abschnitt 13.e kommen die folgenden zusätzlichen Begriffsbestimmungen zur Anwendung: + +(a) Kontaktinformationen - geschäftsbezogene Kontaktinformationen, die IBM vom Lizenznehmer zugänglich gemacht werden, dazu gehören u. a. Namen, Berufsbezeichnungen, Geschäftsadressen, Telefonnummern und E-Mail-Adressen von Mitarbeitern und Vertragspartnern des Lizenznehmers. In Österreich, Italien und der Schweiz umfassen die Kontaktinformationen ferner Angaben über den Lizenznehmer und seine Vertragspartner als juristische Personen (z. B. Umsatzdaten des Lizenznehmers und andere transaktionsorientierte Informationen). + +(b) Kontaktperson - Mitarbeiter und Vertragspartner des Lizenznehmers, auf die sich die Kontaktinformationen beziehen. + +(c) Datenschutzbehörde - die Behörde, die vom jeweiligen Land gemäß den Vorschriften zum Datenschutz und zur elektronischen Kommunikation eingerichtet wurde, oder bei Nicht-EU-Ländern die Behörde, die für die Überwachung des Datenschutzes bei personenbezogenen Daten im jeweiligen Land verantwortlich ist, oder eine zuständige Nachfolgebehörde (in Bezug auf eine der genannten Behörden). + +(d) Vorschriften zum Datenschutz und zur elektronischen Kommunikation - (i) die geltenden nationalen Gesetze und Verordnungen, die die Anforderungen der EU-Richtlinie 95/46/EC (zum Schutz natürlicher Personen bei der Verarbeitung personenbezogener Daten und zum freien Datenverkehr) und der EU-Richtlinie 2002/58/EC (über die Verarbeitung personenbezogener Daten und den Schutz der Privatsphäre in der elektronischen Kommunikation) umsetzen; oder (ii) in Nicht-EU-Ländern, die Gesetze und/oder Verordnungen, die in den betreffenden Ländern zum Schutz personenbezogener Daten und zur Regulierung der elektronischen Kommunikation unter Einbeziehung personenbezogener Daten erlassen wurden, einschließlich aller Ersatzgesetze oder Gesetzesänderungen (in Bezug auf die zuvor erwähnten Gesetze und Verordnungen). + +(e) IBM Unternehmen - International Business Machines Corporation mit Sitz in Armonk, New York (USA), deren verbundene Unternehmen und IBM Business Partner sowie deren Subunternehmer. + +(2) Der Lizenznehmer willigt ein, dass IBM + +(a) Kontaktinformationen zum Zwecke der Durchführung und Förderung der Geschäftsbeziehung, einschließlich der Bereitstellung von Unterstützungsleistungen, und zur Vermarktung der Produkte und Services der IBM Unternehmen (der "Verwendungszweck") zwischen Lizenznehmer und den IBM Unternehmen verarbeitet und nutzt; und + +(b) Kontaktinformationen im Rahmen des Verwendungszwecks den IBM Unternehmen zugänglich macht und die Kontaktinformationen durch diese verarbeitet und genutzt werden können. + +(3) IBM wird in diesem Zusammenhang sämtliche Kontaktinformationen im Rahmen der anwendbaren Vorschriften zum Datenschutz und zur elektronischen Kommunikation und nur im Rahmen des Verwendungszwecks verarbeiten und nutzen. + +(4) Sofern aufgrund der Vorschriften zum Datenschutz und zur elektronischen Kommunikation erforderlich, sichert der Lizenznehmer zu, die vorherige Zustimmung der Kontaktperson eingeholt zu haben bzw. einzuholen und diese entsprechend informiert zu haben bzw. zu informieren. Damit stellt der Lizenznehmer sicher, dass die IBM Unternehmen die Kontaktinformationen im Rahmen des Verwendungszwecks verarbeiten und nutzen und mit den Kontaktpersonen, z. B. auch per E-Mail, Kontakt aufnehmen können. + +(5) Der Lizenznehmer stimmt der Übermittlung von Kontaktinformationen in Länder außerhalb des Europäischen Wirtschaftsraums (EWR) unter der Maßgabe zu, dass eine solche Übermittlung nur im Rahmen einer von der zuständigen Datenschutzbehörde freigegebenen vertraglichen Vereinbarung erfolgt. + +ÖSTERREICH + +8. Gewährleistungsausschluss + +In Österreich (und Deutschland) wird Abschnitt 8 (Gewährleistungsausschluss), einschließlich der Überschrift, vollständig durch die folgenden Regelungen ersetzt, wenn der Lizenznehmer eine Gebühr für das Programm bezahlt hat. + +8. Gewährleistung und Ausschlüsse + +Der Gewährleistungszeitraum beträgt zwölf Monate ab dem Datum der Lieferung. Für Kunden mit laufenden Verfahren wegen Verstößen gegen die Gewährleistungsbestimmungen gilt mindestens die gesetzliche Verjährungsfrist. + +Die Gewährleistung für ein IBM Programm umfasst die Funktionalität des Programms bei normalem Gebrauch und die Übereinstimmung des Programms mit den geltenden Spezifikationen. + +IBM gewährleistet, dass das Programm bei Nutzung in der angegebenen Betriebsumgebung den Spezifikationen entspricht. IBM gewährleistet keinen ununterbrochenen oder fehlerfreien Betrieb des Programms oder die Korrektur aller Programmfehler. Für die Ergebnisse der Nutzung des Programms ist der Lizenznehmer selbst verantwortlich. + +Die Gewährleistung gilt nur für den unveränderten Teil des Programms. + +Wenn das Programm innerhalb des Gewährleistungszeitraums nicht wie zugesichert funktioniert und das Problem mithilfe der bereitgestellten Informationen nicht behoben werden kann, ist der Lizenznehmer berechtigt, das Programm bei der Stelle zurückzugeben, von der er das Programm bezogen hat, und sich den gezahlten Betrag zurückerstatten zu lassen. Wenn der Lizenznehmer das Programm heruntergeladen hat, kann er sich an die Stelle wenden, von der er das Programm bezogen hat, um die Rückerstattung zu erhalten. + +Vorbehaltlich anderslautender gesetzlicher Bestimmungen ist dies die einzige Verpflichtung von IBM gegenüber dem Lizenznehmer. + +10. Haftungsbegrenzung + +Der folgende Text wird hinzugefügt: + +Die folgenden Beschränkungen und Ausschlüsse in Bezug auf die Haftung von IBM entfallen bei Schäden, die durch grobe Fahrlässigkeit oder Vorsatz verursacht werden. + +10.1 Fälle, in denen IBM haftbar gemacht werden kann + +Der folgende Text ersetzt den ersten Satz im ersten Absatz: + +Soweit IBM gegenüber dem Lizenznehmer aufgrund der Verpflichtungen aus dieser Vereinbarung schadenersatzpflichtig ist, hat er Anspruch auf Entschädigung durch IBM. + +Im zweiten Satz des ersten Absatzes wird der in Klammern stehende Ausdruck vollständig gelöscht: + +"(einschließlich Vertragsverletzung, Fahrlässigkeit, unrichtiger Angaben oder anderer Ansprüche aus dem Vertrag oder aufgrund unerlaubter Handlungen)" + +10.2 Fälle, in denen IBM nicht haftbar ist + +Der folgende Text ersetzt Abschnitt 10.2b: + +b. mittelbare Schäden oder Folgeschäden; oder + +DEUTSCHLAND + +8. Gewährleistungsausschluss + +Für Abschnitt 8 (Gewährleistungsausschluss) gelten dieselben Änderungen wie für ÖSTERREICH. + +10. Haftungsbegrenzung + +Abschnitt 10 (Haftungsbegrenzung) wird durch den folgenden Text vollständig ersetzt: + +a. IBM haftet für 1) Schäden, die durch Verletzung einer mit dem Abschluss des Vertrags übernommenen Garantie entstanden sind; 2) für Schäden bei Verletzungen von Leben, Körper oder Gesundheit; sowie 3) für Schäden, die IBM vorsätzlich oder grob fahrlässig verursacht hat, unbeschränkt. + +b. Bei leicht fahrlässiger Schadensverursachung haftet IBM, gleich aus welchem Rechtsgrund (einschließlich Ansprüchen aus Vertragsverletzung sowie unerlaubter Handlung), pro Schadensfall bis zu einem Höchstbetrag von EUR 500.000 (fünfhunderttausend Euro) oder bis zur Höhe des Preises (maximal zwölf Monatsgebühren, wenn die Gebühren für das Programm nach einer festen Laufzeit berechnet werden) für das schadensverursachende Programm. Dies umfasst auch den Ersatz vergeblicher Aufwendungen. Mehrere Pflichtverletzungen, die zusammen im Wesentlichen denselben Schaden verursachen oder zu ihm beitragen, werden als eine Pflichtverletzung behandelt. + +c. IBM haftet bei leicht fahrlässigem Verhalten nicht für mittelbare Schäden oder Folgeschäden, selbst wenn IBM über die Möglichkeit solcher Schäden informiert wurde. Dies umfasst auch den Ersatz vergeblicher Aufwendungen, sofern es sich hierbei um mittelbare oder Folgeschäden handelt. + +d. Im Falle des Verzugs erstattet IBM dem Lizenznehmer den durch den Verzug nachweislich entstandenen Schaden im Rahmen der Abschnitte 10.a und 10.b. + +13. Allgemeines + +Der folgende Text ersetzt die Bedingungen in Abschnitt 13.g: + +g. Alle Ansprüche aus dieser Vereinbarung unterliegen einer dreijährigen Verjährungsfrist, soweit in Abschnitt 8 (Gewährleistungsausschluss) dieser Vereinbarung nicht abweichend geregelt. + +Der folgende Text ersetzt die Bedingungen in Abschnitt 13.i: + +i. Aus dieser Vereinbarung ergibt sich kein Recht auf Klage oder Klagegegenstand für Dritte, und IBM ist nicht haftbar für Ansprüche Dritter gegen den Lizenznehmer, die nicht in Abschnitt 10 (Haftungsbegrenzung) für i) Personenschäden (einschließlich Tod) oder ii) Schäden an Immobilien und beweglichen Sachen aufgeführt sind, für die IBM (in beiden Fällen) nach den gesetzlichen Bestimmungen haftbar ist. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_el b/charts/mq-devserver/LICENSE_locale/LICENSE_el new file mode 100644 index 0000000..79c356a --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_el @@ -0,0 +1,280 @@ +ÐËÇÑÏÖÏÑÉÅÓ ÃÉÁ ÔÇÍ ÁÄÅÉÁ ×ÑÇÓÇÓ + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôçí ðáñáêÜôù ëßóôá ðáñá÷ùñïýíôáé ìå Üäåéá ÷ñÞóçòç âÜóåé ôùí áêüëïõèùí üñùí êáé ðñïûðïèÝóåùí ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò, åðéðëÝïí ôùí üñùí Üäåéáò ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ôïõò ïðïßïõò áðïäÝ÷èçêáí ðñïçãïõìÝíùò ï ÐåëÜôçò êáé ç IBM. ÅÜí ï ÐåëÜôçò äåí Ý÷åé áðïäå÷èåß ðñïçãïõìÝíùò ôïõò üñïõò Üäåéáò ÷ñÞóçò ðïõ äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò, ôüôå ç éó÷ýåé ç ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ãéá ÐñïãñÜììáôá ÷ùñßò Åããýçóç (Z125-5589-05). + +¼íïìá ÐñïãñÜììáôïò (Áñéèìüò ÐñïãñÜììáôïò): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Ïé áêüëïõèïé âáóéêïß üñïé äéÝðïõí ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. + +ÐñïãñÜììáôá ÄÝóìçò + +Ôï Ðñüãñáììá äéáôßèåôáé ìå Üäåéá ÷ñÞóçò ùò ðáêÝôï ðïëëáðëþí ðñïúüíôùí ðïõ áðïôåëåßôáé áðü ôç ÄÝóìç ÐñïãñáììÜôùí ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åãêáôáóôÞóåé êáé íá ÷ñçóéìïðïéåß ôá ÐñïãñÜììáôá ôçò åí ëüãù ÄÝóìçò ÐñïãñáììÜôùí åíôüò ôùí ïñßùí ðïõ ôßèåíôáé óôéò Áðïäåßîåéò Äéêáéþìáôïò (Proof of Entitlement) ãéá ôï Ðñüãñáììá êáé üðùò ïñßæåôáé óôï ðáñüí Ýããñáöï Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí Ý÷åé åîïõóéïäüôçóç ãéá ôç ìåôáâßâáóç Þ ìåôáðþëçóç ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÷ùñéóôÜ áðü ôï ðáêÝôï ðïëëáðëþí ðñïúüíôùí. ¸íá Ðñüãñáììá ðïõ ðåñéëáìâÜíåôáé óå ÄÝóìç ÐñïãñáììÜôùí ìðïñåß íá óõíïäåýåôáé áðü üñïõò Üäåéáò ÷ñÞóçò êáé ïé åí ëüãù üñïé, åÜí õðÜñ÷ïõí, äéÝðïõí ôç ÷ñÞóç ôïõ åí ëüãù ÐñïãñÜììáôïò ôçò ÄÝóìçò ÐñïãñáììÜôùí áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. Óå ðåñßðôùóç áíôßèåóçò ìåôáîý ôùí üñùí, ïé üñïé ôïõ ðáñüíôïò åããñÜöïõ Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ãéá ôï Ðñüãñáììá ôçò ÄÝóìçò ÐñïãñáììÜôùí. ¼ôáí ôï äéêáßùìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ëÞîåé Þ êáôáããåëèåß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá äéáêüøåé ôç ÷ñÞóç êáé íá êáôáóôñÝøåé Þ íá åðéóôñÝøåé Üìåóá üëá ôá áíôßãñáöá ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí óôï ìÝñïò áðü ôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáöüñôùóå (download) ôá ÐñïãñÜììáôá ôçò ÄÝóìçò ÐñïãñáììÜôùí, èá ðñÝðåé íá åðéêïéíùíÞóåé ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èÝëåé íá ôïõ ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôùí ÐñïãñáììÜôùí ôçò ÄÝóìçò ÐñïãñáììÜôùí ãéá ÷ñÞóç ðÝñáí ôùí ïñßùí ðïõ êáèïñßæïíôáé áíùôÝñù, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå Ýíáí Åêðñüóùðï ÐùëÞóåùí ôçò IBM Þ ìå ôï ìÝñïò áðü ôï ïðïßï áðÝêôçóå ôï Ðñüãñáììá, þóôå íá ôïõ ÷ïñçãçèåß ç áðáéôïýìåíç Üäåéá ÷ñÞóçò. + +Ôá ÐñïãñÜììáôá ðïõ ðåñéëáìâÜíïíôáé óôç ÄÝóìç ÐñïãñáììÜôùí ãéá ôá ïðïßá ÷ïñçãåßôáé Üäåéá ÷ñÞóçò ìå ôï Ðñüãñáììá åßíáé ôá åîÞò: +IBM MQ V9.0.3 + +×ñÞóç ìüíï áðü Õðåõèýíïõò ÁíÜðôõîçò + +ÅÜí ôï Ðñüãñáììá ðñïóäéïñßæåôáé ùò Ðñüãñáììá ðïõ ðñïïñßæåôáé ãéá "Õðåõèýíïõò ÁíÜðôõîçò" (Developers), ôï Ðñüãñáììá ìðïñåß íá ÷ñçóéìïðïéçèåß ìüíï óôá ðëáßóéá ôïõ ðåñéâÜëëïíôïò åóùôåñéêÞò áíÜðôõîçò êáé äéåíÝñãåéáò äïêéìþí óå åðßðåäï ìïíÜäáò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óå ìéá ìç÷áíÞ áíÜðôõîçò. Ìå ôïí üñï ìç÷áíÞ áíÜðôõîçò (developer machine) íïåßôáé Ýíá öõóéêü Þ åéêïíéêü ðåñéâÜëëïí åðéöÜíåéáò åñãáóßáò óôï ïðïßï åêôåëïýíôáé Ýíá êýñéï ëåéôïõñãéêü óýóôçìá êáé ôï Ðñüãñáììá, üðïõ ôï åí ëüãù ëåéôïõñãéêü óýóôçìá êáé ôï Ðñüãñáììá äåí èá åßíáé ðñïóâÜóéìá êáé äåí èá ÷ñçóéìïðïéïýíôáé áðü ðåñéóóüôåñïõò áðü Ýíáí êáèïñéóìÝíïõò õðåõèýíïõò áíÜðôõîçò (developers). Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ôï Ðñüãñáììá ãéá ôçí åðåîåñãáóßá öïñôßùí åñãáóßáò ôïõ ðåñéâÜëëïíôïò ðáñáãùãÞò, ôçí ðñïóïìïßùóç öïñôßùí åñãáóßáò ôïõ ðåñéâÜëëïíôïò ðáñáãùãÞò Þ ôç äïêéìÞ ôçò åðåêôáóéìüôçôáò (scalability) ïðïéïõäÞðïôå êþäéêá, åöáñìïãÞò Þ óõóôÞìáôïò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí åßíáé åîïõóéïäïôçìÝíïò íá ÷ñçóéìïðïéåß ïðïéïäÞðïôå ôìÞìá ôïõ ÐñïãñÜììáôïò ãéá ïðïéïíäÞðïôå Üëëï óêïðü ÷ùñßò íá Ý÷åé áðïêôÞóåé ôá áðáéôïýìåíá äéêáéþìáôá ÷ñÞóçò óå ðåñéâÜëëïí ðáñáãùãÞò. + +ËåéôïõñãéêÜ ÔìÞìáôá ðïõ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôùí Áðáéôïýìåíùí ÄéêáéùìÜôùí ×ñÞóçò + +ÊáôÜ ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôçí åãêáôÜóôáóç Þ ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, äåí ëáìâÜíåôáé õðüøç ç åãêáôÜóôáóç Þ ÷ñÞóç ôùí áêüëïõèùí ëåéôïõñãéêþí ôìçìÜôùí ôïõ ÐñïãñÜììáôïò. Ìå Üëëá ëüãéá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá åãêáèéóôÜ êáé íá ÷ñçóéìïðïéåß ôá áêüëïõèá ëåéôïõñãéêÜ ôìÞìáôá ôïõ ÐñïãñÜììáôïò, âÜóåé ôùí üñùí ôçò Üäåéáò ÷ñÞóçò, áëëÜ ôá ëåéôïõñãéêÜ ôìÞìáôá áõôÜ äåí ÷ñçóéìïðïéïýíôáé ãéá ôïí ðñïóäéïñéóìü ôïõ áñéèìïý äéêáéùìÜôùí ÷ñÞóçò ðïõ áðáéôïýíôáé ãéá ôï Ðñüãñáììá. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéëáìâÜíåé ïñéóìÝíá ëåéôïõñãéêÜ ôìÞìáôá óå ìïñöÞ ðçãáßïõ êþäéêá ("ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá") êáé Üëëá õëéêÜ ðïõ ðñïóäéïñßæïíôáé ùò ÕëéêÜ ÄåéãìÜôùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéôñÝðåôáé íá áíôéãñÜöåé êáé íá ôñïðïðïéåß ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ÕëéêÜ ÄåéãìÜôùí ìüíï ãéá åóùôåñéêÞ ÷ñÞóç, õðü ôïí üñï üôé ç åí ëüãù ÷ñÞóç ãßíåôáé åíôüò ôùí ïñßùí ôùí äéêáéùìÜôùí ÷ñÞóçò ðïõ ðáñÝ÷ïíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò, õðü ôçí ðñïûðüèåóç üìùò üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé óôçí ôñïðïðïßçóç Þ äéáãñáöÞ ïðïéùíäÞðïôå ðëçñïöïñéþí ðåñß ðíåõìáôéêþí äéêáéùìÜôùí Þ åéäïðïéÞóåùí ðïõ ðåñéÝ÷ïíôáé óôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá Þ óôá ÕëéêÜ ÄåéãìÜôùí. Ç IBM ðáñÝ÷åé ôá ËåéôïõñãéêÜ ÔìÞìáôá Ðçãáßïõ Êþäéêá êáé ôá ÕëéêÜ ÄåéãìÜôùí ÷ùñßò õðï÷ñÝùóç õðïóôÞñéîçò êáé "ÙÓ Å×ÏÕÍ", ×ÙÑÉÓ ÊÁÍÅÍÏÓ ÅÉÄÏÕÓ ÅÃÃÕÇÓÇ, ÑÇÔÇ ¹ ÓÉÙÐÇÑÇ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÇÓ ÔÇÓ ÅÃÃÕÇÓÇÓ ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ¹ ÌÇ ÐÁÑÅÌÂÁÓÇÓ ÊÁÉ ÔÙÍ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ ÐÑÏÛÐÏÈÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ ÊÁÉ ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +ÄéåèíÞò Óýìâáóç ¶äåéáò ×ñÞóçò ãéá ÐñïãñÜììáôá ÷ùñßò Åããýçóç + +ÌÝñïò 1 - Ãåíéêïß ¼ñïé + +Ï ÄÉÊÁÉÏÕ×ÏÓ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÁÐÏÄÅ×ÅÔÁÉ ÔÏÕÓ ÏÑÏÕÓ ÔÇÓ ÐÁÑÏÕÓÁÓ ÓÕÌÂÁÓÇÓ ÁÕÔÏÌÁÔÙÓ ÔÇ ÓÔÉÃÌÇ ÐÏÕ ÐÑÏÂÁÉÍÅÉ ÓÅ ÌÅÔÁÖÏÑÔÙÓÇ (DOWNLOAD), ÅÃÊÁÔÁÓÔÁÓÇ, ÁÍÔÉÃÑÁÖÇ, ÐÑÏÓÐÅËÁÓÇ, ÐÁÔÇÌÁ ÓÅ ÊÏÕÌÐÉ "ÁÐÏÄÏ×Ç" ¹ "ÁÐÏÄÅ×ÏÌÁÉ" (ACCEPT), ¹ ÊÁÔÁ ÁËËÏÍ ÔÑÏÐÏ ×ÑÇÓÇ ÔÏÕ ÐÑÏÃÑÁÌÌÁÔÏÓ. ÅÁÍ ÁÐÏÄÅ×ÅÓÔÅ ÁÕÔÏÕÓ ÔÏÕÓ ÏÑÏÕÓ ÅÎ ÏÍÏÌÁÔÏÓ ÔÏÕ ÄÉÊÁÉÏÕ×ÏÕ ÁÄÅÉÁÓ ×ÑÇÓÇÓ, ÄÇËÙÍÅÔÅ ÊÁÉ ÅÃÃÕÁÓÔÅ ÏÔÉ ÄÉÁÈÅÔÅÔÅ ÐËÇÑÇ ÅÎÏÕÓÉÏÄÏÔÇÓÇ ÃÉÁ ÔÇ ÄÅÓÌÅÕÓÇ ÔÏÕ ÄÉÊÁÉÏÕ×ÏÕ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÓÅ Ï,ÔÉ ÁÖÏÑÁ ÁÕÔÏÕÓ ÔÏÕÓ ÏÑÏÕÓ. ÅÁÍ ÄÅÍ ÓÕÌÖÙÍÅÉÔÅ ÌÅ ÁÕÔÏÕÓ ÔÏÕÓ ÏÑÏÕÓ: + +* ÌÇ ÌÅÔÁÖÏÑÔÙÓÅÔÅ, ÅÃÊÁÔÁÓÔÇÓÅÔÅ, ÁÍÔÉÃÑÁØÅÔÅ, ÐÑÏÓÐÅËÁÓÅÔÅ, ÐÁÔÇÓÅÔÅ ÓÅ ÊÏÕÌÐÉ "ÁÐÏÄÏ×Ç" ¹ "ÁÐÏÄÅ×ÏÌÁÉ" (ACCEPT), ¹ ×ÑÇÓÉÌÏÐÏÉÇÓÅÔÅ ÔÏ ÐÑÏÃÑÁÌÌÁ, ÊÁÉ + +* ÅÐÉÓÔÑÅØÔÅ ÁÌÅÓÁ ÔÁ Á×ÑÇÓÉÌÏÐÏÉÇÔÁ ÌÅÓÁ ÁÐÏÈÇÊÅÕÓÇÓ ÊÁÉ ÔÇÍ ÔÅÊÌÇÑÉÙÓÇ ÓÔÇ ÍÏÌÉÊÇ ÏÍÔÏÔÇÔÁ ÁÐÏ ÔÇÍ ÏÐÏÉÁ ÔÁ ÁÐÏÊÔÇÓÁÔÅ, ÐÑÏÊÅÉÌÅÍÏÕ ÍÁ ÓÁÓ ÅÐÉÓÔÑÁÖÅÉ ÔÏ ÐÏÓÏ ÐÏÕ ÊÁÔÁÂÁËÁÔÅ. ÅÁÍ ÌÅÔÁÖÏÑÔÙÓÁÔÅ (DOWNLOAD) ÔÏ ÐÑÏÃÑÁÌÌÁ ÁÐÏ ÔÏ ÄÉÁÄÉÊÔÕÏ, ÊÁÔÁÓÔÑÅØÔÅ ÏËÁ ÔÁ ÁÍÔÉÃÑÁÖÁ ÔÏÕ ÐÑÏÃÑÁÌÌÁÔÏÓ. + +1. Ïñéóìïß + +"ÅîïõóéïäïôçìÝíç ×ñÞóç" (Authorized Use) - ôï êáèïñéóìÝíï åðßðåäï óôï ïðïßï ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé åîïõóéïäïôçìÝíïò íá åêôåëåß Þ íá ëåéôïõñãåß ôï Ðñüãñáììá. Ôï åí ëüãù åðßðåäï ìðïñåß íá ìåôñÜôáé âÜóåé ôïõ áñéèìïý ÷ñçóôþí, óå åêáôïììýñéá ìïíÜäåò õðçñåóßáò (Millions of Service Units - "MSU"), óå ìïíÜäåò áîßáò åðåîåñãáóôÞ (Processor Value Units - "PVU") Þ ìðïñåß íá åßíáé ïðïéïäÞðïôå Üëëï åðßðåäï ÷ñÞóçò ðïõ êáèïñßæåôáé áðü ôçí IBM. + +"IBM" - International Business Machines Corporation Þ ìßá áðü ôéò èõãáôñéêÝò ôçò. + +"Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò" (License Information - "LI") - Ýíá Ýããñáöï ðïõ ðáñÝ÷åé ðëçñïöïñßåò êáé ôõ÷üí ðñüóèåôïõò üñïõò ðïõ áöïñïýí óå Ýíá óõãêåêñéìÝíï Ðñüãñáììá. Ïé Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò ôïõ ÐñïãñÜììáôïò åßíáé äéáèÝóéìåò óôç äéåýèõíóç www.ibm.com/software/sla. Ìðïñåßôå åðßóçò íá âñåßôå ôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò óôïí êáôÜëïãï ôïõ ÐñïãñÜììáôïò, ìå ôç ÷ñÞóç ìéáò åíôïëÞò ôïõ óõóôÞìáôïò Þ ùò öõëëÜäéï ðïõ óõíïäåýåé ôï Ðñüãñáììá. + +"Ðñüãñáììá" (Program) - ôá áêüëïõèá, óõìðåñéëáìâáíïìÝíïõ ôïõ ðñùôïôýðïõ êáé üëùí ôùí áíôéãñÜöùí Þ ìåñéêþí áíôéãñÜöùí: 1) åíôïëÝò êáé äåäïìÝíá áíáãíþóéìá áðü ìç÷áíÞ, 2) ëåéôïõñãéêÜ ôìÞìáôá (components), áñ÷åßá êáé åíüôçôåò (modules), 3) ïðôéêïáêïõóôéêü ðåñéå÷üìåíï (ð.÷. åéêüíåò, êåßìåíï, ç÷ïãñáöÞóåéò Þ öùôïãñáößåò) êáé 4) ó÷åôéêÜ õëéêÜ êáôï÷õñùìÝíá ìå Üäåéá ÷ñÞóçò (ð.÷. êëåéäéÜ êáé ôåêìçñßùóç). + +2. ÄïìÞ ôçò Óýìâáóçò + +Ç ðáñïýóá Óýìâáóç ðåñéëáìâÜíåé ôï ÌÝñïò 1 - Ãåíéêïß ¼ñïé, ôï ÌÝñïò 2 - ¼ñïé ðïõ Åìðßðôïõí óôï Äßêáéï êÜèå ×þñáò (åÜí õðÜñ÷ïõí) êáé ôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò êáé áðïôåëåß ôçí ðëÞñç óõìöùíßá ìåôáîý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôçò IBM áíáöïñéêÜ ìå ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò. Ç ðáñïýóá Óýìâáóç áíôéêáèéóôÜ ïðïéáäÞðïôå ðñïçãïýìåíç ðñïöïñéêÞ Þ Ýããñáöç åðéêïéíùíßá ìåôáîý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôçò IBM áíáöïñéêÜ ìå ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Ïé üñïé ôïõ ÌÝñïõò 2 åíäÝ÷åôáé íá áíôéêáèéóôïýí Þ íá ôñïðïðïéïýí ôïõò üñïõò ôïõ ÌÝñïõò 1. Óôï âáèìü ðïõ õðÜñ÷åé ïðïéáäÞðïôå áíôßèåóç ìåôáîý ôïõò, ïé üñïé ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò êáôéó÷ýïõí ôùí üñùí ôùí äýï Ìåñþí (1 êáé 2). + +3. ×ïñÞãçóç ¶äåéáò ×ñÞóçò + +Ôï Ðñüãñáììá áíÞêåé óôçí IBM Þ óå ðñïìçèåõôÞ ôçò IBM êáé ôá ðíåõìáôéêÜ äéêáéþìáôá åðß ôïõ ÐñïãñÜììáôïò åßíáé êáôï÷õñùìÝíá. Ôï Ðñüãñáììá ðáñá÷ùñåßôáé ìå Üäåéá ÷ñÞóçò, äåí ðùëåßôáé. + +Ç IBM ÷ïñçãåß óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ìç áðïêëåéóôéêÞ Üäåéá ãéá 1) ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò Ýùò ôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ðïõ êáèïñßæåôáé óôï ôéìïëüãéï, 2) ôç äçìéïõñãßá êáé åãêáôÜóôáóç áíôéãñÜöùí ãéá ôçí õðïóôÞñéîç ôçò åí ëüãù ÅîïõóéïäïôçìÝíçò ×ñÞóçò êáé 3) ôç äçìéïõñãßá åöåäñéêïý ("backup") áíôéãñÜöïõ, üëá ôá áíùôÝñù õðü ôçí ðñïûðüèåóç üôé éó÷ýïõí ôá åîÞò: + +á. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôï Ðñüãñáììá ìå íüìéìï ôñüðï êáé óõììïñöþíåôáé ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò + +â. ôï åöåäñéêü áíôßãñáöï äåí ÷ñçóéìïðïéåßôáé ðáñÜ ìüíï óôéò ðåñéðôþóåéò üðïõ äåí åßíáé äõíáôÞ ç åêôÝëåóç ôïõ ÐñïãñÜììáôïò ãéá ôï ïðïßï äçìéïõñãÞèçêå åöåäñéêü áíôßãñáöï + +ã. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áíáðáñÜãåé êÜèå óçìåßùóç ðåñß ðíåõìáôéêþí äéêáéùìÜôùí, êáèþò êáé êÜèå Üëëç Ýíäåéîç ó÷åôéêÜ ìå ôçí éäéïêôçóßá, óå êÜèå áíôßãñáöï Þ ìåñéêü áíôßãñáöï ôïõ ÐñïãñÜììáôïò + +ä. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîáóöáëßæåé üôé ïðïéïóäÞðïôå ÷ñçóéìïðïéåß ôï Ðñüãñáììá (åßôå ôïðéêÜ åßôå åî áðïóôÜóåùò) 1) ôï ðñÜôôåé ìüíï åî ïíüìáôïò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé 2) óõììïñöþíåôáé ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò + +å. ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí ðñïâáßíåé 1) óôç ÷ñÞóç, áíôéãñáöÞ, ôñïðïðïßçóç Þ äéáíïìÞ ôïõ ÐñïãñÜììáôïò, ðáñÜ ìüíï óôï âáèìü ðïõ ñçôþò åðéôñÝðåôáé óôçí ðáñïýóá Óýìâáóç, 2) óôçí áíôßóôñïöç óõìâïëïìåôÜöñáóç (reverse assembling), áíôßóôñïöç ìåôáãëþôôéóç (reverse compilation) Þ êáôÜ Üëëïí ôñüðï ìåôÜöñáóç Þ áðïóõìðßëçóç (reverse engineering) ôïõ ÐñïãñÜììáôïò, ðáñÜ ìüíï óôï âáèìü ðïõ ñçôþò åðéôñÝðåôáé áðü ôï íüìï ÷ùñßò íá õðÜñ÷åé ç äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò áðü áõôü ôï äéêáßùìá, 3) óôç ÷ñÞóç ôùí ëåéôïõñãéêþí ôìçìÜôùí, áñ÷åßùí, åíïôÞôùí, ïðôéêïáêïõóôéêïý ðåñéå÷ïìÝíïõ Þ ó÷åôéêþí êáôï÷õñùìÝíùí ìå Üäåéá ÷ñÞóçò õëéêþí ôïõ ÐñïãñÜììáôïò ÷ùñéóôÜ áðü ôï åí ëüãù Ðñüãñáììá Þ 4) óôçí åíïéêßáóç Þ åêìßóèùóç ôïõ ÐñïãñÜììáôïò Þ óôçí ðáñá÷þñçóç ðåñáéôÝñù áäåéþí ÷ñÞóçò (sublicense) ôïõ ÐñïãñÜììáôïò óå ôñßôïõò, êáé + +óô. åÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé áõôü ôï Ðñüãñáììá ùò Õðïóôçñéêôéêü Ðñüãñáììá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ÷ñçóéìïðïéåß áõôü ôï Ðñüãñáììá ìüíï ãéá ôçí õðïóôÞñéîç ôïõ Êýñéïõ ÐñïãñÜììáôïò êáé ç åê ìÝñïõò ôïõ ÷ñÞóç ôïõ ÐñïãñÜììáôïò èá õðüêåéôáé óå ïðïéïõóäÞðïôå ðåñéïñéóìïýò ôßèåíôáé óôçí Üäåéá ÷ñÞóçò ôïõ Êýñéïõ ÐñïãñÜììáôïò Þ, åÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïêôÞóåé áõôü ôï ðñüãñáììá ùò Êýñéï Ðñüãñáììá, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ÷ñçóéìïðïéåß üëá ôá ÕðïóôçñéêôéêÜ ÐñïãñÜììáôá ìüíï ãéá ôçí õðïóôÞñéîç áõôïý ôïõ ÐñïãñÜììáôïò êáé ç åê ìÝñïõò ôïõ ÷ñÞóç ôùí åí ëüãù ÐñïãñáììÜôùí èá õðüêåéôáé óå ïðïéïõóäÞðïôå ðåñéïñéóìïýò ôßèåíôáé óôçí ðáñïýóá Óýìâáóç. Ãéá ôïõ óêïðïýò ôïõ ðáñüíôïò åäáößïõ "óô", "Õðïóôçñéêôéêü Ðñüãñáììá" (Supporting Program) åßíáé Ýíá Ðñüãñáììá ðïõ áðïôåëåß ìÝñïò Üëëïõ ÐñïãñÜììáôïò ôçò IBM ("Êýñéï Ðñüãñáììá") êáé ôï ïðïßï ðñïóäéïñßæåôáé ùò Õðïóôçñéêôéêü Ðñüãñáììá óôéò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóçò ôïõ Êýñéïõ ÐñïãñÜììáôïò. (Ãéá ôçí áðüêôçóç ìéáò ÷ùñéóôÞò Üäåéáò ÷ñÞóçò ãéá Ýíá Õðïóôçñéêôéêü Ðñüãñáììá ÷ùñßò íá éó÷ýïõí áõôïß ïé ðåñéïñéóìïß, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò èá ðñÝðåé íá áðåõèõíèåß óôç íïìéêÞ ïíôüôçôá áðü ôçí ïðïßá áðÝêôçóå ôï Õðïóôçñéêôéêü Ðñüãñáììá.) + +Ç ðáñïýóá Üäåéá ÷ñÞóçò éó÷ýåé ãéá êÜèå áíôßãñáöï ôïõ ÐñïãñÜììáôïò ðïõ äçìéïõñãåßôáé áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +3.1 ÐñïãñÜììáôá ÁíôéêáôÜóôáóçò, Áíáâáèìßóåéò, Äéïñèþóåéò êáé Åðéäéïñèþóåéò + +3.1.1 ÐñïãñÜììáôá ÁíôéêáôÜóôáóçò (Trade-ups) + +ÅÜí ôï Ðñüãñáììá áíôéêáôáóôáèåß áðü Ýíá Ðñüãñáììá ÁíôéêáôÜóôáóçò (Trade-up Program), ç Üäåéá ÷ñÞóçò ôïõ áíôéêáôáóôáèÝíôïò ÐñïãñÜììáôïò ôåñìáôßæåôáé Üìåóá. + +3.1.2 Áíáâáèìßóåéò, Äéïñèþóåéò êáé Åðéäéïñèþóåéò + +¼ôáí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ëÜâåé ìéá áíáâÜèìéóç (update), äéüñèùóç (fix) Þ åðéäéüñèùóç (patch) åíüò ÐñïãñÜììáôïò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðïäÝ÷åôáé ïðïéïõóäÞðïôå ðñüóèåôïõò Þ äéáöïñåôéêïýò üñïõò ðïõ éó÷ýïõí ãéá ôçí åí ëüãù áíáâÜèìéóç, äéüñèùóç Þ åðéäéüñèùóç êáé êáèïñßæïíôáé óôéò áíôßóôïé÷åò Ðëçñïöïñßåò ãéá ôçí ¶äåéá ×ñÞóç. ÅÜí äåí ðáñÝ÷ïíôáé ðñüóèåôïé Þ äéáöïñåôéêïß üñïé, ôüôå ç áíáâÜèìéóç, äéüñèùóç Þ åðéäéüñèùóç õðüêåéôáé áðïêëåéóôéêÜ óôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. ÅÜí ôï Ðñüãñáììá áíôéêáôáóôáèåß áðü ìéá áíáâÜèìéóç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá ôåñìáôßóåé Üìåóá ôç ÷ñÞóç ôïõ áíôéêáôáóôáèÝíôïò ÐñïãñÜììáôïò. + +3.2 ¶äåéåò ×ñÞóçò ÊáèïñéóìÝíçò Ðåñéüäïõ + +ÅÜí ç IBM ÷ïñçãÞóåé Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò ãéá êáèïñéóìÝíç ðåñßïäï, ç Üäåéá ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ôåñìáôßæåôáé êáôÜ ôç ëÞîç ôçò êáèïñéóìÝíçò ðåñéüäïõ, åêôüò åÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáé ç IBM óõìöùíÞóïõí óôçí áíáíÝùóÞ ôçò. + +3.3 ÓõìâáôéêÞ Ðåñßïäïò êáé Ôåñìáôéóìüò + +Ç ðáñïýóá Óýìâáóç ðáñáìÝíåé óå éó÷ý Ýùò üôïõ ôåñìáôéóôåß. + +Ç IBM ìðïñåß íá ôåñìáôßóåé ôçí Üäåéá ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óå ðåñßðôùóç ìç óõììüñöùóçò ôïõ ôåëåõôáßïõ ìå ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. + +ÅÜí ç Üäåéá ÷ñÞóçò ôåñìáôéóôåß ãéá ïðïéïíäÞðïôå ëüãï áðü ïðïéïäÞðïôå áðü ôá äýï ìÝñç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá äéáêüøåé Üìåóá ôç ÷ñÞóç ôïõ ÐñïãñÜììáôïò êáé íá êáôáóôñÝøåé üëá ôá áíôßãñáöá ôïõ ÐñïãñÜììáôïò ðïõ Ý÷åé óôçí êáôï÷Þ ôïõ. ÏðïéïéäÞðïôå üñïé ôçò ðáñïýóáò Óýìâáóçò ôùí ïðïßùí ç éó÷ýò ðáñáôåßíåôáé áðü ôç öýóç ôïõò ðÝñáí ôïõ ôåñìáôéóìïý ôçò Óýìâáóçò, ðáñáìÝíïõí óå éó÷ý Ýùò üôïõ åêðëçñùèïýí êáé éó÷ýïõí êáé ãéá ôïõò áíôßóôïé÷ïõò äéáäü÷ïõò êáé åêäï÷åßò êÜèå åíüò áðü ôá äýï óõìâáëëüìåíá ìÝñç. + +4. ×ñåþóåéò + +Ïé ÷ñåþóåéò, åÜí õðÜñ÷ïõí, âáóßæïíôáé óôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ðïõ áðïêôÞèçêå, ôï ïðïßï êáèïñßæåôáé óôï ôéìïëüãéï. Ç IBM äåí åêäßäåé ðéóôùôéêÜ ôéìïëüãéá ïýôå åðéóôñÝöåé ÷ñÞìáôá ãéá ðïóÜ ðïõ Ý÷ïõí Þäç êáôáóôåß áðáéôçôÜ Þ Ý÷ïõí êáôáâëçèåß, åêôüò åÜí êáèïñßæåôáé äéáöïñåôéêÜ óå Üëëï óçìåßï ôçò ðáñïýóáò Óýìâáóçò. + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéèõìåß íá áõîÞóåé ôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ, èá ðñÝðåé íá åíçìåñþóåé ôçí IBM Þ êÜðïéïí åîïõóéïäïôçìÝíï ìåôáðùëçôÞ ôçò IBM åê ôùí ðñïôÝñùí êáé íá êáôáâÜëåé ïðïéåóäÞðïôå ó÷åôéêÝò ÷ñåþóåéò. + +5. Öüñïé + +ÅÜí ïðïéáäÞðïôå áñ÷Þ åðéâÜëåé äáóìü, öüñï, åðéâÜñõíóç Þ ÷ñÝùóç åðß ôïõ ÐñïãñÜììáôïò, åêôüò åêåßíùí ðïõ õðïëïãßæïíôáé ìå âÜóç ôï êáèáñü åéóüäçìá ôçò IBM, ôüôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá êáôáâÜëåé ôï áíôßóôïé÷ï ðïóü, üðùò ðñïóäéïñßæåôáé óå ó÷åôéêü ôéìïëüãéï, Þ íá ðñïóêïìßóåé Ýããñáöá áðáëëáãÞò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé õðåýèõíïò ãéá ôçí êáôáâïëÞ ïðïéùíäÞðïôå öüñùí ðñïóùðéêÞò ðåñéïõóßáò ãéá ôï Ðñüãñáììá áðü ôçí çìåñïìçíßá ôçò åê ìÝñïõò ôïõ áðüêôçóçò ôïõ ÐñïãñÜììáôïò. ÅÜí ïðïéáäÞðïôå áñ÷Þ åðéâÜëåé ôåëùíåéáêü äáóìü, öüñï, åðéâÜñõíóç Þ ÷ñÝùóç ãéá ôçí åéóáãùãÞ ôïõ ÐñïãñÜììáôïò óôç ÷þñá Þ ôçí åîáãùãÞ, ìåôáâßâáóç, ðñïóðÝëáóç Þ ÷ñÞóç ôïõ ÐñïãñÜììáôïò åêôüò ôçò ÷þñáò óôçí ïðïßá ÷ïñçãÞèçêå ç Üäåéá ÷ñÞóçò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò, ôüôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß üôé åßíáé õðåýèõíïò ãéá ôçí êáôáâïëÞ, êáé èá êáôáâÜëåé, ïðïéïäÞðïôå ðïóü ðïõ ôïõ åðéâÜëëåôáé. + +6. Åããýçóç ÅðéóôñïöÞò ×ñçìÜôùí + +ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ãéá ïðïéïíäÞðïôå ëüãï äåí åßíáé éêáíïðïéçìÝíïò ìå ôï Ðñüãñáììá êáé åßíáé ï áñ÷éêüò Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò, ôüôå äéêáéïýôáé íá ôåñìáôßóåé ôçí Üäåéá ÷ñÞóçò êáé íá ëÜâåé åðéóôñïöÞ ôïõ ðïóïý ðïõ ôõ÷üí êáôÝâáëå ãéá ôï Ðñüãñáììá, õðü ôçí ðñïûðüèåóç üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åðéóôñÝøåé ôï Ðñüãñáììá óôç íïìéêÞ ïíôüôçôá áðü ôçí ïðïßá ôï áðÝêôçóå åíôüò 30 çìåñþí áðü ôçí çìåñïìçíßá Ýêäïóçò ôïõ ôéìïëïãßïõ. Áí ç Üäåéá ÷ñÞóçò åßíáé êáèïñéóìÝíçò ðåñéüäïõ êáé õðüêåéôáé óå áíáíÝùóç, ôüôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äéêáéïýôáé åðéóôñïöÞ ÷ñçìÜôùí ìüíï üôáí ôï Ðñüãñáììá åðéóôñáöåß åíôüò ôùí ðñþôùí 30 çìåñþí ôçò áñ÷éêÞò ðåñéüäïõ. ÅÜí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åß÷å ìåôáöïñôþóåé ôï Ðñüãñáììá áðü ôï Äéáäßêôõï, ôüôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñÝðåé íá åðéêïéíùíÞóåé ìå ôç íïìéêÞ ïíôüôçôá áðü ôçí ïðïßá áðÝêôçóå ôï Ðñüãñáììá ãéá ïäçãßåò ó÷åôéêÜ ìå ôï ðþò èá ôïõ åðéóôñáöïýí ôá ÷ñÞìáôá ðïõ êáôÝâáëå. + +7. Ìåôáâßâáóç ÐñïãñÜììáôïò + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìðïñåß íá ìåôáâéâÜóåé ôï Ðñüãñáììá êáé üëá ôá äéêáéþìáôá êáé ôéò õðï÷ñåþóåéò ôïõ ðïõ ðñïâëÝðïíôáé óôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò, óå Üëëï ìÝñïò åöüóïí ôï Üëëï ìÝñïò áðïäå÷èåß ôïõò üñïõò ôçò ðáñïýóáò Óýìâáóçò. ÅÜí ç Üäåéá ÷ñÞóçò ôåñìáôéóôåß ãéá ïðïéïíäÞðïôå ëüãï áðü ïðïéïäÞðïôå áðü ôá äýï ìÝñç, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí äéêáéïýôáé íá ìåôáâéâÜóåé ôï Ðñüãñáììá óå Üëëï ìÝñïò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí äéêáéïýôáé íá ìåôáâéâÜóåé ìÝñïò 1) ôïõ ÐñïãñÜììáôïò Þ 2) ôçò ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ ÐñïãñÜììáôïò. ¼ôáí ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìåôáâéâÜóåé ôï Ðñüãñáììá, èá ðñÝðåé åðßóçò íá ìåôáâéâÜóåé Ýíôõðï áíôßãñáöï ôçò ðáñïýóáò Óýìâáóçò, óõìðåñéëáìâáíïìÝíùí êáé ôùí Ðëçñïöïñéþí ãéá ôçí ¶äåéá ×ñÞóçò. ÁìÝóùò ìåôÜ ôçí ïëïêëÞñùóç ôçò ìåôáâßâáóçò, ç Üäåéá ÷ñÞóçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ôåñìáôßæåôáé. + +8. Äåí ÐáñÝ÷ïíôáé ÅããõÞóåéò + +ÐÅÑÁÍ ÔÙÍ ÐÑÏÂËÅÐÏÌÅÍÙÍ ÁÐÏ ÔÏ ÍÏÌÏ ÅÃÃÕÇÓÅÙÍ Ï ÁÐÏÊËÅÉÓÌÏÓ ÔÙÍ ÏÐÏÉÙÍ ÄÅÍ ÅÉÍÁÉ ÄÕÍÁÔÏÓ, Ç IBM ÄÅÍ ÐÁÑÅ×ÅÉ ÅÃÃÕÇÓÅÉÓ ¹ ÕÐÏÓ×ÅÓÅÉÓ, ÑÇÔÅÓ ¹ ÓÉÙÐÇÑÅÓ, ÁÍÁÖÏÑÉÊÁ ÌÅ ÔÏ ÐÑÏÃÑÁÌÌÁ ¹ ÔÇÍ ÕÐÏÓÔÇÑÉÎÇ ÔÏÕ ÐÑÏÃÑÁÌÌÁÔÏÓ, ÅÁÍ ÐÁÑÅ×ÅÔÁÉ, ÓÕÌÐÅÑÉËÁÌÂÁÍÏÌÅÍÙÍ, ÅÍÄÅÉÊÔÉÊÁ ÊÁÉ Ï×É ÐÅÑÉÏÑÉÓÔÉÊÁ, ÏÐÏÉÙÍÄÇÐÏÔÅ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ¹ ÕÐÏÓ×ÅÓÅÙÍ ÅÌÐÏÑÅÕÓÉÌÏÔÇÔÁÓ, ÉÊÁÍÏÐÏÉÇÔÉÊÇÓ ÐÏÉÏÔÇÔÁÓ, ÊÁÔÁËËÇËÏÔÇÔÁÓ ÃÉÁ ÓÕÃÊÅÊÑÉÌÅÍÏÕÓ ÓÊÏÐÏÕÓ KAI ÔÉÔËÏÕ ÊÕÑÉÏÔÇÔÁÓ, ÊÁÉ ÏÐÏÉÁÓÄÇÐÏÔÅ ÅÃÃÕÇÓÇÓ ¹ ÕÐÏÓ×ÅÓÇÓ ÌÇ ÐÁÑÁÂÉÁÓÇÓ ÄÉÊÁÉÙÌÁÔÙÍ ÔÑÉÔÙÍ. + +ÓÅ ÏÑÉÓÌÅÍÅÓ ×ÙÑÅÓ ¹ ÄÉÊÁÉÏÄÏÓÉÅÓ ÄÅÍ ÅÐÉÔÑÅÐÅÔÁÉ Ï ÁÐÏÊËÅÉÓÌÏÓ ÑÇÔÙÍ ¹ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ, ÅÐÏÌÅÍÙÓ, Ï ÁÍÙÔÅÑÙ ÁÐÏÊËÅÉÓÌÏÓ ÅÍÄÅ×ÅÔÁÉ ÍÁ ÌÇÍ ÉÓ×ÕÅÉ ÃÉÁ ÔÏ ÄÉÊÁÉÏÕ×Ï ÁÄÅÉÁÓ ×ÑÇÓÇÓ. ÓÔÇÍ ÐÅÑÉÐÔÙÓÇ ÁÕÔÇ, Ç ÉÓ×ÕÓ ÔÙÍ ÄÉÁÔÁÎÅÙÍ ÔÙÍ ÅÍ ËÏÃÙ ÅÃÃÕÇÓÅÙÍ ÐÅÑÉÏÑÉÆÅÔÁÉ ÓÔÇ ÄÉÁÑÊÅÉÁ ÔÇÓ ÅËÁ×ÉÓÔÇÓ ×ÑÏÍÉÊÇÓ ÐÅÑÉÏÄÏÕ ÐÏÕ ÁÐÁÉÔÅÉÔÁÉ ÁÐÏ ÔÏ ÍÏÌÏ. ÌÅÔÁ ÔÇ ËÇÎÇ ÁÕÔÇÓ ÔÇÓ ÐÅÑÉÏÄÏÕ ÄÅÍ ÉÓ×ÕÅÉ ÊÁÌÉÁ ÅÃÃÕÇÓÇ. ÓÅ ÏÑÉÓÌÅÍÅÓ ×ÙÑÅÓ ¹ ÄÉÊÁÉÏÄÏÓÉÅÓ ÄÅÍ ÅÐÉÔÑÅÐÏÍÔÁÉ ÐÅÑÉÏÑÉÓÌÏÉ ÓÔÇ ÄÉÁÑÊÅÉÁ ÉÓ×ÕÏÓ ÓÉÙÐÇÑÙÍ ÅÃÃÕÇÓÅÙÍ ÊÁÉ, ÅÐÏÌÅÍÙÓ, Ï ÁÍÙÔÅÑÙ ÐÅÑÉÏÑÉÓÌÏÓ ÅÍÄÅ×ÅÔÁÉ ÍÁ ÌÇÍ ÉÓ×ÕÅÉ ÃÉÁ ÔÏ ÄÉÊÁÉÏÕ×Ï ÁÄÅÉÁÓ ×ÑÇÓÇÓ. Ï ÄÉÊÁÉÏÕ×ÏÓ ÁÄÅÉÁÓ ×ÑÇÓÇÓ ÅÍÄÅ×ÅÔÁÉ ÍÁ ÄÉÁÈÅÔÅÉ ÐÅÑÁÉÔÅÑÙ ÄÉÊÁÉÙÌÁÔÁ ÐÏÕ ÄÉÁÖÅÑÏÕÍ ÁÍÁËÏÃÁ ÌÅ ÔÇ ×ÙÑÁ ¹ ÔÇÍ ÉÓ×ÕÏÕÓÁ ÄÉÊÁÉÏÄÏÓÉÁ. + +ÏÉ ÄÇËÙÓÅÉÓ ÁÐÏÐÏÉÇÓÇÓ ÊÁÉ ÏÉ ÅÎÁÉÑÅÓÅÉÓ ÐÏÕ ÏÑÉÆÏÍÔÁÉ ÓÔÏ ÐÁÑÏÍ ÁÑÈÑÏ 8 ÉÓ×ÕÏÕÍ ÅÐÉÓÇÓ ÃÉÁ ÏÐÏÉÏÕÓÄÇÐÏÔÅ ÅÔÁÉÑÅÉÅÓ ÁÍÁÐÔÕÎÇÓ ÐÑÏÃÑÁÌÌÁÔÙÍ ÊÁÉ ÐÑÏÌÇÈÅÕÔÅÓ ÔÇÓ IBM. + +ÏÉ ÊÁÔÁÓÊÅÕÁÓÔÅÓ, ÐÑÏÌÇÈÅÕÔÅÓ ¹ ÅÊÄÏÔÅÓ ÐÑÏÃÑÁÌÌÁÔÙÍ ÌÇ-ÉÂÌ ÌÐÏÑÅÉ ÍÁ ÐÁÑÅ×ÏÕÍ ÄÉÊÅÓ ÔÏÕÓ ÅÃÃÕÇÓÅÉÓ. + +Ç IBM ÄÅÍ ÐÁÑÅ×ÅÉ ÕÐÏÓÔÇÑÉÎÇ ÏÐÏÉÏÕÄÇÐÏÔÅ ÅÉÄÏÕÓ, ÅÊÔÏÓ ÅÁÍ Ç IBM ÊÁÈÏÑÉÓÅÉ ÄÉÁÖÏÑÅÔÉÊÁ. ÓÔÇÍ ÐÅÑÉÐÔÙÓÇ ÁÕÔÇ, ÏÐÏÉÁÄÇÐÏÔÅ ÕÐÏÓÔÇÑÉÎÇ ÐÏÕ ÐÁÑÅ×ÅÔÁÉ ÁÐÏ ÔÇÍ IBM ÕÐÏÊÅÉÔÁÉ ÓÔÉÓ ÄÇËÙÓÅÉÓ ÁÐÏÐÏÉÇÓÇÓ ÊÁÉ ÓÔÉÓ ÅÎÁÉÑÅÓÅÉÓ ÐÏÕ ÏÑÉÆÏÍÔÁÉ ÓÔÏ ÐÁÑÏÍ ÁÑÈÑÏ 8. + +9. ÄåäïìÝíá êáé ÂÜóåéò ÄåäïìÝíùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò + +Ãéá íá åßíáé óå èÝóç íá âïçèÞóåé ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò óôçí áðïìüíùóç ôçò áéôßáò åíüò ðñïâëÞìáôïò ìå ôï Ðñüãñáììá, ç IBM ìðïñåß íá æçôÞóåé áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò 1) íá åðéôñÝøåé óôçí IBM ôçí åî áðïóôÜóåùò ðñüóâáóç óôï óýóôçìá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò Þ 2) íá óôåßëåé ðëçñïöïñßåò Þ äåäïìÝíá óõóôÞìáôïò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óôçí IBM. ¼ìùò, ç IBM äåí åßíáé õðï÷ñåùìÝíç íá ðáñÝ÷åé ôÝôïéá âïÞèåéá, åêôüò åÜí ç IBM êáé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðñïâïýí óôç óýíáøç ÷ùñéóôÞò Ýããñáöçò óýìâáóçò âÜóåé ôçò ïðïßáò ç IBM íá óõìöùíåß íá ðáñÝ÷åé óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò ôÝôïéïõ åßäïõò õðïóôÞñéîç, ç ïðïßá åßíáé åêôüò ôùí õðï÷ñåþóåùí ôçò IBM âÜóåé ôçò ðáñïýóáò Óýìâáóçò. Óå êÜèå ðåñßðôùóç, ç IBM ÷ñçóéìïðïéåß ôéò ðëçñïöïñßåò ãéá óöÜëìáôá êáé ðñïâëÞìáôá ìüíï ãéá ôç âåëôßùóç ôùí ðñïúüíôùí êáé ôùí õðçñåóéþí ôçò êáé ãéá ôçí êáëýôåñç ðáñï÷Þ ôùí ó÷åôéêþí ôçò ðñïóöïñþí õðïóôÞñéîçò. Ãéá ôçí åîõðçñÝôçóç áõôþí ôùí óêïðþí, ç IBM ìðïñåß íá ÷ñçóéìïðïéåß íïìéêÜ ðñüóùðá IBM êáé õðåñãïëÜâïõò ôçò (óõìðåñéëáìâáíïìÝíùí êáé íïìéêþí ðñïóþðùí IBM êáé õðåñãïëÜâùí óå ìßá Þ ðåñéóóüôåñåò ÷þñåò åêôüò ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò Ý÷åé ôçí Ýäñá ôïõ) êáé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí IBM íá ôï ðñÜîåé. + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ðáñáìÝíåé õðåýèõíïò ãéá 1) ïðïéáäÞðïôå äåäïìÝíá êáé ôï ðåñéå÷üìåíï ïðïéáóäÞðïôå âÜóçò äåäïìÝíùí ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáèéóôÜ äéáèÝóéìç óôçí IBM, 2) ôçí åðéëïãÞ êáé åöáñìïãÞ äéáäéêáóéþí êáé åëÝã÷ùí áíáöïñéêÜ ìå ôçí ðñïóðÝëáóç, áóöÜëåéá, êñõðôïãñÜöçóç, ÷ñÞóç êáé ìåôÜäïóç äåäïìÝíùí (óõìðåñéëáìâáíïìÝíùí êáé ðëçñïöïñéþí óôéò ïðïßåò äçëþíåôáé Þ áðü ôéò ïðïßåò ìðïñåß íá ðñïêýøåé ç ôáõôüôçôá óõãêåêñéìÝíùí ðñïóþðùí) êáé 3) ôçí åöåäñéêÞ áðïèÞêåõóç (backup) êáé áðïêáôÜóôáóç ïðïéáóäÞðïôå âÜóçò äåäïìÝíùí êáé ïðïéùíäÞðïôå áðïèçêåõìÝíùí äåäïìÝíùí. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äåí èá áðïóôÝëëåé êáé äåí èá ðáñÝ÷åé óôçí IBM ðñüóâáóç óå ðëçñïöïñßåò óôéò ïðïßåò äçëþíåôáé Þ áðü ôéò ïðïßåò ìðïñåß íá ðñïêýøåé ç ôáõôüôçôá óõãêåêñéìÝíùí ðñïóþðùí, åßôå óå ìïñöÞ äåäïìÝíùí åßôå óå ïðïéáäÞðïôå Üëëç ìïñöÞ, êáé èá öÝñåé ôçí åõèýíç ãéá åýëïãåò äáðÜíåò êáé Üëëá ðïóÜ ìå ôá ïðïßá ìðïñåß íá åðéâáñõíèåß ç ÉÂÌ óå óõíÜñôçóç ìå ôçí åóöáëìÝíç ðáñï÷Þ ôÝôïéùí ðëçñïöïñéþí óôçí IBM Þ ôçí áðþëåéá Þ áðïêÜëõøç ôÝôïéùí ðëçñïöïñéþí áðü ôçí IBM, óõìðåñéëáìâáíïìÝíùí ôùí äáðáíþí ðïõ áðïññÝïõí áðü áîéþóåéò ôñßôùí. + +10. Ðåñéïñéóìüò Åõèýíçò + +Ïé ðåñéïñéóìïß êáé ïé åîáéñÝóåéò ðïõ ïñßæïíôáé óôï ðáñüí ¶ñèñï 10 (Ðåñéïñéóìüò Åõèýíçò) Ý÷ïõí ðëÞñç éó÷ý óôï âáèìü ðïõ äåí áðáãïñåýïíôáé áðü ôï åöáñìïóôÝï äßêáéï ÷ùñßò íá õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò áðü ôá áíôßóôïé÷á äéêáéþìáôá. + +10.1 Óôïé÷åßá ãéá ôá ïðïßá åíäÝ÷åôáé íá öÝñåé åõèýíç ç IBM + +ÅíäÝ÷åôáé íá ðñïêýøïõí ðåñéóôÜóåéò êáôÜ ôéò ïðïßåò, ëüãù áèÝôçóçò óõìâáôéêÞò õðï÷ñÝùóçò åê ìÝñïõò ôçò IBM Þ ëüãù Üëëçò åõèýíçò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äéêáéïýôáé íá ëÜâåé áðïæçìßùóç áðü ôçí IBM. ÁíåîÜñôçôá áðü ôç âÜóç åðß ôçò ïðïßáò ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äéêáéïýôáé íá åãåßñåé áîßùóç áðïæçìßùóçò êáôÜ ôçò IBM (óõìðåñéëáìâáíïìÝíçò ôçò áèÝôçóçò ïõóéùäþí óõìâáôéêþí üñùí, áìÝëåéáò, øåõäïýò äÞëùóçò Þ Üëëçò áîßùóçò ðïõ áðïññÝåé áðü óýìâáóç Þ áäéêïðñáîßá), ç óõíïëéêÞ åõèýíç ôçò IBM ãéá üëåò ôéò áîéþóåéò, óùñåõôéêÜ, ðïõ áðïññÝïõí áðü Þ ó÷åôßæïíôáé ìå êÜèå Ðñüãñáììá Þ êáôÜ Üëëïí ôñüðï ðñïêýðôïõí áðü ôçí ðáñïýóá Óýìâáóç, äåí èá õðåñâáßíåé ôï ðïóü 1) ôçò áðïæçìßùóçò ãéá óùìáôéêÞ âëÜâç (óõìðåñéëáìâáíïìÝíïõ èáíÜôïõ) êáé ôçò áðïæçìßùóçò êéíçôÞò êáé áêßíçôçò áôïìéêÞò ðåñéïõóßáò êáé 2) ïðïéáóäÞðïôå Üëëçò èåôéêÞò Üìåóçò æçìßáò, Ýùò ôï ðïóü ôùí ÷ñåþóåùí (åÜí ôï Ðñüãñáììá õðüêåéôáé óå ÷ñåþóåéò êáèïñéóìÝíçò ðåñéüäïõ, Ýùò ôï ðïóü ôùí ÷ñåþóåùí 12 ìçíþí) ðïõ ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò êáôÝâáëå ãéá ôï Ðñüãñáììá ðïõ áðïôåëåß áíôéêåßìåíï ôçò áîßùóçò. + +Ôï üñéï áõôü éó÷ýåé åðßóçò ãéá ïðïéåóäÞðïôå åôáéñåßåò áíÜðôõîçò ÐñïãñáììÜôùí êáé ðñïìçèåõôÝò ôçò IBM. Åßíáé ç ìÝãéóôç åõèýíç ðïõ öÝñïõí óõëëïãéêÜ ç IBM, ïé åôáéñåßåò áíÜðôõîçò ÐñïãñáììÜôùí ôçò êáé ïé ðñïìçèåõôÝò ôçò. + +10.2 Óôïé÷åßá ãéá ôá ïðïßá äåí öÝñåé åõèýíç ç IBM + +ÓÅ ÊÁÌÉÁ ÐÅÑÉÐÔÙÓÇ ÄÅÍ ÖÅÑÏÕÍ ÅÕÈÕÍÇ Ç IBM, ÏÉ ÐÑÏÌÇÈÅÕÔÅÓ ÔÇÓ ¹ ÏÉ ÅÔÁÉÑÅÉÅÓ ÁÍÁÐÔÕÎÇÓ ÐÑÏÃÑÁÌÌÁÔÙÍ ÌÅ ÔÉÓ ÏÐÏÉÅÓ ÓÕÍÅÑÃÁÆÅÔÁÉ ÃÉÁ ÏÐÏÉÏÄÇÐÏÔÅ ÁÐÏ ÔÁ ÁÊÏËÏÕÈÁ, ÁÊÏÌÁ ÊÁÉ ÁÍ Å×ÏÕÍ ÅÍÇÌÅÑÙÈÅÉ ÃÉÁ ÔÇÍ ÐÉÈÁÍÏÔÇÔÁ ÍÁ ÐÑÏÊÕØÏÕÍ: + +á. ÁÐÙËÅÉÁ ¹ ÖÈÏÑÁ ÄÅÄÏÌÅÍÙÍ + +â. ÅÉÄÉÊÅÓ, ÐÁÑÅÐÏÌÅÍÅÓ ¹ ÅÌÌÅÓÅÓ ÆÇÌÉÅÓ, ÁÐÏÆÇÌÉÙÓÇ ÃÉÁ ÇÈÉÊÇ ÂËÁÂÇ ¹ ÏÐÏÉÅÓÄÇÐÏÔÅ ÏÉÊÏÍÏÌÉÊÅÓ ÁÐÏÈÅÔÉÊÅÓ ÆÇÌÉÅÓ, ¹ + +ã. ÄÉÁÖÕÃÏÍÔÁ ÊÅÑÄÇ, ÁÐÙËÅÉÁ ÅÐÉ×ÅÉÑÇÌÁÔÉÊÙÍ ÄÑÁÓÔÇÑÉÏÔÇÔÙÍ, ÅÓÏÄÙÍ, ¶ÕËÇÓ ÅÌÐÏÑÉÊÇÓ ÁÎÉÁÓ ¹ ÐÑÏÓÄÏÊÙÌÅÍÙÍ ÊÅÑÄÙÍ. + +11. ÅðáëÞèåõóç Óõììüñöùóçò + +Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò ¶ñèñïõ 11 (ÅðáëÞèåõóç Óõììüñöùóçò), ìå ôïí üñï "¼ñïé ÐñïãñáììÜôùí ILAN" íïïýíôáé 1) ç ðáñïýóá Óýìâáóç êáé ïé áíôßóôïé÷åò ôñïðïðïéÞóåéò êáé Ýããñáöá óõíáëëáãþí ðïõ ðáñÝ÷ïíôáé áðü ôçí IBM êáé 2) ïé ðïëéôéêÝò ëïãéóìéêïý (software policies) ôçò IBM, ïé ïðïßåò ðåñéãñÜöïíôáé óôï äéêôõáêü ôüðï IBM Software Policy (www.ibm.com/softwarepolicies), óõìðåñéëáìâáíïìÝíùí, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, ôùí ðïëéôéêþí ðåñß åöåäñéêÞò õðïóôÞñéîçò (backup), ôéìïëüãçóçò ìåéùìÝíçò äõíáìéêüôçôáò (sub-capacity pricing) êáé ìåôÜðôùóçò (migration). + +Ôá äéêáéþìáôá êáé ïé õðï÷ñåþóåéò ðïõ êáèïñßæïíôáé óôï ðáñüí ¶ñèñï 11 ðáñáìÝíïõí óå éó÷ý êáôÜ ôç äéÜñêåéá ôçò ÷ñïíéêÞò ðåñéüäïõ ãéá ôçí ïðïßá Ý÷åé ÷ïñçãçèåß Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò, óõí äýï åðéðëÝïí Ýôç ìåôÜ ôç ëÞîç ôçò åí ëüãù ðåñéüäïõ. + +11.1 Äéáäéêáóßá ÅðáëÞèåõóçò + +Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá äçìéïõñãåß, íá ôçñåß êáé íá ðáñÝ÷åé óôçí IBM êáé ôïõò åëåãêôÝò ôçò áêñéâÞ Ýããñáöá óôïé÷åßá, áðïôåëÝóìáôá åñãáëåßùí ôïõ óõóôÞìáôïò êáé Üëëá äåäïìÝíá ôïõ óõóôÞìáôïò ôá ïðïßá åðáñêïýí ðñïêåéìÝíïõ íá ðáñÜó÷ïõí ôç äõíáôüôçôá åðáëÞèåõóçò, ç ïðïßá èá õðüêåéôáé óå Ýëåã÷ï, üôé ç ÷ñÞóç üëùí ôùí ÐñïãñáììÜôùí åê ìÝñïõò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óõììïñöþíåôáé ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí ILAN, óõìðåñéëáìâáíïìÝíùí, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, üëùí ôùí ó÷åôéêþí üñùí ôçò IBM ðåñß ðñïûðïèÝóåùí ôéìïëüãçóçò êáé ÷ïñÞãçóçò áäåéþí ÷ñÞóçò. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åßíáé õðåýèõíïò 1) íá åîáóöáëßæåé üôé äåí õðåñâáßíåé ôï åðßðåäï ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ êáé 2) íá åîáêïëïõèåß íá óõììïñöþíåôáé ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí ILAN. + +ÌåôÜ áðü åýëïãç åéäïðïßçóç, ç IBM ìðïñåß íá åëÝãîåé ôç óõììüñöùóç ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí ILAN óå üëåò ôéò ôïðïèåóßåò êáé ãéá üëá ôá ðåñéâÜëëïíôá óôá ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ÷ñçóéìïðïéåß (ãéá ïðïéïíäÞðïôå óêïðü) ÐñïãñÜììáôá ðïõ õðüêåéíôáé óôïõò ¼ñïõò ÐñïãñáììÜôùí ILAN. Ç åí ëüãù åðáëÞèåõóç èá äéåîÜãåôáé ìå ôñüðï ðïõ íá åëá÷éóôïðïéåß ôï åíäå÷üìåíï ðñüêëçóçò áíáóôÜôùóçò óôçí åðé÷åßñçóç ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ìðïñåß íá äéåîÜãåôáé óôéò åãêáôáóôÜóåéò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, êáôÜ ôï êáíïíéêü åñãÜóéìï ùñÜñéï. Ç IBM ìðïñåß íá ÷ñçóéìïðïéÞóåé áíåîÜñôçôï åëåãêôÞ ãéá ôçí ðáñï÷Þ âïÞèåéáò êáôÜ ÅéäïðïéÞóåéò ãéá Êþäéêá, õðü ôçí ðñïûðüèåóç üôé ç IBM Ý÷åé óõíÜøåé Ýããñáöç óýìâáóç åìðéóôåõôéêüôçôáò ìå ôïí åí ëüãù åëåãêôÞ. + +11.2 Åðßëõóç + +Ç IBM èá åéäïðïéåß ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò åããñÜöùò åÜí êáôÜ ôçí ðñáãìáôïðïßçóç ôÝôïéáò åðáëÞèåõóçò äéáðéóôùèåß üôé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò Ý÷åé ÷ñçóéìïðïéÞóåé ïðïéïäÞðïôå Ðñüãñáììá ðÝñáí ôïõ åðéðÝäïõ ÅîïõóéïäïôçìÝíçò ×ñÞóçò ôïõ Þ êáôÜ Üëëïí ôñüðï äåí óõììïñöþíåôáé ìå ôïõò ¼ñïõò ÐñïãñáììÜôùí ILAN. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá êáôáâÜëëåé ÷ùñßò êáèõóôÝñçóç áðåõèåßáò óôçí IBM ôéò ÷ñåþóåéò ðïõ êáèïñßæïíôáé áðü ôçí IBM óå Ýíá ôéìïëüãéï ãéá 1) ïðïéáäÞðïôå ôÝôïéá ðñüóèåôç ÷ñÞóç, 2) õðïóôÞñéîç ãéá ôçí åí ëüãù ðñüóèåôç ÷ñÞóç ãéá ôç äéÜñêåéá ôçò ðñüóèåôçò ÷ñÞóçò Þ ãéá ðåñßïäï äýï åôþí, üðïéá áðü ôéò äýï ðåñéüäïõò áõôÝò åßíáé ìéêñüôåñç êáé 3) ïðïéåóäÞðïôå ÷ñåþóåéò êáé Üëëåò ïöåéëÝò ðïõ ôõ÷üí êáèïñéóôïýí ùò áðïôÝëåóìá ôçò åí ëüãù åðáëÞèåõóçò. + +12. ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí + +Ôï Ðñüãñáììá ìðïñåß íá ðåñéÝ÷åé êþäéêá ôñßôùí ðñïìçèåõôþí (third party code) ãéá ôïí ïðïßï ç IBM, êáé ü÷é ï ôñßôïò ðñïìçèåõôÞò, ÷ïñçãåß Üäåéáò ÷ñÞóçò óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò âÜóåé ôïí üñùí ôçò ðáñïýóáò Óýìâáóçò. ÏðïéåóäÞðïôå åéäïðïéÞóåéò ó÷åôéêÜ ìå ôïí êþäéêá ôñßôùí ðñïìçèåõôþí ("ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí") óõìðåñéëáìâÜíïíôáé ìüíï ãéá ôçí ðëçñïöüñçóç ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. ÁõôÝò ïé åéäïðïéÞóåéò äéáôßèåíôáé óôï (óôá) áñ÷åßï(-á) NOTICES ôïõ ÐñïãñÜììáôïò. Óôéò ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí ðáñÝ÷ïíôáé ðëçñïöïñßåò ó÷åôéêÜ ìå ôïí ôñüðï áðüêôçóçò ðçãáßïõ êþäéêá áíáöïñéêÜ ìå ôïí êþäéêá êÜðïéùí ôñßôùí ðñïìçèåõôþí. ÅÜí óôéò ÅéäïðïéÞóåéò ãéá Êþäéêá Ôñßôùí êÜðïéïò êþäéêáò ôñßôùí ðñïìçèåõôþí ðñïóäéïñßæåôáé áðü ôçí IBM ùò "ÔñïðïðïéÞóéìïò Êþäéêáò Ôñßôùí" ("Modifiable Third Party Code"), ç IBM åîïõóéïäïôåß ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò 1) íá ôñïðïðïéÞóåé ôïí ÔñïðïðïéÞóéìï Êþäéêá Ôñßôùí êáé 2) íá ðñïâåß óôçí áðïóõìðßëçóç (reverse engineering) ôùí åíïôÞôùí ôïõ ÐñïãñÜììáôïò ðïõ óõíäÝïíôáé Üìåóá ìå ôïí ÔñïðïðïéÞóéìï Êþäéêá Ôñßôùí, õðü ôçí ðñïûðüèåóç üôé ç åí ëüãù áðïóõìðßëçóç ðñáãìáôïðïéåßôáé ìüíï ãéá ôï óêïðü ôçò áðïóöáëìÜôùóçò (debugging) ôùí ôñïðïðïéÞóåùí ðïõ ðñáãìáôïðïßçóå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óôïí åí ëüãù êþäéêá ôñßôùí. ÏðïéåóäÞðïôå õðï÷ñåþóåéò ðáñï÷Þò õðçñåóéþí êáé õðïóôÞñéîçò ôçò IBM éó÷ýïõí ìüíï ãéá ôç ìç ôñïðïðïéçìÝíç åêäï÷Þ ôïõ ÐñïãñÜììáôïò. + +13. ÃåíéêÜ + +á. ÊáíÝíáò üñïò ôçò ðáñïýóáò Óýìâáóçò äåí åðçñåÜæåé ïðïéáäÞðïôå äéêáéþìáôá êáôáíáëùôÞ ðïõ áðïññÝïõí áðü ôï íüìï êáé ãéá ôá ïðïßá äåí õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò Þ ðåñéïñéóìïý. + +â. Ãéá ÐñïãñÜììáôá ðïõ ðáñÝ÷åé ç IBM óôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò óå áðôÞ ìïñöÞ, ç IBM åêðëçñþíåé ôéò õðï÷ñåþóåéò áðïóôïëÞò êáé ðáñÜäïóÞò ôçò ìå ôçí ðáñÜäïóç ôùí åí ëüãù ÐñïãñáììÜôùí óôçí êáèïñéóìÝíç áðü ôçí IBM ìåôáöïñéêÞ åôáéñåßá, åêôüò åÜí óõìöùíçèåß äéáöïñåôéêÜ ãñáðôþò áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò êáé ôçí IBM. + +ã. ÅÜí ïðïéáäÞðïôå äéÜôáîç ôçò Óýìâáóçò êñéèåß Üêõñç Þ ìç åöáñìüóéìç, ïé õðüëïéðåò äéáôÜîåéò ôçò Óýìâáóçò ðáñáìÝíïõí óå ðëÞñç éó÷ý êáé åöáñìïãÞ. + +ä. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò óõìöùíåß íá óõììïñöþíåôáé ìå üëïõò ôïõò éó÷ýïíôåò íüìïõò êáé êáíïíéóìïýò ðåñß åîáãùãþí êáé åéóáãùãþí, óõìðåñéëáìâáíïìÝíùí ôùí êáíïíéóìþí ðåñß ïéêïíïìéêþí áðïêëåéóìþí êáé êõñþóåùí êáé ôùí áðáãïñåýóåùí åîáãùãÞò ôùí ÇíùìÝíùí Ðïëéôåéþí ãéá ïñéóìÝíåò ôåëéêÝò ÷ñÞóåéò Þ óå ïñéóìÝíïõò ôåëéêïýò ÷ñÞóôåò. + +å. Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí International Business Machines Corporation êáé ôéò èõãáôñéêÝò ôçò (êáé ôïõò äéáäü÷ïõò êáé åêäï÷åßò, åñãïëÜâïõò êáé ôïõò Åìðïñéêïýò ÓõíåñãÜôåò ôçò IBM) íá áðïèçêåýïõí êáé íá ÷ñçóéìïðïéïýí ôá óôïé÷åßá åðéêïéíùíßáò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò üðïõ äéåîÜãïõí ôéò åðé÷åéñçóéáêÝò ôïõò äñáóôçñéüôçôåò, óå ó÷Ýóç ìå ôá ðñïúüíôá êáé ôéò õðçñåóßåò ôçò IBM Þ ãéá ôçí ðñïþèçóç ôçò åðé÷åéñçìáôéêÞò ó÷Ýóçò ôçò IBM ìå ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +óô. ÊÜèå Ýíá áðü ôá äýï ìÝñç èá ðáñÜó÷åé óôï Üëëï åýëïãç åõ÷Ýñåéá íá óõììïñöùèåß ðñïò ôéò õðï÷ñåþóåéò ôïõ ðñïôïý éó÷õñéóôåß üôé ôï Üëëï ìÝñïò äåí áíôáðïêñßèçêå óôéò õðï÷ñåþóåéò ôïõ âÜóåé ôçò ðáñïýóáò Óýìâáóçò. Ôá äýï ìÝñç èá åðé÷åéñïýí íá åðéëýïõí êáëüðéóôá ïðïéåóäÞðïôå äéáöïñÝò, äéáöùíßåò Þ áîéþóåéò ìåôáîý ôùí äýï ìåñþí áíáöïñéêÜ ìå ôçí ðáñïýóá Óýìâáóç. + +æ. Åêôüò åÜí Üëëùò áðáéôåßôáé áðü ôï åöáñìïóôÝï äßêáéï ÷ùñßò íá õðÜñ÷åé äõíáôüôçôá óõìâáôéêÞò ðáñáßôçóçò Þ ðåñéïñéóìïý áõôïý ôïõ äéêáéþìáôïò: 1) êáíÝíá áðü ôá äýï ìÝñç äåí èá åãåßñåé áãùãÞ ïðïéáóäÞðïôå ìïñöÞò ãéá ïðïéáäÞðïôå áîßùóç ç ïðïßá áðïññÝåé áðü Þ ó÷åôßæåôáé ìå ôçí ðáñïýóá Óýìâáóç ìåôÜ ôçí ðÜñïäï äéåôßáò áðü ôçí çìåñïìçíßá êáôÜ ôçí ïðïßá ðñïÝêõøå ç áéôßá Ýãåñóçò ôçò áãùãÞò êáé 2) ìåôÜ ôç ëÞîç ôçò åí ëüãù ÷ñïíéêÞò ðñïèåóìßáò, ïðïéáäÞðïôå ôÝôïéá áîßùóç êáé üëá ôá äéêáéþìáôá ðïõ ó÷åôßæïíôáé ìå ôçí åí ëüãù áîßùóç èá ðáñáãñáöïýí. + +ç. Ïýôå ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ïýôå ç IBM äåí åßíáé õðåýèõíïé ãéá ôç ìç åêðëÞñùóç ïðïéùíäÞðïôå õðï÷ñåþóåþí ôïõò ãéá ëüãïõò ðÝñáí ôïõ åëÝã÷ïõ ôïõò. + +è. Äåí äçìéïõñãåßôáé ïðïéïäÞðïôå äéêáßùìá Þ âÜóç áîßùóçò ãéá ïðïéïäÞðïôå ôñßôï ìÝñïò áðü ôçí ðáñïýóá Óýìâáóç, êáé ç IBM äåí åßíáé õðåýèõíç ãéá ïðïéåóäÞðïôå áîéþóåéò ôñßôùí åíáíôßïí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, ðáñÜ ìüíï üðùò åðéôñÝðåôáé óôçí áíùôÝñù åíüôçôá 10.1 (Óôïé÷åßá ãéá ôá ïðïßá åíäÝ÷åôáé íá öÝñåé åõèýíç ç IBM) ó÷åôéêÜ ìå áðïæçìßùóç ãéá óùìáôéêÞ âëÜâç (óõìðåñéëáìâáíïìÝíïõ ôïõ èáíÜôïõ) Þ ãéá áðïæçìßùóç êéíçôÞò êáé áêßíçôçò áôïìéêÞò ðåñéïõóßáò ãéá ôçí ïðïßá ç IBM öÝñåé åõèýíç êáôÜ ôï íüìï Ýíáíôé ôïõ åí ëüãù ôñßôïõ ìÝñïõò. + +é. Ðñïâáßíïíôáò óôç óýíáøç ôçò ðáñïýóáò Óýìâáóçò, êáíÝíá áðü ôá äýï ìÝñç äåí âáóßæåôáé óå ïðïéåóäÞðïôå äçëþóåéò ðïõ äåí êáèïñßæïíôáé óôçí ðáñïýóá Óýìâáóç, óõìðåñéëáìâáíïìÝíùí, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, ïðïéùíäÞðïôå äçëþóåùí ó÷åôéêÜ ìå: 1) ôçí áðüäïóç Þ ëåéôïõñãßá ôïõ ÐñïãñÜììáôïò, 2) ôéò åìðåéñßåò Þ õðïäåßîåéò Üëëùí ìåñþí Þ 3) ïðïéáäÞðïôå áðïôåëÝóìáôá Þ ïéêïíïìßåò ðïõ ìðïñåß íá åðéôý÷åé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò. + +éá. Ç IBM Ý÷åé óõíÜøåé óõìâÜóåéò ìå ïñéóìÝíïõò ïñãáíéóìïýò ("Åìðïñéêïß ÓõíåñãÜôåò ôçò IBM" - "IBM Business Partners") ãéá ôçí ðñïþèçóç, äéÜèåóç êáé õðïóôÞñéîç ïñéóìÝíùí ÐñïãñáììÜôùí. Ïé Åìðïñéêïß ÓõíåñãÜôåò ôçò IBM åîáêïëïõèïýí íá åßíáé áíåîÜñôçôïé ïñãáíéóìïß ðïõ ëåéôïõñãïýí ÷ùñéóôÜ áðü ôçí IBM. Ç IBM äåí åßíáé õðåýèõíç ãéá ôéò ðñÜîåéò Þ ôéò äçëþóåéò Åìðïñéêþí Óõíåñãáôþí ôçò IBM Þ ãéá ôçí åêðëÞñùóç ôùí õðï÷ñåþóåùí ðïõ Ý÷ïõí ðñïò ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò. + +éâ. Ïé üñïé ðåñß áäåéþí ÷ñÞóçò êáé áðïæçìßùóçò ãéá ðíåõìáôéêÞ éäéïêôçóßá ðïõ ðåñéëáìâÜíïíôáé óå Üëëåò óõìâÜóåéò ðïõ Ý÷åé óõíÜøåé ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò ìå ôçí IBM (üðùò ð.÷. ç Óýìâáóç Ðåëáôþí IBM) äåí éó÷ýïõí ãéá Üäåéåò ÷ñÞóçò ÐñïãñáììÜôùí ðïõ ÷ïñçãïýíôáé âÜóåé ôçò ðáñïýóáò Óýìâáóçò. + +éã. Êáé ôá äýï ìÝñç óõìöùíïýí üôé üëåò ïé áíôáëëáóóüìåíåò ðëçñïöïñßåò åßíáé ìç åìðéóôåõôéêÝò. ÅÜí êÜðïéï áðü ôá äýï ìÝñç æçôÞóåé ôçí áíôáëëáãÞ åìðéóôåõôéêþí ðëçñïöïñéþí, áõôÞ èá ðñáãìáôïðïéçèåß âÜóåé õðïãåãñáììÝíçò óýìâáóçò áíôáëëáãÞò åìðéóôåõôéêþí ðëçñïöïñéþí. + +14. ÃåùãñáöéêÞ ÅìâÝëåéá êáé ÅöáñìïóôÝï Äßêáéï + +14.1 ÅöáñìïóôÝï Äßêáéï + +Êáé ôá äýï ìÝñç óõìöùíïýí óôçí åöáñìïãÞ ôçò íïìïèåóßáò ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò üóïí áöïñÜ óôçí éó÷ý, åñìçíåßá êáé åêôÝëåóç üëùí ôùí áíôßóôïé÷ùí äéêáéùìÜôùí, êáèçêüíôùí êáé õðï÷ñåþóåùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôçò IBM ðïõ áðïññÝïõí áðü, Þ ó÷åôßæïíôáé êáè' ïðïéïíäÞðïôå ôñüðï ìå, ôá èÝìáôá ðïõ êáëýðôåé ç Óýìâáóç, ÷ùñßò íá ëáìâÜíïíôáé õðüøç ôõ÷üí áíôéèÝóåéò áñ÷þí äéêáßïõ. + +Äåí åöáñìüæåôáé ç Óýìâáóç ôùí ÇíùìÝíùí Åèíþí ó÷åôéêÜ ìå ôï ÄéåèíÝò Åìðüñéï Áãáèþí (United Nations Convention on Contracts for the International Sale of Goods). + +14.2 Äéêáéïäïóßá + +¼ëá ôá äéêáéþìáôá, ôá êáèÞêïíôá êáé ïé õðï÷ñåþóåéò õðüêåéíôáé óôç äéêáéïäïóßá ôùí äéêáóôçñßùí ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò. + +ÌÝñïò 2 - ¼ñïé ðïõ Åìðßðôïõí óôï Äßêáéï êÜèå ×þñáò + +Ãéá ôéò Üäåéåò ÷ñÞóçò ðïõ ÷ïñçãïýíôáé óôçí ÅëëÜäá, ïé áêüëïõèïé üñïé áíôéêáèéóôïýí Þ ôñïðïðïéïýí ôïõò áíáöåñüìåíïõò üñïõò óôï ÌÝñïò 1. ¼ëïé ïé üñïé óôï ÌÝñïò 1 ðïõ äåí åðçñåÜæïíôáé áðü áõôÝò ôéò ôñïðïðïéÞóåéò ðáñáìÝíïõí ùò Ý÷ïõí êáé åîáêïëïõèïýí íá éó÷ýïõí. Ôï ðáñüí ÌÝñïò 2 ïñãáíþíåôáé ùò åîÞò: + +* Ôñïðïðïßçóç óôï ÌÝñïò 1, ¶ñèñï 14 (ÅöáñìïóôÝï Äßêáéï êáé Äéêáéïäïóßá) ãéá ôç óõãêåêñéìÝíç ÷þñá, êáé + +* ÔñïðïðïéÞóåéò óå Üëëïõò üñïõò ôçò Óýìâáóçò ãéá ÷þñåò ôçò Åõñþðçò, ÌÝóçò ÁíáôïëÞò êáé ÁöñéêÞò. + +Ôñïðïðïßçóç óôï ÌÝñïò 1, ¶ñèñï 14 (ÅöáñìïóôÝï Äßêáéï êáé Äéêáéïäïóßá) ãéá ôç óõãêåêñéìÝíç ÷þñá + +14.2 Äéêáéïäïóßá + +Ç áêüëïõèç ðáñÜãñáöïò áöïñÜ óôç äéêáéïäïóßá êáé áíôéêáèéóôÜ ôçí åíüôçôá 14.2 (Äéêáéïäïóßá) ãéá ôçí ÅëëÜäá: + +¼ëá ôá äéêáéþìáôá, ôá êáèÞêïíôá êáé ïé õðï÷ñåþóåéò õðüêåéíôáé óôç äéêáéïäïóßá ôùí äéêáóôçñßùí ôçò ÷þñáò óôçí ïðïßá ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò áðÝêôçóå ôçí Üäåéá ÷ñÞóçò ôïõ ÐñïãñÜììáôïò, åêôüò áðü ôéò ÷þñåò ðïõ ðñïóäéïñßæïíôáé ðáñáêÜôù, üðïõ áðïêëåéóôéêÜ áñìüäéá ãéá ôçí åðßëõóç üëùí ôùí äéáöïñþí ðïõ áðïññÝïõí áðü Þ ó÷åôßæïíôáé ìå ôçí ðáñïýóá Óýìâáóç, óõìðåñéëáìâáíïìÝíùí ôùí óõíïðôéêþí íïìéêþí äéáäéêáóéþí, èá åßíáé ôá áêüëïõèá äéêáóôÞñéá: + +ôï áñìüäéï äéêáóôÞñéï ôçò ÁèÞíáò. + +ÔÑÏÐÏÐÏÉÇÓÅÉÓ ÃÉÁ ×ÙÑÅÓ ÔÇÓ ÅÕÑÙÐÇÓ, ÌÅÓÇÓ ÁÍÁÔÏËÇÓ ÊÁÉ ÁÖÑÉÊÇÓ (EMEA) + +ÊÑÁÔÇ ÌÅËÇ ÔÇÓ ÅÕÑÙÐÁÚÊÇÓ ÅÍÙÓÇÓ + +8. Äåí ÐáñÝ÷ïíôáé ÅããõÞóåéò + +Ôï áêüëïõèï êåßìåíï ðñïóôßèåôáé óôï ¶ñèñï 8 (Äåí ÐáñÝ÷ïíôáé ÅããõÞóåéò): + +Óôçí ÅõñùðáúêÞ ¸íùóç ("ÅÅ"), ïé êáôáíáëùôÝò Ý÷ïõí íüìéìá äéêáéþìáôá âÜóåé ôçò éó÷ýïõóáò åèíéêÞò íïìïèåóßáò ðïõ äéÝðåé ôçí ðþëçóç êáôáíáëùôéêþí áãáèþí. Ôá åí ëüãù äéêáéþìáôá äåí åðçñåÜæïíôáé áðü ôéò äéáôÜîåéò áõôïý ôïõ ¶ñèñïõ 8 (Äåí ÐáñÝ÷ïíôáé ÅããõÞóåéò). + +ÊÑÁÔÇ ÌÅËÇ ÔÇÓ ÅÅ ÊÁÉ ÏÉ ×ÙÑÅÓ ÐÏÕ ÁÍÁÖÅÑÏÍÔÁÉ ÐÁÑÁÊÁÔÙ + +ÏðïéáäÞðïôå ÅõñùðáúêÞ ÷þñá ç ïðïßá Ý÷åé èåóðßóåé ôïðéêÞ íïìïèåóßá éäéùôéêüôçôáò êáé ðñïóôáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá ðáñüìïéá ìå áõôÞ ôïõ ìïíôÝëïõ ôçò ÅõñùðáúêÞò ¸íùóçò. + +13. ÃåíéêÜ + +Ôï áêüëïõèï êåßìåíï áíôéêáèéóôÜ ôï åäÜöéï 13.å: + +(1) Ïñéóìïß - Ãéá ôïõò óêïðïýò ôïõ ðáñüíôïò åäáößïõ 13.å, éó÷ýïõí ïé áêüëïõèïé ðñüóèåôïé ïñéóìïß: + +(á) ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò (Business Contact Information) - óôïé÷åßá åðáããåëìáôéêÞò åðéêïéíùíßáò ðïõ áðïêáëýðôïíôáé áðü ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò óôçí IBM, óõìðåñéëáìâáíïìÝíùí ïíïìÜôùí, åðáããåëìáôéêþí ôßôëùí, åðáããåëìáôéêþí äéåõèýíóåùí, áñéèìþí ôçëåöþíïõ êáé äéåõèýíóåùí e-mail õðáëëÞëùí êáé åñãïëÜâùí ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò. Ãéá ôçí Áõóôñßá, ôçí Éôáëßá êáé ôçí Åëâåôßá, ôá ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò ðåñéëáìâÜíïõí åðßóçò ðëçñïöïñßåò ãéá ôï Äéêáéïý÷ï ¶äåéáò ×ñÞóçò êáé ôïõò õðåñãïëÜâïõò ôïõ ùò íïìéêÜ ðñüóùðá (ãéá ðáñÜäåéãìá, óôïé÷åßá ãéá ôá Ýóïäá ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò Þ Üëëá ïéêïíïìéêÜ óôïé÷åßá). + +(â) Ðñïóùðéêü ÅðáããåëìáôéêÞò Åðéêïéíùíßáò (Business Contact Personnel) - ïé õðÜëëçëïé êáé ïé åñãïëÜâïé ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò óôïõò ïðïßïõò áíáöÝñïíôáé ôá ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò. + +(ã) Áñ÷Þ Ðñïóôáóßáò ÄåäïìÝíùí (Data Protection Authority) - ç áñ÷Þ ðïõ Ý÷åé éäñõèåß óôá ðëáßóéá ôçò Íïìïèåóßáò ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé Çëåêôñïíéêþí Åðéêïéíùíéþí óå ìéá óõãêåêñéìÝíç ÷þñá Þ, ãéá ÷þñåò åêôüò ôçò ÅõñùðáúêÞò ¸íùóçò, ç áñ÷Þ ðïõ åßíáé õðåýèõíç ãéá ôçí åðéôÞñçóç ôçò ðñïóôáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá óôç óõãêåêñéìÝíç ÷þñá Þ (ãéá ïðïéáäÞðïôå áðü ôéò áíùôÝñù ðåñéðôþóåéò) ïðïéïäÞðïôå ðñïâëåðüìåíï áðü ôï íüìï äéÜäï÷ï íïìéêü ðñüóùðï ôçò åí ëüãù áñ÷Þò. + +(ä) Íïìïèåóßá ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé Çëåêôñïíéêþí Åðéêïéíùíéþí (Data Protection & Electronic Communications Legislation) - (i) ç éó÷ýïõóá ôïðéêÞ íïìïèåóßá êáé ïé áíôßóôïé÷ïé êáíïíéóìïß ðïõ èåóðßóôçêáí ìå óêïðü ôç óõììüñöùóç ìå ôéò áðáéôÞóåéò ôçò Ïäçãßáò 95/46/EC ôçò ÅõñùðáúêÞò ¸íùóçò (ðåñß ôçò åðåîåñãáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá êáé ôçò åëåýèåñçò êßíçóçò ôùí åí ëüãù äåäïìÝíùí) êáé ôçò Ïäçãßáò 2002/58/EC ôçò ÅõñùðáúêÞò ¸íùóçò (ðåñß ôçò åðåîåñãáóßáò äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá êáé ôçò ðñïóôáóßáò ôçò éäéùôéêüôçôáò óôïí ôïìÝá ôùí çëåêôñïíéêþí åðéêïéíùíéþí) Þ (ii) ãéá ÷þñåò åêôüò ôçò ÅõñùðáúêÞò ¸íùóçò, ç íïìïèåóßá Þ/êáé ïé êáíïíéóìïß ðïõ èåóðßóôçêáí óôç óõãêåêñéìÝíç ÷þñá áíáöïñéêÜ ìå ôçí ðñïóôáóßá äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá êáé ôç ñýèìéóç çëåêôñïíéêþí åðéêïéíùíéþí ðïõ ðåñéëáìâÜíïõí ôçí áíôáëëáãÞ äåäïìÝíùí ðñïóùðéêïý ÷áñáêôÞñá Þ (êáé óôéò äýï áíùôÝñù ðåñéðôþóåéò) ïðïéáäÞðïôå ðñïâëåðüìåíç áðü ôï íüìï áíôéêáôÜóôáóç Þ ôñïðïðïßçóç ôùí áíùôÝñù. + +(å) ¼ìéëïò IBM (IBM Group) - ç International Business Machines Corporation ìå Ýäñá ôçí Armonk, ÍÝá Õüñêç, Ç.Ð.Á., ïé èõãáôñéêÝò ôçò êáé ïé áíôßóôïé÷ïé Åìðïñéêïß ÓõíåñãÜôåò êáé õðåñãïëÜâïé ôïõò. + +(2) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí IBM: + +(á) íá åðåîåñãÜæåôáé êáé íá ÷ñçóéìïðïéåß ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò åíôüò ôïõ Ïìßëïõ IBM óôá ðëáßóéá ôçò õðïóôÞñéîçò ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò, óõìðåñéëáìâáíïìÝíçò êáé ôçò ðáñï÷Þò õðçñåóéþí õðïóôÞñéîçò, êáé ãéá ôï óêïðü ôçò ðåñáéôÝñù åíßó÷õóçò ôùí åðé÷åéñçìáôéêþí ó÷Ýóåùí ìåôáîý ôïõ Äéêáéïý÷ïõ ¶äåéáò ×ñÞóçò êáé ôïõ Ïìßëïõ IBM, óõìðåñéëáìâáíïìÝíçò, åíäåéêôéêÜ êáé ü÷é ðåñéïñéóôéêÜ, ôçò åðéêïéíùíßáò ìå Ðñïóùðéêü ÅðáããåëìáôéêÞò Åðéêïéíùíßáò (ìÝóù e-mail Þ Üëëùò) êáé ôçò ðñïþèçóçò ðñïúüíôùí êáé õðçñåóéþí ôïõ Ïìßëïõ IBM (ï "ÊáèïñéóìÝíïò Óêïðüò"), êáé + +(â) íá áðïêáëýðôåé ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò óå Üëëá ìÝëç ôïõ Ïìßëïõ IBM ìüíï óôá ðëáßóéá ôçò åðßôåõîçò ôïõ ÊáèïñéóìÝíïõ Óêïðïý. + +(3) Ç IBM óõìöùíåß üôé ç åðåîåñãáóßá üëùí ôùí Åðáããåëìáôéêþí Óôïé÷åßùí Åðéêïéíùíßáò èá ðñáãìáôïðïéåßôáé óýìöùíá ìå ôç Íïìïèåóßá ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé ÇëåêôñïíéêÞò Åðéêïéíùíßáò êáé üôé ôá åí ëüãù Óôïé÷åßá èá ÷ñçóéìïðïéïýíôáé ìüíï ãéá ôïí ÊáèïñéóìÝíï Óêïðü. + +(4) Óôï âáèìü ðïõ áðáéôåßôáé áðü ôç Íïìïèåóßá ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé ÇëåêôñïíéêÞò Åðéêïéíùíßáò, ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò äçëþíåé üôé (á) Ý÷åé áðïêôÞóåé (Þ èá áðïêôÞóåé) ôéò áðáéôïýìåíåò óõãêáôáèÝóåéò êáé üôé Ý÷åé áðåõèýíåé (Þ èá áðåõèýíåé) ôéò áðáéôïýìåíåò åéäïðïéÞóåéò óôï Ðñïóùðéêü ÅðáããåëìáôéêÞò Åðéêïéíùíßáò) þóôå ï ¼ìéëïò IBM íá åßíáé óå èÝóç íá åðåîåñãÜæåôáé êáé íá ÷ñçóéìïðïéåß ôá ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò ãéá ôïí ÊáèïñéóìÝíï Óêïðü. + +(5) Ï Äéêáéïý÷ïò ¶äåéáò ×ñÞóçò åîïõóéïäïôåß ôçí IBM íá ìåôáâéâÜóåé ÅðáããåëìáôéêÜ Óôïé÷åßá Åðéêïéíùíßáò åêôüò ôïõ Åõñùðáúêïý Ïéêïíïìéêïý ×þñïõ, åöüóïí ç åí ëüãù ìåôáâßâáóç ðñáãìáôïðïéçèåß âÜóåé óõìâáôéêþí üñùí ðïõ Ý÷ïõí åãêñéèåß áðü ôçí Áñ÷Þ Ðñïóôáóßáò ÄåäïìÝíùí Þ êáôÜ Üëëïí ôñüðï åðéôñÝðåôáé óôá ðëáßóéá ôçò Íïìïèåóßáò ðåñß Ðñïóôáóßáò ÄåäïìÝíùí êáé Çëåêôñïíéêþí Åðéêïéíùíéþí. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_en b/charts/mq-devserver/LICENSE_locale/LICENSE_en new file mode 100644 index 0000000..02a6988 --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_en @@ -0,0 +1,736 @@ +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International License Agreement for Non-Warranted Programs (Z125-5589-05) applies. + +Program Name (Program Number): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +The following standard terms apply to Licensee's use of the Program. + +Bundled Programs + +The Program is licensed as a multi-product package consisting of the Bundled Programs identified below. Licensee is authorized to install and use such Bundled Programs within the limits of the Proofs of Entitlement for the Program and as stated in this License Information document. Licensee is not authorized to transfer or remarket the Bundled Programs separate from the multi-product package. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. When Licensee's right to use the Program expires or terminates, Licensee must discontinue use, destroy or promptly return all copies of the Bundled Programs to the party from whom Licensee acquired the Program. If Licensee downloaded the Bundled Programs, Licensee should contact the party from whom Licensee acquired the Program. If Licensee wishes to license the Bundled Programs for any use beyond the limits set forth above, please contact an IBM Sales Representative or the party from whom Licensee acquired the Program to obtain the appropriate license. + +The following are Bundled Programs licensed with the Program: +IBM MQ V9.0.3 + +Developer Limitation + +If the Program is designated as for "Developers", the Program can only be deployed as part of Licensee's internal development and unit testing on a developer machine. A developer machine is a physical or virtual desktop environment, running a primary operating system and the Program, both of which are accessible and used by no more than one specified developer. Licensee is not authorized to use the Program for processing production workloads, simulating production workloads or testing scalability of any code, application or system. Licensee is not authorized to use any part of the Program for any other purposes without acquiring the appropriate production entitlements. + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +International License Agreement for Non-Warranted Programs + +Part 1 - General Terms + +BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, CLICKING ON AN "ACCEPT" BUTTON, OR OTHERWISE USING THE PROGRAM, LICENSEE AGREES TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCEPTING THESE TERMS ON BEHALF OF LICENSEE, YOU REPRESENT AND WARRANT THAT YOU HAVE FULL AUTHORITY TO BIND LICENSEE TO THESE TERMS. IF YOU DO NOT AGREE TO THESE TERMS, + +* DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, CLICK ON AN "ACCEPT" BUTTON, OR USE THE PROGRAM; AND + +* PROMPTLY RETURN THE UNUSED MEDIA AND DOCUMENTATION TO THE PARTY FROM WHOM IT WAS OBTAINED FOR A REFUND OF THE AMOUNT PAID. IF THE PROGRAM WAS DOWNLOADED, DESTROY ALL COPIES OF THE PROGRAM. + +1. Definitions + +"Authorized Use" - the specified level at which Licensee is authorized to execute or run the Program. That level may be measured by number of users, millions of service units ("MSUs"), Processor Value Units ("PVUs"), or other level of use specified by IBM. + +"IBM" - International Business Machines Corporation or one of its subsidiaries. + +"License Information" ("LI") - a document that provides information and any additional terms specific to a Program. The Program's LI is available at www.ibm.com/software/sla. The LI can also be found in the Program's directory, by the use of a system command, or as a booklet included with the Program. + +"Program" - the following, including the original and all whole or partial copies: 1) machine-readable instructions and data, 2) components, files, and modules, 3) audio-visual content (such as images, text, recordings, or pictures), and 4) related licensed materials (such as keys and documentation). + +2. Agreement Structure + +This Agreement includes Part 1 - General Terms, Part 2 - Country-unique Terms (if any) and the LI and is the complete agreement between Licensee and IBM regarding the use of the Program. It replaces any prior oral or written communications between Licensee and IBM concerning Licensee's use of the Program. The terms of Part 2 may replace or modify those of Part 1. To the extent of any conflict, the LI prevails over both Parts. + +3. License Grant + +The Program is owned by IBM or an IBM supplier, and is copyrighted and licensed, not sold. + +IBM grants Licensee a nonexclusive license to 1) use the Program up to the Authorized Use specified in the invoice, 2) make and install copies to support such Authorized Use, and 3) make a backup copy, all provided that + +a. Licensee has lawfully obtained the Program and complies with the terms of this Agreement; + +b. the backup copy does not execute unless the backed-up Program cannot execute; + +c. Licensee reproduces all copyright notices and other legends of ownership on each copy, or partial copy, of the Program; + +d. Licensee ensures that anyone who uses the Program (accessed either locally or remotely) 1) does so only on Licensee's behalf and 2) complies with the terms of this Agreement; + +e. Licensee does not 1) use, copy, modify, or distribute the Program except as expressly permitted in this Agreement; 2) reverse assemble, reverse compile, otherwise translate, or reverse engineer the Program, except as expressly permitted by law without the possibility of contractual waiver; 3) use any of the Program's components, files, modules, audio-visual content, or related licensed materials separately from that Program; or 4) sublicense, rent, or lease the Program; and + +f. if Licensee obtains this Program as a Supporting Program, Licensee uses this Program only to support the Principal Program and subject to any limitations in the license to the Principal Program, or, if Licensee obtains this Program as a Principal Program, Licensee uses all Supporting Programs only to support this Program, and subject to any limitations in this Agreement. For purposes of this Item "f," a "Supporting Program" is a Program that is part of another IBM Program ("Principal Program") and identified as a Supporting Program in the Principal Program's LI. (To obtain a separate license to a Supporting Program without these restrictions, Licensee should contact the party from whom Licensee obtained the Supporting Program.) + +This license applies to each copy of the Program that Licensee makes. + +3.1 Trade-ups, Updates, Fixes, and Patches + +3.1.1 Trade-ups + +If the Program is replaced by a trade-up Program, the replaced Program's license is promptly terminated. + +3.1.2 Updates, Fixes, and Patches + +When Licensee receives an update, fix, or patch to a Program, Licensee accepts any additional or different terms that are applicable to such update, fix, or patch that are specified in its LI. If no additional or different terms are provided, then the update, fix, or patch is subject solely to this Agreement. If the Program is replaced by an update, Licensee agrees to promptly discontinue use of the replaced Program. + +3.2 Fixed Term Licenses + +If IBM licenses the Program for a fixed term, Licensee's license is terminated at the end of the fixed term, unless Licensee and IBM agree to renew it. + +3.3 Term and Termination + +This Agreement is effective until terminated. + +IBM may terminate Licensee's license if Licensee fails to comply with the terms of this Agreement. + +If the license is terminated for any reason by either party, Licensee agrees to promptly discontinue use of and destroy all of Licensee's copies of the Program. Any terms of this Agreement that by their nature extend beyond termination of this Agreement remain in effect until fulfilled, and apply to both parties' respective successors and assignees. + +4. Charges + +Charges, if any, are based on Authorized Use obtained, which is specified in the invoice. IBM does not give credits or refunds for charges already due or paid, except as specified elsewhere in this Agreement. + +If Licensee wishes to increase its Authorized Use, Licensee must notify IBM or an authorized IBM reseller in advance and pay any applicable charges. + +5. Taxes + +If any authority imposes on the Program a duty, tax, levy, or fee, excluding those based on IBM's net income, then Licensee agrees to pay that amount, as specified in an invoice, or supply exemption documentation. Licensee is responsible for any personal property taxes for the Program from the date that Licensee obtains it. If any authority imposes a customs duty, tax, levy, or fee for the import into or the export, transfer, access, or use of the Program outside the country in which the original Licensee was granted the license, then Licensee agrees that it is responsible for, and will pay, any amount imposed. + +6. Money-back Guarantee + +If Licensee is dissatisfied with the Program for any reason and is the original Licensee, Licensee may terminate the license and obtain a refund of the amount Licensee paid, if any, for the Program, provided that Licensee returns the Program to the party from whom Licensee obtained it within 30 days of the invoice date. If the license is for a fixed term that is subject to renewal, then Licensee may obtain a refund only if the Program is returned within the first 30 days of the initial term. If Licensee downloaded the Program, Licensee should contact the party from whom Licensee obtained it for instructions on how to obtain the refund. + +7. Program Transfer + +Licensee may transfer the Program and all of Licensee's license rights and obligations to another party only if that party agrees to the terms of this Agreement. If the license is terminated for any reason by either party, Licensee is prohibited from transferring the Program to another party. Licensee may not transfer a portion of 1) the Program or 2) the Program's Authorized Use. When Licensee transfers the Program, Licensee must also transfer a hard copy of this Agreement, including the LI. Immediately after the transfer, Licensee's license terminates. + +8. No Warranties + +SUBJECT TO ANY STATUTORY WARRANTIES THAT CANNOT BE EXCLUDED, IBM MAKES NO WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, REGARDING THE PROGRAM OR SUPPORT, IF ANY, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, AND TITLE, AND ANY WARRANTY OR CONDITION OF NON-INFRINGEMENT. + +SOME STATES OR JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF EXPRESS OR IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO LICENSEE. IN THAT EVENT, SUCH WARRANTIES ARE LIMITED IN DURATION TO THE MINIMUM PERIOD REQUIRED BY LAW. NO WARRANTIES APPLY AFTER THAT PERIOD. SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY LASTS, SO THE ABOVE LIMITATION MAY NOT APPLY TO LICENSEE. LICENSEE MAY HAVE OTHER RIGHTS THAT VARY FROM STATE TO STATE OR JURISDICTION TO JURISDICTION. + +THE DISCLAIMERS AND EXCLUSIONS IN THIS SECTION 8 ALSO APPLY TO ANY OF IBM'S PROGRAM DEVELOPERS AND SUPPLIERS. + +MANUFACTURERS, SUPPLIERS, OR PUBLISHERS OF NON-IBM PROGRAMS MAY PROVIDE THEIR OWN WARRANTIES. + +IBM DOES NOT PROVIDE SUPPORT OF ANY KIND, UNLESS IBM SPECIFIES OTHERWISE. IN SUCH EVENT, ANY SUPPORT PROVIDED BY IBM IS SUBJECT TO THE DISCLAIMERS AND EXCLUSIONS IN THIS SECTION 8. + +9. Licensee Data and Databases + +To assist Licensee in isolating the cause of a problem with the Program, IBM may request that Licensee 1) allow IBM to remotely access Licensee's system or 2) send Licensee information or system data to IBM. However, IBM is not obligated to provide such assistance unless IBM and Licensee enter a separate written agreement under which IBM agrees to provide to Licensee that type of support, which is beyond IBM's obligations in this Agreement. In any event, IBM uses information about errors and problems to improve its products and services, and assist with its provision of related support offerings. For these purposes, IBM may use IBM entities and subcontractors (including in one or more countries other than the one in which Licensee is located), and Licensee authorizes IBM to do so. + +Licensee remains responsible for 1) any data and the content of any database Licensee makes available to IBM, 2) the selection and implementation of procedures and controls regarding access, security, encryption, use, and transmission of data (including any personally-identifiable data), and 3) backup and recovery of any database and any stored data. Licensee will not send or provide IBM access to any personally-identifiable information, whether in data or any other form, and will be responsible for reasonable costs and other amounts that IBM may incur relating to any such information mistakenly provided to IBM or the loss or disclosure of such information by IBM, including those arising out of any third party claims. + +10. Limitation of Liability + +The limitations and exclusions in this Section 10 (Limitation of Liability) apply to the full extent they are not prohibited by applicable law without the possibility of contractual waiver. + +10.1 Items for Which IBM May Be Liable + +Circumstances may arise where, because of a default on IBM's part or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), IBM's entire liability for all claims in the aggregate arising from or related to each Program or otherwise arising under this Agreement will not exceed the amount of any 1) damages for bodily injury (including death) and damage to real property and tangible personal property and 2) other actual direct damages up to the charges (if the Program is subject to fixed term charges, up to twelve months' charges) Licensee paid for the Program that is the subject of the claim. + +This limit also applies to any of IBM's Program developers and suppliers. It is the maximum for which IBM and its Program developers and suppliers are collectively responsible. + +10.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM, ITS PROGRAM DEVELOPERS OR SUPPLIERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: + +a. LOSS OF, OR DAMAGE TO, DATA; + +b. SPECIAL, INCIDENTAL, EXEMPLARY, OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; OR + +c. LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. + +11. Compliance Verification + +For purposes of this Section 11 (Compliance Verification), "ILAN Program Terms" means 1) this Agreement and applicable amendments and transaction documents provided by IBM, and 2) IBM software policies that may be found at the IBM Software Policy website (www.ibm.com/softwarepolicies), including but not limited to those policies concerning backup, sub-capacity pricing, and migration. + +The rights and obligations set forth in this Section 11 remain in effect during the period the Program is licensed to Licensee, and for two years thereafter. + +11.1 Verification Process + +Licensee agrees to create, retain, and provide to IBM and its auditors accurate written records, system tool outputs, and other system information sufficient to provide auditable verification that Licensee's use of all Programs is in compliance with the ILAN Program Terms, including, without limitation, all of IBM's applicable licensing and pricing qualification terms. Licensee is responsible for 1) ensuring that it does not exceed its Authorized Use, and 2) remaining in compliance with ILAN Program Terms. + +Upon reasonable notice, IBM may verify Licensee's compliance with ILAN Program Terms at all sites and for all environments in which Licensee uses (for any purpose) Programs subject to ILAN Program Terms. Such verification will be conducted in a manner that minimizes disruption to Licensee's business, and may be conducted on Licensee's premises, during normal business hours. IBM may use an independent auditor to assist with such verification, provided IBM has a written confidentiality agreement in place with such auditor. + +11.2 Resolution + +IBM will notify Licensee in writing if any such verification indicates that Licensee has used any Program in excess of its Authorized Use or is otherwise not in compliance with the ILAN Program Terms. Licensee agrees to promptly pay directly to IBM the charges that IBM specifies in an invoice for 1) any such excess use, 2) support for such excess use for the lesser of the duration of such excess use or two years, and 3) any additional charges and other liabilities determined as a result of such verification. + +12. Third Party Notices + +The Program may include third party code that IBM, not the third party, licenses to Licensee under this Agreement. Notices, if any, for the third party code ("Third Party Notices") are included for Licensee's information only. These notices can be found in the Program's NOTICES file(s). Information on how to obtain source code for certain third party code can be found in the Third Party Notices. If in the Third Party Notices IBM identifies third party code as "Modifiable Third Party Code," IBM authorizes Licensee to 1) modify the Modifiable Third Party Code and 2) reverse engineer the Program modules that directly interface with the Modifiable Third Party Code provided that it is only for the purpose of debugging Licensee's modifications to such third party code. IBM's service and support obligations, if any, apply only to the unmodified Program. + +13. General + +a. Nothing in this Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. + +b. For Programs IBM provides to Licensee in tangible form, IBM fulfills its shipping and delivery obligations upon the delivery of such Programs to the IBM-designated carrier, unless otherwise agreed to in writing by Licensee and IBM. + +c. If any provision of this Agreement is held to be invalid or unenforceable, the remaining provisions of this Agreement remain in full force and effect. + +d. Licensee agrees to comply with all applicable export and import laws and regulations, including U.S. embargo and sanctions regulations and prohibitions on export for certain end uses or to certain users. + +e. Licensee authorizes International Business Machines Corporation and its subsidiaries (and their successors and assigns, contractors and IBM Business Partners) to store and use Licensee's business contact information wherever they do business, in connection with IBM products and services, or in furtherance of IBM's business relationship with Licensee. + +f. Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. + +g. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation: 1) neither party will bring a legal action, regardless of form, for any claim arising out of or related to this Agreement more than two years after the cause of action arose; and 2) upon the expiration of such time limit, any such claim and all respective rights related to the claim lapse. + +h. Neither Licensee nor IBM is responsible for failure to fulfill any obligations due to causes beyond its control. + +i. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except as permitted in Subsection 10.1 (Items for Which IBM May Be Liable) above for bodily injury (including death) or damage to real or tangible personal property for which IBM is legally liable to that third party. + +j. In entering into this Agreement, neither party is relying on any representation not specified in this Agreement, including but not limited to any representation concerning: 1) the performance or function of the Program; 2) the experiences or recommendations of other parties; or 3) any results or savings that Licensee may achieve. + +k. IBM has signed agreements with certain organizations (called "IBM Business Partners") to promote, market, and support certain Programs. IBM Business Partners remain independent and separate from IBM. IBM is not responsible for the actions or statements of IBM Business Partners or obligations they have to Licensee. + +l. The license and intellectual property indemnification terms of Licensee's other agreements with IBM (such as the IBM Customer Agreement) do not apply to Program licenses granted under this Agreement. + +m. Both parties agree that all information exchanged is nonconfidential. If either party requires the exchange of confidential information, it will be made under a signed confidentiality agreement. + +14. Geographic Scope and Governing Law + +14.1 Governing Law + +Both parties agree to the application of the laws of the country in which Licensee obtained the Program license to govern, interpret, and enforce all of Licensee's and IBM's respective rights, duties, and obligations arising from, or relating in any manner to, the subject matter of this Agreement, without regard to conflict of law principles. + +The United Nations Convention on Contracts for the International Sale of Goods does not apply. + +14.2 Jurisdiction + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license. + +Part 2 - Country-unique Terms + +For licenses granted in the countries specified below, the following terms replace or modify the referenced terms in Part 1. All terms in Part 1 that are not changed by these amendments remain unchanged and in effect. This Part 2 is organized as follows: + +* Multiple country amendments to Part 1, Section 14 (Governing Law and Jurisdiction); + +* Americas country amendments to other Agreement terms; + +* Asia Pacific country amendments to other Agreement terms; and + +* Europe, Middle East, and Africa country amendments to other Agreement terms. + +Multiple country amendments to Part 1, Section 14 (Governing Law and Jurisdiction) + +14.1 Governing Law + +The phrase "the laws of the country in which Licensee obtained the Program license" in the first paragraph of 14.1 Governing Law is replaced by the following phrases in the countries below: + +AMERICAS + +(1) In Canada: the laws in the Province of Ontario; + +(2) in Mexico: the federal laws of the Republic of Mexico; + +(3) in the United States, Anguilla, Antigua/Barbuda, Aruba, British Virgin Islands, Cayman Islands, Dominica, Grenada, Guyana, Saint Kitts and Nevis, Saint Lucia, Saint Maarten, and Saint Vincent and the Grenadines: the laws of the State of New York, United States; + +(4) in Venezuela: the laws of the Bolivarian Republic of Venezuela; + +ASIA PACIFIC + +(5) in Cambodia and Laos: the laws of the State of New York, United States; + +(6) in Australia: the laws of the State or Territory in which the transaction is performed; + +(7) in Hong Kong SAR and Macau SAR: the laws of Hong Kong Special Administrative Region ("SAR"); + +(8) in Taiwan: the laws of Taiwan; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: the laws of Austria; + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the laws of France; + +(11) in Estonia, Latvia, and Lithuania: the laws of Finland; + +(12) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the laws of England; and + +(13) in South Africa, Namibia, Lesotho, and Swaziland: the laws of the Republic of South Africa. + +14.2 Jurisdiction + +The following paragraph pertains to jurisdiction and replaces Subsection 14.2 (Jurisdiction) as it applies for those countries identified below: + +All rights, duties, and obligations are subject to the courts of the country in which Licensee obtained the Program license except that in the countries identified below all disputes arising out of or related to this Agreement, including summary proceedings, will be brought before and subject to the exclusive jurisdiction of the following courts of competent jurisdiction: + +AMERICAS + +(1) In Argentina: the Ordinary Commercial Court of the city of Buenos Aires; + +(2) in Brazil: the court of Rio de Janeiro, RJ; + +(3) in Chile: the Civil Courts of Justice of Santiago; + +(4) in Ecuador: the civil judges of Quito for executory or summary proceedings (as applicable); + +(5) in Mexico: the courts located in Mexico City, Federal District; + +(6) in Peru: the judges and tribunals of the judicial district of Lima, Cercado; + +(7) in Uruguay: the courts of the city of Montevideo; + +(8) in Venezuela: the courts of the metropolitan area of the city of Caracas; + +EUROPE, MIDDLE EAST, AND AFRICA + +(9) in Austria: the court of law in Vienna, Austria (Inner-City); + +(10) in Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape Verde, Central African Republic, Chad, Comoros, Congo Republic, Djibouti, Democratic Republic of Congo, Equatorial Guinea, France, French Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory Coast, Lebanon, Madagascar, Mali, Mauritania, Mauritius, Mayotte, Monaco, Morocco, New Caledonia, Niger, Reunion, Senegal, Seychelles, Togo, Tunisia, Vanuatu, and Wallis and Futuna: the Commercial Court of Paris; + +(11) in Angola, Bahrain, Botswana, Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait, Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar, Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia, Tanzania, Uganda, United Arab Emirates, the United Kingdom, West Bank/Gaza, Yemen, Zambia, and Zimbabwe: the English courts; + +(12) in South Africa, Namibia, Lesotho, and Swaziland: the High Court in Johannesburg; + +(13) in Greece: the competent court of Athens; + +(14) in Israel: the courts of Tel Aviv-Jaffa; + +(15) in Italy: the courts of Milan; + +(16) in Portugal: the courts of Lisbon; + +(17) in Spain: the courts of Madrid; and + +(18) in Turkey: the Istanbul Central Courts and Execution Directorates of Istanbul, the Republic of Turkey. + +14.3 Arbitration + +The following paragraph is added as a new Subsection 14.3 (Arbitration) as it applies for those countries identified below. The provisions of this Subsection 14.3 prevail over those of Subsection 14.2 (Jurisdiction) to the extent permitted by the applicable governing law and rules of procedure: + +ASIA PACIFIC + +(1) In Cambodia, India, Laos, Philippines, and Vietnam: + +Disputes arising out of or in connection with this Agreement will be finally settled by arbitration which will be held in Singapore in accordance with the Arbitration Rules of Singapore International Arbitration Center ("SIAC Rules") then in effect. The arbitration award will be final and binding for the parties without appeal and will be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators will be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties will appoint a third arbitrator who will act as chairman of the proceedings. Vacancies in the post of chairman will be filled by the president of the SIAC. Other vacancies will be filled by the respective nominating party. Proceedings will continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator will be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings will be conducted, including all documents presented in such proceedings, in the English language. The English language version of this Agreement prevails over any other language version. + +(2) In the People's Republic of China: + +In case no settlement can be reached, the disputes will be submitted to China International Economic and Trade Arbitration Commission for arbitration according to the then effective rules of the said Arbitration Commission. The arbitration will take place in Beijing and be conducted in Chinese. The arbitration award will be final and binding on both parties. During the course of arbitration, this agreement will continue to be performed except for the part which the parties are disputing and which is undergoing arbitration. + +(3) In Indonesia: + +Each party will allow the other reasonable opportunity to comply before it claims that the other has not met its obligations under this Agreement. The parties will attempt in good faith to resolve all disputes, disagreements, or claims between the parties relating to this Agreement. Unless otherwise required by applicable law without the possibility of contractual waiver or limitation, i) neither party will bring a legal action, regardless of form, arising out of or related to this Agreement or any transaction under it more than two years after the cause of action arose; and ii) after such time limit, any legal action arising out of this Agreement or any transaction under it and all respective rights related to any such action lapse. + +Disputes arising out of or in connection with this Agreement shall be finally settled by arbitration that shall be held in Jakarta, Indonesia in accordance with the rules of Board of the Indonesian National Board of Arbitration (Badan Arbitrase Nasional Indonesia or "BANI") then in effect. The arbitration award shall be final and binding for the parties without appeal and shall be in writing and set forth the findings of fact and the conclusions of law. + +The number of arbitrators shall be three, with each side to the dispute being entitled to appoint one arbitrator. The two arbitrators appointed by the parties shall appoint a third arbitrator who shall act as chairman of the proceedings. Vacancies in the post of chairman shall be filled by the chairman of the BANI. Other vacancies shall be filled by the respective nominating party. Proceedings shall continue from the stage they were at when the vacancy occurred. + +If one of the parties refuses or otherwise fails to appoint an arbitrator within 30 days of the date the other party appoints its, the first appointed arbitrator shall be the sole arbitrator, provided that the arbitrator was validly and properly appointed. + +All proceedings shall be conducted, including all documents presented in such proceedings, in the English and/or Indonesian language. + +EUROPE, MIDDLE EAST, AND AFRICA + +(4) In Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria, Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary, Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia, Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, and Uzbekistan: + +All disputes arising out of this Agreement or related to its violation, termination or nullity will be finally settled under the Rules of Arbitration and Conciliation of the International Arbitral Center of the Federal Economic Chamber in Vienna (Vienna Rules) by three arbitrators appointed in accordance with these rules. The arbitration will be held in Vienna, Austria, and the official language of the proceedings will be English. The decision of the arbitrators will be final and binding upon both parties. Therefore, pursuant to paragraph 598 (2) of the Austrian Code of Civil Procedure, the parties expressly waive the application of paragraph 595 (1) figure 7 of the Code. IBM may, however, institute proceedings in a competent court in the country of installation. + +(5) In Estonia, Latvia, and Lithuania: + +All disputes arising in connection with this Agreement will be finally settled in arbitration that will be held in Helsinki, Finland in accordance with the arbitration laws of Finland then in effect. Each party will appoint one arbitrator. The arbitrators will then jointly appoint the chairman. If arbitrators cannot agree on the chairman, then the Central Chamber of Commerce in Helsinki will appoint the chairman. + +AMERICAS COUNTRY AMENDMENTS + +CANADA + +10.1 Items for Which IBM May Be Liable + +The following replaces Item 1 in the first paragraph of this Subsection 10.1 (Items for Which IBM May Be Liable): + +1) damages for bodily injury (including death) and physical harm to real property and tangible personal property caused by IBM's negligence; and + +13. General + +The following replaces Item 13.d: + +d. Licensee agrees to comply with all applicable export and import laws and regulations, including those of that apply to goods of United States origin and that prohibit or limit export for certain uses or to certain users. + +The following replaces Item 13.i: + +i. No right or cause of action for any third party is created by this Agreement or any transaction under it, nor is IBM responsible for any third party claims against Licensee except as permitted by the Limitation of Liability section above for bodily injury (including death) or physical harm to real or tangible personal property caused by IBM's negligence for which IBM is legally liable to that third party. + +The following is added as Item 13.n: + +n. For purposes of this Item 13.n, "Personal Data" refers to information relating to an identified or identifiable individual made available by one of the parties, its personnel or any other individual to the other in connection with this Agreement. The following provisions apply in the event that one party makes Personal Data available to the other: + +(1) General + +(a) Each party is responsible for complying with any obligations applying to it under applicable Canadian data privacy laws and regulations ("Laws"). + +(b) Neither party will request Personal Data beyond what is necessary to fulfill the purpose(s) for which it is requested. The purpose(s) for requesting Personal Data must be reasonable. Each party will agree in advance as to the type of Personal Data that is required to be made available. + +(2) Security Safeguards + +(a) Each party acknowledges that it is solely responsible for determining and communicating to the other the appropriate technological, physical and organizational security measures required to protect Personal Data. + +(b) Each party will ensure that Personal Data is protected in accordance with the security safeguards communicated and agreed to by the other. + +(c) Each party will ensure that any third party to whom Personal Data is transferred is bound by the applicable terms of this section. + +(d) Additional or different services required to comply with the Laws will be deemed a request for new services. + +(3) Use + +Each party agrees that Personal Data will only be used, accessed, managed, transferred, disclosed to third parties or otherwise processed to fulfill the purpose(s) for which it was made available. + +(4) Access Requests + +(a) Each party agrees to reasonably cooperate with the other in connection with requests to access or amend Personal Data. + +(b) Each party agrees to reimburse the other for any reasonable charges incurred in providing each other assistance. + +(c) Each party agrees to amend Personal Data only upon receiving instructions to do so from the other party or its personnel. + +(5) Retention + +Each party will promptly return to the other or destroy all Personal Data that is no longer necessary to fulfill the purpose(s) for which it was made available, unless otherwise instructed by the other or its personnel or required by law. + +(6) Public Bodies Who Are Subject to Public Sector Privacy Legislation + +For Licensees who are public bodies subject to public sector privacy legislation, this Item 13.n applies only to Personal Data made available to Licensee in connection with this Agreement, and the obligations in this section apply only to Licensee, except that: 1) section (2)(a) applies only to IBM; 2) sections (1)(a) and (4)(a) apply to both parties; and 3) section (4)(b) and the last sentence in (1)(b) do not apply. + +PERU + +10. Limitation of Liability + +The following is added to the end of this Section 10 (Limitation of Liability): + +Except as expressly required by law without the possibility of contractual waiver, Licensee and IBM intend that the limitation of liability in this Limitation of Liability section applies to damages caused by all types of claims and causes of action. If any limitation on or exclusion from liability in this section is held by a court of competent jurisdiction to be unenforceable with respect to a particular claim or cause of action, the parties intend that it nonetheless apply to the maximum extent permitted by applicable law to all other claims and causes of action. + +10.1 Items for Which IBM May Be Liable + +The following is added to the end of this Subsection 10.1: + +In accordance with Article 1328 of the Peruvian Civil Code, the limitations and exclusions specified in this section will not apply to damages caused by IBM's willful misconduct ("dolo") or gross negligence ("culpa inexcusable"). + +UNITED STATES OF AMERICA + +5. Taxes + +The following is added to the end of this Section 5 (Taxes): + +For Programs delivered electronically in the United States for which Licensee claims a state sales and use tax exemption, Licensee agrees not to receive any tangible personal property (e.g., media and publications) associated with the electronic program. + +Licensee agrees to be responsible for any sales and use tax liabilities that may arise as a result of Licensee's subsequent redistribution of Programs after delivery by IBM. + +13. General + +The following is added to Section 13 as Item 13.n: + +n. U.S. Government Users Restricted Rights - Use, duplication or disclosure is restricted by the GSA IT Schedule 70 Contract with the IBM Corporation. + +The following is added to Item 13.f: + +Each party waives any right to a jury trial in any proceeding arising out of or related to this Agreement. + +ASIA PACIFIC COUNTRY AMENDMENTS + +AUSTRALIA + +5. Taxes + +The following sentences replace the first two sentences of Section 5 (Taxes): + +If any government or authority imposes a duty, tax (other than income tax), levy, or fee, on this Agreement or on the Program itself, that is not otherwise provided for in the amount payable, Licensee agrees to pay it when IBM invoices Licensee. If the rate of GST changes, IBM may adjust the charge or other amount payable to take into account that change from the date the change becomes effective. + +8. No Warranties + +The following is added to the first paragraph of Section 8 (No Warranties): + +Although IBM specifies that there are no warranties, Licensee may have certain rights under the Competition and Consumer Act 2010 or other legislation and are only limited to the extent permitted by the applicable legislation. + +10.1 Items for Which IBM May Be Liable + +The following is added to Subsection 10.1 (Items for Which IBM Maybe Liable): + +Where IBM is in breach of a condition or warranty implied by the Competition and Consumer Act 2010, IBM's liability is limited to the repair or replacement of the goods, or the supply of equivalent goods. Where that condition or warranty relates to right to sell, quiet possession or clear title, or the goods are of a kind ordinarily obtained for personal, domestic or household use or consumption, then none of the limitations in this paragraph apply. + +HONG KONG SAR, MACAU SAR, AND TAIWAN + +As applies to licenses obtained in Taiwan and the special administrative regions, phrases throughout this Agreement containing the word "country" (for example, "the country in which the original Licensee was granted the license" and "the country in which Licensee obtained the Program license") are replaced with the following: + +(1) In Hong Kong SAR: "Hong Kong SAR" + +(2) In Macau SAR: "Macau SAR" except in the Governing Law clause (Section 14.1) + +(3) In Taiwan: "Taiwan." + +INDIA + +10.1 Items for Which IBM May Be Liable + +The following replaces the terms of Items 1 and 2 of the first paragraph: + +1) liability for bodily injury (including death) or damage to real property and tangible personal property will be limited to that caused by IBM's negligence; and 2) as to any other actual damage arising in any situation involving nonperformance by IBM pursuant to, or in any way related to the subject of this Agreement, IBM's liability will be limited to the charge paid by Licensee for the individual Program that is the subject of the claim. + +13. General + +The following replaces the terms of Item 13.g: + +g. If no suit or other legal action is brought, within three years after the cause of action arose, in respect of any claim that either party may have against the other, the rights of the concerned party in respect of such claim will be forfeited and the other party will stand released from its obligations in respect of such claim. + +INDONESIA + +3.3 Term and Termination + +The following is added to the last paragraph: + +Both parties waive the provision of article 1266 of the Indonesian Civil Code, to the extent the article provision requires such court decree for the termination of an agreement creating mutual obligations. + +JAPAN + +13. General + +The following is inserted as Item 13.n: + +n. Any doubts concerning this Agreement will be initially resolved between us in good faith and in accordance with the principle of mutual trust. + +MALAYSIA + +10.2 Items for Which IBM Is Not Liable + +The word "SPECIAL" in Item 10.2b is deleted. + +NEW ZEALAND + +8. No Warranties + +The following is added to the first paragraph of this Section 8 (No Warranties): + +Although IBM specifies that there are no warranties, Licensee may have certain rights under the Consumer Guarantees Act 1993 or other legislation which cannot be excluded or limited. The Consumer Guarantees Act 1993 will not apply in respect of any goods which IBM provides, if Licensee requires the goods for the purposes of a business as defined in that Act. + +10. Limitation of Liability + +The following is added: + +Where Programs are not obtained for the purposes of a business as defined in the Consumer Guarantees Act 1993, the limitations in this Section are subject to the limitations in that Act. + +PEOPLE'S REPUBLIC OF CHINA + +4. Charges + +The following is added: + +All banking charges incurred in the People's Republic of China will be borne by Licensee and those incurred outside the People's Republic of China will be borne by IBM. + +PHILIPPINES + +10.2 Items for Which IBM Is Not Liable + +The following replaces the terms of Item 10.2b: + +b. special (including nominal and exemplary damages), moral, incidental, or indirect damages or for any economic consequential damages; or + +SINGAPORE + +10.2 Items for Which IBM Is Not Liable + +The words "SPECIAL" and "ECONOMIC" are deleted from Item 10.2b. + +13. General + +The following replaces the terms of Item 13.i: + +i. Subject to the rights provided to IBM's suppliers and Program developers as provided in Section 10 above (Limitation of Liability), a person who is not a party to this Agreement will have no right under the Contracts (Right of Third Parties) Act to enforce any of its terms. + +TAIWAN + +10.1 Items for Which IBM May Be Liable + +The following sentences are deleted: + +This limit also applies to any of IBM's subcontractors and Program developers. It is the maximum for which IBM and its subcontractors and Program developers are collectively responsible. + +EUROPE, MIDDLE EAST, AFRICA (EMEA) COUNTRY AMENDMENTS + +EUROPEAN UNION MEMBER STATES + +8. No Warranties + +The following is added to Section 8 (No Warranties): + +In the European Union ("EU"), consumers have legal rights under applicable national legislation governing the sale of consumer goods. Such rights are not affected by the provisions set out in this Section 8 (No Warranties). + +EU MEMBER STATES AND THE COUNTRIES IDENTIFIED BELOW + +Iceland, Liechtenstein, Norway, Switzerland, Turkey, and any other European country that has enacted local data privacy or protection legislation similar to the EU model. + +13. General + +The following replaces Item 13.e: + +(1) Definitions - For the purposes of this Item 13.e, the following additional definitions apply: + +(a) Business Contact Information - business-related contact information disclosed by Licensee to IBM, including names, job titles, business addresses, telephone numbers and email addresses of Licensee's employees and contractors. For Austria, Italy and Switzerland, Business Contact Information also includes information about Licensee and its contractors as legal entities (for example, Licensee's revenue data and other transactional information) + +(b) Business Contact Personnel - Licensee employees and contractors to whom the Business Contact Information relates. + +(c) Data Protection Authority - the authority established by the Data Protection and Electronic Communications Legislation in the applicable country or, for non-EU countries, the authority responsible for supervising the protection of personal data in that country, or (for any of the foregoing) any duly appointed successor entity thereto. + +(d) Data Protection & Electronic Communications Legislation - (i) the applicable local legislation and regulations in force implementing the requirements of EU Directive 95/46/EC (on the protection of individuals with regard to the processing of personal data and on the free movement of such data) and of EU Directive 2002/58/EC (concerning the processing of personal data and the protection of privacy in the electronic communications sector); or (ii) for non-EU countries, the legislation and/or regulations passed in the applicable country relating to the protection of personal data and the regulation of electronic communications involving personal data, including (for any of the foregoing) any statutory replacement or modification thereof. + +(e) IBM Group - International Business Machines Corporation of Armonk, New York, USA, its subsidiaries, and their respective Business Partners and subcontractors. + +(2) Licensee authorizes IBM: + +(a) to process and use Business Contact Information within IBM Group in support of Licensee including the provision of support services, and for the purpose of furthering the business relationship between Licensee and IBM Group, including, without limitation, contacting Business Contact Personnel (by email or otherwise) and marketing IBM Group products and services (the "Specified Purpose"); and + +(b) to disclose Business Contact Information to other members of IBM Group in pursuit of the Specified Purpose only. + +(3) IBM agrees that all Business Contact Information will be processed in accordance with the Data Protection & Electronic Communications Legislation and will be used only for the Specified Purpose. + +(4) To the extent required by the Data Protection & Electronic Communications Legislation, Licensee represents that (a) it has obtained (or will obtain) any consents from (and has issued (or will issue) any notices to) the Business Contact Personnel as are necessary in order to enable IBM Group to process and use the Business Contact Information for the Specified Purpose. + +(5) Licensee authorizes IBM to transfer Business Contact Information outside the European Economic Area, provided that the transfer is made on contractual terms approved by the Data Protection Authority or the transfer is otherwise permitted under the Data Protection & Electronic Communications Legislation. + +AUSTRIA + +8. No Warranties + +In Austria (and Germany) the following replaces Section 8 (No Warranties) in its entirety, including its title, if Licensee paid a charge to obtain the Program. + +8. Warranties and Exclusions + +The warranty period is twelve months from the date of delivery. The limitation period for consumers in action for breach of warranty is the statutory period as a minimum. + +The warranty for an IBM Program covers the functionality of the Program for its normal use and the Program's conformity to its specifications. + +IBM warrants that when the Program is used in the specified operating environment it will conform to its specifications. IBM does not warrant uninterrupted or error-free operation of the Program or that IBM will correct all Program defects. Licensee is responsible for the results obtained from the use of the Program. + +The warranty applies only to the unmodified portion of the Program. + +If the Program does not function as warranted during the warranty period and the problem cannot be resolved with information available, Licensee may return the Program to the party from whom Licensee acquired it and receive a refund of the amount Licensee paid. If Licensee down loaded the Program, Licensee may contact the party from whom Licensee acquired it to obtain the refund. + +This is IBM's sole obligation to Licensee, except as otherwise required by applicable statutory law. + +10. Limitation of Liability + +The following is added: + +The following limitations and exclusions of IBM's liability do not apply for damages caused by gross negligence or willful misconduct. + +10.1 Items for Which IBM May Be Liable + +The following replaces the first sentence in the first paragraph: + +Circumstances may arise where, because of a default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. + +In the second sentence of the first paragraph, delete entirely the parenthetical phrase: + +"(including fundamental breach, negligence, misrepresentation, or other contract or tort claim)". + +10.2 Items for Which IBM Is Not Liable + +The following replaces Item 10.2b: + +b. indirect damages or consequential damages; or + +BELGIUM, FRANCE, ITALY, AND LUXEMBOURG + +10. Limitation of Liability + +The following replaces the terms of Section 10 (Limitation of Liability) in its entirety: + +Except as otherwise provided by mandatory law: + +10.1 Items for Which IBM May Be Liable + +IBM's entire liability for all claims in the aggregate for any damages and losses that may arise as a consequence of the fulfillment of its obligations under or in connection with this Agreement or due to any other cause related to this Agreement is limited to the compensation of only those damages and losses proved and actually arising as an immediate and direct consequence of the non-fulfillment of such obligations (if IBM is at fault) or of such cause, for a maximum amount equal to the charges (if the Program is subject to fixed term charges, up to twelve months' charges) Licensee paid for the Program that has caused the damages. + +The above limitation will not apply to damages for bodily injuries (including death) and damages to real property and tangible personal property for which IBM is legally liable. + +10.2 Items for Which IBM Is Not Liable + +UNDER NO CIRCUMSTANCES IS IBM OR ANY OF ITS PROGRAM DEVELOPERS LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY: 1) LOSS OF, OR DAMAGE TO, DATA; 2) INCIDENTAL, EXEMPLARY OR INDIRECT DAMAGES, OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES; AND / OR 3) LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS, EVEN IF THEY ARISE AS AN IMMEDIATE CONSEQUENCE OF THE EVENT THAT GENERATED THE DAMAGES. + +10.3 Suppliers and Program Developers + +The limitation and exclusion of liability herein agreed applies not only to the activities performed by IBM but also to the activities performed by its suppliers and Program developers, and represents the maximum amount for which IBM as well as its suppliers and Program developers are collectively responsible. + +GERMANY + +8. No Warranties + +This Section 8 (No Warranties) is amended as specified for AUSTRIA. + +10. Limitation of Liability + +The following replaces this Section 10 (Limitation of Liability) in its entirety: + +a. IBM will be liable without limit for 1) loss or damage caused by a breach of an express guarantee; 2) damages or losses resulting in bodily injury (including death); and 3) damages caused intentionally or by gross negligence. + +b. In the event of loss, damage and frustrated expenditures caused by slight negligence or in breach of essential contractual obligations, IBM will be liable, regardless of the basis on which Licensee is entitled to claim damages from IBM (including fundamental breach, negligence, misrepresentation, or other contract or tort claim), per claim only up to the greater of 500,000 euro or the charges (if the Program is subject to fixed term charges, up to 12 months' charges) Licensee paid for the Program that caused the loss or damage. A number of defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one default. + +c. In the event of loss, damage and frustrated expenditures caused by slight negligence, IBM will not be liable for indirect or consequential damages, even if IBM was informed about the possibility of such loss or damage. + +d. In case of delay on IBM's part: 1) IBM will pay to Licensee an amount not exceeding the loss or damage caused by IBM's delay and 2) IBM will be liable only in respect of the resulting damages that Licensee suffers, subject to the provisions of Items a and b above. + +13. General + +The following replaces the provisions of 13.g: + +g. Any claims resulting from this Agreement are subject to a limitation period of three years, except as stated in Section 8 (No Warranties) of this Agreement. + +The following replaces the provisions of 13.i: + +i. No right or cause of action for any third party is created by this Agreement, nor is IBM responsible for any third party claims against Licensee, except (to the extent permitted in Section 10 (Limitation of Liability)) for: i) bodily injury (including death); or ii) damage to real or tangible personal property for which (in either case) IBM is legally liable to that third party. + +IRELAND + +8. No Warranties + +The following sentence is added to the second paragraph of this Section 8 (No Warranties): + +Except as expressly provided in these terms and conditions, or Section 12 of the Sale of Goods Act 1893 as amended by the Sale of Goods and Supply of Services Act, 1980 (the "1980 Act"), all conditions or warranties (express or implied, statutory or otherwise) are hereby excluded including, without limitation, any warranties implied by the Sale of Goods Act 1893 as amended by the 1980 Act (including, for the avoidance of doubt, Section 39 of the 1980 Act). + +IRELAND AND UNITED KINGDOM + +2. Agreement Structure + +The following sentence is added: + +Nothing in this paragraph shall have the effect of excluding or limiting liability for fraud. + +10.1 Items for Which IBM May Be Liable + +The following replaces the first paragraph of the Subsection: + +For the purposes of this section, a "Default" means any act, statement, omission or negligence on the part of IBM in connection with, or in relation to, the subject matter of an Agreement in respect of which IBM is legally liable to Licensee, whether in contract or in tort. A number of Defaults which together result in, or contribute to, substantially the same loss or damage will be treated as one Default. + +Circumstances may arise where, because of a Default by IBM in the performance of its obligations under this Agreement or other liability, Licensee is entitled to recover damages from IBM. Regardless of the basis on which Licensee is entitled to claim damages from IBM and except as expressly required by law without the possibility of contractual waiver, IBM's entire liability for any one Default will not exceed the amount of any direct damages, to the extent actually suffered by Licensee as an immediate and direct consequence of the Default, up to the greater of (1) 500,000 euro (or the equivalent in local currency) or (2) 125% of the charges (if the Program is subject to fixed term charges, up to 12 months' charges) for the Program that is the subject of the claim. Notwithstanding the foregoing, the amount of any damages for bodily injury (including death) and damage to real property and tangible personal property for which IBM is legally liable is not subject to such limitation. + +10.2 Items for Which IBM Is Not Liable + +The following replaces Items 10.2b and 10.2c: + +b. special, incidental, exemplary, or indirect damages or consequential damages; or + +c. wasted management time or lost profits, business, revenue, goodwill, or anticipated savings. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_es b/charts/mq-devserver/LICENSE_locale/LICENSE_es new file mode 100644 index 0000000..8fe60d3 --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_es @@ -0,0 +1,326 @@ +INFORMACIÓN SOBRE LICENCIA + +Los Programas que se enumeran a continuación se licencian bajo los siguientes términos y condiciones de Licencia, además de los términos de licencia del Programa acordados previamente entre el Cliente e IBM. Si el Cliente no ha aceptado con anterioridad los términos de la licencia aplicables al Programa, se aplicará Acuerdo Internacional de Licencia para Programas sin Garantía (Z125-5589-05). + +Nombre de Programa (Número de Programa): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Los términos estándar siguientes se aplican al uso por parte del Licenciatario del Programa. + +Programas Empaquetados + +El Programa se licencia como un paquete de varios productos que incluye los Programas Empaquetados definidos a continuación. El Licenciatario está autorizado para instalar y utilizar dichos Programas Empaquetados dentro de los límites de los Documentos de Titularidad del Programa tal como se indica en este Documento de Información de Licencia. El licenciatario no está autorizado para transferir ni recomercializar los programas empaquetados separados del paquete de varios productos. Un programa empaquetado puede ir acompañado de términos de licencia y, dichos términos, de haberlos, se aplicarán al uso del programa empaquetado por parte del licenciatario. En el supuesto de que se produjera un conflicto, los términos de este documento de Licencia prevalecerán sobre los términos del Programa Empaquetado. Cuando el derecho del Licenciatario a utilizar el Programa expira o finaliza, el Licenciatario debe interrumpir el uso, destruir o devolver inmediatamente todas las copias de los Programas Empaquetados al distribuidor de quien adquirió el Programa. Si el Licenciatario ha descargado los Programas Empaquetados, el Licenciatario debe ponerse en contacto con el distribuidor de quien adquirió el Programa. Si el Licenciatario deseara adquirir una licencia para los Programas Empaquetados para cualquier uso más allá de los límites que se establecen más arriba, deberá ponerse en contacto con un Representante de Ventas de IBM o con el distribuidor que le proporcionó el Programa para obtener la licencia adecuada. + +Los siguientes Programas Empaquetados se licencian con el Programa: +IBM MQ V9.0.3 + +Limitación para el Desarrollador + +Si el Programa se conoce como "Para Desarrolladores", el Programa sólo se puede desplegar como parte del desarrollo interno y de las pruebas unitarias del Licenciatario en una máquina de desarrollo. Una máquina de desarrollo es un entorno de escritorio virtual o físico que ejecuta un sistema operativo principal y el Programa, siendo ambos accesibles y utilizables sólo por un desarrollador especificado. El Licenciatario no está autorizado para utilizar el Programa para procesar cargas de trabajo de producción, simular cargas de trabajo de producción o realizar pruebas de la escalabilidad de cualquier código, aplicación o sistema. El Licenciatario no está autorizado para utilizar ninguna parte del Programa para ninguna otra finalidad sin adquirir las autorizaciones de producción correspondientes. + +Componentes no utilizados para establecer las Autorizaciones Necesarias + +Cuando se determina el número de autorizaciones que requiere el Licenciatario para la instalación o uso del Programa, no se tiene en consideración la instalación o uso de los siguientes componentes del Programa. En otras palabras, el Licenciatario puede instalar y utilizar los siguientes componentes del Programa, de conformidad con los términos de la licencia, pero estos componentes no se utilizarán para determinar el número de autorizaciones requeridas para el Programa. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componentes en Código Fuente y Materiales de muestra + +El Programa puede incluir algunos componentes en formato de código fuente ("Componente en Código Fuente") y otros materiales identificados como Materiales de muestra. El Licenciatario puede copiar y modificar los Componentes en Código Fuente y los Materiales de muestra únicamente para uso interno, siempre que dicho uso esté dentro de los límites de los derechos de licencia en virtud del presente Acuerdo, y siempre y cuando el Licenciatario no altere ni suprima ninguna información de copyright ni de avisos de los Componentes en Código Fuente ni de los Materiales de muestra. IBM proporciona los Componentes en Código Fuente y los Materiales de muestra sin ningún tipo de obligación de soporte y "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, NI IMPLÍCITA NI EXPLÍCITA, INCLUIDAS LA GARANTÍA DE TÍTULO, LA GARANTÍA DE NO VULNERACIÓN DE DERECHOS DE TERCEROS O DE NO INJERENCIA Y LAS GARANTÍAS Y CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN E IDONEIDAD PARA UNA FINALIDAD DETERMINADA. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Acuerdo Internacional de Licencia para Programas sin Garantía + +Parte 1 - Condiciones Generales + +EL LICENCIATARIO ACEPTA LOS TÉRMINOS DE ESTE ACUERDO MEDIANTE LA DESCARGA, INSTALACIÓN, COPIA, ACCESO, PULSANDO EL BOTÓN "ACEPTAR" O MEDIANTE CUALQUIER TIPO DE UTILIZACIÓN DEL PROGRAMA. SI EL CLIENTE ACEPTA ESTOS TÉRMINOS EN NOMBRE DEL LICENCIATARIO, EL CLIENTE DECLARA Y GARANTIZA QUE TIENE PLENA AUTORIDAD PARA OBLIGAR AL LICENCIATARIO A CUMPLIR DICHOS TÉRMINOS. SI NO ACEPTA ESTOS TÉRMINOS, + +* DESCARGAR, INSTALAR, COPIAR, ACCEDER, PULSAR EL BOTÓN "ACEPTAR" NI USAR EL PROGRAMA; Y DEBERÁ + +* DEVOLVER INMEDIATAMENTE LOS MEDIOS NO UTILIZADOS Y LA DOCUMENTACIÓN A LA ENTIDAD A LA CUAL LOS ADQUIRIÓ PARA EL REEMBOLSO DEL IMPORTE PAGADO. SI EL PROGRAMA FUE DESCARGADO, DEBERÁN DESTRUIRSE TODAS LAS COPIAS DEL PROGRAMA. + +1. Definiciones + +"Uso Autorizado" - es el nivel especificado para el cual el Licenciatario está autorizado para ejecutar o hacer funcionar el Programa. Dicho nivel puede medirse por el número de usuarios, millones de unidades de servicio ("MSUs"), Unidades de Valor de Procesador (Processor Value Units o "PVUs"), u otro nivel de uso especificado por IBM. + +"IBM" - International Business Machines Corporation o una de sus subsidiarias. + +"Información sobre Licencia" ("LI") - es un documento que proporciona información y cualquier término adicional específico para un Programa. La LI del Programa está disponible en www.ibm.com/software/sla. También puede encontrar la LI en el directorio del Programa, mediante el uso de un mandato del sistema, o como un folleto informativo incluido en el Programa. + +"Programa" - es lo siguiente, incluyendo el original y cualquier copia total o parcial de: 1) instrucciones y datos legibles por máquina, 2) componentes, archivos y módulos, 3) contenido audiovisual (como imágenes, texto, grabaciones o dibujos), y 4) materiales bajo licencia relacionados (como claves y documentación). + +2. Estructura del Acuerdo + +Este Acuerdo incluye la Parte 1 - Condiciones Generales, Parte 2 - Condiciones exclusivas para cada país (si las hubiera) y la Información sobre Licencia que constituyen el acuerdo completo entre el Licenciatario e IBM en relación al uso del Programa. Sustituye a cualquier comunicación oral o escrita anterior entre las partes en relación al uso del Programa por parte del Licenciatario. Los términos de la Parte 2 pueden sustituir o modificar los términos de la Parte 1. En el supuesto de cualquier conflicto, los términos de la LI prevalecen sobre los de ambas Partes. + +3. Licencia + +El Programa es propiedad de IBM o de un distribuidor de IBM y está sujeto a derechos de autor y se otorga bajo licencia, no se vende. + +IBM le concede al Licenciatario una licencia no exclusiva para 1) utilizar el Programa según los términos establecidos en el Uso Autorizado especificado en la factura, 2) realizar e instalar copias que respalden dicho Uso Autorizado, y 3) realizar una copia de seguridad, todo ello siempre y cuando: + +a. el Licenciatario haya obtenido el Programa de forma legítima y cumpla los términos de este Acuerdo; + +b. la copia de seguridad no se ejecute a menos que el Programa del que se haya realizado la copia no pueda ejecutarse; + +c. el Licenciatario reproduzca todas las notificaciones de copyright y otros distintivos de titularidad en cada copia, o copia parcial del Programa; + +d. el Licenciatario se asegure de que cualquier persona que utilice el Programa (tanto si accede localmente o de forma remota): 1) lo hace únicamente en nombre del Licenciatario, y 2) cumple los términos de este Acuerdo; + +e. el Licenciatario no podrá 1) utilizar, copiar, modificar ni distribuir el Programa excepto del modo permitido expresamente en este Acuerdo; 2) desensamblar, descompilar, traducir de otro modo o realizar técnicas de ingeniería inversa en el Programa, excepto en la medida permitida expresamente por ley sin posibilidad de renuncia contractual; 3) utilizar cualquiera de los componentes, archivos, módulos, contenido audiovisual del Programa, o materiales bajo licencia relacionados, de forma separada de dicho Programa; o 4) sublicenciar, alquilar o arrendar el Programa; y + +f. si el Licenciatario obtiene este Programa como un Programa de Soporte, el Licenciatario utilizará el Programa únicamente como soporte del Programa Principal y sujeto a cualquier limitación de la licencia del Programa Principal, o, si el Licenciatario obtiene este Programa como Programa Principal, el Licenciatario utilizará todos los Programas de Soporte únicamente como soporte de este Programa y sujetos a cualquier limitación establecida en este Acuerdo. A los efectos de este apartado "f," un "Programa de Soporte" es un Programa que forma parte de otro Programa de IBM ("Programa Principal") y se identifica como Programa de Soporte en la LI del Programa Principal. Para obtener una licencia independiente para un Programa de Soporte sin estas restricciones, el Licenciatario debe ponerse en contacto con la parte a la cual adquirió el Programa de Soporte. + +Esta licencia se aplica a cada copia del Programa que realice el Licenciatario. + +3.1 Actualizaciones, Mejoras, Correcciones y Parches + +3.1.1 Actualizaciones + +Si se sustituye el Programa por una actualización, la licencia del Programa sustituido se rescindirá inmediatamente. + +3.1.2 Mejoras, Correcciones y Parches + +En el caso en que el Licenciatario reciba una mejora, corrección o parche para un Programa, el Licenciatario acepta cualquier término adicional o diferente que sea aplicable a dicha mejora, corrección o parche que esté especificada en su LI. Si no se proporcionan términos adicionales o diferentes, la mejora, corrección o parche estará sujeto únicamente a este Acuerdo. Si el Programa se sustituye por una mejora, el Licenciatario acuerda interrumpir inmediatamente el uso del Programa sustituido. + +3.2 Licencias a Plazo Fijo + +Si IBM otorga el Programa bajo licencia durante un plazo determinado, la licencia del Licenciatario terminará al final del plazo determinado, a menos que el Licenciatario e IBM acuerden su renovación. + +3.3 Vigencia y Terminación + +Los términos de este Acuerdo son efectivos hasta su terminación. + +IBM puede terminar la licencia del Licenciatario en caso que éste incumpla los términos de este Acuerdo. + +En el caso en que cualquiera de las partes termine la licencia por cualquier causa, el Licenciatario acuerda interrumpir el uso inmediatamente y destruir todas sus copias del Programa. Cualquier término de este Acuerdo que por su carácter tenga una vigencia superior a la terminación del Acuerdo permanecerá en vigor hasta su cumplimiento y se aplicará a los sucesores y cesionarios respectivos de ambas partes. + +4. Cargos + +Los Cargos, si los hubiera, se basan en el Uso Autorizado obtenido, que se especifica en la factura. IBM no ofrece créditos o reembolsos para cargos ya devengados o pagados, a no ser que se especifique de otra manera en este Acuerdo. + +Si el Licenciatario desea aumentar su Uso Autorizado, el Licenciatario deberá notificarlo con antelación a IBM o a un distribuidor autorizado de IBM y pagar cualquier cargo aplicable. + +5. Impuestos + +Si cualquier autoridad impone una tasa, impuesto, gravamen o cargo al Programa, con exclusión de aquellos impuestos relativos al beneficio neto empresarial de IBM, el Licenciatario acuerda pagar las cantidades correspondientes a dichos conceptos, tal y como se especifique en una factura, o presentará la documentación justificante de estar exento de los mismos. El Licenciatario es responsable de cualquier impuesto que grave la propiedad del Programa desde la fecha en la que el Licenciatario obtuvo el Programa. Si cualquier autoridad impone una tasa, impuesto, gravamen o cargo por la importación o exportación, traspaso, acceso o uso del Programa fuera del país en el que se otorgó la licencia al Licenciatario, el Licenciatario acuerda ser responsable de, y pagar, cualquier cantidad impuesta. + +6. Garantía de Devolución + +Si el Licenciatario no está satisfecho con el Programa por cualquier motivo y es el Licenciatario original, el Licenciatario puede terminar la licencia y obtener el reembolso del importe que ha pagado por el Programa, si lo hubiera, siempre y cuando el Licenciatario devuelva el Programa a la parte a la cual adquirió el Programa dentro del plazo de 30 días siguientes a la fecha de la factura. Si la licencia es de plazo fijo y está sujeta a renovación, el Licenciatario podrá obtener un reembolso únicamente si devuelve el Programa dentro de los primeros 30 días del plazo inicial. Si el Licenciatario descargó el Programa, el Licenciatario deberá ponerse en contacto con la parte a la cual adquirió el Programa para recibir instrucciones sobre cómo obtener el reembolso. + +7. Transferencia del Programa + +El Licenciatario puede transferir el Programa y todos sus derechos de licencia y obligaciones a cualquier tercero únicamente si dicha parte acepta los términos de este Acuerdo. Si cualquiera de las partes termina la licencia por cualquier motivo, se prohíbe que el Licenciatario transfiera el Programa a un tercero. El Licenciatario no transferirá una parte: 1) del Programa, o 2) del Uso Autorizado del Programa. Cuando el Licenciatario transfiere el Programa, deberá transferir también una copia impresa de este Acuerdo, incluyendo la LI. Después de la transferencia, se considera terminada la licencia del Licenciatario. + +8. Sin garantías + +SUJETO A CUALQUIER GARANTÍA ESTATUTARIA QUE NO PUDIERA EXCLUIRSE, IBM NO OFRECE NINGUNA GARANTÍA NI CONDICIÓN, NI EXPLÍCITA NI IMPLÍCITA, EN RELACIÓN CON EL PROGRAMA O EL SOPORTE, SI EXISTIERA, INCLUIDAS PERO SIN LIMITARSE A, LAS GARANTÍAS O CONDICIONES IMPLÍCITAS DE COMERCIALIZACIÓN, CALIDAD SATISFACTORIA, IDONEIDAD PARA UNA FINALIDAD CONCRETA Y TITULARIDAD, Y CUALQUIER GARANTÍA O CONDICIÓN DE NO INFRACCIÓN DE LOS DERECHOS DE TERCEROS. + +LA EXCLUSIÓN DE GARANTÍAS EXPLÍCITAS O IMPLÍCITAS PUEDE NO ESTAR PERMITIDA POR ALGUNOS ESTADOS O JURISDICCIONES Y, POR TANTO, PUEDE QUE DICHA EXCLUSIÓN NO SEA APLICABLE AL LICENCIATARIO. EN TAL CASO, LA DURACIÓN DE DICHAS GARANTÍAS SE LIMITA AL PERIODO MÍNIMO QUE EXIJA LA LEGISLACIÓN. NO SE APLICARÁ NINGUNA GARANTÍA DESPUÉS DE ESE PERÍODO. ALGUNOS ESTADOS O JURISDICCIONES NO PERMITEN LIMITACIONES EN CUANTO A LA DURACIÓN DE UNA GARANTÍA IMPLÍCITA, POR LO PUEDE QUE LA LIMITACIÓN ANTERIOR NO SEA APLICABLE AL LICENCIATARIO. EL LICENCIATARIO PUEDE CONTAR CON OTROS DERECHOS QUE VARÍAN SEGÚN EL ESTADO O LA JURISDICCIÓN. + +LAS EXENCIONES DE RESPONSABILIDAD Y LAS EXCLUSIONES DE ESTA SECCIÓN 8 TAMBIÉN SE APLICAN A CUALQUIER PROVEEDOR O DESARROLLADOR DE PROGRAMAS DE IBM. + +LOS FABRICANTES, LOS PROVEEDORES Y LOS EDITORES DE PROGRAMAS NO IBM PUEDEN OFRECER SUS PROPIAS GARANTÍAS. + +IBM NO OFRECE SOPORTE DE NINGÚN TIPO, SALVO QUE IBM ESPECIFIQUE LO CONTRARIO. EN ESE CASO, CUALQUIER SOPORTE QUE OFREZCA IBM ESTÁ SUJETO A LAS EXENCIONES DE RESPONSABILIDAD Y A LAS EXCLUSIONES DE ESTA SECCIÓN 8. + +9. Datos y Bases de Datos del Licenciatario + +Para ayudar al Licenciatario a aislar el origen de un problema con el Programa, IBM podrá solicitar que el Licenciatario: 1) permita que IBM acceda de forma remota al sistema del Licenciatario, o 2) envíe información sobre el Licenciatario o datos del sistema a IBM. No obstante, IBM no está obligada a proporcionar dicha asistencia a menos que las Partes tengan un acuerdo, independiente y por escrito, mediante el cual IBM proporcione al Licenciatario dicho tipo de soporte que no está incluido en las obligaciones de IBM en este Acuerdo. En cualquier caso, IBM utilizará la información sobre errores y problemas para mejorar sus productos y servicios así como para prestar asistencia con su oferta de servicios de mantenimiento relacionados. Con esa finalidad, IBM podrá utilizar a subcontratistas y Empresas IBM (incluyendo en uno o más países distintos del país en el que se encuentra el Licenciatario) y el Licenciatario autoriza a IBM para ello. + +El Licenciatario permanecerá responsable de: 1) los datos y contenidos de cualquier base de datos que el Licenciatario ponga a disposición de IBM, 2) la selección y la implementación de los procedimientos y controles relacionados con el acceso, seguridad, encriptación, uso y transmisión de los datos (incluyendo cualquier dato personal que pueda identificarse), y 3) las copias de seguridad y la recuperación de cualquier base de datos y de cualquier dato almacenado. El Licenciatario no enviará a IBM ni le permitirá acceso a datos personales y permanecerá responsable por cualquier coste razonable u otras cantidades que IBM tenga que hacer frente en relación a cualquier información equivocadamente suministrada a IBM, o a la pérdida o revelación de la misma por IBM, incluso las originadas de reclamaciones de terceros. + +10. Limitación de Responsabilidad + +Las limitaciones y exclusiones de esta Cláusula 10 "Limitación de Responsabilidad" se aplicarán en la medida en que no las prohíba la legislación aplicable sin la posibilidad de una renuncia contractual. + +10.1 Aspectos por los que IBM Puede Ser Responsable + +Pueden surgir circunstancias en las cuales, debido a un incumplimiento de IBM de sus obligaciones contractuales u otra responsabilidad, el Licenciatario tuviera derecho a reclamar daños a IBM. Independientemente de las razones por las que el Licenciatario tenga derecho a reclamar daños a IBM (incluyendo un incumplimiento, negligencia, falsedad u otra reclamación contractual o extracontractual), la responsabilidad de IBM por todas las reclamaciones que surjan de, en relación con, cada Programa o que de otra manera surjan en relación con este Acuerdo estará limitada únicamente a: 1) los daños físicos a las personas (incluyendo la muerte) y daños a las propiedades, y 2) otros daños directos probados hasta el importe de los cargos (si el Programa está sujeto a cargos de plazo determinado, hasta el importe de los cargos de doce meses) que ha pagado el Licenciatario por el Programa que sea objeto de la reclamación. + +Este límite se aplica también a cualquier proveedor o desarrollador de Programas de IBM. Es la cantidad máxima por la que IBM y sus proveedores y desarrolladores de Programas serán responsables colectivamente. + +10.2 Aspectos por los que IBM No Es Responsable + +BAJO NINGUNA CIRCUNSTANCIA, IBM, SUS DESARROLLADORES DE PROGRAMAS O PROVEEDORES SERÁN RESPONSABLES DE LOS SIGUIENTES CASOS, INCLUSO EN EL CASO DE QUE HUBIERAN SIDO ADVERTIDOS DE TAL POSIBILIDAD: + +a. PÉRDIDAS DE, O DAÑOS A, LOS DATOS; + +b. DAÑOS ESPECIALES, INCIDENTALES, PUNITIVOS, INDIRECTOS O CUALQUIER DAÑO ECONÓMICO CONSECUENCIAL; O + +c. PÉRDIDAS DE BENEFICIOS, NEGOCIO, INGRESOS, PLUSVALÍAS O ECONOMÍAS PREVISTAS + +11. Verificación + +A los efectos de esta Cláusula 11 "Verificación", "Términos del Programa ILAN" significa: 1) este Acuerdo así como los Anexos aplicables y los documentos transaccionales proporcionados por IBM, y 2) las políticas de software de IBM que pueden encontrarse en el sitio web sobre Políticas de Software de IBM (www.ibm.com/softwarepolicies), incluyendo pero sin limitarse a las políticas relativas a las copias de seguridad, condiciones para los precios de subcapacidad y migración. + +Los derechos y obligaciones establecidos en esta Cláusula 11 permanecerán vigentes mientras el Licenciatario tenga una licencia en vigor para el Programa y durante los dos años siguientes. + +11.1 Proceso de Verificación + +El Licenciatario acuerda crear, conservar y proporcionar a IBM y a sus auditores registros escritos precisos, salidas de las herramientas del sistema y otra información sobre el sistema suficiente para verificar que el uso de todos los Programas por parte del Licenciatario se realiza conforme a los Términos del Programa ILAN, incluyendo, sin limitarse, todos los términos IBM sobre licencias y de calificación de precios aplicables. El Licenciatario es responsable de: 1) asegurar que no excede su Uso Autorizado, y 2) actuar de conformidad con los Términos del Programa ILAN. + +Previa notificación con antelación suficiente, IBM podrá verificar el cumplimiento por parte del Licenciatario de los Términos del Programa ILAN en todas las ubicaciones y para todos los entornos en los que el Licenciatario utilice, con cualquier finalidad, los Programas sujetos a los Términos del Programa ILAN. Dicha verificación se realizará de manera que se minimice la interferencia en la operativa de negocio del Licenciatario, en las instalaciones del Licenciatario, y durante su horario habitual de trabajo. IBM podrá utilizar a un auditor independiente para ayudar en la verificación, siempre que IBM tenga firmado, por escrito y con anterioridad, un acuerdo de confidencialidad con dicho auditor. + +11.2 Resolución + +IBM notificará al Licenciatario, por escrito, si conforme a dicha verificación el Licenciatario ha utilizado cualquier Programa sobrepasando su Uso Autorizado o no ha cumplido de otro modo con los Términos del Programa ILAN. El Licenciatario acuerda pagar, a la mayor brevedad posible, directamente a IBM los cargos que IBM especifique en una factura por: 1) cualquier uso en exceso, 2) el soporte por dicho uso en exceso durante el periodo que se ha realizado dicho uso en exceso o por dos años, lo que sea menor, y 3) cualquier cargo adicional y cualquier otra responsabilidad que el Cliente esté obligado a pagar como resultado de dicha verificación. + +12. Avisos de Terceros + +El Programa puede incluir código de terceros que IBM, no el tercero, otorga bajo licencia al Licenciatario en virtud de este Acuerdo. Los avisos, si los hubiera, para el código de terceros, ("Avisos de Terceros") se incluyen únicamente para información del Licenciatario. Estos avisos pueden encontrarse en los archivos de avisos del Programa. Se puede encontrar información sobre cómo obtener un código fuente para determinados códigos de terceros en los Avisos de Terceros. Si en los Avisos de Terceros, IBM identifica el código de terceros como "Código de Terceros Modificable", IBM autoriza al Licenciatario a: 1) modificar el Código de Terceros Modificable, y 2) realizar técnicas de ingeniería inversa a los módulos del Programa que se conectan con el Código de Terceros Modificable, siempre y cuando su única finalidad sea depurar las modificaciones realizadas por el Licenciatario a dicho código de terceros. Las obligaciones de servicio y soporte de IBM, si las hubiera, se aplican únicamente al Programa sin modificar. + +13. General + +a. Nada de lo dispuesto en este Acuerdo afectará a los derechos de los consumidores establecidos por ley que no puedan ser cancelados o limitados por contrato. + +b. En relación con los Programas que IBM proporciona al Licenciatario de forma tangible, IBM cumple sus obligaciones de envío y entrega en el momento en que se entreguen dichos Programas al transportista designado por IBM, salvo que las partes lo acuerden, por escrito, de otro modo. + +c. Si cualquier disposición de este Acuerdo se declara inválida o no exigible, las disposiciones restantes de este Acuerdo permanecerán en vigor. + +d. El Licenciatario acuerda cumplir todas las leyes y normas aplicables sobre exportaciones e importaciones, incluyendo las normativas sobre sanciones y embargo de EE.UU. y las prohibiciones de exportaciones para ciertos usos o a determinados usuarios finales. + +e. El Licenciatario autoriza a International Business Machines Corporation y sus filiales (así como a sus sucesores y cesionarios, contratistas e IBM Business Partners) para almacenar y utilizar la información de contacto del Licenciatario, en cualquier lugar en el que desarrollen su actividad empresarial, en relación a los productos y servicios de IBM, o como consecuencia de la relación empresarial de IBM con el Licenciatario. + +f. Cada parte dará a la otra la oportunidad razonable de cumplir sus obligaciones en virtud del presente Acuerdo antes de reclamar a la otra por un incumplimiento de sus obligaciones contractuales. Las partes intentarán resolver de buena fe cualesquiera controversias, desacuerdos o reclamaciones relacionadas con este Acuerdo. + +g. Salvo que se establezca de otra manera en la legislación aplicable, sin posibilidad de renuncia contractual o limitación: 1) ninguna de las partes interpondrá acción legal alguna, independientemente de la forma, relacionada con este Acuerdo transcurridos más de dos años desde que se produjo su causa; y 2) transcurrido dicho periodo de tiempo, cualquier acción legal que surgiera en relación con el Acuerdo, así como todos los respectivos derechos relacionados con dicha acción, prescribirán. + +h. Ninguna de las partes será responsable del incumplimiento de cualquier obligación debido a causas fuera de control. + +i. Este Acuerdo no creará derecho alguno o causa de demanda para ningún tercero, ni IBM será responsable de las reclamaciones al Cliente de terceros, salvo por lo especificado en la Cláusula 10.1 "Aspectos por los que IBM Puede Ser Responsable" en relación con daños a las personas (incluyendo muerte) y a las propiedades de las que IBM sea legalmente responsable frente a dichos terceros. + +j. Al aceptar los términos de este Acuerdo, ambas partes acuerdan que no se están basando en ninguna manifestación que no esté incluida en este Acuerdo, incluyendo pero sin limitarse a cualquier manifestación en relación con: 1) el rendimiento o funcionamiento del Programa, 2) las experiencias o recomendaciones de otras partes; o 3) cualquier resultado o ahorro que el Licenciatario pudiera obtener. + +k. IBM tiene firmados acuerdos con determinadas organizaciones (denominadas "IBM Business Partners") para promocionar, comercializar y dar soporte a ciertos Programas. Los IBM Business Partners permanecerán independientes y son distintos de IBM. IBM no se hace responsable de las acciones o declaraciones de los IBM Business Partners ni de las obligaciones que éstos hayan contraído con el Licenciatario. + +l. Los términos de indemnización de propiedad intelectual y de licencia de otros acuerdos del Licenciatario con IBM (como las Condiciones Generales de IBM) no son de aplicación a las licencias de Programas concedidas en virtud de este Acuerdo. + +m. Ambas partes están de acuerdo en que la información intercambiada no es confidencial. Si alguna de las partes requiriera un intercambio de información confidencial, dicho intercambio se realizaría bajo un acuerdo de confidencialidad; + +14. Ámbito Geográfico y Legislación Aplicable + +14.1 Legislación Aplicable + +Ambas partes aceptan la aplicación de las leyes del país en el que el Licenciatario haya obtenido la licencia del Programa a fin de regir, interpretar y asegurar el cumplimiento de los derechos, deberes y obligaciones del Licenciatario y de IBM, respectivamente, que puedan surgir en virtud de, o que estén de cualquier manera relacionados con este Acuerdo, a pesar de cualquier posible conflicto de ley. + +No se aplican los términos de la Convención de las Naciones Unidas sobre los Contratos de Compraventa Internacional de Bienes. + +14.2 Jurisdicción + +Todos los derechos, deberes y obligaciones están sujetos a los tribunales del país en el que el Licenciatario haya obtenido la licencia del Programa. + +Parte 2 - Condiciones Exclusivas para cada País + +Para las licencias otorgadas en los países especificados a continuación, los siguientes términos sustituyen o modifican los términos incluidos en la Parte 1. Todos los términos de la Parte 1 que no sean modificados por estas enmiendas permanecerán sin cambios y en vigor. Esta Parte 2 se estructura del siguiente modo: + +* Enmiendas para varios países de la Parte 1, Cláusula 14 "Legislación Aplicable y Jurisdicción"; + +* Enmiendas de otros términos del Acuerdo para los países de América y + +* Enmiendas de otros términos del Acuerdo para los países de Europa, Oriente Medio y África. + +Enmiendas para varios países de la Parte 1, Cláusula 14 "Legislación Aplicable y Jurisdicción" + +14.1 Legislación Aplicable + +La frase "las leyes del país en el que el Licenciatario haya obtenido la licencia del Programa" en el primer párrafo de la Cláusula 14.1 "Legislación Aplicable" se sustituye por las frases siguientes en los países que figuran a continuación: + +AMÉRICA + +(1) En México: las leyes federales de la República de México; y + +(2) en Venezuela: las leyes de la República Bolivariana de Venezuela. + +14.2 Jurisdicción + +El siguiente párrafo pertenece al apartado de jurisdicción y sustituye a la Cláusula 14.2 "Jurisdicción" tal y como se aplica a los países identificados a continuación: + +Todos los derechos, deberes y obligaciones están sometidos a los tribunales del país en el que el Licenciatario haya obtenido la licencia del Programa excepto en los países identificados a continuación, en los que todas las disputas que surjan o se relacionen con este Acuerdo, incluyendo los procedimientos sumarios, se presentarán ante y se someterán a la jurisdicción exclusiva de los siguientes tribunales competentes: + +AMÉRICA + +(1) En Argentina: el Tribunal de Comercio Ordinario de la ciudad de Buenos Aires; + +(2) en Chile: el Juzgado de lo Civil de Santiago; + +(3) en Ecuador: los jueces de lo civil de Quito para los procesos sumarios o ejecutivos (según sea el caso); + +(4) en México: los tribunales ubicados en Ciudad de México, Distrito Federal; + +(5) en Perú: en Perú: los jueces y tribunales del distrito judicial de Lima, Cercado; + +(6) en Uruguay: los tribunales de la ciudad de Montevideo; + +(7) en Venezuela: los tribunales del área metropolitana de la ciudad de Caracas; y + +EUROPA, ORIENTE MEDIO Y ÁFRICA + +(8) en España: los tribunales de Madrid. + +APÉNDICES PARA PAÍSES AMERICANOS + +PERÚ + +10. Limitación de Responsabilidad + +Se añade lo siguiente al final de la Cláusula 10 "Limitación de Responsabilidad": + +Salvo que la legislación lo requiera expresamente sin posibilidad de renuncia contractual, el Licenciatario e IBM tienen la intención de que la limitación de responsabilidad expuesta en esta cláusula "Limitación de Responsabilidad" se aplique a los daños causados por todo tipo de reclamaciones y causa de acción. En el caso que un tribunal competente declare no exigible cualquier limitación o exclusión de responsabilidad de esta cláusula con respecto a una reclamación o derecho de iniciar acciones legales concreto, las partes tienen la intención de que se aplique a todas las demás reclamaciones y derechos de iniciar acciones legales hasta el grado máximo que permita la legislación aplicable. + +10.1 Aspectos por los que IBM Puede Ser Responsable + +Se añade lo siguiente al final de la Cláusula 10.1: + +De acuerdo con el Artículo 1328 del Código Civil Peruano, las limitaciones y exclusiones especificadas en esta sección no se aplicarán a los daños causados por la mala conducta deliberada de IBM ("dolo") o negligencia ("culpa inexcusable"). + +ENMIENDAS PARA LOS PAÍSES DE EUROPA, ORIENTE MEDIO, ÁFRICA (EMEA) + +ESTADOS MIEMBROS DE LA UNIÓN EUROPEA + +8. Sin garantías + +Se añade lo siguiente a la Cláusula 8 (Sin garantías): + +En la Unión Europea ("EU"), los consumidores tienen derechos legales en virtud de la legislación nacional aplicable que rija la venta de bienes de consumo. Tales derechos no se ven afectados por las disposiciones expuestas en esta Cláusula 8 (Sin garantías). + +ESTADOS MIEMBROS DE LA UE Y LOS PAÍSES IDENTIFICADOS A CONTINUACIÓN + +Cualquier país europeo que haya promulgado legislación local relativa a privacidad de datos o donde haya una legislación similar al modelo de la UE. + +13. General + +Lo siguiente sustituye a la Cláusula 13.e: + +(1) Definiciones - A los efectos de esta Cláusula 13.e, se aplicarán las siguientes definiciones adicionales: + +(a) Información Comercial de Contacto - se entenderá como los datos de contacto relacionados al negocio, revelados a IBM por el Licenciatario, incluyendo nombres, puestos de trabajo, dirección profesional, números de teléfono y direcciones de correo electrónico de los empleados y contratistas del Licenciatario. Para Austria, Italia y Suiza, la Información Comercial de Contacto incluye también información sobre el Licenciatario y sus contratistas como entidades legales (por ejemplo, datos sobre los ingresos del Licenciatario y otra información transaccional) + +(b) Personal Comercial de Contacto - se entenderá como los empleados y contratistas del Licenciatario a los cuales se proporciona la Información Comercial de Contacto. + +(c) Autoridad de Protección de Datos - se entenderá como la autoridad establecida por la Legislación de Protección de Datos y Comunicaciones Electrónicas en el país aplicable o, para los países que no formen parte de la UE, la autoridad responsable de supervisar la protección de los datos personales en dichos países o (para cualquiera de los anteriores) cualquier entidad debidamente designada para ello con posterioridad. + +(d) Legislación de Protección de Datos y Comunicaciones Electrónicas - (i) la legislación nacional específica relacionada a la Directiva 46/95/CE, del Parlamento Europeo y del Consejo, de 24 de octubre de 1995, relativa a la protección de las personas físicas en lo que respecta al tratamiento de datos personales y a la libre circulación de estos datos, y Directiva 58/2002/CE, del Parlamento Europeo y del Consejo, de 12 de julio de 2002, relativa al tratamiento de los datos personales y a la protección de la intimidad en el sector de las comunicaciones electrónicas (Directiva sobre la privacidad y las comunicaciones electrónicas); o (ii) para los países que no pertenezcan a la UE, significará la legislación específica relevante aplicable en el respectivo país relacionada con el uso y protección de datos de carácter personal y la intimidad en las comunicaciones electrónicas, incluyendo (para cualquiera de los anteriores) cualquier normativa posterior que las sustituya o modifique. + +(e) Grupo IBM - International Business Machines Corporation ubicada en Armonk, Nueva York, EE.UU., sus subsidiarias así como sus respectivos Business Partners y subcontratistas. + +(2) (2) El Licenciatario autoriza a IBM para: + +(a) procesar y utilizar la Información Comercial de Contacto dentro del Grupo IBM en beneficio del Licenciatario, incluyendo la prestación de servicios de soporte y con el fin de gestionar la relación empresarial entre el Licenciatario y el Grupo IBM, incluyendo, sin limitarse, a contactar con el Personal Comercial de Contacto (por correo electrónico o por otra vía) así como el marketing de productos y servicios del Grupo IBM (la "Finalidad Específica"); y + +(b) (b) revelar la Información Comercial de Contacto a otros miembros del Grupo IBM únicamente a los efectos de la Finalidad Específica. + +(3) (3) IBM acuerda que toda Información Comercial de Contacto se procesará de conformidad con la Legislación de Protección de Datos y Comunicaciones Electrónicas y se utilizará únicamente para la Finalidad Específica. + +(4) (4) El Licenciatario declara que, antes de proporcionar a IBM la Información Comercial de Contacto, ha obtenido o deberá obtener, cuando así lo requiera la Legislación de Protección de Datos y Comunicaciones Electrónicas, el consentimiento del Personal Comercial de Contacto, asimismo confirma que ha enviado o enviará las notificaciones pertinentes a dicho Personal Comercial de Contacto, de manera que el Grupo IBM esté facultado para procesar o usar la Información Comercial de Contacto para contactar con ellos para la Finalidad Especificada. + +(5) El Licenciatario consiente que IBM transfiera la Información Comercial de Contacto fuera del Espacio Económico Europeo, siempre y cuando dicha transferencia se realice bajo los términos contractuales aprobados por la Autoridad de Protección de Datos o por otra parte que la Legislación de Protección de Datos y Comunicaciones Electrónicas permita la transferencia. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_fr b/charts/mq-devserver/LICENSE_locale/LICENSE_fr new file mode 100644 index 0000000..ac1a046 --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_fr @@ -0,0 +1,380 @@ +INFORMATIONS SUR LA LICENCE + +Les Logiciels spécifiés ci-dessous sont concédés sous licence conformément aux dispositions des Informations sur la Licence suivantes qui s'ajoutent à celles des dispositions de la licence du Logiciel précédemment acceptée par le Client et IBM. Si le Client n'a pas précédemment accepté les dispositions de la licence en vigueur pour le Logiciel, le Conditions Internationales d'Utilisation des Logiciels non garantis (Z125-5589-05) s'applique. + +Nom du Logiciel (Référence du Logiciel) : +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Les dispositions suivantes s'appliquent à l'utilisation du Logiciel par le Détenteur de la Licence. + +Logiciels Groupés + +Le Logiciel est concédé sous licence en tant qu'ensemble multi-produit comprenant les Logiciels Groupés répertoriés ci-dessous. Le Détenteur de la Licence est autorisé à installer et à utiliser lesdits Logiciels Groupés dans les limites de l'Autorisation d'Utilisation du Logiciel et tel que défini dans le présent document Informations sur la Licence. Le Détenteur de la Licence n'est pas autorisé à transférer ni à commercialiser les Logiciels Groupés séparément de l'ensemble multi-produit. Un Logiciel Groupé peut inclure des dispositions de licence, et le cas échéant, celles-ci s'appliquent à l'utilisation de ce Logiciel Groupé par le Détenteur de la Licence. En cas de contradiction entre les dispositions, celles du présent document Informations sur la Licence prévalent sur celles du Logiciel Groupé. Lorsque le droit d'utilisation du Logiciel par le Détenteur de la Licence arrive à expiration ou est résilié, le Détenteur de la Licence doit cesser d'utiliser et détruire ou renvoyer rapidement tous les exemplaires des Logiciels Groupés au tiers auprès de qui il a acquis le Logiciel. Si le Détenteur de la Licence a téléchargé les Logiciels Groupés, il doit contacter le tiers auprès de qui il a acquis le Logiciel. Pour toute utilisation des Logiciels Groupés non autorisée par le présent Contrat, le Détenteur de la Licence doit prendre contact avec un Ingénieur Commercial IBM ou avec le tiers auprès de qui il a acquis le Logiciel pour acquérir la licence correspondante. + +Les Logiciels Groupés suivants sont concédés sous licence avec le Logiciel : +IBM MQ V9.0.3 + +Restrictions relatives aux développeurs + +Si le Logiciel porte une mention indiquant qu'il est destiné aux "Développeurs", cela signifie que le Détenteur de la Licence ne peut déployer le Logiciel qu'à des fins de développement et de test d'unité en interne sur une machine de développeur spécifique. Une machine de développeur désigne un environnement de bureau physique ou virtuel exécutant un système d'exploitation principal ainsi que le Logiciel, tous deux étant accessibles et utilisés par un seul développeur désigné. Le Détenteur de la Licence n'est pas autorisé à utiliser le Logiciel pour le traitement de charges de production, la simulation de charges de production ou encore le test d'évolutivité d'un code, d'une application ou d'un système donné. Le Détenteur de la Licence n'est pas autorisé à utiliser une partie quelconque du Logiciel à toute autre fin avant d'avoir acquis les Autorisations d'Utilisation de production appropriées. + +Composants non pris en compte pour établir les Autorisations d'Utilisation requises + +Pour définir le nombre d'Autorisations d'Utilisation requis pour l'installation ou l'utilisation du Logiciel par le Détenteur de la Licence, les composants du Logiciel suivants ne sont pas pris en compte. En d'autres termes, le Détenteur de la Licence peut installer et utiliser les composants du Logiciel suivants, conformément aux dispositions de la Licence, mais lesdits composants ne seront pas pris en compte pour déterminer le nombre d'autorisations d'utilisation requises pour le Logiciel. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Composants Source, Échantillons et Exemples + +Le Logiciel peut contenir des composants inclus sous la forme de code source ("Composants Source") ainsi que d'autres éléments appelés Échantillons et Exemples. Le Détenteur de la Licence est autorisé à copier et modifier les Composants Source ainsi que les Échantillons et Exemples à des fins internes, sous réserve que ladite utilisation reste dans les limites des droits de licence concédés au titre du présent Contrat et ce, à condition que le Détenteur de la Licence ne modifie ni ne supprime les mentions de droits d'auteur ou les Fichiers Notices contenus dans les Composants Source ou les Échantillons et Exemples. IBM fournit les Composants Source ainsi que les Échantillons et Exemples sans obligation de support. Ces Composants Source, Échantillons et Exemples sont fournis "EN L'ÉTAT", SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE, Y COMPRIS TOUTE GARANTIE DE TITRE, DE NON-CONTREFAÇON OU DE NON-INTERFÉRENCE, AINSI QUE LES GARANTIES IMPLICITES EN MATIÈRE DE VALEUR MARCHANDE ET D'APTITUDE À UNE UTILISATION PARTICULIÈRE. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Conditions Internationales d'Utilisation des Logiciels non garantis + +Chapitre 1 - Dispositions Générales + +EN TÉLÉCHARGEANT, EN INSTALLANT OU EN COPIANT LE LOGICIEL, EN CLIQUANT SUR LE BOUTON "ACCEPTER" OU EN ACCÉDANT AU LOGICIEL, LE DÉTENTEUR DE LA LICENCE ACCEPTE LES DISPOSITIONS DU PRÉSENT CONTRAT. SI VOUS ACCEPTEZ LES PRÉSENTES DISPOSITIONS POUR LE COMPTE DU DÉTENTEUR DE LA LICENCE, VOUS CERTIFIEZ AVOIR QUALITÉ POUR ENGAGER LE DÉTENTEUR DE LA LICENCE À RESPECTER LESDITES DISPOSITIONS. SI VOUS N'ACCEPTEZ PAS CES DISPOSITIONS, + +* NE TÉLÉCHARGEZ PAS, N'INSTALLEZ PAS, NE COPIEZ PAS, N'ACCÉDEZ PAS, NE CLIQUEZ PAS SUR LE BOUTON "ACCEPTER" ET N'UTILISEZ PAS LE LOGICIEL ; ET + +* DEMANDEZ À ÊTRE REMBOURSÉ DE LA SOMME QUE VOUS AVEZ PAYÉE À LA PERSONNE AUPRÈS DE LAQUELLE VOUS AVEZ ACQUIS LE LOGICIEL, EN LUI RETOURNANT, SANS DÉLAI, LES SUPPORTS NON UTILISÉS AINSI QUE LA DOCUMENTATION. SI VOUS AVEZ TÉLÉCHARGÉ LE LOGICIEL, DÉTRUISEZ-EN TOUS LES EXEMPLAIRES. + +1. Définitions + +"Utilisation Autorisée" désigne les limites d'autorisation concédées au Détenteur de la licence pour exécuter le Logiciel. Ce niveau peut être calculé en fonction du nombre d'utilisateurs, du nombre de millions d'unités de service ("MSU"), du nombre d'Unités de Valeur par Coeur Processeur ("PVU") ou d'un autre niveau d'utilisation spécifié par IBM. + +"IBM" désigne la compagnie "International Business Machines Corporation" ou l'une de ses filiales. + +Le document "Informations sur la Licence" ("LI") désigne un document qui contient des informations et des dispositions complémentaires spécifiques concernant un Logiciel donné. Le document Informations sur la Licence est disponible à l'adresse suivante : www.ibm.com/software/sla. Elles peuvent aussi se trouver dans le répertoire du Logiciel accessible par une commande système ou dans une brochure livrée avec le Logiciel. + +"Logiciel" désigne les éléments suivants, y compris l'original et toutes les copies partielles ou totales de chaque élément : 1) instructions et données lisibles par machine ; 2) composants, fichiers et modules ; 3) contenus audiovisuels (images, textes, enregistrements ou dessins, par exemple) ; et 4) éléments sous licence associés (clés et documentation, par exemple). + +2. Structure du Contrat + +Le présent Contrat est constitué du présent document qui comprend un premier chapitre intitulé Chapitre 1 - Dispositions Générales et éventuellement un second chapitre intitulé Chapitre 2 - Dispositions Nationales Particulières et du document intitulé Informations sur la licence. Le présent Contrat exprime l'intégralité de l'accord intervenu entre le Détenteur de la Licence et IBM en ce qui concerne l'utilisation du Logiciel. Il prévaut sur tout autre accord ou communication antérieur, oral ou écrit, intervenu entre le Détenteur de la Licence et IBM concernant l'utilisation du Logiciel par le Détenteur de la Licence. Les dispositions du second chapitre peuvent remplacer ou modifier celles du premier. En cas de contradiction entre les dispositions, le document Informations sur la Licence prévaut sur les deux chapitres en question. + +3. Concession de licences + +Le Logiciel est la propriété d'IBM ou d'un fournisseur d'IBM et est protégé par les droits d'auteur. Le Logiciel est concédé sous licence et non vendu. + +IBM concède au Détenteur de la licence une licence d'utilisation non exclusive l'autorisant à 1) utiliser le Logiciel dans les limites d'Utilisation Autorisée indiquées dans la facture ; 2) effectuer et installer des copies du Logiciel pour permettre une telle utilisation ; et 3) effectuer une copie de sauvegarde, l'ensemble étant sous réserve que : + +a. le Détenteur de la licence ait acquis le Logiciel légalement et respecte les dispositions du présent Contrat ; + +b. la copie de sauvegarde n'est pas exécutée sauf si le Logiciel à l'origine de cette copie de sauvegarde ne peut pas être exécuté ; + +c. le Détenteur de la licence reproduise toutes les mentions relatives aux droits d'auteur et toute autre mention de propriété sur chaque copie totale ou partielle du Logiciel ; + +d. le Détenteur de la licence s'engage à ce que toute personne utilisant le Logiciel (que ce soit par le biais de son réseau privé ou d'un réseau public) 1) ne le fasse que pour son usage dans la limite des droits concédés et 2) conformément aux dispositions du présent Contrat ; + +e. le Détenteur de la licence ne doit pas 1) utiliser, copier, modifier ou distribuer le Logiciel sauf mention contraire dans le présent Contrat ; 2) désassembler, décompiler, traduire de quelque façon que ce soit ou faire de l'ingénierie inverse vis-à-vis du Logiciel, à moins d'y avoir été expressément autorisé par une disposition légale d'ordre public ; 3) utiliser certains composants, fichiers, modules, contenus audiovisuels ou éléments associés concédés sous une licence distincte du Logiciel ; ou 4) concéder des sous-licences ou donner le Logiciel en location sous quelque forme que ce soit ; et + +f. si le Détenteur de la licence se procure le Logiciel au titre d'un Logiciel Auxiliaire, le Détenteur de la licence utilise ledit Logiciel uniquement dans le but de pouvoir utiliser le Logiciel Principal et conformément aux limites d'utilisation de la licence du Logiciel Principal, ou, si le Détenteur de la licence se procure le Logiciel au titre d'un Logiciel Principal, le Détenteur de la licence utilise l'ensemble des Logiciels Auxiliaires uniquement dans le but de pouvoir utiliser ledit Logiciel et conformément aux limites d'utilisation éventuellement définies dans le présent Contrat. Dans le contexte de l'alinéa "f", le terme "Logiciel Auxiliaires" désigne un Logiciel rattaché à un autre Logiciel IBM ("Logiciel Principal") et identifié comme étant un Logiciel Auxiliaire dans le document Informations sur la Licence du Logiciel Principal. Pour se procurer une licence distincte au titre d'un Logiciel Auxiliaire sans aucune restriction, le Détenteur de la licence doit s'adresser à la personne auprès de qui il a acquis ledit Logiciel. + +Le présent Contrat de licence s'applique à chaque exemplaire du Logiciel créé par le Détenteur de la licence. + +3.1 Mises à jour logiciel, mises à jour et correctifs + +3.1.1 Mises à jour logiciel + +Si le Logiciel est remplacé par un Logiciel bénéficiant d'une mise à jour logiciel, la licence d'utilisation du Logiciel remplacé est immédiatement résiliée. + +3.1.2 Mises à jour et correctifs + +Lorsque le Détenteur de la licence reçoit une mise à jour ou un correctif pour un Logiciel, il accepte toute disposition supplémentaire et différente applicable à ladite mise à jour ou audit correctif figurant dans le document Informations sur la Licence qui l'accompagne. Si aucune disposition supplémentaire ou différente n'accompagne la mise à jour ou le correctif, alors ceux-ci sont exclusivement soumis aux dispositions du présent Contrat. Si le Logiciel est remplacé par une mise à jour, le Détenteur de la licence s'engage à cesser immédiatement d'utiliser le Logiciel remplacé. + +3.2 Licences à durée limitée + +Si IBM concède au Détenteur de la licence, le Logiciel pour une durée limitée, la Licence est résiliée à l'issue de la durée limitée à moins que le Détenteur de la licence et IBM acceptent mutuellement de la renouveler. + +3.3 Durée et résiliation du Contrat + +Le présent Contrat reste en vigueur jusqu'à la date de résiliation. + +IBM peut résilier la licence qui a été concédée au Détenteur de la licence si ce dernier ne respecte pas les dispositions du présent Contrat. + +Si la licence est résiliée par l'une des parties pour une quelconque raison, le Détenteur de la licence s'engage à cesser d'utiliser et à détruire immédiatement tous les exemplaires du Logiciel créés par le Détenteur de la licence. Toute disposition du présent Contrat qui, de par sa nature, s'exerce au-delà de la date de résiliation est prorogée jusqu'à sa complète exécution, et s'applique aux ayants droit et cessionnaires respectifs des deux parties. + +4. Prix et redevances + +Les redevances, le cas échéant, sont fonction du niveau d'Utilisation Autorisée acquis, tel que précisé dans la facture. Sauf indication contraire dans le présent Contrat, IBM n'accordera aucun crédit ou remboursement concernant les redevances déjà exigibles ou payées. + +Si le Détenteur de la licence souhaite étendre son niveau d'Utilisation Autorisée, il devra en informer IBM ou l'un de ses revendeurs agréés à l'avance et s'acquitter des redevances applicables. + +5. Taxes + +Le Détenteur de la licence s'engage à payer toutes taxes, contributions ou droits imposés par toute autorité vis-à-vis du Logiciel, à l'exception de ceux qui seraient basés sur le revenu net d'IBM, et à régler le montant spécifié dans la facture ou à nous fournir le document d'exonération. Toute taxe relative au bien mobilier pour le Logiciel est à la charge du Détenteur de la licence à partir de la date à laquelle il l'a acquis. Le Détenteur de la licence s'engage à payer toutes taxes, contributions ou droits imposés par toute autorité vis-à-vis de l'importation ou de l'exportation, de la cession, de l'accès ou de l'utilisation du Logiciel en dehors du pays dans lequel le Détenteur de la licence initial a acquis la licence d'utilisation du Logiciel. + +6. Garantie "satisfait ou remboursé" + +Si pour une raison quelconque, le Détenteur de la licence n'était pas satisfait du Logiciel et qu'il est le détenteur initial de la licence, il peut résilier le Contrat et obtenir le remboursement du montant qu'il a payé, le cas échéant, pour le Logiciel, si, dans les 30 jours suivant la date de la facture, le Détenteur de la licence retourne le Logiciel à la personne auprès de laquelle il a acquis celui-ci. Dans le cas d'une licence à durée limitée renouvelable, le Détenteur de la licence peut obtenir le remboursement du montant payé s'il retourne le Logiciel dans les 30 premiers jours de la période initiale. Si le Détenteur de la licence a téléchargé le Logiciel, il doit prendre contact avec la personne auprès de laquelle il l'a acquis pour savoir comment en obtenir le remboursement. + +7. Cession du Logiciel + +Le Détenteur de la licence peut céder le Logiciel ainsi que ses droits et obligations au titre de la licence à un tiers, uniquement si ce dernier accepte de respecter les dispositions du présent Contrat. Si la licence est résiliée par l'une des parties pour une quelconque raison, le Détenteur de la licence n'a pas le droit de céder le Logiciel à une autre partie. Le Détenteur de la licence n'a pas le droit de céder une partie du 1) Logiciel ou du 2) niveau d'Utilisation Autorisée dudit Logiciel. Si le Détenteur de la licence cède le Logiciel à une autre partie, il doit également lui remettre un exemplaire papier du présent Contrat, y compris le document Informations sur la Licence. La licence est résiliée immédiatement après la cession du Logiciel. + +8. Exclusion de garantie + +SOUS RÉSERVE DE TOUTE GARANTIE LÉGALE QUI NE PEUT ETRE EXCLUE, IBM NE FOURNIT AUCUNE GARANTIE OU CONDITION, EXPLICITE OU IMPLICITE, CONCERNANT LE LOGICIEL OU, LE CAS ÉCHÉANT, LE SUPPORT ASSOCIÉ, Y COMPRIS, ET DE FAÇON NON LIMITATIVE, TOUTE GARANTIE OU CONDITION IMPLICITE DE QUALITÉ SATISFAISANTE, D'APTITUDE À L'EXÉCUTION D'UN TRAVAIL DONNÉ ET TOUTE GARANTIE OU CONDITION DE NON CONTREFAÇON. + +CERTAINS ÉTATS OU LÉGISLATIONS N'AUTORISENT PAS L'EXCLUSION DES GARANTIES EXPLICITES OU IMPLICITES, AUQUEL CAS L'EXCLUSION CI-DESSUS PEUT NE PAS ÊTRE APPLICABLE AU DÉTENTEUR DE LA LICENCE. DANS CE CAS, LA DURÉE DE CES GARANTIES SERA ALORS LIMITÉE À LA PÉRIODE MINIMALE REQUISE PAR LA LOI. PASSÉE CETTE PÉRIODE, AUCUNE GARANTIE NE S'APPLIQUERA. CERTAINS ÉTATS OU LÉGISLATIONS N'AUTORISENT PAS LES LIMITATIONS DE DURÉE DES GARANTIES IMPLICITES, AUQUEL CAS LA LIMITATION CI-DESSUS PEUT NE PAS ÊTRE APPLICABLE AU DÉTENTEUR DE LA LICENCE. IL EST POSSIBLE QUE LE DÉTENTEUR DE LA LICENCE DÉTIENNE D'AUTRES DROITS DONT LA NATURE VARIE SELON LA LÉGISLATION APPLICABLE. + +LES CLAUSES D'EXCLUSION DE RESPONSABILITÉ DE LA PRÉSENTE SECTION 8 S'APPLIQUENT ÉGALEMENT À TOUS LES DÉVELOPPEURS ET FOURNISSEURS DE LOGICIELS D'IBM. + +LES FABRICANTS, FOURNISSEURS OU DISTRIBUTEURS DE LOGICIELS NON IBM PEUVENT FOURNIR LEURS PROPRES GARANTIES. + +IBM NE FOURNIT AUCUN SUPPORT QUEL QU'IL SOIT, SAUF INDICATION CONTRAIRE. LE CAS ÉCHÉANT, TOUT SUPPORT FOURNI PAR IBM EST SOUMIS AUX CLAUSES D'EXCLUSION DE RESPONSABILITÉ DE LA PRÉSENTE SECTION 8. + +9. Données et bases de données appartenant au Détenteur de la licence + +Pour aider le Détenteur de la licence à identifier la cause d'un problème lié au Logiciel, IBM peut demander à ce que le Détenteur de la licence 1) autorise IBM à accéder à distance au système du Détenteur de la licence ; ou 2) envoie les données système ou les informations du Détenteur de la licence à IBM. Toutefois, IBM n'est pas tenue de fournir une telle assistance à moins qu'IBM et le Détenteur de la licence en aient convenu autrement dans le cadre d'un accord distinct où IBM s'engage à fournir au Détenteur de la licence une assistance de ce type, qui dépasse les obligations d'IBM au titre du présent Contrat. Dans tous les cas, IBM utilisera les informations concernant les erreurs et les problèmes dans le but d'améliorer ses produits et services, et de fournir des offres de support associées. Dans ce contexte, le Détenteur de la licence autorise IBM à faire appel à des sous-traitants et des entités IBM (y compris dans un ou plusieurs pays autres que celui où réside le Détenteur de la licence). + +Le Détenteur de la licence sera responsable 1) des données et du contenu des bases de données que le Détenteur de la licence mettra à la disposition d'IBM, 2) du choix et de la mise en oeuvre des procédures et des contrôles régissant l'accès, la sécurité, le chiffrement, l'utilisation ainsi que la transmission des données (notamment les données d'identification personnelle) ; et 3) de la sauvegarde et de la reprise des bases de données et des données éventuellement stockées. Le Détenteur de la licence ne transmettra et ne fournira à IBM aucun accès à des informations d'identification personnelle, qu'elles soient ou non sous forme de données. En outre, il sera redevable des coûts raisonnables ainsi que des sommes qu'IBM pourrait subir au titre des informations fournies à IBM par erreur ou encore de la perte ou de la divulgation desdites informations par IBM, y compris celles découlant de réclamations émanant de tiers. + +10. Limitation de responsabilité + +Les limitations et exclusions énoncées dans cette Section 10 (Limitation de responsabilité) s'appliquent sous réserve qu'elles ne soient pas interdites par une loi locale à laquelle il ne peut être dérogé contractuellement. + +10.1 Cas pour lesquels IBM peut être responsable + +Dans certaines circonstances, le Détenteur de la licence peut être en droit, en raison d'un manquement de la part d'IBM ou d'une autre forme de responsabilité, de réclamer des dommages-intérêts à IBM. Quel que soit le fondement de l'action que le Détenteur de la licence engage contre IBM (notamment pour violation d'une condition essentielle de ce Contrat, négligence, tromperie ou autre faute contractuelle), la responsabilité d'IBM vis-à-vis de l'ensemble des réclamations découlant de ou liés à chaque Logiciel ou découlant de quelque autre manière du présent Contrat sera limitée au montant 1) des dommages corporels (y compris le décès) et des dommages aux biens matériels, mobiliers et immobiliers ; et 2) tout autre dommage direct et réel plafonné au montant des redevances (jusqu'à 12 mois de redevances si le Logiciel est concédé sous une licence à durée limitée), payées par le Détenteur de la licence pour le Logiciel à l'origine de la réclamation. + +Cette limite s'applique également aux développeurs et fournisseurs d'un Logiciel IBM. C'est le maximum pour lequel IBM, ses développeurs de logiciels et ses sous-traitants sont collectivement responsables. + +10.2 Cas pour lesquels IBM n'est pas responsable + +IBM, SES DÉVELOPPEURS OU FOURNISSEURS NE PEUVENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES SUIVANTS, ET CE, MÊME S'ILS ONT ÉTÉ INFORMÉS DE LEUR POSSIBLE SURVENANCE : + +a. PERTE OU DÉTÉRIORATION DE VOS DONNÉES ; + +b. PRÉJUDICES MORAUX, ACCESSOIRES OU INDIRECTS ; OU + +c. PERTE DE BÉNÉFICE, D'ACTIVITÉ COMMERCIALE, DE REVENU, DE CLIENTÈLE, OU D'ÉCONOMIES ESCOMPTÉES. + +11. Vérification de Conformité + +Dans le contexte de cette section 11 (Vérification de Conformité), le terme "Dispositions ILAN du Logiciel" désigne 1) le présent Contrat ainsi que les avenants et les documents de transaction applicables fournis par IBM ; et 2) les politiques d'IBM en matière de logiciels pouvant figurer sur le site Internet IBM Software Policy (www.ibm.com/softwarepolicies), y compris, et de façon non limitative, les règles en matière de sauvegarde, de tarification et de migration. + +Les droits et obligations décrits dans cette section 11 demeurent en vigueur pendant toute la durée où le Logiciel a été concédé au Détenteur de la licence, ainsi que pendant les deux (2) années qui suivent cette période. + +11.1 Processus de vérification + +Le Détenteur de la licence s'engage à créer, conserver et fournir à IBM et ses auditeurs tous les enregistrements, les sorties d'outils système et toute autre information système exacts que ce soit sur papier ou sous forme électronique, afin de démontrer à IBM que l'utilisation que le Détenteur de la licence fait de tous les Logiciels est conforme aux Dispositions ILAN du Logiciel, y compris, et de façon non limitative, les dispositions d'IBM applicables tant à la licence qu'aux conditions d'éligibilité à certaines tarifications. Le Détenteur de la licence sera chargé de 1) s'assurer qu'il ne dépasse pas le niveau d'Utilisation Autorisée qui lui a été accordé ; et de 2) rester en conformité avec les Dispositions ILAN du Logiciel. + +Moyennant un préavis de 30 jours, IBM se réserve le droit de vérifier que le Détenteur de la licence se conforme aux Dispositions ILAN du Logiciel dans chacun des sites et pour tous les environnements où le Détenteur de la licence utilise (à n'importe quelle fin) les Logiciels couverts par les Dispositions ILAN du Logiciel. Ces vérifications seront effectuées de façon à gêner le moins possible les activités du Détenteur de la licence. En outre, elles pourront être réalisées dans les locaux du Détenteur de la licence durant les heures normales de travail. Pour ce faire, IBM pourra utiliser un auditeur extérieur, sous réserve qu'un accord de confidentialité ait été signé entre IBM et cet auditeur. + +11.2 Résolution + +À l'issue desdites vérifications, IBM indiquera par écrit au Détenteur de la licence s'il a utilisé le Logiciel au-delà du niveau d'Utilisation Autorisée qui lui a été accordé ou s'il est au contraire en conformité avec les Dispositions ILAN du Logiciel. Le Détenteur de la licence s'engage à régler dans les plus brefs délais à IBM les frais qui pourraient lui être imputés par IBM dans une facture pour 1) toute utilisation du Logiciel au-delà du niveau d'Utilisation Autorisée qui lui a été accordé ; 2) prendre en charge une telle utilisation excessive pour la durée la plus courte d'une telle utilisation ou pour deux (2) années ; et 3) tous les frais supplémentaires et obligations de paiement qu'il pourrait être tenu de respecter à l'égard de ce contrôle. + +12. Mentions relatives au code tiers + +Le Logiciel peut inclure du code tiers qu'IBM, et non pas la partie tierce, concède sous licence au Détenteur de la licence dans le cadre du présent Contrat. Si le code tiers est accompagné de mentions spécifiques ("Mentions relatives au code tiers"), elles sont uniquement indiquées à titre de référence pour le Détenteur de la licence. Ces mentions peuvent résider dans le ou les fichiers NOTICES du Logiciel. Les Mentions relatives au code tiers contiennent des instructions expliquant comment obtenir le code source de certains codes tiers. Si IBM qualifie le code tiers comme étant un "Code tiers modifiable" dans les Mentions relatives au code tiers, elle autorise le Détenteur de la licence à 1) modifier le Code tiers modifiable ; et à 2) faire de l'ingénierie inverse sur les modules du Logiciel qui sont directement liés au Code tiers modifiable mais dans le seul but de déboguer les modifications que le Détenteur de la licence a apportées audit code tiers. Si des obligations de service et de support incombent à IBM, elles ne s'appliquent qu'au Logiciel non modifié. + +13. Dispositions générales + +a. Le présent Contrat ne porte atteinte à aucune des dispositions légales d'ordre public relatives aux droits des consommateurs. + +b. En ce qui concerne les Logiciels qu'IBM fournit au Détenteur de la licence sous une forme tangible, IBM honore ses obligations d'expédition et de livraison au moment où IBM remet lesdits Logiciels au transporteur désigné par IBM, sauf autorisation écrite contraire unissant le Détenteur de la licence et IBM. + +c. Si l'une des dispositions du présent Contrat est considérée comme nulle ou inapplicable, elle n'entraînera pas la nullité des autres dispositions. + +d. Le Détenteur de la licence s'engage à respecter toutes les lois et réglementations applicables en matière d'exportation et d'importation, y compris celles soumises à l'embargo des États-Unis concernant l'exportation de produits destinés à certains usages ou à certains utilisateurs. + +e. Le Détenteur de la licence autorise IBM et ses filiales (ainsi que ses ayants droit et cessionnaires, sous-traitants et Partenaires commerciaux IBM) à stocker et à utiliser les coordonnées des contacts professionnels du Détenteur de la licence à l'endroit où ils font des affaires, en relation avec les produits et services IBM, ou le bon fonctionnement des relations d'affaires entre IBM et le Détenteur de la licence. + +f. Avant de formuler une réclamation, chaque partie accordera à l'autre un délai raisonnable pour remplir ses obligations au titre du présent Contrat. Les deux parties mettront en oeuvre tous les efforts raisonnables afin de résoudre les litiges, désaccords ou réclamations pouvant les opposer au titre du présent Contrat. + +g. Sauf disposition légale ou réglementaire contraire à laquelle il ne peut être dérogé contractuellement : 1) aucune des parties n'intentera d'action en justice, sous quelque forme que ce soit, à l'égard d'une réclamation découlant du ou liée au présent Contrat plus de deux ans après l'apparition de son fait générateur ; et 2) à l'expiration de ladite période, toute réclamation et tout droit applicable lié à ladite revendication seront déclarés caducs. + +h. Ni le Détenteur de la licence, ni IBM ne sera responsable d'un manquement à ses obligations si un tel manquement résulte d'un cas de force majeure. + +i. Le présent Contrat ne crée aucun droit et ne contient aucune stipulation pour autrui au profit d'un tiers. En outre, IBM ne sera pas tenue responsable des réclamations émanant de tiers à l'encontre du Détenteur de la licence, sauf disposition contraire dans la sous-section 10.1 (Cas pour lesquels IBM peut être responsable), allant au-delà des dommages corporels (y compris le décès) ou des dommages aux biens matériels, mobiliers et immobiliers, pour lesquels IBM est légalement responsable envers ledit tiers. + +j. En concluant le présent Contrat, les parties renoncent à tout engagement non expressément prévu dans le présent Contrat, y compris, et de façon non limitative, toute déclaration concernant 1) les performances ou le fonctionnement du Logiciel ; 2) les expériences et recommandations de parties tierces ; ou 3) les résultats ou économies que le Détenteur de la licence pourrait obtenir. + +k. IBM a signé des contrats avec certaines entités commerciales ("Partenaires Commerciaux IBM") pour promouvoir, commercialiser et fournir certains Logiciels. Les Partenaires commerciaux IBM restent indépendants et distincts d'IBM. IBM n'est pas responsable des actions ou déclarations faites par les Partenaires commerciaux IBM, ni des obligations qu'ils ont vis-à-vis du Détenteur de la licence. + +l. Les dispositions d'indemnisation au titre des licences et de la propriété intellectuelle figurant dans les accords éventuellement conclus entre IBM et le Détenteur de la licence (comme le Livret contractuel IBM, par exemple) ne s'appliquent pas aux licences de Logiciel qui sont concédées dans le présent Contrat. + +m. Les informations échangées entre les deux parties sont réputées non confidentielles. Tout échange d'informations confidentielles effectué à la demande de l'une des parties interviendra dans le cadre d'un accord de confidentialité dûment signé. + +14. Étendue géographique et droit applicable + +14.1 Droit applicable + +Les parties conviennent que les lois du pays où le Détenteur de la licence a acquis la licence de Logiciel soient appliquées pour régir, interpréter et faire respecter les droits, devoirs et obligations d'IBM et du Détenteur de la licence découlant, directement ou indirectement, de l'objet du présent Contrat, sans donner effet aux principes de conflit de lois. + +La Convention des Nations Unies sur les contrats régissant le Commerce International de Biens ne s'applique pas. + +14.2 Juridiction compétente + +Tous les droits, devoirs et obligations des parties sont soumis aux tribunaux du pays dans lequel le Détenteur de la licence a acquis la licence du Logiciel. + +Chapitre 2 - Dispositions Nationales Particulières + +Pour les licences concédées dans les pays mentionnés ci-dessous, les dispositions suivantes remplacent ou modifient celles stipulées dans le Chapitre 1. Toutes les dispositions du Chapitre 1 qui n'ont pas été modifiées par les dispositions ci-dessous restent inchangées et en vigueur. Le présent Chapitre 2 est structuré comme suit : + +* Amendements applicables à plusieurs pays et relatifs au Chapitre 1, Section 14 (Droit applicable et juridiction compétente) ; + +* Amendements applicables aux pays d'Amérique et relatifs à d'autres dispositions du Contrat ; et + +* Amendements applicables aux pays d'Europe, du Moyen-Orient et d'Afrique et relatifs à d'autres dispositions du Contrat. + +Amendements applicables à plusieurs pays et relatifs au Chapitre 1, Section 14 (Droit applicable et juridiction compétente) + +14.1 Droit applicable + +La mention "les lois du pays où le Détenteur de la licence a acquis la licence de Logiciel" dans le premier paragraphe de la section 14.1 Droit applicable est remplacée par les phrases suivantes dans les pays suivants : + +AMÉRIQUES + +(1) au Canada : les lois en vigueur dans la Province de l'Ontario ; + +(2) à Saint-Martin : les lois en vigueur dans l'État de New York aux États-Unis ; + +EUROPE, MOYEN-ORIENT, AFRIQUE + +(3) au Bénin, au Burkina Faso, au Cameroun, en République centrafricaine, au Tchad, aux Comores, au Congo, à Djibouti, en République démocratique du Congo, en Guinée équatoriale, en Guyane française, en Polynésie française, au Gabon, en Guinée, en Côte d'Ivoire, à Madagascar, au Mali, à Mayotte, en Nouvelle-Calédonie, au Niger, à la Réunion, au Sénégal, au Togo, en Tunisie et à Wallis et Futuna : les lois en vigueur en France. + +14.2 Juridiction compétente + +Le paragraphe suivant s'applique à la juridiction des pays identifiés ci-dessous et remplace la Sous-section 14.2 (Juridiction) : + +Tous les droits, devoirs et obligations des parties sont soumis aux tribunaux du pays dans lequel le Détenteur de la licence a acquis la licence du Logiciel, à l'exception des pays identifiés ci-dessous où tout conflit résultant du ou relatif au présent Contrat, y compris en référé, sera de la compétence exclusive des tribunaux suivants : + +EUROPE, MOYEN-ORIENT, AFRIQUE + +au Bénin, au Burkina Faso, au Cameroun, en République centrafricaine, au Tchad, aux Comores, au Congo, à Djibouti, en République démocratique du Congo, en Guinée équatoriale, en France, en Guyane française, en Polynésie française, au Gabon, en Guinée, en Côte d'Ivoire, à Madagascar, au Mali, à Mayotte, à Monaco, au Maroc, en Nouvelle-Calédonie, au Niger, à la Réunion, au Sénégal, au Togo, en Tunisie et à Wallis et Futuna : Tribunal de Commerce de Paris. + +AMENDEMENTS APPLICABLES AUX PAYS D'AMÉRIQUE + +CANADA + +10.1 Cas pour lesquels IBM peut être responsable + +Le paragraphe suivant remplace l'alinéa 1 dans le premier paragraphe la présente Sous-section 10.1 (Cas pour lesquels IBM peut être responsable) : + +1) au montant des dommages corporels (y compris le décès) et des dégâts matériels aux biens matériels, mobiliers et immobiliers causés par une négligence d'IBM, et + +13. Dispositions générales + +Le paragraphe suivant remplace l'alinéa 13.d : + +d. Le Détenteur de la licence s'engage à respecter toutes les lois et réglementations applicables en matière d'exportation et d'importation, y compris celles portant sur les produits provenant des États-Unis et qui interdisent ou restreignent l'exportation de produits destinés à certains usages ou à certains utilisateurs. + +Le paragraphe suivant remplace l'alinéa 13.i : + +i. Le présent Contrat ne crée aucun droit et ne contient aucune stipulation pour autrui au profit d'un tiers. En outre, IBM ne sera pas tenue responsable des réclamations émanant de tiers à l'encontre du Détenteur de la licence sauf, tel qu'il est prévu dans l'article "Limitation de responsabilité" ci-dessus, au titre de dommages corporels (y compris le décès) et dégâts matériels aux biens matériels, mobiliers et immobiliers, causés par une négligence d'IBM pour laquelle IBM est légalement responsable envers ledit tiers. + +Le paragraphe suivant est ajouté en tant qu'alinéa 13.n : + +n. Dans le contexte de l'alinéa 13.n, le terme "Données personnelles" désigne les informations relatives à une personne identifiée ou identifiable qui ont été communiquées par l'une des parties, son personnel ou quelqu'un d'autre à l'autre partie dans le cadre du présent Contrat. Les dispositions suivantes s'appliquent si l'une des parties communique les Données personnelles à l'autre partie : + +(1) Dispositions générales + +(a) Chacune des parties est tenue de se conformer aux obligations ayant trait aux Données personnelles au titre de la réglementation canadienne applicable en matière de confidentialité des données (la "Réglementation"). + +(b) Aucune des parties ne demandera davantage de Données personnelles qu'elle n'en a besoin au titre du ou des motifs pour lequel ou pour lesquels ladite partie les a demandées. Bien entendu, le ou les motifs de la demande pour lequel ou pour lesquels ladite partie demande les Données personnelles devra ou devront être raisonnable(s). Chacune des parties accepte à l'avance le type de Données personnelles qui doivent être mises à disposition des parties. + +(2) Dispositifs de sécurité + +(a) Chacune des parties reconnaît être la seule responsable de la détermination et de la communication à l'autre partie des dispositifs de sécurité technologiques, physiques et organisationnels adéquats nécessaires au vu de la protection des Données personnelles. + +(b) Chacune des parties devra s'assurer que les Données personnelles sont protégées conformément aux dispositifs de sécurité communiqués et acceptés par l'autre partie. + +(c) Chacune des parties devra s'assurer que tout tiers à qui les Données personnelles sont transférées se conforme aux dispositions applicables stipulées dans la présente section. + +(d) Si des services supplémentaires ou différents sont nécessaires pour rester en conformité avec la réglementation, lesdits services seront considérés comme une demande de nouveaux services. + +(3) Utilisation + +Chacune des parties reconnaît que les Données personnelles seront exclusivement utilisées, consultées, gérées, transférées, communiqués à des tiers ou traitées d'une quelconque façon au titre du ou des motifs pour lequel ou pour lesquels elles ont été mises à disposition. + +(4) Demandes d'accès + +(a) Chacune des parties s'engage à coopérer de manière raisonnable avec l'autre partie dans le cadre des demandes d'accès ou de modification des Données personnelles. + +(b) Chacune des parties s'engage à rembourser à l'autre partie les redevances raisonnables encourues au titre de l'assistance fournie à l'égard de l'une ou l'autre des parties. + +(c) Chacune des parties s'engage à modifier les Données personnelles uniquement à la réception des instructions où l'autre partie ou son personnel l'invite à le faire. + +(5) Conservation + +Sauf instruction contraire par l'autre partie ou son personnel ou sous couvert de la réglementation, chacune des parties détruira ou renverra rapidement à l'autre partie l'ensemble des Données personnelles qui ne sont plus nécessaires au titre du ou des motifs pour lequel ou pour lesquels elles ont été mises à disposition. + +(6) Organismes publics soumis à la réglementation en matière de confidentialité du secteur public + +Pour les Détenteurs de licence ayant la qualité d'organismes publics soumis à la réglementation en matière de confidentialité du secteur public, le présent alinéa 13.n ne s'applique qu'aux Données personnelles mises à la disposition du Détenteur de la licence dans le cadre du présent Contrat. En outre, les obligations stipulées dans la présente section ne s'appliquent qu'au Détenteur de la licence, à l'exception des sections suivantes : 1) la section (2)(a) ne concerne qu'IBM ; 2) les sections (1)(a) et (4)(a) concernent les deux parties ; puis 3) la section (4)(b) et la dernière phrase de la section (1)(b) ne s'appliquent pas. + +AMENDEMENTS APPLICABLES AUX PAYS D'EUROPE, DU MOYEN-ORIENT ET D'AFRIQUE (EMEA) + +ÉTATS MEMBRES DE L'UNION EUROPÉENNE + +8. Exclusion de garantie + +Le paragraphe suivant est ajouté à la Section 8 (Exclusion de garantie) : + +Dans l'Union européenne ("UE"), les consommateurs disposent de droits selon la loi nationale en vigueur régissant la vente de biens de consommation. Ces droits ne sont pas affectés par les dispositions stipulées dans la présente Section 8 intitulée "Exclusion de garantie". + +ÉTATS MEMBRES DE L'UNION EUROPÉENNE ET PAYS IDENTIFIÉS CI-DESSOUS + +La Suisse et tout autre pays européen ayant mis en oeuvre une réglementation locale en matière de confidentialité ou de protection des données de manière similaire au modèle de l'Union européenne. + +13. Dispositions générales + +Le paragraphe suivant remplace l'alinéa 13.e : + +(1) Définitions - Les autres définitions suivantes s'appliquent dans le cadre du présent alinéa 13.e : + +(a) Coordonnées des Contacts Professionnels désigne les coordonnées des contacts professionnels communiquées à IBM par le Détenteur de la licence, notamment le nom, l'intitulé du poste, l'adresse et le numéro de téléphone de bureau, mais aussi l'adresse électronique des employés et des sous-traitants du Détenteur de la licence. Pour l'Autriche, l'Italie et la Suisse, les Coordonnées des Contacts Professionnels recouvrent également les informations relatives au Détenteur de la licence et à ses prestataires en tant que personnes morales (notamment les données de chiffre d'affaires ainsi que diverses informations de transaction du Détenteur de la licence). + +(b) Personnel du Contact Professionnel désigne les employés et les prestataires du Détenteur de la licence auxquels se rapportent les Coordonnées des Contacts Professionnels. + +(c) Autorité de Protection des Données désigne l'autorité établie par la Réglementation relative à la Protection des Données et aux Communications Électroniques dans le pays concerné ou, dans le cas des pays non membres de l'Union Européenne, l'autorité chargée de superviser la protection des données personnelles dans ledit pays, ou (pour l'une des dispositions susmentionnées) tout ayant droit dûment désigné à cet égard. + +(d) Réglementation relative à la Protection des Données et aux Communications Électroniques désigne (i) la réglementation locale applicable en vigueur mettant en oeuvre les exigences de la Directive Européenne 95/46/CE (concernant la protection des personnes vis-à-vis du traitement des données personnelles et de la libre circulation desdites données) ainsi que de la Directive Européenne 2002/58/CE (concernant le traitement des données personnelles et la protection de la confidentialité dans le secteur des communications électroniques) ; ou (ii) dans le cas des pays non membres de l'Union européenne, la réglementation et/ou les lois passées dans le pays concerné vis-à-vis de la protection des données personnelles ainsi que la réglementation sur les communications électroniques impliquant des Données personnelles, notamment (pour l'une des dispositions susmentionnées) tout remplacement ou toute modification légale desdites informations. + +(e) Groupe IBM désigne la société International Business Machines Corporation basée à Armonk dans l'État de New York aux États-Unis, ses filiales, ainsi que ses Partenaires commerciaux et sous-traitants associés. + +(2) Le Détenteur de la licence autorise IBM à : + +(a) traiter et utiliser les Coordonnées des Contacts Professionnels au sein du Groupe IBM aux fins de support du Détenteur de la licence, notamment pour la fourniture de services de support, ainsi que dans le but de renforcer les relations commerciales unissant le Détenteur de la licence et le Groupe IBM, y compris sans que cela soit limitatif, dans le but de contacter le Personnel du Contact Professionnel (par e-mail ou un autre moyen) et de commercialiser les produits et services du Groupe IBM ("Objet Spécifié") ; et à + +(b) communiquer les Coordonnées des Contacts Professionnels à d'autres membres du Groupe IBM uniquement dans le cadre de l'Objet Spécifié. + +(3) IBM s'engage à traiter toutes les Coordonnées des Contacts Professionnels conformément à la Réglementation relative à la Protection des Données et aux Communications Électroniques et à les utiliser uniquement dans le cadre de l'Objet Spécifié. + +(4) Dans les limites requises par la Réglementation relative à la Protection des Données et aux Communications Électroniques, le Détenteur de la licence déclare qu'il (a) a obtenu (ou va obtenir) l'accord des (et a transmis (ou va transmettre) les avis aux) Contacts Professionnels - ledit accord étant nécessaire pour permettre au Groupe IBM de traiter et d'utiliser les Coordonnées des Contacts Professionnels dans le cadre de l'Objet Spécifié. + +(5) Le Détenteur de la licence autorise IBM à communiquer les Coordonnées des Contacts Professionnels en dehors de l'Espace Économique Européen, sous réserve qu'elles soient transférées conformément aux dispositions contractuelles approuvées par l'Autorité de Protection des Données ou que leur transfert soit autorisé d'une quelconque façon par la Réglementation relative à la Protection des Données et aux Communications Électroniques. + +BELGIQUE, FRANCE ET LUXEMBOURG + +10. Limitation de responsabilité + +Le paragraphe suivant remplace intégralement les dispositions de l'Article 10 (Limitation de responsabilité) : + +Sauf autre disposition d'ordre publique : + +10.1 Cas pour lesquels IBM peut être responsable + +L'entière responsabilité d'IBM relative à l'ensemble agrégé des réclamations et à tout dommage et perte pouvant survenir dans le cadre de l'exercice de ses obligations liées directement ou indirectement au présent Contrat ou résultant d'autres causes liées à ce Contrat, est limitée au dédommagement des seuls dommages et pertes prouvés et résultant immédiatement et directement du manquement à ces obligations (en cas de faute d'IBM) ou d'une telle cause, pour un montant maximum égal à la redevance (jusqu'à 12 mois de redevances si le Logiciel est concédé sous une licence à durée limitée) que le Détenteur de la licence a payée pour le Logiciel à l'origine desdits dommages. + +La limitation sus-mentionnée ne s'applique pas aux dommages corporels (y compris le décès) et dommages aux biens matériels, mobiliers et immobiliers, pour lesquels IBM est légalement responsable. + +10.2 Cas pour lesquels IBM n'est pas responsable + +IBM ET SES DÉVELOPPEURS NE PEUVENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES SUIVANTS, ET CE, MÊME S'ILS ONT ÉTÉ INFORMÉS DE LEUR POSSIBLE SURVENANCE : 1) PERTE OU DÉTÉRIORATION DE DONNÉES ; 2) DOMMAGES DIRECTS, INDIRECTS, DOMMAGES INTÉRÊTS OU PRÉJUDICES FINANCIERS INDIRECTS ; ET/OU 3) PERTE DE PROFITS, PRÉJUDICE COMMERCIAL, PERTE DE CHIFFRE D'AFFAIRES, PERTE DE CLIENTÈLE, OU PERTE D'ÉCONOMIES ESCOMPTÉES MÊME SI CEUX-CI SONT LA CONSÉQUENCE IMMÉDIATE DE L'ÉVÉNEMENT À L'ORIGINE DES DOMMAGES. + +10.3 Fournisseurs et Développeurs de Logiciel + +Les limitations et exclusions convenues ci-dessus s'appliquent non seulement aux activités d'IBM mais également à celles de ses fournisseurs et ses développeurs, et définissent le montant maximum pour lequel IBM, ses fournisseurs et ses développeurs sont collectivement responsables. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_in b/charts/mq-devserver/LICENSE_locale/LICENSE_in new file mode 100644 index 0000000..b7f7196 --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_in @@ -0,0 +1,254 @@ +INFORMASI LISENSI + +Program-program yang tercantum di bawah ini dilisensikan dengan syarat dan ketentuan Informasi Lisensi berikut ini selain syarat lisensi Program yang sebelumnya telah disetujui oleh Klien dan IBM. Apabila Klien sebelumnya tidak menyetujui syarat lisensi yang berlaku untuk Program, Perjanjian Lisensi Internasional untuk Program Tanpa Garansi (Z125-5589-05) akan berlaku. + +Nama Program (Nomor Program): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Syarat-syarat standar berikut ini berlaku untuk penggunaan Program oleh Pemegang Lisensi. + +Bundel Program + +Program dilisensikan sebagai paket multi-produk yang terdiri dari Bundel Program yang diidentifikasikan di bawah ini. Pemegang Lisensi berhak untuk memasang dan menggunakan Bundel Program tersebut dalam batas-batas Bukti Kepemilikan untuk Program dan sebagaimana yang dinyatakan dalam dokumen Informasi Lisensi ini. Pemegang Lisensi tidak berhak untuk mentrasfer atau memasarkan kembali Bundel Program terpisah dari paket multi-produk. Bundel Program dapat disertai dengan syarat-syarat lisensi, dan syarat-syarat tersebut, apabila ada, berlaku untuk penggunaan Pemegang Lisensi atas Bundel Program tersebut. Apabila terdapat ketidaksesuaian, syarat-syarat dalam dokumen Informasi Lisensi ini menggantikan syarat-syarat Bundel Program. Pada saat hak Pemegang Lisensi untuk menggunakan Program telah habis masa berlakunya atau berakhir, Pemegang Lisensi harus berhenti menggunakan, memusnahkan atau segera mengembalikan semua salinan Bundel Program kepada pihak yang darinya Pemegang Lisensi memperoleh Program. Jika Pemegang Lisensi mengunduh Bundel Program, Pemegang Lisensi harus menghubungi pihak yang darinya Pemegang Lisensi memperoleh Program. Apabila Pemegang Lisensi ingin melisensikan Bundel Program untuk penggunaan apa pun yang melebihi batas-batas yang tertera di atas, silakan hubungi Perwakilan Penjualan IBM atau pihak yang darinya Pemegang Lisensi memperoleh Program untuk mendapatkan lisensi yang sesuai. + +Berikut ini adalah Bundel Program yang dilisensikan dengan Program: +IBM MQ V9.0.3 + +Batasan untuk Pengembang + +Apabila Program ditetapkan untuk "Para Pengembang", Program hanya dapat disebarkan sebagai bagian dari pengembangan dan pengujian unit internal Pemegang Lisensi pada mesin pengembang. Mesin pengembang adalah lingkungan destop fisik atau virtual, yang menjalankan sistem operasi utama dan Program, yang mana keduanya dapat diakses dan digunakan oleh tidak lebih dari satu pengembang yang ditetapkan. Pemegang Lisensi tidak berhak menggunakan Program untuk memproses beban-beban kerja produksi, mensimulasi beban-beban kerja produksi atau menguji kemampuan pengembangan kode, aplikasi atau sistem apa pun. Pemegang Lisensi tidak berhak untuk menggunakan sebagian Program untuk tujuan-tujuan lainnya tanpa memperoleh kepemilikan-kepemilikan produksi yang sesuai. + +Komponen yang Tidak Digunakan untuk Menetapkan Kepemilikan yang Diperlukan + +Pada saat menentukan jumlah kepemilikan yang diperlukan untuk pemasangan atau penggunaan Program oleh Pemegang Lisensi, pemasangan atau penggunaan komponen-komponen Program berikut ini tidak dipertimbangkan. Dengan kata lain, Pemegang Lisensi dapat memasang dan menggunakan komponen-komponen Program berikut ini, berdasarkan syarat-syarat lisensi, tetapi komponen-komponen ini tidak digunakan untuk menentukan jumlah kepemilikan yang diperlukan untuk Program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponen Sumber dan Material Contoh + +Program dapat mencakup beberapa komponen dalam bentuk kode sumber ("Komponen Sumber") dan beberapa material lain yang dikenal sebagai Material Contoh. Pemegang Lisensi dapat menyalin dan memodifikasi Komponen-komponen Sumber dan Material Contoh untuk penggunaan internal hanya dengan ketentuan bahwa penggunaan tersebut dalam batas-batas hak lisensi berdasarkan Perjanjian ini, akan tetapi dengan ketentuan bahwa Pemegang Lisensi tidak dapat mengubah atau menghapus setiap informasi atau pemberitahuan tentang hak cipta yang terdapat dalam Komponen-komponen Sumber atau Material Contoh. IBM memberikan Komponen-komponen Sumber dan Material Sampel tanpa adanya kewajiban dukungan dan "APA ADANYA", TANPA GARANSI APA PUN, SECARA TEGAS ATAU TERSIRAT, TERMASUK GARANSI KEPEMILIKAN, JAMINAN TIDAK ADANYA PELANGGARAN ATAU CAMPUR TANGAN SERTA JAMINAN DAN KETENTUAN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Perjanjian Lisensi Internasional untuk Program Tanpa Garansi + +Bagian 1 - Syarat-syarat Umum + +DENGAN MENGUNDUH, MEMASANG, MENYALIN, MENGAKSES, MENEKAN TOMBOL "TERIMA" ATAU DENGAN CARA LAIN MENGGUNAKAN PROGRAM, PEMEGANG LISENSI MENYETUJUI SYARAT-SYARAT PERJANJIAN INI. APABILA ANDA MENERIMA SYARAT-SYARAT INI ATAS NAMA PEMEGANG LISENSI, ANDA MENYATAKAN DAN MENJAMIN BAHWA ANDA MEMILIKI WEWENANG SEPENUHNYA UNTUK MENGIKAT PEMEGANG LISENSI DENGAN SYARAT-SYARAT INI. APABILA ANDA TIDAK MENYETUJUI SYARAT-SYARAT INI, + +* JANGAN MENGUNDUH, MEMASANG, MENYALIN, MENGAKSES, MENEKAN TOMBOL "TERIMA" ATAU MENGGUNAKAN PROGRAM; DAN + +* SEGERA MENGEMBALIKAN MEDIA DAN DOKUMENTASI YANG TIDAK TERPAKAI KEPADA PIHAK DARI MANA ANDA MENDAPATKANNYA UNTUK SUATU PENGEMBALIAN UANG ATAS JUMLAH YANG TELAH DIBAYARKAN. APABILA PROGRAM TELAH DIUNDUH, MUSNAHKAN SEMUA SALINAN PROGRAM. + +1. Definisi + +"Penggunaan yang Sah" - tingkat yang ditetapkan di mana Pemegang Lisensi berhak untuk melaksanakan atau menjalankan Program. Tingkat tersebut dapat diukur berdasarkan jumlah pengguna, jutaan unit layanan ("MSU"), Unit Nilai Prosesor ("PVU") atau tingkat penggunaan lainnya yang ditetapkan oleh IBM. + +"IBM" - International Business Machines Corporation atau salah satu anak perusahaannya. + +"Informasi tentang Lisensi" ("IL") - dokumen yang memberikan informasi dan syarat-syarat tambahan yang dikhususkan untuk Program. IL Program tersedia di www.ibm.com/software/sla. IL juga dapat dilihat dalam direktori Program dengan menggunakan perintah sistem atau sebagai buklet yang dimasukkan bersama dengan Program. + +"Program" - hal-hal berikut ini, termasuk asli dan seluruh atau sebagian salinan: 1) instruksi dan data yang dapat dibaca oleh mesin, 2) komponen, berkas, dan modul, 3) konten audio-visual (seperti gambar, teks, rekaman atau foto), dan 4) materi yang dilisensikan terkait (seperti kunci dan dokumentasi). + +2. Susunan Perjanjian + +Perjanjian ini termasuk Bagian 1 - Syarat-syarat Umum, Bagian 2 - Syarat-syarat Khusus Tiap Negara (apabila ada) dan IL dan merupakan perjanjian yang lengkap antara Pemegang Lisensi dan IBM tentang penggunaan Program. Perjanjian ini menggantikan setiap komunikasi lisan atau tertulis sebelumnya antara Pemegang Lisensi dan IBM tentang penggunaan Program oleh Pemegang Lisensi. Syarat-syarat Bagian 2 dapat menggantikan atau memodifikasi syarat-syarat Bagian 1. Sepanjang terdapat ketidaksesuaian, IL berlaku atas kedua Bagian tersebut. + +3. Pemberian Lisensi + +Program adalah milik IBM atau pemasok IBM serta diberi hak cipta dan lisensi, tetapi tidak dijual. + +IBM memberikan lisensi yang tidak eksklusif kepada Pemegang Lisensi untuk 1) menggunakan Program sampai dengan Penggunaan yang Sah sebagaimana ditetapkan dalam tagihan, 2) membuat dan memasang salinan-salinan untuk mendukung Penggunaan yang Sah tersebut, dan 3) membuat salinan cadangan, semua dengan ketentuan bahwa + +a. Pemegang Lisensi telah mendapatkan Program secara sah dan mematuhi syarat-syarat Perjanjian ini; + +b. salinan cadangan tidak bekerja kecuali apabila Program yang dicadangkan tidak dapat bekerja; + +c. Pemegang Lisensi mereproduksi semua pemberitahuan tentang hak cipta dan keterangan kepemilikan lainnya dalam masing-masing salinan atau sebagian salinan Program; + +d. Pemegang Lisensi memastikan bahwa setiap individu yang menggunakan Program (yang diakses dari jarak dekat atau jarak jauh) 1) melakukan hal tersebut hanya atas nama Pemegang Lisensi dan 2) mematuhi syarat-syarat Perjanjian ini; + +e. Pemegang Lisensi tidak 1) menggunakan, menyalin, memodifikasi, atau mendistribusikan Program kecuali apabila diizinkan secara tegas dalam Perjanjian ini; 2) merakit kembali, menyusun kembali, dengan cara lain, menerjemahkan atau merekayasa kembali Program, kecuali apabila diizinkan secara tegas oleh undang-undang tanpa adanya kemungkinan pelepasan kontrak; 3) menggunakan setiap komponen, berkas, modul, konten audio-visual atau materi yang dilisensikan terkait yang terpisah dari Program tersebut; atau 4) mensublisensikan, menyewa atau menyewakan Program; dan + +f. apabila Pemegang Lisensi mendapatkan Program ini sebagai Program Pendukung, Pemegang Lisensi menggunakan Program ini hanya untuk mendukung Program Utama dan tunduk kepada setiap batasan dalam lisensi untuk Program Utama, atau, apabila Pemegang Lisensi mendapatkan Program ini sebagai Program Utama, Pemegang Lisensi menggunakan semua Program Pendukung hanya untuk mendukung Program ini dan tunduk kepada setiap batasan dalam Perjanjian ini. Untuk tujuan Butir "f" ini, "Program Pendukung" adalah Program yang merupakan bagian dari Program IBM lainnya ("Program Utama") dan diidentifikasi sebagai Program Pendukung dalam IL Program Utama. (Untuk mendapatkan lisensi terpisah untuk Program Pendukung tanpa pembatasan-pembatasan ini, Pemegang Lisensi sebaiknya menghubungi pihak yang darinya Pemegang Lisensi telah mendapatkan Program Pendukung.) + +Lisensi ini berlaku untuk masing-masing salinan Program yang dibuat oleh Pemegang Lisensi. + +3.1 Tukar Tambah, Pembaruan, Perbaikan, dan Tambahan + +3.1.1 Tukar Tambah + +Apabila Program digantikan oleh Program tukar tambah, lisensi Program yang digantikan segera diakhiri. + +3.1.2 Pembaruan, Perbaikan, dan Tambahan + +Pada saat Pemegang Lisensi menerima pembaruan, perbaikan atau tambahan untuk Program, Pemegang Lisensi menerima syarat-syarat tambahan atau syarat-syarat yang berbeda yang berlaku untuk pembaruan, perbaikan atau tambahan tersebut yang ditetapkan dalam IL-nya. Apabila syarat-syarat tambahan atau syarat-syarat yang berbeda tidak diberikan, maka pembaruan, perbaikan atau tambahan tersebut semata-mata tunduk kepada Perjanjian ini. Apabila Program digantikan oleh pembaruan, Pemegang Lisensi setuju untuk segera berhenti menggunakan Program yang digantikan. + +3.2 Lisensi Jangka Waktu Tertentu + +Apabila IBM melisensikan Program selama jangka waktu tertentu, lisensi Pemegang Lisensi diakhiri pada akhir jangka waktu tertentu, kecuali apabila Pemegang Lisensi dan IBM sepakat untuk memperbarui lisensi Program tersebut. + +3.3 Jangka Waktu dan Pengakhiran + +Perjanjian ini berlaku sampai perjanjian ini diakhiri. + +IBM dapat mengakhiri lisensi Pemegang Lisensi apabila Pemegang Lisensi tidak mematuhi syarat-syarat Perjanjian ini. + +Apabila lisensi diakhiri karena alasan apa pun oleh salah satu pihak, Pemegang Lisensi setuju untuk segera berhenti menggunakan dan memusnahkan semua salinan Program Pemegang Lisensi. Setiap syarat Perjanjian ini yang berdasarkan sifatnya melampaui pengakhiran Perjanjian ini tetap berlaku sampai syarat tersebut dipenuhi, dan berlaku untuk masing-masing penerus dan penerima pengalihan hak kedua belah pihak. + +4. Biaya-biaya + +Biaya-biaya, apabila ada, didasarkan pada Penggunaan yang Sah yang telah didapatkan, yang ditetapkan dalam tagihan. IBM tidak memberikan kredit atau pengembalian uang atas biaya-biaya yang telah jatuh tempo atau dibayar, kecuali apabila ditetapkan lain dalam Perjanjian ini. + +Apabila Pemegang Lisensi ingin meningkatkan Penggunaannya yang Sah, Pemegang Lisensi harus memberitahukan kepada IBM atau pengecer (reseller) IBM yang sah terlebih dahulu dan membayar setiap biaya yang berlaku. + +5. Pajak + +Apabila suatu lembaga mengenakan bea, pajak, retribusi atau biaya terhadap Program, tidak termasuk bea, pajak, retribusi atau biaya yang didasarkan pada pendapatan bersih IBM, maka Pemegang Lisensi setuju untuk membayar jumlah tersebut, sebagaimana ditetapkan dalam tagihan atau dokumentasi tentang pembebasan pajak atas pasokan. Pemegang Lisensi bertanggung jawab atas setiap pajak properti pribadi untuk Program sejak tanggal Pemegang Lisensi mendapatkan Program tersebut. Apabila suatu lembaga mengenakan bea cukai, pajak, retribusi atau biaya untuk impor ke dalam atau ekspor, transfer, akses atau penggunaan Program ke luar negeri di mana Pemegang Lisensi awal mendapatkan lisensi, maka Pemegang Lisensi setuju bahwa pihaknya bertanggung jawab atas, dan akan membayar, setiap jumlah yang dikenakan. + +6. Jaminan Uang Kembali + +Apabila Pemegang Lisensi tidak puas dengan Program karena alasan apa pun dan merupakan Pemegang Lisensi awal, Pemegang Lisensi dapat mengakhiri lisensi dan mendapatkan pengembalian uang atas jumlah yang telah dibayar oleh Pemegang Lisensi, apabila ada, untuk Program, dengan ketentuan bahwa Pemegang Lisensi mengembalikan Program kepada pihak yang darinya Pemegang Lisensi telah mendapatkan Program tersebut dalam jangka waktu 30 hari sejak tanggal tagihan. Apabila lisensi adalah lisensi untuk jangka waktu tertentu yang tunduk kepada pembaruan, maka Pemegang Lisensi dapat mendapatkan pengembalian uang hanya apabila Program dikembalikan dalam jangka waktu 30 hari pertama sejak jangka waktu yang pertama. Apabila Pemegang Lisensi telah mengunduh Program, Pemegang Lisensi sebaiknya menghubungi pihak yang darinya Pemegang Lisensi telah mendapatkan Program tersebut untuk mendapatkan instruksi-instruksi tentang cara untuk mendapatkan pengembalian uang. + +7. Transfer Program + +Pemegang Lisensi dapat mentransfer Program serta semua hak dan kewajiban lisensi Pemegang Lisensi kepada pihak lainnya hanya apabila pihak tersebut menyetujui syarat-syarat Perjanjian ini. Apabila lisensi diakhiri karena alasan apa pun oleh salah satu pihak, Pemegang Lisensi dilarang untuk mentransfer Program kepada pihak lainnya. Pemegang Lisensi tidak dapat mentransfer sebagian 1) Program atau 2) Penggunaan yang Sah atas Program. Pada saat Pemegang Lisensi mentransfer Program, Pemegang Lisensi juga harus mentransfer salinan kertas Perjanjian ini, termasuk IL. Segera setelah transfer dilakukan, lisensi Pemegang Lisensi berakhir. + +8. Tidak Adanya Jaminan + +DENGAN TUNDUK KEPADA SETIAP JAMINAN YANG DIDASARKAN PADA UNDANG-UNDANG YANG TIDAK DAPAT DIKECUALIKAN, IBM TIDAK MEMBUAT JAMINAN ATAU KETENTUAN APA PUN, SECARA TEGAS ATAU TERSIRAT, TENTANG PROGRAM ATAU DUKUNGAN, APABILA ADA, TERMASUK, TETAPI TIDAK TERBATAS PADA, SETIAP JAMINAN ATAU KETENTUAN APA PUN SECARA TERSIRAT TENTANG KELAYAKAN UNTUK DIPERJUALBELIKAN, KUALITAS YANG MEMUASKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN HAK MILIK, SERTA SETIAP JAMINAN ATAU KETENTUAN TENTANG TIDAK ADANYA PELANGGARAN. + +BEBERAPA NEGARA ATAU YURISDIKSI TIDAK MEMPERBOLEHKAN PENGECUALIAN TENTANG JAMINAN SECARA TEGAS ATAU TERSIRAT. OLEH KARENA ITU, PENGECUALIAN DI ATAS MUNGKIN TIDAK BERLAKU UNTUK PEMEGANG LISENSI. DALAM HAL TERSEBUT, JAMINAN-JAMINAN TERSEBUT DIBATASI SELAMA PERIODE MINIMUM YANG DIWAJIBKAN OLEH UNDANG-UNDANG. TIDAK ADA JAMINAN APA PUN YANG BERLAKU SETELAH PERIODE TERSEBUT. BEBERAPA NEGARA ATAU YURISDIKSI TIDAK MEMPERBOLEHKAN BATASAN-BATASAN TENTANG BERAPA LAMA JAMINAN YANG TERSIRAT BERLAKU. OLEH KARENA ITU, BATASAN DI ATAS MUNGKIN TIDAK BERLAKU UNTUK PEMEGANG LISENSI. PEMEGANG LISENSI DAPAT MEMILIKI HAK LAINNYA YANG BERBEDA-BEDA ANTARA NEGARA YANG SATU DENGAN NEGARA YANG LAIN ATAU ANTARA YURISDIKSI YANG SATU DENGAN YURISDIKSI YANG LAIN. + +SANGGAHAN-SANGGAHAN DAN PENGECUALIAN-PENGECUALIAN DALAM PASAL 8 INI JUGA BERLAKU UNTUK SETIAP PENGEMBANG DAN PEMASOK PROGRAM IBM. + +PARA PRODUSEN, PEMASOK ATAU PENERBIT PROGRAM NON-IBM DAPAT MEMBERIKAN GARANSI MEREKA SENDIRI. + +IBM TIDAK MEMBERIKAN DUKUNGAN DALAM BENTUK APA PUN, KECUALI APABILA IBM MENETAPKAN LAIN. DALAM HAL TERSEBUT, SETIAP DUKUNGAN YANG DIBERIKAN OLEH IBM TUNDUK KEPADA SANGGAHAN-SANGGAHAN DAN PENGECUALIAN-PENGECUALIAN DALAM PASAL 8 INI. + +9. Data dan Basis Data Pemegang Lisensi + +Untuk membantu Pemegang Lisensi dalam mengisolasi penyebab permasalahan pada Program, IBM dapat meminta agar Pemegang Lisensi 1) memperbolehkan IBM untuk mengakses sistem Pemegang Lisensi dari jarak jauh atau 2) mengirimkan informasi atau data sistem Pemegang Lisensi kepada IBM. Akan tetapi, IBM tidak diwajibkan untuk memberikan asistensi tersebut kecuali apabila IBM dan Pemegang Lisensi mengadakan perjanjian tertulis secara terpisah yang atas dasarnya IBM setuju untuk memberikan kepada Pemegang Lisensi jenis dukungan tersebut, yang tidak termasuk dalam kewajiban-kewajiban IBM dalam Perjanjian ini. Dalam hal apa pun, IBM menggunakan informasi tentang kesalahan-kesalahan dan permasalahan-permasalahan untuk meningkatkan produk dan layanannya serta membantu pemberian tawaran-tawaran dukungan terkait yang dilakukannya. Untuk tujuan-tujuan ini, IBM dapat menggunakan badan-badan dan para subkontraktor IBM (termasuk dalam satu negara atau lebih selain negara di mana Pemegang Lisensi berada), dan Pemegang Lisensi memberikan wewenang kepada IBM untuk melakukan hal tersebut. + +Pemegang Lisensi tetap bertanggung jawab atas 1) setiap data dan konten dari setiap basis data yang disediakan oleh Pemegang Lisensi untuk IBM, 2) pilihan dan pelaksanaan prosedur dan kendali yang terkait dengan akses, keamanan, enkripsi, penggunaan, dan transmisi data (termasuk setiap data yang dapat diidentifikasi secara pribadi), serta 3) cadangan dan pemulihan atas setiap basis data dan setiap data yang disimpan. Pemegang Lisensi tidak akan mengirimkan atau memberikan kepada IBM akses ke setiap informasi yang dapat diidentifikasi secara pribadi, dalam bentuk data atau bentuk apa pun lainnya, dan akan bertanggung jawab atas biaya-biaya dan jumlah-jumlah lainnya yang wajar yang mungkin ditanggung oleh IBM terkait dengan setiap informasi tersebut yang secara tidak sengaja diberikan kepada IBM atau kehilangan atau pengungkapan informasi tersebut oleh IBM, termasuk biaya-biaya dan jumlah-jumlah lainnya yang timbul dari tuntutan pihak ketiga. + +10. Batasan Kewajiban + +Batasan-batasan dan pengecualian-pengecualian dalam Pasal 10 (Batasan Kewajiban) ini berlaku sepanjang batasan-batasan dan pengecualian-pengecualian tersebut tidak dilarang oleh undang-undang yang berlaku tanpa adanya kemungkinan pelepasan kontrak. + +10.1 Hal-hal yang Mungkin Menjadi Tanggung Jawab IBM + +Keadaan-keadaan dapat timbul apabila, karena wanprestasi dari pihak IBM atau kewajiban lainnya, Pemegang Lisensi berhak untuk mendapatkan ganti rugi dari IBM. Terlepas dari alasan Pemegang Lisensi untuk menuntut ganti rugi dari IBM (termasuk pelanggaran yang mendasar, kelalaian, pernyataan yang salah, atau kontrak lainnya atau tuntutan atas tindakan kejahatan), seluruh kewajiban IBM untuk semua tuntutan secara keseluruhan yang timbul dari atau terkait dengan masing-masing Program atau dengan cara lain, yang timbul berdasarkan Perjanjian ini tidak akan melampaui jumlah dari setiap 1) ganti rugi karena cedera badan (termasuk kematian) dan kerusakan terhadap properti yang bersifat tetap (real property) dan properti pribadi yang berwujud dan 2) ganti rugi aktual atas kerusakan langsung lainnya, sampai sebesar-besarnya biaya yang telah dibayarkan oleh Pemegang Lisensi untuk Program yang menjadi subjek tuntutan (apabila Program tunduk kepada biaya-biaya tetap dalam jangka waktu tertentu, sampai sebesar-besarnya biaya-biaya selama jangka waktu dua belas bulan). + +Batas ini juga berlaku untuk setiap pengembang dan pemasok Program IBM. Batas ini merupakan jumlah maksimum tanggung jawab IBM serta para pengembang dan pemasok Programnya secara bersama-sama. + +10.2 Hal-hal yang Bukan Merupakan Tanggung Jawab IBM + +DALAM SITUASI APA PUN JUGA, IBM, PARA PENGEMBANG ATAU PEMASOK PROGRAMNYA TIDAK BERTANGGUNG JAWAB ATAS SALAH SATU HAL BERIKUT INI, BAHKAN APABILA TELAH DIINFORMASIKAN BAHWA TERDAPAT KEMUNGKINAN TERJADI HAL-HAL BERIKUT INI: + +a. KEHILANGAN ATAU KERUSAKAN DATA; + +b. KERUSAKAN / KERUGIAN KHUSUS, INSEDENTIL, CONTOH, ATAU KERUSAKAN / KERUGIAN TAK LANGSUNG, ATAU UNTUK SETIAP KERUSAKAN / KERUGIAN SEBAB-AKIBAT EKONOMIS; ATAU + +c. HILANGNYA LABA, BISNIS, PENDAPATAN, NAMA BAIK (GOODWILL), ATAU SIMPANAN YANG DIHARAPKAN. + +11. Verifikasi terhadap Kepatuhan + +Untuk tujuan-tujuan Pasal 11 (Verifikasi terhadap Kepatuhan) ini, "Syarat-syarat Perjanjian Lisensi Internasional untuk Program Tanpa Garansi" ini berarti 1) Perjanjian ini serta perubahan-perubahan dan dokumen-dokumen transaksi yang berlaku yang diberikan oleh IBM, dan 2) kebijakan-kebijakan perangkat lunak IBM yang dapat dilihat di situs web Kebijakan Perangkat Lunak IBM (www.ibm.com/softwarepolicies), termasuk tetapi tidak terbatas pada kebijakan-kebijakan tersebut yang terkait dengan cadangan, penetapan harga subkapasitas, dan migrasi. + +Hak-hak dan kewajiban-kewajiban yang tercantum dalam Pasal 11 ini tetap berlaku selama periode saat Program dilisensikan kepada Pemegang Lisensi dan selama dua tahun berikutnya. + +11.1 Proses Verifikasi + +Pemegang Lisensi setuju untuk menciptakan, menyimpan, dan memberikan kepada IBM dan para auditornya catatan-catatan tertulis yang akurat, keluaran (output) sistem, dan informasi sistem lainnya yang memadai untuk memberikan verifikasi yang dapat diaudit bahwa penggunaan semua Program oleh Pemegang Lisensi sesuai dengan Syarat-syarat Perjanjian Lisensi Internasional untuk Program Tanpa Garansi, termasuk, tetapi tidak terbatas pada, semua syarat pemberian lisensi dan kualifikasi penetapan harga yang berlaku dari IBM. Pemegang Lisensi bertanggung jawab untuk 1) memastikan bahwa pihaknya tidak melampaui Penggunaannya yang Sah dan 2) tetap sesuai dengan Syarat-syarat Perjanjian Lisensi Internasional untuk Program Tanpa Garansi. + +Setelah adanya pemberitahuan yang wajar, IBM dapat memverifikasi kepatuhan Pemegang Lisensi terhadap Syarat-syarat Perjanjian Lisensi Internasional untuk Program Tanpa Garansi di semua lokasi dan untuk semua lingkungan di mana Pemegang Lisensi menggunakan (untuk tujuan apa pun) Program-program dengan tunduk kepada Syarat-syarat Perjanjian Lisensi Internasional untuk Program Tanpa Garansi. Verifikasi tersebut akan dilakukan dengan cara yang seminimal mungkin mengganggu bisnis Pemegang Lisensi, dan dapat dilakukan di tempat-tempat Pemegang Lisensi, selama jam-jam kerja normal. IBM dapat menggunakan auditor yang independen untuk membantu verifikasi tersebut, dengan ketentuan bahwa IBM memiliki perjanjian kerahasiaan tertulis yang ada pada auditor tersebut. + +11.2 Resolusi + +IBM akan memberitahukan kepada Pemegang Lisensi secara tertulis apabila verifikasi tersebut menunjukkan bahwa Pemegang Lisensi telah menggunakan Program dengan cara yang melampaui Penggunaannya yang Sah atau dengan cara lain, tidak sesuai dengan Syarat-syarat Perjanjian Lisensi Internasional untuk Program Tanpa Garansi. Pemegang Lisensi setuju untuk segera membayar kepada IBM secara langsung biaya-biaya yang ditetapkan oleh IBM dalam tagihan untuk 1) setiap kelebihan penggunaan tersebut, 2) dukungan untuk kelebihan penggunaan tersebut selama kurang dari jangka waktu kelebihan penggunaan tersebut atau dua tahun, dan 3) setiap biaya tambahan dan kewajiban lainnya yang ditentukan yang diakibatkan oleh verifikasi tersebut. + +12. Pemberitahuan Pihak Ketiga + +Program dapat termasuk kode pihak ketiga yang dilisensikan oleh IBM, bukan pihak ketiga, kepada Pemegang Lisensi berdasarkan Perjanjian ini. Pemberitahuan-pemberitahuan, apabila ada, untuk kode pihak ketiga ("Pemberitahuan Pihak Ketiga") dimasukkan hanya untuk informasi Pemegang Lisensi. Pemberitahuan-pemberitahuan ini dapat dilihat di dalam berkas(-berkas) PEMBERITAHUAN Program. Informasi tentang cara untuk mendapatkan sumber kode untuk kode pihak ketiga tertentu dapat dilihat di dalam Pemberitahuan Pihak Ketiga. Apabila di dalam Pemberitahuan Pihak Ketiga, IBM mengidentifikasi kode pihak ketiga sebagai "Kode Pihak Ketiga yang Dapat Dimodifikasi", IBM memberikan wewenang kepada Pemegang Lisensi untuk 1) memodifikasi Kode Pihak Ketiga yang Dapat Dimodifikasi dan 2) merekayasa kembali modul-modul Program yang terhubung secara langsung dengan Kode Pihak Ketiga yang Dapat Dimodifikasi dengan ketentuan bahwa modul-modul tersebut hanya untuk tujuan debug modifikasi-modifikasi Pemegang Lisensi atas kode pihak ketiga tersebut. Kewajiban-kewajiban layanan dan dukungan IBM, apabila ada, berlaku hanya untuk Program yang tidak dimodifikasi. + +13. Umum + +a. Tidak ada satu pun dalam Perjanjian ini yang mempengaruhi hak-hak konsumen yang didasarkan pada undang-undang yang tidak dapat dilepaskan atau dibatasi oleh kontrak. + +b. Untuk Program-program yang diberikan oleh IBM kepada Pemegang Lisensi dalam bentuk yang berwujud, IBM memenuhi kewajiban-kewajiban pengiriman dan penyerahannya setelah Program-program tersebut diserahkan kepada pengangkut yang ditunjuk oleh IBM, kecuali apabila disepakati lain secara tertulis oleh Pemegang Lisensi dan IBM. + +c. Apabila terdapat ketentuan Perjanjian ini yang dianggap tidak sah atau tidak dapat diberlakukan, ketentuan-ketentuan Perjanjian lainnya yang tersisa tetap berlaku sepenuhnya. + +d. Pemegang Lisensi setuju untuk mematuhi semua peraturan perundang-undangan ekspor dan impor yang berlaku, termasuk peraturan-peraturan tentang embargo dan sanksi serta larangan-larangan ekspor A. S. untuk penggunaan-penggunaan akhir tertentu atau untuk para pengguna tertentu. + +e. Pemegang Lisensi memberikan wewenang kepada International Business Machines Corporation dan anak perusahaannya (dan para penerus, penerima pengalihan hak, kontraktor, dan Mitra Bisnis IBM mereka) untuk menyimpan dan menggunakan informasi kontak bisnis Pemegang Lisensi di mana pun mereka menjalankan bisnis, terkait dengan produk-produk dan layanan-layanan IBM, atau sebagai kelanjutan dari hubungan bisnis IBM dengan Pemegang Lisensi. + +f. Masing-masing pihak akan memberikan kesempatan yang wajar kepada pihak lainnya untuk mematuhi sebelum pihaknya mengajukan tuntutan bahwa pihak lainnya belum memenuhi kewajiban-kewajibannya berdasarkan Perjanjian ini. Para pihak akan berupaya dengan itikad baik untuk menyelesaikan semua sengketa, perselisihan atau tuntutan di antara para pihak yang terkait dengan Perjanjian ini. + +g. Kecuali apabila diwajibkan lain oleh undang-undang yang berlaku tanpa adanya kemungkinan pelepasan atau batasan kontrak: 1) tidak ada satu pihak pun yang akan mengambil tindakan hukum, tanpa memperhatikan bentuknya, untuk setiap tuntutan yang timbul dari atau terkait dengan Perjanjian ini dalam jangka waktu lebih dari dua tahun setelah timbulnya penyebab tuntutan; dan 2) setelah berakhirnya batas waktu tersebut, setiap tuntutan tersebut dan semua hak masing-masing yang terkait dengan tuntutan berakhir. + +h. Pemegang Lisensi atau IBM tidak bertanggung jawab atas kegagalan dalam memenuhi setiap kewajiban yang diakibatkan oleh penyebab-penyebab di luar kendalinya. + +i. Tidak ada hak atau dasar tuntutan untuk pihak ketiga yang diciptakan oleh Perjanjian ini, dan IBM tidak bertanggung jawab atas tuntutan-tuntutan pihak ketiga terhadap Pemegang Lisensi, kecuali apabila diizinkan dalam Subpasal 10.1 (Hal-hal yang Mungkin Menjadi Tanggung Jawab IBM) di atas karena cedera badan (termasuk kematian) atau kerusakan terhadap properti pribadi yang bersifat tetap atau berwujud yang merupakan tanggung jawab IBM secara hukum kepada pihak ketiga tersebut. + +j. Dalam mengadakan Perjanjian ini, tidak ada satu pihak pun yang mendasarkan pada setiap pernyataan yang tidak ditetapkan dalam Perjanjian ini, termasuk tetapi tidak terbatas pada setiap pernyataan yang terkait dengan: 1) kinerja atau fungsi Program; 2) pengalaman-pengalaman atau rekomendasi-rekomendasi para pihak lainnya; atau 3) hasil atau simpanan apa pun yang dapat dicapai oleh Pemegang Lisensi. + +k. IBM telah menandatangani perjanjian-perjanjian dengan perusahaan-perusahaan tertentu (disebut sebagai "Para Mitra Bisnis IBM") untuk mempromosikan, memasarkan, dan mendukung Program-program tertentu. Para Mitra Bisnis IBM tetap bersifat independen dan terpisah dari IBM. IBM tidak bertanggung jawab atas tindakan-tindakan atau pernyataan-pernyataan Para Mitra Bisnis IBM atau kewajiban-kewajiban yang mereka miliki terhadap Pemegang Lisensi. + +l. Syarat-syarat lisensi dan pemberian ganti rugi atas kekayaan intelektual dari perjanjian-perjanjian Pemegang Lisensi lainnya dengan IBM (seperti Perjanjian Konsumen IBM) tidak berlaku untuk lisensi-lisensi Program yang diberikan berdasarkan Perjanjian ini. + +m. Kedua belah pihak sepakat bahwa semua informasi yang dipertukarkan tidak bersifat rahasia. Apabila salah satu mewajibkan pertukaran informasi rahasia, pertukaran informasi tersebut akan dilakukan berdasarkan perjanjian kerahasiaan yang ditandatangani; + +14. Cakupan Geografis dan Undang-undang yang Mengatur + +14.1 Undang-undang yang Mengatur + +Kedua belah pihak sepakat bahwa pelaksanaan undang-undang negara di mana Pemegang Lisensi telah mendapatkan lisensi Program akan mengatur, menafsirkan, dan memberlakukan semua hak, tugas, dan kewajiban Pemegang Lisensi dan IBM yang timbul dari, atau yang dengan cara apa pun terkait dengan, pokok materi Perjanjian ini, dengan tidak memperhatikan ketidaksesuaian prinsip undang-undang. + +Konvensi Perserikatan Bangsa-Bangsa tentang Kontrak Penjualan Barang Internasional (United Nations Convention on Contracts for the International Sale of Goods) tidak berlaku. + +14.2 Yurisdiksi + +Semua hak, tugas, dan kewajiban tunduk kepada pengadilan-pengadilan negara di mana Pemegang Lisensi telah mendapatkan lisensi Program. + +Bagian 2 - Syarat-syarat Khusus Tiap Negara + +Untuk lisensi-lisensi yang diberikan di Indonesia, syarat-syarat berikut ini menggantikan atau memodifikasi syarat-syarat yang dijadikan acuan dalam Bagian 1. Semua syarat dalam Bagian 1 yang tidak diubah oleh perubahan-perubahan ini tetap tidak berubah dan tetap berlaku. Bagian 2 ini disusun sebagai berikut: + +* Perubahan negara terhadap Bagian 1, Pasal 14 (Undang-undang dan Yurisdiksi yang Mengatur); dan + +* Perubahan negara Asia Pasifik terhadap syarat-syarat Perjanjian lainnya. + +Perubahan negara terhadap Bagian 1, Pasal 14 (Undang-undang dan Yurisdiksi yang Mengatur) + +14.3 Arbitrase + +Ayat-ayat berikut ini ditambahkan sebagai Subpasal 14.3 (Arbitrase) yang baru sebagaimana ayat-ayat tersebut berlaku untuk Indonesia. Ketentuan-ketentuan Subpasal 14.3 ini berlaku atas ketentuan-ketentuan Subpasal 14.2 (Yurisdiksi) sepanjang diizinkan oleh undang-undang dan peraturan tata tertib yang mengatur yang berlaku: + +Masing-masing pihak akan memberikan kesempatan yang wajar kepada pihak lainnya untuk mematuhi sebelum pihaknya mengajukan tuntutan bahwa pihak lainnya belum memenuhi kewajiban-kewajibannya berdasarkan Perjanjian ini. Para pihak akan berupaya dengan itikad baik untuk menyelesaikan semua sengketa, perselisihan atau tuntutan di antara para pihak yang terkait dengan Perjanjian ini. Kecuali diwajibkan lain oleh undang-undang yang berlaku tanpa adanya kemungkinan pelepasan atau batasan kontrak, i) tidak ada satu pihak pun yang akan mengambil tindakan hukum, tanpa memperhatikan bentuknya, yang timbul karena atau terkait dengan Perjanjian ini atau transaksi apa pun berdasarkan Perjanjian ini dalam jangka waktu lebih dari dua tahun setelah timbulnya dasar tuntutan; dan ii) setelah batas waktu tersebut, setiap tindakan hukum yang timbul karena Perjanjian ini atau transaksi apa pun berdasarkan Perjanjian ini dan semua hak masing-masing yang terkait dengan setiap tindakan tersebut berakhir. + +Sengketa-sengketa yang timbul karena atau terkait dengan Perjanjian ini pada akhirnya akan diselesaikan melalui arbitrase yang akan diadakan di Jakarta, Indonesia, sesuai dengan aturan-aturan Badan Arbitrase Nasional Indonesia ("BANI") yang berlaku pada saat itu. Putusan arbitrase akan bersifat final dan mengikat para pihak tanpa adanya banding dan akan dibuat secara tertulis serta mencantumkan temuan-temuan fakta dan kesimpulan-kesimpulan hukum. + +Arbiter akan berjumlah tiga orang, dengan masing-masing pihak dalam sengketa tersebut berhak menunjuk seorang arbiter. Kedua arbiter yang ditunjuk oleh para pihak akan menunjuk arbiter ketiga yang akan bertindak sebagai ketua untuk memimpin proses penyelesaian sengketa tersebut. Lowongan dalam jabatan ketua akan diisi oleh Ketua BANI. Lowongan-lowongan lainnya akan diisi oleh masing-masing pihak yang mencalonkan. Proses-proses hukum akan berlanjut dari tahap proses-proses hukum sebelumnya pada saat terdapat lowongan. + +Apabila salah satu pihak menolak atau dengan kata lain, tidak menunjuk arbiter dalam jangka waktu 30 hari sejak tanggal pada saat pihak lainnya menunjuk arbiternya, arbiter yang ditunjuknya pertama kali akan menjadi arbiter tunggal, dengan ketentuan bahwa arbiter tersebut ditunjuk dengan cara yang sah dan tepat. + +Semua proses hukum akan dilaksanakan, termasuk semua dokumen yang disampaikan dalam proses hukum tersebut akan dibuat, dalam bahasa Inggris dan/atau Indonesia. + +PERUBAHAN-PERUBAHAN NEGARA ASIA PASIFIK + +INDONESIA + +3.3 Jangka Waktu dan Pengakhiran + +Kalimat berikut ini ditambahkan ke ayat terakhir: + +Kedua belah pihak melepaskan ketentuan Pasal 1266 Kitab Undang-undang Hukum Perdata, sepanjang ketentuan pasal tersebut mewajibkan keputusan pengadilan untuk mengakhiri perjanjian yang menciptakan kewajiban-kewajiban bersama. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_it b/charts/mq-devserver/LICENSE_locale/LICENSE_it new file mode 100644 index 0000000..c3f2b70 --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_it @@ -0,0 +1,302 @@ +INFORMAZIONI RELATIVE ALLA LICENZA + +I Programmi elencati di seguito sono concessi in licenza in base alle seguenti clausole e condizioni License Information in aggiunta alle clausole della licenza del Programma precedentemente accettate dal Cliente e IBM. Se il Cliente non ha accettato precedentemente le clausole della licenza in vigore per il Programma, si applica Accordo Internazionale di Licenza per Programmi senza Garanzia (Z125-5589-05). + +Nome Programma (Numero Programma): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Le seguenti clausole standard si applicano all'utilizzo del Programma da parte del licenziatario. + +Programmi in bundle + +Il Programma è concesso in licenza come pacchetto multi-prodotto composto dai Programmi in bundle identificati di seguito. Il licenziatario può installare ed utilizzare tali Programmi in bundle entro i limiti delle Prove di Titolarità per il Programma come dichiarato in questo documento di Informazioni di Licenza. Il licenziatario non può trasferire o rivendere i Programmi in bundle separatamente dal pacchetto contenente più prodotti. Un Programma in bundle può essere accompagnato da clausole di licenza e tali clausole, se esistenti, si applicano all'utilizzo di quel Programma in bundle da parte del licenziatario. In caso di conflitto, le clausole di questo documento di Informazioni relative alla Licenza prevarranno sulle clausole del Programma in bundle. Una volta scaduti o terminati i diritti di utilizzo del Programma, il licenziatario deve interromperne l'uso, distruggere o rimandare prontamente indietro tutte le copie dei Programmi in bundle a colui il quale il licenziatario ha acquisito il Programma. Se il licenziatario ha scaricato i Programmi in bundle, dovrà contattare la parte da cui ha acquisito il Programma. Se il licenziatario desidera concedere in licenza i Programmi in bundle affinché vengano utilizzati oltre i limiti di quanto consentito sopra, dovrà contattare un Rappresentante vendite IBM o la società da cui ha acquisito il Programma per ottenere la licenza appropriata. + +Di seguito i Programmi in bundle concessi in licenza con il Programma: +IBM MQ V9.0.3 + +Limitazione dello Sviluppatore + +Se il Programma è designato per "Sviluppatori", il Programma può essere utilizzato solo come parte dello sviluppo interno del licenziatario e unit test su una macchina dello sviluppatore. Una macchina dello sviluppatore è un ambiente desktop fisico o virtuale, che esegue un sistema operativo primario e il Programma, entrambi accessibili e utilizzati da più di uno sviluppatore specificato. Il licenziatario non può utilizzare il Programma per elaborare workload di produzione, simulando workload di produzione o test di scalabilità di qualsiasi codice, applicazione o sistema. Il licenziatario non può utilizzare alcuna parte del Programma per altri scopi senza acquisire le titolarità per produzione appropriate. + +Componenti non utilizzate per stabilire le titolarità richieste + +Nel determinare il numero di titolarità necessarie per l'installazione o l'utilizzo del Programma da parte del licenziatario, non saranno prese in considerazione l'installazione o l'utilizzo delle seguenti componenti del Programma. In altre parole, il licenziatario può installare ed utilizzare le seguenti componenti del Programma, in base a clausole di licenza, ma tali componenti non sono utilizzate per determinare il numero di titolarità richieste per il Programma. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componenti Sorgente e Materiali di Esempio + +Il Programma può includere alcune componenti in formato di codice sorgente ("Componenti Sorgente") e altri materiali identificati come Materiali di esempio. Il licenziatario può copiare e modificare le Componenti Sorgente e i Materiali di Esempio per uso interno solo a condizione che tale uso sia nei limiti dei diritti di licenza previsti in base al presente Accordo, a condizione tuttavia che il licenziatario non possa alterare o eliminare alcuna informazione sul copyright o avviso contenuto nelle Componenti Sorgente e nei Materiali di Esempio. IBM fornisce le Componenti Sorgente e i Materiali di Esempio senza obbligo di supporto e "NELLO STATO IN CUI SI TROVANO," SENZA GARANZIE, ESPRESSE O IMPLICITE, INCLUSE GARANZIE DI TITOLARITA', FUNZIONAMENTO ININTERROTTO O INTERFERENZA E LE GARANZIE E LE CONDIZIONI IMPLICITE DI COMMERCIABILITA' E IDONEITA' PER UNO SCOPO PARTICOLARE. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Accordo Internazionale di Licenza per Programmi senza Garanzia + +Parte 1 - Condizioni Generali + +SCARICANDO, INSTALLANDO, COPIANDO, ACCEDENDO, FACENDO CLIC SUL PULSANTE "ACCETTO", O UTILIZZANDO IL PROGRAMMA, IL LICENZIATARIO ACCETTA LE CLAUSOLE DEL PRESENTE ACCORDO. SE SI ACCETTANO TALI CLAUSOLE PER CONTO DEL LICENZIATARIO, SI DICHIARA E GARANTISCE DI AVERE PIENA AUTORITA' DI VINCOLARE IL LICENZIATARIO ALLE PRESENTI CLAUSOLE. SE NON SI ACCETTANO LE PRESENTI DISPOSIZIONI, + +* NON SCARICARE, INSTALLARE, COPIARE, ACCEDERE, FARE CLIC SUL PULSANTE "ACCETTO", O UTILIZZARE IL PROGRAMMA; E + +* RESTITUIRE IMMEDIATAMENTE I SUPPORTI NON UTILIZZATI E LA DOCUMENTAZIONE ALLA PARTE DA CUI E' STATA OTTENUTA PER UN RIMBORSO DEL CORRISPETTIVO EVENTUALMENTE PAGATO. SE IL PROGRAMMA E' STATO SCARICATO, DISTRUGGERE TUTTE LE COPIE DEL PROGRAMMA. + +1. Definizioni + +"Uso Autorizzato" - il livello specificato per il quale il Licenziatario è autorizzato ad eseguire o far funzionare il Programma. Quel livello può essere misurato per numero di utenti, MSU (millions of service units), Processor Value Unit ("PVU"), o un altro livello di utilizzo specificato da IBM. + +"IBM" - International Business Machines Corporation o una delle sue consociate. + +"Informazioni relative alla licenza" ("LI") - un documento che fornisce informazioni e qualsiasi clausola aggiuntiva specifica ad un Programma. La LI del Programma è disponibile presso il sito www.ibm.com/software/sla. E' possibile trovare la LI anche nella directory del Programma, utilizzando un comando di sistema, o nel libretto incluso con il Programma. + +"Programma" - sia il programma originale che tutte le copie integrali o parziali di esso: 1) istruzioni in formato leggibile dalla macchina e dati, 2) componenti, file e moduli, 3) contenuto audiovisivo (quale immagini, testo, registrazioni o figure), e 4) materiali su licenza associati (come chiavi e documentazioni). + +2. Struttura dell'Accordo + +Il presente Accordo è suddiviso in Parte 1 - Condizioni Generali, Parte 2 - Condizioni applicabili ai singoli Paesi (ove applicabili) e la LI costituisce l'accordo integrale tra il Licenziatario e IBM relativamente all'uso del Programma. Sostituisce qualsiasi altra precedente comunicazione verbale o scritta intercorsa tra il Licenziatario ed IBM relativa all'uso del Programma da parte del Licenziatario. Le condizioni incluse nella Parte 2 possono sostituire o modificare quelle contenute nella Parte 1. In caso di conflitto, la LI prevarrà su entrambe le Parti. + +3. Concessione della Licenza + +Il Programma è di proprietà di IBM o di un fornitore IBM, ed è tutelato dalle leggi sul diritto di autore, viene concesso in licenza, ma non viene venduto. + +IBM concede al Licenziatario una licenza non esclusiva per 1) utilizzare il Programma fino al livello di utilizzo specificato nella fattura, 2) effettuare ed installare copie per supportare tale utilizzo e 3) effettuare una copia di backup, tutto a condizione che + +a. il Licenziatario abbia legalmente ottenuto il Programma e soddisfi le clausole di questo Accordo; + +b. la copia di backup non funzioni a meno che il Programma di cui è eseguito il backup non possa funzionare; + +c. Il Licenziatario riproduca su ciascuna copia, anche parziale, del Programma le indicazioni relative al diritto d'autore e ogni altra indicazione relativa a diritti di proprietà; + +d. il Licenziatario si assicuri che chiunque utilizzi il Programma (con accesso locale o remoto) 1) rispetti l'uso autorizzato e 2) rispetti le clausole di questo Accordo; + +e. Il Licenziatario non 1) utilizzi, copi o distribuisca il Programma fatto salvo quanto previsto nel presente Accordo; 2) assembli a ritroso, compili a ritroso, o in altro modo traduca o esegua il reverse engineering del Programma, salvo quanto espressamente consentito dalle norme inderogabili di legge, senza possibilità di deroga contrattuale,; 3) utilizzi alcuna delle componenti del Programma, dei file, dei moduli, del contenuto audio-visivo, o di materiale correlato concesso in licenza separatamente dal Programma; o 4) sublicenzi, conceda in noleggio o locazione il Programma; e + +f. se il Licenziatario ottiene questo Programma come Programma di supporto, utilizzi questo Programma solo per supportare il Programma Principale e sia soggetto a qualsiasi limitazione nella licenza per il Programma Principale, o, se il Licenziatario ottiene questo Programma come Programma Principale, utilizzi tutti i Programmi di Supporto solo per supportare questo Programma, e sia soggetto a tutte le limitazioni in questo Accordo. Ai fini di questo punto "f," per "Programma di Supporto" si intende un Programma che è parte di un altro Programma IBM ("Programma Principale") e identificato come Programma di Supporto nella LI del Programma Principale. (Per ottenere una licenza a parte ad un Programma di Supporto senza tali limitazioni, il Licenziatario dovrà contattare la parte da cui ha ottenuto il Programma di Supporto). + +Questa licenza si applica ad ogni copia del Programma effettuata dal Licenziatario. + +3.1 Trade-up, Aggiornamenti, Correzione (Fix) e Patch + +3.1.1 Trade-up + +Se il Programma è sostituito da un Programma di trade-up, la licenza del Programma sostituito terminerà immediatamente. + +3.1.2 Aggiornamenti, Correzione (Fix) e Patch + +Quando il Licenziatario riceve un aggiornamento, correzione, o patch ad un Programma, accetta qualsiasi clausola aggiuntiva o differente applicabile a tale aggiornamento, correzione o patch specificata nella sua LI. Se non sono fornite clausole aggiuntive o differenti, allora gli aggiornamenti, correzioni o patch sono soggetti solo a questo Accordo. Se il Programma è sostituito da un aggiornamento, il Licenziatario accetta di sospendere subito l'uso del Programma sostituito. + +3.2 Licenze con durata fissa + +Se IBM concede in licenza il Programma per una durata fissa, la licenza del Licenziatario cesserà alla fine della durata fissa, a meno che il Licenziatario e IBM non accettino di rinnovarla. + +3.3 Termine e Revoca + +Questo Accordo resterà in vigore fino alla revoca. + +IBM potrà revocare la licenza del Licenziatario qualora questi non rispetti le clausole del presente Accordo. + +In caso di revoca della licenza da entrambe le parti, per qualsiasi motivo, il Licenziatario accetta di sospendere subito l'uso e distruggere tutte le copie del Programma effettuate. Qualsiasi clausola del presente Accordo che per sua natura si estende oltre la cessazione dell'Accordo, resterà in vigore fino al suo adempimento e si applicherà ai rispettivi successori e agli assegnatari delle parti. + +4. Canoni + +I canoni, se previsti, si basano sull'Uso Autorizzato ottenuto, specificato nella fattura. IBM non rilascia crediti o rimborsi per somme già dovute o pagate, salvo se diversamente specificato in questo Accordo. + +Se il Licenziatario desidera aumentare il proprio Uso Autorizzato, dovrà comunicarlo in anticipo ad IBM o ad un rivenditore autorizzato IBM e pagare tutti i corrispettivi applicabili. + +5. Tasse + +Qualora qualsiasi autorità imponga sul Programma una tassa, un'imposta, un dazio, o un canone, con l'esclusione di quelli basati sul reddito imponibile di IBM, allora il Licenziatario accetta di pagare l'ammontare o si dovrà fornire documentazione dell'esenzione eventualmente spettante. Il Licenziatario è responsabile di qualsiasi tassa relativa alla proprietà personale sul Programma dalla data del suo acquisto. Qualora un'autorità imponga un dazio doganale, una tassa, un'imposta o un canone per l'importazione, l'esportazione, il trasferimento, l'accesso o l'utilizzo del Programma al di fuori del paese in cui il Licenziatario originario ha ottenuto la licenza, allora il Licenziatario accetta di essere responsabile per qualsiasi somma imposta e di pagarla. + +6. Garanzia di rimborso + +Qualora il Licenziatario non sia soddisfatto del Programma per qualsiasi ragione e sia anche il Licenziatario originale, potrà ottenere un rimborso del corrispettivo pagato per il Programma, se previsto, a condizione che il Licenziatario restituisca il Programma alla parte da cui lo ha acquistato entro 30 giorni dalla data della fattura. Se la licenza è concessa per una durata fissa soggetta a rinnovo, allora il Licenziatario potrà ottenere un rimborso solo se il Programma sarà restituito entro 30 giorni dalla data iniziale. Se il Licenziatario ha scaricato il Programma, dovrà contattare la parte da cui lo ha ottenuto per istruzioni su come ottenere il rimborso. + +7. Trasferimento del Programma + +Il Licenziatario può trasferire il Programma e tutti i suoi obblighi e diritti di licenza a terze parti solo se tale parte accetta le clausole del presente Accordo. In caso di revoca della licenza da entrambe le parti, per qualsiasi motivo, il Licenziatario non potrà trasferire il Programma ad un'altra parte. Il Licenziatario non può trasferire una parte 1) del Programma o 2) dell'Uso Autorizzato del Programma. Con il trasferimento del Programma, il Licenziatario dovrà anche trasferire una copia cartacea del presente Accordo, inclusa la LI. Subito dopo il trasferimento, l'autorizzazione ad utilizzare il programma è revocata. + +8. Esclusioni delle garanzie + +FATTE SALVE LE GARANZIE INDEROGABILI DI LEGGE, IBM NON FORNISCE GARANZIE O CONDIZIONI, ESPRESSE O IMPLICITE, RELATIVE AL PROGRAMMA O AL SUPPORTO, SE ESISTENTE, INCLUSE, MA NON LIMITATE A, GARANZIE O CONDIZIONI IMPLICITE DI COMMERCIABILITA', DI QUALITA', IDONEITA' PER UNO SCOPO PARTICOLARE, E TITOLARITA', E NON VIOLAZIONE. + +POICHÉ LA LEGISLAZIONE DI ALCUNI PAESI NON CONSENTE L'ESCLUSIONE DELLE GARANZIE ESPRESSE O IMPLICITE, LA SUDDETTA ESCLUSIONE POTREBBE NON ESSERE APPLICABILE. IN TAL CASO, TALI GARANZIE SARANNO LIMITATE ALLA DURATA DEL PERIODO MINIMO PREVISTO DALLA LEGGE. NESSUNA GARANZIA E' APPLICABILE DOPO TALE PERIODO. POICHÉ LA LEGISLAZIONE DI ALCUNI PAESI NON CONSENTE LIMITAZIONI BASATE SULLA DURATA DI UNA GARANZIA IMPLICITA, LA SUDDETTA LIMITAZIONE POTREBBE NON ESSERE APPLICABILE. IL LICENZIATARIO PUO' OTTENERE ULTERIORI DIRITTI DERIVANTI DALLA LEGISLAZIONE SPECIFICA DI CIASCUN PAESE. + +RINUNCE ED ESCLUSIONI IN QUESTA SEZIONE 8 SI APPLICANO ANCHE AGLI SVILUPPATORI E FORNITORI DEL PROGRAMMA IBM. + +I PRODUTTORI, I FORNITORI O GLI EDITORI DI PROGRAMMI NON IBM POSSONO FORNIRE GARANZIE PROPRIE. + +IBM NON FORNISCE SUPPORTO DI ALCUN TIPO, SE NON DIVERSAMENTE SPECIFICATO. IN TAL CASO, QUALSIASI SUPPORTO FORNITO DA IBM E' SOGGETTO ALLE RINUNCE ED ESCLUSIONI IN QUESTA SEZIONE 8. + +9. Dati e Database del Licenziatario + +Per assistere il Licenziatario nell'isolare la causa di un problema con il Programma, IBM può richiedere che il Licenziatario 1) consenta ad IBM di accedere in remoto al sistema del Licenziatario o 2) invii le informazioni del Licenziatario o i dati del sistema a IBM. Tuttavia, IBM non è obbligata a fornire tale assistenza a meno che IBM ed il Licenziatario non abbiano stipulato un accordo scritto a parte in base al quale IBM accetta di fornire al Licenziatario quel tipo di supporto che va oltre gli obblighi di IBM in questo Accordo. In ogni caso, IBM utilizzerà le informazioni sugli errori e i problemi per migliorare i suoi prodotti e servizi ed assistere il Licenziatario con la fornitura di offerte di supporto correlate. A tal fine, IBM può utilizzare enti o subappaltatori di IBM (anche in uno o più paesi diversi da quello in cui ha sede il Licenziatario), ed il Licenziatario autorizza IBM a procedere in tal senso. + +Il Licenziatario resta responsabile per 1) i dati ed il contenuto di qualsiasi database che il Licenziatario rende disponibile ad IBM, 2) la scelta e l'implementazione di procedure e controlli relativi all'accesso, alla sicurezza, alla crittografia, all'uso e alla trasmissione di dati (inclusi dati personali), e 3) il backup e il recupero di database e dati memorizzati. Il Licenziatario non invierà o fornirà ad IBM accesso ad informazioni personali, sotto forma di dati o in altri formati, e sarà responsabile dei costi ragionevoli e di qualsiasi altra somma che IBM si trovi ad affrontare relativa alle informazioni erroneamente fornite ad IBM o alla perdita o divulgazione di tali informazioni da parte di IBM, incluse quelle derivanti da pretese di risarcimento di terze parti. + +10. Limitazione di Responsabilità + +Le limitazioni ed esclusioni in questa Sezione 10 (Limitazione di Responsabilità) si applicano nei limiti in cui non sono vietate dalla legislazione applicabile senza possibilità di deroga contrattuale. + +10.1 Casi nei quali è prevista una responsabilità da parte IBM + +Possono verificarsi circostanze in cui, per fatto imputabile ad IBM o per responsabilità di terzi, il Licenziatario abbia il diritto ad un risarcimento da parte di IBM. In questi casi, indipendentemente da ciò che dà titolo al Licenziatario a richiedere il risarcimento danni ad IBM (inclusi colpa grave, negligenza, erronee dichiarazioni o altri fatti di natura contrattuale o extracontrattuale), la responsabilità di IBM è limitata 1) ai danni fisici alla persona (incluso il decesso), ai beni immobili e mobili appartenenti alle persone fisiche per i quali IBM sia responsabile per legge e 2) nel caso di ogni altro danno diretto fino al corrispettivo pagato per il Programma oggetto della richiesta del risarcimento. + +Questo limite si applica anche a qualsiasi sviluppatore e fornitore dei Programmi IBM. Ciò rappresenta il limite massimo per cui IBM e i suoi sviluppatori e fornitori del Programma sono collettivamente responsabili. + +10.2 Casi nei quali è esclusa una responsabilità da parte IBM + +IN NESSUN CASO IBM, GLI SVILUPPATORI DEL PROGRAMMA O I FORNITORI SARANNO RESPONSABILI PER QUANTO SEGUE, ANCHE SE INFORMATI DELLA POSSIBILITÀ DEL LORO VERIFICARSI: + +a. PERDITA O DANNEGGIAMENTO DI DATI; + +b. DANNI SPECIALI, INCIDENTALI, ESEMPLARI, O INDIRETTI, O QUALSIASI ALTRO DANNO ECONOMICO CONSEGUENTE; O + +c. MANCATI GUADAGNI, PERDITA DI OPPORTUNITÀ COMMERCIALE, DI REDDITO, DI BENEFICI, O MANCATI RISPARMI. + +11. Verifica della conformità + +Ai fini di questa Sezione 11 (Verifica della Conformità), per "Clausole del Programma ILAN" si intende 1) il presente Accordo e gli emendamenti applicabili e i documenti della transazione forniti da IBM, e 2) le politiche software IBM che si possono trovare sul sito web IBM Software Policy (www.ibm.com/softwarepolicies), incluse ad esempio quelle politiche relative al backup, alla determinazione dei prezzi per sub-capacity, e alla migrazione. + +I diritti e gli obblighi stabiliti in questa Sezione 11 resteranno in vigore per il periodo in cui il Programma è concesso in licenza al Licenziatario e per i due anni successivi. + +11.1 Processo di Verifica + +Il licenziatario accetta di creare, conservare e fornire ad IBM e ai suoi revisori accurate registrazioni scritte, esito delle analisi svolte mediante strumenti di sistema e altre informazioni relative al sistema sufficienti a fornire una verifica che dimostri che l'uso del Licenziatario di tutti i Programmi è conforme alle Condizioni del Programma ILAN, incluse, ad esempio, tutte le condizioni di licenza d'uso IBM applicabili e le condizioni di eleggibilità e di definizione dei prezzi. Il Licenziatario è responsabile 1) di garantire che non supererà il suo Uso Autorizzato, e 2) di restare conforme alle Clausole del Programma ILAN. + +Con ragionevole preavviso, IBM può verificare la conformità con le Condizioni del Programma ILAN del Licenziatario presso tutte le sedi e per tutti gli ambienti in cui il Licenziatario utilizza (per qualsiasi scopo) i Programmi in base alle Clausole del Programma ILAN. Tale verifica sarà condotta in modo da arrecare il minor intralcio possibile alle attività commerciali del Licenziatario, e potrà essere condotta presso la sede del Licenziatario, durante il normale orario lavorativo. IBM può utilizzare un revisore esterno in tale verifica, a condizione che IBM abbia sottoscritto con tale revisore un accordo di riservatezza ancora in vigore. + +11.2 Risoluzione + +Qualora IBM dovesse riscontrare che il Licenziatario ha utilizzato il Programma oltre il suo Uso Autorizzato o in modo non conforme alle Condizioni del Programma ILAN, lo comunicherà al Licenziatario per iscritto. Il Licenziatario accetta di pagare prontamente e direttamente ad IBM il corrispettivo specificato da IBM in una fattura per 1) qualsiasi uso che ecceda quello autorizzato, 2) il supporto di tale uso per un periodo minore alla durata di tale uso in eccesso o per due anni, e 3) qualsiasi corrispettivo aggiuntivo e altra responsabilità determinata a seguito di tale verifica. + +Avvisi di Terze Parti + +Il Programma può includere codice di terze parti che IBM, non la terza parte, concede in licenza al Licenziatario in base al presente Accordo. Gli avvisi per il codice di terze parti, se esistenti, ("Avvisi di Terze Parti") sono inclusi solo per informazioni del Licenziatario. E' possibile trovare tali avvisi nei file NOTICES del Programma. Le informazioni su come ottenere il codice sorgente per determinato codice di terze parti si possono trovare negli Avvisi delle Terze Parti. Se negli Avvisi delle Terze Parti IBM dovesse identificare codice di terze parti come "Codice di Terze Parti Modificabile", IBM autorizza il Licenziatario a 1) modificare il Codice di Terze Parti Modificabile e 2) eseguire il reverse engineer dei moduli del Programma che si interfacciano direttamente con il Codice di Terze Parti Modificabile a condizione che sia solo allo scopo di eseguire il debug delle modifiche del Licenziatario per tale codice di terze parti. Le obbligazioni IBM relative a servizi e supporto, ove applicabili, si applicano esclusivamente al Programma non modificato. + +13. Disposizioni Generali + +a. Le disposizioni del presente Accordo non pregiudicano in alcun modo i diritti e le garanzie di legge del consumatore che non possono essere escluse o limitate per contratto. + +b. Per i Programmi che IBM fornisce al Licenziatario in formato tangibile, IBM adempirà ai propri obblighi di distribuzione e consegna alla consegna di tali Programmi al corriere designato da IBM, salvo quanto diversamente concordato per iscritto tra il Licenziatario ed IBM. + +c. Qualora una qualsiasi clausola del presente Accordo dovesse essere dichiarata invalida o inefficace, le restanti clausole del presente Accordo rimarranno pienamente in vigore ed efficaci. + +d. Il Licenziatario accetta di rispettare tutte le disposizioni di legge e le normative applicabili in materia di importazione ed esportazione, incluse le norme sull'embargo degli Stati Uniti e le sanzioni e divieti sull'esportazione per determinati utilizzi o determinati utenti. + +e. Il Licenziatario autorizza International Business Machines Corporation e le sue consociate (e i loro successori e assegnatari, appaltatori e Business Partner IBM) di memorizzare e utilizzare le informazioni relative a contatti, laddove vi siano rapporti commerciali, ovunque essi operino, insieme ai prodotti e servizi IBM, per usi relativi alle attività commerciali tra IBM e il Licenziatario. + +f. Ciascuna parte consente all'altra l'opportunità ragionevole di conformarsi prima che questa reclami la mancata conformità ai suoi obblighi in base al presente Accordo. Le parti tenteranno in buona fede di risolvere tutte le dispute, le controversie o i reclami relativi al presente Accordo. + +g. Salvo quanto diversamente richiesto dalla legge applicabile, senza possibilità di rinuncia contrattuale o limitazione: 1) nessuna parte intraprenderà un'azione legale, indipendentemente dalla forma, per qualsiasi reclamo derivante da o relativo al presente Accordo per oltre due anni a far data dalla causa che ha dato vita all'azione; e 2) alla scadenza di tale limite, qualsiasi pretesa e diritto rispettivo relativo al reclamo decadono. + +h. Né il Licenziatario né IBM saranno ritenuti responsabili per eventuali inadempimenti dovuti a cause che esulano dal proprio controllo. + +i. Il presente Accordo non creerà alcun diritto o azione legale da terze parti, né IBM sarà responsabile di alcun reclamo da parte di terzi, fatto salvo quanto consentito nella suddetta Sottosezione 10.1 (Casi nei quali è prevista una responsabilità da parte IBM ) per danni fisici alla persona (incluso il decesso) o danni ai beni immobili e mobili appartenenti alle persone fisiche per i quali IBM sia responsabile per legge. + +j. Mediante la sottoscrizione del presente Accordo, nessuna delle parti farà affidamento su eventuali dichiarazioni non specificate in questo Accordo, incluse, a titolo esemplificativo ma non esaustivo, dichiarazioni relative: 1) a prestazioni o funzionamento del Programma; 2) alle esperienze o a raccomandazioni di altre parti; o 3) a risultati o risparmi che il Licenziatario possa raggiungere. + +k. IBM ha stipulato accordi con determinate organizzazioni (chiamate "Business Partner IBM") per promuovere, commercializzare, e fornire assistenza per determinati Programmi. I Business Partner IBM restano soggetti indipendenti e separati da IBM. IBM non è responsabile per le azioni o le dichiarazioni dei Business Partner IBM né delle obbligazioni che essi abbiano assunto nei confronti del Licenziatario. + +l. Le condizioni di licenza e di indennizzo per la proprietà intellettuale di altri accordi del Licenziatario con IBM (come l'IBM Customer Agreement) non si applicano alle licenze del Programma concesse in base al presente Accordo. + +m. Entrambe le parti accettano che tutte le informazioni scambiate saranno considerate non riservate. Nel caso in cui una parte richieda lo scambio di informazioni riservate, ciò avverrà previa sottoscrizione di un accordo di riservatezza; + +14. Ambito geografico e Legge Applicabile + +14.1 Legge Applicabile + +Entrambe le parti concordano sull'applicazione delle leggi del paese in cui è stata acquistata la licenza del Programma al fine di disciplinare, interpretare ed applicare tutti i diritti e le obbligazioni che derivano, o in qualche modo sono correlati al presente Accordo, indipendentemente dal conflitto di principi di legge. + +La Convenzione delle Nazioni Unite sui Contratti per la Vendita Internazionale di Merci non è applicabile. + +14.2 Foro competente + +Tutti i diritti, i doveri e le obbligazioni sono soggetti agli organi giurisdizionali del Paese in cui è stata acquistata la licenza al Programma. + +Parte 2 - Condizioni applicabili ai singoli Paesi + +Per le licenze concesse in licenza in Italia, le seguenti clausole sostituiscono o modificano le clausole cui si è fatto riferimento nella Parte 1. Tutte le clausole della Parte 1 non modificate da questi emendamenti restano immodificate e in vigore. Questa Parte 2 è organizzata nel modo seguente: + +* Emendamenti relativi ai singoli paesi alla Parte 1, Sezione 14 (Legge Regolatrice e Giurisdizione); e + +* emendamenti paese relativi a Europa, Medio Oriente, e Africa per altre clausole dell'Accordo. + +Emendamenti relativi ai singoli paesi alla Parte 1, Sezione 14 (Legge Regolatrice e Giurisdizione) + +14.2 Giurisdizione + +Il seguente paragrafo si riferisce alla giurisdizione e sostituisce la Sottosezione 14.2 (Giurisdizione) in quanto si applica all'Italia: + +Tutti i diritti, i doveri e gli obblighi sono soggetti agli organi giudiziari del paese in cui è stata acquisita la licenza al Programma salvo nei paesi identificati di seguito in cui tutte le dispute derivanti da o correlate al presente Accordo, inclusi i procedimenti sommari, saranno portati dinanzi alla giurisdizione esclusiva dei seguenti tribunali competenti e ad essa soggetti: + +organi giudiziari di Milano. + +EUROPA, MEDIO ORIENTE, AFRICA (EMEA) EMENDAMENTI AI SINGOLI PAESI + +STATI MEMBRI DELL'UNIONE EUROPEA + +8. Esclusioni delle garanzie + +Quanto segue si aggiunge alla Sezione 8 (Esclusione della garanzia): + +Nell'Unione Europea ("EU"), i consumatori hanno diritti legali in base alla legislazione nazionale applicabile che regola la vendita dei beni al consumatore. Quanto descritto nella presente Sezione 8 (Esclusione della garanzia) non riguarda tali diritti. + +STATI MEMBRI DELL'UNIONE EUROPEA E I PAESI IDENTIFICATI DI SEGUITO + +La Svizzera e qualsiasi paese Europeo che ha approvato una legislazione sulla protezione o riservatezza dei dati locali simile al modello dell'Unione Europea. + +13. Disposizioni Generali + +Quanto segue sostituisce l'Articolo 13.e: + +(1) Definizioni - Ai fini di questo Articolo 13.e, si applicano le seguenti definizioni aggiuntive: + +(a) Informazioni sui Contatti Aziendali - le informazioni sui contatti relativi all'azienda divulgate dal Licenziatario ad IBM, inclusi nomi, titoli, indirizzi aziendali, numeri di telefono e indirizzi email dei dipendenti ed appaltatori del Licenziatario. Per Austria, Italia e Svizzera, le Informazioni sui Contatti Aziendali includono anche informazioni sul Licenziatario e i suoi appaltatori come persona giuridica (ad esempio, dati sul fatturato del Licenziatario e altre informazioni transazionali) + +(b) Personale di Contatto Aziendale - i dipendenti e appaltatori del Licenziatario a cui si riferiscono le Informazioni sui Contatti Aziendali. + +(c) Autorità sulla Protezione di Dati - l'autorità stabilita dalla Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche nel paese applicabile o, per i paesi non-UE, l'autorità responsabile della supervisione della protezione dei dati personali in quel paese, o (per quanto detto prima) qualsiasi successore debitamente nominato. + +(d) Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche - (i) le legislazione e normativa locale applicabile in vigore che implementa i requisiti della Direttiva UE 95/46/EC (sulla protezione degli individui relativamente all'elaborazione dei dati personali e alla libera circolazione di tali dati) e della Direttiva UE 2002/58/EC (relativa all'elaborazione dei dati personali e alla tutela della privacy nel settore delle comunicazioni elettroniche); o (ii) per i paesi non-UE, la legislazione e/o la normativa passata nel paese applicabile relativa alla protezione dei dati personali e alla regolamentazione delle comunicazioni elettroniche che coinvolgono dati personali, inclusa (per quanto detto prima) qualsiasi sostituzione o modifica legale. + +(e) IBM Group - International Business Machines Corporation di Armonk, New York, USA, le sue consociate e i loro rispettivi Business Partner e subappaltatori. + +(2) Il Licenziatario autorizza IBM: + +(a) ad elaborare e utilizzare le Informazioni sui Contatti Aziendali all'interno di IBM Group a supporto del Licenziatario inclusa la fornitura di servizi di supporto, e allo scopo di promuovere le relazioni di business tra il Licenziatario e IBM Group, incluso, ad esempio, contattare il Personale di Contatti Aziendali (via email o in altro modo) e commercializzare prodotti e servizi di IBM Group (lo "Scopo Specificato"); e + +(b) a divulgare le Informazioni sui Contatti Aziendali ad altri membri di IBM Group in base allo Scopo Specificato. + +(3) IBM accetta che tutte le Informazioni sui Contatti Aziendali saranno elaborate in conformità con la Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche e saranno utilizzate solo per lo Scopo Specificato. + +(4) Nei limiti richiesti dalla Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche, il Licenziatario dichiara (a) di aver ottenuto (o che otterrà) le autorizzazioni dal (e ha rilasciato (o rilascerà) avvisi al) Personale sui Contatti Aziendali necessarie al fine di consentire ad IBM Group di elaborare e utilizzare le Informazioni sui Contatti Aziendali per lo Scopo Specificato. + +(5) Il Licenziatario autorizza IBM a trasferire le Informazioni sui Contatti Aziendali al di fuori dell'Area Economica Europea, a condizione che il trasferimento sia effettuato in base alle clausole contrattuali approvate dalla Legislazione sulla Protezione dei Dati e sulle Comunicazioni Elettroniche. + +ITALIA + +10. Limitazione di Responsabilità + +Quanto segue sostituisce le clausole della Sezione 10 (Limitazione di Responsabilità) nella loro interezza: + +Fatto salvo quanto stabilito da norme inderogabili di legge: + +10.1 Articoli per cui IBM può essere responsabile + +La responsabilità complessiva di IBM per qualsiasi pretesa di risarcimento per qualsiasi danno e perdita derivante dall'adempimento dei propri obblighi in base a o in associazione con il presente accordo o dovuta ad altre cause correlate all'accordo è limitata solo alla compensazione di quei danni e quelle perdite provate e realmente derivanti come conseguenza diretta del mancato adempimento di tali obblighi(se è colpa di IBM) o di tale causa, per un ammontare massimo pari al corrispettivo pagato dal Licenziatario per il Programma che ha causato i danni (se il Programma è soggetto a canoni per la durata fissa, fino al corrispettivo pari a dodici mesi). + +La suddetta limitazione non si applicherà ai danni alle persone (incluso il decesso) e ai danni tangibili al patrimonio e alla proprietà privata (beni mobili e immobili) per cui IBM è legalmente responsabile. + +10.2 Articoli per cui IBM non è responsabile + +IN NESSUN CASO IBM, O UNO QUALSIASI DEI SUOI SVILUPPATORI DI PROGRAMMI, SARÀ RESPONSABILE DEI SEGUENTI EVENTI, ANCHE SE INFORMATA DELLA POSSIBILITÀ DEL LORO VERIFICARSI: 1) PERDITA O DANNEGGIAMENTO DI DATI; 2) DANNI INCIDENTALI, ESEMPLARI O INDIRETTI, O QUALSIASI DANNO ECONOMICO CONSEGUENTE; E / O 3) LUCRO CESSANTE, MANCATI AFFARI, PERDITA COMMERCIALE, DI REDDITO, DI BENEFICI, O MANCATI RISPARMI ANCHE SE DERIVANTI COME IMMEDIATA CONSEGUENZA DALL'EVENTO CHE HA PRODOTTO IL DANNO. + +10.3 Fornitori e Sviluppatori del Programma + +La limitazione ed esclusione di responsabilità qui accettata si applica non solo alle attività eseguite da IBM, ma anche a quelle eseguite dai suoi fornitori e sviluppatori di Programmi, e rappresenta l'ammontare massimo per il quale IBM, i suoi fornitori e sviluppatori di Programmi, sono complessivamente responsabili. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_ja b/charts/mq-devserver/LICENSE_locale/LICENSE_ja new file mode 100644 index 0000000..8f83a1a --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_ja @@ -0,0 +1,230 @@ +¥é¥¤¥»¥ó¥¹¾ðÊó + +°Ê²¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢¤ªµÒÍÍ¤È IBM ¤È¤¬»öÁ°¤Ë¹ç°Õ¤·¤¿¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѵöÂú¾ò·ï¤Ë²Ã¤¨¤Æ¡¢¼¡¤Î¥é¥¤¥»¥ó¥¹¾ðÊó¤Î»ÈÍѾò·ï¤Ë´ð¤Å¤¤¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¡Ö¥×¥í¥°¥é¥à¡×¤ÎÍ­¸ú¤Ê»ÈÍѵöÂú¾ò·ï¤Ë»öÁ°¤Ë¹ç°Õ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ ¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (ÊݾÚŬÍѳ°¥×¥í¥°¥é¥àÍÑ) (Z125-5589-05) ¤¬Å¬ÍѤµ¤ì¤Þ¤¹¡£ + +¥×¥í¥°¥é¥à̾ (¥×¥í¥°¥é¥àÈÖ¹æ): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +°Ê²¼¤Îɸ½à¾ò·ï¤¬¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ + +¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à + +ËÜ¡Ö¥×¥í¥°¥é¥à¡×¤Ï¡¢°Ê²¼¤ÇÆÃÄꤵ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¹½À®¤µ¤ì¤ëÊ£¿ô¤ÎÀ½ÉʤΥѥ屡¼¥¸¤È¤·¤Æ»ÈÍѵöÂú¤µ¤ì¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Î¥é¥¤¥»¥ó¥¹¾Ú½ñ¤ÎÈÏ°ÏÆâ¤Ç¡¢¤«¤ÄËܥ饤¥»¥ó¥¹¾ðÊó¤Ëµ­ºÜ¤µ¤ì¤¿¤È¤ª¤ê¡¢¤«¤«¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òƳÆþ¤·»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤òÊ£¿ôÀ½Éʥѥ屡¼¥¸¤«¤éʬΥ¤·¤Æ°Üž¤Þ¤¿¤ÏºÆÈΤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ë¤Ï¡¢»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£»ÈÍѾò·ï¤¬Éտ路¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤é¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѤËŬÍѤµ¤ì¤Þ¤¹¡£ óòó÷¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ëܥ饤¥»¥ó¥¹¾ðÊó¤Î¾ò·ï¤¬¡¢¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѾò·ï¤è¤êÍ¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤Î»ÈÍѸ¢¤¬½ªÎ»¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤·¡¢ÇË´þ¡¢¤Þ¤¿¤ÏĴ㸵¤ØÊֵѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ï¡¢Ä´Ã£¸µ¤ØÏ¢Íí¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤¬¡¢¾åµ­À©¸Â¤¬¤Ê¤¤¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂú¤òÆÀ¤ë¤Ë¤Ï¡¢IBM ±Ä¶ÈôÅö°÷¤Þ¤¿¤ÏĴ㸵¤ØÏ¢Íí¤·¡¢Å¬ÀڤʻÈÍѸ¢¤ò¼èÆÀ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +°Ê²¼¤Ï¡Ö¥×¥í¥°¥é¥à¡×¤È¤È¤â¤Ë»ÈÍѵöÂú¤µ¤ì¤ë¥Ð¥ó¥É¥ë¡¦¥×¥í¥°¥é¥à¤Ç¤¹¡£ +IBM MQ V9.0.3 + +³«È¯¼Ô¤ÎÀ©¸Â + +¡Ö¥×¥í¥°¥é¥à¡×¤¬¡Ö³«È¯¼ÔÍѡפȤ·¤Æ»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¡Ö¥×¥í¥°¥é¥à¡×¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¼ÒÆâ³«È¯¤Î°ìÉô¤È¤·¤Æ¡¢¤ª¤è¤Ó³«È¯¼Ô¤Î¥Þ¥·¥ó¾å¤Ç¤Î¥æ¥Ë¥Ã¥È¡¦¥Æ¥¹¥È¤È¤·¤Æ¤Î¤ßŸ³«¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£³«È¯¼Ô¤Î¥Þ¥·¥ó¤È¤Ï¡¢ÆÃÄê¤Î 1 ¿Í¤Î³«È¯¼Ô¤Î¤ß¥¢¥¯¥»¥¹¤ª¤è¤Ó»ÈÍѲÄǽ¤Ê¡¢¥×¥é¥¤¥Þ¥ê¡¼¡¦¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤ª¤è¤Ó¡Ö¥×¥í¥°¥é¥à¡×¤ò²ÔƯ¤¹¤ëʪÍý¤Þ¤¿¤Ï²¾Áۥǥ¹¥¯¥È¥Ã¥×´Ä¶­¤Ç¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö¥×¥í¥°¥é¥à¡×¤ò¡¢¼Âư¥ï¡¼¥¯¥í¡¼¥É¤Î½èÍý¡¢¼Âư¥ï¡¼¥¯¥í¡¼¥É¤Î¥·¥ß¥å¥ì¡¼¥È¡¢¤Þ¤¿¤Ï¤É¤Î¥³¡¼¥É¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Þ¤¿¤Ï¥·¥¹¥Æ¥à¤Î¥¹¥±¡¼¥é¥Ó¥ê¥Æ¥£¡¼¤Î¥Æ¥¹¥È¤Î¤¿¤á¤Ë»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Å¬ÀÚ¤ÊÀ¸»ºÅª»ÈÍѤΤ¿¤á¤Î»ÈÍѵöÂú¤ò¼èÆÀ¤¹¤ë¤³¤È¤Ê¤¯¡¢¾åµ­°Ê³°¤ÎÌÜŪ¤Ç¡Ö¥×¥í¥°¥é¥à¡×¤Î¤¤¤º¤ì¤ÎÉôʬ¤â»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +ɬÍפʻÈÍѸ¢¿ô¤Î»»Äê¤Ë¹Í褵¤ì¤Ê¤¤¥³¥ó¥Ý¡¼¥Í¥ó¥È + +¥é¥¤¥»¥ó¥·¡¼¤Î¡Ö¥×¥í¥°¥é¥à¡×¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Ë¡¢°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ÎƳÆþ¤Þ¤¿¤Ï»ÈÍѤϹÍ褵¤ì¤Þ¤»¤ó¡£¤¹¤Ê¤ï¤Á¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢»ÈÍѵöÂú¾ò·ï¤Ë´ð¤Å¤¤¤Æ°Ê²¼¤Î¥×¥í¥°¥é¥à¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òƳÆþ¤ª¤è¤Ó»ÈÍѤǤ­¤Þ¤¹¤¬¡¢¤½¤ì¤é¤¬¡Ö¥×¥í¥°¥é¥à¡×¤ËɬÍפʻÈÍѸ¢¿ô¤Î·èÄê¤Î¤¿¤á¤Ë¹Í褵¤ì¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ + +¡Ö¥×¥í¥°¥é¥à¡×¤Ë¤Ï¡¢¥½¡¼¥¹¡¦¥³¡¼¥É·Á¼°¤Î¤¤¤¯¤Ä¤«¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È (°Ê²¼¡Ö¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤È¤·¤Æµ¬Äꤵ¤ì¤ë¤½¤Î¾¤Î»ñÎÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯»ÈÍѸ¢¤ÎÀ©¸Â¤ÎÈÏ°ÏÆâ¤Ç¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¼ÒÆâ¤Ç¤Î»ÈÍѤ˸¤ꡢʣÀ½¤ª¤è¤Ó½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Þ¤¿¤Ï¥µ¥ó¥×¥ë»ñÎÁ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÃøºî¸¢¾ðÊó¤Þ¤¿¤ÏÆÃµ­»ö¹à¤òÊѹ¹¤Þ¤¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ IBM ¤Ï¡¢¥½¡¼¥¹¡¦¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ª¤è¤Ó¥µ¥ó¥×¥ë»ñÎÁ¤ò¡¢¥µ¥Ý¡¼¥ÈµÁ̳¤òÉé¤ï¤º¤Ë¸½Â¸¤Î¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¤ò´Þ¤á¡¢¸¢¸¶¤ÎÊݾڡ¢Âè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڡ¢¾¦ÉÊÀ­¤ÎÊݾڤª¤è¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤Þ¤¿¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (ÊݾÚŬÍѳ°¥×¥í¥°¥é¥àÍÑ) + +Âè 1 ¾Ï - ¶¦Ä̾ò¹à + +¤ªµÒÍͤ¬¥é¥¤¥»¥ó¥·¡¼¡Ê»ÈÍѵöÂú¤ò¼õ¤±¤¿¸Ä¿Í¡¢²ñ¼Ò¡¢¤½¤Î¾¤ÎË¡¿Í¡Ë¤È¤·¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¡¢Æ³Æþ¡¢Ê£À½¡¢¥¢¥¯¥»¥¹¡¢¡ÖƱ°Õ¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¡¢¤Þ¤¿¤Ï»ÈÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢ËÜ¡Ö¥×¥í¥°¥é¥à¤Î¤´»ÈÍѾò·ï (ÊݾÚŬÍѳ°¥×¥í¥°¥é¥àÍÑ)¡×(°Ê²¼¡ÖËÜ»ÈÍѾò·ï¡×¤Þ¤¿¤Ï¡ÖILAN¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ËƱ°Õ¤·¤¿¤â¤Î¤È¸«¤Ê¤µ¤ì¤Þ¤¹¡£ ¤ªµÒÍͤ¬¥é¥¤¥»¥ó¥·¡¼¤ÎÂå¹Ô¼Ô¤È¤·¤ÆËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¾ì¹ç¡¢¤ªµÒÍͤϡ¢¥é¥¤¥»¥ó¥·¡¼¤ËËÜ»ÈÍѾò·ï¤ò½å¼é¤µ¤»¤ëÁ´¸¢¸Â¤òÍ­¤·¤Æ¤¤¤ë¤³¤È¤òɽÌÀ¤ª¤è¤Ó Êݾڤ¤¤¿¤À¤¯¤â¤Î¤È¤·¤Þ¤¹¡£ ¤³¤Î»ÈÍѾò·ï¤ËƱ°Õ¤¤¤¿¤À¤±¤Ê¤¤¾ì¹ç¤Ï¡¢¤ªµÒÍÍ¤Ï + +* ËÜ·ï¥×¥í¥°¥é¥à¤Î¥À¥¦¥ó¥í¡¼¥É¡¢Æ³Æþ¡¢Ê£À½¡¢¥¢¥¯¥»¥¹¡¢¡ÖƱ°Õ¡×¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¡¢¤Þ¤¿¤Ï»ÈÍѤò¤¹¤ë¤³¤È¤Ê¤¯¡¢¤«¤Ä + +* ľ¤Á¤Ë̤»ÈÍѤε­Ï¿ÇÞÂΤª¤è¤Óʸ½ñ¤ò¤½¤ÎĴ㸵¤ËÊֵѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤³¤ì¤È°ú¤­´¹¤¨¤Ë»ÙʧºÑ¤ßÎÁ¶â¤ÎÊÖ¶â¤ò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤Ë¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤òÇË´þ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +1. ÄêµÁ + +»ÈÍѵöÂúÈÏ°Ï - ¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤Þ¤¿¤Ï²ÔƯ¤¹¤ë¤³¤È¤òµöÂú¤µ¤ì¤¿ÆÃÄê¤ÎÈϰϤò¤¤¤¤¤Þ¤¹¡£¤«¤«¤ëÈϰϤϡ¢¥æ¡¼¥¶¡¼¤Î¿ô¡¢MSU (Millions of Service Units)¡¢¥×¥í¥»¥Ã¥µ¡¼¡¦¥Ð¥ê¥å¡¼¡¦¥æ¥Ë¥Ã¥È (°Ê²¼¡ÖPVU¡×¤È¤¤¤¤¤Þ¤¹¡£)¡¢¤Þ¤¿¤Ï IBM ¤¬ÆÃÄꤹ¤ë¤½¤Î¾¤Î»ÈÍѵöÂú¤ÎÈϰϤˤè¤êµ¬Äꤵ¤ì¤Þ¤¹¡£ + +IBM - International Business Machines Corporation ¤Þ¤¿¤Ï¤½¤Î»Ò²ñ¼Ò¤ò¤¤¤¤¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥¹¾ðÊó (°Ê²¼ ¡ÖLI¡×¤È¤¤¤¤¤Þ¤¹¡£) - ËÜ·ï¥×¥í¥°¥é¥à¤Ë¸ÇÍ­¤Î¾ðÊ󤪤è¤ÓÄɲþò·ï¤òÄ󶡤¹¤ëʸ½ñ¤ò¤¤¤¤¤Þ¤¹¡£ ËÜ·ï¥×¥í¥°¥é¥à¤Î LI ¤Ï¡¢www.ibm.com/software/sla ¤«¤éÆþ¼ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ LI ¤ÏËÜ·ï¥×¥í¥°¥é¥à¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼Æâ¤Ç (¥·¥¹¥Æ¥à¡¦¥³¥Þ¥ó¥É¤Ê¤É¤ò»ÈÍѤ·¤Æ³Îǧ¤·¤Þ¤¹¡£) ¤Þ¤¿¤ÏËÜ·ï¥×¥í¥°¥é¥à¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¾®ºý»Ò¤È¤·¤ÆÄ󶡤µ¤ì¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ + +ËÜ·ï¥×¥í¥°¥é¥à - ¸¶Ëܤª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª (Á´ÂÎÊ£À½¤«ÉôʬʣÀ½¤«¤òÌ䤤¤Þ¤»¤ó¡£) ¤ò´Þ¤á¤Æ¡¢¼¡¤Î¤â¤Î¤ò¤¤¤¤¤Þ¤¹¡£1) µ¡³£¤ÇÆÉ¤ß¼è¤ê¤¦¤ë·Á¤ÎÌ¿Îᤪ¤è¤Ó¥Ç¡¼¥¿¡¢2) ¤½¤Î¹½À®Í×ÁÇ¡¢¥Õ¥¡¥¤¥ë¤ª¤è¤Ó¥â¥¸¥å¡¼¥ë¡¢3) »ëİ³Ð¥³¥ó¥Æ¥ó¥Ä (¥¤¥á¡¼¥¸¡¢¥Æ¥­¥¹¥È¡¢Ï¿²»¡¢²èÁü¤Ê¤É)¡¢¤Ê¤é¤Ó¤Ë 4) ´ØÏ¢¤¹¤ë¥é¥¤¥»¥ó¥¹»ñÎÁ (¥­¡¼¤ª¤è¤ÓÉÕ°ʸ½ñ¤Ê¤É)¡£ + +2. »ÈÍѾò·ï¤Î¹½À® + +ËÜ»ÈÍѾò·ï¤Ï¡¢Âè 1 ¾Ï - ¶¦Ä̾ò¹à¡¢Âè 2 ¾Ï - ³Æ¹ñ¸ÇÍ­¤Î¾ò¹à (³ºÅö¤¹¤ë¾ì¹ç)¡¢¤ª¤è¤Ó LI ¤«¤é¹½À®¤µ¤ì¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѤ˴ؤ¹¤ë¥é¥¤¥»¥ó¥·¡¼¤È IBM ´Ö¤Î´°Á´¡¢Í£°ì¤Î¹ç°Õʸ½ñ¤Ç¤¢¤ê¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѤ˴ؤ¹¤ë¡¢¥é¥¤¥»¥ó¥·¡¼¤ª¤è¤Ó IBM ´Ö¤Î»öÁ°¤Î¸ýƬ¤Þ¤¿¤Ï½ñÌ̤ˤè¤ëÄÌÃÎÅù¤Î¤¹¤Ù¤Æ¤ËÂå¤ï¤ë¤â¤Î¤Ç¤¹¡£ Âè 2 ¾Ï¤Ë¡¢Âè 1 ¾Ï¤Î¾ò·ï¤ËÂФ¹¤ëÄɲþò·ï¤Þ¤¿¤ÏÊѹ¹¾ò·ï¤¬µ­ºÜ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£LI ¤ÈÂè 1 ¾Ï¤ª¤è¤ÓÂè 2 ¾Ï¤Ëóòó÷¤¬¤¢¤ë¾ì¹ç¡¢LI ¤¬Í¥À褹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +3. »ÈÍѸ¢¤ÎµöÂú + +ËÜ·ï¥×¥í¥°¥é¥à¤Ï IBM ¤Þ¤¿¤Ï IBM ¥µ¥×¥é¥¤¥ä¡¼¤¬½êÍ­¸¢¤òÍ­¤·¤Æ¤¤¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤Ï¡¢Ãøºî¸¢¤Ë¤è¤êÊݸ¤ì¤Æ¤ª¤ê¡¢»ÈÍѵöÂú¤µ¤ì¤ë¤â¤Î¤Ç¤¢¤Ã¤Æ¡¢ÇäÇã¤ÎÂоݤȤʤë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ + +IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¡¢¼¡¤Î»ö¹à¤ò¹Ô¤¦¤¿¤á¤ÎÈóÆÈÀêŪ»ÈÍѸ¢¤òµöÂú¤·¤Þ¤¹¡£1) ǼÉʽñ¤Çµ¬Äꤵ¤ì¤¿»ÈÍѵöÂúÈÏ°ÏÆâ¤ÇËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤³¤È¡¢2) ¤«¤«¤ë»ÈÍѵöÂúÈϰϤˤª¤¤¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ÎÊ£À½Êª¤òºîÀ®¤·Æ³Æþ¤¹¤ë¤³¤È¡¢¤ª¤è¤Ó 3) ¥Ð¥Ã¥¯¥¢¥Ã¥×¡¦¥³¥Ô¡¼¤òºîÀ®¤¹¤ë¤³¤È¡£¤¿¤À¤·¡¢¤³¤ì¤é¤Ï¡¢°Ê²¼¤Î¤¹¤Ù¤Æ¤Î¾ò·ï¤òËþ¤¿¤¹¾ì¹ç¤Ë¸Â¤ê¤Þ¤¹¡£ + +a. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¹çˡŪ¤ËËÜ·ï¥×¥í¥°¥é¥à¤ò¼èÆÀ¤·¡¢ËÜ»ÈÍѾò·ï¤Ë½¾¤Ã¤Æ»ÈÍѤ¹¤ë¤³¤È¡£ + +b. ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤·¤¿¾ì¹ç¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤Ç¤­¤Ê¤¤¾ì¹ç¤ò½ü¤­¡¢¤«¤«¤ë¥Ð¥Ã¥¯¥¢¥Ã¥×¡¦¥³¥Ô¡¼¤ò¼Â¹Ô¤·¤Ê¤¤¤³¤È¡£ + +c. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎÊ£À½Êª¤Ë¡¢Á´ÉôÊ£À½¤«ÉôʬʣÀ½¤«¤òÌä¤ï¤º¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤ÈƱ°ì¤ÎÃøºî¸¢É½¼¨¤ª¤è¤Ó¤½¤Î¾¤Î½êÍ­¸¢É½¼¨¤ò¹Ô¤Ê¤¦¤³¤È¡£ + +d. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢±ó³ÖÃϤ«¤é¤Î¥¢¥¯¥»¥¹¤ò´Þ¤á¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë²¿¿Í (¤Ê¤ó¤Ô¤È) ¤â¤¬¡¢1) ¥é¥¤¥»¥ó¥·¡¼¤Î¤¿¤á¤Ë¤Î¤ß»ÈÍѤ·¡¢¤«¤Ä 2) ËÜ»ÈÍѾò·ï¤ËÄê¤á¤ëµÁ̳¤ò½å¼é¤¹¤ë¤è¤¦¡¢Å¬ÀڤʽèÃÖ¤ò¹Ö¤¸¤ë¤³¤È¡£ + +e. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢1) ËÜ»ÈÍѾò·ï¤ËÌÀµ­¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍÑ¡¢Ê£À½¡¢½¤Àµ¤â¤·¤¯¤ÏÇÛÉÛ¤·¤Ê¤¤¤³¤È¡¢2) ¶¯¹Ôµ¬Äê¤Î¤¢¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ·ï¥×¥í¥°¥é¥à¤òµÕ¥³¥ó¥Ñ¥¤¥ë¡¢µÕ¥¢¥»¥ó¥Ö¥ë¡¢¤½¤Î¾¤ÎÂÖÍͤÇËݰơ¢¤â¤·¤¯¤Ï¥ê¥Ð¡¼¥¹¡¦¥¨¥ó¥¸¥Ë¥¢¥ê¥ó¥°¤·¤Ê¤¤¤³¤È¡¢3) ËÜ·ï¥×¥í¥°¥é¥à¤Î¹½À®Í×ÁÇ¡¢¥Õ¥¡¥¤¥ë¡¢¥â¥¸¥å¡¼¥ë¡¢»ëİ³Ð¥³¥ó¥Æ¥ó¥Ä¤â¤·¤¯¤Ï´ØÏ¢¤¹¤ë¥é¥¤¥»¥ó¥¹»ñÎÁ¤òËÜ·ï¥×¥í¥°¥é¥à¤È¤ÏʬΥ¤·¤Æ»ÈÍѤ·¤Ê¤¤¤³¤È¡¢¤Þ¤¿¤Ï 4) ËÜ·ï¥×¥í¥°¥é¥à¤òºÆ»ÈÍѵöÂú¡¢ÄÂÂߤ⤷¤¯¤ÏÂßÍ¿¡Ê¥ê¡¼¥¹¤ò´Þ¤ß¤Þ¤¹¡£¡Ë¤·¤Ê¤¤¤³¤È¡£ + +f. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¡Ö½¾¥×¥í¥°¥é¥à¡×¡ÊËܹà¸åÃʤÇÄêµÁ¤µ¤ì¤Þ¤¹¡£¡Ë¤È¤·¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò¼èÆÀ¤¹¤ë¾ì¹ç¡¢¡Ö¼ç¥×¥í¥°¥é¥à¡×¡ÊËܹà¸åÃʤÇÄêµÁ¤µ¤ì¤Þ¤¹¡£¡Ë¤ò¥µ¥Ý¡¼¥È¤·¡¢¼ç¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢µ¬Äê¤Î¤¤¤«¤Ê¤ëÀ©¸Â¤Ë¤â½¾¤¦¤³¤È¤ò¾ò·ï¤Ë¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¼ç¥×¥í¥°¥é¥à¤È¤·¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò¼èÆÀ¤¹¤ë¾ì¹ç¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò¥µ¥Ý¡¼¥È¤·¡¢ËÜ»ÈÍѾò·ïÃæ¤Î¤¤¤«¤Ê¤ëÀ©¸Â¤Ë¤â½¾¤¦¤³¤È¤ò¾ò·ï¤Ë¡¢¤¹¤Ù¤Æ¤Î½¾¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ Ëܹà¡Öf¡×¤Ë¤ª¤¤¤Æ¡¢¡Ö½¾¥×¥í¥°¥é¥à¡×¤È¤Ï¡¢Ê̤ΠIBM ¥×¥í¥°¥é¥à (¡Ö¼ç¥×¥í¥°¥é¥à¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤Î°ìÉô¤Ç¤¢¤ê¡¢Åö³º¥×¥í¥°¥é¥à¤Î LI¤Ë½¾¥×¥í¥°¥é¥à¤È¤·¤Æµ¬Äꤵ¤ì¤ëËÜ·ï¥×¥í¥°¥é¥à¤ò¤¤¤¤¤Þ¤¹¡£ (À©Ìó»ö¹à¤Î¤Ê¤¤½¾¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤òÊÌÅÓ¼èÆÀ¤¹¤ë¤Ë¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢½¾¥×¥í¥°¥é¥à¤ÎĴ㸵¤ËÏ¢Íí¤·¤Æ¤¯¤À¤µ¤¤¡£) + +ËÜ»ÈÍѾò·ï¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ºîÀ®¤¹¤ëËÜ·ï¥×¥í¥°¥é¥à¤Î³ÆÊ£À½Êª¤Ë¤âŬÍѤµ¤ì¤Þ¤¹¡£ + +3.1 ¥È¥ì¡¼¥É¥¢¥Ã¥×¡¢¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á + +3.1.1 ¥È¥ì¡¼¥É¥¢¥Ã¥× + +ËÜ·ï¥×¥í¥°¥é¥à¤¬¥È¥ì¡¼¥É¥¢¥Ã¥×¡¦¥×¥í¥°¥é¥à¤Ë¤è¤êÃÖ¤­´¹¤¨¤é¤ì¤ë¾ì¹ç¡¢ÃÖ¤­´¹¤¨¤é¤ì¤¿ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤Ï¡¢Ä¾¤Á¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +3.1.2 ¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á + +¥é¥¤¥»¥ó¥·¡¼¤¬¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ¹¤ë¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á¤ò¼õÎΤ¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î LI ¤Çµ¬Äꤵ¤ì¡¢Åö³º¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á¤ËŬÍѤµ¤ì¤ë¤¹¤Ù¤Æ¤ÎÄɲþò¹à¤Þ¤¿¤Ï°Û¤Ê¤ë»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Äɲþò¹à¤Þ¤¿¤Ï°Û¤Ê¤ë»ÈÍѾò·ï¤¬Ä󶡤µ¤ì¤Ê¤¤¾ì¹ç¡¢¹¹¿·¡¢¥Õ¥£¥Ã¥¯¥¹¡¢¤ª¤è¤Ó¥Ñ¥Ã¥Á¤ÏËÜ»ÈÍѾò·ï¤Ë¤Î¤ß½¾¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ËÜ·ï¥×¥í¥°¥é¥à¤¬¹¹¿·¤Ë¤è¤êÃÖ¤­´¹¤¨¤é¤ì¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ÃÖ¤­´¹¤¨¤é¤ì¤¿ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѤòľ¤Á¤ËÃæ»ß¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +3.2 ´ü¸ÂÉÕ»ÈÍѸ¢ + +IBM ¤¬´ü¸ÂÉÕ¤ÇËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѵöÂú¤¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѸ¢¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ª¤è¤Ó IBM ¤¬¤½¤Î´ü¸Â¤Î¹¹¿·¤ËƱ°Õ¤·¤Ê¤¤¸Â¤ê¡¢Äê¤á¤é¤ì¤¿´ü¸Â¤ÎÅþÍè¤È¶¦¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +3.3 ´ü´Ö¤ª¤è¤Ó½ªÎ» + +ËÜ»ÈÍѾò·ï¤Ï¡¢²òÌ󤵤ì¤ë¤Þ¤ÇÍ­¸ú¤Ë¸³¤·¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ»ÈÍѾò·ï¤Î¾ò¹à¤Ë°ãÈ¿¤·¤¿¾ì¹ç¡¢IBM ¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËÂФ¹¤ë»ÈÍѸ¢¤ò½ªÎ»¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤¤¤º¤ì¤«¤ÎÅö»ö¼Ô¤¬¡¢Íýͳ¤Î¤¤¤«¤ó¤òÌä¤ï¤º»ÈÍѸ¢¤ò½ªÎ»¤¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Ä¾¤Á¤Ë»ÈÍѤòÃæ»ß¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Î½êÍ­¤¹¤ëËÜ·ï¥×¥í¥°¥é¥à¤ª¤è¤Ó¤½¤Î¤¹¤Ù¤Æ¤ÎÊ£À½Êª¤òÇË´þ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ËÜ»ÈÍѾò·ï¤Î½ªÎ»¸å¤âÀ­¼Á¾å¸³¤¹¤Ù¤­¾ò¹à¤Ï¡¢¤½¤ÎÍú¹Ô¤¬½ªÎ»¤¹¤ë¤Þ¤ÇÍ­¸ú¤Ë¸³¤·¡¢Î¾Åö»ö¼Ô¤Ê¤é¤Ó¤Ë¤½¤Î¾µ·Ñ¿Í¤ª¤è¤Ó¾ù¼õ¿Í¤ËŬÍѤµ¤ì¤Þ¤¹¡£ + +4. ÎÁ¶â + +ÎÁ¶â¤¬Å¬ÍѤµ¤ì¤ë¾ì¹ç¡¢ÎÁ¶â¤Ï¡¢ÀÁµá½ñ¤Ëµ­ºÜ¤µ¤ì¤ë»ÈÍѵöÂúÈϰϤ˴ð¤Å¤¯¤â¤Î¤È¤·¤Þ¤¹¡£ IBM ¤Ï¡¢´û¤Ë»Ùʧ´üÆü¤ÎÅþÍ褷¤Æ¤¤¤ëÎÁ¶â¤Î¼è¤ê¾Ã¤·¡¢¤â¤·¤¯¤Ï»ÙʧºÑ¤ßÎÁ¶â¤ÎÊÖ¶â¤Ï¤·¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£¤¿¤À¤·¡¢ËÜ»ÈÍѾò·ï¤ÇÊÌÅÓµ¬Ä꤬¤¢¤ë¾ì¹ç¤Ï½ü¤­¤Þ¤¹¡£ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢»ÈÍѵöÂúÈϰϤò³ÈÂ礹¤ë¾ì¹ç¡¢»öÁ°¤Ë IBM ¤Þ¤¿¤Ï IBM ǧÄê¤ÎºÆÈμԤËÄÌÃΤ·¡¢½êÄê¤ÎÎÁ¶â¤ò»Ùʧ¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ + +5. ÀǶâ + +ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ·ÀǶ⤽¤Î¾¤Î¸øÁŸø²Ý (¤¿¤À¤· IBM ¤ËÂФ¹¤ëË¡¿ÍÀǤò½ü¤­¤Þ¤¹¡£) ¤¬²Ý¤»¤é¤ì¤ë¤È¤­¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ÌÈÀǽñÎà¤òÄó½Ð¤¹¤ë¾ì¹ç¤ò½ü¤­¡¢ÀÁµá½ñµ­ºÜ¤Î¶â³Û¤ò»Ùʧ¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ·¤Æ²Ý¤»¤é¤ì¤ëư»ºÀǤˤĤ¤¤Æ¤Ï¡¢¼èÆÀÆü°Ê¹ß¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎÉéô¤È¤·¤Þ¤¹¡£ ºÇ½é¤Ë¥é¥¤¥»¥ó¥·¡¼¤¬»ÈÍѸ¢¤òÉÕÍ¿¤µ¤ì¤¿¹ñ°Ê³°¤Ç¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎÍ¢½ÐÆþ¡¢°Üž¡¢¥¢¥¯¥»¥¹¤Þ¤¿¤Ï»ÈÍѤËÂФ·¤Æ´ØÀǤ½¤Î¾¤Î¸øÁŸø²Ý¤¬²Ý¤»¤é¤ì¤ë¤È¤­¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ÏÀÕǤ¤ò¤â¤Ã¤ÆÀÁµá³Û¤ò»Ùʧ¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ + +6. ²òÌó²Äǽ´ü´Ö + +¥é¥¤¥»¥ó¥·¡¼¤¬¡¢Íýͳ¤Î¤¤¤«¤ó¤òÌä¤ï¤ºËÜ·ï¥×¥í¥°¥é¥à¤ËËþ­¤»¤º¡¢¤«¤ÄºÇ½é¤Î»ÈÍѸ¢¼èÆÀ¼Ô¤Ç¤¢¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï»ÈÍѸ¢¤ò²òÌó¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ·¤Æ»Ùʧ¤Ã¤¿ÎÁ¶â¤¬¤¢¤ì¤Ð¤½¤ÎÊÖ¶â¤ò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢ÀÁµá½ñ¤ÎÆüÉÕ¤«¤é 30 Æü°ÊÆâ¤ËËÜ·ï¥×¥í¥°¥é¥à¤ò¤½¤ÎĴ㸵¤ËÊֵѤ¹¤ë¾ì¹ç¤Ë¸Â¤ê¤Þ¤¹¡£ »ÈÍѸ¢¤Î¹¹¿·¤¬É¬ÍפȤʤë´ü¸ÂÉÕ»ÈÍѸ¢¤Î¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï½é²ó¤Î»ÈÍѸ¢¤¬ÉÕÍ¿¤µ¤ì¤¿´üÆü¤«¤é 30 Æü°ÊÆâ¤ËÊֵѤµ¤ì¤ë¾ì¹ç¤Î¤ß¡¢ÊÖ¶â¤ò¼õ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ËÜ·ï¥×¥í¥°¥é¥à¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¾ì¹ç¤ÎÊÖ¶â¤Î¼õ¤±Êý¤Ë¤Ä¤¤¤Æ¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ÎĴ㸵¤Ë¤ªÌ䤤¹ç¤ï¤»¤¯¤À¤µ¤¤¡£ + +7. ËÜ·ï¥×¥í¥°¥é¥à¤Î°Üž + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¸¢Íø¡¢¤ª¤è¤Ó¤³¤ì¤Ë´Ø¤¹¤ëµÁ̳¤Î¤¹¤Ù¤Æ¤òÂè»°¼Ô¤Ë°Üž¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢¤«¤«¤ëÂè»°¼Ô¤¬ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¾ì¹ç¤Ë¸Â¤ê¤Þ¤¹¡£ ¤¤¤º¤ì¤«¤ÎÅö»ö¼Ô¤¬¡¢Íýͳ¤Î¤¤¤«¤ó¤òÌä¤ï¤º»ÈÍѸ¢¤ò½ªÎ»¤¹¤ë¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢Âè»°¼Ô¤ËËÜ·ï¥×¥í¥°¥é¥à¤ò°Üž¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢1)ËÜ·ï¥×¥í¥°¥é¥à¤Î°ìÉô¡¢¤Þ¤¿¤Ï 2)ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂúÈϰϤΰìÉô¤ò°Üž¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤ò°Üž¤¹¤ë¾ì¹ç¡¢LI ¤ò´Þ¤á¡¢ËÜ»ÈÍѾò·ï¤Î¥Ï¡¼¥É¥³¥Ô¡¼¤â°Üž¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ °Üž¸å¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÈÍѸ¢¤Ïľ¤Á¤Ë½ªÎ»¤·¤Þ¤¹¡£ + +8. ÊÝ¾Ú + +¶¯¹Ôµ¬Äê¤ËÈ¿¤¹¤ë¾ì¹ç¤ò½ü¤­¡¢IBM ¤ÏËÜ·ï¥×¥í¥°¥é¥à¤Þ¤¿¤Ï¥µ¥Ý¡¼¥È (Ä󶡤µ¤ì¤ë¾ì¹ç)¤òÆÃÄêʪ¤È¤·¤Æ¸½Â¸¤¹¤ë¤Þ¤Þ¤Î¾õÂÖ¤ÇÄ󶡤·¡¢Ë¡Î§¾å¤ÎàìáÓôÊÝÀÕǤ¡¢¾¦ÉÊÀ­¤ÎÊݾڡ¢½½Ê¬¤ÊÉʼÁ¤ÎÊݾڡ¢ÆÃÄêÌÜŪŬ¹çÀ­¤ÎÊݾڡ¢¸¢¸¶¤ÎÊݾڡ¢¤ª¤è¤ÓÂè»°¼Ô¤Î¸¢Íø¤ÎÉÔ¿¯³²¤ÎÊݾڤò´Þ¤àÌÀ¼¨¤â¤·¤¯¤ÏÌÛ¼¨¤Î¤¤¤«¤Ê¤ëÊݾÚÀÕǤ¤âÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤Ã¤Æ¤Ï¡¢¶¯¹Ôµ¬Äê¤Ë¤è¤êÊݾÚÀÕǤ¤ÎÀ©¸Â¤¬¶Ø¤¸¤é¤ì¤ë¾ì¹ç¤¬¤¢¤ê¡¢¤³¤Î¾ì¹ç¾åµ­¤ÎÊݾÚÀÕǤ¤ÎÀ©¸Â¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËŬÍѤµ¤ì¤Þ¤»¤ó¡£ ¤³¤Î¾ì¹ç¤ÎÊݾڤâˡΧ¤ÇÍ׵ᤵ¤ì¤ëºÇû¤Î´ü´ÖÆâ¤Ë¸ÂÄꤵ¤ì¡¢ Åö³ºÊݾڴü´Ö½ªÎ»¸å¤Ï¡¢¤¤¤«¤Ê¤ëÊݾڤâŬÍѤµ¤ì¤Þ¤»¤ó¡£ ¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤Ã¤Æ¤Ï¡¢Ë¡Î§¤Î¶¯¹Ôµ¬Äê¤Ë¤è¤ê¡¢ÊݾڤÎŬÍÑ´ü´Ö¤ÎÀ©¸Â¤¬¶Ø¤¸¤é¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ê¡¢¤³¤Î¾ì¹ç¾åµ­¤ÎÊݾڤÎŬÍÑ´ü´Ö¤ÎÀ©¸Â¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËŬÍѤµ¤ì¤Þ¤»¤ó¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¹ñ¤Þ¤¿¤ÏÃϰè¤Ë¤è¤Ã¤Æ°Û¤Ê¤ë¡¢¤½¤Î¾¤Î¸¢Íø¤òÍ­¤¹¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ + +ËÜÂè 8 ¹à¤ËÄê¤á¤ëÌÈÀÕ¤ª¤è¤ÓÀ©¸Â¤Ï¡¢¤¤¤º¤ì¤Î IBM ¤Î¥×¥í¥°¥é¥à³«È¯¼Ô¤ª¤è¤Ó¥µ¥×¥é¥¤¥ä¡¼¤Ë¤âŬÍѤµ¤ì¤Þ¤¹¡£ + +¤Ê¤ª¡¢IBM °Ê³°¤Î¾¼ÒÀ½¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤½¤ÎÀ½Â¤¼Ô¡¢¥µ¥×¥é¥¤¥ä¡¼¤Þ¤¿¤Ïȯ¹Ô¼Ô¤Ë¤è¤êÊݾڤ¬Ä󶡤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ + +IBM ¤Ï¡¢ÊÌÅÓµ¬Äꤹ¤ë¾ì¹ç¤ò½ü¤­¡¢¤¤¤«¤Ê¤ë¼ïÎà¤Î¥µ¥Ý¡¼¥È¤âÄ󶡤·¤Þ¤»¤ó¡£ IBM ¤¬¥µ¥Ý¡¼¥È¤òÄ󶡤¹¤ë¾ì¹ç¡¢ËÜÂè 8 ¹à¤ËÄê¤á¤ëÌÈÀÕ¤ª¤è¤ÓÀ©¸Â¤¬Å¬ÍѤµ¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +9. ¥é¥¤¥»¥ó¥·¡¼¤Î¥Ç¡¼¥¿¤ª¤è¤Ó¥Ç¡¼¥¿¥Ù¡¼¥¹ + +ËÜ·ï¥×¥í¥°¥é¥à¤Ë´Ø¤¹¤ëÌäÂê¤Î¸¶°ø¤òÆÃÄꤷ¡¢¥é¥¤¥»¥ó¥·¡¼¤ò»Ù±ç¤¹¤ë¤¿¤á¤Ë¡¢IBM ¤Ï¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¼¡¤Î¤¤¤º¤ì¤«¤òÍ×ÀÁ¤¹¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£1) ¥é¥¤¥»¥ó¥·¡¼¤Î¥·¥¹¥Æ¥à¤Ø¤Î±ó³Ö¥¢¥¯¥»¥¹¤ò IBM ¤Ëµö²Ä¤¹¤ë¤³¤È¡£2) ¥é¥¤¥»¥ó¥·¡¼¤Î¾ðÊó¤Þ¤¿¤Ï¥·¥¹¥Æ¥à¡¦¥Ç¡¼¥¿¤òIBM¤ËÁ÷¿®¤¹¤ë¤³¤È¡£ ¤¿¤À¤·¡¢¤«¤«¤ë»Ù±ç¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë¤ª¤±¤ë IBM ¤ÎµÁ̳¤ÎÈÏ°ÏÆâ¤ÇÄ󶡤µ¤ì¤ë¤â¤Î¤Ç¤¢¤ê¡¢¤½¤ÎÈϰϤòͤ¨¤ë¥µ¥Ý¡¼¥È¤ÎÄ󶡤ˤĤ¤¤Æ¤Ï¡¢ÊÌÅÓ½ñÌ̤ˤè¤ë·ÀÌó¤¬É¬ÍפǤ¹¡£¤¤¤«¤Ê¤ë¾ì¹ç¤Ç¤¢¤Ã¤Æ¤â¡¢IBM ¤Ï¡¢¥¨¥é¡¼¤ª¤è¤ÓÌäÂê¤Ë´Ø¤¹¤ë¾ðÊó¤ò¼«¼Ò¤ÎÀ½ÉʤβþÎɤȥµ¡¼¥Ó¥¹¸þ¾å¤Î¤¿¤á¤Ë»ÈÍѤ·¡¢´ØÏ¢¤¹¤ë¥µ¥Ý¡¼¥ÈŽ¥¥ª¥Õ¥¡¥ê¥ó¥°¤ÎÄ󶡤ËÌòΩ¤Æ¤ë¤¿¤á¤Ë»ÈÍѤ·¤Þ¤¹¡£ ¤³¤ÎÌÜŪ¤Î¤¿¤á¤Ë¡¢IBM ¤Ï¥é¥¤¥»¥ó¥·¡¼¤¬Â¸ºß¤¹¤ë¹ñ¤ª¤è¤Ó¤½¤ì°Ê³°¤Î¹ñ¤Ë¸ºß¤¹¤ëIBM »ö¶ÈÂΤª¤è¤Ó½¾·ÀÌó¼Ô¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤â¤Î¤È¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤Ï¤³¤ì¤òµö²Ä¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¼¡¤Î»ö¹à¤Ë´Ø¤·¤Æ¤Ï¡¢¤¹¤Ù¤Æ¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎÀÕǤ¤È¤·¤Þ¤¹¡£1¡Ë¥é¥¤¥»¥ó¥·¡¼¤¬ IBM ¤Ë¥¢¥¯¥»¥¹¤òÄ󶡤¹¤ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Ç¡¼¥¿¤ª¤è¤Ó¥³¥ó¥Æ¥ó¥Ä¡£2)¥Ç¡¼¥¿¡Ê¸Ä¿Í¼±Ê̲Äǽ¥Ç¡¼¥¿¤ò´Þ¤ß¤Þ¤¹¡£¡Ë¤Ø¤Î¥¢¥¯¥»¥¹¡¢¥»¥­¥å¥ê¥Æ¥£¡¼¡¢°Å¹æ²½¡¢»ÈÍѤª¤è¤ÓÁ÷¿®¤Ë´Ø¤¹¤ë¼ê³¤­¤ª¤è¤Ó´ÉÍý¤ÎÁªÂò¤ª¤è¤Ó¼Â»Ü¡£3¡Ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤ª¤è¤ÓÊݴɥǡ¼¥¿¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¤ª¤è¤Ó¥ê¥«¥Ð¥ê¡¼¡£¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¸Ä¿Í¾ðÊó¤Ø¤Î¥¢¥¯¥»¥¹¤ò¥Ç¡¼¥¿¤Þ¤¿¤Ï¤½¤Î¾¤Î·Á¼°¤òÌä¤ï¤º¡¢°ìÀÚ IBM ¤ËÁ÷ÉÕ¤Þ¤¿¤ÏÄ󶡤·¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ ¸í¤Ã¤Æ IBM ¤ËÄ󶡤µ¤ì¤¿¸Ä¿Í¾ðÊó¤Ë´Ø¤ï¤ë¡¢¤Þ¤¿¤Ï¸Ä¿Í¾ðÊó¤ÎIBM¤Ë¤è¤ëÁÓ¼º¤Þ¤¿¤Ï³«¼¨¤Ë´ØÏ¢¤·¤Æ¡¢IBM ¤¬Èï¤ëÁêÅö³Û¤ÎÈñÍѤª¤è¤Ó¤½¤Î¾¤Î¶â³Û¤Ë¤Ä¤¤¤Æ¤Ï¡¢Âè»°¼Ô¤«¤é¤Î¿½¤·Î©¤ÆÊ¬¤â´Þ¤á¡¢¥é¥¤¥»¥ó¥·¡¼¤ÎÉéô¤È¤·¤Þ¤¹¡£ + +10. ÀÕǤ¤ÎÀ©¸Â + +Ëܹà¡Ê10. ÀÕǤ¤ÎÀ©¸Â¡Ë¤ÇÄê¤á¤ëÀ©¸Â¤ª¤è¤ÓŬÍѽü³°¤Ï¡¢¶¯¹Ôµ¬Äê¤Ë¤è¤ê¶Ø»ß¤µ¤ì¤Ê¤¤ÈϰϤÇŬÍѤµ¤ì¤Þ¤¹¡£ + +10.1 IBM ¤ÎÀÕǤ + +¥é¥¤¥»¥ó¥·¡¼¤¬ IBM ¤ÎÀդ˵¢¤¹¤Ù¤­»öͳ (·ÀÌóÉÔÍú¹Ô¡¢²á¼º¡¢ÉÔ¼Âɽ¼¨¤Þ¤¿¤ÏÉÔË¡¹Ô°Ù¤Ê¤É¤ò´Þ¤ß¤Þ¤¹¡£) ¤Ë´ð¤Å¤¯Â»³²¤ËÂФ·¤ÆµßºÑ¤òµá¤á¤ë¾ì¹ç¡¢³ÆËÜ·ï¥×¥í¥°¥é¥à¤Ëµ¯°ø¤Þ¤¿¤Ï´ØÏ¢¤¹¤ë¡¢¤Þ¤¿¤ÏËÜ»ÈÍѾò·ï¤Î²¼¤ÇÄ󵯤µ¤ì¤ë IBM ¤ÎÇå½þÀÕǤÁí³Û¤Ï¡¢ÀÁµá¤Î¸¶°ø¤òÌä¤ï¤º¡¢¼¡¤Î³Æ¹æ¤ËÄê¤á¤ë¤â¤Î¤ÎÁí³Û¤ò¾å¸Â¤È¤·¤Þ¤¹¡£1) IBM ¤Î¸Î°Õ¤â¤·¤¯¤Ï²á¼º¤Ë¤è¤Ã¤Æ¤ªµÒÍͤËÀ¸¤¸¤¿¿ÈÂΡ¢À¸Ì¿¤ª¤è¤ÓÍ­ÂÎʪ¤ËÂФ¹¤ëÇå½þÀÕǤ¡£2) ¸½¼Â¤ËȯÀ¸¤·¤¿Ä̾狼¤ÄľÀܤλ³²¤ËÂФ·¡¢Â»³²È¯À¸¤ÎľÀܸ¶°ø¤È¤Ê¤Ã¤¿ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍÑÎÁ¶âÁêÅö³Û (ËÜ·ï¥×¥í¥°¥é¥à¤¬´ü¸ÂÉÕ¤­ÎÁ¶â¤ÎÂоݤξì¹ç¡¢´ü¸ÂÉÕ¤­ÎÁ¶â¤Î 12 ¥«·îʬ¤È¤·¤Þ¤¹¡£) ¤ò¸ÂÅ٤Ȥ¹¤ë¶âÁ¬Çå½þÀÕǤ¡£ + +¤³¤ÎÀ©¸Â¤Ï¡¢IBMËÜ·ï¥×¥í¥°¥é¥à¤Î³«È¯¼Ô¤ª¤è¤Ó¥µ¥×¥é¥¤¥ä¡¼¤ËÂФ·¤Æ¤âŬÍѤµ¤ì¤Þ¤¹¡£ IBM ¤ª¤è¤Ó IBM¥×¥í¥°¥é¥à¤Î³«È¯¼Ô¤Ê¤é¤Ó¤Ë¥µ¥×¥é¥¤¥ä¡¼¤ËÂФ·¤Æ½ÅÊ£¤·¤ÆÂ»³²Çå½þ¤òÀÁµá¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ + +10.2 IBM ¤ÎÌÈÀÕ + +¤¤¤«¤Ê¤ë¾ì¹ç¤Ë¤ª¤¤¤Æ¤â¡¢IBM ¤ª¤è¤Ó IBM ¤Î¥×¥í¥°¥é¥à³«È¯¼Ô¤Ê¤é¤Ó¤Ë¥µ¥×¥é¥¤¥ä¡¼¤Ï¡¢¤½¤Îͽ¸«¤Î̵ͭ¤òÌä¤ï¤ºÈ¯À¸¤·¤¿°Ê²¼¤Î»³²¤Ë¤Ä¤¤¤Æ¤ÏÇå½þÀÕǤ¤òÉ餤¤Þ¤»¤ó¡£ + +a. ¥Ç¡¼¥¿¤ÎÁÓ¼º¤Þ¤¿¤Ï»½ý + +b. ÆÃÊÌ»³²¡¢ÉÕ¿ïŪ»³²¡¢Ä¨È³ÅªÂ»³²¤Þ¤¿¤Ï´ÖÀÜ»³²¡¢¤ª¤è¤Ó¤½¤Î¤Û¤«¤Î³ÈÂ绳² + +c. °ï¼ºÍø±× (¥Ó¥¸¥Í¥¹¡¢¼ý±×¡¢¿®ÍѤ¢¤ë¤¤¤ÏÀáÌ󤹤٤«¤ê¤·ÈñÍѤò´Þ¤ß¤Þ¤¹)¡£ + +11. ½å¼é¾õ¶·¤Î³Îǧ + +Ëܹà¡Ê11. ½å¼é¾õ¶·¤Î³Îǧ¡Ë¤Ë¤ª¤¤¤Æ¡ÖILAN ¥×¥í¥°¥é¥à¾ò·ï¡×¡ÊËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤­Ä󶡤µ¤ì¤ë¥×¥í¥°¥é¥à¤ËŬÍѤµ¤ì¤ë½ô¾ò·ï¡Ë¤Ï¡¢°Ê²¼¤ò°ÕÌ£¤·¤Þ¤¹¡£1) ËÜ»ÈÍѾò·ï¡¢Å¬ÍѤµ¤ì¤ë½¤Àµ¾ò¹à¤ª¤è¤Ó IBM ¤¬Ä󶡤¹¤ë¼è°úʸ½ñ¡£2¡Ë IBM Software Policy (IBM Software Policy ¥¦¥§¥Ö¥µ¥¤¥È (www.ibm.com/softwarepolicies) µ­ºÜ¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¡¢¥µ¥Ö¥­¥ã¥Ñ¥·¥Æ¥£¡¼ÎÁ¶â¤ª¤è¤Ó°Ü¹Ô¤Ë´Ø¤ï¤ë¥Ý¥ê¥·¡¼¤Ê¤É¡£) + +Ëܹà¤ÇÄê¤á¤ë¸¢Íø¤ª¤è¤ÓµÁ̳¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤¬¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·»ÈÍѵöÂú¤µ¤ì¤ë´ü´ÖÃæ¡¢¤ª¤è¤Ó¤½¤Î½ªÎ»¸å 2 ǯ´ÖÍ­¸ú¤È¤·¤Þ¤¹¡£ + +11.1 ³Îǧ¥×¥í¥»¥¹ + +¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ¡¢Å¬ÍѤµ¤ì¤ë IBM ¤Î»ÈÍѵöÂú¾ò·ï¤ª¤è¤ÓÎÁ¶â¾ò·ïÅù¤«¤é¤Ê¤ë¤¹¤Ù¤Æ¤Î ILAN ¥×¥í¥°¥é¥à¾ò·ï¤ò½å¼é¤·¤Æ»ÈÍѤ·¤Æ¤¤¤ë¤³¤È¤ò¾ÚÌÀ¤¹¤ë¤¿¤á¤Ë½½Ê¬¤Ê¡¢½ñÌ̤ˤè¤ëÀµ³Î¤Êµ­Ï¿¡¢¥·¥¹¥Æ¥à¡¦¥Ä¡¼¥ë¤«¤é¤Î½ÐÎÏ¡¢¤ª¤è¤Ó¤½¤Î¾¤Î¥·¥¹¥Æ¥à¾ðÊó¤òºîÀ®¡¢ÊÝ»ý¤·¡¢IBM ¤ª¤è¤Ó IBM ¤Î´Æºº¿Í¤ËÄ󶡤¹¤ë¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢°Ê²¼¤¤¤º¤ì¤Î»ö¹à¤Ë¤Ä¤¤¤Æ¤âÀÕǤ¤òÉ餦¤â¤Î¤È¤·¤Þ¤¹¡£1) ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢¤½¤Î»ÈÍѵöÂúÈϰϤòͤ¨¤Ê¤¤¤³¤È¤òÊݾڤ¹¤ë¤³¤È¡£ 2) ILAN ¥×¥í¥°¥é¥à¾ò·ï¤ò½å¼é¤¹¤ë¤³¤È¡£ + +IBM ¤Ï¡¢ÁêÅö¤ÊÄÌÃΤò¹Ô¤Ã¤¿¤¦¤¨¤Ç¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ ILAN ¥×¥í¥°¥é¥à¾ò·ï¤Ë½¾¤Ã¤ÆËÜ·ï¥×¥í¥°¥é¥à¤ò»ÈÍѡʤ½¤ÎÌÜŪ¤ÏÌ䤤¤Þ¤»¤ó¡£¡Ë¤¹¤ë¤¹¤Ù¤Æ¤Î»ÜÀߤª¤è¤Ó´Ä¶­¤Ç¡¢ILAN ¥×¥í¥°¥é¥à¾ò·ï¤Ë´Ø¤¹¤ë¥é¥¤¥»¥ó¥·¡¼¤Î½å¼é¾õ¶·¤ò³Îǧ¤Ç¤­¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ Åö³º³Îǧ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤Î¶È̳¤ÎÃæÃǤòºÇ¾®¸Â¤Ë¤¹¤ëÊýË¡¤Ç¡¢Ä̾ï¤Î¶È̳»þ´ÖÆâ¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤Î»ÜÀ߯â¤Ç¹Ô¤ï¤ì¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ IBM ¤Ï¡¢Åö³ºÌÜŪ¤Î¤¿¤á¤ËÆÈΩ´Æºº¿Í (°Ê²¼¡Ö´Æºº¿Í¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤â¤Î¤È¤·¡¢´Æºº¿Í¤È¤Î´Ö¤Ç½ñÌ̤ˤè¤ëµ¡Ì©ÊÝ»ý·ÀÌó¤òÄù·ë¤·¤Þ¤¹¡£ + +11.2 ²ò·è + +IBM ¤Ï¡¢Åö³º³Îǧ¤Ë¤ª¤¤¤Æ¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѵöÂúÈϰϤòͤ¨¤Æ¤½¤ì¤ò»ÈÍѤ·¡¢¤Þ¤¿¤Ï ILAN ¥×¥í¥°¥é¥à¾ò·ï¤ò½å¼é¤·¤Æ¤¤¤Ê¤¤¤³¤È¤¬È½ÌÀ¤·¤¿¾ì¹ç¡¢¥é¥¤¥»¥ó¥·¡¼¤Ë¤½¤Î»Ý¤ò½ñÌ̤ÇÄÌÃΤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢IBM ¤¬ÀÁµá½ñ¤Ëµ­ºÜ¤¹¤ë¼¡¤Î¤¹¤Ù¤Æ¤Î¹àÌܤËÂФ¹¤ëÎÁ¶â¤ò®¤ä¤«¤ËľÀÜIBM ¤Ë»Ùʧ¤¦¤â¤Î¤È¤·¤Þ¤¹¡£1) »ÈÍѵöÂúÈϰϤòͤ¨¤ë»ÈÍÑ¡¢2) ¤«¤«¤ëͲá»ÈÍѤËÂФ·¤Æ¼õ¤±¤¿¥µ¥Ý¡¼¥È¤ËÂФ¹¤ëÎÁ¶â¡Ê»ÈÍѵöÂúÈϰϤòͤ¨¤Æ»ÈÍѤ·¤¿´ü´Ö¡¢¤Þ¤¿¤Ï2 ǯ´Ö¤Î¤¦¤Á¡¢Ã»¤¤´ü´Ö¡£¡Ë¡¢ 3) Åö³º³Îǧ¤Î·ë²Ì·èÄꤵ¤ì¤ëÄɲäλÈÍÑÎÁ¶â¤ª¤è¤Ó¤½¤Î¾¤ÎÇå½þ¶â³Û¡£ + +12. Âè»°¼Ô¥³¡¼¥É¤Ë´Ø¤¹¤ëÆÃµ­»ö¹à + +ËÜ·ï¥×¥í¥°¥é¥à¤Ë¤Ï¡¢Âè»°¼Ô¤Ç¤Ï¤Ê¤¯IBM ¤¬ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤­¥é¥¤¥»¥ó¥·¡¼¤Ë»ÈÍѵöÂú¤¹¤ëÂè»°¼Ô¥³¡¼¥É¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ Âè»°¼Ô¥³¡¼¥É¤Ë´Ø¤¹¤ëÆÃµ­»ö¹à (°Ê²¼¡ÖÂè»°¼ÔÆÃµ­»ö¹à¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¡¢¤«¤«¤ëÆÃµ­»ö¹à¤Ï¥é¥¤¥»¥ó¥·¡¼¤Î¤¿¤á¤À¤±¤Î¾ðÊó¤È¤·¤ÆÄ󶡤µ¤ì¤Þ¤¹¡£ Åö³ºÆÃµ­»ö¹à¤Ï¡¢ËÜ·ï¥×¥í¥°¥é¥à¤Î NOTICES ¥Õ¥¡¥¤¥ë¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ÆÃÄê¤ÎÂè»°¼Ô¥³¡¼¥É¤Î¥½¡¼¥¹Ž¥¥³¡¼¥É¤ÎÆþ¼êÊýË¡¤Ë´Ø¤¹¤ë¾ðÊó¤Ï¡¢¡ÖÂè»°¼ÔÆÃµ­»ö¹à¡×¤Ëµ­ºÜ¤¬¤¢¤ê¤Þ¤¹¡£ ¡ÖÂè»°¼ÔÆÃµ­»ö¹à¡×¤ÎÃæ¤Ç IBM ¤¬Âè»°¼Ô¥³¡¼¥É¤ò¡Ö½¤Àµ²ÄǽÂè»°¼Ô¥³¡¼¥É¡×¤ÈÆÃÄꤹ¤ë¾ì¹ç¡¢IBM ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤ËÂФ·¤Æ¡¢1) ¡Ö½¤Àµ²ÄǽÂè»°¼Ô¥³¡¼¥É¡×¤ò½¤Àµ¤¹¤ë¤³¤È¡¢¤ª¤è¤Ó2) Åö³ºÂè»°¼Ô¥³¡¼¥É¤ËÂФ¹¤ë¥é¥¤¥»¥ó¥·¡¼¤Ë¤è¤ë½¤Àµ¤ò¥Ç¥Ð¥Ã¥°¤¹¤ë¤³¤È¤òÌÜŪ¤È¤¹¤ë¾ì¹ç¤Ë¸Â¤ê¡Ö½¤Àµ²ÄǽÂè»°¼Ô¥³¡¼¥É¡×¤ÈľÀÜ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¤È¤ëËÜ·ï¥×¥í¥°¥é¥à¤Î¥â¥¸¥å¡¼¥ë¤Ë¥ê¥Ð¡¼¥¹Ž¥¥¨¥ó¥¸¥Ë¥¢¥ê¥ó¥°¤ò¹Ô¤Ê¤¦¤³¤È¤òµö²Ä¤·¤Þ¤¹¡£ IBM¤Ë¥µ¡¼¥Ó¥¹¤ª¤è¤Ó¥µ¥Ý¡¼¥È¤ÎµÁ̳¤¬¤¢¤ë¾ì¹ç¤Ï¡¢½¤Àµ¤µ¤ì¤Æ¤¤¤Ê¤¤ËÜ·ï¥×¥í¥°¥é¥à¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤Þ¤¹¡£ + +13. ¤½¤Î¾ + +a. ËÜ»ÈÍѾò·ï¤Ï¡¢¾ÃÈñ¼ÔÊݸîË¡µ¬¤Ë¤è¤ë¤ªµÒÍͤθ¢Íø¤òÊѹ¹¤¹¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ + +b. IBM ¤¬ÊªÍýŪ¤ÊÇÞÂΤˤè¤ê¥é¥¤¥»¥ó¥·¡¼¤ËÄ󶡤¹¤ëËÜ·ï¥×¥í¥°¥é¥à¤Ï¡¢IBM»ØÄê¤Î±¿Á÷²ñ¼Ò¤ËÅϤë¤Þ¤Ç¡¢IBM ¤¬¤½¤Î½Ð²Ù¤ª¤è¤ÓÇÛÁ÷¤ÎÀÕǤ¤òÉ餤¤Þ¤¹¡£¤¿¤À¤·¡¢¥é¥¤¥»¥ó¥·¡¼¤ÈIBM¤¬ÊÌÅÓ½ñÌ̤ˤƹç°Õ¤¹¤ë¾ì¹ç¤ò½ü¤­¤Þ¤¹¡£ + +c. ËÜ»ÈÍѾò·ï¤Î¤¤¤º¤ì¤«¤Î¾ò¹à¤¬Ìµ¸ú¤Þ¤¿¤ÏÍú¹Ô¶¯À©¤¬¤Ç¤­¤Ê¤¤¤È¤µ¤ì¤¿¾ì¹ç¤Ç¤â¡¢¤½¤Î¾¤Î¾ò¹à¤ÏÍ­¸ú¤Ë¸³¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +d. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢ÆÃÄê¤Î»ÈÍÑÌÜŪ¤Þ¤¿¤ÏÆÃÄê¤Î¥æ¡¼¥¶¡¼¤Ø¤ÎÍ¢½Ð¤Ë´Ø¤¹¤ë¤¹¤Ù¤Æ¤ÎÍ¢½ÐÆþ´ØÏ¢Å¬ÍÑË¡Îá(´ØÏ¢¤¹¤ëÊÆ¹ñ¤Î¶ØÍ¢Á¼ÃÖ¤ª¤è¤ÓÀ©ºÛÁ¼ÃÖ¤ò´Þ¤ß¤Þ¤¹¡£)¤ò½å¼é¤¹¤ë¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +e. ¥é¥¤¥»¥ó¥·¡¼¤Ï¡¢International Business Machines Corporation ¤ª¤è¤Ó¤½¤Î»Ò²ñ¼Ò (¤ª¤è¤Ó¤½¤ì¤é¤Î¾µ·Ñ¿Í¡¢¾ù¼õ¿Í¡¢½¾·ÀÌó¼Ô¤Ê¤é¤Ó¤Ë IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼) ¤¬¡¢IBM À½Éʤª¤è¤Ó¥µ¡¼¥Ó¥¹¤Ë´ØÏ¢¤·¤Æ¡¢¤Þ¤¿¤Ï IBM ¤Î¥é¥¤¥»¥ó¥·¡¼¤È¤Î¼è°ú´Ø·¸¤ò¤è¤ê¶ÛÌ©¤Ë¤¹¤ëÌÜŪ¤Ç¡¢¤ªµÒÍͤÎÏ¢ÍíÀè¸Ä¿Í¾ðÊó (»á̾¡¢ÅÅÏÃÈֹ桢ÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤ò´Þ¤ß¤Þ¤¹¡£) ¤ò±Ä¶È³èư¤ò¹Ô¤¦Ç¤°Õ¤Î¾ì½ê¤ËÊݴɤ·¤Æ»ÈÍѤ¹¤ë¤³¤È¤òµö²Ä¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +f. ¤¤¤º¤ì¤ÎÅö»ö¼Ô¤â¡¢Áê¼ê¦¤ÎËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯µÁ̳¤ÎÉÔÍú¹Ô¤ËÂФ¹¤ë¸¢Íø¤ò¹Ô»È¤¹¤ëÁ°¤Ë¡¢ÁêÅö´ü´Ö¤òÄê¤á¤Æ¤½¤ÎÀ§Àµ¤òºÅ¹ð¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ ξÅö»ö¼Ô¤Ï¡¢ËÜ»ÈÍѾò·ï¤Ë´ØÏ¢¤¹¤ëξÅö»ö¼Ô´Ö¤Î¤¹¤Ù¤Æ¤ÎʶÁè¡¢°Õ¸«¤ÎÁê°ã¡¢¤Þ¤¿¤Ï¿½¤·Î©¤Æ¤Ë¤Ä¤¤¤Æ¡¢À¿°Õ¤ò»ý¤Ã¤Æ²ò·è¤¹¤ë¤è¤¦Åؤá¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +g. ¶¯¹Ôµ¬Ä꤬¤¢¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ»ÈÍѾò·ï¤Ë´ð¤Å¤¯¤¤¤«¤Ê¤ëÀÁµá¸¢¤â¡¢ÀÁµá¤¬²Äǽ¤È¤Ê¤Ã¤¿»þ¤«¤é24¤«·î¤ò·Ð²á¤·¤¿¾ì¹ç¤Ë¤Ï¡¢»þ¸ú¤Ë¤è¤ê¾ÃÌǤ·¤Þ¤¹¡£ + +h. ¤¤¤º¤ì¤ÎÅö»ö¼Ô¤â¡¢¼«¸Ê¤ÎÀÕ¤á¤Ëµ¢¤¹¤³¤È¤Î¤Ç¤­¤Ê¤¤»öͳ¤«¤éÀ¸¤¸¤¿Â»³²¤Ë¤Ä¤¤¤Æ¤Ï¡¢ÀÕǤ¤òÉé¤ï¤Ê¤¤¤â¤Î¤È¤·¤Þ¤¹¡£ + +i. ËÜ»ÈÍѾò·ï¤Ë¤è¤êÂè»°¼Ô¤ËÂФ·¤Æ¤¤¤«¤Ê¤ëÁʸ¢¤Þ¤¿¤ÏÀÁµá¸¢¤âÀ¸¤¸¤ë¤â¤Î¤Ç¤Ï¤Ê¤¯¡¢¤Þ¤¿¥é¥¤¥»¥ó¥·¡¼¤ËÂФ¹¤ëÂè»°¼Ô¤«¤é¤ÎÇå½þÀÁµá¤Ë¤Ä¤¤¤Æ IBM ¤¬ÀÕǤ¤òÉ餦¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤¿¤À¤·¡¢¾åµ­ Âè10.1¹æ¡Ê IBM ¤ÎÀÕǤ¡Ë¤Çǧ¤á¤é¤ì¤¿¡¢IBM ¤¬¤«¤«¤ëÂè»°¼Ô¤ËÂФ·¤ÆË¡Åª¤ËÀÕǤ¤òÍ­¤¹¤ë¡¢¿ÈÂΡ¢À¸Ì¿¡¢¤ª¤è¤ÓÍ­ÂÎʪ¤ËÂФ¹¤ëÇå½þÀÕǤ¤Ï½ü¤­¤Þ¤¹¡£ + +j. ¤¤¤º¤ì¤ÎÅö»ö¼Ô¤â¡¢ËÜ»ÈÍѾò·ï¤ËƱ°Õ¤¹¤ë¤Ë¤¢¤¿¤ê¡¢¼¡¤Î»ö¹à¤ò´Þ¤á¡Ê¤³¤ì¤é¤Ë¸ÂÄꤵ¤ì¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¡Ë¡¢ËÜ»ÈÍѾò·ï¤ÇÌÀ¼¨¤µ¤ì¤ë¤â¤Î°Ê³°¤ÎɽÌÀ¤Ë°Íµò¤¹¤ë¤â¤Î¤Ç¤Ï¤Ê¤¤¤³¤È¤ËƱ°Õ¤·¤Þ¤¹¡£ 1) ËÜ·ï¥×¥í¥°¥é¥à¤ÎÀ­Ç½¤Þ¤¿¤Ïµ¡Ç½¡£2) Áê¼êÊýÅö»ö¼Ô¤Î·Ð¸³¤Þ¤¿¤Ï¿ä¾©¡£3) ¥é¥¤¥»¥ó¥·¡¼¤¬Ã£À®¤·ÆÀ¤ë¸ú²Ì¤Þ¤¿¤ÏÀḺ¡£ + +k. IBM ¤Ï¡¢ÆÃÄê¤ÎË¡¿Í (°Ê²¼¡ÖIBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¡×¤È¤¤¤¤¤Þ¤¹¡£) ¤ÈÆÃÄê¤ÎËÜ·ï¥×¥í¥°¥é¥à¤ÎÈÎÇäÂ¥¿Ê¡¢ÈÎÇ䤪¤è¤Ó¥µ¥Ý¡¼¥È¤Ë´Ø¤·¤Æ·ÀÌó¤òÄù·ë¤·¤Æ¤¤¤Þ¤¹¤¬¡¢IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¤Ï¡¢°ú¤­Â³¤­ IBM ¤«¤é¤ÏÆÈΩ¤·¤¿Ê̸Ĥθºß¤Ç¤¹¡£ IBM ¤Ï¡¢IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¤Î³èư¤Þ¤¿¤ÏÀ¼ÌÀ¡¢¤Þ¤¿¤Ï IBM ¥Ó¥¸¥Í¥¹¡¦¥Ñ¡¼¥È¥Ê¡¼¤Î¥é¥¤¥»¥ó¥·¡¼¤ËÂФ¹¤ëµÁ̳¤Ë´Ø¤·¡¢ÀÕǤ¤òÉ餤¤Þ¤»¤ó¡£ + +l. ¥é¥¤¥»¥ó¥·¡¼¤¬ IBM¤È¤Î´Ö¤Ç¼è¤ê¸ò¤ï¤·¤¿¤½¤Î¾¤Î·ÀÌó½ñ¡ÊIBM Customer Agreement ¤Ê¤É¡Ë¤Çµ¬Äꤵ¤ì¤ë»ÈÍѸ¢¤ª¤è¤ÓÃÎŪºâ»º¤ÎÊä½þ¤Ë´Ø¤¹¤ë¾ò¹à¤Ï¡¢ËÜ»ÈÍѾò·ï¤Î²¼¤ÇÉÕÍ¿¤µ¤ì¤ë¥×¥í¥°¥é¥à»ÈÍѸ¢¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£ + +m. ξÅö»ö¼Ô¤Ï¡¢¼è¤ê¸ò¤ï¤µ¤ì¤ë¤¹¤Ù¤Æ¤Î¾ðÊ󤬵¡Ì©¤È¤Ï¤ß¤Ê¤µ¤ì¤Ê¤¤¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ Åö»ö¼Ô¤Î¤¤¤º¤ì¤«¤¬µ¡Ì©¾ðÊó¤ò¼è¤ê¸ò¤ï¤¹É¬Íפ¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢ÊÌÅÓ IBM ½êÄê¤Îµ¡Ì©ÊÝ»ý·ÀÌó½ñ¤òÄù·ë¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +14. ÃÏÍýŪÈϰϤª¤è¤Ó½àµòË¡ + +14.1 ½àµòË¡ + +ξÅö»ö¼Ô¤Ï¡¢Ë¡¸¶Íý¤ÎÌ·½â¤Ë´Ø¤¹¤ë¾ì¹ç¤ò½ü¤­¡¢ËÜ·ÀÌ󤫤éÀ¸¤¸¤ë¡¢¤Þ¤¿¤ÏËÜ·ÀÌó¤Ë´ØÏ¢¤¹¤ëξÅö»ö¼Ô¤Î¤¹¤Ù¤Æ¤Î¸¢ÍøµÁ̳¤ò¡¢µ¬À©¡¢²ò¼á¡¢¼Â»Ü¤¹¤ë¤¿¤á¤Ë¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤ò¼èÆÀ¤·¤¿¹ñ¤ÎˡΧ¤òŬÍѤ¹¤ë¤³¤È¤ËƱ°Õ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +¹ñºÝÇäÇã·ÀÌó¤Ë´Ø¤¹¤ë¹ñÏ¢¾òÌó (United Nations Convention on Contracts for the International Sale of Goods) ¤ÏŬÍѤµ¤ì¤Þ¤»¤ó¡£ + +14.2 ºÛȽ´É³í¸¢ + +¤¹¤Ù¤Æ¤Î¸¢Íø¤ª¤è¤ÓµÁ̳¤Ë¤Ä¤¤¤Æ¤Ï¡¢¥é¥¤¥»¥ó¥·¡¼¤¬ËÜ·ï¥×¥í¥°¥é¥à¤Î»ÈÍѸ¢¤ò¼èÆÀ¤·¤¿¹ñ¤ÎºÛȽ½ê¤ÎȽÃǤ˽¾¤¦¤â¤Î¤È¤·¤Þ¤¹¡£ + +Âè 2 ¾Ï - ³Æ¹ñ¸ÇÍ­¤Î¾ò¹à + +ÆüËܤÇÉÕÍ¿¤µ¤ì¤ë»ÈÍѸ¢¤Ë¤Ä¤¤¤Æ¤Ï¡¢°Ê²¼¤Î¾ò·ï¤¬Âè 1 ¾Ï¤Ç¼¨¤µ¤ì¤¿¾ò·ï¤òÃÖ¤­´¹¤¨¤ë¤«¤Þ¤¿¤Ï¤«¤«¤ë¾ò·ï¤ò½¤Àµ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£Âè 1 ¾Ï¤Î»ÈÍѾò·ï¤Ç¡¢¤³¤ì¤é¤Î½¤Àµ¤¬²Ã¤¨¤é¤ì¤Ê¤¤»ÈÍѾò·ï¤Ï¡¢¤¹¤Ù¤Æ¡¢Êѹ¹¤µ¤ì¤º¡¢°ú¤­Â³¤­Í­¸ú¤Ë¸³¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +13. ¤½¤Î¾ + +¼¡¤Î»ö¹à¤ò¾ò¹à 13.n ¤È¤·¤ÆÄɲä·¤Þ¤¹¡£ + +n. Ëܽñ¤Ë´Ø¤¹¤ëµ¿µÁ¤¬À¸¤¸¤¿¾ì¹ç¤Ï¡¢Åö»ö¼ÔÁÐÊý¤¬¿®µÁÀ¿¼Â¤Î¸¶Â§¤Ë½¾¤Ã¤Æ¶¨µÄ¤¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_ko b/charts/mq-devserver/LICENSE_locale/LICENSE_ko new file mode 100644 index 0000000..a579dcf --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_ko @@ -0,0 +1,224 @@ +¶óÀ̼¾½º Á¤º¸ + +¾Æ·¡ ³ª¿­µÈ ÇÁ·Î±×·¥Àº ÀÌÀü¿¡ °í°´°ú IBMÀÌ ÇÕÀÇÇÑ ÇÁ·Î±×·¥ ¶óÀ̼¾½º Á¶°Ç¿¡ Ãß°¡ÇÏ¿© ´ÙÀ½ ¶óÀ̼¾½º Á¤º¸ ÀÌ¿ë ¾à°ü¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ÀÌÀü¿¡ °í°´ÀÌ ÇØ´ç ÇÁ·Î±×·¥¿¡ Àû¿ëµÇ´Â ¶óÀ̼¾½º Á¶Ç׿¡ µ¿ÀÇÇÏÁö ¾ÊÀº °æ¿ì ¹«º¸Áõ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(Z125-5589-05)ÀÌ(°¡) Àû¿ëµË´Ï´Ù. + +ÇÁ·Î±×·¥ À̸§ (ÇÁ·Î±×·¥ ¹øÈ£: +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ´ÙÀ½ Ç¥ÁØ Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. + +¹øµé ÇÁ·Î±×·¥(Bundled Programs) + +º» ÇÁ·Î±×·¥Àº ¾Æ·¡ ¸í½ÃµÈ ¹øµé ÇÁ·Î±×·¥(Bundled Programs)À¸·Î ±¸¼ºµÈ ´ÙÁß Á¦Ç° ÆÐŰÁö·Î ¶óÀ̼¾½º°¡ ºÎ¿©µË´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º Áõ¼­(Proofs of Entitlement)ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­(License Information)¿¡ ¸í½ÃµÈ ¹Ù¿Í °°ÀÌ ÇØ´ç ¹øµé ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ°í »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ÙÁß Á¦Ç° ÆÐŰÁö¿Í º°µµ·Î ¹øµé ÇÁ·Î±×·¥À» ¾çµµÇϰųª ÀçÆÇ¸ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ¹øµé ÇÁ·Î±×·¥¿¡´Â ¶óÀ̼¾½º Á¶Ç×ÀÌ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °æ¿ì ÇØ´ç Á¶Ç×ÀÌ Àû¿ëµË´Ï´Ù. °è¾à Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â º» ¶óÀ̼¾½º Á¤º¸ ¹®¼­ÀÇ Á¶Ç×ÀÌ ¹øµé ÇÁ·Î±×·¥ÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ »ç¿ë ±ÇÇÑÀÌ ¸¸·áµÇ°Å³ª ÇØÁöµÈ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¹øµé ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» »ç¿ë Áß´ÜÇϰųª ÆÄ±âÇϰųª º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ Áï½Ã ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¹øµé ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¿¬¶ôÇØ¾ß ÇÕ´Ï´Ù. »ó±âÇÑ Á¦ÇÑ ¹üÀ§¸¦ ³Ñ¾î¼­ ¹øµé ÇÁ·Î±×·¥À» »ç¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â IBM ÆÇ¸Å ´ã´çÀÚ³ª ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̼¾½º¸¦ ÃëµæÇØ¾ß ÇÕ´Ï´Ù. + +º» ÇÁ·Î±×·¥°ú ÇÔ²² ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ¹øµé ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°½À´Ï´Ù. +IBM MQ V9.0.3 + +°³¹ßÀÚ Á¦ÇÑ»çÇ× + +º» ÇÁ·Î±×·¥ÀÌ "°³¹ßÀÚ"¿ëÀ¸·Î ÁöÁ¤µÈ °æ¿ì, º» ÇÁ·Î±×·¥Àº °³¹ßÀÚ ±â°è¿¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ³»ºÎ °³¹ß ¹× À¯´Ö Å×½ºÆ® ¿ëµµÀÇ ÀϺηθ¸ ¹èÄ¡µÉ ¼ö ÀÖ½À´Ï´Ù. °³¹ßÀÚ ±â°è´Â ±âº» ¿î¿µ üÁ¦¿Í º» ÇÁ·Î±×·¥À» ½ÇÇà ÁßÀÎ ½ÇÁ¦ ¶Ç´Â °¡»ó µ¥½ºÅ©Å¾ ȯ°æÀÌ¸ç µÎ Ç׸ñ ¸ðµÎ¿¡ ´ëÇØ ¾×¼¼½º°¡ °¡´ÉÇϰí ÃÖ´ë ÇÑ ¸íÀÇ ÁöÁ¤µÈ °³¹ßÀÚ°¡ »ç¿ëÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÇÁ·Î´ö¼Ç ¿öÅ©·Îµå¸¦ ó¸®Çϰųª ÇÁ·Î´ö¼Ç ¿öÅ©·Îµå¸¦ ½Ã¹Ä·¹À̼ÇÇϰųª ÄÚµå, ÀÀ¿ëÇÁ·Î±×·¥ ¶Ç´Â ½Ã½ºÅÛÀÇ È®À强À» Å×½ºÆ®ÇÏ´Â ¿ëµµ·Î´Â º» ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÇØ´ç ÇÁ·Î´ö¼Ç ±ÇÇÑÀ» ÃëµæÇÏÁö ¾ÊÀº °æ¿ì ±âŸ ´Ù¸¥ ¿ëµµ¸¦ À§Çؼ­´Â º» ÇÁ·Î±×·¥ÀÇ ¾î¶°ÇÑ ºÎºÐµµ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. + +Çʼö ±ÇÇÑÀ» ¼³Á¤ÇÏ´Â µ¥ »ç¿ëµÇÁö ¾Ê´Â ±¸¼º¿ä¼Ò + +º» ÇÁ·Î±×·¥À» ¼³Ä¡Çϰųª »ç¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ ÆÇº°ÇÏ´Â µ¥ ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼ÒÀÇ ¼³Ä¡ ¶Ç´Â »ç¿ëÀº °í·ÁµÇÁö ¾Ê½À´Ï´Ù. Áï, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¶Ç׿¡ ÁØÇÏ¿© ´ÙÀ½ ÇÁ·Î±×·¥ ±¸¼º¿ä¼Ò¸¦ ¼³Ä¡Çϰųª »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ÀÌ·¯ÇÑ ±¸¼º¿ä¼Ò´Â º» ÇÁ·Î±×·¥¿¡ ÇÊ¿äÇÑ ±ÇÇÑ ¼ö¸¦ °áÁ¤ÇÏ´Â µ¥´Â »ç¿ëµÇÁö ¾Ê½À´Ï´Ù. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀÚ·á + +º» ÇÁ·Î±×·¥¿¡´Â ¼Ò½º ÄÚµå Çü½ÄÀÇ ÀϺΠ±¸¼º¿ä¼Ò(ÀÌÇÏ "¼Ò½º ±¸¼º¿ä¼Ò") ¹× »ùÇà ÀÚ·á·Î ½Äº°µÈ ±âŸ ÀÚ·á°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾à¿¡ ÀǰÅÇÑ ¶óÀ̼¾½º ±Ç¸®ÀÇ Á¦ÇÑ ¹üÀ§ ³»¿¡¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡ ÇÑÇØ ³»ºÎÀûÀÎ ¿ëµµ·Î¸¸ ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ º¹»çÇÏ°í ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¼Ò½º ±¸¼º¿ä¼Ò ¶Ç´Â »ùÇà ÀÚ·á¿¡ Æ÷ÇÔµÈ ÀúÀÛ±Ç Á¤º¸³ª ÁÖÀÇ»çÇ×Àº º¯°æÇϰųª »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. IBMÀº ¼ÒÀ¯±Ç, ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ ¶Ç´Â ºñ°£¼·¿¡ ´ëÇÑ º¸Áõ, »óǰ¼º ¹× ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀû º¸Áõ ¹× Á¶°ÇÀ» Æ÷ÇÔÇÏ¿© ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ ÀÏüÀÇ º¸Áõ ¾øÀÌ, ¼Ò½º ±¸¼º¿ä¼Ò ¹× »ùÇà ÀڷḦ Áö¿ø ¼­ºñ½º°¡ Á¦°øµÇÁö ¾Ê´Â "Çö»óÅ´ë·Î" Á¦°øÇÕ´Ï´Ù. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +¹«º¸Áõ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à + +Á¦ 1 ºÎ - ÀÏ¹Ý Á¶Ç× + +º» ÇÁ·Î±×·¥À» ´Ù¿î·Îµå, ¼³Ä¡, º¹»ç, ¾×¼¼½º ¶Ç´Â »ç¿ëÇϰųª "½ÂÀÎ" ´ÜÃ߸¦ Ŭ¸¯ÇÔÀ¸·Î½á ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ°Ô µË´Ï´Ù. ¸¸ÀÏ ±ÍÇϰ¡ ¶óÀ̼¾½º »ç¿ëÀÚ¸¦ ´ëÇ¥ÇÏ¿© º» °è¾àÀÇ Á¶Ç×À» ½ÂÀÎÇÏ´Â °æ¿ì, ±ÍÇÏ´Â ±ÍÇÏ¿¡°Ô ÇØ´ç ¶óÀ̼¾½º »ç¿ëÀÚ°¡ À̵é Á¶Ç×À» ÁؼöÇϵµ·Ï ÇÒ ¿ÏÀüÇÑ ±ÇÇÑÀÌ ÀÖÀ½À» º¸ÁõÇϰí Áø¼úÇÕ´Ï´Ù. º» °è¾à Á¶°Ç¿¡ µ¿ÀÇÇÏÁö ¾Ê´Â °æ¿ì, + +* º» ÇÁ·Î±×·¥À» ´Ù¿î·Îµå, ¼³Ä¡, º¹»ç, ¾×¼¼½º ¶Ç´Â »ç¿ëÇϰųª ¡°½ÂÀΡ± ´ÜÃ߸¦ Ŭ¸¯ÇÏÁö ¸¶½Ã°í, + +* »ç¿ëÇÏÁö ¾ÊÀº ¹Ìµð¾î ¹× ¹®¼­¸¦ ±¸ÀÔó¿¡ Áï½Ã ¹ÝȯÇϰí ÁöºÒÇÑ ±Ý¾×À» ȯºÒ¹ÞÀ¸½Ê½Ã¿À. º» ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì¿¡´Â º» ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº»À» ÆÄ±âÇϽʽÿÀ. + +1. ¿ë¾î Á¤ÀÇ + +"Çã°¡µÈ »ç¿ë" - ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â ÁöÁ¤µÈ ·¹º§ÀÔ´Ï´Ù. ÇØ´ç ·¹º§Àº »ç¿ëÀÚ ¼ö, MSU(Millions of Service Unit), PVU(Processor Value Unit) ¶Ç´Â IBMÀÌ ÁöÁ¤ÇÏ´Â ±âŸ »ç¿ë ·¹º§·Î ÃøÁ¤µË´Ï´Ù. + +"IBM" - International Business Machines Corporation ¶Ç´Â ±× °è¿­»ç Áß ÇϳªÀÔ´Ï´Ù. + +"¶óÀ̼¾½º Á¤º¸"("LI") - ÇÁ·Î±×·¥¿¡ ´ëÇÑ Á¤º¸ ¹× Ãß°¡ Á¶Ç×À» Á¦°øÇÏ´Â ¹®¼­ÀÔ´Ï´Ù. º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º Á¤º¸´Â www.ibm.com/software/sla ¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ ¶óÀ̼¾½º Á¤º¸´Â ½Ã½ºÅÛ ¸í·ÉÀ» »ç¿ëÇÏ¿© º» ÇÁ·Î±×·¥ÀÇ µð·ºÅ丮¿¡¼­ º¸°Å³ª º» ÇÁ·Î±×·¥°ú ÇÔ²² Á¦°øµÇ´Â ¼ÒÃ¥ÀÚ¿¡¼­ º¼ ¼ö ÀÖ½À´Ï´Ù. + +"ÇÁ·Î±×·¥" - ÇÁ·Î±×·¥ ¿øº» ¹× ¿øº»ÀÇ Àüü ¶Ç´Â ºÎºÐ »çº»À» Æ÷ÇÔÇÑ 1) ±â°è ÆÇµ¶ °¡´É Áöħ ¹× µ¥ÀÌÅÍ, 2) ±¸¼º¿ä¼Ò, ÆÄÀÏ ¹× ¸ðµâ, 3) À½¼º/¿µ»ó ³»¿ë¹°(¿¹: À̹ÌÁö, ÅØ½ºÆ®, ³ìÀ½ ÀÚ·á ¶Ç´Â ¿µ»ó) ¹× 4) °ü·Ã ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ÀÚ·á(¿¹: Ű ¹× ¹®¼­)ÀÔ´Ï´Ù. + +2. °è¾à ±¸Á¶ + +º» °è¾àÀº º» ÇÁ·Î±×·¥ÀÇ »ç¿ë¿¡ °üÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBM °£ÀÇ ¿ÏÀüÇÑ °è¾àÀ¸·Î Á¦ 1 ºÎ - ÀÏ¹Ý Á¶Ç×, Á¦ 2 ºÎ - ±¹°¡º° °íÀ¯ Á¶Ç×(ÇØ´ç Á¶Ç×ÀÌ ÀÖ´Â °æ¿ì) ¹× ¶óÀ̼¾½º Á¤º¸·Î ±¸¼ºµË´Ï´Ù. º» °è¾àÀº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ º» ÇÁ·Î±×·¥ »ç¿ë°ú °ü·ÃµÈ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBM °£ÀÇ ¸ðµç ÀÌÀü ±¸µÎ ¶Ç´Â ¼­¸é ÀÇ»ç ±³È¯À» ´ëüÇÕ´Ï´Ù. Á¦ 2 ºÎÀÇ Á¶Ç×Àº Á¦ 1 ºÎÀÇ Á¶Ç×À» ´ëüÇϰųª ¼öÁ¤ÇÕ´Ï´Ù. Á¶Ç×ÀÌ »óÃæÇÏ´Â °æ¿ì¿¡´Â ¶óÀ̼¾½º Á¤º¸°¡ µÎ ºÎºÐÀÇ Á¶Ç׿¡ ¿ì¼±ÇÏ¿© Àû¿ëµË´Ï´Ù. + +3. ¶óÀ̼¾½º ºÎ¿© + +º» ÇÁ·Î±×·¥ÀÇ ¼ÒÀ¯±ÇÀº IBM ¶Ç´Â IBM °ø±ÞÀÚ¿¡°Ô ÀÖ°í ÀúÀÛ±ÇÀÇ º¸È£¸¦ ¹ÞÀ¸¸ç ÆÇ¸ÅµÇÁö ¾Ê½À´Ï´Ù. + +IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô 1) û±¸¼­¿¡ ¸í½ÃµÈ Çã°¡µÈ »ç¿ë±îÁö º» ÇÁ·Î±×·¥À» »ç¿ëÇϰí 2) ÀÌ·¯ÇÑ Çã°¡µÈ »ç¿ëÀ» Áö¿øÇϱâ À§ÇØ »çº»À» ÀÛ¼ºÇÏ°í ¼³Ä¡Çϸç 3) ¹é¾÷ »çº»À» ÀÛ¼ºÇÒ ¼ö ÀÖ´Â ºñµ¶Á¡Àû »ç¿ë±ÇÀ» ºÎ¿©ÇÕ´Ï´Ù. ´Ü, + +a. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» Àû¹ýÇÏ°Ô ÃëµæÇÏ°í º» °è¾àÀÇ Á¶Ç×À» ÁؼöÇØ¾ß ÇÕ´Ï´Ù. + +b. ¹é¾÷µÈ ¿øº» ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â °æ¿ì¿¡´Â ¹é¾÷ »çº»ÀÌ ½ÇÇàµÇÁö ¾Ê¾Æ¾ß ÇÕ´Ï´Ù. + +c. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ ¸ðµç »çº» ¶Ç´Â ºÎºÐ »çº»¿¡ ¸ðµç ÀúÀÛ±Ç Ç¥½Ã ¹× ±âŸ ¼ÒÀ¯±Ç Ç¥½Ã¸¦ ÇØ¾ß ÇÕ´Ï´Ù. + +d. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À»(·ÎÄà ¶Ç´Â ¿ø°ÝÀ¸·Î ¾×¼¼½ºÇÏ¿©) »ç¿ëÇÏ´Â ¸ðµç »ç¿ëÀÚ°¡ 1) ¶óÀ̼¾½º »ç¿ëÀÚ¸¦ ´ë½ÅÇØ¼­¸¸ º» ÇÁ·Î±×·¥À» »ç¿ëÇϰí 2) º» °è¾àÀÇ Á¶Ç×À» ÁؼöÇϵµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. + +e. ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô´Â ´ÙÀ½°ú °°Àº ÇàÀ§°¡ ±ÝÁöµË´Ï´Ù. 1) º» °è¾à¿¡¼­ ¸í½ÃÀûÀ¸·Î Çã¿ëµÇ´Â °æ¿ì¸¦ Á¦¿ÜÇÏ°í º» ÇÁ·Î±×·¥À» »ç¿ë, º¹»ç, ¼öÁ¤ ¶Ç´Â ¹èÆ÷ÇÏ´Â ÇàÀ§, 2) °è¾à»óÀÇ ¸éÁ¦ °¡´É¼º ¾øÀÌ °ü·Ã ¹ý·É¿¡ ÀÇÇØ ¸í½ÃÀûÀ¸·Î Çã¿ëµÇ´Â °æ¿ì¸¦ Á¦¿ÜÇÏ°í º» ÇÁ·Î±×·¥À» ¸®¹ö½º ¾î¼Àºí, ¸®¹ö½º ÄÄÆÄÀÏ ¶Ç´Â ´Þ¸® º¯È¯Çϰųª ¸®¹ö½º ¿£Áö´Ï¾îÇÏ´Â ÇàÀ§, 3) º» ÇÁ·Î±×·¥ÀÇ ±¸¼º¿ä¼Ò, ÆÄÀÏ, ¸ðµâ, À½¼º/¿µ»ó ³»¿ë¹° ¶Ç´Â ¶óÀ̼¾½º°¡ ÀÖ´Â °ü·Ã ÀڷḦ ÇØ´ç ÇÁ·Î±×·¥°ú º°µµ·Î »ç¿ëÇÏ´Â ÇàÀ§ ¶Ç´Â 4) º» ÇÁ·Î±×·¥À» Àç¶óÀ̼¾½º ºÎ¿©, ´ë¿© ¶Ç´Â ¸®½ºÇÏ´Â ÇàÀ§ + +f. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» º¸Á¶ ÇÁ·Î±×·¥À¸·Î ÃëµæÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÁÖ ÇÁ·Î±×·¥À» Áö¿øÇϰí ÁÖ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½ºÀÇ Á¦ÇÑ»çÇ×À» ÁؼöÇϱâ À§ÇÑ ¿ëµµ·Î¸¸ º» ÇÁ·Î±×·¥À» »ç¿ëÇϰí, ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ÁÖ ÇÁ·Î±×·¥À¸·Î ÃëµæÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» Áö¿øÇÏ°í º» °è¾àÀÇ Á¦ÇÑ»çÇ×À» ÁؼöÇϱâ À§ÇÑ ¿ëµµ·Î¸¸ ¸ðµç º¸Á¶ ÇÁ·Î±×·¥À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÀÌ "f" Ç×ÀÇ ¸ñÀû»ó "º¸Á¶ ÇÁ·Î±×·¥"Àº ´Ù¸¥ IBM ÇÁ·Î±×·¥(ÀÌÇÏ "ÁÖ ÇÁ·Î±×·¥")ÀÇ ÀϺÎÀ̸ç ÁÖ ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º Á¤º¸¿¡¼­ º¸Á¶ ÇÁ·Î±×·¥À¸·Î Ç¥½ÃµË´Ï´Ù. (ÀÌ·¯ÇÑ Á¦ÇÑ»çÇ× ¾øÀÌ Áö¿ø ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¶óÀ̼¾½º¸¦ º°µµ·Î ÃëµæÇÏ·Á¸é ¶óÀ̼¾½º »ç¿ëÀÚ´Â Áö¿ø ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ¹®ÀÇÇØ¾ß ÇÕ´Ï´Ù.) + +º» ¶óÀ̼¾½º´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÀÛ¼ºÇÏ´Â º» ÇÁ·Î±×·¥ÀÇ °¢ »çº»¿¡ Àû¿ëµË´Ï´Ù. + +3.1 Æ®·¹À̵å¾÷, ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¹× ÆÐÄ¡ + +3.1.1 Æ®·¹À̵å¾÷ + +º» ÇÁ·Î±×·¥ÀÌ Æ®·¹À̵å¾÷ ÇÁ·Î±×·¥À¸·Î ´ëüµÇ´Â °æ¿ì ´ëüµÈ ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º´Â Áï½Ã ÇØÁöµË´Ï´Ù. + +3.1.2 ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¹× ÆÐÄ¡ + +¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¶Ç´Â ÆÐÄ¡°¡ Á¦°øµÇ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¤º¸¿¡ ¸í½ÃµÈ ÇØ´ç ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¶Ç´Â ÆÐÄ¡¿¡ Àû¿ë °¡´ÉÇÑ Ãß°¡ Á¶Ç× ¶Ç´Â »óÀÌÇÑ Á¶Ç×À» ½ÂÀÎÇÕ´Ï´Ù. Ãß°¡ Á¶Ç× ¶Ç´Â »óÀÌÇÑ Á¶Ç×ÀÌ Á¦°øµÇÁö ¾Ê´Â °æ¿ì, ÇØ´ç ¾÷µ¥ÀÌÆ®, ¼öÁ¤»çÇ× ¶Ç´Â ÆÐÄ¡¿¡´Â º» °è¾à¸¸ Àû¿ëµË´Ï´Ù. º» ÇÁ·Î±×·¥ÀÌ ¾÷µ¥ÀÌÆ®·Î ´ëüµÇ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ´ëüµÈ ÇÁ·Î±×·¥ÀÇ »ç¿ëÀ» Áï½Ã Áß´ÜÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +3.2 °íÁ¤ ±â°£ ¶óÀ̼¾½º + +IBMÀÌ °íÁ¤ ±â°£ µ¿¾È º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º¸¦ ºÎ¿©ÇÏ´Â °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÌ °»½Å¿¡ µ¿ÀÇÇÏ´Â °æ¿ì°¡ ¾Æ´Ï¸é ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¶óÀ̼¾½º´Â °íÁ¤ ±â°£ ¸¸·á ½Ã ÇØÁöµË´Ï´Ù. + +3.3 ±â°£°ú ÇØÁö + +º» °è¾àÀº ÇØÁöµÉ ¶§±îÁö À¯È¿ÇÕ´Ï´Ù. + +IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» °è¾àÀÇ Á¶Ç×À» ÁؼöÇÏÁö ¾Ê´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¶óÀ̼¾½º¸¦ ÇØÁöÇÒ ¼ö ÀÖ½À´Ï´Ù. + +¾î¶² ÀÌÀ¯·Îµç ÀÏ¹æ ´ç»çÀÚ°¡ ¶óÀ̼¾½º¸¦ ÇØÁöÇÑ °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ »ç¿ëÀ» Áï½Ã Áß´ÜÇÏ°í ¶óÀ̼¾½º »ç¿ëÀÚÀÇ »çº»À» ¸ðµÎ ÆÄ±âÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. º» °è¾àÀÇ ÇØÁö ÀÌÈÄ¿¡µµ ÀϺΠÁ¶Ç×Àº ±× Ư¼º»ó ÀÌÇàÀÌ µÉ ¶§±îÁö À¯È¿ÇÏ¸ç ¾ç ´ç»çÀÚÀÇ ½Â°èÀÚ ¹× ¾ç¼öÀο¡°Ôµµ Àû¿ëµË´Ï´Ù. + +4. ¿ä±Ý + +¿ä±ÝÀº û±¸¼­¿¡ ÁöÁ¤µÈ ÃëµæÇÑ Çã°¡µÈ »ç¿ëÀ» ±âÁØÀ¸·Î ºÎ°úµË´Ï´Ù. IBMÀº º» °è¾à¿¡¼­ ¸í½ÃÇÏ´Â °æ¿ì¸¦ Á¦¿ÜÇϰí ÀÌ¹Ì ÁöºÒÇ߰ųª ÁöºÒÇß¾î¾ß ÇÒ ¿ä±ÝÀ» ȯºÒÇϰųª ÀÌ·¯ÇÑ ¿ä±Ý¿¡ ´ëÇØ Å©·¹µðÆ®¸¦ ÀÎÁ¤ÇÏÁö ¾Ê½À´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â Çã°¡µÈ »ç¿ëÀ» ´Ã¸®·Á¸é IBM ¶Ç´Â Çã°¡µÈ IBM ¸®¼¿·¯¿¡°Ô »çÀü¿¡ ÅëÁöÇϰí ÇØ´ç ¿ä±ÝÀ» ÁöºÒÇØ¾ß ÇÕ´Ï´Ù. + +5. ¼¼±Ý + +°ü°è ´ç±¹ÀÌ º» ÇÁ·Î±×·¥¿¡ ´ëÇØ °ü¼¼, ¼¼±Ý, ºÎ´ã±Ý ¶Ç´Â ±âŸ ºñ¿ë(IBM ¼øÀÌÀÍ¿¡ ´ëÇÑ ¼¼±ÝÀº Á¦¿Ü)À» ºÎ°úÇÏ´Â °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀڴ û±¸¼­¿¡ ¸í½ÃµÈ ±Ý¾×À» ÁöºÒÇϰųª ¸é¼¼ Áõ¸í¼­¸¦ Á¦ÃâÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» ÃëµæÇÑ ÀÌÈÄ¿¡ º» ÇÁ·Î±×·¥¿¡ ºÎ°úµÇ´Â ¸ðµç °³ÀÎ Àç»ê¼¼¸¦ ÁöºÒÇÒ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù. °ü°è ´ç±¹ÀÌ ÃÖÃÊ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¶óÀ̼¾½º°¡ ºÎ¿©µÈ ±¹°¡ ¿ÜºÎ¿¡¼­ÀÇ º» ÇÁ·Î±×·¥ ¼öÀÔÀ̳ª ¼öÃâ, ¾çµµ, ¾×¼¼½º ¶Ç´Â »ç¿ë¿¡ ´ëÇØ °ü¼¼, ¼¼±Ý, ºÎ´ã±Ý ¶Ç´Â ºñ¿ëÀ» ºÎ°úÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â ºÎ°úµÈ ±Ý¾×¿¡ ´ëÇÑ ³³ºÎ Àǹ«¸¦ Áö¸ç ÇØ´ç ±Ý¾×À» ÁöºÒÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +6. ȯºÒ º¸Áõ + +¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ÀÇ ÃÖÃÊ ¶óÀ̼¾½º »ç¿ëÀڷμ­ ¾î¶°ÇÑ ÀÌÀ¯·Îµç º» ÇÁ·Î±×·¥¿¡ ¸¸Á·ÇÏÁö ¾Ê´Â °æ¿ì, ¶óÀ̼¾½º¸¦ ÇØÁöÇÏ°í º» ÇÁ·Î±×·¥¿¡ ´ëÇØ ÁöºÒÇÑ ±Ý¾×À» ȯºÒ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ´Ü, ¶óÀ̼¾½º »ç¿ëÀڴ û±¸¼­ ³¯Â¥·ÎºÎÅÍ 30ÀÏ À̳»¿¡ º» ÇÁ·Î±×·¥À» ±¸ÀÔó¿¡ ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. ¶óÀ̼¾½º°¡ °íÁ¤ ±â°£ ¶óÀ̼¾½º¿©¼­ °»½ÅÇØ¾ß ÇÏ´Â °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â Ãʱ⠱ⰣÀÇ Ã³À½ 30ÀÏ À̳»¿¡ º» ÇÁ·Î±×·¥À» ¹ÝȯÇÏ´Â °æ¿ì¿¡¸¸ ȯºÒ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ´Ù¿î·ÎµåÇÑ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥ ±¸ÀÔó¿¡ ȯºÒ¹Þ´Â ¹æ¹ýÀ» ¹®ÀÇÇØ¾ß ÇÕ´Ï´Ù. + +7. ÇÁ·Î±×·¥ ¾çµµ + +¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» ¾çµµ¹ÞÀ¸·Á´Â Á¦3ÀÚ°¡ º» °è¾àÀÇ Á¶Ç׿¡ µ¿ÀÇÇÏ´Â °æ¿ì¿¡¸¸ ÇØ´ç ´ç»çÀÚ¿¡°Ô º» ÇÁ·Î±×·¥ ¹× ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¸ðµç ¶óÀ̼¾½º ±Ç¸®¿Í Àǹ«¸¦ ¾çµµÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾î¶² ÀÌÀ¯·Îµç ÀÏ¹æ ´ç»çÀÚ°¡ ¶óÀ̼¾½º¸¦ ÇØÁöÇÑ °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â º» ÇÁ·Î±×·¥À» Á¦3ÀÚ¿¡°Ô ¾çµµÇÒ ¼ö ¾ø½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) º» ÇÁ·Î±×·¥ ¶Ç´Â 2) º» ÇÁ·Î±×·¥ Çã°¡µÈ »ç¿ëÀÇ ÀϺθ¦ ¾çµµÇÒ ¼ö ¾ø½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥À» ¾çµµÇÏ´Â °æ¿ì, ¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º Á¤º¸¸¦ Æ÷ÇÔÇÏ¿© º» °è¾à¼­ÀÇ ÇϵåÄ«Çǵµ ¾çµµÇØ¾ß ÇÕ´Ï´Ù. ¾çµµ ÈÄ Áï½Ã »ç¿ëÀÚÀÇ ¶óÀ̼¾½º°¡ ÇØÁöµË´Ï´Ù. + +8. º¸Áõ Á¦ÇÑ + +°­Çà ¹ý±Ô¿¡ µû¶ó Á¦°øÇÏ´Â º¸ÁõÀÇ °æ¿ì¸¦ Á¦¿ÜÇϰí, IBMÀº »óǰ¼º, ǰÁú ¸¸Á·, ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º, ¼ÒÀ¯±Ç¿¡ ´ëÇÑ ¹¬½ÃÀû º¸ÁõÀ̳ª Á¶°Ç ¹× ŸÀÎÀÇ ±Ç¸® ºñÄ§ÇØ¿¡ ´ëÇÑ º¸ÁõÀ̳ª Á¶°ÇÀ» Æ÷ÇÔÇÏ¿©(´Ü, ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½) º» ÇÁ·Î±×·¥¿¡ °üÇÑ ÀÏüÀÇ ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ º¸ÁõÀ̳ª Á¶°ÇÀ» Á¦°øÇÏÁö ¾Ê½À´Ï´Ù. + +ÀϺΠ±¹°¡³ª °üÇұǿ¡¼­´Â ¸í½ÃÀûÀ̰ųª ¹¬½ÃÀûÀÎ º¸ÁõÀÇ Á¦¿Ü»çÇ×ÀÌ Çã¿ëµÇÁö ¾ÊÀ¸¹Ç·Î À§ÀÇ Á¦¿Ü»çÇ×ÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Àû¿ëµÇÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, ÇØ´ç º¸ÁõÀº ¹ý·ü¿¡¼­ ¿ä±¸ÇÏ´Â ÃÖ¼Ò ±â°£ µ¿¾È¿¡¸¸ Àû¿ëµË´Ï´Ù. º¸Áõ ±â°£ ÀÌÈÄ¿¡´Â º¸ÁõÀÌ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀϺΠ±¹°¡³ª °üÇұǿ¡¼­´Â ¹¬½ÃÀû º¸ÁõÀÇ À¯È¿ ±â°£¿¡ ´ëÇÑ Á¦ÇÑ»çÇ×ÀÌ Çã¿ëµÇÁö ¾ÊÀ¸¹Ç·Î À§ÀÇ Á¦ÇÑ»çÇ×ÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Àû¿ëµÇÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ±¹°¡³ª °üÇұǿ¡ µû¶ó ´Ù¾çÇÑ ±âŸ ±Ç¸®¸¦ °¡Áú ¼öµµ ÀÖ½À´Ï´Ù. + +º» 8Ç×ÀÇ ¸éÃ¥»çÇ× ¹× Á¦¿Ü»çÇ×Àº IBMÀÇ ÇÁ·Î±×·¥ °³¹ßÀÚ ¹× °ø±ÞÀÚ¿¡°Ôµµ µ¿ÀÏÇÏ°Ô Àû¿ëµË´Ï´Ù. + +ºñIBM ÇÁ·Î±×·¥ÀÇ Á¦Á¶ÀÚ, °ø±ÞÀÚ ¶Ç´Â ¹ßÇàÀÚ´Â ÀÚü º¸ÁõÀ» Á¦°øÇÒ ¼öµµ ÀÖ½À´Ï´Ù. + +º°µµ·Î ¸í½ÃÇÏÁö ¾Ê´Â ÇÑ, IBMÀº ÀÏüÀÇ Áö¿øÀ» Á¦°øÇÏÁö ¾Ê½À´Ï´Ù. IBMÀÌ Áö¿øÀ» Á¦°øÇÏ´Â °æ¿ì¿¡´Â º» 8Ç×ÀÇ ¸éÃ¥»çÇ× ¹× Á¦¿Ü»çÇ×ÀÌ Àû¿ëµË´Ï´Ù. + +9. ¶óÀ̼¾½º »ç¿ëÀÚ µ¥ÀÌÅÍ ¹× µ¥ÀÌÅͺ£À̽º + +¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¹®Á¦Á¡ÀÇ ¿øÀÎÀ» ÆÄ¾ÇÇϵµ·Ï µ½±â À§ÇØ IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô 1) IBMÀÌ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ½Ã½ºÅÛÀ» ¿ø°ÝÀ¸·Î ¾×¼¼½ºÇϵµ·Ï Çã¿ëÇϰųª 2) ¶óÀ̼¾½º »ç¿ëÀÚ Á¤º¸ ¶Ç´Â ½Ã½ºÅÛ µ¥ÀÌÅ͸¦ IBM¿¡°Ô º¸³»µµ·Ï ¿äûÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª º» °è¾à»óÀÇ IBM Ã¥ÀÓ ¹üÀ§¸¦ ¹þ¾î³­ ÇØ´ç À¯ÇüÀÇ Áö¿øÀ» ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Á¦°øÇÏ´Â °Í¿¡ IBMÀÌ µ¿ÀÇÇÑ´Ù´Â ¼­¸é °è¾àÀ» IBM°ú ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º°µµ·Î ü°áÇÑ °æ¿ì°¡ ¾Æ´Ï¸é IBMÀº ÇØ´ç Áö¿øÀ» Á¦°øÇÒ Àǹ«°¡ ¾ø½À´Ï´Ù. ¾î´À °æ¿ì¶óµµ IBMÀº Á¦Ç° ¹× ¼­ºñ½º¸¦ °³¼±ÇÏ°í °ü·Ã Áö¿ø(Support) ¿ÀÆÛ¸µ(Offering) Á¦°øÀ» Áö¿øÇϱâ À§ÇØ ¿À·ù ¹× ¹®Á¦Á¡¿¡ ´ëÇÑ Á¤º¸¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¸ñÀûÀ¸·Î IBMÀº IBM °ü°èȸ»ç ¹× Çϵµ±ÞÀÚ(¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÀÖ´Â ±¹°¡°¡ ¾Æ´Ñ ±¹°¡ Áß Çϳª ÀÌ»ó¿¡ ÀÖ´Â °ü°èȸ»ç ¹× Çϵµ±ÞÀÚ Æ÷ÇÔ)¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM¿¡°Ô À̸¦ ¼öÇàÇÒ ±ÇÇÑÀ» ºÎ¿©ÇÕ´Ï´Ù. + +¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) ¶óÀ̼¾½º »ç¿ëÀÚ°¡ IBMÀÌ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â µ¥ÀÌÅÍ ¹× µ¥ÀÌÅͺ£À̽ºÀÇ ÄÁÅÙÆ®, 2) µ¥ÀÌÅÍ(°³ÀÎÀûÀ¸·Î ½Äº° °¡´ÉÇÑ µ¥ÀÌÅÍ Æ÷ÇÔ)ÀÇ ¾×¼¼½º, º¸¾È, ¾Ïȣȭ, »ç¿ë ¹× Àü¼Û¿¡ °üÇÑ ÀýÂ÷ ¹× °ü¸®ÀÇ ¼±Åà ¹× ±¸Çö°ú 3) µ¥ÀÌÅͺ£À̽º¿Í ÀúÀåµÈ µ¥ÀÌÅÍÀÇ ¹é¾÷ ¹× º¹±¸¿¡ ´ëÇØ Ã¥ÀÓÀ» Áý´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â µ¥ÀÌÅͳª ±âŸ Çü½ÄÀ¸·Î °³ÀÎÀûÀ¸·Î ½Äº° °¡´ÉÇÑ Á¤º¸¸¦ º¸³»°Å³ª ÇØ´ç Á¤º¸¿¡ ´ëÇÑ ¾×¼¼½º¸¦ IBM¿¡°Ô Á¦°øÇÏÁö ¾ÊÀ¸¸ç ½Ç¼ö·Î IBM¿¡°Ô Á¦°øµÈ ÇØ´ç Á¤º¸ ¶Ç´Â IBM¿¡ ÀÇÇÑ ÇØ´ç Á¤º¸ÀÇ À¯½ÇÀ̳ª °ø°³¿Í °ü·ÃÇÏ¿© IBM¿¡°Ô ¹ß»ýÇÒ ¼ö ÀÖ´Â ÀûÀýÇÑ ºñ¿ë ¹× ±âŸ ±Ý¾×¿¡ ´ëÇØ Ã¥ÀÓÀ» Áý´Ï´Ù. + +10. Ã¥ÀÓ Á¦ÇÑ + +º» 10Ç×(Ã¥ÀÓ Á¦ÇÑ)ÀÇ Á¦ÇÑ»çÇ× ¹× Á¦¿Ü»çÇ×Àº °è¾à»óÀÇ ¸éÁ¦ °¡´É¼º ¾øÀÌ ÇØ´ç ¹ý·ü¿¡¼­ ±ÝÁöÇÏÁö ¾Ê´Â ¹üÀ§¿¡¼­ ÃÖ´ëÇÑ Àû¿ëµË´Ï´Ù. + +10.1 IBMÀÌ Ã¥ÀÓÀ» Áö´Â Ç׸ñ + +IBMÀÇ Ã¤¹« ºÒÀÌÇàÀ̳ª ºÒ¹ý ÇàÀ§·Î ÀÎÇÏ¿© ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¼ÕÇØ°¡ ¹ß»ýÇÑ °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBMÀ¸·ÎºÎÅÍ ¼ÕÇØ¸¦ ¹è»ó¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ°¡ IBMÀ¸·ÎºÎÅÍ ¼ÕÇØ ¹è»óÀ» û±¸ÇÒ ¼ö ÀÖ´Â ¿øÀÎ(Áß´ëÇÑ °è¾à À§¹Ý, °ú½Ç, ºÎ½Ç Ç¥½Ã, ±âŸ °è¾à ¶Ç´Â ºÒ¹ý ÇàÀ§ ¹è»ó û±¸ Æ÷ÇÔ)¿¡ °ü°è¾øÀÌ °¢ ÇÁ·Î±×·¥°ú °ü·ÃÇÏ¿© ¹ß»ýÇϰųª º» °è¾à¿¡ ÀǰÅÇÏ¿© ¹ß»ýÇÏ´Â ¸ðµç ¹è»ó û±¸¿¡ ´ëÇÑ IBMÀÇ Ã¥ÀÓÀº ÀüüÀûÀ¸·Î ´ÙÀ½À» ÃʰúÇÏÁö ¾Ê½À´Ï´Ù. 1) ½Åü »óÇØ(»ç¸Á Æ÷ÇÔ)¿Í ºÎµ¿»ê ¹× À¯Ã¼ Àç»ê»óÀÇ ¼ÕÇØ 2) ±âŸ Á÷Á¢ÀûÀÎ ½Ç¼ÕÇØ¿¡ ´ëÇØ ¹è»ó û±¸ÀÇ ¿øÀÎÀÌ µÈ º» ÇÁ·Î±×·¥¿¡ ´ëÇØ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ÁöºÒÇÑ ¿ä±Ý(º» ÇÁ·Î±×·¥¿¡ ÃÖ´ë 12°³¿ù±îÁöÀÇ °íÁ¤ ±â°£ ¿ä±ÝÀÌ ºÎ°úµÇ´Â °æ¿ì). + +ÀÌ·¯ÇÑ Á¦ÇÑÀº IBM ÇÁ·Î±×·¥ °³¹ßÀÚ ¹× °ø±ÞÀÚ¿¡°Ôµµ Àû¿ëµË´Ï´Ù. IBM, IBM ÇÁ·Î±×·¥ °³¹ßÀÚ ¹× °ø±ÞÀÚÀÇ Ã¥ÀÓÀº °¢ÀÚÀÇ Ã¥ÀÓÀ» ÇÕÇÏ¿© À§ Ã¥ÀÓ Çѵµ¸¦ ÃʰúÇÏÁö ¾Ê½À´Ï´Ù. + +10.2 IBMÀÌ Ã¥ÀÓÀ» ÁöÁö ¾Ê´Â Ç׸ñ + +¾î¶°ÇÑ °æ¿ì¿¡µµ IBM, IBMÀÇ ÇÁ·Î±×·¥ °³¹ßÀÚ ¶Ç´Â °ø±ÞÀÚ´Â ´ÙÀ½ »çÇ×ÀÇ ¹ß»ý °¡´É¼ºÀ» ÅëÁö ¹ÞÀº °æ¿ì¿¡µµ ´ÙÀ½¿¡ ´ëÇØ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. + +a. µ¥ÀÌÅÍÀÇ À¯½Ç ¶Ç´Â ¼Õ»ó + +b. Ưº° ¼ÕÇØ, ºÎ¼ö ¼ÕÇØ, ¡¹úÀû ¼ÕÇØ, °£Á¢ ¼ÕÇØ ¶Ç´Â °æÁ¦ÀûÀÎ °á°úÀû ¼ÕÇØ ¶Ç´Â + +c. ±â´ëÇß´ø ÀÌÀÍ, ¿µ¾÷ ±âȸ, ¸ÅÃâ, ¿µ¾÷±Ç ¶Ç´Â ºñ¿ë Àý°¨ÀÌ ½ÇÇàµÇÁö ¸øÇÔÀ¸·Î ÀÎÇØ ¹ß»ýÇÏ´Â ¼ÕÇØ. + +11. Á¶Ç× Áؼö È®ÀÎ + +º» 11Ç×(Á¶Ç× Áؼö È®ÀÎ)ÀÇ ¸ñÀû»ó, "¹«º¸Áõ ÇÁ·Î±×·¥¿¡ °üÇÑ ±¹Á¦ ¶óÀ̼¾½º °è¾à(ILAN) ÇÁ·Î±×·¥ Á¶Ç×"Àº 1) º» °è¾à ¹× IBMÀÌ Á¦°øÇÏ´Â Àû¿ë °¡´ÉÇÑ ¼öÁ¤º» ¹× °Å·¡ ¼­·ù¿Í 2) IBM Software Policy À¥ »çÀÌÆ®(www.ibm.com/softwarepolicies)¿¡ ÀÖ´Â IBM ¼ÒÇÁÆ®¿þ¾î policy(¹é¾÷, Sub-Capacity ±âÁØ °¡°Ý Ã¥Á¤ ¹× ¸¶À̱׷¹ÀÌ¼Ç °ü·Ã policy¸¦ Æ÷ÇÔÇϳª ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½)¸¦ ÀǹÌÇÕ´Ï´Ù. + +º» 11Ç׿¡ ¸í½ÃµÈ ±Ç¸®¿Í Àǹ«´Â º» ÇÁ·Î±×·¥ÀÇ ¶óÀ̼¾½º°¡ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ºÎ¿©µÈ ±â°£ ¹× ÇâÈÄ 2³â µ¿¾È À¯È¿ÇÕ´Ï´Ù. + +11.1 È®ÀÎ ÇÁ·Î¼¼½º + +¶óÀ̼¾½º »ç¿ëÀÚ´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ILAN ÇÁ·Î±×·¥ Á¶Ç×(IBMÀÇ Àû¿ë °¡´ÉÇÑ ¸ðµç ¶óÀ̼¾½º ºÎ¿© ¹× °¡°Ý Ã¥Á¤ ÀÚ°Ý Á¶Ç×À» Æ÷ÇÔÇϳª ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½)À» ÁؼöÇÏ¿© ¸ðµç ÇÁ·Î±×·¥À» »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ °¨»ç °¡´ÉÇÑ È®ÀÎÀ» Á¦°øÇϱ⿡ ÃæºÐÇÒ Á¤µµÀÇ Á¤È®ÇÑ ¼­¸é ±â·Ï, ½Ã½ºÅÛ µµ±¸ Ãâ·Â ¹× ±âŸ ½Ã½ºÅÛ Á¤º¸¸¦ ÀÛ¼ºÇÏ°í º¸À¯Çϸç IBM ¹× IBMÀÇ °¨»ç¿ø¿¡°Ô Á¦°øÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â 1) Çã°¡µÈ »ç¿ëÀ» ÃʰúÇÏÁö ¾Êµµ·Ï È®ÀÎÇϰí 2) ILAN ÇÁ·Î±×·¥ Á¶Ç×À» ÁؼöÇÒ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù. + +ÀûÀýÇÑ ÅëÁö·Î IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ¾î¶² ¿ëµµ·Îµç ILAN ÇÁ·Î±×·¥ Á¶Ç×ÀÌ Àû¿ëµÇ´Â ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â ¸ðµç »çÀÌÆ® ¹× ȯ°æ¿¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ILAN ÇÁ·Î±×·¥ Á¶Ç×À» ÁؼöÇÏ´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ È®ÀÎÀº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¿µ¾÷ ¹æÇظ¦ ÃÖ¼ÒÈ­ÇÏ´Â ¹æ¹ýÀ¸·Î ¼öÇàµÇ¸ç ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ±Ù¹«Áö »çÀÌÆ®¿¡¼­ Á¤»ó ±Ù¹« ½Ã°£ Áß¿¡ ¼öÇàµÉ ¼ö ÀÖ½À´Ï´Ù. IBMÀº ¿ÜºÎ °¨»ç¿øÀ» ÅëÇØ ÀÌ·¯ÇÑ È®ÀÎÀ» Áö¿øÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, IBMÀº ÇØ´ç °¨»ç¿ø°ú ü°áÇÑ ¼­¸é ±â¹ÐÁ¤º¸ ¼ö·ÉÇÕÀǼ­°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. + +11.2 ÇØ°á ¹æ¹ý + +IBMÀº ÀÌ·¯ÇÑ È®Àο¡¼­ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ Çã°¡µÈ »ç¿ëÀ» ÃʰúÇÏ¿© ÇÁ·Î±×·¥À» »ç¿ëÇ߰ųª ILAN ÇÁ·Î±×·¥ Á¶Ç×À» ÁؼöÇÏÁö ¾ÊÀ½À» Ç¥½ÃÇÏ´Â °æ¿ì ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¼­¸éÀ¸·Î ÅëÁöÇÕ´Ï´Ù. ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBMÀÌ 1) Ãʰú »ç¿ë, 2) Ãʰú »ç¿ë°ú 2³â Áß ´õ ªÀº ±â°£ µ¿¾ÈÀÇ ÇØ´ç Ãʰú »ç¿ë¿¡ ´ëÇÑ Áö¿ø ¹× 3) È®ÀÎÀÇ °á°ú·Î¼­ ÆÇº°µÈ Ãß°¡ ¿ä±Ý ¹× ±âŸ Ã¥ÀÓ¿¡ ´ëÇØ û±¸¼­¿¡ ¸í½ÃÇÑ ¿ä±ÝÀ» Áï½Ã IBM¿¡°Ô Á÷Á¢ ÁöºÒÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +12. Á¦3ÀÚ ÁÖÀÇ»çÇ× + +º» ÇÁ·Î±×·¥¿¡´Â Á¦3ÀÚ°¡ ¾Æ´Ï¶ó IBMÀÌ º» °è¾à¿¡ ÀǰÅÇÏ¿© ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô ¶óÀ̼¾½º¸¦ ºÎ¿©ÇÏ´Â Á¦3ÀÚ Äڵ尡 Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. Á¦3ÀÚ Äڵ忡 ´ëÇÑ ÁÖÀÇ»çÇ×(ÀÌÇÏ "Á¦3ÀÚ ÁÖÀÇ»çÇ×")Àº ¶óÀ̼¾½º »ç¿ëÀÚÀÇ Á¤º¸¿ëÀ¸·Î¸¸ Æ÷ÇԵ˴ϴÙ(ÇØ´çµÇ´Â °æ¿ì). ÀÌ·¯ÇÑ ÁÖÀÇ»çÇ×Àº ÇÁ·Î±×·¥ÀÇ NOTICES ÆÄÀÏ¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÁ¤ Á¦3ÀÚ Äڵ忡 ´ëÇÑ ¼Ò½º Äڵ带 ¾ò´Â ¹æ¹ý¿¡ ´ëÇÑ Á¤º¸´Â Á¦3ÀÚ ÁÖÀÇ»çÇ׿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¦3ÀÚ ÁÖÀÇ»çÇ׿¡¼­ IBMÀÌ Á¦3ÀÚ Äڵ带 "¼öÁ¤ÇÒ ¼ö ÀÖ´Â Á¦3ÀÚ ÄÚµå"·Î Ç¥½ÃÇÏ´Â °æ¿ì, IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô 1) ¼öÁ¤ÇÒ ¼ö ÀÖ´Â Á¦3ÀÚ Äڵ带 ¼öÁ¤Çϰí 2) ¼öÁ¤ÇÒ ¼ö ÀÖ´Â Á¦3ÀÚ ÄÚµå¿Í Á÷Á¢ ÀÎÅÍÆäÀ̽º¸¦ ¼öÇàÇÏ´Â ÇÁ·Î±×·¥ ¸ðµâÀ» ¸®¹ö½º ¿£Áö´Ï¾îÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» ºÎ¿©ÇÕ´Ï´Ù. ´Ü, ÀÌ·¯ÇÑ ±ÇÇÑÀº ÇØ´ç Á¦3ÀÚ Äڵ忡 ´ëÇÑ ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ¼öÁ¤»çÇ×À» µð¹ö±ëÇϱâ À§ÇÑ ¿ëµµ·Î¸¸ ºÎ¿©µË´Ï´Ù. IBMÀÇ ¼­ºñ½º ¹× Áö¿ø Àǹ«(ÇØ´çµÇ´Â °æ¿ì)´Â ¼öÁ¤µÇÁö ¾ÊÀº ÇÁ·Î±×·¥¿¡¸¸ Àû¿ëµË´Ï´Ù. + +13. ÀϹݻçÇ× + +a. º» °è¾àÀÇ ¾î¶°ÇÑ Á¶Ç×µµ °è¾à¿¡ ÀÇÇØ Æ÷±â ¶Ç´Â Á¦ÇÑµÉ ¼ö ¾ø´Â °­Çà ¹ý±Ô »óÀÇ ¼ÒºñÀÚ ±Ç¸®¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù. + +b. IBMÀº À¯ÇüÀÇ ÇüÅ·Π¶óÀ̼¾½º »ç¿ëÀÚ¿¡°Ô Á¦°øÇÏ´Â ÇÁ·Î±×·¥¿¡ ´ëÇØ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÌ ¼­¸éÀ¸·Î ´Þ¸® ÇÕÀÇÇÏÁö ¾Ê´Â ÇÑ, IBMÀÌ ÁöÁ¤ÇÑ ¿î¼Û¾÷ü¿¡ ÇØ´ç ÇÁ·Î±×·¥À» ÀεµÇÏ¿© Æ÷Àå ¹× ¿î¼Û Àǹ«¸¦ ¼öÇàÇÕ´Ï´Ù. + +c. º» °è¾àÀÇ ÀϺΠÁ¶Ç×ÀÌ ¹«È¿À̰ųª ½ÃÇàÀÌ ºÒ°¡´ÉÇÑ °æ¿ì¿¡µµ º» °è¾àÀÇ ³ª¸ÓÁö Á¶Ç×Àº ¿ÏÀüÈ÷ À¯È¿ÇÕ´Ï´Ù. + +d. ¶óÀ̼¾½º »ç¿ëÀÚ´Â ÃÖÁ¾ »ç¿ëÀÚ ¶Ç´Â ƯÁ¤ »ç¿ëÀÚ¿¡ ´ëÇÑ ¼öÃâ¿¡ ´ëÇÑ ¹Ì±¹ Åë»ó ±ÝÁö ¹× Á¦Àç ±ÔÁ¤°ú ±ÝÁö Á¶Ç×À» Æ÷ÇÔÇÑ ¸ðµç ¼öÃâÀÔ °ü·Ã ¹ý±Ô¸¦ ÁؼöÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +e. ¶óÀ̼¾½º »ç¿ëÀÚ´Â IBM Á¦Ç° ¹× ¼­ºñ½º »ç¿ë ½Ã ¶Ç´Â ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÇ ºñÁî´Ï½º °ü°è ÃËÁøÀ» À§ÇØ IBM ¹× ±× °è¿­»ç(¹× À̵éÀÇ ½Â°èÀÚ ¹× ¾ç¼öÀÎ, Çϵµ±ÞÀÚ ¹× IBM ºñÁî´Ï½º ÆÄÆ®³Ê)°¡ ¿µ¾÷À» ÇÏ´Â °÷¿¡¼­´Â ¾îµð¼­³ª ¶óÀ̼¾½º »ç¿ëÀÚÀÇ ´ã´çÀÚ Á¤º¸¸¦ ÀúÀåÇÏ°í »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇÕ´Ï´Ù. + +f. °¢ ´ç»çÀÚ´Â »ó´ë¹æÀÌ º» °è¾àÀÇ Àǹ«¸¦ ´ÙÇÏÁö ¾Ê¾ÒÀ½À» ÀÌÀ¯·Î ¹è»óÀ» û±¸Çϱâ Àü¿¡ »ó´ë¹æ¿¡°Ô °è¾àÀ» ÁؼöÇÒ ¼ö ÀÖ´Â ÀûÀýÇÑ ±âȸ¸¦ Á¦°øÇÕ´Ï´Ù. ¾ç ´ç»çÀÚ´Â º» °è¾à°ú °ü·ÃµÈ ´ç»çÀÚ °£ÀÇ ¸ðµç ºÐÀï, ÀÇ°ß Â÷ÀÌ ¶Ç´Â ¹è»ó û±¸¸¦ ¼º½ÇÇÏ°Ô ÇØ°áÇϱâ À§ÇØ ³ë·ÂÇÕ´Ï´Ù. + +g. Á¦ÇÑ»çÇ× ¶Ç´Â °è¾à»óÀÇ ¸éÁ¦ °¡´É¼º ¾øÀÌ ÇØ´ç ¹ý·ü¿¡ ´Þ¸® ¸í½ÃµÇÁö ¾Ê´Â ÇÑ 1) ¼Ò¼Û Á¦±âÀÇ ¿øÀÎ ¹ß»ý ÈÄ 2³âÀÌ Áö³ª¸é ¾î´À ´ç»çÀÚµµ º» °è¾à¿¡¼­ ¹ß»ýÇϰųª º» °è¾à°ú °ü·ÃÇÏ¿© ¹ß»ýÇÑ ¹è»ó û±¸¿¡ ´ëÇØ ¾î¶² ¾ç½ÄÀ¸·Îµç ¹ýÀû Á¶Ä¡¸¦ Á¦±âÇÏÁö ¾ÊÀ¸¸ç 2) ÇØ´ç Á¦ÇÑ ±â°£ÀÌ ¸¸·áµÇ¸é ÇØ´ç ¹è»ó û±¸¿Í ÀÌ·¯ÇÑ ¹è»ó û±¸¿¡ °ü·ÃµÈ °¢°¢ÀÇ ±Ç¸®´Â ¸ðµÎ ¹«È¿·Î µË´Ï´Ù. + +h. ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀº ÅëÁ¦ ºÒ°¡´ÉÇÑ »çÀ¯·Î Àǹ«»çÇ×À» ÀÌÇàÇÏÁö ¸øÇÑ °æ¿ì ÀÌ¿¡ ´ëÇØ ¸éÃ¥µË´Ï´Ù. + +i. º» °è¾à¿¡¼­´Â Á¦3ÀÚ¿¡ ´ëÇÑ ¼Ò¼Û Á¦±âÀÇ ¿øÀÎ ¶Ç´Â ±Ç¸®°¡ »ý¼ºµÇÁö ¾ÊÀ¸¸ç IBMÀº ¶óÀ̼¾½º »ç¿ëÀÚ¿¡ ´ëÇÑ Á¦3ÀÚÀÇ ¾î¶°ÇÑ ¹è»ó û±¸¿¡ ´ëÇØ¼­µµ Ã¥ÀÓÀÌ ¾ø½À´Ï´Ù. ´Ü, »ó±â 10.1Ç×(IBMÀÌ Ã¥ÀÓÀ» Áö´Â Ç׸ñ)¿¡ ¼³¸íµÈ IBM¿¡ ¹ýÀûÀ¸·Î Ã¥ÀÓÀÌ ÀÖ´Â ½Åü »óÇØ(»ç¸Á Æ÷ÇÔ)¿Í ºÎµ¿»ê ¹× À¯Ã¼ Àç»ê»óÀÇ ¼ÕÇØ¿¡ ´ëÇØ¼­´Â IBM¿¡ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù. + +j. º» °è¾à ü°á ½Ã ¾î´À ´ç»çÀÚµµ ´ÙÀ½¿¡ °üÇÑ º¸ÁõÀ» Æ÷ÇÔÇÏ¿©(´Ü, ÀÌ¿¡ ÇÑÇÏÁö ¾ÊÀ½) º» °è¾à¿¡ ¸í½ÃµÇÁö ¾ÊÀº º¸ÁõÀ» ½Å·ÚÇÏÁö ¾Ê½À´Ï´Ù. 1) º» ÇÁ·Î±×·¥ ¼º´É ¶Ç´Â ±â´É, 2) Á¦3ÀÚÀÇ °æÇèÀ̳ª ±ÇÀå»çÇ× ¶Ç´Â 3) ¶óÀ̼¾½º »ç¿ëÀÚ°¡ ´Þ¼ºÇÒ ¼ö ÀÖ´Â °á°ú ¶Ç´Â ºñ¿ë Àý°¨. + +k. IBMÀº ƯÁ¤ ÇÁ·Î±×·¥À» Áö¿øÇÏ°í ¿µ¾÷À» ÃËÁøÇÏ°í ÆÇ¸ÅÇϱâ À§ÇØ Æ¯Á¤ Á¶Á÷("IBM ºñÁî´Ï½º ÆÄÆ®³Ê"¶ó°í ÇÔ)°úÀÇ °è¾à¿¡ µ¿ÀÇÇß½À´Ï´Ù. IBM ºñÁî´Ï½º ÆÄÆ®³Ê´Â IBM°ú´Â µ¶¸³ÀûÀÌ¸ç º°°³ÀÇ Á¶Á÷ÀÔ´Ï´Ù. IBMÀº IBM ºñÁî´Ï½º ÆÄÆ®³ÊÀÇ ÇàÀ§³ª ÀÇ»ç Ç¥½Ã ¶Ç´Â IBM ºñÁî´Ï½º ÆÄÆ®³ÊÀÇ ¶óÀ̼¾½º »ç¿ëÀÚ¿¡ ´ëÇÑ Àǹ«¿¡ ´ëÇØ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. + +l. ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBM°úÀÇ ±âŸ °è¾à(¿¹: IBM ±âº» °è¾à)ÀÇ ¶óÀ̼¾½º ¹× ÁöÀû Àç»ê±Ç ¸éÃ¥ Á¶Ç×Àº º» °è¾à¿¡ ÀǰÅÇÏ¿© ºÎ¿©µÈ ÇÁ·Î±×·¥ ¶óÀ̼¾½º¿¡ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. + +m. ¾ç ´ç»çÀÚ´Â »óÈ£ ±³È¯µÇ´Â ¸ðµç Á¤º¸´Â ±â¹ÐÁ¤º¸°¡ ¾Æ´Ï¶ó´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. ÀÏ¹æ ´ç»çÀÚ°¡ ±â¹ÐÁ¤º¸ÀÇ ±³È¯À» ÇÊ¿ä·Î ÇÏ´Â °æ¿ì, ¼­¸í ³¯ÀÎµÈ ±â¹ÐÁ¤º¸ ¼ö·ÉÇÕÀǼ­¸¦ ü°áÇØ¾ß ÇÕ´Ï´Ù. + +14. °è¾à Àû¿ë Áö¿ª°ú ÁذŹý + +14.1 ÁذŹý + +¾ç ´ç»çÀÚ´Â º» °è¾àÀ¸·ÎºÎÅÍ ¶Ç´Â º» °è¾à°ú °ü·ÃÇÏ¿© ¹ß»ýÇÑ ¶óÀ̼¾½º »ç¿ëÀÚ¿Í IBMÀÇ ¸ðµç ±Ç¸® ¹× Àǹ«¸¦ ÅëÁ¦, ÇØ¼® ¹× °­Á¦ÇÏ´Â µ¥ ÀÖ¾î ÁذŹý °áÁ¤ÀÇ ¿øÄ¢¿¡ °ü°è¾øÀÌ ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥ ¶óÀ̼¾½º¸¦ ÃëµæÇÑ ±¹°¡ÀÇ ¹ý·üÀÌ Àû¿ëµÈ´Ù´Â °Í¿¡ µ¿ÀÇÇÕ´Ï´Ù. + +±¹Á¦ ¹°Ç° ¸Å¸Å °è¾à¿¡ °üÇÑ À¯¿£ Çù¾à(United Nations Convention on Contracts for the International Sale of Goods)Àº Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. + +14.2 °üÇÒ±Ç + +¸ðµç ±Ç¸® ¹× Àǹ«¿¡ ´ëÇØ¼­´Â ¶óÀ̼¾½º »ç¿ëÀÚ°¡ º» ÇÁ·Î±×·¥ ¶óÀ̼¾½º¸¦ ÃëµæÇÑ ±¹°¡ÀÇ ¹ý¿ø¿¡ °üÇÒ±ÇÀÌ ÀÖ½À´Ï´Ù. + +Á¦ 2 ºÎ - ±¹°¡º° °íÀ¯ Á¶Ç× + +Çѱ¹ÀÇ °æ¿ì Àû¿ëµÇ´Â ±¹°¡º° °íÀ¯ Á¶Ç×ÀÌ ¾ø½À´Ï´Ù. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_lt b/charts/mq-devserver/LICENSE_locale/LICENSE_lt new file mode 100644 index 0000000..0ae01c1 --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_lt @@ -0,0 +1,284 @@ +LICENCIJOS INFORMACIJA + +Toliau nurodytos Programos licencijuojamos pagal ðias Licencijos informacijos sàlygas, kurios papildo Programos licencijos sàlygas, dël kuriø susitarë Klientas ir IBM. Jei Klientas anksèiau nëra sutikæs su Programai taikomomis licencijos sàlygomis, taikoma Programø kurioms neteikiama garantija tarptautinë licencinë sutartis (Z125-5589-05). + +Programos pavadinimas (Programos numeris): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Ðios standartinës sàlygos taikomos Licenciato Programos naudojimui. + +Sugrupuotos programos + +Programa yra licencijuojama kaip keliø produktø paketas ir apima toliau nurodytas Sugrupuotas programas. Licenciatas ágaliotas diegti ir naudoti ðias Sugrupuotas programas tik kaip nurodyta Programos Teisiø suteikimo dokumente ir ðiame Licencijos informacijos dokumente. Licenciatas nëra ágaliotas perduoti arba perparduoti Sugrupuotø programø atskirai nuo keliø produktø paketo. Sugrupuota programa gali bûti pateikiama su licencijos sàlygomis ir ðios sàlygos, jei tokiø yra, taikomos Sugrupuotà programà naudojanèiam Licenciatui. Ávykus ginèui ðiame Licencijos informacijos dokumente pateiktos sàlygos pakeièia Sugrupuotos programos sàlygas. Kai Licenciato teisë naudoti Programà baigiasi arba nutraukiama, Licenciatas privalo nutraukti naudojimà, sunaikinti arba nedelsdamas gràþinti visas Sugrupuotø programø kopijas ðaliai, ið kurios Licenciatas ásigijo Programà. Jeigu Licenciatas Sugrupuotas programas atsisiuntë, jis turi susisiekti su ðalimi, ið kurios Licenciatas ásigijo Programà. Jei Licenciatas nori licencijuoti Sugrupuotas programas naudoti ilgiau, nei nurodyta anksèiau, norëdami gauti atitinkamà licencijà, kreipkitës á IBM pardavimo atstovà arba ðalá, ið kurios Licenciatas ásigijo Programà. + +Toliau iðvardytos kartu su Programa licencijuotos Sugrupuotos programos: +IBM MQ V9.0.3 + +Kûrëjo ribojimas + +Jei Programa paþymëta kaip skirta ¥Kûrëjams´, Programà kûrëjo kompiuteryje galima diegti tik kaip Licenciato vidinio kûrimo ir árenginiø testavimo paskirties dalá. Kûrëjo kompiuteris ? tai fizinë arba kompiuterio virtualioji aplinka, kurioje veikia pagrindinë operacinë sistema ir Programa, prie kuriø prieigà turi ir kurias naudoja ne daugiau nei vienas nurodytas kûrëjas. Licenciatas neturi teisës naudoti Programos gamybos darbo krûviams apdoroti, gamybos darbo krûviams modeliuoti arba bet kurio kodo, taikomosios programos arba sistemos pritaikomumui tikrinti. Licenciatas neturi teisës naudoti bet kurios Programos dalies bet kokiais kitais tikslais, jei nëra ásigijæs atitinkamø gamybos teisiø. + +Suteikiant bûtinas teises nenaudojami komponentai + +Nustatant teisiø, reikalingø Licenciato Programai ádiegti arba naudoti, skaièiø, neatsiþvelgiama á toliau nurodytø Programos komponentø diegimà arba naudojimà. Kitaip tariant, Licenciatas gali diegti ir naudoti toliau nurodytus Programos komponentus pagal licencijos sàlygas, taèiau ðie komponentai nenaudojami Programai reikalingø teisiø skaièiui nustatyti. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Ðaltinio komponentai ir pavyzdinë medþiaga + +Á Programà gali bûti átraukti keli komponentai iðeitinio kodo forma (¥Ðaltinio komponentai´) ir kita medþiaga, apibrëþta kaip Pavyzdinë medþiaga. Licenciatas gali kopijuoti ir modifikuoti Ðaltinio komponentus ir Pavyzdinæ medþiagà tik naudoti viduje, jei toks naudojimas nepaþeidþia ðios Sutarties licencijos teisiø ir jei Licenciatas nekeièia ar nenaikina jokios Ðaltinio komponentuose ir Pavyzdinëje medþiagoje esanèios autoriaus teisiø informacijos ar praneðimø. IBM pateikia Ðaltinio komponentus ir Pavyzdinæ medþiagà be palaikymo ásipareigojimo ir TOKIÀ, KOKIA YRA, NESUTEIKIANT JOKIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ, ÁSKAITANT NUOSAVYBËS TEISËS, NEPAÞEIDÞIAMUMO AR NEÁSIKIÐIMO GARANTIJAS IR NENURODYTAS TINKAMUMO PREKIAUTI IR TAM TIKRAM TIKSLUI GARANTIJAS IR SÀLYGAS. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Programø kurioms neteikiama garantija tarptautinë licencinë sutartis + +1 dalis - bendrosios sàlygos + +ATSISIØSDAMAS, DIEGDAMAS, KOPIJUODAMAS, PASIEKDAMAS PROGRAMÀ, SPAUSDAMAS MYGTUKÀ ¥SUTINKU´ AR KITAIS BÛDAIS NAUDODAMAS PROGRAMÀ, LICENCIATAS SUTINKA SU ÐIOS SUTARTIES SÀLYGOMIS.JEIGU SU ÐIOS LICENCIJOS SÀLYGOMIS SUTINKATE LICENCIATO VARDU, JÛS PAREIÐKIATE IR GARANTUOJATE, KAD PRISIIMATE VISÀ ATSAKOMYBÆ UÞ ÐIØ SÀLYGØ LAIKYMÀSI. JEIGU NESUTINKATE SU ÐIOMIS SÀLYGOMIS, + +* NESIØSKITE, NEDIEKITE, NEKOPIJUOKITE, NEBANDYKITE PASIEKTI PROGRAMOS, NESPAUSKITE MYGTUKO ¥SUTINKU´ AR NESINAUDOKITE PROGRAMA; IR + +* NEDELSDAMI GRÀÞINKITE NENAUDOTAS LAIKMENAS IR DOKUMENTACIJÀ ÐALIAI, IÐ KURIOS JUOS GAVOTE, KAD SUSIGRÀÞINTUMËTE UÞ PROGRAMÀ SUMOKËTUS PINIGUS. JEI PROGRAMA BUVO ATSISIØSTA, SUNAIKINKITE VISAS PROGRAMOS KOPIJAS. + +1. Apibrëþimai + +¥Ágaliotasis naudojimas´ - numatytas lygis, apibrëþiantis, kaip Licenciatas ágaliotas paleisti ir vykdyti Programà. Ðis lygis gali bûti nustatomas pagal naudotojø skaièiø, paslaugø vienetø milijonus (MPV), procesoriaus vertës vienetus (PVV) arba kitus naudojimo lygius, kuriuos nurodo IBM. + +IBM - ¥International Business Machines Corporation´ arba vienas ið jos filialø. + +¥Licencijos informacija´ (LI) - dokumentas, kuriame pateikta specifinë informacija apie Programà ir papildomos sàlygos. Programos LI galima rasti internete adresu www.ibm.com/software/sla. LI taip pat galima rasti Programos kataloge, naudojant sisteminæ komandà, arba lankstinuke, kuris pridëtas prie Programos. + +¥Programa´ - ðie iðvardyti dalykai, jø originalai ir visos iðsamios arba dalinës kopijos: 1) kompiuterio skaitomos instrukcijos ir duomenys, 2) komponentai, failai ir moduliai, 3) garsinë ir vaizdinë medþiaga (pvz., vaizdai, tekstas, áraðai ar paveikslëliai), ir 4) susijusi licencijos medþiaga (tokia, kaip raktai ir dokumentacija). + +2. Sutarties struktûra + +Ðià sutartá sudaro: 1 dalis - bendrosios sàlygos, 2 dalis - konkreèiai ðaliai taikomos sàlygos (jei tokiø yra) ir LI. Tai yra galutinis susitarimas tarp Licenciato ir IBM dël naudojimosi Programa. Ji pakeièia bet koká ankstesná þodiná ar raðtiná bendravimà tarp Licenciato ir IBM, kuriø metu buvo aptariamas Licenciato naudojimasis Programa. 2 dalies sàlygos gali pakeisti 1 dalies sàlygas. Atsiradus bet kokiems prieðtaravimams, bus remiamasi LI. + +3. Licencijos suteikiamos teisës + +Programa yra IBM arba IBM platintojo nuosavybë, ginama autoriaus teisiø, naudojimuisi ja suteikiama licencija, bet ji nëra parduodama. + +IBM suteikia Licenciatui neiðimtinæ licencijà 1) naudotis Programa pagal Ágaliotojo naudojimo sàlygas, nurodytas sàskaitoje, 2) kurti ir diegti kopijas, kurios palaikytø Ágaliotàjá naudojimà, ir 3) kurti atsarginæ kopijà su sàlyga, kad + +a. Licenciatas teisëtai ásigijo Programà ir laikosi ðios Sutarties sàlygø; + +b. atsarginë kopija nepaleidþiama, nebent neveikia pati Programa, kurios atsarginë kopija sukurta; + +c. Licenciatas ant kiekvienos Programos iðsamios ar dalinës kopijos nurodo visà autoriaus teisiø informacijà bei kitus nuosavybës þenklus; + +d. Licenciatas uþtikrina, kad kiekvienas, kuris naudojasi Programa (vietine ar nuotoline prieiga) 1) naudojasi tik Licenciato vardu ir 2) laikosi ðios Sutarties sàlygø; + +e. Licenciatas 1) nenaudoja, nekopijuoja, nekeièia ir neplatina Programos, nebent tai aiðkiai leidþiama ðioje Sutartyje; 2) nebando iðardyti, dekompiliuoti, versti ar atkurti Programos kodo, nebent tai aiðkiai leidþia ástatymai ir nesuteikiama teisë atsisakyti sutartyse; 3) nenaudoja jokiø Programos komponentø, failø, moduliø, garsinio ir vaizdinio turinio ar susijusios licencijuotos medþiagos atskirai nuo Programos; ir 4) neiðduoda licencijos treèiajai ðaliai, nenuomoja ir iðperkamosios nuomos pagrindais nesuteikia Programos; ir + +f. jei Licenciatas ágyja ðià Programà kaip Pagalbinæ programà, Licenciatas naudoja ðià Programà tik kaip pagalbinæ priemonæ, palaikanèià Pagrindinæ programà, jai taikomi bet kokie Pagrindinës programos licencijos apribojimai, arba, jei Licenciatas ágyja ðià programà kaip Pagrindinæ programà, Licenciatas naudoja visas Pagalbines programas tik ðiai Programai palaikyti, jai taikomi bet kokie ðios Sutarties apribojimai. Ðiame punkte ¥f´ ¥Pagalbinë programa´ yra Programa, kuri yra kitos IBM Programos (¥Pagrindinës programos´) dalis ir kuri Pagrindinës programos LI yra nurodoma kaip Pagalbinë programa. (Norëdamas gauti atskirà Pagalbinës programos licencijà be ðiø apribojimø, Licenciatas turëtø susisiekti ðalimi, ið kurios ásigijo Pagalbinæ programà.) + +Ði licencija taikoma kiekvienai Licenciato padarytai Programos kopijai. + +3.1 Pakeitimai, atnaujinimai, pataisos ir taisymai + +3.1.1 Pakeitimai + +Jei Programa pakeièiama kita Programa, pakeistos Programos licencija yra nedelsiant nutraukiama. + +3.1.2 Atnaujinimai, pataisos ir taisymai + +Kai Licenciatas gauna Programos atnaujinimà, pataisà ar pataisymà, Licenciatas sutinka su bet kokiomis papildomomis ar skirtingomis sàlygomis, taikomomis ðiems atnaujinimas, pataisoms ar pataisymams, kurios yra nurodytos LI. Jei nepateikta jokiø papildomø ar pakeistø sàlygø, tuomet atnaujinimui, pataisai ar pataisymui taikomos tik ðios Sutarties sàlygos. Jei Programa pakeièiama atnaujinimu, Licenciatas sutinka nedelsdamas nutraukti pakeistos Programos naudojimà. + +3.2 Fiksuotos trukmës licencijos + +Jei IBM suteikia Programai ribotojo laikotarpio licencijà, Licenciato licencija baigia galioti, pasibaigus fiksuotam laikotarpiui, nebent Licenciatas ir IBM susitaria jà atnaujinti. + +3.3 Terminas ir nutraukimas + +Ði sutartis galioja tol, kol yra nutraukiama. + +IBM gali nutraukti Licenciato licencijà, jei Licenciatas nesilaiko Sutarties sàlygø. + +Jei licencija yra nutraukiama bet kurios ðalies iniciatyva dël bet kokios prieþasties, Licenciatas sutinka nedelsdamas nutraukti Programos naudojimà ir sunaikinti visas turimas Programos kopijas. Jei tam tikros Sutarties sàlygos dël savo pobûdþio iðlieka galioti po Sutarties nutraukimo, jos galioja, kol bus ávykdytos, ir taikomos abiejø ðaliø atitinkamiems teisiø perëmëjams ir ágaliotiniams. + +4. Mokëjimas + +Mokesèiai priklauso nuo Ágaliotojo naudojimo pobûdþio, kuris yra apraðytas sàskaitoje. IBM neteikia kreditø, jei vëluojama sumokëti, ir negràþina jau sumokëtø pinigø, iðskyrus atvejus, apraðytus Sutartyje. + +Jei Licenciatas nori iðplësti savo Ágaliotojo naudojimo ribas, Licenciatas turi ið anksto praneðti IBM arba ágaliotajam IBM atstovui ir apmokëti visas susijusias iðlaidas. + +5. Mokesèiai + +Jeigu kuri nors valdþios institucija taiko Programai muità, mokesèius ar kitokià rinkliavà, iðskyrus tuos, kurie skaièiuojami nuo IBM grynojo pelno, Licenciatas sutinka sumokëti sàskaitoje faktûroje nurodytà sumà arba pateikti atleidimo nuo mokesèiø dokumentus. Nuo Programos ásigijimo dienos Licenciatas yra atsakingas uþ bet kokius Programos nuosavybës mokesèius. Jeigu kuri nors valdþios institucija taiko muità, mokesèius ar kitokià rinkliavà uþ Programos importà, eksportà, persiuntimà, prieigà ar naudojimà uþ valstybës, kurioje Licenciatui suteikta licencija, ribø, Licenciatas sutinka sumokëti paskirtà sumà. + +6. Pinigø gràþinimo garantijos + +Jei pradinis Licenciatas dël kokiø nors prieþasèiø yra nepatenkintas Programa, Licenciatas gali per 30 dienø nuo sàskaitos iðraðymo datos nutraukti licencijà ir susigràþinti pinigus, kuriuos mokëjo uþ Programà, su sàlyga, kad Licenciatas gràþina Programà tai ðaliai, ið kurios jà ásigijo. Jei suteikta ribotojo laikotarpio licencija, kurià galima pratæsti, Licenciatas gali susigràþinti pinigus tik tuo atveju, jei Programa sugràþinta per pirmàsias 30 pirmojo termino dienø. Jeigu Licenciatas Programà atsisiuntë, jis turi susisiekti su jà iðdavusia ðalimi ir ið jos gauti pinigø susigràþinimo instrukcijas. + +7. Programos perleidimas + +Licenciatas gali perleisti Programà bei visas savo licencines teises ir ásipareigojimus kitai ðaliai tik tuo atveju, jei ta ðalis sutinka su ðios Sutarties sàlygomis. Jei kuri nors ðalis dël tam tikrø prieþasèiø licencijà nutraukia, Licenciatas nebegali perleisti Programos treèiajai ðaliai. Licenciatas negali perleisti dalies 1) Programos ar 2) Programos Ágaliotojo naudojimo. Perleisdamas Programà, Licenciatas kartu su LI taip pat privalo perleisti spausdintà ðios Sutarties kopijà. Ið karto po perleidimo Licenciato licencija yra nutraukiama. + +8. Garantijø atsisakymas + +PAGAL ÁSTATYMO NUSTATYTAS GARANTIJAS, KURIØ NEGALIMA NEÁTRAUKTI, ¥IBM´ NESUTEIKIA JOKIØ SU PROGRAMA AR PALAIKYMO PASLAUGOMIS (JEI TOKIOS TEIKIAMOS) SUSIJUSIØ AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ ARBA SÀLYGØ, ÁSKAITANT, BET NEAPSIRIBOJANT, NENURODYTAS TINKAMUMO PREKIAUTI, TINKAMUMO TAM TIKRAM TIKSLUI, NUOSAVYBËS TEISËS IR BET KOKIAS NEPAÞEIDÞIAMUMO GARANTIJAS ARBA SÀLYGAS. + +KAI KURIOSE VALSTYBËSE ARBA JURISDIKCIJOSE NELEIDÞIAMOS AIÐKIAI NURODYTØ AR NENURODYTØ GARANTIJØ IÐIMTYS, TODËL ÈIA NURODYTA IÐIMTIS LICENCIATUI GALI BÛTI NETAIKOMA. TOKIU ATVEJU ÐIØ GARANTIJØ TAIKYMAS APRIBOJAMAS MINIMALIA TEISËS AKTUOSE NUMATYTA TRUKME. ÐIAM LAIKOTARPIUI PRAËJUS NEBETAIKOMOS JOKIOS GARANTIJOS. KAI KURIOSE VALSTYBËSE AR JURISDIKCIJOSE NELEIDÞIAMA RIBOTI NUMANOMOS GARANTIJOS TRUKMËS, TODËL AUKÐÈIAU PATEIKTI APRIBOJIMAI LICENCIATUI GALI BÛTI NETAIKOMI.LICENCIATAS TAIP PAT GALI TURËTI KITØ TEISIØ, KURIOS SKIRSIS PRIKLAUSOMAI NUO VALSTYBËS ARBA JURISDIKCIJOS. + +8 SKYRIUJE NURODYTI PANEIGIMAI IR IÐIMTYS TAIP PAT TAIKOMI VISIEMS ¥IBM´ PROGRAMØ KÛRËJAMS IR TIEKËJAMS. + +NE ¥IBM´ PROGRAMØ GAMINTOJAI, TIEKËJAI ARBA LEIDËJAI GALI TEIKTI SAVO GARANTIJAS. + +¥IBM´ NETEIKIA JOKIO PALAIKYMO, JEI ¥IBM´ NENURODO KITAIP. TOKIU ATVEJU, BET KOKIAM ¥IBM´ SUTEIKTAM PALAIKYMUI TAIKOMOS 8 SKYRIUJE NURODYTØ PANEIGIMØ IR IÐIMÈIØ SÀLYGOS. + +9. Licenciato duomenys ir duomenø bazës + +Siekdama padëti Licenciatui iðspræsti su Programa susijusias problemas, IBM gali papraðyti, kad Licenciatas 1) leistø IBM nuotoliniu bûdu prisijungti prie Licenciato sistemos arba 2) atsiøstø savo informacijà ar sistemos duomenis á IBM. Taèiau IBM neprivalo teikti tokios pagalbos, nebent IBM ir Licenciatas pasiraðo atskirà susitarimà, kuriame IBM sutinka teikti Licenciatui tokio pobûdþio palaikymà, kuris nëra numatytas ðios Sutarties IBM ásipareigojimuose. Bet kokiu atveju IBM naudoja informacijà apie klaidas ir problemas savo produktams ir paslaugoms tobulinti ir techninei pagalbai teikti. Licenciatas sutinka su tokia IBM, IBM juridiniø asmenø ir subrangovø (veikianèiø ne tik Licenciato valstybëje) veikla. + +Licenciatas lieka atsakingas uþ 1) bet kokius duomenis ar kità bet kurios duomenø bazës turiná, kurá jis padaro prieinamà IBM, 2) duomenø prieigos, apsaugos, kodavimo, naudojimo bei duomenø perdavimo (áskaitant ir bet kokius asmeninius duomenis) procedûrø ir kontrolës pasirinkimà ir vykdymà ir 3) visø duomenø baziø ir visø saugomø duomenø atsarginiø kopijø sukûrimà bei jø atkûrimà. Licenciatas nesiøs ir nesuteiks IBM prieigos prie asmeninës informacijos, nepriklausomai nuo to, kokios formos ji yra, ir bus atsakingas uþ pagrástas iðlaidas, kurias IBM patirs dël tokios informacijos klaidingo perdavimo IBM arba jei IBM prarastø ar paskelbtø tokià informacijà, taip pat ir iðlaidas, susijusias su treèiøjø ðaliø iðkeltais ieðkiniais. + +10. Atsakomybës apribojimas + +Apribojimai, pateikti 10 skyriuje (Atsakomybës apribojimas) yra taikomi tiek, kiek leidþia taikomi ástatymai ir neleidþiama atsisakyti sutartyse. + +10.1 Dalykai, uþ kuriuos IBM atsakinga + +Gali susiklostyti tokios aplinkybës, kad dël IBM ar kitø ásipareigojimø nevykdymo Licenciatui bûtø suteikta teisë gauti þalos atlyginimà ið IBM. Neatsiþvelgiant á pagrindà, pagal kurá Licenciatas gauna teisæ reikalauti ið IBM atlyginti þalà (áskaitant esminá paþeidimà, aplaidumà, faktø iðkraipymà arba kità sutarties ar civilinës teisës paþeidimà), iðskyrus bet kokià atsakomybæ, kurios negalima atsisakyti arba apriboti remiantis atitinkamais ástatymais, visa IBM atsakomybë dël visø pretenzijø, susijusiø su kiekviena Programa, nevirðys 1) þalos dël kûno suþalojimo (áskaitant mirtá), þalos nekilnojamajam turtui ir materialiajam asmeniniam turtui atlyginimo; 2) bet kokios kitos faktinës tiesioginës þalos, áskaitant mokesèius (jei uþ Programà mokama fiksuotais terminais, taikomi 12 mënesiø mokesèiai) uþ Programà, dël kurios pateiktas ieðkinys. + +Ðis apribojimas taip pat taikomas visiems IBM Programos kûrëjams ir tiekëjams. Tai yra didþiausia IBM ir jos Programos kûrëjø ir tiekëjø kolektyvinës atsakomybës suma. + +10.2 Dalykai, uþ kuriuos IBM nëra atsakinga + +JOKIU ATVEJU IBM, JOS PROGRAMOS KÛRËJAI AR TIEKËJAI NËRA ATSAKINGI UÞ ÐIUOS DALYKUS, NET JEI JIEMS BUVO PRANEÐTA APIE TOKIØ APLINKYBIØ ATSIRADIMO GALIMYBÆ: + +a. DUOMENØ PRARADIMÀ AR SUGADINIMÀ; + +b. SPECIALIUOSIUS, ATSITIKTINIUS, BAUDINIUS AR NETIESIOGINIUS NUOSTOLIUS, ARBA BET KOKIUS PRIEÞASTINIUS EKONOMINIUS NUOSTOLIUS; ARBA + +c. PRARASTÀ PELNÀ, VERSLÀ, PAJAMAS, PRESTIÞÀ AR PLANUOTAS SUTAUPYTI LËÐAS. + +11. Sàlygø laikymosi tikrinimas + +11 skyriuje (Sàlygø laikymosi tikrinimas), ¥ILAN Programos sàlygos¡ reiðkia 1) ðià Sutartá ir jos pataisymus bei IBM pateiktus sandorio dokumentus, ir 2) IBM programinës árangos politikà, kurià galima rasti IBM Programinës árangos politikos svetainëje (www.ibm.com/softwarepolicies), áskaitant, bet neapsiribojant, politikà, susijusià su atsarginëmis kopijomis, pagalbinës talpos kainø nustatymu bei informacijos perkëlimu. + +11 skyriuje pateikiamos teisës ir ásipareigojimai taikomi visà Programos licencijos galiojimo laikà bei dvejus metus pasibaigus galiojimui. + +11.1 Tikrinimo procesas + +Licenciatas sutinka sukurti, iðsaugoti ir pateikti IBM bei jos auditoriams tikslias raðytines ataskaitas, sistemos árankiø iðvestis ir kità sistemos informacijà, kuri leistø ávertinti, ar Licenciatas, naudodamasis visomis Programomis, laikosi ILAN programos sàlygø, áskaitant, bet neapsiribojant, visas IBM licencijavimo ir kainø nustatymo sàlygas. Licenciatas yra atsakingas, kad 1) tai nevirðytø jo Ágaliotojo naudojimo ribø ir 2) atitiktø ILAN Programos sàlygas. + +Priimtinai perspëjusi, IBM gali patikrinti, kaip Licenciatas laikosi ILAN programos sàlygø visose darbo vietose ir visose aplinkose, kuriose Licenciatas naudojasi Programomis (bet kokiu tikslu), kurioms taikomos ILAN programos sàlygos. Toks patikrinimas bus atliktas taip, kad kuo maþiau sutrikdytø Licenciato veiklà, ir gali bûti atliekamas Licenciato patalpose darbo valandomis. Tikrinti IBM gali samdyti nepriklausomà treèiàjá asmená, jei IBM ir treèiasis asmuo yra pasiraðæ konfidencialumo sutartá. + +11.2 Sprendimas + +Jei tikrinimo metu paaiðkës, kad Licenciatas naudojosi kuria nors Programa, virðydamas Ágaliotojo naudojimo ribas, ar kitu bûdu nesilaikë ILAN programos sàlygø, IBM praneð apie tai Licenciatui raðtu. Licenciatas sutinka nedelsdamas tiesiogiai IBM padengti iðlaidas, kurias IBM nurodo sàskaitoje faktûroje, uþ 1) bet koká naudojimosi pervirðá, 2) palaikymà, suteiktà ðiam pervirðiui per naudojimo laikotarpá arba dvejus metus, atsiþvelgiant á tai, kuris laikotarpis trumpesnis, ir 3) kitas iðlaidas bei ásipareigojimus, nustatytus tikrinimo metu. + +12. Treèiøjø ðaliø pastabos + +Programoje gali bûti treèiøjø ðaliø kodas, kurá IBM, ne treèioji ðalis, suteikia Licenciatui, remdamasi ðia Sutartimi. Jei yra pastabø apie treèiøjø ðaliø kodà (¥Treèiøjø ðaliø pastabos¡), jos átrauktos tik Licenciatui informuoti. Ðios pastabos pateikiamos Programos faile (-uose) PASTABOS. Informacija, kaip gauti ðaltinio kodà tam tikram treèiosios ðalies kodui, pateikta skyriuje ¥Treèiøjø ðaliø pastabos¡. Jei Treèiøjø ðaliø pastabose IBM treèiosios ðalies kodà nurodo kaip ¥Modifikuojamà treèiosios ðalies kodà¡, IBM leidþia Licenciatui 1) modifikuoti Modifikuojamà treèiosios ðalies kodà ir 2) atkurti kodà tø Programos moduliø, kurie tiesiogiai siejasi su Modifikuojamu treèiosios ðalies kodu, su sàlyga, kad tai daroma tik norint suderinti Licenciato modifikacijas su treèiosios ðalies kodu. IBM aptarnavimo ir techninës pagalbos ásipareigojimai, jei tokie yra, taikomi tik nemodifikuotai Programai. + +13. Bendrosios nuostatos + +a. Joks ðios Sutarties punktas neturi átakos ástatymø numatytoms vartotojø teisëms, kurias sutartis galëtø panaikinti ar apriboti. + +b. Tais atvejais, kai Licenciatui IBM Programas pateikia materialios formos, IBM savo siuntimo ir pristatymo ásipareigojimus ávykdo, perdavusi Programas IBM paskirtam veþëjui, nebent Licenciatas ir IBM raðtu susitarë kitaip. + +c. Jeigu kuri nors ðios Sutarties nuostata laikoma netekusi galios ar neturinti ieðkinio galios, kitos ðios Sutarties nuostatos lieka galioti. + +d. Licenciatas sutinka laikytis visø taikomø eksporto ir importo ástatymø bei taisykliø, tarp jø JAV embargo ir sankcijø taisykliø bei eksporto draudimø tam tikriems galutiniams vartotojams. + +e. Licenciatas ágalioja ¥International Business Machines Corporation´ ir jos filialus (bei jø teisiø perëmëjus, rangovus ir IBM verslo partnerius) laikyti ir naudoti Licenciato verslo sandorio informacijà, neatsiþvelgiant á sandoriø vietà, susijusià su IBM produktais ir paslaugomis, arba IBM ir Licenciato verslo ryðiams palaikyti. + +f. Kiekviena ðalis, prieð iðkeldama ieðkiná kitai ðaliai dël Sutarties ásipareigojimø nevykdymo, pirmiausia suteikia galimybæ ávykdyti tuos ásipareigojimus. Ðalys bando gera valia iðspræsti iðkilusius ginèus, nesutarimus ar ieðkinius, susijusius su ðia Sutartimi. + +g. Jei kitaip nereikalauja taikomi ástatymai, ir tai nepanaikina bei neapriboja sutarties ásipareigojimø, 1) në viena ðalis nesiims jokiø teisiniø veiksmø dël jokio ieðkinio, susijusio su ðia Sutartimi, jei yra praëjæ dveji metai nuo ávykio pradþios; ir 2) pasibaigus ðiam terminui bet koks ieðkinys ir su juo susijusios atitinkamos teisës netenka galios. + +h. Nei Licenciatas, nei IBM neatsako uþ savo ásipareigojimø nevykdymà dël nuo ðaliø nepriklausanèiø prieþasèiø. + +i. Ðioje Sutartyje nenumatomos jokios treèiøjø ðaliø teisës ar veiksmai, ir IBM nëra atsakinga uþ jokius treèiøjø ðaliø ieðkinius, pateiktus Licenciatui, iðskyrus atvejus, nurodytus 10.1 poskyryje (Dalykai, uþ kuriuos IBM atsakinga), kai IBM juridiðkai atsako treèiajai ðaliai uþ kûno suþalojimus (taip pat mirtá) ar turtinæ þalà. + +j. Pasiraðydamos ðià Sutartá, në viena ðalis nesitiki ásipareigojimø vykdymo, nenumatyto Sutartyje, áskaitant, bet neapsiribojant, ásipareigojimus, susijusius su: 1) Programos veikimu; 2) kitø ðaliø patirtimi ar rekomendacijomis; arba 3) bet kokiais Licenciato gautais rezultatais. + +k. Programoms reklamuoti, parduoti ar aptarnauti IBM yra pasiraðiusi sutartis su tam tikromis organizacijomis (vadinamomis IBM verslo partneriais). IBM verslo partneriai yra nepriklausomos ir atskirai nuo IBM veikianèios institucijos. IBM nëra atsakinga uþ IBM verslo Partneriø veiksmus ar pareiðkimus, ar jø ásipareigojimus Licenciatui. + +l. Licencijos ir intelektinës nuosavybës nuostoliø kompensacijos sàlygos, nurodytos kitose Licenciato sutartyse su IBM (tokiose, kaip IBM kliento sutartis) netaikomos ðios Sutarties suteikiamos Programos licencijoms. + +m. Abi ðalys sutinka, kad visa informacija, kuria pasikeièiama, yra nekonfidenciali. Jei bet kuri ið ðaliø pageidauja keistis konfidencialia informacija, tai bus atliekama remiantis pasiraðyta sutartimi dël konfidencialumo; + +14. Geografinë veiklos sfera ir taikoma teisë + +14.1 Taikoma teisë + +Abi ðalys sutinka, kad vykdydamos, aiðkindamos ir ágyvendindamos visas Licenciato ir IBM teises, prievoles ir ásipareigojimus, kylanèius ar susijusius su ðios Sutarties turiniu, taikys valstybës, kurioje Licenciatas ásigijo Programos licencijà, ástatymus, nepaisant teisës principø prieðtaravimø. + +Jungtiniø Tautø Konvencija dël tarptautiniø prekiø pirkimo ir pardavimo sutarèiø netaikoma. + +14.2 Jurisdikcija + +Visos teisës, prievolës ir ásipareigojimai yra pavaldûs Valstybës, kurioje Licenciatas ágijo Programos licencijà, teismams. + +2 dalis - konkreèiai ðaliai taikomos sàlygos + +Ðios sàlygos pakeièia arba modifikuoja Lietuvoje suteiktø licencijø sàlygas, nurodytas 1 dalyje. Visos 1 dalyje nurodytos sàlygos, kuriø ðios pataisos nepakeièia, iðlieka nepakeistos ir galiojanèios. 2 dalis iðdëstoma taip: + +* 1 dalies 14 skyriaus (Taikoma teisë ir jurisdikcija) su ðalimis susijusios pataisos ir + +* Europos, Viduriniø Rytø ir Afrikos ðalyse taikomos kitø Sutarties sàlygø pataisos. + +1 dalies 14 skyriaus (Taikoma teisë ir jurisdikcija) su ðalimis susijusios pataisos + +14.1 Taikoma teisë + +Skyriaus ¥14.1 Taikoma teisë´ 1 pastraipos frazë ¥valstybës, kurioje Licenciatas ásigijo Programos licencijà, ástatymus´ Lietuvoje pakeièiama ðiomis frazëmis: + +Suomijos ástatymus. + +14.3 Arbitraþas + +Ði pastraipa pridedama kaip naujas poskyris ¥14.3 Arbitraþas´, nes ji taikoma Lietuvoje. Ðio 14.3 poskyrio nuostatos turi aukðtesnæ teisinæ galià nei poskyrio 14.2 Jurisdikcija nuostatos iki ribos, numatytos taikomuose vietos teisës aktuose ir reglamentuose: + +Visi su ðia Sutartimi susijæ ginèai bus galutinai sprendþiami arbitraþo teisme, kuris vyks Helsinkyje, Suomijoje, remiantis tuo metu galiojanèiais Suomijos arbitraþo teisës aktais. Kiekviena ðalis paskirs vienà arbitrà. Arbitrai kartu paskirs pirmininkà. Jei arbitrams nepavyks susitarti ir paskirti pirmininko, já paskirs Helsinkio centriniai pramonës ir prekybos rûmai. + +EUROPOS, VIDURINIØ RYTØ IR AFRIKOS (EMEA) ÐALIMS TAIKOMOS PATAISOS + +EUROPOS SÀJUNGOS VALSTYBËS NARËS + +8. Garantijø atsisakymas + +Prie skyriaus ¥8. Garantijø atsisakymas´ pridedama ði informacija: + +Europos Sàjungoje (ES) vartotojai turi juridines teises, kurios apibrëþiamos pagal vietos teisës aktus, taikomus plataus vartojimo prekiø pardavimui. Nuostatos, iðvardytos ðiame skyriuje ¥8. Garantijø atsisakymas´, ðioms teisëms neturi jokios átakos. + +ES VALSTYBËS NARËS IR TOLIAU NURODYTOS ÐALYS + +Bet kuri Europos valstybë, kurioje taikomi vietiniai duomenø apsaugos teisës aktai, panaðûs á taikomus ES. + +13. Bendrosios nuostatos + +13.e punktà pakeièia tokia informacija: + +(1) Apibrëþtys - ðiam 13.e punktui taikomos tokios papildomos apibrëþtys: + +(a) Verslo kontaktinë informacija - su verslu susijusi kontaktinë informacija, kurià Licenciatas pateikia IBM: Licenciato darbuotojø ir subrangovø vardai, pareigos, darbo vietø adresai, telefono numeriai ir el. paðto adresai. Austrijoje, Italijoje ir Ðveicarijoje verslo kontaktinë informacija apima ir informacijà apie Licenciatà ir jo subrangovus kaip juridinius asmenis (pavyzdþiui, duomenis apie Licenciato pajamas ir kità su sandoriais susijusià informacijà). + +(b) Verslo kontaktiniai asmenys - Licenciato darbuotojai ir subrangovai, su kuriais susijusi verslo kontaktinë informacija. + +(c) Duomenø apsaugos institucija - institucija, ásteigta remiantis konkreèios ðalies duomenø apsaugos ir elektroniniø ryðiø teisës aktais, arba ne ES ðalies institucija, atsakinga uþ asmens duomenø apsaugà toje ðalyje, arba (bet kurioje ið anksèiau paminëtø ðaliø) tinkama tvarka paskirtas tokias pareigas perimantis subjektas. + +(d) Duomenø apsauga ir elektroniniø ryðiø taisës aktai - (i) taikomi galiojantys vietos teisës aktai ir nuostatos, pagal kurias vykdomi ES direktyvos 95/46/EB (dël asmenø apsaugos tvarkant asmens duomenis ir dël laisvo tokiø duomenø judëjimo) ir ES direktyvos 2002/58/EB (dël asmens duomenø tvarkymo ir privatumo apsaugos elektroniniø ryðiø sektoriuje) reikalavimai, arba (ii) ne ES ðaliø teisës aktai ir (arba) nuostatos, susijusios su asmens duomenø apsauga ir elektroniniø ryðiø, kuriems naudojami asmens duomenys, reguliavimu, áskaitant (bet kurioje ið anksèiau paminëtø ðaliø) visus ástatymø nustatytus pakeitimus arba modifikacijas. + +(e) IBM grupë - ¥International Business Machines Corporation´, esanti JAV, Niujorko valstijos mieste Armonke, jos filialai ir atitinkami verslo partneriai bei subrangovai. + +(2) Licenciatas suteikia IBM teisæ: + +(a) apdoroti ir naudoti verslo kontaktinæ informacijà IBM grupëje teikiant Licenciatui palaikymo paslaugas ir siekiant toliau palaikyti verslo ryðius tarp Licenciato ir IBM grupës, áskaitant, be apribojimø, kreipimàsi á verslo kontaktiná asmená (el. paðtu ar kitu bûdu) ir IBM grupës produktø ir paslaugø pardavimà (¥Nurodytas tikslas´), ir + +(b) atskleisti verslo kontaktinio asmens informacijà kitiems IBM grupës nariams tik siekiant Nurodyto tikslo. + +(3) IBM sutinka, kad visa verslo kontaktinë informacija bus apdorojama laikantis duomenø apsaugos ir elektroniniø ryðiø teisës aktø ir naudojama tik Nurodytu tikslu. + +(4) Iki duomenø apsaugos ir elektroniniø ryðiø teisës aktø nustatytos ribos Licenciatas patvirtina, kad (a) gavo (arba gaus) visus sutikimus ið verslo kontaktiniø asmenø ir jiems pateikë (arba pateiks) visus praneðimus, bûtinus norint leisti IBM grupei apdoroti ir naudoti verslo kontaktinæ informacijà Nurodytu tikslu. + +(5) Licenciatas suteikia IBM teisæ perduoti verslo kontaktinæ informacijà uþ Europos ekonominës zonos ribø, jei toks perdavimas vykdomas pagal sutarties sàlygas, kurias patvirtino duomenø apsaugos institucija, arba jei toká perdavimà leidþia duomenø apsaugos ir elektroniniø ryðiø teisës aktai. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_pl b/charts/mq-devserver/LICENSE_locale/LICENSE_pl new file mode 100644 index 0000000..c30ba6b --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_pl @@ -0,0 +1,284 @@ +INFORMACJE LICENCYJNE + +Programy wymienione poni¿ej s± licencjonowane na podstawie przedstawionych poni¿ej warunków Informacji licencyjnych, które stanowi± uzupe³nienie warunków licencji na Program uzgodnionych uprzednio miêdzy Klientem a IBM. Je¶li Klient nie dysponuje warunkami licencji uzgodnionymi uprzednio z IBM w odniesieniu do Programu, zastosowanie maj± warunki licencji Miêdzynarodowa Umowa Licencyjna na Programy nieobjête Gwarancj± (Z125-5589-05). + +Nazwa Programu (Numer Programu): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Poni¿sze standardowe warunki maj± zastosowanie do u¿ywania Programu przez Licencjobiorcê. + +Programy Pakietowe + +Program jest licencjonowany w postaci pakietu wieloproduktowego, zawieraj±cego Programy Pakietowe okre¶lone poni¿ej. Licencjobiorca jest upowa¿niony do zainstalowania i u¿ywania takich Programów Pakietowych jedynie w zakresie ograniczeñ nak³adanych przez dokumenty Proof of Entitlement dla Programu oraz zgodnie z niniejszym dokumentem "Informacje Licencyjne". Licencjobiorca nie jest upowa¿niony do przenoszenia ani odsprzeda¿y Programów Pakietowych oddzielnie od pakietu wieloproduktowego. Do Programu Pakietowego mog± byæ do³±czone warunki licencji. W takim przypadku warunki te maj± zastosowanie do u¿ywania takiego Programu Pakietowego przez Licencjobiorcê. W przypadku sprzeczno¶ci miêdzy warunkami niniejszych Informacji licencyjnych a warunkami licencji Programu Pakietowego znaczenie rozstrzygaj±ce maj± warunki niniejszych Informacji licencyjnych. Kiedy prawo Licencjobiorcy do korzystania z Programu wyga¶nie lub zostanie mu wypowiedziane, Licencjobiorca musi zaprzestaæ korzystania z Programów Pakietowych oraz zniszczyæ lub niezw³ocznie zwróciæ wszystkie ich egzemplarze do strony, od której Licencjobiorca naby³ Program. Je¶li Licencjobiorca pobra³ Programy Pakietowe, powinien skontaktowaæ siê ze stron±, od której naby³ Program. Je¶li Licencjobiorca zamierza licencjonowaæ Programy Pakietowe w celu u¿ywania nieobjêtego ograniczeniami wyszczególnionymi powy¿ej, powinien skontaktowaæ siê z przedstawicielem handlowym IBM lub z podmiotem, od którego naby³ Program, w celu uzyskania odpowiedniej licencji. + +Poni¿ej wymieniono Programy Pakietowe licencjonowane z Programem: +IBM MQ V9.0.3 + +Ograniczenie dotycz±ce produktów dla programistów + +Je¶li Program jest oznaczony jako przeznaczony dla "Programistów", to mo¿e zostaæ zainstalowany na maszynie programisty jedynie do wewnêtrznych celów Licencjobiorcy zwi±zanych z programowaniem lub testami jednostkowymi. "Maszyna programisty" to fizyczne lub wirtualne ¶rodowisko pulpitu, w którym uruchamiane s± g³ówny system operacyjny oraz Program, przy czym zarówno g³ówny system operacyjny, jak i Program mog± byæ u¿ywane przez maksymalnie jednego okre¶lonego programistê. Licencjobiorca nie jest upowa¿niony do u¿ywania Programu w celu przetwarzania i symulowania obci±¿eñ produkcyjnych ani do testowania skalowalno¶ci dowolnego kodu, aplikacji czy systemu. Licencjobiorca nie jest upowa¿niony do u¿ywania jakiejkolwiek czê¶ci Programu do ¿adnych innych celów, chyba ¿e nabêdzie odpowiednie upowa¿nienie do u¿ywania do celów produkcyjnych. + +Komponenty nieu¿ywane do ustanawiania wymaganych uprawnieñ + +Przy ustalaniu liczby uprawnieñ wymaganych do instalowania lub u¿ywania Programu przez Licencjobiorcê nie bierze siê pod uwagê instalowania lub u¿ywania nastêpuj±cych komponentów Programu. Innymi s³owy, Licencjobiorca mo¿e zainstalowaæ nastêpuj±ce komponenty Programu i u¿ywaæ ich zgodnie z warunkami licencji, ale komponenty te nie mog± byæ u¿ywane do okre¶lania liczby uprawnieñ wymaganych dla Programu. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Komponenty ¬ród³owe i Materia³y Przyk³adowe + +Program mo¿e zawieraæ komponenty w postaci kodu ¼ród³owego (zwane dalej "Komponentami ¬ród³owymi") oraz inne materia³y okre¶lone jako Materia³y Przyk³adowe. Licencjobiorca mo¿e kopiowaæ i modyfikowaæ Komponenty ¬ród³owe i Materia³y Przyk³adowe jedynie na u¿ytek wewnêtrzny, pod warunkiem, ¿e u¿ytek taki mie¶ci siê w granicach praw licencyjnych na mocy niniejszej Umowy, za¶ Licencjobiorca nie bêdzie zmieniaæ ani usuwaæ ¿adnych informacji czy uwag o prawach autorskich zawartych w Komponentach ¬ród³owych lub Materia³ach Przyk³adowych. IBM dostarcza Komponenty ¬ród³owe i Materia³y Przyk³adowe bez zobowi±zania do wsparcia, W STANIE, W JAKIM SIÊ ZNAJDUJ¡ ("AS IS"), BEZ UDZIELANIA JAKICHKOLWIEK GWARANCJI (RÊKOJMIÊ RÓWNIE¯ WY£¡CZA SIÊ), WYRA¬NYCH LUB DOMNIEMANYCH, A W SZCZEGÓLNO¦CI GWARANCJI PRAWA W£ASNO¦CI, NIENARUSZANIA PRAW OSÓB TRZECICH ORAZ DOMNIEMANYCH GWARANCJI i WARUNKÓW PRZYDATNO¦CI HANDLOWEJ I PRZYDATNO¦CI DO OKRE¦LONEGO CELU. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Miêdzynarodowa Umowa Licencyjna na Programy nieobjête Gwarancj± + +Czê¶æ 1 - Warunki ogólne + +POBIERANIE, INSTALOWANIE, KOPIOWANIE, OTWIERANIE, KLIKANIE PRZYCISKU "AKCEPTUJÊ" ORAZ U¯YWANIE PROGRAMU W JAKIKOLWIEK INNY SPOSÓB OZNACZA AKCEPTACJÊ WARUNKÓW NINIEJSZEJ UMOWY. ZAAKCEPTOWANIE PRZEZ U¯YTKOWNIKA NINIEJSZYCH WARUNKÓW W IMIENIU LICENCJOBIORCY OZNACZA, ¯E U¯YTKOWNIK GWARANTUJE POSIADANIE PE£NYCH UPRAWNIEÑ DO PODPORZ¡DKOWANIA LICENCJOBIORCY NINIEJSZYM WARUNKOM. JE¦LI U¯YTKOWNIK NIE WYRA¯A ZGODY NA NINIEJSZE WARUNKI, + +* NIE BÊDZIE POBIERAÆ, INSTALOWAÆ, KOPIOWAÆ, OTWIERAÆ, KLIKAÆ PRZYCISKU "AKCEPTUJÊ" ANI U¯YWAÆ PROGRAMU W INNY SPOSÓB; ORAZ + +* NATYCHMIAST ZWRÓCI NIEWYKORZYSTANE NO¦NIKI ORAZ DOKUMENTACJÊ PODMIOTOWI, OD KTÓREGO NABY£ PROGRAM, ABY UZYSKAÆ ZWROT EWENTUALNEJ ZAP£ACONEJ KWOTY. JE¦LI PROGRAM ZOSTA£ POBRANY, NALE¯Y ZNISZCZYÆ WSZELKIE JEGO KOPIE. + +1. Definicje + +"Autoryzowane U¿ywanie" - okre¶la poziom upowa¿nienia Licencjobiorcy do wykonywania lub uruchamiania Programu. Poziom ten mo¿e byæ mierzony liczb± u¿ytkowników, liczb± milionów jednostek serwisowych (millions of service units - MSU), liczb± procesorowych jednostek warto¶ci (Processor Value Units - PVU) lub w inny sposób okre¶lony przez IBM. + +"IBM" - oznacza International Business Machines Corporation lub jedno z przedsiêbiorstw podporz±dkowanych IBM Corp. + +"Informacje Licencyjne" ("LI") - oznaczaj± dokument zawieraj±cy informacje i inne warunki dodatkowe na temat Programu. Dokument "Informacje Licencyjne" dla Programu jest dostêpny pod adresem: www.ibm.com/software/sla. Informacje Licencyjne mo¿na te¿ znale¼æ w katalogu Programu, u¿ywaj±c komend systemowych. Dokument ten mo¿e te¿ byæ zawarty w Programie. + +"Program" - oznacza orygina³ oraz pe³ne lub czê¶ciowe kopie: 1) instrukcji i danych w formie zapisu maszynowego, 2) komponentów, plików i modu³ów, 3) zapisów audiowizualnych (takich jak obrazy, tekst, nagrania lub ilustracje), 4) odnosz±cych siê do Programu materia³ów licencjonowanych (takich jak klucze i dokumentacja). + +2. Struktura Umowy + +Niniejsza Umowa zawiera Czê¶æ 1 - Warunki ogólne, Czê¶æ 2 - Warunki specyficzne dla poszczególnych krajów (o ile maj± zastosowanie) oraz Informacje Licencyjne, które razem tworz± kompletn± umowê miêdzy Licencjobiorc± i IBM dotycz±c± u¿ywania Programu. Umowa ta zastêpuje wszelkie wcze¶niejsze ustne lub pisemne ustalenia dokonane miêdzy Licencjobiorc± i IBM w zakresie u¿ywania Programu. W przypadku jakiejkolwiek sprzeczno¶ci, warunki dokumentu "Informacje Licencyjne" maj± znaczenie rozstrzygaj±ce nad warunkami obu Czê¶ci. + +3. Udzielenie licencji + +Program ten jest w³asno¶ci± IBM lub dostawcy IBM. Program ten jest chroniony prawem autorskim i stanowi przedmiot umowy licencyjnej, a nie umowy sprzeda¿y. + +IBM udziela Licencjobiorcy niewy³±cznej licencji na 1) u¿ywanie Programu do poziomu Autoryzowanego U¿ywania okre¶lonego na fakturze, 2) wykonywanie i instalowanie kopii na potrzeby takiego Autoryzowanego U¿ywania oraz 3) wykonywanie kopii zapasowych, pod warunkiem ¿e + +a. Licencjobiorca naby³ Program legalnie i przestrzega warunków niniejszej Umowy; + +b. taka kopia zapasowa nie bêdzie u¿ywana dopóki Program, z którego zosta³a zrobiona, bêdzie dzia³aæ; + +c. Licencjobiorca powieli wszelkie uwagi dotycz±ce praw autorskich oraz wszelkie informacje o prawach w³asno¶ci na ka¿dej pe³nej lub czê¶ciowej kopii Programu; + +d. Licencjobiorca zapewni, ¿e jakakolwiek osoba korzystaj±ca z Programu (lokalnie lub zdalnie) 1) dokonuje tego jedynie w imieniu Licencjobiorcy oraz 2) przestrzega warunków niniejszej Umowy; + +e. Licencjobiorca nie bêdzie 1) u¿ywaæ, kopiowaæ, modyfikowaæ ani dystrybuowaæ Programu z wyj±tkiem sytuacji wyra¼nie wskazanych w niniejszej Umowie; 2) deasemblowaæ, dekompilowaæ Programu i dokonywaæ jego translacji w inny sposób ani odtwarzaæ kodu ¼ród³owego, z wyj±tkiem sytuacji dozwolonych przez bezwzglêdnie obowi±zuj±ce przepisy prawa, bez mo¿liwo¶ci wy³±czenia go w drodze umowy; 3) u¿ywaæ jakichkolwiek komponentów Programu, jego plików, modu³ów, tre¶ci audiowizualnych ani zwi±zanych z nim materia³ów licencjonowanych niezale¿nie od Programu; 4) udzielaæ dalszych licencji na Program, wypo¿yczaæ go ani wydzier¿awiaæ; oraz + +f. je¶li Licencjobiorca nabywa niniejszy Progam jako Progam Dodatkowy, to bêdzie go u¿ywaæ jedynie do obs³ugi Programu G³ównego, zgodnie z ograniczeniami okre¶lonymi w licencji na Program G³ówny lub, je¶li Licencjobiorca nabywa Program jako Program G³ówny, to bêdzie u¿ywaæ wszystkich Programów Dodatkowych jedynie w celu obs³ugi tego Programu, zgodnie z ograniczeniami okre¶lonymi w niniejszej Umowie. Na potrzeby punktu "f" przyjmuje siê, ¿e "Program Dodatkowy" oznacza Program stanowi±cy czê¶æ innego Programu IBM ("Program G³ówny"), okre¶lany jako Program Dodatkowy w Informacjach Licencyjnych dla Programu G³ównego. (W celu nabycia oddzielnej licencji na u¿ywanie Programu Dodatkowego bez ograniczeñ, Licencjobiorca powinien skontaktowaæ siê z podmiotem, od którego naby³ Program Dodatkowy). + +Niniejsza licencja ma zastosowanie do ka¿dej kopii Programu wykonanej przez Licencjobiorcê. + +3.1 Nowsze wersje Programu, aktualizacje i poprawki + +3.1.1 Nowsze wersje Programu + +Je¶li Program zostanie zast±piony Programem nowszej wersji, licencja na zastêpowany Program wygasa ze skutkiem natychmiastowym. + +3.1.2 Aktualizacje i poprawki + +Otrzymanie przez Licencjobiorcê aktualizacji lub poprawek do Programu oznacza, ¿e Licencjobiorca akceptuje wszelkie dodatkowe lub odmienne warunki maj±ce zastosowanie do takich aktualizacji i poprawek, okre¶lone w Informacjach Licencyjnych dla Programu. W przypadku braku dodatkowych lub odmiennych warunków, aktualizacje i poprawki podlegaj± wy³±cznie postanowieniom niniejszej Umowy. Je¶li Program zostanie zast±piony aktualizacj±, Licencjobiorca wyra¿a zgodê na natychmiastowe zaprzestanie korzystania z zastêpowanej wersji Programu. + +3.2 Licencje czasowe + +Je¶li IBM licencjonuje Program na wyznaczony termin, to licencja udzielona Licencjobiorcy koñczy siê wraz z koñcem wyznaczonego terminu, chyba ¿e Licencjobiorca i IBM wyra¿± zgodê na jej odnowienie. + +3.3 Czas trwania i rozwi±zanie + +Niniejsza Umowa obowi±zuje do momentu jej rozwi±zania. + +IBM mo¿e rozwi±zaæ licencjê udzielon± Licencjobiorcy, je¶li Licencjobiorca nie bêdzie przestrzegaæ warunków niniejszej Umowy. + +Je¶li licencja zostanie rozwi±zana przez któr±kolwiek ze Stron z dowolnej przyczyny, Licencjobiorca wyra¿a zgodê na natychmiastowe zaprzestanie u¿ywania Programu oraz zniszczenie wszelkich posiadanych jego kopii. Wszelkie postanowienia niniejszej Umowy, które ze wzglêdu na swój charakter pozostaj± w mocy po jej rozwi±zaniu, bêd± mieæ zastosowanie do momentu ich wype³nienia i obowi±zywaæ bêd± nastêpców prawnych i cesjonariuszy obu Stron. + +4. Op³aty + +Ewentualne op³aty s± naliczane na podstawie nabytego poziomu Autoryzowanego U¿ywania, okre¶lonego na fakturze. IBM nie zwraca wcze¶niej wniesionych lub nale¿nych op³at ani nie uwzglêdnia ich w rozliczeniach, chyba ¿e niniejsza Umowa stanowi inaczej. + +Je¶li Licencjobiorca zamierza podwy¿szyæ poziom Autoryzowanego U¿ywania, musi on powiadomiæ z wyprzedzeniem IBM lub autoryzowanego reselera IBM i wnie¶æ odpowiednie op³aty. + +5. Podatki + +Je¶li odpowiednie w³adze na³o¿± na Program op³atê skarbow±, podatek, op³atê egzekucyjn± lub prowizjê, z wy³±czeniem op³at wynikaj±cych z dochodu netto IBM, Licencjobiorca zgadza siê ui¶ciæ tak± op³atê w kwocie okre¶lonej na fakturze lub dostarczyæ dokumentacjê stwierdzaj±c± prawo do zwolnienia z tej op³aty. Od daty nabycia Programu Licencjobiorca ponosi odpowiedzialno¶æ z tytu³u nale¿nego podatku po¶redniego. Je¶li odpowiednie w³adze na³o¿± op³atê skarbow±, podatek, op³atê egzekucyjn± lub prowizjê w zwi±zku z importem lub eksportem, transferem, uzyskaniem dostêpu b±d¼ korzystaniem z Programu poza krajem, w którym zosta³a udzielona licencja pierwotnemu Licencjobiorcy, to Licencjobiorca przyjmuje na siebie odpowiedzialno¶æ za wszelkie na³o¿one op³aty oraz za ich uiszczenie. + +6. Gwarancja zwrotu pieniêdzy + +Je¶li z jakiegokolwiek powodu Licencjobiorca nie jest zadowolony z Programu, a jest pierwotnym Licencjobiorc±, to mo¿e rozwi±zaæ licencjê i uzyskaæ zwrot kwoty zap³aconej za Program (o ile p³atno¶æ taka mia³a miejsce) pod warunkiem zwrotu Programu do podmiotu, od którego go naby³, w ci±gu 30 dni od daty faktury. Je¶li licencja jest licencj± czasow± podlegaj±c± odnowieniu, to Licencjobiorca mo¿e otrzymaæ zwrot kwoty pod warunkiem, ¿e Program zostanie zwrócony w ci±gu pierwszych 30 dni pocz±tkowego okresu obowi±zywania. W przypadku pobrania Programu drog± elektroniczn± Licencjobiorca powinien skontaktowaæ siê z podmiotem, od którego naby³ Program, aby dowiedzieæ siê, w jaki sposób uzyskaæ zwrot kwoty. + +7. Przeniesienie Programu + +Licencjobiorca mo¿e przenie¶æ Program oraz wszelkie przys³uguj±ce mu prawa i obowi±zki licencyjne na osobê trzeci±, o ile osoba taka zaakceptuje warunki niniejszej Umowy. Je¶li licencja zostanie rozwi±zana przez któr±kolwiek ze Stron z dowolnej przyczyny, to Licencjobiorca nie ma prawa do przeniesienia Programu na osobê trzeci±. Licencjobiorca nie mo¿e przenosiæ czê¶ci 1) Programu ani 2) praw do Autoryzowanego U¿ywania Programu. Wraz z przeniesieniem Programu Licencjobiorca jest zobowi±zany do przeniesienia egzemplarza niniejszej Umowy w postaci wydruku, ³±cznie z dokumentem "Informacje Licencyjne". Licencja Licencjobiorcy wygasa natychmiast po dokonaniu takiego przeniesienia. + +8. Brak gwarancji + +Z ZASTRZE¯ENIEM BEZWZGLÊDNIE OBOWI¡ZUJ¡CYCH WARUNKÓW, KTÓRYCH NIE MO¯NA WYKLUCZYÆ, IBM NIE UDZIELA JAKICHKOLWIEK GWARANCJI (W TYM TAK¯E RÊKOJMI) ORAZ NIE USTALA WARUNKÓW, ZARÓWNO WYRA¬NYCH JAK I DOMNIEMANYCH, DLA PROGRAMU I EWENTUALNEGO WSPARCIA, A W SZCZEGÓLNO¦CI DOMNIEMANYCH GWARANCJI LUB WARUNKÓW PRZYDATNO¦CI HANDLOWEJ, PRZYDATNO¦CI DO OKRE¦LONEGO CELU, ZADOWALAJ¡CEJ JAKO¦CI, PRAWA W£ASNO¦CI ORAZ GWARANCJI LUB WARUNKÓW NIENARUSZANIA PRAW OSÓB TRZECICH. + +USTAWODAWSTWA NIEKTÓRYCH KRAJÓW NIE DOPUSZCZAJ¡ WY£¡CZENIA WYRA¬NYCH LUB DOMNIEMANYCH GWARANCJI. W ZWI¡ZKU Z TYM POWY¯SZE WY£¡CZENIE MO¯E NIE MIEÆ ZASTOSOWANIA DO LICENCJOBIORCY. W TAKIM PRZYPADKU CZAS TRWANIA TAKICH GWARANCJI JEST OGRANICZONY DO MINIMALNEGO OKRESU WYMAGANEGO PRZEZ PRAWO. PO TYM OKRESIE NIE BÊD¡ OBOWI¡ZYWAÆ ¯ADNE GWARANCJE. USTAWODAWSTWA NIEKTÓRYCH KRAJÓW NIE DOPUSZCZAJ¡ OGRANICZENIA CZASU TRWANIA GWARANCJI DOMNIEMANYCH, W ZWI¡ZKU Z TYM POWY¯SZE OGRANICZENIE MO¯E NIE MIEÆ ZASTOSOWANIA DO LICENCJOBIORCY. LICENCJOBIORCY MOG¡ PRZYS£UGIWAÆ INNE PRAWA, W ZALE¯NO¦CI OD OBOWI¡ZUJ¡CEGO W DANYM KRAJU USTAWODAWSTWA. + +ZASTRZE¯ENIA I WYKLUCZENIA ZAWARTE W PARAGRAFIE 8 OBOWI¡ZUJ¡ RÓWNIE¯ PROGRAMISTÓW I DOSTAWCÓW IBM. + +PRODUCENCI, DOSTAWCY I WYDAWCY PROGRAMÓW INNYCH NI¯ PROGRAMY IBM MOG¡ DOSTARCZAÆ SWOJE W£ASNE GWARANCJE. + +IBM NIE ¦WIADCZY ¯ADNYCH US£UG WSPARCIA, CHYBA ¯E IBM OKRE¦LI INACZEJ. W TAKIM PRZYPADKU WSZELKIE US£UGI WSPARCIA ¦WIADCZONE PRZEZ IBM PODLEGAJ¡ ZASTRZE¯ENIOM I WY£¡CZENIOM NINIEJSZEGO PARAGRAFU 8. + +9. Dane i bazy danych Licencjobiorcy + +W celu udzielenia Licencjobiorcy pomocy przy okre¶leniu przyczyny problemu z Programem, IBM mo¿e za¿±daæ, aby Licencjobiorca 1) zezwoli³ IBM na zdalny dostêp do swoich systemów lub 2) przes³a³ do IBM informacje na temat swoich systemów lub dane systemowe. Jednak¿e IBM nie jest zobowi±zany do zapewnienia takiej pomocy, chyba ¿e IBM i Licencjobiorca podpisz± oddzieln± umowê, w ramach której IBM wyrazi zgodê na ¶wiadczenie na rzecz Licencjobiorcy tego rodzaju wsparcia w zakresie przekraczaj±cym zobowi±zania IBM okre¶lone niniejsz± Umow±. W ka¿dym przypadku IBM wykorzystuje informacje o b³êdach i problemach w celu udoskonalania swych produktów i us³ug oraz udzielania pomocy przy ich dostarczaniu w ramach powi±zanych z nimi ofert wsparcia. Przy realizacji tych celów IBM mo¿e korzystaæ z pomocy oddzia³ów IBM i podwykonawców IBM (znajduj±cych siê nie tylko w kraju lokalizacji Licencjobiorcy, ale i poza nim), a Licencjobiorca upowa¿nia IBM do takiego dzia³ania. + +Licencjobiorca pozostaje odpowiedzialny za 1) wszelkie dane i zawarto¶æ bazy danych, które udostêpnia IBM, 2) wybór i implementacjê procedur oraz mechanizmów kontrolnych dotycz±cych dostêpu do danych, ich bezpieczeñstwa, szyfrowania, u¿ywania i transmisji (w tym wszelkich danych identyfikuj±cych osobê fizyczn±) oraz 3) tworzenie i odtwarzanie kopii zapasowych ka¿dej bazy danych i wszelkich gromadzonych danych. Licencjobiorca nie bêdzie wysy³aæ ani udostêpniaæ IBM jakichkolwiek informacji identyfikuj±cych osobê fizyczn± (w postaci danych lub jakiejkolwiek innej) i bêdzie odpowiedzialny za uregulowanie uzasadnionych kosztów i innych obci±¿eñ, które mo¿e ponie¶æ IBM w zwi±zku z omy³kowym udostêpnieniem takich informacji IBM b±d¼ za utratê lub ujawnienie takich informacji przez IBM, w tym informacji wynikaj±cych z roszczeñ osób trzecich. + +10. Ograniczenie odpowiedzialno¶ci + +Ograniczenia i zastrze¿enia paragrafu 10 (Ograniczenie odpowiedzialno¶ci) maj± zastosowanie w pe³nym zakresie i nie s± zakazane przepisami obowi±zuj±cego prawa, bez mo¿liwo¶ci wy³±czenia takiego prawa w ramach umowy. + +10.1 Sytuacje, w których IBM mo¿e ponosiæ odpowiedzialno¶æ + +W przypadku wyst±pienia okre¶lonych okoliczno¶ci, za które odpowiedzialno¶æ ponosi IBM, a w wyniku których Licencjobiorca dozna³ szkody, Licencjobiorca bêdzie uprawniony do uzyskania od IBM odszkodowania. Bez wzglêdu na podstawê, na jakiej Licencjobiorca jest uprawniony do domagania siê odszkodowania od IBM (w³±czywszy w to naruszenie istotnych postanowieñ niniejszej Umowy, niedbalstwo, wprowadzenie w b³±d lub inne roszczenia z tytu³u odpowiedzialno¶ci kontraktowej lub deliktowej), ca³kowita odpowiedzialno¶æ IBM z tytu³u wszelkich zsumowanych roszczeñ wynikaj±cych z lub odnosz±cych siê do ka¿dego Programu b±d¼ wynikaj±cych z niniejszej Umowy nie przekroczy kwoty: 1) odpowiedzialno¶ci za uszczerbek na zdrowiu (³±cznie ze ¶mierci±) oraz za szkody wyrz±dzone w nieruchomo¶ciach lub maj±tku ruchomym, 2) w przypadku innych rzeczywistych szkód bezpo¶rednich - wysoko¶ci op³at (je¶li Program podlega op³atom czasowym - wysoko¶ci op³at za dwana¶cie miesiêcy) uiszczanych przez Licencjobiorcê za Program bêd±cy przedmiotem roszczenia. + +Ograniczenie to ma równie¿ zastosowanie do programistów i dostawców Programów IBM. Wskazany powy¿ej zakres odpowiedzialno¶ci stanowi ca³o¶æ odpowiedzialno¶ci ponoszonej ³±cznie przez IBM oraz programistów i dostawców Programów IBM. + +10.2 Sytuacje, w których IBM nie ponosi odpowiedzialno¶ci + +W ¯ADNYCH OKOLICZNO¦CIACH IBM, ANI TE¯ PROGRAMI¦CI CZY DOSTAWCY PROGRAMÓW IBM, NIE PONOSZ¡ ODPOWIEDZIALNO¦CI ZA NASTÊPUJ¡CE SZKODY, NAWET JE¦LI ZOSTALI POINFORMOWANI O MO¯LIWO¦CI ICH WYST¡PIENIA: + +a. UTRATÊ LUB USZKODZENIE DANYCH; + +b. SZKODY NADZWYCZAJNE, UBOCZNE, WYNIKAJ¡CE Z NARUSZENIA DÓBR OSOBISTYCH, PO¦REDNIE ORAZ SZKODY, KTÓRYCH NIE MO¯NA BY£O PRZEWIDZIEÆ PRZY ZAWIERANIU UMOWY, ANI TE¯ + +c. UTRACONE ZYSKI, KONTAKTY HANDLOWE, PRZYCHODY, REPUTACJÊ (GOODWILL) ANI PRZEWIDYWANE OSZCZÊDNO¦CI. + +11. Weryfikacja zgodno¶ci + +Na potrzeby niniejszego paragrafu 11 (Weryfikacja zgodno¶ci), przyjmuje siê, ¿e termin "Warunki ILAN dla Programu" oznacza 1) niniejsz± Umowê oraz odpowiednie poprawki i dokumenty transakcyjne dostarczone przez IBM, a tak¿e 2) strategie IBM dotycz±ce oprogramowania, dostêpne w serwisie WWW IBM Software Policy (www.ibm.com/softwarepolicies), a w szczególno¶ci strategie dotycz±ce tworzenia kopii zapasowych, okre¶lania cen przy ograniczonej mocy obliczeniowej oraz migracji. + +Prawa i obowi±zki przedstawione w niniejszym paragrafie 11 obowi±zuj± w okresie licencjonowania Programu na rzecz Licencjobiorcy oraz dwa lata po tym okresie. + +11.1 Proces weryfikacji + +Licencjobiorca zgadza siê tworzyæ, przechowywaæ oraz dostarczaæ IBM i rewidentom IBM dok³adn± pisemn± dokumentacjê, dane wyj¶ciowe narzêdzi systemowych oraz inne informacje systemowe wystarczaj±ce do zapewnienia mo¿liwo¶ci weryfikacji, ¿e korzystanie przez Licencjobiorcê ze wszystkich Programów odbywa siê zgodnie z Warunkami ILAN dla Programu, a w szczególno¶ci ze wszystkimi obowi±zuj±cymi warunkami IBM w zakresie licencjonowania i cen. Licencjobiorca jest odpowiedzialny za 1) zapewnienie, ¿e nie zosta³ przekroczony poziom Autoryzowanego U¿ywania oraz 2) przestrzeganie zgodno¶ci z Warunkami ILAN dla Programu. + +IBM mo¿e zweryfikowaæ, informuj±c o takim zamiarze z odpowiednim wyprzedzeniem, czy Licencjobiorca przestrzega Warunków ILAN dla Programu we wszystkich o¶rodkach i ¶rodowiskach, gdzie Licencjobiorca u¿ywa Programów do jakichkolwiek celów zgodnie z Warunkami ILAN dla Programu. Weryfikacja taka mo¿e byæ przeprowadzana na terenie Licencjobiorcy, w normalnych godzinach pracy i bêdzie realizowana w sposób w minimalnym stopniu zak³ócaj±cy tê pracê. IBM mo¿e przy takiej weryfikacji skorzystaæ z us³ug niezale¿nego rewidenta, pod warunkiem, ¿e zosta³a z nim podpisana umowa o zachowaniu poufno¶ci. + +11.2 Postanowienia + +IBM poinformuje Licencjobiorcê na pi¶mie, je¶li weryfikacja wyka¿e, ¿e Licencjobiorca przekroczy³ poziom Autoryzowanego U¿ywania lub w inny sposób naruszy³ Warunki ILAN dla Programu. Licencjobiorca wyra¿a zgodê na natychmiastowe i bezpo¶rednie uiszczenie na rzecz IBM op³at wyszczególnionych przez IBM na fakturze z tytu³u: 1) u¿ywania niezgodnego z Warunkami, 2) ¶wiadczenia wsparcia w czasie takiego u¿ywania lub przez okres dwóch lat, w zale¿no¶ci od tego, który z tych okresów by³ krótszy oraz 3) dodatkowych op³at i innych zobowi±zañ okre¶lonych w trakcie przeprowadzonej weryfikacji. + +12. Uwagi osób trzecich + +Program mo¿e zawieraæ kod osób trzecich, który bêdzie licencjonowany na rzecz Licencjobiorcy w ramach niniejszej Umowy przez IBM, a nie przez osobê trzeci±. Ewentualne Uwagi na temat kodu osób trzecich (Uwagi Osób Trzecich) s± do³±czane jedynie w celu powiadomienia Licencjobiorcy. Uwagi te mo¿na znale¼æ w pliku NOTICES do³±czonym do Programu. Informacje na temat uzyskania kodu ¼ród³owego dla konkretnego kodu osób trzecich mo¿na znale¼æ w Uwagach Osób Trzecich. Je¶li w Uwagach Osób Trzecich IBM okre¶li kod osób trzecich jako "Modyfikowany Kod Osób Trzecich", to IBM upowa¿ni Licencjobiorcê do 1) modyfikacji Modyfikowanego Kodu Osób Trzecich oraz 2) odtwarzania kodu ¼ród³owego modu³ów Programu, które s± bezpo¶rednio wykorzystywane przez Modyfikowany Kod Osób Trzecich pod warunkiem, ¿e czynno¶æ ta zostanie podjêta jedynie w celu debugowania modyfikacji Licencjobiorcy na potrzeby takiego kodu osób trzecich. Ewentualne zobowi±zania IBM w zakresie us³ug i wsparcia dotycz± jedynie Programu niezmodyfikowanego. + +13. Postanowienia ogólne + +a. Postanowienia zawarte w niniejszej Umowie pozostaj± bez wp³ywu na uprawnienia przys³uguj±ce konsumentom na podstawie bezwzglêdnie obowi±zuj±cych przepisów prawa. + +b. W przypadku Programów, które IBM dostarcza Licencjobiorcy w formie materialnej, IBM wype³nia swe obowi±zki w zakresie wysy³ki i dostawy z chwil± dostarczenia takich Programów do wyznaczonego przez siebie przewo¼nika, chyba ¿e Licencjobiorca uzgodni³ z IBM na pi¶mie inny tryb postêpowania. + +c. W przypadku niewa¿no¶ci lub niewykonalno¶ci któregokolwiek z postanowieñ niniejszej Umowy, pozosta³e postanowienia niniejszej Umowy zachowuj± pe³n± moc prawn± i skuteczno¶æ. + +d. Licencjobiorca wyra¿a zgodê na przestrzeganie wszelkich obowi±zuj±cych praw i przepisów w zakresie eksportu i importu, w tym przepisów Stanów Zjednoczonych dotycz±cych embarga i sankcji oraz zakazu eksportu do lub na rzecz okre¶lonych u¿ytkowników koñcowych. + +e. Licencjobiorca upowa¿nia International Business Machines Corporation oraz przedsiêbiorstwa podporz±dkowane IBM Corp. (ich nastêpców prawnych i cesjonariuszy, wykonawców i Partnerów Handlowych IBM) do przechowywania i u¿ywania biznesowych informacji kontaktowych Licencjobiorcy, bez wzglêdu na miejsce prowadzonej dzia³alno¶ci, w zwi±zku z produktami i us³ugami IBM lub w celu utrzymania kontaktów handlowych miêdzy Stronami. + +f. Ka¿da ze Stron stworzy drugiej Stronie rozs±dne mo¿liwo¶ci wype³nienia zobowi±zañ, zanim zarzuci drugiej Stronie ich niewype³nienie w ramach niniejszej Umowy. Strony podejm± w dobrej wierze próbê rozstrzygniêcia sporów, nieporozumieñ lub roszczeñ powsta³ych miêdzy nimi w zwi±zku z Umow±. + +g. O ile obowi±zuj±ce prawo nie stanowi inaczej, bez mo¿liwo¶ci wy³±czenia takiego prawa w ramach umowy: 1) ¿adna ze Stron nie podejmie dzia³añ prawnych, w jakiejkolwiek formie, zwi±zanych z roszczeniem wynikaj±cym z niniejszej Umowy lub pozostaj±cym z ni± w zwi±zku po okresie dwóch lat od czasu pojawienia siê przyczyny podjêcia takich dzia³añ; oraz 2) po wyga¶niêciu takiego okresu, wszelkie roszczenia przedawniaj± siê i prawa z nimi zwi±zane wygasaj±. + +h. Ani Licencjobiorca, ani IBM nie odpowiadaj± za niedope³nienie jakichkolwiek obowi±zków, je¶li przyczyny takiego niedope³nienia le¿a³y poza ich kontrol±. + +i. Niniejsza Umowa nie daje osobom trzecim jakichkolwiek praw ani te¿ podstawy do roszczeñ, a IBM nie ponosi odpowiedzialno¶ci za jakiekolwiek roszczenie osób trzecich wobec Licencjobiorcy, z wyj±tkiem zakresu przewidzianego w paragrafie 10.1 (Sytuacje, w których IBM mo¿e nie ponosiæ odpowiedzialno¶ci) powy¿ej, w czê¶ci dotycz±cej uszczerbku na zdrowiu (³±cznie ze ¶mierci±) lub szkód wyrz±dzonych w nieruchomo¶ciach lub w maj±tku ruchomym, za które IBM ponosi odpowiedzialno¶æ prawn± wobec osób trzecich. + +j. Przystêpuj±c do niniejszej Umowy ¿adna ze Stron nie korzysta z ¿adnych ustaleñ, które nie zosta³y okre¶lone w Umowie, a w szczególno¶ci z ¿adnych ustaleñ w zakresie: 1) wydajno¶ci lub dzia³ania Programu; 2) do¶wiadczeñ czy rekomendacji osób trzecich lub 3) wyników lub oszczêdno¶ci, jakie mo¿e osi±gn±æ Licencjobiorca. + +k. IBM podpisa³ umowy z konkretnymi organizacjami (zwanymi "Partnerami Handlowymi IBM") w celu promocji i sprzeda¿y okre¶lonych Programów oraz udzielania dla nich wsparcia. Partnerzy Handlowi IBM dzia³aj± oddzielnie i niezale¿nie od IBM. IBM nie ponosi odpowiedzialno¶ci za dzia³ania lub o¶wiadczenia Partnerów Handlowych IBM ani za ich zobowi±zania wobec Licencjobiorcy. + +l. Warunki licencji oraz warunki dotycz±ce zabezpieczenia i ochrony w³asno¶ci intelektualnej okre¶lone w innych umowach Licencjobiorcy z IBM (na przyk³ad w Umowie IBM z Klientem) nie maj± zastosowania do licencji na Program udzielonych na mocy niniejszej Umowy. + +m. Strony zgodnie ustalaj±, ¿e wszelkie wymieniane informacje s± niepoufne. Je¶li którakolwiek ze Stron ¿±da wymiany informacji poufnych, wymiana taka bêdzie mieæ miejsce na warunkach podpisanej umowy o zachowaniu poufno¶ci; + +14. Zasiêg geograficzny i obowi±zuj±ce ustawodawstwo + +14.1 Obowi±zuj±ce ustawodawstwo + +Obie Strony przyjmuj± jako obowi±zuj±ce prawo kraju, w którym licencja na Program zosta³a nabyta, oraz wyra¿aj± zgodê na stosowanie takiego prawa przy interpretowaniu oraz egzekwowaniu wszelkich praw, obowi±zków i zobowi±zañ Stron, wynikaj±cych z niniejszej Umowy lub maj±cych w jakikolwiek sposób z ni± zwi±zek, bez odwo³ywania siê do zasad kolizji przepisów prawnych. + +Konwencja ONZ dotycz±ca umów o Miêdzynarodowej Sprzeda¿y Towarów (United Nations Convention on Contracts for the International Sale of Goods) nie ma zastosowania. + +14.2 Jurysdykcja + +Wszelkie prawa, obowi±zki i zobowi±zania podlegaj± w³a¶ciwym s±dom kraju nabycia licencji na Program przez Licencjobiorcê. + +Czê¶æ 2 - Warunki specyficzne dla poszczególnych krajów + +W przypadku licencji udzielanych na terenie Polski, poni¿sze warunki zastêpuj± lub modyfikuj± warunki okre¶lone w Czê¶ci 1. Wszystkie warunki Czê¶ci 1, których nie dotyczy niniejsza poprawka, nie ulegaj± zmianom i pozostaj± w mocy. W sk³ad Czê¶ci 2 wchodz±: + +* Zmiany krajowe do Czê¶ci 1, paragraf 14 (Obowi±zuj±ce ustawodawstwo i jurysdykcja) oraz + +* Zmiany krajowe do innych warunków Umowy dotycz±ce Europy, Bliskiego Wschodu i Afryki. + +Zmiany krajowe do Czê¶ci 1, paragraf 14 (Obowi±zuj±ce ustawodawstwo i jurysdykcja) + +14.1 Obowi±zuj±ce ustawodawstwo + +Fraza "prawo kraju, w którym licencja na Program zosta³a nabyta" w pierwszym akapicie paragrafu 14.1 (Obowi±zuj±ce ustawodawstwo) zostaje w przypadku Polski zast±piona nastêpuj±cym tekstem: + +prawo Austrii. + +14.3 Arbitra¿ + +Nastêpuj±cy akapit maj±cy zastosowanie w Polsce zostaje dodany jako nowy do paragrafu 14.3 (Arbitra¿). Postanowienia paragrafu 14.3 maj± znaczenie rozstrzygaj±ce nad postanowieniami paragrafu 14.2 (Jurysdykcja) w zakresie, w jakim zezwala na to obowi±zuj±ce ustawodawstwo i zasady proceduralne: + +Wszelkie kwestie sporne wynikaj±ce z niniejszej Umowy lub zwi±zane z jej naruszeniem, wypowiedzeniem lub niewa¿no¶ci± bêd± rozstrzygane w sposób ostateczny zgodnie z Zasadami Postêpowania Arbitra¿owego i Ugodowego Miêdzynarodowego Centrum Arbitra¿u przy Federalnej Izbie Gospodarczej (Rules of Arbitration and Conciliation of the International Arbitral Center of the Federal Economic Chamber) w Wiedniu (Vienna Rules), przez trzech arbitrów, powo³anych zgodnie ze wspomnianymi zasadami. Arbitra¿ bêdzie mia³ miejsce w Wiedniu, w Austrii. Jêzykiem obowi±zuj±cym podczas postêpowania bêdzie jêzyk angielski. Orzeczenia arbitrów bêd± ostateczne i wi±¿±ce dla obu Stron. Oznacza to, ¿e zgodnie z artyku³em 598(2) Austriackiego Kodeksu Postêpowania Cywilnego (Austrian Code of Civil Procedure), Strony rezygnuj± ze stosowania artyku³u 595(1) punkt 7 tego Kodeksu. Tym niemniej powy¿sze warunki w ¿adnym stopniu nie ograniczaj± prawa IBM do wszczêcia postêpowania przed dowolnym w³a¶ciwym s±dem w kraju instalacji. + +ZMIANY KRAJOWE DOTYCZ¡CE EUROPY, BLISKIEGO WSCHODU I AFRYKI + +KRAJE CZ£ONKOWSKIE UNII EUROPEJSKIEJ + +8. Brak gwarancji + +Nastêpuj±cy tekst zosta³ dodany do paragrafu 8 (Brak gwarancji): + +W krajach Unii Europejskiej ("UE") klientom przys³uguj± prawa wynikaj±ce z obowi±zuj±cego ustawodawstwa krajowego, któremu podlega sprzeda¿ artyku³ów konsumpcyjnych. Postanowienia zawarte w paragrafie 8 (Brak gwarancji) pozostaj± bez wp³ywu na te prawa. + +KRAJE CZ£ONKOWSKIE UNII EUROPEJSKIEJ I KRAJE WYSZCZEGÓLNIONE PONI¯EJ + +Ka¿dy kraj europejski, który uchwali³ lokalne akty prawne dotycz±ce ochrony danych zbli¿one do modelu obowi±zuj±cego w Unii Europejskiej. + +13. Postanowienia ogólne + +Nastêpuj±cy tekst zastêpuje punkt 13.e: + +(1) Definicje - Do punktu 13.e maj± zastosowanie nastêpuj±ce definicje dodatkowe: + +(a) Biznesowe Informacje Kontaktowe - oznaczaj± informacje maj±ce zwi±zek z dzia³alno¶ci± gospodarcz±, ujawnione IBM przez Licencjobiorcê, w tym imiona i nazwiska, stanowiska, adresy s³u¿bowe, numery telefonów oraz adresy e-mail pracowników i wykonawców Licencjobiorcy. W przypadku Austrii, W³och i Szwajcarii Biznesowe Informacje Kontaktowe obejmuj± równie¿ informacje o Licencjobiorcy oraz jego wykonawcach posiadaj±cych osobowo¶æ prawn± (na przyk³ad dane na temat przychodów Licencjobiorcy i inne informacje o transakcjach). + +(b) Biznesowy Personel Kontaktowy - oznacza pracowników i wykonawców Licencjobiorcy, do których odnosz± siê Biznesowe Informacje Kontaktowe. + +(c) Urz±d Ochrony Danych - oznacza organ powo³any zgodnie z Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej w okre¶lonym kraju lub w przypadku krajów spoza Unii Europejskiej, organ odpowiedzialny za nadzór nad ochron± danych osobowych w takim kraju b±d¼ (w obu powy¿szych przypadkach) ka¿dy nastêpca prawny takiego organu powo³any w odpowiedni sposób. + +(d) Ustawodawstwo o ochronie danych i ³±czno¶ci elektronicznej - oznacza (i) obowi±zuj±ce prawo i przepisy krajowe wdra¿aj±ce wymagania dyrektywy Unii Europejskiej 95/46/WE (w sprawie ochrony osób fizycznych w zakresie przetwarzania danych osobowych i swobodnego przep³ywu tych danych) oraz dyrektywy 2002/58/WE (dotycz±cej przetwarzania danych osobowych i ochrony prywatno¶ci w sektorze ³±czno¶ci elektronicznej); lub (ii) w przypadku krajów spoza Unii Europejskiej, prawa i przepisy obowi±zuj±ce w takich krajach i odnosz±ce siê do ochrony danych osobowych i przepisów o ³±czno¶ci elektronicznej z wykorzystaniem danych osobowych, w tym (w obu powy¿szych przypadkach) ich ustawowe nowe wersje i modyfikacje. + +(e) Grupa IBM - oznacza International Business Machines Corporation z siedzib± w Armonk, Nowy Jork, USA, przedsiêbiorstwa podporz±dkowane International Business Machines Corporation oraz ich odpowiednich Partnerów Handlowych i podwykonawców. + +(2) Licencjobiorca upowa¿nia IBM do: + +(a) przetwarzania i u¿ywania Biznesowych Informacji Kontaktowych w ramach Grupy IBM w celu obs³ugi Licencjobiorcy, w tym w celu ¶wiadczenia us³ug wsparcia oraz rozszerzania relacji handlowych miêdzy Licencjobiorc± i Grup± IBM, a w szczególno¶ci nawi±zywania kontaktów z Biznesowym Personelem Kontaktowym (za po¶rednictwem poczty e-mail lub w inny sposób) oraz sprzeda¿y produktów i us³ug Grupy IBM (zwanym dalej "Okre¶lonym Celem"); oraz + +(b) ujawniania Biznesowych Informacji Kontaktowych innym cz³onkom Grupy IBM jedynie na potrzeby realizacji Okre¶lonego Celu. + +(3) IBM wyra¿a zgodê na przetwarzanie Biznesowych Informacji Kontaktowych zgodnie z Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej. + +(4) Licencjobiorca o¶wiadcza, ¿e w zakresie wymaganym Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej (a) uzyska³ (lub uzyska) zgodê Biznesowego Personelu Kontaktowego na przetwarzanie i u¿ywanie przez Grupê IBM Biznesowych Informacji Kontaktowych do realizacji Okre¶lonego Celu, oraz ¿e przygotowa³ (lub przygotuje) powiadomienie dla Biznesowego Personelu Kontaktowego w tej sprawie. + +(5) Licencjobiorca upowa¿nia IBM do przesy³ania Biznesowych Informacji Kontaktowych poza Europejsk± Strefê Ekonomiczn± pod warunkiem, ¿e bêdzie to realizowane na warunkach zatwierdzonych przez Urz±d Ochrony Danych lub zgodnie z Ustawodawstwem o ochronie danych i ³±czno¶ci elektronicznej. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_pt b/charts/mq-devserver/LICENSE_locale/LICENSE_pt new file mode 100644 index 0000000..d1537bc --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_pt @@ -0,0 +1,302 @@ +INFORMAÇÕES DA LICENÇA + +Os Programas listados abaixo são licenciados sob os/ao abrigo dos termos e condições da seguinte Informação sobre a Licença a seguir, além dos termos de licença do Programa acordados anteriormente pelo Cliente e pela IBM. Se o Cliente não tiver acordado anteriormente com os termos de licença em vigor para o Programa, o Contrato de Licença Internacional para Programas Não Garantidos (Z125-5589-05) será aplicável. + +Nome do Programa (Número do Programa): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Os termos padrão a seguir se aplicam o uso do Programa pelo Licenciado. + +Programas em Pacote/Lote + +O Programa é licenciado como um pacote de multiprodutos que consiste nos Programas em Pacote Configurável identificados abaixo. O Licenciado está autorizado a instalar e usar/utilizar esses Programas em Pacote Configurável dentro dos limites das Provas de Titularidade para o Programa, conforme estabelecido nesse documento de Informação sobre a Licença. O Licenciado não está autorizado a transferir ou recomercializar os Programas em Pacote Configurável separadamente do pacote de multiprodutos. Um Programa em Pacote Configurável pode ser acompanhado pelos termos da licença, e esses termos, se houver, aplicam-se ao/à uso/utilização desse Programa em Pacote Configurável pelo Licenciado. Em caso de conflito, os termos nesse documento de Informação sobre a Licença sobressaem os termos do Programa em Pacote Configurável. Quando o direito do Licenciado de usar/utilizar o Programa expirar ou terminar, o Licenciado deverá descontinuar o/a uso/utilização, destruir ou retornar todas as cópias prontamente dos Programas em Pacote Configurável para a parte de quem o Licenciado adquiriu o Programa. Se o Licenciado tiver transferido por download os Programas em Pacote Configurável, o Licenciado deverá entrar em contato com a parte a quem o Licenciado adquiriu o Programa. Se o Licenciado desejar autorizar os Programas em Pacote Configurável para qualquer uso/utilização além dos limites definidos acima, entre em contato com um Representante de Vendas IBM ou com a parte a quem o Licenciado adquiriu o Programa para obter/adquirir a licença adequada. + +Segue os Programas em Pacote Configurável licenciados com o Programa: +IBM MQ V9.0.3 + +Limitação de Desenvolvedor + +Se o Programa estiver designado como sendo para "Desenvolvedores", o Programa pode ser implementado apenas como parte do desenvolvimento interno do Licenciado e teste de unidade numa máquina de desenvolvedor. Uma máquina de desenvolvimento é um ambiente de área de trabalho físico ou virtual que executa um sistema operacional/operativo primário e o Programa, e que ambos estejam acessíveis e sejam usados por não mais que um desenvolvedor/programador especificado. O Licenciado não está autorizado a usar o Programa para processamento de cargas de trabalho de produção, simulação de cargas de trabalho de produção ou teste de escalabilidade de qualquer código, aplicativo/aplicação ou sistema. O Licenciado não está autorizado a usar qualquer parte do Programa para quaisquer outros propósitos/fins sem adquirir as titularidades de produção apropriadas. + +Componentes Não Usados para Estabelecer Titularidades Necessárias + +Ao determinar o número de titularidades necessárias para a instalação ou o uso do Programa pelo Licenciado, a instalação ou o uso dos seguintes componentes do Programa não são considerados. Em outras palavras, o Licenciado pode instalar e usar os seguintes componentes do Programa, sob os/ao abrigo dos termos de licença, mas esses componentes não são usados para determinar o número de titularidades necessárias para o Programa. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Componentes Fonte e Materiais de Amostra + +O Programa pode incluir alguns componentes na forma de código-fonte ("Componentes Fonte") e outros materiais identificados como Materiais de Amostra. O Licenciado pode copiar e modificar Componentes Fonte e Materiais de Amostra apenas para uso interno, contanto que tal uso esteja dentro dos limites dos direitos de licença sob este/ao abrigo deste Contrato/Acordo, desde que, no entanto, esse Licenciado não possa alterar ou excluir quaisquer informações de direitos autorais/de autor ou avisos contidos nos Componentes Fonte ou nos Materiais de Amostra. A IBM fornece os Componentes Fonte e Materiais de Amostra sem obrigação de suporte e "NO ESTADO EM QUE SE ENCONTRAM (""AS IS"")", SEM NENHUM TIPO DE GARANTIA, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO A GARANTIA DE TÍTULO, NÃO VIOLAÇÃO OU NÃO INTERFERÊNCIA E AS GARANTIAS IMPLÍCITAS E CONDIÇÕES DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UM PROPÓSITO/FIM ESPECÍFICO. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Contrato de Licença Internacional para Programas Não Garantidos + +Parte 1 - Termos Gerais + +AO FAZER O DOWNLOAD, INSTALAR, COPIAR, ACEDER, CLICAR NO BOTÃO "ACEITAR" OU DE QUALQUER OUTRA FORMA UTILIZAR O PROGRAMA, O LICENCIADO ACEITA OS TERMOS DESTE CONTRATO. SE O CLIENTE ACEITAR ESTES TERMOS EM NOME DO LICENCIADO, O CLIENTE DECLARA E GARANTE QUE POSSUI PLENOS PODERES PARA VINCULAR O LICENCIADO A ESTES TERMOS. CASO O CLIENTE NÃO CONCORDE COM ESTES TERMOS, + +* NÃO DEVERÁ FAZER DOWNLOAD, INSTALAR, COPIAR, ACEDER, CLICAR NO BOTÃO "ACEITAR" NEM UTILIZAR O PROGRAMA; E + +* DEVERÁ IMEDIATAMENTE DEVOLVER O MATERIAL MEDIA NÃO UTILIZADO E A DOCUMENTAÇÃO À ENTIDADE DA QUAL FORAM ADQUIRIDOS PARA O REEMBOLSO DO VALOR PAGO. SE O PROGRAMA FOI OBTIDO POR DOWNLOAD, O CLIENTE COMPROMETE-SE A DESTRUIR TODAS AS CÓPIAS DO PROGRAMA. + +1. Definições + +"Uso Autorizado" - o nível especificado no qual o Licenciado está autorizado a executar ou a operar o Programa. Tal nível pode ser medido pelo número de utilizadores, por milhões de unidades de serviços ("MSUs"), por Unidades de Valor do Processador ("PVUs") ou outro nível de uso especificado pela IBM. + +"IBM" - International Business Machines Corporation ou uma de suas subsidiárias. + +"Informações sobre a Licença" ("LI") - um documento que fornece informações e quaisquer termos adicionais específicos para um Programa. A LI do Programa está disponível no endereço www.ibm.com/software/sla. A LI também pode ser encontrada no directório do Programa, através da utilização de um comando do sistema ou como um folheto incluído com o Programa. + +"Programa" - os itens a seguir, incluindo o original e todas as cópias integrais ou parciais: 1) instruções e dados legíveis por máquinas; 2) componentes, ficheiros e módulos; 3) conteúdo audiovisual (tais como imagens, texto, registros ou ilustrações) e 4) materiais licenciados relacionados (tais como chaves e documentação). + +2. Estrutura do Contrato + +Este Contrato inclui a Parte 1 - Termos Gerais, a Parte 2 - Termos Exclusivos do País (caso haja) e a LI, e é o contrato integral entre o Licenciado e a IBM no que se diz respeito ao uso do Programa. E substitui qualquer comunicação prévia oral ou escrita entre o Licenciado e a IBM relativamente ao uso do Programa pelo Licenciado. Os termos da Parte 2 podem substituir ou modificar os termos da Parte 1. Em caso de conflito, a LI prevalece sobre ambas as Partes. + +3. Concessão de Licença + +O Programa é propriedade da IBM ou de uma entidade fornecedora da IBM, estando protegido por direitos de autor (copyrighted) sob licença e não vendido. + +A IBM concede ao Licenciado uma licença não exclusiva para 1) utilizar o Programa até o ao nível de Uso Autorizado especificado na factura, 2) fazer e instalar cópias para suportar tal Uso Autorizado e 3) fazer uma cópia de backup, desde que + +a. o Licenciado tenha adquirido o Programa legalmente e cumpra com os termos deste Contrato; + +b. a cópia de backup não seja executada a menos que o Programa do qual foi feito backup não possa ser executado; + +c. o Licenciado reproduza todos os avisos de direitos autor (copyright) e todas as outras legendas propriedade em cada cópia total ou parcial do Programa; + +d. o Licenciado garanta que qualquer pessoa que use o Programa (por acesso local ou remoto) 1) o fará apenas em nome do Licenciado e 2) cumprirá com todos os termos deste Contrato; + +e. o Licenciado não 1) utilize, copie, modifique ou distribua o Programa, salvo como expressamente permitido neste Contrato; 2) inverta a montagem, inverta a compilação, ou de outro modo, converta o Programa, salvo como expressamente permitido por lei, sem a possibilidade de renúncia contratual; 3) use separadamente do Programa nenhum dos componentes, ficheiros, módulos, conteúdo audiovisual ou materiais licenciados relacionados com o Programa; ou 4) sublicencie, ou alugueo Programa; e + +f. se o Licenciado adquirir este Programa como um Programa de Suporte, que o Licenciado use este Programa apenas para suportar o Programa Principal e sujeito a quaisquer limitações na licença para o Programa Principal, ou, caso o Licenciado adquirir este Programa como um Programa Principal, que o Licenciado use todos os Programas de Suporte apenas para suportar este Programa e sujeito a quaisquer limitações neste Contrato. Para fins deste Item "f," um "Programa de Suporte" é um Programa que faz parte de outro Programa IBM ("Programa Principal") e identificado como um Programa de Suporte na LI do Programa Principal. (Para adquirir uma licença separada para um Programa de Suporte sem estas restrições, o Licenciado deve entrar em contacto com a entidade da qual obteve o Programa de Suporte). + +Esta licença é aplicável a cada cópia do Programa que o Licenciado fizer. + +3.1 (Trade-ups), Actualizações, Correcções e Patches + +3.1.1 Trade-ups + +Se o Programa for substituído por um Programa trade-up, a licença do Programa substituído termina imediatamente. + +3.1.2 Atualizações, Correções e Patches + +Quando o Licenciado recebe uma atualização, uma correção ou um patch para um Programa, aceita quaisquer termos adicionais ou diferentes que são aplicáveis a tal atualização, correção ou patch que são especificados em sua LI. Se nenhum termo adicional ou diferente for fornecido, então a atualização, a correção ou o patch estarão exclusivamente sujeitos a este Contrato. Se o Programa for substituído por uma atualização, o Licenciado concorda em interromper imediatamente o uso do Programa substituído. + +3.2 Licenças de Prazo Fixo + +Se a IBM licenciar o Programa por um prazo fixo, a licença do Licenciado terminará no final do prazo fixo, a menos que o Licenciado e a IBM concordem em renová-la. + +3.3 Termo e Rescisão + +Este Contrato permanece em vigor até à sua denúncia. + +A IBM pode rescindir a licença do Licenciado caso este não cumpra com os termos deste Contrato. + +Se a licença for rescindida por qualquer motivo por qualquer uma das partes, o Licenciado concorda em interromper imediatamente o uso do Programa e destruir todas as suas cópias. Quaisquer termos deste Contrato que pela sua natureza produzam os seus efeitos para além da data da denúncia, resolução ou rescisão produzirão efeitos até ao total cumprimento, aplicando-se a ambas as partes respectivos sucessores e representantes e cessionários. + +4. Encargos + +Os encargos, se houver, são baseados no Uso Autorizado obtido, que é especificado na factura. A IBM não concede créditos ou reembolsos para encargos já devidos ou pagos, salvo se especificado de outra forma neste Contrato. + +Se o Licenciado desejar aumentar o seu Uso Autorizado, deverá notificar antecipadamente a IBM ou a um revendedor IBM autorizado e pagar quaisquer encargos aplicáveis. + +5. Impostos + +Caso haja por parte de alguma autoridade competente a imposição de qualquer taxa, imposto ou contribuição, excluindo os inerentes ao redimento líquido da IBM, o Licenciado concorda em pagar esse montante, conforme especificado numa factura ou facultar documentação atinente à respectiva isenção. O Licenciado é responsável por q ualquer imposto que incida sobre o Programa a partir da data em que o obtiver. Caso haja por parte de alguma autoridade competente a imposição de qualquer taxa, imposto ou contribuição ou taxa aduaneira para a importação, exportação, transferência, acesso ou uso do Programa fora do país no qual foi concedida a licença ao Licenciado original este reconhece que é responsável porque pagará qualquer valor imposto. + +6. Garantia de Devolução de Quantia Paga + +Se o Licenciado não estiver satisfeito com o Programa por qualquer motivo e se for o Licenciado original, este pode terminar o uso da licença e obter um crédito sobre o valor pago pelo Programa, se houver algum, desde que o Licenciado devolva o Programa à entidade da qual tenha obtido-o nos 30 dias seguintes à data de emissão da factura. Se a licença for para um prazo fixo que esteja sujeito a renovação, então o Licenciado poderá obter um crédito sobre o valor pago, apenas se o Programa for devolvido dentro dos primeiros 30 dias do prazo inicial. Se o Licenciado tiver efectuado a instalação do Programa, deverá entrar em contacto com a entidade da qual o adquiriu de modo a saber como poderá reaver a quantia. + +7. Transferência do Programa + +O Licenciado pode transferir para terceiros o Programa e todos os seus direitos e obrigações de licença do Licenciado desde que tais terceiros concordem com os termos deste Contrato. Se a licença for rescindida por qualquer motivo por qualquer uma das partes, o Licenciado está proibido de transferir o Programa para terceiros. O Licenciado não pode transferir uma parte 1) do Programa ou 2) do Uso Autorizado do Programa. Quando o Licenciado transferir o Programa, também terá de transferir uma cópia impressa deste Contrato, incluindo a LI. Imediatamente após a transferência, a licença do Licenciado termina. + +8. Sem Garantias + +SUJEITA A QUAISQUER GARANTIAS LEGAIS AS QUAIS NÃO PODEM SER EXCLUÍDAS, A IBM NÃO CONCEDE QUAISQUER GARANTIAS OU CONDIÇÕES, EXPRESSAS OU IMPLÍCITAS, RELATIVAS AO PROGRAMA OU SUPORTE, SE HOUVER, INCLUINDO, MAS NÃO SE LIMITANDO A QUAISQUER GARANTIAS OU CONDIÇÕES IMPLÍCITAS DE COMERCIALIZAÇÃO, QUALIDADE SATISFATÓRIA, ADEQUAÇÃO A UM DETERMINADO FIM E DE QUALQUER GARANTIA DE TÍTULO, OU DE NÃO VIOLAÇÃO. + +ALGUNS ESTADOS OU JURISDIÇÕES NÃO PERMITEM A EXCLUSÃO DE GARANTIAS EXPRESSAS OU IMPLÍCITAS, PELO QUE, A EXCLUSÃO ACIMA PODE NÃO SE APLICAR AO LICENCIADO. NESTE CASO, TAIS GARANTIAS ESTÃO LIMITADAS À DURAÇÃO DO PERÍODO MÍNIMO EXIGIDO POR LEI. NENHUMA GARANTIA É APLICÁVEL APÓS TAL PERÍODO. ALGUNS ESTADOS OU JURISDIÇÕES NÃO PERMITEM LIMITAÇÕES ENQUANTO DURA DE UMA GARANTIA IMPLÍCITA, DE FORMA QUE, A LIMITAÇÃO ACIMA PODE NÃO SE APLICAR AO LICENCIADO. O LICENCIADO PODE TER OUTROS DIREITOS QUE VARIAM DE ESTADO PARA ESTADO OU DE JURISDIÇÃO PARA JURISDIÇÃO. + +AS RENÚNCIAS DE RESPONSABILIDADE E EXCLUSÕES NESTA SECÇÃO 8 TAMBÉM SÃO APLICÁVEIS A QUALQUER UM DOS FORNECEDORES OU ENTIDADES QUE DESENVOLVEM PROGRAMAS DA IBM. + +FABRICANTES, FORNECEDORES OU EDITORES DE PROGRAMAS NÃO IBM PODEM FORNECER AS SUAS PRÓPRIAS GARANTIAS. + +A IBM NÃO FORNECE SUPORTE DE NENHUM TIPO, A MENOS QUE A IBM ESPECIFIQUE DE OUTRA FORMA. NESSE CASO, QUALQUER SUPORTE FORNECIDO PELA IBM ESTÁ SUJEITO A RENÚNCIAS DE RESPONSABILIDADE E EXCLUSÕES NESTA SECÇÃO 8. + +9. Dados e Base de Dados do Licenciado + +Para auxiliar o Licenciado no isolamento da causa de um problema com o Programa, a IBM pode solicitar que o Licenciado 1) permita que a IBM aceda ao seu sistema remotamente ou 2) envie informações ou dados do seu sistema para a IBM. Contudo,a IBM não está obrigada a fornecer tal assistência, a menos que a IBM e o Licenciado celebrem um contrato por escrito separado ao abrigo do qual a IBM concorde em fornecer ao Licenciado tal tipo de suporte, que esteja para além das obrigações de garantia da IBM ao abrigo deste Contrato. Neste caso, a IBM utilizará informações sobre erros e problemas para melhorar os seus produtos e serviços, além de auxiliar com o fornecimento de ofertas de suporte relacionadas. Para esses fins, a IBM pode utilizar entidades e subcontratados da IBM (incluindo em um ou mais países que não aquele no qual o Licenciado está localizado) e o Licenciado autoriza a IBM a fazê-lo. + +O Licenciado permanece responsável por 1) quaisquer dados e pelo conteúdo de qualquer base de dados que disponibilize à IBM, 2) pela selecção e implementação de procedimentos e controles relativos ao acesso, à segurança, à encriptação, ao uso e à transmissão de dados (incluindo quaisquer dados pessoalmente identificáveis) e 3) pelo backup e pela recuperação de qualquer base de dados e quaisquer dados armazenados. O Licenciado não enviará ou fornecerá à IBM acesso a quaisquer informações pessoalmente identificáveis, seja no formato de dados ou em qualquer outro formato e será responsável por custas razoáveis e outros montantes em que a IBM possa incorrer em relação a qualquer uma destas informações erroneamente fornecidas à IBM ou pela perda ou divulgação de tais informações pela IBM, incluindo aqueles montantes que resultem de qualquer reclamação de terceiros. + +10. Limitação de Responsabilidade + +A limitação e a exclusão de responsabilidade descritas nesta Secção 10 (Limitação de Responsabilidade) aplicam-se até ao limite máximo em que não sejam proibidas pela lei aplicável sem a possibilidade de renúncia contratual. + +10.1 Itens pelos Quais a IBM Pode Ser Responsável + +Podem surgir circunstâncias em que o Licenciado tenha direito de exigir que a IBM o compense por danos sofridos. Independentemente da base sobre a qual o Licenciado tem direito a reclamar por danos causados pela IBM (incluindo incumprimento contratual, negligência, deturpação de factos, ou outra reclamação contratual ou extra contratual) a responsabilidade total da IBM por todas as reclamações em agregado resultantes de, ou relacionadas com cada Programa ou de outra forma resultantes ao abrigo deste Contrato não excederá o montante de quaisquer 1) danos corporais (incluindo morte) e danos em bens móveis e imóveis e 2) outros danos reais directos pelos quais a IBM possa ser legalmente responsável até ao montante máximo dos encargos que o Licenciado pagou pelo Programa (se o Programa estiver sujeito aos encargos de prazo fixo, até ao valor equivalente a doze meses de encargos) que está sujeito à reclamação. + +Este limite também se aplica a qualquer entidade que desenvolva Programas e a fornecedores de Programas da IBM. Este é o valor máximo pelo qual a IBM, os seus fornecedores e as entidade que desenvolvem Programas são colectivamente responsáveis. + +10.2 Casos em que a IBM Não é Responsável + +EM CASO ALGUM A IBM, OS SEUS FORNECEDORES OU ENTIDADES QUE DESENVOLVEM PROGRAMAS SÃO RESPONSÁVEIS PELOS SEGUINTES DANOS, AINDA QUE TENHAM SIDO INFORMADOS SOBRE A POSSIBILIDADE DA SUA OCORRÊNCIA: + +a. PERDA DE DADOS OU DANOS NOS REGISTOS DE DADOS; + +b. DANOS ESPECIAIS, INCIDENTAIS, EXEMPLARES OU DANOS INDIRECTOS OU POR QUAISQUER DANOS ECONÓMICOS CONSEQUENCIAIS; OU + +c. LUCROS CESSANTES, PERDA DE NEGÓCIOS, RECEITAS, CLIENTELA OU POUPANÇAS PERDIDAS + +11. Verificação de Conformidade + +Para os fins desta Secção 11 (Verificação de Conformidade), "Termos do Programa ILAN" significam 1) este Contrato e os aditamentos e documentos de transacção aplicáveis fornecidos pela IBM e 2) políticas de software IBM que podem ser encontradas no Web site IBM Software Policy (www.ibm.com/softwarepolicies), incluindo, mas não se limitando a, tais políticas relativas a backup, preços de subcapacidade e migração. + +Os direitos e obrigações estabelecidos nesta Seção 11 permanecem em vigor durante o período em que o Programa estiver licenciado ao Licenciado e nos dois anos subsequentes a esse período. + +11.1 Processo de Verificação + +O Licenciado concorda em criar, reter e fornecer à IBM e aos seus auditores registos precisos e por escrito, emitidos por ferramentas de sistema e outras informações de sistema que sejam suficientes para possibilitar a verificação auditável de que o uso de todos os Programas pelo Licenciado está em conformidade com os Termos do Programa ILAN, incluindo, sem limitação, todos os termos aplicáveis de licenciamento e de qualificação de preços da IBM. O Licenciado é responsável por garantir que: 1) não excederá o seu Uso Autorizado e 2) permanecerá em conformidade com os Termos do Programa ILAN. + +Mediante aviso razoável, a IBM poderá verificar a conformidade do Licenciado com os Termos do Programa ILAN em todas as localizações e para todos os ambientes nos quais o Licenciado utiliza (para qualquer fim) os Programas sujeitos aos Termos do Programa ILAN. Esta verificação será realizada nas instalações do Cliente durante o seu horário de trabalho e de forma a minimizar o impacto no negócio do Licenciado. A IBM pode usar um auditor independente para fazer esta verificação, desde que a IBM e o auditor tenham assinado um acordo de confidencialidade. + +11.2 Resolução + +A IBM notificará o Licenciado por escrito se qualquer uma destas verificações indicar que o Licenciado utilizou qualquer Programa para além do seu Uso Autorizado ou, de qualquer outra forma, se não estiver em conformidade com os Termos do Programa ILAN. O Licenciado concorda em pagar imediatamente e directamente à IBM pelos encargos que a IBM especificar em uma factura por: 1) qualquer uso em excesso, 2) suporte para tal uso em excesso para o menor período entre a duração de tal uso em excesso ou dois anos e 3) quaisquer encargos adicionais e outras obrigações, apurados como resultado de tal verificação. + +12. Avisos de Terceiros + +O Programa pode incluir código de terceiros que a IBM, e não o terceiro, licencia ao Licenciado ao abrigo deste Contrato. Os Avisos, se houver algum, para o código de terceiros ("Avisos de Terceiros") são incluídos apenas para informação do Licenciado. Estes avisos podem ser encontrados no(s) ficheiro(s) denominado(s) AVISOS do Programa. Informações sobre como obter o código de origem para determinado código de terceiros podem ser encontradas nos Avisos de Terceiros. Se nos Avisos de Terceiros, a IBM identificar o código de terceiros como "Código de Terceiros Modificável," a IBM autoriza o Licenciado a 1) modificar o Código de Terceiros Modificável e 2) inverter a engenharia dos módulos do Programa que estabelecem interface directamente com o Código de Terceiros Modificável desde que seja apenas com o fim de "debugging" às modificações do Licenciado em tal código de terceiros. As obrigações de serviço e suporte da IBM, se houver, aplicam-se apenas ao Programa não modificado. + +13. Geral + +a. Nada neste Contrato afecta quaisquer direitos estabelecidos por lei dos consumidores que não sejam passíveis de renúncia ou limitação contratual. + +b. Em relação a Programas que a IBM fornece ao Licenciado em forma tangível, a IBM terá cumprido suas obrigações de remessa e envio mediante a entrega de tais Programas à transportadora designada pela IBM, salvo se acordado de outra forma por escrito entre o Licenciado e a IBM. + +c. Caso alguma disposição deste Contrato venha a ser considerada inválida ou ineficaz, as restantes disposições deste Contrato manter-serão em vigor. + +d. O Licenciado aceita em cumprir com todas as leis e regulamentos de exportação e importação aplicáveis, incluindo regulamentos de embargo e sanções e proibições dos Estados Unidos relativos à exportação para determinados usos finais ou para determinados utilizadores. + +e. O Licenciado autoriza a International Business Machines Corporation e as suas subsidiárias (e seus sucessores e cessionários, entidades contratadas e Parceiros de Negócios IBM) a armazenar e a usar informações de contacto comercial do Licenciado em qualquer lugar em que façam negócios, com respeito a produtos e serviços IBM ou na promoção do relacionamento comercial da IBM com o Licenciado. + +f. Cada uma das partes concederá à outra oportunidade razoável para cumprir com as suas obrigações ao aobrigo deste Contrato antes de reclamar que a outra parte está em falta quanto ao cumprimento das suas obrigações. As partes tentarão resolver de boa-fé todas as disputas, desacordos ou reclamações entre elas relativas a este Contrato. + +g. Excepto se de outra forma exigido pela lei aplicável sem possibilidade de renúncia ou limitação contratual, 1) nenhuma das partes intentará acção judicial, independentemente da forma, resultante ou relacionada com este Contrato decorridos que sejam mais de dois anos após a ocorrência da causa da acção; e 2) após tal limite temporal, qualquer acção judicial resultante deste Contrato e todos os respectivos direitos relacionados com essa acção, prescreverão. + +h. Nenhuma das partes é responsável por falhas no cumprimento de quaisquer obrigações devido a causas fora do seu controlo. + +i. Este Contrato não cria nenhum direito nem nenhuma causa de acção ferente a terceiros, nem que a IBM será responsável por quaisquer reclamações de terceiros contra o Licenciado, excepto conforme indicado na Subsecção 10.1 acima - (Itens pelo Quais a IBM Pode Ser Responsável) acima por danos corporais (incluindo morte) ou danos em bens móveis ou imóveis pelos quais a IBM seja legalmente responsável perante esses terceiros. Desta forma, o Licenciado não poderá requerer responsabilidades da IBM por danos que o Licenciado vier incorrer em razão de reivindicações de terceiros. + +j. Ao tomar parte neste Contrato, nenhuma das partes se baseia em qualquer declaração que não esteja especificada neste Contrato, incluindo, mas não se limitando a qualquer declaração relativa: 1) ao desempenho ou funcionalidade do Programa; 2) às experiências ou recomendações de outras partes ou 3) a quaisquer resultados ou poupanças que o Licenciado possa obter. + +k. A IBM assinou contratos com determinadas organizações (denominadas "Parceiros de Negócios IBM") para promover, comercializar e prestar suporte a determinados Programas. Os Parceiros de Negócios IBM permanecem independentes e separados da IBM. A IBM não é responsável por acções ou declarações dos Parceiros de Negócios IBM ou por quaisquer obrigações destes com o Licenciado. + +l. Os termos da licença e da imndenização da propriedade intelectual de outros acordos do Licenciado com a IBM (tal como as Condições Gerais IBM) não se aplicam às licenças do Programa concedidas ao abrigo deste Contrato. + +m. Ambas as partes concordam que todas as informações trocadas entre elas não são consideradas confidenciais. Se qualquer uma das partes pretender que a troca de informações seja tratada como confidencial, então, ela será feita ao abrigo de um acordo de confidencialidade devidamente assinado pelas partes; + +14. Âmbito Geográfico e Lei Aplicável + +14.1 Lei Aplicável + +Ambas as partes concordam com a aplicação das leis do país no qual o Licenciado obteve a licença do Programa para regular, interpretar e fazer cumprir todos os direitos, deveres e obrigações do Licenciado e da IBM que surjam, ou que estejam de algum modo relacionados como objecto deste Contrato, independentemente dos princípios referentes a conflitos de Leis. + +A Convenção das Nações Unidas não se aplica nos Contratos para Venda Internacional de Bens. + +14.2 Jurisdição + +Todos os direitos, deveres e obrigações estão sujeitos aos tribunais do país no qual o Licenciado obteve a licença do Programa. + +Parte 2 - Termos Exclusivos do País + +Para licenças concedidas nos países identificados abaixo, os seguintes termos substituem ou modificam os termos referidos na Parte 1. Todos os termos na Parte 1 que não forem alterados por esses aditamentos permanecem inalterados e em vigor. Esta Parte 2 é organizada da seguinte forma: + +* Aditamentos de diversos países para a Parte 1, Secção 14 (Lei Aplicável e Jurisdição) de vários países; + +* Aditamento de países das Américas a outros termos do Contrato; e + +* Aditamento de países da Europa, Médio Oriente e África a outros termos do Contrato. + +Aditamentos de diversos países para a Parte 1, Secção 14 (Lei Aplicável e Jurisdição) + +14.1 Lei Aplicável + +A frase "as leis do país no qual o Licenciado obteve a licença do Programa" no primeiro parágrafo da Lei Aplicável 14.1 é substituída pelas seguintes frases nos países abaixo indicados: + +EUROPA, MÉDIO ORIENTE E ÁFRICA + +(1) Na Guiné-Bissau: as leis da França; e + +(2) Em Angola e Moçambique: as leis da Inglaterra. + +14.2 Jurisdição + +O seguinte parágrafo pertence à jurisdição e substitui a Subsecção 14.2 (Jurisdição) na forma como ela se aplica aos países identificados abaixo: + +Todos os direitos, deveres e obrigações estão sujeitos aos tribunais do país noqual o Licenciado obteve a licença do Programa, salvo, nos países identificados abaixo, em que todos os litígios provenientes de ou relacionados com este Contrato serão apreciados e os procedimentos iniciados exclusivamente no seguinte tribunal: + +AMÉRICAS + +(1) No Brasil: o tribunal do Rio de Janeiro, RJ; + +EUROPA, MÉDIO ORIENTE E ÁFRICA + +(2) Na Guiné-Bissau: o Tribunal Comercial de Paris; + +(3) Em Angola, Moçambique e São Tomé e Príncipe: os tribunais ingleses; e + +(4) Em Portugal: os tribunais de Lisboa. + +ADITAMENTOS DA EUROPA, MÉDIO ORIENTE E ÁFRICA (EMEA) + +ESTADOS MEMBROS DA UNIÃO EUROPEIA + +8. Sem Garantias + +O seguinte foi incluído na Secção 8 (Sem Garantias): + +Na União Europeia ("UE"), os consumidores têm direitos legais ao abrigo da legislação nacional aplicável que regula a venda de mercadorias para o consumidor. Tais direitos não são afectados pelas disposições descritas nesta Secção 8 (Sem Garantias). + +ESTADOS MEMBROS DA UE E PAÍSES IDENTIFICADOS ABAIXO + +Qualquer país Europeu que tenha promulgado legislação local de protecção ou privacidade de dados semelhante ao modelo da UE. + +13. Geral + +O seguinte substitui o Item 13.e: + +(1) Definições - Para os fins deste Item 13.e, as seguintes definições adicionais aplicam-se: + +(a) Informação de Contacto de Negócio, - significa a informação de contacto de carácter comercial divulgada pelo Licenciado à IBM, incluindo nomes, títulos profissionais, endereços profissionais, números de telefone e endereços de e-mail dos empregados e subcontratados do Licenciado. Para Áustria, Itália e Suíça, Informações de Contato de Negócios também incluem informações sobre o Licenciado e seus contratantes como entidades legais (por exemplo, os dados de renda do Licenciado e outras informações transacionais) + +(b) Pessoal de Contacto de Negócios, - significa os empregados e subcontratados do Licenciado a quem a Informação de Contacto de Negócios diz respeito. + +(c) Autoridade de Protecção de Dados, - significa a autoridade estabelecida pela Legislação de Protecção de Dados e de Comunicações Electrónicas aplicável no país da UE, a autoridade responsável por supervisionar a protecção de dados pessoais nesse país ou (para qualquer dos itens anteriores) qualquer entidade sucessora devidamente nomeada para o efeito. + +(d) Legislação de Protecção de Dados e de Comunicações Electrónicas - (i) a legislação local aplicável e os regulamentos em vigor implementando os requisitos da Directiva da UE 95/46/EC (sobre a protecção dos indivíduos no que respeita ao processamento de dados pessoais e sobre a livre circulação de tais dados) e da Directiva da UE 2002/58/EC (referente ao processamento de dados pessoais e à protecção da privacidade no setor de comunicações electrónicas); ou (ii) para países fora da UE, a legislação e/ou os regulamentos oficiais aplicáveis no país no que respeita à protecção de dados pessoais e à regulação de comunicações electrónicas envolvendo dados pessoais, incluindo (para qualquer dos itens anteriores) qualquer modificação ou substituição estabelecida por lei para o efeito. + +(e) Grupo IBM, - significa International Business Machines Corporation de Armonk, Nova Iorque, EUA, as suas subsidiárias e os Parceiros de Negócios e subcontratados destas. + +(2) O Licenciado autoriza a IBM: + +(a) a processar e a usar a Informação de Contacto de Negócios Grupo IBM para suporte ao Licenciado, incluindo o fornecimento de serviços de suporte, e com a finalidade de assegurar a gestão da relação comercial entre o Licenciado e o Grupo IBM, incluindo, sem limitação, entrar em contacto com o Pessoal de Contacto de Negócios (por e-mail ou de alguma outra forma) e realizar de acções de marketing de produtos e serviços do Grupo IBM (a Finalidade Especificada"); e + +(b) a divulgar a Informação de Contacto de Negócio a outros membros do Grupo IBM visando alcançar a Finalidade Especificada. + +(3) A IBM concorda que toda a Informação de Contacto de Negócio será processada em conformidade com a Legislação de Protecção de Dados e de Comunicações Electrónicas e será utilizada apenas para a Finalidade Especificada. + +(4) Na medida em que tal seja exigido pela Legislação de Protecção de Dados e de Comunicações Electrónicas, o Licenciado declara que (a) obteve (ou irá obter) quaisquer consentimentos do (e que emitiu (ou irá emitir) quaisquer notificações ao) Pessoal de Contacto de Negócio pertinente, de forma a permitir que o Grupo IBM processe e use a Informação de Contacto de Negócio para a Finalidade Especificada. + +(5) O Licenciado autoriza a IBM a transferir a Informação de Contacto de Negócio para fora do Espaço Económica Europeu, desde que tal transferência seja feita nos termos contratuais aprovados pela Autoridade de Protecção de Dados ou que a transferência seja permitida de alguma outra forma ao abrigo da Legislação de Protecção de Dados e de Comunicações Electrónicas. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_ru b/charts/mq-devserver/LICENSE_locale/LICENSE_ru new file mode 100644 index 0000000..eefe0ec --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_ru @@ -0,0 +1,280 @@ +»¸Æµ½·¸¾½½°Ï ¸½Ä¾À¼°Æ¸Ï + +¿ÕàÕçØáÛÕÝÝëÕ ÝØÖÕ ¿àÞÓàÐÜÜë ÛØæÕÝרàãîâáï Ò áÞÞâÒÕâáâÒØØ áÞ áÛÕÔãîéØÜØ ßÞÛÞÖÕÝØïÜØ Ø ãáÛÞÒØïÜØ »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØØ Ò ÔÞßÞÛÝÕÝØÕ Ú ßÞÛÞÖÕÝØïÜ ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã, ÚÞâÞàëÕ àÐÝÕÕ ÑëÛØ áÞÓÛÐáÞÒÐÝë ºÛØÕÝâÞÜ Ø IBM. µáÛØ ºÛØÕÝâ àÐÝÕÕ ÝÕ ßàØÝØÜÐÛ ÛØæÕÝרÞÝÝëÕ ãáÛÞÒØï, ÔÕÙáâÒãîéØÕ ÔÛï ¿àÞÓàÐÜÜë, ßàØÜÕÝïÕâáï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÔÛï ¿àÞÓàÐÜÜ ÑÕ× ³ÐàÐÝâØÙ (Z125-5589-05). + +½Ð×ÒÐÝØÕ ¿àÞÓàÐÜÜë (½ÞÜÕà ¿àÞÓàÐÜÜë): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +ÁÛÕÔãîéØÕ áâÐÝÔÐàâÝëÕ ßÞÛÞÖÕÝØï ßàØÜÕÝïîâáï Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. + +²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë + +¿àÞÓàÐÜÜÐ ÛØæÕÝרàãÕâáï ÚÐÚ ßÐÚÕâ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ, áÞáâÞïéØÙ Ø× ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ, ãÚÐ×ÐÝÝëå ÝØÖÕ. »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÐÒÛØÒÐâì Ø ØáßÞÛì×ÞÒÐâì âÐÚØÕ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë Ò ßàÕÔÕÛÐå ÁÒØÔÕâÕÛìáâÒ Þ ¿àÐÒÐå ÝÐ ¿àÞÓàÐÜÜã Ø ÚÐÚ ãÚÐ×ÐÝÞ Ò ÝÐáâÞïéÕÜ ÔÞÚãÜÕÝâÕ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ßÕàÕÔÐÒÐâì ØÛØ ßÕàÕßàÞÔÐÒÐâì ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë ÞâÔÕÛìÝÞ Þâ ßÐÚÕâÐ Ø× ÝÕáÚÞÛìÚØå ßàÞÔãÚâÞÒ. º ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜÕ ÜÞÓãâ ßàØÛÐÓÐâìáï ÛØæÕÝרÞÝÝëÕ ßÞÛÞÖÕÝØï, Ø íâØ ßÞÛÞÖÕÝØï, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ßàØÜÕÝïîâáï Ú ØáßÞÛì×ÞÒÐÝØî »ØæÕÝרÐâÞÜ âÐÚÞÙ ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ² áÛãçÐÕ ßàÞâØÒÞàÕçØÙ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÔÞÚãÜÕÝâÐ á »ØæÕÝרÞÝÝÞÙ ¸ÝäÞàÜÐæØÕÙ ×ÐÜÕÝïîâ áÞÑÞÙ ßÞÛÞÖÕÝØï ÔÛï ²ÚÛîçÕÝÝÞÙ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë. ºÞÓÔÐ ßàÐÒÞ »ØæÕÝרÐâÐ ÝÐ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ØáâÕÚÐÕâ ØÛØ ßàÕÚàÐéÐÕâáï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ßÕàÕáâÐâì ØáßÞÛì×ÞÒÐâì, ãÝØçâÞÖØâì ØÛØ ÝÕ×ÐÜÕÔÛØâÕÛìÝÞ ÒÕàÝãâì ÒáÕ ÚÞßØØ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ ÞÝ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã. µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÛãçØâì ÛØæÕÝרî ÝÐ ÛîÑÞÕ ØáßÞÛì×ÞÒÐÝØÕ ²ÚÛîçÕÝÝëå Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜ áÒÕàå ßàÕÔÕÛÞÒ, ãÚÐ×ÐÝÝëå ÒëèÕ, áÛÕÔãÕâ ÞÑàÐéÐâìáï Ú ¿àÕÔáâÐÒØâÕÛî IBM ßÞ ¿àÞÔÐÖÐÜ ØÛØ Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, çâÞÑë ßÞÛãçØâì áÞÞâÒÕâáâÒãîéãî ÛØæÕÝרî. + +½ØÖÕ ßÕàÕçØáÛÕÝë ²ÚÛîçÕÝÝëÕ Ò ÚÞÜßÛÕÚâ ¿àÞÓàÐÜÜë, ÛØæÕÝרàãÕÜëÕ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ: +IBM MQ V9.0.3 + +¾ÓàÐÝØçÕÝØÕ "ÔÛï ÀÐ×àÐÑÞâçØÚÞÒ" + +µáÛØ ¿àÞÓàÐÜÜÐ ØÜÕÕâ ÞÑÞ×ÝÐçÕÝØÕ "´Ûï ÀÐ×àÐÑÞâçØÚÞÒ" (Developers), âÞ íâã ¿àÞÓàÐÜÜã ÜÞÖÝÞ ÒÝÕÔàØâì âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÙ àÐ×àÐÑÞâÚØ Ø ÑÛÞÚ-âÕáâØàÞÒÐÝØï »ØæÕÝרÐâÐ ÝÐ ÜÐèØÝÕ àÐ×àÐÑÞâçØÚÐ. ¼ÐèØÝÐ àÐ×àÐÑÞâçØÚÐ ? íâÞ äØ×ØçÕáÚÐï ØÛØ ÒØàâãÐÛìÝÐï áàÕÔÐ ÝÐáâÞÛìÝÞÓÞ ÚÞÜßìîâÕàÐ, ÝÐ ÚÞâÞàÞÜ ÒëßÞÛÝïîâáï ÞáÝÞÒÝÐï ÞßÕàÐæØÞÝÝÐï áØáâÕÜÐ Ø ¿àÞÓàÐÜÜÐ, Ú ÚÞâÞàëÜ ÞáãéÕáâÒÛïÕâ ÔÞáâãß Ø ÚÞâÞàëÕ ØáßÞÛì×ãÕâ ÝÕ ÑÞÛÕÕ çÕÜ ÞÔØÝ ÞßàÕÔÕÛÕÝÝëÙ àÐ×àÐÑÞâçØÚ. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ¿àÞÓàÐÜÜã ÔÛï ßàÞØ×ÒÞÔáâÒÕÝÝëå àÐÑÞçØå ÝÐÓàã×ÞÚ, áÒï×ÐÝÝëå á ÞÑàÐÑÞâÚÞÙ, ÜÞÔÕÛØàÞÒÐÝØÕÜ ØÛØ âÕáâØàÞÒÐÝØÕÜ ÛîÑÞÓÞ ÚÞÔÐ, ßàØÛÞÖÕÝØï ØÛØ áØáâÕÜë. »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï ØáßÞÛì×ÞÒÐâì ÚÐÚãî-ÛØÑÞ çÐáâì ¿àÞÓàÐÜÜë ÔÛï ÛîÑëå ØÝëå æÕÛÕÙ ÑÕ× ßàØÞÑàÕâÕÝØï áÞÞâÒÕâáâÒãîéØå àÐ×àÕèÕÝØÙ ÝÐ ßàÞØ×ÒÞÔáâÒÕÝÝÞÕ ØáßÞÛì×ÞÒÐÝØÕ. + +ºÞÜßÞÝÕÝâë, ÚÞâÞàëÕ ÝÕ ØáßÞÛì×ãîâáï ÔÛï ßÞÛãçÕÝØï âàÕÑãÕÜëå àÐ×àÕèÕÝØÙ + +¿àØ ÞßàÕÔÕÛÕÝØØ ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ãáâÐÝÞÒÚØ ØÛØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ, ãçØâëÒÐÕâáï ãáâÐÝÞÒÚÐ ØÛØ ØáßÞÛì×ÞÒÐÝØÕ áÛÕÔãîéØå ÚÞÜßÞÝÕÝâÞÒ ¿àÞÓàÐÜÜë. ´àãÓØÜØ áÛÞÒÐÜØ, »ØæÕÝרÐâã àÐ×àÕèÐÕâáï ãáâÐÝÞÒØâì Ø ØáßÞÛì×ÞÒÐâì áÛÕÔãîéØÕ ÚÞÜßÞÝÕÝâë ¿àÞÓàÐÜÜë á áÞÑÛîÔÕÝØÕÜ ãáÛÞÒØÙ ÛØæÕÝרØ, ÞÔÝÐÚÞ íâØ ÚÞÜßÞÝÕÝâë ÝÕ ØáßÞÛì×ãîâáï ÔÛï ÞßàÕÔÕÛÕÝØï ÚÞÛØçÕáâÒÐ àÐ×àÕèÕÝØÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ¿àÞÓàÐÜÜë. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ÝÕÚÞâÞàëÕ ÚÞÜßÞÝÕÝâë Ò ÒØÔÕ ØáåÞÔÝÞÓÞ ÚÞÔÐ ("¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë") Ø ÔàãÓØÕ ÜÐâÕàØÐÛë, ÞÑÞ×ÝÐçÐÕÜëÕ ÚÐÚ ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ. »ØæÕÝרÐâ ÜÞÖÕâ ÚÞߨàÞÒÐâì Ø Ø×ÜÕÝïâì ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ âÞÛìÚÞ ÔÛï ÒÝãâàÕÝÝÕÓÞ ØáßÞÛì×ÞÒÐÝØï ßàØ ãáÛÞÒØØ, çâÞ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ ÞáãéÕáâÒÛïÕâáï Ò àÐÜÚÐå ÛØæÕÝרÞÝÝëå ßàÐÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî; ÞÔÝÐÚÞ ßàØ íâÞÜ »ØæÕÝרÐâã ÝÕ àÐ×àÕèÐÕâáï Ø×ÜÕÝïâì ØÛØ ãÔÐÛïâì ÛîÑãî ØÝäÞàÜÐæØî ØÛØ ×ÐÜÕçÐÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå, áÞÔÕàÖÐéØÕáï Ò ¸áåÞÔÝëå ºÞÜßÞÝÕÝâÐå ØÛØ ¾ÑàÐ׿Ðå ¼ÐâÕàØÐÛÞÒ. IBM ßàÕÔÞáâÐÒÛïÕâ ¸áåÞÔÝëÕ ºÞÜßÞÝÕÝâë Ø ¾ÑàÐ×æë ¼ÐâÕàØÐÛÞÒ ÑÕ× ÞÑï×ÐâÕÛìáâÒ ßÞ ÞÑÕáßÕçÕÝØî ßÞÔÔÕàÖÚØ Ø ÝÐ ãáÛÞÒØïå "º°º µÁÂÌ", ±µ· º°º¸Å-»¸±¾ ³°À°½Â¸¹, º°º ϲ½ËÅ, °º ¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ²º»ÎÇ°Ï ³°À°½Â¸Î ¿À°²° Á¾±Á²µ½½¾Á¸, ½µ½°ÀÃȵ½¸Ï ¿À°² ¸»¸ ¾ÂÁÃÂÁ²¸Ï Á¾»º½¾²µ½¸Ï ¿°Âµ½Â½ËÅ ¿À¸ÂÏ·°½¸¹, ° °º¶µ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸ ¸ Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÔÛï ¿àÞÓàÐÜÜ ÑÕ× ³ÐàÐÝâØÙ + +ÇÐáâì 1 - ¾ÑéØÕ ÃáÛÞÒØï + +·°³Àö°Ï, ÃÁ°½°²»¸²°Ï, º¾¿¸ÀÃÏ, ¾ÁÃɵÁ²»ÏÏ ´¾ÁÂÿ, ½°¶¸¼°Ï º½¾¿ºÃ "¿À¸½¸¼°Î" ¸»¸ ¸½Ë¼ ¾±À°·¾¼ ¸Á¿¾»Ì·ÃÏ ¿À¾³À°¼¼Ã, »¸Æµ½·¸°Â Á¾³»°È°µÂÁÏ Á ÃÁ»¾²¸Ï¼¸ ½°Á¾Ïɵ³¾ Á¾³»°Èµ½¸Ï. µÁ»¸ ²Ë ¿À¸½¸¼°µÂµ ´°½½Ëµ ÃÁ»¾²¸Ï ¾Â ¸¼µ½¸ »¸Æµ½·¸°Â°, ²Ë ·°Ï²»ÏµÂµ ¸ ³°À°½Â¸Àõµ, Ǿ ²Ë ¸¼µµÂµ ²Áµ ¿¾»½¾¼¾Ç¸Ï, Ǿ±Ë ¾±Ï·°ÂÌ »¸Æµ½·¸°Â° Á¾±»Î´°ÂÌ Í¸ ÃÁ»¾²¸Ï. µÁ»¸ ²Ë ½µ Á¾³»°Á½Ë Á ½°Á¾Ïɸ¼¸ ÃÁ»¾²¸Ï¼¸, + +* ½µ ·°³Àö°¹Âµ, ½µ ÃÁ°½°²»¸²°¹Âµ, ½µ º¾¿¸Àùµ, ½µ ¾ÁÃɵÁ²»Ï¹Âµ ´¾ÁÂÿ, ½µ ½°¶¸¼°¹Âµ º½¾¿ºÃ "¿À¸½¸¼°Î" ¸ ½µ ¸Á¿¾»Ì·Ã¹Âµ ¿À¾³À°¼¼Ã; ¸ + +* ½µ·°¼µ´»¸Âµ»Ì½¾ ²µÀ½¸Âµ ½µ¸Á¿¾»Ì·¾²°½½Ë¹ ½¾Á¸Âµ»Ì ¸ ´¾ºÃ¼µ½Â°Æ¸Î Á¾À¾½µ, à º¾Â¾À¾¹ ²Ë ¸Å ¿À¸¾±Àµ»¸, Ǿ±Ë ¿¾»ÃǸÂÌ ½°·°´ ÿ»°Çµ½½ÃÎ Áü¼Ã. µÁ»¸ ¿À¾³À°¼¼° ±Ë»° ·°³Àöµ½°, ý¸Ç¾¶Ìµ ²Áµ º¾¿¸¸ ¿À¾³À°¼¼Ë. + +1. ¾ßàÕÔÕÛÕÝØï + +"°ÒâÞàØ×ÞÒÐÝÝÞÕ ¸áßÞÛì×ÞÒÐÝØÕ"- ãÚÐ×ÐÝÝëÙ ãàÞÒÕÝì, ßàØ ÚÞâÞàÞÜ »ØæÕÝרÐâã àÐ×àÕèÕÝÞ ÒëßÞÛÝïâì ØÛØ ×ÐßãáÚÐâì ¿àÞÓàÐÜÜã. ÃàÞÒÕÝì ÜÞÖÕâ Ø×ÜÕàïâìáï çØáÛÞÜ ßÞÛì×ÞÒÐâÕÛÕÙ, ÜØÛÛØÞÝÐÜØ ÕÔØÝØæ ÞÑáÛãÖØÒÐÝØï (MSU), µÔØÝØæÐÜØ ¼ÞéÝÞáâØ ¿àÞæÕááÞàÐ (PVU) ØÛØ ÔàãÓØÜ ßÞÚÐ×ÐâÕÛÕÜ ãàÞÒÝï ØáßÞÛì×ÞÒÐÝØï, ×ÐÔÐÝÝëÜ IBM. + +"IBM" - International Business Machines Corporation ØÛØ ÞÔÝÐ Ø× ÕÕ ÔÞçÕàÝØå ÚÞÜßÐÝØÙ. + +"»ØæÕÝרÞÝÝÐï ¸ÝäÞàÜÐæØï" ("»¸") - ÔÞÚãÜÕÝâ, áÞÔÕàÖÐéØÙ ØÝäÞàÜÐæØî Ø ÛîÑëÕ ÔÞßÞÛÝØâÕÛìÝëÕ ãáÛÞÒØï, ÚÐáÐîéØÕáï ÚÞÝÚàÕâÝÞÙ ¿àÞÓàÐÜÜë. »¸ Þ ¿àÞÓàÐÜÜÕ ÔÞáâãßÝÐ ÝÐ áÐÙâÕ www.ibm.com/software/sla. »¸ âÐÚÖÕ ÜÞÖÝÞ ÝÐÙâØ Ò ÚÐâÐÛÞÓÕ ¿àÞÓàÐÜÜë, á ßÞÜÞéìî áØáâÕÜÝÞÙ ÚÞÜÐÝÔë ØÛØ Ò ÑãÚÛÕâÕ, ßàÕÔÞáâÐÒÛïÕÜÞÜ ÒÜÕáâÕ á ¿àÞÓàÐÜÜÞÙ. + +"¿àÞÓàÐÜÜÐ" - ÝØÖÕßÕàÕçØáÛÕÝÝÞÕ, ÒÚÛîçÐï ÞàØÓØÝÐÛ Ø ÒáÕ ßÞÛÝëÕ ØÛØ çÐáâØçÝëÕ ÚÞߨØ: 1) ÜÐèØÝÞçØâÐÕÜëÕ ØÝáâàã򾯯 Ø ÔÐÝÝëÕ, 2) ÚÞÜßÞÝÕÝâë, äÐÙÛë Ø ÜÞÔãÛØ, 3) ÐãÔØÞÒØ×ãÐÛìÝÞÕ áÞÔÕàÖØÜÞÕ (ÝÐßàØÜÕà, Ø×ÞÑàÐÖÕÝØï, âÕÚáâ, ÐãÔØÞ×ÐßØáØ ØÛØ àØáãÝÚØ) Ø 4) ÞâÝÞáïéØÕáï Ú ÛØæÕÝ×ØØ ÜÐâÕàØÐÛë (ÝÐßàØÜÕà, ÚÛîçØ Ø ÔÞÚãÜÕÝâÐæØï). + +2. ÁâàãÚâãàÐ ÁÞÓÛÐèÕÝØï + +½ÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ ÒÚÛîçÐÕâ Ò áÕÑï ÇÐáâì 1 - ¾ÑéØÕ ÃáÛÞÒØï, ÇÐáâì 2 - ¾áÞÑëÕ ÃáÛÞÒØï ÔÛï ½ÕÚÞâÞàëå ÁâàÐÝ (ßàØ ÝÐÛØçØØ) Ø »¸ Ø ïÒÛïÕâáï ßÞÛÝëÜ Ø ØáçÕàßëÒÐîéØÜ áÞÓÛÐèÕÝØÕÜ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM Ò ÞâÝÞèÕÝØØ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë. ¾ÝÞ ×ÐÜÕÝïÕâ áÞÑÞÙ ÛîÑëÕ ßàÕÔèÕáâÒãîéØÕ ãáâÝëÕ ØÛØ ßØáìÜÕÝÝëÕ ÔÞÓÞÒÞàÕÝÝÞáâØ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM ÞâÝÞáØâÕÛìÝÞ ØáßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë »ØæÕÝרÐâÞÜ. ÃáÛÞÒØï ÇÐáâØ 2 ÜÞÓãâ ×ÐÜÕÝïâì ØÛØ Ø×ÜÕÝïâì ãáÛÞÒØï, ßàÕÔãáÜÞâàÕÝÝëÕ ÇÐáâìî 1. ² áÛãçÐÕ ÚÐÚØå-ÛØÑÞ ßàÞâØÒÞàÕçØÙ »¸ ØÜÕÕâ ßàÕØÜãéÕáâÒÕÝÝãî áØÛã ßÞ ÞâÝÞèÕÝØî Ú ÞÑÕØÜ ÇÐáâïÜ ÁÞÓÛÐèÕÝØï. + +3. ¿àÕÔÞáâÐÒÛïÕÜÐï »ØæÕÝרï + +¿àÞÓàÐÜÜÐ ßàØÝÐÔÛÕÖØâ IBM ØÛØ ßÞáâÐÒéØÚã IBM Ø ×ÐéØéÕÝÐ ÐÒâÞàáÚØÜ ßàÐÒÞÜ Ø ßàÕÔÞáâÐÒÛïÕâáï ßÞ ÛØæÕÝרØ, Ð ÝÕ ßàÞÔÐÕâáï. + +IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ÝÕØáÚÛîçØâÕÛìÝãî ÛØæÕÝרî ÝÐ 1) ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë Ò ßàÕÔÕÛÐå °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ãÚÐ×ÐÝÝÞÓÞ Ò áçÕâÕ, 2) áÞ×ÔÐÝØÕ Ø ãáâÐÝÞÒÚã ÚÞߨÙ, ÝÕÞÑåÞÔØÜëå ÔÛï ßÞÔÔÕàÖÚØ âÐÚÞÓÞ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, Ø 3) áÞ×ÔÐÝØÕ àÕ×ÕàÒÝÞÙ ÚÞßØØ ßàØ ãáÛÞÒØØ, çâÞ: + +a. »ØæÕÝרÐâ ßÞÛãçØÛ ¿àÞÓàÐÜÜã ×ÐÚÞÝÝëÜ ÞÑàÐ×ÞÜ Ø áÞÑÛîÔÐÕâ ãáÛÞÒØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï; + +b. àÕ×ÕàÒÝÐï ÚÞߨï ÒëßÞÛÝïÕâáï, ÕáÛØ ÝÕÒÞ×ÜÞÖÝÞ ÒëßÞÛÝÕÝØÕ áÐÜÞÙ ¿àÞÓàÐÜÜë; + +c. »ØæÕÝרÐâ ÒÞáßàÞØ×ÒÞÔØâ ÒáÕ ãÒÕÔÞÜÛÕÝØï ÞÑ ÐÒâÞàáÚØå ßàÐÒÐå Ø ÔàãÓØÕ ×ÐÜÕçÐÝØï Þ ßàÐÒÐå áÞÑáâÒÕÝÝÞáâØ ÝÐ ÚÐÖÔÞÙ ßÞÛÝÞÙ ØÛØ çÐáâØçÝÞÙ ÚÞßØØ ¿àÞÓàÐÜÜë; + +d. »ØæÕÝרÐâ ÓÐàÐÝâØàãÕâ, çâÞ ÛîÑÞÕ ÛØæÞ, ØáßÞÛì×ãîéÕÕ ¿àÞÓàÐÜÜã (ßÞáàÕÔáâÒÞÜ ÛÞÚÐÛìÝÞÓÞ ØÛØ ÔØáâÐÝæØÞÝÝÞÓÞ ÔÞáâãßÐ), 1) ÔÕÛÐÕâ íâÞ âÞÛìÚÞ Þâ ØÜÕÝØ »ØæÕÝרÐâÐ Ø 2) áÞÑÛîÔÐÕâ ãáÛÞÒØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï; + +e. »ØæÕÝרÐâ ÝÕ ÜÞÖÕâ 1) ØáßÞÛì×ÞÒÐâì, ÚÞߨàÞÒÐâì, ÜÞÔØäØæØàÞÒÐâì ØÛØ àÐáßàÞáâàÐÝïâì ¿àÞÓàÐÜÜã ×Ð ØáÚÛîçÕÝØÕÜ âÞÓÞ, ÚÐÚ ïÒÝÞ àÐ×àÕèÕÝÞ Ò ÝÐáâÞïéÕÜ ÁÞÓÛÐèÕÝØØ, 2) ÞáãéÕáâÒÛïâì ÞÑàÐâÝÞÕ ÐááÕÜÑÛØàÞÒÐÝØÕ, ÞÑàÐâÝÞÕ ÚÞÜßØÛØàÞÒÐÝØÕ ØÛØ ØÝÞÕ ßàÕÞÑàÐ×ÞÒÐÝØÕ, ÛØÑÞ ÒáÚàëÒÐâì âÕåÝÞÛÞÓØî ¿àÞÓàÐÜÜë, ÚàÞÜÕ âÕå áÛãçÐÕÒ, ÚÞÓÔÐ áÞÞâÒÕâáâÒãîéØÕ ÔÕÙáâÒØï ßàïÜÞ àÐ×àÕèÕÝë ÔÕÙáâÒãîéØÜØ ×ÐÚÞÝÐÜØ, ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÞÓàÐÝØçÕÝØï íâØå ßàÐÒ Ò ãáÛÞÒØïå ÔÞÓÞÒÞàÐ; 3) ØáßÞÛì×ÞÒÐâì ÚÐÚØÕ-ÛØÑÞ ÚÞÜßÞÝÕÝâë, äÐÙÛë, ÜÞÔãÛØ, ÐãÔØÞ-ÒØ×ãÐÛìÝÞÕ áÞÔÕàÖØÜÞÕ ØÛØ áÒï×ÐÝÝëÕ ÛØæÕÝרÞÝÝëÕ ÜÐâÕàØÐÛë ÞâÔÕÛìÝÞ Þâ ¿àÞÓàÐÜÜë, 4) áãÑÛØæÕÝרàÞÒÐâì, ßàÕÔÞáâÐÒÛïâì ¿àÞÓàÐÜÜã ÝÐ ãáÛÞÒØïå ÐàÕÝÔë ØÛØ ÛØ×ØÝÓÐ; Ø + +f. ÕáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã Ò ÚÐçÕáâÒÕ ²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ØáßÞÛì×ãÕâ íâã ¿àÞÓàÐÜÜã âÞÛìÚÞ ÔÛï ßÞÔÔÕàÖÚØ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë ßàØ áÞÑÛîÔÕÝØØ ÛîÑëå ÞÓàÐÝØçÕÝØÙ, ßàÕÔãáÜÞâàÕÝÝëå ÛØæÕÝרÕÙ ÝÐ ¾áÝÞÒÝãî ¿àÞÓàÐÜÜã; ÛØÑÞ, ÕáÛØ »ØæÕÝרÐâ ßÞÛãçÐÕâ ¿àÞÓàÐÜÜã Ò ÚÐçÕáâÒÕ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ØáßÞÛì×ãÕâ ÒáÕ ²áßÞÜÞÓÐâÕÛìÝëÕ ¿àÞÓàÐÜÜë âÞÛìÚÞ ÔÛï ßÞÔÔÕàÖÚØ ÔÐÝÝÞÙ ¿àÞÓàÐÜÜë ßàØ áÞÑÛîÔÕÝØØ ÛîÑëå ÞÓàÐÝØçÕÝØÙ, ßàÕÔãáÜÞâàÕÝÝëå ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ. ² æÕÛïå ÔÐÝÝÞÓÞ ßãÝÚâÐ f "²áßÞÜÞÓÐâÕÛìÝÞÙ ¿àÞÓàÐÜÜÞÙ" ÝÐ×ëÒÐÕâáï ¿àÞÓàÐÜÜÐ, ïÒÛïîéÐïáï çÐáâìî ÔàãÓÞÙ ¿àÞÓàÐÜÜë IBM ("¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë") Ø ÞßàÕÔÕÛÕÝÝÐï ÚÐÚ ²áßÞÜÞÓÐâÕÛìÝÐï ¿àÞÓàÐÜÜÐ Ò »¸ ¾áÝÞÒÝÞÙ ¿àÞÓàÐÜÜë. (ÇâÞÑë ßÞÛãçØâì ÞâÔÕÛìÝãî ÛØæÕÝרî ÝÐ ²áßÞÜÞÓÐâÕÛìÝãî ¿àÞÓàÐÜÜã ÑÕ× íâØå ÞÓàÐÝØçÕÝØÙ, »ØæÕÝרÐâã áÛÕÔãÕâ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ²áßÞÜÞÓÐâÕÛìÝãî ¿àÞÓàÐÜÜã.) + +´ÐÝÝÐï ÛØæÕÝרï ßàØÜÕÝïÕâáï Ú ÚÐÖÔÞÙ ÚÞßØØ ¿àÞÓàÐÜÜë, áÞ×ÔÐÒÐÕÜÞÙ »ØæÕÝרÐâÞÜ. + +3.1 ºÞÜÜÕàçÕáÚØÕ ÞÑÝÞÒÛÕÝØï, ¾ÑÝÞÒÛÕÝØï, ¸áßàÐÒÛÕÝØï Ø ¸×ÜÕÝÕÝØï + +3.1.1 ºÞÜÜÕàçÕáÚØÕ ÞÑÝÞÒÛÕÝØï + +µáÛØ ¿àÞÓàÐÜÜÐ ×ÐÜÕÝïÕâáï ÚÞÜÜÕàçÕáÚØÜ ÞÑÝÞÒÛÕÝØÕÜ ¿àÞÓàÐÜÜë, âÞ ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ ÝÐ ×ÐÜÕÝÕÝÝãî ¿àÞÓàÐÜÜã ÝÕÜÕÔÛÕÝÝÞ ßàÕÚàÐéÐÕâáï. + +3.1.2 ¾ÑÝÞÒÛÕÝØï, ¸áßàÐÒÛÕÝØï Ø ¸×ÜÕÝÕÝØï + +ºÞÓÔÐ »ØæÕÝרÐâ ßÞÛãçÐÕâ ÞÑÝÞÒÛÕÝØÕ, ØáßàÐÒÛÕÝØÕ ØÛØ Ø×ÜÕÝÕÝØÕ ÔÛï ¿àÞÓàÐÜÜë, »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÛîÑëÕ ÔÞßÞÛÝØâÕÛìÝëÕ ØÛØ ÞáÞÑëÕ ãáÛÞÒØï, ßàØÜÕÝØÜëÕ Ò ÞâÝÞèÕÝØØ âÐÚÞÓÞ ÞÑÝÞÒÛÕÝØï, ØáßàÐÒÛÕÝØï ØÛØ Ø×ÜÕÝÕÝØï Ø ãÚÐ×ÐÝÝëÕ Ò ÕÓÞ »¸. ¿àØ ÞâáãâáâÒØØ ÔÞßÞÛÝØâÕÛìÝëå ØÛØ ÞáÞÑëå ãáÛÞÒØÙ ØáßÞÛì×ÞÒÐÝØÕ ÞÑÝÞÒÛÕÝØï, ØáßàÐÒÛÕÝØï ØÛØ Ø×ÜÕÝÕÝØï àÕÓãÛØàãÕâáï âÞÛìÚÞ ãáÛÞÒØïÜØ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï. µáÛØ ¿àÞÓàÐÜÜÐ ×ÐÜÕÝïÕâáï ÞÑÝÞÒÛÕÝØÕÜ, âÞ »ØæÕÝרÐâ ÞÑï×ãÕâáï ÝÕÜÕÔÛÕÝÝÞ ßàÕÚàÐâØâì ØáßÞÛì×ÞÒÐÝØÕ ×ÐÜÕÝÕÝÝÞÙ ¿àÞÓàÐÜÜë. + +3.2 »ØæÕÝ×ØØ á ÄØÚáØàÞÒÐÝÝëÜ ÁàÞÚÞÜ ´ÕÙáâÒØï + +µáÛØ IBM ÛØæÕÝרàãÕâ ¿àÞÓàÐÜÜã ÝÐ äØÚáØàÞÒÐÝÝëÙ áàÞÚ, ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ »ØæÕÝרÐâÐ ßàÕÚàÐéÐÕâáï ßÞ ØáâÕçÕÝØØ íâÞÓÞ äØÚáØàÞÒÐÝÝÞÓÞ áàÞÚÐ, ÕáÛØ âÞÛìÚÞ »ØæÕÝרÐâ Ø IBM ÝÕ áÞÓÛÐáïâáï ßàÞÔÛØâì ÕÓÞ. + +3.3 ÁàÞÚ ÔÕÙáâÒØï Ø ¿àÕÚàÐéÕÝØÕ ÔÕÙáâÒØï + +½ÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ ÔÕÙáâÒãÕâ ÔÞ ßàÕÚàÐéÕÝØï ÔÕÙáâÒØï. + +IBM ÜÞÖÕâ ßàÕÚàÐâØâì ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ »ØæÕÝרÐâÐ, ÕáÛØ »ØæÕÝרÐâ ÝÕ áÞÑÛîÔÐÕâ ãáÛÞÒØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï. + +µáÛØ ÛØæÕÝרÞÝÝÞÕ áÞÓÛÐèÕÝØÕ àÐáâÞàÓÐÕâáï ßÞ ÛîÑÞÙ ßàØçØÝÕ ÛîÑÞÙ Ø× áâÞàÞÝ, »ØæÕÝרÐâ áÞÓÛÐèÐÕâáï ÝÕÜÕÔÛÕÝÝÞ ßàÕÚàÐâØâì ØáßÞÛì×ÞÒÐÝØÕ ÒáÕå ÚÞßØÙ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÐ Ø ÝÕÜÕÔÛÕÝÝÞ ãÝØçâÞÖØâì ÒáÕ ÚÞßØØ ¿àÞÓàÐÜÜë »ØæÕÝרÐâÐ. »îÑëÕ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÚÞâÞàëÕ ßÞ áÒÞÕÜã åÐàÐÚâÕàã ÞáâÐîâáï Ò áØÛÕ ßÞáÛÕ ÕÓÞ àÐáâÞàÖÕÝØï, ÔÕÙáâÒãîâ ÔÞ âÕå ßÞà, ßÞÚÐ ÝÕ ÑãÔãâ ØáßÞÛÝÕÝë, Ø ßàØÜÕÝïîâáï ÚÞ ÒáÕÜ áÞÞâÒÕâáâÒãîéØÜ ÝÐáÛÕÔÝØÚÐÜ Ø ßàÐÒÞßàÕÕÜÝØÚÐÜ ÞÑÕØå áâÞàÞÝ. + +4. ¿ÛÐâÕÖØ + +¿ÛÐâÕÖØ, ßàØ ÝÐÛØçØØ âÐÚÞÒëå, ÞáÝÞÒëÒÐîâáï ÝÐ ßàØÞÑàÕâÕÝÝÞÜ ãàÞÒÝÕ °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, ÚÞâÞàëÙ ãÚÐ×ÐÝ Ò áçÕâÕ. IBM ÝÕ ßàÕÔÞáâÐÒÛïÕâ ÚàÕÔØâÐ ØÛØ ÒÞ×ÒàÐâÐ ãÖÕ ãßÛÐçÕÝÝëå áãÜÜ ØÛØ áãÜÜ, áàÞÚ ãßÛÐâë ÚÞâÞàëå ãÖÕ ÝÐáâãߨÛ, ×Ð ØáÚÛîçÕÝØÕÜ âÞÓÞ, ÚÐÚ ãÚÐ×ÐÝÞ ÓÔÕ-ÛØÑÞ Ò ÝÐáâÞïéÕÜ ÁÞÓÛÐèÕÝØØ. + +µáÛØ »ØæÕÝרÐâ åÞçÕâ ßÞÒëáØâì ãàÞÒÕÝì °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï, »ØæÕÝרÐâ ÔÞÛÖÕÝ ×ÐàÐÝÕÕ ãÒÕÔÞÜØâì ÞÑ íâÞÜ IBM ØÛØ ÐÒâÞàØ×ÞÒÐÝÝÞÓÞ àÕáÕÛÛÕàÐ IBM Ø ÒÝÕáâØ ÒáÕ ßàØÜÕÝØÜëÕ ßÛÐâÕÖØ. + +5. ½ÐÛÞÓØ + +µáÛØ ÚÐÚÐï-ÛØÑÞ ÓÞáãÔÐàáâÒÕÝÝÐï áâàãÚâãàÐ ÒÒÕÔÕâ ÝÐ ¿àÞÓàÐÜÜã ÚÐÚÞÙ-ÛØÑÞ ÝÐÛÞÓ, áÑÞà ØÛØ ßÞèÛØÝã, ×Ð ØáÚÛîçÕÝØÕÜ âÕå, ÚÞâÞàëÕ ÞáÝÞÒëÒÐîâáï ÝÐ çØáâÞÜ ÔÞåÞÔÕ IBM, âÞÓÔÐ »ØæÕÝרÐâ ÞÑï×ãÕâáï ÒëßÛÐâØâì íâã áãÜÜã, ÚÐÚ ãÚÐ×ÐÝÞ Ò áçÕâÕ, ØÛØ ßàÕÔÞáâÐÒØâì ÔÞÚãÜÕÝâë, ßÞÔâÒÕàÖÔÐîéØÕ ÞáÒÞÑÞÖÔÕÝØÕ Þâ ãßÛÐâë. »ØæÕÝרÐâ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð ÒëßÛÐâã ÛîÑëå ÝÐÛÞÓÞÒ ÝÐ ÛØçÝÞÕ ÔÒØÖØÜÞÕ ØÜãéÕáâÒÞ, ÚÞâÞàëÜØ ÞÑÛÐÓÐÕâáï ¿àÞÓàÐÜÜÐ, ÝÐçØÝÐï á ÔÐâë ÕÕ ßÞÛãçÕÝØï »ØæÕÝרÐâÞÜ. µáÛØ ÚÐÚÐï-ÛØÑÞ ÓÞáãÔÐàáâÒÕÝÝÐï áâàãÚâãàÐ ÒÒÕÔÕâ ÝÐ ¿àÞÓàÐÜÜã âÐÜÞÖÕÝÝëÕ ßÞèÛØÝë, ÝÐÛÞÓØ, áÑÞàë ØÛØ ÞâçØáÛÕÝØï ×Ð ØÜßÞàâ ØÛØ íÚáßÞàâ, ßÕàÕÔÐçã, ÔÞáâãß Ú ØÛØ ØáßÞÛì×ÞÒÐÝØÕ ¿àÞÓàÐÜÜë ×Ð ßàÕÔÕÛÐÜØ âÞÙ áâàÐÝë, Ò ÚÞâÞàÞÙ ßÕàÒÞÝÐçÐÛìÝÞÜã »ØæÕÝרÐâã ÑëÛÐ ßàÕÔÞáâÐÒÛÕÝÐ ÛØæÕÝרï, âÞ »ØæÕÝרÐâ ßàØÝØÜÐÕâ ÝÐ áÕÑï ÞâÒÕâáâÒÕÝÝÞáâì ×Ð ÝØå Ø ÞßÛÐâØâ ÛîÑãî ÝÐÛÞÖÕÝÝãî áãÜÜã. + +6. ³ÐàÐÝâØï ÒÞ×ÒàÐâÐ ¾ßÛÐâë + +µáÛØ »ØæÕÝרÐâ ÝÕ ãÔÞÒÛÕâÒÞàÕÝ ¿àÞÓàÐÜÜÞÙ ßÞ ÚÐÚÞÙ-ÛØÑÞ ßàØçØÝÕ Ø ïÒÛïÕâáï ßÕàÒÞÝÐçÐÛìÝëÜ »ØæÕÝרÐâÞÜ, »ØæÕÝרÐâ ÜÞÖÕâ ßàÕÚàÐâØâì ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ Ø ßÞÛãçØâì ÒÞ×ÜÕéÕÝØÕ áãÜÜë, ãßÛÐçÕÝÝÞÙ ×Ð ¿àÞÓàÐÜÜã »ØæÕÝרÐâÞÜ, ßàØ ÝÐÛØçØØ âÐÚÞÒÞÙ, ßàØ ãáÛÞÒØØ çâÞ »ØæÕÝרÐâ Ò âÕçÕÝØÕ 30 ÔÝÕÙ á ÔÐâë ÒëáâÐÒÛÕÝØï áçÕâÐ ÒÕàÝÕâ ¿àÞÓàÐÜÜã áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ÕÕ ßàØÞÑàÕÛ. µáÛØ ÛØæÕÝרï ÒëÔÐÝÐ ÝÐ äØÚáØàÞÒÐÝÝëÙ áàÞÚ, ÚÞâÞàëÙ ÜÞÖÕâ Ñëâì ßàÞÔÛÕÝ, âÞÓÔÐ »ØæÕÝרÐâ ÜÞÖÕâ ßÞÛãçØâì ÒÞ×ÜÕéÕÝØÕ ãßÛÐçÕÝÝÞÙ áãÜÜë, âÞÛìÚÞ ÕáÛØ ¿àÞÓàÐÜÜÐ ÒÞ×ÒàÐéÕÝÐ Ò âÕçÕÝØÕ ßÕàÒëå 30 ÔÝÕÙ ßÕàÒÞÝÐçÐÛìÝÞÓÞ áàÞÚÐ ÔÕÙáâÒØï. µáÛØ »ØæÕÝרÐâ ×ÐÓàã×ØÛ ¿àÞÓàÐÜÜã, »ØæÕÝרÐâ ÔÞÛÖÕÝ ÞÑàÐâØâìáï Ú áâÞàÞÝÕ, ã ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ¿àÞÓàÐÜÜã, ×Ð àÐ×êïáÝÕÝØïÜØ, ÚÐÚ ßÞÛãçØâì ÒÞ×ÜÕéÕÝØÕ. + +7. ¿ÕàÕÔÐçÐ ¿àÞÓàÐÜÜë + +»ØæÕÝרÐâ ÜÞÖÕâ ßÕàÕÔÐâì ¿àÞÓàÐÜÜã Ø ÒáÕ ÛØæÕÝרÞÝÝëÕ ßàÐÒÐ Ø ÞÑï×ÐâÕÛìáâÒÐ »ØæÕÝרÐâÐ ÔàãÓÞÙ áâÞàÞÝÕ, âÞÛìÚÞ ÕáÛØ âÐÚÐï áâÞàÞÝÐ áÞÓÛÐáÝÐ á ãáÛÞÒØïÜØ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï. µáÛØ ÔÕÙáâÒØÕ ÛØæÕÝ×ØØ ßàÕÚàÐéÕÝÞ ßÞ ÛîÑÞÙ ßàØçØÝÕ ÛîÑÞÙ Ø× áâÞàÞÝ, »ØæÕÝרÐâã ×ÐßàÕéÐÕâáï ßÕàÕÔÐÒÐâì ¿àÞÓàÐÜÜã ÔàãÓÞÙ áâÞàÞÝÕ. »ØæÕÝרÐâã ×ÐßàÕéÐÕâáï ßÕàÕÔÐÒÐâì çÐáâì 1) ¿àÞÓàÐÜÜë ØÛØ 2) ãàÞÒÝï °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï ¿àÞÓàÐÜÜë. ¿àØ ßÕàÕÔÐçÕ ¿àÞÓàÐÜÜë »ØæÕÝרÐâ âÐÚÖÕ ÞÑï×ÐÝ ßÕàÕÔÐâì ßÕçÐâÝãî ÚÞߨî ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÒÚÛîçÐï »¸. ´ÕÙáâÒØÕ ÛØæÕÝ×ØØ »ØæÕÝרÐâÐ ßàÕÚàÐéÐÕâáï áàÐ×ã ßÞáÛÕ ßÕàÕÔÐçØ ¿àÞÓàÐÜÜë. + +8. ¾âáãâáâÒØÕ ÓÐàÐÝâØÙ + +Á Ãǵ¾¼ »Î±ËÅ ¿Àµ´ÃÁ¼¾ÂÀµ½½ËÅ ·°º¾½¾¼ ³°À°½Â¸¹, º¾Â¾À˵ ½µ»Ì·Ï ¸Áº»ÎǸÂÌ, IBM ½µ ´°µÂ ½¸º°º¸Å ³°À°½Â¸¹ ¸»¸ ÃÁ»¾²¸¹, ϲ½¾ ²ËÀ°¶µ½½ËÅ ¸»¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ, ² ¾Â½¾Èµ½¸¸ ¿À¾³À°¼¼Ë ¸»¸ ¿¾´´µÀ¶º¸, ¿À¸ ½°»¸Ç¸¸ °º¾²¾¹, ²º»ÎǰÏ, ½¾ ½µ ¾³À°½¸Ç¸²°ÏÁÌ Í¸¼, »Î±Ëµ ¿¾´À°·Ã¼µ²°µ¼Ëµ ³°À°½Â¸¸ ¸»¸ ÃÁ»¾²¸Ï ¾²°À¾¿À¸³¾´½¾Á¸, ô¾²»µÂ²¾À¸Âµ»Ì½¾³¾ º°ÇµÁ²°, Á¾¾Â²µÂÁ²¸Ï ¾¿Àµ´µ»µ½½¾¹ Ƶ»¸ ¸ ¿À°²° Á¾±Á²µ½½¾Á¸ ¸ »Î±ÃÎ ³°À°½Â¸Î ¸»¸ ÃÁ»¾²¸µ ½µ½°ÀÃȵ½¸Ï ¿À°². + +½µº¾Â¾À˵ ³¾Áô°ÀÁ²° ¸»¸ ÎÀ¸Á´¸ºÆ¸¸ ½µ À°·ÀµÈ°Î ¾Âº°· ¾Â ϲ½¾ ²ËÀ°¶µ½½ËÅ ¸»¸ ¿¾´À°·Ã¼µ²°µ¼ËÅ ³°À°½Â¸¹; ¿¾Í¾¼Ã ¿À¸²µ´µ½½¾µ ²Ëȵ ¸Áº»Îǵ½¸µ ¼¾¶µÂ ½µ ¿À¸¼µ½ÏÂÌÁÏ º »¸Æµ½·¸°ÂÃ. ² ;¼ Áûǰµ ´µ¹Á²¸µ °º¸Å ³°À°½Â¸¹ ¾³À°½¸Çµ½¾ ¼¸½¸¼°»Ì½Ë¼ ÁÀ¾º¾¼, ÂÀµ±Ãµ¼Ë¼ ·°º¾½¾¼. ¿¾ ¸Áµǵ½¸¸ ;³¾ ÁÀ¾º° ½¸º°º¸µ ³°À°½Â¸¸ ½µ ¿À¸¼µ½¸¼Ë. ½µº¾Â¾À˵ ³¾Áô°ÀÁ²° ¸»¸ ÎÀ¸Á´¸ºÆ¸¸ ½µ ´¾¿ÃÁº°Î ¾³À°½¸Çµ½¸µ ÁÀ¾º° ´µ¹Á²¸Ï ¿¾´À°·Ã¼µ²°µ¼ËÅ ³°À°½Â¸¹; ¿¾Í¾¼Ã ¿À¸²µ´µ½½¾µ ²Ëȵ ¸Áº»Îǵ½¸µ ¼¾¶µÂ ½µ ¿À¸¼µ½ÏÂÌÁÏ º »¸Æµ½·¸°ÂÃ. »¸Æµ½·¸°Â ¼¾¶µÂ ¸¼µÂÌ ´Àó¸µ ¿À°²°, º¾Â¾À˵ ¼¾³Ã À°·»¸Ç°ÂÌÁÏ ¾Â ÁÂÀ°½Ë º ÁÂÀ°½µ ¸»¸ ¾Â ÎÀ¸Á´¸ºÆ¸¸ º ÎÀ¸Á´¸ºÆ¸¸. + +·°Ï²»µ½¸Ï ¾± ¾Âº°·µ ¾Â ³°À°½Â¸¹ ¸ ¸Áº»Îǵ½¸Ï, ¿À¸²µ´µ½½Ëµ ² ´°½½¾¼ À°·´µ»µ 8, ¿À¸¼µ½ÏÎÂÁÏ Â°º¶µ º »Î±Ë¼ À°·À°±¾ÂǸº°¼ ¸ ¿¾Á°²É¸º°¼ ¿À¾³À°¼¼ IBM. + +¸·³¾Â¾²¸Âµ»¸, ¿¾Á°²É¸º¸ ¸»¸ ¸·´°Âµ»¸ ¿À¾³À°¼¼ ½µ-IBM ¼¾³Ã ¿Àµ´¾Á°²»ÏÂÌ Á²¾¸ Á¾±Á²µ½½Ëµ ³°À°½Â¸¸. + +IBM ½µ ¿Àµ´¾Á°²»ÏµÂ ¿¾´´µÀ¶ºÃ º°º¾³¾-»¸±° À¾´°, µÁ»¸ IBM ½µ ú°·Ë²°µÂ ¸½¾µ. ² °º¾¼ Á»Ãǰµ »Î±°Ï ¿¾´´µÀ¶º°, º¾Â¾ÀÃÎ ¿Àµ´¾Á°²»ÏµÂ IBM, ϲ»ÏµÂÁÏ ¾±ÊµºÂ¾¼ ·°Ï²»µ½¸¹ ¾± ¾Âº°·µ ¾Â ³°À°½Â¸¹ ¸ ¸Áº»Îǵ½¸¹, ¿À¸²µ´µ½½ËÅ ² ´°½½¾¼ À°·´µ»µ 8. + +9. ´ÐÝÝëÕ Ø ±Ð×ë ÔÐÝÝëå »ØæÕÝרÐâÐ + +ÇâÞÑë ßÞÜÞçì »ØæÕÝרÐâã ÞßàÕÔÕÛØâì ßàØçØÝã ßàÞÑÛÕÜë, áÒï×ÐÝÝÞÙ á ¿àÞÓàÐÜÜÞÙ, IBM ÜÞÖÕâ ×ÐßàÞáØâì, çâÞÑë »ØæÕÝרÐâ 1) ßàÕÔÞáâÐÒØÛ IBM ãÔÐÛÕÝÝëÙ ÔÞáâãß Ú áØáâÕÜÕ »ØæÕÝרÐâÐ ØÛØ 2) ÞâßàÐÒØÛ Ò IBM ØÝäÞàÜÐæØî Þ »ØæÕÝרÐâÕ ØÛØ áØáâÕÜÝëÕ ÔÐÝÝëÕ. ¾ÔÝÐÚÞ IBM ÝÕ ÞÑï×ÐÝÐ ßàÕÔÞáâÐÒÛïâì ßÞÔÞÑÝãî ßÞÜÞéì, ÕáÛØ IBM Ø »ØæÕÝרÐâ ÝÕ ×ÐÚÛîçØÛØ ÞâÔÕÛìÝÞÕ ßØáìÜÕÝÝÞÕ áÞÓÛÐèÕÝØÕ, ßÞ ÚÞâÞàÞÜã IBM áÞÓÛÐáÝÐ ßàÕÔÞáâÐÒÛïâì »ØæÕÝרÐâã âÐÚÞÙ ÒØÔ ßÞÔÔÕàÖÚØ, ÚÞâÞàëÙ ÒëåÞÔØâ ×Ð ßàÕÔÕÛë ÞÑï×ÐâÕÛìáâÒ IBM ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. ² ÛîÑÞÜ áÛãçÐÕ IBM ØáßÞÛì×ãÕâ ØÝäÞàÜÐæØî ÞÑ ÞèØÑÚÐå Ø ßàÞÑÛÕÜÐå ÔÛï ãÛãçèÕÝØï ÕÕ ßàÞÔãÚâÞÒ Ø ãáÛãÓ Ø ÔÛï áÞÔÕÙáâÒØï ßàÕÔÞáâÐÒÛÕÝØî áÞÞâÒÕâáâÒãîéØå ßàÕÔÛÞÖÕÝØÙ ßÞÔÔÕàÖÚØ. ´Ûï íâØå æÕÛÕÙ IBM ÜÞÖÕâ ØáßÞÛì×ÞÒÐâì îàØÔØçÕáÚØå ÛØæ IBM Ø áãÑßÞÔàïÔçØÚÞÒ IBM (Ò âÞÜ çØáÛÕ, Ò ÞÔÝÞÙ ØÛØ ÝÕáÚÞÛìÚØå áâàÐÝÐå, ÞâÛØçÝëå Þâ áâàÐÝë, Ò ÚÞâÞàÞÙ ÝÐåÞÔØâáï »ØæÕÝרÐâ), Ø »ØæÕÝרÐâ àÐ×àÕèÐÕâ IBM ÔÕÙáâÒÞÒÐâì âÐÚØÜ ÞÑàÐ×ÞÜ. + +»ØæÕÝרÐâ ÞáâÐÕâáï ÞâÒÕâáâÒÕÝÝëÜ ×Ð 1) ÛîÑëÕ ÔÐÝÝëÕ Ø áÞÔÕàÖØÜÞÕ ÑÐ× ÔÐÝÝëå, ÔÞáâãß Ú ÚÞâÞàëÜ »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ IBM, 2) ÒëÑÞà Ø ÒÝÕÔàÕÝØÕ ßàÞæÕÔãà Ø áàÕÔáâÒ ãßàÐÒÛÕÝØï, ÚÐáÐîéØåáï ÔÞáâãßÐ, ÑÕ×ÞßÐáÝÞáâØ, èØäàÞÒÐÝØï, ØáßÞÛì×ÞÒÐÝØï Ø ßÕàÕÔÐçØ ÔÐÝÝëå (ÒÚÛîçÐï ÛîÑëÕ ßÕàáÞÝÐÛìÝëÕ ÔÐÝÝëÕ) Ø 3) àÕ×ÕàÒÝÞÕ ÚÞߨàÞÒÐÝØÕ Ø ÒÞááâÐÝÞÒÛÕÝØÕ ÛîÑëå ÑÐ× ÔÐÝÝëå Ø áÞåàÐÝÕÝÝëå ÔÐÝÝëå. »ØæÕÝרÐâ ÝÕ ÑãÔÕâ ÞâßàÐÒÛïâì Ø ßàÕÔÞáâÐÒÛïâì IBM ÔÞáâãß Ú ÛîÑÞÙ ßÕàáÞÝÐÛìÝÞÙ ØÝäÞàÜÐæØØ (Ò ÒØÔÕ ÔÐÝÝëå ØÛØ Ò ØÝÞÙ äÞàÜÕ) Ø ÑãÔÕâ ÝÕáâØ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð àÐ×ãÜÝëÕ àÐáåÞÔë Ø ØÝëÕ áãÜÜë, ÚÞâÞàëÕ IBM ÜÞÖÕâ ßÞÝÕáâØ Ò áÒïר á ÞèØÑÞçÝÞÙ ßÕàÕÔÐçÕÙ IBM âÐÚÞÙ ØÝäÞàÜÐæØØ, ãâàÐâÞÙ ØÛØ àÐ×ÓÛÐèÕÝØÕÜ IBM ßÞÔÞÑÝÞÙ ØÝäÞàÜÐæØØ, ÒÚÛîçÐï àÐáåÞÔë, ÒÞ×ÝØÚÐîéØÕ Ø× ÛîÑëå ßàÕâÕÝ×ØÙ âàÕâìØå áâÞàÞÝ. + +10. ¾ÓàÐÝØçÕÝØÕ ¾âÒÕâáâÒÕÝÝÞáâØ + +¾ÓàÐÝØçÕÝØï Ø ØáÚÛîçÕÝØï, Ø×ÛÞÖÕÝÝëÕ Ò ÔÐÝÝÞÜ ÀÐ×ÔÕÛÕ 10 (¾ÓàÐÝØçÕÝØÕ ¾âÒÕâáâÒÕÝÝÞáâØ), ßàØÜÕÝïîâáï Ò ßÞÛÝÞÜ ÞÑêÕÜÕ, Ò ÚÞâÞàÞÜ ÞÝØ ÝÕ ×ÐßàÕéÕÝë ßàØÜÕÝØÜëÜ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÞáÒÞÑÞÖÔÕÝØï Þâ ÞÑï×ÐâÕÛìáâÒ ßÞ ÔÞÓÞÒÞàã. + +10.1 ÂÞ, ×Ð ÇâÞ IBM ¼ÞÖÕâ ½ÕáâØ ¾âÒÕâáâÒÕÝÝÞáâì + +¼ÞÓãâ ÒÞ×ÝØÚÝãâì ÞÑáâÞïâÕÛìáâÒÐ, ÚÞÓÔÐ Ø×-×Ð ÝÕØáßÞÛÝÕÝØï ÞÑï×ÐâÕÛìáâÒ áÞ áâÞàÞÝë IBM ØÛØ ßÞ ØÝÞÙ ßàØçØÝÕ ÝÐáâãßÛÕÝØï ÞâÒÕâáâÒÕÝÝÞáâØ »ØæÕÝרÐâ ØÜÕÕâ ßàÐÒÞ ÝÐ ÒÞ×ÜÕéÕÝØÕ ãÑëâÚÞÒ áÞ áâÞàÞÝë IBM. ½Õ×ÐÒØáØÜÞ Þâ ÞáÝÞÒÐÝØï, ÝÐ ÚÞâÞàÞÜ »ØæÕÝרÐâ ØÜÕÕâ ßàÐÒÞ âàÕÑÞÒÐâì ÒÞ×ÜÕéÕÝØï ãÑëâÚÞÒ Þâ IBM (ÒÚÛîçÐï áãéÕáâÒÕÝÝÞÕ ÝÐàãèÕÝØÕ, ÝÕÑàÕÖÝÞáâì, ÒÒÕÔÕÝØÕ Ò ×ÐÑÛãÖÔÕÝØÕ ØÛØ ØÝÞÕ ÔÞÓÞÒÞàÝÞÕ ÝÐàãèÕÝØÕ ÛØÑÞ ÔÕÛØÚâÝÞÕ ßàÐÒÞÝÐàãèÕÝØÕ), áÞÒÞÚãßÝÐï ÞâÒÕâáâÒÕÝÝÞáâì IBM ßÞ ÒáÕÜ ßàÕâÕÝרïÜ Ò æÕÛÞÜ, ÒÞ×ÝØÚèØÜ Ø× ØÛØ áÒï×ÐÝÝëÜ á ÚÐÖÔÞÙ ¿àÞÓàÐÜÜÞÙ ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ÒÞ×ÝØÚÐîéØÜ ÝÐ ÞáÝÞÒÐÝØØ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÝÕ ÑãÔÕâ ßàÕÒëèÐâì áãÜÜã ÛîÑëå 1) ÚÞÜßÕÝáÐæØÙ ×Ð ÝÐÝÕáÕÝØÕ âÕÛÕáÝëå ßÞÒàÕÖÔÕÝØÙ (ÒÚÛîçÐï áÜÕàâì) Ø ãéÕàÑ, ßàØçØÝÕÝÝëÙ ÝÕÔÒØÖØÜÞÜã Ø ÜÐâÕàØÐÛìÝÞÜã ØÜãéÕáâÒã, Ø 2) ÔàãÓØå äÐÚâØçÕáÚØå ßàïÜëå ãÑëâÚÞÒ Ò àÐ×ÜÕàÕ, ÝÕ ßàÕÒëèÐîéÕÜ áãÜÜë, ãßÛÐçÕÝÝÞÙ »ØæÕÝרÐâÞÜ ×Ð ¿àÞÓàÐÜÜã, ïÒÛïîéãîáï ÞÑêÕÚâÞÜ ßàÕâÕÝ×ØØ (ÕáÛØ ÔÛï ¿àÞÓàÐÜÜë ßàÕÔãáÜÞâàÕÝë ßÛÐâÕÖØ á äØÚáØàÞÒÐÝÝëÜ áàÞÚÞÜ - ÝÕ ßàÕÒëèÐîéÕÜ áãÜÜë ÞßÛÐâë ×Ð 12 ÜÕáïæÕÒ). + +´ÐÝÝÞÕ ÞÓàÐÝØçÕÝØÕ âÐÚÖÕ ßàØÜÕÝïÕâáï ÚÞ ÒáÕÜ àÐ×àÐÑÞâçØÚÐÜ Ø ßÞáâÐÒéØÚÐÜ ¿àÞÓàÐÜÜë IBM. ÍâÞ ÜÐÚáØÜãÜ, ×Ð ÚÞâÞàëÙ IBM Ø ÕÕ àÐ×àÐÑÞâçØÚØ ¿àÞÓàÐÜÜë Ø ßÞáâÐÒéØÚØ ÒáÕ ÒÜÕáâÕ ÝÕáãâ ÞâÒÕâáâÒÕÝÝÞáâì. + +10.2 ÂÞ, ×Ð ÇâÞ IBM ½Õ ½ÕáÕâ ¾âÒÕâáâÒÕÝÝÞáâØ + +½¸ ¿À¸ º°º¸Å ¾±Á¾Ïµ»ÌÁ²°Å IBM, µµ À°·À°±¾ÂǸº¸ ¿À¾³À°¼¼ ¸»¸ ¿¾Á°²É¸º¸ ½µ ½µÁà¾Â²µÂÁ²µ½½¾Á¸ ·° »Î±¾µ ¸· ½¸¶µÁ»µ´ÃÎɵ³¾, ´°¶µ µÁ»¸ ¾½¸ ±Ë»¸ ¿À¾¸½Ä¾À¼¸À¾²°½Ë ¾ ²¾·¼¾¶½¾Á¸ °º¾²¾³¾: + +a. ¿¾ÂµÀÏ ¸»¸ ¿¾²Àµ¶´µ½¸µ ´°½½ËÅ; + +b. ¾Á¾±Ëµ, ½µ¿Àµ´²¸´µ½½Ëµ ¸»¸ ½µ¿Àϼ˵ ñ˺¸ ¸»¸ »Î±Ëµ º¾Á²µ½½Ëµ ͺ¾½¾¼¸ÇµÁº¸µ ñ˺¸; + +c. ÿÃɵ½½Ëµ ´¾Å¾´Ë, ²¾·¼¾¶½¾ÁÂÌ ¿À¾²µ´µ½¸Ï ´µ»¾²¾¹ °ºÂ¸²½¾Á¸, ¿À¸±Ë»Ì, Àµ¿ÃÂ°Æ¸Ï ¸»¸ ¾¶¸´°µ¼Ëµ Á±µÀµ¶µ½¸Ï. + +11. ¿àÞÒÕàÚÐ ÁÞÑÛîÔÕÝØï ãáÛÞÒØÙ + +² æÕÛïå ÔÐÝÝÞÓÞ ÀÐ×ÔÕÛÐ 11 (¿àÞÒÕàÚÐ ÁÞÑÛîÔÕÝØï ãáÛÞÒØÙ) âÕàÜØÝ "ÃáÛÞÒØï ¼ÕÖÔãÝÐàÞÔÝÞÕ »ØæÕÝרÞÝÝÞÕ ÁÞÓÛÐèÕÝØÕ ÔÛï ¿àÞÓàÐÜÜ ÑÕ× ³ÐàÐÝâØÙ (ILAN Program Terms)" Þ×ÝÐçÐÕâ 1) ÝÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ Ø ßàØÜÕÝØÜëÕ ÔÞßÞÛÝÕÝØï Ø ÔÞÚãÜÕÝâë Þ âàÐÝ×Ð򾯯, ßàÕÔÞáâÐÒÛÕÝÝëÕ IBM, Ø 2) ßÞÛØâØÚØ IBM Ò ÞâÝÞèÕÝØØ ßàÞÓàÐÜÜÝÞÓÞ ÞÑÕáßÕçÕÝØï, ÚÞâÞàëÕ ÜÞÖÝÞ ÝÐÙâØ ÝÐ Web-áÐÙâÕ IBM Software Policy (www.ibm.com/softwarepolicies), ÒÚÛîçÐï, ÝÞ ÝÕ ÞÓàÐÝØçØÒÐïáì ØÜØ, ßÞÛØâØÚØ, ÚÐáÐîéØÕáï àÕ×ÕàÒÝÞÓÞ ÚÞߨàÞÒÐÝØï, æÕÝÞÞÑàÐ×ÞÒÐÝØï ÝÐ ÞáÝÞÒÕ ÝÕßÞÛÝëå ÜÞéÝÞáâÕÙ Ø ÜØÓàÐæØØ. + +¿àÐÒÐ Ø ÞÑï×ÐÝÝÞáâØ, Ø×ÛÞÖÕÝÝëÕ Ò ÀÐ×ÔÕÛÕ 11, ÞáâÐîâáï Ò áØÛÕ Ò âÕçÕÝØÕ ßÕàØÞÔÐ ÔÕÙáâÒØï ÛØæÕÝ×ØØ ÝÐ ¿àÞÓàÐÜÜã ÔÛï »ØæÕÝרÐâÐ Ø Ò âÕçÕÝØÕ ÔÒãå ÛÕâ ßÞáÛÕ ÕÓÞ ÞÚÞÝçÐÝØï. + +11.1 ¿àÞæÕáá ¿àÞÒÕàÚØ + +»ØæÕÝרÐâ áÞÓÛÐáÕÝ áÞ×ÔÐÒÐâì, áÞåàÐÝïâì Ø ßàÕÔÞáâÐÒÛïâì IBM Ø ÕÕ ÐãÔØâÞàÐÜ âÞçÝëÕ ßØáìÜÕÝÝëÕ ×ÐߨáØ, ÒëåÞÔÝëÕ ÔÐÝÝëÕ áØáâÕÜÝëå áàÕÔáâÒ Ø ÔàãÓãî ØÝäÞàÜÐæØî Þ áØáâÕÜÕ, ÚÞâÞàëÕ ÔÞáâÐâÞçÝë ÔÛï ßÞÔâÒÕàÖÔÕÝØï âÞÓÞ, çâÞ »ØæÕÝרÐâ ØáßÞÛì×ãÕâ ÒáÕ ¿àÞÓàÐÜÜë Ò áÞÞâÒÕâáâÒØØ á ILAN Program Terms, ÒÚÛîçÐï, ÑÕ× ÞÓàÐÝØçÕÝØï, ÒáÕ ßàØÜÕÝØÜëÕ ãáÛÞÒØï ÛØæÕÝרàÞÒÐÝØï Ø æÕÝÞÞÑàÐ×ÞÒÐÝØï IBM. »ØæÕÝרÐâ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâì ×Ð 1) ÝÕßàÕÒëèÕÝØÕ ãàÞÒÝï °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï Ø 2) áÞÑÛîÔÕÝØÕ ILAN Program Terms. + +¿ÞáÛÕ àÐ×ãÜÝÞÓÞ ãÒÕÔÞÜÛÕÝØï IBM ÜÞÖÕâ ßàÞÒÕàØâì áÞÑÛîÔÕÝØÕ »ØæÕÝרÐâÞÜ ILAN Program Terms ÒÞ ÒáÕå ÞäØáÐå Ø ÒÞ ÒáÕå áàÕÔÐå, Ò ÚÞâÞàëå »ØæÕÝרÐâ ØáßÞÛì×ãÕâ (Ò ÛîÑëå æÕÛïå) ¿àÞÓàÐÜÜë, ÝÐ ÚÞâÞàëÕ àÐáßàÞáâàÐÝïîâáï ILAN Program Terms. ÂÐÚÐï ßàÞÒÕàÚÐ ÑãÔÕâ ßàÞÒÞÔØâìáï áßÞáÞÑÞÜ, ÚÞâÞàëÙ ãÜÕÝìèÐÕâ ßÞÜÕåØ ÔÛï ÔÕïâÕÛìÝÞáâØ »ØæÕÝרÐâÐ, Ø ÜÞÖÕâ ßàÞåÞÔØâì Ò ßÞÜÕéÕÝØïå »ØæÕÝרÐâÐ Ò ÞÑëçÝëÕ àÐÑÞçØÕ çÐáë. IBM ÜÞÖÕâ ØáßÞÛì×ÞÒÐâì ÝÕ×ÐÒØáØÜÞÓÞ ÐãÔØâÞàÐ ÔÛï ßÞÜÞéØ Ò ßàÞÒÕÔÕÝØØ ßàÞÒÕàÚØ, ßàØ ãáÛÞÒØØ çâÞ ã IBM Õáâì ߨáìÜÕÝÝÞÕ áÞÓÛÐèÕÝØÕ Þ ÚÞÝäØÔÕÝæØÐÛìÝÞáâØ á âÐÚØÜ ÐãÔØâÞàÞÜ. + +11.2 ÀÐ×àÕèÕÝØÕ áßÞàÞÒ + +µáÛØ Ò åÞÔÕ ÛîÑÞÙ ßÞÔÞÑÝÞÙ ßàÞÒÕàÚØ ÑãÔÕâ ãáâÐÝÞÒÛÕÝÞ, çâÞ »ØæÕÝרÐâ ØáßÞÛì×ÞÒÐÛ ÚÐÚãî-ÛØÑÞ ¿àÞÓàÐÜÜã á ßàÕÒëèÕÝØÕÜ ãàÞÒÝï °ÒâÞàØ×ÞÒÐÝÝÞÓÞ ¸áßÞÛì×ÞÒÐÝØï ØÛØ ØÝëÜ ÞÑàÐ×ÞÜ ÝÕ áÞÑÛîÔÐÕâ ILAN Program Terms, IBM ÝÐßàÐÒØâ »ØæÕÝרÐâã ߨáìÜÕÝÝÞÕ ãÒÕÔÞÜÛÕÝØÕ. »ØæÕÝרÐâ áÞÓÛÐáÕÝ ÝÕÜÕÔÛÕÝÝÞ ÒëßÛÐâØâì ÝÕßÞáàÕÔáâÒÕÝÝÞ IBM áãÜÜã, ãÚÐ×ÐÝÝãî IBM Ò áçÕâÕ, ×Ð 1) ÛîÑÞÕ âÐÚÞÕ ØáßÞÛì×ÞÒÐÝØÕ áÒÕàå ãáâÐÝÞÒÛÕÝÝëå ßàÕÔÕÛÞÒ, 2) ÔÞßÞÛÝØâÕÛìÝãî ßÞÔÔÕàÖÚã ÔÛï âÐÚÞÓÞ ØáßÞÛì×ÞÒÐÝØï áÒÕàå ãáâÐÝÞÒÛÕÝÝëå ßàÕÔÕÛÞÒ ×Ð ÜÕÝìèØÙ Ø× áÛÕÔãîéØå ßÕàØÞÔÞÒ: ßÕàØÞÔ âÐÚÞÓÞ ØáßÞÛì×ÞÒÐÝØï ØÛØ ÔÒÐ ÓÞÔÐ, Ø 3) ÛîÑëÕ ÔÞßÞÛÝØâÕÛìÝëÕ àÐáåÞÔë Ø ÔàãÓØÕ ÞÑï×ÐâÕÛìáâÒÐ, ÒëïÒÛÕÝÝëÕ Ò àÕ×ãÛìâÐâÕ âÐÚÞÙ ßàÞÒÕàÚØ. + +12. ÃÒÕÔÞÜÛÕÝØï ÂàÕâìØå ÁâÞàÞÝ + +¿àÞÓàÐÜÜÐ ÜÞÖÕâ áÞÔÕàÖÐâì ßàÞÓàÐÜÜÝëÙ ÚÞÔ âàÕâìÕÙ áâÞàÞÝë, ÚÞâÞàëÙ IBM, Ð ÝÕ âàÕâìï áâÞàÞÝÐ, ÛØæÕÝרàãÕâ »ØæÕÝרÐâã ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. ÃÒÕÔÞÜÛÕÝØï, ÕáÛØ âÐÚÞÒëÕ Õáâì, Þ ßàÞÓàÐÜÜÝÞÜ ÚÞÔÕ, ßàÕÔÞáâÐÒÛÕÝÝÞÜ âàÕâìÕÙ áâÞàÞÝÞÙ ("ÃÒÕÔÞÜÛÕÝØï ÂàÕâìØå ÁâÞàÞÝ"), ßàØÒÞÔïâáï âÞÛìÚÞ ÔÛï áÒÕÔÕÝØï »ØæÕÝרÐâÐ. ÍâØ ãÒÕÔÞÜÛÕÝØï ÜÞÖÝÞ ÝÐÙâØ Ò äÐÙÛÕ (äÐÙÛÐå) NOTICES ÔÛï ¿àÞÓàÐÜÜë. ¸ÝäÞàÜÐæØî Þ âÞÜ, ÚÐÚ ßÞÛãçØâì ØáåÞÔÝëÙ ÚÞÔ ÔÛï âÞÓÞ ØÛØ ØÝÞÓÞ ßàÞÓàÐÜÜÝÞÓÞ ÚÞÔÐ âàÕâìÕÙ áâÞàÞÝë, ÜÞÖÝÞ ÝÐÙâØ Ò ÃÒÕÔÞÜÛÕÝØïå ÂàÕâìØå ÁâÞàÞÝ. µáÛØ Ò ÃÒÕÔÞÜÛÕÝØïå ÂàÕâìØå ÁâÞàÞÝ IBM ÞßàÕÔÕÛïÕâ ßàÞÓàÐÜÜÝëÙ ÚÞÔ, ßàÕÔÞáâÐÒÛÕÝÝëÙ âàÕâìÕÙ áâÞàÞÝÞÙ, ÚÐÚ "¸×ÜÕÝïÕÜëÙ ¿àÞÓàÐÜÜÝëÙ ÚÞÔ ÂàÕâìÕÙ ÁâÞàÞÝë", âÞ IBM ßàÕÔÞáâÐÒÛïÕâ »ØæÕÝרÐâã ßàÐÒÐ ÝÐ 1) Ø×ÜÕÝÕÝØÕ ¸×ÜÕÝïÕÜÞÓÞ ¿àÞÓàÐÜÜÝÞÓÞ ÚÞÔÐ ÂàÕâìÕÙ ÁâÞàÞÝë Ø 2) ÞÑàÐâÝÞÕ ßàÕÞÑàÐ×ÞÒÐÝØÕ ÜÞÔãÛÕÙ ¿àÞÓàÐÜÜë, ÚÞâÞàëÕ ÝÕßÞáàÕÔáâÒÕÝÝÞ Ò×ÐØÜÞÔÕÙáâÒãîâ á ¸×ÜÕÝïÕÜëÜ ¿àÞÓàÐÜÜÝëÜ ÚÞÔÞÜ ÂàÕâìÕÙ ÁâÞàÞÝë, ßàØ ãáÛÞÒØØ çâÞ íâÞ ÔÕÛÐÕâáï âÞÛìÚÞ á æÕÛìî ÞâÛÐÔÚØ Ø×ÜÕÝÕÝØÙ, ÒÝÕáÕÝÝëå »ØæÕÝרÐâÞÜ Ò âÐÚÞÙ ßàÞÓàÐÜÜÝëÙ ÚÞÔ âàÕâìÕÙ áâÞàÞÝë. ¾Ñï×ÐâÕÛìáâÒÐ IBM ßÞ ÞÑáÛãÖØÒÐÝØî Ø ßÞÔÔÕàÖÚÕ, ÕáÛØ âÐÚÞÒëÕ Õáâì, ßàØÜÕÝïîâáï âÞÛìÚÞ Ú ÝÕØ×ÜÕÝÕÝÝÞÙ ¿àÞÓàÐÜÜÕ. + +13. ¾ÑéØÕ ãáÛÞÒØï + +a. ½ØçâÞ Ò ÝÐáâÞïéÕÜ ÁÞÓÛÐèÕÝØØ ÝÕ ×ÐâàÐÓØÒÐÕâ ÚÐÚØå-ÛØÑÞ ãáâÐÝÞÒÛÕÝÝëå ×ÐÚÞÝÞÜ ßàÐÒ ßÞâàÕÑØâÕÛÕÙ, ÚÞâÞàëÕ ÝÕ ÜÞÓãâ Ñëâì ÞâÚÛÞÝÕÝë ØÛØ ÞÓàÐÝØçÕÝë ßÞ ÔÞÓÞÒÞàã. + +b. ´Ûï ¿àÞÓàÐÜÜ, ßàÕÔÞáâÐÒÛïÕÜëå IBM »ØæÕÝרÐâã ÝÐ ÝÞáØâÕÛïå, ÞÑï×ÐâÕÛìáâÒÐ IBM ßÞ ßÞáâÐÒÚÕ áçØâÐîâáï ÒëßÞÛÝÕÝÝëÜØ Ò ÜÞÜÕÝâ ÔÞáâÐÒÚØ âÐÚØå ¿àÞÓàÐÜÜ âàÐÝáßÞàâÝÞÙ ÚÞÜßÐÝØØ, ÝÐ×ÝÐçÕÝÝÞÙ IBM, ÕáÛØ ØÝÞÕ ÝÕ áÞÓÛÐáÞÒÐÝÞ Ò ßØáìÜÕÝÝÞÜ ÒØÔÕ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM. + +c. µáÛØ ÚÐÚÞÕ-ÛØÑÞ ãáÛÞÒØÕ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï ÑãÔÕâ ßàØ×ÝÐÝÞ ÝÕÔÕÙáâÒØâÕÛìÝëÜ ØÛØ ÛØèÕÝÝëÜ ØáÚÞÒÞÙ áØÛë, ÞáâÐÛìÝëÕ ßÞÛÞÖÕÝØï ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï ßàÞÔÞÛÖÐîâ ÔÕÙáâÒÞÒÐâì Ò ßÞÛÝÞÜ ÞÑêÕÜÕ. + +d. »ØæÕÝרÐâ áÞÓÛÐáÕÝ áÞÑÛîÔÐâì ÒáÕ ßàØÜÕÝØÜëÕ ×ÐÚÞÝë Ø ßàÐÒØÛÐ íÚáßÞàâÐ Ø ØÜßÞàâÐ, ÒÚÛîçÐï ×ÐÚÞÝÞÔÐâÕÛìÝëÕ ÐÚâë ÁȰ ÞÑ íÜÑÐàÓÞ, áÐÝÚæØïå Ø ×ÐßàÕâÕ ÝÐ íÚáßÞàâ ÔÛï ÞßàÕÔÕÛÕÝÝëå ÚÞÝÕçÝëå ßÞÛì×ÞÒÐâÕÛÕÙ ØÛØ ÔÛï ØáßÞÛì×ÞÒÐÝØï Ò ÞßàÕÔÕÛÕÝÝëå æÕÛïå. + +e. »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ ÚÞÜßÐÝØØ International Business Machines Corporation Ø ÕÕ ÔÞçÕàÝØÜ ÚÞÜßÐÝØïÜ (Ð âÐÚÖÕ Øå ÝÐáÛÕÔÝØÚÐÜ Ø ßàÐÒÞßàÕÕÜÝØÚÐÜ, ßÞÔàïÔçØÚÐÜ Ø ±Ø×ÝÕá-¿ÐàâÝÕàÐÜ IBM) ßàÐÒÞ ÝÐ åàÐÝÕÝØÕ ÚÞÝâÐÚâÝÞÙ ØÝäÞàÜÐæØØ »ØæÕÝרÐâÐ Ø ÕÕ ØáßÞÛì×ÞÒÐÝØÕ Ò ÛîÑÞÜ ÜÕáâÕ ÒÕÔÕÝØï ÔÕÛÞÒÞÙ ÐÚâØÒÝÞáâØ, Ò áÒïר á ßàÞÔãÚâÐÜØ Ø ãáÛãÓÐÜØ IBM ØÛØ ÔÛï ÔÐÛìÝÕÙèÕÙ ßÞÔÔÕàÖÚØ ÔÕÛÞÒëå ÞâÝÞèÕÝØÙ IBM á »ØæÕÝרÐâÞÜ. + +f. ºÐÖÔÐï áâÞàÞÝÐ ßàÕÔÞáâÐÒØâ ÔàãÓÞÙ áâÞàÞÝÕ àÐ×ãÜÝãî ÒÞ×ÜÞÖÝÞáâì ÒëßÞÛÝØâì áÒÞØ ÞÑï×ÐâÕÛìáâÒÐ ÔÞ âÞÓÞ, ÚÐÚ ×ÐïÒØâ Þ ÝÕÒëßÞÛÝÕÝØØ ÔàãÓÞÙ áâÞàÞÝÞÙ ÕÕ ÞÑï×ÐâÕÛìáâÒ ßÞ ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. ÁâÞàÞÝë ÑãÔãâ ßëâÐâìáï ÔÞÑàÞáÞÒÕáâÝÞ àÐ×àÕèÐâì ÒáÕ áßÞàë, àÐ×ÝÞÓÛÐáØï ØÛØ ßàÕâÕÝ×ØØ ÜÕÖÔã áâÞàÞÝÐÜØ, ÞâÝÞáïéØÕáï Ú ÝÐáâÞïéÕÜã ÁÞÓÛÐèÕÝØî. + +g. µáÛØ ØÝÞÕ ÝÕ ßàÕÔãáÜÞâàÕÝÞ ßàØÜÕÝØÜëÜ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ, ÑÕ× ÒÞ×ÜÞÖÝÞáâØ ÞâÚÐ×Ð Þâ ßàÐÒ ßÞ ÔÞÓÞÒÞàã ØÛØ Øå ÞÓàÐÝØçÕÝØï, âÞ: 1) ÝØ ÞÔÝÐ Ø× áâÞàÞÝ ÝÕ ÑãÔÕâ ÒÞ×ÑãÖÔÐâì áãÔÕÑÝëÕ ØáÚØ Ò ÛîÑÞÙ äÞàÜÕ Ø ßÞ ÛîÑÞÙ ßàÕâÕÝרØ, áÒï×ÐÝÝÞÙ á ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ, ßÞ×ÔÝÕÕ çÕÜ çÕàÕ× ÔÒÐ ÓÞÔÐ ßÞáÛÕ ÒÞ×ÝØÚÝÞÒÕÝØï ÞáÝÞÒÐÝØï ÔÛï ØáÚÐ, Ø 2) ßÞ ØáâÕçÕÝØØ ÔÐÝÝÞÓÞ áàÞÚÐ ÛîÑëÕ ßÞÔÞÑÝëÕ ßàÕâÕÝ×ØØ Ø áÒï×ÐÝÝëÕ á ÝØÜØ ßàÐÒÐ ãâàÐçØÒÐîâ áØÛã. + +h. ½Ø »ØæÕÝרÐâ, ÝØ IBM ÝÕ ÝÕáãâ ÞâÒÕâáâÒÕÝÝÞáâØ ×Ð ÝÕÒëßÞÛÝÕÝØÕ ÚÐÚØå-ÛØÑÞ ÞÑï×ÐâÕÛìáâÒ ßÞ ßàØçØÝÐÜ, ÝÐ ÚÞâÞàëÕ ÞÝØ ÝÕ ÜÞÓãâ ßÞÒÛØïâì. + +i. ½ÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ ÝÕ áÞ×ÔÐÕâ ÚÐÚØå-ÛØÑÞ ßàÐÒ ØÛØ ÞáÝÞÒÐÝØÙ ÔÛï ØáÚÐ ÚÐÚØå-ÛØÑÞ âàÕâìØå ÛØæ, Ø IBM ÝÕ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâØ ×Ð ÚÐÚØÕ-ÛØÑÞ ßàÕâÕÝ×ØØ âàÕâìØå ÛØæ Ú »ØæÕÝרÐâã, ×Ð ØáÚÛîçÕÝØÕÜ âÞÓÞ, çâÞ àÐ×àÕèÕÝÞ Ò ¿ÞÔàÐ×ÔÕÛÕ 10.1 (ÂÞ, ×Ð ÇâÞ IBM ¼ÞÖÕâ ½ÕáâØ ¾âÒÕâáâÒÕÝÝÞáâì) ÒëèÕ Ò áÒïר á ÝÐÝÕáÕÝØÕÜ âÕÛÕáÝëå ßÞÒàÕÖÔÕÝØÙ (ÒÚÛîçÐï áÜÕàâì) ØÛØ ßÞÒàÕÖÔÕÝØÕÜ ÝÕÔÒØÖØÜÞÓÞ ØÛØ ÜÐâÕàØÐÛìÝÞÓÞ ÔÒØÖØÜÞÓÞ ØÜãéÕáâÒÐ, ×Ð ÚÞâÞàëÕ IBM ÝÕáÕâ îàØÔØçÕáÚãî ÞâÒÕâáâÒÕÝÝÞáâì ßÕàÕÔ âÐÚÞÙ âàÕâìÕÙ áâÞàÞÝÞÙ. + +j. ·ÐÚÛîçÐï ÝÐáâÞïéÕÕ ÁÞÓÛÐèÕÝØÕ, ÝØ ÞÔÝÐ Ø× áâÞàÞÝ ÝÕ ßÞÛÐÓÐÕâáï ÝÐ ÛîÑëÕ ×ÐïÒÛÕÝØï, ÝÕ ãÚÐ×ÐÝÝëÕ Ò ÔÐÝÝÞÜ ÁÞÓÛÐèÕÝØØ, ÒÚÛîçÐï, ÝÞ ÝÕ ÞÓàÐÝØçØÒÐïáì ØÜØ, ×ÐïÒÛÕÝØï ÞâÝÞáØâÕÛìÝÞ: 1) ßàÞØ×ÒÞÔØâÕÛìÝÞáâØ ØÛØ äãÝÚæØÞÝØàÞÒÐÝØï ¿àÞÓàÐÜÜë; 2) ÜÝÕÝØÙ ØÛØ àÕÚÞÜÕÝÔÐæØÙ ÔàãÓØå áâÞàÞÝ; ØÛØ 3) ÚÐÚØå-ÛØÑÞ àÕ×ãÛìâÐâÞÒ ØÛØ íÚÞÝÞÜØçÕáÚÞÙ ÒëÓÞÔë, ÚÞâÞàëå ÜÞÖÕâ ÔÞáâØçì »ØæÕÝרÐâ. + +k. IBM ßÞÔߨáÐÛÐ áÞÓÛÐèÕÝØï á ÝÕÚÞâÞàëÜØ ÞàÓÐÝØ×ÐæØïÜØ (ØÜÕÝãÕÜëÜØ "±Ø×ÝÕá-¿ÐàâÝÕàÐÜØ IBM") Þ ßàÞÔÒØÖÕÝØØ ÝÐ àëÝÚÕ, ßàÞÔÐÖÕ Ø ßÞÔÔÕàÖÚÕ ÞßàÕÔÕÛÕÝÝëå ¿àÞÓàÐÜÜ. ±Ø×ÝÕá-¿ÐàâÝÕàë IBM ÞáâÐîâáï áÐÜÞáâÞïâÕÛìÝëÜØ Ø ÝÕ×ÐÒØáØÜëÜØ Þâ IBM ÚÞÜßÐÝØïÜØ. IBM ÝÕ ÝÕáÕâ ÞâÒÕâáâÒÕÝÝÞáâØ ×Ð ÔÕÙáâÒØï ØÛØ ×ÐïÒÛÕÝØï ±Ø×ÝÕá-¿ÐàâÝÕàÞÒ IBM ØÛØ ÞÑï×ÐâÕÛìáâÒÐ, ÚÞâÞàëÕ ÞÝØ ØÜÕîâ ßÕàÕÔ »ØæÕÝרÐâÞÜ. + +l. ÃáÛÞÒØï Þ ÒÞ×ÜÕéÕÝØïå, ÚÐáÐîéØÕáï ÛØæÕÝ×ØÙ ØÛØ ØÝâÕÛÛÕÚâãÐÛìÝÞÙ áÞÑáâÒÕÝÝÞáâØ, ÔàãÓØå áÞÓÛÐèÕÝØÙ »ØæÕÝרÐâÐ á IBM (ÝÐßàØÜÕà, ÁÞÓÛÐèÕÝØï IBM á ·ÐÚÐ×çØÚÞÜ), ÝÕ ßàØÜÕÝïîâáï Ú ÛØæÕÝרïÜ ÝÐ ¿àÞÓàÐÜÜë, ßàÕÔÞáâÐÒÛïÕÜëÜ Ò áÞÞâÒÕâáâÒØØ á ÝÐáâÞïéØÜ ÁÞÓÛÐèÕÝØÕÜ. + +m. ¾ÑÕ áâÞàÞÝë áÞÓÛÐáÝë á âÕÜ, çâÞ Òáï ØÝäÞàÜÐæØï, ÚÞâÞàÞÙ ÞÝØ ÑãÔãâ ÞÑÜÕÝØÒÐâìáï, ïÒÛïÕâáï ÝÕÚÞÝäØÔÕÝæØÐÛìÝÞÙ. µáÛØ ÚÐÚÞÙ-ÛØÑÞ Ø× áâÞàÞÝ ßÞâàÕÑãÕâáï ÞÑÜÕÝ ÚÞÝäØÔÕÝæØÐÛìÝÞÙ ØÝäÞàÜÐæØÕÙ, âÞ âÐÚÞÒÞÙ ÑãÔÕâ ÞáãéÕáâÒÛïâìáï ßÞ ßØáìÜÕÝÝÞÜã áÞÓÛÐèÕÝØî Þ ÚÞÝäØÔÕÝæØÐÛìÝÞáâØ. + +14. ³ÕÞÓàÐäØçÕáÚØÕ ÀÐÜÚØ Ø ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ + +14.1 ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ + +¾ÑÕ áâÞàÞÝë áÞÓÛÐèÐîâáï ÝÐ ßàØÜÕÝÕÝØÕ ×ÐÚÞÝÞÒ áâàÐÝë, Ò ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ÛØæÕÝרî ÝÐ ¿àÞÓàÐÜÜã, çâÞÑë àÕÓãÛØàÞÒÐâì, ØÝâÕàßàÕâØàÞÒÐâì Ø ßàØÔÐÒÐâì ØáÚÞÒãî ×ÐéØâã ÒáÕÜ ßàÐÒÐÜ, ÞÑï×ÐÝÝÞáâïÜ Ø ÞÑï×ÐâÕÛìáâÒÐÜ »ØæÕÝרÐâÐ Ø IBM, ÒÞ×ÝØÚÐîéØÜ ÒáÛÕÔáâÒØÕ ØÛØ Ò ÚÐÚÞÙ-ÛØÑÞ áÒïר á ßàÕÔÜÕâÞÜ ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï, ÑÕ×ÞâÝÞáØâÕÛìÝÞ Ú ÝÞàÜÐÜ ÚÞÛÛØ×ØÞÝÝÞÓÞ ßàÐÒÐ. + +ºÞÝÒÕÝæØï ¾àÓÐÝØ×ÐæØØ ¾ÑêÕÔØÝÕÝÝëå ½ÐæØÙ Þ ÔÞÓÞÒÞàÐå ÜÕÖÔãÝÐàÞÔÝÞÙ ÚãßÛØ-ßàÞÔÐÖØ âÞÒÐàÞÒ ÝÕ ßàØÜÕÝïÕâáï. + +14.2 ÎàØáÔØÚæØï + +²áÕ ßàÐÒÐ, ÞÑï×ÐÝÝÞáâØ Ø ÞÑï×ÐâÕÛìáâÒÐ ßÞÔÛÕÖÐâ àÐááÜÞâàÕÝØî áãÔÐÜØ áâàÐÝë, Ò ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ÛØæÕÝרî ÝÐ ¿àÞÓàÐÜÜã. + +ÇÐáâì 2 - ¾áÞÑëÕ ÃáÛÞÒØï ÔÛï ½ÕÚÞâÞàëå ÁâàÐÝ + +´Ûï ÛØæÕÝרÙ, ßàÕÔÞáâÐÒÛÕÝÝëå Ò ßÕàÕçØáÛÕÝÝëå ÝØÖÕ áâàÐÝÐå, áÛÕÔãîéØÕ ãáÛÞÒØï ×ÐÜÕÝïîâ ØÛØ Ø×ÜÕÝïîâ áÞÞâÒÕâáâÒãîéØÕ ãáÛÞÒØï Ò ÇÐáâØ 1. ²áÕ ãáÛÞÒØï Ò ÇÐáâØ 1, ÚÞâÞàëÕ ÝÕ Ø×ÜÕÝïîâáï íâØÜØ ßÞßàÐÒÚÐÜØ, ÞáâÐîâáï Ò áØÛÕ ÑÕ× Ø×ÜÕÝÕÝØÙ. ÇÐáâì 2 ØÜÕÕâ áÛÕÔãîéãî áâàãÚâãàã: + +* ¿ÞßàÐÒÚØ ÔÛï ÝÕáÚÞÛìÚØå áâàÐÝ Ú ÇÐáâØ 1, ÀÐ×ÔÕÛã 14 ("ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ Ø ÎàØáÔØÚæØï"); Ø + +* ¿ÞßàÐÒÚØ ÔÛï áâàÐÝ µÒàÞßë, ±ÛØÖÝÕÓÞ Ø ÁàÕÔÝÕÓÞ ²ÞáâÞÚÐ Ø °äàØÚØ Ú ÔàãÓØÜ ãáÛÞÒØïÜ ÁÞÓÛÐèÕÝØï. + +¿ÞßàÐÒÚØ ÔÛï ÝÕáÚÞÛìÚØå áâàÐÝ Ú ÇÐáâØ 1, ÀÐ×ÔÕÛã 14 ("ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ Ø ÎàØáÔØÚæØï") + +14.1 ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ + +ÄàÐ×Ð "×ÐÚÞÝÞÒ áâàÐÝë, Ò ÚÞâÞàÞÙ »ØæÕÝרÐâ ßàØÞÑàÕÛ ÛØæÕÝרî ÝÐ ¿àÞÓàÐÜÜã" Ò ßÕàÒÞÜ ÐÑ×ÐæÕ ßÞÔàÐ×ÔÕÛÐ 14.1 ("ÀÕÓãÛØàãîéÕÕ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ") ×ÐÜÕÝïÕâáï Ò ßÕàÕçØáÛÕÝÝëå ÝØÖÕ áâàÐÝÐå áÛÕÔãîéØÜØ äàÐ×ÐÜØ: + +µ²À¾¿°, ±»¸¶½¸¹ ¸ ÁÀµ´½¸¹ ²¾Á¾º ¸ °ÄÀ¸º° + +² ±ÕÛÐàãáØ, ºÐ×ÐåáâÐÝÕ, ºëàÓë×áâÐÝÕ Ø ÀÞááØØ: ×ÐÚÞÝÞÒ °ÒáâàØØ. + +14.3 °àÑØâàÐÖ + +ÁÛÕÔãîéØÙ ÐÑ×Ðæ ÔÞÑÐÒÛïÕâáï Ò ÚÐçÕáâÒÕ ÝÞÒÞÓÞ ¿ÞÔàÐ×ÔÕÛÐ 14.3 ("°àÑØâàÐÖ") Ò âÞÙ áâÕßÕÝØ, Ò ÚÞâÞàÞÙ ÞÝ ßàØÜÕÝïÕâáï Ò ßÕàÕçØáÛÕÝÝëå ÝØÖÕ áâàÐÝÐå. ¿ÞÛÞÖÕÝØï ÔÐÝÝÞÓÞ ßÞÔàÐ×ÔÕÛÐ 14.3 ØÜÕîâ ßàÕØÜãéÕáâÒÕÝÝãî áØÛã ßÕàÕÔ ßÞÛÞÖÕÝØïÜØ ßÞÔàÐ×ÔÕÛÐ 14.2 ("ÎàØáÔØÚæØï") Ò âÞÙ ÜÕàÕ, Ò ÚÞâÞàÞÙ íâÞ ÔÞßãáÚÐÕâáï ßàØÜÕÝØÜëÜ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Ø ßàÞæÕááãÐÛìÝëÜØ ÝÞàÜÐÜØ. + +µ²À¾¿°, ±»¸¶½¸¹ ¸ ÁÀµ´½¸¹ ²¾Á¾º ¸ °ÄÀ¸º° + +² ±ÕÛÐàãáØ, ºÐ×ÐåáâÐÝÕ, ºëàÓë×áâÐÝÕ Ø ÀÞááØØ: + +²áÕ áßÞàë, ÒÞ×ÝØÚÐîéØÕ Ø× ÝÐáâÞïéÕÓÞ ÁÞÓÛÐèÕÝØï ØÛØ áÒï×ÐÝÝëÕ á ÕÓÞ ÝÐàãèÕÝØÕÜ, ßàÕÚàÐéÕÝØÕÜ ÔÕÙáâÒØï ØÛØ ßàØ×ÝÐÝØÕÜ ÝÕÔÕÙáâÒØâÕÛìÝëÜ, ßÞÔÛÕÖÐâ ÞÚÞÝçÐâÕÛìÝÞÜã ãàÕÓãÛØàÞÒÐÝØî Ò áÞÞâÒÕâáâÒØØ á ¿àÐÒØÛÐÜØ °àÑØâàÐÖÐ Ø ÃàÕÓãÛØàÞÒÐÝØï ¼ÕÖÔãÝÐàÞÔÝÞÓÞ °àÑØâàÐÖÝÞÓÞ ÆÕÝâàÐ ÄÕÔÕàÐÛìÝÞÙ ÍÚÞÝÞÜØçÕáÚÞÙ ¿ÐÛÐâë Ò ²ÕÝÕ (²ÕÝáÚØÕ ¿àÐÒØÛÐ) âàÕÜï ÐàÑØâàÐÜØ, ÝÐ×ÝÐçÕÝÝëÜØ Ò áÞÞâÒÕâáâÒØØ á ÔÐÝÝëÜØ ßàÐÒØÛÐÜØ. °àÑØâàÐÖÝÞÕ àÐ×ÑØàÐâÕÛìáâÒÞ ÑãÔÕâ ßàÞÒÞÔØâìáï Ò ²ÕÝÕ (°ÒáâàØï), Ø Þ䨿ØÐÛìÝëÜ ï×ëÚÞÜ àÐ×ÑØàÐâÕÛìáâÒÐ ÑãÔÕâ ÐÝÓÛØÙáÚØÙ. ÀÕèÕÝØÕ ÐàÑØâàÞÒ ïÒÛïÕâáï ÞÚÞÝçÐâÕÛìÝëÜ Ø ÞÑï×ÐâÕÛìÝëÜ ÔÛï ÞÑÕØå áâÞàÞÝ. ¿ÞíâÞÜã, Ò áÞÞâÒÕâáâÒØØ á ßÐàÐÓàÐäÞÜ 598 (2) °ÒáâàØÙáÚÞÓÞ ³àÐÖÔÐÝáÚÞ-ßàÞæÕááãÐÛìÝÞÓÞ ÚÞÔÕÚáÐ, áâÞàÞÝë Ò ïÒÝÞ ÒëàÐÖÕÝÝÞÙ äÞàÜÕ ÞâÚÐ×ëÒÐîâáï Þâ ßàØÜÕÝÕÝØï ßÐàÐÓàÐäÐ 595 (1), ßãÝÚâÐ 7 ºÞÔÕÚáÐ. IBM ÜÞÖÕâ, ÞÔÝÐÚÞ, ÒÞ×ÑãÔØâì àÐ×ÑØàÐâÕÛìáâÒÞ Ò ÚÞÜßÕâÕÝâÝÞÜ áãÔÕ Ò áâàÐÝÕ ãáâÐÝÞÒÚØ. + +¿¾¿À°²º¸ ´»Ï ÁÂÀ°½ µ²À¾¿Ë, ±»¸¶½µ³¾ ¸ ÁÀµ´½µ³¾ ²¾Á¾º° ¸ °ÄÀ¸º¸ (EMEA) + +»îÑÐï ÕÒàÞßÕÙáÚÐï áâàÐÝÐ, ÚÞâÞàÐï ßàØÝïÛÐ ÜÕáâÝëÕ ×ÐÚÞÝë Þ ÚÞÝäØÔÕÝæØÐÛìÝÞáâØ ØÛØ ×ÐéØâÕ ÔÐÝÝëå, ÐÝÐÛÞÓØçÝëÕ ÜÞÔÕÛØ µÁ. + +13. ¾ÑéØÕ ãáÛÞÒØï + +¿ãÝÚâ 13.e ×ÐÜÕÝïÕâáï áÛÕÔãîéØÜ: + +(1) ¾ßàÕÔÕÛÕÝØï - Ò ¿ãÝÚâÕ 13.e ØáßÞÛì×ãîâáï áÛÕÔãîéØÕ ÔÞßÞÛÝØâÕÛìÝëÕ ÞßàÕÔÕÛÕÝØï: + +(a) ´ÕÛÞÒÐï ºÞÝâÐÚâÝÐï ¸ÝäÞàÜÐæØï - ÔÕÛÞÒÐï ÚÞÝâÐÚâÝÐï ØÝäÞàÜÐæØï, ÚÞâÞàãî »ØæÕÝרÐâ àÐáÚàëÒÐÕâ IBM, ÒÚÛîçÐîéÐï ØÜÕÝÐ, ÔÞÛÖÝÞáâØ, áÛãÖÕÑÝëÕ ÐÔàÕáÐ, ÝÞÜÕàÐ âÕÛÕäÞÝÞÒ Ø ÐÔàÕáÐ íÛÕÚâàÞÝÝÞÙ ßÞçâë áÞâàãÔÝØÚÞÒ Ø ßÞÔàïÔçØÚÞÒ »ØæÕÝרÐâÐ. ² °ÒáâàØØ, ¸âÐÛØØ Ø ÈÒÕÙæÐàØØ ´ÕÛÞÒÐï ºÞÝâÐÚâÝÐï ¸ÝäÞàÜÐæØï âÐÚÖÕ ÒÚÛîçÐÕâ ØÝäÞàÜÐæØî Þ »ØæÕÝרÐâÕ Ø ÕÓÞ ßÞÔàïÔçØÚÐå ÚÐÚ Þ îàØÔØçÕáÚØå ÛØæÐå (ÝÐßàØÜÕà, ÔÐÝÝëÕ Þ ÔÞåÞÔÐå »ØæÕÝרÐâÐ Ø ÔàãÓãî ØÝäÞàÜÐæØî Þ âàÐÝ×ÐÚæØïå). + +(b) ´ÕÛÞÒëÕ ºÞÝâÐÚâÝëÕ »ØæÐ - áÞâàãÔÝØÚØ Ø ßÞÔàïÔçØÚØ »ØæÕÝרÐâÐ, Ú ÚÞâÞàëÜ ÞâÝÞáØâáï ´ÕÛÞÒÐï ºÞÝâÐÚâÝÐï ¸ÝäÞàÜÐæØï. + +(c) ³ÞáãÔÐàáâÒÕÝÝëÙ ÞàÓÐÝ ßÞ ·ÐéØâÕ ´ÐÝÝëå - ÞàÓÐÝ ãßàÐÒÛÕÝØï, áÞ×ÔÐÝÝëÙ Ò áÞÞâÒÕâáâÒØØ á ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר Ò áÞÞâÒÕâáâÒãîéÕÙ áâàÐÝÕ, ØÛØ, ÔÛï áâàÐÝ, ÝÕ ÒåÞÔïéØå Ò µÁ, - ÞàÓÐÝ, ÞáãéÕáâÒÛïîéØÙ ÝÐÔ×Þà ×Ð ×ÐéØâÞÙ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ò íâÞÙ áâàÐÝÕ; ØÛØ (ÔÛï ÒáÕå ÒëèÕãßÞÜïÝãâëå) ÛîÑÐï ÝÐÔÛÕÖÐéØÜ ÞÑàÐ×ÞÜ ãßÞÛÝÞÜÞçÕÝÝÐï ÞàÓÐÝØ×ÐæØï, ïÒÛïîéÐïáï Øå ßàÐÒÞßàÕÕÜÝØÚÞÜ. + +(d) ·ÐÚÞÝÞÔÐâÕÛìáâÒÞ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר - (i) ßàØÜÕÝØÜÞÕ ÜÕáâÝÞÕ ×ÐÚÞÝÞÔÐâÕÛìáâÒÞ Ø ÔÕÙáâÒãîéØÕ ÝÞàÜÐâØÒÝëÕ ÐÚâë, ÒÒÞÔïéØÕ Ò ÔÕÙáâÒØÕ ´ØàÕÚâØÒã µÁ 95/46/EC (Þ ×ÐéØâÕ ßàÐÒ äØ×ØçÕáÚØå ÛØæ ßàØ ÞÑàÐÑÞâÚÕ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ø áÒÞÑÞÔÝÞÙ ßÕàÕÔÐçÕ âÐÚØå ÔÐÝÝëå) Ø ´ØàÕÚâØÒã µÁ 2002/58/EC (Ò ÞâÝÞèÕÝØØ ÞÑàÐÑÞâÚØ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ø ×ÐéØâë ÚÞÝäØÔÕÝæØÐÛìÝÞáâØ Ò áäÕàÕ íÛÕÚâàÞÝÝëå áàÕÔáâÒ áÒïר), ØÛØ (ii) ÔÛï áâàÐÝ, ÝÕ ÒåÞÔïéØå Ò µÁ, - ßàØÝïâëÕ Ò ÔÐÝÝÞÙ áâàÐÝÕ ×ÐÚÞÝë Ø/ØÛØ ÝÞàÜÐâØÒÝëÕ ÐÚâë, ÚÐáÐîéØÕáï ×ÐéØâë ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå Ø ×ÐÚÞÝÞÔÐâÕÛìÝÞÓÞ àÕÓãÛØàÞÒÐÝØï Ò áäÕàÕ íÛÕÚâàÞÝÝëå áàÕÔáâÒ áÒïר á ØáßÞÛì×ÞÒÐÝØÕÜ ßÕàáÞÝÐÛìÝëå ÔÐÝÝëå, ÒÚÛîçÐï (ÔÛï ÒáÕå ÒëèÕãßÞÜïÝãâëå) ÛîÑëÕ ×ÐÜÕÝïîéØÕ Øå ÝÞàÜÐâØÒÝëÕ ÐÚâë Ø ßÞßàÐÒÚØ Ú ÝØÜ. + +(e) IBM Group - íâÞ International Business Machines Corporation, èâÐÑ-ÚÒÐàâØàÐ ÚÞâÞàÞÙ ÝÐåÞÔØâáï Ò °àÜÞÝÚÕ, èâÐâ ½ìî-¹ÞàÚ (ÁȰ), ÕÕ ÔÞçÕàÝØÕ ÚÞÜßÐÝØØ Ø Øå áÞÞâÒÕâáâÒãîéØÕ ±Ø×ÝÕá-¿ÐàâÝÕàë Ø áãÑßÞÔàïÔçØÚØ. + +(2) »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ IBM ßàÐÒÞ: + +(a) ÞÑàÐÑÐâëÒÐâì Ø ØáßÞÛì×ÞÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî Ò ßàÕÔÕÛÐå IBM Group Ò ßÞÔÔÕàÖÚã »ØæÕÝרÐâÐ, ÒÚÛîçÐï ßàÕÔÞáâÐÒÛÕÝØÕ ãáÛãÓ ßÞÔÔÕàÖÚØ, Ø ÔÛï æÕÛÕÙ ßàÞÔÞÛÖÕÝØï ÔÕÛÞÒëå ÞâÝÞèÕÝØÙ ÜÕÖÔã »ØæÕÝרÐâÞÜ Ø IBM Group, ÒÚÛîçÐï, ÑÕ× ÞÓàÐÝØçÕÝØÙ, ÞÑàÐéÕÝØÕ Ú ´ÕÛÞÒëÜ ºÞÝâÐÚâÝëÜ »ØæÐÜ (ßÞ íÛÕÚâàÞÝÝÞÙ ßÞçâÕ ØÛØ ØÝëÜ áßÞáÞÑÞÜ) Ø ÜÐàÚÕâØÝÓ ßàÞÔãÚâÞÒ Ø ãáÛãÓ IBM Group ("ÃÚÐ×ÐÝÝÐï ÆÕÛì"); Ø + +(b) àÐáÚàëÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî ÔàãÓØÜ ãçÐáâÝØÚÐÜ IBM Group âÞÛìÚÞ ÔÛï ÃÚÐ×ÐÝÝÞÙ ÆÕÛØ. + +(3) IBM áÞÓÛÐèÐÕâáï ÞÑàÐÑÐâëÒÐâì Òáî ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî Ò áÞÞâÒÕâáâÒØØ á ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר Ø ØáßÞÛì×ÞÒÐâì ÕÕ âÞÛìÚÞ ÔÛï ÃÚÐ×ÐÝÝÞÙ ÆÕÛØ. + +(4) ² ÞÑêÕÜÕ, âàÕÑãÕÜÞÜ ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר, »ØæÕÝרÐâ ×ÐïÒÛïÕâ, çâÞ (a) ßÞÛãçØÛ (ØÛØ ßÞÛãçØâ) ÛîÑëÕ áÞÓÛÐáØï Þâ (Ø ÝÐßàÐÒØÛ (ØÛØ ÝÐßàÐÒØâ) ÛîÑëÕ ãÒÕÔÞÜÛÕÝØï) ´ÕÛÞÒëå ºÞÝâÐÚâÝëå »Øæ, ÚÐÚ âÞ ÝÕÞÑåÞÔØÜÞ ÔÛï âÞÓÞ, çâÞÑë àÐ×àÕèØâì IBM Group ÞÑàÐÑÐâëÒÐâì Ø ØáßÞÛì×ÞÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî ÔÛï ÃÚÐ×ÐÝÝÞÙ ÆÕÛØ. + +(5) »ØæÕÝרÐâ ßàÕÔÞáâÐÒÛïÕâ IBM ßàÐÒÞ ßÕàÕÔÐÒÐâì ´ÕÛÞÒãî ºÞÝâÐÚâÝãî ¸ÝäÞàÜÐæØî ×Ð ßàÕÔÕÛë µÒàÞßÕÙáÚÞÙ ÍÚÞÝÞÜØçÕáÚÞÙ ·ÞÝë ßàØ ãáÛÞÒØØ, çâÞ ßÕàÕÔÐçÐ ÑãÔÕâ ÒëßÞÛÝïâìáï á áÞÑÛîÔÕÝØÕÜ ÔÞÓÞÒÞàÝëå ãáÛÞÒØÙ, ÞÔÞÑàÕÝÝëå ³ÞáãÔÐàáâÒÕÝÝëÜ ÞàÓÐÝÞÜ ßÞ ·ÐéØâÕ ´ÐÝÝëå, ØÛØ Ò ØÝëå áÛãçÐïå, ÚÞÓÔÐ ßÕàÕÔÐçÐ àÐ×àÕèÕÝÐ Ò áÞÞâÒÕâáâÒØØ á ·ÐÚÞÝÞÔÐâÕÛìáâÒÞÜ Þ ·ÐéØâÕ ´ÐÝÝëå Ø ÍÛÕÚâàÞÝÝëå ÁàÕÔáâÒÐå áÒïר. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_sl b/charts/mq-devserver/LICENSE_locale/LICENSE_sl new file mode 100644 index 0000000..af23201 --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_sl @@ -0,0 +1,266 @@ +PODATKI O LICENCIRANJU + +Spodaj navedeni programi so licencirani na podlagi naslednjih doloèb in pogojev licenène informacije, ki veljajo poleg pogojev licence za program, s katerimi naroènik in IBM predhodno sogla¹ata. Èe naroènik predhodno ne sogla¹a s pogoji, ki veljajo za program, velja Mednarodna licenèna pogodba za programe brez garancije (Z125-5589-05). + +Ime programa (©tevilka programa): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Za uporabo programa s strani imetnika licence veljajo naslednji standardni pogoji. + +Paketni programi + +Program je licenciran kot paket veè produktov, ki vsebuje spodaj navedene paketne programe. Imetnik licence je poobla¹èen za namestitev in uporabo takih paketnih programov v okviru omejitev v dokazilih o upravièenosti za program in kot je doloèeno v tem dokumentu z licenènimi podatki. Imetnik licence ni poobla¹èen za prenos ali ponovno tr¾enje paketnih programov loèeno od paketa veè produktov. Paketni program lahko vkljuèuje morebitna licenèna doloèila, ki veljajo za imetnika licence pri uporabi tega paketnega programa. V primeru navzkri¾ja doloèila v tem dokumentu z licenènimi podatki prevladajo nad doloèili za paketni program. Ko pravica imetnika licence do uporabe programa poteèe ali preneha biti veljavna, mora imetnik licence prenehati uporabljati vse kopije paketnih programov in jih unièiti ali nemudoma vrniti ponudniku, od katerega je pridobil program. Èe je imetnik licence prenesel paketne programe, se mora obrniti na ponudnika, od katerega je pridobil program. Èe ¾eli imetnik licence licencirati paketne programe za uporabo, ki ni omejena z zgoraj navedenimi doloèili, naj se za pridobitev ustrezne licence obrne na IBM-ovega prodajnega predstavnika ali ponudnika, od katerega je imetnik licence pridobil program. + +S programom so licencirani spodaj navedeni paketni programi: +IBM MQ V9.0.3 + +Omejitev razvijalca + +Èe je program doloèen za "razvijalce", ga je mogoèe razmestiti samo kot del notranjega razvoja in testiranja enote imetnika licence v raèunalniku razvijalca. Raèunalnik razvijalca je fizièno ali navidezno okolje namizja, ki izvaja osnovni operacijski sistem in program, do obeh pa ima dostop in ju uporablja le en doloèen razvijalec. Imetnik licence nima pooblastil za uporabo programa za obdelavo delovnih obremenitev produkcije, simulacijo delovnih obremenitev produkcije ali preizku¹anje raz¹irljivosti katerekoli kode, aplikacije ali kateregakoli sistema. Imetnik licence ne sme uporabiti nobenega dela programa za noben drug namen, èe ne pridobi ustreznih pooblastil za produkcijsko uporabo. + +Komponente, ki niso zahtevane za vzpostavitev potrebnih pooblastil + +Pri doloèanju ¹tevila pooblastil, ki jih potrebuje imetnik licence za namestitev ali uporabo programa, ni upo¹tevana namestitev ali uporaba naslednjih komponent programa. Z drugimi besedami povedano to pomeni, da lahko imetnik licence namesti in uporablja naslednje komponente programa na podlagi licenènih pogojev, vendar se te komponente ne uporabljajo za doloèanje ¹tevila pooblastil, potrebnih za program. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Izvorne komponente in vzorèno gradivo + +Program lahko vkljuèuje nekatere komponente v obliki izvorne kode ("izvorne komponente") in drugo gradivo, imenovano "vzorèno gradivo". Imetnik licence lahko kopira in spreminja izvorne komponente ter vzorèno gradivo za notranjo uporabo samo v primeru, da je tak¹na uporaba v okviru licenènih pravic, doloèenih v tej pogodbi, vendar imetnik licence ne sme spreminjati ali brisati kakr¹nihkoli informacij o avtorstvu ali obvestil v izvornih komponentah ali vzorènem gradivu. IBM ponuja izvorne komponente in vzorèno gradivo brez obveznosti za podporo in "TAK©NO, KAKR©NO JE", BREZ GARANCIJ KAKR©NEKOLI VRSTE, PA NAJ BODO IZRECNE ALI NAKAZANE, KAR VKLJUÈUJE TUDI GARANCIJO ZA NASLOV, NEKR©ENJE ALI NEOVIRANJE IN ZAKONSKE GARANCIJE IN POGOJE ZA PRODAJNOST IN PRIMERNOST ZA DOLOÈEN NAMEN. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Mednarodna licenèna pogodba za programe brez garancije + +1. del - splo¹ne doloèbe + +S TEM, KO IMETNIK LICENCE PRENESE, NAMESTI, PREKOPIRA, DOSTOPI DO, KLIKNE GUMB ?SPREJMEM? ALI KAKO DRUGAÈE UPORABI PROGRAM, SOGLA©A Z DOLOÈBAMI TE POGODBE. ÈE SPREJMETE TE DOLOÈBE V IMENU IMETNIKA LICENCE, ODGOVARJATE IN JAMÈITE, DA IMATE VSA POOBLASTILA ZA POVEZAVO IMETNIKA LICENCE S TEMI DOLOÈBAMI. ÈE S TEMI DOLOÈBAMI NE SOGLA©ATE, + +* PROGRAMA NE PRENESITE, NE NAMESTITE, NE PREKOPIRAJTE, NE DOSTOPITE DO NJEGA, NE KLIKNITE GUMBA ?SPREJMEM? ALI GA NE UPORABITE IN + +* NEMUDOMA VRNITE NEUPORABLJEN MEDIJ IN DOKUMENTACIJO STRANKI, PRI KATERI STE JU PRIDOBILI IN ZAHTEVAJTE POVRAÈILO PLAÈANEGA ZNESKA. ÈE STE PROGRAM PRENESLI, UNIÈITE VSE NJEGOVE KOPIJE. + +1. Definicije + +?Poobla¹èena uporaba?- podana raven, s katero lahko imetnik licence uporablja ali izvaja program. Ta raven je lahko merjena s ¹tevilom uporabnikov, z milijoni storitvenih enot (?MSU-ji?), enotami vrednosti procesorja ("PVU-ji") ali drugimi ravnmi uporabe, ki jih poda IBM. + +?IBM? - International Business Machines Corporation ali ena od njegovih podru¾nic. + +?Podatki o licenciranju? (?LI?) - dokument, ki podaja informacije in kakr¹nekoli dodatne pogoje, specifiène za program. Podatki o licenciranju za program so na voljo na naslovu www.ibm.com/software/sla, najdete pa jih lahko tudi v imeniku programa, jih prika¾ete z vnosom sistemskega ukaza ali si jih ogledate v knji¾ici, ki je prilo¾ena programu. + +?Program? - naslednje, vkljuèno z izvirnikom in vsemi celotnimi ali delnimi kopijami: 1) strojno èitljiva navodila in podatki, 2) komponente, datoteke in moduli, 3) avdiovizualna vsebina (kot so slike, besedilo, posnetki ali slike) in 4) s tem povezano licenèno gradivo (kot so kljuèi in dokumentacija). + +2. Struktura pogodbe + +Ta pogodba vkljuèuje 1. del - splo¹ne doloèbe, 2. del - pogoji, znaèilni za posamezne dr¾ave (èe obstajajo) in podatke o licenciranju, in predstavlja celotno pogodbo med imetnikom licence in IBM-om v zvezi z uporabo programa. Kot tak¹na nadome¹èa vse predhodne ustne ali pisne komunikacije med imetnikom licence in IBM-om v zvezi z njegovo uporabo programa. Doloèbe iz 2. dela lahko nadomestijo ali spremenijo tiste iz 1. dela. V primeru, da pride do navzkri¾ja, imajo prednost pred obema deloma podatki o licenciranju. + +3. Odobritev pogodbe + +Lastnik programa je IBM ali IBM-ov dobavitelj. Program se ne prodaja, paè pa se zanj podeljujejo avtorske pravice in licenca. + +IBM podeljuje imetniku licence neizkljuèno licenco za 1) uporabo programa do poobla¹èene ravni uporabe, ki je doloèena na raèunu, 2) izdelavo in namestitev kopij, ki so v podporo tak¹ni poobla¹èeni uporabi, in 3) izdelavo varnostne kopije, vendar vse pod pogojem, da + +a. je imetnik licence pridobil program na zakonit naèin in zadovoljuje doloèbe te pogodbe; + +b. se varnostna kopija uporabi samo, èe ni mogoèe zagnati varnostno prekopiranega programa; + +c. imetnik licence opremi vsako kopijo ali delno kopijo programa z vsemi obvestili in drugimi oznakami o avtorskih pravicah, ki dokazujejo lastni¹tvo; + +d. imetnik licence zagotovi, da vsak uporabnik, ki dostopi do programa (lokalno ali na daljavo) 1) to naredi samo v imenu imetnika licence in 2) pri tem upo¹teva doloèbe te pogodbe; + +e. imetnik licence program 1) uporablja, kopira, spreminja ali distribuira izkljuèno v skladu z doloèbami te pogodbe; 2) v programu ne uporabi vzvratnega prevajanja, vzvratnega in¾enirstva ali ga kako drugaèe prevede, razen kot izrecno dopu¹èa zakon brez mo¾nosti odpovedi pogodbe; 3) ne uporabi komponent, datotek, modulov, avdiovizualne vsebine ali s tem povezanega licenènega gradiva loèeno od programa; ali 4) programa ne podlicencira, daje v najem ali v zakup; in + +f. èe pridobi imetnik licence ta program kot podporni program, ga bo uporabljal izkljuèno kot podporo glavnemu programu in je predmet vseh omejitev iz licence za glavni program; ali, èe pridobi imetnik licence ta program kot glavni program, bo uporabil vse podporne programe samo kot podporo temu programu in zanj veljajo vse omejitve iz te pogodbe. Za namen te toèke ?f? je ?podporni program? tisti program, ki je del drugega IBM-ovega programa (?glavni program?) in je v podatkih o licenciranju glavnega programa doloèen kot podporni program. (Èe ¾eli imetnik licence pridobiti loèeno licenco za podporni program brez teh omejitev, se mora obrniti na stranko, pri kateri je pridobil podporni program.) + +Ta licenca velja za vsako kopijo programa, ki jo izdela imetnik licence. + +3.1 Zamenjave, posodobitve in popravki + +3.1.1 Zamenjave + +Èe zamenjate program s programom iz zamenjave, licenca za zamenjan program nemudoma preneha veljati. + +3.1.2 Posodobitve in popravki + +Ko pridobi imetnik licence posodobitev ali popravek, sogla¹a z vsemi dodatnimi ali drugaènimi doloèbami, ki veljajo za tak¹no posodobitev ali popravek, in so doloèene v njunih podatkih o licenciranju. Èe niso podane nobene dodatne ali drugaène doloèbe, za posodobitev ali popravek velja izkljuèno ta pogodba. Èe imetnik licence zamenja program s posodobitvijo, sogla¹a, da bo nemudoma prenehal uporabljati zamenjan program. + +3.2 Licence za doloèeno dobo + +Èe dodeli IBM licenco za program za doloèeno dobo, licenca imetnika licence preneha veljati ob koncu te dobe, razen v primeru, èe se imetnik licence in IBM dogovorita, da jo bosta podalj¹ala. + +3.3 Doba in prenehanje veljavnosti + +Ta pogodba ostane v veljavi, dokler se je ne odpove. + +IBM lahko odpove licenco imetnika licence, èe ta ne upo¹teva doloèb te pogodbe. + +Èe katerakoli stranka zaradi kakr¹negakoli razloga odpove licenco, imetnik licence sogla¹a, da bo nemudoma prenehal uporabljati vse kopije programa in jih bo unièil. Vse doloèbe te pogodbe, ki zaradi svoje narave ostanejo v veljavi tudi po izteku te pogodbe, ostanejo v veljavi do svoje izpolnitve, in veljajo za ustrezne naslednike in poobla¹èence obeh pogodbenih strank. + +4. Stro¹ki + +Stro¹ki (èe obstajajo) temeljijo na pridobljeni poobla¹èeni uporabi, ki je doloèena na raèunu. IBM ne daje nobenih posojil ali povraèil za ¾e zapadle ali plaèane bremenitve, razen èe je to doloèeno kje drugje v tej pogodbi. + +Èe ¾eli imetnik licence poveèati svojo poobla¹èeno uporabo, mora o tem vnaprej obvestiti IBM ali poobla¹èenega IBM-ovega prodajalca in plaèati vse ustrezne bremenitve. + +5. Davki + +Èe ustrezna slu¾ba za program doloèi takso, davek, pristojbino ali prispevek, kar ne vkljuèuje tistih, ki temeljijo na IBM-ovem èistem dohodku, imetnik licence sogla¹a, da bo plaèal ta znesek, podan na raèunu, ali pa posredoval dokumente o oprostitvi. Imetnik licence je odgovoren za vse davke na osebno lastnino za program od datuma njegove pridobitve. Èe ustrezna slu¾ba doloèi carinsko takso, davek, dajatev ali pristojbino za uvoz ali izvoz, prenos, dostop do ali uporabo programa izven dr¾ave, v kateri je bila zanj imetniku licence dodeljena licenca, se imetnik licence strinja, da je odgovoren za kakr¹enkoli zaraèunan znesek in ga bo tudi plaèal. + +6. Garancija za vraèilo denarja + +Èe imetnik licence iz kakr¹negakoli vzroka ni zadovoljen s programom in je izvirni imetnik licence, lahko preklièe licenco in pridobi povraèilo plaèanega zneska (èe obstaja) za program, pod pogojem, da imetnik licence vrne program stranki, pri kateri ga je pridobil, v roku 30 dni od datuma raèuna. Èe gre za licenco za doloèeno obdobje, ki se lahko podalj¹a, lahko pridobi imetnik licence povraèilo samo, èe vrne program v prvih 30 dneh zaèetnega obdobja. Èe je imetnik licence prenesel program, naj se za navodila o denarnem vraèilu obrne na stranko, pri kateri ga je pridobil. + +7. Prenos programa + +Imetnik licence lahko prenese program in vse njegove pravice in dol¾nosti na drugo stranko samo, èe ta stranka sogla¹a z doloèbami te pogodbe. Èe katerakoli stran zaradi kakr¹negakoli vzroka prekine licenco, imetnik licence ne sme prenesti programa na drugo stranko. Imetnik licence ne sme prenesti dela 1) programa ali 2) poobla¹èene uporabe programa. Èe imetnik licence prenese program, mora prenesti tudi natisnjeno kopijo te pogodbe, vkljuèno s podatki o licenciranju. Licenca imetnika licence preneha veljati nemudoma po prenosu. + +8. Brez garancij + +V SKLADU S KATERIMIKOLI ZAKONITIMI GARANCIJAMI, KI JIH NI MOGOÈE IZKLJUÈITI, NE DAJE IBM NOBENIH GARANCIJ ALI POGOJEV, IZRECNIH ALI NAKAZANIH, V ZVEZI S PROGRAMOM ALI PODPORO, ÈE SPLOH, KAR VKLJUÈUJE TUDI (VENDAR NI OMEJENO NA) KAKR©NEKOLI NAKAZANE GARANCIJE ALI POGOJE TR®NOSTI, ZADOVOLJIVE KAKOVOSTI, UPORABNOSTI ZA DOLOÈEN NAMEN IN PRAVNI NASLOV TER KAKR©NEKOLI GARANCIJE ALI POGOJE NEKR©ENJA. + +NEKATERE DR®AVE ALI JURISDIKCIJE NE DOVOLIJO IZKLJUÈITVE IZRECNIH ALI NAKAZANIH GARANCIJ, ZATO ZGORNJA OMEJITEV ZA VAS LAHKO NE VELJA. V TEM PRIMERU JE TRAJNOST TAK©NIH GARANCIJ OMEJENA NA MINIMALNO ZAKONSKO ZAHTEVANO OBDOBJE. PO IZTEKU TEGA ROKA NE VELJA VEÈ NOBENA GARANCIJA. NEKATERE DR®AVE ALI JURISDIKCIJE NE DOVOLIJO OMEJITVE V TRAJANJU NAKAZANIH GARANCIJ, ZATO ZGORNJA OMEJITEV LAHKO NE VELJA ZA IMETNIKA LICENCE. IMETNIKU LICENCE LAHKO PRIPADAJO TUDI DRUGE PRAVICE, KI SE RAZLIKUJEJO OD DR®AVE DO DR®AVE IN OD JURISDIKCIJE DO JURISDIKCIJE. + +IZKLJUÈITVE IN IZVZETJA IZ TEGA 8. RAZDELKA VELJAJO TUDI ZA VSE IBM-OVE RAZVIJALCE IN DOBAVITELJE PROGRAMOV. + +PROIZVAJALCI, DOBAVITELJI ALI ZALO®NIKI PROGRAMOV, KI NISO IBM-OVI, LAHKO PODAJO SVOJE LASTNE GARANCIJE. + +IBM NE NUDI PODPORE KAKR©NEKOLI VRSTE, RAZEN ÈE NE DOLOÈI DRUGAÈE. V TAK©NEM PRIMERU JE KAKR©NAKOLI PODPORA, KI JO NUDI IBM, PREDMET IZKLJUÈITEV IN IZVZETIJ IZ TEGA 8. RAZDELKA. + +9. Podatki in baze podatkov imetnika licence + +Da bi imetniku licence pomagali pri osamitvi vzroka te¾ave v programu, lahko IBM od njega zahteva, da 1) omogoèi IBM-u oddaljen dostop do svojega sistema ali 2) IBM-u po¹lje podatke o licenciranju ali sistemske podatke. Toda IBM ni obvezan nuditi tak¹ne podpore, razen èe skleneta IBM in imetnik licence loèeno pisno pogodbo, na podlagi katere IBM sogla¹a, da bo nudil imetniku licence to vrsto podpore, ki presega obveznosti IBM-a iz te pogodbe. V vsakem primeru bo IBM uporabil informacije o napakah in te¾avah za izbolj¹anje svojih izdelkov in storitev in kot pomoè pri nudenju s tem povezanih ponudb za podporo. V ta namen lahko IBM vkljuèi IBM-ove pravne osebe in podpogodbenike (kar vkljuèuje tudi tiste v eni ali veè dr¾avah, v katerih se ne nahaja imetnik licence), imetnik licence pa daje IBM-u v ta namen pooblastilo. + +Imetnik licence ostaja odgovoren za 1) vse podatke in vsebino vseh baz podatkov, ki jih imetnik licence omogoèi za IBM, 2) izbiro in uvedbo postopkov in nadzora v zvezi z dostopanjem, za¹èito, ¹ifriranjem, uporabljanjem in prena¹anjem podatkov (vkljuèno z vsemi osebnimi podatki) in 3) varnostno kopiranje in obnavljanje vseh baz podatkov in shranjenih podatkov. Imetnik licence IBM-u ne bo poslal ali priskrbel dostopa do osebnih informacij, ki so lahko v podatkovni ali kakr¹nikoli drugi obliki, in bo odgovoren za sprejemljive stro¹ke in druge zneske, ki jih lahko nalo¾i IBM v zvezi s tak¹nimi informacijami, ki so po nesreèi posredovane IBM-u, ali za izgubo ali razkritje tak¹nih informacij s strani IBM-a, vkljuèno s tistimi, do katerih pride zaradi zahtevkov katerihkoli tretjih strani. + +10. Omejitev odgovornosti + +Omejitve in izkljuèitve iz tega razdelka 10 (Omejitev odgovornosti) veljajo v celoti, èe jih ne prepoveduje veljaven zakon brez mo¾nosti pogodbene odpovedi. + +10.1 Primeri, za katere je IBM lahko odgovoren + +Zaradi napake IBM-a ali zaradi kak¹ne druge obveznosti lahko pride do okoli¹èin, v katerih je imetnik licence od IBM-a upravièen terjati od¹kodnino. Ne glede na osnovo, na kateri lahko imetnik licence od IBM terja od¹kodnino (vkljuèno z osnovno kr¹itvijo, malomarnostjo, napaèno predstavitvijo dejstev ali kak¹nim drugim pogodbenim ali kazenskim zahtevkom), IBM-ova celotna odgovornost za vse skupne zahtevke, vlo¾ene zaradi programa ali v povezavi z njim ali ki so kako drugaèe vlo¾eni na osnovi te pogodbe, ne prese¾e zneska 1) ¹kode za telesne po¹kodbe (vkljuèno s smrtjo) in ¹kode v nepremièninah in v osebnih premièninah in 2) druge dejanske neposredne ¹kode do zneska (èe je program predmet bremenitev za doloèeno obdobje, veljajo 12-meseène bremenitve), ki ga je plaèal imetnik licence za program, ki je predmet zahtevka. + +Ta omejitev velja tudi za vse IBM-ove razvijalce in dobavitelje programa, in predstavlja maksimum, za katerega so IBM in razvijalci in dobavitelji programa kolektivno odgovorni. + +10.2 Primeri, za katere IBM ni odgovoren + +IBM IN NJEGOVI RAZVIJALCI ALI DOBAVITELJI PROGRAMA POD NOBENIMI POGOJI NE ODGOVARJAJO ZA NASLEDNJE PRIMERE, TUDI ÈE SO OBVE©ÈENI O MO®NOSTI, DA DO NJIH PRIDE: + +a. IZGUBO ALI PO©KODBO PODATKOV; + +b. POSEBNO, NAKLJUÈNO, KAZENSKO ALI POSLEDIÈNO ©KODO ALI KAKR©NOKOLI EKONOMSKO POSLEDIÈNO ©KODO; ALI + +c. IZGUBLJENE DOBIÈKE, POSLOVANJE, DOHODKE, DOBRO IME ALI PRIÈAKOVANE PRIHRANKE. + +11. Preverjanje skladnosti + +Za namene tega 11. razdelka (Preverjanje skladnosti) pomenijo "doloèbe programa ILAN" 1) to pogodbo in ustrezna dopolnila in transakcijske dokumente, ki jih poda IBM in 2) IBM-ova naèela za programsko opremo, ki jih je mogoèe najti na IBM-ovem spletnem mestu z naèeli za programsko opremo (www.ibm.com/softwarepolicies), kar vkljuèuje tudi (vendar ni omejeno na) naèela, ki se nana¹ajo na izdelavo varnostnih kopij, doloèanje cen za podkapaciteto in selitev. + +Pravice in obveznosti iz tega razdelka 11 ostanejo v veljavi v obdobju, v katerem je program licenciran za imetnika licence in ¹e dve leti zatem. + +11.1 Postopek preverjanja + +Imetnik licence sogla¹a, da bo izdelal, hranil in posredoval IBM-u in njegovim revizorjem natanène pisne zapiske, izhodne podatke sistemskih orodij in druge sistemske informacije, ki zadostujejo za preverjanje, ali uporablja imetnik licence programe v skladu z doloèbami programa ILAN, kar vkljuèuje tudi (vendar ni omejeno na) vse IBM-ove ustrezne doloèbe za licenciranje in doloèanje cen. Imetnik licence mora 1) zagotoviti, da ne prese¾e svoje poobla¹èene uporabe in 2) da upo¹teva doloèbe programa ILAN. + +Na osnovi predhodnega obvestila lahko IBM na vseh lokacijah in v vseh okoljih, v katerih imetnik licence (za kakr¹enkoli namen) uporablja programe, preveri skladnost z doloèbami programa ILAN. Pri tak¹nem preverjanju bomo posku¹ali èim manj motiti poslovanje imetnika licence in ga lahko opravimo na lokaciji imetnika licence med obièajnimi poslovnimi urami. IBM lahko kot pomoè pri preverjanju vkljuèi neodvisnega revizorja, pod pogojem, da je IBM z njim podpisal pogodbo o zaupnosti. + +11.2 Razre¹itev + +IBM bo imetnika licence v pisni obliki obvestil, èe se pri tak¹nem preverjanju poka¾e, da je imetnik licence pri uporabi kateregakoli programa presegal svojo poobla¹èeno uporabo ali kako drugaèe ni upo¹teval doloèb programa ILAN. Imetnik licence sogla¹a, da bo IBM-u nemudoma in neposredno plaèal bremenitve, ki jih IBM poda na raèunu za 1) tak¹no prese¾eno uporabo, 2) podporo za tak¹no prese¾eno uporabo za trajanje tak¹ne prese¾ene uporabe ali za dve leti (kar je kraj¹e) in 3) vse dodatne stro¹ke in druge obveznosti, ki so ugotovljene kot rezultat tak¹nega preverjanja. + +12. Obvestila za druge proizvajalce + +Program lahko vkljuèuje kodo drugega proizvajalca, za katero dodeli v tej pogodbi licenco IBM in ne drug proizvajalec. Opombe (èe obstajajo) za kodo drugega proizvajalca ("Obvestila za druge proizvajalce") so vkljuèena zgolj kot informacija za imetnika licence. Ta obvestila boste na¹li v datoteki (datotekah) OPOMBE programa. Informacije o tem, kako pridobiti izvorno kodo za kodo doloèenih drugih proizvajalcev, boste na¹li v razdelku Obvestila za druge proizvajalce. Èe IBM v razdelku Obvestila za druge proizvajalce identificira kodo drugega proizvajala kot ?kodo drugega proizvajalca z mo¾nostjo spreminjanja?, daje IBM imetniku licence pooblastilo za 1) spreminjanje kode drugega proizvajalca z mo¾nostjo spreminjanja in 2) vzvratno in¾enirstvo v modulih programa, ki so v neposrednem stiku s kodo drugega proizvajalca z mo¾nostjo spreminjanja, pod pogojem, da gre izkljuèno za namen razhro¹èevanja (debugging) popravkov imetnika licence v tak¹ni kodi drugega proizvajalca. IBM-ove servisne in podporne obveznosti (èe obstajajo) veljajo samo za nespremenjen program. + +13. Splo¹no + +a. Noben del te pogodbe ne vpliva na nobene zakonite pravice potro¹nikov, ki jih ni mogoèe odpovedati ali omejiti s pogodbo. + +b. Za programe, ki jih IBM posreduje imetniku licence v materialni obliki, bo IBM izpolnil svoje obveznosti glede dobave in dostave ob dostavi tak¹nih programov ¹pediterju, ki ga imenuje IBM, razen èe se IBM in imetnik licence v pisni obliki ne dogovorita drugaèe. + +c. Èe se za katero doloèbo iz te pogodbe ugotovi, da ni veljavna ali da je ni mogoèe uveljaviti, preostale doloèbe iz te pogodbe ostanejo v polni veljavi. + +d. Imetnik licence sogla¹a, da bo upo¹teval vse lokalne zakone in predpise v zvezi z izva¾anjem in uva¾anjem, vkljuèno s predpisi in prepovedmi v povezavi z embargom in sankcijami o izvozu za doloèene konène uporabe ali za doloèene uporabnike. + +e. Imetnik licence poobla¹èa dru¾bo International Business Machines Corporation in njene podru¾nice (in njene naslednike in poobla¹èence, pogodbenike in IBM-ove poslovne partnerje) za shranjevanje in uporabo poslovnih kontaktnih informacij imetnika licence tam, kjer poslujejo, v povezavi z IBM-ovimi izdelki in storitvami ali pri pospe¹evanju IBM-ovega odnosa z imetnikom licence. + +f. Vsaka stran bo drugi strani omogoèila sprejemljivo prilo¾nost za zadovoljitev doloèb, preden bo zaèela trditi, da druga ne zadovoljuje svojih obveznosti iz te pogodbe. Strani bosta poskusili v dobri veri razre¹iti vse spore, nesoglasja ali druge zahteve med stranmi v povezavi s to pogodbo. + +g. Razen èe drugaèe ne zahteva lokalen zakon brez mo¾nosti pogodbene odpovedi ali omejitve: 1) nobena stranka ne bo spro¾ila pravnega postopka, ne glede na njegovo obliko, za katerokoli zahtevo, nastalo v povezavo s to pogodbo, veè kot dve leti po nastanku vzroka za zahtevo; in 2) po izteku tega èasovnega obdobja vsi tak¹ni zahtevki in druge ustrezne pravice, povezane z zahtevkom, zastarajo. + +h. Niti imetnik licence niti IBM nista odgovorna za neizpolnitev katerekoli obveznosti zaradi vzrokov, ki jih ni mogoèe nadzorovati. + +i. Ta pogodba ne daje osnove za nobene pravice ali zahtevke katerihkoli tretjih strank, niti ni IBM odgovoren za nobene zahtevke tretjih strank proti imetniku licence, razen kot dovoljuje zgornji podrazdelek 10.1 (Primeri, za katere je IBM lahko odgovoren) za telesne po¹kodbe (vkljuèno s smrtjo) ali ¹kodo na nepremièninah ali v osebnih premièninah, za katere je IBM zakonsko odgovoren tej tretji stranki. + +j. Ob sklepu te pogodbe se nobena stranka ne zana¹a na nobeno predstavitev, ki ni podana v tej pogodbi, kar vkljuèuje tudi (vendar ni omejeno na) kakr¹nokoli predstavitev, ki se nana¹a na: 1) zmogljivost ali delovanje programa; 2) izku¹nje ali priporoèila drugih strank; ali 3) kakr¹nekoli rezultate ali prihranke, ki jih lahko ustvari imetnik licence. + +k. IBM je z doloèenimi organizacijami (imenovanimi "IBM-ovi poslovni partnerji") podpisal pogodbe za promoviranje, tr¾enje in podpiranje doloèenih programov. IBM-ovi poslovni partnerji so neodvisni in loèeni od IBM-a. IBM ni odgovoren za dejanja ali izjave IBM-ovih poslovnih partnerjev ali za obveznosti, ki jih imajo do imetnika licence. + +l. Doloèbe v zvezi z od¹kodnino za licenco in intelektualno lastnino iz drugih pogodb, ki jih je imetnik licence podpisal z IBM-om (kot je na primer IBM-ova pogodba za stranke), ne veljajo za programske licence, dodeljene s to pogodbo. + +m. Obe stranki sogla¹ata, da so vse izmenjane informacije nezaupne. Èe katera od strank zahteva izmenjavo zaupnih informacij, bosta sklenili podpisano pogodbo o zaupnosti. + +14. Geografsko podroèje in zakonodaja + +14.1 Zakonodaja + +Obe pogodbeni stranki sogla¹ata, da bodo zakoni dr¾ave, v kateri je imetnik licence pridobil licenco za program, uporabljeni za upravljanje, interpretiranje in uveljavljanje vseh ustreznih pravic, dol¾nosti in obveznosti imetnika licence in IBM-a, nastalih na osnovi predmeta te pogodbe ali v povezavi z njim, ne glede na navzkri¾je zakonskih naèel. + +Konvencija Zdru¾enih narodov v zvezi s pogodbami za mednarodno prodajo blaga ne velja. + +14.2 Sodna pristojnost + +Vse pravice, dol¾nosti in obveznosti bodo obravnavala sodi¹èa v dr¾avi, v kateri imetnik licence pridobi licenco za program. + +2. del - pogoji, znaèilni za posamezne dr¾ave + +Za licence, ki so dodeljene v Sloveniji, naslednje doloèbe nadome¹èajo ali spremenijo omenjene doloèbe iz 1. dela. Vse doloèbe iz 1. dela, ki jih ti popravki ne spremenijo, ostanejo nespremenjene in v veljavi. + +DOPOLNILA ZA DR®AVE V EVROPI, NA SREDNJEM VZHODU IN V AFRIKI (EMEA) + +DR®AVE ÈLANICE EVROPSKE UNIJE + +8. Brez garancij + +8. razdelku (Brez garancij) je dodano naslednje: + +V Evropski uniji ("EU") pripadajo strankam zakonske pravice, ki izhajajo iz ustrezne dr¾avne zakonodaje, ki ureja prodajo potro¹ni¹kih dobrin. Predpisi iz tega 8. razdelka (Brez garancij) ne vplivajo na tak¹ne pravice. + +DR®AVE ÈLANICE EU IN DR®AVE, DOLOÈENE SPODAJ + +Katerakoli evropska dr¾ava, ki je predpisala varstvo lokalnih podatkov ali zakonodajo o varstvu, podobno modelu iz EU. + +13. Splo¹no + +Naslednje nadome¹èa toèko 13.e: + +(1) Definicije - Za namene toèke 13.e veljajo naslednje dodatne definicije: + +(a) Poslovne kontaktne informacije - s podjetjem povezane kontaktne informacije, ki jih IBM-u razkrije imetnik licence, vkljuèno z imeni, naslovi delovnih mest, poslovnimi naslovi, telefonskimi ¹tevilkami in elektronskimi naslovi uslu¾bencev in pogodbenikov imetnika licence. Za Avstrijo, Italijo in ©vico vkljuèujejo poslovne kontaktne informacije tudi informacije o imetniku licence in njegovih pogodbenikih kot pravnih osebah (kot so na primer podatki o dohodkih imetnika licence in druge transakcijske informacije). + +(b) Kontaktno osebje podjetja - Uslu¾benci in pogodbeniki imetnika licence, s katerimi so povezane poslovne kontaktne informacije. + +(c) Urad za varstvo podatkov - urad, vzpostavljen na podlagi zakonodaje o varstvu podatkov in elektronskih komunikacijah v ustrezni dr¾avi, za dr¾ave, ki niso èlanice EU, pa urad, ki je odgovoren za nadzor varstva osebnih podatkov v tej dr¾avi ali (za karkoli od zgoraj omenjenega) katerikoli zakonito imenovan pravni naslednik. + +(d) Zakonodaja o varstvu podatkov in elektronskih komunikacijah - (i) ustrezna lokalna zakonodaja in veljavni predpisi, ki uveljavljajo zahteve Smernice EU 95/46/EC (o za¹èiti posameznikov glede obdelave osebnih podatkov in prostega pretoka tak¹nih podatkov) in Smernice EU 2002/58/EC (ki se nana¹a na obdelavo osebnih podatkov in varstvo zasebnosti v sektorju elektronskih komunikacij); ali (ii) za dr¾ave, ki niso èlanice EU, zakonodaja in/ali predpisi, ki veljajo v ustrezni dr¾avi, in se nana¹ajo na varstvo osebnih podatkov in reguliranje elektronskih komunikacij, ki vkljuèujejo osebne podatke, kar vkljuèuje tudi (za karkoli od zgoraj omenjenega) kakr¹nokoli njihovo zakonito zamenjavo ali popravke. + +(e) IBM-ova skupina - International Business Machines Corporation iz Armonka, New York, ZDA, njene podru¾nice in njeni poslovni partnerji in podpogodbeniki. + +(2) Imetnik licence poobla¹èa IBM za: + +(a) obdelavo in uporabo poslovnih kontaktnih informacij znotraj IBM-ove skupine, ki so v podporo imetniku licence, kar vkljuèuje tudi nudenje podpornih storitev, in za namene pospe¹evanja poslovnega odnosa med imetnikom licence in IBM-ovo skupino, kar vkljuèuje tudi (vendar ni omejeno na) stik s kontaktnim osebjem podjetja (po elektronski po¹ti ali kako drugaèe) in tr¾enje izdelkov in storitev IBM-ove skupine ("doloèen namen"); in + +(b) razkritje poslovnih kontaktnih informacij drugim èlanom IBM-ove skupine, vendar samo za izvajanje doloèenega namena. + +(3) IBM sogla¹a, da bodo vse poslovne kontaktne informacije obdelane v skladu z zakonodajo o varstvu podatkov in elektronskih komunikacijah in bodo uporabljene izkljuèno za "doloèen namen". + +(4) Do mere, ki jo zahteva zakonodaja za varstvo podatkov in elektronske komunikacije, imetnik licence izjavlja, da (a) je pridobil (ali bo pridobil) privolitve kontaktnega osebja podjetja (ali je izdal ali bo izdal obvestila zanje), potrebne, da bi IBM-ovi skupini omogoèil obdelavo in uporabo poslovnih kontaktnih informacij za "doloèen namen". + +(5) Imetnik licence daje IBM-u pooblastilo za prenos poslovnih kontaktnih informacij izven evropskega ekonomskega prostora, pod pogojem, da prenos temelji na pogodbenih doloèbah, ki jih odobri urad za varstvo podatkov, ali da je prenos kako drugaèe dovoljen na podlagi zakonodaje o varstvu podatkov in elektronskih komunikacijah. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_tr b/charts/mq-devserver/LICENSE_locale/LICENSE_tr new file mode 100644 index 0000000..74b3b5d --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_tr @@ -0,0 +1,280 @@ +LÝSANS BÝLGÝLERÝ + +Aþaðýda listelenen programlar, daha önce Müþteri ve IBM tarafýndan kabul edilen Program lisansý koþullarýna ek olarak aþaðýdaki Lisans Bilgilerinin kayýt ve koþullarý kapsamýnda lisanslanýr. Müþteri, Programa iliþkin yürürlükte olan lisans koþullarýný daha önce kabul etmemiþse, Garanti Verilmeyen Programlar Ýçin Uluslararasý Lisans Sözleþmesi (Z125-5589-05) geçerli olur. + +Program Adý (Program Numarasý): +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +Aþaðýdaki standart koþullar, Lisans Alan Tarafýn Programý kullanýmý için geçerlidir. + +Paketlenmiþ Programlar + +Bu Program, aþaðýda belirtilen Paketlenmiþ Programlardan oluþan, birden çok ürünün bulunduðu bir paket olarak lisanslanýr. Lisans Alan Tarafa, bu tür Paketlenmiþ Programlarý, Programa iliþkin Yetki Belgelerinin sýnýrlarý dahilinde ve Lisans Bilgileri belgesinde belirtildiði þekilde kurmasý ve kullanmasý için yetki verilir. Lisans Alan Tarafýn, Paketlenmiþ Programlarý birden çok ürünün yer aldýðý paketten ayrý olarak devretme ya da yeniden pazarlama yetkisi yoktur. Bir Paketlenmiþ Programla birlikte lisans koþullarý ve eðer varsa, Lisans Alan Tarafýn bu Paketlenmiþ Programý kullanýmý için geçerli olan koþullar da gönderilebilir. Herhangi bir çeliþki durumunda, bu Lisans Bilgileri belgesinde yer alan koþullar Paketlenmiþ Programýn koþullarýný hükümsüz kýlarak onlarýn yerine geçer. Lisans Alan Tarafýn, bu Programý kullaným hakký sona erdiðinde ya da sona erdirildiðinde, Paketlenmiþ Programlarýn tüm kopyalarýný kullanmaya son vermesi, bunlarý yok etmesi veya Programý edindiði üçüncü kiþiye derhal iade etmesi gerekir. Lisans Alan Taraf, Paketlenmiþ Programlarý karþýdan yüklediyse, bu Programý edindiði tarafla baðlantýya geçmelidir. Lisans Alan Taraf, Paketlenmiþ Programlarý, yukarýda belirtilen sýnýrlarý aþacak þekilde kullanmak amacýyla lisanslamak isterse, uygun lisansý edinmek için IBM Satýþ Temsilcisiyle veya Programý edindiði tarafla görüþmelidir. + +Bu Programlarla birlikte lisanslanan Paketlenmiþ Programlar aþaðýda belirtilmiþtir: +IBM MQ V9.0.3 + +Geliþtirici Sýnýrlamasý + +Bu Program, "Geliþtiriciler" için belirlendiyse, yalnýzca bir geliþtirici makinesinde Lisans Alan Tarafýn dahili geliþtirme ve birim denemesi amaçlarýyla devreye alýnabilir. Geliþtirici makinesi, her ikisi de eriþilebilir olan ve yalnýzca tek bir belirli geliþtirici tarafýndan kullanýlan birincil iþletim sistemini ve bu Programý çalýþtýran fiziksel ya da sanal bir masaüstü ortamýdýr. Lisans Alan Taraf bu Programý üretim iþyüklerinin iþlenmesi, üretimde ortaya çýkan iþyüklerinin benzerlerinin yaratýlmasý ya da herhangi bir kod, uygulama ya da sistemin ölçeklenebilirliðinin denenmesi için kullanamaz. Uygun ürün yetkilerini almadýðý sürece, Lisans Alan Tarafa, bu Programýn hiçbir bölümünü baþka herhangi bir amaçla kullanmasý için yetki verilmez. + +Gerekli Yetkilerin Oluþturulmasý için Kullanýlmayan Bileþenler + +Lisans Alan Tarafýn bu Programý kurmasý ya da kullanmasý için gereken yetki sayýsý belirlenirken, aþaðýda belirtilen Program bileþenlerinin kurulumu ve kullanýmý dikkate alýnmaz. Baþka bir deyiþle, Lisans Alan Taraf aþaðýdaki Program bileþenlerini lisans koþullarý kapsamýnda kurabilir ve kullanabilir, ancak bu bileþenler bu Program için gereken yetki sayýsýnýn belirlenmesinde kullanýlmaz. +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Kaynak Bileþenler ve Örnek Malzemeler + +Bu Program, kaynak kodu biçimindeki bazý bileþenleri ("Kaynak Bileþenler") ve Örnek Malzemeler olarak tanýmlanan diðer malzemeleri içerebilir. Lisans Alan Taraf, Kaynak Bileþenleri ve Örnek Malzemeleri ancak Kaynak Bileþenleri ve Örnek Malzemeleri kullanýmýnýn bu Sözleþme kapsamýndaki lisans haklarý tarafýndan çizilen sýnýrlar içinde kalmasý ve ancak Kaynak Bileþenlerde ya da Örnek Malzemelerde içerilen hiçbir telif hakký bilgisini veya bildirimini deðiþtirmemek veya silmemek koþuluyla dahili olarak kullanmak amacýyla kopyalayabilir ve kullanabilir. IBM, Kaynak Bileþenleri ve Örnek Malzemeleri, destek yükümlülüðü olmaksýzýn ve MÜLKÝYETE, HAK ÝHLALÝ YAPILMAYACAÐINA VEYA MÜDAHALE EDÝLMEYECEÐÝNE DAÝR GARANTÝLER ÝLE TÝCARÝLÝÐE VE BELÝRLÝ BÝR AMACA UYGUNLUÐA DAÝR ZIMNÝ GARANTÝLER VE KOÞULLAR DA DAHÝL OLMAK, ANCAK TÜMÜ BUNLARLA SINIRLI OLMAMAK ÜZERE, AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEKSÝZÝN "OLDUÐU GÝBÝ" ESASIYLA SAÐLAR. + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +Garanti Verilmeyen Programlar Ýçin Uluslararasý Lisans Sözleþmesi + +Bölüm 1 - Genel Koþullar + +LÝSANS ALAN TARAF, BU PROGRAMI YÜKLEYEREK, KURARAK, KOPYALAYARAK, KULLANARAK "KABUL EDÝYORUM" DÜÐMESÝNÝ TIKLAYARAK YA DA BU PROGRAMI HERHANGÝ BÝR BAÞKA ÞEKÝLDE KULLANARAK VEYA BU PROGRAMA ERÝÞÝM SAÐLAYARAK, BU SÖZLEÞMENÝN KOÞULLARINI KABUL ETMÝÞ SAYILIR. BU KOÞULLARI, LÝSANS ALAN TARAF ADINA KABUL EDÝYORSANIZ, LÝSANS ALAN TARAFIN SÖZ KONUSU KOÞULLARA UYACAÐINI TAAHHÜT EDEBÝLECEK TAM YETKÝYE SAHÝP OLDUÐUNUZU BEYAN VE GARANTÝ EDERSÝNÝZ. BU KOÞULLARI KABUL ETMÝYORSANIZ: + +* BU PROGRAMI YÜKLEMEYÝNÝZ, KURMAYINIZ, KOPYALAMAYINIZ, "KABUL EDÝYORUM" DÜÐMESÝNÝ TIKLAMAYINIZ, KULLANMAYINIZ YA DA BU PROGRAMA ERÝÞÝM SAÐLAMAYIN; VE + +* EÐER VARSA, ÖDEDÝÐÝNÝZ TUTARIN GERÝ ÖDENMESÝ ÝÇÝN KULLANILMAMIÞ ORTAMI VE BELGELERÝ, PROGRAMI ALDIÐINIZ TARAFA DERHAL ÝADE EDÝNÝZ. PROGRAMI YÜKLEYEREK EDÝNDÝYSENÝZ, PROGRAMIN TÜM KOPYALARINI ÝMHA EDÝNÝZ. + +1. Tanýmlar + +"Yetkili Kullaným" - Lisans Alan Tarafýn, Programý yürütmeye veya çalýþtýrmaya yetkili olduðu belirtilen seviye. Bu seviye, kullanýcý sayýsý, milyon cinsinden hizmet birimi ("MSU"), Ýþlemci Deðer Birimi ("PVU") veya IBM tarafýndan belirlenen herhangi bir diðer kullaným seviyesi esas alýnarak ölçülebilir. + +"IBM" - International Business Machines Corporation veya baðlý kuruluþlarýndan biri. + +"Lisans Bilgileri" ("LI") - belirli bir Programa özgü bilgileri ve ek koþullarý içeren belge. Programlara iliþkin Lisans Bilgileri belgelerine þu Web adresinden ulaþýlabilir: www.ibm.com/software/sla. Lisans Bilgileri (LI) belgesi ayný zamanda, bir sistem komutu kullanýlarak eriþilen Program dizininde bulunabilir ya da Programla birlikte bir kitapçýk biçiminde gönderilebilir. + +"Program" - orijinalleri ve onun tüm kýsmi veya tam kopyalarý da dahil olmak üzere, aþaðýdakiler anlamýndadýr: 1) makine tarafýndan okunabilir komutlar ve veriler, 2) bileþenler, dosyalar ve modüller, 3) iþitsel-görsel içerik (örneðin, görüntüler, metinler, kayýtlar ya da resimler) ve 4) iliþkili lisanslý malzemeler (örneðin, anahtarlar ve belgeler). + +2. Sözleþmenin Yapýsý + +Bu Sözleþme, Bölüm 1 - Genel Koþullar, Bölüm 2 - Ülkeye Özgü Koþullar (eðer varsa) adlý bölümleri ve Lisans Bilgileri'ni içerir ve bu Programýn kullanýmýna iliþkin Lisans Alan Tarafla IBM arasýndaki sözleþmenin tamamýný oluþturur. Bu Sözleþme, Lisans Alan Tarafýn Programý kullanmasýyla ilgili olarak IBM ile arasýnda daha önce gerçekleþtirilen her türlü sözlü ve yazýlý iletiþimin yerine geçer. Bölüm 2'de yer alan koþullar Bölüm 1'de yer alan koþullarýn yerine geçebilir veya onlarý deðiþtirebilir. Ýki Bölümün koþullarý arasýnda herhangi bir çeliþki olmasý durumunda, Lisans Bilgileri belgesi her iki Bölümün yerine uygulanýr. + +3. Lisans Verilmesi + +Bu Programýn sahibi IBM ya da bir IBM saðlayýcýsýdýr. Bu Program telif hakkýna tabidir ve lisanslanýr, satýlmaz. + +IBM, Lisans Alan Tarafa, aþaðýda belirtilen koþullarla: 1) Programý faturada belirtilen Yetkili Kullaným düzeyinde kullanmasý, 2) bu tür bir Yetkili Kullanýmý desteklemek için Program kopyalarýný çýkarmasý ve kurmasý, ve 3) bir yedekleme kopyasý çýkarmasý için, münhasýr olmayan bir lisans verir: + +a. Lisans Alan Tarafýn, Programý yasalara uygun olarak edinmiþ olmasý ve bu Sözleþmesinin koþullarýna uygun davranmasý gerekir; + +b. Yedekleme kopyasýný, yalnýzca yedeklenen Program çalýþtýrýlamaz olduðunda çalýþtýrmasý gerekir; + +c. Lisans Alan Tarafýn, tüm telif hakký bildirimlerini ve mülkiyete iliþkin diðer tüm açýklamalarý Programýn her kopyasýna veya kýsmi kopyasýna kopyalayarak eklemesi gerekir; + +d. Lisans Alan Taraf, bu Programý kullanan herkesin (yerel olarak veya uzaktan eriþim ile), 1) bu Programý yalnýzca Lisans Alan Taraf adýna kullanacaðýný ve 2) bu Sözleþmenin koþullarýna uymasýný saðlayacaðýný kabul etmiþ sayýlýr; + +e. Lisans Alan Taraf, 1) Programý bu Sözleþmede açýkça izin verilenler dýþýnda baþka bir biçimde kullanamaz, kopyalayamaz, deðiþtiremez ya da daðýtamaz; 2) geçerli yasalarýn sözleþme ile deðiþtirilmesine olanak tanýmayarak açýkça izin verdiði durumlar dýþýnda, Programý ters düzenleyemez, ters derleyemez, baþka yöntemlerle çevirisini yapamaz veya amacý dýþýnda kullanamaz; 3) Programýn hiçbir bileþenini, dosyasýný, modülünü, sesli ve görüntülü içeriðini veya iliþkili lisanslý malzemeleri programdan ayrý olarak kullanamaz; veya 4) Programý alt lisanslayamaz, kiralayamaz ya da Program için finansal kiralama yapamaz; ve + +f. Lisans Alan Taraf, Programý Destekleyici Program (Supporting Program) olarak edinirse, bu Programý yalnýzca Asýl Programý (Principal Program) desteklemek üzere ve Asýl Programýn lisansýnda yer alan tüm sýnýrlamalara tabi olarak kullanýr. Lisans Alan Taraf, bu Programý Asýl Program olarak edinirse, tüm Destekleyici Programlarý yalnýzca bu Programý desteklemek üzere ve bu Sözleþmede yer alan tüm sýnýrlamalara tabi olarak kullanýr. Bu "f" maddenin amaçlarý açýsýndan "Destekleyici Program", baþka bir IBM Programýnýn ("Asýl Program") bir bölümüdür ve Asýl Programýn Lisans Bilgileri (LI) belgesinde Destekleyici Program olarak olarak belirtilir. (Bir Destekleyici Programý herhangi bir sýnýrlamaya tabi olmadan kullanmak üzere destekleyici Program için ayrý bir lisans almak amacýyla Lisans Alan Tarafýn, Destekleyici Programý edindiði tarafa baþvurmasý gerekir. ) + +Bu lisans, Lisans Alan Tarafýn çýkardýðý tüm Program kopyalarý için geçerlidir. + +3.1 Geçiþ Amaçlý Büyütmeler, Güncellemeler, Düzeltmeler ve Yamalar + +3.1.1 Geçiþ Amaçlý Büyütmeler + +Bu Program, bir Geçiþ Amaçlý Büyütme Programýyla deðiþtirilirse, deðiþtirilen Programýn lisansý derhal sona erer. + +3.1.2 Güncellemeler, Düzeltmeler ve Yamalar + +Programla ilgili olarak bir güncelleme, düzeltme veya yama alan Lisans Alan Taraf, bu tür güncelleme, düzeltme veya yamalarýn Lisans Bilgileri belgelerinde belirtilen ve bu güncelleme, düzeltme veya yamalar için geçerli olan tüm ek veya farklý koþullarý kabul eder.Herhangi bir ek veya farklý koþul saðlanmadýysa, ilgili güncelleme, düzeltme veya yama için yalnýzca bu Sözleþmenin koþullarý geçerli olur. Lisans Alan Tarafýn, elindeki Program Programýn herhangi bir güncellemesi ile deðiþtirildiyse, deðiþtirilen Programý kullanmaya derhal son verecektir. + +3.2 Sabit Süreli Lisanslar + +IBM, Programý sabit bir süre için lisansladýysa, Lisans Alan Taraf ve IBM sözkonusu sabit süreyi yenilemeye karar vermedikleri sürece, Lisans Alan Tarafýn lisansý bu sabit sürenin sonunda sona erer. + +3.3 Süre ve Sona Erdirme + +Bu Sözleþme, sona erdirilinceye kadar geçerlidir. + +Lisans Alan Tarafýn bu Sözleþmenin koþullarýna uygun davranmamasý durumunda IBM, Lisans Alan Tarafýn lisansýný sona erdirebilir. + +Lisans, taraflardan herhangi biri tarafýndan herhangi bir nedenle sona erdirildiyse, Lisans Alan Taraf derhal programý kullanmaya son verir ve Programýn kendisinde bulunan tüm kopyalarýný imha eder. Nitelikleri gereði Sözleþmenin sona erdirilmesi ile sona ermeyen Sözleþme hükümleri yerine getirilinceye kadar yürürlükte kalýr ve taraflarýn haleflerini ve devralanlarýný baðlar. + +4. Ücretler + +Ücretler, eðer varsa, edinilen ve faturada belirtilen Yetkili Kullanýmý esas alýr. IBM bu Sözleþmenin baþka bir yerinde belirtilenler dýþýnda, muaccel olmuþ ya da ödenmiþ ücretler için Lisans Alan Tarafa alacak kaydetmez ya da geri ödeme yapmaz. + +Yetkili Kullaným düzeyini artýrmak isteyen Lisans Alan Taraf, bu durumu önceden IBM'e veya bir IBM yetkili satýcýsýna bildirmeli ve geçerli tüm ücretleri ödemelidir. + +5. Vergiler + +IBM'in net gelirine dayananlar hariç olmak üzere, herhangi bir yetkili makam Programla ilgili olarak vergi, resim, harç veya baþkaca mali yükün ödenmesini zorunlu kýlarsa, Lisans Alan Taraf, bu tutarý bir faturada belirtildiði þekilde ödemeyi veya bunlardan muafsa, muaf olduðuna iliþkin belgeyi IBM'e saðlamayý kabul eder. Programla ilgili olarak, Programý edindiði tarihten sonraki tüm kiþisel mülkiyet vergilerinden Lisans Alan Taraf sorumlu olur. Orijinal Lisans Alan Tarafýn lisans aldýðý ülkeye yapýlan ithalat nedeniyle veya orijinal Lisans Alan Tarafýn lisans aldýðý ülkeden yapýlan ihracat veya devir ya da Programýn orijinal Lisans Alan Tarafýn lisans aldýðý ülke dýþýnda kullanýmý veya Programa orijinal Lisans Alan Tarafýn lisans aldýðý ülke dýþýndan eriþilmesi nedeniyle herhangi bir yetkili makam, özel vergi, resim, harç veya baþkaca mali yükün ödenmesini zorunlu kýlarsa, Lisans Alan Taraf sözkonusu özel vergi, resim, harç veya baþkaca mali yükleri ödemekten sorumlu olduðunu ve bunlarý ödeyeceðini kabul eder. + +6. Para Ýadesi Garantisi + +Lisans Alan Taraf, herhangi bir nedenle Programdan memnun kalmazsa ve orijinal Lisans Alan Tarafsa, Programý, faturanýn kendisine gönderildiði tarihten itibaren otuz (30) gün içinde Programý edindiði tarafa iade etmesi koþuluyla, lisansý sona erdirebilir ve eðer varsa Program için ödediði ücreti geri alabilir. Lisans, yenilemeye tabi olan bir sabit süreli lisans ise, Lisans Alan Taraf, ancak ilk sabit sürenin baþlamasýndan sonraki otuz (30) gün içinde Programý ve Yetki Belgesini (PoE) iade ederse, Program için ödediði ücreti geri alabilir. Lisans Alan Taraf Programý bir yerden yüklediyse, parasýnýn iade edilmesine iliþkin yönergeler için Programý edindiði tarafla baðlantý kurmalýdýr. + +7. Programýn Devri + +Lisans Alan Taraf, Programý ve Lisans Alan Tarafýn tüm lisans haklarý ve yükümlülüklerini, yalnýzca devralan tarafýn bu Sözleþmenin koþullarýný kabul etmesi koþuluyla baþka bir tarafa devredebilir. Lisans, taraflardan herhangi biri tarafýndan herhangi bir nedenle sona erdirildiyse, Lisans Alan Tarafýn Programý üçüncü bir tarafa devretmesi yasaktýr. Lisans Alan Taraf, 1) Programýn veya 2) Programa iliþkin Yetkili Kullanýmýnýn bir kýsmýný devredemez.Lisans Alan Taraf Programý devrederse, Lisans Bilgileri belgesi dahil olmak üzere, bu Sözleþmenin basýlý bir kopyasýný da devretmelidir. Devir iþlemi tamamlandýktan hemen sonra, Lisans Alan Tarafýn lisansý sona erer. + +8. Garanti Verilmez + +TABÝ BULUNDUÐU KANUNLARIN GARANTÝ KAPSAMI DIÞINDA TUTULAMAYACAÐINI BELÝRTTÝÐÝ GARANTÝLER DIÞINDA IBM, BU PROGRAMA VEYA VARSA DESTEÐE ÝLÝÞKÝN HAK ÝHLALÝ YAPILMAYACAÐINA DAÝR GARANTÝLER VEYA KOÞULLAR ÝLE TÝCARÝLÝK, YETERLÝ KALÝTE VE BELÝRLÝ BÝR AMACA UYGUNLUK ÝÇÝN ZIMNÝ GARANTÝLER VEYA KOÞULLAR DA DAHÝL OLMAK, ANCAK BUNLARLA SINIRLI OLMAMAK ÜZERE AÇIK VEYA ZIMNÝ HÝÇBÝR GARANTÝ VERMEZ VEYA KOÞUL ÖNE SÜRMEZ. + +BAZI ÜLKELER YA DA HUKUK DÜZENLERÝ, AÇIK YA DA ZIMNÎ GARANTÝLERÝN HARÝÇ TUTULMASINA ÝZÝN VERMEZ, BU DURUMDA YUKARIDA HARÝÇ TUTULAN GARANTÝLER LÝSANS ALAN TARAF ÝÇÝN GEÇERLÝ OLMAYABÝLÝR. BÖYLE BÝR DURUMDA, BU TÜR GARANTÝLER YASAL OLARAK GEREKLÝ GÖRÜLEN EN KISA SÜREYLE SINIRLIDIR. BU SÜRE DOLDUKTAN SONRA HÝÇBÝR GARANTÝ GEÇERLÝ DEÐÝLDÝR. BAZI ÜLKELER YA DA HUKUK DÜZENLERÝ, ZIMNÝ GARANTÝNÝN NE KADAR SÜRECEÐÝNE ÝLÝÞKÝN SINIRLAMALARA ÝZÝN VERMEZ, BU DURUMDA YUKARIDAKÝ SINIRLAMALAR LÝSANS ALAN TARAF ÝÇÝN GEÇERLÝ OLMAYABÝLÝR. LÝSANS ALAN TARAF, ÜLKELERE YA DA HUKUK DÜZENLERÝNE GÖRE DEÐÝÞEN DÝÐER HAKLARA DA SAHÝP OLABÝLÝR. + +BU 8. BÖLÜMDE YER ALAN RED VE HARÝÇ TUTMA KOÞULLARI, AYRICA IBM'ÝN PROGRAM GELÝÞTÝRÝCÝLERÝ VE SAÐLAYICILARININ TÜMÜ ÝÇÝN DE GEÇERLÝDÝR. + +IBM DIÞI PROGRAMLARIN ÜRETÝCÝLERÝ, SAÐLAYICILARI VEYA YAYINCILARI KENDÝ GARANTÝLERÝNÝ VEREBÝLÝRLER. + +IBM AKSÝNÝ BELÝRTMEDÝÐÝ SÜRECE, HÝÇBÝR DESTEK SAÐLAMAZ. BU TÜR BÝR DURUMDA, IBM TARAFINDAN SAÐLANAN HER TÜRLÜ DESTEK ÝÞBU 8. BÖLÜMDE YER ALAN RED VE HARÝÇ TUTMA KOÞULLARINA TABÝ OLUR. + +9. Lisans Alan Tarafýn Verileri ve Veritabanlarý + +IBM, Lisans Alan Tarafa, bu Programla ilgili olarak ortaya çýkan bir sorunun nedenini ayrýþtýrmasýnda yardýmcý olmak için Lisans Alan Taraftan, 1) Lisans Alan Tarafýn sistemine uzaktan eriþmesi amacýyla IBM'e izin vermesini, ya da 2) Lisans Alan Tarafýn bilgilerini veya sistem verilerini IBM'e göndermesini isteyebilir. IBM'in iþbu Sözleþmeyle üstlendiði yükümlülüklerin kapsamý dýþýnda kalan bir teknik desteði Lisans Alan Tarafa saðlamasý için IBM ile Lisans Alan Taraf arasýnda ayrý bir yazýlý sözleþmenin imzalanmasý ve bu sözleþmeyle IBM'in Lisans Alan Tarafa bu tür bir teknik desteði vermeyi kabul etmiþ olmasý gerekir. Aksi durumda IBM Lisans Alan Tarafa bu tür bir desteði saðlamakla yükümlü olmaz. Her durumda, IBM, ürün ve hizmetlerini geliþtirmek amacýyla hata ve sorunlara iliþkin bilgileri kullanýr ve ilgili destek tekliflerin saðlanmasýna yardýmcý olur. IBM, bu amaçla, (Lisans Alan Tarafýn yerleþik olduðu ülke dýþýndaki bir veya birden çok ülkede faaliyet gösterenler de dahil olmak üzere) IBM tüzel kiþiliklerini ve altyüklenicilerini kullanabilir ve Lisans Alan taraf da bu þekilde davranmasý için IBM'e yetki verir. + +Lisans Alan Taraf, 1) IBM'e saðladýðý tüm verilerden ve tüm veritabaný içeriklerinden, 2) (kiþisel olarak tanýmlanabilen veriler de dahil olmak üzere) verilere eriþilmesi, verilerin güvenliði, þifrelenmesi, kullanýmý ve aktarýmýyla ilgili prosedürve denetimlerin seçimi ve uygulanmasýndan ve 3) tüm veritabanlarýnýn ve depolanmýþ olan tüm verilerin yedeklenmesinden ve kurtarýlmasýndan sorumludur. Lisans Alan Taraf, hiçbir veriyi veya herhangi bir diðer biçimdeki kiþisel olarak tanýmlanabilen hiçbir bilgiyi veri veya baþka bir þekilde IBM'e göndermeyecek veya saðlamayacaktýr ve IBM'e yanlýþlýkla saðlanan bu tür tüm bilgilerle ya da üçüncü kiþi iddialarýndan kaynaklananlar da dahil olmak üzere, bu türlü bilgilerin IBM tarafýndan kaybedilmesiyle veya açýklanmasýyla iliþkili olarak IBM'in ödemek zorunda kalabileceði tüm makul masraflardan ve diðer tutarlardan Lisans Alan Taraf sorumlu olacaktýr. + +10. Sorumluluklarýn Sýnýrý + +10 numaralý (Sorumluluklarýn Sýnýrý) bu bölümde yer alan tüm sýnýrlamalar ve hariç tutmalar, geçerli yasalar tarafýndan sözleþmeyle deðiþtirilmesine olanak tanýnmayarak yasaklanmadýðý sürece, tümüyle geçerlidir. + +10.1 IBM'in Sorumlu Olabileceði Maddeler + +IBM'in bir kusurundan veya sorumluluklarýný yerine getirmemesinden kaynaklanan ve Lisans Alan Tarafýn zararlarýný IBM'den talep etmeye hak kazandýðý durumlar olabilir. Lisans Alan Tarafýn, zararýný IBM'den talep etmesine olanak saðlayan yasal dayanak (Sözleþmenin esasa iliþkin ihlali, ihmal, yanlýþ beyan, diðer akdi iddialar veya haksýz fiil iddialarý dahil olmak üzere) her ne olursa olsun, IBM'in her bir Programdan kaynaklanan veya her bir Programla iliþkili veya baþka bir þekilde bu Sözleþmeden kaynaklanan tüm iddialar karþýsýndaki bütün sorumluluðu aþaðýda belirtilen tutarlarý aþmayacaktýr: 1) ölüm dahil cismani zarar ile taþýnmaz ve taþýnabilir kiþisel mallara verilen zararlar; ve 2) Lisans Alan Tarafýn iddiaya konu olan Programa iliþkin ödediði ücreti aþmamak koþuluyla (eðer, Program sabit süreli lisans ücretine tabiyse, en çok on iki (12) aylýk ücrete kadar olmak koþuluyla) herhangi diðer gerçek doðrudan zararlar. + +Bu sýnýrlama, ayrýca IBM'in Program geliþtiricileri ve saðlayýcýlarý için de geçerlidir. Bu tutar, IBM ve Program geliþtiricilerinin ve saðlayýcýlarýnýn toplu olarak sorumlu olduklarý azami tutardýr. + +10.2 IBM'in Sorumlu Olmadýðý Maddeler + +OLASILIKLARI ÖNCEDEN BÝLDÝRÝLMÝÞ OLSA BÝLE, IBM, IBM'ÝN PROGRAM GELÝÞTÝRÝCÝLERÝ VEYA SAÐLAYICILARI AÞAÐIDAKÝLERÝN HÝÇBÝRÝNDEN HÝÇBÝR KOÞUL ALTINDA SORUMLU OLMAZLAR: + +a. VERÝLERDEKÝ KAYIP VEYA HASARDAN; + +b. ÖZEL, ARIZÝ, CEZAÝ VEYA DOLAYLI ZARARLARDAN VEYA SONUÇTA ORTAYA ÇIKAN EKONOMÝK ZARARLARDAN; VEYA + +c. KAR KAYBI, ÝÞ KAYBI, GELÝR KAYBI, ÝTÝBAR KAYBI VEYA BEKLENEN TASARRUFUN KAYBINDAN. + +11. Mevzuat Uyumluluðunun Doðrulanmasý + +11 numaralý (Mevzuat Uyumluluðunun Doðrulanmasý) bu bölümün amaçlarý açýsýdan, "ILAN Program Koþullarý": 1) bu Sözleþme ve IBM tarafýndan saðlanan geçerli deðiþiklik ve iþlem belgeleri, ve 2) yedeklemeyle, alt kapasite fiyatlandýrmasýyla ve geçiþle ilgili ilkeler de dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere, IBM Software Policy (IBM Yazýlým Ýlkesi) Web sitesinde (www.ibm.com/softwarepolicies) bulunabilecek IBM yazýlým ilkeleri anlamýna gelir. + +11. numaralý bu bölümde belirtilen haklar ve yükümlülükler, Programýn Lisans Alan Tarafa lisanslandýðý dönem boyunca ve bu süreyi takip eden iki (2) yýl boyunca, geçerliliðini sürdürmeye devam eder. + +11.1 Doðrulama Süreci + +Lisans Alan Taraf, tüm Programlarý kullanýmýnýn, IBM'in hak kazanmaya iliþkin geçerli tüm lisans ve fiyatlandýrma koþullarý da dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere, ILAN Program Koþullarýna uygun olup olmadýðýnýn belirlenmesi amacýyla doðru tutulmuþ yazýlý kayýtlarý, sistem araçlarý çýktýlarýný ve diðer sistem bilgilerini yaratmayý, bunlarý saklamayý ve IBM ve ve denetçilerine saðlamayý kabul eder. 1) Yetkili Kullanýmýna iliþkin sýnýrlarý aþmadýðýný ve 2) UPLS Program Koþullarýna uygun olduðunu kanýtlamak Lisans Alan Tarafýn sorumluluðundadýr. + +Makul bir süre önceden bildirerek, IBM, Lisans Alan Tarafýn, ILAN Program Koþullarýna tabi olan Programlarý (herhangi bir amaçla) kullandýðý tüm yerlerde ve tüm ortamlarda, ILAN Program Koþullarýna uygun davranýp davranmadýðýný soruþturabilir. Bu tür bir soruþturma iþlemi, Lisans Alan Tarafýn iþine en az engel olacak þekilde ve normal iþ saatleri içinde Lisans Alan Tarafýn tesislerinde yapýlacaktýr. IBM'in, bu tür bir denetçiyle yazýlý bir gizlilik sözleþmesi yapmýþ olmasý koþuluyla, IBM bu tür bir soruþturma iþleminde yardýmcý olacak baðýmsýz bir denetçi kullanabilir. + +11.2 Karar + +Bu tür bir soruþturmanýn sonunda, Lisans Alan Tarafýn herhangi bir Programý Yetkili Kullanýmýný aþacak þekilde kullandýðýnýn ya da ILAN Program Koþullarýna uygun davranmadýðýnýn belirlenmesi durumunda IBM, Lisans Alan Tarafa bu durumu yazýlý olarak bildirecektir. Lisans Alan Taraf, doðrudan IBM'e, IBM'in bir faturada belirttiði 1) bu tür yetkiyi aþan tüm kullanýmlara, 2) hangisi daha kýsaysa, bu tür yetkiyi aþan kullaným süresi veya iki yýl için verilen desteðe, ve 3) bu tür bir soruþturmanýnsonucunda belirlenen tüm ek ücretlere ve diðer yükümlülüklere iliþkin ücretleri derhal ödemeyi kabul eder. + +12. Üçüncü Kiþi Bildirimleri + +Bu Program, Lisans Alan Tarafa bu Sözleþme kapsamýnda üçüncü kiþi tarafýndan deðil IBM tarafýndan lisanslanan üçüncü kiþi kodunu içerebilir. Eðer varsa, üçüncü kiþi koduna iliþkin Bildirimler ("Üçüncü Kiþi Bildirimleri"), Programa yalnýzca Lisans Alan Tarafa bilgi vermek üzere eklenmiþtir. Bu bildirimler, Programýn NOTICES dosyasýnda/dosyalarýnda bulunabilir. Bazý üçüncü kiþi kodlarýna iliþkin kaynak kodunun nasýl edinilebileceðine iliþkin bilgi, Üçüncü Kiþi Bildirimlerinde bulunabilir. IBM, Üçüncü Kiþi Bildirimlerinde üçüncü kiþi kodunu "Deðiþtirilebilir Üçüncü Kiþi Kodu" olarak tanýmlarsa, Lisans Alan Tarafa, 1) Deðiþtirilebilir Üçüncü Kiþi Kodunu deðiþtirme ve 2) yalnýzca, Lisans Alan Tarafýn bu tür bir üçüncü kiþi kodunda yaptýðý deðiþikliklerde hata ayýklama amacýyla olmak koþuluyla, Deðiþtirilebilir Üçüncü Kiþi Koduyla doðrudan arabirim oluþturan Program modülleri üzerinde ters mühendislik iþlemleri yapma yetkisi verir. IBM'in hizmet ve destek yükümlülükleri, eðer varsa, yalnýzca deðiþtirilmemiþ Program için geçerlidir. + +13. Genel Koþullar + +a. Bu Sözleþmenin hiçbir koþulu, tüketicilerin sözleþme yoluyla vazgeçilemeyen veya sýnýrlandýrýlamayan yasal haklarýný etkilemez. + +b. IBM'in Lisans Alan Tarafa somut bir ürün olarak saðladýðý Programlar için, Lisans Alan Taraf ile IBM arasýnda yazýlý olarak aksi kararlaþtýrýlmadýkça, IBM, bu Programlarý kendisi tarafýndan belirlenen taþýyýcýya teslim edilmesini takiben, teslimata ve sevkiyata iliþkin yükümlülüklerini yerine getirir. + +c. Bu Sözleþmenin herhangi bir hükmü geçersiz ya da uygulanamaz olduðunda, Sözleþmenin geri kalan hükümleri tam olarak yürürlükte kalmaya ve geçerli olmaya devam eder. + +d. Lisans Alan Taraf, belirli son kullaným türleri ve belirli kullanýcýlara yönelik ABD ambargosu ve yaptýrýmlarý da dahil olmak üzere, tüm geçerli ihracat ve ithalat yasa ve yönetmeliklerine uygun davranmayý kabul eder. + +e. Lisans Alan Taraf, International Business Machines Corporation ve baðlý kuruluþlarýna (ve bunlarýn haleflerine ve devralanlarýna, yüklenicilerine ve IBM Çözüm Ortaklarýna), IBM ürün ve hizmetleriyle ilgili veya IBM ile iþ iliþkisini geliþtirmek amacýyla, Lisans Alan Tarafýn iletiþim bilgilerini iþ yaptýklarý herhangi bir yerde depolama ve kullanma izni verir. + +f. Taraflardan her biri, diðer tarafýn bu Sözleþmeyle ilgili yükümlülüklerini yerine getirmediði iddiasýnda bulunmadan önce, diðer tarafa ilgili yükümlülüðü yerine getirmesi için gereken makul fýrsatý tanýmayý kabul eder. Taraflar, bu Sözleþmeyle ilgili olarak ortaya çýkabilecek tüm ihtilaflarý, anlaþmazlýklarý veya iddialarý iyi niyetle çözmeye çalýþacaklardýr. + +g. Geçerli yasalarýn sözleþmeyle deðiþtirilmesine veya sýnýrlandýrýlmasýna olanak tanýmayarak aksini belirttiði durumlar dýþýnda: 1) taraflardan hiçbiri, bu Sözleþmeden kaynaklanan veya bu Sözleþmeyle ilgili olarak yasal iþlem gerektiren bir durumun üzerinden iki yýldan fazla bir süre geçtikten sonra hangi biçimde olursa olsun, yasal bir iþlemde bulunamaz; ve 2) bu sürenin sona ermesiyle birlikte, bu tür tüm iddialar ve bu iddialarla ilgili tüm haklar zamanaþýmýna uðrar. + +h. Taraflardan hiçbiri, elinde olmayan nedenlerden ötürü yükümlülüklerini yerine getirememekten sorumlu tutulamaz. + +i. Bu Sözleþme herhangi bir üçüncü kiþi için bir dava hakký ya da bir dava nedeni yaratmaz ve ayrýca IBM, yukarýda yer alan 10.1 numaralý (IBM'in Sorumlu Olabileceði Maddeler) baþlýklý bölümde izin verilenler dýþýnda ilgili üçüncü kiþiye karþý yasal olarak sorumlu olduðu (ölüm dahil) cismani zarar veya taþýnmaz ve taþýnabilir kiþisel mallara verilen zarar dýþýnda, üçüncü bir kiþi tarafýndan Lisans Alan tarafa yöneltilen herhangi bir iddiaya karþý sorumluluk üstlenmez. + +j. Bu Sözleþmeyi imzalayarak, taraflardan hiçbiri : 1) Bu Programýn performans veya iþlevleri; 2) diðer taraflarýn deneyimleri veya önerileri; veya 3) Lisans Alan Tarafýn elde edebileceði sonuçlar veya tasarruflar da dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere bu Sözleþmede belirtilmemiþ olan hiçbir beyana itibar etmeyecektir. + +k. IBM, belirli kuruluþlarla ("IBM Çözüm Ortaklarý" olarak adlandýrýlýr) belirli Programlarý tanýtmak, pazarlamak ve desteklemek üzere sözleþmeler imzalamýþtýr. IBM Çözüm Ortaklarý, IBM'den ayrý ve baðýmsýz kuruluþlardýr. IBM, IBM Çözüm Ortaklarýnýn eylemlerinden veya bildirimlerinden ya da Lisans Alan Tarafa karþý yükümlülüklerinden sorumlu deðildir. + +l. Lisans Alan Tarafýn IBM ile yaptýðý diðer sözleþmelere (örneðin, IBM Müþteri Sözleþmesi) iliþkin lisans ve fikri mülkiyete iliþkin tazminat koþullarý bu Sözleþme kapsamýnda saðlanan Program lisanslarý için geçerli olmaz. + +m. Her iki taraf da, birbirleriyle paylaþtýklarý bilgilerin gizli olmadýðýný kabul eder; Taraflar'ýn birbirine gizli bilgi açýklamak istemeleri halinde, bu taraflarca ayrýca imzalanacak bir gizlilik sözleþmene tabidir. + +14. Coðrafi Kapsam ve Geçerli Yasa + +14.1 Geçerli Yasa + +Taraflar, kanunlar ihtilafý prensibine bakýlmaksýzýn, bu Sözleþmenin konusundan doðan veya bir biçimde bu Sözleþmenin konusu ile ilgili olan haklar, görevler ve yükümlülüklerin, Lisans Alan Tarafýn lisansý edindiði ülkenin yasalarýna tabi olup, yine bunlarýn yorumlanmasý ve uygulanmasýnda bu yasalarýn geçerli olduðunu kabul ederler. + +Birleþmiþ Milletler'in Uluslararasý Mal Satýþlarýna iliþkin Sözleþme Bildirgesi geçerli deðildir. + +14.2 Yetkili Mahkeme + +Taraflarýn tüm hak, görev ve yükümlülükleri, Lisans Alan tarafýn Program lisansýný edindiði ülkenin mahkemelerine tabidir. + +Bölüm 2 - Ülkeye Özgü Koþullar + +Aþaðýda belirtilen ülkelerde verilen lisanslara iliþkin olarak aþaðýda belirtilen koþullar Bölüm 1'de atýfta bulunulan koþullarýn yerine geçer veya onlarý deðiþtirir. Bölüm 1'de yer alan ve bu deðiþiklik eki tarafýndan deðiþtirilmeyen tüm koþullar deðiþmeksizin yürürlükte kalmaya devam eder. Bölüm 2 aþaðýda belirtilen þekilde düzenlenmiþtir: + +* Bölüm 1, Madde 14 (Geçerli Yasa ve Yetkili Mahkeme) için Ülkeye özgü deðiþiklikler; ve + +* Diðer Sözleþme hükümlerine iliþkin Avrupa, Orta Doðu ve Afrika ülkelerine özgü deðiþiklikler. + +Bölüm 1, Madde 14 (Geçerli Yasa ve Yetkili Mahkeme) için ülkeye özgü deðiþiklikler; + +14.2 Yetkili Mahkeme + +Aþaðýdaki paragraf yetkili mahkeme ile ilgilidir ve Türkiye için geçerli olduðundan Altbölüm 14.2 (Yetkili Mahkeme) içinde yer alan koþullarý deðiþtirir: + +Taraflarýn tüm hak, görev ve yükümlülükleri, Lisans Alan Tarafýn Program lisansýný edindiði ülkenin mahkemelerine tabidir. Ancak, aþaðýda belirtilen ülkeler için, seri yargýlama usulü de dahil olmak üzere, bu Sözleþmeden doðan veya bu Sözleþmenin yürütülmesiyle ilgili tüm anlaþmazlýklar, aþaðýda belirtilen ve yetkili mahkeme olan mahkemelere tabi olacak ve bu mahkemelerde çözümlenecektir: + +Türkiye'de: Türkiye Cumhuriyeti'nin Ýstanbul Merkez Mahkemelerinde ya da Ýcra Dairelerinde çözümlenecektir. + +AVRUPA, ORTA DOÐU, AFRÝKA (EMEA) ÜLKELERÝNE ÝLÝÞKÝN DEÐÝÞÝKLÝKLER + +AVRUPA BÝRLÝÐÝ (AB) ÜLKELERÝ + +8. Garanti Verilmez + +Aþaðýdaki paragraf, 8 (Garanti Verilmez) numaralý bölüme eklenmiþtir: + +Avrupa Birliði'nde ("AB"), tüketicilerin, tüketim mallarýnýn satýþýna iliþkin geçerli ulusal mevzuat kapsamýnda yasal haklarý bulunmaktadýr. Bu haklar, 8 numaralý bölümde (Garanti Verilmez) yer alan hükümlerden etkilenmez. + +AB ÜYESÝ ÜLKELER VE TÜRKÝYE + +Verilerin gizliliðine veya korunmasýna iliþkin yerel mevzuatýný AB modeline uyumlu hale getirmiþ olan Türkiye veya herhangi bir diðer Avrupa ülkesi. + +13. Genel Koþullar + +Aþaðýdaki paragraf Madde 13.e'nin yerine geçer: + +(1) Tanýmlar - Madde 13.e'nin amacý açýsýndan aþaðýdaki ek tanýmlar geçerli olur: + +(a) Ýþ Ýletiþim Bilgileri - Lisans Alan Tarafýn çalýþanlarýna ve yüklenicilerine iliþkin adlar, görevler, iþ adresleri, telefon numaralarý ve e-posta adresleri de dahil olmak üzere Lisans Alan Taraf tarafýndan IBM'e açýklanan iþle ilgili iletiþim bilgileri. Avusturya, Ýtalya ve Ýsviçre için Ýþ Ýletiþim Bilgileri, tüzel kiþilikler olan Müþteri ve Müþterinin yüklenicilerine iliþkin bilgileri (örneðin, Müþterinin gelir verileri ve diðer iþlem bilgileri) de içerir. + +(b) Ýletiþim Sorumlularý - Ýþ Ýletiþim Bilgileriyle ilgili olan Lisans Alan Taraf çalýþanlarý ve yüklenicileri. + +(c) Veri Koruma Yetkilisi - Ýlgili ülkede geçerli Veri Koruma ve Elektronik Ýletiþim Mevzuatý tarafýndan belirlenen yetkili veya AB ülkeleri dýþýndaki ülkeler için, ilgili ülkedeki kiþisel verilerin korunmasý için danýþmanlýktan sorumlu yetkili veya (yukarýda belirtilenlerin herhangi biri için) usulüne uygun olarak bu tür yetkililerin halefi olarak atanan yetkili. + +(d) Veri Koruma & Elektronik Ýletiþim Mevzuatý - (i) 95/46/EC kodlu AB Yönergesinin (kiþisel verilerin iþlenmesiyle ve bu tür verilerin serbest dolaþýmýyla ilgili olarak kiþilerin korunmasýný amaçlar) ve 2002/58/EC kodlu AB Yönergesinin (elektronik iletiþim sektöründe kiþisel verilerin iþlenmesiyle ve korunmasýyla ilgilidir) koþullarýný uygulamak üzere yürürlükte olan yerel mevzuat ve düzenlemeler; ya da (ii) AB ülkeleri dýþýndaki ülkeler için, (yukarýda belirtilenlerden herhangi biri için) yasal mevzuat ve/veya düzenlemelerde yapýlan herhangi bir yasal deðiþiklik de dahil olmak üzere, ilgili ülkede, kiþisel verilerin korunmasýyla ve kiþisel verilerle ilgili elektronik iletiþimin düzenlenmesiyle ilgili yürürlükte olan yasal mevzuat ve/veya düzenlemeler. + +(e) IBM Grubu - International Business Machines Corporation of Armonk, New York, ABD, baðlý þirketleri ve bunlarýn ilgili Çözüm Ortaklarý ve altyüklenicileri. + +(2) Lisans Alan Taraf, IBM'e aþaðýda belirtilenlere iliþkin yetki verir: + +(a) Destek hizmetlerinin saðlanmasý da dahil olmak üzere, Lisans Alan Tarafý desteklemek amacýyla Ýletiþim Sorumlularýyla baðlantý kurulmasý (e-posta veya baþka yollarla) ve IBM Grubu ürünleri ve hizmetlerinin pazarlanmasý amacý da dahil olmak, ancak tümü bunlarla sýnýrlý olmamak üzere, Lisans Alan Tarafla IBM Grubu arasýndaki iþ iliþkisinin geliþtirilmesinin saðlanmasý amacýyla ("Belirlenen Amaç") IBM Grubu içinde Ýþ Ýletiþim Bilgilerinin iþlenmesi ve kullanýlmasý; ve + +(b) Ýþ Ýletiþim Bilgilerinin, yalnýzca Belirlenen Amaçla ilgili olarak IBM Grubunun diðer üyelerine açýklanmasý. + +(3) IBM, Ýþ Ýletiþim Bilgilerinin, Veri Koruma & Elektronik Ýletiþim Mevzuatýna uygun olarak iþleneceðini ve yalnýzca Belirlenen amaç için kullanýlacaðýný kabul eder. + +(4) Veri Koruma & Elektronik Ýletiþim Mevzuatýnýn gerektirdiði ölçüde Lisans Alan Taraf, IBM Grubuna Ýþ Ýletiþim Bilgilerinin Belirlenen Amaç için iþlenmesini ve kullanýlmasýný saðlamak amacýyla Ýletiþim Sorumlularýndan gereken tüm izinleri aldýðýný (ve alacaðýný) ve tüm bildirimleri Ýletiþim Sorumlularýna gönderdiðini (veya göndereceðini) beyan eder. + +(5) Lisans Alan Taraf, IBM'e Ýþ Ýletiþim Bilgilerini, aktarým iþleminin Veri Koruma Yetkilisi tarafýndan onaylanan sözleþme koþullarýna uygun olarak gerçekleþtirilmesi veya aktarým iþlemine Veri Koruma & Elektronik Ýletiþim Mevzuatý kapsamýnda izin verilmesi koþuluyla Avrupa Ekonomik Alaný dýþýna aktarma yetkisini verir. + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_zh b/charts/mq-devserver/LICENSE_locale/LICENSE_zh new file mode 100644 index 0000000..7711bbb --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_zh @@ -0,0 +1,258 @@ +Ðí¿ÉÐÅÏ¢ + +ÏÂÃæÁгöµÄÕâЩ³ÌÐò°´ÕÕÒÔÏÂÐí¿ÉÐÅÏ¢Ìõ¿îºÍÌõ¼þÒÔ¼°»ñµÃ¿Í»§Óë IBM ÊÂÏÈͬÒâµÄ³ÌÐòÐí¿ÉÌõ¿îÊÚÓèÐí¿É¡£Èç¹û¿Í»§ÊÂÏÈδͬÒâ¶Ô±¾³ÌÐòÉúЧµÄÐí¿ÉÌõ¿î£¬ÄÇô ÎÞ±£Ö¤³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé (Z125-5589-05) ÊÊÓᣠ+ +³ÌÐòÃû³Æ (³ÌÐòºÅ)£º +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +ÒÔϱê×¼Ìõ¿îÊÊÓÃÓÚ±»Ðí¿É·½¶Ô±¾³ÌÐòµÄʹÓᣠ+ +À¦°ó³ÌÐò + +±¾³ÌÐòÊÇ×÷Ϊһ¸ö¶à²úÆ·³ÌÐò°üÐí¿ÉµÄ£¬°üÀ¨ÒÔÏÂËù±êʶµÄ¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½»ñµÃÊÚȨ£¬¿É¸ù¾Ý±¾³ÌÐòµÄȨÀûÖ¤Ã÷ÏÞÖÆÒÔ¼°±¾¡°Ðí¿ÉÖ¤ÐÅÏ¢¡±ÎĵµÖй涨µÄÏÞÖÆ£¬°²×°ºÍʹÓôËÀà¡°À¦°ó³ÌÐò¡±¡£±»Ðí¿É·½ÎÞȨÔÚ¡°¶à²úÆ·³ÌÐò°ü¡±Ö®ÍâתÈûòתÏú¡°À¦°ó³ÌÐò¡±¡£¡°À¦°ó³ÌÐò¡±¿ÉÄÜËæ¸½Ðí¿ÉÌõ¿îÒÔ¼°ÊÊÓÃÓÚ±»Ðí¿É·½¶Ô¡°À¦°ó³ÌÐò¡±Ê¹ÓõÄÌõ¿î£¨Èç¹ûÓеϰ£©¡£Èç¹û·¢Éú³åÍ»£¬±¾¡°Ðí¿ÉÐÅÏ¢¡±ÎĵµµÄÌõ¿îÓÅÏÈÓÚ¡°À¦°ó³ÌÐò¡±µÄÌõ¿î¡£µ±±»Ðí¿É·½Ê¹Óñ¾³ÌÐòµÄȨÀûµ½ÆÚ»òÖÕֹʱ£¬±»Ðí¿É·½±ØÐëֹͣʹÓûòÏú»Ù±¾¡°À¦°ó³ÌÐò¡±µÄËùÓи±±¾£¬»òÕßÁ¢¼´½«ËùÓи±±¾¹é»¹¸ø±¾³ÌÐòµÄÌṩ·½¡£Èç¹û±»Ðí¿É·½ÏÂÔØÁË¡°À¦°ó³ÌÐò¡±£¬ÄÇôӦµ±Óë±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ¡£Èç¹û±»Ðí¿É·½Ï£ÍûÔÚÉÏÊöÏÞÖÆ·¶Î§Ö®Íâ»ñµÃ¡°À¦°ó³ÌÐò¡±µÄʹÓÃÐí¿É£¬ÇëÓë IBM ÏúÊÛ´ú±í»ò±¾³ÌÐòµÄÌṩ·½È¡µÃÁªÏµ£¬ÒÔ»ñµÃÏàÓ¦µÄÐí¿É¡£ + +ÒÔÏÂÊÇËæ±¾³ÌÐòÒ»ÆðÐí¿ÉµÄ¡°À¦°ó³ÌÐò¡±£º +IBM MQ V9.0.3 + +¿ª·¢ÈËÔ±ÏÞÖÆ + +Èç¹û±¾³ÌÐòÖ¸¶¨ÎªÕë¶Ô¡°¿ª·¢ÈËÔ±¡±£¬ÄÇô±¾³ÌÐò½ö¿É²¿ÊðΪ±»Ðí¿É·½ÔÚ¿ª·¢ÈËÔ±»úÆ÷ÉϽøÐеÄÄÚ²¿¿ª·¢ºÍµ¥Ôª²âÊÔµÄÒ»²¿·Ö¡£¿ª·¢ÈËÔ±»úÆ÷ÊÇÖ¸ÔËÐÐÖ÷²Ù×÷ϵͳºÍ±¾³ÌÐòµÄÎïÀí»òÐéÄâ×ÀÃæ»·¾³£¬Ö»ÓÐÒ»¸öÖ¸¶¨µÄ¿ª·¢ÈËÔ±Äܹ»·ÃÎʺÍʹÓᣱ»Ðí¿É·½Î´±»ÊÚȨʹÓñ¾³ÌÐò´¦ÀíÉú²ú¹¤×÷¸ºÔØ¡¢Ä£ÄâÉú²ú¹¤×÷¸ºÔØ»ò²âÊÔÈκδúÂë¡¢Ó¦ÓóÌÐò»òϵͳµÄ¿ÉÀ©Õ¹ÐÔ¡£ÔÚûÓлñÈ¡ÏàÓ¦µÄÉú²úȨÀûµÄÇé¿öÏ£¬±»Ðí¿É·½Î´±»ÊÚȨ½«±¾³ÌÐòµÄÈκβ¿·ÖÓÃÓÚÈÎºÎÆäËûÓÃ;¡£ + +²»±»ÓÃÀ´¹¹½¨ËùÐèȨÀûµÄ×é¼þ + +È·¶¨±»Ðí¿É·½°²×°»òʹÓñ¾³ÌÐòËùÐèµÄȨÀûÊýÁ¿Ê±£¬½«²»¿¼ÂÇÒÔϳÌÐò×é¼þµÄ°²×°»òʹÓ᣻»¾ä»°Ëµ£¬±»Ðí¿É·½¿ÉÒÔ¸ù¾ÝÐí¿ÉÌõ¿î°²×°ºÍʹÓÃÒÔϳÌÐò×é¼þ£¬µ«ÕâЩ×é¼þ²»ÄÜÓÃÓÚÈ·¶¨±¾³ÌÐòËùÐèµÄȨÀûÊý¡£ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +Ô´×é¼þºÍÑù±¾²ÄÁÏ + +±¾³ÌÐò¿ÉÄܰüº¬Ò»Ð©Ô´´úÂëÐÎʽµÄ×é¼þ£¨¡°Ô´×é¼þ¡±£©ºÍÆäËû²ÄÁÏ£¨¡°Ñù±¾²ÄÁÏ¡±£©¡£±»Ðí¿É·½¿ÉÒÔ½ö³öÓÚÄÚ²¿Ê¹ÓÃÄ¿µÄ£¬¸´ÖƺÍÐ޸ġ°Ô´×é¼þ¡±ºÍ¡°Ñù±¾²ÄÁÏ¡±£¬Ç°ÌáÊÇ´ËÀàʹÓÃÊܵ½±¾Ð­Ò鹿¶¨µÄÐí¿ÉȨÀûµÄÏÞÖÆ£¬µ«ÊDZ»Ðí¿É·½²»µÃ¸ü¸Ä»òɾ³ý¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±Öаüº¬µÄÈκΰæÈ¨ÐÅÏ¢»òÉùÃ÷¡£IBM¡°°´ÏÖ×´¡±Ìṩ¡°Ô´×é¼þ¡±»ò¡°Ñù±¾²ÄÁÏ¡±£¬²»³Ðµ£ÈκÎÖ§³ÖÔðÈΣ¬²»ÌṩÈκÎÖÖÀàµÄ£¨ÎÞÂÛÊÇÃ÷ʾµÄ»¹Êǰµº¬µÄ£©±£Ö¤£¬°üÀ¨ÓйØÈ¨Àû¡¢·ÇÇÖȨ¡¢·Ç¸ÉÈÅÒÔ¼°°µº¬µÄÓйØÊÊÏúºÍÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;µÄ±£Ö¤¡£ + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +ÎÞ±£Ö¤³ÌÐòµÄ¹ú¼ÊÐí¿ÉЭÒé + +µÚÒ»²¿·Ö - ͨÓÃÌõ¿î + +ÏÂÔØ¡¢°²×°¡¢¸´ÖÆ¡¢·ÃÎÊ¡¢µ¥»÷¡°½ÓÊÜ¡±°´Å¥£¬»òÒÔÆäËû·½Ê½Ê¹ÓóÌÐò£¬¼´±íÃ÷±»Ðí¿É·½Í¬ÒⱾЭÒéµÄÌõ¿î¡£Èç¹ûÄú´ú±í±»Ðí¿É·½½ÓÊÜ´ËÀàÌõ¿î£¬ÔòÄú³ÂÊö²¢±£Ö¤ÄúÓµÓÐÍêÈ«µÄÊÚȨÒÔʹ¸Ã±»Ðí¿É·½½ÓÊÜ´ËÀàÌõ¿îµÄÔ¼Êø¡£Èç¹ûÄú²»Í¬Òâ´ËÀàÌõ¿î£¬ + +* ÔòÇëÎðÏÂÔØ¡¢°²×°¡¢¸´ÖÆ¡¢·ÃÎÊ¡¢µ¥»÷¡°½ÓÊÜ¡±°´Å¥£¬»òʹÓóÌÐò£»²¢ÇÒ + +* Á¢¼´½«Î´Ê¹ÓõĽéÖʺÍÎĵµÍË»¹ÖÁÌṩ·½£¬ÒÔ±ã»ñµÃÄúËùÖ§¸¶½ð¶îµÄÍ˿Èç¹ûÏÂÔØÁ˳ÌÐò£¬ÄÇôÇëÏú»Ù³ÌÐòµÄËùÓи±±¾¡£ + +1. ¶¨Òå + +¡°ÊÚȨʹÓá± - ±»Ðí¿É·½±»ÊÚȨִÐлòÔËÐгÌÐòµÄÖ¸¶¨¼¶±ð¡£¸Ã¼¶±ð¿É°´Óû§Êý¡¢°ÙÍò¸ö·þÎñµ¥Î»£¨MSUs£©¡¢´¦ÀíÆ÷¼ÛÖµµ¥Ôª£¨PVUs£©»òÆäËû IBM Ö¸¶¨µÄʹÓü¶±ð½øÐмÆÁ¿¡£ + +¡°IBM¡± - ¹ú¼ÊÉÌÒµ»úÆ÷¹«Ë¾£¨International Business Machines Corporation£©»òÆäÈÎÒ»×Ó¹«Ë¾¡£ + +¡°Ðí¿ÉÐÅÏ¢¡±£¨¡°LI¡±£© - ÌṩÓëÌØ¶¨³ÌÐòÏà¹ØµÄÐÅÏ¢»òÈκθ½¼ÓÌõ¿îµÄÎļþ¡£³ÌÐòµÄ LI ¿Éͨ¹ýÒÔÏÂÕ¾µã»ñÈ¡£ºwww.ibm.com/software/sla¡£¸Ã LI Ò²¿ÉÒÔͨ¹ýʹÓÃϵͳÃüÁîÔÚ³ÌÐòĿ¼ÏÂÕÒµ½£¬»òÕß×÷ΪÊÖ²áÓë³ÌÐòÒ»ÆðÌṩ¡£ + +¡°³ÌÐò¡± - ÏÂÁи÷Ï°üÀ¨Ô­¼þ¼°ÆäËùÓеÄÍêÕûµÄ»ò²¿·ÖµÄ¸±±¾£º1£©»úÆ÷¿É¶ÁµÄÖ¸Áî»òÊý¾Ý£»2£©×é¼þ¡¢ÎļþºÍÄ£¿é£»3£©ÒôÏñÄÚÈÝ£¨ÀýÈçͼÏñ¡¢Îı¾¡¢Â¼Òô»òͼƬ£©£»ÒÔ¼° 4£©Ïà¹ØµÄÐí¿É²ÄÁÏ£¨±ÈÈçÃÜÔ¿ºÍÎĵµ£©¡£ + +2. ЭÒé½á¹¹ + +±¾Ð­Òé°üÀ¨£ºµÚÒ»²¿·Ö - ͨÓÃÌõ¿î¡¢µÚ¶þ²¿·Ö - ¹ú¼Ò»òµØÇøÌرðÌõ¿î£¨ÈçÓУ©ºÍ LI£¬¹¹³É±»Ðí¿É·½Óë IBM Ö®¼äÓйسÌÐòʹÓõÄÍêÕûЭÒé¡£±¾Ð­ÒéÌæ´ú±»Ðí¿É·½Óë IBM Ö®¼äÓйسÌÐòʹÓõÄÈκÎÏÈǰµÄ¿ÚÍ·»òÊéÃæÍ¨ÐÅ¡£µÚ¶þ²¿·ÖµÄÌõ¿î¿ÉÄÜÌæ´ú»òÐ޸ĵÚÒ»²¿·ÖµÄÏàÓ¦ÄÚÈÝ¡£ÈçÓгåÍ»£¬LI µÄÌõ¿îÓÅÏÈÓÚÕâÁ½²¿·ÖµÄ¹æ¶¨¡£ + +3. Ðí¿ÉÊÚÓè + +³ÌÐòÓÉ IBM »ò IBM ¹©Ó¦ÉÌËùÓУ¬ÊܰæÈ¨±£»¤¡£³ÌÐòϵÐí¿ÉʹÓ㬶ø·Ç³öÊÛ¡£ + +IBM ÊÚÓè±»Ðí¿É·½Ö´ÐÐÒÔϲÙ×÷µÄ·ÇרÓÐÐí¿É£¬ÒԱ㱻Ðí¿É·½£º1£©ÔÚ·¢Æ±Öй涨µÄÊÚȨʹÓü¶±ðÄÚʹÓóÌÐò£¬2£©ÖÆ×÷ºÍ°²×°¸±±¾£¬ÒÔÖ§³Ö´ËÀàÊÚȨʹÓã¬3£©ÖÆ×÷±¸·Ý¸±±¾£¬Ç°ÌáÊÇ + +a. ±»Ðí¿É·½ÒѺϷ¨»ñÈ¡³ÌÐò£¬²¢×ñÊØ±¾Ð­ÒéµÄÌõ¿î£» + +b. ²»Ö´Ðб¸·Ý¸±±¾£¬³ý·Ç±»±¸·ÝµÄ³ÌÐòÎÞ·¨Ö´ÐУ» + +c. ±»Ðí¿É·½ÐëÔÚ³ÌÐòµÄÿһÍêÕû¸±±¾»ò²¿·Ö¸±±¾Öи´ÖÆËùÓеİæÈ¨ÉùÃ÷ºÍÆäËûËùÓÐȨ˵Ã÷£» + +d. ±»Ðí¿É·½ÐëÈ·±£Ê¹ÓóÌÐòµÄËùÓÐÈËÔ±£¨²»ÂÛÊDZ¾µØ»òÔ¶³Ì·ÃÎÊ£©¶¼ 1£©½öΪ±»Ðí¿É·½µÄÀûÒæÊ¹ÓóÌÐò£»ÒÔ¼° 2£©×ñÊØ±¾Ð­ÒéµÄÌõ¿î£» + +e. ±»Ðí¿É·½²»µÃ 1£©Ê¹Óᢸ´ÖÆ¡¢Ð޸Ļò·Ö·¢³ÌÐò£¬³ý·Ç±¾Ð­ÒéÃ÷È·Ðí¿É£»2£©¶Ô±¾³ÌÐò½øÐз´»ã±à¡¢·´±àÒë»òÒÔÆäËû·½Ê½·­Òë»ò·´Ïò¹¤³Ì£»µ«·¨ÂÉÃ÷È·Ðí¿ÉÇÒ²»µÃÒÔÔ¼¶¨·ÅÆúÕß³ýÍ⣻3£©¶ÀÁ¢ÓÚ³ÌÐò¶øµ¥¶ÀʹÓóÌÐò×é¼þ¡¢Îļþ¡¢Ä£¿é¡¢ÒôÏñÄÚÈÝ»òÏà¹ØÐí¿É²ÄÁÏ£»»ò 4£©ÔÙÐí¿É¡¢³ö×â»ò×âÁÞ³ÌÐò£»²¢ÇÒ + +f. Èç¹û±»Ðí¿É·½»ñÈ¡±¾³ÌÐò×÷Ϊ֧³Ö³ÌÐò£¬ÄÇô±»Ðí¿É·½Ö»Äܽ«±¾³ÌÐòÓÃÓÚÖ§³ÖÖ÷³ÌÐò£¬²¢×ñÊØÖ÷³ÌÐòÐí¿ÉÖеÄÈκÎÏÞÖÆÌõ¿î¡£»òÕߣ¬Èç¹û±»Ðí¿É·½»ñÈ¡±¾³ÌÐò×÷ΪÖ÷³ÌÐò£¬ÄÇô±»Ðí¿É·½Ö»Äܽ«ËùÓÐÖ§³Ö³ÌÐòÓÃÓÚÖ§³Ö±¾Ö÷³ÌÐò£¬²¢×ñÊØ±¾Ð­ÒéÖеÄÈκÎÏÞÖÆÌõ¿î¡£±¾ f ÏîÖеġ°Ö§³Ö³ÌÐò¡±ÊÇÊôÓÚÁíÍâÒ»¸ö IBM ³ÌÐò£¨¡°Ö÷³ÌÐò¡±£©µÄÒ»²¿·ÖµÄ³ÌÐò£¬²¢ÇÒÔÚ¡°Ö÷³ÌÐò¡±µÄ LI Öб»±êʶΪ¡°Ö§³Ö³ÌÐò¡±¡££¨Òª»ñÈ¡²»´øÓÐÕâЩÏÞÖÆµÄ¡°Ö§³Ö³ÌÐò¡±µÄµ¥¶ÀÐí¿É£¬±»Ðí¿É·½Ó¦ÁªÏµÆä»ñÈ¡¡°Ö§³Ö³ÌÐò¡±µÄ¹©Ó¦·½¡££© + +´ËÐí¿ÉÊÊÓÃÓÚ±»Ðí¿É·½ÖÆ×÷µÄÿ·Ý³ÌÐò¸±±¾¡£ + +3.1 »»¹º¡¢¸üС¢ÐÞ¶©ºÍ²¹¶¡ + +3.1.1 »»¹º + +Èç¹û³ÌÐò±»»»¹º³ÌÐòÌæ»»£¬ÄÇô±»Ìæ»»³ÌÐòµÄÐí¿É½«Á¢¼´±»ÖÕÖ¹¡£ + +3.1.2 ¸üС¢ÐÞ¶©ºÍ²¹¶¡ + +±»Ðí¿É·½»ñµÃ³ÌÐòµÄ¸üС¢ÐÞ¶©»ò²¹¶¡Ê±£¬±»Ðí¿É·½Ðë½ÓÊÜÆä LI Öй涨µÄÊÊÓÃÓÚ´ËÀà¸üС¢ÐÞ¶©»ò²¹¶¡µÄÈκθ½¼Ó»ò²»Í¬µÄÌõ¿î¡£Èç¹ûδÌṩ¸½¼Ó»ò²»Í¬Ìõ¿î£¬ÄÇô¸üС¢ÐÞ¶©ºÍ²¹¶¡Ö»Ðè×ñÊØ±¾Ð­ÒéµÄ¹æ¶¨¡£Èç¹û³ÌÐò±»¸üÐÂÌæ»»£¬±»Ðí¿É·½Í¬ÒâÁ¢¼´Í£Ö¹¶Ô±»Ìæ»»³ÌÐòµÄʹÓᣠ+ +3.2 ¹Ì¶¨ÆÚÏÞÐí¿É + +Èç¹û IBM ÊÚÓè¹Ì¶¨ÆÚÏ޵ijÌÐòÐí¿É£¬ÄÇô±»Ðí¿É·½µÄÐí¿É½«Ôڹ̶¨ÆÚ¼ä½áÊøÊ±±»ÖÕÖ¹£¬³ý·Ç±»Ðí¿É·½ºÍ IBM ͬÒâÐøÇ©Ðí¿ÉЭÒé¡£ + +3.3 ÆÚÏÞºÍÖÕÖ¹ + +±¾Ð­ÒéÔÚ±»ÖÕֹǰһֱ±£³ÖÓÐЧ¡£ + +Èç¹û±»Ðí¿É·½Î´ÄÜ×ñÊØ±¾Ð­ÒéÌõ¿î£¬Ôò IBM ¿ÉÒÔÖÕÖ¹±»Ðí¿É·½µÄÐí¿É¡£ + +Èç¹ûÐí¿ÉÓÉÓÚÈκÎÀíÓɱ»ÈÎÒâÒ»·½ÖÕÖ¹£¬±»Ðí¿É·½Í¬ÒâÁ¢¼´Í£Ö¹Ê¹Óò¢Ïú»Ù±»Ðí¿É·½ÖÆ×÷µÄ³ÌÐòµÄËùÓи±±¾¡£Èç¹û±¾Ð­ÒéµÄÈκÎÌõ¿îÒòÆäÐÔÖÊÖÂʹÆäÓÐЧÆÚ³¬³ö±¾Ð­ÒéÖÕÖ¹ÆÚÏÞ£¬ÄÇôÕâЩÌõ¿îÓ¦Ò»Ö±±£³ÖÓÐЧ£¬Ö±ÖÁÂÄÐÐÍê±Ï£¬²¢ÇÒÊÊÓÃÓÚË«·½¸÷×ԵļÌÈÎÕߺÍÊÜÈÃÈË¡£ + +4. ·ÑÓà + +·ÑÓã¨ÈçÓУ©»ùÓÚ·¢Æ±Öй涨µÄËù»ñµÃµÄÊÚȨʹÓü¶±ð¡£¶ÔÓÚÓ¦¸¶»òÒѸ¶¿îÏIBM ²»¸øÓè´û¼Ç½ð¶î»òÍ˿³ý·Ç±¾Ð­ÒéÖÐÁíÓй涨¡£ + +Èç¹û±»Ðí¿É·½Ï£ÍûÌá¸ßÊÚȨʹÓü¶±ð£¬ÄÇô±»Ðí¿É·½±ØÐëÌáǰ֪ͨ IBM »ò¾­ÊÚȨµÄ IBM ¾­ÏúÉÌ£¬²¢Ö§¸¶ÈκÎÊÊÓõķÑÓᣠ+ +5. ˰ÊÕ + +ÈçÓÐÈκÎÕþ¸®»ú¹¹¶Ô³ÌÐòÕ÷ÊÕ˰¿î»òÆäËû·ÑÓ㨲»°üÀ¨»ùÓÚ IBM ¾»ÊÕÈëµÄ²¿·Ö£©£¬Ôò±»Ðí¿É·½ÐëͬÒâÖ§¸¶·¢Æ±Öй涨µÄ½ð¶î£¬»òÌṩÏà¹ØË°·ÑµÄ»íÃâÎļþ¡£»ñµÃ³ÌÐòÖ®ºó£¬±»Ðí¿É·½Ðë×ÔÐиºÔðÖ§¸¶ÓйسÌÐòµÄÈκθöÈ˲Ʋú˰¡£Èç¹ûÓÉÓÚ³ö¿Ú¡¢½ø¿Ú¡¢×ªÈûòÔÚÔ­±»Ðí¿É·½»ñÈ¡Ðí¿ÉµÄ¹ú¼Ò»òµØÇøÖ®Íâ·ÃÎÊ»òʹÓñ¾³ÌÐò£¬Õþ¸®»ú¹¹Òò´ËÕ÷ÊÕ˰¿î»òÆäËû·ÑÓã¬ÄÇô±»Ðí¿É·½Í¬Ò⸺Ôð²¢Ö§¸¶Õ÷ÊÕµÄ˰¿î»ò·ÑÓᣠ+ +6. Í˿֤ + +Èç¹û±»Ðí¿É·½ÓÉÓÚÈκÎÔ­Òò¶Ô³ÌÐò²»ÂúÒ⣬²¢ÇÒÊÇÔ­±»Ðí¿É·½£¬ÄÇô±»Ðí¿É·½¿ÉÒÔÖÕÖ¹±¾Ðí¿É£¬²¢»ñµÃ¾Í³ÌÐòÒÑÖ§¸¶½ð¶îµÄÍ˿ÈçÓУ©£¬Ç°ÌáÊDZ»Ðí¿É·½ÔÚ·¢Æ±ÈÕÆÚµÄ 30 ÌìÄÚ½«±¾³ÌÐòÍË»¹¸øÆäÈ¡µÃ³ÌÐò¼°È¨ÀûÖ¤Ã÷µÄÒ»·½¡£Èç¹ûÐí¿ÉÊǿɽøÐÐÐøÇ©µÄ¹Ì¶¨ÆÚÏÞÐí¿É£¬ÄÇôֻÓб»Ðí¿É·½ÔÚ³õʼÆÚÏÞµÄǰ 30 ÌìÄÚÍË»¹±¾³ÌÐò²ÅÄÜ»ñµÃÍ˿Èç¹û±»Ðí¿É·½ÏÂÔØÁ˳ÌÐò£¬Ôò±»Ðí¿É·½Ó¦Óë³ÌÐòÌṩ·½ÁªÏµÒÔÁ˽â»ñµÃÍË¿îµÄÖ¸µ¼¡£ + +7. ³ÌÐòתÈà + +½öµ±ÁíÒ»·½Í¬ÒⱾЭÒéµÄÌõ¿îʱ£¬±»Ðí¿É·½·½¿É½«³ÌÐòºÍËùÓеÄÐí¿ÉȨÀûºÍÒåÎñתÈÃÖÁ¸Ã·½¡£Èç¹ûÐí¿ÉÓÉÓÚÈκÎÀíÓɱ»ÈÎÒâÒ»·½ÖÕÖ¹£¬±»Ðí¿É·½²»µÃ½«³ÌÐòתÈøøÁíÒ»·½¡£±»Ðí¿É·½²»µÃתÈò¿·Ö 1£©³ÌÐò»ò 2£©³ÌÐòµÄÊÚȨʹÓᣱ»Ðí¿É·½×ªÈóÌÐòʱ£¬»¹±ØÐëתÈñ¾Ð­ÒéµÄÒ»·ÝÓ²¿½±´£¬°üÀ¨ LI¡£×ªÈÃÖ®ºó£¬±»Ðí¿É·½µÄÐí¿É½«Á¢¼´±»ÖÕÖ¹¡£ + +8. ÎÞ±£Ö¤ + +³ýÁËÎÞ·¨ÅųýµÄÈκ稶¨±£Ö¤£¬IBM ²»×öÈκÎÓйر¾³ÌÐò»òÖ§³Ö£¨ÈçÓУ©µÄÃ÷ʾ»ò°µº¬µÄ±£Ö¤»òÌõ¼þ£¬°üÀ¨µ«²»ÏÞÓÚÈκΰµº¬µÄÓйØÊÊÏúÐÔ¡¢ÁîÈËÂúÒâµÄÖÊÁ¿¡¢ÊÊÓÃÓÚijÖÖÌØ¶¨ÓÃ;¡¢ËùÓÐȨ¼°Èκβ»ÇÖȨµÄ±£Ö¤»òÌõ¼þ¡£ + +ijЩ¹ú¼Ò»ò˾·¨Ï½Çø²»ÔÊÐíÅųýÃ÷ʾµÄ»ò°µº¬µÄ±£Ö¤£¬Òò´ËÉÏÊö³ýÍâÌõ¿î¿ÉÄܲ¢²»ÊÊÓÃÓÚ±»Ðí¿É·½¡£ÔÚ´ËÇé¿öÏ£¬´ËÀà±£Ö¤½öÔÚ·¨ÂÉÒªÇóµÄ×î¶Ì±£Ö¤ÆÚÏÞÄÚÓÐЧ¡£Èκα£Ö¤ÔÚ±£ÐÞÆÚÏÞÖ®ºó½«²»ÔÙÊÊÓá£Ä³Ð©¹ú¼Ò»ò˾·¨Ï½Çø²»ÔÊÐíÏÞÖÆ°µº¬±£Ö¤µÄÆÚÏÞ£¬Òò´ËÉÏÊöÏÞÖÆ¿ÉÄܲ¢²»ÊÊÓÃÓÚ±»Ðí¿É·½¡£±»Ðí¿É·½¿ÉÄÜÓµÓÐÆäËûȨÀû£¬´ËÀàȨÀûÊÓ±»Ðí¿É·½ËùÔڵĹú¼Ò»ò˾·¨Ï½Çø¶ø¶¨¡£ + +±¾Ð¡½Ú 8 ÖеÄÃâÔðÉùÃ÷ºÍÅųýÌõ¿îͬÑùÊÊÓÃÓÚÈκΠIBM µÄ³ÌÐò¿ª·¢É̺͹©Ó¦ÉÌ¡£ + +·Ç IBM ³ÌÐòµÄÖÆÔìÉÌ¡¢¹©Ó¦ÉÌ»ò·¢²¼ÉÌ¿ÉÄÜÌṩÆä×Ô¼ºµÄ±£Ö¤¡£ + +IBM ²»ÌṩÈκÎÖ§³Ö£¬³ý·Ç IBM ÁíÐй涨¡£´ËÇé¿öÏ£¬IBM ÌṩµÄÈκÎÖ§³ÖÊܱ¾Ð¡½Ú 8 ÖеÄÃâÔðÉùÃ÷ºÍÅųýÌõ¿îµÄÔ¼Êø¡£ + +9. ±»Ðí¿É·½Êý¾ÝºÍÊý¾Ý¿â + +Ϊ°ïÖú±»Ðí¿É·½È·¶¨³ÌÐòÎÊÌâµÄ¸ùÔ´£¬IBM ¿ÉÄÜÒªÇó±»Ðí¿É·½ 1£©ÔÊÐí IBM Ô¶³Ì·ÃÎʱ»Ðí¿É·½µÄϵͳ£¬»ò 2£©Ïò IBM ·¢Ëͱ»Ðí¿É·½µÄÐÅÏ¢ºÍϵͳÊý¾Ý¡£µ«ÊÇ£¬IBM ûÓÐÒåÎñÌṩ´ËÀà°ïÖú£¬³ý·Ç IBM ºÍ±»Ðí¿É·½Ç©¶©Á˵¥¶ÀµÄÊéÃæÐ­Ò飬¹æ¶¨ IBM ÐëÏò±»Ðí¿É·½Ìṩ³¬³öÔÚ±¾Ð­ÒéÏ IBM ÒåÎñµÄÖ§³ÖÀàÐÍ¡£ÈκÎÇé¿öÏ£¬IBM ½«Ê¹ÓùØÓÚ´íÎóºÍÎÊÌâµÄÐÅÏ¢À´¸ÄÉÆÆä²úÆ·ºÍ·þÎñ£¬²¢°ïÖúÌṩÏà¹ØµÄÖ§³Ö¡£ÎªÁËÕâЩĿµÄ£¬IBM ¿ÉÒÔʹÓà IBM ʵÌåºÍ·Ö°üÉÌ£¨°üÀ¨±»Ðí¿É·½ËùÔÚ¹ú¼Ò»òµØÇøÖ®ÍâµÄÒ»¸ö»ò¶à¸ö¹ú¼Ò»òµØÇøµÄ IBM ʵÌåºÍ·Ö°üÉÌ£©£¬²¢ÇÒ±»Ðí¿É·½ÊÚȨ IBM ÕâÑù×ö¡£ + +±»Ðí¿É·½ÈÔ¸ºÔð 1£©±»Ðí¿É·½Ìṩ¸ø IBM µÄÈκÎÊý¾Ý¿âµÄÊý¾ÝºÍÄÚÈÝ£»2£©Ñ¡ÔñºÍʵʩ¹ØÓÚÊý¾Ý·ÃÎÊ¡¢°²È«ÐÔ¡¢¼ÓÃÜ¡¢Ê¹Óúʹ«Ê䣨°üÀ¨ÈκοÉʶ±ð¸öÈËÉí·ÝµÄÐÅÏ¢£©£»ÒÔ¼° 3£©±¸·ÝºÍ»Ö¸´ÈκÎÊý¾Ý¿â¼°ÒÑ´æ´¢Êý¾Ý¡£±»Ðí¿É·½½«²»Ïò IBM ·¢ËÍÈκÎÊý¾ÝÐÎʽ»òÆäËûÐÎʽµÄ¿Éʶ±ð¸öÈËÉí·ÝµÄÐÅÏ¢»òÌṩ´ËÀàÐÅÏ¢µÄ·ÃÎÊ¡£Èç¹ûÓÉÓÚÏò IBM ´íÎó·¢ËÍ´ËÀàÐÅÏ¢»ò IBM ¶ªÊ§»ò͸¶´ËÀàÐÅÏ¢¶øÔì³ÉËðʧ£¬°üÀ¨ÈκεÚÈý·½Ë÷ÅâµÄËðʧ£¬ÄÇô±»Ðí¿É·½½«¸ºÔðÖ§¸¶ºÏÀíµÄ·ÑÓÃºÍÆäËû¿îÏî¡£ + +10. ÔðÈÎÏÞÖÆ + +µÚ 10 ²¿·Ö£¨ÔðÈÎÏÞÖÆ£©ÖеÄÏÞÖÆºÍ³ýÍâÔÚ²»µÃÒÔºÏͬ·ÅÆúȨÀûµÄÊÊÓ÷¨ÂÉδ×÷³ö½ûÖ¹ÐԹ涨µÄÏÞ¶ÈÄÚÍêÈ«ÊÊÓᣠ+ +10.1 IBM ¿ÉÄܳе£ÔðÈεÄÏîÄ¿ + +Èç¹û·¢ÉúÒòΪ IBM Î¥Ô¼»òÐë³Ðµ£ÆäËûÔðÈεÄÇé¿ö£¬±»Ðí¿É·½ÓÐȨҪÇó IBM Åâ³¥Ëðʧ¡£ÎÞÂÛ±»Ðí¿É·½ÒÔºÎÖÖÒÀ¾ÝÒªÇó IBM Åâ³¥Ëðʧ£¨°üÀ¨ÖØ´óÎ¥Ô¼¡¢¹ýʧ¡¢Ê§Êµ³ÂÊö»òÆäËûºÏÔ¼»òÇÖȨ·½ÃæµÄË÷Å⣩£¬IBM µÄÈ«²¿ÔðÈνöÏÞÓÚ 1£©ÈËÉíÉ˺¦£¨°üÀ¨ËÀÍö£©Ëðº¦Åâ³¥¡¢²»¶¯²úºÍÓÐÐζ¯²úµÄË𺦣¬ÒÔ¼° 2£©ÈÎºÎÆäËûʵ¼ÊÖ±½ÓËðº¦Åâ³¥£¬Åâ³¥¶î×î¸ßΪ IBM ¶Ô×÷ΪË÷Åâ±êµÄÎïµÄ³ÌÐòËùÊÕÈ¡µÄ·ÑÓã¨Èç¹û³ÌÐò°´¹Ì¶¨ÆÚÏÞÐí¿ÉÊÕ·Ñ£¬Ôò×î¸ßΪ 12 ¸öÔµÄÊÕ·Ñ£©¡£ + +´ËÔðÈÎÏÞÖÆÒ²ÊÊÓÃÓÚÈκΠIBM µÄ³ÌÐò¿ª·¢É̺͹©Ó¦ÉÌ¡£ÕâÊÇ IBM ÓëÆä³ÌÐò¿ª·¢É̺͹©Ó¦É̹²Í¬µÄ×î¸ßÅâ³¥ÏÞ¶î¡£ + +10.2 IBM ²»³Ðµ£ÔðÈεÄÏîÄ¿ + +ÎÞÂÛÈçºÎ£¬IBM ¼°Æä³ÌÐò¿ª·¢É̺͹©Ó¦É̾ù²»¶ÔÏÂÁи÷ÏÔ𣬼´Ê¹Òѱ»¸æÖªÆä·¢ÉúµÄ¿ÉÄÜÐÔ£º + +a. Êý¾ÝµÄ¶ªÊ§»òË𻵣» + +b. ÌØ±ðµÄ¡¢¸½´øµÄ¡¢³Í·£ÐԵĻò¼ä½ÓµÄËðº¦Åâ³¥£¬»òÈκκó¹ûÐÔ¾­¼ÃËðº¦Åâ³¥£»»ò + +c. ÀûÈó¡¢ÒµÎñ¡¢ÊÕÈë¡¢ÉÌÓþ»òÔ¤ÆÚ¿É½ÚÊ¡½ð¶îµÄËðʧ¡£ + +11. ºÏ¹æÐÔÑéÖ¤ + +´ËµÚ 11 ²¿·Ö£¨ºÏ¹æÐÔÑéÖ¤£©ÖУ¬¡°ILAN ³ÌÐòÌõ¿î¡±Ö¸µÄÊÇ 1£©±¾Ð­ÒéºÍ IBM ÌṩµÄÊÊÓõIJ¹³äЭÒéºÍ½»Ò×Îļþ£¬ÒÔ¼° 2£©IBM Èí¼þÕþ²ß£¬¸ÃÕþ²ß¿ÉÔÚ IBM Èí¼þÕþ²ßÕ¾µã£¨www.ibm.com/softwarepolicies£©ÉÏÕÒµ½£¬°üÀ¨µ«²»ÏÞÓÚ¹ØÓÚ±¸·Ý¡¢´Î¼¶ÈÝÁ¿¶¨¼ÛºÍÇ¨ÒÆµÄÕþ²ß¡£ + +µÚ 11 ²¿·Ö¹æ¶¨µÄȨÀûºÍÒåÎñÔÚ³ÌÐò±»Ðí¿É¸ø±»Ðí¿É·½µÄÆÚÏÞ¼°Ö®ºóÁ½ÄêÄÚ±£³ÖÓÐЧ¡£ + +11.1 ÑéÖ¤Á÷³Ì + +±»Ðí¿É·½Í¬Òâ´´½¨¡¢±£Áô²¢Ïò IBM ¼°ÆäÉó²éÔ±Ìṩ׼ȷÊéÃæ¼Ç¼¡¢ÏµÍ³¹¤¾ßÊä³ö½á¹ûÒÔ¼°ÆäËûϵͳÐÅÏ¢£¬ÉÏÊöÄÚÈÝÓ¦³ä·ÖÒÔ±ãÌṩ±»Ðí¿É·½¶ÔËùÓгÌÐòµÄʹÓþù·ûºÏ ILAN ³ÌÐòÌõ¿î£¨°üÀ¨µ«²»ÏÞÓÚËùÓÐ IBM ÊÊÓõÄÐí¿ÉºÍ¶¨¼ÛÉêÇëÌõ¿î£©µÄ¿ÉÉ󼯵ÄÑéÖ¤¡£±»Ðí¿É·½¸ºÔð 1£©È·±£ÆäʹÓò»³¬³öÊÚȨʹÓü¶±ð£¬ÒÔ¼° 2£©Ê¼ÖÕ×ñÊØ ILAN ³ÌÐòÌõ¿î¡£ + +ÔÚÊÂÏȺÏÀí֪ͨµÄÇé¿öÏ£¬IBM ¿ÉÒÔÑéÖ¤±»Ðí¿É·½ÎªÁËÈκÎÄ¿µÄÔÚËùÓеĵصãÒÔ¼°ËùÓл·¾³ÖжÔÊÜ ILAN ³ÌÐòÌõ¿î¹ÜϽµÄ³ÌÐòµÄʹÓÃÊÇ·ñ×ñÊØ ILAN ³ÌÐòÌõ¿î¡£´ËÀàÑéÖ¤½«ÒÔ¾¡Á¿²»¸ÉÈű»Ðí¿É·½µÄÒµÎñµÄ·½Ê½½øÐУ¬²¢ÇÒ¿ÉÒÔÔÚÕý³£ÓªÒµÊ±¼äÔÚ±»Ðí¿É·½µÄ³¡Ëù½øÐС£IBM ¿ÉÒÔʹÓöÀÁ¢Éó²éԱЭÖú´ËÀàÑéÖ¤£¬µ«Ç°ÌáÊÇ IBM ºÍ´ËÉó²éԱǩ¶©Êʵ±µÄÊéÃæ±£ÃÜЭÒé¡£ + +11.2 ½â¾ö + +Èç¹ûÈκδËÀàÑéÖ¤ÏÔʾ±»Ðí¿É·½¶Ô³ÌÐòµÄʹÓó¬³öÆäÊÚȨʹÓü¶±ð»òÕßδ×ñÊØ ILAN ³ÌÐòÌõ¿î£¬ÄÇô IBM »áÊéÃæÍ¨Öª±»Ðí¿É·½¡£±»Ðí¿É·½Í¬ÒâÁ¢¼´Ïò IBM Ö§¸¶ IBM ÔÚ·¢Æ±ÖÐÖ¸¶¨µÄÒÔÏ·½Ãæ·ÑÓãº1£©ÈκδËÀ೬¼¶±ðʹÓã»2£©³¬¼¶±ðʹÓÃµÄÆÚ¼ä»òÁ½Ä꣨ÒԽ϶ÌÕßΪ׼£©¶Ô´ËÀ೬¼¶±ðʹÓõÄÖ§³Ö£»ÒÔ¼° 3£©´ËÑéÖ¤ËùÈ·¶¨µÄÈκζîÍâ·ÑÓÃºÍÆäËûÔðÈΡ£ + +12. µÚÈý·½ÉùÃ÷ + +±¾³ÌÐò¿ÉÄܰüº¬µÚÈý·½´úÂ룬ÕâЩ´úÂëÓÉ IBM£¬¶ø²»ÊǵÚÈý·½£¬¸ù¾Ý±¾Ð­ÒéÏò±»Ðí¿É·½Ðí¿É¡£Ë渽µÄµÚÈý·½´úÂëµÄÉùÃ÷£¨µÚÈý·½ÉùÃ÷£¬ÈçÓУ©½ö¹©¸æÖª±»Ðí¿É·½¡£ÕâЩÉùÃ÷¿ÉÒÔÔÚ³ÌÐòµÄÉùÃ÷ÎļþÖÐÕÒµ½¡£¹ØÓÚÈçºÎ»ñȡijЩµÚÈý·½´úÂëµÄÔ´´úÂëµÄÐÅÏ¢¿ÉÒÔÔÚµÚÈý·½ÉùÃ÷ÖÐÕÒµ½¡£Èç¹ûÔÚµÚÈý·½ÉùÃ÷ÖУ¬IBM ½«µÚÈý·½´úÂë±êʶΪ¡°¿ÉÐ޸ĵÚÈý·½´úÂ롱£¬ÄÇô IBM ÊÚȨ±»Ðí¿É·½ 1£©Ð޸ĿÉÐ޸ĵÚÈý·½´úÂ룬ÒÔ¼° 2£©¶ÔÓÚ¿ÉÐ޸ĵÚÈý·½´úÂëÖ±½Ó½Ó¿ÚµÄ³ÌÐòÄ£¿é½øÐз´Ïò¹¤³Ì£¬Ç°ÌáÊÇÕâÑù×öµÄΨһĿµÄÊÇΪÁ˶Ա»Ðí¿É·½¶Ô´ËÀàµÚÈý·½´úÂëµÄÐ޸ĽøÐе÷ÊÔ¡£IBM µÄ·þÎñºÍÖ§³ÖÒåÎñ£¨ÈçÓУ©½öÊÊÓÃÓÚδ¾­Ð޸ĵijÌÐò¡£ + +13. Ò»°ãÌõ¿î + +a. ±¾Ð­ÒéÖеÄÈκι涨¾ù²»Ó°ÏìÏû·ÑÕßÓµÓе쬶øÇÒ²»µÃÒÔЭÒéÐÎʽ¼ÓÒÔÏÞ¶¨»òÃâ³ýµÄ·¨¶¨È¨Àû¡£ + +b. ³ý·Ç±»Ðí¿É·½Óë IBM Ö®¼äÒÔÊéÃæÐÎʽÁíÐÐÔ¼¶¨£¬¶ÔÓÚ IBM ÒÔÓÐÐεķ½Ê½ÌṩµÄ³ÌÐò£¬ÔÚ½«´ËÀà³ÌÐò½»¸¶¸ø IBM Ö¸¶¨µÄ³ÐÔËÈËÖ®ºó£¬IBM ¼´Íê³ÉÁËÆä×°Ô˺ͽ»¸¶µÄÒåÎñ¡£ + +c. Èç¹û±¾Ð­ÒéµÄÈÎÒ»Ìõ¿î¹æ¶¨±»È϶¨ÎÞЧ»ò²»¿ÉÖ´ÐУ¬±¾Ð­ÒéµÄÆäÓàÌõ¿îÒÀÈ»¼ÌÐøÍêÈ«ÓÐЧ¡£ + +d. ±»Ðí¿É·½Í¬Òâ×ñÊØËùÓÐÊÊÓõijö¿ÚºÍ½ø¿Ú·¨Âɼ°·¨¹æ£¬°üÀ¨ÃÀ¹ú½ûÔ˺ÍÖÆ²Ã·¨¹æÒÔ¼°¶Ô³ö¿Úµ½Ä³Ð©×îÖÕÓû§»òÓÃ;µÄÏÞÖÆ¹æ¶¨¡£ + +e. ±»Ðí¿É·½ÊÚȨ¹ú¼ÊÉÌÒµ»úÆ÷¹«Ë¾£¨International Business Machines Corporation£©¼°Æä×Ó¹«Ë¾£¨ºÍÆä¼Ì³ÐÈ˺ÍÊÜÈÃÈË¡¢³Ð°üÉ̼° IBM ÒµÎñºÏ×÷»ï°é£©ÔÚÆä¿ªÕ¹ÒµÎñµÄÈκεط½´æ´¢ºÍʹÓñ»Ðí¿É·½µÄÒµÎñÁªÏµÐÅÏ¢£¬ÒÔ¿ªÕ¹Óë IBM ²úÆ·ºÍ·þÎñÏà¹ØµÄÒµÎñ»òÍÆ½ø IBM Óë±»Ðí¿É·½Ö®¼äµÄÒµÎñ¹ØÏµ¡£ + +f. ÔÚÖ÷ÕÅÁíÒ»·½Î´ÂÄÐб¾Ð­ÒéϵÄÒåÎñǰ£¬Ò»·½Ó¦ÔÊÐíÁíÒ»·½ÓкÏÀíµÄ»ú»áÀ´×ñÊØÐ­Ò顣˫·½½«Å¬Á¦Í¨¹ýÓѺ÷½Ê½½â¾öË«·½Ö®¼äÓ뱾ЭÒéÏà¹ØµÄËùÓÐÕùÒé¡¢·ÖÆçºÍȨÀûÖ÷ÕÅ¡£ + +g. ³ý·ÇÊÊÓ÷¨ÂÉÁíÓй涨¶øÎÞ·¨Ô¼¶¨·ÅÆú»òÏÞÖÆ£¬·ñÔò£º1£©ÈκÎÒ»·½¶¼²»»áÔÚÓ뱾ЭÒéÏà¹ØµÄË÷ÅâËßÒò·¢Éú³¬¹ýÁ½ÄêºóÌáÆðÈκÎÐÎʽµÄ·¨ÂÉËßËÏ£»ÒÔ¼° 2£©ÔÚ´ËÀàʱ¼äÏÞÖÆ¹ýÆÚÖ®ºóÈκδËÀàË÷ÅâÒÔ¼°ÓëË÷ÅâÏà¹ØµÄËùÓи÷×ÔµÄȨÀû¶¼½«¹éÓÚÎÞЧ¡£ + +h. ÎÞÂÛÊDZ»Ðí¿É·½»¹ÊÇ IBM£¬¾ù²»¶ÔÒòÆä²»¿É¿ØÖƵÄÔ­Òò¶øÎÞ·¨ÂÄÐеÄÈκÎÒåÎñ¸ºÔð¡£ + +i. ±¾Ð­ÒéûÓÐΪÈκεÚÈý·½ÉèÁ¢ËßËϵÄȨÀû»òËßÒò£¬IBM Ò²²»¶ÔÈκεÚÈý·½¶Ô±»Ðí¿É·½µÄË÷Å⸺Ô𣬵«ÈçÒÔÉÏµÚ 10.1 ×Ó½Ú£¨IBM ¿ÉÄܳе£ÔðÈεÄÏîÄ¿£©ËùÔÊÐíµÄ£¬¶ÔÓÚIBM Ó¦¶ÔµÚÈý·½³Ðµ£·¨ÂÉÔðÈεÄÈËÉíÉ˺¦£¨°üÀ¨ËÀÍö£©»ò²»¶¯²ú»òÓÐÐζ¯²úµÄË÷Åâ³ýÍâ¡£ + +j. Ç©Êð±¾Ð­Òéʱ£¬Ë«·½¾ùδÒÀÀµÎ´ÔÚ±¾Ð­ÒéÖй涨µÄÈκγÂÊö£¬°üÀ¨µ«²»ÏÞÓÚ¹ØÓÚÒÔÏ·½ÃæµÄ³ÂÊö 1£©³ÌÐòµÄÐÔÄÜ»ò¹¦ÄÜÍ⣻2£©ÆäËû·½µÄ¾­Ñé»ò½¨Ò飻»ò 3£©Èκα»Ðí¿É·½¿ÉÄÜʵÏֵĽá¹û»ò¿É½ÚÊ¡½ð¶î¡£ + +k. IBM ÒѾ­ÓëijЩ×éÖ¯£¨³Æ×÷¡°IBM ÒµÎñºÏ×÷»ï°é¡±£©Ç©ÊðЭÒ飬ÒÔÍÆ¹ã¡¢ÓªÏúºÍÖ§³ÖijЩ³ÌÐò¡£IBM ÒµÎñºÏ×÷»ï°éÒÀÈ»¶ÀÁ¢ÓÚ IBM¡£¶ÔÓÚ IBM ÒµÎñºÏ×÷»ï°éµÄÐÐΪºÍ³ÂÊö»òÕß¶Ô±»Ðí¿É·½µÄÒåÎñ£¬IBM ²»³Ðµ£ÔðÈΡ£ + +l. ±»Ðí¿É·½Óë IBM µÄÆäËûЭÒ飨±ÈÈç IBM ¿Í»§Ð­Ò飩ϵÄÐí¿ÉºÍ֪ʶ²úȨÅâ³¥Ìõ¿î²»ÊÊÓÃÓÚ¸ù¾Ý±¾Ð­ÒéÊÚÓèµÄ³ÌÐòÐí¿É¡£ + +m. Ë«·½Í¬Òâ½»»»µÄËùÓÐÐÅÏ¢¾ùΪ·Ç±£ÃÜ¡£Èç¹ûÆäÖÐÒ»·½ÒªÇó½»»»±£ÃÜÐÅÏ¢£¬ÄÇô½«°´ÕÕÒÑÇ©ÊðµÄ±£ÃÜЭÒé½øÐн»»»¡£ + +14. µØÀí·¶Î§ºÍÊÊÓ÷¨ÂÉ + +14.1 ÊÊÓ÷¨ÂÉ + +Ë«·½¾ùͬÒ⣬±»Ðí¿É·½»ñµÃ³ÌÐòÐí¿ÉËùÔڵĹú¼Ò»òµØÇøµÄ·¨Âɽ«¹ÜϽ¡¢½âÊͺÍÇ¿ÖÆÖ´ÐÐÓɱ¾Ð­Òé±êµÄÒýÆðµÄ»òÒÔÈκη½Ê½ÓëÖ®Ïà¹ØµÄ±»Ðí¿É·½Óë IBM µÄȨÀû¡¢ÔðÈκÍÒåÎñ£¬¶ø²»¿¼ÂÇ·¨ÂɳåͻԭÔò¡£ + +¡¶ÁªºÏ¹ú¹ú¼Ê»õÎïÏúÊÛºÏͬ¹«Ô¼¡·²»ÊÊÓÚÓñ¾Ð­Òé¡£ + +14.2 ¹ÜϽȨ + +Ë«·½µÄËùÓÐȨÀû¡¢ÔðÈκÍÒåÎñ¾ùÊܱ»Ðí¿É·½»ñµÃ³ÌÐòÐí¿ÉËùÔڵĹú¼Ò»òµØÇøµÄ·¨ÔºµÄ¹ÜϽ¡£ + +µÚ¶þ²¿·Ö - ¹ú¼Ò»òµØÇøÌرðÌõ¿î + +¶ÔÓÚÒÔÏÂÖ¸¶¨¹ú¼Ò»òµØÇøÖÐÊÚÓèµÄÐí¿É£¬ÒÔÏÂÌõ¿îÌæ´ú»òÐÞ¸ÄµÚ 1 ²¿·ÖÖÐÒýÓõÄÌõ¿î¡£µÚ 1 ²¿·ÖÖÐδͨ¹ýÕâЩÐÞÕý¸ü¸ÄµÄËùÓÐÌõ¿î¾ù±£³Ö²»±ä²¢±£³ÖÆäЧÁ¦¡£´ËµÚ 2 ²¿·Ö×é֯Ϊ£º + +* µÚ 1 ²¿·ÖµÄ¹ú¼Ò»òµØÇøÐÞÕý£¬µÚ 14 С½Ú£¨ÊÊÓ÷¨Âɺ͹ÜϽȨ£©£»ÒÔ¼° + +* ¶ÔÆäËûЭÒéÌõ¿îµÄÑÇÌ«¹ú¼Ò»òµØÇøÐÞÕý¡£ + +µÚ 1 ²¿·ÖµÄ¹ú¼Ò»òµØÇøÐÞÕý£¬µÚ 14 С½Ú£¨ÊÊÓ÷¨Âɺ͹ÜϽȨ£© + +14.3 Öٲà + +ÒÔ϶ÎÂäÊÊÓÃÓÚÖлªÈËÃñ¹²ºÍ¹ú£¬Òò¶øÌí¼ÓΪÐÂµÄµÚ 14.3 ×Ó½Ú£¨Öٲã©¡£ÔÚÊÊÓÃÊÊÓ÷¨ÂɺͳÌÐò¹æÔòÔÊÐíµÄ·¶Î§ÄÚ£¬¸ÃµÚ 14.3 ×Ó½ÚµÄÌõ¿îÓÅÏÈÓÚµÚ 14.2 ×Ó½Ú£¨¹ÜϽȨ£©µÄÌõ¿î£º + +Èç¹ûδ´ï³É½â¾ö£¬ÕùÒ齫Ìá½»¸øÖйú¹ú¼Ê¾­¼ÃóÒ×ÖÙ²ÃίԱ»á£¬ÒÔ¸ù¾Ý¸ÃÖÙ²ÃίԱ»áµ±Ê±ÓÐЧµÄ¹æÔò½øÐÐÖٲá£Öٲý«ÔÚ±±¾©ÒÔÖÐÎĽøÐС£Öٲþö¶¨¾ßÓÐ×îÖÕЧÁ¦²¢¶ÔË«·½¾ßÓÐÔ¼ÊøÁ¦¡£ÖÙ²ÃÆÚ¼ä£¬±¾Ð­Ò齫µÃµ½¼ÌÐøÂÄÐУ¬µ«Ë«·½²úÉúÕùÒé²¢ÕýÔÚ½øÐÐÖٲõIJ¿·Ö³ýÍâ¡£ + +ÑÇÌ«µØÇø¹ú¼Ò»òµØÇøÐÞÕý + +ÖлªÈËÃñ¹²ºÍ¹ú + +4. ·ÑÓà + +Ìí¼ÓÒÔÏÂÄÚÈÝ£º + +ËùÓÐÔÚÖлªÈËÃñ¹²ºÍ¹úÖ®ÄÚ·¢ÉúµÄÒøÐзÑÓþùÓɱ»Ðí¿É·½³Ðµ££¬ÔÚÖлªÈËÃñ¹²ºÍ¹úÒÔÍâ·¢ÉúµÄÒøÐзÑÓþùÓÉ IBM ³Ðµ£¡£ + +ÐÂ¼ÓÆÂ + +10.2 IBM ²»³Ðµ£ÔðÈεÄÏîÄ¿ + +´ÊÓï¡°ÌØ±ðµÄ¡±ºÍ¡°¾­¼Ã¡±±»´ÓµÚ 10.2b ×Ó½Úɾ³ý¡£ + +13. Ò»°ãÌõ¿î + +ÒÔÏÂÄÚÈÝÌæ´úµÚ 13.i ÏîµÄÌõ¿î£º + +i. °´ÕÕÒÔÉÏµÚ 10 С½Ú£¨ÔðÈÎÏÞÖÆ£©Ïò IBM µÄ¹©Ó¦É̺ͳÌÐò¿ª·¢ÉÌÌṩµÄȨÀû£¬²»ÊDZ¾Ð­ÒéÒ»·½µÄÈËԱûÓÐȨÀû£¨µÚÈý·½È¨Àû£©¸ù¾Ý¡¶ºÏͬ·¨¡·À´Ö´ÐÐÈÎºÎÆäÌõ¿î¡£ + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/LICENSE_locale/LICENSE_zh_TW b/charts/mq-devserver/LICENSE_locale/LICENSE_zh_TW new file mode 100644 index 0000000..4a510ce --- /dev/null +++ b/charts/mq-devserver/LICENSE_locale/LICENSE_zh_TW @@ -0,0 +1,260 @@ +ÚæûâÅÃÅõ + +ĶÇÄÆÛá£È¢ÄæÚæûâØæÏûËíÐêÅÂêØ IBM ǿЩÇÑãôÄæÚæûâÛ¾à¡ÆÀ¡¢ËäËíĶÓÝÚæûâÅÃÅõÛ¾à¡Úæû⡤ӼÐêÅÂǿЩÞóÆÛá£È¢ÆÜÇÑãôÆíÕæÇ¶ÈôÚæûâ۾ࡡ¢Ð¬ÆÛá£È¢ïËÆî ÙÏëãÚæûâÇÙÒü - àÒÏñøýá£È¢ (Z125-5589-05)¡¤ + +á£È¢ÇØê¢ (á£È¢î¾æÀ)¡¨ +IBM MQ Advanced for Developers (Non-Warranted) V9.0.3 (5724-H72) + +ĶÇÄíºäíÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©èׯÛá£È¢ÄæËðÆî¡¤ + +òññ¢Îêá£È¢ + +ÆÛá£È¢ÏûÅèÇéÓìܨÐÂÔïæÒÝÔüÕÄæÅÉÈ¢Úæûâ¡¢ËäÅýÑÄÅèĶÍÔç¥òññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ã¯ÓîËíÆÛÚæûâÅÃÅõÄæÝ½Ìù¡¢ÍõÆÛá£È¢ûâɳøýÍüÕóÄæÓî̱î¯ÞØÄùÇøæÒůËðÆîЩßËòññ¢Îêá£È¢¡¤Ý·ÚæûâÄ©ÄâÚµñÁÇ¡ÍõÇéÓìܨÐÂÔïæÒÝÔüÕÄæÆÀ¡¢ÈÔ÷ËüéÍÐ÷ËÙÇòññ¢Îêá£È¢¡¤òññ¢Îêá£È¢Æ«×äóôÏáÚæûâ۾ࡡ¢È´óôÏáϯ¡¢æÚá«ÚæûâÛ¾à¡ïËÆîÍõÝ·ÚæûâÄ©è׿Úòññ¢Îêá£È¢ÄæËðÆî¡¤È´Íêú½Ï¯¡¢ÆÛÚæûâÅÃÅõÄãÄæÛ¾à¡ç¤æÚòññ¢Îêá£È¢ÄæÛ¾à¡óÀÇ¿ïËÆî¡¤Ý·ÚæûâĩĿÆÛá£È¢ËðÆîûâÌ¯ßæÍÐÜÜÅÏÕë¡¢Ý·ÚæûâÄ©âüØôÆî¡£ïÚäÚÍÐǡɻö×õäòññ¢Îêá£È¢ÄæÄ¡Å¢îïÆÛÄèÝ·Úæûâĩڷ̧̽ڵ¡ÖÆÛá£È¢¡×ÄæÅìÅÉ¡¤Ó¼Ý·ÚæûâÄ©ÏûĶç¥Ì½Úµòññ¢Îêá£È¢¡¢Ý·ÚæûâÄ©óÜêØÚ·Ì§Ì½ÚµÆÛá£È¢ÄæÅìÅÉôúᾡ¤Ó¼Ý·ÚæûâÄ©ÛÃ̽ڵç·â½Ä¸ÓÝÓî̱ݽÌùÄæÚæûâÅèËðÆîòññ¢Îêá£È¢¡¢îùÝ·ÚæûâÄ©êØ IBM äÆÙ­ÅîÏÐÍÐêØÝ·Úæûâĩڷ̧̽ڵÆÛá£È¢ÄæÅìÅÉôúᾡ¢Åè̽ڵïËåµÚæû⡤ + +ĶÇÄÒ³òñÆÛá£È¢Ä¡Ë÷ÚæûâÄæòññ¢Îêá£È¢¡¨ +IBM MQ V9.0.3 + +âäàõÄ©ÔÞÓî̱ + +Ó¼ÆÛá£È¢ÏûÝ·ÑÀÌùÒ³ïËÆî¡ÖâäàõÄ©Ôޡס¢Ð¬ÆÛá£È¢ã¯ÓîÝåå÷Ò³Ý·ÚæûâÄ©ÍõâäàõÄ©ÔÞñ¢ðÂÍÔÒ³ÄùÝåâäàõůÞÌÄ÷àÁæÜÆîÝäĿġÝåÅ¡¡¤ÍÔê¢âäàõÄ©ÔÞñ¢ð¡¢ÏûÑÀÙÚÈçÅäÓÑÉ¢äÆË·ÜÓůÆÛá£È¢ÄæèÒüÕÍÐáðóéÖ¤Óòô¿èº¡¢æÚÅäÓÑÉ¢äÆË·ÜÓůÆÛá£È¢ã¯ÓîÆñÄâÇéÍõÄ¡ÈíÄæÑÀÌùâäàõÄ©ÔÞÇô̽ůËðÆîÄæ¡¤Ý·ÚæûâÄ©ÄâÚµÙòÆÛá£È¢ÆîÍõݨܡÆßȢɢäÆÄÖÉ¢Ó×Ý£¡£í¼óéÆßȢɢäÆÄÖÉ¢Ó×Ý£ÍÐàÁæÜǶÈôá£È¢î£¡£óÜÆîá£È¢ÍÐË·ÜÓÄæÝ½í¼Í·Õ­ÍÌ¡¤ÆÜ̽ڵïËåµÄæÆßȢɢäÆÚæûâϯ¡¢Ý·ÚæûâÄ©ÄâÚµÙòÆÛá£È¢ÄæÇ¶ÈôÝåÅ¡ÆîÍõǶÈô̧ÅìÆîÝ䡤 + +ÏæÆîÍõÐúÇ¡ÆÒÓÑÚæûâÄæÄ÷ǵ + +ÍõɲöËÝ·ÚæûâÄ©ÇøæÒÍÐËðÆîÆÛá£È¢ÍÔëæÄæÚæûâí°âØÕ롢ĶÇÄá£È¢Ä÷ÇµÄæÇøæÒÍÐËðÆîÄâÄèÅèÈÓâØ¡¤Ç©É»¡¢Ý·ÚæûâĩڵËíÚæûâÛ¾à¡ÇøæÒůËðÆîĶÇÄá£È¢Ä÷ǵ¡¢ÈþæÚá«Ä÷ǵÄâÆîÅèɲöËÆÛá£È¢ÍÔëæÄæÚæûâí°âØ¡¤ +IBM MQ Managed File Transfer Agent V9.0.1 +IBM MQ Telemetry V9.0.1 + +ÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì + +ÆÛá£È¢Æ«×äÄùÉÖÓ¼ÄÛÔÏÌîî£ÖªÈ¢ÄæÄ÷ǵ¡¾¡ÖÔÏÌîî£Ä÷ǵ¡×¡¿Å¯Ì§ÅìíºÆüÒ³¡Öî¯ËóááÉ¢Îì¡×ÄæááÉ¢Î졤ÍõÆÛÇÙÒüݽÌùÄæÚæûâËðÆîÓî̱î¯ÞØÄù¡¢Ý·ÚæûâÄ©ã¯ÓîÙ×ÍõÄùÝåËðÆîÄæÆøÎûÈÔîïêûůԺÊÑÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢Îì¡¢ÈþÝ·ÚæûâÄ©ÄâÚµÊÕÊÑÍÐÉ´ØæÔÏÌîî£Ä÷ǵÍÐî¯ËóááÉ¢ÎìÍÔÉÖǶÈôááÉ¢ûâæñعÍÐÎÃãôËçâú¡¤IBM è×ÍõÔÏÌîî£Ä÷ǵůî¯ËóááÉ¢ÎìÄæßÈËò¡¢ÄâÉÖÅÅßÎåøÙ­¡¢ËäÅè¡ÖÜ¢Îí¡×ßÈËò¡¢ÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÈþÄâÓîÍõÍÔÈ´ûâ¡£ÆÜÖÄÏëûâÍÐÆÜÖÄÄÛöÆÄæÏñøý¡¢ÅèůïËÙÇÍÌêØÜÊÇÙÖÖÌùÆøÎûÄæó¼ÆüÏñøýů۾ǵ¡¤ + +L/N: L-APIG-AKHJY4 +D/N: L-APIG-AKHJY4 +P/N: L-APIG-AKHJY4 + + +ÙÏëãÚæûâÇÙÒü - àÒÏñøýá£È¢ + +ÜÉÄ¡ÝåÅ¡ - Ä¡×ï۾ࡠ+ +Ý·ÚæûâĩġÆÙĶ祡£ÇøæÒ¡£îïêû¡£Çô̽¡£ÑºÄ¶¡ÖÚÙÌ¿¡×ѺâÚÍÐËðÆîÆÛ¡Öá£È¢¡×¡¢É»ÏÐÆüÝ·ÚæûâÄ©ÇÑãôÆÛÇÙÒüÄæÛ¾à¡¡¤Ó¼ â¸ÐêÅÂÏûÅîÏÐÝ·ÚæûâÄ©ÚÙÌ¿æÚá«Û¾à¡¡¢Ð¬ â¸ÐêÅÂôøÍüËäÏñøý â¸ÐêÅÂðßÈ´ÅòÅ¡ûâÓîÚµÅèËðÝ·Úæûâĩ̿Ⱥá«Û¾à¡ÍíÊÖ¡¤Ó¼ â¸ÐêÅÂÄâÇÑãôÆÛÇÙÒüÛ¾à¡Õë¡¢ + +* îùŦĶ祡£ÇøæÒ¡£îïêû¡£Çô̽¡£ÑºÄ¶¡ÖÚÙÌ¿¡×ѺâÚÍÐËðÆîÆÛ¡Öá£È¢¡×¡§Å¯ + +* ǡɻÙòÆÜËðÆîÄæÞèüÕêØë©ÍüÅÆÇµØÍÇßÔÏËòÝÌìÞÙ¸¡¾IBM ÍÐ̧÷ËïÚÙ¸¡¿¡¢ËäÓÑÊåØÍõäÄØÅéà¡âú¡¤Ó¼ÄØÄ¶ç¥ÆÛ¡Öá£È¢¡×¡¢Ð¬óÜïÚäÚÆÛ¡Öá£È¢¡×ĿġŢîïÆÛ¡¤ + +1. Ìùåø + +¡ÖÚæûâËðÆî¡× - Ý·ÚæûâÄ©Ì½ÚµÚæûâÅèÙÚÈçÆÛ¡Öá£È¢¡×ÄæÖÖÌùìÒ×È¡¤æÚìÒ×ÈÄæÐùâØÞÌÄ÷¡¢ÚµËíËðÆîϯí°âØ¡£ÈËåÜΤ٭ÞÌÄ÷ ("MSU")¡£Ý¨Ü¡ðÂì¤Ô«ÞÌÄ÷ ("PVU") ÍÐ̧Åì IBM ÑÀÌùÄæËðÆîìÒ×ÈÒ³Äæ¡¤ + +¡ÖIBM¡× - International Business Machines Corporation ÍÐ̧ÄÍÄüƳ¡¤ + +¡ÖÚæûâÅÃÅõ¡×("LI") - ÄùÉÖÑÜ¡Öá£È¢¡×ÖÖÌùæñعůǶÈôÏáÅûÛ¾à¡ÄæÅÆÇµ¡¤ÆÛ¡Öá£È¢¡×Äæ¡ÖÚæûâÅÃÅõ¡×Æ«Íõ www.ibm.com/software/sla ê½×»Ì½Úµ¡¤ÆÛ¡ÖÚæûâÅÃÅõ¡×ǩƫ×äÈíÍõÆÛ¡Öá£È¢¡×ÄæÑÜÆøòçÄù¡¢ÅèËðÆîË·ÜÓÑÀÅïÅÉÈ¢ÏíÆ«ÊÆÌ¯¡¢ÈºÆÀ¡¢Ç©Æ«×äÅèÄÑÅõÄÍʰȢóôÏáÍõÆÛ¡Öá£È¢¡×¡¤ + +¡Öá£È¢¡× - á£È¢ÔÏÎêů̧ÇÀÝåÍÐÝåÅ¡îïÆÛ¡¢ÅýÑÄ¡¨1) ñ¢ðÂÆ«ïåûôÑÀÅïêØæñÕè¡§2) Ä÷ǵ¡£óòÕùůí¼ÜÚ¡§3) ôø/ìàÄùÕ©¡¾Çñè·çù¡£ÅÆî¥¡£òçÓö¡¢ÍÐäùÅÚá«¡¿¡§Å¯ 4) ÒÞùÃÚæûâááÉ¢Î졾ÇñÚæûâî£Å¯ë©ÍüÅÆÇµá«¡¿¡¤ + +2. ÇÙÒüÑÞé¬ + +ÆÛÇÙÒüÅýÑÄÜÉÄ¡ÝåÅ¡ - Ä¡×ï۾ࡡ£ÜÉĨÝåÅ¡ - ÇÖÙÏÙñÈ´Û¾à¡Å¯¡ÖÚæûâÅÃÅõ¡×¡¢Ò³È´ùÃÝ·ÚæûâÄ©ËðÆîÆÛá£È¢ÄæÉùðìÇÙÒü¡¢Åâ̽ÅîÝ·ÚæûâÄ©Ç¿Ð©êØ IBM ÍÔɢĿġŢÄÇó¤ÍÐÕóÓò̶ú¾¡¤ÜÉĨÝåš۾à¡ÚµÌ½ÅîÍÐÔºÓÔÜÉÄ¡ÝåÅ¡ÄæÛ¾à¡¡¤ÄëÈ´îíÒóϯ¡¢¡ÖÚæûâÅÃÅõ¡×ç¤æÚá«Ä¨ÝåÅ¡óÀÇ¿ïËÆî¡¤ + +3. Úæûâ + +IBM ÍÐ IBM ÄæËòóÜÙ¸ðßÈ´ÆÛ¡Öá£È¢¡×ÄæááÉ¢ûâ¡¢ÆÛÇÙÒüÒ³ÚæûâÇÙÒüÈÔÏæááÉ¢ûâüéÙÇÇÙÒü¡¤ + +IBM ï¬ÄèÝ·ÚæûâÄ©ÏæÙñúèÍÌÚæûâ¡¢Ý·Úæûâĩڵ 1) ËíàõÜÁç¥ÍüÄæÚæûâËðÆîݽÌùËðÆîÆÛ¡Öá£È¢¡×¡§2) êûÉ¢Å¯ÇøæÒÇéǹîïÆÛÅèÅÅßÎæÚÚæûâËðÆî¡§Å¯ 3) êûɢެǹ¡¢ÚÍëæÜÊÇÙĶÇÄݽÌù¡¨ + +a. Ý·ÚæûâĩĨÇÙÎÎ̽ڵÆÛ¡Öá£È¢¡×¡¢Ëäò×ÇöÆÛÇÙÒüÄæÛ¾à¡¡§ + +b. ØæÏæ¡Öá£È¢¡×àÒÎÎÙÚÈç¡¢ÉÁЬ¡Öá£È¢¡×ÄæÞ¬Ç¹ÄâÚµÙÚÈç¡§ + +c. Ý·ÚæûâÄ©îïêûÆÛ¡Öá£È¢¡×Õë¡¢Äâï¢Ì§ÏûÇÀÝåÍÐÝåÅ¡îïÆÛ¡¢ÉáëæÍõæÚîïÆÛĸîïêûÆÛ¡Öá£È¢¡×ĿġŢááÉ¢ûâíºÆüů̧ÅìÈ´ùÃÄæÍÔÈ´ûâÉ³íºÆü¡§ + +d. Ý·ÚæûâÄ©óÜíýÏñǶÈôÄ©ÍõËðÆîÆÛ¡Öá£È¢¡×Õ롾Äâï¢÷³ÆñÆÛÇâÍÐë¿ê¦Çô̽¡¿¡¢1) ã¯ÍõÝ·ÚæûâÄ©Ý·ÚæûâÎûî¯ÞØÄùËðÆî¡¢2) Ëäò×ÇöÆÛÇÙÒüÛ¾à¡ÄæÝ½Ìù¡§ + +e. ØæÆÛÇÙÒüÍüÅÆÝÂÆ«ÆÀ¡¢Ý·ÚæûâÄ©ÄâÚµ¡¨(1) ËðÆî¡£îïêû¡£ÔºÊÑÍÐß×ÆÌÆÛ¡Öá£È¢¡×¡§(2) ØËÇ×ÜÚÇÙ (reverse assemble)¡£ØËÇ×î¾ú¬ (reverse compile)¡£ØËÇ×ÄÖᣠ(reverse engineer) ÍÐÅȩ̀ÅìÅÉÎÎæØúÁÆÛ¡Öá£È¢¡×¡¢ÈþÎÎѣݽÌùÄâÚµÅèÐÖÒüÓî̱ϯ¡¢ÄâÇãȺÓî¡§3) ñÁÇ¡ÍõæÚ¡Öá£È¢¡×ÆÀÈÔËðÆî̧ǶÈôÄ÷ǵ¡£óòÕù¡£í¼ÜÚ¡£ôø/ìàÄùÕ©ÍÐÒÞùÃÚæûâááÉ¢Îì¡§ÍÐ 4) ÷ËÚæûâ¡£ÇÂÚæûâÍÐÅø×µÆÛ¡Öá£È¢¡×¡§Å¯ + +f. Ó¼Ý·ÚæûâÄ©Ì½ÚµÄæÆÛ¡Öá£È¢¡×Ò³¡ÖÅÅßÎá£È¢¡×¡¢Ý·ÚæûâÄ©ã¯ÚµÉ³ÆîÆÛ¡Öá£È¢¡×ÅÅßΡÖÅäÓÑá£È¢¡×¡¢ËäÌ¿¡ÖÅäÓÑá£È¢¡×ÚæûâÛ¾à¡ÄæÍíÊÖ¡§ÍÐϯ¡¢Ó¼Ý·ÚæûâÄ©Ì½ÚµÄæÆÛ¡Öá£È¢¡×Ò³¡ÖÅäÓÑá£È¢¡×¡¢Ý·ÚæûâÄ©ã¯ÚµÉ³ÆîġŢ¡ÖÅÅßÎá£È¢¡×ÅèÅÅßÎÆÛ¡Öá£È¢¡×¡¢ËäÌ¿ÆÛÇÙÒüÛ¾à¡ÄæÍíÊÖ¡¤Ù×ÍõÆÛ "f" âúÄæÆøÎû¡¢¡ÖÅÅßÎá£È¢¡×ÏûÑÀúèÍõ̧Åì IBM á£È¢¡¾¡ÖÅäÓÑá£È¢¡×¡¿Ä¡ÝåšĿá£È¢¡¢ËäÍõ¡ÖÅäÓÑá£È¢¡×ÚæûâÅÃÅõç¥ÍüÒ³¡ÖÅÅßÎá£È¢¡×¡¤¡¾Ó¼ÓÑ̽ڵÆÜÉÖæÚá«ÓîÌ±Äæ¡ÖÅÅßÎá£È¢¡×ÄæÔ¶É±Úæûâ¡¢Ý·ÚæûâÄ©óÜêØßÈËò̧¡ÖÅÅßÎá£È¢¡×ÄæÔÏËòÝÌìÞÙ¸ôúᾡ¤¡¿ + +ÆÛÚæûâïËÆîÍõÝ·ÚæûâÄ©êûɢĿÆÛ¡Öá£È¢¡×ÇÖîïÆÛ¡¤ + +3.1 ÊËì¤ßÐõÕ¡£ÊÕä»á£È¢¡£ÔºÆßá£È¢Å¯ÔºæÐá£È¢ + +3.1.1 ÊËì¤ßÐõÕ + +Ó¼ÆÛ¡Öá£È¢¡×ÆñìÁì¤ßÐõÕ¡Öá£È¢¡×̽Åݷ̽Åî¡Öá£È¢¡×ÄæÚæûâǡɻÜÜÅÏ¡¤ + +3.1.2 ÊÕä»á£È¢¡£ÔºÆßá£È¢Å¯ÔºæÐá£È¢ + +Ý·ÚæûâÄ©ÚÙÈ­¡Öá£È¢¡×ÄæÊÕä»á£È¢¡£ÔºÆßá£È¢ÍÐÔºæÐá£È¢Õë¡¢ÏÐÆüÝ·ÚæûâÄ©ÚÙÌ¿æÚ¡ÖÚæûâÅÃÅõ¡×Äùç¥ÍüÆ«ïËÆîÍõÇÖæÚÊÕä»á£È¢¡£ÔºÆßá£È¢ÍÐÔºæÐá£È¢ÄæÇ¶ÈôÏáÅûÛ¾à¡ÍÐÄâÇÑ۾ࡡ¤Ó¼àÒÏáÅûÛ¾à¡ÍÐÄâÇÑ۾ࡡ¢Ð¬ÇÖæÚÊÕä»á£È¢¡£ÔºÆßá£È¢ÍÐÔºæÐá£È¢ã¯Ì¿ÆÛÇÙÒüÍíÊÖ¡¤Ó¼ÆÛ¡Öá£È¢¡×ÆñÊÕä»á£È¢Ì½Åî¡¢Ý·ÚæûâÄ©ÇÑãôǡɻØôÅÏËðÆîæÚݷ̽ÅîÄæ¡Öá£È¢¡×¡¤ + +3.2 ÌÖÌùßæâæÚæûâ + +Ó¼ IBM ÏûßÈËòÆÛ¡Öá£È¢¡×ÄæÌÖÌùßæâæÚæûâ¡¢Ý·ÚæûâÄ©ÍÔÌ½ÚµÄæÚæûâÍõßæâæËÕÅÊÜÜÅÏ¡¢ÚÍÝ·ÚæûâÄ©êØ IBM ÇÑãôխͷϯ¡¢ÄâÇãȺÓ + +3.3 ÇÙÒüßæâæêØÜÜÅÏ + +ÆÛÇÙÒüÍõÜÜÅÏЩÉáúèÈ´Õæ¡¤ + +Ý·ÚæûâÄ©ÆÜò×ÇöÆÛÇÙÒüÄæÛ¾à¡Ï¯¡¢IBM ÚµÜÜÅÏÚæû⡤ + +ǶġÅÉåµËçÄ©ÇÞÑÊÜÜÅÏÆÛÚæûâÕë¡¢Ý·ÚæûâÄ©ÇÑãôǡɻØôÅÏËðÆîËäïÚô·Ì§Ñ½È´ÄæÄ¡Å¢ÆÛ¡Öá£È¢¡×îïÆÛ¡¤Ç¶ÈôÆÛÇÙÒüÄãËí̧ÍÌï³óÜÍõÇÙÒüÜÜÅÏÑ¥ÇôúýÄæÛ¾à¡¡¢ÍõæÚÛ¾à¡ÉùÇÀìÓÈçЩÄóúèÈ´Õæ¡¢Ç©ïËÆîÍõ â¸Ê¼÷äÅÉÔ¶É±Äæú«Ì¿Ä©Å¯Ì¿üéÄ©¡¤ + +4.ÓÓâ¶ + +â¶ÆîÄæÓÓê«¡¢ÏûËíðãàõÜÁç¥ÍüÄæ¡ÖÚæûâËðÆî¡×¡¤IBM ÞóǶÈôçßÅéà¡âúÍÐ̧ÅìÄØàõÆíÍÐÄØÅÅÅéÄæâ¶ÆîÄâÄèØÍâ¶¡¢ÚÍÆÛÇÙÒüƶȴݽÌùϯ¡¢ÄâÇãȺÓ + +Ó¼Ý·ÚæûâÄ©ÛÃìÁÅû̧¡ÖÚæûâËðÆî¡×¡¢Ý·ÚæûâÄ©óÜËçÇ¿Ý×Ï¡ IBM ÍÐ IBM ÚæûâåîïÚÙ¸¡¢ËäÅÅÅéǶÈôÒÞùÃâ¶Æî¡¤ + +5. á¤ÏÚ + +ǶÈôÅäê§ñ¢ùÃè×ÆÛ¡Öá£È¢¡×îûÅèá¤ÏÚ¡£ÄüîûÍÐâ¶Æî¡¾ÄâÉÖè× IBM ÄæÍÔÚµÍÔîûÄæá¤à¡¡¿¡¢Ý·ÚæûâÄ©ÇÑãôËíàõÜÁç¥ÍüÄæÏÚ÷ìÅÅÅé¡¢ÚÍÝ·ÚæûâÄ©ßÈËòÉ­á¤ÅÆÇµÏ¯ÄâÇãȺÓÈÜÝ·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÄæÅÊØÄ¡¢ â¸ÐêÅÂóÜÞóæÚ¡Öá£È¢¡×ÈÜÈçÓ×ÝÊǶÈôÔ¶Ä©ØÂܨᤡ¤Ó¼Ç¶ÈôÅäê§ñ¢é¬ÞóÆÛ¡Öá£È¢¡×ÍõÔÏÝ·ÚæûâÄ©Ì½ÚµÚæûâÕëÍÔÇãÙÏÕ¥ÍÐÇâÙ´ÄæèºÆÀ¡¢èׯÛá£È¢Äæã¾Ä«ÍÐã¾Åø¡£÷Ëüé¡£Çô̽ÍÐËðÆîîûÅèùÃᤡ£á¤ÕßÍÐâ¶Æîϯ¡¢Ý·ÚæûâÄ©ÇÑãôÈÜÈçÓ×ÝÊÅÅÅéǶÈôÍÔîûÏÚ÷졤 + +6. ØÍà¡Ïñøý + +Ó¼Ý·ÚæûâÄ©ÇÞÑÊÄâéÈãôÆÛ¡Öá£È¢¡×¡¢ÅâÝ·ÚæûâĩҳÔÏÌîÝ·ÚæûâÄ©¡¢Ý·ÚæûâĩڵÜÜÅÏÆÛÚæûâ¡¢Ëä×ÄÇßÔÏÄØÅéà¡âú¡¢ÚÍÝ·ÚæûâÄ©ëæÍõàõÜÁâäÇ¡ÅÊĵIJŲÄù¡¢ÙòÆÛ¡Öá£È¢¡×ØÍõäÄèÆÛ¡Öá£È¢¡×ÔÏËòÝÌìÞÙ¸¡¤Ó¼æÚÚæûâÏûúèÆ«Õ­Í·ÄæÌÖÌùßæâæÚæûâ¡¢Ý·ÚæûâÄ©ëæÍõÓûÈ¹ÚæûâßæâæÄæÐ©ÄµÄ²ÅÊÄùØÍõäÆÛ¡Öá£È¢¡×¡¢Ìîڵ̽ÇßÄØÅéà¡âú¡¤Ó¼Ý·ÚæûâÄ©ÄØÄ¶ç¥ÆÛ¡Öá£È¢¡×¡¢Ý·ÚæûâÄ©óÜêØßÈËòÆÛ¡Öá£È¢¡×ÄèÝ·ÚæûâĩĿÔÏËòÝÌìÞÙ¸ôúᾡ¢ËäËí̧ÑÀÆüÅè̽ÇßÄØÅéà¡âú¡¤ + +7. á£È¢÷Ëüé + +Æ·È´ÇãÜÉĵĩÇÑãôÆÛÇÙÒüÛ¾à¡Õë¡¢Ý·ÚæûâÄ©ÌîÚµ÷ËüéÆÛ¡Öá£È¢¡×Å¯ÚæûâÄæÒÞùÃûâɳåøÙ­¡¤Ç¶Ä¡ÅÉåµËçÄ©ÇÞÑÊÜÜÅÏÆÛÚæûâÑ¥¡¢Ý·ÚæûâĩɻÄâÚµ÷ËüéÆÛ¡Öá£È¢¡×ÄèÅìÄ©¡¤Ý·ÚæûâÄ©ÄâÚµÝåÅ¡÷Ëüé 1) ÆÛ¡Öá£È¢¡×¡¢ÍÐ 2) ÆÛ¡Öá£È¢¡×Äæ¡ÖÚæûâËðÆî¡×¡¤Ý·ÚæûâÄ©÷ËüéÆÛá£È¢ÄæÇÑÕ롢ǩóÜǨÅéġǹÆÛÇÙÒüÄæîïÆÛ¡¢ÅýÑÄÆÛÇÙÒüÄæ¡ÖÚæûâÅÃÅõ¡×¡¤÷ËüéÑ¥¡¢Ý·ÚæûâÄ©Ì½ÚµÄæÚæûâÉ»ÉËÜÜÅÏ¡¤ + +8. àÒÏñøýËçâú + +ØæËíÎÎѣݽÌùÄâÚµÚêØæÄæÏñøýÆÀ¡¢IBM ÞóÆÛá£È¢ÍÐÅÅßÎÄâßÈËòǶÈôÍüÆüÍÐó¼ÆüÄæÏñøý¡¢ÅýÑÄÅâÄâÓîÍõïËÙÇÍÌ¡£ÐÂï³éÈãôÐù¡£ÜÊÇÙÖÖÖ±ÕæÆî¡£ÍÔÈ´ûâÅèůǶÈôÆÜÖÄÏëûâÄæÏñøý¡¤ + +Ô¸ÎÎѣݽÌùÄâÚµÚêØæÍüÆüÍÐó¼ÆüÄæÏñøý¡¢Ð¬Ä¸â䨿ÆÀÛ¾à¡ÄâïËÆî¡¤ÇãȺê¡ÚÅÎÓĶ¡¢Èºá«Ïñøýã¯ÍõÎÎÑ£ÓÑÊåÄæÞ²àûßæâæÈ´Õ桤æÚßæâæÑ¥Ä¡Å¢ÏñøýÉáÞÆÆÂտİ¡¤Ô¸ÎÎѣݽÌùÄâÚµÓî̱ó¼ÆüÏñøýÄæÈ´Õæßæâæ¡¢Ð¬æÚÓî̱àÒÕæ¡¤ÕüðãÄâÇÑÙÏÕ¥ÍÐÇâÙ´ÄæÝ½Ìù¡¢Ý·Úæûâĩǩƫ×äËêȴ̧ÅìÎÎÌùûâɳ¡¤ + +ÆÛÜÉ 8 åçÄãĿɭÝÊôøÍüêØØæÆÀ۾ࡡ¢Ç©ïËÆîÍõǶÈô IBM á£È¢âäàõϯêØËòóÜÙ¸¡¤ + +Ïæ IBM á£È¢ÄæêûÝßÙ¸¡£ËòóÜÙ¸ÍÐàõɩϯڵßÈËò̧ÈÜÄØÄæÏñøý¡¤ + +IBM ÄâßÈËòǶÈôùËÐÎÄæÊÀÝ´ÅÅßΡ¢Èþ IBM ƶȴÑÀÍüϯÄâÇãȺÓÇñÈ´ÑÀÍü¡¢IBM ÍÔßÈËòÄæÇ¶ÈôÊÀÝ´ÅÅßÎÌ¿ÆÛÜÉ 8 åçÄãĿɭÝÊôøÍüÅ¯ØæÆÀÛ¾à¡ÍíÊÖ¡¤ + +9. Ý·ÚæûâĩĿæñÕèêØæñÕèÕ» + +Ò³Ì¶É·Ý·ÚæûâĩٴçÒÆÛ¡Öá£È¢¡×ÍÔÓ³ÙÂ÷îÄæÈ©ÇÞ¡¢IBM ÚµÓÑÊåÝ·ÚæûâÄ© 1) ÄøÝ IBM Åèë¿ê¦ÅÉÈ¢ÇôÌ½Ý·ÚæûâÄ©ÄæË·ÜÓ¡¢ÍÐ 2) ã®ØÊÝ·ÚæûâĩĿæñعÍÐË·ÜÓæñÕèÈÝ IBM¡¤IBM ËäàÒåøÙ­ßÈËòЩâú̶ɷ¡¢ÚÍ IBM êØÝ·ÚæûâĩƶǡԶɱÕóÓòÇÙÒü¡¢Åâ IBM ËíæÚÇÙÒüÇÑãôÒ³Ý·ÚæûâÄ©ßÈËòÆÛÇÙÒüݽÌùåøÙ­ÅèÆÀÄæÅÅßÎùËÐÎϯ¡¢ÄâÇãȺÓ IBM óÜËðÆîòãë¨êØÙÂ÷îÒÞùÃæñعÅèÊÑâÐ̧ܨÐÂêØÎ¤Ù­¡¢Ëä̶ɷßÈËòÒÞùÃÄæÅÅßÎËòóÜâúÆø¡¤Ù×Íõ鼇ǮøÎû¡¢IBM ڵɳÆî̧Åì IBM èÒüÕêØ÷ËÅýÙ¸¡¾ÅýÑÄÈíÍõÝ·ÚæûâÄ©ÍÔÇãÙÏÕ¥ÍÐÇâÙ´ÅèÆÀĿġÍÐÇéÔ¶ÙÏÕ¥ÍÐÇâÙ´ÄææÚá«èÒüÕêØ÷ËÅýÙ¸¡¿¡¢ÅâÝ·ÚæûâÄ©ÇãÈºÚæûâ IBM Ⱥá«çªÆîÈçÒ³¡¤ + +ÚÍÞóĶÇÄËçâú¡¢Ý·ÚæûâÄ©ÄóóÜÈÜÈçÓ×ÝÊ¡¨1) Ý·ÚæûâÄ©ßÈËòÄè IBM ÄæÇ¶ÈôæñÕèůǶÈôæñÕèջĿÄùÕ©¡§2) òÙðåůèÒÑÌÈ´ùÃæñÕèÄæÇô̽¡£ÇøÇÀ¡£ÅûÙï¡£ËðÆîůã®òÓÄæá£Ê©êØÚÕê§¡¾ÅýÑÄǶÈôÆ«òÕøüÔ¶Ä©ËΚĿæñÕè¡¿¡§Å¯ 3) ެǹůÇßߦǶÈôæñÕèջůǶÈôóÃÇôæñÕè¡¤Ý·ÚæûâÄ©ÄâÚµã®ØÊǶÈôÆ«òÕøüÔ¶Ä©ËΚĿí°ðãæñÕèÍÐ̧ÅìùËÐÎæñÕè¡¢ÍÐßÈËòæÚá«æñØ¹ÄæÇô̽ûâÓîÄè IBM¡¤Ý·ÚæûâÄ©ÇÞ̧òãë¨ßÈËòæÚá«æñعÄè IBM ÄæÚÅËç¡¢Ó³Ëð IBM ÇÞòÜÆÂÍÐßËû¿æÚá«æñعÍÔÓÏÆíÇÙÜ¡â¶Æîů̧Åìà¡âú¡¢ÅýÑÄÇÞǶÈôÜÉĵĩĿ×ÄïªÍÔÆíâ¶Æîůà¡âú¡¢óÜÆñÝ·ÚæûâÄ©Ó×ÝÊ¡¤ + +10. ïªóÁĸÓî + +ÆÛÜÉ 10 å硾¡ÖïªóÁĸÓî¡×¡¿ÄãÄæÓîÌ±êØØæÆÀ۾ࡡ¢ØæÎÎѣݽÌùÄâÚµÅèÐÖÒüÓîÌ±ÄæÚÅÎÓÆÀ¡¢Ì§ÅìÚÅÎÓġѣïËÆî¡¤ + +10.1 IBM óÜÓ×ÝÊïªóÁÄæâúÆø + +ÇÞ IBM ç°ÒüÍÐ̧ÅìÆ«ö×ÝÊËçÆñ¡¢Ý·ÚæûâĩڵÇ× IBM îùÊåä´Õ¤ïªóÁ¡¤IBM ÞóÇÖ¡Öá£È¢¡×ÆÛËÎÍÔàõÆíÍÐÒÞùÃÄæÇÀÝåîùÊåÍÐ̧ÅìÙ×ÍõÆÛÇÙÒüÍÔÆíÄæîùÊå¡¢àÒï¢Ý·ÚæûâÄ©Ù×ÍõÈôê¡ûâɳîùÊåïªóÁ¡¾ÅýÑÄÓìÄËç°Òü¡£Ü­ÍÁ¡£ÄâèÒÝóÓÝÍÐ̧ÅìÐÖÒüîùÊåÍÐÏëûâÈçÒ³¡¿¡¢IBM ÄæïªóÁÝÊǶã¯ÓîÍõ 1) Ä©ËÎã²Õ¤¡¾ÅýÑÄÈ»ÄÁ¡¿Äæä´Õ¤¡£ÄâٯܨÍÐԶĩȴʰæñ܍ĿäÚä´¡§2) ̧ÅìÎþÚÙèÒëãä´Õ¤¡¢ÚÍÄâÚµâ¾ç´Ý·ÚæûâÄ©ÞóæÚ¡Öá£È¢¡×ÍÔÅÅÅéÄæÚæûââ¶Æî¡¾Ó¼æÚ¡Öá£È¢¡×Ò³ÌùßæÅéâ¶Ï¯¡¢Ð¬ÅèIJĨԶÅÌÄæÚæûââ¶ÆîҳĸÓî¡¿¡¤ + +ȺâúÓî̱ǩïËÆîÍõǶÈô IBM Äæ¡Öá£È¢¡×âäàõϯêØËòóÜÙ¸¡¤ÈºâúÓî̱Ïû IBM ů IBM Äæ¡Öá£È¢¡×âäàõϯêØËòóÜÙ¸ÄæÇÁÇÑïªóÁĸÓ + +10.2 IBM ÅÑëæÓ×ÝÊïªóÁÄæâúÆø + +ÇãǶÈôÚÅÎÓĶ¡¢IBM¡£IBM Äæ¡Öá£È¢¡×âäàõϯÍÐËòóÜÙ¸è×ĶÇÄÚÅËçÉáÄâÓ×ïªóÁÝÊǶ¡¢É»ËðÝ·ÉËÏ¡æÚÚÅËçÈ´Æ«×äàõÆíÕ롢ǩÇÑ¡¨ + +a. æñÕèĿ俯ÂÍÐäÚä´¡§ + +b. ÖÖÖ±ä´Õ¤¡£ÏáÚ§ä´Õ¤¡£ø´êÈÍÌä´Õ¤¡£âæÚÙä´Õ¤ÍÐǶÈôÓÏÆíÍÌåîô¤ä´Õ¤¡§ÍÐ + +c. ÍÔÆÂɳÖô¡£É³íס£ô²äÆ¡£È­Öô¡£Ù¸û­ÍÐçßßæá¸ïõá«âúÄæä´ÆÂ¡¤ + +11. ÑçÕøÛ¾à¡ + +Ù×ÍõÆÛ 11 å硾¡ÖÑçÕøÛ¾à¡¡×¡¿ÄæÆøÎû¡¢¡ÖILAN á£È¢Û¾à¡¡×ÏûÑÀ1) ÆÛÇÙÒüů IBM ÍÔßÈËòÈÔêØÆÛÇÙÒüÒÞùÃÄæÐÖÒüÔºÓÔÅ¯Ç¨ÍøÅÆÇµ¡§Å¯ 2) IBM ÝÔüÕݽ¾Èºá«Ý½î¯Æ«ËÄÍõ IBM Software Policy ê½×» (www.ibm.com/softwarepolicies)¡¿¡¢ÅýÑÄÈþÄâÓîÍõÈ´ùÃެǹ¡£ÄÍÕ©âØÓÓì¤Å¯ÜÃ÷ËÄæÔÏЬ¡¤ + +ÆÛÜÉ 11 åçÍÔݽÌùÄæûâɳåøÙ­¡¢ÍõǶÈôÆÛ¡Öá£È¢¡×ÚæûâßæâæÅ¯Ì§Ñ¥Ä¨È¡ÄùÈ´Õæ¡¤ + +11.1 ÑçÕøá£Ê© + +Ý·ÚæûâÄ©ÇÑãôêûÉ¢¡£ÏñÖçÅèĶÇÖâúæñÕèËäÙò̧ßÈËòÄèÆÛÄüƳůî¨ÕøÔÞ¡¨ÆßíýÄæÕóÓòØ´ò硣˷ÜÓÄÖ̦òÓÅøÅ¯Ì§ÅìÆÒÓÑË·ÜÓæñع¡¢ÅèÑçÕøÝ·ÚæûâÄ©ËðÆîġŢ¡Öá£È¢¡×ÕëÑÒÉÁò×Çö ILAN á£È¢Û¾à¡¡¾ÅýÑÄ IBM ÄæÚæûâůÓÓì¤Û¾à¡¡¿¡¤Ý·ÚæûâÄ©ÞóĶÇÄËçâúÓ×ÝÊ¡¨1) íýÏñÆÜç·Ì§ÚæûâËðÆîÄæî¯ÞØ¡§Å¯ 2) ò×Ú· ILAN á£È¢Û¾à¡¡¤ + +IBM ÚµÍõÇÙܡĿÝ×ϡѥ¡¢ÑçÕøÝ·ÚæûâÄ©ÍõġŢÇâöµÍÐô¿èºÙ×ÍõǶÈôÆøÎûËðÆîÌ¿ ILAN á£È¢Û¾à¡ÍíÊÖÄæ¡Öá£È¢¡×ÕëÑÒÉÁò×ß§ ILAN á£È¢Û¾à¡¡¤æÚâúÑçÕø¡¢ÙòÅèç¤ÄâÄÛöÆÝ·ÚæûâÄ©äÆÙ­ÄæÅÉÈ¢Ò³Äæ¡¢ËäÚµÍõÝ·ÚæûâĩĿÆßڦĸÖÝÕëâæÄù¡¢ÇãÝ·ÚæûâÄ©ÍÔÇãݨÍÔÒ³Äæ¡¤IBM ÚµîùÊåñÁÇ¡î¨ÕøÔÞ̶ɷâÐÈçæÚâúÑçÕø¡¢ÚÍ IBM óÜêØæÚî¨ÕøÔÞÓÔÇ¡ïËåµÄæÕóÓòÏñÙïÇÙÒü¡¤ + +11.2 ×ÌÎèæØÊî + +ÇñæÚâúÑçÕøÑÀÅøÝ·ÚæûâÄ©ËðÆîÆÛ¡Öá£È¢¡×ç·â½Ì§ÚæûâËðÆîî¯ÞØÍÐÆÜò×Çö ILAN á£È¢Û¾à¡Ï¯¡¢IBM ÙòÅèÕóÓòÝ×Ï¡Ý·ÚæûâÄ©¡¤Ý·ÚæûâÄ©ÇÑãôǡɻÅÅÅé IBM ÍõàõÜÁç¥ÍüĿĶÇÄâ¶Æî¡¨1) ç·â½ÚæûâËðÆîî¯ÞØÄæÇ¶ÈôËðÆîÈçÒ³ÄæóÜÅéâ¶Æî¡§2) ç·â½ÚæûâËðÆîî¯ÞØÄæËðÆîßæâæÍÔóÜÅÅÅéÄæá£È¢ÅÅßÎâ¶Æî¡¢ÚÍÞ²ØíÄâÚµâ¾ç´Ä¨È¡¡§Å¯ 3) ÇÞÑçÕøÍÔÓ³ÆíÄæÏáÅûâ¶Æîů̧ÅìïªóÁÝÊǶ¡¤ + +12. ÜÉĵĩÎÃãôËçâú + +ÆÛ¡Öá£È¢¡×Æ«×äÄùÉÖÜÉĵĩá£È¢î£¡¢æÚá£È¢î£ÏûÆñ IBM¡¾ÈÔÏæÜÉĵĩ¡¿ËíÆÛÇÙÒüßÈËòÚæûâÄèÝ·ÚæûâÄ©¡¤óôÏáÄæÜÉĵĩá£È¢î£ÎÃãôËçâú¡¾¡ÖÜÉĵĩÎÃãôËçâú¡×¡¿ã¯ËòÝ·ÚæûâĩٶÈÓÄæÆî¡¤æÚá«ÎÃãôËçâúÆ«ÍõÆÛ¡Öá£È¢¡×Äæ NOTICES óòÄãÊÆÌ¯¡¤È´ùÃÇñÈô̽ڵÑÜËèÜÉĵĩá£È¢î£Äææñع¡¢Æ«Íõ¡ÖÜÉĵĩÎÃãôËçâú¡×ÄãÊÆÌ¯¡¤Ó¼ IBM Íõ¡ÖÜÉĵĩÎÃãôËçâú¡×ÄãÑÀÅøÜÉĵĩá£È¢î£Ò³¡ÖƫԺÊÑÜÉĵĩá£È¢î£¡×¡¢Ð¬ IBM ÚæÄèÝ·ÚæûâĩĶÇÄûâɳ¡¨1) ÔºÊÑ¡ÖÆ«ÔºÊÑÜÉĵĩá£È¢î£¡×ů 2) è×ÎþÚÙÝÙá¸¡ÖÆ«ÔºÊÑÜÉĵĩá£È¢î£¡×Äæ¡Öá£È¢¡×í¼ÜÚâÐÈçõäÔÏÄÖᣡ¢ÚÍÝ·ÚæûâÄ©ã¯ÚµÙ×ÍõÞóæÚÜÉĵĩá£È¢î£ÍÔÒ³ÔºÊÑÄæØæòãÆøÎûÈÔÒ³Äæ¡¤IBM ÄæÎ¤Ù­êØÅÅßÎåøÙ­¡¢ã¯ïËÆîÍõÆÜÔºÊÑÄæ¡Öá£È¢¡×¡¤ + +13. Ä¡×ï۾ࡠ+ +a. ÇÙÒüÄâìàûÀǶÈôÄâÚµÅèÐÖÒüÓî̱ÍÐÍáÛ¹ÄæÎÎÌùÖ¼â¶Ï¯ûâÖô¡¤ + +b. Ó¼ IBM ÏûÅèÈ´üÕÎìÄæÊ°È¢ßÈËò¡Öá£È¢¡×ÄèÝ·ÚæûâÄ©¡¢IBM ÍõǨÅéæÚá«¡Öá£È¢¡×Äè IBM ÑÀÌùÄæçªòÓÄ©Õ롢ɻÉùÈ©Ì§ÅøÝÌůǨÅéÄæåøÙ­¡¢ÈþÝ·ÚæûâÄ©êØ IBM ƶȴÕóÓòÇÙãôϯ¡¢ÄâÇãȺÓ + +c. ÆÛÇÙÒüÄãȴǶÈôÛ¾à¡Ý·ÚäÌùÒ³ÆÂÕæÍÐÄâ×äÙÚÈçϯ¡¢ÆÛÇÙÒüÄæÌ§ïõÛ¾à¡Äó̦ÉùðìÄæÎÎÌùտİ¡¤ + +d. Ý·ÚæûâÄ©ÇÑãôò×ڷġŢâÐÅøÄÇÒÞùÃÎÎÅïݽÝý¡¢ÅýÑÄÓ¡ÙÏÞóÓ¼ÄÛÜÜê¦ËðÆîÈçÒ³ÍÐÓ¼ÄÛËðÆîϯÍÔÇ¡ÅøÄÇåÛçªêØÌ±áúÄæÎÎÅïݽÝýůåÛ̱Å + +e. Ý·ÚæûâÄ©ÇÑãôÚæûâ International Business Machines Corporation (IBM) ů̧ÄÍÄüƳ¡¾Å¯Ì§ú«Ì¿Ä©êØÌ¿üéÄ©¡£ÍÕÅýٸů IBM ËçäÆèÁÈò¡¿¡¢ÚµÍõ̧á«âÐÈçäÆÙ­ÄæÇ¶ÈôݨÍÔ¡¢ÙÚÈçÈ´ùÃܨÐÂůΤ٭äÆÙ­¡¢ÍÐÏòâÐ IBM êØÝ·ÚæûâĩĿäÆÙ­ùÃÏûÕë¡¢ÚµóÃÇôËäËðÆîÝ·ÚæûâĩĿäÆÙ­ôúá¾æñع¡¤ + +f. ǶġÅÉÍõÅäÚ¯ÅìÅÉÆÜËíÆÛÇÙÒüìÓÈç̧åøÙ­ÄæÐ©¡¢ÉáóÜá¿ÄèÅìÅÉÈ´ÇÙÜ¡æÐÆßÄæñ¢äÄ¡¤÷äÅÉóÜÆÛÍõæâÏêÔÏЬæØÊî÷äÅÉÄæâæÈ´ùÃÆÛÇÙÒüĿġŢ×ÌÎè¡£Îèï¢ÍÐÅäÚ¯¡¤ + +g. ØæÏæÎÎÑ£åÛÅÏÅèÇÙÒüÍóÛ¹ÍÐÓîÌ±Äæ¡¢ÉÁЬ¡¨(1) ǶġÅÉÉáÄâÚµÍõâ«ÝÄËçÆñàõÆíç·Ä¨È¡Ñ¥¡¢ÞóÆÛÇÙÒüÍÐËí̧ÍÔÒ³ÄæÇ¶ÈôÇ¨ÍøÍÔÆíÍÐÒÞùÃËçÆñÈÔßÈÅøÇ¶ÈôÊ°È¢ÄæÎÎÑ£â«ÝÄ¡§Åâ (2) ÍõæÚÕëÓîÑ¥¡¢ÞóÆÛÇÙÒüÍÐËí̧ÍÔÒ³ÄæÇ¶ÈôÇ¨ÍøÍÔÆíÍÐÒÞùÃËçÆñÈÔßÈÅøÄæÇ¶ÈôÎÎÑ£â«ÝÄůÅäÚ¯¡¢Ä¡Ñ£ÞÆÆÂ̧ÎÎÑ£ÕæÄ°¡¤ + +h. Ý·ÚæûâÄ©êØ IBM ÉáàÒëæè×ÄâÆ«Ê¾Ä°ÇÞ×ÃÝßÈ©Äæä´Õ¤Ó×ÝÊ¡¤ + +i. ÆÛÇÙÒüÄâҳǶÈôÜÉĵĩ޶ÝÃâ«ÝÄûâɳÍÐâ«ÝÄÔÏÇÞ¡¢ÈºÆÀ¡¢Ç¶ÈôÜÉĵĩÇ×Ý·ÚæûâÄ©ßÈÅøÄæ×ÄïªÓÑÊå¡¢IBM Ç©äÍÄâÓ×ÝÊ¡¢ÈþĸÇÄÜÉ 10.1 ÄÍå硾¡ÖIBM óÜÓ×ÝÊïªóÁÄæâúÆø¡×ƶȴݽÌù¡¢IBM ËíÎÎóÜè׿ÚÜÉĵĩÓ×ÝÊĿĩËÎã²Õ¤¡¾ÅýÑÄÈ»ÄÁ¡¿ÍÐÄâٯܨ¡£Ô¶Ä©È´Ê°æñ܍ĿäÚä´óÜÓ×ïªóÁÄæÝÊ¡¢ÄâÇãȺÓ + +j. ÓÔÇ¡ÆÛÇÙÒüÕë¡¢÷äÅÉåµËçÄ©ÄæÇ¶Ä¡ÅÉÉáÆÜËíòÊÆÛÇÙÒüÆÜç¥ÍüÄæÇ¶ÈôÝóÓÝ¡¢ÅýÑÄÈþÄâÓîÍõÞóÅèĶÇÖâúÍÔÒ³ÄæÇ¶ÈôÝóÓÝ¡¨1) ÆÛ¡Öá£È¢¡×ÄæÕæ×äÍÐÅü×ä¡§2) ÅìÅÉÄæåîüÓÍÐÐúú¾¡§ÍÐ 3) Ý·Úæûâĩƫ×äç®È©ÄæÕæÎªÍÐÒØïõ¡¤ + +k. IBM êØÑÜËèñ¢é¬¡¾ê¢Ò³¡ÖIBM ËçäÆèÁÈò¡×¡¿øÜå÷ÇÙÒü¡¢ÅèÚäìÝ¡£ïÚÙÇůÅÅßÎÑÜËè¡Öá£È¢¡×¡¤IBM ËçäÆèÁÈòêØ IBM ÏñѽñÁǡůšâäÄæùÃÏû¡¤IBM Þó IBM ËçäÆèÁÈòÄæÈçÒ³ÍÐôøÍü¡¢ÍÐ̧è×Ý·ÚæûâÄ©óÜéðÄæåøÙ­¡¢ÉáÄâÓ×ÝÊǶ¡¤ + +l. Ý·ÚæûâÄ©êØ IBM ÍÔǡ̧ÅìÇÙÒü¡¾Çñ¡ÖIBM ÐêÅÂÇÙÒü¡×¡¿ÄæÚæûâêØßáìäØÂܨïªóÁ۾ࡡ¢ÄâïËÆîÍõÆÛÇÙÒüï¬ÄèÄæá£È¢Úæû⡤ + +m. ÷äÅÉÇÑãô¡¢Ç¨ßÐĿġŢæñعÉáÒ³Ïæñ¢Ùïæñع¡¤ÇñǶġÅÉÓÑÊåǨßÐñ¢Ùïæñعϯ¡¢æÚâúǨßÐóÜËíøÜå÷ÄæÏñÙïÇÙÒüÒ³Äæ¡¤ + +14. ÇâÙÑî¯ÞØÅ¯äíðãÎÎ + +14.1 äíðãÎÎ + +ÇãÄâÛôÖÄÎÎÑ£îíÒóÔÏÐ¬ÄæÐ©ßÈĶ¡¢ â¸Ê¼÷äÅÉÇÑãôÅèÝ·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÚæûâåµÇâÄæÎÎÑ£Ò³äíðãÎΡ¢ðãÅèݽ£æØúËůÙÚÈçÆÛÇÙÒüÅä÷îÍÔÓÏÆíÍÐÒÞùÃÄæÝ·ÚæûâÄ©êØ IBM ÷äÅÉÄæÇÖɱûâɳ¡£÷ªÝÊůåøÙ­¡¤ + +ÆÛÇÙÒüÄâïËÆîôúÇÙÙÏÙÏëãÙ¸ÐÂâ¹ï±ÐÖÒüÄüÒüÄæÝ½Ìù¡¤ + +14.2 ê§õÝ + +ġŢûâɳ¡£÷ªÝÊůåøÙ­ÉáÌ¿Ý·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÚæûâåµÇâÄæÎÎÕ¼ê§õÝ¡¤ + +ÜÉĨÝåÅ¡ - ÇÖÙÏÙñȴ۾ࡠ+ +ÞóÅèĶÇÖÙÏÍÔÝ·ÚæÄèÄæ¡Öá£È¢¡×Úæû⡢ĶÇÄÛ¾à¡ÚµÌ½ÅîÍÐÔºÊÑÆÛÇÙÒüÜÉÄ¡ÝåÅ¡ÄãÄæÒÞùÃ۾ࡡ¤ÆÛÇÙÒüÜÉÄ¡ÝåÅ¡ÍÔÇÄÄæÇ¶Èô۾ࡡ¢ÇñÆÜåîȺݨԺÓÔϯ¡¢Ì§ÕæÄ°êÄѽÄâüÈ¡¤ÆÛÜÉĨÝåšĿÄùÕ©î¾ÚêÇñĶ¡¨ + +* Çéê¡ÙÏÕ¥è×ÇÙÒüÜÉÄ¡ÝåÅ¡ÜÉ 14 å硾¡ÖäíðãÎÎêØê§õݡס¿ÄæÔºÓÔ۾ࡡ§Å¯ + +* ËéÅ´ÇâÙ´ÙÏÕ¥è×ÇÙÒü̧ÅìÛ¾à¡ÄæÔºÓÔ۾ࡡ¤ + +Çéí°ÙÏÕ¥è×ÇÙÒüÜÉÄ¡ÝåÅ¡ÜÉ 14 å硾¡ÖäíðãÎÎêØê§õݡס¿ÄæÔºÓÔ۾ࡠ+ +14.1 äíðãÎÎ + +ÜÉ 14.1 åç¡ÖäíðãÎΡ×ÜÉÄ¡ÑôÄæ¡ÖÝ·Úæûâĩ̽ڵ¡Öá£È¢¡×ÚæûâåµÇâÄæÎÎÑ£¡×ÅÆÆ»¡¢ÍõĶÇÄÙÏÕ¥ÍÐÇâÙ´ÄãóÜÆñĶÇÄÅÆÆ»Ì½Å + +ËéÅ´ÇâÙ´ + +(1) ÇãÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´êØÄãÙÏñ®ÏÜÖÖɱÈçÑÉÙ´¡¨ÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´ (Hong Kong Special Administrative Region, "SAR") ÄæÎÎÑ£¡§Å¯ + +(2) Çãê×ý¤¡¨ê×ý¤ÄæÎÎÑ£¡¤ + +ËéÅ´ÙÏÕ¥ÔºÓÔ۾ࡠ+ +ÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´¡£ÄãÙÏñ®ÏÜÖÖɱÈçÑÉٴůê×ý¤ + +ÞóïËÆîÍõÇãê×ý¤Å¯ÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´¡£ÄãÙÏñ®ÏÜÖÖɱÈçÑÉÙ´Ì½ÚµÄæÚæûâ¡¢ÆÛÇÙÒüÄãÉÖÈ´¡ÖÙÏÕ¥ÍÐÇâÙ´¡×ÄæÇ󯻡¾ËóÇñ¡¨¡ÖÔÏÌîÝ·Úæûâĩݷï¬ÄèÚæûâÄæÙÏÕ¥ÍÐÇâÙ´¡×ů¡ÖÝ·Úæûâĩ̽ڵÆÛ¡Öá£È¢¡×ÚæûâÄæÙÏÕ¥ÍÐÇâÙ´¡×¡¿óÜÅèĶÇÄÇÖÇóÈù̽Å + +(1) ÇãÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´¡¨¡ÖÄãÙÏÓüà«ÖÖɱÈçÑÉÙ´¡× + +(2) ÇãÄãÙÏñ®ÏÜÖÖɱÈçÑÉÙ´¡¨¡ÖÄãÙÏñ®ÏÜÖÖɱÈçÑÉÙ´¡×¡¾ÈþÄâïËÆîÍõÜÉ 14.1 åç¡ÖäíðãÎΡ×۾ࡡ¿ + +(3) Çãê×ý¤¡¨¡Öê×ý¤¡×¡¤ + +ê×ý¤ + +10.1 IBM óÜÓ×ÝÊïªóÁÄæâúÆø + +É´ØæÄ¶ÇÄÅÆÆ»¡¨ + +ÆÛÓî̱ǩïËÆîÍõ IBM Äæ÷ËÅýٸůá£È¢âäàõÄ©ÔÞ¡¤ÈºâúÓî̱Ïû IBM ů IBM Äæ¡Öá£È¢¡×âäàõϯêØ÷ËÅýÙ¸ÄæÇÁÇÑïªóÁĸÓ + +Z125-5589-05 (07/2011) + + diff --git a/charts/mq-devserver/README.md b/charts/mq-devserver/README.md new file mode 100644 index 0000000..27b7e17 --- /dev/null +++ b/charts/mq-devserver/README.md @@ -0,0 +1,74 @@ +

+ +# IBM MQ + +IBM® MQ is messaging middleware that simplifies and accelerates the integration of diverse applications and business data across multiple platforms. It uses message queues to facilitate the exchanges of information and offers a single messaging solution for cloud, mobile, Internet of Things (IoT) and on-premises environments. + +# Introduction + +This chart deploys a single IBM MQ Advanced for Developers server (queue manager) into an IBM Cloud private or other Kubernetes environment. + +## Prerequisites + +- Kubernetes 1.5 or greater, with beta APIs enabled +- If persistence is enabled (see [configuration](#configuration)), then you either need to create a PersistentVolume, or specify a Storage Class if classes are defined in your cluster. + +## Installing the Chart + +To install the chart with the release name `foo`: + +```bash +helm install --name foo stable/mq-devserver --set license=accept +``` + +This command accepts the [IBM MQ Advanced for Developers license](LICENSE) and deploys an MQ Advanced for Developers server on the Kubernetes cluster. The [configuration](#configuration) section lists the parameters that can be configured during installation. + +> **Tip**: See all the resources deployed by the chart using `kubectl get all -l release=foo` + +## Verifying the Chart +See NOTES.txt associated with this chart for verification instructions + +## Uninstalling the Chart + +To uninstall/delete the `foo` release: + +```bash +helm delete foo +``` + +The command removes all the Kubernetes components associated with the chart, except any Persistent Volume Claims (PVCs). This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. In order to delete the Queue Manager's data, you can delete the PVC using the following command: + +```bash +kubectl delete pvc -l release=foo +``` + +## Configuration +The following table lists the configurable parameters of the `mq-advancedserver` chart and their default values. + +| Parameter | Description | Default | +| ---------------------------- | --------------------------------------------- | ---------------------------------------------------------- | +| `license` | Set to `accept` to accept the terms of the IBM license | `not accepted` | +| `image.name` | Image name | `ibmcom/mq` | +| `image.tag` | Image tag | `9` | +| `image.pullPolicy` | Image pull policy | `IfNotPresent` | +| `image.pullSecret` | Image pull secret, if you are using a private Docker registry | `nil` | +| `data.persistence.enabled` | Use a PersistentVolume to persist MQ data (under `/var/mqm`) | `true` | +| `data.persistence.storageClass` | Storage class of backing Persistent Volume | `nil` | +| `data.persistence.size` | Size of data volume | `2Gi` | +| `service.name` | Name of the Kubernetes service to create | `qmgr` | +| `service.type` | Kubernetes service type exposing ports, e.g. `NodePort` | `ClusterIP` | +| `queuemanager.name` | MQ Queue Manager name | Helm release name | + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Persistence + +The chart mounts a [Persistent Volume](http://kubernetes.io/docs/user-guide/persistent-volumes/). + +# Copyright + +© Copyright IBM Corporation 2017 \ No newline at end of file diff --git a/charts/mq-devserver/templates/NOTES.txt b/charts/mq-devserver/templates/NOTES.txt new file mode 100644 index 0000000..99b0fbf --- /dev/null +++ b/charts/mq-devserver/templates/NOTES.txt @@ -0,0 +1,3 @@ +MQ can be accessed via port 1414 on the following DNS name from within your cluster: +{{ template "fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local + diff --git a/charts/mq-devserver/templates/_helpers.tpl b/charts/mq-devserver/templates/_helpers.tpl new file mode 100644 index 0000000..fcbde7a --- /dev/null +++ b/charts/mq-devserver/templates/_helpers.tpl @@ -0,0 +1,29 @@ +# © Copyright IBM Corporation 2017 +# +# 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. +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 24 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 24 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 24 | trimSuffix "-" -}} +{{- end -}} diff --git a/charts/mq-devserver/templates/service.yaml b/charts/mq-devserver/templates/service.yaml new file mode 100644 index 0000000..243db5c --- /dev/null +++ b/charts/mq-devserver/templates/service.yaml @@ -0,0 +1,32 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "fullname" . }} + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + type: {{ .Values.service.type }} + ports: + - port: 1414 + name: {{ .Values.service.name }}-1 + # - port: 9443 + #name: {{ .Values.service.name }}-2 + selector: + app: {{ template "fullname" . }} diff --git a/charts/mq-devserver/templates/stateful-set.yaml b/charts/mq-devserver/templates/stateful-set.yaml new file mode 100644 index 0000000..0f19003 --- /dev/null +++ b/charts/mq-devserver/templates/stateful-set.yaml @@ -0,0 +1,81 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: {{ template "fullname" . }} + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + serviceName: {{ .Values.service.name }} + replicas: 1 + template: + metadata: + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + QM_IDENTIFIER: "{{ .Release.Name }}" + spec: + {{- if .Values.image.pullSecret }} + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + {{- end }} + containers: + - name: qmgr + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 1414 + #- containerPort: 9443 + env: + - name: LICENSE + value: {{ .Values.license }} + - name: MQ_QMGR_NAME + value: {{ .Values.queuemanager.name | default .Release.Name | replace "-" "" }} + - name: MQ_DISABLE_WEB_CONSOLE + value: "true" + {{- if .Values.data.persistence.enabled }} + volumeMounts: + - mountPath: "/mnt/mqm" + name: {{ template "fullname" . }}-{{ .Values.data.name }} + {{- end }} + resources: + limits: +{{ toYaml .Values.resources.limits | indent 14 }} + requests: +{{ toYaml .Values.resources.requests | indent 14 }} + volumeClaimTemplates: + {{- if .Values.data.persistence.enabled }} + - metadata: + name: {{ template "fullname" . }}-{{ .Values.data.name }} + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + spec: + {{- if .Values.data.persistence.storageClassName }} + storageClassName: {{ .Values.data.persistence.storageClassName | quote }} + {{- end }} + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: {{ .Values.data.persistence.size | quote }} + {{- end }} diff --git a/charts/mq-devserver/templates/test.yaml b/charts/mq-devserver/templates/test.yaml new file mode 100644 index 0000000..c1db25d --- /dev/null +++ b/charts/mq-devserver/templates/test.yaml @@ -0,0 +1,40 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +apiVersion: v1 +kind: Pod +metadata: + name: "{{.Release.Name}}-test" + labels: + app: {{ template "fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + annotations: + "helm.sh/hook": test-success +spec: + containers: + - name: {{.Release.Name}}-test + image: alpine:latest + env: + # Host name for the service running an MQ queue manager + - name: MQ_HOST + value: {{ template "fullname" . }} + # Time to try before giving up and failing the test (in seconds) + - name: TIMEOUT + value: "10" + command: ["sh"] + # Check that port 1414 is listening + args: ["-xc", "nc -v -z -w$(TIMEOUT) $(MQ_HOST) 1414"] + restartPolicy: Never diff --git a/charts/mq-devserver/values.yaml b/charts/mq-devserver/values.yaml new file mode 100644 index 0000000..ebedd34 --- /dev/null +++ b/charts/mq-devserver/values.yaml @@ -0,0 +1,49 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +# license must be set to "accept" to accept the terms of the IBM license +license: "not accepted" +image: + # repository is the container repository to use, which must contain IBM MQ Advanced + repository: ibmcom/mq + # tag is the tag to use for the container repository + tag: 9 + # pullSecret is the secret to use when pulling the image from a private registry + pullSecret: + # pullPolicy is either IfNotPresent or Always (https://kubernetes.io/docs/concepts/containers/images/) + pullPolicy: IfNotPresent +# data section specifies settings for the main persistent volume claim, which is used for data in /var/mqm +data: + # name sets part of the name for this persistent volume claim + name: "data" + persistence: + enabled: true + ## storageClassName is the name of the storage class to use, or an empty string for no storage class + storageClassName: "" + ## size is the minimum size of the persistent volume + size: 2Gi +service: + name: qmgr + type: ClusterIP +resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 500m + memory: 512Mi +queuemanager: + name: +# nameOverride can be set to partially override the name of the resources created by this chart +nameOverride: \ No newline at end of file diff --git a/cmd/chkmqhealthy/main.go b/cmd/chkmqhealthy/main.go new file mode 100644 index 0000000..9618730 --- /dev/null +++ b/cmd/chkmqhealthy/main.go @@ -0,0 +1,55 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ + +// chkmqhealthy checks that MQ is healthy, by checking the output of the "dspmq" command +package main + +import ( + "os" + "os/exec" + "strings" + + "github.ibm.com/mq-container/mq-container/pkg/name" +) + +func queueManagerHealthy() (bool, error) { + name, err := name.GetQueueManagerName() + if err != nil { + return false, err + } + // Specify the queue manager name, just in case someone's created a second queue manager + cmd := exec.Command("dspmq", "-n", "-m", name) + // Run the command and wait for completion + out, err := cmd.CombinedOutput() + if err != nil { + return false, err + } + if !strings.Contains(string(out), "(RUNNING)") { + return false, nil + } + return true, nil +} + +func main() { + healthy, err := queueManagerHealthy() + if err != nil { + os.Exit(2) + } + if !healthy { + os.Exit(1) + } + os.Exit(0) +} diff --git a/cmd/chkmqready/main.go b/cmd/chkmqready/main.go new file mode 100644 index 0000000..21da818 --- /dev/null +++ b/cmd/chkmqready/main.go @@ -0,0 +1,31 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ + +// chkmqready checks that MQ is ready for work, by checking if the MQ listener port is available +package main + +import ( + "net" + "os" +) + +func main() { + conn, err := net.Dial("tcp", "127.0.0.1:1414") + if err != nil { + os.Exit(1) + } + conn.Close() +} diff --git a/cmd/runmqserver/crtmqvol.go b/cmd/runmqserver/crtmqvol.go new file mode 100644 index 0000000..9d7bbd4 --- /dev/null +++ b/cmd/runmqserver/crtmqvol.go @@ -0,0 +1,87 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ +package main + +import ( + "log" + "os" + "path/filepath" + "runtime" + "syscall" +) + +//const mainDir string := "/mnt/mqm" +const mqmUID uint32 = 1000 +const mqmGID uint32 = 1000 + +func createVolume(path string) error { + // fi, err := os.Stat(path) + // if err != nil { + // if os.IsNotExist(err) { + // // TODO: Should this be fatal? + // //log.Warnf("No volume found under %v", path) + // return nil + // } else { + // return err + // } + // } + //log.Printf("%v details: %v", path, fi.Sys()) + dataPath := filepath.Join(path, "data") + fi, err := os.Stat(dataPath) + if err != nil { + if os.IsNotExist(err) { + err = os.MkdirAll(dataPath, 0755) + if err != nil { + return err + } + } else { + return err + } + } + fi, err = os.Stat(dataPath) + if err != nil { + return err + } + sys := fi.Sys() + if sys != nil && runtime.GOOS == "linux" { + // log.Printf("Checking UID/GID for %v", dataPath) + //log.Debugf("Checking UID/GID for %v", dataPath) + stat := sys.(*syscall.Stat_t) + if stat.Uid != mqmUID || stat.Gid != mqmGID { + err = os.Chown(dataPath, int(mqmUID), int(mqmGID)) + if err != nil { + log.Printf("Error: Unable to change ownership of %v", dataPath) + return err + } + } + } + return nil +} + +// If /mnt/mqm exists +// If /mnt/mqm contains a "data" directory AND data is owned by mqm:mqm AND data is writeable by mqm:mqm then +// Create Symlink from /var/mqm to /mnt/mqm/data +// Else +// // Try to sort it out +// Create directory /mnt/mqm/data +// If directory not already owned by mqm:mqm +// chown mqm:mqm +// if error +// delete directory again if empty +// if directory not already 0755 +// chmod 0755 +// if error +// delete directory again if empty diff --git a/cmd/runmqserver/main.go b/cmd/runmqserver/main.go new file mode 100644 index 0000000..1f3d8ea --- /dev/null +++ b/cmd/runmqserver/main.go @@ -0,0 +1,331 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ + +// runmqserver initializes, creates and starts a queue manager, as PID 1 in a container +package main + +import ( + "fmt" + "io/ioutil" + "log" + "os" + "os/exec" + "os/signal" + "path/filepath" + "regexp" + "runtime" + "strings" + "syscall" + + "github.com/hpcloud/tail" + "golang.org/x/sys/unix" +) + +// resolveLicenseFile returns the file name of the MQ license file, taking into +// account the language set by the LANG environment variable +func resolveLicenseFile() string { + lang, ok := os.LookupEnv("LANG") + if !ok { + return "English.txt" + } + switch { + case strings.HasPrefix(lang, "zh_TW"): + return "Chinese_TW.txt" + case strings.HasPrefix(lang, "zh"): + return "Chinese.txt" + case strings.HasPrefix(lang, "cs"): + return "Czech.txt" + case strings.HasPrefix(lang, "fr"): + return "French.txt" + case strings.HasPrefix(lang, "de"): + return "German.txt" + case strings.HasPrefix(lang, "el"): + return "Greek.txt" + case strings.HasPrefix(lang, "id"): + return "Indonesian.txt" + case strings.HasPrefix(lang, "it"): + return "Italian.txt" + case strings.HasPrefix(lang, "ja"): + return "Japanese.txt" + case strings.HasPrefix(lang, "ko"): + return "Korean.txt" + case strings.HasPrefix(lang, "lt"): + return "Lithuanian.txt" + case strings.HasPrefix(lang, "pl"): + return "Polish.txt" + case strings.HasPrefix(lang, "pt"): + return "Portugese.txt" + case strings.HasPrefix(lang, "ru"): + return "Russian.txt" + case strings.HasPrefix(lang, "sl"): + return "Slovenian.txt" + case strings.HasPrefix(lang, "es"): + return "Spanish.txt" + case strings.HasPrefix(lang, "tr"): + return "Turkish.txt" + } + return "English.txt" +} + +func checkLicense() { + lic, ok := os.LookupEnv("LICENSE") + switch { + case ok && lic == "accept": + return + case ok && lic == "view": + file := filepath.Join("/opt/mqm/licenses", resolveLicenseFile()) + buf, err := ioutil.ReadFile(file) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + fmt.Println(string(buf)) + os.Exit(1) + } + fmt.Println("Error: Set environment variable LICENSE=accept to indicate acceptance of license terms and conditions.") + fmt.Println("License agreements and information can be viewed by setting the environment variable LICENSE=view. You can also set the LANG environment variable to view the license in a different language.") + os.Exit(1) +} + +// sanitizeQueueManagerName removes any invalid characters from a queue manager name +func sanitizeQueueManagerName(name string) string { + var re = regexp.MustCompile("[^a-zA-Z0-9._%/]") + return re.ReplaceAllString(name, "") +} + +// GetQueueManagerName resolves the queue manager name to use. Resolved from +// either an environment variable, or the hostname. +func getQueueManagerName() (string, error) { + var name string + var err error + name, ok := os.LookupEnv("MQ_QMGR_NAME") + if !ok || name == "" { + name, err = os.Hostname() + if err != nil { + return "", err + } + name = sanitizeQueueManagerName(name) + } + // TODO: What if the specified env variable is an invalid name? + return name, nil +} + +// runCommand runs an OS command. On Linux it waits for the command to +// complete and returns the exit status (return code). +func runCommand(name string, arg ...string) (string, int, error) { + // log.Debugf("Running command %v %v", name, arg) + cmd := exec.Command(name, arg...) + // Run the command and wait for completion + out, err := cmd.CombinedOutput() + if err != nil { + var rc int + // Only works on Linux + if runtime.GOOS == "linux" { + // func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) + var ws unix.WaitStatus + //var rusage syscall.Rusage + unix.Wait4(cmd.Process.Pid, &ws, 0, nil) + //ee := err.(*os.SyscallError) + //ws := ee.Sys().(syscall.WaitStatus) + rc = ws.ExitStatus() + } else { + rc = -1 + } + if rc == 0 { + return string(out), rc, nil + } + return string(out), rc, err + } + return string(out), 0, nil +} + +// createDirStructure creates the default MQ directory structure under /var/mqm +func createDirStructure() { + out, _, err := runCommand("/opt/mqm/bin/crtmqdir", "-f", "-s") + if err != nil { + log.Fatalf("Error creating directory structure: %v\n", string(out)) + } + log.Println("Created directory structure under /var/mqm") +} + +func createQueueManager(name string) { + log.Printf("Creating queue manager %v", name) + out, rc, err := runCommand("crtmqm", "-q", "-p", "1414", name) + if err != nil { + // 8=Queue manager exists, which is fine + if rc != 8 { + log.Printf("crtmqm returned %v", rc) + log.Fatalln(string(out)) + } else { + log.Printf("Detected existing queue manager %v", name) + return + } + } +} + +func updateCommandLevel() { + level, ok := os.LookupEnv("MQ_CMDLEVEL") + if ok && level != "" { + out, rc, err := runCommand("strmqm", "-e", "CMDLEVEL="+level) + if err != nil { + log.Fatalf("Error %v setting CMDLEVEL: %v", rc, string(out)) + } + } +} + +func startQueueManager() { + out, rc, err := runCommand("strmqm") + if err != nil { + log.Fatalf("Error %v starting queue manager: %v", rc, string(out)) + } +} + +func configureQueueManager() { + const configDir string = "/etc/mqm" + files, err := ioutil.ReadDir(configDir) + if err != nil { + log.Fatal(err) + } + + for _, file := range files { + if strings.HasSuffix(file.Name(), ".mqsc") { + abs := filepath.Join(configDir, file.Name()) + mqsc, err := ioutil.ReadFile(abs) + if err != nil { + log.Fatal(err) + } + cmd := exec.Command("runmqsc") + stdin, err := cmd.StdinPipe() + if err != nil { + log.Fatal(err) + } + stdin.Write(mqsc) + stdin.Close() + // Run the command and wait for completion + out, err := cmd.CombinedOutput() + if err != nil { + log.Println(err) + } + // Print the runmqsc output, adding tab characters to make it more readable as part of the log + log.Printf("Output for \"runmqsc\" with %v:\n\t%v", abs, strings.Replace(string(out), "\n", "\n\t", -1)) + } + } +} + +func stopQueueManager() { + log.Println("Stopping queue manager") + out, _, err := runCommand("endmqm", "-w") + if err != nil { + log.Fatalf("Error stopping queue manager: %v", string(out)) + } + log.Println("Stopped queue manager") +} + +// createTerminateChannel creates a channel which will be closed when SIGTERM +// is received. +func createTerminateChannel() chan struct{} { + done := make(chan struct{}) + // Handle SIGTERM + c := make(chan os.Signal, 1) + signal.Notify(c, syscall.SIGTERM, syscall.SIGINT) + go func() { + sig := <-c + log.Printf("Signal received: %v", sig) + stopQueueManager() + close(done) + }() + return done +} + +// createReaperChannel creates a channel which will be used to reap zombie +// (defunct) processes. This is a responsibility of processes running +// as PID 1. +func createReaper() { + // Handle SIGCHLD + c := make(chan os.Signal, 3) + signal.Notify(c, syscall.SIGCHLD) + go func() { + for { + <-c + for { + var ws unix.WaitStatus + _, err := unix.Wait4(-1, &ws, 0, nil) + // If err indicates "no child processes" left to reap, then + // wait for next SIGCHLD signal + if err == unix.ECHILD { + break + } + } + } + }() +} + +// mirrorLog tails the specified file, and logs each line. +// This is useful for usability, as the container console log can show +// messages from the MQ log. +func mirrorLog(path string) error { + tail, err := tail.TailFile(path, tail.Config{ + ReOpen: true, + Follow: true, + Poll: true, + Location: &tail.SeekInfo{ + Offset: 0, + // End of file + Whence: 2, + }, + Logger: tail.DiscardingLogger, + }) + if err != nil { + return err + } + go func() { + for line := range tail.Lines { + // TODO: Unless we parse the message, the timestamp will be (slightly) wrong + if strings.HasPrefix(line.Text, "AMQ") { + // TODO: Extended characters don't print correctly + log.Println(line.Text) + } + } + }() + return nil +} + +func main() { + createReaper() + checkLicense() + + // Start SIGTERM handler channel + done := createTerminateChannel() + + name, err := getQueueManagerName() + if err != nil { + log.Fatalln(err) + } + log.Printf("Using queue manager name: %v", name) + logConfig() + err = createVolume("/mnt/mqm") + if err != nil { + log.Fatal(err) + } + createDirStructure() + mirrorLog("/var/mqm/qmgrs/" + name + "/errors/AMQERR01.LOG") + createQueueManager(name) + updateCommandLevel() + startQueueManager() + configureQueueManager() + // Wait for terminate signal + <-done +} diff --git a/cmd/runmqserver/main_test.go b/cmd/runmqserver/main_test.go new file mode 100644 index 0000000..a60a5e2 --- /dev/null +++ b/cmd/runmqserver/main_test.go @@ -0,0 +1,34 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ +package main + +import ( + "flag" + "testing" +) + +var test *bool + +func init() { + test = flag.Bool("test", false, "Set to true when running tests for coverage") +} + +// Test started when the test binary is started. Only calls main. +func TestSystem(t *testing.T) { + if *test { + main() + } +} diff --git a/cmd/runmqserver/mqconfig.go b/cmd/runmqserver/mqconfig.go new file mode 100644 index 0000000..a60f8df --- /dev/null +++ b/cmd/runmqserver/mqconfig.go @@ -0,0 +1,135 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ +package main + +import ( + "io/ioutil" + "log" + "runtime" + "strings" + + "golang.org/x/sys/unix" +) + +// fsTypes contains file system identifier codes. +// This code will not compile on some operating systems - Linux only. +var fsTypes = map[int64]string{ + 0x61756673: "aufs", + 0xef53: "ext", + 0x6969: "nfs", + 0x65735546: "fuse", + 0x9123683e: "btrfs", + 0x01021994: "tmpfs", + 0x794c7630: "overlayfs", +} + +func logBaseImage() error { + buf, err := ioutil.ReadFile("/etc/os-release") + if err != nil { + return err + } + lines := strings.Split(string(buf), "\n") + for _, l := range lines { + if strings.HasPrefix(l, "PRETTY_NAME=") { + words := strings.Split(l, "\"") + if len(words) >= 2 { + log.Printf("Base image detected: %v", words[1]) + return nil + } + } + } + return nil +} + +func readProc(filename string) (value string, err error) { + buf, err := ioutil.ReadFile(filename) + if err != nil { + return "", err + } + return strings.TrimSpace(string(buf)), nil +} + +func readMounts() error { + all, err := readProc("/proc/mounts") + if err != nil { + log.Println("Error: Couldn't read /proc/mounts") + return err + } + lines := strings.Split(all, "\n") + detected := false + for i := range lines { + parts := strings.Split(lines[i], " ") + //dev := parts[0] + mountPoint := parts[1] + fsType := parts[2] + if strings.Contains(mountPoint, "/mnt") { + log.Printf("Detected '%v' volume mounted to %v", fsType, mountPoint) + detected = true + } + } + if !detected { + log.Println("No volume detected. Persistent messages may be lost") + } else { + checkFS("/mnt/mqm") + } + return nil +} + +func checkFS(path string) { + statfs := &unix.Statfs_t{} + err := unix.Statfs(path, statfs) + if err != nil { + log.Println(err) + return + } + t := fsTypes[statfs.Type] + switch t { + case "aufs", "overlayfs", "tmpfs": + log.Fatalf("Error: %v uses unsupported filesystem type %v", path, t) + default: + log.Printf("Detected %v has filesystem type '%v'", path, t) + } +} + +func logConfig() { + log.Printf("CPU architecture: %v", runtime.GOARCH) + // TODO: You can't use os.user if you're cross-compiling + // u, err := user.Current() + // if err != nil { + // log.Println(err) + // } else { + // log.Printf("Running as user ID %v (%v) with primary group %v", u.Uid, u.Name, u.Gid) + // } + if runtime.GOOS == "linux" { + var err error + osr, err := readProc("/proc/sys/kernel/osrelease") + if err != nil { + log.Println(err) + } else { + log.Printf("Linux kernel version: %v", osr) + } + logBaseImage() + fileMax, err := readProc("/proc/sys/fs/file-max") + if err != nil { + log.Println(err) + } else { + log.Printf("Maximum file handles: %v", fileMax) + } + readMounts() + } else { + log.Fatalf("Unsupported platform: %v", runtime.GOOS) + } +} diff --git a/glide.lock b/glide.lock new file mode 100644 index 0000000..a4e6e84 --- /dev/null +++ b/glide.lock @@ -0,0 +1,25 @@ +hash: 4477c22cda4f16526d6ed5c2b266ac7ebe011ba5c8b5b11ed7a8fbdb0e75f646 +updated: 2017-09-05T10:58:44.061914234+01:00 +imports: +- name: github.com/hpcloud/tail + version: a30252cb686a21eb2d0b98132633053ec2f7f1e5 + subpackages: + - ratelimiter + - util + - watch + - winfile +- name: github.com/sirupsen/logrus + version: f006c2ac4710855cf0f916dd6b77acf6b048dc6e +- name: golang.org/x/crypto + version: d172538b2cfce0c13cee31e647d0367aa8cd2486 + subpackages: + - ssh/terminal +- name: golang.org/x/sys + version: 7a4fde3fda8ef580a89dbae8138c26041be14299 + subpackages: + - unix +- name: gopkg.in/fsnotify.v1 + version: 7be54206639f256967dd82fa767397ba5f8f48f5 +- name: gopkg.in/tomb.v1 + version: c131134a1947e9afd9cecfe11f4c6dff0732ae58 +testImports: [] diff --git a/glide.yaml b/glide.yaml new file mode 100644 index 0000000..c91e1d2 --- /dev/null +++ b/glide.yaml @@ -0,0 +1,27 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +package: github.com/ibm-messaging/mq-container +license: Apache-2.0 +excludeDirs: +- build +- coverage +- test +import: +- package: github.com/hpcloud/tail + version: v1.0.0 +- package: golang.org/x/sys/unix +- package: github.com/sirupsen/logrus + version: v1.0.3 +- package: golang.org/x/crypto/ssh/terminal diff --git a/incubating/Dockerfile-sfbridge b/incubating/Dockerfile-sfbridge new file mode 100644 index 0000000..134cc4f --- /dev/null +++ b/incubating/Dockerfile-sfbridge @@ -0,0 +1,30 @@ +# © Copyright IBM Corporation 2015, 2017 +# +# 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. + +FROM ubuntu:16.04 + +# The URL to download the MQ installer from in tar.gz format +ARG MQ_URL=https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev903_ubuntu_x86-64.tar.gz + +# The MQ packages to install +ARG MQ_PACKAGES="ibmmq-sfbridge" + +ADD install-mq.sh /usr/local/bin/ +RUN chmod u+x /usr/local/bin/install-mq.sh \ + && install-mq.sh + +ENV LANG=en_US.UTF-8 + +# TODO: Create configuration file from environment variables? +# TODO: Add entrypoint to run the bridge diff --git a/incubating/mq-explorer/Dockerfile-mq-explorer b/incubating/mq-explorer/Dockerfile-mq-explorer new file mode 100644 index 0000000..82e0160 --- /dev/null +++ b/incubating/mq-explorer/Dockerfile-mq-explorer @@ -0,0 +1,38 @@ +# © Copyright IBM Corporation 2015, 2017 +# +# 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. + +FROM ubuntu:16.04 + +# The URL to download the MQ installer from in tar.gz format +ARG MQ_URL=https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev903_ubuntu_x86-64.tar.gz + +# The MQ packages to install +ARG MQ_PACKAGES="ibmmq-explorer" + +RUN export DEBIAN_FRONTEND=noninteractive \ + && apt-get update \ + && apt-get install -y \ + libgtk2.0-0 \ + libxtst6 + +ADD install-mq.sh /usr/local/bin/ +RUN chmod u+x /usr/local/bin/install-mq.sh \ + && install-mq.sh + +ENV LANG=en_US.UTF-8 + +# Run as mqm (1000) +USER 1000 + +ENTRYPOINT ["MQExplorer"] \ No newline at end of file diff --git a/incubating/mq-explorer/README.md b/incubating/mq-explorer/README.md new file mode 100644 index 0000000..42f2b34 --- /dev/null +++ b/incubating/mq-explorer/README.md @@ -0,0 +1,14 @@ + +Docker for Mac +-------------- + +1. Install XQuartz. Version 2.7.10 works, but V2.7.11 doesn't seem to. +2. Run XQuartz +3. Open the XQuartz "Preferences" menu, go to the "Security" tab and enable "Allow connections from network clients" +4. Add your IP address to the list of allowed hosts: `xhost + $(ipconfig getifaddr en0)` +5. Run MQ Explorer: `docker run -e DISPLAY=$(ipconfig getifaddr en0):0 -v /tmp/.X11-unix:/tmp/.X11-unix -u 0 -ti mq-explorer` + +https://stackoverflow.com/questions/38686932/how-to-forward-docker-for-mac-to-x11 + +docker run -e DISPLAY=docker.for.mac.localhost:0 -v /tmp/.X11-unix:/tmp/.X11-unix -u 0 -ti mq-explorer +Use DISPLAY=docker.for.mac.localhost:0 ??? diff --git a/install-mq.sh b/install-mq.sh new file mode 100644 index 0000000..a12a1a0 --- /dev/null +++ b/install-mq.sh @@ -0,0 +1,104 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2015, 2017 +# +# +# 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. + +# Fail on any non-zero return code +set -ex + +export DEBIAN_FRONTEND=noninteractive + +# Install additional packages required by MQ, this install process and the runtime scripts +apt-get update +apt-get install -y --no-install-recommends \ + bash \ + bc \ + ca-certificates \ + coreutils \ + curl \ + debianutils \ + file \ + findutils \ + gawk \ + grep \ + libc-bin \ + lsb-release \ + mount \ + passwd \ + procps \ + sed \ + tar \ + util-linux + +# Download and extract the MQ installation files +mkdir -p /tmp/mq +cd /tmp/mq +curl -LO $MQ_URL +tar -zxvf ./*.tar.gz + +# Recommended: Create the mqm user ID with a fixed UID and group, so that the file permissions work between different images +groupadd --gid 1000 mqm +useradd --uid 1000 --gid mqm mqm +usermod -G mqm root +cd /tmp/mq/DebianMQServer + +# Accept the MQ license +./mqlicense.sh -text_only -accept +echo "deb [trusted=yes] file:/tmp/mq/DebianMQServer ./" > /etc/apt/sources.list.d/IBM_MQ.list + +# Install MQ using the DEB packages +apt-get update +apt-get install -y $MQ_PACKAGES + +# Remove 32-bit libraries from 64-bit container +find /opt/mqm /var/mqm -type f -exec file {} \; | awk -F: '/ELF 32-bit/{print $1}' | xargs --no-run-if-empty rm -f + +# Remove tar.gz files unpacked by RPM postinst scripts +find /opt/mqm -name '*.tar.gz' -delete + +# Recommended: Set the default MQ installation (makes the MQ commands available on the PATH) +/opt/mqm/bin/setmqinst -p /opt/mqm -i + +# Clean up all the downloaded files +rm -f /etc/apt/sources.list.d/IBM_MQ.list +rm -rf /tmp/mq + +# Apply any bug fixes not included in base Ubuntu or MQ image. +# Don't upgrade everything based on Docker best practices https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#run +apt-get upgrade -y libkrb5-26-heimdal +apt-get upgrade -y libexpat1 + +# End of bug fixes +rm -rf /var/lib/apt/lists/* + +# Optional: Update the command prompt with the MQ version +echo "mq:$(dspmqver -b -f 2)" > /etc/debian_chroot + +# Remove the directory structure under /var/mqm which was created by the installer +rm -rf /var/mqm + +# Create the mount point for volumes +mkdir -p /mnt/mqm + +# Create the directory for MQ configuration files +mkdir -p /etc/mqm + +# Create a symlink for /var/mqm -> /mnt/mqm/data +ln -s /mnt/mqm/data /var/mqm + +# Optional: Set these values for the Bluemix Vulnerability Report +sed -i 's/PASS_MAX_DAYS\t99999/PASS_MAX_DAYS\t90/' /etc/login.defs +sed -i 's/PASS_MIN_DAYS\t0/PASS_MIN_DAYS\t1/' /etc/login.defs +sed -i 's/password\t\[success=1 default=ignore\]\tpam_unix\.so obscure sha512/password\t[success=1 default=ignore]\tpam_unix.so obscure sha512 minlen=8/' /etc/pam.d/common-password diff --git a/pkg/name/name.go b/pkg/name/name.go new file mode 100644 index 0000000..449f905 --- /dev/null +++ b/pkg/name/name.go @@ -0,0 +1,48 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ + +// Package name contains code to manage the queue manager name +package name + +import ( + "os" + "regexp" + //log "github.com/sirupsen/logrus" +) + +// sanitizeQueueManagerName removes any invalid characters from a queue manager name +// TODO: This is duplicate code +func sanitizeQueueManagerName(name string) string { + var re = regexp.MustCompile("[^a-zA-Z0-9._%/]") + return re.ReplaceAllString(name, "") +} + +// GetQueueManagerName resolves the queue manager name to use. Resolved from +// either an environment variable, or the hostname. +func GetQueueManagerName() (string, error) { + var name string + var err error + name, ok := os.LookupEnv("MQ_QMGR_NAME") + if !ok || name == "" { + name, err = os.Hostname() + if err != nil { + return "", err + } + name = sanitizeQueueManagerName(name) + } + // TODO: What if the specified env variable is an invalid name? + return name, nil +} diff --git a/pkg/name/name_test.go b/pkg/name/name_test.go new file mode 100644 index 0000000..c69cac0 --- /dev/null +++ b/pkg/name/name_test.go @@ -0,0 +1,56 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ +package name + +import ( + "os" + "testing" +) + +var sanitizeTests = []struct { + in string + out string +}{ + {"foo", "foo"}, + {"foo-0", "foo0"}, + {"foo-", "foo"}, + {"-foo", "foo"}, + {"foo_0", "foo_0"}, +} + +func TestSanitizeQueueManagerName(t *testing.T) { + for _, table := range sanitizeTests { + s := sanitizeQueueManagerName(table.in) + if s != table.out { + t.Errorf("sanitizeQueueManagerName(%v) - expected %v, got %v", table.in, table.out, s) + } + } +} + +func TestGetQueueManagerNameFromEnv(t *testing.T) { + const data string = "foo" + err := os.Setenv("MQ_QMGR_NAME", data) + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + n, err := GetQueueManagerName() + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + if n != data { + t.Errorf("Expected name=%v, got name=%v", data, n) + } +} diff --git a/test-image/20-config.mqsc b/test-image/20-config.mqsc new file mode 100644 index 0000000..11f88a3 --- /dev/null +++ b/test-image/20-config.mqsc @@ -0,0 +1,19 @@ +* © Copyright IBM Corporation 2017 +* +* 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. + +DEFINE CHANNEL(PASSWORD.SVRCONN) CHLTYPE(SVRCONN) REPLACE +SET CHLAUTH(PASSWORD.SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody') DESCR('Allow privileged users on this channel') +SET CHLAUTH('*') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(NOACCESS) DESCR('BackStop rule') +SET CHLAUTH(PASSWORD.SVRCONN) TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) CHCKCLNT(REQUIRED) +ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) ADOPTCTX(YES) diff --git a/test-image/30-security.mqsc b/test-image/30-security.mqsc new file mode 100644 index 0000000..1cf5a67 --- /dev/null +++ b/test-image/30-security.mqsc @@ -0,0 +1,15 @@ +* © Copyright IBM Corporation 2017 +* +* 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. + +REFRESH SECURITY TYPE(CONNAUTH) diff --git a/test-image/Dockerfile b/test-image/Dockerfile new file mode 100644 index 0000000..62f1fb5 --- /dev/null +++ b/test-image/Dockerfile @@ -0,0 +1,18 @@ +# © Copyright IBM Corporation 2015, 2017 +# +# 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. + +FROM mqadvanced +RUN useradd alice -G mqm && \ + echo alice:passw0rd | chpasswd +COPY *.mqsc /etc/mqm/ diff --git a/test/docker/Gopkg.lock b/test/docker/Gopkg.lock new file mode 100644 index 0000000..6b9fb90 --- /dev/null +++ b/test/docker/Gopkg.lock @@ -0,0 +1,57 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/Microsoft/go-winio" + packages = ["."] + revision = "78439966b38d69bf38227fbf57ac8a6fee70f69a" + version = "v0.4.5" + +[[projects]] + name = "github.com/docker/distribution" + packages = ["digest","reference"] + revision = "48294d928ced5dd9b378f7fd7c6f5da3ff3f2c89" + version = "v2.6.2" + +[[projects]] + name = "github.com/docker/docker" + packages = ["api/types","api/types/blkiodev","api/types/container","api/types/events","api/types/filters","api/types/mount","api/types/network","api/types/reference","api/types/registry","api/types/strslice","api/types/swarm","api/types/time","api/types/versions","api/types/volume","client","pkg/tlsconfig"] + revision = "092cba3727bb9b4a2f0e922cd6c0f93ea270e363" + version = "v1.13.1" + +[[projects]] + name = "github.com/docker/go-connections" + packages = ["nat","sockets","tlsconfig"] + revision = "3ede32e2033de7505e6500d6c868c2b9ed9f169d" + version = "v0.3.0" + +[[projects]] + name = "github.com/docker/go-units" + packages = ["."] + revision = "0dadbb0345b35ec7ef35e228dabb8de89a65bf52" + version = "v0.3.2" + +[[projects]] + name = "github.com/pkg/errors" + packages = ["."] + revision = "645ef00459ed84a119197bfb8d8205042c6df63d" + version = "v0.8.0" + +[[projects]] + branch = "master" + name = "golang.org/x/net" + packages = ["context","context/ctxhttp","proxy"] + revision = "66aacef3dd8a676686c7ae3716979581e8b03c47" + +[[projects]] + branch = "master" + name = "golang.org/x/sys" + packages = ["windows"] + revision = "9aade4d3a3b7e6d876cd3823ad20ec45fc035402" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "bf6ada0adb63f691f18ca1b3b95f55be8ec360be22928ca9e63ba47846c5687d" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/test/docker/Gopkg.toml b/test/docker/Gopkg.toml new file mode 100644 index 0000000..2af502b --- /dev/null +++ b/test/docker/Gopkg.toml @@ -0,0 +1,20 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +[[constraint]] + name = "github.com/docker/docker" + version = "^1.12" + +[[constraint]] + name = "github.com/docker/go-connections" \ No newline at end of file diff --git a/test/docker/docker_api_test.go b/test/docker/docker_api_test.go new file mode 100644 index 0000000..eb0614d --- /dev/null +++ b/test/docker/docker_api_test.go @@ -0,0 +1,178 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ +package main + +import ( + "context" + "strings" + "testing" + + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" + "github.com/docker/docker/client" + "github.com/docker/go-connections/nat" +) + +const image string = "mq-advancedserver:latest-x86_64" + +func TestLicenseNotSet(t *testing.T) { + cli, err := client.NewEnvClient() + if err != nil { + t.Fatal(err) + } + containerConfig := container.Config{ + Image: image, + } + id := runContainer(t, cli, &containerConfig) + defer cleanContainer(t, cli, id) + rc := waitForContainer(t, cli, id, 5) + if rc != 1 { + t.Errorf("Expected rc=1, got rc=%v", rc) + } +} + +func TestLicenseView(t *testing.T) { + cli, err := client.NewEnvClient() + if err != nil { + t.Fatal(err) + } + containerConfig := container.Config{ + Image: image, + Env: []string{"LICENSE=view"}, + } + id := runContainer(t, cli, &containerConfig) + defer cleanContainer(t, cli, id) + rc := waitForContainer(t, cli, id, 5) + if rc != 1 { + t.Errorf("Expected rc=1, got rc=%v", rc) + } + l := inspectLogs(t, cli, id) + const s string = "terms" + if !strings.Contains(l, s) { + t.Errorf("Expected license string to contain \"%v\", got %v", s, l) + } +} + +func TestGoldenPath(t *testing.T) { + cli, err := client.NewEnvClient() + if err != nil { + t.Fatal(err) + } + containerConfig := container.Config{ + Image: image, + Env: []string{"LICENSE=accept", "MQ_QMGR_NAME=qm1"}, + //ExposedPorts: ports, + ExposedPorts: nat.PortSet{ + "1414/tcp": struct{}{}, + }, + } + id := runContainer(t, cli, &containerConfig) + defer cleanContainer(t, cli, id) + waitForReady(t, cli, id) +} + +func utilTestNoQueueManagerName(t *testing.T, hostName string, expectedName string) { + search := "QMNAME(" + expectedName + ")" + cli, err := client.NewEnvClient() + if err != nil { + t.Fatal(err) + } + containerConfig := container.Config{ + Image: image, + Env: []string{"LICENSE=accept"}, + Hostname: hostName, + ExposedPorts: nat.PortSet{ + "1414/tcp": struct{}{}, + }, + } + id := runContainer(t, cli, &containerConfig) + defer cleanContainer(t, cli, id) + waitForReady(t, cli, id) + _, out := execContainer(t, cli, id, []string{"dspmq"}) + if !strings.Contains(out, search) { + t.Errorf("Expected result of running dspmq to contain name=%v, got name=%v", search, out) + } +} +func TestNoQueueManagerName(t *testing.T) { + utilTestNoQueueManagerName(t, "test", "test") +} + +func TestNoQueueManagerNameInvalidHostname(t *testing.T) { + utilTestNoQueueManagerName(t, "test-1", "test1") +} + +// TestWithVolume runs a container with a Docker volume, then removes that +// container and starts a new one with same volume. +func TestWithVolume(t *testing.T) { + cli, err := client.NewEnvClient() + if err != nil { + t.Fatal(err) + } + vol := createVolume(t, cli) + defer removeVolume(t, cli, vol.Name) + containerConfig := container.Config{ + Image: image, + Env: []string{"LICENSE=accept", "MQ_QMGR_NAME=qm1"}, + } + hostConfig := container.HostConfig{ + Binds: []string{ + coverageBind(t), + //"coverage:/var/coverage", + vol.Name + ":/mnt/mqm", + }, + } + networkingConfig := network.NetworkingConfig{} + ctr, err := cli.ContainerCreate(context.Background(), &containerConfig, &hostConfig, &networkingConfig, t.Name()) + if err != nil { + t.Fatal(err) + } + startContainer(t, cli, ctr.ID) + // TODO: If this test gets an error waiting for readiness, the first container might not get cleaned up + waitForReady(t, cli, ctr.ID) + + // Delete the first container + cleanContainer(t, cli, ctr.ID) + + // Start a new container with the same volume + ctr2, err := cli.ContainerCreate(context.Background(), &containerConfig, &hostConfig, &networkingConfig, t.Name()) + if err != nil { + t.Fatal(err) + } + defer cleanContainer(t, cli, ctr2.ID) + startContainer(t, cli, ctr2.ID) + waitForReady(t, cli, ctr2.ID) +} + +func TestNoVolumeWithRestart(t *testing.T) { + cli, err := client.NewEnvClient() + if err != nil { + t.Fatal(err) + } + containerConfig := container.Config{ + Image: image, + Env: []string{"LICENSE=accept", "MQ_QMGR_NAME=qm1"}, + //ExposedPorts: ports, + ExposedPorts: nat.PortSet{ + "1414/tcp": struct{}{}, + }, + } + id := runContainer(t, cli, &containerConfig) + defer cleanContainer(t, cli, id) + waitForReady(t, cli, id) + stopContainer(t, cli, id) + startContainer(t, cli, id) + waitForReady(t, cli, id) +} diff --git a/test/docker/docker_api_test_util.go b/test/docker/docker_api_test_util.go new file mode 100644 index 0000000..f9a641f --- /dev/null +++ b/test/docker/docker_api_test_util.go @@ -0,0 +1,265 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ +package main + +import ( + "bytes" + "context" + "io/ioutil" + "log" + "os" + "path/filepath" + "testing" + "time" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/volume" + "github.com/docker/docker/client" + "github.com/docker/go-connections/nat" +) + +func coverageBind(t *testing.T) string { + dir, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + return filepath.Join(dir, "coverage") + ":/var/coverage" +} + +func cleanContainer(t *testing.T, cli *client.Client, ID string) { + i, err := cli.ContainerInspect(context.Background(), ID) + if err == nil { + // Log the results and continue + t.Logf("Inspected container %v: %#v", ID, i) + } + t.Logf("Killing container: %v", ID) + // Kill the container. This allows the coverage output to be generated. + err = cli.ContainerKill(context.Background(), ID, "SIGTERM") + if err != nil { + // Just log the error and continue + t.Log(err) + } + //waitForContainer(t, cli, ID, 20, container.WaitConditionNotRunning) + + // TODO: This is probably no longer necessary + time.Sleep(20 * time.Second) + // Log the container output for any container we're about to delete + t.Logf("Console log from container %v:\n%v", ID, inspectLogs(t, cli, ID)) + + t.Logf("Removing container: %s", ID) + opts := types.ContainerRemoveOptions{ + RemoveVolumes: true, + Force: true, + } + err = cli.ContainerRemove(context.Background(), ID, opts) + if err != nil { + t.Error(err) + } +} + +func runContainer(t *testing.T, cli *client.Client, containerConfig *container.Config) string { + t.Logf("Running container") + hostConfig := container.HostConfig{ + PortBindings: nat.PortMap{ + "1414/tcp": []nat.PortBinding{ + { + HostIP: "0.0.0.0", + HostPort: "1414", + }, + }, + }, + } + networkingConfig := network.NetworkingConfig{} + ctr, err := cli.ContainerCreate(context.Background(), containerConfig, &hostConfig, &networkingConfig, t.Name()) + if err != nil { + t.Fatal(err) + } + startContainer(t, cli, ctr.ID) + return ctr.ID +} + +func startContainer(t *testing.T, cli *client.Client, ID string) { + t.Logf("Starting container: %v", ID) + startOptions := types.ContainerStartOptions{} + err := cli.ContainerStart(context.Background(), ID, startOptions) + if err != nil { + t.Fatal(err) + } +} + +func stopContainer(t *testing.T, cli *client.Client, ID string) { + t.Logf("Stopping container: %v", ID) + timeout := 10 * time.Second + err := cli.ContainerStop(context.Background(), ID, &timeout) //Duration(20)*time.Second) + if err != nil { + t.Fatal(err) + } +} + +// waitForContainer waits until a container has exited +func waitForContainer(t *testing.T, cli *client.Client, ID string, timeout int64) int64 { + //ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout)*time.Second) + //defer cancel() + rc, err := cli.ContainerWait(context.Background(), ID) + // err := <-errC + if err != nil { + t.Fatal(err) + } + // wait := <-waitC + return rc +} + +// execContainer runs the specified command inside the container, returning the +// exit code and the stdout/stderr string. +func execContainer(t *testing.T, cli *client.Client, ID string, cmd []string) (int, string) { + config := types.ExecConfig{ + User: "mqm", + Privileged: false, + Tty: false, + AttachStdin: false, + AttachStdout: true, + AttachStderr: true, + Detach: false, + Cmd: cmd, + } + resp, err := cli.ContainerExecCreate(context.Background(), ID, config) + if err != nil { + t.Fatal(err) + } + hijack, err := cli.ContainerExecAttach(context.Background(), resp.ID, config) + if err != nil { + t.Fatal(err) + } + cli.ContainerExecStart(context.Background(), resp.ID, types.ExecStartCheck{ + Detach: false, + Tty: false, + }) + if err != nil { + t.Fatal(err) + } + inspect, err := cli.ContainerExecInspect(context.Background(), resp.ID) + if err != nil { + t.Fatal(err) + } + // TODO: For some reason, each line seems to start with an extra, random character + buf, err := ioutil.ReadAll(hijack.Reader) + if err != nil { + t.Fatal(err) + } + hijack.Close() + return inspect.ExitCode, string(buf) +} + +func waitForReady(t *testing.T, cli *client.Client, ID string) { + for { + resp, err := cli.ContainerExecCreate(context.Background(), ID, types.ExecConfig{ + User: "mqm", + Privileged: false, + Tty: false, + AttachStdin: false, + AttachStdout: true, + AttachStderr: true, + Detach: false, + Cmd: []string{"chkmqready"}, + }) + if err != nil { + t.Fatal(err) + } + cli.ContainerExecStart(context.Background(), resp.ID, types.ExecStartCheck{ + Detach: false, + Tty: false, + }) + if err != nil { + t.Fatal(err) + } + inspect, err := cli.ContainerExecInspect(context.Background(), resp.ID) + if err != nil { + t.Fatal(err) + } + if inspect.ExitCode == 0 { + t.Log("MQ is ready") + return + } + } +} + +func getIPAddress(t *testing.T, cli *client.Client, ID string) string { + ctr, err := cli.ContainerInspect(context.Background(), ID) + if err != nil { + t.Fatal(err) + } + return ctr.NetworkSettings.IPAddress +} + +func createNetwork(t *testing.T, cli *client.Client) string { + name := "test" + t.Logf("Creating network: %v", name) + opts := types.NetworkCreate{} + net, err := cli.NetworkCreate(context.Background(), name, opts) + if err != nil { + t.Fatal(err) + } + t.Logf("Created network %v with ID %v", name, net.ID) + return net.ID +} + +func removeNetwork(t *testing.T, cli *client.Client, ID string) { + t.Logf("Removing network ID: %v", ID) + err := cli.NetworkRemove(context.Background(), ID) + if err != nil { + t.Fatal(err) + } +} + +func createVolume(t *testing.T, cli *client.Client) types.Volume { + v, err := cli.VolumeCreate(context.Background(), volume.VolumesCreateBody{ + Driver: "local", + DriverOpts: map[string]string{}, + Labels: map[string]string{}, + Name: t.Name(), + }) + if err != nil { + t.Fatal(err) + } + t.Logf("Created volume %v", t.Name()) + return v +} + +func removeVolume(t *testing.T, cli *client.Client, name string) { + t.Logf("Removing volume %v", name) + err := cli.VolumeRemove(context.Background(), name, true) + if err != nil { + t.Fatal(err) + } +} + +func inspectLogs(t *testing.T, cli *client.Client, ID string) string { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + reader, err := cli.ContainerLogs(ctx, ID, types.ContainerLogsOptions{ + ShowStdout: true, + ShowStderr: true, + }) + if err != nil { + log.Fatal(err) + } + + buf := new(bytes.Buffer) + buf.ReadFrom(reader) + return buf.String() +} diff --git a/test/docker/main.go b/test/docker/main.go new file mode 100644 index 0000000..d0c17af --- /dev/null +++ b/test/docker/main.go @@ -0,0 +1,19 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ +package main + +func main() { +} diff --git a/test/kubernetes/Gopkg.lock b/test/kubernetes/Gopkg.lock new file mode 100644 index 0000000..c7577dd --- /dev/null +++ b/test/kubernetes/Gopkg.lock @@ -0,0 +1,225 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/PuerkitoBio/purell" + packages = ["."] + revision = "0bcb03f4b4d0a9428594752bd2a3b9aa0a9d4bd4" + version = "v1.1.0" + +[[projects]] + branch = "master" + name = "github.com/PuerkitoBio/urlesc" + packages = ["."] + revision = "de5bf2ad457846296e2031421a34e2568e304e35" + +[[projects]] + name = "github.com/asaskevich/govalidator" + packages = ["."] + revision = "73945b6115bfbbcc57d89b7316e28109364124e1" + version = "v7" + +[[projects]] + name = "github.com/davecgh/go-spew" + packages = ["spew"] + revision = "346938d642f2ec3594ed81d874461961cd0faa76" + version = "v1.1.0" + +[[projects]] + name = "github.com/docker/distribution" + packages = ["digest","reference"] + revision = "48294d928ced5dd9b378f7fd7c6f5da3ff3f2c89" + version = "v2.6.2" + +[[projects]] + name = "github.com/emicklei/go-restful" + packages = [".","log"] + revision = "68c9750c36bb8cb433f1b88c807b4b30df4acc40" + version = "v2.2.1" + +[[projects]] + name = "github.com/emicklei/go-restful-swagger12" + packages = ["."] + revision = "dcef7f55730566d41eae5db10e7d6981829720f6" + version = "1.0.1" + +[[projects]] + name = "github.com/ghodss/yaml" + packages = ["."] + revision = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7" + version = "v1.0.0" + +[[projects]] + branch = "master" + name = "github.com/go-openapi/analysis" + packages = ["."] + revision = "8ed83f2ea9f00f945516462951a288eaa68bf0d6" + +[[projects]] + branch = "master" + name = "github.com/go-openapi/errors" + packages = ["."] + revision = "03cfca65330da08a5a440053faf994a3c682b5bf" + +[[projects]] + branch = "master" + name = "github.com/go-openapi/jsonpointer" + packages = ["."] + revision = "779f45308c19820f1a69e9a4cd965f496e0da10f" + +[[projects]] + branch = "master" + name = "github.com/go-openapi/jsonreference" + packages = ["."] + revision = "36d33bfe519efae5632669801b180bf1a245da3b" + +[[projects]] + branch = "master" + name = "github.com/go-openapi/loads" + packages = ["."] + revision = "a80dea3052f00e5f032e860dd7355cd0cc67e24d" + +[[projects]] + branch = "master" + name = "github.com/go-openapi/spec" + packages = ["."] + revision = "3faa0055dbbf2110abc1f3b4e3adbb22721e96e7" + +[[projects]] + branch = "master" + name = "github.com/go-openapi/strfmt" + packages = ["."] + revision = "610b6cacdcde6852f4de68998bd20ce1dac85b22" + +[[projects]] + branch = "master" + name = "github.com/go-openapi/swag" + packages = ["."] + revision = "f3f9494671f93fcff853e3c6e9e948b3eb71e590" + +[[projects]] + name = "github.com/gogo/protobuf" + packages = ["proto","sortkeys"] + revision = "100ba4e885062801d56799d78530b73b178a78f3" + version = "v0.4" + +[[projects]] + branch = "master" + name = "github.com/golang/glog" + packages = ["."] + revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" + +[[projects]] + branch = "master" + name = "github.com/google/gofuzz" + packages = ["."] + revision = "24818f796faf91cd76ec7bddd72458fbced7a6c1" + +[[projects]] + branch = "master" + name = "github.com/howeyc/gopass" + packages = ["."] + revision = "bf9dde6d0d2c004a008c27aaee91170c786f6db8" + +[[projects]] + name = "github.com/imdario/mergo" + packages = ["."] + revision = "3e95a51e0639b4cf372f2ccf74c86749d747fbdc" + version = "0.2.2" + +[[projects]] + branch = "master" + name = "github.com/juju/ratelimit" + packages = ["."] + revision = "5b9ff866471762aa2ab2dced63c9fb6f53921342" + +[[projects]] + branch = "master" + name = "github.com/mailru/easyjson" + packages = ["buffer","jlexer","jwriter"] + revision = "2a92e673c9a6302dd05c3a691ae1f24aef46457d" + +[[projects]] + branch = "master" + name = "github.com/mitchellh/mapstructure" + packages = ["."] + revision = "d0303fe809921458f417bcf828397a65db30a7e4" + +[[projects]] + name = "github.com/spf13/pflag" + packages = ["."] + revision = "e57e3eeb33f795204c1ca35f56c44f83227c6e66" + version = "v1.0.0" + +[[projects]] + branch = "master" + name = "github.com/ugorji/go" + packages = ["codec"] + revision = "8c0409fcbb70099c748d71f714529204975f6c3f" + +[[projects]] + branch = "master" + name = "golang.org/x/crypto" + packages = ["ssh/terminal"] + revision = "81e90905daefcd6fd217b62423c0908922eadb30" + +[[projects]] + branch = "master" + name = "golang.org/x/net" + packages = ["http2","http2/hpack","idna","lex/httplex"] + revision = "66aacef3dd8a676686c7ae3716979581e8b03c47" + +[[projects]] + branch = "master" + name = "golang.org/x/sys" + packages = ["unix","windows"] + revision = "9aade4d3a3b7e6d876cd3823ad20ec45fc035402" + +[[projects]] + branch = "master" + name = "golang.org/x/text" + packages = ["internal/gen","internal/triegen","internal/ucd","secure/bidirule","transform","unicode/bidi","unicode/cldr","unicode/norm","unicode/rangetable","width"] + revision = "bd91bbf73e9a4a801adbfb97133c992678533126" + +[[projects]] + name = "gopkg.in/inf.v0" + packages = ["."] + revision = "3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4" + version = "v0.9.0" + +[[projects]] + branch = "v2" + name = "gopkg.in/mgo.v2" + packages = ["bson","internal/json"] + revision = "3f83fa5005286a7fe593b055f0d7771a7dce4655" + +[[projects]] + branch = "v2" + name = "gopkg.in/yaml.v2" + packages = ["."] + revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f" + +[[projects]] + branch = "master" + name = "k8s.io/apimachinery" + packages = ["pkg/api/equality","pkg/api/errors","pkg/api/meta","pkg/api/resource","pkg/apimachinery","pkg/apimachinery/announced","pkg/apimachinery/registered","pkg/apis/meta/v1","pkg/apis/meta/v1/unstructured","pkg/apis/meta/v1alpha1","pkg/conversion","pkg/conversion/queryparams","pkg/conversion/unstructured","pkg/fields","pkg/labels","pkg/runtime","pkg/runtime/schema","pkg/runtime/serializer","pkg/runtime/serializer/json","pkg/runtime/serializer/protobuf","pkg/runtime/serializer/recognizer","pkg/runtime/serializer/streaming","pkg/runtime/serializer/versioning","pkg/selection","pkg/types","pkg/util/clock","pkg/util/diff","pkg/util/errors","pkg/util/framer","pkg/util/intstr","pkg/util/json","pkg/util/net","pkg/util/rand","pkg/util/runtime","pkg/util/sets","pkg/util/validation","pkg/util/validation/field","pkg/util/wait","pkg/util/yaml","pkg/version","pkg/watch","third_party/forked/golang/reflect"] + revision = "b166f81f5c4c88402ae23a0d0944c6ad08bffd3b" + +[[projects]] + name = "k8s.io/client-go" + packages = ["discovery","kubernetes","kubernetes/scheme","kubernetes/typed/admissionregistration/v1alpha1","kubernetes/typed/apps/v1beta1","kubernetes/typed/authentication/v1","kubernetes/typed/authentication/v1beta1","kubernetes/typed/authorization/v1","kubernetes/typed/authorization/v1beta1","kubernetes/typed/autoscaling/v1","kubernetes/typed/autoscaling/v2alpha1","kubernetes/typed/batch/v1","kubernetes/typed/batch/v2alpha1","kubernetes/typed/certificates/v1beta1","kubernetes/typed/core/v1","kubernetes/typed/extensions/v1beta1","kubernetes/typed/networking/v1","kubernetes/typed/policy/v1beta1","kubernetes/typed/rbac/v1alpha1","kubernetes/typed/rbac/v1beta1","kubernetes/typed/settings/v1alpha1","kubernetes/typed/storage/v1","kubernetes/typed/storage/v1beta1","pkg/api","pkg/api/v1","pkg/api/v1/ref","pkg/apis/admissionregistration","pkg/apis/admissionregistration/v1alpha1","pkg/apis/apps","pkg/apis/apps/v1beta1","pkg/apis/authentication","pkg/apis/authentication/v1","pkg/apis/authentication/v1beta1","pkg/apis/authorization","pkg/apis/authorization/v1","pkg/apis/authorization/v1beta1","pkg/apis/autoscaling","pkg/apis/autoscaling/v1","pkg/apis/autoscaling/v2alpha1","pkg/apis/batch","pkg/apis/batch/v1","pkg/apis/batch/v2alpha1","pkg/apis/certificates","pkg/apis/certificates/v1beta1","pkg/apis/extensions","pkg/apis/extensions/v1beta1","pkg/apis/networking","pkg/apis/networking/v1","pkg/apis/policy","pkg/apis/policy/v1beta1","pkg/apis/rbac","pkg/apis/rbac/v1alpha1","pkg/apis/rbac/v1beta1","pkg/apis/settings","pkg/apis/settings/v1alpha1","pkg/apis/storage","pkg/apis/storage/v1","pkg/apis/storage/v1beta1","pkg/util","pkg/util/parsers","pkg/version","rest","rest/watch","tools/auth","tools/clientcmd","tools/clientcmd/api","tools/clientcmd/api/latest","tools/clientcmd/api/v1","tools/metrics","transport","util/cert","util/flowcontrol","util/homedir","util/integer"] + revision = "d92e8497f71b7b4e0494e5bd204b48d34bd6f254" + version = "v4.0.0" + +[[projects]] + branch = "master" + name = "k8s.io/kube-openapi" + packages = ["pkg/common"] + revision = "abfc5fbe1cf87ee697db107fdfd24c32fe4397a8" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "05d4500518bb3fde554ca53f3d165ed3a20dec25bd4a24c6e59ee50dbea491b9" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/test/kubernetes/Gopkg.toml b/test/kubernetes/Gopkg.toml new file mode 100644 index 0000000..a8c1aed --- /dev/null +++ b/test/kubernetes/Gopkg.toml @@ -0,0 +1,25 @@ +# © Copyright IBM Corporation 2017 +# +# 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. + +[[constraint]] + branch = "master" + name = "golang.org/x/sys" + +[[constraint]] + branch = "master" + name = "k8s.io/apimachinery" + +[[constraint]] + name = "k8s.io/client-go" + version = "4.0.0" diff --git a/test/kubernetes/helm_test.go b/test/kubernetes/helm_test.go new file mode 100644 index 0000000..afb6aa8 --- /dev/null +++ b/test/kubernetes/helm_test.go @@ -0,0 +1,146 @@ +/* +© Copyright IBM Corporation 2017 + +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. +*/ +package main + +import ( + "os" + "os/exec" + "runtime" + "strings" + "testing" + "time" + + "golang.org/x/sys/unix" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/pkg/api/v1" + "k8s.io/client-go/tools/clientcmd" +) + +var namespace string = "default" + +// runCommand runs an OS command. On Linux it waits for the command to +// complete and returns the exit status (return code). +// TODO: duplicated from cmd/runmqserver/main.go +func runCommand(t *testing.T, name string, arg ...string) (string, int, error) { + t.Logf("Running command %v %v", name, arg) + cmd := exec.Command(name, arg...) + // Run the command and wait for completion + out, err := cmd.CombinedOutput() + if err != nil { + var rc int + // Only works on Linux + if runtime.GOOS == "linux" { + // func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) + var ws unix.WaitStatus + //var rusage syscall.Rusage + unix.Wait4(cmd.Process.Pid, &ws, 0, nil) + //ee := err.(*os.SyscallError) + //ws := ee.Sys().(syscall.WaitStatus) + rc = ws.ExitStatus() + } else { + rc = -1 + } + if rc == 0 { + return string(out), rc, nil + } + return string(out), rc, err + } + return string(out), 0, nil +} + +func helmDelete(t *testing.T, release string) { + out, _, err := runCommand(t, "helm", "delete", "--purge", release) + if err != nil { + t.Error(out) + t.Fatal(err) + } +} + +func helmDeleteWithPVC(t *testing.T, cs *kubernetes.Clientset, release string) { + helmDelete(t, release) + pvcs, err := cs.CoreV1().PersistentVolumeClaims(namespace).List(metav1.ListOptions{ + LabelSelector: "app=" + release + "-mq", + }) + if err != nil { + t.Fatal(err) + } + for _, pvc := range pvcs.Items { + t.Logf("Deleting persistent volume claim: %v", pvc.Name) + err := cs.CoreV1().PersistentVolumeClaims(namespace).Delete(pvc.Name, &metav1.DeleteOptions{}) + if err != nil { + t.Fatal(err) + } + } +} + +func kubeLogin(t *testing.T) *kubernetes.Clientset { + kc := os.Getenv("HOME") + "/.kube/config" + c, err := clientcmd.BuildConfigFromFlags("", kc) + if err != nil { + t.Fatal(err) + } + cs, err := kubernetes.NewForConfig(c) + if err != nil { + t.Fatal(err) + } + return cs +} + +func waitForTerminated(pods types.PodInterface, name string) (v1.PodPhase, error) { + status := v1.PodUnknown + var pod *v1.Pod + var err error + for status != v1.PodSucceeded && status != v1.PodFailed { + pod, err = pods.Get(name, metav1.GetOptions{}) + if err != nil { + return status, err + } + status = pod.Status.Phase + time.Sleep(1 * time.Second) + } + // The LastTerminationState doesn't seem to include an exit code + //t := pod.Status.ContainerStatuses[0].LastTerminationState + return status, nil +} + +func TestHelmGoldenPath(t *testing.T) { + cs := kubeLogin(t) + chart := "../charts/mqadvanced-dev" + image := "master.cfc:8500/default/mqadvanced" + tag := "latest" + release := strings.ToLower(t.Name()) + out, _, err := runCommand(t, "helm", "install", chart, "--name", release, "--set", "license=accept", "--set", "image.repository="+image, "--set", "image.tag="+tag) + if err != nil { + t.Error(out) + t.Fatal(err) + } + defer helmDeleteWithPVC(t, cs, release) + + nodes, err := cs.CoreV1().Nodes().List(metav1.ListOptions{}) + if err != nil { + t.Fatal(err) + } + t.Logf("There are %d nodes in the cluster\n", len(nodes.Items)) + + pods, err := cs.CoreV1().Pods("").List(metav1.ListOptions{ + LabelSelector: "app=" + release + "-mq", + }) + if err != nil { + t.Fatal(err) + } + t.Logf("There are %d pods with the right label in the cluster\n", len(pods.Items)) +} diff --git a/vendor/github.com/hpcloud/tail/.gitignore b/vendor/github.com/hpcloud/tail/.gitignore new file mode 100644 index 0000000..6d9953c --- /dev/null +++ b/vendor/github.com/hpcloud/tail/.gitignore @@ -0,0 +1,3 @@ +.test +.go + diff --git a/vendor/github.com/hpcloud/tail/.travis.yml b/vendor/github.com/hpcloud/tail/.travis.yml new file mode 100644 index 0000000..9cf8bb7 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/.travis.yml @@ -0,0 +1,18 @@ +language: go + +script: + - go test -race -v ./... + +go: + - 1.4 + - 1.5 + - 1.6 + - tip + +matrix: + allow_failures: + - go: tip + +install: + - go get gopkg.in/fsnotify.v1 + - go get gopkg.in/tomb.v1 diff --git a/vendor/github.com/hpcloud/tail/CHANGES.md b/vendor/github.com/hpcloud/tail/CHANGES.md new file mode 100644 index 0000000..422790c --- /dev/null +++ b/vendor/github.com/hpcloud/tail/CHANGES.md @@ -0,0 +1,63 @@ +# API v1 (gopkg.in/hpcloud/tail.v1) + +## April, 2016 + +* Migrated to godep, as depman is not longer supported +* Introduced golang vendoring feature +* Fixed issue [#57](https://github.com/hpcloud/tail/issues/57) related to reopen deleted file + +## July, 2015 + +* Fix inotify watcher leak; remove `Cleanup` (#51) + +# API v0 (gopkg.in/hpcloud/tail.v0) + +## June, 2015 + +* Don't return partial lines (PR #40) +* Use stable version of fsnotify (#46) + +## July, 2014 + +* Fix tail for Windows (PR #36) + +## May, 2014 + +* Improved rate limiting using leaky bucket (PR #29) +* Fix odd line splitting (PR #30) + +## Apr, 2014 + +* LimitRate now discards read buffer (PR #28) +* allow reading of longer lines if MaxLineSize is unset (PR #24) +* updated deps.json to latest fsnotify (441bbc86b1) + +## Feb, 2014 + +* added `Config.Logger` to suppress library logging + +## Nov, 2013 + +* add Cleanup to remove leaky inotify watches (PR #20) + +## Aug, 2013 + +* redesigned Location field (PR #12) +* add tail.Tell (PR #14) + +## July, 2013 + +* Rate limiting (PR #10) + +## May, 2013 + +* Detect file deletions/renames in polling file watcher (PR #1) +* Detect file truncation +* Fix potential race condition when reopening the file (issue 5) +* Fix potential blocking of `tail.Stop` (issue 4) +* Fix uncleaned up ChangeEvents goroutines after calling tail.Stop +* Support Follow=false + +## Feb, 2013 + +* Initial open source release diff --git a/vendor/github.com/hpcloud/tail/Dockerfile b/vendor/github.com/hpcloud/tail/Dockerfile new file mode 100644 index 0000000..cd297b9 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/Dockerfile @@ -0,0 +1,19 @@ +FROM golang + +RUN mkdir -p $GOPATH/src/github.com/hpcloud/tail/ +ADD . $GOPATH/src/github.com/hpcloud/tail/ + +# expecting to fetch dependencies successfully. +RUN go get -v github.com/hpcloud/tail + +# expecting to run the test successfully. +RUN go test -v github.com/hpcloud/tail + +# expecting to install successfully +RUN go install -v github.com/hpcloud/tail +RUN go install -v github.com/hpcloud/tail/cmd/gotail + +RUN $GOPATH/bin/gotail -h || true + +ENV PATH $GOPATH/bin:$PATH +CMD ["gotail"] diff --git a/vendor/github.com/hpcloud/tail/Godeps/Godeps.json b/vendor/github.com/hpcloud/tail/Godeps/Godeps.json new file mode 100644 index 0000000..904ea80 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/Godeps/Godeps.json @@ -0,0 +1,15 @@ +{ + "ImportPath": "github.com/hpcloud/tail", + "GoVersion": "go1.5.1", + "Deps": [ + { + "ImportPath": "gopkg.in/fsnotify.v1", + "Comment": "v1.2.1", + "Rev": "7be54206639f256967dd82fa767397ba5f8f48f5" + }, + { + "ImportPath": "gopkg.in/tomb.v1", + "Rev": "c131134a1947e9afd9cecfe11f4c6dff0732ae58" + } + ] +} diff --git a/vendor/github.com/hpcloud/tail/Godeps/Readme b/vendor/github.com/hpcloud/tail/Godeps/Readme new file mode 100644 index 0000000..4cdaa53 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/Godeps/Readme @@ -0,0 +1,5 @@ +This directory tree is generated automatically by godep. + +Please do not edit. + +See https://github.com/tools/godep for more information. diff --git a/vendor/github.com/hpcloud/tail/LICENSE.txt b/vendor/github.com/hpcloud/tail/LICENSE.txt new file mode 100644 index 0000000..818d802 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/LICENSE.txt @@ -0,0 +1,21 @@ +# The MIT License (MIT) + +# © Copyright 2015 Hewlett Packard Enterprise Development LP +Copyright (c) 2014 ActiveState + +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. diff --git a/vendor/github.com/hpcloud/tail/Makefile b/vendor/github.com/hpcloud/tail/Makefile new file mode 100644 index 0000000..6591b24 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/Makefile @@ -0,0 +1,11 @@ +default: test + +test: *.go + go test -v -race ./... + +fmt: + gofmt -w . + +# Run the test in an isolated environment. +fulltest: + docker build -t hpcloud/tail . diff --git a/vendor/github.com/hpcloud/tail/README.md b/vendor/github.com/hpcloud/tail/README.md new file mode 100644 index 0000000..fb7fbc2 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/README.md @@ -0,0 +1,28 @@ +[![Build Status](https://travis-ci.org/hpcloud/tail.svg)](https://travis-ci.org/hpcloud/tail) +[![Build status](https://ci.appveyor.com/api/projects/status/kohpsf3rvhjhrox6?svg=true)](https://ci.appveyor.com/project/HelionCloudFoundry/tail) + +# Go package for tail-ing files + +A Go package striving to emulate the features of the BSD `tail` program. + +```Go +t, err := tail.TailFile("/var/log/nginx.log", tail.Config{Follow: true}) +for line := range t.Lines { + fmt.Println(line.Text) +} +``` + +See [API documentation](http://godoc.org/github.com/hpcloud/tail). + +## Log rotation + +Tail comes with full support for truncation/move detection as it is +designed to work with log rotation tools. + +## Installing + + go get github.com/hpcloud/tail/... + +## Windows support + +This package [needs assistance](https://github.com/hpcloud/tail/labels/Windows) for full Windows support. diff --git a/vendor/github.com/hpcloud/tail/appveyor.yml b/vendor/github.com/hpcloud/tail/appveyor.yml new file mode 100644 index 0000000..d370055 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/appveyor.yml @@ -0,0 +1,11 @@ +version: 0.{build} +skip_tags: true +cache: C:\Users\appveyor\AppData\Local\NuGet\Cache +build_script: +- SET GOPATH=c:\workspace +- go test -v -race ./... +test: off +clone_folder: c:\workspace\src\github.com\hpcloud\tail +branches: + only: + - master diff --git a/vendor/github.com/hpcloud/tail/cmd/gotail/.gitignore b/vendor/github.com/hpcloud/tail/cmd/gotail/.gitignore new file mode 100644 index 0000000..6249af5 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/cmd/gotail/.gitignore @@ -0,0 +1 @@ +gotail diff --git a/vendor/github.com/hpcloud/tail/cmd/gotail/Makefile b/vendor/github.com/hpcloud/tail/cmd/gotail/Makefile new file mode 100644 index 0000000..6b5a2d9 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/cmd/gotail/Makefile @@ -0,0 +1,4 @@ +default: gotail + +gotail: *.go ../../*.go + go build diff --git a/vendor/github.com/hpcloud/tail/cmd/gotail/gotail.go b/vendor/github.com/hpcloud/tail/cmd/gotail/gotail.go new file mode 100644 index 0000000..3da55f2 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/cmd/gotail/gotail.go @@ -0,0 +1,66 @@ +// Copyright (c) 2015 HPE Software Inc. All rights reserved. +// Copyright (c) 2013 ActiveState Software Inc. All rights reserved. + +package main + +import ( + "flag" + "fmt" + "os" + + "github.com/hpcloud/tail" +) + +func args2config() (tail.Config, int64) { + config := tail.Config{Follow: true} + n := int64(0) + maxlinesize := int(0) + flag.Int64Var(&n, "n", 0, "tail from the last Nth location") + flag.IntVar(&maxlinesize, "max", 0, "max line size") + flag.BoolVar(&config.Follow, "f", false, "wait for additional data to be appended to the file") + flag.BoolVar(&config.ReOpen, "F", false, "follow, and track file rename/rotation") + flag.BoolVar(&config.Poll, "p", false, "use polling, instead of inotify") + flag.Parse() + if config.ReOpen { + config.Follow = true + } + config.MaxLineSize = maxlinesize + return config, n +} + +func main() { + config, n := args2config() + if flag.NFlag() < 1 { + fmt.Println("need one or more files as arguments") + os.Exit(1) + } + + if n != 0 { + config.Location = &tail.SeekInfo{-n, os.SEEK_END} + } + + done := make(chan bool) + for _, filename := range flag.Args() { + go tailFile(filename, config, done) + } + + for _, _ = range flag.Args() { + <-done + } +} + +func tailFile(filename string, config tail.Config, done chan bool) { + defer func() { done <- true }() + t, err := tail.TailFile(filename, config) + if err != nil { + fmt.Println(err) + return + } + for line := range t.Lines { + fmt.Println(line.Text) + } + err = t.Wait() + if err != nil { + fmt.Println(err) + } +} diff --git a/vendor/github.com/hpcloud/tail/ratelimiter/Licence b/vendor/github.com/hpcloud/tail/ratelimiter/Licence new file mode 100644 index 0000000..434aab1 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/ratelimiter/Licence @@ -0,0 +1,7 @@ +Copyright (C) 2013 99designs + +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. diff --git a/vendor/github.com/hpcloud/tail/ratelimiter/leakybucket.go b/vendor/github.com/hpcloud/tail/ratelimiter/leakybucket.go new file mode 100644 index 0000000..358b69e --- /dev/null +++ b/vendor/github.com/hpcloud/tail/ratelimiter/leakybucket.go @@ -0,0 +1,97 @@ +// Package ratelimiter implements the Leaky Bucket ratelimiting algorithm with memcached and in-memory backends. +package ratelimiter + +import ( + "time" +) + +type LeakyBucket struct { + Size uint16 + Fill float64 + LeakInterval time.Duration // time.Duration for 1 unit of size to leak + Lastupdate time.Time + Now func() time.Time +} + +func NewLeakyBucket(size uint16, leakInterval time.Duration) *LeakyBucket { + bucket := LeakyBucket{ + Size: size, + Fill: 0, + LeakInterval: leakInterval, + Now: time.Now, + Lastupdate: time.Now(), + } + + return &bucket +} + +func (b *LeakyBucket) updateFill() { + now := b.Now() + if b.Fill > 0 { + elapsed := now.Sub(b.Lastupdate) + + b.Fill -= float64(elapsed) / float64(b.LeakInterval) + if b.Fill < 0 { + b.Fill = 0 + } + } + b.Lastupdate = now +} + +func (b *LeakyBucket) Pour(amount uint16) bool { + b.updateFill() + + var newfill float64 = b.Fill + float64(amount) + + if newfill > float64(b.Size) { + return false + } + + b.Fill = newfill + + return true +} + +// The time at which this bucket will be completely drained +func (b *LeakyBucket) DrainedAt() time.Time { + return b.Lastupdate.Add(time.Duration(b.Fill * float64(b.LeakInterval))) +} + +// The duration until this bucket is completely drained +func (b *LeakyBucket) TimeToDrain() time.Duration { + return b.DrainedAt().Sub(b.Now()) +} + +func (b *LeakyBucket) TimeSinceLastUpdate() time.Duration { + return b.Now().Sub(b.Lastupdate) +} + +type LeakyBucketSer struct { + Size uint16 + Fill float64 + LeakInterval time.Duration // time.Duration for 1 unit of size to leak + Lastupdate time.Time +} + +func (b *LeakyBucket) Serialise() *LeakyBucketSer { + bucket := LeakyBucketSer{ + Size: b.Size, + Fill: b.Fill, + LeakInterval: b.LeakInterval, + Lastupdate: b.Lastupdate, + } + + return &bucket +} + +func (b *LeakyBucketSer) DeSerialise() *LeakyBucket { + bucket := LeakyBucket{ + Size: b.Size, + Fill: b.Fill, + LeakInterval: b.LeakInterval, + Lastupdate: b.Lastupdate, + Now: time.Now, + } + + return &bucket +} diff --git a/vendor/github.com/hpcloud/tail/ratelimiter/leakybucket_test.go b/vendor/github.com/hpcloud/tail/ratelimiter/leakybucket_test.go new file mode 100644 index 0000000..b43dddb --- /dev/null +++ b/vendor/github.com/hpcloud/tail/ratelimiter/leakybucket_test.go @@ -0,0 +1,73 @@ +package ratelimiter + +import ( + "testing" + "time" +) + +func TestPour(t *testing.T) { + bucket := NewLeakyBucket(60, time.Second) + bucket.Lastupdate = time.Unix(0, 0) + + bucket.Now = func() time.Time { return time.Unix(1, 0) } + + if bucket.Pour(61) { + t.Error("Expected false") + } + + if !bucket.Pour(10) { + t.Error("Expected true") + } + + if !bucket.Pour(49) { + t.Error("Expected true") + } + + if bucket.Pour(2) { + t.Error("Expected false") + } + + bucket.Now = func() time.Time { return time.Unix(61, 0) } + if !bucket.Pour(60) { + t.Error("Expected true") + } + + if bucket.Pour(1) { + t.Error("Expected false") + } + + bucket.Now = func() time.Time { return time.Unix(70, 0) } + + if !bucket.Pour(1) { + t.Error("Expected true") + } + +} + +func TestTimeSinceLastUpdate(t *testing.T) { + bucket := NewLeakyBucket(60, time.Second) + bucket.Now = func() time.Time { return time.Unix(1, 0) } + bucket.Pour(1) + bucket.Now = func() time.Time { return time.Unix(2, 0) } + + sinceLast := bucket.TimeSinceLastUpdate() + if sinceLast != time.Second*1 { + t.Errorf("Expected time since last update to be less than 1 second, got %d", sinceLast) + } +} + +func TestTimeToDrain(t *testing.T) { + bucket := NewLeakyBucket(60, time.Second) + bucket.Now = func() time.Time { return time.Unix(1, 0) } + bucket.Pour(10) + + if bucket.TimeToDrain() != time.Second*10 { + t.Error("Time to drain should be 10 seconds") + } + + bucket.Now = func() time.Time { return time.Unix(2, 0) } + + if bucket.TimeToDrain() != time.Second*9 { + t.Error("Time to drain should be 9 seconds") + } +} diff --git a/vendor/github.com/hpcloud/tail/ratelimiter/memory.go b/vendor/github.com/hpcloud/tail/ratelimiter/memory.go new file mode 100644 index 0000000..8f6a578 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/ratelimiter/memory.go @@ -0,0 +1,58 @@ +package ratelimiter + +import ( + "errors" + "time" +) + +const GC_SIZE int = 100 + +type Memory struct { + store map[string]LeakyBucket + lastGCCollected time.Time +} + +func NewMemory() *Memory { + m := new(Memory) + m.store = make(map[string]LeakyBucket) + m.lastGCCollected = time.Now() + return m +} + +func (m *Memory) GetBucketFor(key string) (*LeakyBucket, error) { + + bucket, ok := m.store[key] + if !ok { + return nil, errors.New("miss") + } + + return &bucket, nil +} + +func (m *Memory) SetBucketFor(key string, bucket LeakyBucket) error { + + if len(m.store) > GC_SIZE { + m.GarbageCollect() + } + + m.store[key] = bucket + + return nil +} + +func (m *Memory) GarbageCollect() { + now := time.Now() + + // rate limit GC to once per minute + if now.Add(60*time.Second).Unix() > m.lastGCCollected.Unix() { + + for key, bucket := range m.store { + // if the bucket is drained, then GC + if bucket.DrainedAt().Unix() > now.Unix() { + delete(m.store, key) + } + } + + m.lastGCCollected = now + } +} diff --git a/vendor/github.com/hpcloud/tail/ratelimiter/storage.go b/vendor/github.com/hpcloud/tail/ratelimiter/storage.go new file mode 100644 index 0000000..89b2fe882 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/ratelimiter/storage.go @@ -0,0 +1,6 @@ +package ratelimiter + +type Storage interface { + GetBucketFor(string) (*LeakyBucket, error) + SetBucketFor(string, LeakyBucket) error +} diff --git a/vendor/github.com/hpcloud/tail/tail.go b/vendor/github.com/hpcloud/tail/tail.go new file mode 100644 index 0000000..2d252d6 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/tail.go @@ -0,0 +1,438 @@ +// Copyright (c) 2015 HPE Software Inc. All rights reserved. +// Copyright (c) 2013 ActiveState Software Inc. All rights reserved. + +package tail + +import ( + "bufio" + "errors" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "strings" + "sync" + "time" + + "github.com/hpcloud/tail/ratelimiter" + "github.com/hpcloud/tail/util" + "github.com/hpcloud/tail/watch" + "gopkg.in/tomb.v1" +) + +var ( + ErrStop = fmt.Errorf("tail should now stop") +) + +type Line struct { + Text string + Time time.Time + Err error // Error from tail +} + +// NewLine returns a Line with present time. +func NewLine(text string) *Line { + return &Line{text, time.Now(), nil} +} + +// SeekInfo represents arguments to `os.Seek` +type SeekInfo struct { + Offset int64 + Whence int // os.SEEK_* +} + +type logger interface { + Fatal(v ...interface{}) + Fatalf(format string, v ...interface{}) + Fatalln(v ...interface{}) + Panic(v ...interface{}) + Panicf(format string, v ...interface{}) + Panicln(v ...interface{}) + Print(v ...interface{}) + Printf(format string, v ...interface{}) + Println(v ...interface{}) +} + +// Config is used to specify how a file must be tailed. +type Config struct { + // File-specifc + Location *SeekInfo // Seek to this location before tailing + ReOpen bool // Reopen recreated files (tail -F) + MustExist bool // Fail early if the file does not exist + Poll bool // Poll for file changes instead of using inotify + Pipe bool // Is a named pipe (mkfifo) + RateLimiter *ratelimiter.LeakyBucket + + // Generic IO + Follow bool // Continue looking for new lines (tail -f) + MaxLineSize int // If non-zero, split longer lines into multiple lines + + // Logger, when nil, is set to tail.DefaultLogger + // To disable logging: set field to tail.DiscardingLogger + Logger logger +} + +type Tail struct { + Filename string + Lines chan *Line + Config + + file *os.File + reader *bufio.Reader + + watcher watch.FileWatcher + changes *watch.FileChanges + + tomb.Tomb // provides: Done, Kill, Dying + + lk sync.Mutex +} + +var ( + // DefaultLogger is used when Config.Logger == nil + DefaultLogger = log.New(os.Stderr, "", log.LstdFlags) + // DiscardingLogger can be used to disable logging output + DiscardingLogger = log.New(ioutil.Discard, "", 0) +) + +// TailFile begins tailing the file. Output stream is made available +// via the `Tail.Lines` channel. To handle errors during tailing, +// invoke the `Wait` or `Err` method after finishing reading from the +// `Lines` channel. +func TailFile(filename string, config Config) (*Tail, error) { + if config.ReOpen && !config.Follow { + util.Fatal("cannot set ReOpen without Follow.") + } + + t := &Tail{ + Filename: filename, + Lines: make(chan *Line), + Config: config, + } + + // when Logger was not specified in config, use default logger + if t.Logger == nil { + t.Logger = log.New(os.Stderr, "", log.LstdFlags) + } + + if t.Poll { + t.watcher = watch.NewPollingFileWatcher(filename) + } else { + t.watcher = watch.NewInotifyFileWatcher(filename) + } + + if t.MustExist { + var err error + t.file, err = OpenFile(t.Filename) + if err != nil { + return nil, err + } + } + + go t.tailFileSync() + + return t, nil +} + +// Return the file's current position, like stdio's ftell(). +// But this value is not very accurate. +// it may readed one line in the chan(tail.Lines), +// so it may lost one line. +func (tail *Tail) Tell() (offset int64, err error) { + if tail.file == nil { + return + } + offset, err = tail.file.Seek(0, os.SEEK_CUR) + if err != nil { + return + } + + tail.lk.Lock() + defer tail.lk.Unlock() + if tail.reader == nil { + return + } + + offset -= int64(tail.reader.Buffered()) + return +} + +// Stop stops the tailing activity. +func (tail *Tail) Stop() error { + tail.Kill(nil) + return tail.Wait() +} + +// StopAtEOF stops tailing as soon as the end of the file is reached. +func (tail *Tail) StopAtEOF() error { + tail.Kill(errStopAtEOF) + return tail.Wait() +} + +var errStopAtEOF = errors.New("tail: stop at eof") + +func (tail *Tail) close() { + close(tail.Lines) + tail.closeFile() +} + +func (tail *Tail) closeFile() { + if tail.file != nil { + tail.file.Close() + tail.file = nil + } +} + +func (tail *Tail) reopen() error { + tail.closeFile() + for { + var err error + tail.file, err = OpenFile(tail.Filename) + if err != nil { + if os.IsNotExist(err) { + tail.Logger.Printf("Waiting for %s to appear...", tail.Filename) + if err := tail.watcher.BlockUntilExists(&tail.Tomb); err != nil { + if err == tomb.ErrDying { + return err + } + return fmt.Errorf("Failed to detect creation of %s: %s", tail.Filename, err) + } + continue + } + return fmt.Errorf("Unable to open file %s: %s", tail.Filename, err) + } + break + } + return nil +} + +func (tail *Tail) readLine() (string, error) { + tail.lk.Lock() + line, err := tail.reader.ReadString('\n') + tail.lk.Unlock() + if err != nil { + // Note ReadString "returns the data read before the error" in + // case of an error, including EOF, so we return it as is. The + // caller is expected to process it if err is EOF. + return line, err + } + + line = strings.TrimRight(line, "\n") + + return line, err +} + +func (tail *Tail) tailFileSync() { + defer tail.Done() + defer tail.close() + + if !tail.MustExist { + // deferred first open. + err := tail.reopen() + if err != nil { + if err != tomb.ErrDying { + tail.Kill(err) + } + return + } + } + + // Seek to requested location on first open of the file. + if tail.Location != nil { + _, err := tail.file.Seek(tail.Location.Offset, tail.Location.Whence) + tail.Logger.Printf("Seeked %s - %+v\n", tail.Filename, tail.Location) + if err != nil { + tail.Killf("Seek error on %s: %s", tail.Filename, err) + return + } + } + + tail.openReader() + + var offset int64 = 0 + var err error + + // Read line by line. + for { + // do not seek in named pipes + if !tail.Pipe { + // grab the position in case we need to back up in the event of a half-line + offset, err = tail.Tell() + if err != nil { + tail.Kill(err) + return + } + } + + line, err := tail.readLine() + + // Process `line` even if err is EOF. + if err == nil { + cooloff := !tail.sendLine(line) + if cooloff { + // Wait a second before seeking till the end of + // file when rate limit is reached. + msg := fmt.Sprintf( + "Too much log activity; waiting a second " + + "before resuming tailing") + tail.Lines <- &Line{msg, time.Now(), fmt.Errorf(msg)} + select { + case <-time.After(time.Second): + case <-tail.Dying(): + return + } + if err := tail.seekEnd(); err != nil { + tail.Kill(err) + return + } + } + } else if err == io.EOF { + if !tail.Follow { + if line != "" { + tail.sendLine(line) + } + return + } + + if tail.Follow && line != "" { + // this has the potential to never return the last line if + // it's not followed by a newline; seems a fair trade here + err := tail.seekTo(SeekInfo{Offset: offset, Whence: 0}) + if err != nil { + tail.Kill(err) + return + } + } + + // When EOF is reached, wait for more data to become + // available. Wait strategy is based on the `tail.watcher` + // implementation (inotify or polling). + err := tail.waitForChanges() + if err != nil { + if err != ErrStop { + tail.Kill(err) + } + return + } + } else { + // non-EOF error + tail.Killf("Error reading %s: %s", tail.Filename, err) + return + } + + select { + case <-tail.Dying(): + if tail.Err() == errStopAtEOF { + continue + } + return + default: + } + } +} + +// waitForChanges waits until the file has been appended, deleted, +// moved or truncated. When moved or deleted - the file will be +// reopened if ReOpen is true. Truncated files are always reopened. +func (tail *Tail) waitForChanges() error { + if tail.changes == nil { + pos, err := tail.file.Seek(0, os.SEEK_CUR) + if err != nil { + return err + } + tail.changes, err = tail.watcher.ChangeEvents(&tail.Tomb, pos) + if err != nil { + return err + } + } + + select { + case <-tail.changes.Modified: + return nil + case <-tail.changes.Deleted: + tail.changes = nil + if tail.ReOpen { + // XXX: we must not log from a library. + tail.Logger.Printf("Re-opening moved/deleted file %s ...", tail.Filename) + if err := tail.reopen(); err != nil { + return err + } + tail.Logger.Printf("Successfully reopened %s", tail.Filename) + tail.openReader() + return nil + } else { + tail.Logger.Printf("Stopping tail as file no longer exists: %s", tail.Filename) + return ErrStop + } + case <-tail.changes.Truncated: + // Always reopen truncated files (Follow is true) + tail.Logger.Printf("Re-opening truncated file %s ...", tail.Filename) + if err := tail.reopen(); err != nil { + return err + } + tail.Logger.Printf("Successfully reopened truncated %s", tail.Filename) + tail.openReader() + return nil + case <-tail.Dying(): + return ErrStop + } + panic("unreachable") +} + +func (tail *Tail) openReader() { + if tail.MaxLineSize > 0 { + // add 2 to account for newline characters + tail.reader = bufio.NewReaderSize(tail.file, tail.MaxLineSize+2) + } else { + tail.reader = bufio.NewReader(tail.file) + } +} + +func (tail *Tail) seekEnd() error { + return tail.seekTo(SeekInfo{Offset: 0, Whence: os.SEEK_END}) +} + +func (tail *Tail) seekTo(pos SeekInfo) error { + _, err := tail.file.Seek(pos.Offset, pos.Whence) + if err != nil { + return fmt.Errorf("Seek error on %s: %s", tail.Filename, err) + } + // Reset the read buffer whenever the file is re-seek'ed + tail.reader.Reset(tail.file) + return nil +} + +// sendLine sends the line(s) to Lines channel, splitting longer lines +// if necessary. Return false if rate limit is reached. +func (tail *Tail) sendLine(line string) bool { + now := time.Now() + lines := []string{line} + + // Split longer lines + if tail.MaxLineSize > 0 && len(line) > tail.MaxLineSize { + lines = util.PartitionString(line, tail.MaxLineSize) + } + + for _, line := range lines { + tail.Lines <- &Line{line, now, nil} + } + + if tail.Config.RateLimiter != nil { + ok := tail.Config.RateLimiter.Pour(uint16(len(lines))) + if !ok { + tail.Logger.Printf("Leaky bucket full (%v); entering 1s cooloff period.\n", + tail.Filename) + return false + } + } + + return true +} + +// Cleanup removes inotify watches added by the tail package. This function is +// meant to be invoked from a process's exit handler. Linux kernel may not +// automatically remove inotify watches after the process exits. +func (tail *Tail) Cleanup() { + watch.Cleanup(tail.Filename) +} diff --git a/vendor/github.com/hpcloud/tail/tail_posix.go b/vendor/github.com/hpcloud/tail/tail_posix.go new file mode 100644 index 0000000..bc4dc33 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/tail_posix.go @@ -0,0 +1,11 @@ +// +build linux darwin freebsd netbsd openbsd + +package tail + +import ( + "os" +) + +func OpenFile(name string) (file *os.File, err error) { + return os.Open(name) +} diff --git a/vendor/github.com/hpcloud/tail/tail_test.go b/vendor/github.com/hpcloud/tail/tail_test.go new file mode 100644 index 0000000..8dcc02c --- /dev/null +++ b/vendor/github.com/hpcloud/tail/tail_test.go @@ -0,0 +1,521 @@ +// Copyright (c) 2015 HPE Software Inc. All rights reserved. +// Copyright (c) 2013 ActiveState Software Inc. All rights reserved. + +// TODO: +// * repeat all the tests with Poll:true + +package tail + +import ( + _ "fmt" + "io/ioutil" + "os" + "strings" + "testing" + "time" + + "github.com/hpcloud/tail/ratelimiter" + "github.com/hpcloud/tail/watch" +) + +func init() { + // Clear the temporary test directory + err := os.RemoveAll(".test") + if err != nil { + panic(err) + } +} + +func TestMain(m *testing.M) { + // Use a smaller poll duration for faster test runs. Keep it below + // 100ms (which value is used as common delays for tests) + watch.POLL_DURATION = 5 * time.Millisecond + os.Exit(m.Run()) +} + +func TestMustExist(t *testing.T) { + tail, err := TailFile("/no/such/file", Config{Follow: true, MustExist: true}) + if err == nil { + t.Error("MustExist:true is violated") + tail.Stop() + } + tail, err = TailFile("/no/such/file", Config{Follow: true, MustExist: false}) + if err != nil { + t.Error("MustExist:false is violated") + } + tail.Stop() + _, err = TailFile("README.md", Config{Follow: true, MustExist: true}) + if err != nil { + t.Error("MustExist:true on an existing file is violated") + } + tail.Cleanup() +} + +func TestWaitsForFileToExist(t *testing.T) { + tailTest := NewTailTest("waits-for-file-to-exist", t) + tail := tailTest.StartTail("test.txt", Config{}) + go tailTest.VerifyTailOutput(tail, []string{"hello", "world"}, false) + + <-time.After(100 * time.Millisecond) + tailTest.CreateFile("test.txt", "hello\nworld\n") + tailTest.Cleanup(tail, true) +} + +func TestWaitsForFileToExistRelativePath(t *testing.T) { + tailTest := NewTailTest("waits-for-file-to-exist-relative", t) + + oldWD, err := os.Getwd() + if err != nil { + tailTest.Fatal(err) + } + os.Chdir(tailTest.path) + defer os.Chdir(oldWD) + + tail, err := TailFile("test.txt", Config{}) + if err != nil { + tailTest.Fatal(err) + } + + go tailTest.VerifyTailOutput(tail, []string{"hello", "world"}, false) + + <-time.After(100 * time.Millisecond) + if err := ioutil.WriteFile("test.txt", []byte("hello\nworld\n"), 0600); err != nil { + tailTest.Fatal(err) + } + tailTest.Cleanup(tail, true) +} + +func TestStop(t *testing.T) { + tail, err := TailFile("_no_such_file", Config{Follow: true, MustExist: false}) + if err != nil { + t.Error("MustExist:false is violated") + } + if tail.Stop() != nil { + t.Error("Should be stoped successfully") + } + tail.Cleanup() +} + +func TestStopAtEOF(t *testing.T) { + tailTest := NewTailTest("maxlinesize", t) + tailTest.CreateFile("test.txt", "hello\nthere\nworld\n") + tail := tailTest.StartTail("test.txt", Config{Follow: true, Location: nil}) + + // read "hello" + line := <-tail.Lines + if line.Text != "hello" { + t.Errorf("Expected to get 'hello', got '%s' instead", line.Text) + } + + tailTest.VerifyTailOutput(tail, []string{"there", "world"}, false) + tail.StopAtEOF() + tailTest.Cleanup(tail, true) +} + +func TestMaxLineSizeFollow(t *testing.T) { + // As last file line does not end with newline, it will not be present in tail's output + maxLineSize(t, true, "hello\nworld\nfin\nhe", []string{"hel", "lo", "wor", "ld", "fin"}) +} + +func TestMaxLineSizeNoFollow(t *testing.T) { + maxLineSize(t, false, "hello\nworld\nfin\nhe", []string{"hel", "lo", "wor", "ld", "fin", "he"}) +} + +func TestOver4096ByteLine(t *testing.T) { + tailTest := NewTailTest("Over4096ByteLine", t) + testString := strings.Repeat("a", 4097) + tailTest.CreateFile("test.txt", "test\n"+testString+"\nhello\nworld\n") + tail := tailTest.StartTail("test.txt", Config{Follow: true, Location: nil}) + go tailTest.VerifyTailOutput(tail, []string{"test", testString, "hello", "world"}, false) + + // Delete after a reasonable delay, to give tail sufficient time + // to read all lines. + <-time.After(100 * time.Millisecond) + tailTest.RemoveFile("test.txt") + tailTest.Cleanup(tail, true) +} +func TestOver4096ByteLineWithSetMaxLineSize(t *testing.T) { + tailTest := NewTailTest("Over4096ByteLineMaxLineSize", t) + testString := strings.Repeat("a", 4097) + tailTest.CreateFile("test.txt", "test\n"+testString+"\nhello\nworld\n") + tail := tailTest.StartTail("test.txt", Config{Follow: true, Location: nil, MaxLineSize: 4097}) + go tailTest.VerifyTailOutput(tail, []string{"test", testString, "hello", "world"}, false) + + // Delete after a reasonable delay, to give tail sufficient time + // to read all lines. + <-time.After(100 * time.Millisecond) + tailTest.RemoveFile("test.txt") + tailTest.Cleanup(tail, true) +} + +func TestLocationFull(t *testing.T) { + tailTest := NewTailTest("location-full", t) + tailTest.CreateFile("test.txt", "hello\nworld\n") + tail := tailTest.StartTail("test.txt", Config{Follow: true, Location: nil}) + go tailTest.VerifyTailOutput(tail, []string{"hello", "world"}, false) + + // Delete after a reasonable delay, to give tail sufficient time + // to read all lines. + <-time.After(100 * time.Millisecond) + tailTest.RemoveFile("test.txt") + tailTest.Cleanup(tail, true) +} + +func TestLocationFullDontFollow(t *testing.T) { + tailTest := NewTailTest("location-full-dontfollow", t) + tailTest.CreateFile("test.txt", "hello\nworld\n") + tail := tailTest.StartTail("test.txt", Config{Follow: false, Location: nil}) + go tailTest.VerifyTailOutput(tail, []string{"hello", "world"}, false) + + // Add more data only after reasonable delay. + <-time.After(100 * time.Millisecond) + tailTest.AppendFile("test.txt", "more\ndata\n") + <-time.After(100 * time.Millisecond) + + tailTest.Cleanup(tail, true) +} + +func TestLocationEnd(t *testing.T) { + tailTest := NewTailTest("location-end", t) + tailTest.CreateFile("test.txt", "hello\nworld\n") + tail := tailTest.StartTail("test.txt", Config{Follow: true, Location: &SeekInfo{0, os.SEEK_END}}) + go tailTest.VerifyTailOutput(tail, []string{"more", "data"}, false) + + <-time.After(100 * time.Millisecond) + tailTest.AppendFile("test.txt", "more\ndata\n") + + // Delete after a reasonable delay, to give tail sufficient time + // to read all lines. + <-time.After(100 * time.Millisecond) + tailTest.RemoveFile("test.txt") + tailTest.Cleanup(tail, true) +} + +func TestLocationMiddle(t *testing.T) { + // Test reading from middle. + tailTest := NewTailTest("location-middle", t) + tailTest.CreateFile("test.txt", "hello\nworld\n") + tail := tailTest.StartTail("test.txt", Config{Follow: true, Location: &SeekInfo{-6, os.SEEK_END}}) + go tailTest.VerifyTailOutput(tail, []string{"world", "more", "data"}, false) + + <-time.After(100 * time.Millisecond) + tailTest.AppendFile("test.txt", "more\ndata\n") + + // Delete after a reasonable delay, to give tail sufficient time + // to read all lines. + <-time.After(100 * time.Millisecond) + tailTest.RemoveFile("test.txt") + tailTest.Cleanup(tail, true) +} + +// The use of polling file watcher could affect file rotation +// (detected via renames), so test these explicitly. + +func TestReOpenInotify(t *testing.T) { + reOpen(t, false) +} + +func TestReOpenPolling(t *testing.T) { + reOpen(t, true) +} + +// The use of polling file watcher could affect file rotation +// (detected via renames), so test these explicitly. + +func TestReSeekInotify(t *testing.T) { + reSeek(t, false) +} + +func TestReSeekPolling(t *testing.T) { + reSeek(t, true) +} + +func TestRateLimiting(t *testing.T) { + tailTest := NewTailTest("rate-limiting", t) + tailTest.CreateFile("test.txt", "hello\nworld\nagain\nextra\n") + config := Config{ + Follow: true, + RateLimiter: ratelimiter.NewLeakyBucket(2, time.Second)} + leakybucketFull := "Too much log activity; waiting a second before resuming tailing" + tail := tailTest.StartTail("test.txt", config) + + // TODO: also verify that tail resumes after the cooloff period. + go tailTest.VerifyTailOutput(tail, []string{ + "hello", "world", "again", + leakybucketFull, + "more", "data", + leakybucketFull}, false) + + // Add more data only after reasonable delay. + <-time.After(1200 * time.Millisecond) + tailTest.AppendFile("test.txt", "more\ndata\n") + + // Delete after a reasonable delay, to give tail sufficient time + // to read all lines. + <-time.After(100 * time.Millisecond) + tailTest.RemoveFile("test.txt") + + tailTest.Cleanup(tail, true) +} + +func TestTell(t *testing.T) { + tailTest := NewTailTest("tell-position", t) + tailTest.CreateFile("test.txt", "hello\nworld\nagain\nmore\n") + config := Config{ + Follow: false, + Location: &SeekInfo{0, os.SEEK_SET}} + tail := tailTest.StartTail("test.txt", config) + // read noe line + <-tail.Lines + offset, err := tail.Tell() + if err != nil { + tailTest.Errorf("Tell return error: %s", err.Error()) + } + tail.Done() + // tail.close() + + config = Config{ + Follow: false, + Location: &SeekInfo{offset, os.SEEK_SET}} + tail = tailTest.StartTail("test.txt", config) + for l := range tail.Lines { + // it may readed one line in the chan(tail.Lines), + // so it may lost one line. + if l.Text != "world" && l.Text != "again" { + tailTest.Fatalf("mismatch; expected world or again, but got %s", + l.Text) + } + break + } + tailTest.RemoveFile("test.txt") + tail.Done() + tail.Cleanup() +} + +func TestBlockUntilExists(t *testing.T) { + tailTest := NewTailTest("block-until-file-exists", t) + config := Config{ + Follow: true, + } + tail := tailTest.StartTail("test.txt", config) + go func() { + time.Sleep(100 * time.Millisecond) + tailTest.CreateFile("test.txt", "hello world\n") + }() + for l := range tail.Lines { + if l.Text != "hello world" { + tailTest.Fatalf("mismatch; expected hello world, but got %s", + l.Text) + } + break + } + tailTest.RemoveFile("test.txt") + tail.Stop() + tail.Cleanup() +} + +func maxLineSize(t *testing.T, follow bool, fileContent string, expected []string) { + tailTest := NewTailTest("maxlinesize", t) + tailTest.CreateFile("test.txt", fileContent) + tail := tailTest.StartTail("test.txt", Config{Follow: follow, Location: nil, MaxLineSize: 3}) + go tailTest.VerifyTailOutput(tail, expected, false) + + // Delete after a reasonable delay, to give tail sufficient time + // to read all lines. + <-time.After(100 * time.Millisecond) + tailTest.RemoveFile("test.txt") + tailTest.Cleanup(tail, true) +} + +func reOpen(t *testing.T, poll bool) { + var name string + var delay time.Duration + if poll { + name = "reopen-polling" + delay = 300 * time.Millisecond // account for POLL_DURATION + } else { + name = "reopen-inotify" + delay = 100 * time.Millisecond + } + tailTest := NewTailTest(name, t) + tailTest.CreateFile("test.txt", "hello\nworld\n") + tail := tailTest.StartTail( + "test.txt", + Config{Follow: true, ReOpen: true, Poll: poll}) + content := []string{"hello", "world", "more", "data", "endofworld"} + go tailTest.ReadLines(tail, content) + + // deletion must trigger reopen + <-time.After(delay) + tailTest.RemoveFile("test.txt") + <-time.After(delay) + tailTest.CreateFile("test.txt", "more\ndata\n") + + // rename must trigger reopen + <-time.After(delay) + tailTest.RenameFile("test.txt", "test.txt.rotated") + <-time.After(delay) + tailTest.CreateFile("test.txt", "endofworld\n") + + // Delete after a reasonable delay, to give tail sufficient time + // to read all lines. + <-time.After(delay) + tailTest.RemoveFile("test.txt") + <-time.After(delay) + + // Do not bother with stopping as it could kill the tomb during + // the reading of data written above. Timings can vary based on + // test environment. + tail.Cleanup() +} + +func reSeek(t *testing.T, poll bool) { + var name string + if poll { + name = "reseek-polling" + } else { + name = "reseek-inotify" + } + tailTest := NewTailTest(name, t) + tailTest.CreateFile("test.txt", "a really long string goes here\nhello\nworld\n") + tail := tailTest.StartTail( + "test.txt", + Config{Follow: true, ReOpen: false, Poll: poll}) + + go tailTest.VerifyTailOutput(tail, []string{ + "a really long string goes here", "hello", "world", "h311o", "w0r1d", "endofworld"}, false) + + // truncate now + <-time.After(100 * time.Millisecond) + tailTest.TruncateFile("test.txt", "h311o\nw0r1d\nendofworld\n") + + // Delete after a reasonable delay, to give tail sufficient time + // to read all lines. + <-time.After(100 * time.Millisecond) + tailTest.RemoveFile("test.txt") + + // Do not bother with stopping as it could kill the tomb during + // the reading of data written above. Timings can vary based on + // test environment. + tailTest.Cleanup(tail, false) +} + +// Test library + +type TailTest struct { + Name string + path string + done chan struct{} + *testing.T +} + +func NewTailTest(name string, t *testing.T) TailTest { + tt := TailTest{name, ".test/" + name, make(chan struct{}), t} + err := os.MkdirAll(tt.path, os.ModeTemporary|0700) + if err != nil { + tt.Fatal(err) + } + + return tt +} + +func (t TailTest) CreateFile(name string, contents string) { + err := ioutil.WriteFile(t.path+"/"+name, []byte(contents), 0600) + if err != nil { + t.Fatal(err) + } +} + +func (t TailTest) RemoveFile(name string) { + err := os.Remove(t.path + "/" + name) + if err != nil { + t.Fatal(err) + } +} + +func (t TailTest) RenameFile(oldname string, newname string) { + oldname = t.path + "/" + oldname + newname = t.path + "/" + newname + err := os.Rename(oldname, newname) + if err != nil { + t.Fatal(err) + } +} + +func (t TailTest) AppendFile(name string, contents string) { + f, err := os.OpenFile(t.path+"/"+name, os.O_APPEND|os.O_WRONLY, 0600) + if err != nil { + t.Fatal(err) + } + defer f.Close() + _, err = f.WriteString(contents) + if err != nil { + t.Fatal(err) + } +} + +func (t TailTest) TruncateFile(name string, contents string) { + f, err := os.OpenFile(t.path+"/"+name, os.O_TRUNC|os.O_WRONLY, 0600) + if err != nil { + t.Fatal(err) + } + defer f.Close() + _, err = f.WriteString(contents) + if err != nil { + t.Fatal(err) + } +} + +func (t TailTest) StartTail(name string, config Config) *Tail { + tail, err := TailFile(t.path+"/"+name, config) + if err != nil { + t.Fatal(err) + } + return tail +} + +func (t TailTest) VerifyTailOutput(tail *Tail, lines []string, expectEOF bool) { + defer close(t.done) + t.ReadLines(tail, lines) + // It is important to do this if only EOF is expected + // otherwise we could block on <-tail.Lines + if expectEOF { + line, ok := <-tail.Lines + if ok { + t.Fatalf("more content from tail: %+v", line) + } + } +} + +func (t TailTest) ReadLines(tail *Tail, lines []string) { + for idx, line := range lines { + tailedLine, ok := <-tail.Lines + if !ok { + // tail.Lines is closed and empty. + err := tail.Err() + if err != nil { + t.Fatalf("tail ended with error: %v", err) + } + t.Fatalf("tail ended early; expecting more: %v", lines[idx:]) + } + if tailedLine == nil { + t.Fatalf("tail.Lines returned nil; not possible") + } + // Note: not checking .Err as the `lines` argument is designed + // to match error strings as well. + if tailedLine.Text != line { + t.Fatalf( + "unexpected line/err from tail: "+ + "expecting <<%s>>>, but got <<<%s>>>", + line, tailedLine.Text) + } + } +} + +func (t TailTest) Cleanup(tail *Tail, stop bool) { + <-t.done + if stop { + tail.Stop() + } + tail.Cleanup() +} diff --git a/vendor/github.com/hpcloud/tail/tail_windows.go b/vendor/github.com/hpcloud/tail/tail_windows.go new file mode 100644 index 0000000..ef2cfca --- /dev/null +++ b/vendor/github.com/hpcloud/tail/tail_windows.go @@ -0,0 +1,12 @@ +// +build windows + +package tail + +import ( + "github.com/hpcloud/tail/winfile" + "os" +) + +func OpenFile(name string) (file *os.File, err error) { + return winfile.OpenFile(name, os.O_RDONLY, 0) +} diff --git a/vendor/github.com/hpcloud/tail/util/util.go b/vendor/github.com/hpcloud/tail/util/util.go new file mode 100644 index 0000000..54151fe --- /dev/null +++ b/vendor/github.com/hpcloud/tail/util/util.go @@ -0,0 +1,48 @@ +// Copyright (c) 2015 HPE Software Inc. All rights reserved. +// Copyright (c) 2013 ActiveState Software Inc. All rights reserved. + +package util + +import ( + "fmt" + "log" + "os" + "runtime/debug" +) + +type Logger struct { + *log.Logger +} + +var LOGGER = &Logger{log.New(os.Stderr, "", log.LstdFlags)} + +// fatal is like panic except it displays only the current goroutine's stack. +func Fatal(format string, v ...interface{}) { + // https://github.com/hpcloud/log/blob/master/log.go#L45 + LOGGER.Output(2, fmt.Sprintf("FATAL -- "+format, v...)+"\n"+string(debug.Stack())) + os.Exit(1) +} + +// partitionString partitions the string into chunks of given size, +// with the last chunk of variable size. +func PartitionString(s string, chunkSize int) []string { + if chunkSize <= 0 { + panic("invalid chunkSize") + } + length := len(s) + chunks := 1 + length/chunkSize + start := 0 + end := chunkSize + parts := make([]string, 0, chunks) + for { + if end > length { + end = length + } + parts = append(parts, s[start:end]) + if end == length { + break + } + start, end = end, end+chunkSize + } + return parts +} diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/.gitignore b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/.gitignore new file mode 100644 index 0000000..4cd0cba --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/.gitignore @@ -0,0 +1,6 @@ +# Setup a Global .gitignore for OS and editor generated files: +# https://help.github.com/articles/ignoring-files +# git config --global core.excludesfile ~/.gitignore_global + +.vagrant +*.sublime-project diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/.travis.yml b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/.travis.yml new file mode 100644 index 0000000..1b5151f --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/.travis.yml @@ -0,0 +1,20 @@ +sudo: false +language: go + +go: + - 1.5.1 + +before_script: + - go get -u github.com/golang/lint/golint + +after_script: + - test -z "$(gofmt -s -l -w . | tee /dev/stderr)" + - test -z "$(golint ./... | tee /dev/stderr)" + - go vet ./... + +os: + - linux + - osx + +notifications: + email: false diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/AUTHORS b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/AUTHORS new file mode 100644 index 0000000..4e0e828 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/AUTHORS @@ -0,0 +1,34 @@ +# Names should be added to this file as +# Name or Organization +# The email address is not required for organizations. + +# You can update this list using the following command: +# +# $ git shortlog -se | awk '{print $2 " " $3 " " $4}' + +# Please keep the list sorted. + +Adrien Bustany +Caleb Spare +Case Nelson +Chris Howey +Christoffer Buchholz +Dave Cheney +Francisco Souza +Hari haran +John C Barstow +Kelvin Fo +Matt Layher +Nathan Youngman +Paul Hammond +Pieter Droogendijk +Pursuit92 +Rob Figueiredo +Soge Zhang +Tilak Sharma +Travis Cline +Tudor Golubenco +Yukang +bronze1man +debrando +henrikedwards diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/CHANGELOG.md b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/CHANGELOG.md new file mode 100644 index 0000000..b0bfea0 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/CHANGELOG.md @@ -0,0 +1,267 @@ +# Changelog + +## v1.2.1 / 2015-10-14 + +* kqueue: don't watch named pipes [#98](https://github.com/go-fsnotify/fsnotify/pull/98) (thanks @evanphx) + +## v1.2.0 / 2015-02-08 + +* inotify: use epoll to wake up readEvents [#66](https://github.com/go-fsnotify/fsnotify/pull/66) (thanks @PieterD) +* inotify: closing watcher should now always shut down goroutine [#63](https://github.com/go-fsnotify/fsnotify/pull/63) (thanks @PieterD) +* kqueue: close kqueue after removing watches, fixes [#59](https://github.com/go-fsnotify/fsnotify/issues/59) + +## v1.1.1 / 2015-02-05 + +* inotify: Retry read on EINTR [#61](https://github.com/go-fsnotify/fsnotify/issues/61) (thanks @PieterD) + +## v1.1.0 / 2014-12-12 + +* kqueue: rework internals [#43](https://github.com/go-fsnotify/fsnotify/pull/43) + * add low-level functions + * only need to store flags on directories + * less mutexes [#13](https://github.com/go-fsnotify/fsnotify/issues/13) + * done can be an unbuffered channel + * remove calls to os.NewSyscallError +* More efficient string concatenation for Event.String() [#52](https://github.com/go-fsnotify/fsnotify/pull/52) (thanks @mdlayher) +* kqueue: fix regression in rework causing subdirectories to be watched [#48](https://github.com/go-fsnotify/fsnotify/issues/48) +* kqueue: cleanup internal watch before sending remove event [#51](https://github.com/go-fsnotify/fsnotify/issues/51) + +## v1.0.4 / 2014-09-07 + +* kqueue: add dragonfly to the build tags. +* Rename source code files, rearrange code so exported APIs are at the top. +* Add done channel to example code. [#37](https://github.com/go-fsnotify/fsnotify/pull/37) (thanks @chenyukang) + +## v1.0.3 / 2014-08-19 + +* [Fix] Windows MOVED_TO now translates to Create like on BSD and Linux. [#36](https://github.com/go-fsnotify/fsnotify/issues/36) + +## v1.0.2 / 2014-08-17 + +* [Fix] Missing create events on OS X. [#14](https://github.com/go-fsnotify/fsnotify/issues/14) (thanks @zhsso) +* [Fix] Make ./path and path equivalent. (thanks @zhsso) + +## v1.0.0 / 2014-08-15 + +* [API] Remove AddWatch on Windows, use Add. +* Improve documentation for exported identifiers. [#30](https://github.com/go-fsnotify/fsnotify/issues/30) +* Minor updates based on feedback from golint. + +## dev / 2014-07-09 + +* Moved to [github.com/go-fsnotify/fsnotify](https://github.com/go-fsnotify/fsnotify). +* Use os.NewSyscallError instead of returning errno (thanks @hariharan-uno) + +## dev / 2014-07-04 + +* kqueue: fix incorrect mutex used in Close() +* Update example to demonstrate usage of Op. + +## dev / 2014-06-28 + +* [API] Don't set the Write Op for attribute notifications [#4](https://github.com/go-fsnotify/fsnotify/issues/4) +* Fix for String() method on Event (thanks Alex Brainman) +* Don't build on Plan 9 or Solaris (thanks @4ad) + +## dev / 2014-06-21 + +* Events channel of type Event rather than *Event. +* [internal] use syscall constants directly for inotify and kqueue. +* [internal] kqueue: rename events to kevents and fileEvent to event. + +## dev / 2014-06-19 + +* Go 1.3+ required on Windows (uses syscall.ERROR_MORE_DATA internally). +* [internal] remove cookie from Event struct (unused). +* [internal] Event struct has the same definition across every OS. +* [internal] remove internal watch and removeWatch methods. + +## dev / 2014-06-12 + +* [API] Renamed Watch() to Add() and RemoveWatch() to Remove(). +* [API] Pluralized channel names: Events and Errors. +* [API] Renamed FileEvent struct to Event. +* [API] Op constants replace methods like IsCreate(). + +## dev / 2014-06-12 + +* Fix data race on kevent buffer (thanks @tilaks) [#98](https://github.com/howeyc/fsnotify/pull/98) + +## dev / 2014-05-23 + +* [API] Remove current implementation of WatchFlags. + * current implementation doesn't take advantage of OS for efficiency + * provides little benefit over filtering events as they are received, but has extra bookkeeping and mutexes + * no tests for the current implementation + * not fully implemented on Windows [#93](https://github.com/howeyc/fsnotify/issues/93#issuecomment-39285195) + +## v0.9.3 / 2014-12-31 + +* kqueue: cleanup internal watch before sending remove event [#51](https://github.com/go-fsnotify/fsnotify/issues/51) + +## v0.9.2 / 2014-08-17 + +* [Backport] Fix missing create events on OS X. [#14](https://github.com/go-fsnotify/fsnotify/issues/14) (thanks @zhsso) + +## v0.9.1 / 2014-06-12 + +* Fix data race on kevent buffer (thanks @tilaks) [#98](https://github.com/howeyc/fsnotify/pull/98) + +## v0.9.0 / 2014-01-17 + +* IsAttrib() for events that only concern a file's metadata [#79][] (thanks @abustany) +* [Fix] kqueue: fix deadlock [#77][] (thanks @cespare) +* [NOTICE] Development has moved to `code.google.com/p/go.exp/fsnotify` in preparation for inclusion in the Go standard library. + +## v0.8.12 / 2013-11-13 + +* [API] Remove FD_SET and friends from Linux adapter + +## v0.8.11 / 2013-11-02 + +* [Doc] Add Changelog [#72][] (thanks @nathany) +* [Doc] Spotlight and double modify events on OS X [#62][] (reported by @paulhammond) + +## v0.8.10 / 2013-10-19 + +* [Fix] kqueue: remove file watches when parent directory is removed [#71][] (reported by @mdwhatcott) +* [Fix] kqueue: race between Close and readEvents [#70][] (reported by @bernerdschaefer) +* [Doc] specify OS-specific limits in README (thanks @debrando) + +## v0.8.9 / 2013-09-08 + +* [Doc] Contributing (thanks @nathany) +* [Doc] update package path in example code [#63][] (thanks @paulhammond) +* [Doc] GoCI badge in README (Linux only) [#60][] +* [Doc] Cross-platform testing with Vagrant [#59][] (thanks @nathany) + +## v0.8.8 / 2013-06-17 + +* [Fix] Windows: handle `ERROR_MORE_DATA` on Windows [#49][] (thanks @jbowtie) + +## v0.8.7 / 2013-06-03 + +* [API] Make syscall flags internal +* [Fix] inotify: ignore event changes +* [Fix] race in symlink test [#45][] (reported by @srid) +* [Fix] tests on Windows +* lower case error messages + +## v0.8.6 / 2013-05-23 + +* kqueue: Use EVT_ONLY flag on Darwin +* [Doc] Update README with full example + +## v0.8.5 / 2013-05-09 + +* [Fix] inotify: allow monitoring of "broken" symlinks (thanks @tsg) + +## v0.8.4 / 2013-04-07 + +* [Fix] kqueue: watch all file events [#40][] (thanks @ChrisBuchholz) + +## v0.8.3 / 2013-03-13 + +* [Fix] inoitfy/kqueue memory leak [#36][] (reported by @nbkolchin) +* [Fix] kqueue: use fsnFlags for watching a directory [#33][] (reported by @nbkolchin) + +## v0.8.2 / 2013-02-07 + +* [Doc] add Authors +* [Fix] fix data races for map access [#29][] (thanks @fsouza) + +## v0.8.1 / 2013-01-09 + +* [Fix] Windows path separators +* [Doc] BSD License + +## v0.8.0 / 2012-11-09 + +* kqueue: directory watching improvements (thanks @vmirage) +* inotify: add `IN_MOVED_TO` [#25][] (requested by @cpisto) +* [Fix] kqueue: deleting watched directory [#24][] (reported by @jakerr) + +## v0.7.4 / 2012-10-09 + +* [Fix] inotify: fixes from https://codereview.appspot.com/5418045/ (ugorji) +* [Fix] kqueue: preserve watch flags when watching for delete [#21][] (reported by @robfig) +* [Fix] kqueue: watch the directory even if it isn't a new watch (thanks @robfig) +* [Fix] kqueue: modify after recreation of file + +## v0.7.3 / 2012-09-27 + +* [Fix] kqueue: watch with an existing folder inside the watched folder (thanks @vmirage) +* [Fix] kqueue: no longer get duplicate CREATE events + +## v0.7.2 / 2012-09-01 + +* kqueue: events for created directories + +## v0.7.1 / 2012-07-14 + +* [Fix] for renaming files + +## v0.7.0 / 2012-07-02 + +* [Feature] FSNotify flags +* [Fix] inotify: Added file name back to event path + +## v0.6.0 / 2012-06-06 + +* kqueue: watch files after directory created (thanks @tmc) + +## v0.5.1 / 2012-05-22 + +* [Fix] inotify: remove all watches before Close() + +## v0.5.0 / 2012-05-03 + +* [API] kqueue: return errors during watch instead of sending over channel +* kqueue: match symlink behavior on Linux +* inotify: add `DELETE_SELF` (requested by @taralx) +* [Fix] kqueue: handle EINTR (reported by @robfig) +* [Doc] Godoc example [#1][] (thanks @davecheney) + +## v0.4.0 / 2012-03-30 + +* Go 1 released: build with go tool +* [Feature] Windows support using winfsnotify +* Windows does not have attribute change notifications +* Roll attribute notifications into IsModify + +## v0.3.0 / 2012-02-19 + +* kqueue: add files when watch directory + +## v0.2.0 / 2011-12-30 + +* update to latest Go weekly code + +## v0.1.0 / 2011-10-19 + +* kqueue: add watch on file creation to match inotify +* kqueue: create file event +* inotify: ignore `IN_IGNORED` events +* event String() +* linux: common FileEvent functions +* initial commit + +[#79]: https://github.com/howeyc/fsnotify/pull/79 +[#77]: https://github.com/howeyc/fsnotify/pull/77 +[#72]: https://github.com/howeyc/fsnotify/issues/72 +[#71]: https://github.com/howeyc/fsnotify/issues/71 +[#70]: https://github.com/howeyc/fsnotify/issues/70 +[#63]: https://github.com/howeyc/fsnotify/issues/63 +[#62]: https://github.com/howeyc/fsnotify/issues/62 +[#60]: https://github.com/howeyc/fsnotify/issues/60 +[#59]: https://github.com/howeyc/fsnotify/issues/59 +[#49]: https://github.com/howeyc/fsnotify/issues/49 +[#45]: https://github.com/howeyc/fsnotify/issues/45 +[#40]: https://github.com/howeyc/fsnotify/issues/40 +[#36]: https://github.com/howeyc/fsnotify/issues/36 +[#33]: https://github.com/howeyc/fsnotify/issues/33 +[#29]: https://github.com/howeyc/fsnotify/issues/29 +[#25]: https://github.com/howeyc/fsnotify/issues/25 +[#24]: https://github.com/howeyc/fsnotify/issues/24 +[#21]: https://github.com/howeyc/fsnotify/issues/21 + diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/CONTRIBUTING.md b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/CONTRIBUTING.md new file mode 100644 index 0000000..0f377f3 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/CONTRIBUTING.md @@ -0,0 +1,77 @@ +# Contributing + +## Issues + +* Request features and report bugs using the [GitHub Issue Tracker](https://github.com/go-fsnotify/fsnotify/issues). +* Please indicate the platform you are using fsnotify on. +* A code example to reproduce the problem is appreciated. + +## Pull Requests + +### Contributor License Agreement + +fsnotify is derived from code in the [golang.org/x/exp](https://godoc.org/golang.org/x/exp) package and it may be included [in the standard library](https://github.com/go-fsnotify/fsnotify/issues/1) in the future. Therefore fsnotify carries the same [LICENSE](https://github.com/go-fsnotify/fsnotify/blob/master/LICENSE) as Go. Contributors retain their copyright, so you need to fill out a short form before we can accept your contribution: [Google Individual Contributor License Agreement](https://developers.google.com/open-source/cla/individual). + +Please indicate that you have signed the CLA in your pull request. + +### How fsnotify is Developed + +* Development is done on feature branches. +* Tests are run on BSD, Linux, OS X and Windows. +* Pull requests are reviewed and [applied to master][am] using [hub][]. + * Maintainers may modify or squash commits rather than asking contributors to. +* To issue a new release, the maintainers will: + * Update the CHANGELOG + * Tag a version, which will become available through gopkg.in. + +### How to Fork + +For smooth sailing, always use the original import path. Installing with `go get` makes this easy. + +1. Install from GitHub (`go get -u github.com/go-fsnotify/fsnotify`) +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Ensure everything works and the tests pass (see below) +4. Commit your changes (`git commit -am 'Add some feature'`) + +Contribute upstream: + +1. Fork fsnotify on GitHub +2. Add your remote (`git remote add fork git@github.com:mycompany/repo.git`) +3. Push to the branch (`git push fork my-new-feature`) +4. Create a new Pull Request on GitHub + +This workflow is [thoroughly explained by Katrina Owen](https://blog.splice.com/contributing-open-source-git-repositories-go/). + +### Testing + +fsnotify uses build tags to compile different code on Linux, BSD, OS X, and Windows. + +Before doing a pull request, please do your best to test your changes on multiple platforms, and list which platforms you were able/unable to test on. + +To aid in cross-platform testing there is a Vagrantfile for Linux and BSD. + +* Install [Vagrant](http://www.vagrantup.com/) and [VirtualBox](https://www.virtualbox.org/) +* Setup [Vagrant Gopher](https://github.com/nathany/vagrant-gopher) in your `src` folder. +* Run `vagrant up` from the project folder. You can also setup just one box with `vagrant up linux` or `vagrant up bsd` (note: the BSD box doesn't support Windows hosts at this time, and NFS may prompt for your host OS password) +* Once setup, you can run the test suite on a given OS with a single command `vagrant ssh linux -c 'cd go-fsnotify/fsnotify; go test'`. +* When you're done, you will want to halt or destroy the Vagrant boxes. + +Notice: fsnotify file system events won't trigger in shared folders. The tests get around this limitation by using the /tmp directory. + +Right now there is no equivalent solution for Windows and OS X, but there are Windows VMs [freely available from Microsoft](http://www.modern.ie/en-us/virtualization-tools#downloads). + +### Maintainers + +Help maintaining fsnotify is welcome. To be a maintainer: + +* Submit a pull request and sign the CLA as above. +* You must be able to run the test suite on Mac, Windows, Linux and BSD. + +To keep master clean, the fsnotify project uses the "apply mail" workflow outlined in Nathaniel Talbott's post ["Merge pull request" Considered Harmful][am]. This requires installing [hub][]. + +All code changes should be internal pull requests. + +Releases are tagged using [Semantic Versioning](http://semver.org/). + +[hub]: https://github.com/github/hub +[am]: http://blog.spreedly.com/2014/06/24/merge-pull-request-considered-harmful/#.VGa5yZPF_Zs diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/LICENSE b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/LICENSE new file mode 100644 index 0000000..f21e540 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2012 The Go Authors. All rights reserved. +Copyright (c) 2012 fsnotify Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/README.md b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/README.md new file mode 100644 index 0000000..736c0d2 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/README.md @@ -0,0 +1,64 @@ +# File system notifications for Go + +[![GoDoc](https://godoc.org/gopkg.in/fsnotify.v1?status.svg)](https://godoc.org/gopkg.in/fsnotify.v1) [![Coverage](http://gocover.io/_badge/github.com/go-fsnotify/fsnotify)](http://gocover.io/github.com/go-fsnotify/fsnotify) + +Go 1.3+ required. + +Cross platform: Windows, Linux, BSD and OS X. + +|Adapter |OS |Status | +|----------|----------|----------| +|inotify |Linux, Android\*|Supported [![Build Status](https://travis-ci.org/go-fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/go-fsnotify/fsnotify)| +|kqueue |BSD, OS X, iOS\*|Supported [![Build Status](https://travis-ci.org/go-fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/go-fsnotify/fsnotify)| +|ReadDirectoryChangesW|Windows|Supported [![Build status](https://ci.appveyor.com/api/projects/status/ivwjubaih4r0udeh/branch/master?svg=true)](https://ci.appveyor.com/project/NathanYoungman/fsnotify/branch/master)| +|FSEvents |OS X |[Planned](https://github.com/go-fsnotify/fsnotify/issues/11)| +|FEN |Solaris 11 |[Planned](https://github.com/go-fsnotify/fsnotify/issues/12)| +|fanotify |Linux 2.6.37+ | | +|USN Journals |Windows |[Maybe](https://github.com/go-fsnotify/fsnotify/issues/53)| +|Polling |*All* |[Maybe](https://github.com/go-fsnotify/fsnotify/issues/9)| + +\* Android and iOS are untested. + +Please see [the documentation](https://godoc.org/gopkg.in/fsnotify.v1) for usage. Consult the [Wiki](https://github.com/go-fsnotify/fsnotify/wiki) for the FAQ and further information. + +## API stability + +Two major versions of fsnotify exist. + +**[fsnotify.v0](https://gopkg.in/fsnotify.v0)** is API-compatible with [howeyc/fsnotify](https://godoc.org/github.com/howeyc/fsnotify). Bugfixes *may* be backported, but I recommend upgrading to v1. + +```go +import "gopkg.in/fsnotify.v0" +``` + +\* Refer to the package as fsnotify (without the .v0 suffix). + +**[fsnotify.v1](https://gopkg.in/fsnotify.v1)** provides [a new API](https://godoc.org/gopkg.in/fsnotify.v1) based on [this design document](http://goo.gl/MrYxyA). You can import v1 with: + +```go +import "gopkg.in/fsnotify.v1" +``` + +Further API changes are [planned](https://github.com/go-fsnotify/fsnotify/milestones), but a new major revision will be tagged, so you can depend on the v1 API. + +**Master** may have unreleased changes. Use it to test the very latest code or when [contributing][], but don't expect it to remain API-compatible: + +```go +import "github.com/go-fsnotify/fsnotify" +``` + +## Contributing + +Please refer to [CONTRIBUTING][] before opening an issue or pull request. + +## Example + +See [example_test.go](https://github.com/go-fsnotify/fsnotify/blob/master/example_test.go). + +[contributing]: https://github.com/go-fsnotify/fsnotify/blob/master/CONTRIBUTING.md + +## Related Projects + +* [notify](https://github.com/rjeczalik/notify) +* [fsevents](https://github.com/go-fsnotify/fsevents) + diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/fsnotify.go b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/fsnotify.go new file mode 100644 index 0000000..c899ee0 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/fsnotify.go @@ -0,0 +1,62 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !plan9,!solaris + +// Package fsnotify provides a platform-independent interface for file system notifications. +package fsnotify + +import ( + "bytes" + "fmt" +) + +// Event represents a single file system notification. +type Event struct { + Name string // Relative path to the file or directory. + Op Op // File operation that triggered the event. +} + +// Op describes a set of file operations. +type Op uint32 + +// These are the generalized file operations that can trigger a notification. +const ( + Create Op = 1 << iota + Write + Remove + Rename + Chmod +) + +// String returns a string representation of the event in the form +// "file: REMOVE|WRITE|..." +func (e Event) String() string { + // Use a buffer for efficient string concatenation + var buffer bytes.Buffer + + if e.Op&Create == Create { + buffer.WriteString("|CREATE") + } + if e.Op&Remove == Remove { + buffer.WriteString("|REMOVE") + } + if e.Op&Write == Write { + buffer.WriteString("|WRITE") + } + if e.Op&Rename == Rename { + buffer.WriteString("|RENAME") + } + if e.Op&Chmod == Chmod { + buffer.WriteString("|CHMOD") + } + + // If buffer remains empty, return no event names + if buffer.Len() == 0 { + return fmt.Sprintf("%q: ", e.Name) + } + + // Return a list of event names, with leading pipe character stripped + return fmt.Sprintf("%q: %s", e.Name, buffer.String()[1:]) +} diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/inotify.go b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/inotify.go new file mode 100644 index 0000000..d7759ec --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/inotify.go @@ -0,0 +1,306 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package fsnotify + +import ( + "errors" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "sync" + "syscall" + "unsafe" +) + +// Watcher watches a set of files, delivering events to a channel. +type Watcher struct { + Events chan Event + Errors chan error + mu sync.Mutex // Map access + fd int + poller *fdPoller + watches map[string]*watch // Map of inotify watches (key: path) + paths map[int]string // Map of watched paths (key: watch descriptor) + done chan struct{} // Channel for sending a "quit message" to the reader goroutine + doneResp chan struct{} // Channel to respond to Close +} + +// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events. +func NewWatcher() (*Watcher, error) { + // Create inotify fd + fd, errno := syscall.InotifyInit() + if fd == -1 { + return nil, errno + } + // Create epoll + poller, err := newFdPoller(fd) + if err != nil { + syscall.Close(fd) + return nil, err + } + w := &Watcher{ + fd: fd, + poller: poller, + watches: make(map[string]*watch), + paths: make(map[int]string), + Events: make(chan Event), + Errors: make(chan error), + done: make(chan struct{}), + doneResp: make(chan struct{}), + } + + go w.readEvents() + return w, nil +} + +func (w *Watcher) isClosed() bool { + select { + case <-w.done: + return true + default: + return false + } +} + +// Close removes all watches and closes the events channel. +func (w *Watcher) Close() error { + if w.isClosed() { + return nil + } + + // Send 'close' signal to goroutine, and set the Watcher to closed. + close(w.done) + + // Wake up goroutine + w.poller.wake() + + // Wait for goroutine to close + <-w.doneResp + + return nil +} + +// Add starts watching the named file or directory (non-recursively). +func (w *Watcher) Add(name string) error { + name = filepath.Clean(name) + if w.isClosed() { + return errors.New("inotify instance already closed") + } + + const agnosticEvents = syscall.IN_MOVED_TO | syscall.IN_MOVED_FROM | + syscall.IN_CREATE | syscall.IN_ATTRIB | syscall.IN_MODIFY | + syscall.IN_MOVE_SELF | syscall.IN_DELETE | syscall.IN_DELETE_SELF + + var flags uint32 = agnosticEvents + + w.mu.Lock() + watchEntry, found := w.watches[name] + w.mu.Unlock() + if found { + watchEntry.flags |= flags + flags |= syscall.IN_MASK_ADD + } + wd, errno := syscall.InotifyAddWatch(w.fd, name, flags) + if wd == -1 { + return errno + } + + w.mu.Lock() + w.watches[name] = &watch{wd: uint32(wd), flags: flags} + w.paths[wd] = name + w.mu.Unlock() + + return nil +} + +// Remove stops watching the named file or directory (non-recursively). +func (w *Watcher) Remove(name string) error { + name = filepath.Clean(name) + + // Fetch the watch. + w.mu.Lock() + defer w.mu.Unlock() + watch, ok := w.watches[name] + + // Remove it from inotify. + if !ok { + return fmt.Errorf("can't remove non-existent inotify watch for: %s", name) + } + // inotify_rm_watch will return EINVAL if the file has been deleted; + // the inotify will already have been removed. + // That means we can safely delete it from our watches, whatever inotify_rm_watch does. + delete(w.watches, name) + success, errno := syscall.InotifyRmWatch(w.fd, watch.wd) + if success == -1 { + // TODO: Perhaps it's not helpful to return an error here in every case. + // the only two possible errors are: + // EBADF, which happens when w.fd is not a valid file descriptor of any kind. + // EINVAL, which is when fd is not an inotify descriptor or wd is not a valid watch descriptor. + // Watch descriptors are invalidated when they are removed explicitly or implicitly; + // explicitly by inotify_rm_watch, implicitly when the file they are watching is deleted. + return errno + } + return nil +} + +type watch struct { + wd uint32 // Watch descriptor (as returned by the inotify_add_watch() syscall) + flags uint32 // inotify flags of this watch (see inotify(7) for the list of valid flags) +} + +// readEvents reads from the inotify file descriptor, converts the +// received events into Event objects and sends them via the Events channel +func (w *Watcher) readEvents() { + var ( + buf [syscall.SizeofInotifyEvent * 4096]byte // Buffer for a maximum of 4096 raw events + n int // Number of bytes read with read() + errno error // Syscall errno + ok bool // For poller.wait + ) + + defer close(w.doneResp) + defer close(w.Errors) + defer close(w.Events) + defer syscall.Close(w.fd) + defer w.poller.close() + + for { + // See if we have been closed. + if w.isClosed() { + return + } + + ok, errno = w.poller.wait() + if errno != nil { + select { + case w.Errors <- errno: + case <-w.done: + return + } + continue + } + + if !ok { + continue + } + + n, errno = syscall.Read(w.fd, buf[:]) + // If a signal interrupted execution, see if we've been asked to close, and try again. + // http://man7.org/linux/man-pages/man7/signal.7.html : + // "Before Linux 3.8, reads from an inotify(7) file descriptor were not restartable" + if errno == syscall.EINTR { + continue + } + + // syscall.Read might have been woken up by Close. If so, we're done. + if w.isClosed() { + return + } + + if n < syscall.SizeofInotifyEvent { + var err error + if n == 0 { + // If EOF is received. This should really never happen. + err = io.EOF + } else if n < 0 { + // If an error occured while reading. + err = errno + } else { + // Read was too short. + err = errors.New("notify: short read in readEvents()") + } + select { + case w.Errors <- err: + case <-w.done: + return + } + continue + } + + var offset uint32 + // We don't know how many events we just read into the buffer + // While the offset points to at least one whole event... + for offset <= uint32(n-syscall.SizeofInotifyEvent) { + // Point "raw" to the event in the buffer + raw := (*syscall.InotifyEvent)(unsafe.Pointer(&buf[offset])) + + mask := uint32(raw.Mask) + nameLen := uint32(raw.Len) + // If the event happened to the watched directory or the watched file, the kernel + // doesn't append the filename to the event, but we would like to always fill the + // the "Name" field with a valid filename. We retrieve the path of the watch from + // the "paths" map. + w.mu.Lock() + name := w.paths[int(raw.Wd)] + w.mu.Unlock() + if nameLen > 0 { + // Point "bytes" at the first byte of the filename + bytes := (*[syscall.PathMax]byte)(unsafe.Pointer(&buf[offset+syscall.SizeofInotifyEvent])) + // The filename is padded with NULL bytes. TrimRight() gets rid of those. + name += "/" + strings.TrimRight(string(bytes[0:nameLen]), "\000") + } + + event := newEvent(name, mask) + + // Send the events that are not ignored on the events channel + if !event.ignoreLinux(mask) { + select { + case w.Events <- event: + case <-w.done: + return + } + } + + // Move to the next event in the buffer + offset += syscall.SizeofInotifyEvent + nameLen + } + } +} + +// Certain types of events can be "ignored" and not sent over the Events +// channel. Such as events marked ignore by the kernel, or MODIFY events +// against files that do not exist. +func (e *Event) ignoreLinux(mask uint32) bool { + // Ignore anything the inotify API says to ignore + if mask&syscall.IN_IGNORED == syscall.IN_IGNORED { + return true + } + + // If the event is not a DELETE or RENAME, the file must exist. + // Otherwise the event is ignored. + // *Note*: this was put in place because it was seen that a MODIFY + // event was sent after the DELETE. This ignores that MODIFY and + // assumes a DELETE will come or has come if the file doesn't exist. + if !(e.Op&Remove == Remove || e.Op&Rename == Rename) { + _, statErr := os.Lstat(e.Name) + return os.IsNotExist(statErr) + } + return false +} + +// newEvent returns an platform-independent Event based on an inotify mask. +func newEvent(name string, mask uint32) Event { + e := Event{Name: name} + if mask&syscall.IN_CREATE == syscall.IN_CREATE || mask&syscall.IN_MOVED_TO == syscall.IN_MOVED_TO { + e.Op |= Create + } + if mask&syscall.IN_DELETE_SELF == syscall.IN_DELETE_SELF || mask&syscall.IN_DELETE == syscall.IN_DELETE { + e.Op |= Remove + } + if mask&syscall.IN_MODIFY == syscall.IN_MODIFY { + e.Op |= Write + } + if mask&syscall.IN_MOVE_SELF == syscall.IN_MOVE_SELF || mask&syscall.IN_MOVED_FROM == syscall.IN_MOVED_FROM { + e.Op |= Rename + } + if mask&syscall.IN_ATTRIB == syscall.IN_ATTRIB { + e.Op |= Chmod + } + return e +} diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/inotify_poller.go b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/inotify_poller.go new file mode 100644 index 0000000..3b41784 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/inotify_poller.go @@ -0,0 +1,186 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package fsnotify + +import ( + "errors" + "syscall" +) + +type fdPoller struct { + fd int // File descriptor (as returned by the inotify_init() syscall) + epfd int // Epoll file descriptor + pipe [2]int // Pipe for waking up +} + +func emptyPoller(fd int) *fdPoller { + poller := new(fdPoller) + poller.fd = fd + poller.epfd = -1 + poller.pipe[0] = -1 + poller.pipe[1] = -1 + return poller +} + +// Create a new inotify poller. +// This creates an inotify handler, and an epoll handler. +func newFdPoller(fd int) (*fdPoller, error) { + var errno error + poller := emptyPoller(fd) + defer func() { + if errno != nil { + poller.close() + } + }() + poller.fd = fd + + // Create epoll fd + poller.epfd, errno = syscall.EpollCreate(1) + if poller.epfd == -1 { + return nil, errno + } + // Create pipe; pipe[0] is the read end, pipe[1] the write end. + errno = syscall.Pipe2(poller.pipe[:], syscall.O_NONBLOCK) + if errno != nil { + return nil, errno + } + + // Register inotify fd with epoll + event := syscall.EpollEvent{ + Fd: int32(poller.fd), + Events: syscall.EPOLLIN, + } + errno = syscall.EpollCtl(poller.epfd, syscall.EPOLL_CTL_ADD, poller.fd, &event) + if errno != nil { + return nil, errno + } + + // Register pipe fd with epoll + event = syscall.EpollEvent{ + Fd: int32(poller.pipe[0]), + Events: syscall.EPOLLIN, + } + errno = syscall.EpollCtl(poller.epfd, syscall.EPOLL_CTL_ADD, poller.pipe[0], &event) + if errno != nil { + return nil, errno + } + + return poller, nil +} + +// Wait using epoll. +// Returns true if something is ready to be read, +// false if there is not. +func (poller *fdPoller) wait() (bool, error) { + // 3 possible events per fd, and 2 fds, makes a maximum of 6 events. + // I don't know whether epoll_wait returns the number of events returned, + // or the total number of events ready. + // I decided to catch both by making the buffer one larger than the maximum. + events := make([]syscall.EpollEvent, 7) + for { + n, errno := syscall.EpollWait(poller.epfd, events, -1) + if n == -1 { + if errno == syscall.EINTR { + continue + } + return false, errno + } + if n == 0 { + // If there are no events, try again. + continue + } + if n > 6 { + // This should never happen. More events were returned than should be possible. + return false, errors.New("epoll_wait returned more events than I know what to do with") + } + ready := events[:n] + epollhup := false + epollerr := false + epollin := false + for _, event := range ready { + if event.Fd == int32(poller.fd) { + if event.Events&syscall.EPOLLHUP != 0 { + // This should not happen, but if it does, treat it as a wakeup. + epollhup = true + } + if event.Events&syscall.EPOLLERR != 0 { + // If an error is waiting on the file descriptor, we should pretend + // something is ready to read, and let syscall.Read pick up the error. + epollerr = true + } + if event.Events&syscall.EPOLLIN != 0 { + // There is data to read. + epollin = true + } + } + if event.Fd == int32(poller.pipe[0]) { + if event.Events&syscall.EPOLLHUP != 0 { + // Write pipe descriptor was closed, by us. This means we're closing down the + // watcher, and we should wake up. + } + if event.Events&syscall.EPOLLERR != 0 { + // If an error is waiting on the pipe file descriptor. + // This is an absolute mystery, and should never ever happen. + return false, errors.New("Error on the pipe descriptor.") + } + if event.Events&syscall.EPOLLIN != 0 { + // This is a regular wakeup, so we have to clear the buffer. + err := poller.clearWake() + if err != nil { + return false, err + } + } + } + } + + if epollhup || epollerr || epollin { + return true, nil + } + return false, nil + } +} + +// Close the write end of the poller. +func (poller *fdPoller) wake() error { + buf := make([]byte, 1) + n, errno := syscall.Write(poller.pipe[1], buf) + if n == -1 { + if errno == syscall.EAGAIN { + // Buffer is full, poller will wake. + return nil + } + return errno + } + return nil +} + +func (poller *fdPoller) clearWake() error { + // You have to be woken up a LOT in order to get to 100! + buf := make([]byte, 100) + n, errno := syscall.Read(poller.pipe[0], buf) + if n == -1 { + if errno == syscall.EAGAIN { + // Buffer is empty, someone else cleared our wake. + return nil + } + return errno + } + return nil +} + +// Close all poller file descriptors, but not the one passed to it. +func (poller *fdPoller) close() { + if poller.pipe[1] != -1 { + syscall.Close(poller.pipe[1]) + } + if poller.pipe[0] != -1 { + syscall.Close(poller.pipe[0]) + } + if poller.epfd != -1 { + syscall.Close(poller.epfd) + } +} diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/kqueue.go b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/kqueue.go new file mode 100644 index 0000000..f8a364d --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/kqueue.go @@ -0,0 +1,468 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd openbsd netbsd dragonfly darwin + +package fsnotify + +import ( + "errors" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "sync" + "syscall" + "time" +) + +// Watcher watches a set of files, delivering events to a channel. +type Watcher struct { + Events chan Event + Errors chan error + done chan bool // Channel for sending a "quit message" to the reader goroutine + + kq int // File descriptor (as returned by the kqueue() syscall). + + mu sync.Mutex // Protects access to watcher data + watches map[string]int // Map of watched file descriptors (key: path). + externalWatches map[string]bool // Map of watches added by user of the library. + dirFlags map[string]uint32 // Map of watched directories to fflags used in kqueue. + paths map[int]pathInfo // Map file descriptors to path names for processing kqueue events. + fileExists map[string]bool // Keep track of if we know this file exists (to stop duplicate create events). + isClosed bool // Set to true when Close() is first called +} + +type pathInfo struct { + name string + isDir bool +} + +// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events. +func NewWatcher() (*Watcher, error) { + kq, err := kqueue() + if err != nil { + return nil, err + } + + w := &Watcher{ + kq: kq, + watches: make(map[string]int), + dirFlags: make(map[string]uint32), + paths: make(map[int]pathInfo), + fileExists: make(map[string]bool), + externalWatches: make(map[string]bool), + Events: make(chan Event), + Errors: make(chan error), + done: make(chan bool), + } + + go w.readEvents() + return w, nil +} + +// Close removes all watches and closes the events channel. +func (w *Watcher) Close() error { + w.mu.Lock() + if w.isClosed { + w.mu.Unlock() + return nil + } + w.isClosed = true + w.mu.Unlock() + + w.mu.Lock() + ws := w.watches + w.mu.Unlock() + + var err error + for name := range ws { + if e := w.Remove(name); e != nil && err == nil { + err = e + } + } + + // Send "quit" message to the reader goroutine: + w.done <- true + + return nil +} + +// Add starts watching the named file or directory (non-recursively). +func (w *Watcher) Add(name string) error { + w.mu.Lock() + w.externalWatches[name] = true + w.mu.Unlock() + return w.addWatch(name, noteAllEvents) +} + +// Remove stops watching the the named file or directory (non-recursively). +func (w *Watcher) Remove(name string) error { + name = filepath.Clean(name) + w.mu.Lock() + watchfd, ok := w.watches[name] + w.mu.Unlock() + if !ok { + return fmt.Errorf("can't remove non-existent kevent watch for: %s", name) + } + + const registerRemove = syscall.EV_DELETE + if err := register(w.kq, []int{watchfd}, registerRemove, 0); err != nil { + return err + } + + syscall.Close(watchfd) + + w.mu.Lock() + isDir := w.paths[watchfd].isDir + delete(w.watches, name) + delete(w.paths, watchfd) + delete(w.dirFlags, name) + w.mu.Unlock() + + // Find all watched paths that are in this directory that are not external. + if isDir { + var pathsToRemove []string + w.mu.Lock() + for _, path := range w.paths { + wdir, _ := filepath.Split(path.name) + if filepath.Clean(wdir) == name { + if !w.externalWatches[path.name] { + pathsToRemove = append(pathsToRemove, path.name) + } + } + } + w.mu.Unlock() + for _, name := range pathsToRemove { + // Since these are internal, not much sense in propagating error + // to the user, as that will just confuse them with an error about + // a path they did not explicitly watch themselves. + w.Remove(name) + } + } + + return nil +} + +// Watch all events (except NOTE_EXTEND, NOTE_LINK, NOTE_REVOKE) +const noteAllEvents = syscall.NOTE_DELETE | syscall.NOTE_WRITE | syscall.NOTE_ATTRIB | syscall.NOTE_RENAME + +// keventWaitTime to block on each read from kevent +var keventWaitTime = durationToTimespec(100 * time.Millisecond) + +// addWatch adds name to the watched file set. +// The flags are interpreted as described in kevent(2). +func (w *Watcher) addWatch(name string, flags uint32) error { + var isDir bool + // Make ./name and name equivalent + name = filepath.Clean(name) + + w.mu.Lock() + if w.isClosed { + w.mu.Unlock() + return errors.New("kevent instance already closed") + } + watchfd, alreadyWatching := w.watches[name] + // We already have a watch, but we can still override flags. + if alreadyWatching { + isDir = w.paths[watchfd].isDir + } + w.mu.Unlock() + + if !alreadyWatching { + fi, err := os.Lstat(name) + if err != nil { + return err + } + + // Don't watch sockets. + if fi.Mode()&os.ModeSocket == os.ModeSocket { + return nil + } + + // Don't watch named pipes. + if fi.Mode()&os.ModeNamedPipe == os.ModeNamedPipe { + return nil + } + + // Follow Symlinks + // Unfortunately, Linux can add bogus symlinks to watch list without + // issue, and Windows can't do symlinks period (AFAIK). To maintain + // consistency, we will act like everything is fine. There will simply + // be no file events for broken symlinks. + // Hence the returns of nil on errors. + if fi.Mode()&os.ModeSymlink == os.ModeSymlink { + name, err = filepath.EvalSymlinks(name) + if err != nil { + return nil + } + + fi, err = os.Lstat(name) + if err != nil { + return nil + } + } + + watchfd, err = syscall.Open(name, openMode, 0700) + if watchfd == -1 { + return err + } + + isDir = fi.IsDir() + } + + const registerAdd = syscall.EV_ADD | syscall.EV_CLEAR | syscall.EV_ENABLE + if err := register(w.kq, []int{watchfd}, registerAdd, flags); err != nil { + syscall.Close(watchfd) + return err + } + + if !alreadyWatching { + w.mu.Lock() + w.watches[name] = watchfd + w.paths[watchfd] = pathInfo{name: name, isDir: isDir} + w.mu.Unlock() + } + + if isDir { + // Watch the directory if it has not been watched before, + // or if it was watched before, but perhaps only a NOTE_DELETE (watchDirectoryFiles) + w.mu.Lock() + watchDir := (flags&syscall.NOTE_WRITE) == syscall.NOTE_WRITE && + (!alreadyWatching || (w.dirFlags[name]&syscall.NOTE_WRITE) != syscall.NOTE_WRITE) + // Store flags so this watch can be updated later + w.dirFlags[name] = flags + w.mu.Unlock() + + if watchDir { + if err := w.watchDirectoryFiles(name); err != nil { + return err + } + } + } + return nil +} + +// readEvents reads from kqueue and converts the received kevents into +// Event values that it sends down the Events channel. +func (w *Watcher) readEvents() { + eventBuffer := make([]syscall.Kevent_t, 10) + + for { + // See if there is a message on the "done" channel + select { + case <-w.done: + err := syscall.Close(w.kq) + if err != nil { + w.Errors <- err + } + close(w.Events) + close(w.Errors) + return + default: + } + + // Get new events + kevents, err := read(w.kq, eventBuffer, &keventWaitTime) + // EINTR is okay, the syscall was interrupted before timeout expired. + if err != nil && err != syscall.EINTR { + w.Errors <- err + continue + } + + // Flush the events we received to the Events channel + for len(kevents) > 0 { + kevent := &kevents[0] + watchfd := int(kevent.Ident) + mask := uint32(kevent.Fflags) + w.mu.Lock() + path := w.paths[watchfd] + w.mu.Unlock() + event := newEvent(path.name, mask) + + if path.isDir && !(event.Op&Remove == Remove) { + // Double check to make sure the directory exists. This can happen when + // we do a rm -fr on a recursively watched folders and we receive a + // modification event first but the folder has been deleted and later + // receive the delete event + if _, err := os.Lstat(event.Name); os.IsNotExist(err) { + // mark is as delete event + event.Op |= Remove + } + } + + if event.Op&Rename == Rename || event.Op&Remove == Remove { + w.Remove(event.Name) + w.mu.Lock() + delete(w.fileExists, event.Name) + w.mu.Unlock() + } + + if path.isDir && event.Op&Write == Write && !(event.Op&Remove == Remove) { + w.sendDirectoryChangeEvents(event.Name) + } else { + // Send the event on the Events channel + w.Events <- event + } + + if event.Op&Remove == Remove { + // Look for a file that may have overwritten this. + // For example, mv f1 f2 will delete f2, then create f2. + fileDir, _ := filepath.Split(event.Name) + fileDir = filepath.Clean(fileDir) + w.mu.Lock() + _, found := w.watches[fileDir] + w.mu.Unlock() + if found { + // make sure the directory exists before we watch for changes. When we + // do a recursive watch and perform rm -fr, the parent directory might + // have gone missing, ignore the missing directory and let the + // upcoming delete event remove the watch from the parent directory. + if _, err := os.Lstat(fileDir); os.IsExist(err) { + w.sendDirectoryChangeEvents(fileDir) + // FIXME: should this be for events on files or just isDir? + } + } + } + + // Move to next event + kevents = kevents[1:] + } + } +} + +// newEvent returns an platform-independent Event based on kqueue Fflags. +func newEvent(name string, mask uint32) Event { + e := Event{Name: name} + if mask&syscall.NOTE_DELETE == syscall.NOTE_DELETE { + e.Op |= Remove + } + if mask&syscall.NOTE_WRITE == syscall.NOTE_WRITE { + e.Op |= Write + } + if mask&syscall.NOTE_RENAME == syscall.NOTE_RENAME { + e.Op |= Rename + } + if mask&syscall.NOTE_ATTRIB == syscall.NOTE_ATTRIB { + e.Op |= Chmod + } + return e +} + +func newCreateEvent(name string) Event { + return Event{Name: name, Op: Create} +} + +// watchDirectoryFiles to mimic inotify when adding a watch on a directory +func (w *Watcher) watchDirectoryFiles(dirPath string) error { + // Get all files + files, err := ioutil.ReadDir(dirPath) + if err != nil { + return err + } + + for _, fileInfo := range files { + filePath := filepath.Join(dirPath, fileInfo.Name()) + if err := w.internalWatch(filePath, fileInfo); err != nil { + return err + } + + w.mu.Lock() + w.fileExists[filePath] = true + w.mu.Unlock() + } + + return nil +} + +// sendDirectoryEvents searches the directory for newly created files +// and sends them over the event channel. This functionality is to have +// the BSD version of fsnotify match Linux inotify which provides a +// create event for files created in a watched directory. +func (w *Watcher) sendDirectoryChangeEvents(dirPath string) { + // Get all files + files, err := ioutil.ReadDir(dirPath) + if err != nil { + w.Errors <- err + } + + // Search for new files + for _, fileInfo := range files { + filePath := filepath.Join(dirPath, fileInfo.Name()) + w.mu.Lock() + _, doesExist := w.fileExists[filePath] + w.mu.Unlock() + if !doesExist { + // Send create event + w.Events <- newCreateEvent(filePath) + } + + // like watchDirectoryFiles (but without doing another ReadDir) + if err := w.internalWatch(filePath, fileInfo); err != nil { + return + } + + w.mu.Lock() + w.fileExists[filePath] = true + w.mu.Unlock() + } +} + +func (w *Watcher) internalWatch(name string, fileInfo os.FileInfo) error { + if fileInfo.IsDir() { + // mimic Linux providing delete events for subdirectories + // but preserve the flags used if currently watching subdirectory + w.mu.Lock() + flags := w.dirFlags[name] + w.mu.Unlock() + + flags |= syscall.NOTE_DELETE + return w.addWatch(name, flags) + } + + // watch file to mimic Linux inotify + return w.addWatch(name, noteAllEvents) +} + +// kqueue creates a new kernel event queue and returns a descriptor. +func kqueue() (kq int, err error) { + kq, err = syscall.Kqueue() + if kq == -1 { + return kq, err + } + return kq, nil +} + +// register events with the queue +func register(kq int, fds []int, flags int, fflags uint32) error { + changes := make([]syscall.Kevent_t, len(fds)) + + for i, fd := range fds { + // SetKevent converts int to the platform-specific types: + syscall.SetKevent(&changes[i], fd, syscall.EVFILT_VNODE, flags) + changes[i].Fflags = fflags + } + + // register the events + success, err := syscall.Kevent(kq, changes, nil, nil) + if success == -1 { + return err + } + return nil +} + +// read retrieves pending events, or waits until an event occurs. +// A timeout of nil blocks indefinitely, while 0 polls the queue. +func read(kq int, events []syscall.Kevent_t, timeout *syscall.Timespec) ([]syscall.Kevent_t, error) { + n, err := syscall.Kevent(kq, nil, events, timeout) + if err != nil { + return nil, err + } + return events[0:n], nil +} + +// durationToTimespec prepares a timeout value +func durationToTimespec(d time.Duration) syscall.Timespec { + return syscall.NsecToTimespec(d.Nanoseconds()) +} diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go new file mode 100644 index 0000000..c57ccb4 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd openbsd netbsd dragonfly + +package fsnotify + +import "syscall" + +const openMode = syscall.O_NONBLOCK | syscall.O_RDONLY diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go new file mode 100644 index 0000000..174b2c3 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go @@ -0,0 +1,12 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin + +package fsnotify + +import "syscall" + +// note: this constant is not defined on BSD +const openMode = syscall.O_EVTONLY diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/windows.go b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/windows.go new file mode 100644 index 0000000..8115852 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/fsnotify.v1/windows.go @@ -0,0 +1,561 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package fsnotify + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "runtime" + "sync" + "syscall" + "unsafe" +) + +// Watcher watches a set of files, delivering events to a channel. +type Watcher struct { + Events chan Event + Errors chan error + isClosed bool // Set to true when Close() is first called + mu sync.Mutex // Map access + port syscall.Handle // Handle to completion port + watches watchMap // Map of watches (key: i-number) + input chan *input // Inputs to the reader are sent on this channel + quit chan chan<- error +} + +// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events. +func NewWatcher() (*Watcher, error) { + port, e := syscall.CreateIoCompletionPort(syscall.InvalidHandle, 0, 0, 0) + if e != nil { + return nil, os.NewSyscallError("CreateIoCompletionPort", e) + } + w := &Watcher{ + port: port, + watches: make(watchMap), + input: make(chan *input, 1), + Events: make(chan Event, 50), + Errors: make(chan error), + quit: make(chan chan<- error, 1), + } + go w.readEvents() + return w, nil +} + +// Close removes all watches and closes the events channel. +func (w *Watcher) Close() error { + if w.isClosed { + return nil + } + w.isClosed = true + + // Send "quit" message to the reader goroutine + ch := make(chan error) + w.quit <- ch + if err := w.wakeupReader(); err != nil { + return err + } + return <-ch +} + +// Add starts watching the named file or directory (non-recursively). +func (w *Watcher) Add(name string) error { + if w.isClosed { + return errors.New("watcher already closed") + } + in := &input{ + op: opAddWatch, + path: filepath.Clean(name), + flags: sys_FS_ALL_EVENTS, + reply: make(chan error), + } + w.input <- in + if err := w.wakeupReader(); err != nil { + return err + } + return <-in.reply +} + +// Remove stops watching the the named file or directory (non-recursively). +func (w *Watcher) Remove(name string) error { + in := &input{ + op: opRemoveWatch, + path: filepath.Clean(name), + reply: make(chan error), + } + w.input <- in + if err := w.wakeupReader(); err != nil { + return err + } + return <-in.reply +} + +const ( + // Options for AddWatch + sys_FS_ONESHOT = 0x80000000 + sys_FS_ONLYDIR = 0x1000000 + + // Events + sys_FS_ACCESS = 0x1 + sys_FS_ALL_EVENTS = 0xfff + sys_FS_ATTRIB = 0x4 + sys_FS_CLOSE = 0x18 + sys_FS_CREATE = 0x100 + sys_FS_DELETE = 0x200 + sys_FS_DELETE_SELF = 0x400 + sys_FS_MODIFY = 0x2 + sys_FS_MOVE = 0xc0 + sys_FS_MOVED_FROM = 0x40 + sys_FS_MOVED_TO = 0x80 + sys_FS_MOVE_SELF = 0x800 + + // Special events + sys_FS_IGNORED = 0x8000 + sys_FS_Q_OVERFLOW = 0x4000 +) + +func newEvent(name string, mask uint32) Event { + e := Event{Name: name} + if mask&sys_FS_CREATE == sys_FS_CREATE || mask&sys_FS_MOVED_TO == sys_FS_MOVED_TO { + e.Op |= Create + } + if mask&sys_FS_DELETE == sys_FS_DELETE || mask&sys_FS_DELETE_SELF == sys_FS_DELETE_SELF { + e.Op |= Remove + } + if mask&sys_FS_MODIFY == sys_FS_MODIFY { + e.Op |= Write + } + if mask&sys_FS_MOVE == sys_FS_MOVE || mask&sys_FS_MOVE_SELF == sys_FS_MOVE_SELF || mask&sys_FS_MOVED_FROM == sys_FS_MOVED_FROM { + e.Op |= Rename + } + if mask&sys_FS_ATTRIB == sys_FS_ATTRIB { + e.Op |= Chmod + } + return e +} + +const ( + opAddWatch = iota + opRemoveWatch +) + +const ( + provisional uint64 = 1 << (32 + iota) +) + +type input struct { + op int + path string + flags uint32 + reply chan error +} + +type inode struct { + handle syscall.Handle + volume uint32 + index uint64 +} + +type watch struct { + ov syscall.Overlapped + ino *inode // i-number + path string // Directory path + mask uint64 // Directory itself is being watched with these notify flags + names map[string]uint64 // Map of names being watched and their notify flags + rename string // Remembers the old name while renaming a file + buf [4096]byte +} + +type indexMap map[uint64]*watch +type watchMap map[uint32]indexMap + +func (w *Watcher) wakeupReader() error { + e := syscall.PostQueuedCompletionStatus(w.port, 0, 0, nil) + if e != nil { + return os.NewSyscallError("PostQueuedCompletionStatus", e) + } + return nil +} + +func getDir(pathname string) (dir string, err error) { + attr, e := syscall.GetFileAttributes(syscall.StringToUTF16Ptr(pathname)) + if e != nil { + return "", os.NewSyscallError("GetFileAttributes", e) + } + if attr&syscall.FILE_ATTRIBUTE_DIRECTORY != 0 { + dir = pathname + } else { + dir, _ = filepath.Split(pathname) + dir = filepath.Clean(dir) + } + return +} + +func getIno(path string) (ino *inode, err error) { + h, e := syscall.CreateFile(syscall.StringToUTF16Ptr(path), + syscall.FILE_LIST_DIRECTORY, + syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE, + nil, syscall.OPEN_EXISTING, + syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OVERLAPPED, 0) + if e != nil { + return nil, os.NewSyscallError("CreateFile", e) + } + var fi syscall.ByHandleFileInformation + if e = syscall.GetFileInformationByHandle(h, &fi); e != nil { + syscall.CloseHandle(h) + return nil, os.NewSyscallError("GetFileInformationByHandle", e) + } + ino = &inode{ + handle: h, + volume: fi.VolumeSerialNumber, + index: uint64(fi.FileIndexHigh)<<32 | uint64(fi.FileIndexLow), + } + return ino, nil +} + +// Must run within the I/O thread. +func (m watchMap) get(ino *inode) *watch { + if i := m[ino.volume]; i != nil { + return i[ino.index] + } + return nil +} + +// Must run within the I/O thread. +func (m watchMap) set(ino *inode, watch *watch) { + i := m[ino.volume] + if i == nil { + i = make(indexMap) + m[ino.volume] = i + } + i[ino.index] = watch +} + +// Must run within the I/O thread. +func (w *Watcher) addWatch(pathname string, flags uint64) error { + dir, err := getDir(pathname) + if err != nil { + return err + } + if flags&sys_FS_ONLYDIR != 0 && pathname != dir { + return nil + } + ino, err := getIno(dir) + if err != nil { + return err + } + w.mu.Lock() + watchEntry := w.watches.get(ino) + w.mu.Unlock() + if watchEntry == nil { + if _, e := syscall.CreateIoCompletionPort(ino.handle, w.port, 0, 0); e != nil { + syscall.CloseHandle(ino.handle) + return os.NewSyscallError("CreateIoCompletionPort", e) + } + watchEntry = &watch{ + ino: ino, + path: dir, + names: make(map[string]uint64), + } + w.mu.Lock() + w.watches.set(ino, watchEntry) + w.mu.Unlock() + flags |= provisional + } else { + syscall.CloseHandle(ino.handle) + } + if pathname == dir { + watchEntry.mask |= flags + } else { + watchEntry.names[filepath.Base(pathname)] |= flags + } + if err = w.startRead(watchEntry); err != nil { + return err + } + if pathname == dir { + watchEntry.mask &= ^provisional + } else { + watchEntry.names[filepath.Base(pathname)] &= ^provisional + } + return nil +} + +// Must run within the I/O thread. +func (w *Watcher) remWatch(pathname string) error { + dir, err := getDir(pathname) + if err != nil { + return err + } + ino, err := getIno(dir) + if err != nil { + return err + } + w.mu.Lock() + watch := w.watches.get(ino) + w.mu.Unlock() + if watch == nil { + return fmt.Errorf("can't remove non-existent watch for: %s", pathname) + } + if pathname == dir { + w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) + watch.mask = 0 + } else { + name := filepath.Base(pathname) + w.sendEvent(watch.path+"\\"+name, watch.names[name]&sys_FS_IGNORED) + delete(watch.names, name) + } + return w.startRead(watch) +} + +// Must run within the I/O thread. +func (w *Watcher) deleteWatch(watch *watch) { + for name, mask := range watch.names { + if mask&provisional == 0 { + w.sendEvent(watch.path+"\\"+name, mask&sys_FS_IGNORED) + } + delete(watch.names, name) + } + if watch.mask != 0 { + if watch.mask&provisional == 0 { + w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) + } + watch.mask = 0 + } +} + +// Must run within the I/O thread. +func (w *Watcher) startRead(watch *watch) error { + if e := syscall.CancelIo(watch.ino.handle); e != nil { + w.Errors <- os.NewSyscallError("CancelIo", e) + w.deleteWatch(watch) + } + mask := toWindowsFlags(watch.mask) + for _, m := range watch.names { + mask |= toWindowsFlags(m) + } + if mask == 0 { + if e := syscall.CloseHandle(watch.ino.handle); e != nil { + w.Errors <- os.NewSyscallError("CloseHandle", e) + } + w.mu.Lock() + delete(w.watches[watch.ino.volume], watch.ino.index) + w.mu.Unlock() + return nil + } + e := syscall.ReadDirectoryChanges(watch.ino.handle, &watch.buf[0], + uint32(unsafe.Sizeof(watch.buf)), false, mask, nil, &watch.ov, 0) + if e != nil { + err := os.NewSyscallError("ReadDirectoryChanges", e) + if e == syscall.ERROR_ACCESS_DENIED && watch.mask&provisional == 0 { + // Watched directory was probably removed + if w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) { + if watch.mask&sys_FS_ONESHOT != 0 { + watch.mask = 0 + } + } + err = nil + } + w.deleteWatch(watch) + w.startRead(watch) + return err + } + return nil +} + +// readEvents reads from the I/O completion port, converts the +// received events into Event objects and sends them via the Events channel. +// Entry point to the I/O thread. +func (w *Watcher) readEvents() { + var ( + n, key uint32 + ov *syscall.Overlapped + ) + runtime.LockOSThread() + + for { + e := syscall.GetQueuedCompletionStatus(w.port, &n, &key, &ov, syscall.INFINITE) + watch := (*watch)(unsafe.Pointer(ov)) + + if watch == nil { + select { + case ch := <-w.quit: + w.mu.Lock() + var indexes []indexMap + for _, index := range w.watches { + indexes = append(indexes, index) + } + w.mu.Unlock() + for _, index := range indexes { + for _, watch := range index { + w.deleteWatch(watch) + w.startRead(watch) + } + } + var err error + if e := syscall.CloseHandle(w.port); e != nil { + err = os.NewSyscallError("CloseHandle", e) + } + close(w.Events) + close(w.Errors) + ch <- err + return + case in := <-w.input: + switch in.op { + case opAddWatch: + in.reply <- w.addWatch(in.path, uint64(in.flags)) + case opRemoveWatch: + in.reply <- w.remWatch(in.path) + } + default: + } + continue + } + + switch e { + case syscall.ERROR_MORE_DATA: + if watch == nil { + w.Errors <- errors.New("ERROR_MORE_DATA has unexpectedly null lpOverlapped buffer") + } else { + // The i/o succeeded but the buffer is full. + // In theory we should be building up a full packet. + // In practice we can get away with just carrying on. + n = uint32(unsafe.Sizeof(watch.buf)) + } + case syscall.ERROR_ACCESS_DENIED: + // Watched directory was probably removed + w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) + w.deleteWatch(watch) + w.startRead(watch) + continue + case syscall.ERROR_OPERATION_ABORTED: + // CancelIo was called on this handle + continue + default: + w.Errors <- os.NewSyscallError("GetQueuedCompletionPort", e) + continue + case nil: + } + + var offset uint32 + for { + if n == 0 { + w.Events <- newEvent("", sys_FS_Q_OVERFLOW) + w.Errors <- errors.New("short read in readEvents()") + break + } + + // Point "raw" to the event in the buffer + raw := (*syscall.FileNotifyInformation)(unsafe.Pointer(&watch.buf[offset])) + buf := (*[syscall.MAX_PATH]uint16)(unsafe.Pointer(&raw.FileName)) + name := syscall.UTF16ToString(buf[:raw.FileNameLength/2]) + fullname := watch.path + "\\" + name + + var mask uint64 + switch raw.Action { + case syscall.FILE_ACTION_REMOVED: + mask = sys_FS_DELETE_SELF + case syscall.FILE_ACTION_MODIFIED: + mask = sys_FS_MODIFY + case syscall.FILE_ACTION_RENAMED_OLD_NAME: + watch.rename = name + case syscall.FILE_ACTION_RENAMED_NEW_NAME: + if watch.names[watch.rename] != 0 { + watch.names[name] |= watch.names[watch.rename] + delete(watch.names, watch.rename) + mask = sys_FS_MOVE_SELF + } + } + + sendNameEvent := func() { + if w.sendEvent(fullname, watch.names[name]&mask) { + if watch.names[name]&sys_FS_ONESHOT != 0 { + delete(watch.names, name) + } + } + } + if raw.Action != syscall.FILE_ACTION_RENAMED_NEW_NAME { + sendNameEvent() + } + if raw.Action == syscall.FILE_ACTION_REMOVED { + w.sendEvent(fullname, watch.names[name]&sys_FS_IGNORED) + delete(watch.names, name) + } + if w.sendEvent(fullname, watch.mask&toFSnotifyFlags(raw.Action)) { + if watch.mask&sys_FS_ONESHOT != 0 { + watch.mask = 0 + } + } + if raw.Action == syscall.FILE_ACTION_RENAMED_NEW_NAME { + fullname = watch.path + "\\" + watch.rename + sendNameEvent() + } + + // Move to the next event in the buffer + if raw.NextEntryOffset == 0 { + break + } + offset += raw.NextEntryOffset + + // Error! + if offset >= n { + w.Errors <- errors.New("Windows system assumed buffer larger than it is, events have likely been missed.") + break + } + } + + if err := w.startRead(watch); err != nil { + w.Errors <- err + } + } +} + +func (w *Watcher) sendEvent(name string, mask uint64) bool { + if mask == 0 { + return false + } + event := newEvent(name, uint32(mask)) + select { + case ch := <-w.quit: + w.quit <- ch + case w.Events <- event: + } + return true +} + +func toWindowsFlags(mask uint64) uint32 { + var m uint32 + if mask&sys_FS_ACCESS != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_LAST_ACCESS + } + if mask&sys_FS_MODIFY != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_LAST_WRITE + } + if mask&sys_FS_ATTRIB != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_ATTRIBUTES + } + if mask&(sys_FS_MOVE|sys_FS_CREATE|sys_FS_DELETE) != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_FILE_NAME | syscall.FILE_NOTIFY_CHANGE_DIR_NAME + } + return m +} + +func toFSnotifyFlags(action uint32) uint64 { + switch action { + case syscall.FILE_ACTION_ADDED: + return sys_FS_CREATE + case syscall.FILE_ACTION_REMOVED: + return sys_FS_DELETE + case syscall.FILE_ACTION_MODIFIED: + return sys_FS_MODIFY + case syscall.FILE_ACTION_RENAMED_OLD_NAME: + return sys_FS_MOVED_FROM + case syscall.FILE_ACTION_RENAMED_NEW_NAME: + return sys_FS_MOVED_TO + } + return 0 +} diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/LICENSE b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/LICENSE new file mode 100644 index 0000000..a4249bb --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/LICENSE @@ -0,0 +1,29 @@ +tomb - support for clean goroutine termination in Go. + +Copyright (c) 2010-2011 - Gustavo Niemeyer + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/README.md b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/README.md new file mode 100644 index 0000000..3ae8788 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/README.md @@ -0,0 +1,4 @@ +Installation and usage +---------------------- + +See [gopkg.in/tomb.v1](https://gopkg.in/tomb.v1) for documentation and usage details. diff --git a/vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/tomb.go b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/tomb.go new file mode 100644 index 0000000..5bcd5f8 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/vendor/gopkg.in/tomb.v1/tomb.go @@ -0,0 +1,176 @@ +// Copyright (c) 2011 - Gustavo Niemeyer +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The tomb package offers a conventional API for clean goroutine termination. +// +// A Tomb tracks the lifecycle of a goroutine as alive, dying or dead, +// and the reason for its death. +// +// The zero value of a Tomb assumes that a goroutine is about to be +// created or already alive. Once Kill or Killf is called with an +// argument that informs the reason for death, the goroutine is in +// a dying state and is expected to terminate soon. Right before the +// goroutine function or method returns, Done must be called to inform +// that the goroutine is indeed dead and about to stop running. +// +// A Tomb exposes Dying and Dead channels. These channels are closed +// when the Tomb state changes in the respective way. They enable +// explicit blocking until the state changes, and also to selectively +// unblock select statements accordingly. +// +// When the tomb state changes to dying and there's still logic going +// on within the goroutine, nested functions and methods may choose to +// return ErrDying as their error value, as this error won't alter the +// tomb state if provied to the Kill method. This is a convenient way to +// follow standard Go practices in the context of a dying tomb. +// +// For background and a detailed example, see the following blog post: +// +// http://blog.labix.org/2011/10/09/death-of-goroutines-under-control +// +// For a more complex code snippet demonstrating the use of multiple +// goroutines with a single Tomb, see: +// +// http://play.golang.org/p/Xh7qWsDPZP +// +package tomb + +import ( + "errors" + "fmt" + "sync" +) + +// A Tomb tracks the lifecycle of a goroutine as alive, dying or dead, +// and the reason for its death. +// +// See the package documentation for details. +type Tomb struct { + m sync.Mutex + dying chan struct{} + dead chan struct{} + reason error +} + +var ( + ErrStillAlive = errors.New("tomb: still alive") + ErrDying = errors.New("tomb: dying") +) + +func (t *Tomb) init() { + t.m.Lock() + if t.dead == nil { + t.dead = make(chan struct{}) + t.dying = make(chan struct{}) + t.reason = ErrStillAlive + } + t.m.Unlock() +} + +// Dead returns the channel that can be used to wait +// until t.Done has been called. +func (t *Tomb) Dead() <-chan struct{} { + t.init() + return t.dead +} + +// Dying returns the channel that can be used to wait +// until t.Kill or t.Done has been called. +func (t *Tomb) Dying() <-chan struct{} { + t.init() + return t.dying +} + +// Wait blocks until the goroutine is in a dead state and returns the +// reason for its death. +func (t *Tomb) Wait() error { + t.init() + <-t.dead + t.m.Lock() + reason := t.reason + t.m.Unlock() + return reason +} + +// Done flags the goroutine as dead, and should be called a single time +// right before the goroutine function or method returns. +// If the goroutine was not already in a dying state before Done is +// called, it will be flagged as dying and dead at once with no +// error. +func (t *Tomb) Done() { + t.Kill(nil) + close(t.dead) +} + +// Kill flags the goroutine as dying for the given reason. +// Kill may be called multiple times, but only the first +// non-nil error is recorded as the reason for termination. +// +// If reason is ErrDying, the previous reason isn't replaced +// even if it is nil. It's a runtime error to call Kill with +// ErrDying if t is not in a dying state. +func (t *Tomb) Kill(reason error) { + t.init() + t.m.Lock() + defer t.m.Unlock() + if reason == ErrDying { + if t.reason == ErrStillAlive { + panic("tomb: Kill with ErrDying while still alive") + } + return + } + if t.reason == nil || t.reason == ErrStillAlive { + t.reason = reason + } + // If the receive on t.dying succeeds, then + // it can only be because we have already closed it. + // If it blocks, then we know that it needs to be closed. + select { + case <-t.dying: + default: + close(t.dying) + } +} + +// Killf works like Kill, but builds the reason providing the received +// arguments to fmt.Errorf. The generated error is also returned. +func (t *Tomb) Killf(f string, a ...interface{}) error { + err := fmt.Errorf(f, a...) + t.Kill(err) + return err +} + +// Err returns the reason for the goroutine death provided via Kill +// or Killf, or ErrStillAlive when the goroutine is still alive. +func (t *Tomb) Err() (reason error) { + t.init() + t.m.Lock() + reason = t.reason + t.m.Unlock() + return +} diff --git a/vendor/github.com/hpcloud/tail/watch/filechanges.go b/vendor/github.com/hpcloud/tail/watch/filechanges.go new file mode 100644 index 0000000..3ce5dce --- /dev/null +++ b/vendor/github.com/hpcloud/tail/watch/filechanges.go @@ -0,0 +1,36 @@ +package watch + +type FileChanges struct { + Modified chan bool // Channel to get notified of modifications + Truncated chan bool // Channel to get notified of truncations + Deleted chan bool // Channel to get notified of deletions/renames +} + +func NewFileChanges() *FileChanges { + return &FileChanges{ + make(chan bool), make(chan bool), make(chan bool)} +} + +func (fc *FileChanges) NotifyModified() { + sendOnlyIfEmpty(fc.Modified) +} + +func (fc *FileChanges) NotifyTruncated() { + sendOnlyIfEmpty(fc.Truncated) +} + +func (fc *FileChanges) NotifyDeleted() { + sendOnlyIfEmpty(fc.Deleted) +} + +// sendOnlyIfEmpty sends on a bool channel only if the channel has no +// backlog to be read by other goroutines. This concurrency pattern +// can be used to notify other goroutines if and only if they are +// looking for it (i.e., subsequent notifications can be compressed +// into one). +func sendOnlyIfEmpty(ch chan bool) { + select { + case ch <- true: + default: + } +} diff --git a/vendor/github.com/hpcloud/tail/watch/inotify.go b/vendor/github.com/hpcloud/tail/watch/inotify.go new file mode 100644 index 0000000..4478f1e --- /dev/null +++ b/vendor/github.com/hpcloud/tail/watch/inotify.go @@ -0,0 +1,128 @@ +// Copyright (c) 2015 HPE Software Inc. All rights reserved. +// Copyright (c) 2013 ActiveState Software Inc. All rights reserved. + +package watch + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/hpcloud/tail/util" + + "gopkg.in/fsnotify.v1" + "gopkg.in/tomb.v1" +) + +// InotifyFileWatcher uses inotify to monitor file changes. +type InotifyFileWatcher struct { + Filename string + Size int64 +} + +func NewInotifyFileWatcher(filename string) *InotifyFileWatcher { + fw := &InotifyFileWatcher{filepath.Clean(filename), 0} + return fw +} + +func (fw *InotifyFileWatcher) BlockUntilExists(t *tomb.Tomb) error { + err := WatchCreate(fw.Filename) + if err != nil { + return err + } + defer RemoveWatchCreate(fw.Filename) + + // Do a real check now as the file might have been created before + // calling `WatchFlags` above. + if _, err = os.Stat(fw.Filename); !os.IsNotExist(err) { + // file exists, or stat returned an error. + return err + } + + events := Events(fw.Filename) + + for { + select { + case evt, ok := <-events: + if !ok { + return fmt.Errorf("inotify watcher has been closed") + } + evtName, err := filepath.Abs(evt.Name) + if err != nil { + return err + } + fwFilename, err := filepath.Abs(fw.Filename) + if err != nil { + return err + } + if evtName == fwFilename { + return nil + } + case <-t.Dying(): + return tomb.ErrDying + } + } + panic("unreachable") +} + +func (fw *InotifyFileWatcher) ChangeEvents(t *tomb.Tomb, pos int64) (*FileChanges, error) { + err := Watch(fw.Filename) + if err != nil { + return nil, err + } + + changes := NewFileChanges() + fw.Size = pos + + go func() { + defer RemoveWatch(fw.Filename) + + events := Events(fw.Filename) + + for { + prevSize := fw.Size + + var evt fsnotify.Event + var ok bool + + select { + case evt, ok = <-events: + if !ok { + return + } + case <-t.Dying(): + return + } + + switch { + case evt.Op&fsnotify.Remove == fsnotify.Remove: + fallthrough + + case evt.Op&fsnotify.Rename == fsnotify.Rename: + changes.NotifyDeleted() + return + + case evt.Op&fsnotify.Write == fsnotify.Write: + fi, err := os.Stat(fw.Filename) + if err != nil { + if os.IsNotExist(err) { + changes.NotifyDeleted() + return + } + // XXX: report this error back to the user + util.Fatal("Failed to stat file %v: %v", fw.Filename, err) + } + fw.Size = fi.Size() + + if prevSize > 0 && prevSize > fw.Size { + changes.NotifyTruncated() + } else { + changes.NotifyModified() + } + prevSize = fw.Size + } + } + }() + + return changes, nil +} diff --git a/vendor/github.com/hpcloud/tail/watch/inotify_tracker.go b/vendor/github.com/hpcloud/tail/watch/inotify_tracker.go new file mode 100644 index 0000000..03be427 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/watch/inotify_tracker.go @@ -0,0 +1,260 @@ +// Copyright (c) 2015 HPE Software Inc. All rights reserved. +// Copyright (c) 2013 ActiveState Software Inc. All rights reserved. + +package watch + +import ( + "log" + "os" + "path/filepath" + "sync" + "syscall" + + "github.com/hpcloud/tail/util" + + "gopkg.in/fsnotify.v1" +) + +type InotifyTracker struct { + mux sync.Mutex + watcher *fsnotify.Watcher + chans map[string]chan fsnotify.Event + done map[string]chan bool + watchNums map[string]int + watch chan *watchInfo + remove chan *watchInfo + error chan error +} + +type watchInfo struct { + op fsnotify.Op + fname string +} + +func (this *watchInfo) isCreate() bool { + return this.op == fsnotify.Create +} + +var ( + // globally shared InotifyTracker; ensures only one fsnotify.Watcher is used + shared *InotifyTracker + + // these are used to ensure the shared InotifyTracker is run exactly once + once = sync.Once{} + goRun = func() { + shared = &InotifyTracker{ + mux: sync.Mutex{}, + chans: make(map[string]chan fsnotify.Event), + done: make(map[string]chan bool), + watchNums: make(map[string]int), + watch: make(chan *watchInfo), + remove: make(chan *watchInfo), + error: make(chan error), + } + go shared.run() + } + + logger = log.New(os.Stderr, "", log.LstdFlags) +) + +// Watch signals the run goroutine to begin watching the input filename +func Watch(fname string) error { + return watch(&watchInfo{ + fname: fname, + }) +} + +// Watch create signals the run goroutine to begin watching the input filename +// if call the WatchCreate function, don't call the Cleanup, call the RemoveWatchCreate +func WatchCreate(fname string) error { + return watch(&watchInfo{ + op: fsnotify.Create, + fname: fname, + }) +} + +func watch(winfo *watchInfo) error { + // start running the shared InotifyTracker if not already running + once.Do(goRun) + + winfo.fname = filepath.Clean(winfo.fname) + shared.watch <- winfo + return <-shared.error +} + +// RemoveWatch signals the run goroutine to remove the watch for the input filename +func RemoveWatch(fname string) { + remove(&watchInfo{ + fname: fname, + }) +} + +// RemoveWatch create signals the run goroutine to remove the watch for the input filename +func RemoveWatchCreate(fname string) { + remove(&watchInfo{ + op: fsnotify.Create, + fname: fname, + }) +} + +func remove(winfo *watchInfo) { + // start running the shared InotifyTracker if not already running + once.Do(goRun) + + winfo.fname = filepath.Clean(winfo.fname) + shared.mux.Lock() + done := shared.done[winfo.fname] + if done != nil { + delete(shared.done, winfo.fname) + close(done) + } + + fname := winfo.fname + if winfo.isCreate() { + // Watch for new files to be created in the parent directory. + fname = filepath.Dir(fname) + } + shared.watchNums[fname]-- + watchNum := shared.watchNums[fname] + if watchNum == 0 { + delete(shared.watchNums, fname) + } + shared.mux.Unlock() + + // If we were the last ones to watch this file, unsubscribe from inotify. + // This needs to happen after releasing the lock because fsnotify waits + // synchronously for the kernel to acknowledge the removal of the watch + // for this file, which causes us to deadlock if we still held the lock. + if watchNum == 0 { + shared.watcher.Remove(fname) + } + shared.remove <- winfo +} + +// Events returns a channel to which FileEvents corresponding to the input filename +// will be sent. This channel will be closed when removeWatch is called on this +// filename. +func Events(fname string) <-chan fsnotify.Event { + shared.mux.Lock() + defer shared.mux.Unlock() + + return shared.chans[fname] +} + +// Cleanup removes the watch for the input filename if necessary. +func Cleanup(fname string) { + RemoveWatch(fname) +} + +// watchFlags calls fsnotify.WatchFlags for the input filename and flags, creating +// a new Watcher if the previous Watcher was closed. +func (shared *InotifyTracker) addWatch(winfo *watchInfo) error { + shared.mux.Lock() + defer shared.mux.Unlock() + + if shared.chans[winfo.fname] == nil { + shared.chans[winfo.fname] = make(chan fsnotify.Event) + shared.done[winfo.fname] = make(chan bool) + } + + fname := winfo.fname + if winfo.isCreate() { + // Watch for new files to be created in the parent directory. + fname = filepath.Dir(fname) + } + + // already in inotify watch + if shared.watchNums[fname] > 0 { + shared.watchNums[fname]++ + if winfo.isCreate() { + shared.watchNums[winfo.fname]++ + } + return nil + } + + err := shared.watcher.Add(fname) + if err == nil { + shared.watchNums[fname]++ + if winfo.isCreate() { + shared.watchNums[winfo.fname]++ + } + } + return err +} + +// removeWatch calls fsnotify.RemoveWatch for the input filename and closes the +// corresponding events channel. +func (shared *InotifyTracker) removeWatch(winfo *watchInfo) { + shared.mux.Lock() + defer shared.mux.Unlock() + + ch := shared.chans[winfo.fname] + if ch == nil { + return + } + + delete(shared.chans, winfo.fname) + close(ch) + + if !winfo.isCreate() { + return + } + + shared.watchNums[winfo.fname]-- + if shared.watchNums[winfo.fname] == 0 { + delete(shared.watchNums, winfo.fname) + } +} + +// sendEvent sends the input event to the appropriate Tail. +func (shared *InotifyTracker) sendEvent(event fsnotify.Event) { + name := filepath.Clean(event.Name) + + shared.mux.Lock() + ch := shared.chans[name] + done := shared.done[name] + shared.mux.Unlock() + + if ch != nil && done != nil { + select { + case ch <- event: + case <-done: + } + } +} + +// run starts the goroutine in which the shared struct reads events from its +// Watcher's Event channel and sends the events to the appropriate Tail. +func (shared *InotifyTracker) run() { + watcher, err := fsnotify.NewWatcher() + if err != nil { + util.Fatal("failed to create Watcher") + } + shared.watcher = watcher + + for { + select { + case winfo := <-shared.watch: + shared.error <- shared.addWatch(winfo) + + case winfo := <-shared.remove: + shared.removeWatch(winfo) + + case event, open := <-shared.watcher.Events: + if !open { + return + } + shared.sendEvent(event) + + case err, open := <-shared.watcher.Errors: + if !open { + return + } else if err != nil { + sysErr, ok := err.(*os.SyscallError) + if !ok || sysErr.Err != syscall.EINTR { + logger.Printf("Error in Watcher Error channel: %s", err) + } + } + } + } +} diff --git a/vendor/github.com/hpcloud/tail/watch/polling.go b/vendor/github.com/hpcloud/tail/watch/polling.go new file mode 100644 index 0000000..49491f2 --- /dev/null +++ b/vendor/github.com/hpcloud/tail/watch/polling.go @@ -0,0 +1,118 @@ +// Copyright (c) 2015 HPE Software Inc. All rights reserved. +// Copyright (c) 2013 ActiveState Software Inc. All rights reserved. + +package watch + +import ( + "os" + "runtime" + "time" + + "github.com/hpcloud/tail/util" + "gopkg.in/tomb.v1" +) + +// PollingFileWatcher polls the file for changes. +type PollingFileWatcher struct { + Filename string + Size int64 +} + +func NewPollingFileWatcher(filename string) *PollingFileWatcher { + fw := &PollingFileWatcher{filename, 0} + return fw +} + +var POLL_DURATION time.Duration + +func (fw *PollingFileWatcher) BlockUntilExists(t *tomb.Tomb) error { + for { + if _, err := os.Stat(fw.Filename); err == nil { + return nil + } else if !os.IsNotExist(err) { + return err + } + select { + case <-time.After(POLL_DURATION): + continue + case <-t.Dying(): + return tomb.ErrDying + } + } + panic("unreachable") +} + +func (fw *PollingFileWatcher) ChangeEvents(t *tomb.Tomb, pos int64) (*FileChanges, error) { + origFi, err := os.Stat(fw.Filename) + if err != nil { + return nil, err + } + + changes := NewFileChanges() + var prevModTime time.Time + + // XXX: use tomb.Tomb to cleanly manage these goroutines. replace + // the fatal (below) with tomb's Kill. + + fw.Size = pos + + go func() { + prevSize := fw.Size + for { + select { + case <-t.Dying(): + return + default: + } + + time.Sleep(POLL_DURATION) + fi, err := os.Stat(fw.Filename) + if err != nil { + // Windows cannot delete a file if a handle is still open (tail keeps one open) + // so it gives access denied to anything trying to read it until all handles are released. + if os.IsNotExist(err) || (runtime.GOOS == "windows" && os.IsPermission(err)) { + // File does not exist (has been deleted). + changes.NotifyDeleted() + return + } + + // XXX: report this error back to the user + util.Fatal("Failed to stat file %v: %v", fw.Filename, err) + } + + // File got moved/renamed? + if !os.SameFile(origFi, fi) { + changes.NotifyDeleted() + return + } + + // File got truncated? + fw.Size = fi.Size() + if prevSize > 0 && prevSize > fw.Size { + changes.NotifyTruncated() + prevSize = fw.Size + continue + } + // File got bigger? + if prevSize > 0 && prevSize < fw.Size { + changes.NotifyModified() + prevSize = fw.Size + continue + } + prevSize = fw.Size + + // File was appended to (changed)? + modTime := fi.ModTime() + if modTime != prevModTime { + prevModTime = modTime + changes.NotifyModified() + } + } + }() + + return changes, nil +} + +func init() { + POLL_DURATION = 250 * time.Millisecond +} diff --git a/vendor/github.com/hpcloud/tail/watch/watch.go b/vendor/github.com/hpcloud/tail/watch/watch.go new file mode 100644 index 0000000..2e1783e --- /dev/null +++ b/vendor/github.com/hpcloud/tail/watch/watch.go @@ -0,0 +1,20 @@ +// Copyright (c) 2015 HPE Software Inc. All rights reserved. +// Copyright (c) 2013 ActiveState Software Inc. All rights reserved. + +package watch + +import "gopkg.in/tomb.v1" + +// FileWatcher monitors file-level events. +type FileWatcher interface { + // BlockUntilExists blocks until the file comes into existence. + BlockUntilExists(*tomb.Tomb) error + + // ChangeEvents reports on changes to a file, be it modification, + // deletion, renames or truncations. Returned FileChanges group of + // channels will be closed, thus become unusable, after a deletion + // or truncation event. + // In order to properly report truncations, ChangeEvents requires + // the caller to pass their current offset in the file. + ChangeEvents(*tomb.Tomb, int64) (*FileChanges, error) +} diff --git a/vendor/github.com/hpcloud/tail/winfile/winfile.go b/vendor/github.com/hpcloud/tail/winfile/winfile.go new file mode 100644 index 0000000..aa7e7bc --- /dev/null +++ b/vendor/github.com/hpcloud/tail/winfile/winfile.go @@ -0,0 +1,92 @@ +// +build windows + +package winfile + +import ( + "os" + "syscall" + "unsafe" +) + +// issue also described here +//https://codereview.appspot.com/8203043/ + +// https://github.com/jnwhiteh/golang/blob/master/src/pkg/syscall/syscall_windows.go#L218 +func Open(path string, mode int, perm uint32) (fd syscall.Handle, err error) { + if len(path) == 0 { + return syscall.InvalidHandle, syscall.ERROR_FILE_NOT_FOUND + } + pathp, err := syscall.UTF16PtrFromString(path) + if err != nil { + return syscall.InvalidHandle, err + } + var access uint32 + switch mode & (syscall.O_RDONLY | syscall.O_WRONLY | syscall.O_RDWR) { + case syscall.O_RDONLY: + access = syscall.GENERIC_READ + case syscall.O_WRONLY: + access = syscall.GENERIC_WRITE + case syscall.O_RDWR: + access = syscall.GENERIC_READ | syscall.GENERIC_WRITE + } + if mode&syscall.O_CREAT != 0 { + access |= syscall.GENERIC_WRITE + } + if mode&syscall.O_APPEND != 0 { + access &^= syscall.GENERIC_WRITE + access |= syscall.FILE_APPEND_DATA + } + sharemode := uint32(syscall.FILE_SHARE_READ | syscall.FILE_SHARE_WRITE | syscall.FILE_SHARE_DELETE) + var sa *syscall.SecurityAttributes + if mode&syscall.O_CLOEXEC == 0 { + sa = makeInheritSa() + } + var createmode uint32 + switch { + case mode&(syscall.O_CREAT|syscall.O_EXCL) == (syscall.O_CREAT | syscall.O_EXCL): + createmode = syscall.CREATE_NEW + case mode&(syscall.O_CREAT|syscall.O_TRUNC) == (syscall.O_CREAT | syscall.O_TRUNC): + createmode = syscall.CREATE_ALWAYS + case mode&syscall.O_CREAT == syscall.O_CREAT: + createmode = syscall.OPEN_ALWAYS + case mode&syscall.O_TRUNC == syscall.O_TRUNC: + createmode = syscall.TRUNCATE_EXISTING + default: + createmode = syscall.OPEN_EXISTING + } + h, e := syscall.CreateFile(pathp, access, sharemode, sa, createmode, syscall.FILE_ATTRIBUTE_NORMAL, 0) + return h, e +} + +// https://github.com/jnwhiteh/golang/blob/master/src/pkg/syscall/syscall_windows.go#L211 +func makeInheritSa() *syscall.SecurityAttributes { + var sa syscall.SecurityAttributes + sa.Length = uint32(unsafe.Sizeof(sa)) + sa.InheritHandle = 1 + return &sa +} + +// https://github.com/jnwhiteh/golang/blob/master/src/pkg/os/file_windows.go#L133 +func OpenFile(name string, flag int, perm os.FileMode) (file *os.File, err error) { + r, e := Open(name, flag|syscall.O_CLOEXEC, syscallMode(perm)) + if e != nil { + return nil, e + } + return os.NewFile(uintptr(r), name), nil +} + +// https://github.com/jnwhiteh/golang/blob/master/src/pkg/os/file_posix.go#L61 +func syscallMode(i os.FileMode) (o uint32) { + o |= uint32(i.Perm()) + if i&os.ModeSetuid != 0 { + o |= syscall.S_ISUID + } + if i&os.ModeSetgid != 0 { + o |= syscall.S_ISGID + } + if i&os.ModeSticky != 0 { + o |= syscall.S_ISVTX + } + // No mapping for Go's ModeTemporary (plan9 only). + return +} diff --git a/vendor/github.com/sirupsen/logrus/.gitignore b/vendor/github.com/sirupsen/logrus/.gitignore new file mode 100644 index 0000000..66be63a --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/.gitignore @@ -0,0 +1 @@ +logrus diff --git a/vendor/github.com/sirupsen/logrus/.travis.yml b/vendor/github.com/sirupsen/logrus/.travis.yml new file mode 100644 index 0000000..a23296a --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/.travis.yml @@ -0,0 +1,15 @@ +language: go +go: + - 1.6.x + - 1.7.x + - 1.8.x + - tip +env: + - GOMAXPROCS=4 GORACE=halt_on_error=1 +install: + - go get github.com/stretchr/testify/assert + - go get gopkg.in/gemnasium/logrus-airbrake-hook.v2 + - go get golang.org/x/sys/unix + - go get golang.org/x/sys/windows +script: + - go test -race -v ./... diff --git a/vendor/github.com/sirupsen/logrus/CHANGELOG.md b/vendor/github.com/sirupsen/logrus/CHANGELOG.md new file mode 100644 index 0000000..8236d8b --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/CHANGELOG.md @@ -0,0 +1,113 @@ +# 1.0.3 + +* Replace example files with testable examples + +# 1.0.2 + +* bug: quote non-string values in text formatter (#583) +* Make (*Logger) SetLevel a public method + +# 1.0.1 + +* bug: fix escaping in text formatter (#575) + +# 1.0.0 + +* Officially changed name to lower-case +* bug: colors on Windows 10 (#541) +* bug: fix race in accessing level (#512) + +# 0.11.5 + +* feature: add writer and writerlevel to entry (#372) + +# 0.11.4 + +* bug: fix undefined variable on solaris (#493) + +# 0.11.3 + +* formatter: configure quoting of empty values (#484) +* formatter: configure quoting character (default is `"`) (#484) +* bug: fix not importing io correctly in non-linux environments (#481) + +# 0.11.2 + +* bug: fix windows terminal detection (#476) + +# 0.11.1 + +* bug: fix tty detection with custom out (#471) + +# 0.11.0 + +* performance: Use bufferpool to allocate (#370) +* terminal: terminal detection for app-engine (#343) +* feature: exit handler (#375) + +# 0.10.0 + +* feature: Add a test hook (#180) +* feature: `ParseLevel` is now case-insensitive (#326) +* feature: `FieldLogger` interface that generalizes `Logger` and `Entry` (#308) +* performance: avoid re-allocations on `WithFields` (#335) + +# 0.9.0 + +* logrus/text_formatter: don't emit empty msg +* logrus/hooks/airbrake: move out of main repository +* logrus/hooks/sentry: move out of main repository +* logrus/hooks/papertrail: move out of main repository +* logrus/hooks/bugsnag: move out of main repository +* logrus/core: run tests with `-race` +* logrus/core: detect TTY based on `stderr` +* logrus/core: support `WithError` on logger +* logrus/core: Solaris support + +# 0.8.7 + +* logrus/core: fix possible race (#216) +* logrus/doc: small typo fixes and doc improvements + + +# 0.8.6 + +* hooks/raven: allow passing an initialized client + +# 0.8.5 + +* logrus/core: revert #208 + +# 0.8.4 + +* formatter/text: fix data race (#218) + +# 0.8.3 + +* logrus/core: fix entry log level (#208) +* logrus/core: improve performance of text formatter by 40% +* logrus/core: expose `LevelHooks` type +* logrus/core: add support for DragonflyBSD and NetBSD +* formatter/text: print structs more verbosely + +# 0.8.2 + +* logrus: fix more Fatal family functions + +# 0.8.1 + +* logrus: fix not exiting on `Fatalf` and `Fatalln` + +# 0.8.0 + +* logrus: defaults to stderr instead of stdout +* hooks/sentry: add special field for `*http.Request` +* formatter/text: ignore Windows for colors + +# 0.7.3 + +* formatter/\*: allow configuration of timestamp layout + +# 0.7.2 + +* formatter/text: Add configuration option for time format (#158) diff --git a/vendor/github.com/sirupsen/logrus/LICENSE b/vendor/github.com/sirupsen/logrus/LICENSE new file mode 100644 index 0000000..f090cb4 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Simon Eskildsen + +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. diff --git a/vendor/github.com/sirupsen/logrus/README.md b/vendor/github.com/sirupsen/logrus/README.md new file mode 100644 index 0000000..4f5ce57 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/README.md @@ -0,0 +1,505 @@ +# Logrus :walrus: [![Build Status](https://travis-ci.org/sirupsen/logrus.svg?branch=master)](https://travis-ci.org/sirupsen/logrus) [![GoDoc](https://godoc.org/github.com/sirupsen/logrus?status.svg)](https://godoc.org/github.com/sirupsen/logrus) + +Logrus is a structured logger for Go (golang), completely API compatible with +the standard library logger. + +**Seeing weird case-sensitive problems?** It's in the past been possible to +import Logrus as both upper- and lower-case. Due to the Go package environment, +this caused issues in the community and we needed a standard. Some environments +experienced problems with the upper-case variant, so the lower-case was decided. +Everything using `logrus` will need to use the lower-case: +`github.com/sirupsen/logrus`. Any package that isn't, should be changed. + +To fix Glide, see [these +comments](https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437). +For an in-depth explanation of the casing issue, see [this +comment](https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276). + +**Are you interested in assisting in maintaining Logrus?** Currently I have a +lot of obligations, and I am unable to provide Logrus with the maintainership it +needs. If you'd like to help, please reach out to me at `simon at author's +username dot com`. + +Nicely color-coded in development (when a TTY is attached, otherwise just +plain text): + +![Colored](http://i.imgur.com/PY7qMwd.png) + +With `log.SetFormatter(&log.JSONFormatter{})`, for easy parsing by logstash +or Splunk: + +```json +{"animal":"walrus","level":"info","msg":"A group of walrus emerges from the +ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"} + +{"level":"warning","msg":"The group's number increased tremendously!", +"number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"} + +{"animal":"walrus","level":"info","msg":"A giant walrus appears!", +"size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"} + +{"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.", +"size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"} + +{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true, +"time":"2014-03-10 19:57:38.562543128 -0400 EDT"} +``` + +With the default `log.SetFormatter(&log.TextFormatter{})` when a TTY is not +attached, the output is compatible with the +[logfmt](http://godoc.org/github.com/kr/logfmt) format: + +```text +time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8 +time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10 +time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true +time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4 +time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009 +time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true +exit status 1 +``` + +#### Case-sensitivity + +The organization's name was changed to lower-case--and this will not be changed +back. If you are getting import conflicts due to case sensitivity, please use +the lower-case import: `github.com/sirupsen/logrus`. + +#### Example + +The simplest way to use Logrus is simply the package-level exported logger: + +```go +package main + +import ( + log "github.com/sirupsen/logrus" +) + +func main() { + log.WithFields(log.Fields{ + "animal": "walrus", + }).Info("A walrus appears") +} +``` + +Note that it's completely api-compatible with the stdlib logger, so you can +replace your `log` imports everywhere with `log "github.com/sirupsen/logrus"` +and you'll now have the flexibility of Logrus. You can customize it all you +want: + +```go +package main + +import ( + "os" + log "github.com/sirupsen/logrus" +) + +func init() { + // Log as JSON instead of the default ASCII formatter. + log.SetFormatter(&log.JSONFormatter{}) + + // Output to stdout instead of the default stderr + // Can be any io.Writer, see below for File example + log.SetOutput(os.Stdout) + + // Only log the warning severity or above. + log.SetLevel(log.WarnLevel) +} + +func main() { + log.WithFields(log.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") + + log.WithFields(log.Fields{ + "omg": true, + "number": 122, + }).Warn("The group's number increased tremendously!") + + log.WithFields(log.Fields{ + "omg": true, + "number": 100, + }).Fatal("The ice breaks!") + + // A common pattern is to re-use fields between logging statements by re-using + // the logrus.Entry returned from WithFields() + contextLogger := log.WithFields(log.Fields{ + "common": "this is a common field", + "other": "I also should be logged always", + }) + + contextLogger.Info("I'll be logged with common and other field") + contextLogger.Info("Me too") +} +``` + +For more advanced usage such as logging to multiple locations from the same +application, you can also create an instance of the `logrus` Logger: + +```go +package main + +import ( + "os" + "github.com/sirupsen/logrus" +) + +// Create a new instance of the logger. You can have any number of instances. +var log = logrus.New() + +func main() { + // The API for setting attributes is a little different than the package level + // exported logger. See Godoc. + log.Out = os.Stdout + + // You could set this to any `io.Writer` such as a file + // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666) + // if err == nil { + // log.Out = file + // } else { + // log.Info("Failed to log to file, using default stderr") + // } + + log.WithFields(logrus.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") +} +``` + +#### Fields + +Logrus encourages careful, structured logging through logging fields instead of +long, unparseable error messages. For example, instead of: `log.Fatalf("Failed +to send event %s to topic %s with key %d")`, you should log the much more +discoverable: + +```go +log.WithFields(log.Fields{ + "event": event, + "topic": topic, + "key": key, +}).Fatal("Failed to send event") +``` + +We've found this API forces you to think about logging in a way that produces +much more useful logging messages. We've been in countless situations where just +a single added field to a log statement that was already there would've saved us +hours. The `WithFields` call is optional. + +In general, with Logrus using any of the `printf`-family functions should be +seen as a hint you should add a field, however, you can still use the +`printf`-family functions with Logrus. + +#### Default Fields + +Often it's helpful to have fields _always_ attached to log statements in an +application or parts of one. For example, you may want to always log the +`request_id` and `user_ip` in the context of a request. Instead of writing +`log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})` on +every line, you can create a `logrus.Entry` to pass around instead: + +```go +requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip}) +requestLogger.Info("something happened on that request") # will log request_id and user_ip +requestLogger.Warn("something not great happened") +``` + +#### Hooks + +You can add hooks for logging levels. For example to send errors to an exception +tracking service on `Error`, `Fatal` and `Panic`, info to StatsD or log to +multiple places simultaneously, e.g. syslog. + +Logrus comes with [built-in hooks](hooks/). Add those, or your custom hook, in +`init`: + +```go +import ( + log "github.com/sirupsen/logrus" + "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "aibrake" + logrus_syslog "github.com/sirupsen/logrus/hooks/syslog" + "log/syslog" +) + +func init() { + + // Use the Airbrake hook to report errors that have Error severity or above to + // an exception tracker. You can create custom hooks, see the Hooks section. + log.AddHook(airbrake.NewHook(123, "xyz", "production")) + + hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") + if err != nil { + log.Error("Unable to connect to local syslog daemon") + } else { + log.AddHook(hook) + } +} +``` +Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). For the detail, please check the [syslog hook README](hooks/syslog/README.md). + +| Hook | Description | +| ----- | ----------- | +| [Airbrake "legacy"](https://github.com/gemnasium/logrus-airbrake-legacy-hook) | Send errors to an exception tracking service compatible with the Airbrake API V2. Uses [`airbrake-go`](https://github.com/tobi/airbrake-go) behind the scenes. | +| [Airbrake](https://github.com/gemnasium/logrus-airbrake-hook) | Send errors to the Airbrake API V3. Uses the official [`gobrake`](https://github.com/airbrake/gobrake) behind the scenes. | +| [Amazon Kinesis](https://github.com/evalphobia/logrus_kinesis) | Hook for logging to [Amazon Kinesis](https://aws.amazon.com/kinesis/) | +| [Amqp-Hook](https://github.com/vladoatanasov/logrus_amqp) | Hook for logging to Amqp broker (Like RabbitMQ) | +| [Bugsnag](https://github.com/Shopify/logrus-bugsnag/blob/master/bugsnag.go) | Send errors to the Bugsnag exception tracking service. | +| [DeferPanic](https://github.com/deferpanic/dp-logrus) | Hook for logging to DeferPanic | +| [Discordrus](https://github.com/kz/discordrus) | Hook for logging to [Discord](https://discordapp.com/) | +| [ElasticSearch](https://github.com/sohlich/elogrus) | Hook for logging to ElasticSearch| +| [Firehose](https://github.com/beaubrewer/logrus_firehose) | Hook for logging to [Amazon Firehose](https://aws.amazon.com/kinesis/firehose/) +| [Fluentd](https://github.com/evalphobia/logrus_fluent) | Hook for logging to fluentd | +| [Go-Slack](https://github.com/multiplay/go-slack) | Hook for logging to [Slack](https://slack.com) | +| [Graylog](https://github.com/gemnasium/logrus-graylog-hook) | Hook for logging to [Graylog](http://graylog2.org/) | +| [Hiprus](https://github.com/nubo/hiprus) | Send errors to a channel in hipchat. | +| [Honeybadger](https://github.com/agonzalezro/logrus_honeybadger) | Hook for sending exceptions to Honeybadger | +| [InfluxDB](https://github.com/Abramovic/logrus_influxdb) | Hook for logging to influxdb | +| [Influxus](http://github.com/vlad-doru/influxus) | Hook for concurrently logging to [InfluxDB](http://influxdata.com/) | +| [Journalhook](https://github.com/wercker/journalhook) | Hook for logging to `systemd-journald` | +| [KafkaLogrus](https://github.com/goibibo/KafkaLogrus) | Hook for logging to kafka | +| [LFShook](https://github.com/rifflock/lfshook) | Hook for logging to the local filesystem | +| [Logentries](https://github.com/jcftang/logentriesrus) | Hook for logging to [Logentries](https://logentries.com/) | +| [Logentrus](https://github.com/puddingfactory/logentrus) | Hook for logging to [Logentries](https://logentries.com/) | +| [Logmatic.io](https://github.com/logmatic/logmatic-go) | Hook for logging to [Logmatic.io](http://logmatic.io/) | +| [Logrusly](https://github.com/sebest/logrusly) | Send logs to [Loggly](https://www.loggly.com/) | +| [Logstash](https://github.com/bshuster-repo/logrus-logstash-hook) | Hook for logging to [Logstash](https://www.elastic.co/products/logstash) | +| [Mail](https://github.com/zbindenren/logrus_mail) | Hook for sending exceptions via mail | +| [Mattermost](https://github.com/shuLhan/mattermost-integration/tree/master/hooks/logrus) | Hook for logging to [Mattermost](https://mattermost.com/) | +| [Mongodb](https://github.com/weekface/mgorus) | Hook for logging to mongodb | +| [NATS-Hook](https://github.com/rybit/nats_logrus_hook) | Hook for logging to [NATS](https://nats.io) | +| [Octokit](https://github.com/dorajistyle/logrus-octokit-hook) | Hook for logging to github via octokit | +| [Papertrail](https://github.com/polds/logrus-papertrail-hook) | Send errors to the [Papertrail](https://papertrailapp.com) hosted logging service via UDP. | +| [PostgreSQL](https://github.com/gemnasium/logrus-postgresql-hook) | Send logs to [PostgreSQL](http://postgresql.org) | +| [Pushover](https://github.com/toorop/logrus_pushover) | Send error via [Pushover](https://pushover.net) | +| [Raygun](https://github.com/squirkle/logrus-raygun-hook) | Hook for logging to [Raygun.io](http://raygun.io/) | +| [Redis-Hook](https://github.com/rogierlommers/logrus-redis-hook) | Hook for logging to a ELK stack (through Redis) | +| [Rollrus](https://github.com/heroku/rollrus) | Hook for sending errors to rollbar | +| [Scribe](https://github.com/sagar8192/logrus-scribe-hook) | Hook for logging to [Scribe](https://github.com/facebookarchive/scribe)| +| [Sentry](https://github.com/evalphobia/logrus_sentry) | Send errors to the Sentry error logging and aggregation service. | +| [Slackrus](https://github.com/johntdyer/slackrus) | Hook for Slack chat. | +| [Stackdriver](https://github.com/knq/sdhook) | Hook for logging to [Google Stackdriver](https://cloud.google.com/logging/) | +| [Sumorus](https://github.com/doublefree/sumorus) | Hook for logging to [SumoLogic](https://www.sumologic.com/)| +| [Syslog](https://github.com/sirupsen/logrus/blob/master/hooks/syslog/syslog.go) | Send errors to remote syslog server. Uses standard library `log/syslog` behind the scenes. | +| [Syslog TLS](https://github.com/shinji62/logrus-syslog-ng) | Send errors to remote syslog server with TLS support. | +| [TraceView](https://github.com/evalphobia/logrus_appneta) | Hook for logging to [AppNeta TraceView](https://www.appneta.com/products/traceview/) | +| [Typetalk](https://github.com/dragon3/logrus-typetalk-hook) | Hook for logging to [Typetalk](https://www.typetalk.in/) | +| [logz.io](https://github.com/ripcurld00d/logrus-logzio-hook) | Hook for logging to [logz.io](https://logz.io), a Log as a Service using Logstash | +| [SQS-Hook](https://github.com/tsarpaul/logrus_sqs) | Hook for logging to [Amazon Simple Queue Service (SQS)](https://aws.amazon.com/sqs/) | + +#### Level logging + +Logrus has six logging levels: Debug, Info, Warning, Error, Fatal and Panic. + +```go +log.Debug("Useful debugging information.") +log.Info("Something noteworthy happened!") +log.Warn("You should probably take a look at this.") +log.Error("Something failed but I'm not quitting.") +// Calls os.Exit(1) after logging +log.Fatal("Bye.") +// Calls panic() after logging +log.Panic("I'm bailing.") +``` + +You can set the logging level on a `Logger`, then it will only log entries with +that severity or anything above it: + +```go +// Will log anything that is info or above (warn, error, fatal, panic). Default. +log.SetLevel(log.InfoLevel) +``` + +It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose +environment if your application has that. + +#### Entries + +Besides the fields added with `WithField` or `WithFields` some fields are +automatically added to all logging events: + +1. `time`. The timestamp when the entry was created. +2. `msg`. The logging message passed to `{Info,Warn,Error,Fatal,Panic}` after + the `AddFields` call. E.g. `Failed to send event.` +3. `level`. The logging level. E.g. `info`. + +#### Environments + +Logrus has no notion of environment. + +If you wish for hooks and formatters to only be used in specific environments, +you should handle that yourself. For example, if your application has a global +variable `Environment`, which is a string representation of the environment you +could do: + +```go +import ( + log "github.com/sirupsen/logrus" +) + +init() { + // do something here to set environment depending on an environment variable + // or command-line flag + if Environment == "production" { + log.SetFormatter(&log.JSONFormatter{}) + } else { + // The TextFormatter is default, you don't actually have to do this. + log.SetFormatter(&log.TextFormatter{}) + } +} +``` + +This configuration is how `logrus` was intended to be used, but JSON in +production is mostly only useful if you do log aggregation with tools like +Splunk or Logstash. + +#### Formatters + +The built-in logging formatters are: + +* `logrus.TextFormatter`. Logs the event in colors if stdout is a tty, otherwise + without colors. + * *Note:* to force colored output when there is no TTY, set the `ForceColors` + field to `true`. To force no colored output even if there is a TTY set the + `DisableColors` field to `true`. For Windows, see + [github.com/mattn/go-colorable](https://github.com/mattn/go-colorable). + * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#TextFormatter). +* `logrus.JSONFormatter`. Logs fields as JSON. + * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#JSONFormatter). + +Third party logging formatters: + +* [`FluentdFormatter`](https://github.com/joonix/log). Formats entries that can by parsed by Kubernetes and Google Container Engine. +* [`logstash`](https://github.com/bshuster-repo/logrus-logstash-hook). Logs fields as [Logstash](http://logstash.net) Events. +* [`prefixed`](https://github.com/x-cray/logrus-prefixed-formatter). Displays log entry source along with alternative layout. +* [`zalgo`](https://github.com/aybabtme/logzalgo). Invoking the P͉̫o̳̼̊w̖͈̰͎e̬͔̭͂r͚̼̹̲ ̫͓͉̳͈Å̠͕͖̚fÌÍÌ  ͕̲̞͖͑Z̖̫̤̫ͪa͉̬͈̗lÍ–ÍŽg̳̥o̰̥̅!̣͔̲̻͊̄ ̙̘̦̹̦. + +You can define your formatter by implementing the `Formatter` interface, +requiring a `Format` method. `Format` takes an `*Entry`. `entry.Data` is a +`Fields` type (`map[string]interface{}`) with all your fields as well as the +default ones (see Entries section above): + +```go +type MyJSONFormatter struct { +} + +log.SetFormatter(new(MyJSONFormatter)) + +func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) { + // Note this doesn't include Time, Level and Message which are available on + // the Entry. Consult `godoc` on information about those fields or read the + // source of the official loggers. + serialized, err := json.Marshal(entry.Data) + if err != nil { + return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) + } + return append(serialized, '\n'), nil +} +``` + +#### Logger as an `io.Writer` + +Logrus can be transformed into an `io.Writer`. That writer is the end of an `io.Pipe` and it is your responsibility to close it. + +```go +w := logger.Writer() +defer w.Close() + +srv := http.Server{ + // create a stdlib log.Logger that writes to + // logrus.Logger. + ErrorLog: log.New(w, "", 0), +} +``` + +Each line written to that writer will be printed the usual way, using formatters +and hooks. The level for those entries is `info`. + +This means that we can override the standard library logger easily: + +```go +logger := logrus.New() +logger.Formatter = &logrus.JSONFormatter{} + +// Use logrus for standard log output +// Note that `log` here references stdlib's log +// Not logrus imported under the name `log`. +log.SetOutput(logger.Writer()) +``` + +#### Rotation + +Log rotation is not provided with Logrus. Log rotation should be done by an +external program (like `logrotate(8)`) that can compress and delete old log +entries. It should not be a feature of the application-level logger. + +#### Tools + +| Tool | Description | +| ---- | ----------- | +|[Logrus Mate](https://github.com/gogap/logrus_mate)|Logrus mate is a tool for Logrus to manage loggers, you can initial logger's level, hook and formatter by config file, the logger will generated with different config at different environment.| +|[Logrus Viper Helper](https://github.com/heirko/go-contrib/tree/master/logrusHelper)|An Helper around Logrus to wrap with spf13/Viper to load configuration with fangs! And to simplify Logrus configuration use some behavior of [Logrus Mate](https://github.com/gogap/logrus_mate). [sample](https://github.com/heirko/iris-contrib/blob/master/middleware/logrus-logger/example) | + +#### Testing + +Logrus has a built in facility for asserting the presence of log messages. This is implemented through the `test` hook and provides: + +* decorators for existing logger (`test.NewLocal` and `test.NewGlobal`) which basically just add the `test` hook +* a test logger (`test.NewNullLogger`) that just records log messages (and does not output any): + +```go +import( + "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus/hooks/test" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestSomething(t*testing.T){ + logger, hook := test.NewNullLogger() + logger.Error("Helloerror") + + assert.Equal(t, 1, len(hook.Entries)) + assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level) + assert.Equal(t, "Helloerror", hook.LastEntry().Message) + + hook.Reset() + assert.Nil(t, hook.LastEntry()) +} +``` + +#### Fatal handlers + +Logrus can register one or more functions that will be called when any `fatal` +level message is logged. The registered handlers will be executed before +logrus performs a `os.Exit(1)`. This behavior may be helpful if callers need +to gracefully shutdown. Unlike a `panic("Something went wrong...")` call which can be intercepted with a deferred `recover` a call to `os.Exit(1)` can not be intercepted. + +``` +... +handler := func() { + // gracefully shutdown something... +} +logrus.RegisterExitHandler(handler) +... +``` + +#### Thread safety + +By default Logger is protected by mutex for concurrent writes, this mutex is invoked when calling hooks and writing logs. +If you are sure such locking is not needed, you can call logger.SetNoLock() to disable the locking. + +Situation when locking is not needed includes: + +* You have no hooks registered, or hooks calling is already thread-safe. + +* Writing to logger.Out is already thread-safe, for example: + + 1) logger.Out is protected by locks. + + 2) logger.Out is a os.File handler opened with `O_APPEND` flag, and every write is smaller than 4k. (This allow multi-thread/multi-process writing) + + (Refer to http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/) diff --git a/vendor/github.com/sirupsen/logrus/alt_exit.go b/vendor/github.com/sirupsen/logrus/alt_exit.go new file mode 100644 index 0000000..8af9063 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/alt_exit.go @@ -0,0 +1,64 @@ +package logrus + +// The following code was sourced and modified from the +// https://github.com/tebeka/atexit package governed by the following license: +// +// Copyright (c) 2012 Miki Tebeka . +// +// 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. + +import ( + "fmt" + "os" +) + +var handlers = []func(){} + +func runHandler(handler func()) { + defer func() { + if err := recover(); err != nil { + fmt.Fprintln(os.Stderr, "Error: Logrus exit handler error:", err) + } + }() + + handler() +} + +func runHandlers() { + for _, handler := range handlers { + runHandler(handler) + } +} + +// Exit runs all the Logrus atexit handlers and then terminates the program using os.Exit(code) +func Exit(code int) { + runHandlers() + os.Exit(code) +} + +// RegisterExitHandler adds a Logrus Exit handler, call logrus.Exit to invoke +// all handlers. The handlers will also be invoked when any Fatal log entry is +// made. +// +// This method is useful when a caller wishes to use logrus to log a fatal +// message but also needs to gracefully shutdown. An example usecase could be +// closing database connections, or sending a alert that the application is +// closing. +func RegisterExitHandler(handler func()) { + handlers = append(handlers, handler) +} diff --git a/vendor/github.com/sirupsen/logrus/alt_exit_test.go b/vendor/github.com/sirupsen/logrus/alt_exit_test.go new file mode 100644 index 0000000..a08b1a8 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/alt_exit_test.go @@ -0,0 +1,83 @@ +package logrus + +import ( + "io/ioutil" + "log" + "os" + "os/exec" + "path/filepath" + "testing" + "time" +) + +func TestRegister(t *testing.T) { + current := len(handlers) + RegisterExitHandler(func() {}) + if len(handlers) != current+1 { + t.Fatalf("expected %d handlers, got %d", current+1, len(handlers)) + } +} + +func TestHandler(t *testing.T) { + tempDir, err := ioutil.TempDir("", "test_handler") + if err != nil { + log.Fatalf("can't create temp dir. %q", err) + } + defer os.RemoveAll(tempDir) + + gofile := filepath.Join(tempDir, "gofile.go") + if err := ioutil.WriteFile(gofile, testprog, 0666); err != nil { + t.Fatalf("can't create go file. %q", err) + } + + outfile := filepath.Join(tempDir, "outfile.out") + arg := time.Now().UTC().String() + err = exec.Command("go", "run", gofile, outfile, arg).Run() + if err == nil { + t.Fatalf("completed normally, should have failed") + } + + data, err := ioutil.ReadFile(outfile) + if err != nil { + t.Fatalf("can't read output file %s. %q", outfile, err) + } + + if string(data) != arg { + t.Fatalf("bad data. Expected %q, got %q", data, arg) + } +} + +var testprog = []byte(` +// Test program for atexit, gets output file and data as arguments and writes +// data to output file in atexit handler. +package main + +import ( + "github.com/sirupsen/logrus" + "flag" + "fmt" + "io/ioutil" +) + +var outfile = "" +var data = "" + +func handler() { + ioutil.WriteFile(outfile, []byte(data), 0666) +} + +func badHandler() { + n := 0 + fmt.Println(1/n) +} + +func main() { + flag.Parse() + outfile = flag.Arg(0) + data = flag.Arg(1) + + logrus.RegisterExitHandler(handler) + logrus.RegisterExitHandler(badHandler) + logrus.Fatal("Bye bye") +} +`) diff --git a/vendor/github.com/sirupsen/logrus/appveyor.yml b/vendor/github.com/sirupsen/logrus/appveyor.yml new file mode 100644 index 0000000..96c2ce1 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/appveyor.yml @@ -0,0 +1,14 @@ +version: "{build}" +platform: x64 +clone_folder: c:\gopath\src\github.com\sirupsen\logrus +environment: + GOPATH: c:\gopath +branches: + only: + - master +install: + - set PATH=%GOPATH%\bin;c:\go\bin;%PATH% + - go version +build_script: + - go get -t + - go test diff --git a/vendor/github.com/sirupsen/logrus/doc.go b/vendor/github.com/sirupsen/logrus/doc.go new file mode 100644 index 0000000..da67aba --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/doc.go @@ -0,0 +1,26 @@ +/* +Package logrus is a structured logger for Go, completely API compatible with the standard library logger. + + +The simplest way to use Logrus is simply the package-level exported logger: + + package main + + import ( + log "github.com/sirupsen/logrus" + ) + + func main() { + log.WithFields(log.Fields{ + "animal": "walrus", + "number": 1, + "size": 10, + }).Info("A walrus appears") + } + +Output: + time="2015-09-07T08:48:33Z" level=info msg="A walrus appears" animal=walrus number=1 size=10 + +For a full guide visit https://github.com/sirupsen/logrus +*/ +package logrus diff --git a/vendor/github.com/sirupsen/logrus/entry.go b/vendor/github.com/sirupsen/logrus/entry.go new file mode 100644 index 0000000..5bf582e --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/entry.go @@ -0,0 +1,276 @@ +package logrus + +import ( + "bytes" + "fmt" + "os" + "sync" + "time" +) + +var bufferPool *sync.Pool + +func init() { + bufferPool = &sync.Pool{ + New: func() interface{} { + return new(bytes.Buffer) + }, + } +} + +// Defines the key when adding errors using WithError. +var ErrorKey = "error" + +// An entry is the final or intermediate Logrus logging entry. It contains all +// the fields passed with WithField{,s}. It's finally logged when Debug, Info, +// Warn, Error, Fatal or Panic is called on it. These objects can be reused and +// passed around as much as you wish to avoid field duplication. +type Entry struct { + Logger *Logger + + // Contains all the fields set by the user. + Data Fields + + // Time at which the log entry was created + Time time.Time + + // Level the log entry was logged at: Debug, Info, Warn, Error, Fatal or Panic + // This field will be set on entry firing and the value will be equal to the one in Logger struct field. + Level Level + + // Message passed to Debug, Info, Warn, Error, Fatal or Panic + Message string + + // When formatter is called in entry.log(), an Buffer may be set to entry + Buffer *bytes.Buffer +} + +func NewEntry(logger *Logger) *Entry { + return &Entry{ + Logger: logger, + // Default is three fields, give a little extra room + Data: make(Fields, 5), + } +} + +// Returns the string representation from the reader and ultimately the +// formatter. +func (entry *Entry) String() (string, error) { + serialized, err := entry.Logger.Formatter.Format(entry) + if err != nil { + return "", err + } + str := string(serialized) + return str, nil +} + +// Add an error as single field (using the key defined in ErrorKey) to the Entry. +func (entry *Entry) WithError(err error) *Entry { + return entry.WithField(ErrorKey, err) +} + +// Add a single field to the Entry. +func (entry *Entry) WithField(key string, value interface{}) *Entry { + return entry.WithFields(Fields{key: value}) +} + +// Add a map of fields to the Entry. +func (entry *Entry) WithFields(fields Fields) *Entry { + data := make(Fields, len(entry.Data)+len(fields)) + for k, v := range entry.Data { + data[k] = v + } + for k, v := range fields { + data[k] = v + } + return &Entry{Logger: entry.Logger, Data: data} +} + +// This function is not declared with a pointer value because otherwise +// race conditions will occur when using multiple goroutines +func (entry Entry) log(level Level, msg string) { + var buffer *bytes.Buffer + entry.Time = time.Now() + entry.Level = level + entry.Message = msg + + if err := entry.Logger.Hooks.Fire(level, &entry); err != nil { + entry.Logger.mu.Lock() + fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err) + entry.Logger.mu.Unlock() + } + buffer = bufferPool.Get().(*bytes.Buffer) + buffer.Reset() + defer bufferPool.Put(buffer) + entry.Buffer = buffer + serialized, err := entry.Logger.Formatter.Format(&entry) + entry.Buffer = nil + if err != nil { + entry.Logger.mu.Lock() + fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err) + entry.Logger.mu.Unlock() + } else { + entry.Logger.mu.Lock() + _, err = entry.Logger.Out.Write(serialized) + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err) + } + entry.Logger.mu.Unlock() + } + + // To avoid Entry#log() returning a value that only would make sense for + // panic() to use in Entry#Panic(), we avoid the allocation by checking + // directly here. + if level <= PanicLevel { + panic(&entry) + } +} + +func (entry *Entry) Debug(args ...interface{}) { + if entry.Logger.level() >= DebugLevel { + entry.log(DebugLevel, fmt.Sprint(args...)) + } +} + +func (entry *Entry) Print(args ...interface{}) { + entry.Info(args...) +} + +func (entry *Entry) Info(args ...interface{}) { + if entry.Logger.level() >= InfoLevel { + entry.log(InfoLevel, fmt.Sprint(args...)) + } +} + +func (entry *Entry) Warn(args ...interface{}) { + if entry.Logger.level() >= WarnLevel { + entry.log(WarnLevel, fmt.Sprint(args...)) + } +} + +func (entry *Entry) Warning(args ...interface{}) { + entry.Warn(args...) +} + +func (entry *Entry) Error(args ...interface{}) { + if entry.Logger.level() >= ErrorLevel { + entry.log(ErrorLevel, fmt.Sprint(args...)) + } +} + +func (entry *Entry) Fatal(args ...interface{}) { + if entry.Logger.level() >= FatalLevel { + entry.log(FatalLevel, fmt.Sprint(args...)) + } + Exit(1) +} + +func (entry *Entry) Panic(args ...interface{}) { + if entry.Logger.level() >= PanicLevel { + entry.log(PanicLevel, fmt.Sprint(args...)) + } + panic(fmt.Sprint(args...)) +} + +// Entry Printf family functions + +func (entry *Entry) Debugf(format string, args ...interface{}) { + if entry.Logger.level() >= DebugLevel { + entry.Debug(fmt.Sprintf(format, args...)) + } +} + +func (entry *Entry) Infof(format string, args ...interface{}) { + if entry.Logger.level() >= InfoLevel { + entry.Info(fmt.Sprintf(format, args...)) + } +} + +func (entry *Entry) Printf(format string, args ...interface{}) { + entry.Infof(format, args...) +} + +func (entry *Entry) Warnf(format string, args ...interface{}) { + if entry.Logger.level() >= WarnLevel { + entry.Warn(fmt.Sprintf(format, args...)) + } +} + +func (entry *Entry) Warningf(format string, args ...interface{}) { + entry.Warnf(format, args...) +} + +func (entry *Entry) Errorf(format string, args ...interface{}) { + if entry.Logger.level() >= ErrorLevel { + entry.Error(fmt.Sprintf(format, args...)) + } +} + +func (entry *Entry) Fatalf(format string, args ...interface{}) { + if entry.Logger.level() >= FatalLevel { + entry.Fatal(fmt.Sprintf(format, args...)) + } + Exit(1) +} + +func (entry *Entry) Panicf(format string, args ...interface{}) { + if entry.Logger.level() >= PanicLevel { + entry.Panic(fmt.Sprintf(format, args...)) + } +} + +// Entry Println family functions + +func (entry *Entry) Debugln(args ...interface{}) { + if entry.Logger.level() >= DebugLevel { + entry.Debug(entry.sprintlnn(args...)) + } +} + +func (entry *Entry) Infoln(args ...interface{}) { + if entry.Logger.level() >= InfoLevel { + entry.Info(entry.sprintlnn(args...)) + } +} + +func (entry *Entry) Println(args ...interface{}) { + entry.Infoln(args...) +} + +func (entry *Entry) Warnln(args ...interface{}) { + if entry.Logger.level() >= WarnLevel { + entry.Warn(entry.sprintlnn(args...)) + } +} + +func (entry *Entry) Warningln(args ...interface{}) { + entry.Warnln(args...) +} + +func (entry *Entry) Errorln(args ...interface{}) { + if entry.Logger.level() >= ErrorLevel { + entry.Error(entry.sprintlnn(args...)) + } +} + +func (entry *Entry) Fatalln(args ...interface{}) { + if entry.Logger.level() >= FatalLevel { + entry.Fatal(entry.sprintlnn(args...)) + } + Exit(1) +} + +func (entry *Entry) Panicln(args ...interface{}) { + if entry.Logger.level() >= PanicLevel { + entry.Panic(entry.sprintlnn(args...)) + } +} + +// Sprintlnn => Sprint no newline. This is to get the behavior of how +// fmt.Sprintln where spaces are always added between operands, regardless of +// their type. Instead of vendoring the Sprintln implementation to spare a +// string allocation, we do the simplest thing. +func (entry *Entry) sprintlnn(args ...interface{}) string { + msg := fmt.Sprintln(args...) + return msg[:len(msg)-1] +} diff --git a/vendor/github.com/sirupsen/logrus/entry_test.go b/vendor/github.com/sirupsen/logrus/entry_test.go new file mode 100644 index 0000000..99c3b41 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/entry_test.go @@ -0,0 +1,77 @@ +package logrus + +import ( + "bytes" + "fmt" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestEntryWithError(t *testing.T) { + + assert := assert.New(t) + + defer func() { + ErrorKey = "error" + }() + + err := fmt.Errorf("kaboom at layer %d", 4711) + + assert.Equal(err, WithError(err).Data["error"]) + + logger := New() + logger.Out = &bytes.Buffer{} + entry := NewEntry(logger) + + assert.Equal(err, entry.WithError(err).Data["error"]) + + ErrorKey = "err" + + assert.Equal(err, entry.WithError(err).Data["err"]) + +} + +func TestEntryPanicln(t *testing.T) { + errBoom := fmt.Errorf("boom time") + + defer func() { + p := recover() + assert.NotNil(t, p) + + switch pVal := p.(type) { + case *Entry: + assert.Equal(t, "kaboom", pVal.Message) + assert.Equal(t, errBoom, pVal.Data["err"]) + default: + t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal) + } + }() + + logger := New() + logger.Out = &bytes.Buffer{} + entry := NewEntry(logger) + entry.WithField("err", errBoom).Panicln("kaboom") +} + +func TestEntryPanicf(t *testing.T) { + errBoom := fmt.Errorf("boom again") + + defer func() { + p := recover() + assert.NotNil(t, p) + + switch pVal := p.(type) { + case *Entry: + assert.Equal(t, "kaboom true", pVal.Message) + assert.Equal(t, errBoom, pVal.Data["err"]) + default: + t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal) + } + }() + + logger := New() + logger.Out = &bytes.Buffer{} + entry := NewEntry(logger) + entry.WithField("err", errBoom).Panicf("kaboom %v", true) +} diff --git a/vendor/github.com/sirupsen/logrus/example_basic_test.go b/vendor/github.com/sirupsen/logrus/example_basic_test.go new file mode 100644 index 0000000..a2acf55 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/example_basic_test.go @@ -0,0 +1,69 @@ +package logrus_test + +import ( + "github.com/sirupsen/logrus" + "os" +) + +func Example_basic() { + var log = logrus.New() + log.Formatter = new(logrus.JSONFormatter) + log.Formatter = new(logrus.TextFormatter) //default + log.Formatter.(*logrus.TextFormatter).DisableTimestamp = true // remove timestamp from test output + log.Level = logrus.DebugLevel + log.Out = os.Stdout + + // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666) + // if err == nil { + // log.Out = file + // } else { + // log.Info("Failed to log to file, using default stderr") + // } + + defer func() { + err := recover() + if err != nil { + entry := err.(*logrus.Entry) + log.WithFields(logrus.Fields{ + "omg": true, + "err_animal": entry.Data["animal"], + "err_size": entry.Data["size"], + "err_level": entry.Level, + "err_message": entry.Message, + "number": 100, + }).Error("The ice breaks!") // or use Fatal() to force the process to exit with a nonzero code + } + }() + + log.WithFields(logrus.Fields{ + "animal": "walrus", + "number": 8, + }).Debug("Started observing beach") + + log.WithFields(logrus.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") + + log.WithFields(logrus.Fields{ + "omg": true, + "number": 122, + }).Warn("The group's number increased tremendously!") + + log.WithFields(logrus.Fields{ + "temperature": -4, + }).Debug("Temperature changes") + + log.WithFields(logrus.Fields{ + "animal": "orca", + "size": 9009, + }).Panic("It's over 9000!") + + // Output: + // level=debug msg="Started observing beach" animal=walrus number=8 + // level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10 + // level=warning msg="The group's number increased tremendously!" number=122 omg=true + // level=debug msg="Temperature changes" temperature=-4 + // level=panic msg="It's over 9000!" animal=orca size=9009 + // level=error msg="The ice breaks!" err_animal=orca err_level=panic err_message="It's over 9000!" err_size=9009 number=100 omg=true +} diff --git a/vendor/github.com/sirupsen/logrus/example_hook_test.go b/vendor/github.com/sirupsen/logrus/example_hook_test.go new file mode 100644 index 0000000..d4ddffc --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/example_hook_test.go @@ -0,0 +1,35 @@ +package logrus_test + +import ( + "github.com/sirupsen/logrus" + "gopkg.in/gemnasium/logrus-airbrake-hook.v2" + "os" +) + +func Example_hook() { + var log = logrus.New() + log.Formatter = new(logrus.TextFormatter) // default + log.Formatter.(*logrus.TextFormatter).DisableTimestamp = true // remove timestamp from test output + log.Hooks.Add(airbrake.NewHook(123, "xyz", "development")) + log.Out = os.Stdout + + log.WithFields(logrus.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") + + log.WithFields(logrus.Fields{ + "omg": true, + "number": 122, + }).Warn("The group's number increased tremendously!") + + log.WithFields(logrus.Fields{ + "omg": true, + "number": 100, + }).Error("The ice breaks!") + + // Output: + // level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10 + // level=warning msg="The group's number increased tremendously!" number=122 omg=true + // level=error msg="The ice breaks!" number=100 omg=true +} diff --git a/vendor/github.com/sirupsen/logrus/exported.go b/vendor/github.com/sirupsen/logrus/exported.go new file mode 100644 index 0000000..013183e --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/exported.go @@ -0,0 +1,193 @@ +package logrus + +import ( + "io" +) + +var ( + // std is the name of the standard logger in stdlib `log` + std = New() +) + +func StandardLogger() *Logger { + return std +} + +// SetOutput sets the standard logger output. +func SetOutput(out io.Writer) { + std.mu.Lock() + defer std.mu.Unlock() + std.Out = out +} + +// SetFormatter sets the standard logger formatter. +func SetFormatter(formatter Formatter) { + std.mu.Lock() + defer std.mu.Unlock() + std.Formatter = formatter +} + +// SetLevel sets the standard logger level. +func SetLevel(level Level) { + std.mu.Lock() + defer std.mu.Unlock() + std.SetLevel(level) +} + +// GetLevel returns the standard logger level. +func GetLevel() Level { + std.mu.Lock() + defer std.mu.Unlock() + return std.level() +} + +// AddHook adds a hook to the standard logger hooks. +func AddHook(hook Hook) { + std.mu.Lock() + defer std.mu.Unlock() + std.Hooks.Add(hook) +} + +// WithError creates an entry from the standard logger and adds an error to it, using the value defined in ErrorKey as key. +func WithError(err error) *Entry { + return std.WithField(ErrorKey, err) +} + +// WithField creates an entry from the standard logger and adds a field to +// it. If you want multiple fields, use `WithFields`. +// +// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal +// or Panic on the Entry it returns. +func WithField(key string, value interface{}) *Entry { + return std.WithField(key, value) +} + +// WithFields creates an entry from the standard logger and adds multiple +// fields to it. This is simply a helper for `WithField`, invoking it +// once for each field. +// +// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal +// or Panic on the Entry it returns. +func WithFields(fields Fields) *Entry { + return std.WithFields(fields) +} + +// Debug logs a message at level Debug on the standard logger. +func Debug(args ...interface{}) { + std.Debug(args...) +} + +// Print logs a message at level Info on the standard logger. +func Print(args ...interface{}) { + std.Print(args...) +} + +// Info logs a message at level Info on the standard logger. +func Info(args ...interface{}) { + std.Info(args...) +} + +// Warn logs a message at level Warn on the standard logger. +func Warn(args ...interface{}) { + std.Warn(args...) +} + +// Warning logs a message at level Warn on the standard logger. +func Warning(args ...interface{}) { + std.Warning(args...) +} + +// Error logs a message at level Error on the standard logger. +func Error(args ...interface{}) { + std.Error(args...) +} + +// Panic logs a message at level Panic on the standard logger. +func Panic(args ...interface{}) { + std.Panic(args...) +} + +// Fatal logs a message at level Fatal on the standard logger. +func Fatal(args ...interface{}) { + std.Fatal(args...) +} + +// Debugf logs a message at level Debug on the standard logger. +func Debugf(format string, args ...interface{}) { + std.Debugf(format, args...) +} + +// Printf logs a message at level Info on the standard logger. +func Printf(format string, args ...interface{}) { + std.Printf(format, args...) +} + +// Infof logs a message at level Info on the standard logger. +func Infof(format string, args ...interface{}) { + std.Infof(format, args...) +} + +// Warnf logs a message at level Warn on the standard logger. +func Warnf(format string, args ...interface{}) { + std.Warnf(format, args...) +} + +// Warningf logs a message at level Warn on the standard logger. +func Warningf(format string, args ...interface{}) { + std.Warningf(format, args...) +} + +// Errorf logs a message at level Error on the standard logger. +func Errorf(format string, args ...interface{}) { + std.Errorf(format, args...) +} + +// Panicf logs a message at level Panic on the standard logger. +func Panicf(format string, args ...interface{}) { + std.Panicf(format, args...) +} + +// Fatalf logs a message at level Fatal on the standard logger. +func Fatalf(format string, args ...interface{}) { + std.Fatalf(format, args...) +} + +// Debugln logs a message at level Debug on the standard logger. +func Debugln(args ...interface{}) { + std.Debugln(args...) +} + +// Println logs a message at level Info on the standard logger. +func Println(args ...interface{}) { + std.Println(args...) +} + +// Infoln logs a message at level Info on the standard logger. +func Infoln(args ...interface{}) { + std.Infoln(args...) +} + +// Warnln logs a message at level Warn on the standard logger. +func Warnln(args ...interface{}) { + std.Warnln(args...) +} + +// Warningln logs a message at level Warn on the standard logger. +func Warningln(args ...interface{}) { + std.Warningln(args...) +} + +// Errorln logs a message at level Error on the standard logger. +func Errorln(args ...interface{}) { + std.Errorln(args...) +} + +// Panicln logs a message at level Panic on the standard logger. +func Panicln(args ...interface{}) { + std.Panicln(args...) +} + +// Fatalln logs a message at level Fatal on the standard logger. +func Fatalln(args ...interface{}) { + std.Fatalln(args...) +} diff --git a/vendor/github.com/sirupsen/logrus/formatter.go b/vendor/github.com/sirupsen/logrus/formatter.go new file mode 100644 index 0000000..b183ff5 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/formatter.go @@ -0,0 +1,45 @@ +package logrus + +import "time" + +const defaultTimestampFormat = time.RFC3339 + +// The Formatter interface is used to implement a custom Formatter. It takes an +// `Entry`. It exposes all the fields, including the default ones: +// +// * `entry.Data["msg"]`. The message passed from Info, Warn, Error .. +// * `entry.Data["time"]`. The timestamp. +// * `entry.Data["level"]. The level the entry was logged at. +// +// Any additional fields added with `WithField` or `WithFields` are also in +// `entry.Data`. Format is expected to return an array of bytes which are then +// logged to `logger.Out`. +type Formatter interface { + Format(*Entry) ([]byte, error) +} + +// This is to not silently overwrite `time`, `msg` and `level` fields when +// dumping it. If this code wasn't there doing: +// +// logrus.WithField("level", 1).Info("hello") +// +// Would just silently drop the user provided level. Instead with this code +// it'll logged as: +// +// {"level": "info", "fields.level": 1, "msg": "hello", "time": "..."} +// +// It's not exported because it's still using Data in an opinionated way. It's to +// avoid code duplication between the two default formatters. +func prefixFieldClashes(data Fields) { + if t, ok := data["time"]; ok { + data["fields.time"] = t + } + + if m, ok := data["msg"]; ok { + data["fields.msg"] = m + } + + if l, ok := data["level"]; ok { + data["fields.level"] = l + } +} diff --git a/vendor/github.com/sirupsen/logrus/formatter_bench_test.go b/vendor/github.com/sirupsen/logrus/formatter_bench_test.go new file mode 100644 index 0000000..d948158 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/formatter_bench_test.go @@ -0,0 +1,101 @@ +package logrus + +import ( + "fmt" + "testing" + "time" +) + +// smallFields is a small size data set for benchmarking +var smallFields = Fields{ + "foo": "bar", + "baz": "qux", + "one": "two", + "three": "four", +} + +// largeFields is a large size data set for benchmarking +var largeFields = Fields{ + "foo": "bar", + "baz": "qux", + "one": "two", + "three": "four", + "five": "six", + "seven": "eight", + "nine": "ten", + "eleven": "twelve", + "thirteen": "fourteen", + "fifteen": "sixteen", + "seventeen": "eighteen", + "nineteen": "twenty", + "a": "b", + "c": "d", + "e": "f", + "g": "h", + "i": "j", + "k": "l", + "m": "n", + "o": "p", + "q": "r", + "s": "t", + "u": "v", + "w": "x", + "y": "z", + "this": "will", + "make": "thirty", + "entries": "yeah", +} + +var errorFields = Fields{ + "foo": fmt.Errorf("bar"), + "baz": fmt.Errorf("qux"), +} + +func BenchmarkErrorTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{DisableColors: true}, errorFields) +} + +func BenchmarkSmallTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{DisableColors: true}, smallFields) +} + +func BenchmarkLargeTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{DisableColors: true}, largeFields) +} + +func BenchmarkSmallColoredTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{ForceColors: true}, smallFields) +} + +func BenchmarkLargeColoredTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{ForceColors: true}, largeFields) +} + +func BenchmarkSmallJSONFormatter(b *testing.B) { + doBenchmark(b, &JSONFormatter{}, smallFields) +} + +func BenchmarkLargeJSONFormatter(b *testing.B) { + doBenchmark(b, &JSONFormatter{}, largeFields) +} + +func doBenchmark(b *testing.B, formatter Formatter, fields Fields) { + logger := New() + + entry := &Entry{ + Time: time.Time{}, + Level: InfoLevel, + Message: "message", + Data: fields, + Logger: logger, + } + var d []byte + var err error + for i := 0; i < b.N; i++ { + d, err = formatter.Format(entry) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(len(d))) + } +} diff --git a/vendor/github.com/sirupsen/logrus/hook_test.go b/vendor/github.com/sirupsen/logrus/hook_test.go new file mode 100644 index 0000000..13f34cb --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hook_test.go @@ -0,0 +1,122 @@ +package logrus + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +type TestHook struct { + Fired bool +} + +func (hook *TestHook) Fire(entry *Entry) error { + hook.Fired = true + return nil +} + +func (hook *TestHook) Levels() []Level { + return []Level{ + DebugLevel, + InfoLevel, + WarnLevel, + ErrorLevel, + FatalLevel, + PanicLevel, + } +} + +func TestHookFires(t *testing.T) { + hook := new(TestHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook) + assert.Equal(t, hook.Fired, false) + + log.Print("test") + }, func(fields Fields) { + assert.Equal(t, hook.Fired, true) + }) +} + +type ModifyHook struct { +} + +func (hook *ModifyHook) Fire(entry *Entry) error { + entry.Data["wow"] = "whale" + return nil +} + +func (hook *ModifyHook) Levels() []Level { + return []Level{ + DebugLevel, + InfoLevel, + WarnLevel, + ErrorLevel, + FatalLevel, + PanicLevel, + } +} + +func TestHookCanModifyEntry(t *testing.T) { + hook := new(ModifyHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook) + log.WithField("wow", "elephant").Print("test") + }, func(fields Fields) { + assert.Equal(t, fields["wow"], "whale") + }) +} + +func TestCanFireMultipleHooks(t *testing.T) { + hook1 := new(ModifyHook) + hook2 := new(TestHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook1) + log.Hooks.Add(hook2) + + log.WithField("wow", "elephant").Print("test") + }, func(fields Fields) { + assert.Equal(t, fields["wow"], "whale") + assert.Equal(t, hook2.Fired, true) + }) +} + +type ErrorHook struct { + Fired bool +} + +func (hook *ErrorHook) Fire(entry *Entry) error { + hook.Fired = true + return nil +} + +func (hook *ErrorHook) Levels() []Level { + return []Level{ + ErrorLevel, + } +} + +func TestErrorHookShouldntFireOnInfo(t *testing.T) { + hook := new(ErrorHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook) + log.Info("test") + }, func(fields Fields) { + assert.Equal(t, hook.Fired, false) + }) +} + +func TestErrorHookShouldFireOnError(t *testing.T) { + hook := new(ErrorHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook) + log.Error("test") + }, func(fields Fields) { + assert.Equal(t, hook.Fired, true) + }) +} diff --git a/vendor/github.com/sirupsen/logrus/hooks.go b/vendor/github.com/sirupsen/logrus/hooks.go new file mode 100644 index 0000000..3f151cd --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks.go @@ -0,0 +1,34 @@ +package logrus + +// A hook to be fired when logging on the logging levels returned from +// `Levels()` on your implementation of the interface. Note that this is not +// fired in a goroutine or a channel with workers, you should handle such +// functionality yourself if your call is non-blocking and you don't wish for +// the logging calls for levels returned from `Levels()` to block. +type Hook interface { + Levels() []Level + Fire(*Entry) error +} + +// Internal type for storing the hooks on a logger instance. +type LevelHooks map[Level][]Hook + +// Add a hook to an instance of logger. This is called with +// `log.Hooks.Add(new(MyHook))` where `MyHook` implements the `Hook` interface. +func (hooks LevelHooks) Add(hook Hook) { + for _, level := range hook.Levels() { + hooks[level] = append(hooks[level], hook) + } +} + +// Fire all the hooks for the passed level. Used by `entry.log` to fire +// appropriate hooks for a log entry. +func (hooks LevelHooks) Fire(level Level, entry *Entry) error { + for _, hook := range hooks[level] { + if err := hook.Fire(entry); err != nil { + return err + } + } + + return nil +} diff --git a/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md b/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md new file mode 100644 index 0000000..1bbc0f7 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md @@ -0,0 +1,39 @@ +# Syslog Hooks for Logrus :walrus: + +## Usage + +```go +import ( + "log/syslog" + "github.com/sirupsen/logrus" + lSyslog "github.com/sirupsen/logrus/hooks/syslog" +) + +func main() { + log := logrus.New() + hook, err := lSyslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") + + if err == nil { + log.Hooks.Add(hook) + } +} +``` + +If you want to connect to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). Just assign empty string to the first two parameters of `NewSyslogHook`. It should look like the following. + +```go +import ( + "log/syslog" + "github.com/sirupsen/logrus" + lSyslog "github.com/sirupsen/logrus/hooks/syslog" +) + +func main() { + log := logrus.New() + hook, err := lSyslog.NewSyslogHook("", "", syslog.LOG_INFO, "") + + if err == nil { + log.Hooks.Add(hook) + } +} +``` diff --git a/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go new file mode 100644 index 0000000..329ce0d --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go @@ -0,0 +1,55 @@ +// +build !windows,!nacl,!plan9 + +package syslog + +import ( + "fmt" + "log/syslog" + "os" + + "github.com/sirupsen/logrus" +) + +// SyslogHook to send logs via syslog. +type SyslogHook struct { + Writer *syslog.Writer + SyslogNetwork string + SyslogRaddr string +} + +// Creates a hook to be added to an instance of logger. This is called with +// `hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_DEBUG, "")` +// `if err == nil { log.Hooks.Add(hook) }` +func NewSyslogHook(network, raddr string, priority syslog.Priority, tag string) (*SyslogHook, error) { + w, err := syslog.Dial(network, raddr, priority, tag) + return &SyslogHook{w, network, raddr}, err +} + +func (hook *SyslogHook) Fire(entry *logrus.Entry) error { + line, err := entry.String() + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err) + return err + } + + switch entry.Level { + case logrus.PanicLevel: + return hook.Writer.Crit(line) + case logrus.FatalLevel: + return hook.Writer.Crit(line) + case logrus.ErrorLevel: + return hook.Writer.Err(line) + case logrus.WarnLevel: + return hook.Writer.Warning(line) + case logrus.InfoLevel: + return hook.Writer.Info(line) + case logrus.DebugLevel: + return hook.Writer.Debug(line) + default: + return nil + } +} + +func (hook *SyslogHook) Levels() []logrus.Level { + return logrus.AllLevels +} diff --git a/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go new file mode 100644 index 0000000..5ec3a44 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go @@ -0,0 +1,27 @@ +package syslog + +import ( + "log/syslog" + "testing" + + "github.com/sirupsen/logrus" +) + +func TestLocalhostAddAndPrint(t *testing.T) { + log := logrus.New() + hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") + + if err != nil { + t.Errorf("Unable to connect to local syslog.") + } + + log.Hooks.Add(hook) + + for _, level := range hook.Levels() { + if len(log.Hooks[level]) != 1 { + t.Errorf("SyslogHook was not added. The length of log.Hooks[%v]: %v", level, len(log.Hooks[level])) + } + } + + log.Info("Congratulations!") +} diff --git a/vendor/github.com/sirupsen/logrus/hooks/test/test.go b/vendor/github.com/sirupsen/logrus/hooks/test/test.go new file mode 100644 index 0000000..62c4845 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/test/test.go @@ -0,0 +1,95 @@ +// The Test package is used for testing logrus. It is here for backwards +// compatibility from when logrus' organization was upper-case. Please use +// lower-case logrus and the `null` package instead of this one. +package test + +import ( + "io/ioutil" + "sync" + + "github.com/sirupsen/logrus" +) + +// Hook is a hook designed for dealing with logs in test scenarios. +type Hook struct { + // Entries is an array of all entries that have been received by this hook. + // For safe access, use the AllEntries() method, rather than reading this + // value directly. + Entries []*logrus.Entry + mu sync.RWMutex +} + +// NewGlobal installs a test hook for the global logger. +func NewGlobal() *Hook { + + hook := new(Hook) + logrus.AddHook(hook) + + return hook + +} + +// NewLocal installs a test hook for a given local logger. +func NewLocal(logger *logrus.Logger) *Hook { + + hook := new(Hook) + logger.Hooks.Add(hook) + + return hook + +} + +// NewNullLogger creates a discarding logger and installs the test hook. +func NewNullLogger() (*logrus.Logger, *Hook) { + + logger := logrus.New() + logger.Out = ioutil.Discard + + return logger, NewLocal(logger) + +} + +func (t *Hook) Fire(e *logrus.Entry) error { + t.mu.Lock() + defer t.mu.Unlock() + t.Entries = append(t.Entries, e) + return nil +} + +func (t *Hook) Levels() []logrus.Level { + return logrus.AllLevels +} + +// LastEntry returns the last entry that was logged or nil. +func (t *Hook) LastEntry() *logrus.Entry { + t.mu.RLock() + defer t.mu.RUnlock() + i := len(t.Entries) - 1 + if i < 0 { + return nil + } + // Make a copy, for safety + e := *t.Entries[i] + return &e +} + +// AllEntries returns all entries that were logged. +func (t *Hook) AllEntries() []*logrus.Entry { + t.mu.RLock() + defer t.mu.RUnlock() + // Make a copy so the returned value won't race with future log requests + entries := make([]*logrus.Entry, len(t.Entries)) + for i, entry := range t.Entries { + // Make a copy, for safety + e := *entry + entries[i] = &e + } + return entries +} + +// Reset removes all Entries from this test hook. +func (t *Hook) Reset() { + t.mu.Lock() + defer t.mu.Unlock() + t.Entries = make([]*logrus.Entry, 0) +} diff --git a/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go b/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go new file mode 100644 index 0000000..3f55cfe --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go @@ -0,0 +1,39 @@ +package test + +import ( + "testing" + + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" +) + +func TestAllHooks(t *testing.T) { + + assert := assert.New(t) + + logger, hook := NewNullLogger() + assert.Nil(hook.LastEntry()) + assert.Equal(0, len(hook.Entries)) + + logger.Error("Hello error") + assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level) + assert.Equal("Hello error", hook.LastEntry().Message) + assert.Equal(1, len(hook.Entries)) + + logger.Warn("Hello warning") + assert.Equal(logrus.WarnLevel, hook.LastEntry().Level) + assert.Equal("Hello warning", hook.LastEntry().Message) + assert.Equal(2, len(hook.Entries)) + + hook.Reset() + assert.Nil(hook.LastEntry()) + assert.Equal(0, len(hook.Entries)) + + hook = NewGlobal() + + logrus.Error("Hello error") + assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level) + assert.Equal("Hello error", hook.LastEntry().Message) + assert.Equal(1, len(hook.Entries)) + +} diff --git a/vendor/github.com/sirupsen/logrus/json_formatter.go b/vendor/github.com/sirupsen/logrus/json_formatter.go new file mode 100644 index 0000000..fb01c1b --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/json_formatter.go @@ -0,0 +1,79 @@ +package logrus + +import ( + "encoding/json" + "fmt" +) + +type fieldKey string + +// FieldMap allows customization of the key names for default fields. +type FieldMap map[fieldKey]string + +// Default key names for the default fields +const ( + FieldKeyMsg = "msg" + FieldKeyLevel = "level" + FieldKeyTime = "time" +) + +func (f FieldMap) resolve(key fieldKey) string { + if k, ok := f[key]; ok { + return k + } + + return string(key) +} + +// JSONFormatter formats logs into parsable json +type JSONFormatter struct { + // TimestampFormat sets the format used for marshaling timestamps. + TimestampFormat string + + // DisableTimestamp allows disabling automatic timestamps in output + DisableTimestamp bool + + // FieldMap allows users to customize the names of keys for default fields. + // As an example: + // formatter := &JSONFormatter{ + // FieldMap: FieldMap{ + // FieldKeyTime: "@timestamp", + // FieldKeyLevel: "@level", + // FieldKeyMsg: "@message", + // }, + // } + FieldMap FieldMap +} + +// Format renders a single log entry +func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) { + data := make(Fields, len(entry.Data)+3) + for k, v := range entry.Data { + switch v := v.(type) { + case error: + // Otherwise errors are ignored by `encoding/json` + // https://github.com/sirupsen/logrus/issues/137 + data[k] = v.Error() + default: + data[k] = v + } + } + prefixFieldClashes(data) + + timestampFormat := f.TimestampFormat + if timestampFormat == "" { + timestampFormat = defaultTimestampFormat + } + + if !f.DisableTimestamp { + data[f.FieldMap.resolve(FieldKeyTime)] = entry.Time.Format(timestampFormat) + } + data[f.FieldMap.resolve(FieldKeyMsg)] = entry.Message + data[f.FieldMap.resolve(FieldKeyLevel)] = entry.Level.String() + + serialized, err := json.Marshal(data) + if err != nil { + return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) + } + return append(serialized, '\n'), nil +} diff --git a/vendor/github.com/sirupsen/logrus/json_formatter_test.go b/vendor/github.com/sirupsen/logrus/json_formatter_test.go new file mode 100644 index 0000000..51093a7 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/json_formatter_test.go @@ -0,0 +1,199 @@ +package logrus + +import ( + "encoding/json" + "errors" + "strings" + "testing" +) + +func TestErrorNotLost(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("error", errors.New("wild walrus"))) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["error"] != "wild walrus" { + t.Fatal("Error field not set") + } +} + +func TestErrorNotLostOnFieldNotNamedError(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("omg", errors.New("wild walrus"))) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["omg"] != "wild walrus" { + t.Fatal("Error field not set") + } +} + +func TestFieldClashWithTime(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("time", "right now!")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["fields.time"] != "right now!" { + t.Fatal("fields.time not set to original time field") + } + + if entry["time"] != "0001-01-01T00:00:00Z" { + t.Fatal("time field not set to current time, was: ", entry["time"]) + } +} + +func TestFieldClashWithMsg(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("msg", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["fields.msg"] != "something" { + t.Fatal("fields.msg not set to original msg field") + } +} + +func TestFieldClashWithLevel(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["fields.level"] != "something" { + t.Fatal("fields.level not set to original level field") + } +} + +func TestJSONEntryEndsWithNewline(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + if b[len(b)-1] != '\n' { + t.Fatal("Expected JSON log entry to end with a newline") + } +} + +func TestJSONMessageKey(t *testing.T) { + formatter := &JSONFormatter{ + FieldMap: FieldMap{ + FieldKeyMsg: "message", + }, + } + + b, err := formatter.Format(&Entry{Message: "oh hai"}) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if !(strings.Contains(s, "message") && strings.Contains(s, "oh hai")) { + t.Fatal("Expected JSON to format message key") + } +} + +func TestJSONLevelKey(t *testing.T) { + formatter := &JSONFormatter{ + FieldMap: FieldMap{ + FieldKeyLevel: "somelevel", + }, + } + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if !strings.Contains(s, "somelevel") { + t.Fatal("Expected JSON to format level key") + } +} + +func TestJSONTimeKey(t *testing.T) { + formatter := &JSONFormatter{ + FieldMap: FieldMap{ + FieldKeyTime: "timeywimey", + }, + } + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if !strings.Contains(s, "timeywimey") { + t.Fatal("Expected JSON to format time key") + } +} + +func TestJSONDisableTimestamp(t *testing.T) { + formatter := &JSONFormatter{ + DisableTimestamp: true, + } + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if strings.Contains(s, FieldKeyTime) { + t.Error("Did not prevent timestamp", s) + } +} + +func TestJSONEnableTimestamp(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if !strings.Contains(s, FieldKeyTime) { + t.Error("Timestamp not present", s) + } +} diff --git a/vendor/github.com/sirupsen/logrus/logger.go b/vendor/github.com/sirupsen/logrus/logger.go new file mode 100644 index 0000000..2acab05 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/logger.go @@ -0,0 +1,317 @@ +package logrus + +import ( + "io" + "os" + "sync" + "sync/atomic" +) + +type Logger struct { + // The logs are `io.Copy`'d to this in a mutex. It's common to set this to a + // file, or leave it default which is `os.Stderr`. You can also set this to + // something more adventorous, such as logging to Kafka. + Out io.Writer + // Hooks for the logger instance. These allow firing events based on logging + // levels and log entries. For example, to send errors to an error tracking + // service, log to StatsD or dump the core on fatal errors. + Hooks LevelHooks + // All log entries pass through the formatter before logged to Out. The + // included formatters are `TextFormatter` and `JSONFormatter` for which + // TextFormatter is the default. In development (when a TTY is attached) it + // logs with colors, but to a file it wouldn't. You can easily implement your + // own that implements the `Formatter` interface, see the `README` or included + // formatters for examples. + Formatter Formatter + // The logging level the logger should log at. This is typically (and defaults + // to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be + // logged. + Level Level + // Used to sync writing to the log. Locking is enabled by Default + mu MutexWrap + // Reusable empty entry + entryPool sync.Pool +} + +type MutexWrap struct { + lock sync.Mutex + disabled bool +} + +func (mw *MutexWrap) Lock() { + if !mw.disabled { + mw.lock.Lock() + } +} + +func (mw *MutexWrap) Unlock() { + if !mw.disabled { + mw.lock.Unlock() + } +} + +func (mw *MutexWrap) Disable() { + mw.disabled = true +} + +// Creates a new logger. Configuration should be set by changing `Formatter`, +// `Out` and `Hooks` directly on the default logger instance. You can also just +// instantiate your own: +// +// var log = &Logger{ +// Out: os.Stderr, +// Formatter: new(JSONFormatter), +// Hooks: make(LevelHooks), +// Level: logrus.DebugLevel, +// } +// +// It's recommended to make this a global instance called `log`. +func New() *Logger { + return &Logger{ + Out: os.Stderr, + Formatter: new(TextFormatter), + Hooks: make(LevelHooks), + Level: InfoLevel, + } +} + +func (logger *Logger) newEntry() *Entry { + entry, ok := logger.entryPool.Get().(*Entry) + if ok { + return entry + } + return NewEntry(logger) +} + +func (logger *Logger) releaseEntry(entry *Entry) { + logger.entryPool.Put(entry) +} + +// Adds a field to the log entry, note that it doesn't log until you call +// Debug, Print, Info, Warn, Fatal or Panic. It only creates a log entry. +// If you want multiple fields, use `WithFields`. +func (logger *Logger) WithField(key string, value interface{}) *Entry { + entry := logger.newEntry() + defer logger.releaseEntry(entry) + return entry.WithField(key, value) +} + +// Adds a struct of fields to the log entry. All it does is call `WithField` for +// each `Field`. +func (logger *Logger) WithFields(fields Fields) *Entry { + entry := logger.newEntry() + defer logger.releaseEntry(entry) + return entry.WithFields(fields) +} + +// Add an error as single field to the log entry. All it does is call +// `WithError` for the given `error`. +func (logger *Logger) WithError(err error) *Entry { + entry := logger.newEntry() + defer logger.releaseEntry(entry) + return entry.WithError(err) +} + +func (logger *Logger) Debugf(format string, args ...interface{}) { + if logger.level() >= DebugLevel { + entry := logger.newEntry() + entry.Debugf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Infof(format string, args ...interface{}) { + if logger.level() >= InfoLevel { + entry := logger.newEntry() + entry.Infof(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Printf(format string, args ...interface{}) { + entry := logger.newEntry() + entry.Printf(format, args...) + logger.releaseEntry(entry) +} + +func (logger *Logger) Warnf(format string, args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warnf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Warningf(format string, args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warnf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Errorf(format string, args ...interface{}) { + if logger.level() >= ErrorLevel { + entry := logger.newEntry() + entry.Errorf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Fatalf(format string, args ...interface{}) { + if logger.level() >= FatalLevel { + entry := logger.newEntry() + entry.Fatalf(format, args...) + logger.releaseEntry(entry) + } + Exit(1) +} + +func (logger *Logger) Panicf(format string, args ...interface{}) { + if logger.level() >= PanicLevel { + entry := logger.newEntry() + entry.Panicf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Debug(args ...interface{}) { + if logger.level() >= DebugLevel { + entry := logger.newEntry() + entry.Debug(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Info(args ...interface{}) { + if logger.level() >= InfoLevel { + entry := logger.newEntry() + entry.Info(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Print(args ...interface{}) { + entry := logger.newEntry() + entry.Info(args...) + logger.releaseEntry(entry) +} + +func (logger *Logger) Warn(args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warn(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Warning(args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warn(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Error(args ...interface{}) { + if logger.level() >= ErrorLevel { + entry := logger.newEntry() + entry.Error(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Fatal(args ...interface{}) { + if logger.level() >= FatalLevel { + entry := logger.newEntry() + entry.Fatal(args...) + logger.releaseEntry(entry) + } + Exit(1) +} + +func (logger *Logger) Panic(args ...interface{}) { + if logger.level() >= PanicLevel { + entry := logger.newEntry() + entry.Panic(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Debugln(args ...interface{}) { + if logger.level() >= DebugLevel { + entry := logger.newEntry() + entry.Debugln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Infoln(args ...interface{}) { + if logger.level() >= InfoLevel { + entry := logger.newEntry() + entry.Infoln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Println(args ...interface{}) { + entry := logger.newEntry() + entry.Println(args...) + logger.releaseEntry(entry) +} + +func (logger *Logger) Warnln(args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warnln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Warningln(args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warnln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Errorln(args ...interface{}) { + if logger.level() >= ErrorLevel { + entry := logger.newEntry() + entry.Errorln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Fatalln(args ...interface{}) { + if logger.level() >= FatalLevel { + entry := logger.newEntry() + entry.Fatalln(args...) + logger.releaseEntry(entry) + } + Exit(1) +} + +func (logger *Logger) Panicln(args ...interface{}) { + if logger.level() >= PanicLevel { + entry := logger.newEntry() + entry.Panicln(args...) + logger.releaseEntry(entry) + } +} + +//When file is opened with appending mode, it's safe to +//write concurrently to a file (within 4k message on Linux). +//In these cases user can choose to disable the lock. +func (logger *Logger) SetNoLock() { + logger.mu.Disable() +} + +func (logger *Logger) level() Level { + return Level(atomic.LoadUint32((*uint32)(&logger.Level))) +} + +func (logger *Logger) SetLevel(level Level) { + atomic.StoreUint32((*uint32)(&logger.Level), uint32(level)) +} diff --git a/vendor/github.com/sirupsen/logrus/logger_bench_test.go b/vendor/github.com/sirupsen/logrus/logger_bench_test.go new file mode 100644 index 0000000..dd23a35 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/logger_bench_test.go @@ -0,0 +1,61 @@ +package logrus + +import ( + "os" + "testing" +) + +// smallFields is a small size data set for benchmarking +var loggerFields = Fields{ + "foo": "bar", + "baz": "qux", + "one": "two", + "three": "four", +} + +func BenchmarkDummyLogger(b *testing.B) { + nullf, err := os.OpenFile("/dev/null", os.O_WRONLY, 0666) + if err != nil { + b.Fatalf("%v", err) + } + defer nullf.Close() + doLoggerBenchmark(b, nullf, &TextFormatter{DisableColors: true}, smallFields) +} + +func BenchmarkDummyLoggerNoLock(b *testing.B) { + nullf, err := os.OpenFile("/dev/null", os.O_WRONLY|os.O_APPEND, 0666) + if err != nil { + b.Fatalf("%v", err) + } + defer nullf.Close() + doLoggerBenchmarkNoLock(b, nullf, &TextFormatter{DisableColors: true}, smallFields) +} + +func doLoggerBenchmark(b *testing.B, out *os.File, formatter Formatter, fields Fields) { + logger := Logger{ + Out: out, + Level: InfoLevel, + Formatter: formatter, + } + entry := logger.WithFields(fields) + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + entry.Info("aaa") + } + }) +} + +func doLoggerBenchmarkNoLock(b *testing.B, out *os.File, formatter Formatter, fields Fields) { + logger := Logger{ + Out: out, + Level: InfoLevel, + Formatter: formatter, + } + logger.SetNoLock() + entry := logger.WithFields(fields) + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + entry.Info("aaa") + } + }) +} diff --git a/vendor/github.com/sirupsen/logrus/logrus.go b/vendor/github.com/sirupsen/logrus/logrus.go new file mode 100644 index 0000000..dd38999 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/logrus.go @@ -0,0 +1,143 @@ +package logrus + +import ( + "fmt" + "log" + "strings" +) + +// Fields type, used to pass to `WithFields`. +type Fields map[string]interface{} + +// Level type +type Level uint32 + +// Convert the Level to a string. E.g. PanicLevel becomes "panic". +func (level Level) String() string { + switch level { + case DebugLevel: + return "debug" + case InfoLevel: + return "info" + case WarnLevel: + return "warning" + case ErrorLevel: + return "error" + case FatalLevel: + return "fatal" + case PanicLevel: + return "panic" + } + + return "unknown" +} + +// ParseLevel takes a string level and returns the Logrus log level constant. +func ParseLevel(lvl string) (Level, error) { + switch strings.ToLower(lvl) { + case "panic": + return PanicLevel, nil + case "fatal": + return FatalLevel, nil + case "error": + return ErrorLevel, nil + case "warn", "warning": + return WarnLevel, nil + case "info": + return InfoLevel, nil + case "debug": + return DebugLevel, nil + } + + var l Level + return l, fmt.Errorf("not a valid logrus Level: %q", lvl) +} + +// A constant exposing all logging levels +var AllLevels = []Level{ + PanicLevel, + FatalLevel, + ErrorLevel, + WarnLevel, + InfoLevel, + DebugLevel, +} + +// These are the different logging levels. You can set the logging level to log +// on your instance of logger, obtained with `logrus.New()`. +const ( + // PanicLevel level, highest level of severity. Logs and then calls panic with the + // message passed to Debug, Info, ... + PanicLevel Level = iota + // FatalLevel level. Logs and then calls `os.Exit(1)`. It will exit even if the + // logging level is set to Panic. + FatalLevel + // ErrorLevel level. Logs. Used for errors that should definitely be noted. + // Commonly used for hooks to send errors to an error tracking service. + ErrorLevel + // WarnLevel level. Non-critical entries that deserve eyes. + WarnLevel + // InfoLevel level. General operational entries about what's going on inside the + // application. + InfoLevel + // DebugLevel level. Usually only enabled when debugging. Very verbose logging. + DebugLevel +) + +// Won't compile if StdLogger can't be realized by a log.Logger +var ( + _ StdLogger = &log.Logger{} + _ StdLogger = &Entry{} + _ StdLogger = &Logger{} +) + +// StdLogger is what your logrus-enabled library should take, that way +// it'll accept a stdlib logger and a logrus logger. There's no standard +// interface, this is the closest we get, unfortunately. +type StdLogger interface { + Print(...interface{}) + Printf(string, ...interface{}) + Println(...interface{}) + + Fatal(...interface{}) + Fatalf(string, ...interface{}) + Fatalln(...interface{}) + + Panic(...interface{}) + Panicf(string, ...interface{}) + Panicln(...interface{}) +} + +// The FieldLogger interface generalizes the Entry and Logger types +type FieldLogger interface { + WithField(key string, value interface{}) *Entry + WithFields(fields Fields) *Entry + WithError(err error) *Entry + + Debugf(format string, args ...interface{}) + Infof(format string, args ...interface{}) + Printf(format string, args ...interface{}) + Warnf(format string, args ...interface{}) + Warningf(format string, args ...interface{}) + Errorf(format string, args ...interface{}) + Fatalf(format string, args ...interface{}) + Panicf(format string, args ...interface{}) + + Debug(args ...interface{}) + Info(args ...interface{}) + Print(args ...interface{}) + Warn(args ...interface{}) + Warning(args ...interface{}) + Error(args ...interface{}) + Fatal(args ...interface{}) + Panic(args ...interface{}) + + Debugln(args ...interface{}) + Infoln(args ...interface{}) + Println(args ...interface{}) + Warnln(args ...interface{}) + Warningln(args ...interface{}) + Errorln(args ...interface{}) + Fatalln(args ...interface{}) + Panicln(args ...interface{}) +} diff --git a/vendor/github.com/sirupsen/logrus/logrus_test.go b/vendor/github.com/sirupsen/logrus/logrus_test.go new file mode 100644 index 0000000..78cbc28 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/logrus_test.go @@ -0,0 +1,386 @@ +package logrus + +import ( + "bytes" + "encoding/json" + "strconv" + "strings" + "sync" + "testing" + + "github.com/stretchr/testify/assert" +) + +func LogAndAssertJSON(t *testing.T, log func(*Logger), assertions func(fields Fields)) { + var buffer bytes.Buffer + var fields Fields + + logger := New() + logger.Out = &buffer + logger.Formatter = new(JSONFormatter) + + log(logger) + + err := json.Unmarshal(buffer.Bytes(), &fields) + assert.Nil(t, err) + + assertions(fields) +} + +func LogAndAssertText(t *testing.T, log func(*Logger), assertions func(fields map[string]string)) { + var buffer bytes.Buffer + + logger := New() + logger.Out = &buffer + logger.Formatter = &TextFormatter{ + DisableColors: true, + } + + log(logger) + + fields := make(map[string]string) + for _, kv := range strings.Split(buffer.String(), " ") { + if !strings.Contains(kv, "=") { + continue + } + kvArr := strings.Split(kv, "=") + key := strings.TrimSpace(kvArr[0]) + val := kvArr[1] + if kvArr[1][0] == '"' { + var err error + val, err = strconv.Unquote(val) + assert.NoError(t, err) + } + fields[key] = val + } + assertions(fields) +} + +func TestPrint(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Print("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + assert.Equal(t, fields["level"], "info") + }) +} + +func TestInfo(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + assert.Equal(t, fields["level"], "info") + }) +} + +func TestWarn(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Warn("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + assert.Equal(t, fields["level"], "warning") + }) +} + +func TestInfolnShouldAddSpacesBetweenStrings(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Infoln("test", "test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test test") + }) +} + +func TestInfolnShouldAddSpacesBetweenStringAndNonstring(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Infoln("test", 10) + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test 10") + }) +} + +func TestInfolnShouldAddSpacesBetweenTwoNonStrings(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Infoln(10, 10) + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "10 10") + }) +} + +func TestInfoShouldAddSpacesBetweenTwoNonStrings(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Infoln(10, 10) + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "10 10") + }) +} + +func TestInfoShouldNotAddSpacesBetweenStringAndNonstring(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Info("test", 10) + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test10") + }) +} + +func TestInfoShouldNotAddSpacesBetweenStrings(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Info("test", "test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "testtest") + }) +} + +func TestWithFieldsShouldAllowAssignments(t *testing.T) { + var buffer bytes.Buffer + var fields Fields + + logger := New() + logger.Out = &buffer + logger.Formatter = new(JSONFormatter) + + localLog := logger.WithFields(Fields{ + "key1": "value1", + }) + + localLog.WithField("key2", "value2").Info("test") + err := json.Unmarshal(buffer.Bytes(), &fields) + assert.Nil(t, err) + + assert.Equal(t, "value2", fields["key2"]) + assert.Equal(t, "value1", fields["key1"]) + + buffer = bytes.Buffer{} + fields = Fields{} + localLog.Info("test") + err = json.Unmarshal(buffer.Bytes(), &fields) + assert.Nil(t, err) + + _, ok := fields["key2"] + assert.Equal(t, false, ok) + assert.Equal(t, "value1", fields["key1"]) +} + +func TestUserSuppliedFieldDoesNotOverwriteDefaults(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.WithField("msg", "hello").Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + }) +} + +func TestUserSuppliedMsgFieldHasPrefix(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.WithField("msg", "hello").Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + assert.Equal(t, fields["fields.msg"], "hello") + }) +} + +func TestUserSuppliedTimeFieldHasPrefix(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.WithField("time", "hello").Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["fields.time"], "hello") + }) +} + +func TestUserSuppliedLevelFieldHasPrefix(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.WithField("level", 1).Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["level"], "info") + assert.Equal(t, fields["fields.level"], 1.0) // JSON has floats only + }) +} + +func TestDefaultFieldsAreNotPrefixed(t *testing.T) { + LogAndAssertText(t, func(log *Logger) { + ll := log.WithField("herp", "derp") + ll.Info("hello") + ll.Info("bye") + }, func(fields map[string]string) { + for _, fieldName := range []string{"fields.level", "fields.time", "fields.msg"} { + if _, ok := fields[fieldName]; ok { + t.Fatalf("should not have prefixed %q: %v", fieldName, fields) + } + } + }) +} + +func TestDoubleLoggingDoesntPrefixPreviousFields(t *testing.T) { + + var buffer bytes.Buffer + var fields Fields + + logger := New() + logger.Out = &buffer + logger.Formatter = new(JSONFormatter) + + llog := logger.WithField("context", "eating raw fish") + + llog.Info("looks delicious") + + err := json.Unmarshal(buffer.Bytes(), &fields) + assert.NoError(t, err, "should have decoded first message") + assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields") + assert.Equal(t, fields["msg"], "looks delicious") + assert.Equal(t, fields["context"], "eating raw fish") + + buffer.Reset() + + llog.Warn("omg it is!") + + err = json.Unmarshal(buffer.Bytes(), &fields) + assert.NoError(t, err, "should have decoded second message") + assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields") + assert.Equal(t, fields["msg"], "omg it is!") + assert.Equal(t, fields["context"], "eating raw fish") + assert.Nil(t, fields["fields.msg"], "should not have prefixed previous `msg` entry") + +} + +func TestConvertLevelToString(t *testing.T) { + assert.Equal(t, "debug", DebugLevel.String()) + assert.Equal(t, "info", InfoLevel.String()) + assert.Equal(t, "warning", WarnLevel.String()) + assert.Equal(t, "error", ErrorLevel.String()) + assert.Equal(t, "fatal", FatalLevel.String()) + assert.Equal(t, "panic", PanicLevel.String()) +} + +func TestParseLevel(t *testing.T) { + l, err := ParseLevel("panic") + assert.Nil(t, err) + assert.Equal(t, PanicLevel, l) + + l, err = ParseLevel("PANIC") + assert.Nil(t, err) + assert.Equal(t, PanicLevel, l) + + l, err = ParseLevel("fatal") + assert.Nil(t, err) + assert.Equal(t, FatalLevel, l) + + l, err = ParseLevel("FATAL") + assert.Nil(t, err) + assert.Equal(t, FatalLevel, l) + + l, err = ParseLevel("error") + assert.Nil(t, err) + assert.Equal(t, ErrorLevel, l) + + l, err = ParseLevel("ERROR") + assert.Nil(t, err) + assert.Equal(t, ErrorLevel, l) + + l, err = ParseLevel("warn") + assert.Nil(t, err) + assert.Equal(t, WarnLevel, l) + + l, err = ParseLevel("WARN") + assert.Nil(t, err) + assert.Equal(t, WarnLevel, l) + + l, err = ParseLevel("warning") + assert.Nil(t, err) + assert.Equal(t, WarnLevel, l) + + l, err = ParseLevel("WARNING") + assert.Nil(t, err) + assert.Equal(t, WarnLevel, l) + + l, err = ParseLevel("info") + assert.Nil(t, err) + assert.Equal(t, InfoLevel, l) + + l, err = ParseLevel("INFO") + assert.Nil(t, err) + assert.Equal(t, InfoLevel, l) + + l, err = ParseLevel("debug") + assert.Nil(t, err) + assert.Equal(t, DebugLevel, l) + + l, err = ParseLevel("DEBUG") + assert.Nil(t, err) + assert.Equal(t, DebugLevel, l) + + l, err = ParseLevel("invalid") + assert.Equal(t, "not a valid logrus Level: \"invalid\"", err.Error()) +} + +func TestGetSetLevelRace(t *testing.T) { + wg := sync.WaitGroup{} + for i := 0; i < 100; i++ { + wg.Add(1) + go func(i int) { + defer wg.Done() + if i%2 == 0 { + SetLevel(InfoLevel) + } else { + GetLevel() + } + }(i) + + } + wg.Wait() +} + +func TestLoggingRace(t *testing.T) { + logger := New() + + var wg sync.WaitGroup + wg.Add(100) + + for i := 0; i < 100; i++ { + go func() { + logger.Info("info") + wg.Done() + }() + } + wg.Wait() +} + +// Compile test +func TestLogrusInterface(t *testing.T) { + var buffer bytes.Buffer + fn := func(l FieldLogger) { + b := l.WithField("key", "value") + b.Debug("Test") + } + // test logger + logger := New() + logger.Out = &buffer + fn(logger) + + // test Entry + e := logger.WithField("another", "value") + fn(e) +} + +// Implements io.Writer using channels for synchronization, so we can wait on +// the Entry.Writer goroutine to write in a non-racey way. This does assume that +// there is a single call to Logger.Out for each message. +type channelWriter chan []byte + +func (cw channelWriter) Write(p []byte) (int, error) { + cw <- p + return len(p), nil +} + +func TestEntryWriter(t *testing.T) { + cw := channelWriter(make(chan []byte, 1)) + log := New() + log.Out = cw + log.Formatter = new(JSONFormatter) + log.WithField("foo", "bar").WriterLevel(WarnLevel).Write([]byte("hello\n")) + + bs := <-cw + var fields Fields + err := json.Unmarshal(bs, &fields) + assert.Nil(t, err) + assert.Equal(t, fields["foo"], "bar") + assert.Equal(t, fields["level"], "warning") +} diff --git a/vendor/github.com/sirupsen/logrus/terminal_bsd.go b/vendor/github.com/sirupsen/logrus/terminal_bsd.go new file mode 100644 index 0000000..d7b3893 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/terminal_bsd.go @@ -0,0 +1,10 @@ +// +build darwin freebsd openbsd netbsd dragonfly +// +build !appengine + +package logrus + +import "golang.org/x/sys/unix" + +const ioctlReadTermios = unix.TIOCGETA + +type Termios unix.Termios diff --git a/vendor/github.com/sirupsen/logrus/terminal_linux.go b/vendor/github.com/sirupsen/logrus/terminal_linux.go new file mode 100644 index 0000000..88d7298 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/terminal_linux.go @@ -0,0 +1,14 @@ +// Based on ssh/terminal: +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine + +package logrus + +import "golang.org/x/sys/unix" + +const ioctlReadTermios = unix.TCGETS + +type Termios unix.Termios diff --git a/vendor/github.com/sirupsen/logrus/text_formatter.go b/vendor/github.com/sirupsen/logrus/text_formatter.go new file mode 100644 index 0000000..be412aa --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/text_formatter.go @@ -0,0 +1,191 @@ +package logrus + +import ( + "bytes" + "fmt" + "io" + "os" + "sort" + "strings" + "sync" + "time" + + "golang.org/x/crypto/ssh/terminal" +) + +const ( + nocolor = 0 + red = 31 + green = 32 + yellow = 33 + blue = 36 + gray = 37 +) + +var ( + baseTimestamp time.Time +) + +func init() { + baseTimestamp = time.Now() +} + +// TextFormatter formats logs into text +type TextFormatter struct { + // Set to true to bypass checking for a TTY before outputting colors. + ForceColors bool + + // Force disabling colors. + DisableColors bool + + // Disable timestamp logging. useful when output is redirected to logging + // system that already adds timestamps. + DisableTimestamp bool + + // Enable logging the full timestamp when a TTY is attached instead of just + // the time passed since beginning of execution. + FullTimestamp bool + + // TimestampFormat to use for display when a full timestamp is printed + TimestampFormat string + + // The fields are sorted by default for a consistent output. For applications + // that log extremely frequently and don't use the JSON formatter this may not + // be desired. + DisableSorting bool + + // QuoteEmptyFields will wrap empty fields in quotes if true + QuoteEmptyFields bool + + // Whether the logger's out is to a terminal + isTerminal bool + + sync.Once +} + +func (f *TextFormatter) init(entry *Entry) { + if entry.Logger != nil { + f.isTerminal = f.checkIfTerminal(entry.Logger.Out) + } +} + +func (f *TextFormatter) checkIfTerminal(w io.Writer) bool { + switch v := w.(type) { + case *os.File: + return terminal.IsTerminal(int(v.Fd())) + default: + return false + } +} + +// Format renders a single log entry +func (f *TextFormatter) Format(entry *Entry) ([]byte, error) { + var b *bytes.Buffer + keys := make([]string, 0, len(entry.Data)) + for k := range entry.Data { + keys = append(keys, k) + } + + if !f.DisableSorting { + sort.Strings(keys) + } + if entry.Buffer != nil { + b = entry.Buffer + } else { + b = &bytes.Buffer{} + } + + prefixFieldClashes(entry.Data) + + f.Do(func() { f.init(entry) }) + + isColored := (f.ForceColors || f.isTerminal) && !f.DisableColors + + timestampFormat := f.TimestampFormat + if timestampFormat == "" { + timestampFormat = defaultTimestampFormat + } + if isColored { + f.printColored(b, entry, keys, timestampFormat) + } else { + if !f.DisableTimestamp { + f.appendKeyValue(b, "time", entry.Time.Format(timestampFormat)) + } + f.appendKeyValue(b, "level", entry.Level.String()) + if entry.Message != "" { + f.appendKeyValue(b, "msg", entry.Message) + } + for _, key := range keys { + f.appendKeyValue(b, key, entry.Data[key]) + } + } + + b.WriteByte('\n') + return b.Bytes(), nil +} + +func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, timestampFormat string) { + var levelColor int + switch entry.Level { + case DebugLevel: + levelColor = gray + case WarnLevel: + levelColor = yellow + case ErrorLevel, FatalLevel, PanicLevel: + levelColor = red + default: + levelColor = blue + } + + levelText := strings.ToUpper(entry.Level.String())[0:4] + + if f.DisableTimestamp { + fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m %-44s ", levelColor, levelText, entry.Message) + } else if !f.FullTimestamp { + fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d] %-44s ", levelColor, levelText, int(entry.Time.Sub(baseTimestamp)/time.Second), entry.Message) + } else { + fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s] %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), entry.Message) + } + for _, k := range keys { + v := entry.Data[k] + fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=", levelColor, k) + f.appendValue(b, v) + } +} + +func (f *TextFormatter) needsQuoting(text string) bool { + if f.QuoteEmptyFields && len(text) == 0 { + return true + } + for _, ch := range text { + if !((ch >= 'a' && ch <= 'z') || + (ch >= 'A' && ch <= 'Z') || + (ch >= '0' && ch <= '9') || + ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '@' || ch == '^' || ch == '+') { + return true + } + } + return false +} + +func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key string, value interface{}) { + if b.Len() > 0 { + b.WriteByte(' ') + } + b.WriteString(key) + b.WriteByte('=') + f.appendValue(b, value) +} + +func (f *TextFormatter) appendValue(b *bytes.Buffer, value interface{}) { + stringVal, ok := value.(string) + if !ok { + stringVal = fmt.Sprint(value) + } + + if !f.needsQuoting(stringVal) { + b.WriteString(stringVal) + } else { + b.WriteString(fmt.Sprintf("%q", stringVal)) + } +} diff --git a/vendor/github.com/sirupsen/logrus/text_formatter_test.go b/vendor/github.com/sirupsen/logrus/text_formatter_test.go new file mode 100644 index 0000000..d93b931 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/text_formatter_test.go @@ -0,0 +1,141 @@ +package logrus + +import ( + "bytes" + "errors" + "fmt" + "strings" + "testing" + "time" +) + +func TestFormatting(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + testCases := []struct { + value string + expected string + }{ + {`foo`, "time=\"0001-01-01T00:00:00Z\" level=panic test=foo\n"}, + } + + for _, tc := range testCases { + b, _ := tf.Format(WithField("test", tc.value)) + + if string(b) != tc.expected { + t.Errorf("formatting expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected) + } + } +} + +func TestQuoting(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + checkQuoting := func(q bool, value interface{}) { + b, _ := tf.Format(WithField("test", value)) + idx := bytes.Index(b, ([]byte)("test=")) + cont := bytes.Contains(b[idx+5:], []byte("\"")) + if cont != q { + if q { + t.Errorf("quoting expected for: %#v", value) + } else { + t.Errorf("quoting not expected for: %#v", value) + } + } + } + + checkQuoting(false, "") + checkQuoting(false, "abcd") + checkQuoting(false, "v1.0") + checkQuoting(false, "1234567890") + checkQuoting(false, "/foobar") + checkQuoting(false, "foo_bar") + checkQuoting(false, "foo@bar") + checkQuoting(false, "foobar^") + checkQuoting(false, "+/-_^@f.oobar") + checkQuoting(true, "foobar$") + checkQuoting(true, "&foobar") + checkQuoting(true, "x y") + checkQuoting(true, "x,y") + checkQuoting(false, errors.New("invalid")) + checkQuoting(true, errors.New("invalid argument")) + + // Test for quoting empty fields. + tf.QuoteEmptyFields = true + checkQuoting(true, "") + checkQuoting(false, "abcd") + checkQuoting(true, errors.New("invalid argument")) +} + +func TestEscaping(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + testCases := []struct { + value string + expected string + }{ + {`ba"r`, `ba\"r`}, + {`ba'r`, `ba'r`}, + } + + for _, tc := range testCases { + b, _ := tf.Format(WithField("test", tc.value)) + if !bytes.Contains(b, []byte(tc.expected)) { + t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected) + } + } +} + +func TestEscaping_Interface(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + ts := time.Now() + + testCases := []struct { + value interface{} + expected string + }{ + {ts, fmt.Sprintf("\"%s\"", ts.String())}, + {errors.New("error: something went wrong"), "\"error: something went wrong\""}, + } + + for _, tc := range testCases { + b, _ := tf.Format(WithField("test", tc.value)) + if !bytes.Contains(b, []byte(tc.expected)) { + t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected) + } + } +} + +func TestTimestampFormat(t *testing.T) { + checkTimeStr := func(format string) { + customFormatter := &TextFormatter{DisableColors: true, TimestampFormat: format} + customStr, _ := customFormatter.Format(WithField("test", "test")) + timeStart := bytes.Index(customStr, ([]byte)("time=")) + timeEnd := bytes.Index(customStr, ([]byte)("level=")) + timeStr := customStr[timeStart+5+len("\"") : timeEnd-1-len("\"")] + if format == "" { + format = time.RFC3339 + } + _, e := time.Parse(format, (string)(timeStr)) + if e != nil { + t.Errorf("time string \"%s\" did not match provided time format \"%s\": %s", timeStr, format, e) + } + } + + checkTimeStr("2006-01-02T15:04:05.000000000Z07:00") + checkTimeStr("Mon Jan _2 15:04:05 2006") + checkTimeStr("") +} + +func TestDisableTimestampWithColoredOutput(t *testing.T) { + tf := &TextFormatter{DisableTimestamp: true, ForceColors: true} + + b, _ := tf.Format(WithField("test", "test")) + if strings.Contains(string(b), "[0000]") { + t.Error("timestamp not expected when DisableTimestamp is true") + } +} + +// TODO add tests for sorting etc., this requires a parser for the text +// formatter output. diff --git a/vendor/github.com/sirupsen/logrus/writer.go b/vendor/github.com/sirupsen/logrus/writer.go new file mode 100644 index 0000000..7bdebed --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/writer.go @@ -0,0 +1,62 @@ +package logrus + +import ( + "bufio" + "io" + "runtime" +) + +func (logger *Logger) Writer() *io.PipeWriter { + return logger.WriterLevel(InfoLevel) +} + +func (logger *Logger) WriterLevel(level Level) *io.PipeWriter { + return NewEntry(logger).WriterLevel(level) +} + +func (entry *Entry) Writer() *io.PipeWriter { + return entry.WriterLevel(InfoLevel) +} + +func (entry *Entry) WriterLevel(level Level) *io.PipeWriter { + reader, writer := io.Pipe() + + var printFunc func(args ...interface{}) + + switch level { + case DebugLevel: + printFunc = entry.Debug + case InfoLevel: + printFunc = entry.Info + case WarnLevel: + printFunc = entry.Warn + case ErrorLevel: + printFunc = entry.Error + case FatalLevel: + printFunc = entry.Fatal + case PanicLevel: + printFunc = entry.Panic + default: + printFunc = entry.Print + } + + go entry.writerScanner(reader, printFunc) + runtime.SetFinalizer(writer, writerFinalizer) + + return writer +} + +func (entry *Entry) writerScanner(reader *io.PipeReader, printFunc func(args ...interface{})) { + scanner := bufio.NewScanner(reader) + for scanner.Scan() { + printFunc(scanner.Text()) + } + if err := scanner.Err(); err != nil { + entry.Errorf("Error while reading from Writer: %s", err) + } + reader.Close() +} + +func writerFinalizer(writer *io.PipeWriter) { + writer.Close() +} diff --git a/vendor/golang.org/x/crypto/.gitattributes b/vendor/golang.org/x/crypto/.gitattributes new file mode 100644 index 0000000..d2f212e --- /dev/null +++ b/vendor/golang.org/x/crypto/.gitattributes @@ -0,0 +1,10 @@ +# Treat all files in this repo as binary, with no git magic updating +# line endings. Windows users contributing to Go will need to use a +# modern version of git and editors capable of LF line endings. +# +# We'll prevent accidental CRLF line endings from entering the repo +# via the git-review gofmt checks. +# +# See golang.org/issue/9281 + +* -text diff --git a/vendor/golang.org/x/crypto/.gitignore b/vendor/golang.org/x/crypto/.gitignore new file mode 100644 index 0000000..8339fd6 --- /dev/null +++ b/vendor/golang.org/x/crypto/.gitignore @@ -0,0 +1,2 @@ +# Add no patterns to .hgignore except for files generated by the build. +last-change diff --git a/vendor/golang.org/x/crypto/AUTHORS b/vendor/golang.org/x/crypto/AUTHORS new file mode 100644 index 0000000..15167cd --- /dev/null +++ b/vendor/golang.org/x/crypto/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/crypto/CONTRIBUTING.md b/vendor/golang.org/x/crypto/CONTRIBUTING.md new file mode 100644 index 0000000..88dff59 --- /dev/null +++ b/vendor/golang.org/x/crypto/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Go + +Go is an open source project. + +It is the work of hundreds of contributors. We appreciate your help! + + +## Filing issues + +When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. +The gophers there will answer or ask you to file an issue if you've tripped over a bug. + +## Contributing code + +Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) +before sending patches. + +**We do not accept GitHub pull requests** +(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). + +Unless otherwise noted, the Go source files are distributed under +the BSD-style license found in the LICENSE file. + diff --git a/vendor/golang.org/x/crypto/CONTRIBUTORS b/vendor/golang.org/x/crypto/CONTRIBUTORS new file mode 100644 index 0000000..1c4577e --- /dev/null +++ b/vendor/golang.org/x/crypto/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/crypto/LICENSE b/vendor/golang.org/x/crypto/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/crypto/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/crypto/PATENTS b/vendor/golang.org/x/crypto/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/crypto/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/crypto/README b/vendor/golang.org/x/crypto/README new file mode 100644 index 0000000..f1e0cbf --- /dev/null +++ b/vendor/golang.org/x/crypto/README @@ -0,0 +1,3 @@ +This repository holds supplementary Go cryptography libraries. + +To submit changes to this repository, see http://golang.org/doc/contribute.html. diff --git a/vendor/golang.org/x/crypto/acme/acme.go b/vendor/golang.org/x/crypto/acme/acme.go new file mode 100644 index 0000000..be18ad7 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/acme.go @@ -0,0 +1,944 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package acme provides an implementation of the +// Automatic Certificate Management Environment (ACME) spec. +// See https://tools.ietf.org/html/draft-ietf-acme-acme-02 for details. +// +// Most common scenarios will want to use autocert subdirectory instead, +// which provides automatic access to certificates from Let's Encrypt +// and any other ACME-based CA. +// +// This package is a work in progress and makes no API stability promises. +package acme + +import ( + "bytes" + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/sha256" + "crypto/tls" + "crypto/x509" + "encoding/base64" + "encoding/hex" + "encoding/json" + "encoding/pem" + "errors" + "fmt" + "io" + "io/ioutil" + "math/big" + "net/http" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/context/ctxhttp" +) + +// LetsEncryptURL is the Directory endpoint of Let's Encrypt CA. +const LetsEncryptURL = "https://acme-v01.api.letsencrypt.org/directory" + +const ( + maxChainLen = 5 // max depth and breadth of a certificate chain + maxCertSize = 1 << 20 // max size of a certificate, in bytes +) + +// CertOption is an optional argument type for Client methods which manipulate +// certificate data. +type CertOption interface { + privateCertOpt() +} + +// WithKey creates an option holding a private/public key pair. +// The private part signs a certificate, and the public part represents the signee. +func WithKey(key crypto.Signer) CertOption { + return &certOptKey{key} +} + +type certOptKey struct { + key crypto.Signer +} + +func (*certOptKey) privateCertOpt() {} + +// WithTemplate creates an option for specifying a certificate template. +// See x509.CreateCertificate for template usage details. +// +// In TLSSNIxChallengeCert methods, the template is also used as parent, +// resulting in a self-signed certificate. +// The DNSNames field of t is always overwritten for tls-sni challenge certs. +func WithTemplate(t *x509.Certificate) CertOption { + return (*certOptTemplate)(t) +} + +type certOptTemplate x509.Certificate + +func (*certOptTemplate) privateCertOpt() {} + +// Client is an ACME client. +// The only required field is Key. An example of creating a client with a new key +// is as follows: +// +// key, err := rsa.GenerateKey(rand.Reader, 2048) +// if err != nil { +// log.Fatal(err) +// } +// client := &Client{Key: key} +// +type Client struct { + // Key is the account key used to register with a CA and sign requests. + // Key.Public() must return a *rsa.PublicKey or *ecdsa.PublicKey. + Key crypto.Signer + + // HTTPClient optionally specifies an HTTP client to use + // instead of http.DefaultClient. + HTTPClient *http.Client + + // DirectoryURL points to the CA directory endpoint. + // If empty, LetsEncryptURL is used. + // Mutating this value after a successful call of Client's Discover method + // will have no effect. + DirectoryURL string + + dirMu sync.Mutex // guards writes to dir + dir *Directory // cached result of Client's Discover method +} + +// Discover performs ACME server discovery using c.DirectoryURL. +// +// It caches successful result. So, subsequent calls will not result in +// a network round-trip. This also means mutating c.DirectoryURL after successful call +// of this method will have no effect. +func (c *Client) Discover(ctx context.Context) (Directory, error) { + c.dirMu.Lock() + defer c.dirMu.Unlock() + if c.dir != nil { + return *c.dir, nil + } + + dirURL := c.DirectoryURL + if dirURL == "" { + dirURL = LetsEncryptURL + } + res, err := ctxhttp.Get(ctx, c.HTTPClient, dirURL) + if err != nil { + return Directory{}, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + return Directory{}, responseError(res) + } + + var v struct { + Reg string `json:"new-reg"` + Authz string `json:"new-authz"` + Cert string `json:"new-cert"` + Revoke string `json:"revoke-cert"` + Meta struct { + Terms string `json:"terms-of-service"` + Website string `json:"website"` + CAA []string `json:"caa-identities"` + } + } + if json.NewDecoder(res.Body).Decode(&v); err != nil { + return Directory{}, err + } + c.dir = &Directory{ + RegURL: v.Reg, + AuthzURL: v.Authz, + CertURL: v.Cert, + RevokeURL: v.Revoke, + Terms: v.Meta.Terms, + Website: v.Meta.Website, + CAA: v.Meta.CAA, + } + return *c.dir, nil +} + +// CreateCert requests a new certificate using the Certificate Signing Request csr encoded in DER format. +// The exp argument indicates the desired certificate validity duration. CA may issue a certificate +// with a different duration. +// If the bundle argument is true, the returned value will also contain the CA (issuer) certificate chain. +// +// In the case where CA server does not provide the issued certificate in the response, +// CreateCert will poll certURL using c.FetchCert, which will result in additional round-trips. +// In such scenario the caller can cancel the polling with ctx. +// +// CreateCert returns an error if the CA's response or chain was unreasonably large. +// Callers are encouraged to parse the returned value to ensure the certificate is valid and has the expected features. +func (c *Client) CreateCert(ctx context.Context, csr []byte, exp time.Duration, bundle bool) (der [][]byte, certURL string, err error) { + if _, err := c.Discover(ctx); err != nil { + return nil, "", err + } + + req := struct { + Resource string `json:"resource"` + CSR string `json:"csr"` + NotBefore string `json:"notBefore,omitempty"` + NotAfter string `json:"notAfter,omitempty"` + }{ + Resource: "new-cert", + CSR: base64.RawURLEncoding.EncodeToString(csr), + } + now := timeNow() + req.NotBefore = now.Format(time.RFC3339) + if exp > 0 { + req.NotAfter = now.Add(exp).Format(time.RFC3339) + } + + res, err := postJWS(ctx, c.HTTPClient, c.Key, c.dir.CertURL, req) + if err != nil { + return nil, "", err + } + defer res.Body.Close() + if res.StatusCode != http.StatusCreated { + return nil, "", responseError(res) + } + + curl := res.Header.Get("location") // cert permanent URL + if res.ContentLength == 0 { + // no cert in the body; poll until we get it + cert, err := c.FetchCert(ctx, curl, bundle) + return cert, curl, err + } + // slurp issued cert and CA chain, if requested + cert, err := responseCert(ctx, c.HTTPClient, res, bundle) + return cert, curl, err +} + +// FetchCert retrieves already issued certificate from the given url, in DER format. +// It retries the request until the certificate is successfully retrieved, +// context is cancelled by the caller or an error response is received. +// +// The returned value will also contain the CA (issuer) certificate if the bundle argument is true. +// +// FetchCert returns an error if the CA's response or chain was unreasonably large. +// Callers are encouraged to parse the returned value to ensure the certificate is valid +// and has expected features. +func (c *Client) FetchCert(ctx context.Context, url string, bundle bool) ([][]byte, error) { + for { + res, err := ctxhttp.Get(ctx, c.HTTPClient, url) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode == http.StatusOK { + return responseCert(ctx, c.HTTPClient, res, bundle) + } + if res.StatusCode > 299 { + return nil, responseError(res) + } + d := retryAfter(res.Header.Get("retry-after"), 3*time.Second) + select { + case <-time.After(d): + // retry + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +// RevokeCert revokes a previously issued certificate cert, provided in DER format. +// +// The key argument, used to sign the request, must be authorized +// to revoke the certificate. It's up to the CA to decide which keys are authorized. +// For instance, the key pair of the certificate may be authorized. +// If the key is nil, c.Key is used instead. +func (c *Client) RevokeCert(ctx context.Context, key crypto.Signer, cert []byte, reason CRLReasonCode) error { + if _, err := c.Discover(ctx); err != nil { + return err + } + + body := &struct { + Resource string `json:"resource"` + Cert string `json:"certificate"` + Reason int `json:"reason"` + }{ + Resource: "revoke-cert", + Cert: base64.RawURLEncoding.EncodeToString(cert), + Reason: int(reason), + } + if key == nil { + key = c.Key + } + res, err := postJWS(ctx, c.HTTPClient, key, c.dir.RevokeURL, body) + if err != nil { + return err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + return responseError(res) + } + return nil +} + +// AcceptTOS always returns true to indicate the acceptance of a CA's Terms of Service +// during account registration. See Register method of Client for more details. +func AcceptTOS(tosURL string) bool { return true } + +// Register creates a new account registration by following the "new-reg" flow. +// It returns registered account. The a argument is not modified. +// +// The registration may require the caller to agree to the CA's Terms of Service (TOS). +// If so, and the account has not indicated the acceptance of the terms (see Account for details), +// Register calls prompt with a TOS URL provided by the CA. Prompt should report +// whether the caller agrees to the terms. To always accept the terms, the caller can use AcceptTOS. +func (c *Client) Register(ctx context.Context, a *Account, prompt func(tosURL string) bool) (*Account, error) { + if _, err := c.Discover(ctx); err != nil { + return nil, err + } + + var err error + if a, err = c.doReg(ctx, c.dir.RegURL, "new-reg", a); err != nil { + return nil, err + } + var accept bool + if a.CurrentTerms != "" && a.CurrentTerms != a.AgreedTerms { + accept = prompt(a.CurrentTerms) + } + if accept { + a.AgreedTerms = a.CurrentTerms + a, err = c.UpdateReg(ctx, a) + } + return a, err +} + +// GetReg retrieves an existing registration. +// The url argument is an Account URI. +func (c *Client) GetReg(ctx context.Context, url string) (*Account, error) { + a, err := c.doReg(ctx, url, "reg", nil) + if err != nil { + return nil, err + } + a.URI = url + return a, nil +} + +// UpdateReg updates an existing registration. +// It returns an updated account copy. The provided account is not modified. +func (c *Client) UpdateReg(ctx context.Context, a *Account) (*Account, error) { + uri := a.URI + a, err := c.doReg(ctx, uri, "reg", a) + if err != nil { + return nil, err + } + a.URI = uri + return a, nil +} + +// Authorize performs the initial step in an authorization flow. +// The caller will then need to choose from and perform a set of returned +// challenges using c.Accept in order to successfully complete authorization. +// +// If an authorization has been previously granted, the CA may return +// a valid authorization (Authorization.Status is StatusValid). If so, the caller +// need not fulfill any challenge and can proceed to requesting a certificate. +func (c *Client) Authorize(ctx context.Context, domain string) (*Authorization, error) { + if _, err := c.Discover(ctx); err != nil { + return nil, err + } + + type authzID struct { + Type string `json:"type"` + Value string `json:"value"` + } + req := struct { + Resource string `json:"resource"` + Identifier authzID `json:"identifier"` + }{ + Resource: "new-authz", + Identifier: authzID{Type: "dns", Value: domain}, + } + res, err := postJWS(ctx, c.HTTPClient, c.Key, c.dir.AuthzURL, req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusCreated { + return nil, responseError(res) + } + + var v wireAuthz + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + if v.Status != StatusPending && v.Status != StatusValid { + return nil, fmt.Errorf("acme: unexpected status: %s", v.Status) + } + return v.authorization(res.Header.Get("Location")), nil +} + +// GetAuthorization retrieves an authorization identified by the given URL. +// +// If a caller needs to poll an authorization until its status is final, +// see the WaitAuthorization method. +func (c *Client) GetAuthorization(ctx context.Context, url string) (*Authorization, error) { + res, err := ctxhttp.Get(ctx, c.HTTPClient, url) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { + return nil, responseError(res) + } + var v wireAuthz + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + return v.authorization(url), nil +} + +// RevokeAuthorization relinquishes an existing authorization identified +// by the given URL. +// The url argument is an Authorization.URI value. +// +// If successful, the caller will be required to obtain a new authorization +// using the Authorize method before being able to request a new certificate +// for the domain associated with the authorization. +// +// It does not revoke existing certificates. +func (c *Client) RevokeAuthorization(ctx context.Context, url string) error { + req := struct { + Resource string `json:"resource"` + Delete bool `json:"delete"` + }{ + Resource: "authz", + Delete: true, + } + res, err := postJWS(ctx, c.HTTPClient, c.Key, url, req) + if err != nil { + return err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + return responseError(res) + } + return nil +} + +// WaitAuthorization polls an authorization at the given URL +// until it is in one of the final states, StatusValid or StatusInvalid, +// or the context is done. +// +// It returns a non-nil Authorization only if its Status is StatusValid. +// In all other cases WaitAuthorization returns an error. +// If the Status is StatusInvalid, the returned error is ErrAuthorizationFailed. +func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorization, error) { + var count int + sleep := func(v string, inc int) error { + count += inc + d := backoff(count, 10*time.Second) + d = retryAfter(v, d) + wakeup := time.NewTimer(d) + defer wakeup.Stop() + select { + case <-ctx.Done(): + return ctx.Err() + case <-wakeup.C: + return nil + } + } + + for { + res, err := ctxhttp.Get(ctx, c.HTTPClient, url) + if err != nil { + return nil, err + } + retry := res.Header.Get("retry-after") + if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { + res.Body.Close() + if err := sleep(retry, 1); err != nil { + return nil, err + } + continue + } + var raw wireAuthz + err = json.NewDecoder(res.Body).Decode(&raw) + res.Body.Close() + if err != nil { + if err := sleep(retry, 0); err != nil { + return nil, err + } + continue + } + if raw.Status == StatusValid { + return raw.authorization(url), nil + } + if raw.Status == StatusInvalid { + return nil, ErrAuthorizationFailed + } + if err := sleep(retry, 0); err != nil { + return nil, err + } + } +} + +// GetChallenge retrieves the current status of an challenge. +// +// A client typically polls a challenge status using this method. +func (c *Client) GetChallenge(ctx context.Context, url string) (*Challenge, error) { + res, err := ctxhttp.Get(ctx, c.HTTPClient, url) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { + return nil, responseError(res) + } + v := wireChallenge{URI: url} + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + return v.challenge(), nil +} + +// Accept informs the server that the client accepts one of its challenges +// previously obtained with c.Authorize. +// +// The server will then perform the validation asynchronously. +func (c *Client) Accept(ctx context.Context, chal *Challenge) (*Challenge, error) { + auth, err := keyAuth(c.Key.Public(), chal.Token) + if err != nil { + return nil, err + } + + req := struct { + Resource string `json:"resource"` + Type string `json:"type"` + Auth string `json:"keyAuthorization"` + }{ + Resource: "challenge", + Type: chal.Type, + Auth: auth, + } + res, err := postJWS(ctx, c.HTTPClient, c.Key, chal.URI, req) + if err != nil { + return nil, err + } + defer res.Body.Close() + // Note: the protocol specifies 200 as the expected response code, but + // letsencrypt seems to be returning 202. + if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { + return nil, responseError(res) + } + + var v wireChallenge + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + return v.challenge(), nil +} + +// DNS01ChallengeRecord returns a DNS record value for a dns-01 challenge response. +// A TXT record containing the returned value must be provisioned under +// "_acme-challenge" name of the domain being validated. +// +// The token argument is a Challenge.Token value. +func (c *Client) DNS01ChallengeRecord(token string) (string, error) { + ka, err := keyAuth(c.Key.Public(), token) + if err != nil { + return "", err + } + b := sha256.Sum256([]byte(ka)) + return base64.RawURLEncoding.EncodeToString(b[:]), nil +} + +// HTTP01ChallengeResponse returns the response for an http-01 challenge. +// Servers should respond with the value to HTTP requests at the URL path +// provided by HTTP01ChallengePath to validate the challenge and prove control +// over a domain name. +// +// The token argument is a Challenge.Token value. +func (c *Client) HTTP01ChallengeResponse(token string) (string, error) { + return keyAuth(c.Key.Public(), token) +} + +// HTTP01ChallengePath returns the URL path at which the response for an http-01 challenge +// should be provided by the servers. +// The response value can be obtained with HTTP01ChallengeResponse. +// +// The token argument is a Challenge.Token value. +func (c *Client) HTTP01ChallengePath(token string) string { + return "/.well-known/acme-challenge/" + token +} + +// TLSSNI01ChallengeCert creates a certificate for TLS-SNI-01 challenge response. +// Servers can present the certificate to validate the challenge and prove control +// over a domain name. +// +// The implementation is incomplete in that the returned value is a single certificate, +// computed only for Z0 of the key authorization. ACME CAs are expected to update +// their implementations to use the newer version, TLS-SNI-02. +// For more details on TLS-SNI-01 see https://tools.ietf.org/html/draft-ietf-acme-acme-01#section-7.3. +// +// The token argument is a Challenge.Token value. +// If a WithKey option is provided, its private part signs the returned cert, +// and the public part is used to specify the signee. +// If no WithKey option is provided, a new ECDSA key is generated using P-256 curve. +// +// The returned certificate is valid for the next 24 hours and must be presented only when +// the server name of the client hello matches exactly the returned name value. +func (c *Client) TLSSNI01ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) { + ka, err := keyAuth(c.Key.Public(), token) + if err != nil { + return tls.Certificate{}, "", err + } + b := sha256.Sum256([]byte(ka)) + h := hex.EncodeToString(b[:]) + name = fmt.Sprintf("%s.%s.acme.invalid", h[:32], h[32:]) + cert, err = tlsChallengeCert([]string{name}, opt) + if err != nil { + return tls.Certificate{}, "", err + } + return cert, name, nil +} + +// TLSSNI02ChallengeCert creates a certificate for TLS-SNI-02 challenge response. +// Servers can present the certificate to validate the challenge and prove control +// over a domain name. For more details on TLS-SNI-02 see +// https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-7.3. +// +// The token argument is a Challenge.Token value. +// If a WithKey option is provided, its private part signs the returned cert, +// and the public part is used to specify the signee. +// If no WithKey option is provided, a new ECDSA key is generated using P-256 curve. +// +// The returned certificate is valid for the next 24 hours and must be presented only when +// the server name in the client hello matches exactly the returned name value. +func (c *Client) TLSSNI02ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) { + b := sha256.Sum256([]byte(token)) + h := hex.EncodeToString(b[:]) + sanA := fmt.Sprintf("%s.%s.token.acme.invalid", h[:32], h[32:]) + + ka, err := keyAuth(c.Key.Public(), token) + if err != nil { + return tls.Certificate{}, "", err + } + b = sha256.Sum256([]byte(ka)) + h = hex.EncodeToString(b[:]) + sanB := fmt.Sprintf("%s.%s.ka.acme.invalid", h[:32], h[32:]) + + cert, err = tlsChallengeCert([]string{sanA, sanB}, opt) + if err != nil { + return tls.Certificate{}, "", err + } + return cert, sanA, nil +} + +// doReg sends all types of registration requests. +// The type of request is identified by typ argument, which is a "resource" +// in the ACME spec terms. +// +// A non-nil acct argument indicates whether the intention is to mutate data +// of the Account. Only Contact and Agreement of its fields are used +// in such cases. +func (c *Client) doReg(ctx context.Context, url string, typ string, acct *Account) (*Account, error) { + req := struct { + Resource string `json:"resource"` + Contact []string `json:"contact,omitempty"` + Agreement string `json:"agreement,omitempty"` + }{ + Resource: typ, + } + if acct != nil { + req.Contact = acct.Contact + req.Agreement = acct.AgreedTerms + } + res, err := postJWS(ctx, c.HTTPClient, c.Key, url, req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode < 200 || res.StatusCode > 299 { + return nil, responseError(res) + } + + var v struct { + Contact []string + Agreement string + Authorizations string + Certificates string + } + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + var tos string + if v := linkHeader(res.Header, "terms-of-service"); len(v) > 0 { + tos = v[0] + } + var authz string + if v := linkHeader(res.Header, "next"); len(v) > 0 { + authz = v[0] + } + return &Account{ + URI: res.Header.Get("Location"), + Contact: v.Contact, + AgreedTerms: v.Agreement, + CurrentTerms: tos, + Authz: authz, + Authorizations: v.Authorizations, + Certificates: v.Certificates, + }, nil +} + +func responseCert(ctx context.Context, client *http.Client, res *http.Response, bundle bool) ([][]byte, error) { + b, err := ioutil.ReadAll(io.LimitReader(res.Body, maxCertSize+1)) + if err != nil { + return nil, fmt.Errorf("acme: response stream: %v", err) + } + if len(b) > maxCertSize { + return nil, errors.New("acme: certificate is too big") + } + cert := [][]byte{b} + if !bundle { + return cert, nil + } + + // Append CA chain cert(s). + // At least one is required according to the spec: + // https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-6.3.1 + up := linkHeader(res.Header, "up") + if len(up) == 0 { + return nil, errors.New("acme: rel=up link not found") + } + if len(up) > maxChainLen { + return nil, errors.New("acme: rel=up link is too large") + } + for _, url := range up { + cc, err := chainCert(ctx, client, url, 0) + if err != nil { + return nil, err + } + cert = append(cert, cc...) + } + return cert, nil +} + +// responseError creates an error of Error type from resp. +func responseError(resp *http.Response) error { + // don't care if ReadAll returns an error: + // json.Unmarshal will fail in that case anyway + b, _ := ioutil.ReadAll(resp.Body) + e := struct { + Status int + Type string + Detail string + }{ + Status: resp.StatusCode, + } + if err := json.Unmarshal(b, &e); err != nil { + // this is not a regular error response: + // populate detail with anything we received, + // e.Status will already contain HTTP response code value + e.Detail = string(b) + if e.Detail == "" { + e.Detail = resp.Status + } + } + return &Error{ + StatusCode: e.Status, + ProblemType: e.Type, + Detail: e.Detail, + Header: resp.Header, + } +} + +// chainCert fetches CA certificate chain recursively by following "up" links. +// Each recursive call increments the depth by 1, resulting in an error +// if the recursion level reaches maxChainLen. +// +// First chainCert call starts with depth of 0. +func chainCert(ctx context.Context, client *http.Client, url string, depth int) ([][]byte, error) { + if depth >= maxChainLen { + return nil, errors.New("acme: certificate chain is too deep") + } + + res, err := ctxhttp.Get(ctx, client, url) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + return nil, responseError(res) + } + b, err := ioutil.ReadAll(io.LimitReader(res.Body, maxCertSize+1)) + if err != nil { + return nil, err + } + if len(b) > maxCertSize { + return nil, errors.New("acme: certificate is too big") + } + chain := [][]byte{b} + + uplink := linkHeader(res.Header, "up") + if len(uplink) > maxChainLen { + return nil, errors.New("acme: certificate chain is too large") + } + for _, up := range uplink { + cc, err := chainCert(ctx, client, up, depth+1) + if err != nil { + return nil, err + } + chain = append(chain, cc...) + } + + return chain, nil +} + +// postJWS signs the body with the given key and POSTs it to the provided url. +// The body argument must be JSON-serializable. +func postJWS(ctx context.Context, client *http.Client, key crypto.Signer, url string, body interface{}) (*http.Response, error) { + nonce, err := fetchNonce(ctx, client, url) + if err != nil { + return nil, err + } + b, err := jwsEncodeJSON(body, key, nonce) + if err != nil { + return nil, err + } + return ctxhttp.Post(ctx, client, url, "application/jose+json", bytes.NewReader(b)) +} + +func fetchNonce(ctx context.Context, client *http.Client, url string) (string, error) { + resp, err := ctxhttp.Head(ctx, client, url) + if err != nil { + return "", nil + } + defer resp.Body.Close() + enc := resp.Header.Get("replay-nonce") + if enc == "" { + return "", errors.New("acme: nonce not found") + } + return enc, nil +} + +// linkHeader returns URI-Reference values of all Link headers +// with relation-type rel. +// See https://tools.ietf.org/html/rfc5988#section-5 for details. +func linkHeader(h http.Header, rel string) []string { + var links []string + for _, v := range h["Link"] { + parts := strings.Split(v, ";") + for _, p := range parts { + p = strings.TrimSpace(p) + if !strings.HasPrefix(p, "rel=") { + continue + } + if v := strings.Trim(p[4:], `"`); v == rel { + links = append(links, strings.Trim(parts[0], "<>")) + } + } + } + return links +} + +// retryAfter parses a Retry-After HTTP header value, +// trying to convert v into an int (seconds) or use http.ParseTime otherwise. +// It returns d if v cannot be parsed. +func retryAfter(v string, d time.Duration) time.Duration { + if i, err := strconv.Atoi(v); err == nil { + return time.Duration(i) * time.Second + } + t, err := http.ParseTime(v) + if err != nil { + return d + } + return t.Sub(timeNow()) +} + +// backoff computes a duration after which an n+1 retry iteration should occur +// using truncated exponential backoff algorithm. +// +// The n argument is always bounded between 0 and 30. +// The max argument defines upper bound for the returned value. +func backoff(n int, max time.Duration) time.Duration { + if n < 0 { + n = 0 + } + if n > 30 { + n = 30 + } + var d time.Duration + if x, err := rand.Int(rand.Reader, big.NewInt(1000)); err == nil { + d = time.Duration(x.Int64()) * time.Millisecond + } + d += time.Duration(1< max { + return max + } + return d +} + +// keyAuth generates a key authorization string for a given token. +func keyAuth(pub crypto.PublicKey, token string) (string, error) { + th, err := JWKThumbprint(pub) + if err != nil { + return "", err + } + return fmt.Sprintf("%s.%s", token, th), nil +} + +// tlsChallengeCert creates a temporary certificate for TLS-SNI challenges +// with the given SANs and auto-generated public/private key pair. +// To create a cert with a custom key pair, specify WithKey option. +func tlsChallengeCert(san []string, opt []CertOption) (tls.Certificate, error) { + var ( + key crypto.Signer + tmpl *x509.Certificate + ) + for _, o := range opt { + switch o := o.(type) { + case *certOptKey: + if key != nil { + return tls.Certificate{}, errors.New("acme: duplicate key option") + } + key = o.key + case *certOptTemplate: + var t = *(*x509.Certificate)(o) // shallow copy is ok + tmpl = &t + default: + // package's fault, if we let this happen: + panic(fmt.Sprintf("unsupported option type %T", o)) + } + } + if key == nil { + var err error + if key, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader); err != nil { + return tls.Certificate{}, err + } + } + if tmpl == nil { + tmpl = &x509.Certificate{ + SerialNumber: big.NewInt(1), + NotBefore: time.Now(), + NotAfter: time.Now().Add(24 * time.Hour), + BasicConstraintsValid: true, + KeyUsage: x509.KeyUsageKeyEncipherment, + } + } + tmpl.DNSNames = san + + der, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, key.Public(), key) + if err != nil { + return tls.Certificate{}, err + } + return tls.Certificate{ + Certificate: [][]byte{der}, + PrivateKey: key, + }, nil +} + +// encodePEM returns b encoded as PEM with block of type typ. +func encodePEM(typ string, b []byte) []byte { + pb := &pem.Block{Type: typ, Bytes: b} + return pem.EncodeToMemory(pb) +} + +// timeNow is useful for testing for fixed current time. +var timeNow = time.Now diff --git a/vendor/golang.org/x/crypto/acme/acme_test.go b/vendor/golang.org/x/crypto/acme/acme_test.go new file mode 100644 index 0000000..e552984 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/acme_test.go @@ -0,0 +1,1185 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package acme + +import ( + "bytes" + "crypto/rand" + "crypto/rsa" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/base64" + "encoding/json" + "fmt" + "io/ioutil" + "math/big" + "net/http" + "net/http/httptest" + "reflect" + "sort" + "strings" + "testing" + "time" + + "golang.org/x/net/context" +) + +// Decodes a JWS-encoded request and unmarshals the decoded JSON into a provided +// interface. +func decodeJWSRequest(t *testing.T, v interface{}, r *http.Request) { + // Decode request + var req struct{ Payload string } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + t.Fatal(err) + } + payload, err := base64.RawURLEncoding.DecodeString(req.Payload) + if err != nil { + t.Fatal(err) + } + err = json.Unmarshal(payload, v) + if err != nil { + t.Fatal(err) + } +} + +func TestDiscover(t *testing.T) { + const ( + reg = "https://example.com/acme/new-reg" + authz = "https://example.com/acme/new-authz" + cert = "https://example.com/acme/new-cert" + revoke = "https://example.com/acme/revoke-cert" + ) + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("content-type", "application/json") + fmt.Fprintf(w, `{ + "new-reg": %q, + "new-authz": %q, + "new-cert": %q, + "revoke-cert": %q + }`, reg, authz, cert, revoke) + })) + defer ts.Close() + c := Client{DirectoryURL: ts.URL} + dir, err := c.Discover(context.Background()) + if err != nil { + t.Fatal(err) + } + if dir.RegURL != reg { + t.Errorf("dir.RegURL = %q; want %q", dir.RegURL, reg) + } + if dir.AuthzURL != authz { + t.Errorf("dir.AuthzURL = %q; want %q", dir.AuthzURL, authz) + } + if dir.CertURL != cert { + t.Errorf("dir.CertURL = %q; want %q", dir.CertURL, cert) + } + if dir.RevokeURL != revoke { + t.Errorf("dir.RevokeURL = %q; want %q", dir.RevokeURL, revoke) + } +} + +func TestRegister(t *testing.T) { + contacts := []string{"mailto:admin@example.com"} + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("replay-nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Contact []string + Agreement string + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "new-reg" { + t.Errorf("j.Resource = %q; want new-reg", j.Resource) + } + if !reflect.DeepEqual(j.Contact, contacts) { + t.Errorf("j.Contact = %v; want %v", j.Contact, contacts) + } + + w.Header().Set("Location", "https://ca.tld/acme/reg/1") + w.Header().Set("Link", `;rel="next"`) + w.Header().Add("Link", `;rel="recover"`) + w.Header().Add("Link", `;rel="terms-of-service"`) + w.WriteHeader(http.StatusCreated) + b, _ := json.Marshal(contacts) + fmt.Fprintf(w, `{"contact": %s}`, b) + })) + defer ts.Close() + + prompt := func(url string) bool { + const terms = "https://ca.tld/acme/terms" + if url != terms { + t.Errorf("prompt url = %q; want %q", url, terms) + } + return false + } + + c := Client{Key: testKeyEC, dir: &Directory{RegURL: ts.URL}} + a := &Account{Contact: contacts} + var err error + if a, err = c.Register(context.Background(), a, prompt); err != nil { + t.Fatal(err) + } + if a.URI != "https://ca.tld/acme/reg/1" { + t.Errorf("a.URI = %q; want https://ca.tld/acme/reg/1", a.URI) + } + if a.Authz != "https://ca.tld/acme/new-authz" { + t.Errorf("a.Authz = %q; want https://ca.tld/acme/new-authz", a.Authz) + } + if a.CurrentTerms != "https://ca.tld/acme/terms" { + t.Errorf("a.CurrentTerms = %q; want https://ca.tld/acme/terms", a.CurrentTerms) + } + if !reflect.DeepEqual(a.Contact, contacts) { + t.Errorf("a.Contact = %v; want %v", a.Contact, contacts) + } +} + +func TestUpdateReg(t *testing.T) { + const terms = "https://ca.tld/acme/terms" + contacts := []string{"mailto:admin@example.com"} + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("replay-nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Contact []string + Agreement string + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "reg" { + t.Errorf("j.Resource = %q; want reg", j.Resource) + } + if j.Agreement != terms { + t.Errorf("j.Agreement = %q; want %q", j.Agreement, terms) + } + if !reflect.DeepEqual(j.Contact, contacts) { + t.Errorf("j.Contact = %v; want %v", j.Contact, contacts) + } + + w.Header().Set("Link", `;rel="next"`) + w.Header().Add("Link", `;rel="recover"`) + w.Header().Add("Link", fmt.Sprintf(`<%s>;rel="terms-of-service"`, terms)) + w.WriteHeader(http.StatusOK) + b, _ := json.Marshal(contacts) + fmt.Fprintf(w, `{"contact":%s, "agreement":%q}`, b, terms) + })) + defer ts.Close() + + c := Client{Key: testKeyEC} + a := &Account{URI: ts.URL, Contact: contacts, AgreedTerms: terms} + var err error + if a, err = c.UpdateReg(context.Background(), a); err != nil { + t.Fatal(err) + } + if a.Authz != "https://ca.tld/acme/new-authz" { + t.Errorf("a.Authz = %q; want https://ca.tld/acme/new-authz", a.Authz) + } + if a.AgreedTerms != terms { + t.Errorf("a.AgreedTerms = %q; want %q", a.AgreedTerms, terms) + } + if a.CurrentTerms != terms { + t.Errorf("a.CurrentTerms = %q; want %q", a.CurrentTerms, terms) + } + if a.URI != ts.URL { + t.Errorf("a.URI = %q; want %q", a.URI, ts.URL) + } +} + +func TestGetReg(t *testing.T) { + const terms = "https://ca.tld/acme/terms" + const newTerms = "https://ca.tld/acme/new-terms" + contacts := []string{"mailto:admin@example.com"} + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("replay-nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Contact []string + Agreement string + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "reg" { + t.Errorf("j.Resource = %q; want reg", j.Resource) + } + if len(j.Contact) != 0 { + t.Errorf("j.Contact = %v", j.Contact) + } + if j.Agreement != "" { + t.Errorf("j.Agreement = %q", j.Agreement) + } + + w.Header().Set("Link", `;rel="next"`) + w.Header().Add("Link", `;rel="recover"`) + w.Header().Add("Link", fmt.Sprintf(`<%s>;rel="terms-of-service"`, newTerms)) + w.WriteHeader(http.StatusOK) + b, _ := json.Marshal(contacts) + fmt.Fprintf(w, `{"contact":%s, "agreement":%q}`, b, terms) + })) + defer ts.Close() + + c := Client{Key: testKeyEC} + a, err := c.GetReg(context.Background(), ts.URL) + if err != nil { + t.Fatal(err) + } + if a.Authz != "https://ca.tld/acme/new-authz" { + t.Errorf("a.AuthzURL = %q; want https://ca.tld/acme/new-authz", a.Authz) + } + if a.AgreedTerms != terms { + t.Errorf("a.AgreedTerms = %q; want %q", a.AgreedTerms, terms) + } + if a.CurrentTerms != newTerms { + t.Errorf("a.CurrentTerms = %q; want %q", a.CurrentTerms, newTerms) + } + if a.URI != ts.URL { + t.Errorf("a.URI = %q; want %q", a.URI, ts.URL) + } +} + +func TestAuthorize(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("replay-nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Identifier struct { + Type string + Value string + } + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "new-authz" { + t.Errorf("j.Resource = %q; want new-authz", j.Resource) + } + if j.Identifier.Type != "dns" { + t.Errorf("j.Identifier.Type = %q; want dns", j.Identifier.Type) + } + if j.Identifier.Value != "example.com" { + t.Errorf("j.Identifier.Value = %q; want example.com", j.Identifier.Value) + } + + w.Header().Set("Location", "https://ca.tld/acme/auth/1") + w.WriteHeader(http.StatusCreated) + fmt.Fprintf(w, `{ + "identifier": {"type":"dns","value":"example.com"}, + "status":"pending", + "challenges":[ + { + "type":"http-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id1", + "token":"token1" + }, + { + "type":"tls-sni-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id2", + "token":"token2" + } + ], + "combinations":[[0],[1]]}`) + })) + defer ts.Close() + + cl := Client{Key: testKeyEC, dir: &Directory{AuthzURL: ts.URL}} + auth, err := cl.Authorize(context.Background(), "example.com") + if err != nil { + t.Fatal(err) + } + + if auth.URI != "https://ca.tld/acme/auth/1" { + t.Errorf("URI = %q; want https://ca.tld/acme/auth/1", auth.URI) + } + if auth.Status != "pending" { + t.Errorf("Status = %q; want pending", auth.Status) + } + if auth.Identifier.Type != "dns" { + t.Errorf("Identifier.Type = %q; want dns", auth.Identifier.Type) + } + if auth.Identifier.Value != "example.com" { + t.Errorf("Identifier.Value = %q; want example.com", auth.Identifier.Value) + } + + if n := len(auth.Challenges); n != 2 { + t.Fatalf("len(auth.Challenges) = %d; want 2", n) + } + + c := auth.Challenges[0] + if c.Type != "http-01" { + t.Errorf("c.Type = %q; want http-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id1" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id1", c.URI) + } + if c.Token != "token1" { + t.Errorf("c.Token = %q; want token1", c.Type) + } + + c = auth.Challenges[1] + if c.Type != "tls-sni-01" { + t.Errorf("c.Type = %q; want tls-sni-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id2" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id2", c.URI) + } + if c.Token != "token2" { + t.Errorf("c.Token = %q; want token2", c.Type) + } + + combs := [][]int{{0}, {1}} + if !reflect.DeepEqual(auth.Combinations, combs) { + t.Errorf("auth.Combinations: %+v\nwant: %+v\n", auth.Combinations, combs) + } +} + +func TestAuthorizeValid(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("replay-nonce", "nonce") + return + } + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"status":"valid"}`)) + })) + defer ts.Close() + client := Client{Key: testKey, dir: &Directory{AuthzURL: ts.URL}} + _, err := client.Authorize(context.Background(), "example.com") + if err != nil { + t.Errorf("err = %v", err) + } +} + +func TestGetAuthorization(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + t.Errorf("r.Method = %q; want GET", r.Method) + } + + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, `{ + "identifier": {"type":"dns","value":"example.com"}, + "status":"pending", + "challenges":[ + { + "type":"http-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id1", + "token":"token1" + }, + { + "type":"tls-sni-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id2", + "token":"token2" + } + ], + "combinations":[[0],[1]]}`) + })) + defer ts.Close() + + cl := Client{Key: testKeyEC} + auth, err := cl.GetAuthorization(context.Background(), ts.URL) + if err != nil { + t.Fatal(err) + } + + if auth.Status != "pending" { + t.Errorf("Status = %q; want pending", auth.Status) + } + if auth.Identifier.Type != "dns" { + t.Errorf("Identifier.Type = %q; want dns", auth.Identifier.Type) + } + if auth.Identifier.Value != "example.com" { + t.Errorf("Identifier.Value = %q; want example.com", auth.Identifier.Value) + } + + if n := len(auth.Challenges); n != 2 { + t.Fatalf("len(set.Challenges) = %d; want 2", n) + } + + c := auth.Challenges[0] + if c.Type != "http-01" { + t.Errorf("c.Type = %q; want http-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id1" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id1", c.URI) + } + if c.Token != "token1" { + t.Errorf("c.Token = %q; want token1", c.Type) + } + + c = auth.Challenges[1] + if c.Type != "tls-sni-01" { + t.Errorf("c.Type = %q; want tls-sni-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id2" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id2", c.URI) + } + if c.Token != "token2" { + t.Errorf("c.Token = %q; want token2", c.Type) + } + + combs := [][]int{{0}, {1}} + if !reflect.DeepEqual(auth.Combinations, combs) { + t.Errorf("auth.Combinations: %+v\nwant: %+v\n", auth.Combinations, combs) + } +} + +func TestWaitAuthorization(t *testing.T) { + var count int + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + count++ + w.Header().Set("retry-after", "0") + if count > 1 { + fmt.Fprintf(w, `{"status":"valid"}`) + return + } + fmt.Fprintf(w, `{"status":"pending"}`) + })) + defer ts.Close() + + type res struct { + authz *Authorization + err error + } + done := make(chan res) + defer close(done) + go func() { + var client Client + a, err := client.WaitAuthorization(context.Background(), ts.URL) + done <- res{a, err} + }() + + select { + case <-time.After(5 * time.Second): + t.Fatal("WaitAuthz took too long to return") + case res := <-done: + if res.err != nil { + t.Fatalf("res.err = %v", res.err) + } + if res.authz == nil { + t.Fatal("res.authz is nil") + } + } +} + +func TestWaitAuthorizationInvalid(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, `{"status":"invalid"}`) + })) + defer ts.Close() + + res := make(chan error) + defer close(res) + go func() { + var client Client + _, err := client.WaitAuthorization(context.Background(), ts.URL) + res <- err + }() + + select { + case <-time.After(3 * time.Second): + t.Fatal("WaitAuthz took too long to return") + case err := <-res: + if err == nil { + t.Error("err is nil") + } + } +} + +func TestWaitAuthorizationCancel(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("retry-after", "60") + fmt.Fprintf(w, `{"status":"pending"}`) + })) + defer ts.Close() + + res := make(chan error) + defer close(res) + go func() { + var client Client + ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) + defer cancel() + _, err := client.WaitAuthorization(ctx, ts.URL) + res <- err + }() + + select { + case <-time.After(time.Second): + t.Fatal("WaitAuthz took too long to return") + case err := <-res: + if err == nil { + t.Error("err is nil") + } + } +} + +func TestRevokeAuthorization(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("replay-nonce", "nonce") + return + } + switch r.URL.Path { + case "/1": + var req struct { + Resource string + Delete bool + } + decodeJWSRequest(t, &req, r) + if req.Resource != "authz" { + t.Errorf("req.Resource = %q; want authz", req.Resource) + } + if !req.Delete { + t.Errorf("req.Delete is false") + } + case "/2": + w.WriteHeader(http.StatusInternalServerError) + } + })) + defer ts.Close() + client := &Client{Key: testKey} + ctx := context.Background() + if err := client.RevokeAuthorization(ctx, ts.URL+"/1"); err != nil { + t.Errorf("err = %v", err) + } + if client.RevokeAuthorization(ctx, ts.URL+"/2") == nil { + t.Error("nil error") + } +} + +func TestPollChallenge(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + t.Errorf("r.Method = %q; want GET", r.Method) + } + + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, `{ + "type":"http-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id1", + "token":"token1"}`) + })) + defer ts.Close() + + cl := Client{Key: testKeyEC} + chall, err := cl.GetChallenge(context.Background(), ts.URL) + if err != nil { + t.Fatal(err) + } + + if chall.Status != "pending" { + t.Errorf("Status = %q; want pending", chall.Status) + } + if chall.Type != "http-01" { + t.Errorf("c.Type = %q; want http-01", chall.Type) + } + if chall.URI != "https://ca.tld/acme/challenge/publickey/id1" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id1", chall.URI) + } + if chall.Token != "token1" { + t.Errorf("c.Token = %q; want token1", chall.Type) + } +} + +func TestAcceptChallenge(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("replay-nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Type string + Auth string `json:"keyAuthorization"` + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "challenge" { + t.Errorf(`resource = %q; want "challenge"`, j.Resource) + } + if j.Type != "http-01" { + t.Errorf(`type = %q; want "http-01"`, j.Type) + } + keyAuth := "token1." + testKeyECThumbprint + if j.Auth != keyAuth { + t.Errorf(`keyAuthorization = %q; want %q`, j.Auth, keyAuth) + } + + // Respond to request + w.WriteHeader(http.StatusAccepted) + fmt.Fprintf(w, `{ + "type":"http-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id1", + "token":"token1", + "keyAuthorization":%q + }`, keyAuth) + })) + defer ts.Close() + + cl := Client{Key: testKeyEC} + c, err := cl.Accept(context.Background(), &Challenge{ + URI: ts.URL, + Token: "token1", + Type: "http-01", + }) + if err != nil { + t.Fatal(err) + } + + if c.Type != "http-01" { + t.Errorf("c.Type = %q; want http-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id1" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id1", c.URI) + } + if c.Token != "token1" { + t.Errorf("c.Token = %q; want token1", c.Type) + } +} + +func TestNewCert(t *testing.T) { + notBefore := time.Now() + notAfter := notBefore.AddDate(0, 2, 0) + timeNow = func() time.Time { return notBefore } + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("replay-nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string `json:"resource"` + CSR string `json:"csr"` + NotBefore string `json:"notBefore,omitempty"` + NotAfter string `json:"notAfter,omitempty"` + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "new-cert" { + t.Errorf(`resource = %q; want "new-cert"`, j.Resource) + } + if j.NotBefore != notBefore.Format(time.RFC3339) { + t.Errorf(`notBefore = %q; wanted %q`, j.NotBefore, notBefore.Format(time.RFC3339)) + } + if j.NotAfter != notAfter.Format(time.RFC3339) { + t.Errorf(`notAfter = %q; wanted %q`, j.NotAfter, notAfter.Format(time.RFC3339)) + } + + // Respond to request + template := x509.Certificate{ + SerialNumber: big.NewInt(int64(1)), + Subject: pkix.Name{ + Organization: []string{"goacme"}, + }, + NotBefore: notBefore, + NotAfter: notAfter, + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + BasicConstraintsValid: true, + } + + sampleCert, err := x509.CreateCertificate(rand.Reader, &template, &template, &testKeyEC.PublicKey, testKeyEC) + if err != nil { + t.Fatalf("Error creating certificate: %v", err) + } + + w.Header().Set("Location", "https://ca.tld/acme/cert/1") + w.WriteHeader(http.StatusCreated) + w.Write(sampleCert) + })) + defer ts.Close() + + csr := x509.CertificateRequest{ + Version: 0, + Subject: pkix.Name{ + CommonName: "example.com", + Organization: []string{"goacme"}, + }, + } + csrb, err := x509.CreateCertificateRequest(rand.Reader, &csr, testKeyEC) + if err != nil { + t.Fatal(err) + } + + c := Client{Key: testKeyEC, dir: &Directory{CertURL: ts.URL}} + cert, certURL, err := c.CreateCert(context.Background(), csrb, notAfter.Sub(notBefore), false) + if err != nil { + t.Fatal(err) + } + if cert == nil { + t.Errorf("cert is nil") + } + if certURL != "https://ca.tld/acme/cert/1" { + t.Errorf("certURL = %q; want https://ca.tld/acme/cert/1", certURL) + } +} + +func TestFetchCert(t *testing.T) { + var count byte + var ts *httptest.Server + ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + count++ + if count < 3 { + up := fmt.Sprintf("<%s>;rel=up", ts.URL) + w.Header().Set("link", up) + } + w.Write([]byte{count}) + })) + defer ts.Close() + res, err := (&Client{}).FetchCert(context.Background(), ts.URL, true) + if err != nil { + t.Fatalf("FetchCert: %v", err) + } + cert := [][]byte{{1}, {2}, {3}} + if !reflect.DeepEqual(res, cert) { + t.Errorf("res = %v; want %v", res, cert) + } +} + +func TestFetchCertRetry(t *testing.T) { + var count int + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if count < 1 { + w.Header().Set("retry-after", "0") + w.WriteHeader(http.StatusAccepted) + count++ + return + } + w.Write([]byte{1}) + })) + defer ts.Close() + res, err := (&Client{}).FetchCert(context.Background(), ts.URL, false) + if err != nil { + t.Fatalf("FetchCert: %v", err) + } + cert := [][]byte{{1}} + if !reflect.DeepEqual(res, cert) { + t.Errorf("res = %v; want %v", res, cert) + } +} + +func TestFetchCertCancel(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("retry-after", "0") + w.WriteHeader(http.StatusAccepted) + })) + defer ts.Close() + ctx, cancel := context.WithCancel(context.Background()) + done := make(chan struct{}) + var err error + go func() { + _, err = (&Client{}).FetchCert(ctx, ts.URL, false) + close(done) + }() + cancel() + <-done + if err != context.Canceled { + t.Errorf("err = %v; want %v", err, context.Canceled) + } +} + +func TestFetchCertDepth(t *testing.T) { + var count byte + var ts *httptest.Server + ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + count++ + if count > maxChainLen+1 { + t.Errorf("count = %d; want at most %d", count, maxChainLen+1) + w.WriteHeader(http.StatusInternalServerError) + } + w.Header().Set("link", fmt.Sprintf("<%s>;rel=up", ts.URL)) + w.Write([]byte{count}) + })) + defer ts.Close() + _, err := (&Client{}).FetchCert(context.Background(), ts.URL, true) + if err == nil { + t.Errorf("err is nil") + } +} + +func TestFetchCertBreadth(t *testing.T) { + var ts *httptest.Server + ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + for i := 0; i < maxChainLen+1; i++ { + w.Header().Add("link", fmt.Sprintf("<%s>;rel=up", ts.URL)) + } + w.Write([]byte{1}) + })) + defer ts.Close() + _, err := (&Client{}).FetchCert(context.Background(), ts.URL, true) + if err == nil { + t.Errorf("err is nil") + } +} + +func TestFetchCertSize(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b := bytes.Repeat([]byte{1}, maxCertSize+1) + w.Write(b) + })) + defer ts.Close() + _, err := (&Client{}).FetchCert(context.Background(), ts.URL, false) + if err == nil { + t.Errorf("err is nil") + } +} + +func TestRevokeCert(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("replay-nonce", "nonce") + return + } + + var req struct { + Resource string + Certificate string + Reason int + } + decodeJWSRequest(t, &req, r) + if req.Resource != "revoke-cert" { + t.Errorf("req.Resource = %q; want revoke-cert", req.Resource) + } + if req.Reason != 1 { + t.Errorf("req.Reason = %d; want 1", req.Reason) + } + // echo -n cert | base64 | tr -d '=' | tr '/+' '_-' + cert := "Y2VydA" + if req.Certificate != cert { + t.Errorf("req.Certificate = %q; want %q", req.Certificate, cert) + } + })) + defer ts.Close() + client := &Client{ + Key: testKeyEC, + dir: &Directory{RevokeURL: ts.URL}, + } + ctx := context.Background() + if err := client.RevokeCert(ctx, nil, []byte("cert"), CRLReasonKeyCompromise); err != nil { + t.Fatal(err) + } +} + +func TestFetchNonce(t *testing.T) { + tests := []struct { + code int + nonce string + }{ + {http.StatusOK, "nonce1"}, + {http.StatusBadRequest, "nonce2"}, + {http.StatusOK, ""}, + } + var i int + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "HEAD" { + t.Errorf("%d: r.Method = %q; want HEAD", i, r.Method) + } + w.Header().Set("replay-nonce", tests[i].nonce) + w.WriteHeader(tests[i].code) + })) + defer ts.Close() + for ; i < len(tests); i++ { + test := tests[i] + n, err := fetchNonce(context.Background(), http.DefaultClient, ts.URL) + if n != test.nonce { + t.Errorf("%d: n=%q; want %q", i, n, test.nonce) + } + switch { + case err == nil && test.nonce == "": + t.Errorf("%d: n=%q, err=%v; want non-nil error", i, n, err) + case err != nil && test.nonce != "": + t.Errorf("%d: n=%q, err=%v; want %q", i, n, err, test.nonce) + } + } +} + +func TestLinkHeader(t *testing.T) { + h := http.Header{"Link": { + `;rel="next"`, + `; rel=recover`, + `; foo=bar; rel="terms-of-service"`, + `;rel="next"`, + }} + tests := []struct { + rel string + out []string + }{ + {"next", []string{"https://example.com/acme/new-authz", "dup"}}, + {"recover", []string{"https://example.com/acme/recover-reg"}}, + {"terms-of-service", []string{"https://example.com/acme/terms"}}, + {"empty", nil}, + } + for i, test := range tests { + if v := linkHeader(h, test.rel); !reflect.DeepEqual(v, test.out) { + t.Errorf("%d: linkHeader(%q): %v; want %v", i, test.rel, v, test.out) + } + } +} + +func TestErrorResponse(t *testing.T) { + s := `{ + "status": 400, + "type": "urn:acme:error:xxx", + "detail": "text" + }` + res := &http.Response{ + StatusCode: 400, + Status: "400 Bad Request", + Body: ioutil.NopCloser(strings.NewReader(s)), + Header: http.Header{"X-Foo": {"bar"}}, + } + err := responseError(res) + v, ok := err.(*Error) + if !ok { + t.Fatalf("err = %+v (%T); want *Error type", err, err) + } + if v.StatusCode != 400 { + t.Errorf("v.StatusCode = %v; want 400", v.StatusCode) + } + if v.ProblemType != "urn:acme:error:xxx" { + t.Errorf("v.ProblemType = %q; want urn:acme:error:xxx", v.ProblemType) + } + if v.Detail != "text" { + t.Errorf("v.Detail = %q; want text", v.Detail) + } + if !reflect.DeepEqual(v.Header, res.Header) { + t.Errorf("v.Header = %+v; want %+v", v.Header, res.Header) + } +} + +func TestTLSSNI01ChallengeCert(t *testing.T) { + const ( + token = "evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA" + // echo -n | shasum -a 256 + san = "dbbd5eefe7b4d06eb9d1d9f5acb4c7cd.a27d320e4b30332f0b6cb441734ad7b0.acme.invalid" + ) + + client := &Client{Key: testKeyEC} + tlscert, name, err := client.TLSSNI01ChallengeCert(token) + if err != nil { + t.Fatal(err) + } + + if n := len(tlscert.Certificate); n != 1 { + t.Fatalf("len(tlscert.Certificate) = %d; want 1", n) + } + cert, err := x509.ParseCertificate(tlscert.Certificate[0]) + if err != nil { + t.Fatal(err) + } + if len(cert.DNSNames) != 1 || cert.DNSNames[0] != san { + t.Fatalf("cert.DNSNames = %v; want %q", cert.DNSNames, san) + } + if cert.DNSNames[0] != name { + t.Errorf("cert.DNSNames[0] != name: %q vs %q", cert.DNSNames[0], name) + } +} + +func TestTLSSNI02ChallengeCert(t *testing.T) { + const ( + token = "evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA" + // echo -n evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA | shasum -a 256 + sanA = "7ea0aaa69214e71e02cebb18bb867736.09b730209baabf60e43d4999979ff139.token.acme.invalid" + // echo -n | shasum -a 256 + sanB = "dbbd5eefe7b4d06eb9d1d9f5acb4c7cd.a27d320e4b30332f0b6cb441734ad7b0.ka.acme.invalid" + ) + + client := &Client{Key: testKeyEC} + tlscert, name, err := client.TLSSNI02ChallengeCert(token) + if err != nil { + t.Fatal(err) + } + + if n := len(tlscert.Certificate); n != 1 { + t.Fatalf("len(tlscert.Certificate) = %d; want 1", n) + } + cert, err := x509.ParseCertificate(tlscert.Certificate[0]) + if err != nil { + t.Fatal(err) + } + names := []string{sanA, sanB} + if !reflect.DeepEqual(cert.DNSNames, names) { + t.Fatalf("cert.DNSNames = %v;\nwant %v", cert.DNSNames, names) + } + sort.Strings(cert.DNSNames) + i := sort.SearchStrings(cert.DNSNames, name) + if i >= len(cert.DNSNames) || cert.DNSNames[i] != name { + t.Errorf("%v doesn't have %q", cert.DNSNames, name) + } +} + +func TestTLSChallengeCertOpt(t *testing.T) { + key, err := rsa.GenerateKey(rand.Reader, 512) + if err != nil { + t.Fatal(err) + } + tmpl := &x509.Certificate{ + SerialNumber: big.NewInt(2), + Subject: pkix.Name{Organization: []string{"Test"}}, + DNSNames: []string{"should-be-overwritten"}, + } + opts := []CertOption{WithKey(key), WithTemplate(tmpl)} + + client := &Client{Key: testKeyEC} + cert1, _, err := client.TLSSNI01ChallengeCert("token", opts...) + if err != nil { + t.Fatal(err) + } + cert2, _, err := client.TLSSNI02ChallengeCert("token", opts...) + if err != nil { + t.Fatal(err) + } + + for i, tlscert := range []tls.Certificate{cert1, cert2} { + // verify generated cert private key + tlskey, ok := tlscert.PrivateKey.(*rsa.PrivateKey) + if !ok { + t.Errorf("%d: tlscert.PrivateKey is %T; want *rsa.PrivateKey", i, tlscert.PrivateKey) + continue + } + if tlskey.D.Cmp(key.D) != 0 { + t.Errorf("%d: tlskey.D = %v; want %v", i, tlskey.D, key.D) + } + // verify generated cert public key + x509Cert, err := x509.ParseCertificate(tlscert.Certificate[0]) + if err != nil { + t.Errorf("%d: %v", i, err) + continue + } + tlspub, ok := x509Cert.PublicKey.(*rsa.PublicKey) + if !ok { + t.Errorf("%d: x509Cert.PublicKey is %T; want *rsa.PublicKey", i, x509Cert.PublicKey) + continue + } + if tlspub.N.Cmp(key.N) != 0 { + t.Errorf("%d: tlspub.N = %v; want %v", i, tlspub.N, key.N) + } + // verify template option + sn := big.NewInt(2) + if x509Cert.SerialNumber.Cmp(sn) != 0 { + t.Errorf("%d: SerialNumber = %v; want %v", i, x509Cert.SerialNumber, sn) + } + org := []string{"Test"} + if !reflect.DeepEqual(x509Cert.Subject.Organization, org) { + t.Errorf("%d: Subject.Organization = %+v; want %+v", i, x509Cert.Subject.Organization, org) + } + for _, v := range x509Cert.DNSNames { + if !strings.HasSuffix(v, ".acme.invalid") { + t.Errorf("%d: invalid DNSNames element: %q", i, v) + } + } + } +} + +func TestHTTP01Challenge(t *testing.T) { + const ( + token = "xxx" + // thumbprint is precomputed for testKeyEC in jws_test.go + value = token + "." + testKeyECThumbprint + urlpath = "/.well-known/acme-challenge/" + token + ) + client := &Client{Key: testKeyEC} + val, err := client.HTTP01ChallengeResponse(token) + if err != nil { + t.Fatal(err) + } + if val != value { + t.Errorf("val = %q; want %q", val, value) + } + if path := client.HTTP01ChallengePath(token); path != urlpath { + t.Errorf("path = %q; want %q", path, urlpath) + } +} + +func TestDNS01ChallengeRecord(t *testing.T) { + // echo -n xxx. | \ + // openssl dgst -binary -sha256 | \ + // base64 | tr -d '=' | tr '/+' '_-' + const value = "8DERMexQ5VcdJ_prpPiA0mVdp7imgbCgjsG4SqqNMIo" + + client := &Client{Key: testKeyEC} + val, err := client.DNS01ChallengeRecord("xxx") + if err != nil { + t.Fatal(err) + } + if val != value { + t.Errorf("val = %q; want %q", val, value) + } +} + +func TestBackoff(t *testing.T) { + tt := []struct{ min, max time.Duration }{ + {time.Second, 2 * time.Second}, + {2 * time.Second, 3 * time.Second}, + {4 * time.Second, 5 * time.Second}, + {8 * time.Second, 9 * time.Second}, + } + for i, test := range tt { + d := backoff(i, time.Minute) + if d < test.min || test.max < d { + t.Errorf("%d: d = %v; want between %v and %v", i, d, test.min, test.max) + } + } + + min, max := time.Second, 2*time.Second + if d := backoff(-1, time.Minute); d < min || max < d { + t.Errorf("d = %v; want between %v and %v", d, min, max) + } + + bound := 10 * time.Second + if d := backoff(100, bound); d != bound { + t.Errorf("d = %v; want %v", d, bound) + } +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/autocert.go b/vendor/golang.org/x/crypto/acme/autocert/autocert.go new file mode 100644 index 0000000..12c9010 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/autocert.go @@ -0,0 +1,776 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package autocert provides automatic access to certificates from Let's Encrypt +// and any other ACME-based CA. +// +// This package is a work in progress and makes no API stability promises. +package autocert + +import ( + "bytes" + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "errors" + "fmt" + "io" + mathrand "math/rand" + "net/http" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/crypto/acme" + "golang.org/x/net/context" +) + +// pseudoRand is safe for concurrent use. +var pseudoRand *lockedMathRand + +func init() { + src := mathrand.NewSource(timeNow().UnixNano()) + pseudoRand = &lockedMathRand{rnd: mathrand.New(src)} +} + +// AcceptTOS always returns true to indicate the acceptance of a CA Terms of Service +// during account registration. +func AcceptTOS(tosURL string) bool { return true } + +// HostPolicy specifies which host names the Manager is allowed to respond to. +// It returns a non-nil error if the host should be rejected. +// The returned error is accessible via tls.Conn.Handshake and its callers. +// See Manager's HostPolicy field and GetCertificate method docs for more details. +type HostPolicy func(ctx context.Context, host string) error + +// HostWhitelist returns a policy where only the specified host names are allowed. +// Only exact matches are currently supported. Subdomains, regexp or wildcard +// will not match. +func HostWhitelist(hosts ...string) HostPolicy { + whitelist := make(map[string]bool, len(hosts)) + for _, h := range hosts { + whitelist[h] = true + } + return func(_ context.Context, host string) error { + if !whitelist[host] { + return errors.New("acme/autocert: host not configured") + } + return nil + } +} + +// defaultHostPolicy is used when Manager.HostPolicy is not set. +func defaultHostPolicy(context.Context, string) error { + return nil +} + +// Manager is a stateful certificate manager built on top of acme.Client. +// It obtains and refreshes certificates automatically, +// as well as providing them to a TLS server via tls.Config. +// +// A simple usage example: +// +// m := autocert.Manager{ +// Prompt: autocert.AcceptTOS, +// HostPolicy: autocert.HostWhitelist("example.org"), +// } +// s := &http.Server{ +// Addr: ":https", +// TLSConfig: &tls.Config{GetCertificate: m.GetCertificate}, +// } +// s.ListenAndServeTLS("", "") +// +// To preserve issued certificates and improve overall performance, +// use a cache implementation of Cache. For instance, DirCache. +type Manager struct { + // Prompt specifies a callback function to conditionally accept a CA's Terms of Service (TOS). + // The registration may require the caller to agree to the CA's TOS. + // If so, Manager calls Prompt with a TOS URL provided by the CA. Prompt should report + // whether the caller agrees to the terms. + // + // To always accept the terms, the callers can use AcceptTOS. + Prompt func(tosURL string) bool + + // Cache optionally stores and retrieves previously-obtained certificates. + // If nil, certs will only be cached for the lifetime of the Manager. + // + // Manager passes the Cache certificates data encoded in PEM, with private/public + // parts combined in a single Cache.Put call, private key first. + Cache Cache + + // HostPolicy controls which domains the Manager will attempt + // to retrieve new certificates for. It does not affect cached certs. + // + // If non-nil, HostPolicy is called before requesting a new cert. + // If nil, all hosts are currently allowed. This is not recommended, + // as it opens a potential attack where clients connect to a server + // by IP address and pretend to be asking for an incorrect host name. + // Manager will attempt to obtain a certificate for that host, incorrectly, + // eventually reaching the CA's rate limit for certificate requests + // and making it impossible to obtain actual certificates. + // + // See GetCertificate for more details. + HostPolicy HostPolicy + + // RenewBefore optionally specifies how early certificates should + // be renewed before they expire. + // + // If zero, they're renewed 1 week before expiration. + RenewBefore time.Duration + + // Client is used to perform low-level operations, such as account registration + // and requesting new certificates. + // If Client is nil, a zero-value acme.Client is used with acme.LetsEncryptURL + // directory endpoint and a newly-generated ECDSA P-256 key. + // + // Mutating the field after the first call of GetCertificate method will have no effect. + Client *acme.Client + + // Email optionally specifies a contact email address. + // This is used by CAs, such as Let's Encrypt, to notify about problems + // with issued certificates. + // + // If the Client's account key is already registered, Email is not used. + Email string + + clientMu sync.Mutex + client *acme.Client // initialized by acmeClient method + + stateMu sync.Mutex + state map[string]*certState // keyed by domain name + + // tokenCert is keyed by token domain name, which matches server name + // of ClientHello. Keys always have ".acme.invalid" suffix. + tokenCertMu sync.RWMutex + tokenCert map[string]*tls.Certificate + + // renewal tracks the set of domains currently running renewal timers. + // It is keyed by domain name. + renewalMu sync.Mutex + renewal map[string]*domainRenewal +} + +// GetCertificate implements the tls.Config.GetCertificate hook. +// It provides a TLS certificate for hello.ServerName host, including answering +// *.acme.invalid (TLS-SNI) challenges. All other fields of hello are ignored. +// +// If m.HostPolicy is non-nil, GetCertificate calls the policy before requesting +// a new cert. A non-nil error returned from m.HostPolicy halts TLS negotiation. +// The error is propagated back to the caller of GetCertificate and is user-visible. +// This does not affect cached certs. See HostPolicy field description for more details. +func (m *Manager) GetCertificate(hello *tls.ClientHelloInfo) (*tls.Certificate, error) { + name := hello.ServerName + if name == "" { + return nil, errors.New("acme/autocert: missing server name") + } + + // check whether this is a token cert requested for TLS-SNI challenge + if strings.HasSuffix(name, ".acme.invalid") { + m.tokenCertMu.RLock() + defer m.tokenCertMu.RUnlock() + if cert := m.tokenCert[name]; cert != nil { + return cert, nil + } + if cert, err := m.cacheGet(name); err == nil { + return cert, nil + } + // TODO: cache error results? + return nil, fmt.Errorf("acme/autocert: no token cert for %q", name) + } + + // regular domain + cert, err := m.cert(name) + if err == nil { + return cert, nil + } + if err != ErrCacheMiss { + return nil, err + } + + // first-time + ctx := context.Background() // TODO: use a deadline? + if err := m.hostPolicy()(ctx, name); err != nil { + return nil, err + } + cert, err = m.createCert(ctx, name) + if err != nil { + return nil, err + } + m.cachePut(name, cert) + return cert, nil +} + +// cert returns an existing certificate either from m.state or cache. +// If a certificate is found in cache but not in m.state, the latter will be filled +// with the cached value. +func (m *Manager) cert(name string) (*tls.Certificate, error) { + m.stateMu.Lock() + if s, ok := m.state[name]; ok { + m.stateMu.Unlock() + s.RLock() + defer s.RUnlock() + return s.tlscert() + } + defer m.stateMu.Unlock() + cert, err := m.cacheGet(name) + if err != nil { + return nil, err + } + signer, ok := cert.PrivateKey.(crypto.Signer) + if !ok { + return nil, errors.New("acme/autocert: private key cannot sign") + } + if m.state == nil { + m.state = make(map[string]*certState) + } + s := &certState{ + key: signer, + cert: cert.Certificate, + leaf: cert.Leaf, + } + m.state[name] = s + go m.renew(name, s.key, s.leaf.NotAfter) + return cert, nil +} + +// cacheGet always returns a valid certificate, or an error otherwise. +func (m *Manager) cacheGet(domain string) (*tls.Certificate, error) { + if m.Cache == nil { + return nil, ErrCacheMiss + } + // TODO: might want to define a cache timeout on m + ctx := context.Background() + data, err := m.Cache.Get(ctx, domain) + if err != nil { + return nil, err + } + + // private + priv, pub := pem.Decode(data) + if priv == nil || !strings.Contains(priv.Type, "PRIVATE") { + return nil, errors.New("acme/autocert: no private key found in cache") + } + privKey, err := parsePrivateKey(priv.Bytes) + if err != nil { + return nil, err + } + + // public + var pubDER [][]byte + for len(pub) > 0 { + var b *pem.Block + b, pub = pem.Decode(pub) + if b == nil { + break + } + pubDER = append(pubDER, b.Bytes) + } + if len(pub) > 0 { + return nil, errors.New("acme/autocert: invalid public key") + } + + // verify and create TLS cert + leaf, err := validCert(domain, pubDER, privKey) + if err != nil { + return nil, err + } + tlscert := &tls.Certificate{ + Certificate: pubDER, + PrivateKey: privKey, + Leaf: leaf, + } + return tlscert, nil +} + +func (m *Manager) cachePut(domain string, tlscert *tls.Certificate) error { + if m.Cache == nil { + return nil + } + + // contains PEM-encoded data + var buf bytes.Buffer + + // private + switch key := tlscert.PrivateKey.(type) { + case *ecdsa.PrivateKey: + if err := encodeECDSAKey(&buf, key); err != nil { + return err + } + case *rsa.PrivateKey: + b := x509.MarshalPKCS1PrivateKey(key) + pb := &pem.Block{Type: "RSA PRIVATE KEY", Bytes: b} + if err := pem.Encode(&buf, pb); err != nil { + return err + } + default: + return errors.New("acme/autocert: unknown private key type") + } + + // public + for _, b := range tlscert.Certificate { + pb := &pem.Block{Type: "CERTIFICATE", Bytes: b} + if err := pem.Encode(&buf, pb); err != nil { + return err + } + } + + // TODO: might want to define a cache timeout on m + ctx := context.Background() + return m.Cache.Put(ctx, domain, buf.Bytes()) +} + +func encodeECDSAKey(w io.Writer, key *ecdsa.PrivateKey) error { + b, err := x509.MarshalECPrivateKey(key) + if err != nil { + return err + } + pb := &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} + return pem.Encode(w, pb) +} + +// createCert starts the domain ownership verification and returns a certificate +// for that domain upon success. +// +// If the domain is already being verified, it waits for the existing verification to complete. +// Either way, createCert blocks for the duration of the whole process. +func (m *Manager) createCert(ctx context.Context, domain string) (*tls.Certificate, error) { + // TODO: maybe rewrite this whole piece using sync.Once + state, err := m.certState(domain) + if err != nil { + return nil, err + } + // state may exist if another goroutine is already working on it + // in which case just wait for it to finish + if !state.locked { + state.RLock() + defer state.RUnlock() + return state.tlscert() + } + + // We are the first; state is locked. + // Unblock the readers when domain ownership is verified + // and the we got the cert or the process failed. + defer state.Unlock() + state.locked = false + + der, leaf, err := m.authorizedCert(ctx, state.key, domain) + if err != nil { + return nil, err + } + state.cert = der + state.leaf = leaf + go m.renew(domain, state.key, state.leaf.NotAfter) + return state.tlscert() +} + +// certState returns a new or existing certState. +// If a new certState is returned, state.exist is false and the state is locked. +// The returned error is non-nil only in the case where a new state could not be created. +func (m *Manager) certState(domain string) (*certState, error) { + m.stateMu.Lock() + defer m.stateMu.Unlock() + if m.state == nil { + m.state = make(map[string]*certState) + } + // existing state + if state, ok := m.state[domain]; ok { + return state, nil + } + // new locked state + key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return nil, err + } + state := &certState{ + key: key, + locked: true, + } + state.Lock() // will be unlocked by m.certState caller + m.state[domain] = state + return state, nil +} + +// authorizedCert starts domain ownership verification process and requests a new cert upon success. +// The key argument is the certificate private key. +func (m *Manager) authorizedCert(ctx context.Context, key crypto.Signer, domain string) (der [][]byte, leaf *x509.Certificate, err error) { + // TODO: make m.verify retry or retry m.verify calls here + if err := m.verify(ctx, domain); err != nil { + return nil, nil, err + } + client, err := m.acmeClient(ctx) + if err != nil { + return nil, nil, err + } + csr, err := certRequest(key, domain) + if err != nil { + return nil, nil, err + } + der, _, err = client.CreateCert(ctx, csr, 0, true) + if err != nil { + return nil, nil, err + } + leaf, err = validCert(domain, der, key) + if err != nil { + return nil, nil, err + } + return der, leaf, nil +} + +// verify starts a new identifier (domain) authorization flow. +// It prepares a challenge response and then blocks until the authorization +// is marked as "completed" by the CA (either succeeded or failed). +// +// verify returns nil iff the verification was successful. +func (m *Manager) verify(ctx context.Context, domain string) error { + client, err := m.acmeClient(ctx) + if err != nil { + return err + } + + // start domain authorization and get the challenge + authz, err := client.Authorize(ctx, domain) + if err != nil { + return err + } + // maybe don't need to at all + if authz.Status == acme.StatusValid { + return nil + } + + // pick a challenge: prefer tls-sni-02 over tls-sni-01 + // TODO: consider authz.Combinations + var chal *acme.Challenge + for _, c := range authz.Challenges { + if c.Type == "tls-sni-02" { + chal = c + break + } + if c.Type == "tls-sni-01" { + chal = c + } + } + if chal == nil { + return errors.New("acme/autocert: no supported challenge type found") + } + + // create a token cert for the challenge response + var ( + cert tls.Certificate + name string + ) + switch chal.Type { + case "tls-sni-01": + cert, name, err = client.TLSSNI01ChallengeCert(chal.Token) + case "tls-sni-02": + cert, name, err = client.TLSSNI02ChallengeCert(chal.Token) + default: + err = fmt.Errorf("acme/autocert: unknown challenge type %q", chal.Type) + } + if err != nil { + return err + } + m.putTokenCert(name, &cert) + defer func() { + // verification has ended at this point + // don't need token cert anymore + go m.deleteTokenCert(name) + }() + + // ready to fulfill the challenge + if _, err := client.Accept(ctx, chal); err != nil { + return err + } + // wait for the CA to validate + _, err = client.WaitAuthorization(ctx, authz.URI) + return err +} + +// putTokenCert stores the cert under the named key in both m.tokenCert map +// and m.Cache. +func (m *Manager) putTokenCert(name string, cert *tls.Certificate) { + m.tokenCertMu.Lock() + defer m.tokenCertMu.Unlock() + if m.tokenCert == nil { + m.tokenCert = make(map[string]*tls.Certificate) + } + m.tokenCert[name] = cert + m.cachePut(name, cert) +} + +// deleteTokenCert removes the token certificate for the specified domain name +// from both m.tokenCert map and m.Cache. +func (m *Manager) deleteTokenCert(name string) { + m.tokenCertMu.Lock() + defer m.tokenCertMu.Unlock() + delete(m.tokenCert, name) + if m.Cache != nil { + m.Cache.Delete(context.Background(), name) + } +} + +// renew starts a cert renewal timer loop, one per domain. +// +// The loop is scheduled in two cases: +// - a cert was fetched from cache for the first time (wasn't in m.state) +// - a new cert was created by m.createCert +// +// The key argument is a certificate private key. +// The exp argument is the cert expiration time (NotAfter). +func (m *Manager) renew(domain string, key crypto.Signer, exp time.Time) { + m.renewalMu.Lock() + defer m.renewalMu.Unlock() + if m.renewal[domain] != nil { + // another goroutine is already on it + return + } + if m.renewal == nil { + m.renewal = make(map[string]*domainRenewal) + } + dr := &domainRenewal{m: m, domain: domain, key: key} + m.renewal[domain] = dr + dr.start(exp) +} + +// stopRenew stops all currently running cert renewal timers. +// The timers are not restarted during the lifetime of the Manager. +func (m *Manager) stopRenew() { + m.renewalMu.Lock() + defer m.renewalMu.Unlock() + for name, dr := range m.renewal { + delete(m.renewal, name) + dr.stop() + } +} + +func (m *Manager) accountKey(ctx context.Context) (crypto.Signer, error) { + const keyName = "acme_account.key" + + genKey := func() (*ecdsa.PrivateKey, error) { + return ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + } + + if m.Cache == nil { + return genKey() + } + + data, err := m.Cache.Get(ctx, keyName) + if err == ErrCacheMiss { + key, err := genKey() + if err != nil { + return nil, err + } + var buf bytes.Buffer + if err := encodeECDSAKey(&buf, key); err != nil { + return nil, err + } + if err := m.Cache.Put(ctx, keyName, buf.Bytes()); err != nil { + return nil, err + } + return key, nil + } + if err != nil { + return nil, err + } + + priv, _ := pem.Decode(data) + if priv == nil || !strings.Contains(priv.Type, "PRIVATE") { + return nil, errors.New("acme/autocert: invalid account key found in cache") + } + return parsePrivateKey(priv.Bytes) +} + +func (m *Manager) acmeClient(ctx context.Context) (*acme.Client, error) { + m.clientMu.Lock() + defer m.clientMu.Unlock() + if m.client != nil { + return m.client, nil + } + + client := m.Client + if client == nil { + client = &acme.Client{DirectoryURL: acme.LetsEncryptURL} + } + if client.Key == nil { + var err error + client.Key, err = m.accountKey(ctx) + if err != nil { + return nil, err + } + } + var contact []string + if m.Email != "" { + contact = []string{"mailto:" + m.Email} + } + a := &acme.Account{Contact: contact} + _, err := client.Register(ctx, a, m.Prompt) + if ae, ok := err.(*acme.Error); err == nil || ok && ae.StatusCode == http.StatusConflict { + // conflict indicates the key is already registered + m.client = client + err = nil + } + return m.client, err +} + +func (m *Manager) hostPolicy() HostPolicy { + if m.HostPolicy != nil { + return m.HostPolicy + } + return defaultHostPolicy +} + +func (m *Manager) renewBefore() time.Duration { + if m.RenewBefore > maxRandRenew { + return m.RenewBefore + } + return 7 * 24 * time.Hour // 1 week +} + +// certState is ready when its mutex is unlocked for reading. +type certState struct { + sync.RWMutex + locked bool // locked for read/write + key crypto.Signer // private key for cert + cert [][]byte // DER encoding + leaf *x509.Certificate // parsed cert[0]; always non-nil if cert != nil +} + +// tlscert creates a tls.Certificate from s.key and s.cert. +// Callers should wrap it in s.RLock() and s.RUnlock(). +func (s *certState) tlscert() (*tls.Certificate, error) { + if s.key == nil { + return nil, errors.New("acme/autocert: missing signer") + } + if len(s.cert) == 0 { + return nil, errors.New("acme/autocert: missing certificate") + } + return &tls.Certificate{ + PrivateKey: s.key, + Certificate: s.cert, + Leaf: s.leaf, + }, nil +} + +// certRequest creates a certificate request for the given common name cn +// and optional SANs. +func certRequest(key crypto.Signer, cn string, san ...string) ([]byte, error) { + req := &x509.CertificateRequest{ + Subject: pkix.Name{CommonName: cn}, + DNSNames: san, + } + return x509.CreateCertificateRequest(rand.Reader, req, key) +} + +// Attempt to parse the given private key DER block. OpenSSL 0.9.8 generates +// PKCS#1 private keys by default, while OpenSSL 1.0.0 generates PKCS#8 keys. +// OpenSSL ecparam generates SEC1 EC private keys for ECDSA. We try all three. +// +// Inspired by parsePrivateKey in crypto/tls/tls.go. +func parsePrivateKey(der []byte) (crypto.Signer, error) { + if key, err := x509.ParsePKCS1PrivateKey(der); err == nil { + return key, nil + } + if key, err := x509.ParsePKCS8PrivateKey(der); err == nil { + switch key := key.(type) { + case *rsa.PrivateKey: + return key, nil + case *ecdsa.PrivateKey: + return key, nil + default: + return nil, errors.New("acme/autocert: unknown private key type in PKCS#8 wrapping") + } + } + if key, err := x509.ParseECPrivateKey(der); err == nil { + return key, nil + } + + return nil, errors.New("acme/autocert: failed to parse private key") +} + +// validCert parses a cert chain provided as der argument and verifies the leaf, der[0], +// corresponds to the private key, as well as the domain match and expiration dates. +// It doesn't do any revocation checking. +// +// The returned value is the verified leaf cert. +func validCert(domain string, der [][]byte, key crypto.Signer) (leaf *x509.Certificate, err error) { + // parse public part(s) + var n int + for _, b := range der { + n += len(b) + } + pub := make([]byte, n) + n = 0 + for _, b := range der { + n += copy(pub[n:], b) + } + x509Cert, err := x509.ParseCertificates(pub) + if len(x509Cert) == 0 { + return nil, errors.New("acme/autocert: no public key found") + } + // verify the leaf is not expired and matches the domain name + leaf = x509Cert[0] + now := timeNow() + if now.Before(leaf.NotBefore) { + return nil, errors.New("acme/autocert: certificate is not valid yet") + } + if now.After(leaf.NotAfter) { + return nil, errors.New("acme/autocert: expired certificate") + } + if err := leaf.VerifyHostname(domain); err != nil { + return nil, err + } + // ensure the leaf corresponds to the private key + switch pub := leaf.PublicKey.(type) { + case *rsa.PublicKey: + prv, ok := key.(*rsa.PrivateKey) + if !ok { + return nil, errors.New("acme/autocert: private key type does not match public key type") + } + if pub.N.Cmp(prv.N) != 0 { + return nil, errors.New("acme/autocert: private key does not match public key") + } + case *ecdsa.PublicKey: + prv, ok := key.(*ecdsa.PrivateKey) + if !ok { + return nil, errors.New("acme/autocert: private key type does not match public key type") + } + if pub.X.Cmp(prv.X) != 0 || pub.Y.Cmp(prv.Y) != 0 { + return nil, errors.New("acme/autocert: private key does not match public key") + } + default: + return nil, errors.New("acme/autocert: unknown public key algorithm") + } + return leaf, nil +} + +func retryAfter(v string) time.Duration { + if i, err := strconv.Atoi(v); err == nil { + return time.Duration(i) * time.Second + } + if t, err := http.ParseTime(v); err == nil { + return t.Sub(timeNow()) + } + return time.Second +} + +type lockedMathRand struct { + sync.Mutex + rnd *mathrand.Rand +} + +func (r *lockedMathRand) int63n(max int64) int64 { + r.Lock() + n := r.rnd.Int63n(max) + r.Unlock() + return n +} + +// for easier testing +var timeNow = time.Now diff --git a/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go b/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go new file mode 100644 index 0000000..3a9daa1 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go @@ -0,0 +1,390 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/base64" + "encoding/json" + "fmt" + "html/template" + "io" + "math/big" + "net/http" + "net/http/httptest" + "reflect" + "testing" + "time" + + "golang.org/x/crypto/acme" + "golang.org/x/net/context" +) + +var discoTmpl = template.Must(template.New("disco").Parse(`{ + "new-reg": "{{.}}/new-reg", + "new-authz": "{{.}}/new-authz", + "new-cert": "{{.}}/new-cert" +}`)) + +var authzTmpl = template.Must(template.New("authz").Parse(`{ + "status": "pending", + "challenges": [ + { + "uri": "{{.}}/challenge/1", + "type": "tls-sni-01", + "token": "token-01" + }, + { + "uri": "{{.}}/challenge/2", + "type": "tls-sni-02", + "token": "token-02" + } + ] +}`)) + +type memCache map[string][]byte + +func (m memCache) Get(ctx context.Context, key string) ([]byte, error) { + v, ok := m[key] + if !ok { + return nil, ErrCacheMiss + } + return v, nil +} + +func (m memCache) Put(ctx context.Context, key string, data []byte) error { + m[key] = data + return nil +} + +func (m memCache) Delete(ctx context.Context, key string) error { + delete(m, key) + return nil +} + +func dummyCert(pub interface{}, san ...string) ([]byte, error) { + return dateDummyCert(pub, time.Now(), time.Now().Add(90*24*time.Hour), san...) +} + +func dateDummyCert(pub interface{}, start, end time.Time, san ...string) ([]byte, error) { + // use EC key to run faster on 386 + key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return nil, err + } + t := &x509.Certificate{ + SerialNumber: big.NewInt(1), + NotBefore: start, + NotAfter: end, + BasicConstraintsValid: true, + KeyUsage: x509.KeyUsageKeyEncipherment, + DNSNames: san, + } + if pub == nil { + pub = &key.PublicKey + } + return x509.CreateCertificate(rand.Reader, t, t, pub, key) +} + +func decodePayload(v interface{}, r io.Reader) error { + var req struct{ Payload string } + if err := json.NewDecoder(r).Decode(&req); err != nil { + return err + } + payload, err := base64.RawURLEncoding.DecodeString(req.Payload) + if err != nil { + return err + } + return json.Unmarshal(payload, v) +} + +func TestGetCertificate(t *testing.T) { + const domain = "example.org" + man := &Manager{Prompt: AcceptTOS} + defer man.stopRenew() + + // echo token-02 | shasum -a 256 + // then divide result in 2 parts separated by dot + tokenCertName := "4e8eb87631187e9ff2153b56b13a4dec.13a35d002e485d60ff37354b32f665d9.token.acme.invalid" + verifyTokenCert := func() { + hello := &tls.ClientHelloInfo{ServerName: tokenCertName} + _, err := man.GetCertificate(hello) + if err != nil { + t.Errorf("verifyTokenCert: GetCertificate(%q): %v", tokenCertName, err) + return + } + } + + // ACME CA server stub + var ca *httptest.Server + ca = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("replay-nonce", "nonce") + if r.Method == "HEAD" { + // a nonce request + return + } + + switch r.URL.Path { + // discovery + case "/": + if err := discoTmpl.Execute(w, ca.URL); err != nil { + t.Fatalf("discoTmpl: %v", err) + } + // client key registration + case "/new-reg": + w.Write([]byte("{}")) + // domain authorization + case "/new-authz": + w.Header().Set("location", ca.URL+"/authz/1") + w.WriteHeader(http.StatusCreated) + if err := authzTmpl.Execute(w, ca.URL); err != nil { + t.Fatalf("authzTmpl: %v", err) + } + // accept tls-sni-02 challenge + case "/challenge/2": + verifyTokenCert() + w.Write([]byte("{}")) + // authorization status + case "/authz/1": + w.Write([]byte(`{"status": "valid"}`)) + // cert request + case "/new-cert": + var req struct { + CSR string `json:"csr"` + } + decodePayload(&req, r.Body) + b, _ := base64.RawURLEncoding.DecodeString(req.CSR) + csr, err := x509.ParseCertificateRequest(b) + if err != nil { + t.Fatalf("new-cert: CSR: %v", err) + } + der, err := dummyCert(csr.PublicKey, domain) + if err != nil { + t.Fatalf("new-cert: dummyCert: %v", err) + } + chainUp := fmt.Sprintf("<%s/ca-cert>; rel=up", ca.URL) + w.Header().Set("link", chainUp) + w.WriteHeader(http.StatusCreated) + w.Write(der) + // CA chain cert + case "/ca-cert": + der, err := dummyCert(nil, "ca") + if err != nil { + t.Fatalf("ca-cert: dummyCert: %v", err) + } + w.Write(der) + default: + t.Errorf("unrecognized r.URL.Path: %s", r.URL.Path) + } + })) + defer ca.Close() + + // use EC key to run faster on 386 + key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + man.Client = &acme.Client{ + Key: key, + DirectoryURL: ca.URL, + } + + // simulate tls.Config.GetCertificate + var tlscert *tls.Certificate + done := make(chan struct{}) + go func() { + hello := &tls.ClientHelloInfo{ServerName: domain} + tlscert, err = man.GetCertificate(hello) + close(done) + }() + select { + case <-time.After(time.Minute): + t.Fatal("man.GetCertificate took too long to return") + case <-done: + } + if err != nil { + t.Fatalf("man.GetCertificate: %v", err) + } + + // verify the tlscert is the same we responded with from the CA stub + if len(tlscert.Certificate) == 0 { + t.Fatal("len(tlscert.Certificate) is 0") + } + cert, err := x509.ParseCertificate(tlscert.Certificate[0]) + if err != nil { + t.Fatalf("x509.ParseCertificate: %v", err) + } + if len(cert.DNSNames) == 0 || cert.DNSNames[0] != domain { + t.Errorf("cert.DNSNames = %v; want %q", cert.DNSNames, domain) + } + + // make sure token cert was removed + done = make(chan struct{}) + go func() { + for { + hello := &tls.ClientHelloInfo{ServerName: tokenCertName} + if _, err := man.GetCertificate(hello); err != nil { + break + } + time.Sleep(100 * time.Millisecond) + } + close(done) + }() + select { + case <-time.After(5 * time.Second): + t.Error("token cert was not removed") + case <-done: + } +} + +func TestAccountKeyCache(t *testing.T) { + cache := make(memCache) + m := Manager{Cache: cache} + ctx := context.Background() + k1, err := m.accountKey(ctx) + if err != nil { + t.Fatal(err) + } + k2, err := m.accountKey(ctx) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(k1, k2) { + t.Errorf("account keys don't match: k1 = %#v; k2 = %#v", k1, k2) + } +} + +func TestCache(t *testing.T) { + privKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + tmpl := &x509.Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{CommonName: "example.org"}, + NotAfter: time.Now().Add(time.Hour), + } + pub, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, &privKey.PublicKey, privKey) + if err != nil { + t.Fatal(err) + } + tlscert := &tls.Certificate{ + Certificate: [][]byte{pub}, + PrivateKey: privKey, + } + + cache := make(memCache) + man := &Manager{Cache: cache} + defer man.stopRenew() + if err := man.cachePut("example.org", tlscert); err != nil { + t.Fatalf("man.cachePut: %v", err) + } + res, err := man.cacheGet("example.org") + if err != nil { + t.Fatalf("man.cacheGet: %v", err) + } + if res == nil { + t.Fatal("res is nil") + } +} + +func TestHostWhitelist(t *testing.T) { + policy := HostWhitelist("example.com", "example.org", "*.example.net") + tt := []struct { + host string + allow bool + }{ + {"example.com", true}, + {"example.org", true}, + {"one.example.com", false}, + {"two.example.org", false}, + {"three.example.net", false}, + {"dummy", false}, + } + for i, test := range tt { + err := policy(nil, test.host) + if err != nil && test.allow { + t.Errorf("%d: policy(%q): %v; want nil", i, test.host, err) + } + if err == nil && !test.allow { + t.Errorf("%d: policy(%q): nil; want an error", i, test.host) + } + } +} + +func TestValidCert(t *testing.T) { + key1, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + key2, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + key3, err := rsa.GenerateKey(rand.Reader, 512) + if err != nil { + t.Fatal(err) + } + cert1, err := dummyCert(key1.Public(), "example.org") + if err != nil { + t.Fatal(err) + } + cert2, err := dummyCert(key2.Public(), "example.org") + if err != nil { + t.Fatal(err) + } + cert3, err := dummyCert(key3.Public(), "example.org") + if err != nil { + t.Fatal(err) + } + now := time.Now() + early, err := dateDummyCert(key1.Public(), now.Add(time.Hour), now.Add(2*time.Hour), "example.org") + if err != nil { + t.Fatal(err) + } + expired, err := dateDummyCert(key1.Public(), now.Add(-2*time.Hour), now.Add(-time.Hour), "example.org") + if err != nil { + t.Fatal(err) + } + + tt := []struct { + domain string + key crypto.Signer + cert [][]byte + ok bool + }{ + {"example.org", key1, [][]byte{cert1}, true}, + {"example.org", key3, [][]byte{cert3}, true}, + {"example.org", key1, [][]byte{cert1, cert2, cert3}, true}, + {"example.org", key1, [][]byte{cert1, {1}}, false}, + {"example.org", key1, [][]byte{{1}}, false}, + {"example.org", key1, [][]byte{cert2}, false}, + {"example.org", key2, [][]byte{cert1}, false}, + {"example.org", key1, [][]byte{cert3}, false}, + {"example.org", key3, [][]byte{cert1}, false}, + {"example.net", key1, [][]byte{cert1}, false}, + {"example.org", key1, [][]byte{early}, false}, + {"example.org", key1, [][]byte{expired}, false}, + } + for i, test := range tt { + leaf, err := validCert(test.domain, test.cert, test.key) + if err != nil && test.ok { + t.Errorf("%d: err = %v", i, err) + } + if err == nil && !test.ok { + t.Errorf("%d: err is nil", i) + } + if err == nil && test.ok && leaf == nil { + t.Errorf("%d: leaf is nil", i) + } + } +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/cache.go b/vendor/golang.org/x/crypto/acme/autocert/cache.go new file mode 100644 index 0000000..1c67f6c --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/cache.go @@ -0,0 +1,130 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "errors" + "io/ioutil" + "os" + "path/filepath" + + "golang.org/x/net/context" +) + +// ErrCacheMiss is returned when a certificate is not found in cache. +var ErrCacheMiss = errors.New("acme/autocert: certificate cache miss") + +// Cache is used by Manager to store and retrieve previously obtained certificates +// as opaque data. +// +// The key argument of the methods refers to a domain name but need not be an FQDN. +// Cache implementations should not rely on the key naming pattern. +type Cache interface { + // Get returns a certificate data for the specified key. + // If there's no such key, Get returns ErrCacheMiss. + Get(ctx context.Context, key string) ([]byte, error) + + // Put stores the data in the cache under the specified key. + // Inderlying implementations may use any data storage format, + // as long as the reverse operation, Get, results in the original data. + Put(ctx context.Context, key string, data []byte) error + + // Delete removes a certificate data from the cache under the specified key. + // If there's no such key in the cache, Delete returns nil. + Delete(ctx context.Context, key string) error +} + +// DirCache implements Cache using a directory on the local filesystem. +// If the directory does not exist, it will be created with 0700 permissions. +type DirCache string + +// Get reads a certificate data from the specified file name. +func (d DirCache) Get(ctx context.Context, name string) ([]byte, error) { + name = filepath.Join(string(d), name) + var ( + data []byte + err error + done = make(chan struct{}) + ) + go func() { + data, err = ioutil.ReadFile(name) + close(done) + }() + select { + case <-ctx.Done(): + return nil, ctx.Err() + case <-done: + } + if os.IsNotExist(err) { + return nil, ErrCacheMiss + } + return data, err +} + +// Put writes the certificate data to the specified file name. +// The file will be created with 0600 permissions. +func (d DirCache) Put(ctx context.Context, name string, data []byte) error { + if err := os.MkdirAll(string(d), 0700); err != nil { + return err + } + + done := make(chan struct{}) + var err error + go func() { + defer close(done) + var tmp string + if tmp, err = d.writeTempFile(name, data); err != nil { + return + } + // prevent overwriting the file if the context was cancelled + if ctx.Err() != nil { + return // no need to set err + } + name = filepath.Join(string(d), name) + err = os.Rename(tmp, name) + }() + select { + case <-ctx.Done(): + return ctx.Err() + case <-done: + } + return err +} + +// Delete removes the specified file name. +func (d DirCache) Delete(ctx context.Context, name string) error { + name = filepath.Join(string(d), name) + var ( + err error + done = make(chan struct{}) + ) + go func() { + err = os.Remove(name) + close(done) + }() + select { + case <-ctx.Done(): + return ctx.Err() + case <-done: + } + if err != nil && !os.IsNotExist(err) { + return err + } + return nil +} + +// writeTempFile writes b to a temporary file, closes the file and returns its path. +func (d DirCache) writeTempFile(prefix string, b []byte) (string, error) { + // TempFile uses 0600 permissions + f, err := ioutil.TempFile(string(d), prefix) + if err != nil { + return "", err + } + if _, err := f.Write(b); err != nil { + f.Close() + return "", err + } + return f.Name(), f.Close() +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/cache_test.go b/vendor/golang.org/x/crypto/acme/autocert/cache_test.go new file mode 100644 index 0000000..ad6d4a4 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/cache_test.go @@ -0,0 +1,58 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "io/ioutil" + "os" + "path/filepath" + "reflect" + "testing" + + "golang.org/x/net/context" +) + +// make sure DirCache satisfies Cache interface +var _ Cache = DirCache("/") + +func TestDirCache(t *testing.T) { + dir, err := ioutil.TempDir("", "autocert") + if err != nil { + t.Fatal(err) + } + dir = filepath.Join(dir, "certs") // a nonexistent dir + cache := DirCache(dir) + ctx := context.Background() + + // test cache miss + if _, err := cache.Get(ctx, "nonexistent"); err != ErrCacheMiss { + t.Errorf("get: %v; want ErrCacheMiss", err) + } + + // test put/get + b1 := []byte{1} + if err := cache.Put(ctx, "dummy", b1); err != nil { + t.Fatalf("put: %v", err) + } + b2, err := cache.Get(ctx, "dummy") + if err != nil { + t.Fatalf("get: %v", err) + } + if !reflect.DeepEqual(b1, b2) { + t.Errorf("b1 = %v; want %v", b1, b2) + } + name := filepath.Join(dir, "dummy") + if _, err := os.Stat(name); err != nil { + t.Error(err) + } + + // test delete + if err := cache.Delete(ctx, "dummy"); err != nil { + t.Fatalf("delete: %v", err) + } + if _, err := cache.Get(ctx, "dummy"); err != ErrCacheMiss { + t.Errorf("get: %v; want ErrCacheMiss", err) + } +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/renewal.go b/vendor/golang.org/x/crypto/acme/autocert/renewal.go new file mode 100644 index 0000000..1a5018c --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/renewal.go @@ -0,0 +1,125 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "crypto" + "sync" + "time" + + "golang.org/x/net/context" +) + +// maxRandRenew is a maximum deviation from Manager.RenewBefore. +const maxRandRenew = time.Hour + +// domainRenewal tracks the state used by the periodic timers +// renewing a single domain's cert. +type domainRenewal struct { + m *Manager + domain string + key crypto.Signer + + timerMu sync.Mutex + timer *time.Timer +} + +// start starts a cert renewal timer at the time +// defined by the certificate expiration time exp. +// +// If the timer is already started, calling start is a noop. +func (dr *domainRenewal) start(exp time.Time) { + dr.timerMu.Lock() + defer dr.timerMu.Unlock() + if dr.timer != nil { + return + } + dr.timer = time.AfterFunc(dr.next(exp), dr.renew) +} + +// stop stops the cert renewal timer. +// If the timer is already stopped, calling stop is a noop. +func (dr *domainRenewal) stop() { + dr.timerMu.Lock() + defer dr.timerMu.Unlock() + if dr.timer == nil { + return + } + dr.timer.Stop() + dr.timer = nil +} + +// renew is called periodically by a timer. +// The first renew call is kicked off by dr.start. +func (dr *domainRenewal) renew() { + dr.timerMu.Lock() + defer dr.timerMu.Unlock() + if dr.timer == nil { + return + } + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) + defer cancel() + // TODO: rotate dr.key at some point? + next, err := dr.do(ctx) + if err != nil { + next = maxRandRenew / 2 + next += time.Duration(pseudoRand.int63n(int64(next))) + } + dr.timer = time.AfterFunc(next, dr.renew) + testDidRenewLoop(next, err) +} + +// do is similar to Manager.createCert but it doesn't lock a Manager.state item. +// Instead, it requests a new certificate independently and, upon success, +// replaces dr.m.state item with a new one and updates cache for the given domain. +// +// It may return immediately if the expiration date of the currently cached cert +// is far enough in the future. +// +// The returned value is a time interval after which the renewal should occur again. +func (dr *domainRenewal) do(ctx context.Context) (time.Duration, error) { + // a race is likely unavoidable in a distributed environment + // but we try nonetheless + if tlscert, err := dr.m.cacheGet(dr.domain); err == nil { + next := dr.next(tlscert.Leaf.NotAfter) + if next > dr.m.renewBefore()+maxRandRenew { + return next, nil + } + } + + der, leaf, err := dr.m.authorizedCert(ctx, dr.key, dr.domain) + if err != nil { + return 0, err + } + state := &certState{ + key: dr.key, + cert: der, + leaf: leaf, + } + tlscert, err := state.tlscert() + if err != nil { + return 0, err + } + dr.m.cachePut(dr.domain, tlscert) + dr.m.stateMu.Lock() + defer dr.m.stateMu.Unlock() + // m.state is guaranteed to be non-nil at this point + dr.m.state[dr.domain] = state + return dr.next(leaf.NotAfter), nil +} + +func (dr *domainRenewal) next(expiry time.Time) time.Duration { + d := expiry.Sub(timeNow()) - dr.m.renewBefore() + // add a bit of randomness to renew deadline + n := pseudoRand.int63n(int64(maxRandRenew)) + d -= time.Duration(n) + if d < 0 { + return 0 + } + return d +} + +var testDidRenewLoop = func(next time.Duration, err error) {} diff --git a/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go b/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go new file mode 100644 index 0000000..d1ec52f --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go @@ -0,0 +1,190 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/tls" + "crypto/x509" + "encoding/base64" + "fmt" + "net/http" + "net/http/httptest" + "testing" + "time" + + "golang.org/x/crypto/acme" +) + +func TestRenewalNext(t *testing.T) { + now := time.Now() + timeNow = func() time.Time { return now } + defer func() { timeNow = time.Now }() + + man := &Manager{RenewBefore: 7 * 24 * time.Hour} + defer man.stopRenew() + tt := []struct { + expiry time.Time + min, max time.Duration + }{ + {now.Add(90 * 24 * time.Hour), 83*24*time.Hour - maxRandRenew, 83 * 24 * time.Hour}, + {now.Add(time.Hour), 0, 1}, + {now, 0, 1}, + {now.Add(-time.Hour), 0, 1}, + } + + dr := &domainRenewal{m: man} + for i, test := range tt { + next := dr.next(test.expiry) + if next < test.min || test.max < next { + t.Errorf("%d: next = %v; want between %v and %v", i, next, test.min, test.max) + } + } +} + +func TestRenewFromCache(t *testing.T) { + const domain = "example.org" + + // ACME CA server stub + var ca *httptest.Server + ca = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("replay-nonce", "nonce") + if r.Method == "HEAD" { + // a nonce request + return + } + + switch r.URL.Path { + // discovery + case "/": + if err := discoTmpl.Execute(w, ca.URL); err != nil { + t.Fatalf("discoTmpl: %v", err) + } + // client key registration + case "/new-reg": + w.Write([]byte("{}")) + // domain authorization + case "/new-authz": + w.Header().Set("location", ca.URL+"/authz/1") + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"status": "valid"}`)) + // cert request + case "/new-cert": + var req struct { + CSR string `json:"csr"` + } + decodePayload(&req, r.Body) + b, _ := base64.RawURLEncoding.DecodeString(req.CSR) + csr, err := x509.ParseCertificateRequest(b) + if err != nil { + t.Fatalf("new-cert: CSR: %v", err) + } + der, err := dummyCert(csr.PublicKey, domain) + if err != nil { + t.Fatalf("new-cert: dummyCert: %v", err) + } + chainUp := fmt.Sprintf("<%s/ca-cert>; rel=up", ca.URL) + w.Header().Set("link", chainUp) + w.WriteHeader(http.StatusCreated) + w.Write(der) + // CA chain cert + case "/ca-cert": + der, err := dummyCert(nil, "ca") + if err != nil { + t.Fatalf("ca-cert: dummyCert: %v", err) + } + w.Write(der) + default: + t.Errorf("unrecognized r.URL.Path: %s", r.URL.Path) + } + })) + defer ca.Close() + + // use EC key to run faster on 386 + key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + man := &Manager{ + Prompt: AcceptTOS, + Cache: make(memCache), + RenewBefore: 24 * time.Hour, + Client: &acme.Client{ + Key: key, + DirectoryURL: ca.URL, + }, + } + defer man.stopRenew() + + // cache an almost expired cert + now := time.Now() + cert, err := dateDummyCert(key.Public(), now.Add(-2*time.Hour), now.Add(time.Minute), domain) + if err != nil { + t.Fatal(err) + } + tlscert := &tls.Certificate{PrivateKey: key, Certificate: [][]byte{cert}} + if err := man.cachePut(domain, tlscert); err != nil { + t.Fatal(err) + } + + // veriy the renewal happened + defer func() { + testDidRenewLoop = func(next time.Duration, err error) {} + }() + done := make(chan struct{}) + testDidRenewLoop = func(next time.Duration, err error) { + defer close(done) + if err != nil { + t.Errorf("testDidRenewLoop: %v", err) + } + // Next should be about 90 days: + // dummyCert creates 90days expiry + account for man.RenewBefore. + // Previous expiration was within 1 min. + future := 88 * 24 * time.Hour + if next < future { + t.Errorf("testDidRenewLoop: next = %v; want >= %v", next, future) + } + + // ensure the new cert is cached + after := time.Now().Add(future) + tlscert, err := man.cacheGet(domain) + if err != nil { + t.Fatalf("man.cacheGet: %v", err) + } + if !tlscert.Leaf.NotAfter.After(after) { + t.Errorf("cache leaf.NotAfter = %v; want > %v", tlscert.Leaf.NotAfter, after) + } + + // verify the old cert is also replaced in memory + man.stateMu.Lock() + defer man.stateMu.Unlock() + s := man.state[domain] + if s == nil { + t.Fatalf("m.state[%q] is nil", domain) + } + tlscert, err = s.tlscert() + if err != nil { + t.Fatalf("s.tlscert: %v", err) + } + if !tlscert.Leaf.NotAfter.After(after) { + t.Errorf("state leaf.NotAfter = %v; want > %v", tlscert.Leaf.NotAfter, after) + } + } + + // trigger renew + hello := &tls.ClientHelloInfo{ServerName: domain} + if _, err := man.GetCertificate(hello); err != nil { + t.Fatal(err) + } + + // wait for renew loop + select { + case <-time.After(10 * time.Second): + t.Fatal("renew took too long to occur") + case <-done: + } +} diff --git a/vendor/golang.org/x/crypto/acme/jws.go b/vendor/golang.org/x/crypto/acme/jws.go new file mode 100644 index 0000000..49ba313 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/jws.go @@ -0,0 +1,153 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package acme + +import ( + "crypto" + "crypto/ecdsa" + "crypto/rand" + "crypto/rsa" + "crypto/sha256" + _ "crypto/sha512" // need for EC keys + "encoding/base64" + "encoding/json" + "fmt" + "math/big" +) + +// jwsEncodeJSON signs claimset using provided key and a nonce. +// The result is serialized in JSON format. +// See https://tools.ietf.org/html/rfc7515#section-7. +func jwsEncodeJSON(claimset interface{}, key crypto.Signer, nonce string) ([]byte, error) { + jwk, err := jwkEncode(key.Public()) + if err != nil { + return nil, err + } + alg, sha := jwsHasher(key) + if alg == "" || !sha.Available() { + return nil, ErrUnsupportedKey + } + phead := fmt.Sprintf(`{"alg":%q,"jwk":%s,"nonce":%q}`, alg, jwk, nonce) + phead = base64.RawURLEncoding.EncodeToString([]byte(phead)) + cs, err := json.Marshal(claimset) + if err != nil { + return nil, err + } + payload := base64.RawURLEncoding.EncodeToString(cs) + hash := sha.New() + hash.Write([]byte(phead + "." + payload)) + sig, err := jwsSign(key, sha, hash.Sum(nil)) + if err != nil { + return nil, err + } + + enc := struct { + Protected string `json:"protected"` + Payload string `json:"payload"` + Sig string `json:"signature"` + }{ + Protected: phead, + Payload: payload, + Sig: base64.RawURLEncoding.EncodeToString(sig), + } + return json.Marshal(&enc) +} + +// jwkEncode encodes public part of an RSA or ECDSA key into a JWK. +// The result is also suitable for creating a JWK thumbprint. +// https://tools.ietf.org/html/rfc7517 +func jwkEncode(pub crypto.PublicKey) (string, error) { + switch pub := pub.(type) { + case *rsa.PublicKey: + // https://tools.ietf.org/html/rfc7518#section-6.3.1 + n := pub.N + e := big.NewInt(int64(pub.E)) + // Field order is important. + // See https://tools.ietf.org/html/rfc7638#section-3.3 for details. + return fmt.Sprintf(`{"e":"%s","kty":"RSA","n":"%s"}`, + base64.RawURLEncoding.EncodeToString(e.Bytes()), + base64.RawURLEncoding.EncodeToString(n.Bytes()), + ), nil + case *ecdsa.PublicKey: + // https://tools.ietf.org/html/rfc7518#section-6.2.1 + p := pub.Curve.Params() + n := p.BitSize / 8 + if p.BitSize%8 != 0 { + n++ + } + x := pub.X.Bytes() + if n > len(x) { + x = append(make([]byte, n-len(x)), x...) + } + y := pub.Y.Bytes() + if n > len(y) { + y = append(make([]byte, n-len(y)), y...) + } + // Field order is important. + // See https://tools.ietf.org/html/rfc7638#section-3.3 for details. + return fmt.Sprintf(`{"crv":"%s","kty":"EC","x":"%s","y":"%s"}`, + p.Name, + base64.RawURLEncoding.EncodeToString(x), + base64.RawURLEncoding.EncodeToString(y), + ), nil + } + return "", ErrUnsupportedKey +} + +// jwsSign signs the digest using the given key. +// It returns ErrUnsupportedKey if the key type is unknown. +// The hash is used only for RSA keys. +func jwsSign(key crypto.Signer, hash crypto.Hash, digest []byte) ([]byte, error) { + switch key := key.(type) { + case *rsa.PrivateKey: + return key.Sign(rand.Reader, digest, hash) + case *ecdsa.PrivateKey: + r, s, err := ecdsa.Sign(rand.Reader, key, digest) + if err != nil { + return nil, err + } + rb, sb := r.Bytes(), s.Bytes() + size := key.Params().BitSize / 8 + if size%8 > 0 { + size++ + } + sig := make([]byte, size*2) + copy(sig[size-len(rb):], rb) + copy(sig[size*2-len(sb):], sb) + return sig, nil + } + return nil, ErrUnsupportedKey +} + +// jwsHasher indicates suitable JWS algorithm name and a hash function +// to use for signing a digest with the provided key. +// It returns ("", 0) if the key is not supported. +func jwsHasher(key crypto.Signer) (string, crypto.Hash) { + switch key := key.(type) { + case *rsa.PrivateKey: + return "RS256", crypto.SHA256 + case *ecdsa.PrivateKey: + switch key.Params().Name { + case "P-256": + return "ES256", crypto.SHA256 + case "P-384": + return "ES384", crypto.SHA384 + case "P-512": + return "ES512", crypto.SHA512 + } + } + return "", 0 +} + +// JWKThumbprint creates a JWK thumbprint out of pub +// as specified in https://tools.ietf.org/html/rfc7638. +func JWKThumbprint(pub crypto.PublicKey) (string, error) { + jwk, err := jwkEncode(pub) + if err != nil { + return "", err + } + b := sha256.Sum256([]byte(jwk)) + return base64.RawURLEncoding.EncodeToString(b[:]), nil +} diff --git a/vendor/golang.org/x/crypto/acme/jws_test.go b/vendor/golang.org/x/crypto/acme/jws_test.go new file mode 100644 index 0000000..1def873 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/jws_test.go @@ -0,0 +1,266 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package acme + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rsa" + "crypto/x509" + "encoding/base64" + "encoding/json" + "encoding/pem" + "math/big" + "testing" +) + +const testKeyPEM = ` +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA4xgZ3eRPkwoRvy7qeRUbmMDe0V+xH9eWLdu0iheeLlrmD2mq +WXfP9IeSKApbn34g8TuAS9g5zhq8ELQ3kmjr+KV86GAMgI6VAcGlq3QrzpTCf/30 +Ab7+zawrfRaFONa1HwEzPY1KHnGVkxJc85gNkwYI9SY2RHXtvln3zs5wITNrdosq +EXeaIkVYBEhbhNu54pp3kxo6TuWLi9e6pXeWetEwmlBwtWZlPoib2j3TxLBksKZf +oyFyek380mHgJAumQ/I2fjj98/97mk3ihOY4AgVdCDj1z/GCoZkG5Rq7nbCGyosy +KWyDX00Zs+nNqVhoLeIvXC4nnWdJMZ6rogxyQQIDAQABAoIBACIEZTOI1Kao9nmV +9IeIsuaR1Y61b9neOF/MLmIVIZu+AAJFCMB4Iw11FV6sFodwpEyeZhx2WkpWVN+H +r19eGiLX3zsL0DOdqBJoSIHDWCCMxgnYJ6nvS0nRxX3qVrBp8R2g12Ub+gNPbmFm +ecf/eeERIVxfifd9VsyRu34eDEvcmKFuLYbElFcPh62xE3x12UZvV/sN7gXbawpP +G+w255vbE5MoaKdnnO83cTFlcHvhn24M/78qP7Te5OAeelr1R89kYxQLpuGe4fbS +zc6E3ym5Td6urDetGGrSY1Eu10/8sMusX+KNWkm+RsBRbkyKq72ks/qKpOxOa+c6 +9gm+Y8ECgYEA/iNUyg1ubRdH11p82l8KHtFC1DPE0V1gSZsX29TpM5jS4qv46K+s +8Ym1zmrORM8x+cynfPx1VQZQ34EYeCMIX212ryJ+zDATl4NE0I4muMvSiH9vx6Xc +7FmhNnaYzPsBL5Tm9nmtQuP09YEn8poiOJFiDs/4olnD5ogA5O4THGkCgYEA5MIL +qWYBUuqbEWLRtMruUtpASclrBqNNsJEsMGbeqBJmoMxdHeSZckbLOrqm7GlMyNRJ +Ne/5uWRGSzaMYuGmwsPpERzqEvYFnSrpjW5YtXZ+JtxFXNVfm9Z1gLLgvGpOUCIU +RbpoDckDe1vgUuk3y5+DjZihs+rqIJ45XzXTzBkCgYBWuf3segruJZy5rEKhTv+o +JqeUvRn0jNYYKFpLBeyTVBrbie6GkbUGNIWbrK05pC+c3K9nosvzuRUOQQL1tJbd +4gA3oiD9U4bMFNr+BRTHyZ7OQBcIXdz3t1qhuHVKtnngIAN1p25uPlbRFUNpshnt +jgeVoHlsBhApcs5DUc+pyQKBgDzeHPg/+g4z+nrPznjKnktRY1W+0El93kgi+J0Q +YiJacxBKEGTJ1MKBb8X6sDurcRDm22wMpGfd9I5Cv2v4GsUsF7HD/cx5xdih+G73 +c4clNj/k0Ff5Nm1izPUno4C+0IOl7br39IPmfpSuR6wH/h6iHQDqIeybjxyKvT1G +N0rRAoGBAKGD+4ZI/E1MoJ5CXB8cDDMHagbE3cq/DtmYzE2v1DFpQYu5I4PCm5c7 +EQeIP6dZtv8IMgtGIb91QX9pXvP0aznzQKwYIA8nZgoENCPfiMTPiEDT9e/0lObO +9XWsXpbSTsRPj0sv1rB+UzBJ0PgjK4q2zOF0sNo7b1+6nlM3BWPx +-----END RSA PRIVATE KEY----- +` + +// This thumbprint is for the testKey defined above. +const testKeyThumbprint = "6nicxzh6WETQlrvdchkz-U3e3DOQZ4heJKU63rfqMqQ" + +const ( + // openssl ecparam -name secp256k1 -genkey -noout + testKeyECPEM = ` +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIK07hGLr0RwyUdYJ8wbIiBS55CjnkMD23DWr+ccnypWLoAoGCCqGSM49 +AwEHoUQDQgAE5lhEug5xK4xBDZ2nAbaxLtaLiv85bxJ7ePd1dkO23HThqIrvawF5 +QAaS/RNouybCiRhRjI3EaxLkQwgrCw0gqQ== +-----END EC PRIVATE KEY----- +` + // 1. opnessl ec -in key.pem -noout -text + // 2. remove first byte, 04 (the header); the rest is X and Y + // 3. covert each with: echo | xxd -r -p | base64 | tr -d '=' | tr '/+' '_-' + testKeyECPubX = "5lhEug5xK4xBDZ2nAbaxLtaLiv85bxJ7ePd1dkO23HQ" + testKeyECPubY = "4aiK72sBeUAGkv0TaLsmwokYUYyNxGsS5EMIKwsNIKk" + // echo -n '{"crv":"P-256","kty":"EC","x":"","y":""}' | \ + // openssl dgst -binary -sha256 | base64 | tr -d '=' | tr '/+' '_-' + testKeyECThumbprint = "zedj-Bd1Zshp8KLePv2MB-lJ_Hagp7wAwdkA0NUTniU" +) + +var ( + testKey *rsa.PrivateKey + testKeyEC *ecdsa.PrivateKey +) + +func init() { + d, _ := pem.Decode([]byte(testKeyPEM)) + if d == nil { + panic("no block found in testKeyPEM") + } + var err error + testKey, err = x509.ParsePKCS1PrivateKey(d.Bytes) + if err != nil { + panic(err.Error()) + } + + if d, _ = pem.Decode([]byte(testKeyECPEM)); d == nil { + panic("no block found in testKeyECPEM") + } + testKeyEC, err = x509.ParseECPrivateKey(d.Bytes) + if err != nil { + panic(err.Error()) + } +} + +func TestJWSEncodeJSON(t *testing.T) { + claims := struct{ Msg string }{"Hello JWS"} + // JWS signed with testKey and "nonce" as the nonce value + // JSON-serialized JWS fields are split for easier testing + const ( + // {"alg":"RS256","jwk":{"e":"AQAB","kty":"RSA","n":"..."},"nonce":"nonce"} + protected = "eyJhbGciOiJSUzI1NiIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6" + + "IlJTQSIsIm4iOiI0eGdaM2VSUGt3b1J2eTdxZVJVYm1NRGUwVi14" + + "SDllV0xkdTBpaGVlTGxybUQybXFXWGZQOUllU0tBcGJuMzRnOFR1" + + "QVM5ZzV6aHE4RUxRM2ttanItS1Y4NkdBTWdJNlZBY0dscTNRcnpw" + + "VENmXzMwQWI3LXphd3JmUmFGT05hMUh3RXpQWTFLSG5HVmt4SmM4" + + "NWdOa3dZSTlTWTJSSFh0dmxuM3pzNXdJVE5yZG9zcUVYZWFJa1ZZ" + + "QkVoYmhOdTU0cHAza3hvNlR1V0xpOWU2cFhlV2V0RXdtbEJ3dFda" + + "bFBvaWIyajNUeExCa3NLWmZveUZ5ZWszODBtSGdKQXVtUV9JMmZq" + + "ajk4Xzk3bWszaWhPWTRBZ1ZkQ0RqMXpfR0NvWmtHNVJxN25iQ0d5" + + "b3N5S1d5RFgwMFpzLW5OcVZob0xlSXZYQzRubldkSk1aNnJvZ3h5" + + "UVEifSwibm9uY2UiOiJub25jZSJ9" + // {"Msg":"Hello JWS"} + payload = "eyJNc2ciOiJIZWxsbyBKV1MifQ" + signature = "eAGUikStX_UxyiFhxSLMyuyBcIB80GeBkFROCpap2sW3EmkU_ggF" + + "knaQzxrTfItICSAXsCLIquZ5BbrSWA_4vdEYrwWtdUj7NqFKjHRa" + + "zpLHcoR7r1rEHvkoP1xj49lS5fc3Wjjq8JUhffkhGbWZ8ZVkgPdC" + + "4tMBWiQDoth-x8jELP_3LYOB_ScUXi2mETBawLgOT2K8rA0Vbbmx" + + "hWNlOWuUf-8hL5YX4IOEwsS8JK_TrTq5Zc9My0zHJmaieqDV0UlP" + + "k0onFjPFkGm7MrPSgd0MqRG-4vSAg2O4hDo7rKv4n8POjjXlNQvM" + + "9IPLr8qZ7usYBKhEGwX3yq_eicAwBw" + ) + + b, err := jwsEncodeJSON(claims, testKey, "nonce") + if err != nil { + t.Fatal(err) + } + var jws struct{ Protected, Payload, Signature string } + if err := json.Unmarshal(b, &jws); err != nil { + t.Fatal(err) + } + if jws.Protected != protected { + t.Errorf("protected:\n%s\nwant:\n%s", jws.Protected, protected) + } + if jws.Payload != payload { + t.Errorf("payload:\n%s\nwant:\n%s", jws.Payload, payload) + } + if jws.Signature != signature { + t.Errorf("signature:\n%s\nwant:\n%s", jws.Signature, signature) + } +} + +func TestJWSEncodeJSONEC(t *testing.T) { + claims := struct{ Msg string }{"Hello JWS"} + + b, err := jwsEncodeJSON(claims, testKeyEC, "nonce") + if err != nil { + t.Fatal(err) + } + var jws struct{ Protected, Payload, Signature string } + if err := json.Unmarshal(b, &jws); err != nil { + t.Fatal(err) + } + + if b, err = base64.RawURLEncoding.DecodeString(jws.Protected); err != nil { + t.Fatalf("jws.Protected: %v", err) + } + var head struct { + Alg string + Nonce string + JWK struct { + Crv string + Kty string + X string + Y string + } `json:"jwk"` + } + if err := json.Unmarshal(b, &head); err != nil { + t.Fatalf("jws.Protected: %v", err) + } + if head.Alg != "ES256" { + t.Errorf("head.Alg = %q; want ES256", head.Alg) + } + if head.Nonce != "nonce" { + t.Errorf("head.Nonce = %q; want nonce", head.Nonce) + } + if head.JWK.Crv != "P-256" { + t.Errorf("head.JWK.Crv = %q; want P-256", head.JWK.Crv) + } + if head.JWK.Kty != "EC" { + t.Errorf("head.JWK.Kty = %q; want EC", head.JWK.Kty) + } + if head.JWK.X != testKeyECPubX { + t.Errorf("head.JWK.X = %q; want %q", head.JWK.X, testKeyECPubX) + } + if head.JWK.Y != testKeyECPubY { + t.Errorf("head.JWK.Y = %q; want %q", head.JWK.Y, testKeyECPubY) + } +} + +func TestJWKThumbprintRSA(t *testing.T) { + // Key example from RFC 7638 + const base64N = "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAt" + + "VT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn6" + + "4tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FD" + + "W2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n9" + + "1CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINH" + + "aQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw" + const base64E = "AQAB" + const expected = "NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs" + + b, err := base64.RawURLEncoding.DecodeString(base64N) + if err != nil { + t.Fatalf("Error parsing example key N: %v", err) + } + n := new(big.Int).SetBytes(b) + + b, err = base64.RawURLEncoding.DecodeString(base64E) + if err != nil { + t.Fatalf("Error parsing example key E: %v", err) + } + e := new(big.Int).SetBytes(b) + + pub := &rsa.PublicKey{N: n, E: int(e.Uint64())} + th, err := JWKThumbprint(pub) + if err != nil { + t.Error(err) + } + if th != expected { + t.Errorf("thumbprint = %q; want %q", th, expected) + } +} + +func TestJWKThumbprintEC(t *testing.T) { + // Key example from RFC 7520 + // expected was computed with + // echo -n '{"crv":"P-521","kty":"EC","x":"","y":""}' | \ + // openssl dgst -binary -sha256 | \ + // base64 | \ + // tr -d '=' | tr '/+' '_-' + const ( + base64X = "AHKZLLOsCOzz5cY97ewNUajB957y-C-U88c3v13nmGZx6sYl_oJXu9A5RkT" + + "KqjqvjyekWF-7ytDyRXYgCF5cj0Kt" + base64Y = "AdymlHvOiLxXkEhayXQnNCvDX4h9htZaCJN34kfmC6pV5OhQHiraVySsUda" + + "QkAgDPrwQrJmbnX9cwlGfP-HqHZR1" + expected = "dHri3SADZkrush5HU_50AoRhcKFryN-PI6jPBtPL55M" + ) + + b, err := base64.RawURLEncoding.DecodeString(base64X) + if err != nil { + t.Fatalf("Error parsing example key X: %v", err) + } + x := new(big.Int).SetBytes(b) + + b, err = base64.RawURLEncoding.DecodeString(base64Y) + if err != nil { + t.Fatalf("Error parsing example key Y: %v", err) + } + y := new(big.Int).SetBytes(b) + + pub := &ecdsa.PublicKey{Curve: elliptic.P521(), X: x, Y: y} + th, err := JWKThumbprint(pub) + if err != nil { + t.Error(err) + } + if th != expected { + t.Errorf("thumbprint = %q; want %q", th, expected) + } +} + +func TestJWKThumbprintErrUnsupportedKey(t *testing.T) { + _, err := JWKThumbprint(struct{}{}) + if err != ErrUnsupportedKey { + t.Errorf("err = %q; want %q", err, ErrUnsupportedKey) + } +} diff --git a/vendor/golang.org/x/crypto/acme/types.go b/vendor/golang.org/x/crypto/acme/types.go new file mode 100644 index 0000000..0513b2e --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/types.go @@ -0,0 +1,209 @@ +package acme + +import ( + "errors" + "fmt" + "net/http" +) + +// ACME server response statuses used to describe Authorization and Challenge states. +const ( + StatusUnknown = "unknown" + StatusPending = "pending" + StatusProcessing = "processing" + StatusValid = "valid" + StatusInvalid = "invalid" + StatusRevoked = "revoked" +) + +// CRLReasonCode identifies the reason for a certificate revocation. +type CRLReasonCode int + +// CRL reason codes as defined in RFC 5280. +const ( + CRLReasonUnspecified CRLReasonCode = 0 + CRLReasonKeyCompromise CRLReasonCode = 1 + CRLReasonCACompromise CRLReasonCode = 2 + CRLReasonAffiliationChanged CRLReasonCode = 3 + CRLReasonSuperseded CRLReasonCode = 4 + CRLReasonCessationOfOperation CRLReasonCode = 5 + CRLReasonCertificateHold CRLReasonCode = 6 + CRLReasonRemoveFromCRL CRLReasonCode = 8 + CRLReasonPrivilegeWithdrawn CRLReasonCode = 9 + CRLReasonAACompromise CRLReasonCode = 10 +) + +var ( + // ErrAuthorizationFailed indicates that an authorization for an identifier + // did not succeed. + ErrAuthorizationFailed = errors.New("acme: identifier authorization failed") + + // ErrUnsupportedKey is returned when an unsupported key type is encountered. + ErrUnsupportedKey = errors.New("acme: unknown key type; only RSA and ECDSA are supported") +) + +// Error is an ACME error, defined in Problem Details for HTTP APIs doc +// http://tools.ietf.org/html/draft-ietf-appsawg-http-problem. +type Error struct { + // StatusCode is The HTTP status code generated by the origin server. + StatusCode int + // ProblemType is a URI reference that identifies the problem type, + // typically in a "urn:acme:error:xxx" form. + ProblemType string + // Detail is a human-readable explanation specific to this occurrence of the problem. + Detail string + // Header is the original server error response headers. + Header http.Header +} + +func (e *Error) Error() string { + return fmt.Sprintf("%d %s: %s", e.StatusCode, e.ProblemType, e.Detail) +} + +// Account is a user account. It is associated with a private key. +type Account struct { + // URI is the account unique ID, which is also a URL used to retrieve + // account data from the CA. + URI string + + // Contact is a slice of contact info used during registration. + Contact []string + + // The terms user has agreed to. + // A value not matching CurrentTerms indicates that the user hasn't agreed + // to the actual Terms of Service of the CA. + AgreedTerms string + + // Actual terms of a CA. + CurrentTerms string + + // Authz is the authorization URL used to initiate a new authz flow. + Authz string + + // Authorizations is a URI from which a list of authorizations + // granted to this account can be fetched via a GET request. + Authorizations string + + // Certificates is a URI from which a list of certificates + // issued for this account can be fetched via a GET request. + Certificates string +} + +// Directory is ACME server discovery data. +type Directory struct { + // RegURL is an account endpoint URL, allowing for creating new + // and modifying existing accounts. + RegURL string + + // AuthzURL is used to initiate Identifier Authorization flow. + AuthzURL string + + // CertURL is a new certificate issuance endpoint URL. + CertURL string + + // RevokeURL is used to initiate a certificate revocation flow. + RevokeURL string + + // Term is a URI identifying the current terms of service. + Terms string + + // Website is an HTTP or HTTPS URL locating a website + // providing more information about the ACME server. + Website string + + // CAA consists of lowercase hostname elements, which the ACME server + // recognises as referring to itself for the purposes of CAA record validation + // as defined in RFC6844. + CAA []string +} + +// Challenge encodes a returned CA challenge. +type Challenge struct { + // Type is the challenge type, e.g. "http-01", "tls-sni-02", "dns-01". + Type string + + // URI is where a challenge response can be posted to. + URI string + + // Token is a random value that uniquely identifies the challenge. + Token string + + // Status identifies the status of this challenge. + Status string +} + +// Authorization encodes an authorization response. +type Authorization struct { + // URI uniquely identifies a authorization. + URI string + + // Status identifies the status of an authorization. + Status string + + // Identifier is what the account is authorized to represent. + Identifier AuthzID + + // Challenges that the client needs to fulfill in order to prove possession + // of the identifier (for pending authorizations). + // For final authorizations, the challenges that were used. + Challenges []*Challenge + + // A collection of sets of challenges, each of which would be sufficient + // to prove possession of the identifier. + // Clients must complete a set of challenges that covers at least one set. + // Challenges are identified by their indices in the challenges array. + // If this field is empty, the client needs to complete all challenges. + Combinations [][]int +} + +// AuthzID is an identifier that an account is authorized to represent. +type AuthzID struct { + Type string // The type of identifier, e.g. "dns". + Value string // The identifier itself, e.g. "example.org". +} + +// wireAuthz is ACME JSON representation of Authorization objects. +type wireAuthz struct { + Status string + Challenges []wireChallenge + Combinations [][]int + Identifier struct { + Type string + Value string + } +} + +func (z *wireAuthz) authorization(uri string) *Authorization { + a := &Authorization{ + URI: uri, + Status: z.Status, + Identifier: AuthzID{Type: z.Identifier.Type, Value: z.Identifier.Value}, + Combinations: z.Combinations, // shallow copy + Challenges: make([]*Challenge, len(z.Challenges)), + } + for i, v := range z.Challenges { + a.Challenges[i] = v.challenge() + } + return a +} + +// wireChallenge is ACME JSON challenge representation. +type wireChallenge struct { + URI string `json:"uri"` + Type string + Token string + Status string +} + +func (c *wireChallenge) challenge() *Challenge { + v := &Challenge{ + URI: c.URI, + Type: c.Type, + Token: c.Token, + Status: c.Status, + } + if v.Status == "" { + v.Status = StatusPending + } + return v +} diff --git a/vendor/golang.org/x/crypto/bcrypt/base64.go b/vendor/golang.org/x/crypto/bcrypt/base64.go new file mode 100644 index 0000000..fc31160 --- /dev/null +++ b/vendor/golang.org/x/crypto/bcrypt/base64.go @@ -0,0 +1,35 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bcrypt + +import "encoding/base64" + +const alphabet = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" + +var bcEncoding = base64.NewEncoding(alphabet) + +func base64Encode(src []byte) []byte { + n := bcEncoding.EncodedLen(len(src)) + dst := make([]byte, n) + bcEncoding.Encode(dst, src) + for dst[n-1] == '=' { + n-- + } + return dst[:n] +} + +func base64Decode(src []byte) ([]byte, error) { + numOfEquals := 4 - (len(src) % 4) + for i := 0; i < numOfEquals; i++ { + src = append(src, '=') + } + + dst := make([]byte, bcEncoding.DecodedLen(len(src))) + n, err := bcEncoding.Decode(dst, src) + if err != nil { + return nil, err + } + return dst[:n], nil +} diff --git a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go new file mode 100644 index 0000000..f8b807f --- /dev/null +++ b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go @@ -0,0 +1,294 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package bcrypt implements Provos and Mazières's bcrypt adaptive hashing +// algorithm. See http://www.usenix.org/event/usenix99/provos/provos.pdf +package bcrypt // import "golang.org/x/crypto/bcrypt" + +// The code is a port of Provos and Mazières's C implementation. +import ( + "crypto/rand" + "crypto/subtle" + "errors" + "fmt" + "golang.org/x/crypto/blowfish" + "io" + "strconv" +) + +const ( + MinCost int = 4 // the minimum allowable cost as passed in to GenerateFromPassword + MaxCost int = 31 // the maximum allowable cost as passed in to GenerateFromPassword + DefaultCost int = 10 // the cost that will actually be set if a cost below MinCost is passed into GenerateFromPassword +) + +// The error returned from CompareHashAndPassword when a password and hash do +// not match. +var ErrMismatchedHashAndPassword = errors.New("crypto/bcrypt: hashedPassword is not the hash of the given password") + +// The error returned from CompareHashAndPassword when a hash is too short to +// be a bcrypt hash. +var ErrHashTooShort = errors.New("crypto/bcrypt: hashedSecret too short to be a bcrypted password") + +// The error returned from CompareHashAndPassword when a hash was created with +// a bcrypt algorithm newer than this implementation. +type HashVersionTooNewError byte + +func (hv HashVersionTooNewError) Error() string { + return fmt.Sprintf("crypto/bcrypt: bcrypt algorithm version '%c' requested is newer than current version '%c'", byte(hv), majorVersion) +} + +// The error returned from CompareHashAndPassword when a hash starts with something other than '$' +type InvalidHashPrefixError byte + +func (ih InvalidHashPrefixError) Error() string { + return fmt.Sprintf("crypto/bcrypt: bcrypt hashes must start with '$', but hashedSecret started with '%c'", byte(ih)) +} + +type InvalidCostError int + +func (ic InvalidCostError) Error() string { + return fmt.Sprintf("crypto/bcrypt: cost %d is outside allowed range (%d,%d)", int(ic), int(MinCost), int(MaxCost)) +} + +const ( + majorVersion = '2' + minorVersion = 'a' + maxSaltSize = 16 + maxCryptedHashSize = 23 + encodedSaltSize = 22 + encodedHashSize = 31 + minHashSize = 59 +) + +// magicCipherData is an IV for the 64 Blowfish encryption calls in +// bcrypt(). It's the string "OrpheanBeholderScryDoubt" in big-endian bytes. +var magicCipherData = []byte{ + 0x4f, 0x72, 0x70, 0x68, + 0x65, 0x61, 0x6e, 0x42, + 0x65, 0x68, 0x6f, 0x6c, + 0x64, 0x65, 0x72, 0x53, + 0x63, 0x72, 0x79, 0x44, + 0x6f, 0x75, 0x62, 0x74, +} + +type hashed struct { + hash []byte + salt []byte + cost int // allowed range is MinCost to MaxCost + major byte + minor byte +} + +// GenerateFromPassword returns the bcrypt hash of the password at the given +// cost. If the cost given is less than MinCost, the cost will be set to +// DefaultCost, instead. Use CompareHashAndPassword, as defined in this package, +// to compare the returned hashed password with its cleartext version. +func GenerateFromPassword(password []byte, cost int) ([]byte, error) { + p, err := newFromPassword(password, cost) + if err != nil { + return nil, err + } + return p.Hash(), nil +} + +// CompareHashAndPassword compares a bcrypt hashed password with its possible +// plaintext equivalent. Returns nil on success, or an error on failure. +func CompareHashAndPassword(hashedPassword, password []byte) error { + p, err := newFromHash(hashedPassword) + if err != nil { + return err + } + + otherHash, err := bcrypt(password, p.cost, p.salt) + if err != nil { + return err + } + + otherP := &hashed{otherHash, p.salt, p.cost, p.major, p.minor} + if subtle.ConstantTimeCompare(p.Hash(), otherP.Hash()) == 1 { + return nil + } + + return ErrMismatchedHashAndPassword +} + +// Cost returns the hashing cost used to create the given hashed +// password. When, in the future, the hashing cost of a password system needs +// to be increased in order to adjust for greater computational power, this +// function allows one to establish which passwords need to be updated. +func Cost(hashedPassword []byte) (int, error) { + p, err := newFromHash(hashedPassword) + if err != nil { + return 0, err + } + return p.cost, nil +} + +func newFromPassword(password []byte, cost int) (*hashed, error) { + if cost < MinCost { + cost = DefaultCost + } + p := new(hashed) + p.major = majorVersion + p.minor = minorVersion + + err := checkCost(cost) + if err != nil { + return nil, err + } + p.cost = cost + + unencodedSalt := make([]byte, maxSaltSize) + _, err = io.ReadFull(rand.Reader, unencodedSalt) + if err != nil { + return nil, err + } + + p.salt = base64Encode(unencodedSalt) + hash, err := bcrypt(password, p.cost, p.salt) + if err != nil { + return nil, err + } + p.hash = hash + return p, err +} + +func newFromHash(hashedSecret []byte) (*hashed, error) { + if len(hashedSecret) < minHashSize { + return nil, ErrHashTooShort + } + p := new(hashed) + n, err := p.decodeVersion(hashedSecret) + if err != nil { + return nil, err + } + hashedSecret = hashedSecret[n:] + n, err = p.decodeCost(hashedSecret) + if err != nil { + return nil, err + } + hashedSecret = hashedSecret[n:] + + // The "+2" is here because we'll have to append at most 2 '=' to the salt + // when base64 decoding it in expensiveBlowfishSetup(). + p.salt = make([]byte, encodedSaltSize, encodedSaltSize+2) + copy(p.salt, hashedSecret[:encodedSaltSize]) + + hashedSecret = hashedSecret[encodedSaltSize:] + p.hash = make([]byte, len(hashedSecret)) + copy(p.hash, hashedSecret) + + return p, nil +} + +func bcrypt(password []byte, cost int, salt []byte) ([]byte, error) { + cipherData := make([]byte, len(magicCipherData)) + copy(cipherData, magicCipherData) + + c, err := expensiveBlowfishSetup(password, uint32(cost), salt) + if err != nil { + return nil, err + } + + for i := 0; i < 24; i += 8 { + for j := 0; j < 64; j++ { + c.Encrypt(cipherData[i:i+8], cipherData[i:i+8]) + } + } + + // Bug compatibility with C bcrypt implementations. We only encode 23 of + // the 24 bytes encrypted. + hsh := base64Encode(cipherData[:maxCryptedHashSize]) + return hsh, nil +} + +func expensiveBlowfishSetup(key []byte, cost uint32, salt []byte) (*blowfish.Cipher, error) { + + csalt, err := base64Decode(salt) + if err != nil { + return nil, err + } + + // Bug compatibility with C bcrypt implementations. They use the trailing + // NULL in the key string during expansion. + ckey := append(key, 0) + + c, err := blowfish.NewSaltedCipher(ckey, csalt) + if err != nil { + return nil, err + } + + var i, rounds uint64 + rounds = 1 << cost + for i = 0; i < rounds; i++ { + blowfish.ExpandKey(ckey, c) + blowfish.ExpandKey(csalt, c) + } + + return c, nil +} + +func (p *hashed) Hash() []byte { + arr := make([]byte, 60) + arr[0] = '$' + arr[1] = p.major + n := 2 + if p.minor != 0 { + arr[2] = p.minor + n = 3 + } + arr[n] = '$' + n += 1 + copy(arr[n:], []byte(fmt.Sprintf("%02d", p.cost))) + n += 2 + arr[n] = '$' + n += 1 + copy(arr[n:], p.salt) + n += encodedSaltSize + copy(arr[n:], p.hash) + n += encodedHashSize + return arr[:n] +} + +func (p *hashed) decodeVersion(sbytes []byte) (int, error) { + if sbytes[0] != '$' { + return -1, InvalidHashPrefixError(sbytes[0]) + } + if sbytes[1] > majorVersion { + return -1, HashVersionTooNewError(sbytes[1]) + } + p.major = sbytes[1] + n := 3 + if sbytes[2] != '$' { + p.minor = sbytes[2] + n++ + } + return n, nil +} + +// sbytes should begin where decodeVersion left off. +func (p *hashed) decodeCost(sbytes []byte) (int, error) { + cost, err := strconv.Atoi(string(sbytes[0:2])) + if err != nil { + return -1, err + } + err = checkCost(cost) + if err != nil { + return -1, err + } + p.cost = cost + return 3, nil +} + +func (p *hashed) String() string { + return fmt.Sprintf("&{hash: %#v, salt: %#v, cost: %d, major: %c, minor: %c}", string(p.hash), p.salt, p.cost, p.major, p.minor) +} + +func checkCost(cost int) error { + if cost < MinCost || cost > MaxCost { + return InvalidCostError(cost) + } + return nil +} diff --git a/vendor/golang.org/x/crypto/bcrypt/bcrypt_test.go b/vendor/golang.org/x/crypto/bcrypt/bcrypt_test.go new file mode 100644 index 0000000..f08a6f5 --- /dev/null +++ b/vendor/golang.org/x/crypto/bcrypt/bcrypt_test.go @@ -0,0 +1,226 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bcrypt + +import ( + "bytes" + "fmt" + "testing" +) + +func TestBcryptingIsEasy(t *testing.T) { + pass := []byte("mypassword") + hp, err := GenerateFromPassword(pass, 0) + if err != nil { + t.Fatalf("GenerateFromPassword error: %s", err) + } + + if CompareHashAndPassword(hp, pass) != nil { + t.Errorf("%v should hash %s correctly", hp, pass) + } + + notPass := "notthepass" + err = CompareHashAndPassword(hp, []byte(notPass)) + if err != ErrMismatchedHashAndPassword { + t.Errorf("%v and %s should be mismatched", hp, notPass) + } +} + +func TestBcryptingIsCorrect(t *testing.T) { + pass := []byte("allmine") + salt := []byte("XajjQvNhvvRt5GSeFk1xFe") + expectedHash := []byte("$2a$10$XajjQvNhvvRt5GSeFk1xFeyqRrsxkhBkUiQeg0dt.wU1qD4aFDcga") + + hash, err := bcrypt(pass, 10, salt) + if err != nil { + t.Fatalf("bcrypt blew up: %v", err) + } + if !bytes.HasSuffix(expectedHash, hash) { + t.Errorf("%v should be the suffix of %v", hash, expectedHash) + } + + h, err := newFromHash(expectedHash) + if err != nil { + t.Errorf("Unable to parse %s: %v", string(expectedHash), err) + } + + // This is not the safe way to compare these hashes. We do this only for + // testing clarity. Use bcrypt.CompareHashAndPassword() + if err == nil && !bytes.Equal(expectedHash, h.Hash()) { + t.Errorf("Parsed hash %v should equal %v", h.Hash(), expectedHash) + } +} + +func TestVeryShortPasswords(t *testing.T) { + key := []byte("k") + salt := []byte("XajjQvNhvvRt5GSeFk1xFe") + _, err := bcrypt(key, 10, salt) + if err != nil { + t.Errorf("One byte key resulted in error: %s", err) + } +} + +func TestTooLongPasswordsWork(t *testing.T) { + salt := []byte("XajjQvNhvvRt5GSeFk1xFe") + // One byte over the usual 56 byte limit that blowfish has + tooLongPass := []byte("012345678901234567890123456789012345678901234567890123456") + tooLongExpected := []byte("$2a$10$XajjQvNhvvRt5GSeFk1xFe5l47dONXg781AmZtd869sO8zfsHuw7C") + hash, err := bcrypt(tooLongPass, 10, salt) + if err != nil { + t.Fatalf("bcrypt blew up on long password: %v", err) + } + if !bytes.HasSuffix(tooLongExpected, hash) { + t.Errorf("%v should be the suffix of %v", hash, tooLongExpected) + } +} + +type InvalidHashTest struct { + err error + hash []byte +} + +var invalidTests = []InvalidHashTest{ + {ErrHashTooShort, []byte("$2a$10$fooo")}, + {ErrHashTooShort, []byte("$2a")}, + {HashVersionTooNewError('3'), []byte("$3a$10$sssssssssssssssssssssshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh")}, + {InvalidHashPrefixError('%'), []byte("%2a$10$sssssssssssssssssssssshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh")}, + {InvalidCostError(32), []byte("$2a$32$sssssssssssssssssssssshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh")}, +} + +func TestInvalidHashErrors(t *testing.T) { + check := func(name string, expected, err error) { + if err == nil { + t.Errorf("%s: Should have returned an error", name) + } + if err != nil && err != expected { + t.Errorf("%s gave err %v but should have given %v", name, err, expected) + } + } + for _, iht := range invalidTests { + _, err := newFromHash(iht.hash) + check("newFromHash", iht.err, err) + err = CompareHashAndPassword(iht.hash, []byte("anything")) + check("CompareHashAndPassword", iht.err, err) + } +} + +func TestUnpaddedBase64Encoding(t *testing.T) { + original := []byte{101, 201, 101, 75, 19, 227, 199, 20, 239, 236, 133, 32, 30, 109, 243, 30} + encodedOriginal := []byte("XajjQvNhvvRt5GSeFk1xFe") + + encoded := base64Encode(original) + + if !bytes.Equal(encodedOriginal, encoded) { + t.Errorf("Encoded %v should have equaled %v", encoded, encodedOriginal) + } + + decoded, err := base64Decode(encodedOriginal) + if err != nil { + t.Fatalf("base64Decode blew up: %s", err) + } + + if !bytes.Equal(decoded, original) { + t.Errorf("Decoded %v should have equaled %v", decoded, original) + } +} + +func TestCost(t *testing.T) { + suffix := "XajjQvNhvvRt5GSeFk1xFe5l47dONXg781AmZtd869sO8zfsHuw7C" + for _, vers := range []string{"2a", "2"} { + for _, cost := range []int{4, 10} { + s := fmt.Sprintf("$%s$%02d$%s", vers, cost, suffix) + h := []byte(s) + actual, err := Cost(h) + if err != nil { + t.Errorf("Cost, error: %s", err) + continue + } + if actual != cost { + t.Errorf("Cost, expected: %d, actual: %d", cost, actual) + } + } + } + _, err := Cost([]byte("$a$a$" + suffix)) + if err == nil { + t.Errorf("Cost, malformed but no error returned") + } +} + +func TestCostValidationInHash(t *testing.T) { + if testing.Short() { + return + } + + pass := []byte("mypassword") + + for c := 0; c < MinCost; c++ { + p, _ := newFromPassword(pass, c) + if p.cost != DefaultCost { + t.Errorf("newFromPassword should default costs below %d to %d, but was %d", MinCost, DefaultCost, p.cost) + } + } + + p, _ := newFromPassword(pass, 14) + if p.cost != 14 { + t.Errorf("newFromPassword should default cost to 14, but was %d", p.cost) + } + + hp, _ := newFromHash(p.Hash()) + if p.cost != hp.cost { + t.Errorf("newFromHash should maintain the cost at %d, but was %d", p.cost, hp.cost) + } + + _, err := newFromPassword(pass, 32) + if err == nil { + t.Fatalf("newFromPassword: should return a cost error") + } + if err != InvalidCostError(32) { + t.Errorf("newFromPassword: should return cost error, got %#v", err) + } +} + +func TestCostReturnsWithLeadingZeroes(t *testing.T) { + hp, _ := newFromPassword([]byte("abcdefgh"), 7) + cost := hp.Hash()[4:7] + expected := []byte("07$") + + if !bytes.Equal(expected, cost) { + t.Errorf("single digit costs in hash should have leading zeros: was %v instead of %v", cost, expected) + } +} + +func TestMinorNotRequired(t *testing.T) { + noMinorHash := []byte("$2$10$XajjQvNhvvRt5GSeFk1xFeyqRrsxkhBkUiQeg0dt.wU1qD4aFDcga") + h, err := newFromHash(noMinorHash) + if err != nil { + t.Fatalf("No minor hash blew up: %s", err) + } + if h.minor != 0 { + t.Errorf("Should leave minor version at 0, but was %d", h.minor) + } + + if !bytes.Equal(noMinorHash, h.Hash()) { + t.Errorf("Should generate hash %v, but created %v", noMinorHash, h.Hash()) + } +} + +func BenchmarkEqual(b *testing.B) { + b.StopTimer() + passwd := []byte("somepasswordyoulike") + hash, _ := GenerateFromPassword(passwd, 10) + b.StartTimer() + for i := 0; i < b.N; i++ { + CompareHashAndPassword(hash, passwd) + } +} + +func BenchmarkGeneration(b *testing.B) { + b.StopTimer() + passwd := []byte("mylongpassword1234") + b.StartTimer() + for i := 0; i < b.N; i++ { + GenerateFromPassword(passwd, 10) + } +} diff --git a/vendor/golang.org/x/crypto/blowfish/block.go b/vendor/golang.org/x/crypto/blowfish/block.go new file mode 100644 index 0000000..9d80f19 --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/block.go @@ -0,0 +1,159 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blowfish + +// getNextWord returns the next big-endian uint32 value from the byte slice +// at the given position in a circular manner, updating the position. +func getNextWord(b []byte, pos *int) uint32 { + var w uint32 + j := *pos + for i := 0; i < 4; i++ { + w = w<<8 | uint32(b[j]) + j++ + if j >= len(b) { + j = 0 + } + } + *pos = j + return w +} + +// ExpandKey performs a key expansion on the given *Cipher. Specifically, it +// performs the Blowfish algorithm's key schedule which sets up the *Cipher's +// pi and substitution tables for calls to Encrypt. This is used, primarily, +// by the bcrypt package to reuse the Blowfish key schedule during its +// set up. It's unlikely that you need to use this directly. +func ExpandKey(key []byte, c *Cipher) { + j := 0 + for i := 0; i < 18; i++ { + // Using inlined getNextWord for performance. + var d uint32 + for k := 0; k < 4; k++ { + d = d<<8 | uint32(key[j]) + j++ + if j >= len(key) { + j = 0 + } + } + c.p[i] ^= d + } + + var l, r uint32 + for i := 0; i < 18; i += 2 { + l, r = encryptBlock(l, r, c) + c.p[i], c.p[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s0[i], c.s0[i+1] = l, r + } + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s1[i], c.s1[i+1] = l, r + } + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s2[i], c.s2[i+1] = l, r + } + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s3[i], c.s3[i+1] = l, r + } +} + +// This is similar to ExpandKey, but folds the salt during the key +// schedule. While ExpandKey is essentially expandKeyWithSalt with an all-zero +// salt passed in, reusing ExpandKey turns out to be a place of inefficiency +// and specializing it here is useful. +func expandKeyWithSalt(key []byte, salt []byte, c *Cipher) { + j := 0 + for i := 0; i < 18; i++ { + c.p[i] ^= getNextWord(key, &j) + } + + j = 0 + var l, r uint32 + for i := 0; i < 18; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.p[i], c.p[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s0[i], c.s0[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s1[i], c.s1[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s2[i], c.s2[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s3[i], c.s3[i+1] = l, r + } +} + +func encryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { + xl, xr := l, r + xl ^= c.p[0] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[1] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[2] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[3] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[4] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[5] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[6] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[7] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[8] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[9] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[10] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[11] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[12] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[13] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[14] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[15] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[16] + xr ^= c.p[17] + return xr, xl +} + +func decryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { + xl, xr := l, r + xl ^= c.p[17] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[16] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[15] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[14] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[13] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[12] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[11] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[10] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[9] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[8] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[7] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[6] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[5] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[4] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[3] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[2] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[1] + xr ^= c.p[0] + return xr, xl +} diff --git a/vendor/golang.org/x/crypto/blowfish/blowfish_test.go b/vendor/golang.org/x/crypto/blowfish/blowfish_test.go new file mode 100644 index 0000000..7afa1fd --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/blowfish_test.go @@ -0,0 +1,274 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blowfish + +import "testing" + +type CryptTest struct { + key []byte + in []byte + out []byte +} + +// Test vector values are from http://www.schneier.com/code/vectors.txt. +var encryptTests = []CryptTest{ + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78}}, + { + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0x51, 0x86, 0x6F, 0xD5, 0xB8, 0x5E, 0xCB, 0x8A}}, + { + []byte{0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, + []byte{0x7D, 0x85, 0x6F, 0x9A, 0x61, 0x30, 0x63, 0xF2}}, + { + []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, + []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, + []byte{0x24, 0x66, 0xDD, 0x87, 0x8B, 0x96, 0x3C, 0x9D}}, + + { + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, + []byte{0x61, 0xF9, 0xC3, 0x80, 0x22, 0x81, 0xB0, 0x96}}, + { + []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0x7D, 0x0C, 0xC6, 0x30, 0xAF, 0xDA, 0x1E, 0xC7}}, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78}}, + { + []byte{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0x0A, 0xCE, 0xAB, 0x0F, 0xC6, 0xA0, 0xA2, 0x8D}}, + { + []byte{0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57}, + []byte{0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42}, + []byte{0x59, 0xC6, 0x82, 0x45, 0xEB, 0x05, 0x28, 0x2B}}, + { + []byte{0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E}, + []byte{0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA}, + []byte{0xB1, 0xB8, 0xCC, 0x0B, 0x25, 0x0F, 0x09, 0xA0}}, + { + []byte{0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86}, + []byte{0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72}, + []byte{0x17, 0x30, 0xE5, 0x77, 0x8B, 0xEA, 0x1D, 0xA4}}, + { + []byte{0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E}, + []byte{0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A}, + []byte{0xA2, 0x5E, 0x78, 0x56, 0xCF, 0x26, 0x51, 0xEB}}, + { + []byte{0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6}, + []byte{0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2}, + []byte{0x35, 0x38, 0x82, 0xB1, 0x09, 0xCE, 0x8F, 0x1A}}, + { + []byte{0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE}, + []byte{0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A}, + []byte{0x48, 0xF4, 0xD0, 0x88, 0x4C, 0x37, 0x99, 0x18}}, + { + []byte{0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6}, + []byte{0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2}, + []byte{0x43, 0x21, 0x93, 0xB7, 0x89, 0x51, 0xFC, 0x98}}, + { + []byte{0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE}, + []byte{0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A}, + []byte{0x13, 0xF0, 0x41, 0x54, 0xD6, 0x9D, 0x1A, 0xE5}}, + { + []byte{0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16}, + []byte{0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02}, + []byte{0x2E, 0xED, 0xDA, 0x93, 0xFF, 0xD3, 0x9C, 0x79}}, + { + []byte{0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F}, + []byte{0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A}, + []byte{0xD8, 0x87, 0xE0, 0x39, 0x3C, 0x2D, 0xA6, 0xE3}}, + { + []byte{0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46}, + []byte{0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32}, + []byte{0x5F, 0x99, 0xD0, 0x4F, 0x5B, 0x16, 0x39, 0x69}}, + { + []byte{0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E}, + []byte{0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA}, + []byte{0x4A, 0x05, 0x7A, 0x3B, 0x24, 0xD3, 0x97, 0x7B}}, + { + []byte{0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76}, + []byte{0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62}, + []byte{0x45, 0x20, 0x31, 0xC1, 0xE4, 0xFA, 0xDA, 0x8E}}, + { + []byte{0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07}, + []byte{0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2}, + []byte{0x75, 0x55, 0xAE, 0x39, 0xF5, 0x9B, 0x87, 0xBD}}, + { + []byte{0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F}, + []byte{0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA}, + []byte{0x53, 0xC5, 0x5F, 0x9C, 0xB4, 0x9F, 0xC0, 0x19}}, + { + []byte{0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7}, + []byte{0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92}, + []byte{0x7A, 0x8E, 0x7B, 0xFA, 0x93, 0x7E, 0x89, 0xA3}}, + { + []byte{0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, + []byte{0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A}, + []byte{0xCF, 0x9C, 0x5D, 0x7A, 0x49, 0x86, 0xAD, 0xB5}}, + { + []byte{0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6}, + []byte{0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2}, + []byte{0xD1, 0xAB, 0xB2, 0x90, 0x65, 0x8B, 0xC7, 0x78}}, + { + []byte{0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF}, + []byte{0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A}, + []byte{0x55, 0xCB, 0x37, 0x74, 0xD1, 0x3E, 0xF2, 0x01}}, + { + []byte{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0xFA, 0x34, 0xEC, 0x48, 0x47, 0xB2, 0x68, 0xB2}}, + { + []byte{0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0xA7, 0x90, 0x79, 0x51, 0x08, 0xEA, 0x3C, 0xAE}}, + { + []byte{0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0xC3, 0x9E, 0x07, 0x2D, 0x9F, 0xAC, 0x63, 0x1D}}, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0x01, 0x49, 0x33, 0xE0, 0xCD, 0xAF, 0xF6, 0xE4}}, + { + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xF2, 0x1E, 0x9A, 0x77, 0xB7, 0x1C, 0x49, 0xBC}}, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x24, 0x59, 0x46, 0x88, 0x57, 0x54, 0x36, 0x9A}}, + { + []byte{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0x6B, 0x5C, 0x5A, 0x9C, 0x5D, 0x9E, 0x0A, 0x5A}}, +} + +func TestCipherEncrypt(t *testing.T) { + for i, tt := range encryptTests { + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(tt.key), err) + continue + } + ct := make([]byte, len(tt.out)) + c.Encrypt(ct, tt.in) + for j, v := range ct { + if v != tt.out[j] { + t.Errorf("Cipher.Encrypt, test vector #%d: cipher-text[%d] = %#x, expected %#x", i, j, v, tt.out[j]) + break + } + } + } +} + +func TestCipherDecrypt(t *testing.T) { + for i, tt := range encryptTests { + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(tt.key), err) + continue + } + pt := make([]byte, len(tt.in)) + c.Decrypt(pt, tt.out) + for j, v := range pt { + if v != tt.in[j] { + t.Errorf("Cipher.Decrypt, test vector #%d: plain-text[%d] = %#x, expected %#x", i, j, v, tt.in[j]) + break + } + } + } +} + +func TestSaltedCipherKeyLength(t *testing.T) { + if _, err := NewSaltedCipher(nil, []byte{'a'}); err != KeySizeError(0) { + t.Errorf("NewSaltedCipher with short key, gave error %#v, expected %#v", err, KeySizeError(0)) + } + + // A 57-byte key. One over the typical blowfish restriction. + key := []byte("012345678901234567890123456789012345678901234567890123456") + if _, err := NewSaltedCipher(key, []byte{'a'}); err != nil { + t.Errorf("NewSaltedCipher with long key, gave error %#v", err) + } +} + +// Test vectors generated with Blowfish from OpenSSH. +var saltedVectors = [][8]byte{ + {0x0c, 0x82, 0x3b, 0x7b, 0x8d, 0x01, 0x4b, 0x7e}, + {0xd1, 0xe1, 0x93, 0xf0, 0x70, 0xa6, 0xdb, 0x12}, + {0xfc, 0x5e, 0xba, 0xde, 0xcb, 0xf8, 0x59, 0xad}, + {0x8a, 0x0c, 0x76, 0xe7, 0xdd, 0x2c, 0xd3, 0xa8}, + {0x2c, 0xcb, 0x7b, 0xee, 0xac, 0x7b, 0x7f, 0xf8}, + {0xbb, 0xf6, 0x30, 0x6f, 0xe1, 0x5d, 0x62, 0xbf}, + {0x97, 0x1e, 0xc1, 0x3d, 0x3d, 0xe0, 0x11, 0xe9}, + {0x06, 0xd7, 0x4d, 0xb1, 0x80, 0xa3, 0xb1, 0x38}, + {0x67, 0xa1, 0xa9, 0x75, 0x0e, 0x5b, 0xc6, 0xb4}, + {0x51, 0x0f, 0x33, 0x0e, 0x4f, 0x67, 0xd2, 0x0c}, + {0xf1, 0x73, 0x7e, 0xd8, 0x44, 0xea, 0xdb, 0xe5}, + {0x14, 0x0e, 0x16, 0xce, 0x7f, 0x4a, 0x9c, 0x7b}, + {0x4b, 0xfe, 0x43, 0xfd, 0xbf, 0x36, 0x04, 0x47}, + {0xb1, 0xeb, 0x3e, 0x15, 0x36, 0xa7, 0xbb, 0xe2}, + {0x6d, 0x0b, 0x41, 0xdd, 0x00, 0x98, 0x0b, 0x19}, + {0xd3, 0xce, 0x45, 0xce, 0x1d, 0x56, 0xb7, 0xfc}, + {0xd9, 0xf0, 0xfd, 0xda, 0xc0, 0x23, 0xb7, 0x93}, + {0x4c, 0x6f, 0xa1, 0xe4, 0x0c, 0xa8, 0xca, 0x57}, + {0xe6, 0x2f, 0x28, 0xa7, 0x0c, 0x94, 0x0d, 0x08}, + {0x8f, 0xe3, 0xf0, 0xb6, 0x29, 0xe3, 0x44, 0x03}, + {0xff, 0x98, 0xdd, 0x04, 0x45, 0xb4, 0x6d, 0x1f}, + {0x9e, 0x45, 0x4d, 0x18, 0x40, 0x53, 0xdb, 0xef}, + {0xb7, 0x3b, 0xef, 0x29, 0xbe, 0xa8, 0x13, 0x71}, + {0x02, 0x54, 0x55, 0x41, 0x8e, 0x04, 0xfc, 0xad}, + {0x6a, 0x0a, 0xee, 0x7c, 0x10, 0xd9, 0x19, 0xfe}, + {0x0a, 0x22, 0xd9, 0x41, 0xcc, 0x23, 0x87, 0x13}, + {0x6e, 0xff, 0x1f, 0xff, 0x36, 0x17, 0x9c, 0xbe}, + {0x79, 0xad, 0xb7, 0x40, 0xf4, 0x9f, 0x51, 0xa6}, + {0x97, 0x81, 0x99, 0xa4, 0xde, 0x9e, 0x9f, 0xb6}, + {0x12, 0x19, 0x7a, 0x28, 0xd0, 0xdc, 0xcc, 0x92}, + {0x81, 0xda, 0x60, 0x1e, 0x0e, 0xdd, 0x65, 0x56}, + {0x7d, 0x76, 0x20, 0xb2, 0x73, 0xc9, 0x9e, 0xee}, +} + +func TestSaltedCipher(t *testing.T) { + var key, salt [32]byte + for i := range key { + key[i] = byte(i) + salt[i] = byte(i + 32) + } + for i, v := range saltedVectors { + c, err := NewSaltedCipher(key[:], salt[:i]) + if err != nil { + t.Fatal(err) + } + var buf [8]byte + c.Encrypt(buf[:], buf[:]) + if v != buf { + t.Errorf("%d: expected %x, got %x", i, v, buf) + } + } +} + +func BenchmarkExpandKeyWithSalt(b *testing.B) { + key := make([]byte, 32) + salt := make([]byte, 16) + c, _ := NewCipher(key) + for i := 0; i < b.N; i++ { + expandKeyWithSalt(key, salt, c) + } +} + +func BenchmarkExpandKey(b *testing.B) { + key := make([]byte, 32) + c, _ := NewCipher(key) + for i := 0; i < b.N; i++ { + ExpandKey(key, c) + } +} diff --git a/vendor/golang.org/x/crypto/blowfish/cipher.go b/vendor/golang.org/x/crypto/blowfish/cipher.go new file mode 100644 index 0000000..a73954f --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/cipher.go @@ -0,0 +1,91 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package blowfish implements Bruce Schneier's Blowfish encryption algorithm. +package blowfish // import "golang.org/x/crypto/blowfish" + +// The code is a port of Bruce Schneier's C implementation. +// See http://www.schneier.com/blowfish.html. + +import "strconv" + +// The Blowfish block size in bytes. +const BlockSize = 8 + +// A Cipher is an instance of Blowfish encryption using a particular key. +type Cipher struct { + p [18]uint32 + s0, s1, s2, s3 [256]uint32 +} + +type KeySizeError int + +func (k KeySizeError) Error() string { + return "crypto/blowfish: invalid key size " + strconv.Itoa(int(k)) +} + +// NewCipher creates and returns a Cipher. +// The key argument should be the Blowfish key, from 1 to 56 bytes. +func NewCipher(key []byte) (*Cipher, error) { + var result Cipher + if k := len(key); k < 1 || k > 56 { + return nil, KeySizeError(k) + } + initCipher(&result) + ExpandKey(key, &result) + return &result, nil +} + +// NewSaltedCipher creates a returns a Cipher that folds a salt into its key +// schedule. For most purposes, NewCipher, instead of NewSaltedCipher, is +// sufficient and desirable. For bcrypt compatibility, the key can be over 56 +// bytes. +func NewSaltedCipher(key, salt []byte) (*Cipher, error) { + if len(salt) == 0 { + return NewCipher(key) + } + var result Cipher + if k := len(key); k < 1 { + return nil, KeySizeError(k) + } + initCipher(&result) + expandKeyWithSalt(key, salt, &result) + return &result, nil +} + +// BlockSize returns the Blowfish block size, 8 bytes. +// It is necessary to satisfy the Block interface in the +// package "crypto/cipher". +func (c *Cipher) BlockSize() int { return BlockSize } + +// Encrypt encrypts the 8-byte buffer src using the key k +// and stores the result in dst. +// Note that for amounts of data larger than a block, +// it is not safe to just call Encrypt on successive blocks; +// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). +func (c *Cipher) Encrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + l, r = encryptBlock(l, r, c) + dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l) + dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r) +} + +// Decrypt decrypts the 8-byte buffer src using the key k +// and stores the result in dst. +func (c *Cipher) Decrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + l, r = decryptBlock(l, r, c) + dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l) + dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r) +} + +func initCipher(c *Cipher) { + copy(c.p[0:], p[0:]) + copy(c.s0[0:], s0[0:]) + copy(c.s1[0:], s1[0:]) + copy(c.s2[0:], s2[0:]) + copy(c.s3[0:], s3[0:]) +} diff --git a/vendor/golang.org/x/crypto/blowfish/const.go b/vendor/golang.org/x/crypto/blowfish/const.go new file mode 100644 index 0000000..8c5ee4c --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/const.go @@ -0,0 +1,199 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The startup permutation array and substitution boxes. +// They are the hexadecimal digits of PI; see: +// http://www.schneier.com/code/constants.txt. + +package blowfish + +var s0 = [256]uint32{ + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, + 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, + 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, + 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, + 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, + 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, + 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, + 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1, + 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, + 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, + 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176, + 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, + 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, + 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, + 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, + 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, + 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, + 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, + 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, + 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, + 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0, + 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, + 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, + 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705, + 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, + 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, + 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, + 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, + 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, +} + +var s1 = [256]uint32{ + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, + 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, + 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, + 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, + 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, + 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, + 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, + 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, + 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, + 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, + 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, + 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, + 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, + 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, + 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, + 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, + 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, + 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, + 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, + 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, + 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, + 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, +} + +var s2 = [256]uint32{ + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, + 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, + 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, + 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, + 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, + 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, + 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, + 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, + 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, + 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, + 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, + 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, + 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, + 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, + 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, + 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, + 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, + 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, + 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, + 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, + 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, + 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, + 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, + 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, + 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, + 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, + 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, + 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, + 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, +} + +var s3 = [256]uint32{ + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, + 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79, + 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, + 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, + 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1, + 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, + 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, + 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, + 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, + 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5, + 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, + 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, + 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd, + 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, + 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, + 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, + 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, + 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, + 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, + 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, + 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, + 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, + 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623, + 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, + 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, + 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, + 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, + 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6, +} + +var p = [18]uint32{ + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, + 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b, +} diff --git a/vendor/golang.org/x/crypto/bn256/bn256.go b/vendor/golang.org/x/crypto/bn256/bn256.go new file mode 100644 index 0000000..014f8b3 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/bn256.go @@ -0,0 +1,404 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package bn256 implements a particular bilinear group at the 128-bit security level. +// +// Bilinear groups are the basis of many of the new cryptographic protocols +// that have been proposed over the past decade. They consist of a triplet of +// groups (Gâ‚, Gâ‚‚ and GT) such that there exists a function e(gâ‚Ë£,g₂ʸ)=gTˣʸ +// (where gâ‚“ is a generator of the respective group). That function is called +// a pairing function. +// +// This package specifically implements the Optimal Ate pairing over a 256-bit +// Barreto-Naehrig curve as described in +// http://cryptojedi.org/papers/dclxvi-20100714.pdf. Its output is compatible +// with the implementation described in that paper. +package bn256 // import "golang.org/x/crypto/bn256" + +import ( + "crypto/rand" + "io" + "math/big" +) + +// BUG(agl): this implementation is not constant time. +// TODO(agl): keep GF(p²) elements in Mongomery form. + +// G1 is an abstract cyclic group. The zero value is suitable for use as the +// output of an operation, but cannot be used as an input. +type G1 struct { + p *curvePoint +} + +// RandomG1 returns x and gâ‚Ë£ where x is a random, non-zero number read from r. +func RandomG1(r io.Reader) (*big.Int, *G1, error) { + var k *big.Int + var err error + + for { + k, err = rand.Int(r, Order) + if err != nil { + return nil, nil, err + } + if k.Sign() > 0 { + break + } + } + + return k, new(G1).ScalarBaseMult(k), nil +} + +func (g *G1) String() string { + return "bn256.G1" + g.p.String() +} + +// ScalarBaseMult sets e to g*k where g is the generator of the group and +// then returns e. +func (e *G1) ScalarBaseMult(k *big.Int) *G1 { + if e.p == nil { + e.p = newCurvePoint(nil) + } + e.p.Mul(curveGen, k, new(bnPool)) + return e +} + +// ScalarMult sets e to a*k and then returns e. +func (e *G1) ScalarMult(a *G1, k *big.Int) *G1 { + if e.p == nil { + e.p = newCurvePoint(nil) + } + e.p.Mul(a.p, k, new(bnPool)) + return e +} + +// Add sets e to a+b and then returns e. +// BUG(agl): this function is not complete: a==b fails. +func (e *G1) Add(a, b *G1) *G1 { + if e.p == nil { + e.p = newCurvePoint(nil) + } + e.p.Add(a.p, b.p, new(bnPool)) + return e +} + +// Neg sets e to -a and then returns e. +func (e *G1) Neg(a *G1) *G1 { + if e.p == nil { + e.p = newCurvePoint(nil) + } + e.p.Negative(a.p) + return e +} + +// Marshal converts n to a byte slice. +func (n *G1) Marshal() []byte { + n.p.MakeAffine(nil) + + xBytes := new(big.Int).Mod(n.p.x, p).Bytes() + yBytes := new(big.Int).Mod(n.p.y, p).Bytes() + + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + ret := make([]byte, numBytes*2) + copy(ret[1*numBytes-len(xBytes):], xBytes) + copy(ret[2*numBytes-len(yBytes):], yBytes) + + return ret +} + +// Unmarshal sets e to the result of converting the output of Marshal back into +// a group element and then returns e. +func (e *G1) Unmarshal(m []byte) (*G1, bool) { + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + if len(m) != 2*numBytes { + return nil, false + } + + if e.p == nil { + e.p = newCurvePoint(nil) + } + + e.p.x.SetBytes(m[0*numBytes : 1*numBytes]) + e.p.y.SetBytes(m[1*numBytes : 2*numBytes]) + + if e.p.x.Sign() == 0 && e.p.y.Sign() == 0 { + // This is the point at infinity. + e.p.y.SetInt64(1) + e.p.z.SetInt64(0) + e.p.t.SetInt64(0) + } else { + e.p.z.SetInt64(1) + e.p.t.SetInt64(1) + + if !e.p.IsOnCurve() { + return nil, false + } + } + + return e, true +} + +// G2 is an abstract cyclic group. The zero value is suitable for use as the +// output of an operation, but cannot be used as an input. +type G2 struct { + p *twistPoint +} + +// RandomG1 returns x and gâ‚‚Ë£ where x is a random, non-zero number read from r. +func RandomG2(r io.Reader) (*big.Int, *G2, error) { + var k *big.Int + var err error + + for { + k, err = rand.Int(r, Order) + if err != nil { + return nil, nil, err + } + if k.Sign() > 0 { + break + } + } + + return k, new(G2).ScalarBaseMult(k), nil +} + +func (g *G2) String() string { + return "bn256.G2" + g.p.String() +} + +// ScalarBaseMult sets e to g*k where g is the generator of the group and +// then returns out. +func (e *G2) ScalarBaseMult(k *big.Int) *G2 { + if e.p == nil { + e.p = newTwistPoint(nil) + } + e.p.Mul(twistGen, k, new(bnPool)) + return e +} + +// ScalarMult sets e to a*k and then returns e. +func (e *G2) ScalarMult(a *G2, k *big.Int) *G2 { + if e.p == nil { + e.p = newTwistPoint(nil) + } + e.p.Mul(a.p, k, new(bnPool)) + return e +} + +// Add sets e to a+b and then returns e. +// BUG(agl): this function is not complete: a==b fails. +func (e *G2) Add(a, b *G2) *G2 { + if e.p == nil { + e.p = newTwistPoint(nil) + } + e.p.Add(a.p, b.p, new(bnPool)) + return e +} + +// Marshal converts n into a byte slice. +func (n *G2) Marshal() []byte { + n.p.MakeAffine(nil) + + xxBytes := new(big.Int).Mod(n.p.x.x, p).Bytes() + xyBytes := new(big.Int).Mod(n.p.x.y, p).Bytes() + yxBytes := new(big.Int).Mod(n.p.y.x, p).Bytes() + yyBytes := new(big.Int).Mod(n.p.y.y, p).Bytes() + + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + ret := make([]byte, numBytes*4) + copy(ret[1*numBytes-len(xxBytes):], xxBytes) + copy(ret[2*numBytes-len(xyBytes):], xyBytes) + copy(ret[3*numBytes-len(yxBytes):], yxBytes) + copy(ret[4*numBytes-len(yyBytes):], yyBytes) + + return ret +} + +// Unmarshal sets e to the result of converting the output of Marshal back into +// a group element and then returns e. +func (e *G2) Unmarshal(m []byte) (*G2, bool) { + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + if len(m) != 4*numBytes { + return nil, false + } + + if e.p == nil { + e.p = newTwistPoint(nil) + } + + e.p.x.x.SetBytes(m[0*numBytes : 1*numBytes]) + e.p.x.y.SetBytes(m[1*numBytes : 2*numBytes]) + e.p.y.x.SetBytes(m[2*numBytes : 3*numBytes]) + e.p.y.y.SetBytes(m[3*numBytes : 4*numBytes]) + + if e.p.x.x.Sign() == 0 && + e.p.x.y.Sign() == 0 && + e.p.y.x.Sign() == 0 && + e.p.y.y.Sign() == 0 { + // This is the point at infinity. + e.p.y.SetOne() + e.p.z.SetZero() + e.p.t.SetZero() + } else { + e.p.z.SetOne() + e.p.t.SetOne() + + if !e.p.IsOnCurve() { + return nil, false + } + } + + return e, true +} + +// GT is an abstract cyclic group. The zero value is suitable for use as the +// output of an operation, but cannot be used as an input. +type GT struct { + p *gfP12 +} + +func (g *GT) String() string { + return "bn256.GT" + g.p.String() +} + +// ScalarMult sets e to a*k and then returns e. +func (e *GT) ScalarMult(a *GT, k *big.Int) *GT { + if e.p == nil { + e.p = newGFp12(nil) + } + e.p.Exp(a.p, k, new(bnPool)) + return e +} + +// Add sets e to a+b and then returns e. +func (e *GT) Add(a, b *GT) *GT { + if e.p == nil { + e.p = newGFp12(nil) + } + e.p.Mul(a.p, b.p, new(bnPool)) + return e +} + +// Neg sets e to -a and then returns e. +func (e *GT) Neg(a *GT) *GT { + if e.p == nil { + e.p = newGFp12(nil) + } + e.p.Invert(a.p, new(bnPool)) + return e +} + +// Marshal converts n into a byte slice. +func (n *GT) Marshal() []byte { + n.p.Minimal() + + xxxBytes := n.p.x.x.x.Bytes() + xxyBytes := n.p.x.x.y.Bytes() + xyxBytes := n.p.x.y.x.Bytes() + xyyBytes := n.p.x.y.y.Bytes() + xzxBytes := n.p.x.z.x.Bytes() + xzyBytes := n.p.x.z.y.Bytes() + yxxBytes := n.p.y.x.x.Bytes() + yxyBytes := n.p.y.x.y.Bytes() + yyxBytes := n.p.y.y.x.Bytes() + yyyBytes := n.p.y.y.y.Bytes() + yzxBytes := n.p.y.z.x.Bytes() + yzyBytes := n.p.y.z.y.Bytes() + + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + ret := make([]byte, numBytes*12) + copy(ret[1*numBytes-len(xxxBytes):], xxxBytes) + copy(ret[2*numBytes-len(xxyBytes):], xxyBytes) + copy(ret[3*numBytes-len(xyxBytes):], xyxBytes) + copy(ret[4*numBytes-len(xyyBytes):], xyyBytes) + copy(ret[5*numBytes-len(xzxBytes):], xzxBytes) + copy(ret[6*numBytes-len(xzyBytes):], xzyBytes) + copy(ret[7*numBytes-len(yxxBytes):], yxxBytes) + copy(ret[8*numBytes-len(yxyBytes):], yxyBytes) + copy(ret[9*numBytes-len(yyxBytes):], yyxBytes) + copy(ret[10*numBytes-len(yyyBytes):], yyyBytes) + copy(ret[11*numBytes-len(yzxBytes):], yzxBytes) + copy(ret[12*numBytes-len(yzyBytes):], yzyBytes) + + return ret +} + +// Unmarshal sets e to the result of converting the output of Marshal back into +// a group element and then returns e. +func (e *GT) Unmarshal(m []byte) (*GT, bool) { + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + if len(m) != 12*numBytes { + return nil, false + } + + if e.p == nil { + e.p = newGFp12(nil) + } + + e.p.x.x.x.SetBytes(m[0*numBytes : 1*numBytes]) + e.p.x.x.y.SetBytes(m[1*numBytes : 2*numBytes]) + e.p.x.y.x.SetBytes(m[2*numBytes : 3*numBytes]) + e.p.x.y.y.SetBytes(m[3*numBytes : 4*numBytes]) + e.p.x.z.x.SetBytes(m[4*numBytes : 5*numBytes]) + e.p.x.z.y.SetBytes(m[5*numBytes : 6*numBytes]) + e.p.y.x.x.SetBytes(m[6*numBytes : 7*numBytes]) + e.p.y.x.y.SetBytes(m[7*numBytes : 8*numBytes]) + e.p.y.y.x.SetBytes(m[8*numBytes : 9*numBytes]) + e.p.y.y.y.SetBytes(m[9*numBytes : 10*numBytes]) + e.p.y.z.x.SetBytes(m[10*numBytes : 11*numBytes]) + e.p.y.z.y.SetBytes(m[11*numBytes : 12*numBytes]) + + return e, true +} + +// Pair calculates an Optimal Ate pairing. +func Pair(g1 *G1, g2 *G2) *GT { + return >{optimalAte(g2.p, g1.p, new(bnPool))} +} + +// bnPool implements a tiny cache of *big.Int objects that's used to reduce the +// number of allocations made during processing. +type bnPool struct { + bns []*big.Int + count int +} + +func (pool *bnPool) Get() *big.Int { + if pool == nil { + return new(big.Int) + } + + pool.count++ + l := len(pool.bns) + if l == 0 { + return new(big.Int) + } + + bn := pool.bns[l-1] + pool.bns = pool.bns[:l-1] + return bn +} + +func (pool *bnPool) Put(bn *big.Int) { + if pool == nil { + return + } + pool.bns = append(pool.bns, bn) + pool.count-- +} + +func (pool *bnPool) Count() int { + return pool.count +} diff --git a/vendor/golang.org/x/crypto/bn256/bn256_test.go b/vendor/golang.org/x/crypto/bn256/bn256_test.go new file mode 100644 index 0000000..1cec388 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/bn256_test.go @@ -0,0 +1,304 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "bytes" + "crypto/rand" + "math/big" + "testing" +) + +func TestGFp2Invert(t *testing.T) { + pool := new(bnPool) + + a := newGFp2(pool) + a.x.SetString("23423492374", 10) + a.y.SetString("12934872398472394827398470", 10) + + inv := newGFp2(pool) + inv.Invert(a, pool) + + b := newGFp2(pool).Mul(inv, a, pool) + if b.x.Int64() != 0 || b.y.Int64() != 1 { + t.Fatalf("bad result for a^-1*a: %s %s", b.x, b.y) + } + + a.Put(pool) + b.Put(pool) + inv.Put(pool) + + if c := pool.Count(); c > 0 { + t.Errorf("Pool count non-zero: %d\n", c) + } +} + +func isZero(n *big.Int) bool { + return new(big.Int).Mod(n, p).Int64() == 0 +} + +func isOne(n *big.Int) bool { + return new(big.Int).Mod(n, p).Int64() == 1 +} + +func TestGFp6Invert(t *testing.T) { + pool := new(bnPool) + + a := newGFp6(pool) + a.x.x.SetString("239487238491", 10) + a.x.y.SetString("2356249827341", 10) + a.y.x.SetString("082659782", 10) + a.y.y.SetString("182703523765", 10) + a.z.x.SetString("978236549263", 10) + a.z.y.SetString("64893242", 10) + + inv := newGFp6(pool) + inv.Invert(a, pool) + + b := newGFp6(pool).Mul(inv, a, pool) + if !isZero(b.x.x) || + !isZero(b.x.y) || + !isZero(b.y.x) || + !isZero(b.y.y) || + !isZero(b.z.x) || + !isOne(b.z.y) { + t.Fatalf("bad result for a^-1*a: %s", b) + } + + a.Put(pool) + b.Put(pool) + inv.Put(pool) + + if c := pool.Count(); c > 0 { + t.Errorf("Pool count non-zero: %d\n", c) + } +} + +func TestGFp12Invert(t *testing.T) { + pool := new(bnPool) + + a := newGFp12(pool) + a.x.x.x.SetString("239846234862342323958623", 10) + a.x.x.y.SetString("2359862352529835623", 10) + a.x.y.x.SetString("928836523", 10) + a.x.y.y.SetString("9856234", 10) + a.x.z.x.SetString("235635286", 10) + a.x.z.y.SetString("5628392833", 10) + a.y.x.x.SetString("252936598265329856238956532167968", 10) + a.y.x.y.SetString("23596239865236954178968", 10) + a.y.y.x.SetString("95421692834", 10) + a.y.y.y.SetString("236548", 10) + a.y.z.x.SetString("924523", 10) + a.y.z.y.SetString("12954623", 10) + + inv := newGFp12(pool) + inv.Invert(a, pool) + + b := newGFp12(pool).Mul(inv, a, pool) + if !isZero(b.x.x.x) || + !isZero(b.x.x.y) || + !isZero(b.x.y.x) || + !isZero(b.x.y.y) || + !isZero(b.x.z.x) || + !isZero(b.x.z.y) || + !isZero(b.y.x.x) || + !isZero(b.y.x.y) || + !isZero(b.y.y.x) || + !isZero(b.y.y.y) || + !isZero(b.y.z.x) || + !isOne(b.y.z.y) { + t.Fatalf("bad result for a^-1*a: %s", b) + } + + a.Put(pool) + b.Put(pool) + inv.Put(pool) + + if c := pool.Count(); c > 0 { + t.Errorf("Pool count non-zero: %d\n", c) + } +} + +func TestCurveImpl(t *testing.T) { + pool := new(bnPool) + + g := &curvePoint{ + pool.Get().SetInt64(1), + pool.Get().SetInt64(-2), + pool.Get().SetInt64(1), + pool.Get().SetInt64(0), + } + + x := pool.Get().SetInt64(32498273234) + X := newCurvePoint(pool).Mul(g, x, pool) + + y := pool.Get().SetInt64(98732423523) + Y := newCurvePoint(pool).Mul(g, y, pool) + + s1 := newCurvePoint(pool).Mul(X, y, pool).MakeAffine(pool) + s2 := newCurvePoint(pool).Mul(Y, x, pool).MakeAffine(pool) + + if s1.x.Cmp(s2.x) != 0 || + s2.x.Cmp(s1.x) != 0 { + t.Errorf("DH points don't match: (%s, %s) (%s, %s)", s1.x, s1.y, s2.x, s2.y) + } + + pool.Put(x) + X.Put(pool) + pool.Put(y) + Y.Put(pool) + s1.Put(pool) + s2.Put(pool) + g.Put(pool) + + if c := pool.Count(); c > 0 { + t.Errorf("Pool count non-zero: %d\n", c) + } +} + +func TestOrderG1(t *testing.T) { + g := new(G1).ScalarBaseMult(Order) + if !g.p.IsInfinity() { + t.Error("G1 has incorrect order") + } + + one := new(G1).ScalarBaseMult(new(big.Int).SetInt64(1)) + g.Add(g, one) + g.p.MakeAffine(nil) + if g.p.x.Cmp(one.p.x) != 0 || g.p.y.Cmp(one.p.y) != 0 { + t.Errorf("1+0 != 1 in G1") + } +} + +func TestOrderG2(t *testing.T) { + g := new(G2).ScalarBaseMult(Order) + if !g.p.IsInfinity() { + t.Error("G2 has incorrect order") + } + + one := new(G2).ScalarBaseMult(new(big.Int).SetInt64(1)) + g.Add(g, one) + g.p.MakeAffine(nil) + if g.p.x.x.Cmp(one.p.x.x) != 0 || + g.p.x.y.Cmp(one.p.x.y) != 0 || + g.p.y.x.Cmp(one.p.y.x) != 0 || + g.p.y.y.Cmp(one.p.y.y) != 0 { + t.Errorf("1+0 != 1 in G2") + } +} + +func TestOrderGT(t *testing.T) { + gt := Pair(&G1{curveGen}, &G2{twistGen}) + g := new(GT).ScalarMult(gt, Order) + if !g.p.IsOne() { + t.Error("GT has incorrect order") + } +} + +func TestBilinearity(t *testing.T) { + for i := 0; i < 2; i++ { + a, p1, _ := RandomG1(rand.Reader) + b, p2, _ := RandomG2(rand.Reader) + e1 := Pair(p1, p2) + + e2 := Pair(&G1{curveGen}, &G2{twistGen}) + e2.ScalarMult(e2, a) + e2.ScalarMult(e2, b) + + minusE2 := new(GT).Neg(e2) + e1.Add(e1, minusE2) + + if !e1.p.IsOne() { + t.Fatalf("bad pairing result: %s", e1) + } + } +} + +func TestG1Marshal(t *testing.T) { + g := new(G1).ScalarBaseMult(new(big.Int).SetInt64(1)) + form := g.Marshal() + _, ok := new(G1).Unmarshal(form) + if !ok { + t.Fatalf("failed to unmarshal") + } + + g.ScalarBaseMult(Order) + form = g.Marshal() + g2, ok := new(G1).Unmarshal(form) + if !ok { + t.Fatalf("failed to unmarshal ∞") + } + if !g2.p.IsInfinity() { + t.Fatalf("∞ unmarshaled incorrectly") + } +} + +func TestG2Marshal(t *testing.T) { + g := new(G2).ScalarBaseMult(new(big.Int).SetInt64(1)) + form := g.Marshal() + _, ok := new(G2).Unmarshal(form) + if !ok { + t.Fatalf("failed to unmarshal") + } + + g.ScalarBaseMult(Order) + form = g.Marshal() + g2, ok := new(G2).Unmarshal(form) + if !ok { + t.Fatalf("failed to unmarshal ∞") + } + if !g2.p.IsInfinity() { + t.Fatalf("∞ unmarshaled incorrectly") + } +} + +func TestG1Identity(t *testing.T) { + g := new(G1).ScalarBaseMult(new(big.Int).SetInt64(0)) + if !g.p.IsInfinity() { + t.Error("failure") + } +} + +func TestG2Identity(t *testing.T) { + g := new(G2).ScalarBaseMult(new(big.Int).SetInt64(0)) + if !g.p.IsInfinity() { + t.Error("failure") + } +} + +func TestTripartiteDiffieHellman(t *testing.T) { + a, _ := rand.Int(rand.Reader, Order) + b, _ := rand.Int(rand.Reader, Order) + c, _ := rand.Int(rand.Reader, Order) + + pa, _ := new(G1).Unmarshal(new(G1).ScalarBaseMult(a).Marshal()) + qa, _ := new(G2).Unmarshal(new(G2).ScalarBaseMult(a).Marshal()) + pb, _ := new(G1).Unmarshal(new(G1).ScalarBaseMult(b).Marshal()) + qb, _ := new(G2).Unmarshal(new(G2).ScalarBaseMult(b).Marshal()) + pc, _ := new(G1).Unmarshal(new(G1).ScalarBaseMult(c).Marshal()) + qc, _ := new(G2).Unmarshal(new(G2).ScalarBaseMult(c).Marshal()) + + k1 := Pair(pb, qc) + k1.ScalarMult(k1, a) + k1Bytes := k1.Marshal() + + k2 := Pair(pc, qa) + k2.ScalarMult(k2, b) + k2Bytes := k2.Marshal() + + k3 := Pair(pa, qb) + k3.ScalarMult(k3, c) + k3Bytes := k3.Marshal() + + if !bytes.Equal(k1Bytes, k2Bytes) || !bytes.Equal(k2Bytes, k3Bytes) { + t.Errorf("keys didn't agree") + } +} + +func BenchmarkPairing(b *testing.B) { + for i := 0; i < b.N; i++ { + Pair(&G1{curveGen}, &G2{twistGen}) + } +} diff --git a/vendor/golang.org/x/crypto/bn256/constants.go b/vendor/golang.org/x/crypto/bn256/constants.go new file mode 100644 index 0000000..08ccfdf --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/constants.go @@ -0,0 +1,44 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "math/big" +) + +func bigFromBase10(s string) *big.Int { + n, _ := new(big.Int).SetString(s, 10) + return n +} + +// u is the BN parameter that determines the prime: 1868033³. +var u = bigFromBase10("6518589491078791937") + +// p is a prime over which we form a basic field: 36uâ´+36u³+24u³+6u+1. +var p = bigFromBase10("65000549695646603732796438742359905742825358107623003571877145026864184071783") + +// Order is the number of elements in both Gâ‚ and Gâ‚‚: 36uâ´+36u³+18u³+6u+1. +var Order = bigFromBase10("65000549695646603732796438742359905742570406053903786389881062969044166799969") + +// xiToPMinus1Over6 is ξ^((p-1)/6) where ξ = i+3. +var xiToPMinus1Over6 = &gfP2{bigFromBase10("8669379979083712429711189836753509758585994370025260553045152614783263110636"), bigFromBase10("19998038925833620163537568958541907098007303196759855091367510456613536016040")} + +// xiToPMinus1Over3 is ξ^((p-1)/3) where ξ = i+3. +var xiToPMinus1Over3 = &gfP2{bigFromBase10("26098034838977895781559542626833399156321265654106457577426020397262786167059"), bigFromBase10("15931493369629630809226283458085260090334794394361662678240713231519278691715")} + +// xiToPMinus1Over2 is ξ^((p-1)/2) where ξ = i+3. +var xiToPMinus1Over2 = &gfP2{bigFromBase10("50997318142241922852281555961173165965672272825141804376761836765206060036244"), bigFromBase10("38665955945962842195025998234511023902832543644254935982879660597356748036009")} + +// xiToPSquaredMinus1Over3 is ξ^((p²-1)/3) where ξ = i+3. +var xiToPSquaredMinus1Over3 = bigFromBase10("65000549695646603727810655408050771481677621702948236658134783353303381437752") + +// xiTo2PSquaredMinus2Over3 is ξ^((2p²-2)/3) where ξ = i+3 (a cubic root of unity, mod p). +var xiTo2PSquaredMinus2Over3 = bigFromBase10("4985783334309134261147736404674766913742361673560802634030") + +// xiToPSquaredMinus1Over6 is ξ^((1p²-1)/6) where ξ = i+3 (a cubic root of -1, mod p). +var xiToPSquaredMinus1Over6 = bigFromBase10("65000549695646603727810655408050771481677621702948236658134783353303381437753") + +// xiTo2PMinus2Over3 is ξ^((2p-2)/3) where ξ = i+3. +var xiTo2PMinus2Over3 = &gfP2{bigFromBase10("19885131339612776214803633203834694332692106372356013117629940868870585019582"), bigFromBase10("21645619881471562101905880913352894726728173167203616652430647841922248593627")} diff --git a/vendor/golang.org/x/crypto/bn256/curve.go b/vendor/golang.org/x/crypto/bn256/curve.go new file mode 100644 index 0000000..55b7063 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/curve.go @@ -0,0 +1,278 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "math/big" +) + +// curvePoint implements the elliptic curve y²=x³+3. Points are kept in +// Jacobian form and t=z² when valid. Gâ‚ is the set of points of this curve on +// GF(p). +type curvePoint struct { + x, y, z, t *big.Int +} + +var curveB = new(big.Int).SetInt64(3) + +// curveGen is the generator of Gâ‚. +var curveGen = &curvePoint{ + new(big.Int).SetInt64(1), + new(big.Int).SetInt64(-2), + new(big.Int).SetInt64(1), + new(big.Int).SetInt64(1), +} + +func newCurvePoint(pool *bnPool) *curvePoint { + return &curvePoint{ + pool.Get(), + pool.Get(), + pool.Get(), + pool.Get(), + } +} + +func (c *curvePoint) String() string { + c.MakeAffine(new(bnPool)) + return "(" + c.x.String() + ", " + c.y.String() + ")" +} + +func (c *curvePoint) Put(pool *bnPool) { + pool.Put(c.x) + pool.Put(c.y) + pool.Put(c.z) + pool.Put(c.t) +} + +func (c *curvePoint) Set(a *curvePoint) { + c.x.Set(a.x) + c.y.Set(a.y) + c.z.Set(a.z) + c.t.Set(a.t) +} + +// IsOnCurve returns true iff c is on the curve where c must be in affine form. +func (c *curvePoint) IsOnCurve() bool { + yy := new(big.Int).Mul(c.y, c.y) + xxx := new(big.Int).Mul(c.x, c.x) + xxx.Mul(xxx, c.x) + yy.Sub(yy, xxx) + yy.Sub(yy, curveB) + if yy.Sign() < 0 || yy.Cmp(p) >= 0 { + yy.Mod(yy, p) + } + return yy.Sign() == 0 +} + +func (c *curvePoint) SetInfinity() { + c.z.SetInt64(0) +} + +func (c *curvePoint) IsInfinity() bool { + return c.z.Sign() == 0 +} + +func (c *curvePoint) Add(a, b *curvePoint, pool *bnPool) { + if a.IsInfinity() { + c.Set(b) + return + } + if b.IsInfinity() { + c.Set(a) + return + } + + // See http://hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian-0/addition/add-2007-bl.op3 + + // Normalize the points by replacing a = [x1:y1:z1] and b = [x2:y2:z2] + // by [u1:s1:z1·z2] and [u2:s2:z1·z2] + // where u1 = x1·z2², s1 = y1·z2³ and u1 = x2·z1², s2 = y2·z1³ + z1z1 := pool.Get().Mul(a.z, a.z) + z1z1.Mod(z1z1, p) + z2z2 := pool.Get().Mul(b.z, b.z) + z2z2.Mod(z2z2, p) + u1 := pool.Get().Mul(a.x, z2z2) + u1.Mod(u1, p) + u2 := pool.Get().Mul(b.x, z1z1) + u2.Mod(u2, p) + + t := pool.Get().Mul(b.z, z2z2) + t.Mod(t, p) + s1 := pool.Get().Mul(a.y, t) + s1.Mod(s1, p) + + t.Mul(a.z, z1z1) + t.Mod(t, p) + s2 := pool.Get().Mul(b.y, t) + s2.Mod(s2, p) + + // Compute x = (2h)²(s²-u1-u2) + // where s = (s2-s1)/(u2-u1) is the slope of the line through + // (u1,s1) and (u2,s2). The extra factor 2h = 2(u2-u1) comes from the value of z below. + // This is also: + // 4(s2-s1)² - 4h²(u1+u2) = 4(s2-s1)² - 4h³ - 4h²(2u1) + // = r² - j - 2v + // with the notations below. + h := pool.Get().Sub(u2, u1) + xEqual := h.Sign() == 0 + + t.Add(h, h) + // i = 4h² + i := pool.Get().Mul(t, t) + i.Mod(i, p) + // j = 4h³ + j := pool.Get().Mul(h, i) + j.Mod(j, p) + + t.Sub(s2, s1) + yEqual := t.Sign() == 0 + if xEqual && yEqual { + c.Double(a, pool) + return + } + r := pool.Get().Add(t, t) + + v := pool.Get().Mul(u1, i) + v.Mod(v, p) + + // t4 = 4(s2-s1)² + t4 := pool.Get().Mul(r, r) + t4.Mod(t4, p) + t.Add(v, v) + t6 := pool.Get().Sub(t4, j) + c.x.Sub(t6, t) + + // Set y = -(2h)³(s1 + s*(x/4h²-u1)) + // This is also + // y = - 2·s1·j - (s2-s1)(2x - 2i·u1) = r(v-x) - 2·s1·j + t.Sub(v, c.x) // t7 + t4.Mul(s1, j) // t8 + t4.Mod(t4, p) + t6.Add(t4, t4) // t9 + t4.Mul(r, t) // t10 + t4.Mod(t4, p) + c.y.Sub(t4, t6) + + // Set z = 2(u2-u1)·z1·z2 = 2h·z1·z2 + t.Add(a.z, b.z) // t11 + t4.Mul(t, t) // t12 + t4.Mod(t4, p) + t.Sub(t4, z1z1) // t13 + t4.Sub(t, z2z2) // t14 + c.z.Mul(t4, h) + c.z.Mod(c.z, p) + + pool.Put(z1z1) + pool.Put(z2z2) + pool.Put(u1) + pool.Put(u2) + pool.Put(t) + pool.Put(s1) + pool.Put(s2) + pool.Put(h) + pool.Put(i) + pool.Put(j) + pool.Put(r) + pool.Put(v) + pool.Put(t4) + pool.Put(t6) +} + +func (c *curvePoint) Double(a *curvePoint, pool *bnPool) { + // See http://hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian-0/doubling/dbl-2009-l.op3 + A := pool.Get().Mul(a.x, a.x) + A.Mod(A, p) + B := pool.Get().Mul(a.y, a.y) + B.Mod(B, p) + C := pool.Get().Mul(B, B) + C.Mod(C, p) + + t := pool.Get().Add(a.x, B) + t2 := pool.Get().Mul(t, t) + t2.Mod(t2, p) + t.Sub(t2, A) + t2.Sub(t, C) + d := pool.Get().Add(t2, t2) + t.Add(A, A) + e := pool.Get().Add(t, A) + f := pool.Get().Mul(e, e) + f.Mod(f, p) + + t.Add(d, d) + c.x.Sub(f, t) + + t.Add(C, C) + t2.Add(t, t) + t.Add(t2, t2) + c.y.Sub(d, c.x) + t2.Mul(e, c.y) + t2.Mod(t2, p) + c.y.Sub(t2, t) + + t.Mul(a.y, a.z) + t.Mod(t, p) + c.z.Add(t, t) + + pool.Put(A) + pool.Put(B) + pool.Put(C) + pool.Put(t) + pool.Put(t2) + pool.Put(d) + pool.Put(e) + pool.Put(f) +} + +func (c *curvePoint) Mul(a *curvePoint, scalar *big.Int, pool *bnPool) *curvePoint { + sum := newCurvePoint(pool) + sum.SetInfinity() + t := newCurvePoint(pool) + + for i := scalar.BitLen(); i >= 0; i-- { + t.Double(sum, pool) + if scalar.Bit(i) != 0 { + sum.Add(t, a, pool) + } else { + sum.Set(t) + } + } + + c.Set(sum) + sum.Put(pool) + t.Put(pool) + return c +} + +func (c *curvePoint) MakeAffine(pool *bnPool) *curvePoint { + if words := c.z.Bits(); len(words) == 1 && words[0] == 1 { + return c + } + + zInv := pool.Get().ModInverse(c.z, p) + t := pool.Get().Mul(c.y, zInv) + t.Mod(t, p) + zInv2 := pool.Get().Mul(zInv, zInv) + zInv2.Mod(zInv2, p) + c.y.Mul(t, zInv2) + c.y.Mod(c.y, p) + t.Mul(c.x, zInv2) + t.Mod(t, p) + c.x.Set(t) + c.z.SetInt64(1) + c.t.SetInt64(1) + + pool.Put(zInv) + pool.Put(t) + pool.Put(zInv2) + + return c +} + +func (c *curvePoint) Negative(a *curvePoint) { + c.x.Set(a.x) + c.y.Neg(a.y) + c.z.Set(a.z) + c.t.SetInt64(0) +} diff --git a/vendor/golang.org/x/crypto/bn256/example_test.go b/vendor/golang.org/x/crypto/bn256/example_test.go new file mode 100644 index 0000000..b2d1980 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/example_test.go @@ -0,0 +1,43 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "crypto/rand" +) + +func ExamplePair() { + // This implements the tripartite Diffie-Hellman algorithm from "A One + // Round Protocol for Tripartite Diffie-Hellman", A. Joux. + // http://www.springerlink.com/content/cddc57yyva0hburb/fulltext.pdf + + // Each of three parties, a, b and c, generate a private value. + a, _ := rand.Int(rand.Reader, Order) + b, _ := rand.Int(rand.Reader, Order) + c, _ := rand.Int(rand.Reader, Order) + + // Then each party calculates gâ‚ and gâ‚‚ times their private value. + pa := new(G1).ScalarBaseMult(a) + qa := new(G2).ScalarBaseMult(a) + + pb := new(G1).ScalarBaseMult(b) + qb := new(G2).ScalarBaseMult(b) + + pc := new(G1).ScalarBaseMult(c) + qc := new(G2).ScalarBaseMult(c) + + // Now each party exchanges its public values with the other two and + // all parties can calculate the shared key. + k1 := Pair(pb, qc) + k1.ScalarMult(k1, a) + + k2 := Pair(pc, qa) + k2.ScalarMult(k2, b) + + k3 := Pair(pa, qb) + k3.ScalarMult(k3, c) + + // k1, k2 and k3 will all be equal. +} diff --git a/vendor/golang.org/x/crypto/bn256/gfp12.go b/vendor/golang.org/x/crypto/bn256/gfp12.go new file mode 100644 index 0000000..f084edd --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/gfp12.go @@ -0,0 +1,200 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +// For details of the algorithms used, see "Multiplication and Squaring on +// Pairing-Friendly Fields, Devegili et al. +// http://eprint.iacr.org/2006/471.pdf. + +import ( + "math/big" +) + +// gfP12 implements the field of size p¹² as a quadratic extension of gfP6 +// where ω²=Ï„. +type gfP12 struct { + x, y *gfP6 // value is xω + y +} + +func newGFp12(pool *bnPool) *gfP12 { + return &gfP12{newGFp6(pool), newGFp6(pool)} +} + +func (e *gfP12) String() string { + return "(" + e.x.String() + "," + e.y.String() + ")" +} + +func (e *gfP12) Put(pool *bnPool) { + e.x.Put(pool) + e.y.Put(pool) +} + +func (e *gfP12) Set(a *gfP12) *gfP12 { + e.x.Set(a.x) + e.y.Set(a.y) + return e +} + +func (e *gfP12) SetZero() *gfP12 { + e.x.SetZero() + e.y.SetZero() + return e +} + +func (e *gfP12) SetOne() *gfP12 { + e.x.SetZero() + e.y.SetOne() + return e +} + +func (e *gfP12) Minimal() { + e.x.Minimal() + e.y.Minimal() +} + +func (e *gfP12) IsZero() bool { + e.Minimal() + return e.x.IsZero() && e.y.IsZero() +} + +func (e *gfP12) IsOne() bool { + e.Minimal() + return e.x.IsZero() && e.y.IsOne() +} + +func (e *gfP12) Conjugate(a *gfP12) *gfP12 { + e.x.Negative(a.x) + e.y.Set(a.y) + return a +} + +func (e *gfP12) Negative(a *gfP12) *gfP12 { + e.x.Negative(a.x) + e.y.Negative(a.y) + return e +} + +// Frobenius computes (xω+y)^p = x^p ω·ξ^((p-1)/6) + y^p +func (e *gfP12) Frobenius(a *gfP12, pool *bnPool) *gfP12 { + e.x.Frobenius(a.x, pool) + e.y.Frobenius(a.y, pool) + e.x.MulScalar(e.x, xiToPMinus1Over6, pool) + return e +} + +// FrobeniusP2 computes (xω+y)^p² = x^p² ω·ξ^((p²-1)/6) + y^p² +func (e *gfP12) FrobeniusP2(a *gfP12, pool *bnPool) *gfP12 { + e.x.FrobeniusP2(a.x) + e.x.MulGFP(e.x, xiToPSquaredMinus1Over6) + e.y.FrobeniusP2(a.y) + return e +} + +func (e *gfP12) Add(a, b *gfP12) *gfP12 { + e.x.Add(a.x, b.x) + e.y.Add(a.y, b.y) + return e +} + +func (e *gfP12) Sub(a, b *gfP12) *gfP12 { + e.x.Sub(a.x, b.x) + e.y.Sub(a.y, b.y) + return e +} + +func (e *gfP12) Mul(a, b *gfP12, pool *bnPool) *gfP12 { + tx := newGFp6(pool) + tx.Mul(a.x, b.y, pool) + t := newGFp6(pool) + t.Mul(b.x, a.y, pool) + tx.Add(tx, t) + + ty := newGFp6(pool) + ty.Mul(a.y, b.y, pool) + t.Mul(a.x, b.x, pool) + t.MulTau(t, pool) + e.y.Add(ty, t) + e.x.Set(tx) + + tx.Put(pool) + ty.Put(pool) + t.Put(pool) + return e +} + +func (e *gfP12) MulScalar(a *gfP12, b *gfP6, pool *bnPool) *gfP12 { + e.x.Mul(e.x, b, pool) + e.y.Mul(e.y, b, pool) + return e +} + +func (c *gfP12) Exp(a *gfP12, power *big.Int, pool *bnPool) *gfP12 { + sum := newGFp12(pool) + sum.SetOne() + t := newGFp12(pool) + + for i := power.BitLen() - 1; i >= 0; i-- { + t.Square(sum, pool) + if power.Bit(i) != 0 { + sum.Mul(t, a, pool) + } else { + sum.Set(t) + } + } + + c.Set(sum) + + sum.Put(pool) + t.Put(pool) + + return c +} + +func (e *gfP12) Square(a *gfP12, pool *bnPool) *gfP12 { + // Complex squaring algorithm + v0 := newGFp6(pool) + v0.Mul(a.x, a.y, pool) + + t := newGFp6(pool) + t.MulTau(a.x, pool) + t.Add(a.y, t) + ty := newGFp6(pool) + ty.Add(a.x, a.y) + ty.Mul(ty, t, pool) + ty.Sub(ty, v0) + t.MulTau(v0, pool) + ty.Sub(ty, t) + + e.y.Set(ty) + e.x.Double(v0) + + v0.Put(pool) + t.Put(pool) + ty.Put(pool) + + return e +} + +func (e *gfP12) Invert(a *gfP12, pool *bnPool) *gfP12 { + // See "Implementing cryptographic pairings", M. Scott, section 3.2. + // ftp://136.206.11.249/pub/crypto/pairings.pdf + t1 := newGFp6(pool) + t2 := newGFp6(pool) + + t1.Square(a.x, pool) + t2.Square(a.y, pool) + t1.MulTau(t1, pool) + t1.Sub(t2, t1) + t2.Invert(t1, pool) + + e.x.Negative(a.x) + e.y.Set(a.y) + e.MulScalar(e, t2, pool) + + t1.Put(pool) + t2.Put(pool) + + return e +} diff --git a/vendor/golang.org/x/crypto/bn256/gfp2.go b/vendor/golang.org/x/crypto/bn256/gfp2.go new file mode 100644 index 0000000..97f3f1f --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/gfp2.go @@ -0,0 +1,219 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +// For details of the algorithms used, see "Multiplication and Squaring on +// Pairing-Friendly Fields, Devegili et al. +// http://eprint.iacr.org/2006/471.pdf. + +import ( + "math/big" +) + +// gfP2 implements a field of size p² as a quadratic extension of the base +// field where i²=-1. +type gfP2 struct { + x, y *big.Int // value is xi+y. +} + +func newGFp2(pool *bnPool) *gfP2 { + return &gfP2{pool.Get(), pool.Get()} +} + +func (e *gfP2) String() string { + x := new(big.Int).Mod(e.x, p) + y := new(big.Int).Mod(e.y, p) + return "(" + x.String() + "," + y.String() + ")" +} + +func (e *gfP2) Put(pool *bnPool) { + pool.Put(e.x) + pool.Put(e.y) +} + +func (e *gfP2) Set(a *gfP2) *gfP2 { + e.x.Set(a.x) + e.y.Set(a.y) + return e +} + +func (e *gfP2) SetZero() *gfP2 { + e.x.SetInt64(0) + e.y.SetInt64(0) + return e +} + +func (e *gfP2) SetOne() *gfP2 { + e.x.SetInt64(0) + e.y.SetInt64(1) + return e +} + +func (e *gfP2) Minimal() { + if e.x.Sign() < 0 || e.x.Cmp(p) >= 0 { + e.x.Mod(e.x, p) + } + if e.y.Sign() < 0 || e.y.Cmp(p) >= 0 { + e.y.Mod(e.y, p) + } +} + +func (e *gfP2) IsZero() bool { + return e.x.Sign() == 0 && e.y.Sign() == 0 +} + +func (e *gfP2) IsOne() bool { + if e.x.Sign() != 0 { + return false + } + words := e.y.Bits() + return len(words) == 1 && words[0] == 1 +} + +func (e *gfP2) Conjugate(a *gfP2) *gfP2 { + e.y.Set(a.y) + e.x.Neg(a.x) + return e +} + +func (e *gfP2) Negative(a *gfP2) *gfP2 { + e.x.Neg(a.x) + e.y.Neg(a.y) + return e +} + +func (e *gfP2) Add(a, b *gfP2) *gfP2 { + e.x.Add(a.x, b.x) + e.y.Add(a.y, b.y) + return e +} + +func (e *gfP2) Sub(a, b *gfP2) *gfP2 { + e.x.Sub(a.x, b.x) + e.y.Sub(a.y, b.y) + return e +} + +func (e *gfP2) Double(a *gfP2) *gfP2 { + e.x.Lsh(a.x, 1) + e.y.Lsh(a.y, 1) + return e +} + +func (c *gfP2) Exp(a *gfP2, power *big.Int, pool *bnPool) *gfP2 { + sum := newGFp2(pool) + sum.SetOne() + t := newGFp2(pool) + + for i := power.BitLen() - 1; i >= 0; i-- { + t.Square(sum, pool) + if power.Bit(i) != 0 { + sum.Mul(t, a, pool) + } else { + sum.Set(t) + } + } + + c.Set(sum) + + sum.Put(pool) + t.Put(pool) + + return c +} + +// See "Multiplication and Squaring in Pairing-Friendly Fields", +// http://eprint.iacr.org/2006/471.pdf +func (e *gfP2) Mul(a, b *gfP2, pool *bnPool) *gfP2 { + tx := pool.Get().Mul(a.x, b.y) + t := pool.Get().Mul(b.x, a.y) + tx.Add(tx, t) + tx.Mod(tx, p) + + ty := pool.Get().Mul(a.y, b.y) + t.Mul(a.x, b.x) + ty.Sub(ty, t) + e.y.Mod(ty, p) + e.x.Set(tx) + + pool.Put(tx) + pool.Put(ty) + pool.Put(t) + + return e +} + +func (e *gfP2) MulScalar(a *gfP2, b *big.Int) *gfP2 { + e.x.Mul(a.x, b) + e.y.Mul(a.y, b) + return e +} + +// MulXi sets e=ξa where ξ=i+3 and then returns e. +func (e *gfP2) MulXi(a *gfP2, pool *bnPool) *gfP2 { + // (xi+y)(i+3) = (3x+y)i+(3y-x) + tx := pool.Get().Lsh(a.x, 1) + tx.Add(tx, a.x) + tx.Add(tx, a.y) + + ty := pool.Get().Lsh(a.y, 1) + ty.Add(ty, a.y) + ty.Sub(ty, a.x) + + e.x.Set(tx) + e.y.Set(ty) + + pool.Put(tx) + pool.Put(ty) + + return e +} + +func (e *gfP2) Square(a *gfP2, pool *bnPool) *gfP2 { + // Complex squaring algorithm: + // (xi+b)² = (x+y)(y-x) + 2*i*x*y + t1 := pool.Get().Sub(a.y, a.x) + t2 := pool.Get().Add(a.x, a.y) + ty := pool.Get().Mul(t1, t2) + ty.Mod(ty, p) + + t1.Mul(a.x, a.y) + t1.Lsh(t1, 1) + + e.x.Mod(t1, p) + e.y.Set(ty) + + pool.Put(t1) + pool.Put(t2) + pool.Put(ty) + + return e +} + +func (e *gfP2) Invert(a *gfP2, pool *bnPool) *gfP2 { + // See "Implementing cryptographic pairings", M. Scott, section 3.2. + // ftp://136.206.11.249/pub/crypto/pairings.pdf + t := pool.Get() + t.Mul(a.y, a.y) + t2 := pool.Get() + t2.Mul(a.x, a.x) + t.Add(t, t2) + + inv := pool.Get() + inv.ModInverse(t, p) + + e.x.Neg(a.x) + e.x.Mul(e.x, inv) + e.x.Mod(e.x, p) + + e.y.Mul(a.y, inv) + e.y.Mod(e.y, p) + + pool.Put(t) + pool.Put(t2) + pool.Put(inv) + + return e +} diff --git a/vendor/golang.org/x/crypto/bn256/gfp6.go b/vendor/golang.org/x/crypto/bn256/gfp6.go new file mode 100644 index 0000000..f98ae78 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/gfp6.go @@ -0,0 +1,296 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +// For details of the algorithms used, see "Multiplication and Squaring on +// Pairing-Friendly Fields, Devegili et al. +// http://eprint.iacr.org/2006/471.pdf. + +import ( + "math/big" +) + +// gfP6 implements the field of size pâ¶ as a cubic extension of gfP2 where τ³=ξ +// and ξ=i+3. +type gfP6 struct { + x, y, z *gfP2 // value is xτ² + yÏ„ + z +} + +func newGFp6(pool *bnPool) *gfP6 { + return &gfP6{newGFp2(pool), newGFp2(pool), newGFp2(pool)} +} + +func (e *gfP6) String() string { + return "(" + e.x.String() + "," + e.y.String() + "," + e.z.String() + ")" +} + +func (e *gfP6) Put(pool *bnPool) { + e.x.Put(pool) + e.y.Put(pool) + e.z.Put(pool) +} + +func (e *gfP6) Set(a *gfP6) *gfP6 { + e.x.Set(a.x) + e.y.Set(a.y) + e.z.Set(a.z) + return e +} + +func (e *gfP6) SetZero() *gfP6 { + e.x.SetZero() + e.y.SetZero() + e.z.SetZero() + return e +} + +func (e *gfP6) SetOne() *gfP6 { + e.x.SetZero() + e.y.SetZero() + e.z.SetOne() + return e +} + +func (e *gfP6) Minimal() { + e.x.Minimal() + e.y.Minimal() + e.z.Minimal() +} + +func (e *gfP6) IsZero() bool { + return e.x.IsZero() && e.y.IsZero() && e.z.IsZero() +} + +func (e *gfP6) IsOne() bool { + return e.x.IsZero() && e.y.IsZero() && e.z.IsOne() +} + +func (e *gfP6) Negative(a *gfP6) *gfP6 { + e.x.Negative(a.x) + e.y.Negative(a.y) + e.z.Negative(a.z) + return e +} + +func (e *gfP6) Frobenius(a *gfP6, pool *bnPool) *gfP6 { + e.x.Conjugate(a.x) + e.y.Conjugate(a.y) + e.z.Conjugate(a.z) + + e.x.Mul(e.x, xiTo2PMinus2Over3, pool) + e.y.Mul(e.y, xiToPMinus1Over3, pool) + return e +} + +// FrobeniusP2 computes (xτ²+yÏ„+z)^(p²) = xÏ„^(2p²) + yÏ„^(p²) + z +func (e *gfP6) FrobeniusP2(a *gfP6) *gfP6 { + // Ï„^(2p²) = τ²τ^(2p²-2) = τ²ξ^((2p²-2)/3) + e.x.MulScalar(a.x, xiTo2PSquaredMinus2Over3) + // Ï„^(p²) = ττ^(p²-1) = τξ^((p²-1)/3) + e.y.MulScalar(a.y, xiToPSquaredMinus1Over3) + e.z.Set(a.z) + return e +} + +func (e *gfP6) Add(a, b *gfP6) *gfP6 { + e.x.Add(a.x, b.x) + e.y.Add(a.y, b.y) + e.z.Add(a.z, b.z) + return e +} + +func (e *gfP6) Sub(a, b *gfP6) *gfP6 { + e.x.Sub(a.x, b.x) + e.y.Sub(a.y, b.y) + e.z.Sub(a.z, b.z) + return e +} + +func (e *gfP6) Double(a *gfP6) *gfP6 { + e.x.Double(a.x) + e.y.Double(a.y) + e.z.Double(a.z) + return e +} + +func (e *gfP6) Mul(a, b *gfP6, pool *bnPool) *gfP6 { + // "Multiplication and Squaring on Pairing-Friendly Fields" + // Section 4, Karatsuba method. + // http://eprint.iacr.org/2006/471.pdf + + v0 := newGFp2(pool) + v0.Mul(a.z, b.z, pool) + v1 := newGFp2(pool) + v1.Mul(a.y, b.y, pool) + v2 := newGFp2(pool) + v2.Mul(a.x, b.x, pool) + + t0 := newGFp2(pool) + t0.Add(a.x, a.y) + t1 := newGFp2(pool) + t1.Add(b.x, b.y) + tz := newGFp2(pool) + tz.Mul(t0, t1, pool) + + tz.Sub(tz, v1) + tz.Sub(tz, v2) + tz.MulXi(tz, pool) + tz.Add(tz, v0) + + t0.Add(a.y, a.z) + t1.Add(b.y, b.z) + ty := newGFp2(pool) + ty.Mul(t0, t1, pool) + ty.Sub(ty, v0) + ty.Sub(ty, v1) + t0.MulXi(v2, pool) + ty.Add(ty, t0) + + t0.Add(a.x, a.z) + t1.Add(b.x, b.z) + tx := newGFp2(pool) + tx.Mul(t0, t1, pool) + tx.Sub(tx, v0) + tx.Add(tx, v1) + tx.Sub(tx, v2) + + e.x.Set(tx) + e.y.Set(ty) + e.z.Set(tz) + + t0.Put(pool) + t1.Put(pool) + tx.Put(pool) + ty.Put(pool) + tz.Put(pool) + v0.Put(pool) + v1.Put(pool) + v2.Put(pool) + return e +} + +func (e *gfP6) MulScalar(a *gfP6, b *gfP2, pool *bnPool) *gfP6 { + e.x.Mul(a.x, b, pool) + e.y.Mul(a.y, b, pool) + e.z.Mul(a.z, b, pool) + return e +} + +func (e *gfP6) MulGFP(a *gfP6, b *big.Int) *gfP6 { + e.x.MulScalar(a.x, b) + e.y.MulScalar(a.y, b) + e.z.MulScalar(a.z, b) + return e +} + +// MulTau computes τ·(aτ²+bÏ„+c) = bτ²+cÏ„+aξ +func (e *gfP6) MulTau(a *gfP6, pool *bnPool) { + tz := newGFp2(pool) + tz.MulXi(a.x, pool) + ty := newGFp2(pool) + ty.Set(a.y) + e.y.Set(a.z) + e.x.Set(ty) + e.z.Set(tz) + tz.Put(pool) + ty.Put(pool) +} + +func (e *gfP6) Square(a *gfP6, pool *bnPool) *gfP6 { + v0 := newGFp2(pool).Square(a.z, pool) + v1 := newGFp2(pool).Square(a.y, pool) + v2 := newGFp2(pool).Square(a.x, pool) + + c0 := newGFp2(pool).Add(a.x, a.y) + c0.Square(c0, pool) + c0.Sub(c0, v1) + c0.Sub(c0, v2) + c0.MulXi(c0, pool) + c0.Add(c0, v0) + + c1 := newGFp2(pool).Add(a.y, a.z) + c1.Square(c1, pool) + c1.Sub(c1, v0) + c1.Sub(c1, v1) + xiV2 := newGFp2(pool).MulXi(v2, pool) + c1.Add(c1, xiV2) + + c2 := newGFp2(pool).Add(a.x, a.z) + c2.Square(c2, pool) + c2.Sub(c2, v0) + c2.Add(c2, v1) + c2.Sub(c2, v2) + + e.x.Set(c2) + e.y.Set(c1) + e.z.Set(c0) + + v0.Put(pool) + v1.Put(pool) + v2.Put(pool) + c0.Put(pool) + c1.Put(pool) + c2.Put(pool) + xiV2.Put(pool) + + return e +} + +func (e *gfP6) Invert(a *gfP6, pool *bnPool) *gfP6 { + // See "Implementing cryptographic pairings", M. Scott, section 3.2. + // ftp://136.206.11.249/pub/crypto/pairings.pdf + + // Here we can give a short explanation of how it works: let j be a cubic root of + // unity in GF(p²) so that 1+j+j²=0. + // Then (xτ² + yÏ„ + z)(xj²τ² + yjÏ„ + z)(xjτ² + yj²τ + z) + // = (xτ² + yÏ„ + z)(Cτ²+BÏ„+A) + // = (x³ξ²+y³ξ+z³-3ξxyz) = F is an element of the base field (the norm). + // + // On the other hand (xj²τ² + yjÏ„ + z)(xjτ² + yj²τ + z) + // = τ²(y²-ξxz) + Ï„(ξx²-yz) + (z²-ξxy) + // + // So that's why A = (z²-ξxy), B = (ξx²-yz), C = (y²-ξxz) + t1 := newGFp2(pool) + + A := newGFp2(pool) + A.Square(a.z, pool) + t1.Mul(a.x, a.y, pool) + t1.MulXi(t1, pool) + A.Sub(A, t1) + + B := newGFp2(pool) + B.Square(a.x, pool) + B.MulXi(B, pool) + t1.Mul(a.y, a.z, pool) + B.Sub(B, t1) + + C := newGFp2(pool) + C.Square(a.y, pool) + t1.Mul(a.x, a.z, pool) + C.Sub(C, t1) + + F := newGFp2(pool) + F.Mul(C, a.y, pool) + F.MulXi(F, pool) + t1.Mul(A, a.z, pool) + F.Add(F, t1) + t1.Mul(B, a.x, pool) + t1.MulXi(t1, pool) + F.Add(F, t1) + + F.Invert(F, pool) + + e.x.Mul(C, F, pool) + e.y.Mul(B, F, pool) + e.z.Mul(A, F, pool) + + t1.Put(pool) + A.Put(pool) + B.Put(pool) + C.Put(pool) + F.Put(pool) + + return e +} diff --git a/vendor/golang.org/x/crypto/bn256/optate.go b/vendor/golang.org/x/crypto/bn256/optate.go new file mode 100644 index 0000000..7ae0746 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/optate.go @@ -0,0 +1,395 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +func lineFunctionAdd(r, p *twistPoint, q *curvePoint, r2 *gfP2, pool *bnPool) (a, b, c *gfP2, rOut *twistPoint) { + // See the mixed addition algorithm from "Faster Computation of the + // Tate Pairing", http://arxiv.org/pdf/0904.0854v3.pdf + + B := newGFp2(pool).Mul(p.x, r.t, pool) + + D := newGFp2(pool).Add(p.y, r.z) + D.Square(D, pool) + D.Sub(D, r2) + D.Sub(D, r.t) + D.Mul(D, r.t, pool) + + H := newGFp2(pool).Sub(B, r.x) + I := newGFp2(pool).Square(H, pool) + + E := newGFp2(pool).Add(I, I) + E.Add(E, E) + + J := newGFp2(pool).Mul(H, E, pool) + + L1 := newGFp2(pool).Sub(D, r.y) + L1.Sub(L1, r.y) + + V := newGFp2(pool).Mul(r.x, E, pool) + + rOut = newTwistPoint(pool) + rOut.x.Square(L1, pool) + rOut.x.Sub(rOut.x, J) + rOut.x.Sub(rOut.x, V) + rOut.x.Sub(rOut.x, V) + + rOut.z.Add(r.z, H) + rOut.z.Square(rOut.z, pool) + rOut.z.Sub(rOut.z, r.t) + rOut.z.Sub(rOut.z, I) + + t := newGFp2(pool).Sub(V, rOut.x) + t.Mul(t, L1, pool) + t2 := newGFp2(pool).Mul(r.y, J, pool) + t2.Add(t2, t2) + rOut.y.Sub(t, t2) + + rOut.t.Square(rOut.z, pool) + + t.Add(p.y, rOut.z) + t.Square(t, pool) + t.Sub(t, r2) + t.Sub(t, rOut.t) + + t2.Mul(L1, p.x, pool) + t2.Add(t2, t2) + a = newGFp2(pool) + a.Sub(t2, t) + + c = newGFp2(pool) + c.MulScalar(rOut.z, q.y) + c.Add(c, c) + + b = newGFp2(pool) + b.SetZero() + b.Sub(b, L1) + b.MulScalar(b, q.x) + b.Add(b, b) + + B.Put(pool) + D.Put(pool) + H.Put(pool) + I.Put(pool) + E.Put(pool) + J.Put(pool) + L1.Put(pool) + V.Put(pool) + t.Put(pool) + t2.Put(pool) + + return +} + +func lineFunctionDouble(r *twistPoint, q *curvePoint, pool *bnPool) (a, b, c *gfP2, rOut *twistPoint) { + // See the doubling algorithm for a=0 from "Faster Computation of the + // Tate Pairing", http://arxiv.org/pdf/0904.0854v3.pdf + + A := newGFp2(pool).Square(r.x, pool) + B := newGFp2(pool).Square(r.y, pool) + C := newGFp2(pool).Square(B, pool) + + D := newGFp2(pool).Add(r.x, B) + D.Square(D, pool) + D.Sub(D, A) + D.Sub(D, C) + D.Add(D, D) + + E := newGFp2(pool).Add(A, A) + E.Add(E, A) + + G := newGFp2(pool).Square(E, pool) + + rOut = newTwistPoint(pool) + rOut.x.Sub(G, D) + rOut.x.Sub(rOut.x, D) + + rOut.z.Add(r.y, r.z) + rOut.z.Square(rOut.z, pool) + rOut.z.Sub(rOut.z, B) + rOut.z.Sub(rOut.z, r.t) + + rOut.y.Sub(D, rOut.x) + rOut.y.Mul(rOut.y, E, pool) + t := newGFp2(pool).Add(C, C) + t.Add(t, t) + t.Add(t, t) + rOut.y.Sub(rOut.y, t) + + rOut.t.Square(rOut.z, pool) + + t.Mul(E, r.t, pool) + t.Add(t, t) + b = newGFp2(pool) + b.SetZero() + b.Sub(b, t) + b.MulScalar(b, q.x) + + a = newGFp2(pool) + a.Add(r.x, E) + a.Square(a, pool) + a.Sub(a, A) + a.Sub(a, G) + t.Add(B, B) + t.Add(t, t) + a.Sub(a, t) + + c = newGFp2(pool) + c.Mul(rOut.z, r.t, pool) + c.Add(c, c) + c.MulScalar(c, q.y) + + A.Put(pool) + B.Put(pool) + C.Put(pool) + D.Put(pool) + E.Put(pool) + G.Put(pool) + t.Put(pool) + + return +} + +func mulLine(ret *gfP12, a, b, c *gfP2, pool *bnPool) { + a2 := newGFp6(pool) + a2.x.SetZero() + a2.y.Set(a) + a2.z.Set(b) + a2.Mul(a2, ret.x, pool) + t3 := newGFp6(pool).MulScalar(ret.y, c, pool) + + t := newGFp2(pool) + t.Add(b, c) + t2 := newGFp6(pool) + t2.x.SetZero() + t2.y.Set(a) + t2.z.Set(t) + ret.x.Add(ret.x, ret.y) + + ret.y.Set(t3) + + ret.x.Mul(ret.x, t2, pool) + ret.x.Sub(ret.x, a2) + ret.x.Sub(ret.x, ret.y) + a2.MulTau(a2, pool) + ret.y.Add(ret.y, a2) + + a2.Put(pool) + t3.Put(pool) + t2.Put(pool) + t.Put(pool) +} + +// sixuPlus2NAF is 6u+2 in non-adjacent form. +var sixuPlus2NAF = []int8{0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, -1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 1} + +// miller implements the Miller loop for calculating the Optimal Ate pairing. +// See algorithm 1 from http://cryptojedi.org/papers/dclxvi-20100714.pdf +func miller(q *twistPoint, p *curvePoint, pool *bnPool) *gfP12 { + ret := newGFp12(pool) + ret.SetOne() + + aAffine := newTwistPoint(pool) + aAffine.Set(q) + aAffine.MakeAffine(pool) + + bAffine := newCurvePoint(pool) + bAffine.Set(p) + bAffine.MakeAffine(pool) + + minusA := newTwistPoint(pool) + minusA.Negative(aAffine, pool) + + r := newTwistPoint(pool) + r.Set(aAffine) + + r2 := newGFp2(pool) + r2.Square(aAffine.y, pool) + + for i := len(sixuPlus2NAF) - 1; i > 0; i-- { + a, b, c, newR := lineFunctionDouble(r, bAffine, pool) + if i != len(sixuPlus2NAF)-1 { + ret.Square(ret, pool) + } + + mulLine(ret, a, b, c, pool) + a.Put(pool) + b.Put(pool) + c.Put(pool) + r.Put(pool) + r = newR + + switch sixuPlus2NAF[i-1] { + case 1: + a, b, c, newR = lineFunctionAdd(r, aAffine, bAffine, r2, pool) + case -1: + a, b, c, newR = lineFunctionAdd(r, minusA, bAffine, r2, pool) + default: + continue + } + + mulLine(ret, a, b, c, pool) + a.Put(pool) + b.Put(pool) + c.Put(pool) + r.Put(pool) + r = newR + } + + // In order to calculate Q1 we have to convert q from the sextic twist + // to the full GF(p^12) group, apply the Frobenius there, and convert + // back. + // + // The twist isomorphism is (x', y') -> (xω², yω³). If we consider just + // x for a moment, then after applying the Frobenius, we have x̄ω^(2p) + // where xÌ„ is the conjugate of x. If we are going to apply the inverse + // isomorphism we need a value with a single coefficient of ω² so we + // rewrite this as x̄ω^(2p-2)ω². ξⶠ= ω and, due to the construction of + // p, 2p-2 is a multiple of six. Therefore we can rewrite as + // x̄ξ^((p-1)/3)ω² and applying the inverse isomorphism eliminates the + // ω². + // + // A similar argument can be made for the y value. + + q1 := newTwistPoint(pool) + q1.x.Conjugate(aAffine.x) + q1.x.Mul(q1.x, xiToPMinus1Over3, pool) + q1.y.Conjugate(aAffine.y) + q1.y.Mul(q1.y, xiToPMinus1Over2, pool) + q1.z.SetOne() + q1.t.SetOne() + + // For Q2 we are applying the p² Frobenius. The two conjugations cancel + // out and we are left only with the factors from the isomorphism. In + // the case of x, we end up with a pure number which is why + // xiToPSquaredMinus1Over3 is ∈ GF(p). With y we get a factor of -1. We + // ignore this to end up with -Q2. + + minusQ2 := newTwistPoint(pool) + minusQ2.x.MulScalar(aAffine.x, xiToPSquaredMinus1Over3) + minusQ2.y.Set(aAffine.y) + minusQ2.z.SetOne() + minusQ2.t.SetOne() + + r2.Square(q1.y, pool) + a, b, c, newR := lineFunctionAdd(r, q1, bAffine, r2, pool) + mulLine(ret, a, b, c, pool) + a.Put(pool) + b.Put(pool) + c.Put(pool) + r.Put(pool) + r = newR + + r2.Square(minusQ2.y, pool) + a, b, c, newR = lineFunctionAdd(r, minusQ2, bAffine, r2, pool) + mulLine(ret, a, b, c, pool) + a.Put(pool) + b.Put(pool) + c.Put(pool) + r.Put(pool) + r = newR + + aAffine.Put(pool) + bAffine.Put(pool) + minusA.Put(pool) + r.Put(pool) + r2.Put(pool) + + return ret +} + +// finalExponentiation computes the (p¹²-1)/Order-th power of an element of +// GF(p¹²) to obtain an element of GT (steps 13-15 of algorithm 1 from +// http://cryptojedi.org/papers/dclxvi-20100714.pdf) +func finalExponentiation(in *gfP12, pool *bnPool) *gfP12 { + t1 := newGFp12(pool) + + // This is the p^6-Frobenius + t1.x.Negative(in.x) + t1.y.Set(in.y) + + inv := newGFp12(pool) + inv.Invert(in, pool) + t1.Mul(t1, inv, pool) + + t2 := newGFp12(pool).FrobeniusP2(t1, pool) + t1.Mul(t1, t2, pool) + + fp := newGFp12(pool).Frobenius(t1, pool) + fp2 := newGFp12(pool).FrobeniusP2(t1, pool) + fp3 := newGFp12(pool).Frobenius(fp2, pool) + + fu, fu2, fu3 := newGFp12(pool), newGFp12(pool), newGFp12(pool) + fu.Exp(t1, u, pool) + fu2.Exp(fu, u, pool) + fu3.Exp(fu2, u, pool) + + y3 := newGFp12(pool).Frobenius(fu, pool) + fu2p := newGFp12(pool).Frobenius(fu2, pool) + fu3p := newGFp12(pool).Frobenius(fu3, pool) + y2 := newGFp12(pool).FrobeniusP2(fu2, pool) + + y0 := newGFp12(pool) + y0.Mul(fp, fp2, pool) + y0.Mul(y0, fp3, pool) + + y1, y4, y5 := newGFp12(pool), newGFp12(pool), newGFp12(pool) + y1.Conjugate(t1) + y5.Conjugate(fu2) + y3.Conjugate(y3) + y4.Mul(fu, fu2p, pool) + y4.Conjugate(y4) + + y6 := newGFp12(pool) + y6.Mul(fu3, fu3p, pool) + y6.Conjugate(y6) + + t0 := newGFp12(pool) + t0.Square(y6, pool) + t0.Mul(t0, y4, pool) + t0.Mul(t0, y5, pool) + t1.Mul(y3, y5, pool) + t1.Mul(t1, t0, pool) + t0.Mul(t0, y2, pool) + t1.Square(t1, pool) + t1.Mul(t1, t0, pool) + t1.Square(t1, pool) + t0.Mul(t1, y1, pool) + t1.Mul(t1, y0, pool) + t0.Square(t0, pool) + t0.Mul(t0, t1, pool) + + inv.Put(pool) + t1.Put(pool) + t2.Put(pool) + fp.Put(pool) + fp2.Put(pool) + fp3.Put(pool) + fu.Put(pool) + fu2.Put(pool) + fu3.Put(pool) + fu2p.Put(pool) + fu3p.Put(pool) + y0.Put(pool) + y1.Put(pool) + y2.Put(pool) + y3.Put(pool) + y4.Put(pool) + y5.Put(pool) + y6.Put(pool) + + return t0 +} + +func optimalAte(a *twistPoint, b *curvePoint, pool *bnPool) *gfP12 { + e := miller(a, b, pool) + ret := finalExponentiation(e, pool) + e.Put(pool) + + if a.IsInfinity() || b.IsInfinity() { + ret.SetOne() + } + + return ret +} diff --git a/vendor/golang.org/x/crypto/bn256/twist.go b/vendor/golang.org/x/crypto/bn256/twist.go new file mode 100644 index 0000000..4f8b3fe --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/twist.go @@ -0,0 +1,249 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "math/big" +) + +// twistPoint implements the elliptic curve y²=x³+3/ξ over GF(p²). Points are +// kept in Jacobian form and t=z² when valid. The group Gâ‚‚ is the set of +// n-torsion points of this curve over GF(p²) (where n = Order) +type twistPoint struct { + x, y, z, t *gfP2 +} + +var twistB = &gfP2{ + bigFromBase10("6500054969564660373279643874235990574282535810762300357187714502686418407178"), + bigFromBase10("45500384786952622612957507119651934019977750675336102500314001518804928850249"), +} + +// twistGen is the generator of group Gâ‚‚. +var twistGen = &twistPoint{ + &gfP2{ + bigFromBase10("21167961636542580255011770066570541300993051739349375019639421053990175267184"), + bigFromBase10("64746500191241794695844075326670126197795977525365406531717464316923369116492"), + }, + &gfP2{ + bigFromBase10("20666913350058776956210519119118544732556678129809273996262322366050359951122"), + bigFromBase10("17778617556404439934652658462602675281523610326338642107814333856843981424549"), + }, + &gfP2{ + bigFromBase10("0"), + bigFromBase10("1"), + }, + &gfP2{ + bigFromBase10("0"), + bigFromBase10("1"), + }, +} + +func newTwistPoint(pool *bnPool) *twistPoint { + return &twistPoint{ + newGFp2(pool), + newGFp2(pool), + newGFp2(pool), + newGFp2(pool), + } +} + +func (c *twistPoint) String() string { + return "(" + c.x.String() + ", " + c.y.String() + ", " + c.z.String() + ")" +} + +func (c *twistPoint) Put(pool *bnPool) { + c.x.Put(pool) + c.y.Put(pool) + c.z.Put(pool) + c.t.Put(pool) +} + +func (c *twistPoint) Set(a *twistPoint) { + c.x.Set(a.x) + c.y.Set(a.y) + c.z.Set(a.z) + c.t.Set(a.t) +} + +// IsOnCurve returns true iff c is on the curve where c must be in affine form. +func (c *twistPoint) IsOnCurve() bool { + pool := new(bnPool) + yy := newGFp2(pool).Square(c.y, pool) + xxx := newGFp2(pool).Square(c.x, pool) + xxx.Mul(xxx, c.x, pool) + yy.Sub(yy, xxx) + yy.Sub(yy, twistB) + yy.Minimal() + return yy.x.Sign() == 0 && yy.y.Sign() == 0 +} + +func (c *twistPoint) SetInfinity() { + c.z.SetZero() +} + +func (c *twistPoint) IsInfinity() bool { + return c.z.IsZero() +} + +func (c *twistPoint) Add(a, b *twistPoint, pool *bnPool) { + // For additional comments, see the same function in curve.go. + + if a.IsInfinity() { + c.Set(b) + return + } + if b.IsInfinity() { + c.Set(a) + return + } + + // See http://hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian-0/addition/add-2007-bl.op3 + z1z1 := newGFp2(pool).Square(a.z, pool) + z2z2 := newGFp2(pool).Square(b.z, pool) + u1 := newGFp2(pool).Mul(a.x, z2z2, pool) + u2 := newGFp2(pool).Mul(b.x, z1z1, pool) + + t := newGFp2(pool).Mul(b.z, z2z2, pool) + s1 := newGFp2(pool).Mul(a.y, t, pool) + + t.Mul(a.z, z1z1, pool) + s2 := newGFp2(pool).Mul(b.y, t, pool) + + h := newGFp2(pool).Sub(u2, u1) + xEqual := h.IsZero() + + t.Add(h, h) + i := newGFp2(pool).Square(t, pool) + j := newGFp2(pool).Mul(h, i, pool) + + t.Sub(s2, s1) + yEqual := t.IsZero() + if xEqual && yEqual { + c.Double(a, pool) + return + } + r := newGFp2(pool).Add(t, t) + + v := newGFp2(pool).Mul(u1, i, pool) + + t4 := newGFp2(pool).Square(r, pool) + t.Add(v, v) + t6 := newGFp2(pool).Sub(t4, j) + c.x.Sub(t6, t) + + t.Sub(v, c.x) // t7 + t4.Mul(s1, j, pool) // t8 + t6.Add(t4, t4) // t9 + t4.Mul(r, t, pool) // t10 + c.y.Sub(t4, t6) + + t.Add(a.z, b.z) // t11 + t4.Square(t, pool) // t12 + t.Sub(t4, z1z1) // t13 + t4.Sub(t, z2z2) // t14 + c.z.Mul(t4, h, pool) + + z1z1.Put(pool) + z2z2.Put(pool) + u1.Put(pool) + u2.Put(pool) + t.Put(pool) + s1.Put(pool) + s2.Put(pool) + h.Put(pool) + i.Put(pool) + j.Put(pool) + r.Put(pool) + v.Put(pool) + t4.Put(pool) + t6.Put(pool) +} + +func (c *twistPoint) Double(a *twistPoint, pool *bnPool) { + // See http://hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian-0/doubling/dbl-2009-l.op3 + A := newGFp2(pool).Square(a.x, pool) + B := newGFp2(pool).Square(a.y, pool) + C := newGFp2(pool).Square(B, pool) + + t := newGFp2(pool).Add(a.x, B) + t2 := newGFp2(pool).Square(t, pool) + t.Sub(t2, A) + t2.Sub(t, C) + d := newGFp2(pool).Add(t2, t2) + t.Add(A, A) + e := newGFp2(pool).Add(t, A) + f := newGFp2(pool).Square(e, pool) + + t.Add(d, d) + c.x.Sub(f, t) + + t.Add(C, C) + t2.Add(t, t) + t.Add(t2, t2) + c.y.Sub(d, c.x) + t2.Mul(e, c.y, pool) + c.y.Sub(t2, t) + + t.Mul(a.y, a.z, pool) + c.z.Add(t, t) + + A.Put(pool) + B.Put(pool) + C.Put(pool) + t.Put(pool) + t2.Put(pool) + d.Put(pool) + e.Put(pool) + f.Put(pool) +} + +func (c *twistPoint) Mul(a *twistPoint, scalar *big.Int, pool *bnPool) *twistPoint { + sum := newTwistPoint(pool) + sum.SetInfinity() + t := newTwistPoint(pool) + + for i := scalar.BitLen(); i >= 0; i-- { + t.Double(sum, pool) + if scalar.Bit(i) != 0 { + sum.Add(t, a, pool) + } else { + sum.Set(t) + } + } + + c.Set(sum) + sum.Put(pool) + t.Put(pool) + return c +} + +func (c *twistPoint) MakeAffine(pool *bnPool) *twistPoint { + if c.z.IsOne() { + return c + } + + zInv := newGFp2(pool).Invert(c.z, pool) + t := newGFp2(pool).Mul(c.y, zInv, pool) + zInv2 := newGFp2(pool).Square(zInv, pool) + c.y.Mul(t, zInv2, pool) + t.Mul(c.x, zInv2, pool) + c.x.Set(t) + c.z.SetOne() + c.t.SetOne() + + zInv.Put(pool) + t.Put(pool) + zInv2.Put(pool) + + return c +} + +func (c *twistPoint) Negative(a *twistPoint, pool *bnPool) { + c.x.Set(a.x) + c.y.SetZero() + c.y.Sub(c.y, a.y) + c.z.Set(a.z) + c.t.SetZero() +} diff --git a/vendor/golang.org/x/crypto/cast5/cast5.go b/vendor/golang.org/x/crypto/cast5/cast5.go new file mode 100644 index 0000000..0b4af37 --- /dev/null +++ b/vendor/golang.org/x/crypto/cast5/cast5.go @@ -0,0 +1,526 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package cast5 implements CAST5, as defined in RFC 2144. CAST5 is a common +// OpenPGP cipher. +package cast5 // import "golang.org/x/crypto/cast5" + +import "errors" + +const BlockSize = 8 +const KeySize = 16 + +type Cipher struct { + masking [16]uint32 + rotate [16]uint8 +} + +func NewCipher(key []byte) (c *Cipher, err error) { + if len(key) != KeySize { + return nil, errors.New("CAST5: keys must be 16 bytes") + } + + c = new(Cipher) + c.keySchedule(key) + return +} + +func (c *Cipher) BlockSize() int { + return BlockSize +} + +func (c *Cipher) Encrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + + l, r = r, l^f1(r, c.masking[0], c.rotate[0]) + l, r = r, l^f2(r, c.masking[1], c.rotate[1]) + l, r = r, l^f3(r, c.masking[2], c.rotate[2]) + l, r = r, l^f1(r, c.masking[3], c.rotate[3]) + + l, r = r, l^f2(r, c.masking[4], c.rotate[4]) + l, r = r, l^f3(r, c.masking[5], c.rotate[5]) + l, r = r, l^f1(r, c.masking[6], c.rotate[6]) + l, r = r, l^f2(r, c.masking[7], c.rotate[7]) + + l, r = r, l^f3(r, c.masking[8], c.rotate[8]) + l, r = r, l^f1(r, c.masking[9], c.rotate[9]) + l, r = r, l^f2(r, c.masking[10], c.rotate[10]) + l, r = r, l^f3(r, c.masking[11], c.rotate[11]) + + l, r = r, l^f1(r, c.masking[12], c.rotate[12]) + l, r = r, l^f2(r, c.masking[13], c.rotate[13]) + l, r = r, l^f3(r, c.masking[14], c.rotate[14]) + l, r = r, l^f1(r, c.masking[15], c.rotate[15]) + + dst[0] = uint8(r >> 24) + dst[1] = uint8(r >> 16) + dst[2] = uint8(r >> 8) + dst[3] = uint8(r) + dst[4] = uint8(l >> 24) + dst[5] = uint8(l >> 16) + dst[6] = uint8(l >> 8) + dst[7] = uint8(l) +} + +func (c *Cipher) Decrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + + l, r = r, l^f1(r, c.masking[15], c.rotate[15]) + l, r = r, l^f3(r, c.masking[14], c.rotate[14]) + l, r = r, l^f2(r, c.masking[13], c.rotate[13]) + l, r = r, l^f1(r, c.masking[12], c.rotate[12]) + + l, r = r, l^f3(r, c.masking[11], c.rotate[11]) + l, r = r, l^f2(r, c.masking[10], c.rotate[10]) + l, r = r, l^f1(r, c.masking[9], c.rotate[9]) + l, r = r, l^f3(r, c.masking[8], c.rotate[8]) + + l, r = r, l^f2(r, c.masking[7], c.rotate[7]) + l, r = r, l^f1(r, c.masking[6], c.rotate[6]) + l, r = r, l^f3(r, c.masking[5], c.rotate[5]) + l, r = r, l^f2(r, c.masking[4], c.rotate[4]) + + l, r = r, l^f1(r, c.masking[3], c.rotate[3]) + l, r = r, l^f3(r, c.masking[2], c.rotate[2]) + l, r = r, l^f2(r, c.masking[1], c.rotate[1]) + l, r = r, l^f1(r, c.masking[0], c.rotate[0]) + + dst[0] = uint8(r >> 24) + dst[1] = uint8(r >> 16) + dst[2] = uint8(r >> 8) + dst[3] = uint8(r) + dst[4] = uint8(l >> 24) + dst[5] = uint8(l >> 16) + dst[6] = uint8(l >> 8) + dst[7] = uint8(l) +} + +type keyScheduleA [4][7]uint8 +type keyScheduleB [4][5]uint8 + +// keyScheduleRound contains the magic values for a round of the key schedule. +// The keyScheduleA deals with the lines like: +// z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8] +// Conceptually, both x and z are in the same array, x first. The first +// element describes which word of this array gets written to and the +// second, which word gets read. So, for the line above, it's "4, 0", because +// it's writing to the first word of z, which, being after x, is word 4, and +// reading from the first word of x: word 0. +// +// Next are the indexes into the S-boxes. Now the array is treated as bytes. So +// "xD" is 0xd. The first byte of z is written as "16 + 0", just to be clear +// that it's z that we're indexing. +// +// keyScheduleB deals with lines like: +// K1 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2] +// "K1" is ignored because key words are always written in order. So the five +// elements are the S-box indexes. They use the same form as in keyScheduleA, +// above. + +type keyScheduleRound struct{} +type keySchedule []keyScheduleRound + +var schedule = []struct { + a keyScheduleA + b keyScheduleB +}{ + { + keyScheduleA{ + {4, 0, 0xd, 0xf, 0xc, 0xe, 0x8}, + {5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa}, + {6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9}, + {7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb}, + }, + keyScheduleB{ + {16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2}, + {16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6}, + {16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9}, + {16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc}, + }, + }, + { + keyScheduleA{ + {0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0}, + {1, 4, 0, 2, 1, 3, 16 + 2}, + {2, 5, 7, 6, 5, 4, 16 + 1}, + {3, 7, 0xa, 9, 0xb, 8, 16 + 3}, + }, + keyScheduleB{ + {3, 2, 0xc, 0xd, 8}, + {1, 0, 0xe, 0xf, 0xd}, + {7, 6, 8, 9, 3}, + {5, 4, 0xa, 0xb, 7}, + }, + }, + { + keyScheduleA{ + {4, 0, 0xd, 0xf, 0xc, 0xe, 8}, + {5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa}, + {6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9}, + {7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb}, + }, + keyScheduleB{ + {16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9}, + {16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc}, + {16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2}, + {16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6}, + }, + }, + { + keyScheduleA{ + {0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0}, + {1, 4, 0, 2, 1, 3, 16 + 2}, + {2, 5, 7, 6, 5, 4, 16 + 1}, + {3, 7, 0xa, 9, 0xb, 8, 16 + 3}, + }, + keyScheduleB{ + {8, 9, 7, 6, 3}, + {0xa, 0xb, 5, 4, 7}, + {0xc, 0xd, 3, 2, 8}, + {0xe, 0xf, 1, 0, 0xd}, + }, + }, +} + +func (c *Cipher) keySchedule(in []byte) { + var t [8]uint32 + var k [32]uint32 + + for i := 0; i < 4; i++ { + j := i * 4 + t[i] = uint32(in[j])<<24 | uint32(in[j+1])<<16 | uint32(in[j+2])<<8 | uint32(in[j+3]) + } + + x := []byte{6, 7, 4, 5} + ki := 0 + + for half := 0; half < 2; half++ { + for _, round := range schedule { + for j := 0; j < 4; j++ { + var a [7]uint8 + copy(a[:], round.a[j][:]) + w := t[a[1]] + w ^= sBox[4][(t[a[2]>>2]>>(24-8*(a[2]&3)))&0xff] + w ^= sBox[5][(t[a[3]>>2]>>(24-8*(a[3]&3)))&0xff] + w ^= sBox[6][(t[a[4]>>2]>>(24-8*(a[4]&3)))&0xff] + w ^= sBox[7][(t[a[5]>>2]>>(24-8*(a[5]&3)))&0xff] + w ^= sBox[x[j]][(t[a[6]>>2]>>(24-8*(a[6]&3)))&0xff] + t[a[0]] = w + } + + for j := 0; j < 4; j++ { + var b [5]uint8 + copy(b[:], round.b[j][:]) + w := sBox[4][(t[b[0]>>2]>>(24-8*(b[0]&3)))&0xff] + w ^= sBox[5][(t[b[1]>>2]>>(24-8*(b[1]&3)))&0xff] + w ^= sBox[6][(t[b[2]>>2]>>(24-8*(b[2]&3)))&0xff] + w ^= sBox[7][(t[b[3]>>2]>>(24-8*(b[3]&3)))&0xff] + w ^= sBox[4+j][(t[b[4]>>2]>>(24-8*(b[4]&3)))&0xff] + k[ki] = w + ki++ + } + } + } + + for i := 0; i < 16; i++ { + c.masking[i] = k[i] + c.rotate[i] = uint8(k[16+i] & 0x1f) + } +} + +// These are the three 'f' functions. See RFC 2144, section 2.2. +func f1(d, m uint32, r uint8) uint32 { + t := m + d + I := (t << r) | (t >> (32 - r)) + return ((sBox[0][I>>24] ^ sBox[1][(I>>16)&0xff]) - sBox[2][(I>>8)&0xff]) + sBox[3][I&0xff] +} + +func f2(d, m uint32, r uint8) uint32 { + t := m ^ d + I := (t << r) | (t >> (32 - r)) + return ((sBox[0][I>>24] - sBox[1][(I>>16)&0xff]) + sBox[2][(I>>8)&0xff]) ^ sBox[3][I&0xff] +} + +func f3(d, m uint32, r uint8) uint32 { + t := m - d + I := (t << r) | (t >> (32 - r)) + return ((sBox[0][I>>24] + sBox[1][(I>>16)&0xff]) ^ sBox[2][(I>>8)&0xff]) - sBox[3][I&0xff] +} + +var sBox = [8][256]uint32{ + { + 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, + 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, + 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, + 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, + 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, + 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, + 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, + 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, + 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, + 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, + 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, + 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, + 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, + 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, + 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, + 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, + 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, + 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, + 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, + 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, + 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, + 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, + 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, + 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, + 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, + 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, + 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, + 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, + 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, + 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, + 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, + 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf, + }, + { + 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, + 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, + 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, + 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, + 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, + 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, + 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, + 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, + 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, + 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, + 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, + 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, + 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, + 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, + 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, + 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, + 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, + 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, + 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, + 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, + 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, + 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, + 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, + 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, + 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, + 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, + 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, + 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, + 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, + 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, + 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, + 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1, + }, + { + 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, + 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, + 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, + 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, + 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, + 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, + 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, + 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, + 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, + 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, + 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, + 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, + 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, + 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, + 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, + 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, + 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, + 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, + 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, + 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, + 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, + 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, + 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, + 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, + 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, + 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, + 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, + 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, + 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, + 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, + 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, + 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783, + }, + { + 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, + 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, + 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, + 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, + 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, + 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, + 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, + 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, + 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, + 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, + 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, + 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, + 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, + 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, + 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, + 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, + 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, + 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, + 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, + 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, + 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, + 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, + 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, + 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, + 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, + 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, + 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, + 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, + 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, + 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, + 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, + 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2, + }, + { + 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, + 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, + 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, + 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, + 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, + 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, + 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, + 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, + 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, + 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, + 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, + 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, + 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, + 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, + 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, + 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, + 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, + 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, + 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, + 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, + 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, + 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, + 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, + 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, + 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, + 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, + 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, + 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, + 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, + 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, + 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, + 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4, + }, + { + 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, + 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, + 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, + 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, + 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, + 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, + 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, + 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, + 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, + 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, + 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, + 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, + 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, + 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, + 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, + 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, + 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, + 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, + 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, + 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, + 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, + 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, + 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, + 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, + 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, + 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, + 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, + 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, + 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, + 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, + 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, + 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f, + }, + { + 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, + 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, + 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, + 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, + 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, + 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, + 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, + 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, + 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, + 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, + 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, + 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, + 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, + 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, + 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, + 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, + 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, + 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, + 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, + 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, + 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, + 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, + 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, + 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, + 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, + 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, + 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, + 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, + 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, + 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, + 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, + 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3, + }, + { + 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, + 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, + 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, + 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, + 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, + 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, + 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, + 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, + 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, + 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, + 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, + 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, + 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, + 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, + 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, + 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, + 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, + 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, + 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, + 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, + 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, + 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, + 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, + 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, + 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, + 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, + 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, + 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, + 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, + 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, + 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, + 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e, + }, +} diff --git a/vendor/golang.org/x/crypto/cast5/cast5_test.go b/vendor/golang.org/x/crypto/cast5/cast5_test.go new file mode 100644 index 0000000..778b272 --- /dev/null +++ b/vendor/golang.org/x/crypto/cast5/cast5_test.go @@ -0,0 +1,106 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cast5 + +import ( + "bytes" + "encoding/hex" + "testing" +) + +// This test vector is taken from RFC 2144, App B.1. +// Since the other two test vectors are for reduced-round variants, we can't +// use them. +var basicTests = []struct { + key, plainText, cipherText string +}{ + { + "0123456712345678234567893456789a", + "0123456789abcdef", + "238b4fe5847e44b2", + }, +} + +func TestBasic(t *testing.T) { + for i, test := range basicTests { + key, _ := hex.DecodeString(test.key) + plainText, _ := hex.DecodeString(test.plainText) + expected, _ := hex.DecodeString(test.cipherText) + + c, err := NewCipher(key) + if err != nil { + t.Errorf("#%d: failed to create Cipher: %s", i, err) + continue + } + var cipherText [BlockSize]byte + c.Encrypt(cipherText[:], plainText) + if !bytes.Equal(cipherText[:], expected) { + t.Errorf("#%d: got:%x want:%x", i, cipherText, expected) + } + + var plainTextAgain [BlockSize]byte + c.Decrypt(plainTextAgain[:], cipherText[:]) + if !bytes.Equal(plainTextAgain[:], plainText) { + t.Errorf("#%d: got:%x want:%x", i, plainTextAgain, plainText) + } + } +} + +// TestFull performs the test specified in RFC 2144, App B.2. +// However, due to the length of time taken, it's disabled here and a more +// limited version is included, below. +func TestFull(t *testing.T) { + if testing.Short() { + // This is too slow for normal testing + return + } + + a, b := iterate(1000000) + + const expectedA = "eea9d0a249fd3ba6b3436fb89d6dca92" + const expectedB = "b2c95eb00c31ad7180ac05b8e83d696e" + + if hex.EncodeToString(a) != expectedA { + t.Errorf("a: got:%x want:%s", a, expectedA) + } + if hex.EncodeToString(b) != expectedB { + t.Errorf("b: got:%x want:%s", b, expectedB) + } +} + +func iterate(iterations int) ([]byte, []byte) { + const initValueHex = "0123456712345678234567893456789a" + + initValue, _ := hex.DecodeString(initValueHex) + + var a, b [16]byte + copy(a[:], initValue) + copy(b[:], initValue) + + for i := 0; i < iterations; i++ { + c, _ := NewCipher(b[:]) + c.Encrypt(a[:8], a[:8]) + c.Encrypt(a[8:], a[8:]) + c, _ = NewCipher(a[:]) + c.Encrypt(b[:8], b[:8]) + c.Encrypt(b[8:], b[8:]) + } + + return a[:], b[:] +} + +func TestLimited(t *testing.T) { + a, b := iterate(1000) + + const expectedA = "23f73b14b02a2ad7dfb9f2c35644798d" + const expectedB = "e5bf37eff14c456a40b21ce369370a9f" + + if hex.EncodeToString(a) != expectedA { + t.Errorf("a: got:%x want:%s", a, expectedA) + } + if hex.EncodeToString(b) != expectedB { + t.Errorf("b: got:%x want:%s", b, expectedB) + } +} diff --git a/vendor/golang.org/x/crypto/codereview.cfg b/vendor/golang.org/x/crypto/codereview.cfg new file mode 100644 index 0000000..3f8b14b --- /dev/null +++ b/vendor/golang.org/x/crypto/codereview.cfg @@ -0,0 +1 @@ +issuerepo: golang/go diff --git a/vendor/golang.org/x/crypto/curve25519/const_amd64.s b/vendor/golang.org/x/crypto/curve25519/const_amd64.s new file mode 100644 index 0000000..797f9b0 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/const_amd64.s @@ -0,0 +1,20 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +DATA ·REDMASK51(SB)/8, $0x0007FFFFFFFFFFFF +GLOBL ·REDMASK51(SB), 8, $8 + +DATA ·_121666_213(SB)/8, $996687872 +GLOBL ·_121666_213(SB), 8, $8 + +DATA ·_2P0(SB)/8, $0xFFFFFFFFFFFDA +GLOBL ·_2P0(SB), 8, $8 + +DATA ·_2P1234(SB)/8, $0xFFFFFFFFFFFFE +GLOBL ·_2P1234(SB), 8, $8 diff --git a/vendor/golang.org/x/crypto/curve25519/cswap_amd64.s b/vendor/golang.org/x/crypto/curve25519/cswap_amd64.s new file mode 100644 index 0000000..45484d1 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/cswap_amd64.s @@ -0,0 +1,88 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +// func cswap(inout *[5]uint64, v uint64) +TEXT ·cswap(SB),7,$0 + MOVQ inout+0(FP),DI + MOVQ v+8(FP),SI + + CMPQ SI,$1 + MOVQ 0(DI),SI + MOVQ 80(DI),DX + MOVQ 8(DI),CX + MOVQ 88(DI),R8 + MOVQ SI,R9 + CMOVQEQ DX,SI + CMOVQEQ R9,DX + MOVQ CX,R9 + CMOVQEQ R8,CX + CMOVQEQ R9,R8 + MOVQ SI,0(DI) + MOVQ DX,80(DI) + MOVQ CX,8(DI) + MOVQ R8,88(DI) + MOVQ 16(DI),SI + MOVQ 96(DI),DX + MOVQ 24(DI),CX + MOVQ 104(DI),R8 + MOVQ SI,R9 + CMOVQEQ DX,SI + CMOVQEQ R9,DX + MOVQ CX,R9 + CMOVQEQ R8,CX + CMOVQEQ R9,R8 + MOVQ SI,16(DI) + MOVQ DX,96(DI) + MOVQ CX,24(DI) + MOVQ R8,104(DI) + MOVQ 32(DI),SI + MOVQ 112(DI),DX + MOVQ 40(DI),CX + MOVQ 120(DI),R8 + MOVQ SI,R9 + CMOVQEQ DX,SI + CMOVQEQ R9,DX + MOVQ CX,R9 + CMOVQEQ R8,CX + CMOVQEQ R9,R8 + MOVQ SI,32(DI) + MOVQ DX,112(DI) + MOVQ CX,40(DI) + MOVQ R8,120(DI) + MOVQ 48(DI),SI + MOVQ 128(DI),DX + MOVQ 56(DI),CX + MOVQ 136(DI),R8 + MOVQ SI,R9 + CMOVQEQ DX,SI + CMOVQEQ R9,DX + MOVQ CX,R9 + CMOVQEQ R8,CX + CMOVQEQ R9,R8 + MOVQ SI,48(DI) + MOVQ DX,128(DI) + MOVQ CX,56(DI) + MOVQ R8,136(DI) + MOVQ 64(DI),SI + MOVQ 144(DI),DX + MOVQ 72(DI),CX + MOVQ 152(DI),R8 + MOVQ SI,R9 + CMOVQEQ DX,SI + CMOVQEQ R9,DX + MOVQ CX,R9 + CMOVQEQ R8,CX + CMOVQEQ R9,R8 + MOVQ SI,64(DI) + MOVQ DX,144(DI) + MOVQ CX,72(DI) + MOVQ R8,152(DI) + MOVQ DI,AX + MOVQ SI,DX + RET diff --git a/vendor/golang.org/x/crypto/curve25519/curve25519.go b/vendor/golang.org/x/crypto/curve25519/curve25519.go new file mode 100644 index 0000000..6918c47 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/curve25519.go @@ -0,0 +1,841 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// We have a implementation in amd64 assembly so this code is only run on +// non-amd64 platforms. The amd64 assembly does not support gccgo. +// +build !amd64 gccgo appengine + +package curve25519 + +// This code is a port of the public domain, "ref10" implementation of +// curve25519 from SUPERCOP 20130419 by D. J. Bernstein. + +// fieldElement represents an element of the field GF(2^255 - 19). An element +// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77 +// t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on +// context. +type fieldElement [10]int32 + +func feZero(fe *fieldElement) { + for i := range fe { + fe[i] = 0 + } +} + +func feOne(fe *fieldElement) { + feZero(fe) + fe[0] = 1 +} + +func feAdd(dst, a, b *fieldElement) { + for i := range dst { + dst[i] = a[i] + b[i] + } +} + +func feSub(dst, a, b *fieldElement) { + for i := range dst { + dst[i] = a[i] - b[i] + } +} + +func feCopy(dst, src *fieldElement) { + for i := range dst { + dst[i] = src[i] + } +} + +// feCSwap replaces (f,g) with (g,f) if b == 1; replaces (f,g) with (f,g) if b == 0. +// +// Preconditions: b in {0,1}. +func feCSwap(f, g *fieldElement, b int32) { + var x fieldElement + b = -b + for i := range x { + x[i] = b & (f[i] ^ g[i]) + } + + for i := range f { + f[i] ^= x[i] + } + for i := range g { + g[i] ^= x[i] + } +} + +// load3 reads a 24-bit, little-endian value from in. +func load3(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + return r +} + +// load4 reads a 32-bit, little-endian value from in. +func load4(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + r |= int64(in[3]) << 24 + return r +} + +func feFromBytes(dst *fieldElement, src *[32]byte) { + h0 := load4(src[:]) + h1 := load3(src[4:]) << 6 + h2 := load3(src[7:]) << 5 + h3 := load3(src[10:]) << 3 + h4 := load3(src[13:]) << 2 + h5 := load4(src[16:]) + h6 := load3(src[20:]) << 7 + h7 := load3(src[23:]) << 5 + h8 := load3(src[26:]) << 4 + h9 := load3(src[29:]) << 2 + + var carry [10]int64 + carry[9] = (h9 + 1<<24) >> 25 + h0 += carry[9] * 19 + h9 -= carry[9] << 25 + carry[1] = (h1 + 1<<24) >> 25 + h2 += carry[1] + h1 -= carry[1] << 25 + carry[3] = (h3 + 1<<24) >> 25 + h4 += carry[3] + h3 -= carry[3] << 25 + carry[5] = (h5 + 1<<24) >> 25 + h6 += carry[5] + h5 -= carry[5] << 25 + carry[7] = (h7 + 1<<24) >> 25 + h8 += carry[7] + h7 -= carry[7] << 25 + + carry[0] = (h0 + 1<<25) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + carry[2] = (h2 + 1<<25) >> 26 + h3 += carry[2] + h2 -= carry[2] << 26 + carry[4] = (h4 + 1<<25) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + carry[6] = (h6 + 1<<25) >> 26 + h7 += carry[6] + h6 -= carry[6] << 26 + carry[8] = (h8 + 1<<25) >> 26 + h9 += carry[8] + h8 -= carry[8] << 26 + + dst[0] = int32(h0) + dst[1] = int32(h1) + dst[2] = int32(h2) + dst[3] = int32(h3) + dst[4] = int32(h4) + dst[5] = int32(h5) + dst[6] = int32(h6) + dst[7] = int32(h7) + dst[8] = int32(h8) + dst[9] = int32(h9) +} + +// feToBytes marshals h to s. +// Preconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Write p=2^255-19; q=floor(h/p). +// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). +// +// Proof: +// Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. +// Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4. +// +// Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). +// Then 0> 25 + q = (h[0] + q) >> 26 + q = (h[1] + q) >> 25 + q = (h[2] + q) >> 26 + q = (h[3] + q) >> 25 + q = (h[4] + q) >> 26 + q = (h[5] + q) >> 25 + q = (h[6] + q) >> 26 + q = (h[7] + q) >> 25 + q = (h[8] + q) >> 26 + q = (h[9] + q) >> 25 + + // Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. + h[0] += 19 * q + // Goal: Output h-2^255 q, which is between 0 and 2^255-20. + + carry[0] = h[0] >> 26 + h[1] += carry[0] + h[0] -= carry[0] << 26 + carry[1] = h[1] >> 25 + h[2] += carry[1] + h[1] -= carry[1] << 25 + carry[2] = h[2] >> 26 + h[3] += carry[2] + h[2] -= carry[2] << 26 + carry[3] = h[3] >> 25 + h[4] += carry[3] + h[3] -= carry[3] << 25 + carry[4] = h[4] >> 26 + h[5] += carry[4] + h[4] -= carry[4] << 26 + carry[5] = h[5] >> 25 + h[6] += carry[5] + h[5] -= carry[5] << 25 + carry[6] = h[6] >> 26 + h[7] += carry[6] + h[6] -= carry[6] << 26 + carry[7] = h[7] >> 25 + h[8] += carry[7] + h[7] -= carry[7] << 25 + carry[8] = h[8] >> 26 + h[9] += carry[8] + h[8] -= carry[8] << 26 + carry[9] = h[9] >> 25 + h[9] -= carry[9] << 25 + // h10 = carry9 + + // Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20. + // Have h[0]+...+2^230 h[9] between 0 and 2^255-1; + // evidently 2^255 h10-2^255 q = 0. + // Goal: Output h[0]+...+2^230 h[9]. + + s[0] = byte(h[0] >> 0) + s[1] = byte(h[0] >> 8) + s[2] = byte(h[0] >> 16) + s[3] = byte((h[0] >> 24) | (h[1] << 2)) + s[4] = byte(h[1] >> 6) + s[5] = byte(h[1] >> 14) + s[6] = byte((h[1] >> 22) | (h[2] << 3)) + s[7] = byte(h[2] >> 5) + s[8] = byte(h[2] >> 13) + s[9] = byte((h[2] >> 21) | (h[3] << 5)) + s[10] = byte(h[3] >> 3) + s[11] = byte(h[3] >> 11) + s[12] = byte((h[3] >> 19) | (h[4] << 6)) + s[13] = byte(h[4] >> 2) + s[14] = byte(h[4] >> 10) + s[15] = byte(h[4] >> 18) + s[16] = byte(h[5] >> 0) + s[17] = byte(h[5] >> 8) + s[18] = byte(h[5] >> 16) + s[19] = byte((h[5] >> 24) | (h[6] << 1)) + s[20] = byte(h[6] >> 7) + s[21] = byte(h[6] >> 15) + s[22] = byte((h[6] >> 23) | (h[7] << 3)) + s[23] = byte(h[7] >> 5) + s[24] = byte(h[7] >> 13) + s[25] = byte((h[7] >> 21) | (h[8] << 4)) + s[26] = byte(h[8] >> 4) + s[27] = byte(h[8] >> 12) + s[28] = byte((h[8] >> 20) | (h[9] << 6)) + s[29] = byte(h[9] >> 2) + s[30] = byte(h[9] >> 10) + s[31] = byte(h[9] >> 18) +} + +// feMul calculates h = f * g +// Can overlap h with f or g. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Notes on implementation strategy: +// +// Using schoolbook multiplication. +// Karatsuba would save a little in some cost models. +// +// Most multiplications by 2 and 19 are 32-bit precomputations; +// cheaper than 64-bit postcomputations. +// +// There is one remaining multiplication by 19 in the carry chain; +// one *19 precomputation can be merged into this, +// but the resulting data flow is considerably less clean. +// +// There are 12 carries below. +// 10 of them are 2-way parallelizable and vectorizable. +// Can get away with 11 carries, but then data flow is much deeper. +// +// With tighter constraints on inputs can squeeze carries into int32. +func feMul(h, f, g *fieldElement) { + f0 := f[0] + f1 := f[1] + f2 := f[2] + f3 := f[3] + f4 := f[4] + f5 := f[5] + f6 := f[6] + f7 := f[7] + f8 := f[8] + f9 := f[9] + g0 := g[0] + g1 := g[1] + g2 := g[2] + g3 := g[3] + g4 := g[4] + g5 := g[5] + g6 := g[6] + g7 := g[7] + g8 := g[8] + g9 := g[9] + g1_19 := 19 * g1 // 1.4*2^29 + g2_19 := 19 * g2 // 1.4*2^30; still ok + g3_19 := 19 * g3 + g4_19 := 19 * g4 + g5_19 := 19 * g5 + g6_19 := 19 * g6 + g7_19 := 19 * g7 + g8_19 := 19 * g8 + g9_19 := 19 * g9 + f1_2 := 2 * f1 + f3_2 := 2 * f3 + f5_2 := 2 * f5 + f7_2 := 2 * f7 + f9_2 := 2 * f9 + f0g0 := int64(f0) * int64(g0) + f0g1 := int64(f0) * int64(g1) + f0g2 := int64(f0) * int64(g2) + f0g3 := int64(f0) * int64(g3) + f0g4 := int64(f0) * int64(g4) + f0g5 := int64(f0) * int64(g5) + f0g6 := int64(f0) * int64(g6) + f0g7 := int64(f0) * int64(g7) + f0g8 := int64(f0) * int64(g8) + f0g9 := int64(f0) * int64(g9) + f1g0 := int64(f1) * int64(g0) + f1g1_2 := int64(f1_2) * int64(g1) + f1g2 := int64(f1) * int64(g2) + f1g3_2 := int64(f1_2) * int64(g3) + f1g4 := int64(f1) * int64(g4) + f1g5_2 := int64(f1_2) * int64(g5) + f1g6 := int64(f1) * int64(g6) + f1g7_2 := int64(f1_2) * int64(g7) + f1g8 := int64(f1) * int64(g8) + f1g9_38 := int64(f1_2) * int64(g9_19) + f2g0 := int64(f2) * int64(g0) + f2g1 := int64(f2) * int64(g1) + f2g2 := int64(f2) * int64(g2) + f2g3 := int64(f2) * int64(g3) + f2g4 := int64(f2) * int64(g4) + f2g5 := int64(f2) * int64(g5) + f2g6 := int64(f2) * int64(g6) + f2g7 := int64(f2) * int64(g7) + f2g8_19 := int64(f2) * int64(g8_19) + f2g9_19 := int64(f2) * int64(g9_19) + f3g0 := int64(f3) * int64(g0) + f3g1_2 := int64(f3_2) * int64(g1) + f3g2 := int64(f3) * int64(g2) + f3g3_2 := int64(f3_2) * int64(g3) + f3g4 := int64(f3) * int64(g4) + f3g5_2 := int64(f3_2) * int64(g5) + f3g6 := int64(f3) * int64(g6) + f3g7_38 := int64(f3_2) * int64(g7_19) + f3g8_19 := int64(f3) * int64(g8_19) + f3g9_38 := int64(f3_2) * int64(g9_19) + f4g0 := int64(f4) * int64(g0) + f4g1 := int64(f4) * int64(g1) + f4g2 := int64(f4) * int64(g2) + f4g3 := int64(f4) * int64(g3) + f4g4 := int64(f4) * int64(g4) + f4g5 := int64(f4) * int64(g5) + f4g6_19 := int64(f4) * int64(g6_19) + f4g7_19 := int64(f4) * int64(g7_19) + f4g8_19 := int64(f4) * int64(g8_19) + f4g9_19 := int64(f4) * int64(g9_19) + f5g0 := int64(f5) * int64(g0) + f5g1_2 := int64(f5_2) * int64(g1) + f5g2 := int64(f5) * int64(g2) + f5g3_2 := int64(f5_2) * int64(g3) + f5g4 := int64(f5) * int64(g4) + f5g5_38 := int64(f5_2) * int64(g5_19) + f5g6_19 := int64(f5) * int64(g6_19) + f5g7_38 := int64(f5_2) * int64(g7_19) + f5g8_19 := int64(f5) * int64(g8_19) + f5g9_38 := int64(f5_2) * int64(g9_19) + f6g0 := int64(f6) * int64(g0) + f6g1 := int64(f6) * int64(g1) + f6g2 := int64(f6) * int64(g2) + f6g3 := int64(f6) * int64(g3) + f6g4_19 := int64(f6) * int64(g4_19) + f6g5_19 := int64(f6) * int64(g5_19) + f6g6_19 := int64(f6) * int64(g6_19) + f6g7_19 := int64(f6) * int64(g7_19) + f6g8_19 := int64(f6) * int64(g8_19) + f6g9_19 := int64(f6) * int64(g9_19) + f7g0 := int64(f7) * int64(g0) + f7g1_2 := int64(f7_2) * int64(g1) + f7g2 := int64(f7) * int64(g2) + f7g3_38 := int64(f7_2) * int64(g3_19) + f7g4_19 := int64(f7) * int64(g4_19) + f7g5_38 := int64(f7_2) * int64(g5_19) + f7g6_19 := int64(f7) * int64(g6_19) + f7g7_38 := int64(f7_2) * int64(g7_19) + f7g8_19 := int64(f7) * int64(g8_19) + f7g9_38 := int64(f7_2) * int64(g9_19) + f8g0 := int64(f8) * int64(g0) + f8g1 := int64(f8) * int64(g1) + f8g2_19 := int64(f8) * int64(g2_19) + f8g3_19 := int64(f8) * int64(g3_19) + f8g4_19 := int64(f8) * int64(g4_19) + f8g5_19 := int64(f8) * int64(g5_19) + f8g6_19 := int64(f8) * int64(g6_19) + f8g7_19 := int64(f8) * int64(g7_19) + f8g8_19 := int64(f8) * int64(g8_19) + f8g9_19 := int64(f8) * int64(g9_19) + f9g0 := int64(f9) * int64(g0) + f9g1_38 := int64(f9_2) * int64(g1_19) + f9g2_19 := int64(f9) * int64(g2_19) + f9g3_38 := int64(f9_2) * int64(g3_19) + f9g4_19 := int64(f9) * int64(g4_19) + f9g5_38 := int64(f9_2) * int64(g5_19) + f9g6_19 := int64(f9) * int64(g6_19) + f9g7_38 := int64(f9_2) * int64(g7_19) + f9g8_19 := int64(f9) * int64(g8_19) + f9g9_38 := int64(f9_2) * int64(g9_19) + h0 := f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38 + h1 := f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19 + h2 := f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38 + h3 := f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19 + h4 := f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38 + h5 := f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19 + h6 := f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38 + h7 := f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19 + h8 := f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38 + h9 := f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0 + var carry [10]int64 + + // |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38)) + // i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8 + // |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19)) + // i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + // |h0| <= 2^25 + // |h4| <= 2^25 + // |h1| <= 1.51*2^58 + // |h5| <= 1.51*2^58 + + carry[1] = (h1 + (1 << 24)) >> 25 + h2 += carry[1] + h1 -= carry[1] << 25 + carry[5] = (h5 + (1 << 24)) >> 25 + h6 += carry[5] + h5 -= carry[5] << 25 + // |h1| <= 2^24; from now on fits into int32 + // |h5| <= 2^24; from now on fits into int32 + // |h2| <= 1.21*2^59 + // |h6| <= 1.21*2^59 + + carry[2] = (h2 + (1 << 25)) >> 26 + h3 += carry[2] + h2 -= carry[2] << 26 + carry[6] = (h6 + (1 << 25)) >> 26 + h7 += carry[6] + h6 -= carry[6] << 26 + // |h2| <= 2^25; from now on fits into int32 unchanged + // |h6| <= 2^25; from now on fits into int32 unchanged + // |h3| <= 1.51*2^58 + // |h7| <= 1.51*2^58 + + carry[3] = (h3 + (1 << 24)) >> 25 + h4 += carry[3] + h3 -= carry[3] << 25 + carry[7] = (h7 + (1 << 24)) >> 25 + h8 += carry[7] + h7 -= carry[7] << 25 + // |h3| <= 2^24; from now on fits into int32 unchanged + // |h7| <= 2^24; from now on fits into int32 unchanged + // |h4| <= 1.52*2^33 + // |h8| <= 1.52*2^33 + + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + carry[8] = (h8 + (1 << 25)) >> 26 + h9 += carry[8] + h8 -= carry[8] << 26 + // |h4| <= 2^25; from now on fits into int32 unchanged + // |h8| <= 2^25; from now on fits into int32 unchanged + // |h5| <= 1.01*2^24 + // |h9| <= 1.51*2^58 + + carry[9] = (h9 + (1 << 24)) >> 25 + h0 += carry[9] * 19 + h9 -= carry[9] << 25 + // |h9| <= 2^24; from now on fits into int32 unchanged + // |h0| <= 1.8*2^37 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + // |h0| <= 2^25; from now on fits into int32 unchanged + // |h1| <= 1.01*2^24 + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// feSquare calculates h = f*f. Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func feSquare(h, f *fieldElement) { + f0 := f[0] + f1 := f[1] + f2 := f[2] + f3 := f[3] + f4 := f[4] + f5 := f[5] + f6 := f[6] + f7 := f[7] + f8 := f[8] + f9 := f[9] + f0_2 := 2 * f0 + f1_2 := 2 * f1 + f2_2 := 2 * f2 + f3_2 := 2 * f3 + f4_2 := 2 * f4 + f5_2 := 2 * f5 + f6_2 := 2 * f6 + f7_2 := 2 * f7 + f5_38 := 38 * f5 // 1.31*2^30 + f6_19 := 19 * f6 // 1.31*2^30 + f7_38 := 38 * f7 // 1.31*2^30 + f8_19 := 19 * f8 // 1.31*2^30 + f9_38 := 38 * f9 // 1.31*2^30 + f0f0 := int64(f0) * int64(f0) + f0f1_2 := int64(f0_2) * int64(f1) + f0f2_2 := int64(f0_2) * int64(f2) + f0f3_2 := int64(f0_2) * int64(f3) + f0f4_2 := int64(f0_2) * int64(f4) + f0f5_2 := int64(f0_2) * int64(f5) + f0f6_2 := int64(f0_2) * int64(f6) + f0f7_2 := int64(f0_2) * int64(f7) + f0f8_2 := int64(f0_2) * int64(f8) + f0f9_2 := int64(f0_2) * int64(f9) + f1f1_2 := int64(f1_2) * int64(f1) + f1f2_2 := int64(f1_2) * int64(f2) + f1f3_4 := int64(f1_2) * int64(f3_2) + f1f4_2 := int64(f1_2) * int64(f4) + f1f5_4 := int64(f1_2) * int64(f5_2) + f1f6_2 := int64(f1_2) * int64(f6) + f1f7_4 := int64(f1_2) * int64(f7_2) + f1f8_2 := int64(f1_2) * int64(f8) + f1f9_76 := int64(f1_2) * int64(f9_38) + f2f2 := int64(f2) * int64(f2) + f2f3_2 := int64(f2_2) * int64(f3) + f2f4_2 := int64(f2_2) * int64(f4) + f2f5_2 := int64(f2_2) * int64(f5) + f2f6_2 := int64(f2_2) * int64(f6) + f2f7_2 := int64(f2_2) * int64(f7) + f2f8_38 := int64(f2_2) * int64(f8_19) + f2f9_38 := int64(f2) * int64(f9_38) + f3f3_2 := int64(f3_2) * int64(f3) + f3f4_2 := int64(f3_2) * int64(f4) + f3f5_4 := int64(f3_2) * int64(f5_2) + f3f6_2 := int64(f3_2) * int64(f6) + f3f7_76 := int64(f3_2) * int64(f7_38) + f3f8_38 := int64(f3_2) * int64(f8_19) + f3f9_76 := int64(f3_2) * int64(f9_38) + f4f4 := int64(f4) * int64(f4) + f4f5_2 := int64(f4_2) * int64(f5) + f4f6_38 := int64(f4_2) * int64(f6_19) + f4f7_38 := int64(f4) * int64(f7_38) + f4f8_38 := int64(f4_2) * int64(f8_19) + f4f9_38 := int64(f4) * int64(f9_38) + f5f5_38 := int64(f5) * int64(f5_38) + f5f6_38 := int64(f5_2) * int64(f6_19) + f5f7_76 := int64(f5_2) * int64(f7_38) + f5f8_38 := int64(f5_2) * int64(f8_19) + f5f9_76 := int64(f5_2) * int64(f9_38) + f6f6_19 := int64(f6) * int64(f6_19) + f6f7_38 := int64(f6) * int64(f7_38) + f6f8_38 := int64(f6_2) * int64(f8_19) + f6f9_38 := int64(f6) * int64(f9_38) + f7f7_38 := int64(f7) * int64(f7_38) + f7f8_38 := int64(f7_2) * int64(f8_19) + f7f9_76 := int64(f7_2) * int64(f9_38) + f8f8_19 := int64(f8) * int64(f8_19) + f8f9_38 := int64(f8) * int64(f9_38) + f9f9_38 := int64(f9) * int64(f9_38) + h0 := f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38 + h1 := f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38 + h2 := f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19 + h3 := f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38 + h4 := f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38 + h5 := f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38 + h6 := f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19 + h7 := f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38 + h8 := f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38 + h9 := f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2 + var carry [10]int64 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + + carry[1] = (h1 + (1 << 24)) >> 25 + h2 += carry[1] + h1 -= carry[1] << 25 + carry[5] = (h5 + (1 << 24)) >> 25 + h6 += carry[5] + h5 -= carry[5] << 25 + + carry[2] = (h2 + (1 << 25)) >> 26 + h3 += carry[2] + h2 -= carry[2] << 26 + carry[6] = (h6 + (1 << 25)) >> 26 + h7 += carry[6] + h6 -= carry[6] << 26 + + carry[3] = (h3 + (1 << 24)) >> 25 + h4 += carry[3] + h3 -= carry[3] << 25 + carry[7] = (h7 + (1 << 24)) >> 25 + h8 += carry[7] + h7 -= carry[7] << 25 + + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + carry[8] = (h8 + (1 << 25)) >> 26 + h9 += carry[8] + h8 -= carry[8] << 26 + + carry[9] = (h9 + (1 << 24)) >> 25 + h0 += carry[9] * 19 + h9 -= carry[9] << 25 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// feMul121666 calculates h = f * 121666. Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func feMul121666(h, f *fieldElement) { + h0 := int64(f[0]) * 121666 + h1 := int64(f[1]) * 121666 + h2 := int64(f[2]) * 121666 + h3 := int64(f[3]) * 121666 + h4 := int64(f[4]) * 121666 + h5 := int64(f[5]) * 121666 + h6 := int64(f[6]) * 121666 + h7 := int64(f[7]) * 121666 + h8 := int64(f[8]) * 121666 + h9 := int64(f[9]) * 121666 + var carry [10]int64 + + carry[9] = (h9 + (1 << 24)) >> 25 + h0 += carry[9] * 19 + h9 -= carry[9] << 25 + carry[1] = (h1 + (1 << 24)) >> 25 + h2 += carry[1] + h1 -= carry[1] << 25 + carry[3] = (h3 + (1 << 24)) >> 25 + h4 += carry[3] + h3 -= carry[3] << 25 + carry[5] = (h5 + (1 << 24)) >> 25 + h6 += carry[5] + h5 -= carry[5] << 25 + carry[7] = (h7 + (1 << 24)) >> 25 + h8 += carry[7] + h7 -= carry[7] << 25 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + carry[2] = (h2 + (1 << 25)) >> 26 + h3 += carry[2] + h2 -= carry[2] << 26 + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + carry[6] = (h6 + (1 << 25)) >> 26 + h7 += carry[6] + h6 -= carry[6] << 26 + carry[8] = (h8 + (1 << 25)) >> 26 + h9 += carry[8] + h8 -= carry[8] << 26 + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// feInvert sets out = z^-1. +func feInvert(out, z *fieldElement) { + var t0, t1, t2, t3 fieldElement + var i int + + feSquare(&t0, z) + for i = 1; i < 1; i++ { + feSquare(&t0, &t0) + } + feSquare(&t1, &t0) + for i = 1; i < 2; i++ { + feSquare(&t1, &t1) + } + feMul(&t1, z, &t1) + feMul(&t0, &t0, &t1) + feSquare(&t2, &t0) + for i = 1; i < 1; i++ { + feSquare(&t2, &t2) + } + feMul(&t1, &t1, &t2) + feSquare(&t2, &t1) + for i = 1; i < 5; i++ { + feSquare(&t2, &t2) + } + feMul(&t1, &t2, &t1) + feSquare(&t2, &t1) + for i = 1; i < 10; i++ { + feSquare(&t2, &t2) + } + feMul(&t2, &t2, &t1) + feSquare(&t3, &t2) + for i = 1; i < 20; i++ { + feSquare(&t3, &t3) + } + feMul(&t2, &t3, &t2) + feSquare(&t2, &t2) + for i = 1; i < 10; i++ { + feSquare(&t2, &t2) + } + feMul(&t1, &t2, &t1) + feSquare(&t2, &t1) + for i = 1; i < 50; i++ { + feSquare(&t2, &t2) + } + feMul(&t2, &t2, &t1) + feSquare(&t3, &t2) + for i = 1; i < 100; i++ { + feSquare(&t3, &t3) + } + feMul(&t2, &t3, &t2) + feSquare(&t2, &t2) + for i = 1; i < 50; i++ { + feSquare(&t2, &t2) + } + feMul(&t1, &t2, &t1) + feSquare(&t1, &t1) + for i = 1; i < 5; i++ { + feSquare(&t1, &t1) + } + feMul(out, &t1, &t0) +} + +func scalarMult(out, in, base *[32]byte) { + var e [32]byte + + copy(e[:], in[:]) + e[0] &= 248 + e[31] &= 127 + e[31] |= 64 + + var x1, x2, z2, x3, z3, tmp0, tmp1 fieldElement + feFromBytes(&x1, base) + feOne(&x2) + feCopy(&x3, &x1) + feOne(&z3) + + swap := int32(0) + for pos := 254; pos >= 0; pos-- { + b := e[pos/8] >> uint(pos&7) + b &= 1 + swap ^= int32(b) + feCSwap(&x2, &x3, swap) + feCSwap(&z2, &z3, swap) + swap = int32(b) + + feSub(&tmp0, &x3, &z3) + feSub(&tmp1, &x2, &z2) + feAdd(&x2, &x2, &z2) + feAdd(&z2, &x3, &z3) + feMul(&z3, &tmp0, &x2) + feMul(&z2, &z2, &tmp1) + feSquare(&tmp0, &tmp1) + feSquare(&tmp1, &x2) + feAdd(&x3, &z3, &z2) + feSub(&z2, &z3, &z2) + feMul(&x2, &tmp1, &tmp0) + feSub(&tmp1, &tmp1, &tmp0) + feSquare(&z2, &z2) + feMul121666(&z3, &tmp1) + feSquare(&x3, &x3) + feAdd(&tmp0, &tmp0, &z3) + feMul(&z3, &x1, &z2) + feMul(&z2, &tmp1, &tmp0) + } + + feCSwap(&x2, &x3, swap) + feCSwap(&z2, &z3, swap) + + feInvert(&z2, &z2) + feMul(&x2, &x2, &z2) + feToBytes(out, &x2) +} diff --git a/vendor/golang.org/x/crypto/curve25519/curve25519_test.go b/vendor/golang.org/x/crypto/curve25519/curve25519_test.go new file mode 100644 index 0000000..14b0ee8 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/curve25519_test.go @@ -0,0 +1,29 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package curve25519 + +import ( + "fmt" + "testing" +) + +const expectedHex = "89161fde887b2b53de549af483940106ecc114d6982daa98256de23bdf77661a" + +func TestBaseScalarMult(t *testing.T) { + var a, b [32]byte + in := &a + out := &b + a[0] = 1 + + for i := 0; i < 200; i++ { + ScalarBaseMult(out, in) + in, out = out, in + } + + result := fmt.Sprintf("%x", in[:]) + if result != expectedHex { + t.Errorf("incorrect result: got %s, want %s", result, expectedHex) + } +} diff --git a/vendor/golang.org/x/crypto/curve25519/doc.go b/vendor/golang.org/x/crypto/curve25519/doc.go new file mode 100644 index 0000000..ebeea3c --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/doc.go @@ -0,0 +1,23 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package curve25519 provides an implementation of scalar multiplication on +// the elliptic curve known as curve25519. See http://cr.yp.to/ecdh.html +package curve25519 // import "golang.org/x/crypto/curve25519" + +// basePoint is the x coordinate of the generator of the curve. +var basePoint = [32]byte{9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +// ScalarMult sets dst to the product in*base where dst and base are the x +// coordinates of group points and all values are in little-endian form. +func ScalarMult(dst, in, base *[32]byte) { + scalarMult(dst, in, base) +} + +// ScalarBaseMult sets dst to the product in*base where dst and base are the x +// coordinates of group points, base is the standard generator and all values +// are in little-endian form. +func ScalarBaseMult(dst, in *[32]byte) { + ScalarMult(dst, in, &basePoint) +} diff --git a/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s b/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s new file mode 100644 index 0000000..37599fa --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s @@ -0,0 +1,94 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +// func freeze(inout *[5]uint64) +TEXT ·freeze(SB),7,$96-8 + MOVQ inout+0(FP), DI + + MOVQ SP,R11 + MOVQ $31,CX + NOTQ CX + ANDQ CX,SP + ADDQ $32,SP + + MOVQ R11,0(SP) + MOVQ R12,8(SP) + MOVQ R13,16(SP) + MOVQ R14,24(SP) + MOVQ R15,32(SP) + MOVQ BX,40(SP) + MOVQ BP,48(SP) + MOVQ 0(DI),SI + MOVQ 8(DI),DX + MOVQ 16(DI),CX + MOVQ 24(DI),R8 + MOVQ 32(DI),R9 + MOVQ ·REDMASK51(SB),AX + MOVQ AX,R10 + SUBQ $18,R10 + MOVQ $3,R11 +REDUCELOOP: + MOVQ SI,R12 + SHRQ $51,R12 + ANDQ AX,SI + ADDQ R12,DX + MOVQ DX,R12 + SHRQ $51,R12 + ANDQ AX,DX + ADDQ R12,CX + MOVQ CX,R12 + SHRQ $51,R12 + ANDQ AX,CX + ADDQ R12,R8 + MOVQ R8,R12 + SHRQ $51,R12 + ANDQ AX,R8 + ADDQ R12,R9 + MOVQ R9,R12 + SHRQ $51,R12 + ANDQ AX,R9 + IMUL3Q $19,R12,R12 + ADDQ R12,SI + SUBQ $1,R11 + JA REDUCELOOP + MOVQ $1,R12 + CMPQ R10,SI + CMOVQLT R11,R12 + CMPQ AX,DX + CMOVQNE R11,R12 + CMPQ AX,CX + CMOVQNE R11,R12 + CMPQ AX,R8 + CMOVQNE R11,R12 + CMPQ AX,R9 + CMOVQNE R11,R12 + NEGQ R12 + ANDQ R12,AX + ANDQ R12,R10 + SUBQ R10,SI + SUBQ AX,DX + SUBQ AX,CX + SUBQ AX,R8 + SUBQ AX,R9 + MOVQ SI,0(DI) + MOVQ DX,8(DI) + MOVQ CX,16(DI) + MOVQ R8,24(DI) + MOVQ R9,32(DI) + MOVQ 0(SP),R11 + MOVQ 8(SP),R12 + MOVQ 16(SP),R13 + MOVQ 24(SP),R14 + MOVQ 32(SP),R15 + MOVQ 40(SP),BX + MOVQ 48(SP),BP + MOVQ R11,SP + MOVQ DI,AX + MOVQ SI,DX + RET diff --git a/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s b/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s new file mode 100644 index 0000000..3949f9c --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s @@ -0,0 +1,1398 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +// func ladderstep(inout *[5][5]uint64) +TEXT ·ladderstep(SB),0,$384-8 + MOVQ inout+0(FP),DI + + MOVQ SP,R11 + MOVQ $31,CX + NOTQ CX + ANDQ CX,SP + ADDQ $32,SP + + MOVQ R11,0(SP) + MOVQ R12,8(SP) + MOVQ R13,16(SP) + MOVQ R14,24(SP) + MOVQ R15,32(SP) + MOVQ BX,40(SP) + MOVQ BP,48(SP) + MOVQ 40(DI),SI + MOVQ 48(DI),DX + MOVQ 56(DI),CX + MOVQ 64(DI),R8 + MOVQ 72(DI),R9 + MOVQ SI,AX + MOVQ DX,R10 + MOVQ CX,R11 + MOVQ R8,R12 + MOVQ R9,R13 + ADDQ ·_2P0(SB),AX + ADDQ ·_2P1234(SB),R10 + ADDQ ·_2P1234(SB),R11 + ADDQ ·_2P1234(SB),R12 + ADDQ ·_2P1234(SB),R13 + ADDQ 80(DI),SI + ADDQ 88(DI),DX + ADDQ 96(DI),CX + ADDQ 104(DI),R8 + ADDQ 112(DI),R9 + SUBQ 80(DI),AX + SUBQ 88(DI),R10 + SUBQ 96(DI),R11 + SUBQ 104(DI),R12 + SUBQ 112(DI),R13 + MOVQ SI,56(SP) + MOVQ DX,64(SP) + MOVQ CX,72(SP) + MOVQ R8,80(SP) + MOVQ R9,88(SP) + MOVQ AX,96(SP) + MOVQ R10,104(SP) + MOVQ R11,112(SP) + MOVQ R12,120(SP) + MOVQ R13,128(SP) + MOVQ 96(SP),AX + MULQ 96(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 96(SP),AX + SHLQ $1,AX + MULQ 104(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 96(SP),AX + SHLQ $1,AX + MULQ 112(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 96(SP),AX + SHLQ $1,AX + MULQ 120(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 96(SP),AX + SHLQ $1,AX + MULQ 128(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 104(SP),AX + MULQ 104(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 104(SP),AX + SHLQ $1,AX + MULQ 112(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 104(SP),AX + SHLQ $1,AX + MULQ 120(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 104(SP),DX + IMUL3Q $38,DX,AX + MULQ 128(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 112(SP),AX + MULQ 112(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 112(SP),DX + IMUL3Q $38,DX,AX + MULQ 120(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 112(SP),DX + IMUL3Q $38,DX,AX + MULQ 128(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 120(SP),DX + IMUL3Q $19,DX,AX + MULQ 120(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 120(SP),DX + IMUL3Q $38,DX,AX + MULQ 128(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 128(SP),DX + IMUL3Q $19,DX,AX + MULQ 128(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ ·REDMASK51(SB),DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + ANDQ DX,SI + MOVQ CX,R8 + SHRQ $51,CX + ADDQ R10,CX + ANDQ DX,R8 + MOVQ CX,R9 + SHRQ $51,CX + ADDQ R12,CX + ANDQ DX,R9 + MOVQ CX,AX + SHRQ $51,CX + ADDQ R14,CX + ANDQ DX,AX + MOVQ CX,R10 + SHRQ $51,CX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,136(SP) + MOVQ R8,144(SP) + MOVQ R9,152(SP) + MOVQ AX,160(SP) + MOVQ R10,168(SP) + MOVQ 56(SP),AX + MULQ 56(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 56(SP),AX + SHLQ $1,AX + MULQ 64(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 56(SP),AX + SHLQ $1,AX + MULQ 72(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 56(SP),AX + SHLQ $1,AX + MULQ 80(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 56(SP),AX + SHLQ $1,AX + MULQ 88(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 64(SP),AX + MULQ 64(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 64(SP),AX + SHLQ $1,AX + MULQ 72(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 64(SP),AX + SHLQ $1,AX + MULQ 80(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 64(SP),DX + IMUL3Q $38,DX,AX + MULQ 88(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 72(SP),AX + MULQ 72(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 72(SP),DX + IMUL3Q $38,DX,AX + MULQ 80(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 72(SP),DX + IMUL3Q $38,DX,AX + MULQ 88(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 80(SP),DX + IMUL3Q $19,DX,AX + MULQ 80(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 80(SP),DX + IMUL3Q $38,DX,AX + MULQ 88(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 88(SP),DX + IMUL3Q $19,DX,AX + MULQ 88(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ ·REDMASK51(SB),DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + ANDQ DX,SI + MOVQ CX,R8 + SHRQ $51,CX + ADDQ R10,CX + ANDQ DX,R8 + MOVQ CX,R9 + SHRQ $51,CX + ADDQ R12,CX + ANDQ DX,R9 + MOVQ CX,AX + SHRQ $51,CX + ADDQ R14,CX + ANDQ DX,AX + MOVQ CX,R10 + SHRQ $51,CX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,176(SP) + MOVQ R8,184(SP) + MOVQ R9,192(SP) + MOVQ AX,200(SP) + MOVQ R10,208(SP) + MOVQ SI,SI + MOVQ R8,DX + MOVQ R9,CX + MOVQ AX,R8 + MOVQ R10,R9 + ADDQ ·_2P0(SB),SI + ADDQ ·_2P1234(SB),DX + ADDQ ·_2P1234(SB),CX + ADDQ ·_2P1234(SB),R8 + ADDQ ·_2P1234(SB),R9 + SUBQ 136(SP),SI + SUBQ 144(SP),DX + SUBQ 152(SP),CX + SUBQ 160(SP),R8 + SUBQ 168(SP),R9 + MOVQ SI,216(SP) + MOVQ DX,224(SP) + MOVQ CX,232(SP) + MOVQ R8,240(SP) + MOVQ R9,248(SP) + MOVQ 120(DI),SI + MOVQ 128(DI),DX + MOVQ 136(DI),CX + MOVQ 144(DI),R8 + MOVQ 152(DI),R9 + MOVQ SI,AX + MOVQ DX,R10 + MOVQ CX,R11 + MOVQ R8,R12 + MOVQ R9,R13 + ADDQ ·_2P0(SB),AX + ADDQ ·_2P1234(SB),R10 + ADDQ ·_2P1234(SB),R11 + ADDQ ·_2P1234(SB),R12 + ADDQ ·_2P1234(SB),R13 + ADDQ 160(DI),SI + ADDQ 168(DI),DX + ADDQ 176(DI),CX + ADDQ 184(DI),R8 + ADDQ 192(DI),R9 + SUBQ 160(DI),AX + SUBQ 168(DI),R10 + SUBQ 176(DI),R11 + SUBQ 184(DI),R12 + SUBQ 192(DI),R13 + MOVQ SI,256(SP) + MOVQ DX,264(SP) + MOVQ CX,272(SP) + MOVQ R8,280(SP) + MOVQ R9,288(SP) + MOVQ AX,296(SP) + MOVQ R10,304(SP) + MOVQ R11,312(SP) + MOVQ R12,320(SP) + MOVQ R13,328(SP) + MOVQ 280(SP),SI + IMUL3Q $19,SI,AX + MOVQ AX,336(SP) + MULQ 112(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 288(SP),DX + IMUL3Q $19,DX,AX + MOVQ AX,344(SP) + MULQ 104(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 256(SP),AX + MULQ 96(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 256(SP),AX + MULQ 104(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 256(SP),AX + MULQ 112(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 256(SP),AX + MULQ 120(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 256(SP),AX + MULQ 128(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 264(SP),AX + MULQ 96(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 264(SP),AX + MULQ 104(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 264(SP),AX + MULQ 112(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 264(SP),AX + MULQ 120(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 264(SP),DX + IMUL3Q $19,DX,AX + MULQ 128(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 272(SP),AX + MULQ 96(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 272(SP),AX + MULQ 104(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 272(SP),AX + MULQ 112(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 272(SP),DX + IMUL3Q $19,DX,AX + MULQ 120(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 272(SP),DX + IMUL3Q $19,DX,AX + MULQ 128(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 280(SP),AX + MULQ 96(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 280(SP),AX + MULQ 104(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 336(SP),AX + MULQ 120(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 336(SP),AX + MULQ 128(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 288(SP),AX + MULQ 96(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 344(SP),AX + MULQ 112(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 344(SP),AX + MULQ 120(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 344(SP),AX + MULQ 128(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ ·REDMASK51(SB),DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,96(SP) + MOVQ R8,104(SP) + MOVQ R9,112(SP) + MOVQ AX,120(SP) + MOVQ R10,128(SP) + MOVQ 320(SP),SI + IMUL3Q $19,SI,AX + MOVQ AX,256(SP) + MULQ 72(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 328(SP),DX + IMUL3Q $19,DX,AX + MOVQ AX,264(SP) + MULQ 64(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 296(SP),AX + MULQ 56(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 296(SP),AX + MULQ 64(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 296(SP),AX + MULQ 72(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 296(SP),AX + MULQ 80(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 296(SP),AX + MULQ 88(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 304(SP),AX + MULQ 56(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 304(SP),AX + MULQ 64(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 304(SP),AX + MULQ 72(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 304(SP),AX + MULQ 80(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 304(SP),DX + IMUL3Q $19,DX,AX + MULQ 88(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 312(SP),AX + MULQ 56(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 312(SP),AX + MULQ 64(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 312(SP),AX + MULQ 72(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 312(SP),DX + IMUL3Q $19,DX,AX + MULQ 80(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 312(SP),DX + IMUL3Q $19,DX,AX + MULQ 88(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 320(SP),AX + MULQ 56(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 320(SP),AX + MULQ 64(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 256(SP),AX + MULQ 80(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 256(SP),AX + MULQ 88(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 328(SP),AX + MULQ 56(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 264(SP),AX + MULQ 72(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 264(SP),AX + MULQ 80(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 264(SP),AX + MULQ 88(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ ·REDMASK51(SB),DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,DX + MOVQ R8,CX + MOVQ R9,R11 + MOVQ AX,R12 + MOVQ R10,R13 + ADDQ ·_2P0(SB),DX + ADDQ ·_2P1234(SB),CX + ADDQ ·_2P1234(SB),R11 + ADDQ ·_2P1234(SB),R12 + ADDQ ·_2P1234(SB),R13 + ADDQ 96(SP),SI + ADDQ 104(SP),R8 + ADDQ 112(SP),R9 + ADDQ 120(SP),AX + ADDQ 128(SP),R10 + SUBQ 96(SP),DX + SUBQ 104(SP),CX + SUBQ 112(SP),R11 + SUBQ 120(SP),R12 + SUBQ 128(SP),R13 + MOVQ SI,120(DI) + MOVQ R8,128(DI) + MOVQ R9,136(DI) + MOVQ AX,144(DI) + MOVQ R10,152(DI) + MOVQ DX,160(DI) + MOVQ CX,168(DI) + MOVQ R11,176(DI) + MOVQ R12,184(DI) + MOVQ R13,192(DI) + MOVQ 120(DI),AX + MULQ 120(DI) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 120(DI),AX + SHLQ $1,AX + MULQ 128(DI) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 120(DI),AX + SHLQ $1,AX + MULQ 136(DI) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 120(DI),AX + SHLQ $1,AX + MULQ 144(DI) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 120(DI),AX + SHLQ $1,AX + MULQ 152(DI) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 128(DI),AX + MULQ 128(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 128(DI),AX + SHLQ $1,AX + MULQ 136(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 128(DI),AX + SHLQ $1,AX + MULQ 144(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 128(DI),DX + IMUL3Q $38,DX,AX + MULQ 152(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 136(DI),AX + MULQ 136(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 136(DI),DX + IMUL3Q $38,DX,AX + MULQ 144(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 136(DI),DX + IMUL3Q $38,DX,AX + MULQ 152(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 144(DI),DX + IMUL3Q $19,DX,AX + MULQ 144(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 144(DI),DX + IMUL3Q $38,DX,AX + MULQ 152(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 152(DI),DX + IMUL3Q $19,DX,AX + MULQ 152(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ ·REDMASK51(SB),DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + ANDQ DX,SI + MOVQ CX,R8 + SHRQ $51,CX + ADDQ R10,CX + ANDQ DX,R8 + MOVQ CX,R9 + SHRQ $51,CX + ADDQ R12,CX + ANDQ DX,R9 + MOVQ CX,AX + SHRQ $51,CX + ADDQ R14,CX + ANDQ DX,AX + MOVQ CX,R10 + SHRQ $51,CX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,120(DI) + MOVQ R8,128(DI) + MOVQ R9,136(DI) + MOVQ AX,144(DI) + MOVQ R10,152(DI) + MOVQ 160(DI),AX + MULQ 160(DI) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 160(DI),AX + SHLQ $1,AX + MULQ 168(DI) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 160(DI),AX + SHLQ $1,AX + MULQ 176(DI) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 160(DI),AX + SHLQ $1,AX + MULQ 184(DI) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 160(DI),AX + SHLQ $1,AX + MULQ 192(DI) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 168(DI),AX + MULQ 168(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 168(DI),AX + SHLQ $1,AX + MULQ 176(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 168(DI),AX + SHLQ $1,AX + MULQ 184(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 168(DI),DX + IMUL3Q $38,DX,AX + MULQ 192(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(DI),AX + MULQ 176(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 176(DI),DX + IMUL3Q $38,DX,AX + MULQ 184(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(DI),DX + IMUL3Q $38,DX,AX + MULQ 192(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 184(DI),DX + IMUL3Q $19,DX,AX + MULQ 184(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 184(DI),DX + IMUL3Q $38,DX,AX + MULQ 192(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 192(DI),DX + IMUL3Q $19,DX,AX + MULQ 192(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ ·REDMASK51(SB),DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + ANDQ DX,SI + MOVQ CX,R8 + SHRQ $51,CX + ADDQ R10,CX + ANDQ DX,R8 + MOVQ CX,R9 + SHRQ $51,CX + ADDQ R12,CX + ANDQ DX,R9 + MOVQ CX,AX + SHRQ $51,CX + ADDQ R14,CX + ANDQ DX,AX + MOVQ CX,R10 + SHRQ $51,CX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,160(DI) + MOVQ R8,168(DI) + MOVQ R9,176(DI) + MOVQ AX,184(DI) + MOVQ R10,192(DI) + MOVQ 184(DI),SI + IMUL3Q $19,SI,AX + MOVQ AX,56(SP) + MULQ 16(DI) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 192(DI),DX + IMUL3Q $19,DX,AX + MOVQ AX,64(SP) + MULQ 8(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 160(DI),AX + MULQ 0(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 160(DI),AX + MULQ 8(DI) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 160(DI),AX + MULQ 16(DI) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 160(DI),AX + MULQ 24(DI) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 160(DI),AX + MULQ 32(DI) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 168(DI),AX + MULQ 0(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 168(DI),AX + MULQ 8(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 168(DI),AX + MULQ 16(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 168(DI),AX + MULQ 24(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 168(DI),DX + IMUL3Q $19,DX,AX + MULQ 32(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(DI),AX + MULQ 0(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 176(DI),AX + MULQ 8(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 176(DI),AX + MULQ 16(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 176(DI),DX + IMUL3Q $19,DX,AX + MULQ 24(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(DI),DX + IMUL3Q $19,DX,AX + MULQ 32(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 184(DI),AX + MULQ 0(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 184(DI),AX + MULQ 8(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 56(SP),AX + MULQ 24(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 56(SP),AX + MULQ 32(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 192(DI),AX + MULQ 0(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 64(SP),AX + MULQ 16(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 64(SP),AX + MULQ 24(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 64(SP),AX + MULQ 32(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ ·REDMASK51(SB),DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,160(DI) + MOVQ R8,168(DI) + MOVQ R9,176(DI) + MOVQ AX,184(DI) + MOVQ R10,192(DI) + MOVQ 200(SP),SI + IMUL3Q $19,SI,AX + MOVQ AX,56(SP) + MULQ 152(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 208(SP),DX + IMUL3Q $19,DX,AX + MOVQ AX,64(SP) + MULQ 144(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(SP),AX + MULQ 136(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(SP),AX + MULQ 144(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 176(SP),AX + MULQ 152(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 176(SP),AX + MULQ 160(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 176(SP),AX + MULQ 168(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 184(SP),AX + MULQ 136(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 184(SP),AX + MULQ 144(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 184(SP),AX + MULQ 152(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 184(SP),AX + MULQ 160(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 184(SP),DX + IMUL3Q $19,DX,AX + MULQ 168(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 192(SP),AX + MULQ 136(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 192(SP),AX + MULQ 144(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 192(SP),AX + MULQ 152(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 192(SP),DX + IMUL3Q $19,DX,AX + MULQ 160(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 192(SP),DX + IMUL3Q $19,DX,AX + MULQ 168(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 200(SP),AX + MULQ 136(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 200(SP),AX + MULQ 144(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 56(SP),AX + MULQ 160(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 56(SP),AX + MULQ 168(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 208(SP),AX + MULQ 136(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 64(SP),AX + MULQ 152(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 64(SP),AX + MULQ 160(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 64(SP),AX + MULQ 168(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ ·REDMASK51(SB),DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,40(DI) + MOVQ R8,48(DI) + MOVQ R9,56(DI) + MOVQ AX,64(DI) + MOVQ R10,72(DI) + MOVQ 216(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + MOVQ AX,SI + MOVQ DX,CX + MOVQ 224(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + ADDQ AX,CX + MOVQ DX,R8 + MOVQ 232(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + ADDQ AX,R8 + MOVQ DX,R9 + MOVQ 240(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + ADDQ AX,R9 + MOVQ DX,R10 + MOVQ 248(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + ADDQ AX,R10 + IMUL3Q $19,DX,DX + ADDQ DX,SI + ADDQ 136(SP),SI + ADDQ 144(SP),CX + ADDQ 152(SP),R8 + ADDQ 160(SP),R9 + ADDQ 168(SP),R10 + MOVQ SI,80(DI) + MOVQ CX,88(DI) + MOVQ R8,96(DI) + MOVQ R9,104(DI) + MOVQ R10,112(DI) + MOVQ 104(DI),SI + IMUL3Q $19,SI,AX + MOVQ AX,56(SP) + MULQ 232(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 112(DI),DX + IMUL3Q $19,DX,AX + MOVQ AX,64(SP) + MULQ 224(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 80(DI),AX + MULQ 216(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 80(DI),AX + MULQ 224(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 80(DI),AX + MULQ 232(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 80(DI),AX + MULQ 240(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 80(DI),AX + MULQ 248(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 88(DI),AX + MULQ 216(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 88(DI),AX + MULQ 224(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 88(DI),AX + MULQ 232(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 88(DI),AX + MULQ 240(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 88(DI),DX + IMUL3Q $19,DX,AX + MULQ 248(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 96(DI),AX + MULQ 216(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 96(DI),AX + MULQ 224(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 96(DI),AX + MULQ 232(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 96(DI),DX + IMUL3Q $19,DX,AX + MULQ 240(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 96(DI),DX + IMUL3Q $19,DX,AX + MULQ 248(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 104(DI),AX + MULQ 216(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 104(DI),AX + MULQ 224(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 56(SP),AX + MULQ 240(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 56(SP),AX + MULQ 248(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 112(DI),AX + MULQ 216(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 64(SP),AX + MULQ 232(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 64(SP),AX + MULQ 240(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 64(SP),AX + MULQ 248(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ ·REDMASK51(SB),DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,80(DI) + MOVQ R8,88(DI) + MOVQ R9,96(DI) + MOVQ AX,104(DI) + MOVQ R10,112(DI) + MOVQ 0(SP),R11 + MOVQ 8(SP),R12 + MOVQ 16(SP),R13 + MOVQ 24(SP),R14 + MOVQ 32(SP),R15 + MOVQ 40(SP),BX + MOVQ 48(SP),BP + MOVQ R11,SP + MOVQ DI,AX + MOVQ SI,DX + RET diff --git a/vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go b/vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go new file mode 100644 index 0000000..5822bd5 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go @@ -0,0 +1,240 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +package curve25519 + +// These functions are implemented in the .s files. The names of the functions +// in the rest of the file are also taken from the SUPERCOP sources to help +// people following along. + +//go:noescape + +func cswap(inout *[5]uint64, v uint64) + +//go:noescape + +func ladderstep(inout *[5][5]uint64) + +//go:noescape + +func freeze(inout *[5]uint64) + +//go:noescape + +func mul(dest, a, b *[5]uint64) + +//go:noescape + +func square(out, in *[5]uint64) + +// mladder uses a Montgomery ladder to calculate (xr/zr) *= s. +func mladder(xr, zr *[5]uint64, s *[32]byte) { + var work [5][5]uint64 + + work[0] = *xr + setint(&work[1], 1) + setint(&work[2], 0) + work[3] = *xr + setint(&work[4], 1) + + j := uint(6) + var prevbit byte + + for i := 31; i >= 0; i-- { + for j < 8 { + bit := ((*s)[i] >> j) & 1 + swap := bit ^ prevbit + prevbit = bit + cswap(&work[1], uint64(swap)) + ladderstep(&work) + j-- + } + j = 7 + } + + *xr = work[1] + *zr = work[2] +} + +func scalarMult(out, in, base *[32]byte) { + var e [32]byte + copy(e[:], (*in)[:]) + e[0] &= 248 + e[31] &= 127 + e[31] |= 64 + + var t, z [5]uint64 + unpack(&t, base) + mladder(&t, &z, &e) + invert(&z, &z) + mul(&t, &t, &z) + pack(out, &t) +} + +func setint(r *[5]uint64, v uint64) { + r[0] = v + r[1] = 0 + r[2] = 0 + r[3] = 0 + r[4] = 0 +} + +// unpack sets r = x where r consists of 5, 51-bit limbs in little-endian +// order. +func unpack(r *[5]uint64, x *[32]byte) { + r[0] = uint64(x[0]) | + uint64(x[1])<<8 | + uint64(x[2])<<16 | + uint64(x[3])<<24 | + uint64(x[4])<<32 | + uint64(x[5])<<40 | + uint64(x[6]&7)<<48 + + r[1] = uint64(x[6])>>3 | + uint64(x[7])<<5 | + uint64(x[8])<<13 | + uint64(x[9])<<21 | + uint64(x[10])<<29 | + uint64(x[11])<<37 | + uint64(x[12]&63)<<45 + + r[2] = uint64(x[12])>>6 | + uint64(x[13])<<2 | + uint64(x[14])<<10 | + uint64(x[15])<<18 | + uint64(x[16])<<26 | + uint64(x[17])<<34 | + uint64(x[18])<<42 | + uint64(x[19]&1)<<50 + + r[3] = uint64(x[19])>>1 | + uint64(x[20])<<7 | + uint64(x[21])<<15 | + uint64(x[22])<<23 | + uint64(x[23])<<31 | + uint64(x[24])<<39 | + uint64(x[25]&15)<<47 + + r[4] = uint64(x[25])>>4 | + uint64(x[26])<<4 | + uint64(x[27])<<12 | + uint64(x[28])<<20 | + uint64(x[29])<<28 | + uint64(x[30])<<36 | + uint64(x[31]&127)<<44 +} + +// pack sets out = x where out is the usual, little-endian form of the 5, +// 51-bit limbs in x. +func pack(out *[32]byte, x *[5]uint64) { + t := *x + freeze(&t) + + out[0] = byte(t[0]) + out[1] = byte(t[0] >> 8) + out[2] = byte(t[0] >> 16) + out[3] = byte(t[0] >> 24) + out[4] = byte(t[0] >> 32) + out[5] = byte(t[0] >> 40) + out[6] = byte(t[0] >> 48) + + out[6] ^= byte(t[1]<<3) & 0xf8 + out[7] = byte(t[1] >> 5) + out[8] = byte(t[1] >> 13) + out[9] = byte(t[1] >> 21) + out[10] = byte(t[1] >> 29) + out[11] = byte(t[1] >> 37) + out[12] = byte(t[1] >> 45) + + out[12] ^= byte(t[2]<<6) & 0xc0 + out[13] = byte(t[2] >> 2) + out[14] = byte(t[2] >> 10) + out[15] = byte(t[2] >> 18) + out[16] = byte(t[2] >> 26) + out[17] = byte(t[2] >> 34) + out[18] = byte(t[2] >> 42) + out[19] = byte(t[2] >> 50) + + out[19] ^= byte(t[3]<<1) & 0xfe + out[20] = byte(t[3] >> 7) + out[21] = byte(t[3] >> 15) + out[22] = byte(t[3] >> 23) + out[23] = byte(t[3] >> 31) + out[24] = byte(t[3] >> 39) + out[25] = byte(t[3] >> 47) + + out[25] ^= byte(t[4]<<4) & 0xf0 + out[26] = byte(t[4] >> 4) + out[27] = byte(t[4] >> 12) + out[28] = byte(t[4] >> 20) + out[29] = byte(t[4] >> 28) + out[30] = byte(t[4] >> 36) + out[31] = byte(t[4] >> 44) +} + +// invert calculates r = x^-1 mod p using Fermat's little theorem. +func invert(r *[5]uint64, x *[5]uint64) { + var z2, z9, z11, z2_5_0, z2_10_0, z2_20_0, z2_50_0, z2_100_0, t [5]uint64 + + square(&z2, x) /* 2 */ + square(&t, &z2) /* 4 */ + square(&t, &t) /* 8 */ + mul(&z9, &t, x) /* 9 */ + mul(&z11, &z9, &z2) /* 11 */ + square(&t, &z11) /* 22 */ + mul(&z2_5_0, &t, &z9) /* 2^5 - 2^0 = 31 */ + + square(&t, &z2_5_0) /* 2^6 - 2^1 */ + for i := 1; i < 5; i++ { /* 2^20 - 2^10 */ + square(&t, &t) + } + mul(&z2_10_0, &t, &z2_5_0) /* 2^10 - 2^0 */ + + square(&t, &z2_10_0) /* 2^11 - 2^1 */ + for i := 1; i < 10; i++ { /* 2^20 - 2^10 */ + square(&t, &t) + } + mul(&z2_20_0, &t, &z2_10_0) /* 2^20 - 2^0 */ + + square(&t, &z2_20_0) /* 2^21 - 2^1 */ + for i := 1; i < 20; i++ { /* 2^40 - 2^20 */ + square(&t, &t) + } + mul(&t, &t, &z2_20_0) /* 2^40 - 2^0 */ + + square(&t, &t) /* 2^41 - 2^1 */ + for i := 1; i < 10; i++ { /* 2^50 - 2^10 */ + square(&t, &t) + } + mul(&z2_50_0, &t, &z2_10_0) /* 2^50 - 2^0 */ + + square(&t, &z2_50_0) /* 2^51 - 2^1 */ + for i := 1; i < 50; i++ { /* 2^100 - 2^50 */ + square(&t, &t) + } + mul(&z2_100_0, &t, &z2_50_0) /* 2^100 - 2^0 */ + + square(&t, &z2_100_0) /* 2^101 - 2^1 */ + for i := 1; i < 100; i++ { /* 2^200 - 2^100 */ + square(&t, &t) + } + mul(&t, &t, &z2_100_0) /* 2^200 - 2^0 */ + + square(&t, &t) /* 2^201 - 2^1 */ + for i := 1; i < 50; i++ { /* 2^250 - 2^50 */ + square(&t, &t) + } + mul(&t, &t, &z2_50_0) /* 2^250 - 2^0 */ + + square(&t, &t) /* 2^251 - 2^1 */ + square(&t, &t) /* 2^252 - 2^2 */ + square(&t, &t) /* 2^253 - 2^3 */ + + square(&t, &t) /* 2^254 - 2^4 */ + + square(&t, &t) /* 2^255 - 2^5 */ + mul(r, &t, &z11) /* 2^255 - 21 */ +} diff --git a/vendor/golang.org/x/crypto/curve25519/mul_amd64.s b/vendor/golang.org/x/crypto/curve25519/mul_amd64.s new file mode 100644 index 0000000..e48d183 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/mul_amd64.s @@ -0,0 +1,191 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +// func mul(dest, a, b *[5]uint64) +TEXT ·mul(SB),0,$128-24 + MOVQ dest+0(FP), DI + MOVQ a+8(FP), SI + MOVQ b+16(FP), DX + + MOVQ SP,R11 + MOVQ $31,CX + NOTQ CX + ANDQ CX,SP + ADDQ $32,SP + + MOVQ R11,0(SP) + MOVQ R12,8(SP) + MOVQ R13,16(SP) + MOVQ R14,24(SP) + MOVQ R15,32(SP) + MOVQ BX,40(SP) + MOVQ BP,48(SP) + MOVQ DI,56(SP) + MOVQ DX,CX + MOVQ 24(SI),DX + IMUL3Q $19,DX,AX + MOVQ AX,64(SP) + MULQ 16(CX) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 32(SI),DX + IMUL3Q $19,DX,AX + MOVQ AX,72(SP) + MULQ 8(CX) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 0(SI),AX + MULQ 0(CX) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 0(SI),AX + MULQ 8(CX) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 0(SI),AX + MULQ 16(CX) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 0(SI),AX + MULQ 24(CX) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 0(SI),AX + MULQ 32(CX) + MOVQ AX,BX + MOVQ DX,BP + MOVQ 8(SI),AX + MULQ 0(CX) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 8(SI),AX + MULQ 8(CX) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 8(SI),AX + MULQ 16(CX) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 8(SI),AX + MULQ 24(CX) + ADDQ AX,BX + ADCQ DX,BP + MOVQ 8(SI),DX + IMUL3Q $19,DX,AX + MULQ 32(CX) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 16(SI),AX + MULQ 0(CX) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 16(SI),AX + MULQ 8(CX) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 16(SI),AX + MULQ 16(CX) + ADDQ AX,BX + ADCQ DX,BP + MOVQ 16(SI),DX + IMUL3Q $19,DX,AX + MULQ 24(CX) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 16(SI),DX + IMUL3Q $19,DX,AX + MULQ 32(CX) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 24(SI),AX + MULQ 0(CX) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 24(SI),AX + MULQ 8(CX) + ADDQ AX,BX + ADCQ DX,BP + MOVQ 64(SP),AX + MULQ 24(CX) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 64(SP),AX + MULQ 32(CX) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 32(SI),AX + MULQ 0(CX) + ADDQ AX,BX + ADCQ DX,BP + MOVQ 72(SP),AX + MULQ 16(CX) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 72(SP),AX + MULQ 24(CX) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 72(SP),AX + MULQ 32(CX) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ ·REDMASK51(SB),SI + SHLQ $13,R9:R8 + ANDQ SI,R8 + SHLQ $13,R11:R10 + ANDQ SI,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ SI,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ SI,R14 + ADDQ R13,R14 + SHLQ $13,BP:BX + ANDQ SI,BX + ADDQ R15,BX + IMUL3Q $19,BP,DX + ADDQ DX,R8 + MOVQ R8,DX + SHRQ $51,DX + ADDQ R10,DX + MOVQ DX,CX + SHRQ $51,DX + ANDQ SI,R8 + ADDQ R12,DX + MOVQ DX,R9 + SHRQ $51,DX + ANDQ SI,CX + ADDQ R14,DX + MOVQ DX,AX + SHRQ $51,DX + ANDQ SI,R9 + ADDQ BX,DX + MOVQ DX,R10 + SHRQ $51,DX + ANDQ SI,AX + IMUL3Q $19,DX,DX + ADDQ DX,R8 + ANDQ SI,R10 + MOVQ R8,0(DI) + MOVQ CX,8(DI) + MOVQ R9,16(DI) + MOVQ AX,24(DI) + MOVQ R10,32(DI) + MOVQ 0(SP),R11 + MOVQ 8(SP),R12 + MOVQ 16(SP),R13 + MOVQ 24(SP),R14 + MOVQ 32(SP),R15 + MOVQ 40(SP),BX + MOVQ 48(SP),BP + MOVQ R11,SP + MOVQ DI,AX + MOVQ SI,DX + RET diff --git a/vendor/golang.org/x/crypto/curve25519/square_amd64.s b/vendor/golang.org/x/crypto/curve25519/square_amd64.s new file mode 100644 index 0000000..78d1a50 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/square_amd64.s @@ -0,0 +1,153 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +// func square(out, in *[5]uint64) +TEXT ·square(SB),7,$96-16 + MOVQ out+0(FP), DI + MOVQ in+8(FP), SI + + MOVQ SP,R11 + MOVQ $31,CX + NOTQ CX + ANDQ CX,SP + ADDQ $32, SP + + MOVQ R11,0(SP) + MOVQ R12,8(SP) + MOVQ R13,16(SP) + MOVQ R14,24(SP) + MOVQ R15,32(SP) + MOVQ BX,40(SP) + MOVQ BP,48(SP) + MOVQ 0(SI),AX + MULQ 0(SI) + MOVQ AX,CX + MOVQ DX,R8 + MOVQ 0(SI),AX + SHLQ $1,AX + MULQ 8(SI) + MOVQ AX,R9 + MOVQ DX,R10 + MOVQ 0(SI),AX + SHLQ $1,AX + MULQ 16(SI) + MOVQ AX,R11 + MOVQ DX,R12 + MOVQ 0(SI),AX + SHLQ $1,AX + MULQ 24(SI) + MOVQ AX,R13 + MOVQ DX,R14 + MOVQ 0(SI),AX + SHLQ $1,AX + MULQ 32(SI) + MOVQ AX,R15 + MOVQ DX,BX + MOVQ 8(SI),AX + MULQ 8(SI) + ADDQ AX,R11 + ADCQ DX,R12 + MOVQ 8(SI),AX + SHLQ $1,AX + MULQ 16(SI) + ADDQ AX,R13 + ADCQ DX,R14 + MOVQ 8(SI),AX + SHLQ $1,AX + MULQ 24(SI) + ADDQ AX,R15 + ADCQ DX,BX + MOVQ 8(SI),DX + IMUL3Q $38,DX,AX + MULQ 32(SI) + ADDQ AX,CX + ADCQ DX,R8 + MOVQ 16(SI),AX + MULQ 16(SI) + ADDQ AX,R15 + ADCQ DX,BX + MOVQ 16(SI),DX + IMUL3Q $38,DX,AX + MULQ 24(SI) + ADDQ AX,CX + ADCQ DX,R8 + MOVQ 16(SI),DX + IMUL3Q $38,DX,AX + MULQ 32(SI) + ADDQ AX,R9 + ADCQ DX,R10 + MOVQ 24(SI),DX + IMUL3Q $19,DX,AX + MULQ 24(SI) + ADDQ AX,R9 + ADCQ DX,R10 + MOVQ 24(SI),DX + IMUL3Q $38,DX,AX + MULQ 32(SI) + ADDQ AX,R11 + ADCQ DX,R12 + MOVQ 32(SI),DX + IMUL3Q $19,DX,AX + MULQ 32(SI) + ADDQ AX,R13 + ADCQ DX,R14 + MOVQ ·REDMASK51(SB),SI + SHLQ $13,R8:CX + ANDQ SI,CX + SHLQ $13,R10:R9 + ANDQ SI,R9 + ADDQ R8,R9 + SHLQ $13,R12:R11 + ANDQ SI,R11 + ADDQ R10,R11 + SHLQ $13,R14:R13 + ANDQ SI,R13 + ADDQ R12,R13 + SHLQ $13,BX:R15 + ANDQ SI,R15 + ADDQ R14,R15 + IMUL3Q $19,BX,DX + ADDQ DX,CX + MOVQ CX,DX + SHRQ $51,DX + ADDQ R9,DX + ANDQ SI,CX + MOVQ DX,R8 + SHRQ $51,DX + ADDQ R11,DX + ANDQ SI,R8 + MOVQ DX,R9 + SHRQ $51,DX + ADDQ R13,DX + ANDQ SI,R9 + MOVQ DX,AX + SHRQ $51,DX + ADDQ R15,DX + ANDQ SI,AX + MOVQ DX,R10 + SHRQ $51,DX + IMUL3Q $19,DX,DX + ADDQ DX,CX + ANDQ SI,R10 + MOVQ CX,0(DI) + MOVQ R8,8(DI) + MOVQ R9,16(DI) + MOVQ AX,24(DI) + MOVQ R10,32(DI) + MOVQ 0(SP),R11 + MOVQ 8(SP),R12 + MOVQ 16(SP),R13 + MOVQ 24(SP),R14 + MOVQ 32(SP),R15 + MOVQ 40(SP),BX + MOVQ 48(SP),BP + MOVQ R11,SP + MOVQ DI,AX + MOVQ SI,DX + RET diff --git a/vendor/golang.org/x/crypto/ed25519/ed25519.go b/vendor/golang.org/x/crypto/ed25519/ed25519.go new file mode 100644 index 0000000..f1d9567 --- /dev/null +++ b/vendor/golang.org/x/crypto/ed25519/ed25519.go @@ -0,0 +1,181 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ed25519 implements the Ed25519 signature algorithm. See +// http://ed25519.cr.yp.to/. +// +// These functions are also compatible with the “Ed25519†function defined in +// https://tools.ietf.org/html/draft-irtf-cfrg-eddsa-05. +package ed25519 + +// This code is a port of the public domain, “ref10†implementation of ed25519 +// from SUPERCOP. + +import ( + "crypto" + cryptorand "crypto/rand" + "crypto/sha512" + "crypto/subtle" + "errors" + "io" + "strconv" + + "golang.org/x/crypto/ed25519/internal/edwards25519" +) + +const ( + // PublicKeySize is the size, in bytes, of public keys as used in this package. + PublicKeySize = 32 + // PrivateKeySize is the size, in bytes, of private keys as used in this package. + PrivateKeySize = 64 + // SignatureSize is the size, in bytes, of signatures generated and verified by this package. + SignatureSize = 64 +) + +// PublicKey is the type of Ed25519 public keys. +type PublicKey []byte + +// PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer. +type PrivateKey []byte + +// Public returns the PublicKey corresponding to priv. +func (priv PrivateKey) Public() crypto.PublicKey { + publicKey := make([]byte, PublicKeySize) + copy(publicKey, priv[32:]) + return PublicKey(publicKey) +} + +// Sign signs the given message with priv. +// Ed25519 performs two passes over messages to be signed and therefore cannot +// handle pre-hashed messages. Thus opts.HashFunc() must return zero to +// indicate the message hasn't been hashed. This can be achieved by passing +// crypto.Hash(0) as the value for opts. +func (priv PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error) { + if opts.HashFunc() != crypto.Hash(0) { + return nil, errors.New("ed25519: cannot sign hashed message") + } + + return Sign(priv, message), nil +} + +// GenerateKey generates a public/private key pair using entropy from rand. +// If rand is nil, crypto/rand.Reader will be used. +func GenerateKey(rand io.Reader) (publicKey PublicKey, privateKey PrivateKey, err error) { + if rand == nil { + rand = cryptorand.Reader + } + + privateKey = make([]byte, PrivateKeySize) + publicKey = make([]byte, PublicKeySize) + _, err = io.ReadFull(rand, privateKey[:32]) + if err != nil { + return nil, nil, err + } + + digest := sha512.Sum512(privateKey[:32]) + digest[0] &= 248 + digest[31] &= 127 + digest[31] |= 64 + + var A edwards25519.ExtendedGroupElement + var hBytes [32]byte + copy(hBytes[:], digest[:]) + edwards25519.GeScalarMultBase(&A, &hBytes) + var publicKeyBytes [32]byte + A.ToBytes(&publicKeyBytes) + + copy(privateKey[32:], publicKeyBytes[:]) + copy(publicKey, publicKeyBytes[:]) + + return publicKey, privateKey, nil +} + +// Sign signs the message with privateKey and returns a signature. It will +// panic if len(privateKey) is not PrivateKeySize. +func Sign(privateKey PrivateKey, message []byte) []byte { + if l := len(privateKey); l != PrivateKeySize { + panic("ed25519: bad private key length: " + strconv.Itoa(l)) + } + + h := sha512.New() + h.Write(privateKey[:32]) + + var digest1, messageDigest, hramDigest [64]byte + var expandedSecretKey [32]byte + h.Sum(digest1[:0]) + copy(expandedSecretKey[:], digest1[:]) + expandedSecretKey[0] &= 248 + expandedSecretKey[31] &= 63 + expandedSecretKey[31] |= 64 + + h.Reset() + h.Write(digest1[32:]) + h.Write(message) + h.Sum(messageDigest[:0]) + + var messageDigestReduced [32]byte + edwards25519.ScReduce(&messageDigestReduced, &messageDigest) + var R edwards25519.ExtendedGroupElement + edwards25519.GeScalarMultBase(&R, &messageDigestReduced) + + var encodedR [32]byte + R.ToBytes(&encodedR) + + h.Reset() + h.Write(encodedR[:]) + h.Write(privateKey[32:]) + h.Write(message) + h.Sum(hramDigest[:0]) + var hramDigestReduced [32]byte + edwards25519.ScReduce(&hramDigestReduced, &hramDigest) + + var s [32]byte + edwards25519.ScMulAdd(&s, &hramDigestReduced, &expandedSecretKey, &messageDigestReduced) + + signature := make([]byte, SignatureSize) + copy(signature[:], encodedR[:]) + copy(signature[32:], s[:]) + + return signature +} + +// Verify reports whether sig is a valid signature of message by publicKey. It +// will panic if len(publicKey) is not PublicKeySize. +func Verify(publicKey PublicKey, message, sig []byte) bool { + if l := len(publicKey); l != PublicKeySize { + panic("ed25519: bad public key length: " + strconv.Itoa(l)) + } + + if len(sig) != SignatureSize || sig[63]&224 != 0 { + return false + } + + var A edwards25519.ExtendedGroupElement + var publicKeyBytes [32]byte + copy(publicKeyBytes[:], publicKey) + if !A.FromBytes(&publicKeyBytes) { + return false + } + edwards25519.FeNeg(&A.X, &A.X) + edwards25519.FeNeg(&A.T, &A.T) + + h := sha512.New() + h.Write(sig[:32]) + h.Write(publicKey[:]) + h.Write(message) + var digest [64]byte + h.Sum(digest[:0]) + + var hReduced [32]byte + edwards25519.ScReduce(&hReduced, &digest) + + var R edwards25519.ProjectiveGroupElement + var b [32]byte + copy(b[:], sig[32:]) + edwards25519.GeDoubleScalarMultVartime(&R, &hReduced, &A, &b) + + var checkR [32]byte + R.ToBytes(&checkR) + return subtle.ConstantTimeCompare(sig[:32], checkR[:]) == 1 +} diff --git a/vendor/golang.org/x/crypto/ed25519/ed25519_test.go b/vendor/golang.org/x/crypto/ed25519/ed25519_test.go new file mode 100644 index 0000000..638e525 --- /dev/null +++ b/vendor/golang.org/x/crypto/ed25519/ed25519_test.go @@ -0,0 +1,183 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ed25519 + +import ( + "bufio" + "bytes" + "compress/gzip" + "crypto" + "crypto/rand" + "encoding/hex" + "os" + "strings" + "testing" + + "golang.org/x/crypto/ed25519/internal/edwards25519" +) + +type zeroReader struct{} + +func (zeroReader) Read(buf []byte) (int, error) { + for i := range buf { + buf[i] = 0 + } + return len(buf), nil +} + +func TestUnmarshalMarshal(t *testing.T) { + pub, _, _ := GenerateKey(rand.Reader) + + var A edwards25519.ExtendedGroupElement + var pubBytes [32]byte + copy(pubBytes[:], pub) + if !A.FromBytes(&pubBytes) { + t.Fatalf("ExtendedGroupElement.FromBytes failed") + } + + var pub2 [32]byte + A.ToBytes(&pub2) + + if pubBytes != pub2 { + t.Errorf("FromBytes(%v)->ToBytes does not round-trip, got %x\n", pubBytes, pub2) + } +} + +func TestSignVerify(t *testing.T) { + var zero zeroReader + public, private, _ := GenerateKey(zero) + + message := []byte("test message") + sig := Sign(private, message) + if !Verify(public, message, sig) { + t.Errorf("valid signature rejected") + } + + wrongMessage := []byte("wrong message") + if Verify(public, wrongMessage, sig) { + t.Errorf("signature of different message accepted") + } +} + +func TestCryptoSigner(t *testing.T) { + var zero zeroReader + public, private, _ := GenerateKey(zero) + + signer := crypto.Signer(private) + + publicInterface := signer.Public() + public2, ok := publicInterface.(PublicKey) + if !ok { + t.Fatalf("expected PublicKey from Public() but got %T", publicInterface) + } + + if !bytes.Equal(public, public2) { + t.Errorf("public keys do not match: original:%x vs Public():%x", public, public2) + } + + message := []byte("message") + var noHash crypto.Hash + signature, err := signer.Sign(zero, message, noHash) + if err != nil { + t.Fatalf("error from Sign(): %s", err) + } + + if !Verify(public, message, signature) { + t.Errorf("Verify failed on signature from Sign()") + } +} + +func TestGolden(t *testing.T) { + // sign.input.gz is a selection of test cases from + // http://ed25519.cr.yp.to/python/sign.input + testDataZ, err := os.Open("testdata/sign.input.gz") + if err != nil { + t.Fatal(err) + } + defer testDataZ.Close() + testData, err := gzip.NewReader(testDataZ) + if err != nil { + t.Fatal(err) + } + defer testData.Close() + + scanner := bufio.NewScanner(testData) + lineNo := 0 + + for scanner.Scan() { + lineNo++ + + line := scanner.Text() + parts := strings.Split(line, ":") + if len(parts) != 5 { + t.Fatalf("bad number of parts on line %d", lineNo) + } + + privBytes, _ := hex.DecodeString(parts[0]) + pubKey, _ := hex.DecodeString(parts[1]) + msg, _ := hex.DecodeString(parts[2]) + sig, _ := hex.DecodeString(parts[3]) + // The signatures in the test vectors also include the message + // at the end, but we just want R and S. + sig = sig[:SignatureSize] + + if l := len(pubKey); l != PublicKeySize { + t.Fatalf("bad public key length on line %d: got %d bytes", lineNo, l) + } + + var priv [PrivateKeySize]byte + copy(priv[:], privBytes) + copy(priv[32:], pubKey) + + sig2 := Sign(priv[:], msg) + if !bytes.Equal(sig, sig2[:]) { + t.Errorf("different signature result on line %d: %x vs %x", lineNo, sig, sig2) + } + + if !Verify(pubKey, msg, sig2) { + t.Errorf("signature failed to verify on line %d", lineNo) + } + } + + if err := scanner.Err(); err != nil { + t.Fatalf("error reading test data: %s", err) + } +} + +func BenchmarkKeyGeneration(b *testing.B) { + var zero zeroReader + for i := 0; i < b.N; i++ { + if _, _, err := GenerateKey(zero); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkSigning(b *testing.B) { + var zero zeroReader + _, priv, err := GenerateKey(zero) + if err != nil { + b.Fatal(err) + } + message := []byte("Hello, world!") + b.ResetTimer() + for i := 0; i < b.N; i++ { + Sign(priv, message) + } +} + +func BenchmarkVerification(b *testing.B) { + var zero zeroReader + pub, priv, err := GenerateKey(zero) + if err != nil { + b.Fatal(err) + } + message := []byte("Hello, world!") + signature := Sign(priv, message) + b.ResetTimer() + for i := 0; i < b.N; i++ { + Verify(pub, message, signature) + } +} diff --git a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go new file mode 100644 index 0000000..e39f086 --- /dev/null +++ b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go @@ -0,0 +1,1422 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package edwards25519 + +// These values are from the public domain, “ref10†implementation of ed25519 +// from SUPERCOP. + +// d is a constant in the Edwards curve equation. +var d = FieldElement{ + -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116, +} + +// d2 is 2*d. +var d2 = FieldElement{ + -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199, +} + +// SqrtM1 is the square-root of -1 in the field. +var SqrtM1 = FieldElement{ + -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482, +} + +// A is a constant in the Montgomery-form of curve25519. +var A = FieldElement{ + 486662, 0, 0, 0, 0, 0, 0, 0, 0, 0, +} + +// bi contains precomputed multiples of the base-point. See the Ed25519 paper +// for a discussion about how these values are used. +var bi = [8]PreComputedGroupElement{ + { + FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, + }, + { + FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, + }, + { + FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, + }, + { + FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, + }, + { + FieldElement{-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877}, + FieldElement{-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951}, + FieldElement{4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784}, + }, + { + FieldElement{-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436}, + FieldElement{25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918}, + FieldElement{23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877}, + }, + { + FieldElement{-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800}, + FieldElement{-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305}, + FieldElement{-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300}, + }, + { + FieldElement{-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876}, + FieldElement{-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619}, + FieldElement{-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683}, + }, +} + +// base contains precomputed multiples of the base-point. See the Ed25519 paper +// for a discussion about how these values are used. +var base = [32][8]PreComputedGroupElement{ + { + { + FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, + }, + { + FieldElement{-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303}, + FieldElement{-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081}, + FieldElement{26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697}, + }, + { + FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, + }, + { + FieldElement{-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540}, + FieldElement{23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397}, + FieldElement{7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325}, + }, + { + FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, + }, + { + FieldElement{-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777}, + FieldElement{-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737}, + FieldElement{-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652}, + }, + { + FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, + }, + { + FieldElement{14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726}, + FieldElement{-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955}, + FieldElement{27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425}, + }, + }, + { + { + FieldElement{-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171}, + FieldElement{27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510}, + FieldElement{17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660}, + }, + { + FieldElement{-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639}, + FieldElement{29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963}, + FieldElement{5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950}, + }, + { + FieldElement{-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568}, + FieldElement{12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335}, + FieldElement{25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628}, + }, + { + FieldElement{-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007}, + FieldElement{-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772}, + FieldElement{-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653}, + }, + { + FieldElement{2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567}, + FieldElement{13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686}, + FieldElement{21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372}, + }, + { + FieldElement{-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887}, + FieldElement{-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954}, + FieldElement{-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953}, + }, + { + FieldElement{24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833}, + FieldElement{-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532}, + FieldElement{-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876}, + }, + { + FieldElement{2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268}, + FieldElement{33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214}, + FieldElement{1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038}, + }, + }, + { + { + FieldElement{6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800}, + FieldElement{4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645}, + FieldElement{-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664}, + }, + { + FieldElement{1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933}, + FieldElement{-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182}, + FieldElement{-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222}, + }, + { + FieldElement{-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991}, + FieldElement{20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880}, + FieldElement{9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092}, + }, + { + FieldElement{-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295}, + FieldElement{19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788}, + FieldElement{8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553}, + }, + { + FieldElement{-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026}, + FieldElement{11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347}, + FieldElement{-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033}, + }, + { + FieldElement{-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395}, + FieldElement{-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278}, + FieldElement{1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890}, + }, + { + FieldElement{32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995}, + FieldElement{-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596}, + FieldElement{-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891}, + }, + { + FieldElement{31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060}, + FieldElement{11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608}, + FieldElement{-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606}, + }, + }, + { + { + FieldElement{7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389}, + FieldElement{-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016}, + FieldElement{-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341}, + }, + { + FieldElement{-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505}, + FieldElement{14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553}, + FieldElement{-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655}, + }, + { + FieldElement{15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220}, + FieldElement{12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631}, + FieldElement{-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099}, + }, + { + FieldElement{26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556}, + FieldElement{14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749}, + FieldElement{236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930}, + }, + { + FieldElement{1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391}, + FieldElement{5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253}, + FieldElement{20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066}, + }, + { + FieldElement{24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958}, + FieldElement{-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082}, + FieldElement{-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383}, + }, + { + FieldElement{-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521}, + FieldElement{-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807}, + FieldElement{23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948}, + }, + { + FieldElement{9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134}, + FieldElement{-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455}, + FieldElement{27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629}, + }, + }, + { + { + FieldElement{-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069}, + FieldElement{-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746}, + FieldElement{24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919}, + }, + { + FieldElement{11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837}, + FieldElement{8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906}, + FieldElement{-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771}, + }, + { + FieldElement{-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817}, + FieldElement{10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098}, + FieldElement{10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409}, + }, + { + FieldElement{-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504}, + FieldElement{-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727}, + FieldElement{28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420}, + }, + { + FieldElement{-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003}, + FieldElement{-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605}, + FieldElement{-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384}, + }, + { + FieldElement{-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701}, + FieldElement{-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683}, + FieldElement{29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708}, + }, + { + FieldElement{-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563}, + FieldElement{-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260}, + FieldElement{-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387}, + }, + { + FieldElement{-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672}, + FieldElement{23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686}, + FieldElement{-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665}, + }, + }, + { + { + FieldElement{11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182}, + FieldElement{-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277}, + FieldElement{14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628}, + }, + { + FieldElement{-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474}, + FieldElement{-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539}, + FieldElement{-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822}, + }, + { + FieldElement{-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970}, + FieldElement{19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756}, + FieldElement{-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508}, + }, + { + FieldElement{-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683}, + FieldElement{-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655}, + FieldElement{-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158}, + }, + { + FieldElement{-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125}, + FieldElement{-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839}, + FieldElement{-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664}, + }, + { + FieldElement{27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294}, + FieldElement{-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899}, + FieldElement{-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070}, + }, + { + FieldElement{3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294}, + FieldElement{-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949}, + FieldElement{-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083}, + }, + { + FieldElement{31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420}, + FieldElement{-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940}, + FieldElement{29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396}, + }, + }, + { + { + FieldElement{-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567}, + FieldElement{20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127}, + FieldElement{-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294}, + }, + { + FieldElement{-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887}, + FieldElement{22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964}, + FieldElement{16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195}, + }, + { + FieldElement{9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244}, + FieldElement{24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999}, + FieldElement{-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762}, + }, + { + FieldElement{-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274}, + FieldElement{-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236}, + FieldElement{-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605}, + }, + { + FieldElement{-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761}, + FieldElement{-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884}, + FieldElement{-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482}, + }, + { + FieldElement{-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638}, + FieldElement{-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490}, + FieldElement{-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170}, + }, + { + FieldElement{5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736}, + FieldElement{10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124}, + FieldElement{-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392}, + }, + { + FieldElement{8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029}, + FieldElement{6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048}, + FieldElement{28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958}, + }, + }, + { + { + FieldElement{24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593}, + FieldElement{26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071}, + FieldElement{-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692}, + }, + { + FieldElement{11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687}, + FieldElement{-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441}, + FieldElement{-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001}, + }, + { + FieldElement{-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460}, + FieldElement{-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007}, + FieldElement{-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762}, + }, + { + FieldElement{15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005}, + FieldElement{-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674}, + FieldElement{4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035}, + }, + { + FieldElement{7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590}, + FieldElement{-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957}, + FieldElement{-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812}, + }, + { + FieldElement{33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740}, + FieldElement{-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122}, + FieldElement{-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158}, + }, + { + FieldElement{8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885}, + FieldElement{26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140}, + FieldElement{19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857}, + }, + { + FieldElement{801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155}, + FieldElement{19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260}, + FieldElement{19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483}, + }, + }, + { + { + FieldElement{-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677}, + FieldElement{32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815}, + FieldElement{22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751}, + }, + { + FieldElement{-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203}, + FieldElement{-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208}, + FieldElement{1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230}, + }, + { + FieldElement{16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850}, + FieldElement{-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389}, + FieldElement{-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968}, + }, + { + FieldElement{-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689}, + FieldElement{14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880}, + FieldElement{5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304}, + }, + { + FieldElement{30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632}, + FieldElement{-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412}, + FieldElement{20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566}, + }, + { + FieldElement{-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038}, + FieldElement{-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232}, + FieldElement{-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943}, + }, + { + FieldElement{17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856}, + FieldElement{23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738}, + FieldElement{15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971}, + }, + { + FieldElement{-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718}, + FieldElement{-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697}, + FieldElement{-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883}, + }, + }, + { + { + FieldElement{5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912}, + FieldElement{-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358}, + FieldElement{3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849}, + }, + { + FieldElement{29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307}, + FieldElement{-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977}, + FieldElement{-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335}, + }, + { + FieldElement{-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644}, + FieldElement{-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616}, + FieldElement{-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735}, + }, + { + FieldElement{-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099}, + FieldElement{29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341}, + FieldElement{-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336}, + }, + { + FieldElement{-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646}, + FieldElement{31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425}, + FieldElement{-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388}, + }, + { + FieldElement{-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743}, + FieldElement{-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822}, + FieldElement{-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462}, + }, + { + FieldElement{18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985}, + FieldElement{9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702}, + FieldElement{-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797}, + }, + { + FieldElement{21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293}, + FieldElement{27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100}, + FieldElement{19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688}, + }, + }, + { + { + FieldElement{12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186}, + FieldElement{2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610}, + FieldElement{-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707}, + }, + { + FieldElement{7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220}, + FieldElement{915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025}, + FieldElement{32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044}, + }, + { + FieldElement{32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992}, + FieldElement{-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027}, + FieldElement{21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197}, + }, + { + FieldElement{8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901}, + FieldElement{31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952}, + FieldElement{19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878}, + }, + { + FieldElement{-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390}, + FieldElement{32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730}, + FieldElement{2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730}, + }, + { + FieldElement{-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180}, + FieldElement{-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272}, + FieldElement{-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715}, + }, + { + FieldElement{-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970}, + FieldElement{-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772}, + FieldElement{-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865}, + }, + { + FieldElement{15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750}, + FieldElement{20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373}, + FieldElement{32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348}, + }, + }, + { + { + FieldElement{9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144}, + FieldElement{-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195}, + FieldElement{5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086}, + }, + { + FieldElement{-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684}, + FieldElement{-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518}, + FieldElement{-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233}, + }, + { + FieldElement{-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793}, + FieldElement{-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794}, + FieldElement{580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435}, + }, + { + FieldElement{23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921}, + FieldElement{13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518}, + FieldElement{2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563}, + }, + { + FieldElement{14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278}, + FieldElement{-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024}, + FieldElement{4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030}, + }, + { + FieldElement{10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783}, + FieldElement{27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717}, + FieldElement{6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844}, + }, + { + FieldElement{14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333}, + FieldElement{16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048}, + FieldElement{22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760}, + }, + { + FieldElement{-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760}, + FieldElement{-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757}, + FieldElement{-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112}, + }, + }, + { + { + FieldElement{-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468}, + FieldElement{3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184}, + FieldElement{10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289}, + }, + { + FieldElement{15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066}, + FieldElement{24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882}, + FieldElement{13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226}, + }, + { + FieldElement{16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101}, + FieldElement{29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279}, + FieldElement{-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811}, + }, + { + FieldElement{27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709}, + FieldElement{20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714}, + FieldElement{-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121}, + }, + { + FieldElement{9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464}, + FieldElement{12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847}, + FieldElement{13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400}, + }, + { + FieldElement{4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414}, + FieldElement{-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158}, + FieldElement{17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045}, + }, + { + FieldElement{-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415}, + FieldElement{-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459}, + FieldElement{-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079}, + }, + { + FieldElement{21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412}, + FieldElement{-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743}, + FieldElement{-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836}, + }, + }, + { + { + FieldElement{12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022}, + FieldElement{18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429}, + FieldElement{-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065}, + }, + { + FieldElement{30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861}, + FieldElement{10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000}, + FieldElement{-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101}, + }, + { + FieldElement{32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815}, + FieldElement{29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642}, + FieldElement{10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966}, + }, + { + FieldElement{25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574}, + FieldElement{-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742}, + FieldElement{-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689}, + }, + { + FieldElement{12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020}, + FieldElement{-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772}, + FieldElement{3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982}, + }, + { + FieldElement{-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953}, + FieldElement{-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218}, + FieldElement{-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265}, + }, + { + FieldElement{29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073}, + FieldElement{-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325}, + FieldElement{-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798}, + }, + { + FieldElement{-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870}, + FieldElement{-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863}, + FieldElement{-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927}, + }, + }, + { + { + FieldElement{-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267}, + FieldElement{-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663}, + FieldElement{22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862}, + }, + { + FieldElement{-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673}, + FieldElement{15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943}, + FieldElement{15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020}, + }, + { + FieldElement{-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238}, + FieldElement{11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064}, + FieldElement{14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795}, + }, + { + FieldElement{15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052}, + FieldElement{-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904}, + FieldElement{29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531}, + }, + { + FieldElement{-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979}, + FieldElement{-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841}, + FieldElement{10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431}, + }, + { + FieldElement{10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324}, + FieldElement{-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940}, + FieldElement{10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320}, + }, + { + FieldElement{-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184}, + FieldElement{14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114}, + FieldElement{30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878}, + }, + { + FieldElement{12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784}, + FieldElement{-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091}, + FieldElement{-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585}, + }, + }, + { + { + FieldElement{-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208}, + FieldElement{10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864}, + FieldElement{17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661}, + }, + { + FieldElement{7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233}, + FieldElement{26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212}, + FieldElement{-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525}, + }, + { + FieldElement{-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068}, + FieldElement{9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397}, + FieldElement{-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988}, + }, + { + FieldElement{5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889}, + FieldElement{32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038}, + FieldElement{14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697}, + }, + { + FieldElement{20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875}, + FieldElement{-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905}, + FieldElement{-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656}, + }, + { + FieldElement{11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818}, + FieldElement{27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714}, + FieldElement{10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203}, + }, + { + FieldElement{20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931}, + FieldElement{-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024}, + FieldElement{-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084}, + }, + { + FieldElement{-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204}, + FieldElement{20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817}, + FieldElement{27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667}, + }, + }, + { + { + FieldElement{11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504}, + FieldElement{-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768}, + FieldElement{-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255}, + }, + { + FieldElement{6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790}, + FieldElement{1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438}, + FieldElement{-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333}, + }, + { + FieldElement{17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971}, + FieldElement{31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905}, + FieldElement{29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409}, + }, + { + FieldElement{12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409}, + FieldElement{6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499}, + FieldElement{-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363}, + }, + { + FieldElement{28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664}, + FieldElement{-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324}, + FieldElement{-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940}, + }, + { + FieldElement{13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990}, + FieldElement{-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914}, + FieldElement{-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290}, + }, + { + FieldElement{24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257}, + FieldElement{-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433}, + FieldElement{-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236}, + }, + { + FieldElement{-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045}, + FieldElement{11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093}, + FieldElement{-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347}, + }, + }, + { + { + FieldElement{-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191}, + FieldElement{-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507}, + FieldElement{-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906}, + }, + { + FieldElement{3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018}, + FieldElement{-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109}, + FieldElement{-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926}, + }, + { + FieldElement{-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528}, + FieldElement{8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625}, + FieldElement{-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286}, + }, + { + FieldElement{2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033}, + FieldElement{27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866}, + FieldElement{21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896}, + }, + { + FieldElement{30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075}, + FieldElement{26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347}, + FieldElement{-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437}, + }, + { + FieldElement{-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165}, + FieldElement{-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588}, + FieldElement{-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193}, + }, + { + FieldElement{-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017}, + FieldElement{-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883}, + FieldElement{21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961}, + }, + { + FieldElement{8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043}, + FieldElement{29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663}, + FieldElement{-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362}, + }, + }, + { + { + FieldElement{-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860}, + FieldElement{2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466}, + FieldElement{-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063}, + }, + { + FieldElement{-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997}, + FieldElement{-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295}, + FieldElement{-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369}, + }, + { + FieldElement{9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385}, + FieldElement{18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109}, + FieldElement{2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906}, + }, + { + FieldElement{4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424}, + FieldElement{-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185}, + FieldElement{7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962}, + }, + { + FieldElement{-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325}, + FieldElement{10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593}, + FieldElement{696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404}, + }, + { + FieldElement{-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644}, + FieldElement{17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801}, + FieldElement{26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804}, + }, + { + FieldElement{-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884}, + FieldElement{-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577}, + FieldElement{-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849}, + }, + { + FieldElement{32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473}, + FieldElement{-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644}, + FieldElement{-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319}, + }, + }, + { + { + FieldElement{-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599}, + FieldElement{-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768}, + FieldElement{-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084}, + }, + { + FieldElement{-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328}, + FieldElement{-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369}, + FieldElement{20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920}, + }, + { + FieldElement{12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815}, + FieldElement{-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025}, + FieldElement{-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397}, + }, + { + FieldElement{-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448}, + FieldElement{6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981}, + FieldElement{30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165}, + }, + { + FieldElement{32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501}, + FieldElement{17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073}, + FieldElement{-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861}, + }, + { + FieldElement{14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845}, + FieldElement{-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211}, + FieldElement{18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870}, + }, + { + FieldElement{10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096}, + FieldElement{33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803}, + FieldElement{-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168}, + }, + { + FieldElement{30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965}, + FieldElement{-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505}, + FieldElement{18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598}, + }, + }, + { + { + FieldElement{5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782}, + FieldElement{5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900}, + FieldElement{-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479}, + }, + { + FieldElement{-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208}, + FieldElement{8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232}, + FieldElement{17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719}, + }, + { + FieldElement{16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271}, + FieldElement{-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326}, + FieldElement{-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132}, + }, + { + FieldElement{14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300}, + FieldElement{8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570}, + FieldElement{15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670}, + }, + { + FieldElement{-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994}, + FieldElement{-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913}, + FieldElement{31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317}, + }, + { + FieldElement{-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730}, + FieldElement{842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096}, + FieldElement{-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078}, + }, + { + FieldElement{-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411}, + FieldElement{-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905}, + FieldElement{-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654}, + }, + { + FieldElement{-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870}, + FieldElement{-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498}, + FieldElement{12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579}, + }, + }, + { + { + FieldElement{14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677}, + FieldElement{10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647}, + FieldElement{-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743}, + }, + { + FieldElement{-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468}, + FieldElement{21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375}, + FieldElement{-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155}, + }, + { + FieldElement{6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725}, + FieldElement{-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612}, + FieldElement{-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943}, + }, + { + FieldElement{-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944}, + FieldElement{30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928}, + FieldElement{9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406}, + }, + { + FieldElement{22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139}, + FieldElement{-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963}, + FieldElement{-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693}, + }, + { + FieldElement{1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734}, + FieldElement{-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680}, + FieldElement{-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410}, + }, + { + FieldElement{-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931}, + FieldElement{-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654}, + FieldElement{22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710}, + }, + { + FieldElement{29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180}, + FieldElement{-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684}, + FieldElement{-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895}, + }, + }, + { + { + FieldElement{22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501}, + FieldElement{-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413}, + FieldElement{6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880}, + }, + { + FieldElement{-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874}, + FieldElement{22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962}, + FieldElement{-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899}, + }, + { + FieldElement{21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152}, + FieldElement{9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063}, + FieldElement{7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080}, + }, + { + FieldElement{-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146}, + FieldElement{-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183}, + FieldElement{-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133}, + }, + { + FieldElement{-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421}, + FieldElement{-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622}, + FieldElement{-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197}, + }, + { + FieldElement{2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663}, + FieldElement{31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753}, + FieldElement{4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755}, + }, + { + FieldElement{-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862}, + FieldElement{-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118}, + FieldElement{26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171}, + }, + { + FieldElement{15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380}, + FieldElement{16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824}, + FieldElement{28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270}, + }, + }, + { + { + FieldElement{-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438}, + FieldElement{-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584}, + FieldElement{-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562}, + }, + { + FieldElement{30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471}, + FieldElement{18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610}, + FieldElement{19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269}, + }, + { + FieldElement{-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650}, + FieldElement{14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369}, + FieldElement{19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461}, + }, + { + FieldElement{30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462}, + FieldElement{-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793}, + FieldElement{-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218}, + }, + { + FieldElement{-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226}, + FieldElement{18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019}, + FieldElement{-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037}, + }, + { + FieldElement{31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171}, + FieldElement{-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132}, + FieldElement{-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841}, + }, + { + FieldElement{21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181}, + FieldElement{-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210}, + FieldElement{-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040}, + }, + { + FieldElement{3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935}, + FieldElement{24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105}, + FieldElement{-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814}, + }, + }, + { + { + FieldElement{793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852}, + FieldElement{5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581}, + FieldElement{-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646}, + }, + { + FieldElement{10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844}, + FieldElement{10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025}, + FieldElement{27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453}, + }, + { + FieldElement{-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068}, + FieldElement{4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192}, + FieldElement{-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921}, + }, + { + FieldElement{-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259}, + FieldElement{-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426}, + FieldElement{-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072}, + }, + { + FieldElement{-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305}, + FieldElement{13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832}, + FieldElement{28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943}, + }, + { + FieldElement{-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011}, + FieldElement{24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447}, + FieldElement{17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494}, + }, + { + FieldElement{-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245}, + FieldElement{-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859}, + FieldElement{28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915}, + }, + { + FieldElement{16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707}, + FieldElement{10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848}, + FieldElement{-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224}, + }, + }, + { + { + FieldElement{-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391}, + FieldElement{15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215}, + FieldElement{-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101}, + }, + { + FieldElement{23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713}, + FieldElement{21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849}, + FieldElement{-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930}, + }, + { + FieldElement{-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940}, + FieldElement{-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031}, + FieldElement{-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404}, + }, + { + FieldElement{-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243}, + FieldElement{-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116}, + FieldElement{-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525}, + }, + { + FieldElement{-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509}, + FieldElement{-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883}, + FieldElement{15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865}, + }, + { + FieldElement{-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660}, + FieldElement{4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273}, + FieldElement{-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138}, + }, + { + FieldElement{-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560}, + FieldElement{-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135}, + FieldElement{2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941}, + }, + { + FieldElement{-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739}, + FieldElement{18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756}, + FieldElement{-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819}, + }, + }, + { + { + FieldElement{-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347}, + FieldElement{-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028}, + FieldElement{21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075}, + }, + { + FieldElement{16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799}, + FieldElement{-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609}, + FieldElement{-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817}, + }, + { + FieldElement{-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989}, + FieldElement{-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523}, + FieldElement{4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278}, + }, + { + FieldElement{31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045}, + FieldElement{19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377}, + FieldElement{24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480}, + }, + { + FieldElement{17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016}, + FieldElement{510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426}, + FieldElement{18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525}, + }, + { + FieldElement{13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396}, + FieldElement{9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080}, + FieldElement{12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892}, + }, + { + FieldElement{15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275}, + FieldElement{11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074}, + FieldElement{20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140}, + }, + { + FieldElement{-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717}, + FieldElement{-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101}, + FieldElement{24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127}, + }, + }, + { + { + FieldElement{-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632}, + FieldElement{-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415}, + FieldElement{-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160}, + }, + { + FieldElement{31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876}, + FieldElement{22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625}, + FieldElement{-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478}, + }, + { + FieldElement{27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164}, + FieldElement{26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595}, + FieldElement{-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248}, + }, + { + FieldElement{-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858}, + FieldElement{15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193}, + FieldElement{8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184}, + }, + { + FieldElement{-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942}, + FieldElement{-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635}, + FieldElement{21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948}, + }, + { + FieldElement{11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935}, + FieldElement{-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415}, + FieldElement{-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416}, + }, + { + FieldElement{-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018}, + FieldElement{4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778}, + FieldElement{366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659}, + }, + { + FieldElement{-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385}, + FieldElement{18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503}, + FieldElement{476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329}, + }, + }, + { + { + FieldElement{20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056}, + FieldElement{-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838}, + FieldElement{24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948}, + }, + { + FieldElement{-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691}, + FieldElement{-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118}, + FieldElement{-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517}, + }, + { + FieldElement{-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269}, + FieldElement{-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904}, + FieldElement{-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589}, + }, + { + FieldElement{-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193}, + FieldElement{-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910}, + FieldElement{-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930}, + }, + { + FieldElement{-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667}, + FieldElement{25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481}, + FieldElement{-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876}, + }, + { + FieldElement{22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640}, + FieldElement{-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278}, + FieldElement{-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112}, + }, + { + FieldElement{26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272}, + FieldElement{17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012}, + FieldElement{-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221}, + }, + { + FieldElement{30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046}, + FieldElement{13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345}, + FieldElement{-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310}, + }, + }, + { + { + FieldElement{19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937}, + FieldElement{31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636}, + FieldElement{-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008}, + }, + { + FieldElement{-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429}, + FieldElement{-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576}, + FieldElement{31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066}, + }, + { + FieldElement{-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490}, + FieldElement{-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104}, + FieldElement{33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053}, + }, + { + FieldElement{31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275}, + FieldElement{-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511}, + FieldElement{22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095}, + }, + { + FieldElement{-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439}, + FieldElement{23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939}, + FieldElement{-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424}, + }, + { + FieldElement{2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310}, + FieldElement{3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608}, + FieldElement{-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079}, + }, + { + FieldElement{-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101}, + FieldElement{21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418}, + FieldElement{18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576}, + }, + { + FieldElement{30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356}, + FieldElement{9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996}, + FieldElement{-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099}, + }, + }, + { + { + FieldElement{-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728}, + FieldElement{-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658}, + FieldElement{-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242}, + }, + { + FieldElement{-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001}, + FieldElement{-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766}, + FieldElement{18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373}, + }, + { + FieldElement{26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458}, + FieldElement{-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628}, + FieldElement{-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657}, + }, + { + FieldElement{-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062}, + FieldElement{25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616}, + FieldElement{31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014}, + }, + { + FieldElement{24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383}, + FieldElement{-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814}, + FieldElement{-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718}, + }, + { + FieldElement{30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417}, + FieldElement{2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222}, + FieldElement{33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444}, + }, + { + FieldElement{-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597}, + FieldElement{23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970}, + FieldElement{1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799}, + }, + { + FieldElement{-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647}, + FieldElement{13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511}, + FieldElement{-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032}, + }, + }, + { + { + FieldElement{9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834}, + FieldElement{-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461}, + FieldElement{29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062}, + }, + { + FieldElement{-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516}, + FieldElement{-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547}, + FieldElement{-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240}, + }, + { + FieldElement{-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038}, + FieldElement{-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741}, + FieldElement{16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103}, + }, + { + FieldElement{-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747}, + FieldElement{-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323}, + FieldElement{31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016}, + }, + { + FieldElement{-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373}, + FieldElement{15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228}, + FieldElement{-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141}, + }, + { + FieldElement{16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399}, + FieldElement{11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831}, + FieldElement{-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376}, + }, + { + FieldElement{-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313}, + FieldElement{-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958}, + FieldElement{-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577}, + }, + { + FieldElement{-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743}, + FieldElement{29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684}, + FieldElement{-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476}, + }, + }, +} diff --git a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go new file mode 100644 index 0000000..5f8b994 --- /dev/null +++ b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go @@ -0,0 +1,1771 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package edwards25519 + +// This code is a port of the public domain, “ref10†implementation of ed25519 +// from SUPERCOP. + +// FieldElement represents an element of the field GF(2^255 - 19). An element +// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77 +// t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on +// context. +type FieldElement [10]int32 + +var zero FieldElement + +func FeZero(fe *FieldElement) { + copy(fe[:], zero[:]) +} + +func FeOne(fe *FieldElement) { + FeZero(fe) + fe[0] = 1 +} + +func FeAdd(dst, a, b *FieldElement) { + dst[0] = a[0] + b[0] + dst[1] = a[1] + b[1] + dst[2] = a[2] + b[2] + dst[3] = a[3] + b[3] + dst[4] = a[4] + b[4] + dst[5] = a[5] + b[5] + dst[6] = a[6] + b[6] + dst[7] = a[7] + b[7] + dst[8] = a[8] + b[8] + dst[9] = a[9] + b[9] +} + +func FeSub(dst, a, b *FieldElement) { + dst[0] = a[0] - b[0] + dst[1] = a[1] - b[1] + dst[2] = a[2] - b[2] + dst[3] = a[3] - b[3] + dst[4] = a[4] - b[4] + dst[5] = a[5] - b[5] + dst[6] = a[6] - b[6] + dst[7] = a[7] - b[7] + dst[8] = a[8] - b[8] + dst[9] = a[9] - b[9] +} + +func FeCopy(dst, src *FieldElement) { + copy(dst[:], src[:]) +} + +// Replace (f,g) with (g,g) if b == 1; +// replace (f,g) with (f,g) if b == 0. +// +// Preconditions: b in {0,1}. +func FeCMove(f, g *FieldElement, b int32) { + b = -b + f[0] ^= b & (f[0] ^ g[0]) + f[1] ^= b & (f[1] ^ g[1]) + f[2] ^= b & (f[2] ^ g[2]) + f[3] ^= b & (f[3] ^ g[3]) + f[4] ^= b & (f[4] ^ g[4]) + f[5] ^= b & (f[5] ^ g[5]) + f[6] ^= b & (f[6] ^ g[6]) + f[7] ^= b & (f[7] ^ g[7]) + f[8] ^= b & (f[8] ^ g[8]) + f[9] ^= b & (f[9] ^ g[9]) +} + +func load3(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + return r +} + +func load4(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + r |= int64(in[3]) << 24 + return r +} + +func FeFromBytes(dst *FieldElement, src *[32]byte) { + h0 := load4(src[:]) + h1 := load3(src[4:]) << 6 + h2 := load3(src[7:]) << 5 + h3 := load3(src[10:]) << 3 + h4 := load3(src[13:]) << 2 + h5 := load4(src[16:]) + h6 := load3(src[20:]) << 7 + h7 := load3(src[23:]) << 5 + h8 := load3(src[26:]) << 4 + h9 := (load3(src[29:]) & 8388607) << 2 + + FeCombine(dst, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +// FeToBytes marshals h to s. +// Preconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Write p=2^255-19; q=floor(h/p). +// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). +// +// Proof: +// Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. +// Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4. +// +// Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). +// Then 0> 25 + q = (h[0] + q) >> 26 + q = (h[1] + q) >> 25 + q = (h[2] + q) >> 26 + q = (h[3] + q) >> 25 + q = (h[4] + q) >> 26 + q = (h[5] + q) >> 25 + q = (h[6] + q) >> 26 + q = (h[7] + q) >> 25 + q = (h[8] + q) >> 26 + q = (h[9] + q) >> 25 + + // Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. + h[0] += 19 * q + // Goal: Output h-2^255 q, which is between 0 and 2^255-20. + + carry[0] = h[0] >> 26 + h[1] += carry[0] + h[0] -= carry[0] << 26 + carry[1] = h[1] >> 25 + h[2] += carry[1] + h[1] -= carry[1] << 25 + carry[2] = h[2] >> 26 + h[3] += carry[2] + h[2] -= carry[2] << 26 + carry[3] = h[3] >> 25 + h[4] += carry[3] + h[3] -= carry[3] << 25 + carry[4] = h[4] >> 26 + h[5] += carry[4] + h[4] -= carry[4] << 26 + carry[5] = h[5] >> 25 + h[6] += carry[5] + h[5] -= carry[5] << 25 + carry[6] = h[6] >> 26 + h[7] += carry[6] + h[6] -= carry[6] << 26 + carry[7] = h[7] >> 25 + h[8] += carry[7] + h[7] -= carry[7] << 25 + carry[8] = h[8] >> 26 + h[9] += carry[8] + h[8] -= carry[8] << 26 + carry[9] = h[9] >> 25 + h[9] -= carry[9] << 25 + // h10 = carry9 + + // Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20. + // Have h[0]+...+2^230 h[9] between 0 and 2^255-1; + // evidently 2^255 h10-2^255 q = 0. + // Goal: Output h[0]+...+2^230 h[9]. + + s[0] = byte(h[0] >> 0) + s[1] = byte(h[0] >> 8) + s[2] = byte(h[0] >> 16) + s[3] = byte((h[0] >> 24) | (h[1] << 2)) + s[4] = byte(h[1] >> 6) + s[5] = byte(h[1] >> 14) + s[6] = byte((h[1] >> 22) | (h[2] << 3)) + s[7] = byte(h[2] >> 5) + s[8] = byte(h[2] >> 13) + s[9] = byte((h[2] >> 21) | (h[3] << 5)) + s[10] = byte(h[3] >> 3) + s[11] = byte(h[3] >> 11) + s[12] = byte((h[3] >> 19) | (h[4] << 6)) + s[13] = byte(h[4] >> 2) + s[14] = byte(h[4] >> 10) + s[15] = byte(h[4] >> 18) + s[16] = byte(h[5] >> 0) + s[17] = byte(h[5] >> 8) + s[18] = byte(h[5] >> 16) + s[19] = byte((h[5] >> 24) | (h[6] << 1)) + s[20] = byte(h[6] >> 7) + s[21] = byte(h[6] >> 15) + s[22] = byte((h[6] >> 23) | (h[7] << 3)) + s[23] = byte(h[7] >> 5) + s[24] = byte(h[7] >> 13) + s[25] = byte((h[7] >> 21) | (h[8] << 4)) + s[26] = byte(h[8] >> 4) + s[27] = byte(h[8] >> 12) + s[28] = byte((h[8] >> 20) | (h[9] << 6)) + s[29] = byte(h[9] >> 2) + s[30] = byte(h[9] >> 10) + s[31] = byte(h[9] >> 18) +} + +func FeIsNegative(f *FieldElement) byte { + var s [32]byte + FeToBytes(&s, f) + return s[0] & 1 +} + +func FeIsNonZero(f *FieldElement) int32 { + var s [32]byte + FeToBytes(&s, f) + var x uint8 + for _, b := range s { + x |= b + } + x |= x >> 4 + x |= x >> 2 + x |= x >> 1 + return int32(x & 1) +} + +// FeNeg sets h = -f +// +// Preconditions: +// |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func FeNeg(h, f *FieldElement) { + h[0] = -f[0] + h[1] = -f[1] + h[2] = -f[2] + h[3] = -f[3] + h[4] = -f[4] + h[5] = -f[5] + h[6] = -f[6] + h[7] = -f[7] + h[8] = -f[8] + h[9] = -f[9] +} + +func FeCombine(h *FieldElement, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { + var c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 int64 + + /* + |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38)) + i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8 + |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19)) + i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9 + */ + + c0 = (h0 + (1 << 25)) >> 26 + h1 += c0 + h0 -= c0 << 26 + c4 = (h4 + (1 << 25)) >> 26 + h5 += c4 + h4 -= c4 << 26 + /* |h0| <= 2^25 */ + /* |h4| <= 2^25 */ + /* |h1| <= 1.51*2^58 */ + /* |h5| <= 1.51*2^58 */ + + c1 = (h1 + (1 << 24)) >> 25 + h2 += c1 + h1 -= c1 << 25 + c5 = (h5 + (1 << 24)) >> 25 + h6 += c5 + h5 -= c5 << 25 + /* |h1| <= 2^24; from now on fits into int32 */ + /* |h5| <= 2^24; from now on fits into int32 */ + /* |h2| <= 1.21*2^59 */ + /* |h6| <= 1.21*2^59 */ + + c2 = (h2 + (1 << 25)) >> 26 + h3 += c2 + h2 -= c2 << 26 + c6 = (h6 + (1 << 25)) >> 26 + h7 += c6 + h6 -= c6 << 26 + /* |h2| <= 2^25; from now on fits into int32 unchanged */ + /* |h6| <= 2^25; from now on fits into int32 unchanged */ + /* |h3| <= 1.51*2^58 */ + /* |h7| <= 1.51*2^58 */ + + c3 = (h3 + (1 << 24)) >> 25 + h4 += c3 + h3 -= c3 << 25 + c7 = (h7 + (1 << 24)) >> 25 + h8 += c7 + h7 -= c7 << 25 + /* |h3| <= 2^24; from now on fits into int32 unchanged */ + /* |h7| <= 2^24; from now on fits into int32 unchanged */ + /* |h4| <= 1.52*2^33 */ + /* |h8| <= 1.52*2^33 */ + + c4 = (h4 + (1 << 25)) >> 26 + h5 += c4 + h4 -= c4 << 26 + c8 = (h8 + (1 << 25)) >> 26 + h9 += c8 + h8 -= c8 << 26 + /* |h4| <= 2^25; from now on fits into int32 unchanged */ + /* |h8| <= 2^25; from now on fits into int32 unchanged */ + /* |h5| <= 1.01*2^24 */ + /* |h9| <= 1.51*2^58 */ + + c9 = (h9 + (1 << 24)) >> 25 + h0 += c9 * 19 + h9 -= c9 << 25 + /* |h9| <= 2^24; from now on fits into int32 unchanged */ + /* |h0| <= 1.8*2^37 */ + + c0 = (h0 + (1 << 25)) >> 26 + h1 += c0 + h0 -= c0 << 26 + /* |h0| <= 2^25; from now on fits into int32 unchanged */ + /* |h1| <= 1.01*2^24 */ + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// FeMul calculates h = f * g +// Can overlap h with f or g. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Notes on implementation strategy: +// +// Using schoolbook multiplication. +// Karatsuba would save a little in some cost models. +// +// Most multiplications by 2 and 19 are 32-bit precomputations; +// cheaper than 64-bit postcomputations. +// +// There is one remaining multiplication by 19 in the carry chain; +// one *19 precomputation can be merged into this, +// but the resulting data flow is considerably less clean. +// +// There are 12 carries below. +// 10 of them are 2-way parallelizable and vectorizable. +// Can get away with 11 carries, but then data flow is much deeper. +// +// With tighter constraints on inputs, can squeeze carries into int32. +func FeMul(h, f, g *FieldElement) { + f0 := int64(f[0]) + f1 := int64(f[1]) + f2 := int64(f[2]) + f3 := int64(f[3]) + f4 := int64(f[4]) + f5 := int64(f[5]) + f6 := int64(f[6]) + f7 := int64(f[7]) + f8 := int64(f[8]) + f9 := int64(f[9]) + + f1_2 := int64(2 * f[1]) + f3_2 := int64(2 * f[3]) + f5_2 := int64(2 * f[5]) + f7_2 := int64(2 * f[7]) + f9_2 := int64(2 * f[9]) + + g0 := int64(g[0]) + g1 := int64(g[1]) + g2 := int64(g[2]) + g3 := int64(g[3]) + g4 := int64(g[4]) + g5 := int64(g[5]) + g6 := int64(g[6]) + g7 := int64(g[7]) + g8 := int64(g[8]) + g9 := int64(g[9]) + + g1_19 := int64(19 * g[1]) /* 1.4*2^29 */ + g2_19 := int64(19 * g[2]) /* 1.4*2^30; still ok */ + g3_19 := int64(19 * g[3]) + g4_19 := int64(19 * g[4]) + g5_19 := int64(19 * g[5]) + g6_19 := int64(19 * g[6]) + g7_19 := int64(19 * g[7]) + g8_19 := int64(19 * g[8]) + g9_19 := int64(19 * g[9]) + + h0 := f0*g0 + f1_2*g9_19 + f2*g8_19 + f3_2*g7_19 + f4*g6_19 + f5_2*g5_19 + f6*g4_19 + f7_2*g3_19 + f8*g2_19 + f9_2*g1_19 + h1 := f0*g1 + f1*g0 + f2*g9_19 + f3*g8_19 + f4*g7_19 + f5*g6_19 + f6*g5_19 + f7*g4_19 + f8*g3_19 + f9*g2_19 + h2 := f0*g2 + f1_2*g1 + f2*g0 + f3_2*g9_19 + f4*g8_19 + f5_2*g7_19 + f6*g6_19 + f7_2*g5_19 + f8*g4_19 + f9_2*g3_19 + h3 := f0*g3 + f1*g2 + f2*g1 + f3*g0 + f4*g9_19 + f5*g8_19 + f6*g7_19 + f7*g6_19 + f8*g5_19 + f9*g4_19 + h4 := f0*g4 + f1_2*g3 + f2*g2 + f3_2*g1 + f4*g0 + f5_2*g9_19 + f6*g8_19 + f7_2*g7_19 + f8*g6_19 + f9_2*g5_19 + h5 := f0*g5 + f1*g4 + f2*g3 + f3*g2 + f4*g1 + f5*g0 + f6*g9_19 + f7*g8_19 + f8*g7_19 + f9*g6_19 + h6 := f0*g6 + f1_2*g5 + f2*g4 + f3_2*g3 + f4*g2 + f5_2*g1 + f6*g0 + f7_2*g9_19 + f8*g8_19 + f9_2*g7_19 + h7 := f0*g7 + f1*g6 + f2*g5 + f3*g4 + f4*g3 + f5*g2 + f6*g1 + f7*g0 + f8*g9_19 + f9*g8_19 + h8 := f0*g8 + f1_2*g7 + f2*g6 + f3_2*g5 + f4*g4 + f5_2*g3 + f6*g2 + f7_2*g1 + f8*g0 + f9_2*g9_19 + h9 := f0*g9 + f1*g8 + f2*g7 + f3*g6 + f4*g5 + f5*g4 + f6*g3 + f7*g2 + f8*g1 + f9*g0 + + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +func feSquare(f *FieldElement) (h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { + f0 := int64(f[0]) + f1 := int64(f[1]) + f2 := int64(f[2]) + f3 := int64(f[3]) + f4 := int64(f[4]) + f5 := int64(f[5]) + f6 := int64(f[6]) + f7 := int64(f[7]) + f8 := int64(f[8]) + f9 := int64(f[9]) + f0_2 := int64(2 * f[0]) + f1_2 := int64(2 * f[1]) + f2_2 := int64(2 * f[2]) + f3_2 := int64(2 * f[3]) + f4_2 := int64(2 * f[4]) + f5_2 := int64(2 * f[5]) + f6_2 := int64(2 * f[6]) + f7_2 := int64(2 * f[7]) + f5_38 := 38 * f5 // 1.31*2^30 + f6_19 := 19 * f6 // 1.31*2^30 + f7_38 := 38 * f7 // 1.31*2^30 + f8_19 := 19 * f8 // 1.31*2^30 + f9_38 := 38 * f9 // 1.31*2^30 + + h0 = f0*f0 + f1_2*f9_38 + f2_2*f8_19 + f3_2*f7_38 + f4_2*f6_19 + f5*f5_38 + h1 = f0_2*f1 + f2*f9_38 + f3_2*f8_19 + f4*f7_38 + f5_2*f6_19 + h2 = f0_2*f2 + f1_2*f1 + f3_2*f9_38 + f4_2*f8_19 + f5_2*f7_38 + f6*f6_19 + h3 = f0_2*f3 + f1_2*f2 + f4*f9_38 + f5_2*f8_19 + f6*f7_38 + h4 = f0_2*f4 + f1_2*f3_2 + f2*f2 + f5_2*f9_38 + f6_2*f8_19 + f7*f7_38 + h5 = f0_2*f5 + f1_2*f4 + f2_2*f3 + f6*f9_38 + f7_2*f8_19 + h6 = f0_2*f6 + f1_2*f5_2 + f2_2*f4 + f3_2*f3 + f7_2*f9_38 + f8*f8_19 + h7 = f0_2*f7 + f1_2*f6 + f2_2*f5 + f3_2*f4 + f8*f9_38 + h8 = f0_2*f8 + f1_2*f7_2 + f2_2*f6 + f3_2*f5_2 + f4*f4 + f9*f9_38 + h9 = f0_2*f9 + f1_2*f8 + f2_2*f7 + f3_2*f6 + f4_2*f5 + + return +} + +// FeSquare calculates h = f*f. Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func FeSquare(h, f *FieldElement) { + h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +// FeSquare2 sets h = 2 * f * f +// +// Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. +// See fe_mul.c for discussion of implementation strategy. +func FeSquare2(h, f *FieldElement) { + h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) + + h0 += h0 + h1 += h1 + h2 += h2 + h3 += h3 + h4 += h4 + h5 += h5 + h6 += h6 + h7 += h7 + h8 += h8 + h9 += h9 + + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +func FeInvert(out, z *FieldElement) { + var t0, t1, t2, t3 FieldElement + var i int + + FeSquare(&t0, z) // 2^1 + FeSquare(&t1, &t0) // 2^2 + for i = 1; i < 2; i++ { // 2^3 + FeSquare(&t1, &t1) + } + FeMul(&t1, z, &t1) // 2^3 + 2^0 + FeMul(&t0, &t0, &t1) // 2^3 + 2^1 + 2^0 + FeSquare(&t2, &t0) // 2^4 + 2^2 + 2^1 + FeMul(&t1, &t1, &t2) // 2^4 + 2^3 + 2^2 + 2^1 + 2^0 + FeSquare(&t2, &t1) // 5,4,3,2,1 + for i = 1; i < 5; i++ { // 9,8,7,6,5 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 9,8,7,6,5,4,3,2,1,0 + FeSquare(&t2, &t1) // 10..1 + for i = 1; i < 10; i++ { // 19..10 + FeSquare(&t2, &t2) + } + FeMul(&t2, &t2, &t1) // 19..0 + FeSquare(&t3, &t2) // 20..1 + for i = 1; i < 20; i++ { // 39..20 + FeSquare(&t3, &t3) + } + FeMul(&t2, &t3, &t2) // 39..0 + FeSquare(&t2, &t2) // 40..1 + for i = 1; i < 10; i++ { // 49..10 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 49..0 + FeSquare(&t2, &t1) // 50..1 + for i = 1; i < 50; i++ { // 99..50 + FeSquare(&t2, &t2) + } + FeMul(&t2, &t2, &t1) // 99..0 + FeSquare(&t3, &t2) // 100..1 + for i = 1; i < 100; i++ { // 199..100 + FeSquare(&t3, &t3) + } + FeMul(&t2, &t3, &t2) // 199..0 + FeSquare(&t2, &t2) // 200..1 + for i = 1; i < 50; i++ { // 249..50 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 249..0 + FeSquare(&t1, &t1) // 250..1 + for i = 1; i < 5; i++ { // 254..5 + FeSquare(&t1, &t1) + } + FeMul(out, &t1, &t0) // 254..5,3,1,0 +} + +func fePow22523(out, z *FieldElement) { + var t0, t1, t2 FieldElement + var i int + + FeSquare(&t0, z) + for i = 1; i < 1; i++ { + FeSquare(&t0, &t0) + } + FeSquare(&t1, &t0) + for i = 1; i < 2; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, z, &t1) + FeMul(&t0, &t0, &t1) + FeSquare(&t0, &t0) + for i = 1; i < 1; i++ { + FeSquare(&t0, &t0) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 5; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 10; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, &t1, &t0) + FeSquare(&t2, &t1) + for i = 1; i < 20; i++ { + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) + FeSquare(&t1, &t1) + for i = 1; i < 10; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 50; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, &t1, &t0) + FeSquare(&t2, &t1) + for i = 1; i < 100; i++ { + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) + FeSquare(&t1, &t1) + for i = 1; i < 50; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t0, &t0) + for i = 1; i < 2; i++ { + FeSquare(&t0, &t0) + } + FeMul(out, &t0, z) +} + +// Group elements are members of the elliptic curve -x^2 + y^2 = 1 + d * x^2 * +// y^2 where d = -121665/121666. +// +// Several representations are used: +// ProjectiveGroupElement: (X:Y:Z) satisfying x=X/Z, y=Y/Z +// ExtendedGroupElement: (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT +// CompletedGroupElement: ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T +// PreComputedGroupElement: (y+x,y-x,2dxy) + +type ProjectiveGroupElement struct { + X, Y, Z FieldElement +} + +type ExtendedGroupElement struct { + X, Y, Z, T FieldElement +} + +type CompletedGroupElement struct { + X, Y, Z, T FieldElement +} + +type PreComputedGroupElement struct { + yPlusX, yMinusX, xy2d FieldElement +} + +type CachedGroupElement struct { + yPlusX, yMinusX, Z, T2d FieldElement +} + +func (p *ProjectiveGroupElement) Zero() { + FeZero(&p.X) + FeOne(&p.Y) + FeOne(&p.Z) +} + +func (p *ProjectiveGroupElement) Double(r *CompletedGroupElement) { + var t0 FieldElement + + FeSquare(&r.X, &p.X) + FeSquare(&r.Z, &p.Y) + FeSquare2(&r.T, &p.Z) + FeAdd(&r.Y, &p.X, &p.Y) + FeSquare(&t0, &r.Y) + FeAdd(&r.Y, &r.Z, &r.X) + FeSub(&r.Z, &r.Z, &r.X) + FeSub(&r.X, &t0, &r.Y) + FeSub(&r.T, &r.T, &r.Z) +} + +func (p *ProjectiveGroupElement) ToBytes(s *[32]byte) { + var recip, x, y FieldElement + + FeInvert(&recip, &p.Z) + FeMul(&x, &p.X, &recip) + FeMul(&y, &p.Y, &recip) + FeToBytes(s, &y) + s[31] ^= FeIsNegative(&x) << 7 +} + +func (p *ExtendedGroupElement) Zero() { + FeZero(&p.X) + FeOne(&p.Y) + FeOne(&p.Z) + FeZero(&p.T) +} + +func (p *ExtendedGroupElement) Double(r *CompletedGroupElement) { + var q ProjectiveGroupElement + p.ToProjective(&q) + q.Double(r) +} + +func (p *ExtendedGroupElement) ToCached(r *CachedGroupElement) { + FeAdd(&r.yPlusX, &p.Y, &p.X) + FeSub(&r.yMinusX, &p.Y, &p.X) + FeCopy(&r.Z, &p.Z) + FeMul(&r.T2d, &p.T, &d2) +} + +func (p *ExtendedGroupElement) ToProjective(r *ProjectiveGroupElement) { + FeCopy(&r.X, &p.X) + FeCopy(&r.Y, &p.Y) + FeCopy(&r.Z, &p.Z) +} + +func (p *ExtendedGroupElement) ToBytes(s *[32]byte) { + var recip, x, y FieldElement + + FeInvert(&recip, &p.Z) + FeMul(&x, &p.X, &recip) + FeMul(&y, &p.Y, &recip) + FeToBytes(s, &y) + s[31] ^= FeIsNegative(&x) << 7 +} + +func (p *ExtendedGroupElement) FromBytes(s *[32]byte) bool { + var u, v, v3, vxx, check FieldElement + + FeFromBytes(&p.Y, s) + FeOne(&p.Z) + FeSquare(&u, &p.Y) + FeMul(&v, &u, &d) + FeSub(&u, &u, &p.Z) // y = y^2-1 + FeAdd(&v, &v, &p.Z) // v = dy^2+1 + + FeSquare(&v3, &v) + FeMul(&v3, &v3, &v) // v3 = v^3 + FeSquare(&p.X, &v3) + FeMul(&p.X, &p.X, &v) + FeMul(&p.X, &p.X, &u) // x = uv^7 + + fePow22523(&p.X, &p.X) // x = (uv^7)^((q-5)/8) + FeMul(&p.X, &p.X, &v3) + FeMul(&p.X, &p.X, &u) // x = uv^3(uv^7)^((q-5)/8) + + var tmpX, tmp2 [32]byte + + FeSquare(&vxx, &p.X) + FeMul(&vxx, &vxx, &v) + FeSub(&check, &vxx, &u) // vx^2-u + if FeIsNonZero(&check) == 1 { + FeAdd(&check, &vxx, &u) // vx^2+u + if FeIsNonZero(&check) == 1 { + return false + } + FeMul(&p.X, &p.X, &SqrtM1) + + FeToBytes(&tmpX, &p.X) + for i, v := range tmpX { + tmp2[31-i] = v + } + } + + if FeIsNegative(&p.X) != (s[31] >> 7) { + FeNeg(&p.X, &p.X) + } + + FeMul(&p.T, &p.X, &p.Y) + return true +} + +func (p *CompletedGroupElement) ToProjective(r *ProjectiveGroupElement) { + FeMul(&r.X, &p.X, &p.T) + FeMul(&r.Y, &p.Y, &p.Z) + FeMul(&r.Z, &p.Z, &p.T) +} + +func (p *CompletedGroupElement) ToExtended(r *ExtendedGroupElement) { + FeMul(&r.X, &p.X, &p.T) + FeMul(&r.Y, &p.Y, &p.Z) + FeMul(&r.Z, &p.Z, &p.T) + FeMul(&r.T, &p.X, &p.Y) +} + +func (p *PreComputedGroupElement) Zero() { + FeOne(&p.yPlusX) + FeOne(&p.yMinusX) + FeZero(&p.xy2d) +} + +func geAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yPlusX) + FeMul(&r.Y, &r.Y, &q.yMinusX) + FeMul(&r.T, &q.T2d, &p.T) + FeMul(&r.X, &p.Z, &q.Z) + FeAdd(&t0, &r.X, &r.X) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeAdd(&r.Z, &t0, &r.T) + FeSub(&r.T, &t0, &r.T) +} + +func geSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yMinusX) + FeMul(&r.Y, &r.Y, &q.yPlusX) + FeMul(&r.T, &q.T2d, &p.T) + FeMul(&r.X, &p.Z, &q.Z) + FeAdd(&t0, &r.X, &r.X) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeSub(&r.Z, &t0, &r.T) + FeAdd(&r.T, &t0, &r.T) +} + +func geMixedAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yPlusX) + FeMul(&r.Y, &r.Y, &q.yMinusX) + FeMul(&r.T, &q.xy2d, &p.T) + FeAdd(&t0, &p.Z, &p.Z) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeAdd(&r.Z, &t0, &r.T) + FeSub(&r.T, &t0, &r.T) +} + +func geMixedSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yMinusX) + FeMul(&r.Y, &r.Y, &q.yPlusX) + FeMul(&r.T, &q.xy2d, &p.T) + FeAdd(&t0, &p.Z, &p.Z) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeSub(&r.Z, &t0, &r.T) + FeAdd(&r.T, &t0, &r.T) +} + +func slide(r *[256]int8, a *[32]byte) { + for i := range r { + r[i] = int8(1 & (a[i>>3] >> uint(i&7))) + } + + for i := range r { + if r[i] != 0 { + for b := 1; b <= 6 && i+b < 256; b++ { + if r[i+b] != 0 { + if r[i]+(r[i+b]<= -15 { + r[i] -= r[i+b] << uint(b) + for k := i + b; k < 256; k++ { + if r[k] == 0 { + r[k] = 1 + break + } + r[k] = 0 + } + } else { + break + } + } + } + } + } +} + +// GeDoubleScalarMultVartime sets r = a*A + b*B +// where a = a[0]+256*a[1]+...+256^31 a[31]. +// and b = b[0]+256*b[1]+...+256^31 b[31]. +// B is the Ed25519 base point (x,4/5) with x positive. +func GeDoubleScalarMultVartime(r *ProjectiveGroupElement, a *[32]byte, A *ExtendedGroupElement, b *[32]byte) { + var aSlide, bSlide [256]int8 + var Ai [8]CachedGroupElement // A,3A,5A,7A,9A,11A,13A,15A + var t CompletedGroupElement + var u, A2 ExtendedGroupElement + var i int + + slide(&aSlide, a) + slide(&bSlide, b) + + A.ToCached(&Ai[0]) + A.Double(&t) + t.ToExtended(&A2) + + for i := 0; i < 7; i++ { + geAdd(&t, &A2, &Ai[i]) + t.ToExtended(&u) + u.ToCached(&Ai[i+1]) + } + + r.Zero() + + for i = 255; i >= 0; i-- { + if aSlide[i] != 0 || bSlide[i] != 0 { + break + } + } + + for ; i >= 0; i-- { + r.Double(&t) + + if aSlide[i] > 0 { + t.ToExtended(&u) + geAdd(&t, &u, &Ai[aSlide[i]/2]) + } else if aSlide[i] < 0 { + t.ToExtended(&u) + geSub(&t, &u, &Ai[(-aSlide[i])/2]) + } + + if bSlide[i] > 0 { + t.ToExtended(&u) + geMixedAdd(&t, &u, &bi[bSlide[i]/2]) + } else if bSlide[i] < 0 { + t.ToExtended(&u) + geMixedSub(&t, &u, &bi[(-bSlide[i])/2]) + } + + t.ToProjective(r) + } +} + +// equal returns 1 if b == c and 0 otherwise, assuming that b and c are +// non-negative. +func equal(b, c int32) int32 { + x := uint32(b ^ c) + x-- + return int32(x >> 31) +} + +// negative returns 1 if b < 0 and 0 otherwise. +func negative(b int32) int32 { + return (b >> 31) & 1 +} + +func PreComputedGroupElementCMove(t, u *PreComputedGroupElement, b int32) { + FeCMove(&t.yPlusX, &u.yPlusX, b) + FeCMove(&t.yMinusX, &u.yMinusX, b) + FeCMove(&t.xy2d, &u.xy2d, b) +} + +func selectPoint(t *PreComputedGroupElement, pos int32, b int32) { + var minusT PreComputedGroupElement + bNegative := negative(b) + bAbs := b - (((-bNegative) & b) << 1) + + t.Zero() + for i := int32(0); i < 8; i++ { + PreComputedGroupElementCMove(t, &base[pos][i], equal(bAbs, i+1)) + } + FeCopy(&minusT.yPlusX, &t.yMinusX) + FeCopy(&minusT.yMinusX, &t.yPlusX) + FeNeg(&minusT.xy2d, &t.xy2d) + PreComputedGroupElementCMove(t, &minusT, bNegative) +} + +// GeScalarMultBase computes h = a*B, where +// a = a[0]+256*a[1]+...+256^31 a[31] +// B is the Ed25519 base point (x,4/5) with x positive. +// +// Preconditions: +// a[31] <= 127 +func GeScalarMultBase(h *ExtendedGroupElement, a *[32]byte) { + var e [64]int8 + + for i, v := range a { + e[2*i] = int8(v & 15) + e[2*i+1] = int8((v >> 4) & 15) + } + + // each e[i] is between 0 and 15 and e[63] is between 0 and 7. + + carry := int8(0) + for i := 0; i < 63; i++ { + e[i] += carry + carry = (e[i] + 8) >> 4 + e[i] -= carry << 4 + } + e[63] += carry + // each e[i] is between -8 and 8. + + h.Zero() + var t PreComputedGroupElement + var r CompletedGroupElement + for i := int32(1); i < 64; i += 2 { + selectPoint(&t, i/2, int32(e[i])) + geMixedAdd(&r, h, &t) + r.ToExtended(h) + } + + var s ProjectiveGroupElement + + h.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToExtended(h) + + for i := int32(0); i < 64; i += 2 { + selectPoint(&t, i/2, int32(e[i])) + geMixedAdd(&r, h, &t) + r.ToExtended(h) + } +} + +// The scalars are GF(2^252 + 27742317777372353535851937790883648493). + +// Input: +// a[0]+256*a[1]+...+256^31*a[31] = a +// b[0]+256*b[1]+...+256^31*b[31] = b +// c[0]+256*c[1]+...+256^31*c[31] = c +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +func ScMulAdd(s, a, b, c *[32]byte) { + a0 := 2097151 & load3(a[:]) + a1 := 2097151 & (load4(a[2:]) >> 5) + a2 := 2097151 & (load3(a[5:]) >> 2) + a3 := 2097151 & (load4(a[7:]) >> 7) + a4 := 2097151 & (load4(a[10:]) >> 4) + a5 := 2097151 & (load3(a[13:]) >> 1) + a6 := 2097151 & (load4(a[15:]) >> 6) + a7 := 2097151 & (load3(a[18:]) >> 3) + a8 := 2097151 & load3(a[21:]) + a9 := 2097151 & (load4(a[23:]) >> 5) + a10 := 2097151 & (load3(a[26:]) >> 2) + a11 := (load4(a[28:]) >> 7) + b0 := 2097151 & load3(b[:]) + b1 := 2097151 & (load4(b[2:]) >> 5) + b2 := 2097151 & (load3(b[5:]) >> 2) + b3 := 2097151 & (load4(b[7:]) >> 7) + b4 := 2097151 & (load4(b[10:]) >> 4) + b5 := 2097151 & (load3(b[13:]) >> 1) + b6 := 2097151 & (load4(b[15:]) >> 6) + b7 := 2097151 & (load3(b[18:]) >> 3) + b8 := 2097151 & load3(b[21:]) + b9 := 2097151 & (load4(b[23:]) >> 5) + b10 := 2097151 & (load3(b[26:]) >> 2) + b11 := (load4(b[28:]) >> 7) + c0 := 2097151 & load3(c[:]) + c1 := 2097151 & (load4(c[2:]) >> 5) + c2 := 2097151 & (load3(c[5:]) >> 2) + c3 := 2097151 & (load4(c[7:]) >> 7) + c4 := 2097151 & (load4(c[10:]) >> 4) + c5 := 2097151 & (load3(c[13:]) >> 1) + c6 := 2097151 & (load4(c[15:]) >> 6) + c7 := 2097151 & (load3(c[18:]) >> 3) + c8 := 2097151 & load3(c[21:]) + c9 := 2097151 & (load4(c[23:]) >> 5) + c10 := 2097151 & (load3(c[26:]) >> 2) + c11 := (load4(c[28:]) >> 7) + var carry [23]int64 + + s0 := c0 + a0*b0 + s1 := c1 + a0*b1 + a1*b0 + s2 := c2 + a0*b2 + a1*b1 + a2*b0 + s3 := c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0 + s4 := c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0 + s5 := c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0 + s6 := c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0 + s7 := c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0 + s8 := c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0 + s9 := c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0 + s10 := c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0 + s11 := c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0 + s12 := a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1 + s13 := a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2 + s14 := a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3 + s15 := a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4 + s16 := a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5 + s17 := a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6 + s18 := a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7 + s19 := a8*b11 + a9*b10 + a10*b9 + a11*b8 + s20 := a9*b11 + a10*b10 + a11*b9 + s21 := a10*b11 + a11*b10 + s22 := a11 * b11 + s23 := int64(0) + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + carry[18] = (s18 + (1 << 20)) >> 21 + s19 += carry[18] + s18 -= carry[18] << 21 + carry[20] = (s20 + (1 << 20)) >> 21 + s21 += carry[20] + s20 -= carry[20] << 21 + carry[22] = (s22 + (1 << 20)) >> 21 + s23 += carry[22] + s22 -= carry[22] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + carry[17] = (s17 + (1 << 20)) >> 21 + s18 += carry[17] + s17 -= carry[17] << 21 + carry[19] = (s19 + (1 << 20)) >> 21 + s20 += carry[19] + s19 -= carry[19] << 21 + carry[21] = (s21 + (1 << 20)) >> 21 + s22 += carry[21] + s21 -= carry[21] << 21 + + s11 += s23 * 666643 + s12 += s23 * 470296 + s13 += s23 * 654183 + s14 -= s23 * 997805 + s15 += s23 * 136657 + s16 -= s23 * 683901 + s23 = 0 + + s10 += s22 * 666643 + s11 += s22 * 470296 + s12 += s22 * 654183 + s13 -= s22 * 997805 + s14 += s22 * 136657 + s15 -= s22 * 683901 + s22 = 0 + + s9 += s21 * 666643 + s10 += s21 * 470296 + s11 += s21 * 654183 + s12 -= s21 * 997805 + s13 += s21 * 136657 + s14 -= s21 * 683901 + s21 = 0 + + s8 += s20 * 666643 + s9 += s20 * 470296 + s10 += s20 * 654183 + s11 -= s20 * 997805 + s12 += s20 * 136657 + s13 -= s20 * 683901 + s20 = 0 + + s7 += s19 * 666643 + s8 += s19 * 470296 + s9 += s19 * 654183 + s10 -= s19 * 997805 + s11 += s19 * 136657 + s12 -= s19 * 683901 + s19 = 0 + + s6 += s18 * 666643 + s7 += s18 * 470296 + s8 += s18 * 654183 + s9 -= s18 * 997805 + s10 += s18 * 136657 + s11 -= s18 * 683901 + s18 = 0 + + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + + s5 += s17 * 666643 + s6 += s17 * 470296 + s7 += s17 * 654183 + s8 -= s17 * 997805 + s9 += s17 * 136657 + s10 -= s17 * 683901 + s17 = 0 + + s4 += s16 * 666643 + s5 += s16 * 470296 + s6 += s16 * 654183 + s7 -= s16 * 997805 + s8 += s16 * 136657 + s9 -= s16 * 683901 + s16 = 0 + + s3 += s15 * 666643 + s4 += s15 * 470296 + s5 += s15 * 654183 + s6 -= s15 * 997805 + s7 += s15 * 136657 + s8 -= s15 * 683901 + s15 = 0 + + s2 += s14 * 666643 + s3 += s14 * 470296 + s4 += s14 * 654183 + s5 -= s14 * 997805 + s6 += s14 * 136657 + s7 -= s14 * 683901 + s14 = 0 + + s1 += s13 * 666643 + s2 += s13 * 470296 + s3 += s13 * 654183 + s4 -= s13 * 997805 + s5 += s13 * 136657 + s6 -= s13 * 683901 + s13 = 0 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[11] = s11 >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + s[0] = byte(s0 >> 0) + s[1] = byte(s0 >> 8) + s[2] = byte((s0 >> 16) | (s1 << 5)) + s[3] = byte(s1 >> 3) + s[4] = byte(s1 >> 11) + s[5] = byte((s1 >> 19) | (s2 << 2)) + s[6] = byte(s2 >> 6) + s[7] = byte((s2 >> 14) | (s3 << 7)) + s[8] = byte(s3 >> 1) + s[9] = byte(s3 >> 9) + s[10] = byte((s3 >> 17) | (s4 << 4)) + s[11] = byte(s4 >> 4) + s[12] = byte(s4 >> 12) + s[13] = byte((s4 >> 20) | (s5 << 1)) + s[14] = byte(s5 >> 7) + s[15] = byte((s5 >> 15) | (s6 << 6)) + s[16] = byte(s6 >> 2) + s[17] = byte(s6 >> 10) + s[18] = byte((s6 >> 18) | (s7 << 3)) + s[19] = byte(s7 >> 5) + s[20] = byte(s7 >> 13) + s[21] = byte(s8 >> 0) + s[22] = byte(s8 >> 8) + s[23] = byte((s8 >> 16) | (s9 << 5)) + s[24] = byte(s9 >> 3) + s[25] = byte(s9 >> 11) + s[26] = byte((s9 >> 19) | (s10 << 2)) + s[27] = byte(s10 >> 6) + s[28] = byte((s10 >> 14) | (s11 << 7)) + s[29] = byte(s11 >> 1) + s[30] = byte(s11 >> 9) + s[31] = byte(s11 >> 17) +} + +// Input: +// s[0]+256*s[1]+...+256^63*s[63] = s +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = s mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +func ScReduce(out *[32]byte, s *[64]byte) { + s0 := 2097151 & load3(s[:]) + s1 := 2097151 & (load4(s[2:]) >> 5) + s2 := 2097151 & (load3(s[5:]) >> 2) + s3 := 2097151 & (load4(s[7:]) >> 7) + s4 := 2097151 & (load4(s[10:]) >> 4) + s5 := 2097151 & (load3(s[13:]) >> 1) + s6 := 2097151 & (load4(s[15:]) >> 6) + s7 := 2097151 & (load3(s[18:]) >> 3) + s8 := 2097151 & load3(s[21:]) + s9 := 2097151 & (load4(s[23:]) >> 5) + s10 := 2097151 & (load3(s[26:]) >> 2) + s11 := 2097151 & (load4(s[28:]) >> 7) + s12 := 2097151 & (load4(s[31:]) >> 4) + s13 := 2097151 & (load3(s[34:]) >> 1) + s14 := 2097151 & (load4(s[36:]) >> 6) + s15 := 2097151 & (load3(s[39:]) >> 3) + s16 := 2097151 & load3(s[42:]) + s17 := 2097151 & (load4(s[44:]) >> 5) + s18 := 2097151 & (load3(s[47:]) >> 2) + s19 := 2097151 & (load4(s[49:]) >> 7) + s20 := 2097151 & (load4(s[52:]) >> 4) + s21 := 2097151 & (load3(s[55:]) >> 1) + s22 := 2097151 & (load4(s[57:]) >> 6) + s23 := (load4(s[60:]) >> 3) + + s11 += s23 * 666643 + s12 += s23 * 470296 + s13 += s23 * 654183 + s14 -= s23 * 997805 + s15 += s23 * 136657 + s16 -= s23 * 683901 + s23 = 0 + + s10 += s22 * 666643 + s11 += s22 * 470296 + s12 += s22 * 654183 + s13 -= s22 * 997805 + s14 += s22 * 136657 + s15 -= s22 * 683901 + s22 = 0 + + s9 += s21 * 666643 + s10 += s21 * 470296 + s11 += s21 * 654183 + s12 -= s21 * 997805 + s13 += s21 * 136657 + s14 -= s21 * 683901 + s21 = 0 + + s8 += s20 * 666643 + s9 += s20 * 470296 + s10 += s20 * 654183 + s11 -= s20 * 997805 + s12 += s20 * 136657 + s13 -= s20 * 683901 + s20 = 0 + + s7 += s19 * 666643 + s8 += s19 * 470296 + s9 += s19 * 654183 + s10 -= s19 * 997805 + s11 += s19 * 136657 + s12 -= s19 * 683901 + s19 = 0 + + s6 += s18 * 666643 + s7 += s18 * 470296 + s8 += s18 * 654183 + s9 -= s18 * 997805 + s10 += s18 * 136657 + s11 -= s18 * 683901 + s18 = 0 + + var carry [17]int64 + + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + + s5 += s17 * 666643 + s6 += s17 * 470296 + s7 += s17 * 654183 + s8 -= s17 * 997805 + s9 += s17 * 136657 + s10 -= s17 * 683901 + s17 = 0 + + s4 += s16 * 666643 + s5 += s16 * 470296 + s6 += s16 * 654183 + s7 -= s16 * 997805 + s8 += s16 * 136657 + s9 -= s16 * 683901 + s16 = 0 + + s3 += s15 * 666643 + s4 += s15 * 470296 + s5 += s15 * 654183 + s6 -= s15 * 997805 + s7 += s15 * 136657 + s8 -= s15 * 683901 + s15 = 0 + + s2 += s14 * 666643 + s3 += s14 * 470296 + s4 += s14 * 654183 + s5 -= s14 * 997805 + s6 += s14 * 136657 + s7 -= s14 * 683901 + s14 = 0 + + s1 += s13 * 666643 + s2 += s13 * 470296 + s3 += s13 * 654183 + s4 -= s13 * 997805 + s5 += s13 * 136657 + s6 -= s13 * 683901 + s13 = 0 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[11] = s11 >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + out[0] = byte(s0 >> 0) + out[1] = byte(s0 >> 8) + out[2] = byte((s0 >> 16) | (s1 << 5)) + out[3] = byte(s1 >> 3) + out[4] = byte(s1 >> 11) + out[5] = byte((s1 >> 19) | (s2 << 2)) + out[6] = byte(s2 >> 6) + out[7] = byte((s2 >> 14) | (s3 << 7)) + out[8] = byte(s3 >> 1) + out[9] = byte(s3 >> 9) + out[10] = byte((s3 >> 17) | (s4 << 4)) + out[11] = byte(s4 >> 4) + out[12] = byte(s4 >> 12) + out[13] = byte((s4 >> 20) | (s5 << 1)) + out[14] = byte(s5 >> 7) + out[15] = byte((s5 >> 15) | (s6 << 6)) + out[16] = byte(s6 >> 2) + out[17] = byte(s6 >> 10) + out[18] = byte((s6 >> 18) | (s7 << 3)) + out[19] = byte(s7 >> 5) + out[20] = byte(s7 >> 13) + out[21] = byte(s8 >> 0) + out[22] = byte(s8 >> 8) + out[23] = byte((s8 >> 16) | (s9 << 5)) + out[24] = byte(s9 >> 3) + out[25] = byte(s9 >> 11) + out[26] = byte((s9 >> 19) | (s10 << 2)) + out[27] = byte(s10 >> 6) + out[28] = byte((s10 >> 14) | (s11 << 7)) + out[29] = byte(s11 >> 1) + out[30] = byte(s11 >> 9) + out[31] = byte(s11 >> 17) +} diff --git a/vendor/golang.org/x/crypto/ed25519/testdata/sign.input.gz b/vendor/golang.org/x/crypto/ed25519/testdata/sign.input.gz new file mode 100644 index 0000000000000000000000000000000000000000..41030690c0db39a0279304a46f002a625caa9080 GIT binary patch literal 50330 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¤ zlQ$!hi%}8rZ%fs@d9}ko$K;!oye<#8l1~b5#gV<6%-bfWU0C^I+sD{n|7)k@@~BAd zA+KG&Bg#8uUzV_n+{Lc0ZXY$EDL3%jw516L0ZQ%H|%IWi3GF*jD z^EkW-kF4)U`J^xk?+rpE;fHF?uxgpT+6DH0BfKEQ;=R{x-qQTjp--9hHamYXX<44y zRLe~=OKhju*Ye;Pz>NHnc41}!1%73gG-j?x85O43VGXOsF7v#dm7bipmbB{ zD^c%vM`l2lH5HE%ha&=VGg7))`8^*&$!fBRwZ+GJ^k$KVv4pKeB)ItfSo&n(=_>J2 zK7Z>k9eq!RWW0!K9oTLe+HB`@4_{)1#27KW%0hlDt+H%8W&J7WdgT3%@eDFf9cZV@P=8f=sezjr z-1uYu^EAY-5VG@%c18pna>gf3_wvWz070-lfS)0S{B?l84)9;;0Dpp`iY@U!&c4bg z*&G^uZgu1_J2f}>_ig1VqsW#thJ>4CJ?{G(C4N%wYkoXfvaz2Q`SbW(`6EX>{SEu0 z9VZXvV=nw|3A~S>9Qyh7160pb-pAfpmH#OAC}TYDbSipK!SEjrNNn2dV_D`GfwyM3 ztO#zzj+W)s;tc!q>4`;wE*uJzqMzSQ&iz`5Py6`6z(ka2)O93&R#;A0N-`eprMv|# zap2%sYrcS*<%;mxWieV+3;O0kl*!V%#J;sCuNL&bFUF{_B6`<|JNG310m-bll z-uK{Tm)r}Il&dx?M&aRqIZ7^lG%(WcOyJR~&9OWOeh(lqS`6Q4DLTc>pp(gZx`ciH8WMGpI2jAFV zvkJzFecBMly7%r8-|V;=NH|mKO9QhEZv-1KX{)lzHb>fm3|2+ulsTL9c8=&uz4L;p z5=)%>mV;&%4+s%<$sO@r2bJ z1)Ke!QNL8$QnSpv`d4C(T9hPk6kqkRPngJdy!=j;o1|lHATK$x)C-RG+OP(}TG}CA zz)@@t25oIWfXc3RgPK!+ zUEr?^{Fl1GAD56SOm+hs<2pYfA0yQP1~NzJmEE7`b-=dQVKv}wf0SY^|6)BT0B_xlJUX41R3QXS>3uLxh>V zHOQBZ>sG7t7lcvYU8b}!HPunTb+zY|q{g8BCGW8fYh#)JFo37wH+xy?OVRuuel@f`O{``IPg(#E(?R&`iJX$cj8HqYV9ei4!``k z)1fR7MvQ;HA7ig}j`aZK-&yij$RQ2DUoVOy$tiiZjG=4!jfC5`Q-0K+y{P&(k(Y&yT@Yz1wJqm)zV~2DZaDDtG?;00Q->YxAFQ4FUt<~ zT?6kUtps_=CKG-;G3&1r{B?r=awqsh@n%!OyQ>2-m}xq4Cs2{rOb8D$!R8Ze_DaVa z6{Vr%EpmZ?2w9lx@xD9*07I>5yHBLRqec$7t6G>|Dl$2_=3#%!{`vI- zB9+kR8g zEn<_&+8ZmD14yaD53bO%ENF}D`bfnvqKw~Nu2>8J&$FM3ZLmMk>3D!0&wD&y1sut{ zcpcXPaBNAhK{Ql^*n=G(gcM$Y1g^etb*PH8irFqfo{hju%$mw6;y^NLSKw^kDZMKZ zqkbG_ReF_9fY?%109RkFaFYX3(GIWaYR7L_LQ2O=u`G2)V|%Y!Qk2Hd>TVSf zF4e7VaUSXO+^AR^unI&ACeOohqT(#z!70Fe=d1S*pYTzJv~dVql+1RdE^tWdPXXE$ z>HLnJARxhwcgmu6zp+4q0%)ZsZ=Lb^rG!19(t*XP%x)*3>|KST4__nN{s)YO%ZF%I zdxZ+H{#XU6B8dF;2awrp89Yi6J8YuJb?nI#8a%4z^xAlF3why__Oj`F+bc=1Q#!R0 z0JA5^V8R{j?_{wrhUC;4mB0oVNBfxhN-#DtIoLc%B;U3a{dI%CZtySQ27fRzX@%_( zZzaAHj3aA|GvG3P)}f&1pnOo!oTz@WQBoBp3+A%2)DNmcFKKoZ&F+T}tk1MJdr5jE zY25o@s;}aQ)?x|EQtVTH!0_|y2Y7o&Eor+|h_YMb9esX`qD4W;q-93Ly;`yoHiPV^Fm^%|Q3@C&Mbu%|@h z4KQcZ@@q-1Qk+CLr>Zp@4m-RXIC6QNx9rBm#zv@$OA^>ZluPVL5!#$)FESQLBI;rA z1BhZhr@C2jdRUPhQNLh1kK(~>`i(D-&-1(3UU2qv>TEv;V7K0yE~qZs>pgO%ekL&D zMZh@f1X*V*#uDX@7JV<9pgOCzy+L^>Y~&0`-eeM#Q|YqX#QPnY9qDMnloB#NTgh~_ zU531dQ%SbJj_}tJ{v{mYPq1|X!>*y6oE?1shhgHyKZayJ!`3Z(r{CT*+WAslJ<4?} z8KIseNQ76x9L%Os##b8_9>=w*;|8T$8hH+C$3#6+91-Ic&EqH6pI<+KLY!j7JHP#L zt;#S!My^}op_#YNc0&M0H^23LYknLIq4qr#!OrXDD#!xgUkPm4nltovOYi|NXtvACqTp_Q0h`{fjUyp0 zHMjS0?2*KLL?N}F0cH&lrp}uenCn%ciFH4`dTI_wM*p?k|5XN>$GgKv9{%#RMn?&M zY|~(!`jRG7VRt3-Vv>|x-QwaS%PSwbC$UeqadCPl9Hl8bcY+Zy>MF_Jk_?GWf0YUc z_#VD|7tHmsJINN=*GpsD2D?P<@kmdG56c|}a0q@z^}j)`A#f;`8nhXJ zaROUYSpzXo_|TGSN#SXPPkcNngxl@$Rhb32ri3tMy^3>*7yATk`3?O#f%qyGp$HAJ zZU|=OW3!R`2XqKfzgzj|rqs&dMG2uG(vNi^--~O;B4Kvop#(cG5<*m@a8Q*K!Boi2 zcc@WFEOt~<%`jqN2OP5BL9QLg6Zy3)9dRPB_nfO<0#>k9uOuJ9)*aLfxS(}6V? zAQP3|Nsk@FB%4NQ3AkG4k>;j9PgVL2&zUy8?~}^clclJseU8qcb`?Gz$4JSG%I!SO zAxMcas!5H%8INk3CxrU*>j&7mVIQHYKaxjbKLl?U2-&`^`o77_V*0BAs$zq0gf zwv~)P!3B(>hGaYNBE`$Ey(bi{joKJ1j-~VklOp)f3pvSJKirw zIrM=9z%Azl@l|Ecg7bUH&c~*Zt38inw#JShtgp+t$<}VZXMpKy>mz|D*y|`cytOQz zGE#I-*(O@)VF^JmnDKcCB+9jT0)7cp1k8tB=bt~1wxtkBE&G$!OQ9E)67TBZB>XT= zxg#q0Y~|vR7U;Nx&6{!-4)X>-pMaM;(XB=B_UFBiDkOt{@B>C#(iQK$6vf7-S9j)v zkhIm+JYNY;*pMXod_{`FeqGH}PeYbelKH!gS0P2Mc#9xqkz4c+h9af-!L@CLXlq&` zSMdRDpHTif!(V6kmvM$a@^iBgWV~DYClM!4yqt8064rUwC9$|FC1exD`v6_d-VZeb zDf*vwMsO|5c?Q+DL&wLidrGdgiv@bMhJF*N-nl3Ts+A(K&+Lq!Uq1jOMh3dd^12^k zV9Lj~wx-}kvGmQNDC~Q(9ra3|VsFAuRDG%kHn2)aRLyLAS9HR5h*EYB>29jE!qQsvDUj{b4KyfRi!Ti-y7{k%NfG3udW(;m`Dcf}KIjSun?`R#Fl zb#P=*CSeb7Br`qeZ^Z6|A-2^OSvt}q<1@TdqS^*(Z+qYgTNM6N<+gL8@*LmX#ORqi z8&v2>wRZuTha9<5aY|{l?N2`*=41I_IyFxzh#l>1Pf}|#^M*Gbi&EAiN@b=Rr-&J7 zQ^in(xI|+WYp0>II%@buaUZhUQy@#bc{z}Z#9;%||qU6*{vuLq$d&^a=h~D$` znD_Hdvr5%xtJC#DVmf(?hey2nM%lftMMtQD;qaXhTyUIU|I`HHYS^M9pv0!*lv%(; zumKivzCV3+<%hj#ZOuMQX>>9LK?Vb^p!&i5#yY>2u;r~c$h9;TjH2LKirJ0Jea9>D zIkRsfYyr)&TwgECmCMQYSLwd4i41c%3iHX$`qv%)y2HPYJN#j3vn=_nM(xxr!^^ny zvh&pNZ0nWYSV^6x4(tVT>?bNIZcPPlkO7TcTZ5exuNyWLi&W=+l7UEX_K#=&Gl_cM z)ksiUCq)TAbIQ-JAK-!E+YSI}?C{a>@@1eKAOQuAeAwm9)cE+YdxFjRZ^`2Q#;h_c zt4{SvLN4AZN<1l$2Ij{Oau&3eQd5+$$tvJ{6s4T(Em3V#grd8;D?Ak)|0 z8TKkKr5O2DAOODUrY0}cp@x-=-qF<1HO66!AhzArcz?fd?Oi@+{*#?}t9!-{;KD6M zb2jO{vO-Nqy9Bz)&dll-)$0Vd=f;h126F)o+o(j_;A0yeL1Da_ zT0#|M5u{$W3ACw6LzO#7`(t{Omu#oRdgpN_$g`akz}GETFF@^FQt<5Ap{jpwf4Y*J zz)ZU-?N0$|37bI_r^-))*YcvoTs&QUtVpyP8;CusW90XhG>NKw6GtQH!ZyxGh+-=i zub+lj%2@Ut^DT7%d;#5gw(S)j5pp^&L7aTlZUrM_Iuh>y$#W*8%PjFuhl#<7LfaHx zwG@WRO}NHOWS3~`6Ur0_6Q*DAcuW1B8AFL`drPUGam2<~uAkSt3IJXNCzt9SCf>XY z&ZmC$BI6KA`LD7)ow+5kUHp~z)EZ1w3InH{%GAgNX&oTH4*1)9)zxin4T(rbk>O=4 zvGd5b)>W4e;jcsdb%=i{hxn5m1@TPIL8{ZT%`N4Tv<7rywGvfae9l`aBIJaSZ;0K_ zEp&>0;DvH-t6Uk*k zly%>2R0NaNG9d2FZvmH<88W^dusDKzEMczH+aJ_*C0dex{+o**0mlLDbj zou1&?1h1(IFYex{$Zzekk^)y>$F$h)DrW=>d~M7LKvGOCZrLJ8?5~4yb|T)-v)=`N znXId9HjY;~6MZiGUNs*{3%b5}FY_;zBH7dX;Nbxq6H#KZ!=z+^(>Bj@)oxT7A zs{F@%ce^mVbg6YZ!!NnXj@=l0_KRn;OXgrGzrz%WXl)V&2*mk9kx z>z4ho9$&$Yb zJF|ajNE^zhWwi<^P$us|5koi}>Ynu8#sDI!D6zh2I54F>V}D)ZuS@)kxx}AFlqXxb z%NUSczx6A1g|pX@rTVj8P3?Cac_+5>C!6|I{YfW?sCec~ zpUBW7nNv?M3k(1l>*Hk|L-NvJK7jv>CpOg#9yzYkT~(^1W(Ocue@nKyNF#Aqlvorf zAXojE12@N`+SBANPQ{wHfHqphQ?WJW%2;V3)a%$RMo`zs1FOo-o!h1eoHy{-(mUco z8$YWXgHtUSWTrl`;p3b~){T|bwZqymh=ltF0tzO6ZXd^sTFmgd9=H=<2uBoe;7!v! z4*{DEs^&3qFY1~u%BC1d^ba9+amUU`=DcOQVVb18W>Dv)F;Bm*1fM$u( zo_Oal7`DM;^Dp@LS2jhS)t%Dy1|f!}AgnDlpcFe!z7bvrX^ET^)Z4@NAXynpwaG(9Gh^rmGSW>?IIvyCFF!4||`Qpcz<`6n1 z`{Yd&3XBpgsDg;8@`8GwH~0~C zRpjy@ip#V}P<>v@3u29dgNi=b3F_y|DG!v)TLMV_B&pI($wExd>uD{{AKvkj1s>a^ z>Zc)@yQ&+`3fdMnr(u5iTb+YG4mNmC;;l+tT|VlBy@0?jV3r~y_mU*DYykJ+-6$?G z2}03!RV)`@Ck#&M+7_YzuT%VWihnt$_)`Hk)PO-61c1chlSiFReoBReol*K|7pSJ> zX`j@Yk9S$~QZBP@m@;ppCS{HwtdIX?u{FyPtY|Y|DoPPbl?TjWZEPy3ttxoQpZ)y) z0k+xorBFIZZb?ZWqP=zxAn$Bd>O7B)2h{L-5m!G;SV=W0RTpeH*;L^@f~>kTN7S_7 zkt^L* zIG5+GA$o)_Rq}P#o45hwy(}p}HrM;~K_y+^pvK(mEUj|vmXj3RNAl1#9kN!DGCC#J z*lKmhR}9h-o{?T<-|zHy?GKf*W~GnsLJ!Mqk34$`b0!Y0r%I-OMbF8OMO%Disnbb; zeAC8%EKnY#Lx_xCE89fHdjZMbH)zx9<2fCClI@04Zw&dL30PH0f|5sZc&=me!y8E3 zpZuIH2S=+iq=xkn167((m4GGO5%dI3+kiO_qeqwcL^<#<(<@KjSW)isKk*2fv=pggsE*J#?)5+?q!ZuY-JXea+{ywV7PwCtp9{=kWf8F9= z&n^Dg>Acc|oyll(Y$Gip-V^48<3dVDMW_3S40?=~!d zT|>4eKDi|+YFeA|Yw45eho5nN?RssPEWGQKM~Md?p-NVcM|Slac};99B@aH*>$$gr z)@Ky3iPH5q9-J)fR7+GrY85B3q|$aS*#n6*09K&gXM3Y4!7O<^KS}Biel>9dZ0NK! z8%byaqP>b6ncrW#NMix=-GgyqAri$ZtnAd9JR{_IEcJ2pi#U`N|4LxTNVHLUcKfFo zlD(PXj$|uk9ujYS(x+XDCe;uril?LGiQUKsF3Bkrs{(j}A>PMUD6khFTJ8{izD*KR zHM)xm%6;`6t~&)JlBc(b(4MAdC6$0=ze!2n2;_S_^ij=yedHo+E^dOw5Xg42++WY5 zuwvfw)l;(XN>rLl5eWj1L(OgQ|1gLr$mETawWW}KUiqULTvXoi>pW^Y6=A8V`!nkx zI{h@oz`M+jU{vC2akgI4;o;q{*P;oBUyc-e{-Hhy@O*;2mq#1m>YG8+Wlag0_sN?tbU_Pq~~5QDa%e~{#$K} z{Tnt-V^h?FZ#keL{&zYg*?%NWsJE29R{m)!S5@tw8;TrA>?Y|^uTd^G?Aw7}t91}W zNu*9z4jcXX^#hudRU1^c`9ChZB_`h%szbHhpib=u$s{>tDQn|VQ%kaJ7ExN z0*kV%SGxNihx4vO9U-7=UMuE&Fa|z!k=i54-jmJbG%%2MkHN-D`Gm9MI^%fiLGGRE z*;o1C9TTlwu#Cqeko-?_FP%T2 z-em^ov4~)J{)2oL*_dVnkrn&%9wJchyMS#k z@h-~Q(KYX#)pnQDM7fxIq|nNb2SG|AAHKrt_p@+5uTKv2#$EBtL!SXZ4lQ6Ap z4}oeYuNpIdUE{B7{ENEApQYU0r~5>zSMu{%zZQ(RNs*jL>-KS`U}HafyK~Dt>b+lH z#TJLM6@0a#tJEVUb4Ll>4pI<*<<(j;xYG9pU z$LaODkd?cjm5@88*?V+)H@uEZUut%b)QJa*?cBEjGSz3kT@yXIxFCnj#sUH%@U6#x zf&H__Z@5?zk+)|y?BQ(O>1LM?s5JVC9Jl)S?u63mfUvH>hh_JsEJ96%~Q zWd|U2HsFs?g6RzB=sd;+wy_KZ7Q2?b_q+NC*2t$(1QQ*?u!}UM`h9m{mzoHvJYJ&a zFe|nN+`W<7jB;8TM))snU4C1w%7iYN0Na*FuOAs+X7Uz%zO1(0 zvw`n?JZ9K(L+0abbpZ=ss*j&yqZHnRKfWPQ``Ak*$sm3-F8@sVKg`-UE0|v1yjLbY z$V!=HRUYF?@mp~0OsHu!_QGo3BT1CvD-td_p8=ld@e*Se(5sC;Q%bGB&hghd{zaYR zj}Qu^;gwV_GNU^9Q$14aSG_#jNcN{C@k$nF8w}58Wxh6b>dJRCucNS6>`0CtwH}KU z+Ls;Q_B>w)5kO`e&xwUM&9=kWvDvDhUq68D2>t2g{t<^faZaMz=RY#5vtw}t={`#m zq$Kwr#eX6Bf}_;8&X0Pa`E?GK-|QGek{L>VxQSEOiodK2l3k76z)PF}d`hBM+02N8VT;v~X~K~LT={nSD!}U}%e2Ra zof5qvhKNi|+&Y&qD+^w&N9y2rn+d;D1+fznnj-h=5_?ORu6 zNIHip1@mj6eB5!Y_^LE5`vA#^BJ?p)rPoa}*-ty?Y!Cpn?NXM5PI7}w*gbRe=+19z zA4N3v8^zquuOA>0=T`A2t_yB?x@(9%YR&)3)yrsSS@71(B|@hCfOQsl;y?Dcg=$aj_4Y!!?SsMZcv zB`|sbO2{BiWX6M}jFnMw=P>4czfe%CA0R7D#YPJO@j_+Ffe#`Zx}Gr!T<>oy;iH_CP- zSs_D$TPFSh#_?1Ttg6#f6Y-Q~PKTAF%(^0atcUvlnQC4HyCuQUm0%|2IcTqh4?Q|w zS6Rc*r~RV1zFoNhH~Gt(N=F|+leU&+1l5gMd!b|iSZ7;mcczGV`9}n;=%u~-jghAu ziLCt2rc@SQmak>A)5Jvb$19I2@rGi0*e@|`-|s}L-7p^+RftM6Dq94WXU%}x)w>jM zkn7Lyk}zB;^qnO%kH`CY*`)TwM<{66x#w%c@eqdE0eexnj}Wncs9Vk*((8gyfm$pe zx#g;)OsNu{gO|=v;SkfU9b*qe&655^=Q{&M{~XP0X*-=gSz^npRFw*3cwfBa46)UA zEzComO&ml;FQC2J9)BI=uY>#xJIJ4B@BLO@W(U@7klno*3eHHyPTdZCTf!FgDlF0> zwc^~$(WPu%+(Q|PJ2$&au(EMT$A?YBbol2$Bhb`k!TD4>CLf`iYSlJy+Ar|y2S`+) z9#K%afxj*uklP#gP>CkcpENxSb7t}FB~*p_fI^2=mG}&d$;xM`T3Kn2QRi*m=)bt58ROyO>WUstYj#T-bC=)Qr zz1pUrr;xwWycXO-Bd5j#ih*;FtRa_*ccmD3nK$W7!Ycb+k^^!0oMcG~Tq#pw1L!<5 zMcJdt|HA3Q_3GL~?OAG*bytbi5H=W;Bu}tw(JmS14znBOe@4Nn*p3v70`vT-U@dt$Sw>wBHo3A=|lhigWBmXE1L zmX>LI)75EZrVk!vL{`V^hU{g76-A#QMAo{?cHZX!yb+U#-)*c>CMa+#YMzL^lpkHf zrA1n(#96~2hLJ&XUX6<231D6;00+Zm!3IC{vvB)^ixUwKfz(^hA>}XuAjo459tY=9 zECmpM5xWv$LQzjj5drBH!S!q4AL7i~Z256@qG*;1fcJODAMZ+SvNm$^r;n{@?DAh1 z`RgM8;x6*XMhnW>fTe=a_%Z3mW!njb9Dq$pOQ50#Xb6Oa9b>?kyrd*6AVety{4#BM-Fu&eQHqeBDNC9B!^rdv?o%l75 zCEO9DE>;rkY?h?gXY(pkASBvmJJ}^b;8WYVVsyKg9QjbSW8f;OsbfRu@9$WmL+H8s?=Ap5NJavrQ7U8D4 z7w@(_avAD`Juf)35lIN%^W$f%av|3BA=uuNv?fv-uXdgpZ10s{%kZ$5oyj1eyTOrU z23|k;1FN>GPK=_uRmDaA^BzxoKRHJ=VX}Ry;Jj0wFEC)TDG1*kWc z2+o>br$e*J(*Y3?|c+;-NP?rLL2qr^jTk>-!D9P&8q%hOJE?IS-?UsgyuMjjJw zWI0{=*~y;mn0rwm79?n&BoL%WieGXwE3W1OctwpZ0GUjPC1>SzRp4ODJdcUvgHhDV z5BYmuXQH=yfQ5Cn&E&lv9F$iUSL|xKvDB&(RXNi@5qdmlk!g@pvDv68d*P$r*1Rm# zRf8gvvhfVHTeG}MtVUXne)G1sTAJgs_`qCSRbfiaC&tQRU3nRS6_-#o%AP!RV9x6s zRPWb5QXCif4#t$EBQ1x|)r7<>Q@Q84UtiOGKMMJG#g{cIk8Hi)+&tg+>?ah;Y6-2% z%DknNkoy&E@(Zs6nEO%Y(9yym<)T+9H9m@^8+L()kAu%)s>?wjcjQHFl>;80?E9AX ztIFqCJAFVxdVbofbKWGYmv-c!}Q_sRb z9CHBahzcy3RxnF93#c$;5%Tar^;&5K-{+&&tt!C+W!^_#4vNlIw=F2GZ(f}bTUJTG zeZZF=H?JuXcyI{(P8Jhvl)Y(lSgemQ`6SA`Ap3`N8#d3MD8nP=`$I(t z%1r!z`&kv)lS!&xwL`)PYk*y&{NO8(4X(qe3Puu7S7RzkbN=i+2`@Q0&Nb7wi#Vl4 zo+I%5ATkJ$qN75kas^xlL>%Q5&YIc2n+-0`|`uYm4E|))NN>0psSAoPX0)XpV+;fZ=eY^ zm&aVI=cvMxbAqzT)TpC;SGoMA0){`bNP2m}233}MfDbQNdPOw_l-cx%q5x@q42yY- zS0EU@oo8d-jXBi}aIcDNvV2ow#3|9{cnRDAe14TzcW%%N)sZJ3RjJj3Evp{dlsMQm z;$rO$q@=TC8er_RbR;wn@t=cfRzymNi`^`hMPK;*z! zgt%4il^0WP%aa^z_9&HkqW#;kOSXjxc6*)Q+NHVNQx!Gr(W~9BYk*CZStau`ug6PL z`Q%rA97U4DUsw6-D*sJfQ!#A#b?kw^zYHO4O)o2;~_6 zf+U&9_{(Xrt@xlcz)#*-7+a1ri6$C9KOW_{6p7_4=D9D0_qa-LE12;_6<)!BYK;Jl z@grbkd6j=E`%`cs08sJQ$DV`*7f3JD4wt*~y>GE!Btgjl%C)sI9%`h+z;fhq2HB zn9?rb)Ny)HV6jI?-A-I3@1mUj6_YLy=#`VR*=3VJ)!u?!d#%+6I7&qYFz{9iC5h$g zj?Rb+k?MFKk8_AvD&ssJdPHR(qiUd*1H0xQwx%h(11imux8qj)NY%kqSd@s7D0kcG zhn<${T{H-2_Y&S)*Pa|c+WaLrx5<)e7q4uT+le5Bf4yd|ZG23c_XZb@BGT*jr_dYGeNKF=R!4C0?_KCprM>goq@M+;$iOnZ&?=d4EM+Wyw3)eWd zLEsmP*mZV*(p_SNe|9M=$CRGb-}rS?z7yD#<07~G_5s_jd%zx_J{1Uw9y-2Q9WdqA z$eKql1RdSwQMj@DmyU`VlweqY$#>r4Xm^%bBeBc?B`FxGKx2C)KU|(lyz-(4FcS;b z4tOlQtgmXlcqk<}+XLvrRH;LGg^Zoc^Hgz|ZrAIa-ir-vXgR)dRf6qet-;oGtflUy za4zxZsmj2_WwERH6GbEVAYpd>coM{at#M*s8^0Mdl=OJxi9cb0k2>cysS5a3Yyppv z>uZ-(KxG$?W0!}HLC^q_rTwa_iMzF2)jxA)E!c*v1XGjxpFNF7NME>cj8gjfpz%^V<4F*s<}9THT3xnSQ}~ zUMBM$S$?Omx`W;=d$REq04x470eBAiElI_Q<8oA;hbKBMPDE5YXFkgV9YP+D+o}@C z)`qP&*6z7BT?0bfE0toDXmh&)v&%H>flLFHvse7{>%F#pupdDd2I>{KGV=MZqa3M% zCV)FR@(pHQ-6j=NLLHv&n3d}7^T$EMWkGTIt?n`JfSa)^v)C<+{q1tpNhlUin?xY<-d)) z{ITnt)I;t2o&15qz-0UN5G_(oQ8M>XJ%#A2Nyp>FIK|n?-({v9K@TR`*8#P)xJI-l zETu;&q4w9glRYYS9@!KlzQXmS5npOc{QUX>!>W*d)>iWan8fO~>aJS~VdcAIRb&tD zDcJ`lELc)+Nui3R>A6Z{fJj*k4Bc_xqJoOJ<{dtl$2*dMA9h8B0S_J$8wctgSt|Ia zInO1Nen0$^L&^O~c4)e+etX#>YVUP$vZ%Zm(4%%KmM0IS+%_x$hcc!5+*3sN&gdv| zR!`X!4sukhD=C*aB#Z|gILG*aW=6(sNa=vQHn183iFECtv|-K{9&j(9g?@*T8@JsEZS|?IX_$ zrqlVYHr(26WlJ;m@2O4XNu?>Me6TXPikH&|A1&67rG2c8vJ-nu(>;)wCo3nF?}xUl zYKW?XHgN7Vv?&5TU4Z@$X>v2s0Xz?~RK@!Ft|VA5bz&kVO8AE~vrt*EjNU*Hpz`d6 z3S_i^Jpp?=2BJ!EJcqjGc>ixV94~o4rpNx#ys<%mKFl$JU|$Igj$WF`KOk*~>Q&ov zPQ^|kEREf<6K~F+!?GlzWVl|1OX2gp{2)MlvUyTOwg|>2cJCx+36+S7a9e zB7J;Bcc8Jn9#y1d7kMb?U#h5IKcL&jM?tC>$o9zdyBwZ)B}=fS_~514A&Y;OZX|17 zmFZSJIGn|jotWEqUg7vi-fUIC0bBfL!oxqV)uZ;#l7*-gZ>^y?0)1+g@1=VQVV@5G_DRXfZ`r0C zj926idiP0HF~EJ`OR^Adb+gH_;bsCK@;AIzfgk5g#4)NOHr-!pO?Bj|743 zr;zrtg}>z=DGq#vk9hi0{YEb78*Ls7$^gqZ1Mmde_Gc^Jb@8k-%XbJ?pM?E^0)q|1 zETLol9vLm$i(lN1LS5bINAgPT3q$r$yyabFwD{L${<_S6Gne^8HavEstn+-# zBF&anUO!sSQ+3(gYP-TI_W|PAz&)g4RVJ1{aEeP_$U9GIMd7}3_a4=rc<_W%;rt** zLoFXC=C>)y6Yj%?rxnxq`Sk+?Q}6W(@N)ycB+Lq$lb(=WkTxvm@=#>k_}M*$RoeV( zlS!RTqEalSGzmS33!^CMA|J-Xj{@xEGqMSj{28)T;~gM*X8?%?49{|t+P48bftsF^ z-cx62n3?Nkd+#GNrBdW)%5})s0aFg(Rpv(3cVCapolO`QnM4a7R|v}ZTl**szyK-nR*WYHT` z)&kqeXtHGimcKcw4)EBRRVJRb7C0Mok|UrUwv@fJ5&(eZ=CDu48>lZ*y-EuJjAeFw zq~uf?2b3G-=G?3f1qc5Ot9_{bWs;Vb1*rTD;M5cx&bgN;fWJs&#ka*v=(rBbgE`Ab z=lD>~7eFz#LgeJ-FRoib?LvM<=_o$Lv~S2M#_$rZbLN*~1cbx60dUF`@vEg+1N0S7 zmfiz2Cu&P*0A8-E{S-x~6(#60H{f-vRH6Z|@)9DCqe>oFc|F48Dl0C#kVM`@oAZ#O zo?en?JOI> z!})|FYl~E|1R{r_*1Ikz|z?fH%Lyc>7yQIXm#T6_gm%Qni;$Ix7fTR3a z#~J$606~2HC#X*DmvaQKwP&b&T|?w>%69%c*!Fsx?O~+KOF6J=p2oZs&Iu2+$v1AL zL%b`P-t<)m=e>=6o+&?}a%Od6PW3}^%5mBxlD={F@J^s;im9nVKfylhf{wv9&ScnF zKZ#pUluuxIDok~cYmFnZBmu(jBBz<3 zMN|Xdo#+|1vnEgWGC_V3gP$tVll4feHiyBld{+txq4~on z51$BgN_xH0`>&?Hqc;+r%__?5thvP0-?%0?2vb*@x|TBcBl~aw$^);O;yyc5Dd=nc zM!@%XE-rU;=|k>Nz$LK&EMFuP=pUQ0ECT?_x6epWNOnB$uYdLH%LSK`AY?Yh-+OC> z`FnOy@kHUdVo#~v(}^IJq{n)x1z2tN2)K3~6C42$OC)<%BPuk<7We$p5t2?2g-fu?j(xZ+WrMNaW1Q zYJ(xuOVz>ew;_Y?iEXOOR_5@u%EJftA~@>4Ws}Iqa8~}h&0n|qZ|F9ERJ@leC1=y# zhyt0;_OAkN`Kr@uN4x#BUjx-dfopWKo9ti*V3oUmdT)K@M5HcfP4kR)>EPM?^93rj zX~>&DC@{1prtTBT8y3!utGhjsQ ztCz*@I#UjU>f~_#>qv?669b znMT00++sh8K=I9m08CS3C$`h2fK#%~2D=WM0qih;TC6XDsB4DLm_vC2+1W6frPSRk zCuZsP07&WTIo~17VJg=~bwir;0&RD@EL6C&C-|@9{B@lFmX7m>kLo6)HEv+Vj*?yH zu+-q6CCMu2Pgy02hh5M^A@+D}Yahz<=s%GKQ#-c|2eI+HptMuZ9&le0eV~3#b)E5v z!`NH-5eKs7tlrPBA7Bc$Pk+thNxoOP_fdM-X4Ji2n;kv%m8NkFycN@2*;$Vm)9v!h zVx#1I0L#RLfPN|ZoA>@k1bBL|qvO~T>8wMO#YE|544VShVSo0In6fJGSx)k3n+=nP ztL>XESwC-nbCtI9k*qgjO-{T-voNq>@N27Dn;@~JeJPV*Rs1TVga6$}@f($|S$dV> zlB}4AAf&+ia!2oxc!rk(J{Db8rsBBfR!iDRG^*Jw{z;#9q@bN>9VfjD52fij=f&R+uQcYy!NnW zLo&8glUw{c-XF6(Yf;umwIy)0eV!8}Pzx&3EhVh)(!~`H*zC8G)-r&5GDSSa(G0m`EM8}|3`Vz#`Y70m#lZ0%3(GFUj!Y0O$8_1>hMy!uQd;Nui!kqN)IaE z@H^J-zLI)Mgux+2OY`z3s5wi3%c;ba`J2D4^VfC$o4U@Q<`6}qkh%))<`F`1zW0$g ziQiqRD3xs*hr(U~OzO%9h=nfC$rrB~vg9k*bqHMQaa{poso~};0d=+|_}G?2d3_}7oKKVw z#U^0hrr9Kwyfz#~`eFM{ciR$=Vm#|v4#8YeSi!uVImr)Bu>*0!0QKMje0sEnD6+h- zigcbV$@s&!s9@IHOF^$L9e6Z=Lp#1bu`2*gBo)!5UrI+eY?#1 z82Q={h^IatL}W_$T^)R|@%E19Tx*i#`4H8*JgPV(Vct=BvvJOmi=yNJ(ueYaGV3%smGr5$C<&1q4xIh zyX+84Eu`}^v-9_(-^E8yPh&32%0HBAGkqfCt&Hvf@Jp$YmZE#lvjx2KZAO>)5eg7} zx<`5zYDa49z!$43DzPQOBHN26R$kM-ULw{cF!sOB^VfO)+d9u5&s7`N%p<9#J8SAh zoSYord_`0=Dh-b-sl~x|Z3c0$lw$S zMeuko$n$+C=quM&rk5PMQ|-?ym2qT~|6v!vP>ZJ(RLjxxinlstN0?H{%(GudGt^nA zF*}f4j3lPJx!xIeRd>{avhP54t=_A$X_;OV9+s6N?3#(q+c23fO*otP|_J zxyea-jvCM^Ue8PEo&frU?MzfuS3p`A^*MpV9}l*}P5hA4v7$kHfuEsXdHJ}Str2Wb zkfJ7EMSOOa3WgxxJAu?LX9B?{xUm=ZdtX^MJG;Xwt;iFpRHVCej)q^iY#R8E!P&4N zFC2jt)2Ygf?w|OHQTOmPm7N^$C*H}rWLwT9L%Pel~V_T)aQOe!$voDrD8}GV4z)f)wp2J#Z&9mQb-z=|8fE;kPPR87Y<@ zu+yL{25MqZ;0(*oF8lP9#0AU_d7&W~CL?1oBVp{bC@ zf6U@g)mWC}1MEK7xmG+9Pz8u!UA+Nt80E=*Hi_Sy-}7R%+5F_5Ch2b5szVH{chK!_QO>$|`JD)(Iu|0`ZOJgH0f<4uUP+qEm~tzPx>ELJCiMz;vmS;+P=(X5_uxlPCcsnsCownr)+ z!Mx+FOnmISokcYc{F?mNE5Cl@rSt)HUq*lC`R8`Xt7oTV6sw4{+hfd+3~~s8>?5#q zG;vUHfJW5~a;W~5kwH#8%)S#-WP$6Z4=(~hRcdNJ)BfV+VASlYvGLa!vSdX`ueCK{ zw%hY33q5;pmkBzPDL;*HE!LC-22vs8>LfQLGHmze& zKBo(mkUScb;lt!?!?f7DQ#_=8UtWdUae1iD|LTvT50Z+2z$hxED#Z~9QC~-sm#UvCR6uZxe?+ zX};KMt~0%HNlQ6w_XIpQ-b*fQ7Qj6?6AX0v^$kfRT2d}+dzTwfSP$2 z%fxC^_BTN7^)gBg(xfEmn+phd@+Eoi`AjEPmc6c2UB zdF3o6#Vlnk`s%i#^D!gfMy&SQ@dx+ouZEWa(=V$%2;G>5*VV6*RMpgh$(>Sy4REyp zMV*CF6lq(9N$Y8k*&2_954!;Zd}PKufxO||7d74p^57*fJ}b*kfR=}+F@Ig?uM7S6 zcA-C1T;!&{T2+5iUipwnmnu}A_3;swdU)Qw-?WHa(VM-SX_8*meRKM7kUQ&+xAgo0 zg>2R6DY48TgF;a4;RfdF*6Lu!lm(yu&J3m9eBm*yu4C zYO*?Ss-MA}8bc*If!j`+VaU$&4xZ3U zeuZ&aQZwMtEHgz1(1)@$PRwMFcvA`N9baP?(Z{wwMz={Q0pR%F-o1eU>&S-vI{zam zQj<(-uhy+_FIQU~b)Nt+9SZ{q~$_7?H@jJdxeG93< zVwFchTGjDQ-zbKcva~n~S=)3QoEJ($BI<0yc6|r$Q9z_Or%{ZjGH)#Q!Z z;1eETb$84U`wRdh7Cd6pkY-c5r^tYZ)f6WaS1oV3jhDw16t*QYgI6gZw&LGA5zufp zqPQ>3x~=pb0}Y7{l-C%f|9C%3&aQPnWPfSSF3`-2=ElO+pnT7KzUq9+3y|$U zSql__h zF{14Sfpdr0#LXLQSn~j2jU+j8Q2~>81^Av=7x794mY~qVlNOelU-?Qu*_zWNUpX;( zodA14gulWP-1WY>*}*nX!pI{Cb!gbBIs7WLR29LKi5bL^6R4{4put&vq?iF^CCT+2 zIuR1nb^J+%&`D5|6dXGYd3v9HWH{$9<-y57H+4xZ6$m~Xe`gOtuvaTj&V1l1c-uoU zzsEO;A0=ab_jzr?%6WY)!8m9ba!pe&u;Tt-{-U4xC^2mhT-|_74wocaxHs<&g+^UfYh2=k(M_ zl!qPw+r?vlYd%dpaAkOAY2Q_^bSU^xahPQS)WRll53m?Xv9C8BSv%Ca^pqjapI<)! zucG$k#k_q4##QK6D zrsAE{-_*}dQkdS9lgJ@SnBx>XhROe}0Md)e32Sw&?ES6tB3TX3P;DtA@<{yEyW-Wm zT>EhNoftKc6~OmCACEo-^~bS%Z=GHKA7?-x{%(WOhAd)px#N;Q)Ln>4?_iDjEP=&X zGDb^-;=H>n(}$FFYe`q&`ALqvf)q0q9IK-2m1hqG%4-zjR8_d>`6i42Dd~+w%M2#X z8>~`0yB5Juqf{#IA_v`j6k5X19uS1Np@Jd&-9C?Yo%$ ztunp>UZr3-1bB*xCR>KGKyp;GfT4EYq{ zK7_NDqfA8qgf%frdCe4v@RIu0mq)~pOssw9xwU@OF-d7_o(~AMZ)>O26VB1U>4(QN z>{^^G^7uiX9?YM8I@j4(DYGAkHnzP!A=DQu-Ta@{3IU~znD=)IeMXrfY@8@v;Gm~j z%K;9R@46kxIr9lXcYD4Sh{K4A=Szzqv0uqPZ4@r*S_hsr9=YJgb7!;P+ve<&%T$)& zCXA3B>cJa_+9qEIGR(L`xei*!;2>@L_yE0~SEp5xy8^_Xr8Ae%SApuA@M)0oX2jsNe!hu2bF+Pl3J_wqF4{B!!p`#7^}o}{Fve#n2jxF zQec2-?K~VV%Ix)r-J!N=TK>h<3F1=ruqm=J-CK&2RpqP8B3ni%By_~)1rqQsNHf*n zEfvQ+JF@e{lTQL;A60DkQse}mIj+)R9bW(NqdzBBg!0#w{<_k?i7WkyoEdyKg zk{PfN9Jt9R@HVM}D>DY2B}8V;6_1nRS=tr#vS*U37~5mRR+CY=znF~oDC`wT^6mgW zU++qQxp1TvA0Gh_-!@uu{$vHb5`am(@zPV)uWlyeWaBeC4E#NZtvh&t~wDx+M~XMXHS6e#xjmoo!MxP zr>y+VJPDj7D%yLs7eDvt=3WsRD_pK!+3NOscHyYaR-?POPohJmZ>0f0ty4hUczCi@ z+pmn&z&)0{sPCiDk3Pf7cK|MF;Z*|t8LZ%VUe?6+^OsepjEI|h|KO}|U?VP3(nBZ0 zTTbKx3@xcq|4;+)gh(|c2gE~qC{mej3}8Qt)wiuemOKR$h%aLAR&3%RIe720R8f*p zU0%KEp}v|YK-8)(*Vmo#5fu%^fA5dO$Z3LK*@`uJ^#way_9iSq{R}Y77?;&Ga)uSa#8>eWS`XV{L(grnkT>m=LUuXJv zai%{vv?06kd3O3(@1vUFPVTX2uiPvOEvvE(+5?fuChy4d*<);sNLCcjmL0tY2FSbi zemBOdwLBo9#rLzccuiU)sW{m|vL=5wGyn4E*AHlNXW8#U9oj<~rsk?X*;YL?eN&59 z7USv>?*{P9@NA%u-9p&TeNQ{>o&3W6D!ttK9VI599^f)$IoN#q@`s*+i>e;= z*FFCCYCfMu!Ucw8RdgJskRR@mw9`Wp%wH=TGI3+cRPWvfyr55;U6&*MUbzBR`VIZ5 zFQBJ8`Dr^cZUQQ@(JU4$zb84o`v*DW@_0Qv%i3_~Y9Cv=9S9&@8D<4wxnQ{oN&;5P z?3R+g1X4Uv%juX%0wLP@TJh!Em_#$g&z9&;kN6Gf^x0jd)K$N}i_{G{}w(wo+wkKSZW&_qTj5>fb%D$42{2ywutv+Z7cieVY6V?|S1W zh+so?STBIgIVUL~(pHusy)P)aDilu$3Lh6tJcP|o*!tw=fnU;=|IjnJgaI9s)$f(kY2-h{96z$k4qwt16X$hmi3+#Y-2U zDlbJIqI#lwIm!=HUi7;@5dSztOq`T}a2{0zdHXP(Xe9)_b`4S%#IcHW^AuY!CPw+YAPEgzRBMS5#wGU6uHFSj}FROg0@$;^-YMRwc1{ zXOeE^O-|QiC&~yea9S(8xjsa39-2C@or)iu;H5_L)&K~+?)N#CRm6}qp3Xp zc)a~6=emS$P3@$&)u;>zC?#jb7hPLRr z07)|g)kIMLrzp711Ne8tA^;GEX{{~$pF@u_|1@?)ns&DOj{QwU@(d&LLjm!T8@2Y` zr!U<0I`lFgIig+p!^5kCwr%&UrYZiz;w6cVu2O{rYJSQ27}=y>0%^0zgxrb8K6^^v zR#Zp|>dcNV!M6l|2_*Gy+wut08&pd$>K^ZSw-dtGaNfx*PpXk$k(;VTkL2Nb5`-Q} z2yDBjWWX;dasA229(sNb zR!s&TSI1N?YuvHURjAf$W{X2f?;0_WqpG^8&e(7zDlCC7)PA10MXO$cJv@6fJjNk2jd2vu2 zz~BZORCflwsmb@)HPnIQBd~){|C*cL0xXi#{QU-S25>m2?&_$GO?Gph1nC^snjjKuOd&vQhvL*)Tt-6w=+HpoaeRLW52KRKkI<= zZ%~*OB*l(*oS+e`Fo^==KjCZeZoQhPt1oLx0jU#Y_9 z0vDAC+%830BU{mNEG(9-TVg2uHs|gw36Om8=W;!*=fQ!2OUpjGXC!+Y%2Nh7`$q8| zt3Y^?cap-Dua>lSJaG<&(A9#ko|rudT&NZ*^+N4JY23Iod9>GiG5;eHrU&@mN0NX zO-}vCTkB7d>=O);t*<6ZvqKIN-`7~D{blMTv8z%Z90>wreWjKC>r#JR>fg+z{*b>_ zRBK!MePz+ULv4zu?(n^06W4U^h+=!mv{f;J%dYU-EJ+<%OuXV&+YYdT$yG|h{Ji!` zS>6|WL_*Z_x_BVxMFnkhC@Hr6{Q3cEfESbW#jK^v13G~srY&fjoG#b26lO6@d!e!# zbJD?J7bJG97ho3Or@ywKbxd12fJcVXEK!j~C4ZSQl)O|HU%8Z}+P1gQBOmH*IdXs$ z$J1JG0;IY*rw43k>m;dwyEZlF0K_#iJ`cLY;sGDjHlV zDcJkQZ;_ALkRMt571DtdciTiT24aBa0+UNUyxshzyl@GwEi z{J_#t7Z`m3hxI!V@?_^L2#9?ab68lyY+w73akHlpXDR&ndE9N==RiS|@{wX_DORiU zap-@Y>aSD%+d0)ArEcu~-$zjxR_DbEZ_~c0lbf#Yw#?E4t z*S^Pxop;!)KYj`c-#WqE|}PxbOb&00p4jg zy{X3IwC9%3MwtfrU*35t7**tOQ{scV6tohcQZz4KAVmsN&je(7&^D+{6`P>azWI|k zI@sQ}uXw&{+sYQ$OYpkCeOzhrVWZ9sD$iDBb-te6TBME`U9L}XdSoM)lwCTthrxq?8Gz@i^$8O3lNt$F?cTH!R^WO?r7f=4uR)Tbp~yGRQXPDKhHcHN z^G2eR115l8`;(--!@RtTcnSptrTLIiAS&HgyaT3ymlg;otbvccd3pqH^A&*y4_=bI z+CVI4T8s&6ZUK+7|84-lPY)%oM%3ojd76hKJG>sF2}mValoN^=dp?<=m*Qg-btqQB z?g4{eKk+V}&V8&)9^6ey_-e6~m~yU5n7~V=7i+VHPiU#!-z$i;W!m{5(E7$pWLAF^ zcOekAZ$j6Ts$!M$rH{tL$O9g$RAN6h0EGvSa|bHERuWcK2R1V&zc^(c7JqQWrtoE4 zyS~KmWLR}}1_ZsyRwMKIeC1VGT46`LArmRNzRZdk@MQt=nb)#6mMzRN%E6wjPhfa1%ESiQn3{L~jbo&YoDstKJd+ z9Ry|%_M^U1&3p;2;ABpjPO?1PU=bqDDvc;+-X%}KX|P@_t18G{8+fLGr)?nO7ZEYe zxUKU&Mva@Wq@u=Qzdf^~TdD!4E}!-0!Ya0)m@)D0TuJM|EoFk5K9+UdEnn-2B@cDy z_YPv|DJmf5Vjp+`c(3I+@OKP#tBf|DSd1ynQL&r-!&h>c%3~*wyF~1_^P~7gsJ39M zXhc*2N)G2<9D3|d0~g?aminSdLjedJ>Kt~UY;5Y>OL-femYrqV9u<%B>&HWuqaJXt zo8Op<^R9Su4fB1D#O?gFGPSaF%n>)fd|Mk?{sT7j^r7-rkjd6wz1K^iI6dW;oSwY_ zdXK}qmTrwxCZUVpyd99m0Z(S3r%Sb+lv)-EO(OG#4b?iObHc|C0gG4`Wk%wK=LKL6 z<>adZjb6JDfBC0Btd@gG8WMqL2LevwUxJ4()!cD-Oopbi`|~t@N9+o1mf#iMQl&aQ zSE6zTSvU*RlRO*1x4={b|pq2J1~V zfXpLZignpD-$Sms{+deScD|qF+YhBxvr)+Prr;w9hIdp~@nS>miN|`M0&%PTJsT;? zHXe|W>S-*{1ugD|tL%ockDp&Zfc-k1{Ac$Hd7f*`zYPoQ2ql$ z!~I-EJfn3DOm*QCN*gwbgPI9A9lNd(Fom<>8ISIOLlK`IP#Rx`=?aZv#ew^4KQ-`B zjo-p2Z?7GI(-9x9VJsqtlr`&S7EY$Z_F*^-Ch*k>#0O-@e)vi3b)TwQL<|{Z0l-sI zY4e`Ms3k`MAnL^*@%vE1b8xr|Ou~&+xf&D#cVCd$KFI@{(8FuNzii)@>tWWfld8Qd zY~HfYI_207OKSLZ(vna@l6K;Xd`s+jYy>8+Zvu#!|C5hOQZgOj&8>wC{1U*)3>f&I z3FfZ+GTYz5WRKBo@M>Qmx-!0Rg5C{_l7YHFqC#GQ&ycz?f7b?b3=xR-#6j1mynm5W-EoVMxvg_?N~{?sBJ_!f+Z0P)69*?TX=R z*+M~4?%Nab8sdp z*1ea(Z{P@y-P+@JOO`}!77v$fMcd^PmbziD5YEn)qzNM!7!oh%m{N%!Y2gTJA5t2u zOc<5h{$vF-__P_j9SHfTJFo05fi$oryw|IG;NaK3IgX`V?gCBKkB9+Bw{BO_ebo3dAwLumk{4gVb_UVy?^wxibJZr86-?k4jbJ#GKGQH4TEK0KsRW2vv_H%jcL>`}Ku6z^2!$upU4m#ibh63Oonr-D^p!U98W-{QYLZz-V;uWu%1 zYy0}Mc^SUz1@_={%VAx>*xhm~luOa?5fIprNYDmmYy-BVs!G9QgCLBC^TpGvjStcd zcy{59MLyXPqRbaAr-A2FZKjeb5f~D|mkS62_675^#6w+ZkIRqreOD&c?l%#>l&S=b zy`GbKiT{Yb9bd+8u(bjLR_AG{3OUC|v7VaRXBpTkZFp6#H{)K);|-2($zz`%UO-aZ zgVnIn`*So(iT<%FY|r(&QXdY2vWD0yk-kf`73?Sp&SF_F99-A1Ok{O{$ENDjDoaEv zJNDrxTx#2|65fxjzS<^nqhq+M8mWGIW`lRB26P9aYGeIh+>q}AUK5t&gedmP;holU zANEcDp=!TJ>LYfUP)2Ex>mcTh|DiNyhXGL}JD^q4ch^Vi8a4HU;XD|8h=1MduY3I) zyVoBK>Z!xFEqRJ=Zq;wcZvX}fBaylLN=~;iGwWb1K?-g#q_d7#9wt&r&-sp1K9$y) zKe_>@Htf71>!xT~yUSQ_iygDP;Q(p|w)^wz2TbquD~~9D6>KM%M6PQ-${~+e zC0J@~N=(V>9vgmHfF0R4RTFP3?VD`mSF>n8Z&nCM zlEeB30KNh8i&EgSJ{eDoIY~~>=gnEJeX!$1f(*Dd7eWqy2#(J#S!MR?3O3zr5S|y3*^X|KUu_3`ae$B)GRhVZPo} z;M{6S1&<{NMv}U}t5az3-(Be>em>s(bPp%H%DLxlBefE^)N0yPyU z$&XEH5?fK4NfS(%8eMg)iY-L-Bfp!LXMSVB7}E&qJrj*XcDRZdL-=FIehx3+uBVX{ zW%0=0`>{0uxMkXN2jnnJR!@%E%ZpZ<6NytG_}B7`8ZoU= z1NEXJk#Vc>Y{i17*PO%q*TMce*uS-d{c-k&ay#(Tj^wll04K4x!t$T|YLIX}-qE@m ze!xdn?Wt!&dY!Xz8U*NN%8%0n{S5Yq@-`$7SSCMukE1TsZd&tq z0JtbN!zcuaA4?9aj|PPxE>LZHVl0b*ooCrGNZIMgw*pv)XMu+6c}5XulIZ6YIC|B; zSmFm$c<{&O>8rQ31M}t;s%#Gm7v~W%vc^g{c?pO*M}{PYT>*TSIWDDSKW7>UrBKfX6I@g}NcRsH%va$}9Nb_>~8R2GS<9JzfM!Aq6l? z8^k@I=1i-DnsfKf4)UN+a~@=;w5I5#mMEwVk6=95H~4&m%}<|U5fp%?;8^D(@l3*l zO39~V2KxzeRscwWmz#i;PgnUPtXIJ)2X%mXe4y}h4sYX$N$k^WKcZI*#M@`hTC&nv zwqa2t;4zU>I?%`z4>O(Juw8gkB7IE3;8Ln z-UR@}t*S&0MFy#t$XWx2(B~q$uk`I+Y5k)sZ?>+n^v6-V^<)a2X#>dGstyxf>ac&C zUyKD+S*1RWh>?@FLzIo-7sc?u^N2=x-9cX{$ zptm1Cee&Vm2K#5_^?qYhatF7#u&YemqdthdMA=_g=cl6l1i}=`+WtLcYY1rOPw+a@WfU`u&4m!?RLXc5dt~m2)k~u^h zv|I?Mf`|%xpTbH%cij?G5LgWVeMrG~AW+A3LTJvk<1Dj&DkGK18k^Bq1STQ;vYnBcY zM0aF_TJkIz0VxT#%A^gurpN(!dt_!G_QT2_$puMf7F<)(W@7ty_}R~o;sPcuz%}JU zt#Zr%GfGfw1rID-v8$VCGo{A|-7D#1KV5Fg@hm);5-~Up{@SKT3SUnl$PWdH6?_U9WF7ea`-p2*ie#fH(PP6=@9p79ptexnvx z6?|}V1s?;FU}1gn-3~-hAy4UOx@x*!lHy&TK46&B>G<72iXDhK`ex0_IK4kN{`~#{ z-k4gumMSO3RZuD8Z;$Y_NZu5anLgb&KYarqWaz_{voo_xmc#8)64>zO?s}zu!5-1k z8R~oqe{5H+wgM;L=l~XpJd%t%(UP&M8P+RztLM2 z(nMtsYP97bO6=bW0sH+qb@DdSeL3s|*bY=c)CyF2Q*eFOJDhW_A9R1@gIIiwqUHQG z#=*{kf$y^%A#$dCyeCpP#RN__HWp=Ic2a}I4eCk0rcPv@3cCJvv%hZk{{T1pV?8@B z_3I8R;TBk?t44C9IE+h~SBmN)dr&xX0+bBu<3B3h^>MWHCdU!@G)mLsP+u}tA65Qj z)CD-m$MY=eev5x_VZ4tQewoVf=hqK-Wg@z4Tzy`!%5p5SZmE$Xz^C7X&Br>5>R#X> ztMF#!E=#KFvRly+M`4eHhpbCJlEXE72BOrcpP(?t?B(Q#rkv=JWCtKyKIKMS4=6FN z><{en3|P^Xb^^HJ-%Db#Ro1|&abFLVo^uF4@AXSD_8o=kpRA)BWMh>SSGeK(;Q6-{ zF!tW|+ez&cH|{Fh;}wL$schmBFMHVL1_B!|@colziTxjq&t}inQKAH&%F)hWA0`}= zyaTV6k+mLKqC{ALqN8%xaIhH|)tcx2a@}1_`q=8!7OQ2Fn?Qj)~}?E^^W`G2?5>rzkv z$Wj8-my$8>;-!w1e0A`V1*h{iqe#Qdr`JynRA1d&4a||i{e86P`5jR!B#Mt`rA6Ga zY&uU>N5CV-89zm6RgPb8=O=Z{*TP%~1q)<&9YyEw<6u1((Znl=mOh&zFR*&mMz|u? zA)BTWwD(7|IXkYqy?XRQ#Kf=-e%ovjQ$L*mAr!qTE(nq_Xr(%q}LT;YBU>$0}f09>? z)v@|*D@tEVLH=sZ6q#*GDVng8{Rs`PApRQ3;hElIQA}{#tR!E$ciZ{r*AKuDz;?qa zDm=abtm65^RRoQ|8A027idu|IR_-{0Bf^g?PJ9$b2WE5dr^(7tHl|QrE)evS5_p)u z4cGgOg)=MLnJ`OPeo|ylpHW{$>z7l%b{@z$@YpXfBqF>(5q6}=vXnL5QeVenfz=)g z@!4b9xa427;j03bm0<$Ww(D*E$WAO{eByiFXNQle{*gFjO}ns0AjCO^14iuXAXj45 z*d92j7t>w}{h`oRcfM%6QEG`o%y27-v`wBlxd$FV2o_TfCX%Z+07#c`ZhU80gjqsq zWW%;p%APLtPZj&Q{O)vBRvrP2J;GQ8_oh@yAi<0SCwcbo?R;6?887^!kR~B2j7SNpTGlkr}^ zt8?)xZspJ(FpwPDK~DVJ{HpXoHq9W#2rPN95Gme!m#CGG=!#;_XWiq(zwjha)g|P1 zPvlyXJlGKbitp=@4Ey6%cE0`R*AM6*l#k6@d8chd*SX=lpq!2_^%TxGdFv^>ua6_k zNx@U)Ugy8yXjT3nTn0Gi+5NN`s@g6csnxZ!ZY$N1M(A4W%W=N+x~|`{@Jot;F~2VH zopy+y~sS6(F^On>PuE`=SDxvby?Zufek7iVV(d9j^KlmP8sz7gQ9hDnu^fo-fkerL~z4@pGV&BwpN9=%<2 zodYKa;pe<2kb?&i24&T!6455U77eY52-cimYr;1$kr)hrj0%2U;*FQrEnf-v7ypEp zCmwiSR)MIR5oLanr6i^shjC+EuYY(+B4d^X_oN%VzPG4&)otXr8lWk7ip|d0!wsN2 zg&Ui&{{Y!{{p8Vn<6ayTw<)oWAxqRp;)_29o@iZ=i?FKN%u&+F3X3j6!d43u4+Qcb z+s7-odDx!{v*o*jOiwUsFUqf%A;%xZ&Y`biPVh`xH^3IhE`6Gv=vGdBnPWj;N1yH z3U*)nIAXGif}Q#6Y=52Y|1r+?=Pr*>S2+&G;$WU^KW`Ezu5(>!!NKoY zY*5DwW{Sd`AQRC13T>N*dGZDxo+4RA7or`NqP$UG!l1qHeB-$Vcye( z;G_FA9=luriv+*|0aQf-;X0BqgpOA^_rlkAR60uzRJi;N-E&EaDS97YD zR}+iGa>Lg}j@f{%5?=mzt^FtjBf-`shiKsQZ*sYR3=j8_epczux3f6PNA{7#Hn-;; z*FH9(0Wn$G`r>PVz8xDGKe3doW3heG(a*#$Y%lF<#ET2Ye)lV@0&eiN^3CeaTvD?K z{OU+9p2-Hffzz26c#FB)%plNzWwu;C!oX=#ghBWocU;D9;! zxsT*@vW4Xn$Bf=wDJ~n|TO1lxb%Ee(?^;v?@0b|bX4#dzkw(Q^l;RZ~ps*Mb@XhTo z`46c=V-TuhHL+T#A+FeVApX$`k^pGc? zFQjtuV3}+Rm~%;6XFnWg`03>Mph>k=Bn^6{RsFP3NZ;R!ZLN{=M~LV!>_}=7%2n?k zhf$N1JMYh5KY+cKdSPb?&VgJ*;U_lh<0k+Llx+*S%(?s7IbubZOMkdv>874hjs4x{1a2srwY%3XRZyV?QtFK({bvFIF!zpR%t zMWt^u1CW(#B7v4oWFSh(@QF(5Nyf0r3b1N5=oU34g0&Iynlh~jrD8G@|?t#{k% zX2p=c63%kc;!z|i-6rBEM1D7*uZ^M3G&BraO>Yc-r7d<_jh0#{- zR|)dyn6WBv+GA;^Uh~SM|22RttArdDWFo8}$JQ9tL95;yXI z`|EJO4);$v+@IQAo~Z;g=jCO^rn0gWaSiTI^7Ni=CkkqZB3UA5aXKvA3!& z3NP8_&X`4L*IufSB$;bMOb)bh2H4^}snskIZX(0RK6n55>jy{?@dU|}6zl+YzRxCL zG+bduJ&w@8iUN?pg1kZI?Ld^%3wm34r62&rSpUot$AKvNr&f)}7Ij56Lp_w3Fy>kE zghZ!Kz2SY-bPQlW#j9HKjwR*ih~I$9#FqN8*Rsgu;N?vFuy{14aH2!5YuH5oS}4!u z#83C_d^}KD#$*7ToUTCyu%3B@@>!eL0!KT8^;$A|S6V8AVtr%hTKOIeE0#tOh({>7 z8*J?jz&%#5TUZVZVWuxz-rek4?b`A>sp3oL!GmotT<*og>X5=~xuMFTx;{%iyMCE%zHNR)=l9>(0k-848fd(6R#vk4Z+ELa^eWF&y?lNu@NWD z1r2cZ4cPJa`t}nZ1R&72NHi>?$_o1DVO^*R8Nu|?u78a~-aCk1l1|EZt)XxKAT5~TliI0WTc4@V6NIJSb)&%xf-bW?+UJ{LQZE}}PjE#S{ zEKzT9a!M-5I7tRDAHwrv3G6LIgBI|D?eIC!7=*X$+!kT@{nTc{A(ZBctyl8}2Z3?; zTpvxOO)L4;^@-9*5}afzHd!Jr+FN5K`Jn1_wql}quGf-$q?cKs?dQlA zQaziTseVL*N1}eb@9ll2Oj?nr{AT;zuaO>GC6fb;HsCyHTm^WR_E>)^4j$Avf3EPH z<>g!hzi+8mdb^(@xg;Z*5M=9Rw*_XbT;B6P>9Lx1wkPINz|cue zz)Z%9)tnhtPA91gm8D`XgSRC@=3l4#b-I7f>HdH+hb?hW*kr*Iquhg3eUDGOqXpjNTsxVIIDbUM}!%zY<$r$e$zZNAGjFAY=mQV09Wm$bfNaU_go zWWK>)KcGl&r;?h)8PaT&F-g|DEDT_ybb+1WaQ5T*_$k@*Y4wRLMapZgu&!9z0>c7g zqVF3{OCVpJt8n)vEY)=mnZRZiHUac`=6=5_FmgKNtAEcgY_XE5(%2@?lFuDF97WD=Vk)xfH= zc<~mX-x17jS?k#~cj{|8+po7<_PxJps>8OdM_li%La5CtaCYFe##a;}c$Eg^Jw|ez z`)+kX!?h2zZnlRYtG3PH#89SX$dXmhwk|>(;xC-A7{2@+Bz`!RIi7sU{P9YjkyT^M zU&9|?S=DcRGQZibQvm4*(>{ltp6vX!#X~|yoS#rZpFhg`@P*m5i{-91mHj?PMO5;| zTO52=#epLrDH^*ZNhXWSQv%V6&DzuByuJ;O!7fhQTuCjv$p9a z!zR6Yp7rZ?zi#&ry4@cz*pY+dxja`jXBOt`j9TBtM|_>fR43(1N_D_LWXB&9N8#iu z!y!t^oO1Ilml4S}awRaQO>nF=p7SNX@AZEHj^x5u76^rj$Io9spvqOnuQcg?l8Vvk zErVSA(Y}h(rPG>@Hy{#7*lSg@!=!hg3gD88Z#hK+R`=p+V2lQrbL;+K?MgV+J1U8L zb8xw-RSs_8n*l4A4TV<)gYrDS#|3kRJ$Uq2(n*&6gDL$2;Z<3m#i})WlgyGUeQFEA zTqgpbq{PFuXL_66b-)C^fZh4l9)N9uPaz;o47(^Dw{_ z+4VtkyhuOWnH)!1OLul00DkPLo_9Im)m57XwXsMM-xFzrRoV32h&e&}kwILEtb1@i zZ^Ua8cba4%-u8U__7nU^ls;3=CN*(@RRYwl9(W+GJEk>RIs&ilB7}N_Sde$*VH;w( za!v-dV~jJA&x(b=c=!U@J~6c*Y61P*KSm6wOS0xe$bXH7b@EQ;XCx-X8j$z31)!d< ztJ7P`v?aGGl|$jRw0>(yfZB)ky?}20d@A|5TT&`c-BS{e_!PC+AK8qt+2B|QNV&_S zg25H%`Q!*__RW~X<;0ORpt*h259k(Pr&#&YCI^I9&cz=p) zQI7;VUymBF2uLCKd5T@RkS2?-hwLNQsVn;x4_L4wR|n^M^gLfS);d@tmUsq^TlPmc zfcxAi|KHeZYq3^?FnckW~2|NkpIi5RBTY-(}3h^h%0`>KV|vRr7(z1$r|aFzC669rC{9q zcIh5FzqLm>VLN9%B|m7AL}ZC8i>Bys!}YfW0#!Gf;i27xlpNYP=J1 zZD2B`+LRBdU!Pz3{!&GIfo-ARerYv%0F3jKT{)Sz#4OWeTUV5anD|!`UJkOd#BJCZ zO53a^?P9Q8;XEAwqKFJ=^3C)8yo?tZnd-}X({2*q8DOh0`DbE+Azjp z5*=fH0})Olkb6yg#`F0+xH#WO$~3zizSe@7-52K+qJ%e<4CLawgn=(x;m3}|z>#-X zD5;)2$#H6Fd=FW{rhV%jNK1^nWG9X>Hg#2JmJKsLVC+MJ2*l?oc$^B0Bp&z)2jzKw z_I^0!h?t?N$z+)+mrjUn4pht9>8n?w5r4v9O{;ckK_y%%o3n}tWG&dBMWw;}Ra@%T z4#_D!jFE32Sa+{)>#$q>N(H*slxg7C^?qINA9cMyqh=jIht)f#3niY85^7;!NwZcKNfegfzD;$`$)qH6eb_M5sH`~vVAW5AR zl4_}pSrK3cV7E$HHP!C5sm}+vo?vp!#bNHIq#4*)^!`l3fT7S{wo*RU4xhC|xzSs9 znKaieSiYXey4a?83T8d-)+8+gc_9~Uro*-32X$^^VfDTHg`s_ktrCx5srC#sXO$yB zv@asjRV?0VKvrT}(!yA$OvLlCXFiW3S5#C6DcC|6EPd1?l;k+Lp~%sq!{xJPP99ahwk$m-%Y=~=TUqcI4^}*; zk__Mii=^uPS~qbmCkonEDH@<|dLc6-@V@F*%S1^8JZT{bGKiWC9E38u+fEtVd?B ztSTUm3^?E4oc1Ar-9DA;ScFO&B`PcYsVd0jMoK}T<-p}Q=DXVq8dNua#L=W2sg0{F z(3s8#s4V>Je80~3&pO|qTtS@Ip-cP^e6j3K9|urn?|D%5j0{()x8y}b98n<~ULAnd zA4#>Q>MAy4joKxtR~a=VTq5W7&2i$Le85{d4R>%PWt3bm;18e{e*XFa0T%$EscRO6 z53)QKtGcJ2>mb^;Bpe5+&aMsc%6JFn0>(YE$b$k^jlJn0B{UkRaK2mJ8XW%$jBr1lotwU>3drJCk=mz zUxN*MA4xxnJ_$UTb0;F^A#ckJwsfCJL?O}Vg{z1V&3ZxS#|vR$8#GGzi>PwG8~X~%zkL4)&zfsqmZF<79o#G$9FW7ws&CiANG z6ES||AjddYR_cjRa;0+VU*(A(c!*XU6RiCFIJOJ^qN;DLiGxn4i!m<;Hb!*RaggbG zMN`&!i@hX7L#dsYxu0q3;+*5v+4S|sX`9LPzK@KD-05Mlq;-|A>z+rtRx-m}In;!2xtyod`(i$3D97s^CVTCFOP8;-%Gw#ax`qI;qUnbRFa?!PUSbKJQm=j{_ zMd8a3BnGU6f|Wj|y5nsqA%vqQ{wTSWtUns7^GEgVjU)k(vnB?whE-9*nBMD!z5*iQ z8%+fvO$T|-?N$k2&ZF5PK|v6KX#|I42*#wiX{g$Q>&&lAhWqj}#e_BdhTq@t`x}0L T!|y*De*gRjX1oxufGGk1?cM`* literal 0 HcmV?d00001 diff --git a/vendor/golang.org/x/crypto/hkdf/example_test.go b/vendor/golang.org/x/crypto/hkdf/example_test.go new file mode 100644 index 0000000..df84395 --- /dev/null +++ b/vendor/golang.org/x/crypto/hkdf/example_test.go @@ -0,0 +1,61 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package hkdf_test + +import ( + "bytes" + "crypto/rand" + "crypto/sha256" + "fmt" + "golang.org/x/crypto/hkdf" + "io" +) + +// Usage example that expands one master key into three other cryptographically +// secure keys. +func Example_usage() { + // Underlying hash function to use + hash := sha256.New + + // Cryptographically secure master key. + master := []byte{0x00, 0x01, 0x02, 0x03} // i.e. NOT this. + + // Non secret salt, optional (can be nil) + // Recommended: hash-length sized random + salt := make([]byte, hash().Size()) + n, err := io.ReadFull(rand.Reader, salt) + if n != len(salt) || err != nil { + fmt.Println("error:", err) + return + } + + // Non secret context specific info, optional (can be nil). + // Note, independent from the master key. + info := []byte{0x03, 0x14, 0x15, 0x92, 0x65} + + // Create the key derivation function + hkdf := hkdf.New(hash, master, salt, info) + + // Generate the required keys + keys := make([][]byte, 3) + for i := 0; i < len(keys); i++ { + keys[i] = make([]byte, 24) + n, err := io.ReadFull(hkdf, keys[i]) + if n != len(keys[i]) || err != nil { + fmt.Println("error:", err) + return + } + } + + // Keys should contain 192 bit random keys + for i := 1; i <= len(keys); i++ { + fmt.Printf("Key #%d: %v\n", i, !bytes.Equal(keys[i-1], make([]byte, 24))) + } + + // Output: + // Key #1: true + // Key #2: true + // Key #3: true +} diff --git a/vendor/golang.org/x/crypto/hkdf/hkdf.go b/vendor/golang.org/x/crypto/hkdf/hkdf.go new file mode 100644 index 0000000..5bc2463 --- /dev/null +++ b/vendor/golang.org/x/crypto/hkdf/hkdf.go @@ -0,0 +1,75 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package hkdf implements the HMAC-based Extract-and-Expand Key Derivation +// Function (HKDF) as defined in RFC 5869. +// +// HKDF is a cryptographic key derivation function (KDF) with the goal of +// expanding limited input keying material into one or more cryptographically +// strong secret keys. +// +// RFC 5869: https://tools.ietf.org/html/rfc5869 +package hkdf // import "golang.org/x/crypto/hkdf" + +import ( + "crypto/hmac" + "errors" + "hash" + "io" +) + +type hkdf struct { + expander hash.Hash + size int + + info []byte + counter byte + + prev []byte + cache []byte +} + +func (f *hkdf) Read(p []byte) (int, error) { + // Check whether enough data can be generated + need := len(p) + remains := len(f.cache) + int(255-f.counter+1)*f.size + if remains < need { + return 0, errors.New("hkdf: entropy limit reached") + } + // Read from the cache, if enough data is present + n := copy(p, f.cache) + p = p[n:] + + // Fill the buffer + for len(p) > 0 { + f.expander.Reset() + f.expander.Write(f.prev) + f.expander.Write(f.info) + f.expander.Write([]byte{f.counter}) + f.prev = f.expander.Sum(f.prev[:0]) + f.counter++ + + // Copy the new batch into p + f.cache = f.prev + n = copy(p, f.cache) + p = p[n:] + } + // Save leftovers for next run + f.cache = f.cache[n:] + + return need, nil +} + +// New returns a new HKDF using the given hash, the secret keying material to expand +// and optional salt and info fields. +func New(hash func() hash.Hash, secret, salt, info []byte) io.Reader { + if salt == nil { + salt = make([]byte, hash().Size()) + } + extractor := hmac.New(hash, salt) + extractor.Write(secret) + prk := extractor.Sum(nil) + + return &hkdf{hmac.New(hash, prk), extractor.Size(), info, 1, nil, nil} +} diff --git a/vendor/golang.org/x/crypto/hkdf/hkdf_test.go b/vendor/golang.org/x/crypto/hkdf/hkdf_test.go new file mode 100644 index 0000000..cee659b --- /dev/null +++ b/vendor/golang.org/x/crypto/hkdf/hkdf_test.go @@ -0,0 +1,370 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +package hkdf + +import ( + "bytes" + "crypto/md5" + "crypto/sha1" + "crypto/sha256" + "crypto/sha512" + "hash" + "io" + "testing" +) + +type hkdfTest struct { + hash func() hash.Hash + master []byte + salt []byte + info []byte + out []byte +} + +var hkdfTests = []hkdfTest{ + // Tests from RFC 5869 + { + sha256.New, + []byte{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + }, + []byte{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, + }, + []byte{ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, + }, + []byte{ + 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, + 0x90, 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a, + 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c, + 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, + 0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18, + 0x58, 0x65, + }, + }, + { + sha256.New, + []byte{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + }, + []byte{ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + }, + []byte{ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + }, + []byte{ + 0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, + 0xc8, 0xe7, 0xf7, 0x8c, 0x59, 0x6a, 0x49, 0x34, + 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8, + 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, + 0x59, 0x04, 0x5a, 0x99, 0xca, 0xc7, 0x82, 0x72, + 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09, + 0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, + 0x36, 0x77, 0x93, 0xa9, 0xac, 0xa3, 0xdb, 0x71, + 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87, + 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, + 0x1d, 0x87, + }, + }, + { + sha256.New, + []byte{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + }, + []byte{}, + []byte{}, + []byte{ + 0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, + 0x71, 0x5f, 0x80, 0x2a, 0x06, 0x3c, 0x5a, 0x31, + 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e, + 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, + 0x9d, 0x20, 0x13, 0x95, 0xfa, 0xa4, 0xb6, 0x1a, + 0x96, 0xc8, + }, + }, + { + sha1.New, + []byte{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, + }, + []byte{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, + }, + []byte{ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, + }, + []byte{ + 0x08, 0x5a, 0x01, 0xea, 0x1b, 0x10, 0xf3, 0x69, + 0x33, 0x06, 0x8b, 0x56, 0xef, 0xa5, 0xad, 0x81, + 0xa4, 0xf1, 0x4b, 0x82, 0x2f, 0x5b, 0x09, 0x15, + 0x68, 0xa9, 0xcd, 0xd4, 0xf1, 0x55, 0xfd, 0xa2, + 0xc2, 0x2e, 0x42, 0x24, 0x78, 0xd3, 0x05, 0xf3, + 0xf8, 0x96, + }, + }, + { + sha1.New, + []byte{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + }, + []byte{ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + }, + []byte{ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + }, + []byte{ + 0x0b, 0xd7, 0x70, 0xa7, 0x4d, 0x11, 0x60, 0xf7, + 0xc9, 0xf1, 0x2c, 0xd5, 0x91, 0x2a, 0x06, 0xeb, + 0xff, 0x6a, 0xdc, 0xae, 0x89, 0x9d, 0x92, 0x19, + 0x1f, 0xe4, 0x30, 0x56, 0x73, 0xba, 0x2f, 0xfe, + 0x8f, 0xa3, 0xf1, 0xa4, 0xe5, 0xad, 0x79, 0xf3, + 0xf3, 0x34, 0xb3, 0xb2, 0x02, 0xb2, 0x17, 0x3c, + 0x48, 0x6e, 0xa3, 0x7c, 0xe3, 0xd3, 0x97, 0xed, + 0x03, 0x4c, 0x7f, 0x9d, 0xfe, 0xb1, 0x5c, 0x5e, + 0x92, 0x73, 0x36, 0xd0, 0x44, 0x1f, 0x4c, 0x43, + 0x00, 0xe2, 0xcf, 0xf0, 0xd0, 0x90, 0x0b, 0x52, + 0xd3, 0xb4, + }, + }, + { + sha1.New, + []byte{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + }, + []byte{}, + []byte{}, + []byte{ + 0x0a, 0xc1, 0xaf, 0x70, 0x02, 0xb3, 0xd7, 0x61, + 0xd1, 0xe5, 0x52, 0x98, 0xda, 0x9d, 0x05, 0x06, + 0xb9, 0xae, 0x52, 0x05, 0x72, 0x20, 0xa3, 0x06, + 0xe0, 0x7b, 0x6b, 0x87, 0xe8, 0xdf, 0x21, 0xd0, + 0xea, 0x00, 0x03, 0x3d, 0xe0, 0x39, 0x84, 0xd3, + 0x49, 0x18, + }, + }, + { + sha1.New, + []byte{ + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + }, + nil, + []byte{}, + []byte{ + 0x2c, 0x91, 0x11, 0x72, 0x04, 0xd7, 0x45, 0xf3, + 0x50, 0x0d, 0x63, 0x6a, 0x62, 0xf6, 0x4f, 0x0a, + 0xb3, 0xba, 0xe5, 0x48, 0xaa, 0x53, 0xd4, 0x23, + 0xb0, 0xd1, 0xf2, 0x7e, 0xbb, 0xa6, 0xf5, 0xe5, + 0x67, 0x3a, 0x08, 0x1d, 0x70, 0xcc, 0xe7, 0xac, + 0xfc, 0x48, + }, + }, +} + +func TestHKDF(t *testing.T) { + for i, tt := range hkdfTests { + hkdf := New(tt.hash, tt.master, tt.salt, tt.info) + out := make([]byte, len(tt.out)) + + n, err := io.ReadFull(hkdf, out) + if n != len(tt.out) || err != nil { + t.Errorf("test %d: not enough output bytes: %d.", i, n) + } + + if !bytes.Equal(out, tt.out) { + t.Errorf("test %d: incorrect output: have %v, need %v.", i, out, tt.out) + } + } +} + +func TestHKDFMultiRead(t *testing.T) { + for i, tt := range hkdfTests { + hkdf := New(tt.hash, tt.master, tt.salt, tt.info) + out := make([]byte, len(tt.out)) + + for b := 0; b < len(tt.out); b++ { + n, err := io.ReadFull(hkdf, out[b:b+1]) + if n != 1 || err != nil { + t.Errorf("test %d.%d: not enough output bytes: have %d, need %d .", i, b, n, len(tt.out)) + } + } + + if !bytes.Equal(out, tt.out) { + t.Errorf("test %d: incorrect output: have %v, need %v.", i, out, tt.out) + } + } +} + +func TestHKDFLimit(t *testing.T) { + hash := sha1.New + master := []byte{0x00, 0x01, 0x02, 0x03} + info := []byte{} + + hkdf := New(hash, master, nil, info) + limit := hash().Size() * 255 + out := make([]byte, limit) + + // The maximum output bytes should be extractable + n, err := io.ReadFull(hkdf, out) + if n != limit || err != nil { + t.Errorf("not enough output bytes: %d, %v.", n, err) + } + + // Reading one more should fail + n, err = io.ReadFull(hkdf, make([]byte, 1)) + if n > 0 || err == nil { + t.Errorf("key expansion overflowed: n = %d, err = %v", n, err) + } +} + +func Benchmark16ByteMD5Single(b *testing.B) { + benchmarkHKDFSingle(md5.New, 16, b) +} + +func Benchmark20ByteSHA1Single(b *testing.B) { + benchmarkHKDFSingle(sha1.New, 20, b) +} + +func Benchmark32ByteSHA256Single(b *testing.B) { + benchmarkHKDFSingle(sha256.New, 32, b) +} + +func Benchmark64ByteSHA512Single(b *testing.B) { + benchmarkHKDFSingle(sha512.New, 64, b) +} + +func Benchmark8ByteMD5Stream(b *testing.B) { + benchmarkHKDFStream(md5.New, 8, b) +} + +func Benchmark16ByteMD5Stream(b *testing.B) { + benchmarkHKDFStream(md5.New, 16, b) +} + +func Benchmark8ByteSHA1Stream(b *testing.B) { + benchmarkHKDFStream(sha1.New, 8, b) +} + +func Benchmark20ByteSHA1Stream(b *testing.B) { + benchmarkHKDFStream(sha1.New, 20, b) +} + +func Benchmark8ByteSHA256Stream(b *testing.B) { + benchmarkHKDFStream(sha256.New, 8, b) +} + +func Benchmark32ByteSHA256Stream(b *testing.B) { + benchmarkHKDFStream(sha256.New, 32, b) +} + +func Benchmark8ByteSHA512Stream(b *testing.B) { + benchmarkHKDFStream(sha512.New, 8, b) +} + +func Benchmark64ByteSHA512Stream(b *testing.B) { + benchmarkHKDFStream(sha512.New, 64, b) +} + +func benchmarkHKDFSingle(hasher func() hash.Hash, block int, b *testing.B) { + master := []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07} + salt := []byte{0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17} + info := []byte{0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27} + out := make([]byte, block) + + b.SetBytes(int64(block)) + b.ResetTimer() + + for i := 0; i < b.N; i++ { + hkdf := New(hasher, master, salt, info) + io.ReadFull(hkdf, out) + } +} + +func benchmarkHKDFStream(hasher func() hash.Hash, block int, b *testing.B) { + master := []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07} + salt := []byte{0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17} + info := []byte{0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27} + out := make([]byte, block) + + b.SetBytes(int64(block)) + b.ResetTimer() + + hkdf := New(hasher, master, salt, info) + for i := 0; i < b.N; i++ { + _, err := io.ReadFull(hkdf, out) + if err != nil { + hkdf = New(hasher, master, salt, info) + i-- + } + } +} diff --git a/vendor/golang.org/x/crypto/md4/md4.go b/vendor/golang.org/x/crypto/md4/md4.go new file mode 100644 index 0000000..6d9ba9e --- /dev/null +++ b/vendor/golang.org/x/crypto/md4/md4.go @@ -0,0 +1,118 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package md4 implements the MD4 hash algorithm as defined in RFC 1320. +package md4 // import "golang.org/x/crypto/md4" + +import ( + "crypto" + "hash" +) + +func init() { + crypto.RegisterHash(crypto.MD4, New) +} + +// The size of an MD4 checksum in bytes. +const Size = 16 + +// The blocksize of MD4 in bytes. +const BlockSize = 64 + +const ( + _Chunk = 64 + _Init0 = 0x67452301 + _Init1 = 0xEFCDAB89 + _Init2 = 0x98BADCFE + _Init3 = 0x10325476 +) + +// digest represents the partial evaluation of a checksum. +type digest struct { + s [4]uint32 + x [_Chunk]byte + nx int + len uint64 +} + +func (d *digest) Reset() { + d.s[0] = _Init0 + d.s[1] = _Init1 + d.s[2] = _Init2 + d.s[3] = _Init3 + d.nx = 0 + d.len = 0 +} + +// New returns a new hash.Hash computing the MD4 checksum. +func New() hash.Hash { + d := new(digest) + d.Reset() + return d +} + +func (d *digest) Size() int { return Size } + +func (d *digest) BlockSize() int { return BlockSize } + +func (d *digest) Write(p []byte) (nn int, err error) { + nn = len(p) + d.len += uint64(nn) + if d.nx > 0 { + n := len(p) + if n > _Chunk-d.nx { + n = _Chunk - d.nx + } + for i := 0; i < n; i++ { + d.x[d.nx+i] = p[i] + } + d.nx += n + if d.nx == _Chunk { + _Block(d, d.x[0:]) + d.nx = 0 + } + p = p[n:] + } + n := _Block(d, p) + p = p[n:] + if len(p) > 0 { + d.nx = copy(d.x[:], p) + } + return +} + +func (d0 *digest) Sum(in []byte) []byte { + // Make a copy of d0, so that caller can keep writing and summing. + d := new(digest) + *d = *d0 + + // Padding. Add a 1 bit and 0 bits until 56 bytes mod 64. + len := d.len + var tmp [64]byte + tmp[0] = 0x80 + if len%64 < 56 { + d.Write(tmp[0 : 56-len%64]) + } else { + d.Write(tmp[0 : 64+56-len%64]) + } + + // Length in bits. + len <<= 3 + for i := uint(0); i < 8; i++ { + tmp[i] = byte(len >> (8 * i)) + } + d.Write(tmp[0:8]) + + if d.nx != 0 { + panic("d.nx != 0") + } + + for _, s := range d.s { + in = append(in, byte(s>>0)) + in = append(in, byte(s>>8)) + in = append(in, byte(s>>16)) + in = append(in, byte(s>>24)) + } + return in +} diff --git a/vendor/golang.org/x/crypto/md4/md4_test.go b/vendor/golang.org/x/crypto/md4/md4_test.go new file mode 100644 index 0000000..b56edd7 --- /dev/null +++ b/vendor/golang.org/x/crypto/md4/md4_test.go @@ -0,0 +1,71 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package md4 + +import ( + "fmt" + "io" + "testing" +) + +type md4Test struct { + out string + in string +} + +var golden = []md4Test{ + {"31d6cfe0d16ae931b73c59d7e0c089c0", ""}, + {"bde52cb31de33e46245e05fbdbd6fb24", "a"}, + {"ec388dd78999dfc7cf4632465693b6bf", "ab"}, + {"a448017aaf21d8525fc10ae87aa6729d", "abc"}, + {"41decd8f579255c5200f86a4bb3ba740", "abcd"}, + {"9803f4a34e8eb14f96adba49064a0c41", "abcde"}, + {"804e7f1c2586e50b49ac65db5b645131", "abcdef"}, + {"752f4adfe53d1da0241b5bc216d098fc", "abcdefg"}, + {"ad9daf8d49d81988590a6f0e745d15dd", "abcdefgh"}, + {"1e4e28b05464316b56402b3815ed2dfd", "abcdefghi"}, + {"dc959c6f5d6f9e04e4380777cc964b3d", "abcdefghij"}, + {"1b5701e265778898ef7de5623bbe7cc0", "Discard medicine more than two years old."}, + {"d7f087e090fe7ad4a01cb59dacc9a572", "He who has a shady past knows that nice guys finish last."}, + {"a6f8fd6df617c72837592fc3570595c9", "I wouldn't marry him with a ten foot pole."}, + {"c92a84a9526da8abc240c05d6b1a1ce0", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave"}, + {"f6013160c4dcb00847069fee3bb09803", "The days of the digital watch are numbered. -Tom Stoppard"}, + {"2c3bb64f50b9107ed57640fe94bec09f", "Nepal premier won't resign."}, + {"45b7d8a32c7806f2f7f897332774d6e4", "For every action there is an equal and opposite government program."}, + {"b5b4f9026b175c62d7654bdc3a1cd438", "His money is twice tainted: 'taint yours and 'taint mine."}, + {"caf44e80f2c20ce19b5ba1cab766e7bd", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977"}, + {"191fae6707f496aa54a6bce9f2ecf74d", "It's a tiny change to the code and not completely disgusting. - Bob Manchek"}, + {"9ddc753e7a4ccee6081cd1b45b23a834", "size: a.out: bad magic"}, + {"8d050f55b1cadb9323474564be08a521", "The major problem is with sendmail. -Mark Horton"}, + {"ad6e2587f74c3e3cc19146f6127fa2e3", "Give me a rock, paper and scissors and I will move the world. CCFestoon"}, + {"1d616d60a5fabe85589c3f1566ca7fca", "If the enemy is within range, then so are you."}, + {"aec3326a4f496a2ced65a1963f84577f", "It's well we cannot hear the screams/That we create in others' dreams."}, + {"77b4fd762d6b9245e61c50bf6ebf118b", "You remind me of a TV show, but that's all right: I watch it anyway."}, + {"e8f48c726bae5e516f6ddb1a4fe62438", "C is as portable as Stonehedge!!"}, + {"a3a84366e7219e887423b01f9be7166e", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley"}, + {"a6b7aa35157e984ef5d9b7f32e5fbb52", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule"}, + {"75661f0545955f8f9abeeb17845f3fd6", "How can you write a big system without C++? -Paul Glick"}, +} + +func TestGolden(t *testing.T) { + for i := 0; i < len(golden); i++ { + g := golden[i] + c := New() + for j := 0; j < 3; j++ { + if j < 2 { + io.WriteString(c, g.in) + } else { + io.WriteString(c, g.in[0:len(g.in)/2]) + c.Sum(nil) + io.WriteString(c, g.in[len(g.in)/2:]) + } + s := fmt.Sprintf("%x", c.Sum(nil)) + if s != g.out { + t.Fatalf("md4[%d](%s) = %s want %s", j, g.in, s, g.out) + } + c.Reset() + } + } +} diff --git a/vendor/golang.org/x/crypto/md4/md4block.go b/vendor/golang.org/x/crypto/md4/md4block.go new file mode 100644 index 0000000..3fed475 --- /dev/null +++ b/vendor/golang.org/x/crypto/md4/md4block.go @@ -0,0 +1,89 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// MD4 block step. +// In its own file so that a faster assembly or C version +// can be substituted easily. + +package md4 + +var shift1 = []uint{3, 7, 11, 19} +var shift2 = []uint{3, 5, 9, 13} +var shift3 = []uint{3, 9, 11, 15} + +var xIndex2 = []uint{0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15} +var xIndex3 = []uint{0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15} + +func _Block(dig *digest, p []byte) int { + a := dig.s[0] + b := dig.s[1] + c := dig.s[2] + d := dig.s[3] + n := 0 + var X [16]uint32 + for len(p) >= _Chunk { + aa, bb, cc, dd := a, b, c, d + + j := 0 + for i := 0; i < 16; i++ { + X[i] = uint32(p[j]) | uint32(p[j+1])<<8 | uint32(p[j+2])<<16 | uint32(p[j+3])<<24 + j += 4 + } + + // If this needs to be made faster in the future, + // the usual trick is to unroll each of these + // loops by a factor of 4; that lets you replace + // the shift[] lookups with constants and, + // with suitable variable renaming in each + // unrolled body, delete the a, b, c, d = d, a, b, c + // (or you can let the optimizer do the renaming). + // + // The index variables are uint so that % by a power + // of two can be optimized easily by a compiler. + + // Round 1. + for i := uint(0); i < 16; i++ { + x := i + s := shift1[i%4] + f := ((c ^ d) & b) ^ d + a += f + X[x] + a = a<>(32-s) + a, b, c, d = d, a, b, c + } + + // Round 2. + for i := uint(0); i < 16; i++ { + x := xIndex2[i] + s := shift2[i%4] + g := (b & c) | (b & d) | (c & d) + a += g + X[x] + 0x5a827999 + a = a<>(32-s) + a, b, c, d = d, a, b, c + } + + // Round 3. + for i := uint(0); i < 16; i++ { + x := xIndex3[i] + s := shift3[i%4] + h := b ^ c ^ d + a += h + X[x] + 0x6ed9eba1 + a = a<>(32-s) + a, b, c, d = d, a, b, c + } + + a += aa + b += bb + c += cc + d += dd + + p = p[_Chunk:] + n += _Chunk + } + + dig.s[0] = a + dig.s[1] = b + dig.s[2] = c + dig.s[3] = d + return n +} diff --git a/vendor/golang.org/x/crypto/nacl/box/box.go b/vendor/golang.org/x/crypto/nacl/box/box.go new file mode 100644 index 0000000..7ed1864 --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/box/box.go @@ -0,0 +1,86 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package box authenticates and encrypts messages using public-key cryptography. + +Box uses Curve25519, XSalsa20 and Poly1305 to encrypt and authenticate +messages. The length of messages is not hidden. + +It is the caller's responsibility to ensure the uniqueness of nonces—for +example, by using nonce 1 for the first message, nonce 2 for the second +message, etc. Nonces are long enough that randomly generated nonces have +negligible risk of collision. + +This package is interoperable with NaCl: https://nacl.cr.yp.to/box.html. +*/ +package box // import "golang.org/x/crypto/nacl/box" + +import ( + "io" + + "golang.org/x/crypto/curve25519" + "golang.org/x/crypto/nacl/secretbox" + "golang.org/x/crypto/salsa20/salsa" +) + +// Overhead is the number of bytes of overhead when boxing a message. +const Overhead = secretbox.Overhead + +// GenerateKey generates a new public/private key pair suitable for use with +// Seal and Open. +func GenerateKey(rand io.Reader) (publicKey, privateKey *[32]byte, err error) { + publicKey = new([32]byte) + privateKey = new([32]byte) + _, err = io.ReadFull(rand, privateKey[:]) + if err != nil { + publicKey = nil + privateKey = nil + return + } + + curve25519.ScalarBaseMult(publicKey, privateKey) + return +} + +var zeros [16]byte + +// Precompute calculates the shared key between peersPublicKey and privateKey +// and writes it to sharedKey. The shared key can be used with +// OpenAfterPrecomputation and SealAfterPrecomputation to speed up processing +// when using the same pair of keys repeatedly. +func Precompute(sharedKey, peersPublicKey, privateKey *[32]byte) { + curve25519.ScalarMult(sharedKey, privateKey, peersPublicKey) + salsa.HSalsa20(sharedKey, &zeros, sharedKey, &salsa.Sigma) +} + +// Seal appends an encrypted and authenticated copy of message to out, which +// will be Overhead bytes longer than the original and must not overlap. The +// nonce must be unique for each distinct message for a given pair of keys. +func Seal(out, message []byte, nonce *[24]byte, peersPublicKey, privateKey *[32]byte) []byte { + var sharedKey [32]byte + Precompute(&sharedKey, peersPublicKey, privateKey) + return secretbox.Seal(out, message, nonce, &sharedKey) +} + +// SealAfterPrecomputation performs the same actions as Seal, but takes a +// shared key as generated by Precompute. +func SealAfterPrecomputation(out, message []byte, nonce *[24]byte, sharedKey *[32]byte) []byte { + return secretbox.Seal(out, message, nonce, sharedKey) +} + +// Open authenticates and decrypts a box produced by Seal and appends the +// message to out, which must not overlap box. The output will be Overhead +// bytes smaller than box. +func Open(out, box []byte, nonce *[24]byte, peersPublicKey, privateKey *[32]byte) ([]byte, bool) { + var sharedKey [32]byte + Precompute(&sharedKey, peersPublicKey, privateKey) + return secretbox.Open(out, box, nonce, &sharedKey) +} + +// OpenAfterPrecomputation performs the same actions as Open, but takes a +// shared key as generated by Precompute. +func OpenAfterPrecomputation(out, box []byte, nonce *[24]byte, sharedKey *[32]byte) ([]byte, bool) { + return secretbox.Open(out, box, nonce, sharedKey) +} diff --git a/vendor/golang.org/x/crypto/nacl/box/box_test.go b/vendor/golang.org/x/crypto/nacl/box/box_test.go new file mode 100644 index 0000000..481ade2 --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/box/box_test.go @@ -0,0 +1,78 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package box + +import ( + "bytes" + "crypto/rand" + "encoding/hex" + "testing" + + "golang.org/x/crypto/curve25519" +) + +func TestSealOpen(t *testing.T) { + publicKey1, privateKey1, _ := GenerateKey(rand.Reader) + publicKey2, privateKey2, _ := GenerateKey(rand.Reader) + + if *privateKey1 == *privateKey2 { + t.Fatalf("private keys are equal!") + } + if *publicKey1 == *publicKey2 { + t.Fatalf("public keys are equal!") + } + message := []byte("test message") + var nonce [24]byte + + box := Seal(nil, message, &nonce, publicKey1, privateKey2) + opened, ok := Open(nil, box, &nonce, publicKey2, privateKey1) + if !ok { + t.Fatalf("failed to open box") + } + + if !bytes.Equal(opened, message) { + t.Fatalf("got %x, want %x", opened, message) + } + + for i := range box { + box[i] ^= 0x40 + _, ok := Open(nil, box, &nonce, publicKey2, privateKey1) + if ok { + t.Fatalf("opened box with byte %d corrupted", i) + } + box[i] ^= 0x40 + } +} + +func TestBox(t *testing.T) { + var privateKey1, privateKey2 [32]byte + for i := range privateKey1[:] { + privateKey1[i] = 1 + } + for i := range privateKey2[:] { + privateKey2[i] = 2 + } + + var publicKey1 [32]byte + curve25519.ScalarBaseMult(&publicKey1, &privateKey1) + var message [64]byte + for i := range message[:] { + message[i] = 3 + } + + var nonce [24]byte + for i := range nonce[:] { + nonce[i] = 4 + } + + box := Seal(nil, message[:], &nonce, &publicKey1, &privateKey2) + + // expected was generated using the C implementation of NaCl. + expected, _ := hex.DecodeString("78ea30b19d2341ebbdba54180f821eec265cf86312549bea8a37652a8bb94f07b78a73ed1708085e6ddd0e943bbdeb8755079a37eb31d86163ce241164a47629c0539f330b4914cd135b3855bc2a2dfc") + + if !bytes.Equal(box, expected) { + t.Fatalf("box didn't match, got\n%x\n, expected\n%x", box, expected) + } +} diff --git a/vendor/golang.org/x/crypto/nacl/secretbox/example_test.go b/vendor/golang.org/x/crypto/nacl/secretbox/example_test.go new file mode 100644 index 0000000..b25e663 --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/secretbox/example_test.go @@ -0,0 +1,53 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package secretbox_test + +import ( + "crypto/rand" + "encoding/hex" + "fmt" + "io" + + "golang.org/x/crypto/nacl/secretbox" +) + +func Example() { + // Load your secret key from a safe place and reuse it across multiple + // Seal calls. (Obviously don't use this example key for anything + // real.) If you want to convert a passphrase to a key, use a suitable + // package like bcrypt or scrypt. + secretKeyBytes, err := hex.DecodeString("6368616e676520746869732070617373776f726420746f206120736563726574") + if err != nil { + panic(err) + } + + var secretKey [32]byte + copy(secretKey[:], secretKeyBytes) + + // You must use a different nonce for each message you encrypt with the + // same key. Since the nonce here is 192 bits long, a random value + // provides a sufficiently small probability of repeats. + var nonce [24]byte + if _, err := io.ReadFull(rand.Reader, nonce[:]); err != nil { + panic(err) + } + + // This encrypts "hello world" and appends the result to the nonce. + encrypted := secretbox.Seal(nonce[:], []byte("hello world"), &nonce, &secretKey) + + // When you decrypt, you must use the same nonce and key you used to + // encrypt the message. One way to achieve this is to store the nonce + // alongside the encrypted message. Above, we stored the nonce in the first + // 24 bytes of the encrypted text. + var decryptNonce [24]byte + copy(decryptNonce[:], encrypted[:24]) + decrypted, ok := secretbox.Open([]byte{}, encrypted[24:], &decryptNonce, &secretKey) + if !ok { + panic("decryption error") + } + + fmt.Println(string(decrypted)) + // Output: hello world +} diff --git a/vendor/golang.org/x/crypto/nacl/secretbox/secretbox.go b/vendor/golang.org/x/crypto/nacl/secretbox/secretbox.go new file mode 100644 index 0000000..1e1dff5 --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/secretbox/secretbox.go @@ -0,0 +1,149 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package secretbox encrypts and authenticates small messages. + +Secretbox uses XSalsa20 and Poly1305 to encrypt and authenticate messages with +secret-key cryptography. The length of messages is not hidden. + +It is the caller's responsibility to ensure the uniqueness of nonces—for +example, by using nonce 1 for the first message, nonce 2 for the second +message, etc. Nonces are long enough that randomly generated nonces have +negligible risk of collision. + +This package is interoperable with NaCl: https://nacl.cr.yp.to/secretbox.html. +*/ +package secretbox // import "golang.org/x/crypto/nacl/secretbox" + +import ( + "golang.org/x/crypto/poly1305" + "golang.org/x/crypto/salsa20/salsa" +) + +// Overhead is the number of bytes of overhead when boxing a message. +const Overhead = poly1305.TagSize + +// setup produces a sub-key and Salsa20 counter given a nonce and key. +func setup(subKey *[32]byte, counter *[16]byte, nonce *[24]byte, key *[32]byte) { + // We use XSalsa20 for encryption so first we need to generate a + // key and nonce with HSalsa20. + var hNonce [16]byte + copy(hNonce[:], nonce[:]) + salsa.HSalsa20(subKey, &hNonce, key, &salsa.Sigma) + + // The final 8 bytes of the original nonce form the new nonce. + copy(counter[:], nonce[16:]) +} + +// sliceForAppend takes a slice and a requested number of bytes. It returns a +// slice with the contents of the given slice followed by that many bytes and a +// second slice that aliases into it and contains only the extra bytes. If the +// original slice has sufficient capacity then no allocation is performed. +func sliceForAppend(in []byte, n int) (head, tail []byte) { + if total := len(in) + n; cap(in) >= total { + head = in[:total] + } else { + head = make([]byte, total) + copy(head, in) + } + tail = head[len(in):] + return +} + +// Seal appends an encrypted and authenticated copy of message to out, which +// must not overlap message. The key and nonce pair must be unique for each +// distinct message and the output will be Overhead bytes longer than message. +func Seal(out, message []byte, nonce *[24]byte, key *[32]byte) []byte { + var subKey [32]byte + var counter [16]byte + setup(&subKey, &counter, nonce, key) + + // The Poly1305 key is generated by encrypting 32 bytes of zeros. Since + // Salsa20 works with 64-byte blocks, we also generate 32 bytes of + // keystream as a side effect. + var firstBlock [64]byte + salsa.XORKeyStream(firstBlock[:], firstBlock[:], &counter, &subKey) + + var poly1305Key [32]byte + copy(poly1305Key[:], firstBlock[:]) + + ret, out := sliceForAppend(out, len(message)+poly1305.TagSize) + + // We XOR up to 32 bytes of message with the keystream generated from + // the first block. + firstMessageBlock := message + if len(firstMessageBlock) > 32 { + firstMessageBlock = firstMessageBlock[:32] + } + + tagOut := out + out = out[poly1305.TagSize:] + for i, x := range firstMessageBlock { + out[i] = firstBlock[32+i] ^ x + } + message = message[len(firstMessageBlock):] + ciphertext := out + out = out[len(firstMessageBlock):] + + // Now encrypt the rest. + counter[8] = 1 + salsa.XORKeyStream(out, message, &counter, &subKey) + + var tag [poly1305.TagSize]byte + poly1305.Sum(&tag, ciphertext, &poly1305Key) + copy(tagOut, tag[:]) + + return ret +} + +// Open authenticates and decrypts a box produced by Seal and appends the +// message to out, which must not overlap box. The output will be Overhead +// bytes smaller than box. +func Open(out []byte, box []byte, nonce *[24]byte, key *[32]byte) ([]byte, bool) { + if len(box) < Overhead { + return nil, false + } + + var subKey [32]byte + var counter [16]byte + setup(&subKey, &counter, nonce, key) + + // The Poly1305 key is generated by encrypting 32 bytes of zeros. Since + // Salsa20 works with 64-byte blocks, we also generate 32 bytes of + // keystream as a side effect. + var firstBlock [64]byte + salsa.XORKeyStream(firstBlock[:], firstBlock[:], &counter, &subKey) + + var poly1305Key [32]byte + copy(poly1305Key[:], firstBlock[:]) + var tag [poly1305.TagSize]byte + copy(tag[:], box) + + if !poly1305.Verify(&tag, box[poly1305.TagSize:], &poly1305Key) { + return nil, false + } + + ret, out := sliceForAppend(out, len(box)-Overhead) + + // We XOR up to 32 bytes of box with the keystream generated from + // the first block. + box = box[Overhead:] + firstMessageBlock := box + if len(firstMessageBlock) > 32 { + firstMessageBlock = firstMessageBlock[:32] + } + for i, x := range firstMessageBlock { + out[i] = firstBlock[32+i] ^ x + } + + box = box[len(firstMessageBlock):] + out = out[len(firstMessageBlock):] + + // Now decrypt the rest. + counter[8] = 1 + salsa.XORKeyStream(out, box, &counter, &subKey) + + return ret, true +} diff --git a/vendor/golang.org/x/crypto/nacl/secretbox/secretbox_test.go b/vendor/golang.org/x/crypto/nacl/secretbox/secretbox_test.go new file mode 100644 index 0000000..664dc15 --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/secretbox/secretbox_test.go @@ -0,0 +1,91 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package secretbox + +import ( + "bytes" + "crypto/rand" + "encoding/hex" + "testing" +) + +func TestSealOpen(t *testing.T) { + var key [32]byte + var nonce [24]byte + + rand.Reader.Read(key[:]) + rand.Reader.Read(nonce[:]) + + var box, opened []byte + + for msgLen := 0; msgLen < 128; msgLen += 17 { + message := make([]byte, msgLen) + rand.Reader.Read(message) + + box = Seal(box[:0], message, &nonce, &key) + var ok bool + opened, ok = Open(opened[:0], box, &nonce, &key) + if !ok { + t.Errorf("%d: failed to open box", msgLen) + continue + } + + if !bytes.Equal(opened, message) { + t.Errorf("%d: got %x, expected %x", msgLen, opened, message) + continue + } + } + + for i := range box { + box[i] ^= 0x20 + _, ok := Open(opened[:0], box, &nonce, &key) + if ok { + t.Errorf("box was opened after corrupting byte %d", i) + } + box[i] ^= 0x20 + } +} + +func TestSecretBox(t *testing.T) { + var key [32]byte + var nonce [24]byte + var message [64]byte + + for i := range key[:] { + key[i] = 1 + } + for i := range nonce[:] { + nonce[i] = 2 + } + for i := range message[:] { + message[i] = 3 + } + + box := Seal(nil, message[:], &nonce, &key) + // expected was generated using the C implementation of NaCl. + expected, _ := hex.DecodeString("8442bc313f4626f1359e3b50122b6ce6fe66ddfe7d39d14e637eb4fd5b45beadab55198df6ab5368439792a23c87db70acb6156dc5ef957ac04f6276cf6093b84be77ff0849cc33e34b7254d5a8f65ad") + + if !bytes.Equal(box, expected) { + t.Fatalf("box didn't match, got\n%x\n, expected\n%x", box, expected) + } +} + +func TestAppend(t *testing.T) { + var key [32]byte + var nonce [24]byte + var message [8]byte + + out := make([]byte, 4) + box := Seal(out, message[:], &nonce, &key) + if !bytes.Equal(box[:4], out[:4]) { + t.Fatalf("Seal didn't correctly append") + } + + out = make([]byte, 4, 100) + box = Seal(out, message[:], &nonce, &key) + if !bytes.Equal(box[:4], out[:4]) { + t.Fatalf("Seal didn't correctly append with sufficient capacity.") + } +} diff --git a/vendor/golang.org/x/crypto/ocsp/ocsp.go b/vendor/golang.org/x/crypto/ocsp/ocsp.go new file mode 100644 index 0000000..2c7e57a --- /dev/null +++ b/vendor/golang.org/x/crypto/ocsp/ocsp.go @@ -0,0 +1,714 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ocsp parses OCSP responses as specified in RFC 2560. OCSP responses +// are signed messages attesting to the validity of a certificate for a small +// period of time. This is used to manage revocation for X.509 certificates. +package ocsp // import "golang.org/x/crypto/ocsp" + +import ( + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/sha1" + "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" + "errors" + "math/big" + "strconv" + "time" +) + +var idPKIXOCSPBasic = asn1.ObjectIdentifier([]int{1, 3, 6, 1, 5, 5, 7, 48, 1, 1}) + +// ResponseStatus contains the result of an OCSP request. See +// https://tools.ietf.org/html/rfc6960#section-2.3 +type ResponseStatus int + +const ( + Success ResponseStatus = 0 + Malformed ResponseStatus = 1 + InternalError ResponseStatus = 2 + TryLater ResponseStatus = 3 + // Status code four is unused in OCSP. See + // https://tools.ietf.org/html/rfc6960#section-4.2.1 + SignatureRequired ResponseStatus = 5 + Unauthorized ResponseStatus = 6 +) + +func (r ResponseStatus) String() string { + switch r { + case Success: + return "success" + case Malformed: + return "malformed" + case InternalError: + return "internal error" + case TryLater: + return "try later" + case SignatureRequired: + return "signature required" + case Unauthorized: + return "unauthorized" + default: + return "unknown OCSP status: " + strconv.Itoa(int(r)) + } +} + +// ResponseError is an error that may be returned by ParseResponse to indicate +// that the response itself is an error, not just that its indicating that a +// certificate is revoked, unknown, etc. +type ResponseError struct { + Status ResponseStatus +} + +func (r ResponseError) Error() string { + return "ocsp: error from server: " + r.Status.String() +} + +// These are internal structures that reflect the ASN.1 structure of an OCSP +// response. See RFC 2560, section 4.2. + +type certID struct { + HashAlgorithm pkix.AlgorithmIdentifier + NameHash []byte + IssuerKeyHash []byte + SerialNumber *big.Int +} + +// https://tools.ietf.org/html/rfc2560#section-4.1.1 +type ocspRequest struct { + TBSRequest tbsRequest +} + +type tbsRequest struct { + Version int `asn1:"explicit,tag:0,default:0,optional"` + RequestorName pkix.RDNSequence `asn1:"explicit,tag:1,optional"` + RequestList []request +} + +type request struct { + Cert certID +} + +type responseASN1 struct { + Status asn1.Enumerated + Response responseBytes `asn1:"explicit,tag:0,optional"` +} + +type responseBytes struct { + ResponseType asn1.ObjectIdentifier + Response []byte +} + +type basicResponse struct { + TBSResponseData responseData + SignatureAlgorithm pkix.AlgorithmIdentifier + Signature asn1.BitString + Certificates []asn1.RawValue `asn1:"explicit,tag:0,optional"` +} + +type responseData struct { + Raw asn1.RawContent + Version int `asn1:"optional,default:0,explicit,tag:0"` + RawResponderName asn1.RawValue `asn1:"optional,explicit,tag:1"` + KeyHash []byte `asn1:"optional,explicit,tag:2"` + ProducedAt time.Time `asn1:"generalized"` + Responses []singleResponse +} + +type singleResponse struct { + CertID certID + Good asn1.Flag `asn1:"tag:0,optional"` + Revoked revokedInfo `asn1:"tag:1,optional"` + Unknown asn1.Flag `asn1:"tag:2,optional"` + ThisUpdate time.Time `asn1:"generalized"` + NextUpdate time.Time `asn1:"generalized,explicit,tag:0,optional"` + SingleExtensions []pkix.Extension `asn1:"explicit,tag:1,optional"` +} + +type revokedInfo struct { + RevocationTime time.Time `asn1:"generalized"` + Reason asn1.Enumerated `asn1:"explicit,tag:0,optional"` +} + +var ( + oidSignatureMD2WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 2} + oidSignatureMD5WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 4} + oidSignatureSHA1WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 5} + oidSignatureSHA256WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 11} + oidSignatureSHA384WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 12} + oidSignatureSHA512WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 13} + oidSignatureDSAWithSHA1 = asn1.ObjectIdentifier{1, 2, 840, 10040, 4, 3} + oidSignatureDSAWithSHA256 = asn1.ObjectIdentifier{2, 16, 840, 1, 101, 3, 4, 3, 2} + oidSignatureECDSAWithSHA1 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 1} + oidSignatureECDSAWithSHA256 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 2} + oidSignatureECDSAWithSHA384 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 3} + oidSignatureECDSAWithSHA512 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 4} +) + +var hashOIDs = map[crypto.Hash]asn1.ObjectIdentifier{ + crypto.SHA1: asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26}), + crypto.SHA256: asn1.ObjectIdentifier([]int{2, 16, 840, 1, 101, 3, 4, 2, 1}), + crypto.SHA384: asn1.ObjectIdentifier([]int{2, 16, 840, 1, 101, 3, 4, 2, 2}), + crypto.SHA512: asn1.ObjectIdentifier([]int{2, 16, 840, 1, 101, 3, 4, 2, 3}), +} + +// TODO(rlb): This is also from crypto/x509, so same comment as AGL's below +var signatureAlgorithmDetails = []struct { + algo x509.SignatureAlgorithm + oid asn1.ObjectIdentifier + pubKeyAlgo x509.PublicKeyAlgorithm + hash crypto.Hash +}{ + {x509.MD2WithRSA, oidSignatureMD2WithRSA, x509.RSA, crypto.Hash(0) /* no value for MD2 */}, + {x509.MD5WithRSA, oidSignatureMD5WithRSA, x509.RSA, crypto.MD5}, + {x509.SHA1WithRSA, oidSignatureSHA1WithRSA, x509.RSA, crypto.SHA1}, + {x509.SHA256WithRSA, oidSignatureSHA256WithRSA, x509.RSA, crypto.SHA256}, + {x509.SHA384WithRSA, oidSignatureSHA384WithRSA, x509.RSA, crypto.SHA384}, + {x509.SHA512WithRSA, oidSignatureSHA512WithRSA, x509.RSA, crypto.SHA512}, + {x509.DSAWithSHA1, oidSignatureDSAWithSHA1, x509.DSA, crypto.SHA1}, + {x509.DSAWithSHA256, oidSignatureDSAWithSHA256, x509.DSA, crypto.SHA256}, + {x509.ECDSAWithSHA1, oidSignatureECDSAWithSHA1, x509.ECDSA, crypto.SHA1}, + {x509.ECDSAWithSHA256, oidSignatureECDSAWithSHA256, x509.ECDSA, crypto.SHA256}, + {x509.ECDSAWithSHA384, oidSignatureECDSAWithSHA384, x509.ECDSA, crypto.SHA384}, + {x509.ECDSAWithSHA512, oidSignatureECDSAWithSHA512, x509.ECDSA, crypto.SHA512}, +} + +// TODO(rlb): This is also from crypto/x509, so same comment as AGL's below +func signingParamsForPublicKey(pub interface{}, requestedSigAlgo x509.SignatureAlgorithm) (hashFunc crypto.Hash, sigAlgo pkix.AlgorithmIdentifier, err error) { + var pubType x509.PublicKeyAlgorithm + + switch pub := pub.(type) { + case *rsa.PublicKey: + pubType = x509.RSA + hashFunc = crypto.SHA256 + sigAlgo.Algorithm = oidSignatureSHA256WithRSA + sigAlgo.Parameters = asn1.RawValue{ + Tag: 5, + } + + case *ecdsa.PublicKey: + pubType = x509.ECDSA + + switch pub.Curve { + case elliptic.P224(), elliptic.P256(): + hashFunc = crypto.SHA256 + sigAlgo.Algorithm = oidSignatureECDSAWithSHA256 + case elliptic.P384(): + hashFunc = crypto.SHA384 + sigAlgo.Algorithm = oidSignatureECDSAWithSHA384 + case elliptic.P521(): + hashFunc = crypto.SHA512 + sigAlgo.Algorithm = oidSignatureECDSAWithSHA512 + default: + err = errors.New("x509: unknown elliptic curve") + } + + default: + err = errors.New("x509: only RSA and ECDSA keys supported") + } + + if err != nil { + return + } + + if requestedSigAlgo == 0 { + return + } + + found := false + for _, details := range signatureAlgorithmDetails { + if details.algo == requestedSigAlgo { + if details.pubKeyAlgo != pubType { + err = errors.New("x509: requested SignatureAlgorithm does not match private key type") + return + } + sigAlgo.Algorithm, hashFunc = details.oid, details.hash + if hashFunc == 0 { + err = errors.New("x509: cannot sign with hash function requested") + return + } + found = true + break + } + } + + if !found { + err = errors.New("x509: unknown SignatureAlgorithm") + } + + return +} + +// TODO(agl): this is taken from crypto/x509 and so should probably be exported +// from crypto/x509 or crypto/x509/pkix. +func getSignatureAlgorithmFromOID(oid asn1.ObjectIdentifier) x509.SignatureAlgorithm { + for _, details := range signatureAlgorithmDetails { + if oid.Equal(details.oid) { + return details.algo + } + } + return x509.UnknownSignatureAlgorithm +} + +// TODO(rlb): This is not taken from crypto/x509, but it's of the same general form. +func getHashAlgorithmFromOID(target asn1.ObjectIdentifier) crypto.Hash { + for hash, oid := range hashOIDs { + if oid.Equal(target) { + return hash + } + } + return crypto.Hash(0) +} + +func getOIDFromHashAlgorithm(target crypto.Hash) asn1.ObjectIdentifier { + for hash, oid := range hashOIDs { + if hash == target { + return oid + } + } + return nil +} + +// This is the exposed reflection of the internal OCSP structures. + +// The status values that can be expressed in OCSP. See RFC 6960. +const ( + // Good means that the certificate is valid. + Good = iota + // Revoked means that the certificate has been deliberately revoked. + Revoked + // Unknown means that the OCSP responder doesn't know about the certificate. + Unknown + // ServerFailed is unused and was never used (see + // https://go-review.googlesource.com/#/c/18944). ParseResponse will + // return a ResponseError when an error response is parsed. + ServerFailed +) + +// The enumerated reasons for revoking a certificate. See RFC 5280. +const ( + Unspecified = iota + KeyCompromise = iota + CACompromise = iota + AffiliationChanged = iota + Superseded = iota + CessationOfOperation = iota + CertificateHold = iota + _ = iota + RemoveFromCRL = iota + PrivilegeWithdrawn = iota + AACompromise = iota +) + +// Request represents an OCSP request. See RFC 6960. +type Request struct { + HashAlgorithm crypto.Hash + IssuerNameHash []byte + IssuerKeyHash []byte + SerialNumber *big.Int +} + +// Marshal marshals the OCSP request to ASN.1 DER encoded form. +func (req *Request) Marshal() ([]byte, error) { + hashAlg := getOIDFromHashAlgorithm(req.HashAlgorithm) + if hashAlg == nil { + return nil, errors.New("Unknown hash algorithm") + } + return asn1.Marshal(ocspRequest{ + tbsRequest{ + Version: 0, + RequestList: []request{ + { + Cert: certID{ + pkix.AlgorithmIdentifier{ + Algorithm: hashAlg, + Parameters: asn1.RawValue{Tag: 5 /* ASN.1 NULL */}, + }, + req.IssuerNameHash, + req.IssuerKeyHash, + req.SerialNumber, + }, + }, + }, + }, + }) +} + +// Response represents an OCSP response containing a single SingleResponse. See +// RFC 6960. +type Response struct { + // Status is one of {Good, Revoked, Unknown} + Status int + SerialNumber *big.Int + ProducedAt, ThisUpdate, NextUpdate, RevokedAt time.Time + RevocationReason int + Certificate *x509.Certificate + // TBSResponseData contains the raw bytes of the signed response. If + // Certificate is nil then this can be used to verify Signature. + TBSResponseData []byte + Signature []byte + SignatureAlgorithm x509.SignatureAlgorithm + + // Extensions contains raw X.509 extensions from the singleExtensions field + // of the OCSP response. When parsing certificates, this can be used to + // extract non-critical extensions that are not parsed by this package. When + // marshaling OCSP responses, the Extensions field is ignored, see + // ExtraExtensions. + Extensions []pkix.Extension + + // ExtraExtensions contains extensions to be copied, raw, into any marshaled + // OCSP response (in the singleExtensions field). Values override any + // extensions that would otherwise be produced based on the other fields. The + // ExtraExtensions field is not populated when parsing certificates, see + // Extensions. + ExtraExtensions []pkix.Extension +} + +// These are pre-serialized error responses for the various non-success codes +// defined by OCSP. The Unauthorized code in particular can be used by an OCSP +// responder that supports only pre-signed responses as a response to requests +// for certificates with unknown status. See RFC 5019. +var ( + MalformedRequestErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x01} + InternalErrorErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x02} + TryLaterErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x03} + SigRequredErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x05} + UnauthorizedErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x06} +) + +// CheckSignatureFrom checks that the signature in resp is a valid signature +// from issuer. This should only be used if resp.Certificate is nil. Otherwise, +// the OCSP response contained an intermediate certificate that created the +// signature. That signature is checked by ParseResponse and only +// resp.Certificate remains to be validated. +func (resp *Response) CheckSignatureFrom(issuer *x509.Certificate) error { + return issuer.CheckSignature(resp.SignatureAlgorithm, resp.TBSResponseData, resp.Signature) +} + +// ParseError results from an invalid OCSP response. +type ParseError string + +func (p ParseError) Error() string { + return string(p) +} + +// ParseRequest parses an OCSP request in DER form. It only supports +// requests for a single certificate. Signed requests are not supported. +// If a request includes a signature, it will result in a ParseError. +func ParseRequest(bytes []byte) (*Request, error) { + var req ocspRequest + rest, err := asn1.Unmarshal(bytes, &req) + if err != nil { + return nil, err + } + if len(rest) > 0 { + return nil, ParseError("trailing data in OCSP request") + } + + if len(req.TBSRequest.RequestList) == 0 { + return nil, ParseError("OCSP request contains no request body") + } + innerRequest := req.TBSRequest.RequestList[0] + + hashFunc := getHashAlgorithmFromOID(innerRequest.Cert.HashAlgorithm.Algorithm) + if hashFunc == crypto.Hash(0) { + return nil, ParseError("OCSP request uses unknown hash function") + } + + return &Request{ + HashAlgorithm: hashFunc, + IssuerNameHash: innerRequest.Cert.NameHash, + IssuerKeyHash: innerRequest.Cert.IssuerKeyHash, + SerialNumber: innerRequest.Cert.SerialNumber, + }, nil +} + +// ParseResponse parses an OCSP response in DER form. It only supports +// responses for a single certificate. If the response contains a certificate +// then the signature over the response is checked. If issuer is not nil then +// it will be used to validate the signature or embedded certificate. +// +// Invalid signatures or parse failures will result in a ParseError. Error +// responses will result in a ResponseError. +func ParseResponse(bytes []byte, issuer *x509.Certificate) (*Response, error) { + return ParseResponseForCert(bytes, nil, issuer) +} + +// ParseResponseForCert parses an OCSP response in DER form and searches for a +// Response relating to cert. If such a Response is found and the OCSP response +// contains a certificate then the signature over the response is checked. If +// issuer is not nil then it will be used to validate the signature or embedded +// certificate. +// +// Invalid signatures or parse failures will result in a ParseError. Error +// responses will result in a ResponseError. +func ParseResponseForCert(bytes []byte, cert, issuer *x509.Certificate) (*Response, error) { + var resp responseASN1 + rest, err := asn1.Unmarshal(bytes, &resp) + if err != nil { + return nil, err + } + if len(rest) > 0 { + return nil, ParseError("trailing data in OCSP response") + } + + if status := ResponseStatus(resp.Status); status != Success { + return nil, ResponseError{status} + } + + if !resp.Response.ResponseType.Equal(idPKIXOCSPBasic) { + return nil, ParseError("bad OCSP response type") + } + + var basicResp basicResponse + rest, err = asn1.Unmarshal(resp.Response.Response, &basicResp) + if err != nil { + return nil, err + } + + if len(basicResp.Certificates) > 1 { + return nil, ParseError("OCSP response contains bad number of certificates") + } + + if n := len(basicResp.TBSResponseData.Responses); n == 0 || cert == nil && n > 1 { + return nil, ParseError("OCSP response contains bad number of responses") + } + + ret := &Response{ + TBSResponseData: basicResp.TBSResponseData.Raw, + Signature: basicResp.Signature.RightAlign(), + SignatureAlgorithm: getSignatureAlgorithmFromOID(basicResp.SignatureAlgorithm.Algorithm), + } + + if len(basicResp.Certificates) > 0 { + ret.Certificate, err = x509.ParseCertificate(basicResp.Certificates[0].FullBytes) + if err != nil { + return nil, err + } + + if err := ret.CheckSignatureFrom(ret.Certificate); err != nil { + return nil, ParseError("bad OCSP signature") + } + + if issuer != nil { + if err := issuer.CheckSignature(ret.Certificate.SignatureAlgorithm, ret.Certificate.RawTBSCertificate, ret.Certificate.Signature); err != nil { + return nil, ParseError("bad signature on embedded certificate") + } + } + } else if issuer != nil { + if err := ret.CheckSignatureFrom(issuer); err != nil { + return nil, ParseError("bad OCSP signature") + } + } + + var r singleResponse + for _, resp := range basicResp.TBSResponseData.Responses { + if cert == nil || cert.SerialNumber.Cmp(resp.CertID.SerialNumber) == 0 { + r = resp + break + } + } + + for _, ext := range r.SingleExtensions { + if ext.Critical { + return nil, ParseError("unsupported critical extension") + } + } + ret.Extensions = r.SingleExtensions + + ret.SerialNumber = r.CertID.SerialNumber + + switch { + case bool(r.Good): + ret.Status = Good + case bool(r.Unknown): + ret.Status = Unknown + default: + ret.Status = Revoked + ret.RevokedAt = r.Revoked.RevocationTime + ret.RevocationReason = int(r.Revoked.Reason) + } + + ret.ProducedAt = basicResp.TBSResponseData.ProducedAt + ret.ThisUpdate = r.ThisUpdate + ret.NextUpdate = r.NextUpdate + + return ret, nil +} + +// RequestOptions contains options for constructing OCSP requests. +type RequestOptions struct { + // Hash contains the hash function that should be used when + // constructing the OCSP request. If zero, SHA-1 will be used. + Hash crypto.Hash +} + +func (opts *RequestOptions) hash() crypto.Hash { + if opts == nil || opts.Hash == 0 { + // SHA-1 is nearly universally used in OCSP. + return crypto.SHA1 + } + return opts.Hash +} + +// CreateRequest returns a DER-encoded, OCSP request for the status of cert. If +// opts is nil then sensible defaults are used. +func CreateRequest(cert, issuer *x509.Certificate, opts *RequestOptions) ([]byte, error) { + hashFunc := opts.hash() + + // OCSP seems to be the only place where these raw hash identifiers are + // used. I took the following from + // http://msdn.microsoft.com/en-us/library/ff635603.aspx + _, ok := hashOIDs[hashFunc] + if !ok { + return nil, x509.ErrUnsupportedAlgorithm + } + + if !hashFunc.Available() { + return nil, x509.ErrUnsupportedAlgorithm + } + h := opts.hash().New() + + var publicKeyInfo struct { + Algorithm pkix.AlgorithmIdentifier + PublicKey asn1.BitString + } + if _, err := asn1.Unmarshal(issuer.RawSubjectPublicKeyInfo, &publicKeyInfo); err != nil { + return nil, err + } + + h.Write(publicKeyInfo.PublicKey.RightAlign()) + issuerKeyHash := h.Sum(nil) + + h.Reset() + h.Write(issuer.RawSubject) + issuerNameHash := h.Sum(nil) + + req := &Request{ + HashAlgorithm: hashFunc, + IssuerNameHash: issuerNameHash, + IssuerKeyHash: issuerKeyHash, + SerialNumber: cert.SerialNumber, + } + return req.Marshal() +} + +// CreateResponse returns a DER-encoded OCSP response with the specified contents. +// The fields in the response are populated as follows: +// +// The responder cert is used to populate the ResponderName field, and the certificate +// itself is provided alongside the OCSP response signature. +// +// The issuer cert is used to puplate the IssuerNameHash and IssuerKeyHash fields. +// (SHA-1 is used for the hash function; this is not configurable.) +// +// The template is used to populate the SerialNumber, RevocationStatus, RevokedAt, +// RevocationReason, ThisUpdate, and NextUpdate fields. +// +// The ProducedAt date is automatically set to the current date, to the nearest minute. +func CreateResponse(issuer, responderCert *x509.Certificate, template Response, priv crypto.Signer) ([]byte, error) { + var publicKeyInfo struct { + Algorithm pkix.AlgorithmIdentifier + PublicKey asn1.BitString + } + if _, err := asn1.Unmarshal(issuer.RawSubjectPublicKeyInfo, &publicKeyInfo); err != nil { + return nil, err + } + + h := sha1.New() + h.Write(publicKeyInfo.PublicKey.RightAlign()) + issuerKeyHash := h.Sum(nil) + + h.Reset() + h.Write(issuer.RawSubject) + issuerNameHash := h.Sum(nil) + + innerResponse := singleResponse{ + CertID: certID{ + HashAlgorithm: pkix.AlgorithmIdentifier{ + Algorithm: hashOIDs[crypto.SHA1], + Parameters: asn1.RawValue{Tag: 5 /* ASN.1 NULL */}, + }, + NameHash: issuerNameHash, + IssuerKeyHash: issuerKeyHash, + SerialNumber: template.SerialNumber, + }, + ThisUpdate: template.ThisUpdate.UTC(), + NextUpdate: template.NextUpdate.UTC(), + SingleExtensions: template.ExtraExtensions, + } + + switch template.Status { + case Good: + innerResponse.Good = true + case Unknown: + innerResponse.Unknown = true + case Revoked: + innerResponse.Revoked = revokedInfo{ + RevocationTime: template.RevokedAt.UTC(), + Reason: asn1.Enumerated(template.RevocationReason), + } + } + + responderName := asn1.RawValue{ + Class: 2, // context-specific + Tag: 1, // explicit tag + IsCompound: true, + Bytes: responderCert.RawSubject, + } + tbsResponseData := responseData{ + Version: 0, + RawResponderName: responderName, + ProducedAt: time.Now().Truncate(time.Minute).UTC(), + Responses: []singleResponse{innerResponse}, + } + + tbsResponseDataDER, err := asn1.Marshal(tbsResponseData) + if err != nil { + return nil, err + } + + hashFunc, signatureAlgorithm, err := signingParamsForPublicKey(priv.Public(), template.SignatureAlgorithm) + if err != nil { + return nil, err + } + + responseHash := hashFunc.New() + responseHash.Write(tbsResponseDataDER) + signature, err := priv.Sign(rand.Reader, responseHash.Sum(nil), hashFunc) + if err != nil { + return nil, err + } + + response := basicResponse{ + TBSResponseData: tbsResponseData, + SignatureAlgorithm: signatureAlgorithm, + Signature: asn1.BitString{ + Bytes: signature, + BitLength: 8 * len(signature), + }, + } + if template.Certificate != nil { + response.Certificates = []asn1.RawValue{ + asn1.RawValue{FullBytes: template.Certificate.Raw}, + } + } + responseDER, err := asn1.Marshal(response) + if err != nil { + return nil, err + } + + return asn1.Marshal(responseASN1{ + Status: asn1.Enumerated(Success), + Response: responseBytes{ + ResponseType: idPKIXOCSPBasic, + Response: responseDER, + }, + }) +} diff --git a/vendor/golang.org/x/crypto/ocsp/ocsp_test.go b/vendor/golang.org/x/crypto/ocsp/ocsp_test.go new file mode 100644 index 0000000..f66489a --- /dev/null +++ b/vendor/golang.org/x/crypto/ocsp/ocsp_test.go @@ -0,0 +1,778 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ocsp + +import ( + "bytes" + "crypto" + "crypto/sha1" + "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" + "encoding/hex" + "math/big" + "reflect" + "testing" + "time" +) + +func TestOCSPDecode(t *testing.T) { + responseBytes, _ := hex.DecodeString(ocspResponseHex) + resp, err := ParseResponse(responseBytes, nil) + if err != nil { + t.Error(err) + } + + expected := Response{ + Status: Good, + SerialNumber: big.NewInt(0x1d0fa), + RevocationReason: Unspecified, + ThisUpdate: time.Date(2010, 7, 7, 15, 1, 5, 0, time.UTC), + NextUpdate: time.Date(2010, 7, 7, 18, 35, 17, 0, time.UTC), + } + + if !reflect.DeepEqual(resp.ThisUpdate, expected.ThisUpdate) { + t.Errorf("resp.ThisUpdate: got %d, want %d", resp.ThisUpdate, expected.ThisUpdate) + } + + if !reflect.DeepEqual(resp.NextUpdate, expected.NextUpdate) { + t.Errorf("resp.NextUpdate: got %d, want %d", resp.NextUpdate, expected.NextUpdate) + } + + if resp.Status != expected.Status { + t.Errorf("resp.Status: got %d, want %d", resp.Status, expected.Status) + } + + if resp.SerialNumber.Cmp(expected.SerialNumber) != 0 { + t.Errorf("resp.SerialNumber: got %x, want %x", resp.SerialNumber, expected.SerialNumber) + } + + if resp.RevocationReason != expected.RevocationReason { + t.Errorf("resp.RevocationReason: got %d, want %d", resp.RevocationReason, expected.RevocationReason) + } +} + +func TestOCSPDecodeWithoutCert(t *testing.T) { + responseBytes, _ := hex.DecodeString(ocspResponseWithoutCertHex) + _, err := ParseResponse(responseBytes, nil) + if err != nil { + t.Error(err) + } +} + +func TestOCSPDecodeWithExtensions(t *testing.T) { + responseBytes, _ := hex.DecodeString(ocspResponseWithCriticalExtensionHex) + _, err := ParseResponse(responseBytes, nil) + if err == nil { + t.Error(err) + } + + responseBytes, _ = hex.DecodeString(ocspResponseWithExtensionHex) + response, err := ParseResponse(responseBytes, nil) + if err != nil { + t.Fatal(err) + } + + if len(response.Extensions) != 1 { + t.Errorf("len(response.Extensions): got %v, want %v", len(response.Extensions), 1) + } + + extensionBytes := response.Extensions[0].Value + expectedBytes, _ := hex.DecodeString(ocspExtensionValueHex) + if !bytes.Equal(extensionBytes, expectedBytes) { + t.Errorf("response.Extensions[0]: got %x, want %x", extensionBytes, expectedBytes) + } +} + +func TestOCSPSignature(t *testing.T) { + issuerCert, _ := hex.DecodeString(startComHex) + issuer, err := x509.ParseCertificate(issuerCert) + if err != nil { + t.Fatal(err) + } + + response, _ := hex.DecodeString(ocspResponseHex) + if _, err := ParseResponse(response, issuer); err != nil { + t.Error(err) + } +} + +func TestOCSPRequest(t *testing.T) { + leafCert, _ := hex.DecodeString(leafCertHex) + cert, err := x509.ParseCertificate(leafCert) + if err != nil { + t.Fatal(err) + } + + issuerCert, _ := hex.DecodeString(issuerCertHex) + issuer, err := x509.ParseCertificate(issuerCert) + if err != nil { + t.Fatal(err) + } + + request, err := CreateRequest(cert, issuer, nil) + if err != nil { + t.Fatal(err) + } + + expectedBytes, _ := hex.DecodeString(ocspRequestHex) + if !bytes.Equal(request, expectedBytes) { + t.Errorf("request: got %x, wanted %x", request, expectedBytes) + } + + decodedRequest, err := ParseRequest(expectedBytes) + if err != nil { + t.Fatal(err) + } + + if decodedRequest.HashAlgorithm != crypto.SHA1 { + t.Errorf("request.HashAlgorithm: got %v, want %v", decodedRequest.HashAlgorithm, crypto.SHA1) + } + + var publicKeyInfo struct { + Algorithm pkix.AlgorithmIdentifier + PublicKey asn1.BitString + } + _, err = asn1.Unmarshal(issuer.RawSubjectPublicKeyInfo, &publicKeyInfo) + if err != nil { + t.Fatal(err) + } + + h := sha1.New() + h.Write(publicKeyInfo.PublicKey.RightAlign()) + issuerKeyHash := h.Sum(nil) + + h.Reset() + h.Write(issuer.RawSubject) + issuerNameHash := h.Sum(nil) + + if got := decodedRequest.IssuerKeyHash; !bytes.Equal(got, issuerKeyHash) { + t.Errorf("request.IssuerKeyHash: got %x, want %x", got, issuerKeyHash) + } + + if got := decodedRequest.IssuerNameHash; !bytes.Equal(got, issuerNameHash) { + t.Errorf("request.IssuerKeyHash: got %x, want %x", got, issuerNameHash) + } + + if got := decodedRequest.SerialNumber; got.Cmp(cert.SerialNumber) != 0 { + t.Errorf("request.SerialNumber: got %x, want %x", got, cert.SerialNumber) + } + + marshaledRequest, err := decodedRequest.Marshal() + if err != nil { + t.Fatal(err) + } + + if bytes.Compare(expectedBytes, marshaledRequest) != 0 { + t.Errorf( + "Marshaled request doesn't match expected: wanted %x, got %x", + expectedBytes, + marshaledRequest, + ) + } +} + +func TestOCSPResponse(t *testing.T) { + leafCert, _ := hex.DecodeString(leafCertHex) + leaf, err := x509.ParseCertificate(leafCert) + if err != nil { + t.Fatal(err) + } + + issuerCert, _ := hex.DecodeString(issuerCertHex) + issuer, err := x509.ParseCertificate(issuerCert) + if err != nil { + t.Fatal(err) + } + + responderCert, _ := hex.DecodeString(responderCertHex) + responder, err := x509.ParseCertificate(responderCert) + if err != nil { + t.Fatal(err) + } + + responderPrivateKeyDER, _ := hex.DecodeString(responderPrivateKeyHex) + responderPrivateKey, err := x509.ParsePKCS1PrivateKey(responderPrivateKeyDER) + if err != nil { + t.Fatal(err) + } + + extensionBytes, _ := hex.DecodeString(ocspExtensionValueHex) + extensions := []pkix.Extension{ + pkix.Extension{ + Id: ocspExtensionOID, + Critical: false, + Value: extensionBytes, + }, + } + + producedAt := time.Now().Truncate(time.Minute) + thisUpdate := time.Date(2010, 7, 7, 15, 1, 5, 0, time.UTC) + nextUpdate := time.Date(2010, 7, 7, 18, 35, 17, 0, time.UTC) + template := Response{ + Status: Revoked, + SerialNumber: leaf.SerialNumber, + ThisUpdate: thisUpdate, + NextUpdate: nextUpdate, + RevokedAt: thisUpdate, + RevocationReason: KeyCompromise, + Certificate: responder, + ExtraExtensions: extensions, + } + + responseBytes, err := CreateResponse(issuer, responder, template, responderPrivateKey) + if err != nil { + t.Fatal(err) + } + + resp, err := ParseResponse(responseBytes, nil) + if err != nil { + t.Fatal(err) + } + + if !reflect.DeepEqual(resp.ThisUpdate, template.ThisUpdate) { + t.Errorf("resp.ThisUpdate: got %d, want %d", resp.ThisUpdate, template.ThisUpdate) + } + + if !reflect.DeepEqual(resp.NextUpdate, template.NextUpdate) { + t.Errorf("resp.NextUpdate: got %d, want %d", resp.NextUpdate, template.NextUpdate) + } + + if !reflect.DeepEqual(resp.RevokedAt, template.RevokedAt) { + t.Errorf("resp.RevokedAt: got %d, want %d", resp.RevokedAt, template.RevokedAt) + } + + if !reflect.DeepEqual(resp.Extensions, template.ExtraExtensions) { + t.Errorf("resp.Extensions: got %v, want %v", resp.Extensions, template.ExtraExtensions) + } + + if !resp.ProducedAt.Equal(producedAt) { + t.Errorf("resp.ProducedAt: got %d, want %d", resp.ProducedAt, producedAt) + } + + if resp.Status != template.Status { + t.Errorf("resp.Status: got %d, want %d", resp.Status, template.Status) + } + + if resp.SerialNumber.Cmp(template.SerialNumber) != 0 { + t.Errorf("resp.SerialNumber: got %x, want %x", resp.SerialNumber, template.SerialNumber) + } + + if resp.RevocationReason != template.RevocationReason { + t.Errorf("resp.RevocationReason: got %d, want %d", resp.RevocationReason, template.RevocationReason) + } +} + +func TestErrorResponse(t *testing.T) { + responseBytes, _ := hex.DecodeString(errorResponseHex) + _, err := ParseResponse(responseBytes, nil) + + respErr, ok := err.(ResponseError) + if !ok { + t.Fatalf("expected ResponseError from ParseResponse but got %#v", err) + } + if respErr.Status != Malformed { + t.Fatalf("expected Malformed status from ParseResponse but got %d", respErr.Status) + } +} + +func TestOCSPDecodeMultiResponse(t *testing.T) { + inclCert, _ := hex.DecodeString(ocspMultiResponseCertHex) + cert, err := x509.ParseCertificate(inclCert) + if err != nil { + t.Fatal(err) + } + + responseBytes, _ := hex.DecodeString(ocspMultiResponseHex) + resp, err := ParseResponseForCert(responseBytes, cert, nil) + if err != nil { + t.Fatal(err) + } + + if resp.SerialNumber.Cmp(cert.SerialNumber) != 0 { + t.Errorf("resp.SerialNumber: got %x, want %x", resp.SerialNumber, cert.SerialNumber) + } +} + +// This OCSP response was taken from Thawte's public OCSP responder. +// To recreate: +// $ openssl s_client -tls1 -showcerts -servername www.google.com -connect www.google.com:443 +// Copy and paste the first certificate into /tmp/cert.crt and the second into +// /tmp/intermediate.crt +// $ openssl ocsp -issuer /tmp/intermediate.crt -cert /tmp/cert.crt -url http://ocsp.thawte.com -resp_text -respout /tmp/ocsp.der +// Then hex encode the result: +// $ python -c 'print file("/tmp/ocsp.der", "r").read().encode("hex")' + +const ocspResponseHex = "308206bc0a0100a08206b5308206b106092b0601050507300101048206a23082069e3081" + + "c9a14e304c310b300906035504061302494c31163014060355040a130d5374617274436f" + + "6d204c74642e312530230603550403131c5374617274436f6d20436c6173732031204f43" + + "5350205369676e6572180f32303130303730373137333531375a30663064303c30090605" + + "2b0e03021a050004146568874f40750f016a3475625e1f5c93e5a26d580414eb4234d098" + + "b0ab9ff41b6b08f7cc642eef0e2c45020301d0fa8000180f323031303037303731353031" + + "30355aa011180f32303130303730373138333531375a300d06092a864886f70d01010505" + + "000382010100ab557ff070d1d7cebbb5f0ec91a15c3fed22eb2e1b8244f1b84545f013a4" + + "fb46214c5e3fbfbebb8a56acc2b9db19f68fd3c3201046b3824d5ba689f99864328710cb" + + "467195eb37d84f539e49f859316b32964dc3e47e36814ce94d6c56dd02733b1d0802f7ff" + + "4eebdbbd2927dcf580f16cbc290f91e81b53cb365e7223f1d6e20a88ea064104875e0145" + + "672b20fc14829d51ca122f5f5d77d3ad6c83889c55c7dc43680ba2fe3cef8b05dbcabdc0" + + "d3e09aaf9725597f8c858c2fa38c0d6aed2e6318194420dd1a1137445d13e1c97ab47896" + + "17a4e08925f46f867b72e3a4dc1f08cb870b2b0717f7207faa0ac512e628a029aba7457a" + + "e63dcf3281e2162d9349a08204ba308204b6308204b23082039aa003020102020101300d" + + "06092a864886f70d010105050030818c310b300906035504061302494c31163014060355" + + "040a130d5374617274436f6d204c74642e312b3029060355040b13225365637572652044" + + "69676974616c204365727469666963617465205369676e696e6731383036060355040313" + + "2f5374617274436f6d20436c6173732031205072696d61727920496e7465726d65646961" + + "746520536572766572204341301e170d3037313032353030323330365a170d3132313032" + + "333030323330365a304c310b300906035504061302494c31163014060355040a130d5374" + + "617274436f6d204c74642e312530230603550403131c5374617274436f6d20436c617373" + + "2031204f435350205369676e657230820122300d06092a864886f70d0101010500038201" + + "0f003082010a0282010100b9561b4c45318717178084e96e178df2255e18ed8d8ecc7c2b" + + "7b51a6c1c2e6bf0aa3603066f132fe10ae97b50e99fa24b83fc53dd2777496387d14e1c3" + + "a9b6a4933e2ac12413d085570a95b8147414a0bc007c7bcf222446ef7f1a156d7ea1c577" + + "fc5f0facdfd42eb0f5974990cb2f5cefebceef4d1bdc7ae5c1075c5a99a93171f2b0845b" + + "4ff0864e973fcfe32f9d7511ff87a3e943410c90a4493a306b6944359340a9ca96f02b66" + + "ce67f028df2980a6aaee8d5d5d452b8b0eb93f923cc1e23fcccbdbe7ffcb114d08fa7a6a" + + "3c404f825d1a0e715935cf623a8c7b59670014ed0622f6089a9447a7a19010f7fe58f841" + + "29a2765ea367824d1c3bb2fda308530203010001a382015c30820158300c0603551d1301" + + "01ff04023000300b0603551d0f0404030203a8301e0603551d250417301506082b060105" + + "0507030906092b0601050507300105301d0603551d0e0416041445e0a36695414c5dd449" + + "bc00e33cdcdbd2343e173081a80603551d230481a030819d8014eb4234d098b0ab9ff41b" + + "6b08f7cc642eef0e2c45a18181a47f307d310b300906035504061302494c311630140603" + + "55040a130d5374617274436f6d204c74642e312b3029060355040b132253656375726520" + + "4469676974616c204365727469666963617465205369676e696e67312930270603550403" + + "13205374617274436f6d2043657274696669636174696f6e20417574686f726974798201" + + "0a30230603551d12041c301a8618687474703a2f2f7777772e737461727473736c2e636f" + + "6d2f302c06096086480186f842010d041f161d5374617274436f6d205265766f63617469" + + "6f6e20417574686f72697479300d06092a864886f70d01010505000382010100182d2215" + + "8f0fc0291324fa8574c49bb8ff2835085adcbf7b7fc4191c397ab6951328253fffe1e5ec" + + "2a7da0d50fca1a404e6968481366939e666c0a6209073eca57973e2fefa9ed1718e8176f" + + "1d85527ff522c08db702e3b2b180f1cbff05d98128252cf0f450f7dd2772f4188047f19d" + + "c85317366f94bc52d60f453a550af58e308aaab00ced33040b62bf37f5b1ab2a4f7f0f80" + + "f763bf4d707bc8841d7ad9385ee2a4244469260b6f2bf085977af9074796048ecc2f9d48" + + "a1d24ce16e41a9941568fec5b42771e118f16c106a54ccc339a4b02166445a167902e75e" + + "6d8620b0825dcd18a069b90fd851d10fa8effd409deec02860d26d8d833f304b10669b42" + +const startComHex = "308206343082041ca003020102020118300d06092a864886f70d0101050500307d310b30" + + "0906035504061302494c31163014060355040a130d5374617274436f6d204c74642e312b" + + "3029060355040b1322536563757265204469676974616c20436572746966696361746520" + + "5369676e696e6731293027060355040313205374617274436f6d20436572746966696361" + + "74696f6e20417574686f72697479301e170d3037313032343230353431375a170d313731" + + "3032343230353431375a30818c310b300906035504061302494c31163014060355040a13" + + "0d5374617274436f6d204c74642e312b3029060355040b13225365637572652044696769" + + "74616c204365727469666963617465205369676e696e67313830360603550403132f5374" + + "617274436f6d20436c6173732031205072696d61727920496e7465726d65646961746520" + + "53657276657220434130820122300d06092a864886f70d01010105000382010f00308201" + + "0a0282010100b689c6acef09527807ac9263d0f44418188480561f91aee187fa3250b4d3" + + "4706f0e6075f700e10f71dc0ce103634855a0f92ac83c6ac58523fba38e8fce7a724e240" + + "a60876c0926e9e2a6d4d3f6e61200adb59ded27d63b33e46fefa215118d7cd30a6ed076e" + + "3b7087b4f9faebee823c056f92f7a4dc0a301e9373fe07cad75f809d225852ae06da8b87" + + "2369b0e42ad8ea83d2bdf371db705a280faf5a387045123f304dcd3baf17e50fcba0a95d" + + "48aab16150cb34cd3c5cc30be810c08c9bf0030362feb26c3e720eee1c432ac9480e5739" + + "c43121c810c12c87fe5495521f523c31129b7fe7c0a0a559d5e28f3ef0d5a8e1d77031a9" + + "c4b3cfaf6d532f06f4a70203010001a38201ad308201a9300f0603551d130101ff040530" + + "030101ff300e0603551d0f0101ff040403020106301d0603551d0e04160414eb4234d098" + + "b0ab9ff41b6b08f7cc642eef0e2c45301f0603551d230418301680144e0bef1aa4405ba5" + + "17698730ca346843d041aef2306606082b06010505070101045a3058302706082b060105" + + "05073001861b687474703a2f2f6f6373702e737461727473736c2e636f6d2f6361302d06" + + "082b060105050730028621687474703a2f2f7777772e737461727473736c2e636f6d2f73" + + "667363612e637274305b0603551d1f045430523027a025a0238621687474703a2f2f7777" + + "772e737461727473736c2e636f6d2f73667363612e63726c3027a025a023862168747470" + + "3a2f2f63726c2e737461727473736c2e636f6d2f73667363612e63726c3081800603551d" + + "20047930773075060b2b0601040181b5370102013066302e06082b060105050702011622" + + "687474703a2f2f7777772e737461727473736c2e636f6d2f706f6c6963792e7064663034" + + "06082b060105050702011628687474703a2f2f7777772e737461727473736c2e636f6d2f" + + "696e7465726d6564696174652e706466300d06092a864886f70d01010505000382020100" + + "2109493ea5886ee00b8b48da314d8ff75657a2e1d36257e9b556f38545753be5501f048b" + + "e6a05a3ee700ae85d0fbff200364cbad02e1c69172f8a34dd6dee8cc3fa18aa2e37c37a7" + + "c64f8f35d6f4d66e067bdd21d9cf56ffcb302249fe8904f385e5aaf1e71fe875904dddf9" + + "46f74234f745580c110d84b0c6da5d3ef9019ee7e1da5595be741c7bfc4d144fac7e5547" + + "7d7bf4a50d491e95e8f712c1ccff76a62547d0f37535be97b75816ebaa5c786fec5330af" + + "ea044dcca902e3f0b60412f630b1113d904e5664d7dc3c435f7339ef4baf87ebf6fe6888" + + "4472ead207c669b0c1a18bef1749d761b145485f3b2021e95bb2ccf4d7e931f50b15613b" + + "7a94e3ebd9bc7f94ae6ae3626296a8647cb887f399327e92a252bebbf865cfc9f230fc8b" + + "c1c2a696d75f89e15c3480f58f47072fb491bfb1a27e5f4b5ad05b9f248605515a690365" + + "434971c5e06f94346bf61bd8a9b04c7e53eb8f48dfca33b548fa364a1a53a6330cd089cd" + + "4915cd89313c90c072d7654b52358a461144b93d8e2865a63e799e5c084429adb035112e" + + "214eb8d2e7103e5d8483b3c3c2e4d2c6fd094b7409ddf1b3d3193e800da20b19f038e7c5" + + "c2afe223db61e29d5c6e2089492e236ab262c145b49faf8ba7f1223bf87de290d07a19fb" + + "4a4ce3d27d5f4a8303ed27d6239e6b8db459a2d9ef6c8229dd75193c3f4c108defbb7527" + + "d2ae83a7a8ce5ba7" + +const ocspResponseWithoutCertHex = "308201d40a0100a08201cd308201c906092b0601050507300101048201ba3082" + + "01b630819fa2160414884451ff502a695e2d88f421bad90cf2cecbea7c180f3230313330" + + "3631383037323434335a30743072304a300906052b0e03021a0500041448b60d38238df8" + + "456e4ee5843ea394111802979f0414884451ff502a695e2d88f421bad90cf2cecbea7c02" + + "1100f78b13b946fc9635d8ab49de9d2148218000180f3230313330363138303732343433" + + "5aa011180f32303133303632323037323434335a300d06092a864886f70d010105050003" + + "82010100103e18b3d297a5e7a6c07a4fc52ac46a15c0eba96f3be17f0ffe84de5b8c8e05" + + "5a8f577586a849dc4abd6440eb6fedde4622451e2823c1cbf3558b4e8184959c9fe96eff" + + "8bc5f95866c58c6d087519faabfdae37e11d9874f1bc0db292208f645dd848185e4dd38b" + + "6a8547dfa7b74d514a8470015719064d35476b95bebb03d4d2845c5ca15202d2784878f2" + + "0f904c24f09736f044609e9c271381713400e563023d212db422236440c6f377bbf24b2b" + + "9e7dec8698e36a8df68b7592ad3489fb2937afb90eb85d2aa96b81c94c25057dbd4759d9" + + "20a1a65c7f0b6427a224b3c98edd96b9b61f706099951188b0289555ad30a216fb774651" + + "5a35fca2e054dfa8" + +// PKIX nonce extension +var ocspExtensionOID = asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 48, 1, 2} +var ocspExtensionValueHex = "0403000000" + +const ocspResponseWithCriticalExtensionHex = "308204fe0a0100a08204f7308204f306092b0601050507300101048204e4308204e03081" + + "dba003020100a11b3019311730150603550403130e4f43535020526573706f6e64657218" + + "0f32303136303130343137303130305a3081a53081a23049300906052b0e03021a050004" + + "14c0fe0278fc99188891b3f212e9c7e1b21ab7bfc004140dfc1df0a9e0f01ce7f2b21317" + + "7e6f8d157cd4f60210017f77deb3bcbb235d44ccc7dba62e72a116180f32303130303730" + + "373135303130355aa0030a0101180f32303130303730373135303130355aa011180f3230" + + "3130303730373138333531375aa1193017301506092b06010505073001020101ff040504" + + "03000000300d06092a864886f70d01010b0500038201010031c730ca60a7a0d92d8e4010" + + "911b469de95b4d27e89de6537552436237967694f76f701cf6b45c932bd308bca4a8d092" + + "5c604ba94796903091d9e6c000178e72c1f0a24a277dd262835af5d17d3f9d7869606c9f" + + "e7c8e708a41645699895beee38bfa63bb46296683761c5d1d65439b8ab868dc3017c9eeb" + + "b70b82dbf3a31c55b457d48bb9e82b335ed49f445042eaf606b06a3e0639824924c89c63" + + "eccddfe85e6694314138b2536f5e15e07085d0f6e26d4b2f8244bab0d70de07283ac6384" + + "a0501fc3dea7cf0adfd4c7f34871080900e252ddc403e3f0265f2a704af905d3727504ed" + + "28f3214a219d898a022463c78439799ca81c8cbafdbcec34ea937cd6a08202ea308202e6" + + "308202e2308201caa003020102020101300d06092a864886f70d01010b05003019311730" + + "150603550403130e4f43535020526573706f6e646572301e170d31353031333031353530" + + "33335a170d3136303133303135353033335a3019311730150603550403130e4f43535020" + + "526573706f6e64657230820122300d06092a864886f70d01010105000382010f00308201" + + "0a0282010100e8155f2d3e6f2e8d14c62a788bd462f9f844e7a6977c83ef1099f0f6616e" + + "c5265b56f356e62c5400f0b06a2e7945a82752c636df32a895152d6074df1701dc6ccfbc" + + "bec75a70bd2b55ae2be7e6cad3b5fd4cd5b7790ab401a436d3f5f346074ffde8a99d5b72" + + "3350f0a112076614b12ef79c78991b119453445acf2416ab0046b540db14c9fc0f27b898" + + "9ad0f63aa4b8aefc91aa8a72160c36307c60fec78a93d3fddf4259902aa77e7332971c7d" + + "285b6a04f648993c6922a3e9da9adf5f81508c3228791843e5d49f24db2f1290bafd97e6" + + "55b1049a199f652cd603c4fafa330c390b0da78fbbc67e8fa021cbd74eb96222b12ace31" + + "a77dcf920334dc94581b0203010001a3353033300e0603551d0f0101ff04040302078030" + + "130603551d25040c300a06082b06010505070309300c0603551d130101ff04023000300d" + + "06092a864886f70d01010b05000382010100718012761b5063e18f0dc44644d8e6ab8612" + + "31c15fd5357805425d82aec1de85bf6d3e30fce205e3e3b8b795bbe52e40a439286d2288" + + "9064f4aeeb150359b9425f1da51b3a5c939018555d13ac42c565a0603786a919328f3267" + + "09dce52c22ad958ecb7873b9771d1148b1c4be2efe80ba868919fc9f68b6090c2f33c156" + + "d67156e42766a50b5d51e79637b7e58af74c2a951b1e642fa7741fec982cc937de37eff5" + + "9e2005d5939bfc031589ca143e6e8ab83f40ee08cc20a6b4a95a318352c28d18528dcaf9" + + "66705de17afa19d6e8ae91ddf33179d16ebb6ac2c69cae8373d408ebf8c55308be6c04d9" + + "3a25439a94299a65a709756c7a3e568be049d5c38839" + +const ocspResponseWithExtensionHex = "308204fb0a0100a08204f4308204f006092b0601050507300101048204e1308204dd3081" + + "d8a003020100a11b3019311730150603550403130e4f43535020526573706f6e64657218" + + "0f32303136303130343136353930305a3081a230819f3049300906052b0e03021a050004" + + "14c0fe0278fc99188891b3f212e9c7e1b21ab7bfc004140dfc1df0a9e0f01ce7f2b21317" + + "7e6f8d157cd4f60210017f77deb3bcbb235d44ccc7dba62e72a116180f32303130303730" + + "373135303130355aa0030a0101180f32303130303730373135303130355aa011180f3230" + + "3130303730373138333531375aa1163014301206092b0601050507300102040504030000" + + "00300d06092a864886f70d01010b05000382010100c09a33e0b2324c852421bb83f85ac9" + + "9113f5426012bd2d2279a8166e9241d18a33c870894250622ffc7ed0c4601b16d624f90b" + + "779265442cdb6868cf40ab304ab4b66e7315ed02cf663b1601d1d4751772b31bc299db23" + + "9aebac78ed6797c06ed815a7a8d18d63cfbb609cafb47ec2e89e37db255216eb09307848" + + "d01be0a3e943653c78212b96ff524b74c9ec456b17cdfb950cc97645c577b2e09ff41dde" + + "b03afb3adaa381cc0f7c1d95663ef22a0f72f2c45613ae8e2b2d1efc96e8463c7d1d8a1d" + + "7e3b35df8fe73a301fc3f804b942b2b3afa337ff105fc1462b7b1c1d75eb4566c8665e59" + + "f80393b0adbf8004ff6c3327ed34f007cb4a3348a7d55e06e3a08202ea308202e6308202" + + "e2308201caa003020102020101300d06092a864886f70d01010b05003019311730150603" + + "550403130e4f43535020526573706f6e646572301e170d3135303133303135353033335a" + + "170d3136303133303135353033335a3019311730150603550403130e4f43535020526573" + + "706f6e64657230820122300d06092a864886f70d01010105000382010f003082010a0282" + + "010100e8155f2d3e6f2e8d14c62a788bd462f9f844e7a6977c83ef1099f0f6616ec5265b" + + "56f356e62c5400f0b06a2e7945a82752c636df32a895152d6074df1701dc6ccfbcbec75a" + + "70bd2b55ae2be7e6cad3b5fd4cd5b7790ab401a436d3f5f346074ffde8a99d5b723350f0" + + "a112076614b12ef79c78991b119453445acf2416ab0046b540db14c9fc0f27b8989ad0f6" + + "3aa4b8aefc91aa8a72160c36307c60fec78a93d3fddf4259902aa77e7332971c7d285b6a" + + "04f648993c6922a3e9da9adf5f81508c3228791843e5d49f24db2f1290bafd97e655b104" + + "9a199f652cd603c4fafa330c390b0da78fbbc67e8fa021cbd74eb96222b12ace31a77dcf" + + "920334dc94581b0203010001a3353033300e0603551d0f0101ff04040302078030130603" + + "551d25040c300a06082b06010505070309300c0603551d130101ff04023000300d06092a" + + "864886f70d01010b05000382010100718012761b5063e18f0dc44644d8e6ab861231c15f" + + "d5357805425d82aec1de85bf6d3e30fce205e3e3b8b795bbe52e40a439286d22889064f4" + + "aeeb150359b9425f1da51b3a5c939018555d13ac42c565a0603786a919328f326709dce5" + + "2c22ad958ecb7873b9771d1148b1c4be2efe80ba868919fc9f68b6090c2f33c156d67156" + + "e42766a50b5d51e79637b7e58af74c2a951b1e642fa7741fec982cc937de37eff59e2005" + + "d5939bfc031589ca143e6e8ab83f40ee08cc20a6b4a95a318352c28d18528dcaf966705d" + + "e17afa19d6e8ae91ddf33179d16ebb6ac2c69cae8373d408ebf8c55308be6c04d93a2543" + + "9a94299a65a709756c7a3e568be049d5c38839" + +const ocspMultiResponseHex = "30820ee60a0100a0820edf30820edb06092b060105050730010104820ecc30820ec83082" + + "0839a216041445ac2ecd75f53f1cf6e4c51d3de0047ad0aa7465180f3230313530363032" + + "3130303033305a3082080c3065303d300906052b0e03021a05000414f7452a0080601527" + + "72e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f0204" + + "5456656a8000180f32303135303630323039303230375aa011180f323031353036303331" + + "30303033305a3065303d300906052b0e03021a05000414f7452a008060152772e4a135e7" + + "6e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f02045456656b80" + + "00180f32303135303630323039303230375aa011180f3230313530363033313030303330" + + "5a3065303d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0" + + "f1580414edd8f2ee977252853a330b297a18f5c993853b3f02045456656c8000180f3230" + + "3135303630323039303230375aa011180f32303135303630333130303033305a3065303d" + + "300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414ed" + + "d8f2ee977252853a330b297a18f5c993853b3f02045456656d8000180f32303135303630" + + "323039303230375aa011180f32303135303630333130303033305a3065303d300906052b" + + "0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee9772" + + "52853a330b297a18f5c993853b3f02045456656e8000180f323031353036303230393032" + + "30375aa011180f32303135303630333130303033305a3065303d300906052b0e03021a05" + + "000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b" + + "297a18f5c993853b3f02045456656f8000180f32303135303630323039303230375aa011" + + "180f32303135303630333130303033305a3065303d300906052b0e03021a05000414f745" + + "2a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c9" + + "93853b3f0204545665708000180f32303135303630323039303230375aa011180f323031" + + "35303630333130303033305a3065303d300906052b0e03021a05000414f7452a00806015" + + "2772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f02" + + "04545665718000180f32303135303630323039303230375aa011180f3230313530363033" + + "3130303033305a3065303d300906052b0e03021a05000414f7452a008060152772e4a135" + + "e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f020454566572" + + "8000180f32303135303630323039303230375aa011180f32303135303630333130303033" + + "305a3065303d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fd" + + "e0f1580414edd8f2ee977252853a330b297a18f5c993853b3f0204545665738000180f32" + + "303135303630323039303230375aa011180f32303135303630333130303033305a306530" + + "3d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414" + + "edd8f2ee977252853a330b297a18f5c993853b3f0204545665748000180f323031353036" + + "30323039303230375aa011180f32303135303630333130303033305a3065303d30090605" + + "2b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee97" + + "7252853a330b297a18f5c993853b3f0204545665758000180f3230313530363032303930" + + "3230375aa011180f32303135303630333130303033305a3065303d300906052b0e03021a" + + "05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a33" + + "0b297a18f5c993853b3f0204545665768000180f32303135303630323039303230375aa0" + + "11180f32303135303630333130303033305a3065303d300906052b0e03021a05000414f7" + + "452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5" + + "c993853b3f0204545665778000180f32303135303630323039303230375aa011180f3230" + + "3135303630333130303033305a3065303d300906052b0e03021a05000414f7452a008060" + + "152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f" + + "0204545665788000180f32303135303630323039303230375aa011180f32303135303630" + + "333130303033305a3065303d300906052b0e03021a05000414f7452a008060152772e4a1" + + "35e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f0204545665" + + "798000180f32303135303630323039303230375aa011180f323031353036303331303030" + + "33305a3065303d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52" + + "fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f02045456657a8000180f" + + "32303135303630323039303230375aa011180f32303135303630333130303033305a3065" + + "303d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f15804" + + "14edd8f2ee977252853a330b297a18f5c993853b3f02045456657b8000180f3230313530" + + "3630323039303230375aa011180f32303135303630333130303033305a3065303d300906" + + "052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee" + + "977252853a330b297a18f5c993853b3f02045456657c8000180f32303135303630323039" + + "303230375aa011180f32303135303630333130303033305a3065303d300906052b0e0302" + + "1a05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a" + + "330b297a18f5c993853b3f02045456657d8000180f32303135303630323039303230375a" + + "a011180f32303135303630333130303033305a300d06092a864886f70d01010505000382" + + "01010016b73b92859979f27d15eb018cf069eed39c3d280213565f3026de11ba15bdb94d" + + "764cf2d0fdd204ef926c588d7b183483c8a2b1995079c7ed04dcefcc650c1965be4b6832" + + "a8839e832f7f60f638425eccdf9bc3a81fbe700fda426ddf4f06c29bee431bbbe81effda" + + "a60b7da5b378f199af2f3c8380be7ba6c21c8e27124f8a4d8989926aea19055700848d33" + + "799e833512945fd75364edbd2dd18b783c1e96e332266b17979a0b88c35b43f47c87c493" + + "19155056ad8dbbae5ff2afad3c0e1c69ed111206ffda49875e8e4efc0926264823bc4423" + + "c8a002f34288c4bc22516f98f54fc609943721f590ddd8d24f989457526b599b0eb75cb5" + + "a80da1ad93a621a08205733082056f3082056b30820453a0030201020204545638c4300d" + + "06092a864886f70d01010b0500308182310b300906035504061302555331183016060355" + + "040a130f552e532e20476f7665726e6d656e7431233021060355040b131a446570617274" + + "6d656e74206f662074686520547265617375727931223020060355040b13194365727469" + + "6669636174696f6e20417574686f7269746965733110300e060355040b13074f43494f20" + + "4341301e170d3135303332303131353531335a170d3135303633303034303030305a3081" + + "98310b300906035504061302555331183016060355040a130f552e532e20476f7665726e" + + "6d656e7431233021060355040b131a4465706172746d656e74206f662074686520547265" + + "617375727931223020060355040b131943657274696669636174696f6e20417574686f72" + + "69746965733110300e060355040b13074f43494f204341311430120603550403130b4f43" + + "5350205369676e657230820122300d06092a864886f70d01010105000382010f00308201" + + "0a0282010100c1b6fe1ba1ad50bb98c855811acbd67fe68057f48b8e08d3800e7f2c51b7" + + "9e20551934971fd92b9c9e6c49453097927cba83a94c0b2fea7124ba5ac442b38e37dba6" + + "7303d4962dd7d92b22a04b0e0e182e9ea67620b1c6ce09ee607c19e0e6e3adae81151db1" + + "2bb7f706149349a292e21c1eb28565b6839df055e1a838a772ff34b5a1452618e2c26042" + + "705d53f0af4b57aae6163f58216af12f3887813fe44b0321827b3a0c52b0e47d0aab94a2" + + "f768ab0ba3901d22f8bb263823090b0e37a7f8856db4b0d165c42f3aa7e94f5f6ce1855e" + + "98dc57adea0ae98ad39f67ecdec00b88685566e9e8d69f6cefb6ddced53015d0d3b862bc" + + "be21f3d72251eefcec730203010001a38201cf308201cb300e0603551d0f0101ff040403" + + "020780306b0603551d2004643062300c060a60864801650302010502300c060a60864801" + + "650302010503300c060a60864801650302010504300c060a60864801650302010507300c" + + "060a60864801650302010508300c060a6086480165030201030d300c060a608648016503" + + "020103113081e506082b060105050701010481d83081d5303006082b0601050507300286" + + "24687474703a2f2f706b692e74726561732e676f762f746f63615f65655f6169612e7037" + + "633081a006082b060105050730028681936c6461703a2f2f6c6461702e74726561732e67" + + "6f762f6f753d4f43494f25323043412c6f753d43657274696669636174696f6e25323041" + + "7574686f7269746965732c6f753d4465706172746d656e742532306f6625323074686525" + + "323054726561737572792c6f3d552e532e253230476f7665726e6d656e742c633d55533f" + + "634143657274696669636174653b62696e61727930130603551d25040c300a06082b0601" + + "0505070309300f06092b060105050730010504020500301f0603551d23041830168014a2" + + "13a8e5c607546c243d4eb72b27a2a7711ab5af301d0603551d0e0416041451f98046818a" + + "e46d953ac90c210ccfaa1a06980c300d06092a864886f70d01010b050003820101003a37" + + "0b301d14ffdeb370883639bec5ae6f572dcbddadd672af16ee2a8303316b14e1fbdca8c2" + + "8f4bad9c7b1410250e149c14e9830ca6f17370a8d13151205d956e28c141cc0500379596" + + "c5b9239fcfa3d2de8f1d4f1a2b1bf2d1851bed1c86012ee8135bdc395cd4496ce69fadd0" + + "3b682b90350ca7b4f458190b7a0ab5c33a04cf1347a77d541877a380a4c94988c5658908" + + "44fdc22637a72b9fa410333e2caf969477f9fe07f50e3681c204fb3bf073b9da01cd8d91" + + "8044c40b1159955af12a3263ab1d34119d7f59bfa6cae88ed058addc4e08250263f8f836" + + "2f5bdffd45636fea7474c60a55c535954477b2f286e1b2535f0dd12c162f1b353c370e08" + + "be67" + +const ocspMultiResponseCertHex = "308207943082067ca003020102020454566573300d06092a864886f70d01010b05003081" + + "82310b300906035504061302555331183016060355040a130f552e532e20476f7665726e" + + "6d656e7431233021060355040b131a4465706172746d656e74206f662074686520547265" + + "617375727931223020060355040b131943657274696669636174696f6e20417574686f72" + + "69746965733110300e060355040b13074f43494f204341301e170d313530343130313535" + + "3733385a170d3138303431303136323733385a30819d310b300906035504061302555331" + + "183016060355040a130f552e532e20476f7665726e6d656e7431233021060355040b131a" + + "4465706172746d656e74206f662074686520547265617375727931253023060355040b13" + + "1c427572656175206f66207468652046697363616c20536572766963653110300e060355" + + "040b130744657669636573311630140603550403130d706b692e74726561732e676f7630" + + "820122300d06092a864886f70d01010105000382010f003082010a0282010100c7273623" + + "8c49c48bf501515a2490ef6e5ae0c06e0ad2aa9a6bb77f3d0370d846b2571581ebf38fd3" + + "1948daad3dec7a4da095f1dcbe9654e65bcf7acdfd4ee802421dad9b90536c721d2bca58" + + "8413e6bfd739a72470560bb7d64f9a09284f90ff8af1d5a3c5c84d0f95a00f9c6d988dd0" + + "d87f1d0d3344580901c955139f54d09de0acdbd3322b758cb0c58881bf04913243401f44" + + "013fd9f6d8348044cc8bb0a71978ad93366b2a4687a5274b2ee07d0fb40225453eb244ed" + + "b20152251ac77c59455260ff07eeceb3cb3c60fb8121cf92afd3daa2a4650e1942ccb555" + + "de10b3d481feb299838ef05d0fd1810b146753472ae80da65dd34da25ca1f89971f10039" + + "0203010001a38203f3308203ef300e0603551d0f0101ff0404030205a030170603551d20" + + "0410300e300c060a60864801650302010503301106096086480186f84201010404030206" + + "4030130603551d25040c300a06082b060105050703013082010806082b06010505070101" + + "0481fb3081f8303006082b060105050730028624687474703a2f2f706b692e7472656173" + + "2e676f762f746f63615f65655f6169612e7037633081a006082b06010505073002868193" + + "6c6461703a2f2f6c6461702e74726561732e676f762f6f753d4f43494f25323043412c6f" + + "753d43657274696669636174696f6e253230417574686f7269746965732c6f753d446570" + + "6172746d656e742532306f6625323074686525323054726561737572792c6f3d552e532e" + + "253230476f7665726e6d656e742c633d55533f634143657274696669636174653b62696e" + + "617279302106082b060105050730018615687474703a2f2f6f6373702e74726561732e67" + + "6f76307b0603551d1104743072811c6373612d7465616d4066697363616c2e7472656173" + + "7572792e676f768210706b692e74726561737572792e676f768210706b692e64696d632e" + + "6468732e676f76820d706b692e74726561732e676f76811f6563622d686f7374696e6740" + + "66697363616c2e74726561737572792e676f76308201890603551d1f048201803082017c" + + "3027a025a0238621687474703a2f2f706b692e74726561732e676f762f4f43494f5f4341" + + "332e63726c3082014fa082014ba0820147a48197308194310b3009060355040613025553" + + "31183016060355040a130f552e532e20476f7665726e6d656e7431233021060355040b13" + + "1a4465706172746d656e74206f662074686520547265617375727931223020060355040b" + + "131943657274696669636174696f6e20417574686f7269746965733110300e060355040b" + + "13074f43494f2043413110300e0603550403130743524c313430398681aa6c6461703a2f" + + "2f6c6461702e74726561732e676f762f636e3d43524c313430392c6f753d4f43494f2532" + + "3043412c6f753d43657274696669636174696f6e253230417574686f7269746965732c6f" + + "753d4465706172746d656e742532306f6625323074686525323054726561737572792c6f" + + "3d552e532e253230476f7665726e6d656e742c633d55533f636572746966696361746552" + + "65766f636174696f6e4c6973743b62696e617279302b0603551d1004243022800f323031" + + "35303431303135353733385a810f32303138303431303136323733385a301f0603551d23" + + "041830168014a213a8e5c607546c243d4eb72b27a2a7711ab5af301d0603551d0e041604" + + "14b0869c12c293914cd460e33ed43e6c5a26e0d68f301906092a864886f67d074100040c" + + "300a1b0456382e31030203a8300d06092a864886f70d01010b050003820101004968d182" + + "8f9efdc147e747bb5dda15536a42a079b32d3d7f87e619b483aeee70b7e26bda393c6028" + + "7c733ecb468fe8b8b11bf809ff76add6b90eb25ad8d3a1052e43ee281e48a3a1ebe7efb5" + + "9e2c4a48765dedeb23f5346242145786cc988c762d230d28dd33bf4c2405d80cbb2cb1d6" + + "4c8f10ba130d50cb174f6ffb9cfc12808297a2cefba385f4fad170f39b51ebd87c12abf9" + + "3c51fc000af90d8aaba78f48923908804a5eb35f617ccf71d201e3708a559e6d16f9f13e" + + "074361eb9007e28d86bb4e0bfa13aad0e9ddd9124e84519de60e2fc6040b18d9fd602b02" + + "684b4c071c3019fc842197d00c120c41654bcbfbc4a096a1c637b79112b81ce1fa3899f9" + +const ocspRequestHex = "3051304f304d304b3049300906052b0e03021a05000414c0fe0278fc99188891b3f212e9" + + "c7e1b21ab7bfc004140dfc1df0a9e0f01ce7f2b213177e6f8d157cd4f60210017f77deb3" + + "bcbb235d44ccc7dba62e72" + +const leafCertHex = "308203c830820331a0030201020210017f77deb3bcbb235d44ccc7dba62e72300d06092a" + + "864886f70d01010505003081ba311f301d060355040a1316566572695369676e20547275" + + "7374204e6574776f726b31173015060355040b130e566572695369676e2c20496e632e31" + + "333031060355040b132a566572695369676e20496e7465726e6174696f6e616c20536572" + + "766572204341202d20436c617373203331493047060355040b13407777772e7665726973" + + "69676e2e636f6d2f43505320496e636f72702e6279205265662e204c494142494c495459" + + "204c54442e286329393720566572695369676e301e170d3132303632313030303030305a" + + "170d3133313233313233353935395a3068310b3009060355040613025553311330110603" + + "550408130a43616c69666f726e6961311230100603550407130950616c6f20416c746f31" + + "173015060355040a130e46616365626f6f6b2c20496e632e311730150603550403140e2a" + + "2e66616365626f6f6b2e636f6d30819f300d06092a864886f70d010101050003818d0030" + + "818902818100ae94b171e2deccc1693e051063240102e0689ae83c39b6b3e74b97d48d7b" + + "23689100b0b496ee62f0e6d356bcf4aa0f50643402f5d1766aa972835a7564723f39bbef" + + "5290ded9bcdbf9d3d55dfad23aa03dc604c54d29cf1d4b3bdbd1a809cfae47b44c7eae17" + + "c5109bee24a9cf4a8d911bb0fd0415ae4c3f430aa12a557e2ae10203010001a382011e30" + + "82011a30090603551d130402300030440603551d20043d303b3039060b6086480186f845" + + "01071703302a302806082b06010505070201161c68747470733a2f2f7777772e76657269" + + "7369676e2e636f6d2f727061303c0603551d1f043530333031a02fa02d862b687474703a" + + "2f2f535652496e746c2d63726c2e766572697369676e2e636f6d2f535652496e746c2e63" + + "726c301d0603551d250416301406082b0601050507030106082b06010505070302300b06" + + "03551d0f0404030205a0303406082b0601050507010104283026302406082b0601050507" + + "30018618687474703a2f2f6f6373702e766572697369676e2e636f6d30270603551d1104" + + "20301e820e2a2e66616365626f6f6b2e636f6d820c66616365626f6f6b2e636f6d300d06" + + "092a864886f70d0101050500038181005b6c2b75f8ed30aa51aad36aba595e555141951f" + + "81a53b447910ac1f76ff78fc2781616b58f3122afc1c87010425e9ed43df1a7ba6498060" + + "67e2688af03db58c7df4ee03309a6afc247ccb134dc33e54c6bc1d5133a532a73273b1d7" + + "9cadc08e7e1a83116d34523340b0305427a21742827c98916698ee7eaf8c3bdd71700817" + +const issuerCertHex = "30820383308202eca003020102021046fcebbab4d02f0f926098233f93078f300d06092a" + + "864886f70d0101050500305f310b300906035504061302555331173015060355040a130e" + + "566572695369676e2c20496e632e31373035060355040b132e436c617373203320507562" + + "6c6963205072696d6172792043657274696669636174696f6e20417574686f7269747930" + + "1e170d3937303431373030303030305a170d3136313032343233353935395a3081ba311f" + + "301d060355040a1316566572695369676e205472757374204e6574776f726b3117301506" + + "0355040b130e566572695369676e2c20496e632e31333031060355040b132a5665726953" + + "69676e20496e7465726e6174696f6e616c20536572766572204341202d20436c61737320" + + "3331493047060355040b13407777772e766572697369676e2e636f6d2f43505320496e63" + + "6f72702e6279205265662e204c494142494c495459204c54442e28632939372056657269" + + "5369676e30819f300d06092a864886f70d010101050003818d0030818902818100d88280" + + "e8d619027d1f85183925a2652be1bfd405d3bce6363baaf04c6c5bb6e7aa3c734555b2f1" + + "bdea9742ed9a340a15d4a95cf54025ddd907c132b2756cc4cabba3fe56277143aa63f530" + + "3e9328e5faf1093bf3b74d4e39f75c495ab8c11dd3b28afe70309542cbfe2b518b5a3c3a" + + "f9224f90b202a7539c4f34e7ab04b27b6f0203010001a381e33081e0300f0603551d1304" + + "0830060101ff02010030440603551d20043d303b3039060b6086480186f8450107010130" + + "2a302806082b06010505070201161c68747470733a2f2f7777772e766572697369676e2e" + + "636f6d2f43505330340603551d25042d302b06082b0601050507030106082b0601050507" + + "030206096086480186f8420401060a6086480186f845010801300b0603551d0f04040302" + + "0106301106096086480186f842010104040302010630310603551d1f042a30283026a024" + + "a0228620687474703a2f2f63726c2e766572697369676e2e636f6d2f706361332e63726c" + + "300d06092a864886f70d010105050003818100408e4997968a73dd8e4def3e61b7caa062" + + "adf40e0abb753de26ed82cc7bff4b98c369bcaa2d09c724639f6a682036511c4bcbf2da6" + + "f5d93b0ab598fab378b91ef22b4c62d5fdb27a1ddf33fd73f9a5d82d8c2aead1fcb028b6" + + "e94948134b838a1b487b24f738de6f4154b8ab576b06dfc7a2d4a9f6f136628088f28b75" + + "d68071" + +// Key and certificate for the OCSP responder were not taken from the Thawte +// responder, since CreateResponse requires that we have the private key. +// Instead, they were generated randomly. +const responderPrivateKeyHex = "308204a40201000282010100e8155f2d3e6f2e8d14c62a788bd462f9f844e7a6977c83ef" + + "1099f0f6616ec5265b56f356e62c5400f0b06a2e7945a82752c636df32a895152d6074df" + + "1701dc6ccfbcbec75a70bd2b55ae2be7e6cad3b5fd4cd5b7790ab401a436d3f5f346074f" + + "fde8a99d5b723350f0a112076614b12ef79c78991b119453445acf2416ab0046b540db14" + + "c9fc0f27b8989ad0f63aa4b8aefc91aa8a72160c36307c60fec78a93d3fddf4259902aa7" + + "7e7332971c7d285b6a04f648993c6922a3e9da9adf5f81508c3228791843e5d49f24db2f" + + "1290bafd97e655b1049a199f652cd603c4fafa330c390b0da78fbbc67e8fa021cbd74eb9" + + "6222b12ace31a77dcf920334dc94581b02030100010282010100bcf0b93d7238bda329a8" + + "72e7149f61bcb37c154330ccb3f42a85c9002c2e2bdea039d77d8581cd19bed94078794e" + + "56293d601547fc4bf6a2f9002fe5772b92b21b254403b403585e3130cc99ccf08f0ef81a" + + "575b38f597ba4660448b54f44bfbb97072b5a2bf043bfeca828cf7741d13698e3f38162b" + + "679faa646b82abd9a72c5c7d722c5fc577a76d2c2daac588accad18516d1bbad10b0dfa2" + + "05cfe246b59e28608a43942e1b71b0c80498075121de5b900d727c31c42c78cf1db5c0aa" + + "5b491e10ea4ed5c0962aaf2ae025dd81fa4ce490d9d6b4a4465411d8e542fc88617e5695" + + "1aa4fc8ea166f2b4d0eb89ef17f2b206bd5f1014bf8fe0e71fe62f2cccf102818100f2dc" + + "ddf878d553286daad68bac4070a82ffec3dc4666a2750f47879eec913f91836f1d976b60" + + "daf9356e078446dafab5bd2e489e5d64f8572ba24a4ba4f3729b5e106c4dd831cc2497a7" + + "e6c7507df05cb64aeb1bbc81c1e340d58b5964cf39cff84ea30c29ec5d3f005ee1362698" + + "07395037955955655292c3e85f6187fa1f9502818100f4a33c102630840705f8c778a47b" + + "87e8da31e68809af981ac5e5999cf1551685d761cdf0d6520361b99aebd5777a940fa64d" + + "327c09fa63746fbb3247ec73a86edf115f1fe5c83598db803881ade71c33c6e956118345" + + "497b98b5e07bb5be75971465ec78f2f9467e1b74956ca9d4c7c3e314e742a72d8b33889c" + + "6c093a466cef0281801d3df0d02124766dd0be98349b19eb36a508c4e679e793ba0a8bef" + + "4d786888c1e9947078b1ea28938716677b4ad8c5052af12eb73ac194915264a913709a0b" + + "7b9f98d4a18edd781a13d49899f91c20dbd8eb2e61d991ba19b5cdc08893f5cb9d39e5a6" + + "0629ea16d426244673b1b3ee72bd30e41fac8395acac40077403de5efd028180050731dd" + + "d71b1a2b96c8d538ba90bb6b62c8b1c74c03aae9a9f59d21a7a82b0d572ef06fa9c807bf" + + "c373d6b30d809c7871df96510c577421d9860c7383fda0919ece19996b3ca13562159193" + + "c0c246471e287f975e8e57034e5136aaf44254e2650def3d51292474c515b1588969112e" + + "0a85cc77073e9d64d2c2fc497844284b02818100d71d63eabf416cf677401ebf965f8314" + + "120b568a57dd3bd9116c629c40dc0c6948bab3a13cc544c31c7da40e76132ef5dd3f7534" + + "45a635930c74326ae3df0edd1bfb1523e3aa259873ac7cf1ac31151ec8f37b528c275622" + + "48f99b8bed59fd4da2576aa6ee20d93a684900bf907e80c66d6e2261ae15e55284b4ed9d" + + "6bdaa059" + +const responderCertHex = "308202e2308201caa003020102020101300d06092a864886f70d01010b05003019311730" + + "150603550403130e4f43535020526573706f6e646572301e170d31353031333031353530" + + "33335a170d3136303133303135353033335a3019311730150603550403130e4f43535020" + + "526573706f6e64657230820122300d06092a864886f70d01010105000382010f00308201" + + "0a0282010100e8155f2d3e6f2e8d14c62a788bd462f9f844e7a6977c83ef1099f0f6616e" + + "c5265b56f356e62c5400f0b06a2e7945a82752c636df32a895152d6074df1701dc6ccfbc" + + "bec75a70bd2b55ae2be7e6cad3b5fd4cd5b7790ab401a436d3f5f346074ffde8a99d5b72" + + "3350f0a112076614b12ef79c78991b119453445acf2416ab0046b540db14c9fc0f27b898" + + "9ad0f63aa4b8aefc91aa8a72160c36307c60fec78a93d3fddf4259902aa77e7332971c7d" + + "285b6a04f648993c6922a3e9da9adf5f81508c3228791843e5d49f24db2f1290bafd97e6" + + "55b1049a199f652cd603c4fafa330c390b0da78fbbc67e8fa021cbd74eb96222b12ace31" + + "a77dcf920334dc94581b0203010001a3353033300e0603551d0f0101ff04040302078030" + + "130603551d25040c300a06082b06010505070309300c0603551d130101ff04023000300d" + + "06092a864886f70d01010b05000382010100718012761b5063e18f0dc44644d8e6ab8612" + + "31c15fd5357805425d82aec1de85bf6d3e30fce205e3e3b8b795bbe52e40a439286d2288" + + "9064f4aeeb150359b9425f1da51b3a5c939018555d13ac42c565a0603786a919328f3267" + + "09dce52c22ad958ecb7873b9771d1148b1c4be2efe80ba868919fc9f68b6090c2f33c156" + + "d67156e42766a50b5d51e79637b7e58af74c2a951b1e642fa7741fec982cc937de37eff5" + + "9e2005d5939bfc031589ca143e6e8ab83f40ee08cc20a6b4a95a318352c28d18528dcaf9" + + "66705de17afa19d6e8ae91ddf33179d16ebb6ac2c69cae8373d408ebf8c55308be6c04d9" + + "3a25439a94299a65a709756c7a3e568be049d5c38839" + +const errorResponseHex = "30030a0101" diff --git a/vendor/golang.org/x/crypto/openpgp/armor/armor.go b/vendor/golang.org/x/crypto/openpgp/armor/armor.go new file mode 100644 index 0000000..592d186 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/armor/armor.go @@ -0,0 +1,219 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package armor implements OpenPGP ASCII Armor, see RFC 4880. OpenPGP Armor is +// very similar to PEM except that it has an additional CRC checksum. +package armor // import "golang.org/x/crypto/openpgp/armor" + +import ( + "bufio" + "bytes" + "encoding/base64" + "golang.org/x/crypto/openpgp/errors" + "io" +) + +// A Block represents an OpenPGP armored structure. +// +// The encoded form is: +// -----BEGIN Type----- +// Headers +// +// base64-encoded Bytes +// '=' base64 encoded checksum +// -----END Type----- +// where Headers is a possibly empty sequence of Key: Value lines. +// +// Since the armored data can be very large, this package presents a streaming +// interface. +type Block struct { + Type string // The type, taken from the preamble (i.e. "PGP SIGNATURE"). + Header map[string]string // Optional headers. + Body io.Reader // A Reader from which the contents can be read + lReader lineReader + oReader openpgpReader +} + +var ArmorCorrupt error = errors.StructuralError("armor invalid") + +const crc24Init = 0xb704ce +const crc24Poly = 0x1864cfb +const crc24Mask = 0xffffff + +// crc24 calculates the OpenPGP checksum as specified in RFC 4880, section 6.1 +func crc24(crc uint32, d []byte) uint32 { + for _, b := range d { + crc ^= uint32(b) << 16 + for i := 0; i < 8; i++ { + crc <<= 1 + if crc&0x1000000 != 0 { + crc ^= crc24Poly + } + } + } + return crc +} + +var armorStart = []byte("-----BEGIN ") +var armorEnd = []byte("-----END ") +var armorEndOfLine = []byte("-----") + +// lineReader wraps a line based reader. It watches for the end of an armor +// block and records the expected CRC value. +type lineReader struct { + in *bufio.Reader + buf []byte + eof bool + crc uint32 +} + +func (l *lineReader) Read(p []byte) (n int, err error) { + if l.eof { + return 0, io.EOF + } + + if len(l.buf) > 0 { + n = copy(p, l.buf) + l.buf = l.buf[n:] + return + } + + line, isPrefix, err := l.in.ReadLine() + if err != nil { + return + } + if isPrefix { + return 0, ArmorCorrupt + } + + if len(line) == 5 && line[0] == '=' { + // This is the checksum line + var expectedBytes [3]byte + var m int + m, err = base64.StdEncoding.Decode(expectedBytes[0:], line[1:]) + if m != 3 || err != nil { + return + } + l.crc = uint32(expectedBytes[0])<<16 | + uint32(expectedBytes[1])<<8 | + uint32(expectedBytes[2]) + + line, _, err = l.in.ReadLine() + if err != nil && err != io.EOF { + return + } + if !bytes.HasPrefix(line, armorEnd) { + return 0, ArmorCorrupt + } + + l.eof = true + return 0, io.EOF + } + + if len(line) > 96 { + return 0, ArmorCorrupt + } + + n = copy(p, line) + bytesToSave := len(line) - n + if bytesToSave > 0 { + if cap(l.buf) < bytesToSave { + l.buf = make([]byte, 0, bytesToSave) + } + l.buf = l.buf[0:bytesToSave] + copy(l.buf, line[n:]) + } + + return +} + +// openpgpReader passes Read calls to the underlying base64 decoder, but keeps +// a running CRC of the resulting data and checks the CRC against the value +// found by the lineReader at EOF. +type openpgpReader struct { + lReader *lineReader + b64Reader io.Reader + currentCRC uint32 +} + +func (r *openpgpReader) Read(p []byte) (n int, err error) { + n, err = r.b64Reader.Read(p) + r.currentCRC = crc24(r.currentCRC, p[:n]) + + if err == io.EOF { + if r.lReader.crc != uint32(r.currentCRC&crc24Mask) { + return 0, ArmorCorrupt + } + } + + return +} + +// Decode reads a PGP armored block from the given Reader. It will ignore +// leading garbage. If it doesn't find a block, it will return nil, io.EOF. The +// given Reader is not usable after calling this function: an arbitrary amount +// of data may have been read past the end of the block. +func Decode(in io.Reader) (p *Block, err error) { + r := bufio.NewReaderSize(in, 100) + var line []byte + ignoreNext := false + +TryNextBlock: + p = nil + + // Skip leading garbage + for { + ignoreThis := ignoreNext + line, ignoreNext, err = r.ReadLine() + if err != nil { + return + } + if ignoreNext || ignoreThis { + continue + } + line = bytes.TrimSpace(line) + if len(line) > len(armorStart)+len(armorEndOfLine) && bytes.HasPrefix(line, armorStart) { + break + } + } + + p = new(Block) + p.Type = string(line[len(armorStart) : len(line)-len(armorEndOfLine)]) + p.Header = make(map[string]string) + nextIsContinuation := false + var lastKey string + + // Read headers + for { + isContinuation := nextIsContinuation + line, nextIsContinuation, err = r.ReadLine() + if err != nil { + p = nil + return + } + if isContinuation { + p.Header[lastKey] += string(line) + continue + } + line = bytes.TrimSpace(line) + if len(line) == 0 { + break + } + + i := bytes.Index(line, []byte(": ")) + if i == -1 { + goto TryNextBlock + } + lastKey = string(line[:i]) + p.Header[lastKey] = string(line[i+2:]) + } + + p.lReader.in = r + p.oReader.currentCRC = crc24Init + p.oReader.lReader = &p.lReader + p.oReader.b64Reader = base64.NewDecoder(base64.StdEncoding, &p.lReader) + p.Body = &p.oReader + + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/armor/armor_test.go b/vendor/golang.org/x/crypto/openpgp/armor/armor_test.go new file mode 100644 index 0000000..9334e94 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/armor/armor_test.go @@ -0,0 +1,95 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package armor + +import ( + "bytes" + "hash/adler32" + "io/ioutil" + "testing" +) + +func TestDecodeEncode(t *testing.T) { + buf := bytes.NewBuffer([]byte(armorExample1)) + result, err := Decode(buf) + if err != nil { + t.Error(err) + } + expectedType := "PGP SIGNATURE" + if result.Type != expectedType { + t.Errorf("result.Type: got:%s want:%s", result.Type, expectedType) + } + if len(result.Header) != 1 { + t.Errorf("len(result.Header): got:%d want:1", len(result.Header)) + } + v, ok := result.Header["Version"] + if !ok || v != "GnuPG v1.4.10 (GNU/Linux)" { + t.Errorf("result.Header: got:%#v", result.Header) + } + + contents, err := ioutil.ReadAll(result.Body) + if err != nil { + t.Error(err) + } + + if adler32.Checksum(contents) != 0x27b144be { + t.Errorf("contents: got: %x", contents) + } + + buf = bytes.NewBuffer(nil) + w, err := Encode(buf, result.Type, result.Header) + if err != nil { + t.Error(err) + } + _, err = w.Write(contents) + if err != nil { + t.Error(err) + } + w.Close() + + if !bytes.Equal(buf.Bytes(), []byte(armorExample1)) { + t.Errorf("got: %s\nwant: %s", string(buf.Bytes()), armorExample1) + } +} + +func TestLongHeader(t *testing.T) { + buf := bytes.NewBuffer([]byte(armorLongLine)) + result, err := Decode(buf) + if err != nil { + t.Error(err) + return + } + value, ok := result.Header["Version"] + if !ok { + t.Errorf("missing Version header") + } + if value != longValueExpected { + t.Errorf("got: %s want: %s", value, longValueExpected) + } +} + +const armorExample1 = `-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.10 (GNU/Linux) + +iJwEAAECAAYFAk1Fv/0ACgkQo01+GMIMMbsYTwQAiAw+QAaNfY6WBdplZ/uMAccm +4g+81QPmTSGHnetSb6WBiY13kVzK4HQiZH8JSkmmroMLuGeJwsRTEL4wbjRyUKEt +p1xwUZDECs234F1xiG5enc5SGlRtP7foLBz9lOsjx+LEcA4sTl5/2eZR9zyFZqWW +TxRjs+fJCIFuo71xb1g= +=/teI +-----END PGP SIGNATURE-----` + +const armorLongLine = `-----BEGIN PGP SIGNATURE----- +Version: 0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz + +iQEcBAABAgAGBQJMtFESAAoJEKsQXJGvOPsVj40H/1WW6jaMXv4BW+1ueDSMDwM8 +kx1fLOXbVM5/Kn5LStZNt1jWWnpxdz7eq3uiqeCQjmqUoRde3YbB2EMnnwRbAhpp +cacnAvy9ZQ78OTxUdNW1mhX5bS6q1MTEJnl+DcyigD70HG/yNNQD7sOPMdYQw0TA +byQBwmLwmTsuZsrYqB68QyLHI+DUugn+kX6Hd2WDB62DKa2suoIUIHQQCd/ofwB3 +WfCYInXQKKOSxu2YOg2Eb4kLNhSMc1i9uKUWAH+sdgJh7NBgdoE4MaNtBFkHXRvv +okWuf3+xA9ksp1npSY/mDvgHijmjvtpRDe6iUeqfCn8N9u9CBg8geANgaG8+QA4= +=wfQG +-----END PGP SIGNATURE-----` + +const longValueExpected = "0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz" diff --git a/vendor/golang.org/x/crypto/openpgp/armor/encode.go b/vendor/golang.org/x/crypto/openpgp/armor/encode.go new file mode 100644 index 0000000..6f07582 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/armor/encode.go @@ -0,0 +1,160 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package armor + +import ( + "encoding/base64" + "io" +) + +var armorHeaderSep = []byte(": ") +var blockEnd = []byte("\n=") +var newline = []byte("\n") +var armorEndOfLineOut = []byte("-----\n") + +// writeSlices writes its arguments to the given Writer. +func writeSlices(out io.Writer, slices ...[]byte) (err error) { + for _, s := range slices { + _, err = out.Write(s) + if err != nil { + return err + } + } + return +} + +// lineBreaker breaks data across several lines, all of the same byte length +// (except possibly the last). Lines are broken with a single '\n'. +type lineBreaker struct { + lineLength int + line []byte + used int + out io.Writer + haveWritten bool +} + +func newLineBreaker(out io.Writer, lineLength int) *lineBreaker { + return &lineBreaker{ + lineLength: lineLength, + line: make([]byte, lineLength), + used: 0, + out: out, + } +} + +func (l *lineBreaker) Write(b []byte) (n int, err error) { + n = len(b) + + if n == 0 { + return + } + + if l.used == 0 && l.haveWritten { + _, err = l.out.Write([]byte{'\n'}) + if err != nil { + return + } + } + + if l.used+len(b) < l.lineLength { + l.used += copy(l.line[l.used:], b) + return + } + + l.haveWritten = true + _, err = l.out.Write(l.line[0:l.used]) + if err != nil { + return + } + excess := l.lineLength - l.used + l.used = 0 + + _, err = l.out.Write(b[0:excess]) + if err != nil { + return + } + + _, err = l.Write(b[excess:]) + return +} + +func (l *lineBreaker) Close() (err error) { + if l.used > 0 { + _, err = l.out.Write(l.line[0:l.used]) + if err != nil { + return + } + } + + return +} + +// encoding keeps track of a running CRC24 over the data which has been written +// to it and outputs a OpenPGP checksum when closed, followed by an armor +// trailer. +// +// It's built into a stack of io.Writers: +// encoding -> base64 encoder -> lineBreaker -> out +type encoding struct { + out io.Writer + breaker *lineBreaker + b64 io.WriteCloser + crc uint32 + blockType []byte +} + +func (e *encoding) Write(data []byte) (n int, err error) { + e.crc = crc24(e.crc, data) + return e.b64.Write(data) +} + +func (e *encoding) Close() (err error) { + err = e.b64.Close() + if err != nil { + return + } + e.breaker.Close() + + var checksumBytes [3]byte + checksumBytes[0] = byte(e.crc >> 16) + checksumBytes[1] = byte(e.crc >> 8) + checksumBytes[2] = byte(e.crc) + + var b64ChecksumBytes [4]byte + base64.StdEncoding.Encode(b64ChecksumBytes[:], checksumBytes[:]) + + return writeSlices(e.out, blockEnd, b64ChecksumBytes[:], newline, armorEnd, e.blockType, armorEndOfLine) +} + +// Encode returns a WriteCloser which will encode the data written to it in +// OpenPGP armor. +func Encode(out io.Writer, blockType string, headers map[string]string) (w io.WriteCloser, err error) { + bType := []byte(blockType) + err = writeSlices(out, armorStart, bType, armorEndOfLineOut) + if err != nil { + return + } + + for k, v := range headers { + err = writeSlices(out, []byte(k), armorHeaderSep, []byte(v), newline) + if err != nil { + return + } + } + + _, err = out.Write(newline) + if err != nil { + return + } + + e := &encoding{ + out: out, + breaker: newLineBreaker(out, 64), + crc: crc24Init, + blockType: bType, + } + e.b64 = base64.NewEncoder(base64.StdEncoding, e.breaker) + return e, nil +} diff --git a/vendor/golang.org/x/crypto/openpgp/canonical_text.go b/vendor/golang.org/x/crypto/openpgp/canonical_text.go new file mode 100644 index 0000000..e601e38 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/canonical_text.go @@ -0,0 +1,59 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import "hash" + +// NewCanonicalTextHash reformats text written to it into the canonical +// form and then applies the hash h. See RFC 4880, section 5.2.1. +func NewCanonicalTextHash(h hash.Hash) hash.Hash { + return &canonicalTextHash{h, 0} +} + +type canonicalTextHash struct { + h hash.Hash + s int +} + +var newline = []byte{'\r', '\n'} + +func (cth *canonicalTextHash) Write(buf []byte) (int, error) { + start := 0 + + for i, c := range buf { + switch cth.s { + case 0: + if c == '\r' { + cth.s = 1 + } else if c == '\n' { + cth.h.Write(buf[start:i]) + cth.h.Write(newline) + start = i + 1 + } + case 1: + cth.s = 0 + } + } + + cth.h.Write(buf[start:]) + return len(buf), nil +} + +func (cth *canonicalTextHash) Sum(in []byte) []byte { + return cth.h.Sum(in) +} + +func (cth *canonicalTextHash) Reset() { + cth.h.Reset() + cth.s = 0 +} + +func (cth *canonicalTextHash) Size() int { + return cth.h.Size() +} + +func (cth *canonicalTextHash) BlockSize() int { + return cth.h.BlockSize() +} diff --git a/vendor/golang.org/x/crypto/openpgp/canonical_text_test.go b/vendor/golang.org/x/crypto/openpgp/canonical_text_test.go new file mode 100644 index 0000000..8f3ba2a --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/canonical_text_test.go @@ -0,0 +1,52 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "bytes" + "testing" +) + +type recordingHash struct { + buf *bytes.Buffer +} + +func (r recordingHash) Write(b []byte) (n int, err error) { + return r.buf.Write(b) +} + +func (r recordingHash) Sum(in []byte) []byte { + return append(in, r.buf.Bytes()...) +} + +func (r recordingHash) Reset() { + panic("shouldn't be called") +} + +func (r recordingHash) Size() int { + panic("shouldn't be called") +} + +func (r recordingHash) BlockSize() int { + panic("shouldn't be called") +} + +func testCanonicalText(t *testing.T, input, expected string) { + r := recordingHash{bytes.NewBuffer(nil)} + c := NewCanonicalTextHash(r) + c.Write([]byte(input)) + result := c.Sum(nil) + if expected != string(result) { + t.Errorf("input: %x got: %x want: %x", input, result, expected) + } +} + +func TestCanonicalText(t *testing.T) { + testCanonicalText(t, "foo\n", "foo\r\n") + testCanonicalText(t, "foo", "foo") + testCanonicalText(t, "foo\r\n", "foo\r\n") + testCanonicalText(t, "foo\r\nbar", "foo\r\nbar") + testCanonicalText(t, "foo\r\nbar\n\n", "foo\r\nbar\r\n\r\n") +} diff --git a/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go new file mode 100644 index 0000000..def4cab --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go @@ -0,0 +1,376 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package clearsign generates and processes OpenPGP, clear-signed data. See +// RFC 4880, section 7. +// +// Clearsigned messages are cryptographically signed, but the contents of the +// message are kept in plaintext so that it can be read without special tools. +package clearsign // import "golang.org/x/crypto/openpgp/clearsign" + +import ( + "bufio" + "bytes" + "crypto" + "hash" + "io" + "net/textproto" + "strconv" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" +) + +// A Block represents a clearsigned message. A signature on a Block can +// be checked by passing Bytes into openpgp.CheckDetachedSignature. +type Block struct { + Headers textproto.MIMEHeader // Optional message headers + Plaintext []byte // The original message text + Bytes []byte // The signed message + ArmoredSignature *armor.Block // The signature block +} + +// start is the marker which denotes the beginning of a clearsigned message. +var start = []byte("\n-----BEGIN PGP SIGNED MESSAGE-----") + +// dashEscape is prefixed to any lines that begin with a hyphen so that they +// can't be confused with endText. +var dashEscape = []byte("- ") + +// endText is a marker which denotes the end of the message and the start of +// an armored signature. +var endText = []byte("-----BEGIN PGP SIGNATURE-----") + +// end is a marker which denotes the end of the armored signature. +var end = []byte("\n-----END PGP SIGNATURE-----") + +var crlf = []byte("\r\n") +var lf = byte('\n') + +// getLine returns the first \r\n or \n delineated line from the given byte +// array. The line does not include the \r\n or \n. The remainder of the byte +// array (also not including the new line bytes) is also returned and this will +// always be smaller than the original argument. +func getLine(data []byte) (line, rest []byte) { + i := bytes.Index(data, []byte{'\n'}) + var j int + if i < 0 { + i = len(data) + j = i + } else { + j = i + 1 + if i > 0 && data[i-1] == '\r' { + i-- + } + } + return data[0:i], data[j:] +} + +// Decode finds the first clearsigned message in data and returns it, as well +// as the suffix of data which remains after the message. +func Decode(data []byte) (b *Block, rest []byte) { + // start begins with a newline. However, at the very beginning of + // the byte array, we'll accept the start string without it. + rest = data + if bytes.HasPrefix(data, start[1:]) { + rest = rest[len(start)-1:] + } else if i := bytes.Index(data, start); i >= 0 { + rest = rest[i+len(start):] + } else { + return nil, data + } + + // Consume the start line. + _, rest = getLine(rest) + + var line []byte + b = &Block{ + Headers: make(textproto.MIMEHeader), + } + + // Next come a series of header lines. + for { + // This loop terminates because getLine's second result is + // always smaller than its argument. + if len(rest) == 0 { + return nil, data + } + // An empty line marks the end of the headers. + if line, rest = getLine(rest); len(line) == 0 { + break + } + + i := bytes.Index(line, []byte{':'}) + if i == -1 { + return nil, data + } + + key, val := line[0:i], line[i+1:] + key = bytes.TrimSpace(key) + val = bytes.TrimSpace(val) + b.Headers.Add(string(key), string(val)) + } + + firstLine := true + for { + start := rest + + line, rest = getLine(rest) + if len(line) == 0 && len(rest) == 0 { + // No armored data was found, so this isn't a complete message. + return nil, data + } + if bytes.Equal(line, endText) { + // Back up to the start of the line because armor expects to see the + // header line. + rest = start + break + } + + // The final CRLF isn't included in the hash so we don't write it until + // we've seen the next line. + if firstLine { + firstLine = false + } else { + b.Bytes = append(b.Bytes, crlf...) + } + + if bytes.HasPrefix(line, dashEscape) { + line = line[2:] + } + line = bytes.TrimRight(line, " \t") + b.Bytes = append(b.Bytes, line...) + + b.Plaintext = append(b.Plaintext, line...) + b.Plaintext = append(b.Plaintext, lf) + } + + // We want to find the extent of the armored data (including any newlines at + // the end). + i := bytes.Index(rest, end) + if i == -1 { + return nil, data + } + i += len(end) + for i < len(rest) && (rest[i] == '\r' || rest[i] == '\n') { + i++ + } + armored := rest[:i] + rest = rest[i:] + + var err error + b.ArmoredSignature, err = armor.Decode(bytes.NewBuffer(armored)) + if err != nil { + return nil, data + } + + return b, rest +} + +// A dashEscaper is an io.WriteCloser which processes the body of a clear-signed +// message. The clear-signed message is written to buffered and a hash, suitable +// for signing, is maintained in h. +// +// When closed, an armored signature is created and written to complete the +// message. +type dashEscaper struct { + buffered *bufio.Writer + h hash.Hash + hashType crypto.Hash + + atBeginningOfLine bool + isFirstLine bool + + whitespace []byte + byteBuf []byte // a one byte buffer to save allocations + + privateKey *packet.PrivateKey + config *packet.Config +} + +func (d *dashEscaper) Write(data []byte) (n int, err error) { + for _, b := range data { + d.byteBuf[0] = b + + if d.atBeginningOfLine { + // The final CRLF isn't included in the hash so we have to wait + // until this point (the start of the next line) before writing it. + if !d.isFirstLine { + d.h.Write(crlf) + } + d.isFirstLine = false + } + + // Any whitespace at the end of the line has to be removed so we + // buffer it until we find out whether there's more on this line. + if b == ' ' || b == '\t' || b == '\r' { + d.whitespace = append(d.whitespace, b) + d.atBeginningOfLine = false + continue + } + + if d.atBeginningOfLine { + // At the beginning of a line, hyphens have to be escaped. + if b == '-' { + // The signature isn't calculated over the dash-escaped text so + // the escape is only written to buffered. + if _, err = d.buffered.Write(dashEscape); err != nil { + return + } + d.h.Write(d.byteBuf) + d.atBeginningOfLine = false + } else if b == '\n' { + // Nothing to do because we delay writing CRLF to the hash. + } else { + d.h.Write(d.byteBuf) + d.atBeginningOfLine = false + } + if err = d.buffered.WriteByte(b); err != nil { + return + } + } else { + if b == '\n' { + // We got a raw \n. Drop any trailing whitespace and write a + // CRLF. + d.whitespace = d.whitespace[:0] + // We delay writing CRLF to the hash until the start of the + // next line. + if err = d.buffered.WriteByte(b); err != nil { + return + } + d.atBeginningOfLine = true + } else { + // Any buffered whitespace wasn't at the end of the line so + // we need to write it out. + if len(d.whitespace) > 0 { + d.h.Write(d.whitespace) + if _, err = d.buffered.Write(d.whitespace); err != nil { + return + } + d.whitespace = d.whitespace[:0] + } + d.h.Write(d.byteBuf) + if err = d.buffered.WriteByte(b); err != nil { + return + } + } + } + } + + n = len(data) + return +} + +func (d *dashEscaper) Close() (err error) { + if !d.atBeginningOfLine { + if err = d.buffered.WriteByte(lf); err != nil { + return + } + } + sig := new(packet.Signature) + sig.SigType = packet.SigTypeText + sig.PubKeyAlgo = d.privateKey.PubKeyAlgo + sig.Hash = d.hashType + sig.CreationTime = d.config.Now() + sig.IssuerKeyId = &d.privateKey.KeyId + + if err = sig.Sign(d.h, d.privateKey, d.config); err != nil { + return + } + + out, err := armor.Encode(d.buffered, "PGP SIGNATURE", nil) + if err != nil { + return + } + + if err = sig.Serialize(out); err != nil { + return + } + if err = out.Close(); err != nil { + return + } + if err = d.buffered.Flush(); err != nil { + return + } + return +} + +// Encode returns a WriteCloser which will clear-sign a message with privateKey +// and write it to w. If config is nil, sensible defaults are used. +func Encode(w io.Writer, privateKey *packet.PrivateKey, config *packet.Config) (plaintext io.WriteCloser, err error) { + if privateKey.Encrypted { + return nil, errors.InvalidArgumentError("signing key is encrypted") + } + + hashType := config.Hash() + name := nameOfHash(hashType) + if len(name) == 0 { + return nil, errors.UnsupportedError("unknown hash type: " + strconv.Itoa(int(hashType))) + } + + if !hashType.Available() { + return nil, errors.UnsupportedError("unsupported hash type: " + strconv.Itoa(int(hashType))) + } + h := hashType.New() + + buffered := bufio.NewWriter(w) + // start has a \n at the beginning that we don't want here. + if _, err = buffered.Write(start[1:]); err != nil { + return + } + if err = buffered.WriteByte(lf); err != nil { + return + } + if _, err = buffered.WriteString("Hash: "); err != nil { + return + } + if _, err = buffered.WriteString(name); err != nil { + return + } + if err = buffered.WriteByte(lf); err != nil { + return + } + if err = buffered.WriteByte(lf); err != nil { + return + } + + plaintext = &dashEscaper{ + buffered: buffered, + h: h, + hashType: hashType, + + atBeginningOfLine: true, + isFirstLine: true, + + byteBuf: make([]byte, 1), + + privateKey: privateKey, + config: config, + } + + return +} + +// nameOfHash returns the OpenPGP name for the given hash, or the empty string +// if the name isn't known. See RFC 4880, section 9.4. +func nameOfHash(h crypto.Hash) string { + switch h { + case crypto.MD5: + return "MD5" + case crypto.SHA1: + return "SHA1" + case crypto.RIPEMD160: + return "RIPEMD160" + case crypto.SHA224: + return "SHA224" + case crypto.SHA256: + return "SHA256" + case crypto.SHA384: + return "SHA384" + case crypto.SHA512: + return "SHA512" + } + return "" +} diff --git a/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign_test.go b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign_test.go new file mode 100644 index 0000000..2c09480 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign_test.go @@ -0,0 +1,210 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package clearsign + +import ( + "bytes" + "golang.org/x/crypto/openpgp" + "testing" +) + +func testParse(t *testing.T, input []byte, expected, expectedPlaintext string) { + b, rest := Decode(input) + if b == nil { + t.Fatal("failed to decode clearsign message") + } + if !bytes.Equal(rest, []byte("trailing")) { + t.Errorf("unexpected remaining bytes returned: %s", string(rest)) + } + if b.ArmoredSignature.Type != "PGP SIGNATURE" { + t.Errorf("bad armor type, got:%s, want:PGP SIGNATURE", b.ArmoredSignature.Type) + } + if !bytes.Equal(b.Bytes, []byte(expected)) { + t.Errorf("bad body, got:%x want:%x", b.Bytes, expected) + } + + if !bytes.Equal(b.Plaintext, []byte(expectedPlaintext)) { + t.Errorf("bad plaintext, got:%x want:%x", b.Plaintext, expectedPlaintext) + } + + keyring, err := openpgp.ReadArmoredKeyRing(bytes.NewBufferString(signingKey)) + if err != nil { + t.Errorf("failed to parse public key: %s", err) + } + + if _, err := openpgp.CheckDetachedSignature(keyring, bytes.NewBuffer(b.Bytes), b.ArmoredSignature.Body); err != nil { + t.Errorf("failed to check signature: %s", err) + } +} + +func TestParse(t *testing.T) { + testParse(t, clearsignInput, "Hello world\r\nline 2", "Hello world\nline 2\n") + testParse(t, clearsignInput2, "\r\n\r\n(This message has a couple of blank lines at the start and end.)\r\n\r\n", "\n\n(This message has a couple of blank lines at the start and end.)\n\n\n") +} + +func TestParseInvalid(t *testing.T) { + if b, _ := Decode(clearsignInput3); b != nil { + t.Fatal("decoded a bad clearsigned message without any error") + } +} + +func TestParseWithNoNewlineAtEnd(t *testing.T) { + input := clearsignInput + input = input[:len(input)-len("trailing")-1] + b, rest := Decode(input) + if b == nil { + t.Fatal("failed to decode clearsign message") + } + if len(rest) > 0 { + t.Errorf("unexpected remaining bytes returned: %s", string(rest)) + } +} + +var signingTests = []struct { + in, signed, plaintext string +}{ + {"", "", ""}, + {"a", "a", "a\n"}, + {"a\n", "a", "a\n"}, + {"-a\n", "-a", "-a\n"}, + {"--a\nb", "--a\r\nb", "--a\nb\n"}, + // leading whitespace + {" a\n", " a", " a\n"}, + {" a\n", " a", " a\n"}, + // trailing whitespace (should be stripped) + {"a \n", "a", "a\n"}, + {"a ", "a", "a\n"}, + // whitespace-only lines (should be stripped) + {" \n", "", "\n"}, + {" ", "", "\n"}, + {"a\n \n \nb\n", "a\r\n\r\n\r\nb", "a\n\n\nb\n"}, +} + +func TestSigning(t *testing.T) { + keyring, err := openpgp.ReadArmoredKeyRing(bytes.NewBufferString(signingKey)) + if err != nil { + t.Errorf("failed to parse public key: %s", err) + } + + for i, test := range signingTests { + var buf bytes.Buffer + + plaintext, err := Encode(&buf, keyring[0].PrivateKey, nil) + if err != nil { + t.Errorf("#%d: error from Encode: %s", i, err) + continue + } + if _, err := plaintext.Write([]byte(test.in)); err != nil { + t.Errorf("#%d: error from Write: %s", i, err) + continue + } + if err := plaintext.Close(); err != nil { + t.Fatalf("#%d: error from Close: %s", i, err) + continue + } + + b, _ := Decode(buf.Bytes()) + if b == nil { + t.Errorf("#%d: failed to decode clearsign message", i) + continue + } + if !bytes.Equal(b.Bytes, []byte(test.signed)) { + t.Errorf("#%d: bad result, got:%x, want:%x", i, b.Bytes, test.signed) + continue + } + if !bytes.Equal(b.Plaintext, []byte(test.plaintext)) { + t.Errorf("#%d: bad result, got:%x, want:%x", i, b.Plaintext, test.plaintext) + continue + } + + if _, err := openpgp.CheckDetachedSignature(keyring, bytes.NewBuffer(b.Bytes), b.ArmoredSignature.Body); err != nil { + t.Errorf("#%d: failed to check signature: %s", i, err) + } + } +} + +var clearsignInput = []byte(` +;lasjlkfdsa + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Hello world +line 2 +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.10 (GNU/Linux) + +iJwEAQECAAYFAk8kMuEACgkQO9o98PRieSpMsAQAhmY/vwmNpflrPgmfWsYhk5O8 +pjnBUzZwqTDoDeINjZEoPDSpQAHGhjFjgaDx/Gj4fAl0dM4D0wuUEBb6QOrwflog +2A2k9kfSOMOtk0IH/H5VuFN1Mie9L/erYXjTQIptv9t9J7NoRBMU0QOOaFU0JaO9 +MyTpno24AjIAGb+mH1U= +=hIJ6 +-----END PGP SIGNATURE----- +trailing`) + +var clearsignInput2 = []byte(` +asdlfkjasdlkfjsadf + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + + + +(This message has a couple of blank lines at the start and end.) + + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.11 (GNU/Linux) + +iJwEAQEIAAYFAlPpSREACgkQO9o98PRieSpZTAP+M8QUoCt/7Rf3YbXPcdzIL32v +pt1I+cMNeopzfLy0u4ioEFi8s5VkwpL1AFmirvgViCwlf82inoRxzZRiW05JQ5LI +ESEzeCoy2LIdRCQ2hcrG8pIUPzUO4TqO5D/dMbdHwNH4h5nNmGJUAEG6FpURlPm+ +qZg6BaTvOxepqOxnhVU= +=e+C6 +-----END PGP SIGNATURE----- + +trailing`) + +var clearsignInput3 = []byte(` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +(This message was truncated.) +`) + +var signingKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: GnuPG v1.4.10 (GNU/Linux) + +lQHYBE2rFNoBBADFwqWQIW/DSqcB4yCQqnAFTJ27qS5AnB46ccAdw3u4Greeu3Bp +idpoHdjULy7zSKlwR1EA873dO/k/e11Ml3dlAFUinWeejWaK2ugFP6JjiieSsrKn +vWNicdCS4HTWn0X4sjl0ZiAygw6GNhqEQ3cpLeL0g8E9hnYzJKQ0LWJa0QARAQAB +AAP/TB81EIo2VYNmTq0pK1ZXwUpxCrvAAIG3hwKjEzHcbQznsjNvPUihZ+NZQ6+X +0HCfPAdPkGDCLCb6NavcSW+iNnLTrdDnSI6+3BbIONqWWdRDYJhqZCkqmG6zqSfL +IdkJgCw94taUg5BWP/AAeQrhzjChvpMQTVKQL5mnuZbUCeMCAN5qrYMP2S9iKdnk +VANIFj7656ARKt/nf4CBzxcpHTyB8+d2CtPDKCmlJP6vL8t58Jmih+kHJMvC0dzn +gr5f5+sCAOOe5gt9e0am7AvQWhdbHVfJU0TQJx+m2OiCJAqGTB1nvtBLHdJnfdC9 +TnXXQ6ZXibqLyBies/xeY2sCKL5qtTMCAKnX9+9d/5yQxRyrQUHt1NYhaXZnJbHx +q4ytu0eWz+5i68IYUSK69jJ1NWPM0T6SkqpB3KCAIv68VFm9PxqG1KmhSrQIVGVz +dCBLZXmIuAQTAQIAIgUCTasU2gIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AA +CgkQO9o98PRieSoLhgQAkLEZex02Qt7vGhZzMwuN0R22w3VwyYyjBx+fM3JFETy1 +ut4xcLJoJfIaF5ZS38UplgakHG0FQ+b49i8dMij0aZmDqGxrew1m4kBfjXw9B/v+ +eIqpODryb6cOSwyQFH0lQkXC040pjq9YqDsO5w0WYNXYKDnzRV0p4H1pweo2VDid +AdgETasU2gEEAN46UPeWRqKHvA99arOxee38fBt2CI08iiWyI8T3J6ivtFGixSqV +bRcPxYO/qLpVe5l84Nb3X71GfVXlc9hyv7CD6tcowL59hg1E/DC5ydI8K8iEpUmK +/UnHdIY5h8/kqgGxkY/T/hgp5fRQgW1ZoZxLajVlMRZ8W4tFtT0DeA+JABEBAAEA +A/0bE1jaaZKj6ndqcw86jd+QtD1SF+Cf21CWRNeLKnUds4FRRvclzTyUMuWPkUeX +TaNNsUOFqBsf6QQ2oHUBBK4VCHffHCW4ZEX2cd6umz7mpHW6XzN4DECEzOVksXtc +lUC1j4UB91DC/RNQqwX1IV2QLSwssVotPMPqhOi0ZLNY7wIA3n7DWKInxYZZ4K+6 +rQ+POsz6brEoRHwr8x6XlHenq1Oki855pSa1yXIARoTrSJkBtn5oI+f8AzrnN0BN +oyeQAwIA/7E++3HDi5aweWrViiul9cd3rcsS0dEnksPhvS0ozCJiHsq/6GFmy7J8 +QSHZPteedBnZyNp5jR+H7cIfVN3KgwH/Skq4PsuPhDq5TKK6i8Pc1WW8MA6DXTdU +nLkX7RGmMwjC0DBf7KWAlPjFaONAX3a8ndnz//fy1q7u2l9AZwrj1qa1iJ8EGAEC +AAkFAk2rFNoCGwwACgkQO9o98PRieSo2/QP/WTzr4ioINVsvN1akKuekmEMI3LAp +BfHwatufxxP1U+3Si/6YIk7kuPB9Hs+pRqCXzbvPRrI8NHZBmc8qIGthishdCYad +AHcVnXjtxrULkQFGbGvhKURLvS9WnzD/m1K2zzwxzkPTzT9/Yf06O6Mal5AdugPL +VrM0m72/jnpKo04= +=zNCn +-----END PGP PRIVATE KEY BLOCK----- +` diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go new file mode 100644 index 0000000..73f4fe3 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go @@ -0,0 +1,122 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package elgamal implements ElGamal encryption, suitable for OpenPGP, +// as specified in "A Public-Key Cryptosystem and a Signature Scheme Based on +// Discrete Logarithms," IEEE Transactions on Information Theory, v. IT-31, +// n. 4, 1985, pp. 469-472. +// +// This form of ElGamal embeds PKCS#1 v1.5 padding, which may make it +// unsuitable for other protocols. RSA should be used in preference in any +// case. +package elgamal // import "golang.org/x/crypto/openpgp/elgamal" + +import ( + "crypto/rand" + "crypto/subtle" + "errors" + "io" + "math/big" +) + +// PublicKey represents an ElGamal public key. +type PublicKey struct { + G, P, Y *big.Int +} + +// PrivateKey represents an ElGamal private key. +type PrivateKey struct { + PublicKey + X *big.Int +} + +// Encrypt encrypts the given message to the given public key. The result is a +// pair of integers. Errors can result from reading random, or because msg is +// too large to be encrypted to the public key. +func Encrypt(random io.Reader, pub *PublicKey, msg []byte) (c1, c2 *big.Int, err error) { + pLen := (pub.P.BitLen() + 7) / 8 + if len(msg) > pLen-11 { + err = errors.New("elgamal: message too long") + return + } + + // EM = 0x02 || PS || 0x00 || M + em := make([]byte, pLen-1) + em[0] = 2 + ps, mm := em[1:len(em)-len(msg)-1], em[len(em)-len(msg):] + err = nonZeroRandomBytes(ps, random) + if err != nil { + return + } + em[len(em)-len(msg)-1] = 0 + copy(mm, msg) + + m := new(big.Int).SetBytes(em) + + k, err := rand.Int(random, pub.P) + if err != nil { + return + } + + c1 = new(big.Int).Exp(pub.G, k, pub.P) + s := new(big.Int).Exp(pub.Y, k, pub.P) + c2 = s.Mul(s, m) + c2.Mod(c2, pub.P) + + return +} + +// Decrypt takes two integers, resulting from an ElGamal encryption, and +// returns the plaintext of the message. An error can result only if the +// ciphertext is invalid. Users should keep in mind that this is a padding +// oracle and thus, if exposed to an adaptive chosen ciphertext attack, can +// be used to break the cryptosystem. See ``Chosen Ciphertext Attacks +// Against Protocols Based on the RSA Encryption Standard PKCS #1'', Daniel +// Bleichenbacher, Advances in Cryptology (Crypto '98), +func Decrypt(priv *PrivateKey, c1, c2 *big.Int) (msg []byte, err error) { + s := new(big.Int).Exp(c1, priv.X, priv.P) + s.ModInverse(s, priv.P) + s.Mul(s, c2) + s.Mod(s, priv.P) + em := s.Bytes() + + firstByteIsTwo := subtle.ConstantTimeByteEq(em[0], 2) + + // The remainder of the plaintext must be a string of non-zero random + // octets, followed by a 0, followed by the message. + // lookingForIndex: 1 iff we are still looking for the zero. + // index: the offset of the first zero byte. + var lookingForIndex, index int + lookingForIndex = 1 + + for i := 1; i < len(em); i++ { + equals0 := subtle.ConstantTimeByteEq(em[i], 0) + index = subtle.ConstantTimeSelect(lookingForIndex&equals0, i, index) + lookingForIndex = subtle.ConstantTimeSelect(equals0, 0, lookingForIndex) + } + + if firstByteIsTwo != 1 || lookingForIndex != 0 || index < 9 { + return nil, errors.New("elgamal: decryption error") + } + return em[index+1:], nil +} + +// nonZeroRandomBytes fills the given slice with non-zero random octets. +func nonZeroRandomBytes(s []byte, rand io.Reader) (err error) { + _, err = io.ReadFull(rand, s) + if err != nil { + return + } + + for i := 0; i < len(s); i++ { + for s[i] == 0 { + _, err = io.ReadFull(rand, s[i:i+1]) + if err != nil { + return + } + } + } + + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal_test.go b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal_test.go new file mode 100644 index 0000000..c4f99f5 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal_test.go @@ -0,0 +1,49 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package elgamal + +import ( + "bytes" + "crypto/rand" + "math/big" + "testing" +) + +// This is the 1024-bit MODP group from RFC 5114, section 2.1: +const primeHex = "B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371" + +const generatorHex = "A4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507FD6406CFF14266D31266FEA1E5C41564B777E690F5504F213160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28AD662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24855E6EEB22B3B2E5" + +func fromHex(hex string) *big.Int { + n, ok := new(big.Int).SetString(hex, 16) + if !ok { + panic("failed to parse hex number") + } + return n +} + +func TestEncryptDecrypt(t *testing.T) { + priv := &PrivateKey{ + PublicKey: PublicKey{ + G: fromHex(generatorHex), + P: fromHex(primeHex), + }, + X: fromHex("42"), + } + priv.Y = new(big.Int).Exp(priv.G, priv.X, priv.P) + + message := []byte("hello world") + c1, c2, err := Encrypt(rand.Reader, &priv.PublicKey, message) + if err != nil { + t.Errorf("error encrypting: %s", err) + } + message2, err := Decrypt(priv, c1, c2) + if err != nil { + t.Errorf("error decrypting: %s", err) + } + if !bytes.Equal(message2, message) { + t.Errorf("decryption failed, got: %x, want: %x", message2, message) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/errors/errors.go b/vendor/golang.org/x/crypto/openpgp/errors/errors.go new file mode 100644 index 0000000..eb0550b --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/errors/errors.go @@ -0,0 +1,72 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package errors contains common error types for the OpenPGP packages. +package errors // import "golang.org/x/crypto/openpgp/errors" + +import ( + "strconv" +) + +// A StructuralError is returned when OpenPGP data is found to be syntactically +// invalid. +type StructuralError string + +func (s StructuralError) Error() string { + return "openpgp: invalid data: " + string(s) +} + +// UnsupportedError indicates that, although the OpenPGP data is valid, it +// makes use of currently unimplemented features. +type UnsupportedError string + +func (s UnsupportedError) Error() string { + return "openpgp: unsupported feature: " + string(s) +} + +// InvalidArgumentError indicates that the caller is in error and passed an +// incorrect value. +type InvalidArgumentError string + +func (i InvalidArgumentError) Error() string { + return "openpgp: invalid argument: " + string(i) +} + +// SignatureError indicates that a syntactically valid signature failed to +// validate. +type SignatureError string + +func (b SignatureError) Error() string { + return "openpgp: invalid signature: " + string(b) +} + +type keyIncorrectError int + +func (ki keyIncorrectError) Error() string { + return "openpgp: incorrect key" +} + +var ErrKeyIncorrect error = keyIncorrectError(0) + +type unknownIssuerError int + +func (unknownIssuerError) Error() string { + return "openpgp: signature made by unknown entity" +} + +var ErrUnknownIssuer error = unknownIssuerError(0) + +type keyRevokedError int + +func (keyRevokedError) Error() string { + return "openpgp: signature made by revoked key" +} + +var ErrKeyRevoked error = keyRevokedError(0) + +type UnknownPacketTypeError uint8 + +func (upte UnknownPacketTypeError) Error() string { + return "openpgp: unknown packet type: " + strconv.Itoa(int(upte)) +} diff --git a/vendor/golang.org/x/crypto/openpgp/keys.go b/vendor/golang.org/x/crypto/openpgp/keys.go new file mode 100644 index 0000000..fd9bbd2 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/keys.go @@ -0,0 +1,639 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "crypto/rsa" + "io" + "time" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" +) + +// PublicKeyType is the armor type for a PGP public key. +var PublicKeyType = "PGP PUBLIC KEY BLOCK" + +// PrivateKeyType is the armor type for a PGP private key. +var PrivateKeyType = "PGP PRIVATE KEY BLOCK" + +// An Entity represents the components of an OpenPGP key: a primary public key +// (which must be a signing key), one or more identities claimed by that key, +// and zero or more subkeys, which may be encryption keys. +type Entity struct { + PrimaryKey *packet.PublicKey + PrivateKey *packet.PrivateKey + Identities map[string]*Identity // indexed by Identity.Name + Revocations []*packet.Signature + Subkeys []Subkey +} + +// An Identity represents an identity claimed by an Entity and zero or more +// assertions by other entities about that claim. +type Identity struct { + Name string // by convention, has the form "Full Name (comment) " + UserId *packet.UserId + SelfSignature *packet.Signature + Signatures []*packet.Signature +} + +// A Subkey is an additional public key in an Entity. Subkeys can be used for +// encryption. +type Subkey struct { + PublicKey *packet.PublicKey + PrivateKey *packet.PrivateKey + Sig *packet.Signature +} + +// A Key identifies a specific public key in an Entity. This is either the +// Entity's primary key or a subkey. +type Key struct { + Entity *Entity + PublicKey *packet.PublicKey + PrivateKey *packet.PrivateKey + SelfSignature *packet.Signature +} + +// A KeyRing provides access to public and private keys. +type KeyRing interface { + // KeysById returns the set of keys that have the given key id. + KeysById(id uint64) []Key + // KeysByIdAndUsage returns the set of keys with the given id + // that also meet the key usage given by requiredUsage. + // The requiredUsage is expressed as the bitwise-OR of + // packet.KeyFlag* values. + KeysByIdUsage(id uint64, requiredUsage byte) []Key + // DecryptionKeys returns all private keys that are valid for + // decryption. + DecryptionKeys() []Key +} + +// primaryIdentity returns the Identity marked as primary or the first identity +// if none are so marked. +func (e *Entity) primaryIdentity() *Identity { + var firstIdentity *Identity + for _, ident := range e.Identities { + if firstIdentity == nil { + firstIdentity = ident + } + if ident.SelfSignature.IsPrimaryId != nil && *ident.SelfSignature.IsPrimaryId { + return ident + } + } + return firstIdentity +} + +// encryptionKey returns the best candidate Key for encrypting a message to the +// given Entity. +func (e *Entity) encryptionKey(now time.Time) (Key, bool) { + candidateSubkey := -1 + + // Iterate the keys to find the newest key + var maxTime time.Time + for i, subkey := range e.Subkeys { + if subkey.Sig.FlagsValid && + subkey.Sig.FlagEncryptCommunications && + subkey.PublicKey.PubKeyAlgo.CanEncrypt() && + !subkey.Sig.KeyExpired(now) && + (maxTime.IsZero() || subkey.Sig.CreationTime.After(maxTime)) { + candidateSubkey = i + maxTime = subkey.Sig.CreationTime + } + } + + if candidateSubkey != -1 { + subkey := e.Subkeys[candidateSubkey] + return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig}, true + } + + // If we don't have any candidate subkeys for encryption and + // the primary key doesn't have any usage metadata then we + // assume that the primary key is ok. Or, if the primary key is + // marked as ok to encrypt to, then we can obviously use it. + i := e.primaryIdentity() + if !i.SelfSignature.FlagsValid || i.SelfSignature.FlagEncryptCommunications && + e.PrimaryKey.PubKeyAlgo.CanEncrypt() && + !i.SelfSignature.KeyExpired(now) { + return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature}, true + } + + // This Entity appears to be signing only. + return Key{}, false +} + +// signingKey return the best candidate Key for signing a message with this +// Entity. +func (e *Entity) signingKey(now time.Time) (Key, bool) { + candidateSubkey := -1 + + for i, subkey := range e.Subkeys { + if subkey.Sig.FlagsValid && + subkey.Sig.FlagSign && + subkey.PublicKey.PubKeyAlgo.CanSign() && + !subkey.Sig.KeyExpired(now) { + candidateSubkey = i + break + } + } + + if candidateSubkey != -1 { + subkey := e.Subkeys[candidateSubkey] + return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig}, true + } + + // If we have no candidate subkey then we assume that it's ok to sign + // with the primary key. + i := e.primaryIdentity() + if !i.SelfSignature.FlagsValid || i.SelfSignature.FlagSign && + !i.SelfSignature.KeyExpired(now) { + return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature}, true + } + + return Key{}, false +} + +// An EntityList contains one or more Entities. +type EntityList []*Entity + +// KeysById returns the set of keys that have the given key id. +func (el EntityList) KeysById(id uint64) (keys []Key) { + for _, e := range el { + if e.PrimaryKey.KeyId == id { + var selfSig *packet.Signature + for _, ident := range e.Identities { + if selfSig == nil { + selfSig = ident.SelfSignature + } else if ident.SelfSignature.IsPrimaryId != nil && *ident.SelfSignature.IsPrimaryId { + selfSig = ident.SelfSignature + break + } + } + keys = append(keys, Key{e, e.PrimaryKey, e.PrivateKey, selfSig}) + } + + for _, subKey := range e.Subkeys { + if subKey.PublicKey.KeyId == id { + keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig}) + } + } + } + return +} + +// KeysByIdAndUsage returns the set of keys with the given id that also meet +// the key usage given by requiredUsage. The requiredUsage is expressed as +// the bitwise-OR of packet.KeyFlag* values. +func (el EntityList) KeysByIdUsage(id uint64, requiredUsage byte) (keys []Key) { + for _, key := range el.KeysById(id) { + if len(key.Entity.Revocations) > 0 { + continue + } + + if key.SelfSignature.RevocationReason != nil { + continue + } + + if key.SelfSignature.FlagsValid && requiredUsage != 0 { + var usage byte + if key.SelfSignature.FlagCertify { + usage |= packet.KeyFlagCertify + } + if key.SelfSignature.FlagSign { + usage |= packet.KeyFlagSign + } + if key.SelfSignature.FlagEncryptCommunications { + usage |= packet.KeyFlagEncryptCommunications + } + if key.SelfSignature.FlagEncryptStorage { + usage |= packet.KeyFlagEncryptStorage + } + if usage&requiredUsage != requiredUsage { + continue + } + } + + keys = append(keys, key) + } + return +} + +// DecryptionKeys returns all private keys that are valid for decryption. +func (el EntityList) DecryptionKeys() (keys []Key) { + for _, e := range el { + for _, subKey := range e.Subkeys { + if subKey.PrivateKey != nil && (!subKey.Sig.FlagsValid || subKey.Sig.FlagEncryptStorage || subKey.Sig.FlagEncryptCommunications) { + keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig}) + } + } + } + return +} + +// ReadArmoredKeyRing reads one or more public/private keys from an armor keyring file. +func ReadArmoredKeyRing(r io.Reader) (EntityList, error) { + block, err := armor.Decode(r) + if err == io.EOF { + return nil, errors.InvalidArgumentError("no armored data found") + } + if err != nil { + return nil, err + } + if block.Type != PublicKeyType && block.Type != PrivateKeyType { + return nil, errors.InvalidArgumentError("expected public or private key block, got: " + block.Type) + } + + return ReadKeyRing(block.Body) +} + +// ReadKeyRing reads one or more public/private keys. Unsupported keys are +// ignored as long as at least a single valid key is found. +func ReadKeyRing(r io.Reader) (el EntityList, err error) { + packets := packet.NewReader(r) + var lastUnsupportedError error + + for { + var e *Entity + e, err = ReadEntity(packets) + if err != nil { + // TODO: warn about skipped unsupported/unreadable keys + if _, ok := err.(errors.UnsupportedError); ok { + lastUnsupportedError = err + err = readToNextPublicKey(packets) + } else if _, ok := err.(errors.StructuralError); ok { + // Skip unreadable, badly-formatted keys + lastUnsupportedError = err + err = readToNextPublicKey(packets) + } + if err == io.EOF { + err = nil + break + } + if err != nil { + el = nil + break + } + } else { + el = append(el, e) + } + } + + if len(el) == 0 && err == nil { + err = lastUnsupportedError + } + return +} + +// readToNextPublicKey reads packets until the start of the entity and leaves +// the first packet of the new entity in the Reader. +func readToNextPublicKey(packets *packet.Reader) (err error) { + var p packet.Packet + for { + p, err = packets.Next() + if err == io.EOF { + return + } else if err != nil { + if _, ok := err.(errors.UnsupportedError); ok { + err = nil + continue + } + return + } + + if pk, ok := p.(*packet.PublicKey); ok && !pk.IsSubkey { + packets.Unread(p) + return + } + } + + panic("unreachable") +} + +// ReadEntity reads an entity (public key, identities, subkeys etc) from the +// given Reader. +func ReadEntity(packets *packet.Reader) (*Entity, error) { + e := new(Entity) + e.Identities = make(map[string]*Identity) + + p, err := packets.Next() + if err != nil { + return nil, err + } + + var ok bool + if e.PrimaryKey, ok = p.(*packet.PublicKey); !ok { + if e.PrivateKey, ok = p.(*packet.PrivateKey); !ok { + packets.Unread(p) + return nil, errors.StructuralError("first packet was not a public/private key") + } else { + e.PrimaryKey = &e.PrivateKey.PublicKey + } + } + + if !e.PrimaryKey.PubKeyAlgo.CanSign() { + return nil, errors.StructuralError("primary key cannot be used for signatures") + } + + var current *Identity + var revocations []*packet.Signature +EachPacket: + for { + p, err := packets.Next() + if err == io.EOF { + break + } else if err != nil { + return nil, err + } + + switch pkt := p.(type) { + case *packet.UserId: + current = new(Identity) + current.Name = pkt.Id + current.UserId = pkt + e.Identities[pkt.Id] = current + + for { + p, err = packets.Next() + if err == io.EOF { + return nil, io.ErrUnexpectedEOF + } else if err != nil { + return nil, err + } + + sig, ok := p.(*packet.Signature) + if !ok { + return nil, errors.StructuralError("user ID packet not followed by self-signature") + } + + if (sig.SigType == packet.SigTypePositiveCert || sig.SigType == packet.SigTypeGenericCert) && sig.IssuerKeyId != nil && *sig.IssuerKeyId == e.PrimaryKey.KeyId { + if err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil { + return nil, errors.StructuralError("user ID self-signature invalid: " + err.Error()) + } + current.SelfSignature = sig + break + } + current.Signatures = append(current.Signatures, sig) + } + case *packet.Signature: + if pkt.SigType == packet.SigTypeKeyRevocation { + revocations = append(revocations, pkt) + } else if pkt.SigType == packet.SigTypeDirectSignature { + // TODO: RFC4880 5.2.1 permits signatures + // directly on keys (eg. to bind additional + // revocation keys). + } else if current == nil { + return nil, errors.StructuralError("signature packet found before user id packet") + } else { + current.Signatures = append(current.Signatures, pkt) + } + case *packet.PrivateKey: + if pkt.IsSubkey == false { + packets.Unread(p) + break EachPacket + } + err = addSubkey(e, packets, &pkt.PublicKey, pkt) + if err != nil { + return nil, err + } + case *packet.PublicKey: + if pkt.IsSubkey == false { + packets.Unread(p) + break EachPacket + } + err = addSubkey(e, packets, pkt, nil) + if err != nil { + return nil, err + } + default: + // we ignore unknown packets + } + } + + if len(e.Identities) == 0 { + return nil, errors.StructuralError("entity without any identities") + } + + for _, revocation := range revocations { + err = e.PrimaryKey.VerifyRevocationSignature(revocation) + if err == nil { + e.Revocations = append(e.Revocations, revocation) + } else { + // TODO: RFC 4880 5.2.3.15 defines revocation keys. + return nil, errors.StructuralError("revocation signature signed by alternate key") + } + } + + return e, nil +} + +func addSubkey(e *Entity, packets *packet.Reader, pub *packet.PublicKey, priv *packet.PrivateKey) error { + var subKey Subkey + subKey.PublicKey = pub + subKey.PrivateKey = priv + p, err := packets.Next() + if err == io.EOF { + return io.ErrUnexpectedEOF + } + if err != nil { + return errors.StructuralError("subkey signature invalid: " + err.Error()) + } + var ok bool + subKey.Sig, ok = p.(*packet.Signature) + if !ok { + return errors.StructuralError("subkey packet not followed by signature") + } + if subKey.Sig.SigType != packet.SigTypeSubkeyBinding && subKey.Sig.SigType != packet.SigTypeSubkeyRevocation { + return errors.StructuralError("subkey signature with wrong type") + } + err = e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, subKey.Sig) + if err != nil { + return errors.StructuralError("subkey signature invalid: " + err.Error()) + } + e.Subkeys = append(e.Subkeys, subKey) + return nil +} + +const defaultRSAKeyBits = 2048 + +// NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a +// single identity composed of the given full name, comment and email, any of +// which may be empty but must not contain any of "()<>\x00". +// If config is nil, sensible defaults will be used. +func NewEntity(name, comment, email string, config *packet.Config) (*Entity, error) { + currentTime := config.Now() + + bits := defaultRSAKeyBits + if config != nil && config.RSABits != 0 { + bits = config.RSABits + } + + uid := packet.NewUserId(name, comment, email) + if uid == nil { + return nil, errors.InvalidArgumentError("user id field contained invalid characters") + } + signingPriv, err := rsa.GenerateKey(config.Random(), bits) + if err != nil { + return nil, err + } + encryptingPriv, err := rsa.GenerateKey(config.Random(), bits) + if err != nil { + return nil, err + } + + e := &Entity{ + PrimaryKey: packet.NewRSAPublicKey(currentTime, &signingPriv.PublicKey), + PrivateKey: packet.NewRSAPrivateKey(currentTime, signingPriv), + Identities: make(map[string]*Identity), + } + isPrimaryId := true + e.Identities[uid.Id] = &Identity{ + Name: uid.Name, + UserId: uid, + SelfSignature: &packet.Signature{ + CreationTime: currentTime, + SigType: packet.SigTypePositiveCert, + PubKeyAlgo: packet.PubKeyAlgoRSA, + Hash: config.Hash(), + IsPrimaryId: &isPrimaryId, + FlagsValid: true, + FlagSign: true, + FlagCertify: true, + IssuerKeyId: &e.PrimaryKey.KeyId, + }, + } + + // If the user passes in a DefaultHash via packet.Config, + // set the PreferredHash for the SelfSignature. + if config != nil && config.DefaultHash != 0 { + e.Identities[uid.Id].SelfSignature.PreferredHash = []uint8{hashToHashId(config.DefaultHash)} + } + + e.Subkeys = make([]Subkey, 1) + e.Subkeys[0] = Subkey{ + PublicKey: packet.NewRSAPublicKey(currentTime, &encryptingPriv.PublicKey), + PrivateKey: packet.NewRSAPrivateKey(currentTime, encryptingPriv), + Sig: &packet.Signature{ + CreationTime: currentTime, + SigType: packet.SigTypeSubkeyBinding, + PubKeyAlgo: packet.PubKeyAlgoRSA, + Hash: config.Hash(), + FlagsValid: true, + FlagEncryptStorage: true, + FlagEncryptCommunications: true, + IssuerKeyId: &e.PrimaryKey.KeyId, + }, + } + e.Subkeys[0].PublicKey.IsSubkey = true + e.Subkeys[0].PrivateKey.IsSubkey = true + + return e, nil +} + +// SerializePrivate serializes an Entity, including private key material, to +// the given Writer. For now, it must only be used on an Entity returned from +// NewEntity. +// If config is nil, sensible defaults will be used. +func (e *Entity) SerializePrivate(w io.Writer, config *packet.Config) (err error) { + err = e.PrivateKey.Serialize(w) + if err != nil { + return + } + for _, ident := range e.Identities { + err = ident.UserId.Serialize(w) + if err != nil { + return + } + err = ident.SelfSignature.SignUserId(ident.UserId.Id, e.PrimaryKey, e.PrivateKey, config) + if err != nil { + return + } + err = ident.SelfSignature.Serialize(w) + if err != nil { + return + } + } + for _, subkey := range e.Subkeys { + err = subkey.PrivateKey.Serialize(w) + if err != nil { + return + } + err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config) + if err != nil { + return + } + err = subkey.Sig.Serialize(w) + if err != nil { + return + } + } + return nil +} + +// Serialize writes the public part of the given Entity to w. (No private +// key material will be output). +func (e *Entity) Serialize(w io.Writer) error { + err := e.PrimaryKey.Serialize(w) + if err != nil { + return err + } + for _, ident := range e.Identities { + err = ident.UserId.Serialize(w) + if err != nil { + return err + } + err = ident.SelfSignature.Serialize(w) + if err != nil { + return err + } + for _, sig := range ident.Signatures { + err = sig.Serialize(w) + if err != nil { + return err + } + } + } + for _, subkey := range e.Subkeys { + err = subkey.PublicKey.Serialize(w) + if err != nil { + return err + } + err = subkey.Sig.Serialize(w) + if err != nil { + return err + } + } + return nil +} + +// SignIdentity adds a signature to e, from signer, attesting that identity is +// associated with e. The provided identity must already be an element of +// e.Identities and the private key of signer must have been decrypted if +// necessary. +// If config is nil, sensible defaults will be used. +func (e *Entity) SignIdentity(identity string, signer *Entity, config *packet.Config) error { + if signer.PrivateKey == nil { + return errors.InvalidArgumentError("signing Entity must have a private key") + } + if signer.PrivateKey.Encrypted { + return errors.InvalidArgumentError("signing Entity's private key must be decrypted") + } + ident, ok := e.Identities[identity] + if !ok { + return errors.InvalidArgumentError("given identity string not found in Entity") + } + + sig := &packet.Signature{ + SigType: packet.SigTypeGenericCert, + PubKeyAlgo: signer.PrivateKey.PubKeyAlgo, + Hash: config.Hash(), + CreationTime: config.Now(), + IssuerKeyId: &signer.PrivateKey.KeyId, + } + if err := sig.SignUserId(identity, e.PrimaryKey, signer.PrivateKey, config); err != nil { + return err + } + ident.Signatures = append(ident.Signatures, sig) + return nil +} diff --git a/vendor/golang.org/x/crypto/openpgp/keys_test.go b/vendor/golang.org/x/crypto/openpgp/keys_test.go new file mode 100644 index 0000000..fbc8fc2 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/keys_test.go @@ -0,0 +1,404 @@ +package openpgp + +import ( + "bytes" + "crypto" + "strings" + "testing" + "time" + + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" +) + +func TestKeyExpiry(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(expiringKeyHex)) + entity := kring[0] + + const timeFormat = "2006-01-02" + time1, _ := time.Parse(timeFormat, "2013-07-01") + + // The expiringKeyHex key is structured as: + // + // pub 1024R/5E237D8C created: 2013-07-01 expires: 2013-07-31 usage: SC + // sub 1024R/1ABB25A0 created: 2013-07-01 23:11:07 +0200 CEST expires: 2013-07-08 usage: E + // sub 1024R/96A672F5 created: 2013-07-01 23:11:23 +0200 CEST expires: 2013-07-31 usage: E + // + // So this should select the newest, non-expired encryption key. + key, _ := entity.encryptionKey(time1) + if id := key.PublicKey.KeyIdShortString(); id != "96A672F5" { + t.Errorf("Expected key 1ABB25A0 at time %s, but got key %s", time1.Format(timeFormat), id) + } + + // Once the first encryption subkey has expired, the second should be + // selected. + time2, _ := time.Parse(timeFormat, "2013-07-09") + key, _ = entity.encryptionKey(time2) + if id := key.PublicKey.KeyIdShortString(); id != "96A672F5" { + t.Errorf("Expected key 96A672F5 at time %s, but got key %s", time2.Format(timeFormat), id) + } + + // Once all the keys have expired, nothing should be returned. + time3, _ := time.Parse(timeFormat, "2013-08-01") + if key, ok := entity.encryptionKey(time3); ok { + t.Errorf("Expected no key at time %s, but got key %s", time3.Format(timeFormat), key.PublicKey.KeyIdShortString()) + } +} + +func TestMissingCrossSignature(t *testing.T) { + // This public key has a signing subkey, but the subkey does not + // contain a cross-signature. + keys, err := ReadArmoredKeyRing(bytes.NewBufferString(missingCrossSignatureKey)) + if len(keys) != 0 { + t.Errorf("Accepted key with missing cross signature") + } + if err == nil { + t.Fatal("Failed to detect error in keyring with missing cross signature") + } + structural, ok := err.(errors.StructuralError) + if !ok { + t.Fatalf("Unexpected class of error: %T. Wanted StructuralError", err) + } + const expectedMsg = "signing subkey is missing cross-signature" + if !strings.Contains(string(structural), expectedMsg) { + t.Fatalf("Unexpected error: %q. Expected it to contain %q", err, expectedMsg) + } +} + +func TestInvalidCrossSignature(t *testing.T) { + // This public key has a signing subkey, and the subkey has an + // embedded cross-signature. However, the cross-signature does + // not correctly validate over the primary and subkey. + keys, err := ReadArmoredKeyRing(bytes.NewBufferString(invalidCrossSignatureKey)) + if len(keys) != 0 { + t.Errorf("Accepted key with invalid cross signature") + } + if err == nil { + t.Fatal("Failed to detect error in keyring with an invalid cross signature") + } + structural, ok := err.(errors.StructuralError) + if !ok { + t.Fatalf("Unexpected class of error: %T. Wanted StructuralError", err) + } + const expectedMsg = "subkey signature invalid" + if !strings.Contains(string(structural), expectedMsg) { + t.Fatalf("Unexpected error: %q. Expected it to contain %q", err, expectedMsg) + } +} + +func TestGoodCrossSignature(t *testing.T) { + // This public key has a signing subkey, and the subkey has an + // embedded cross-signature which correctly validates over the + // primary and subkey. + keys, err := ReadArmoredKeyRing(bytes.NewBufferString(goodCrossSignatureKey)) + if err != nil { + t.Fatal(err) + } + if len(keys) != 1 { + t.Errorf("Failed to accept key with good cross signature, %d", len(keys)) + } + if len(keys[0].Subkeys) != 1 { + t.Errorf("Failed to accept good subkey, %d", len(keys[0].Subkeys)) + } +} + +// TestExternallyRevokableKey attempts to load and parse a key with a third party revocation permission. +func TestExternallyRevocableKey(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(subkeyUsageHex)) + + // The 0xA42704B92866382A key can be revoked by 0xBE3893CB843D0FE70C + // according to this signature that appears within the key: + // :signature packet: algo 1, keyid A42704B92866382A + // version 4, created 1396409682, md5len 0, sigclass 0x1f + // digest algo 2, begin of digest a9 84 + // hashed subpkt 2 len 4 (sig created 2014-04-02) + // hashed subpkt 12 len 22 (revocation key: c=80 a=1 f=CE094AA433F7040BB2DDF0BE3893CB843D0FE70C) + // hashed subpkt 7 len 1 (not revocable) + // subpkt 16 len 8 (issuer key ID A42704B92866382A) + // data: [1024 bits] + + id := uint64(0xA42704B92866382A) + keys := kring.KeysById(id) + if len(keys) != 1 { + t.Errorf("Expected to find key id %X, but got %d matches", id, len(keys)) + } +} + +func TestKeyRevocation(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(revokedKeyHex)) + + // revokedKeyHex contains these keys: + // pub 1024R/9A34F7C0 2014-03-25 [revoked: 2014-03-25] + // sub 1024R/1BA3CD60 2014-03-25 [revoked: 2014-03-25] + ids := []uint64{0xA401D9F09A34F7C0, 0x5CD3BE0A1BA3CD60} + + for _, id := range ids { + keys := kring.KeysById(id) + if len(keys) != 1 { + t.Errorf("Expected KeysById to find revoked key %X, but got %d matches", id, len(keys)) + } + keys = kring.KeysByIdUsage(id, 0) + if len(keys) != 0 { + t.Errorf("Expected KeysByIdUsage to filter out revoked key %X, but got %d matches", id, len(keys)) + } + } +} + +func TestSubkeyRevocation(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(revokedSubkeyHex)) + + // revokedSubkeyHex contains these keys: + // pub 1024R/4EF7E4BECCDE97F0 2014-03-25 + // sub 1024R/D63636E2B96AE423 2014-03-25 + // sub 1024D/DBCE4EE19529437F 2014-03-25 + // sub 1024R/677815E371C2FD23 2014-03-25 [revoked: 2014-03-25] + validKeys := []uint64{0x4EF7E4BECCDE97F0, 0xD63636E2B96AE423, 0xDBCE4EE19529437F} + revokedKey := uint64(0x677815E371C2FD23) + + for _, id := range validKeys { + keys := kring.KeysById(id) + if len(keys) != 1 { + t.Errorf("Expected KeysById to find key %X, but got %d matches", id, len(keys)) + } + keys = kring.KeysByIdUsage(id, 0) + if len(keys) != 1 { + t.Errorf("Expected KeysByIdUsage to find key %X, but got %d matches", id, len(keys)) + } + } + + keys := kring.KeysById(revokedKey) + if len(keys) != 1 { + t.Errorf("Expected KeysById to find key %X, but got %d matches", revokedKey, len(keys)) + } + + keys = kring.KeysByIdUsage(revokedKey, 0) + if len(keys) != 0 { + t.Errorf("Expected KeysByIdUsage to filter out revoked key %X, but got %d matches", revokedKey, len(keys)) + } +} + +func TestKeyUsage(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(subkeyUsageHex)) + + // subkeyUsageHex contains these keys: + // pub 1024R/2866382A created: 2014-04-01 expires: never usage: SC + // sub 1024R/936C9153 created: 2014-04-01 expires: never usage: E + // sub 1024R/64D5F5BB created: 2014-04-02 expires: never usage: E + // sub 1024D/BC0BA992 created: 2014-04-02 expires: never usage: S + certifiers := []uint64{0xA42704B92866382A} + signers := []uint64{0xA42704B92866382A, 0x42CE2C64BC0BA992} + encrypters := []uint64{0x09C0C7D9936C9153, 0xC104E98664D5F5BB} + + for _, id := range certifiers { + keys := kring.KeysByIdUsage(id, packet.KeyFlagCertify) + if len(keys) == 1 { + if keys[0].PublicKey.KeyId != id { + t.Errorf("Expected to find certifier key id %X, but got %X", id, keys[0].PublicKey.KeyId) + } + } else { + t.Errorf("Expected one match for certifier key id %X, but got %d matches", id, len(keys)) + } + } + + for _, id := range signers { + keys := kring.KeysByIdUsage(id, packet.KeyFlagSign) + if len(keys) == 1 { + if keys[0].PublicKey.KeyId != id { + t.Errorf("Expected to find signing key id %X, but got %X", id, keys[0].PublicKey.KeyId) + } + } else { + t.Errorf("Expected one match for signing key id %X, but got %d matches", id, len(keys)) + } + + // This keyring contains no encryption keys that are also good for signing. + keys = kring.KeysByIdUsage(id, packet.KeyFlagEncryptStorage|packet.KeyFlagEncryptCommunications) + if len(keys) != 0 { + t.Errorf("Unexpected match for encryption key id %X", id) + } + } + + for _, id := range encrypters { + keys := kring.KeysByIdUsage(id, packet.KeyFlagEncryptStorage|packet.KeyFlagEncryptCommunications) + if len(keys) == 1 { + if keys[0].PublicKey.KeyId != id { + t.Errorf("Expected to find encryption key id %X, but got %X", id, keys[0].PublicKey.KeyId) + } + } else { + t.Errorf("Expected one match for encryption key id %X, but got %d matches", id, len(keys)) + } + + // This keyring contains no encryption keys that are also good for signing. + keys = kring.KeysByIdUsage(id, packet.KeyFlagSign) + if len(keys) != 0 { + t.Errorf("Unexpected match for signing key id %X", id) + } + } +} + +func TestIdVerification(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + if err != nil { + t.Fatal(err) + } + if err := kring[1].PrivateKey.Decrypt([]byte("passphrase")); err != nil { + t.Fatal(err) + } + + const identity = "Test Key 1 (RSA)" + if err := kring[0].SignIdentity(identity, kring[1], nil); err != nil { + t.Fatal(err) + } + + ident, ok := kring[0].Identities[identity] + if !ok { + t.Fatal("identity missing from key after signing") + } + + checked := false + for _, sig := range ident.Signatures { + if sig.IssuerKeyId == nil || *sig.IssuerKeyId != kring[1].PrimaryKey.KeyId { + continue + } + + if err := kring[1].PrimaryKey.VerifyUserIdSignature(identity, kring[0].PrimaryKey, sig); err != nil { + t.Fatalf("error verifying new identity signature: %s", err) + } + checked = true + break + } + + if !checked { + t.Fatal("didn't find identity signature in Entity") + } +} + +func TestNewEntityWithPreferredHash(t *testing.T) { + c := &packet.Config{ + DefaultHash: crypto.SHA256, + } + entity, err := NewEntity("Golang Gopher", "Test Key", "no-reply@golang.com", c) + if err != nil { + t.Fatal(err) + } + + for _, identity := range entity.Identities { + if len(identity.SelfSignature.PreferredHash) == 0 { + t.Fatal("didn't find a preferred hash in self signature") + } + ph := hashToHashId(c.DefaultHash) + if identity.SelfSignature.PreferredHash[0] != ph { + t.Fatalf("Expected preferred hash to be %d, got %d", ph, identity.SelfSignature.PreferredHash[0]) + } + } +} + +func TestNewEntityWithoutPreferredHash(t *testing.T) { + entity, err := NewEntity("Golang Gopher", "Test Key", "no-reply@golang.com", nil) + if err != nil { + t.Fatal(err) + } + + for _, identity := range entity.Identities { + if len(identity.SelfSignature.PreferredHash) != 0 { + t.Fatal("Expected preferred hash to be empty but got length %d", len(identity.SelfSignature.PreferredHash)) + } + } +} + +const expiringKeyHex = "988d0451d1ec5d010400ba3385721f2dc3f4ab096b2ee867ab77213f0a27a8538441c35d2fa225b08798a1439a66a5150e6bdc3f40f5d28d588c712394c632b6299f77db8c0d48d37903fb72ebd794d61be6aa774688839e5fdecfe06b2684cc115d240c98c66cb1ef22ae84e3aa0c2b0c28665c1e7d4d044e7f270706193f5223c8d44e0d70b7b8da830011010001b40f4578706972792074657374206b657988be041301020028050251d1ec5d021b03050900278d00060b090807030206150802090a0b0416020301021e01021780000a091072589ad75e237d8c033503fd10506d72837834eb7f994117740723adc39227104b0d326a1161871c0b415d25b4aedef946ca77ea4c05af9c22b32cf98be86ab890111fced1ee3f75e87b7cc3c00dc63bbc85dfab91c0dc2ad9de2c4d13a34659333a85c6acc1a669c5e1d6cecb0cf1e56c10e72d855ae177ddc9e766f9b2dda57ccbb75f57156438bbdb4e42b88d0451d1ec5d0104009c64906559866c5cb61578f5846a94fcee142a489c9b41e67b12bb54cfe86eb9bc8566460f9a720cb00d6526fbccfd4f552071a8e3f7744b1882d01036d811ee5a3fb91a1c568055758f43ba5d2c6a9676b012f3a1a89e47bbf624f1ad571b208f3cc6224eb378f1645dd3d47584463f9eadeacfd1ce6f813064fbfdcc4b5a53001101000188a504180102000f021b0c050251d1f06b050900093e89000a091072589ad75e237d8c20e00400ab8310a41461425b37889c4da28129b5fae6084fafbc0a47dd1adc74a264c6e9c9cc125f40462ee1433072a58384daef88c961c390ed06426a81b464a53194c4e291ddd7e2e2ba3efced01537d713bd111f48437bde2363446200995e8e0d4e528dda377fd1e8f8ede9c8e2198b393bd86852ce7457a7e3daf74d510461a5b77b88d0451d1ece8010400b3a519f83ab0010307e83bca895170acce8964a044190a2b368892f7a244758d9fc193482648acb1fb9780d28cc22d171931f38bb40279389fc9bf2110876d4f3db4fcfb13f22f7083877fe56592b3b65251312c36f83ffcb6d313c6a17f197dd471f0712aad15a8537b435a92471ba2e5b0c72a6c72536c3b567c558d7b6051001101000188a504180102000f021b0c050251d1f07b050900279091000a091072589ad75e237d8ce69e03fe286026afacf7c97ee20673864d4459a2240b5655219950643c7dba0ac384b1d4359c67805b21d98211f7b09c2a0ccf6410c8c04d4ff4a51293725d8d6570d9d8bb0e10c07d22357caeb49626df99c180be02d77d1fe8ed25e7a54481237646083a9f89a11566cd20b9e995b1487c5f9e02aeb434f3a1897cd416dd0a87861838da3e9e" +const subkeyUsageHex = "988d04533a52bc010400d26af43085558f65b9e7dbc90cb9238015259aed5e954637adcfa2181548b2d0b60c65f1f42ec5081cbf1bc0a8aa4900acfb77070837c58f26012fbce297d70afe96e759ad63531f0037538e70dbf8e384569b9720d99d8eb39d8d0a2947233ed242436cb6ac7dfe74123354b3d0119b5c235d3dd9c9d6c004f8ffaf67ad8583001101000188b7041f010200210502533b8552170c8001ce094aa433f7040bb2ddf0be3893cb843d0fe70c020700000a0910a42704b92866382aa98404009d63d916a27543da4221c60087c33f1c44bec9998c5438018ed370cca4962876c748e94b73eb39c58eb698063f3fd6346d58dd2a11c0247934c4a9d71f24754f7468f96fb24c3e791dd2392b62f626148ad724189498cbf993db2df7c0cdc2d677c35da0f16cb16c9ce7c33b4de65a4a91b1d21a130ae9cc26067718910ef8e2b417556d627261203c756d627261407379642e65642e61753e88b80413010200220502533a52bc021b03060b090807030206150802090a0b0416020301021e01021780000a0910a42704b92866382a47840400c0c2bd04f5fca586de408b395b3c280a278259c93eaaa8b79a53b97003f8ed502a8a00446dd9947fb462677e4fcac0dac2f0701847d15130aadb6cd9e0705ea0cf5f92f129136c7be21a718d46c8e641eb7f044f2adae573e11ae423a0a9ca51324f03a8a2f34b91fa40c3cc764bee4dccadedb54c768ba0469b683ea53f1c29b88d04533a52bc01040099c92a5d6f8b744224da27bc2369127c35269b58bec179de6bbc038f749344222f85a31933224f26b70243c4e4b2d242f0c4777eaef7b5502f9dad6d8bf3aaeb471210674b74de2d7078af497d55f5cdad97c7bedfbc1b41e8065a97c9c3d344b21fc81d27723af8e374bc595da26ea242dccb6ae497be26eea57e563ed517e90011010001889f0418010200090502533a52bc021b0c000a0910a42704b92866382afa1403ff70284c2de8a043ff51d8d29772602fa98009b7861c540535f874f2c230af8caf5638151a636b21f8255003997ccd29747fdd06777bb24f9593bd7d98a3e887689bf902f999915fcc94625ae487e5d13e6616f89090ebc4fdc7eb5cad8943e4056995bb61c6af37f8043016876a958ec7ebf39c43d20d53b7f546cfa83e8d2604b88d04533b8283010400c0b529316dbdf58b4c54461e7e669dc11c09eb7f73819f178ccd4177b9182b91d138605fcf1e463262fabefa73f94a52b5e15d1904635541c7ea540f07050ce0fb51b73e6f88644cec86e91107c957a114f69554548a85295d2b70bd0b203992f76eb5d493d86d9eabcaa7ef3fc7db7e458438db3fcdb0ca1cc97c638439a9170011010001889f0418010200090502533b8283021b0c000a0910a42704b92866382adc6d0400cfff6258485a21675adb7a811c3e19ebca18851533f75a7ba317950b9997fda8d1a4c8c76505c08c04b6c2cc31dc704d33da36a21273f2b388a1a706f7c3378b66d887197a525936ed9a69acb57fe7f718133da85ec742001c5d1864e9c6c8ea1b94f1c3759cebfd93b18606066c063a63be86085b7e37bdbc65f9a915bf084bb901a204533b85cd110400aed3d2c52af2b38b5b67904b0ef73d6dd7aef86adb770e2b153cd22489654dcc91730892087bb9856ae2d9f7ed1eb48f214243fe86bfe87b349ebd7c30e630e49c07b21fdabf78b7a95c8b7f969e97e3d33f2e074c63552ba64a2ded7badc05ce0ea2be6d53485f6900c7860c7aa76560376ce963d7271b9b54638a4028b573f00a0d8854bfcdb04986141568046202192263b9b67350400aaa1049dbc7943141ef590a70dcb028d730371d92ea4863de715f7f0f16d168bd3dc266c2450457d46dcbbf0b071547e5fbee7700a820c3750b236335d8d5848adb3c0da010e998908dfd93d961480084f3aea20b247034f8988eccb5546efaa35a92d0451df3aaf1aee5aa36a4c4d462c760ecd9cebcabfbe1412b1f21450f203fd126687cd486496e971a87fd9e1a8a765fe654baa219a6871ab97768596ab05c26c1aeea8f1a2c72395a58dbc12ef9640d2b95784e974a4d2d5a9b17c25fedacfe551bda52602de8f6d2e48443f5dd1a2a2a8e6a5e70ecdb88cd6e766ad9745c7ee91d78cc55c3d06536b49c3fee6c3d0b6ff0fb2bf13a314f57c953b8f4d93bf88e70418010200090502533b85cd021b0200520910a42704b92866382a47200419110200060502533b85cd000a091042ce2c64bc0ba99214b2009e26b26852c8b13b10c35768e40e78fbbb48bd084100a0c79d9ea0844fa5853dd3c85ff3ecae6f2c9dd6c557aa04008bbbc964cd65b9b8299d4ebf31f41cc7264b8cf33a00e82c5af022331fac79efc9563a822497ba012953cefe2629f1242fcdcb911dbb2315985bab060bfd58261ace3c654bdbbe2e8ed27a46e836490145c86dc7bae15c011f7e1ffc33730109b9338cd9f483e7cef3d2f396aab5bd80efb6646d7e778270ee99d934d187dd98" +const revokedKeyHex = "988d045331ce82010400c4fdf7b40a5477f206e6ee278eaef888ca73bf9128a9eef9f2f1ddb8b7b71a4c07cfa241f028a04edb405e4d916c61d6beabc333813dc7b484d2b3c52ee233c6a79b1eea4e9cc51596ba9cd5ac5aeb9df62d86ea051055b79d03f8a4fa9f38386f5bd17529138f3325d46801514ea9047977e0829ed728e68636802796801be10011010001889f04200102000905025331d0e3021d03000a0910a401d9f09a34f7c042aa040086631196405b7e6af71026b88e98012eab44aa9849f6ef3fa930c7c9f23deaedba9db1538830f8652fb7648ec3fcade8dbcbf9eaf428e83c6cbcc272201bfe2fbb90d41963397a7c0637a1a9d9448ce695d9790db2dc95433ad7be19eb3de72dacf1d6db82c3644c13eae2a3d072b99bb341debba012c5ce4006a7d34a1f4b94b444526567205265766f6b657220283c52656727732022424d204261726973746122204b657920262530305c303e5c29203c72656740626d626172697374612e636f2e61753e88b704130102002205025331ce82021b03060b090807030206150802090a0b0416020301021e01021780000a0910a401d9f09a34f7c0019c03f75edfbeb6a73e7225ad3cc52724e2872e04260d7daf0d693c170d8c4b243b8767bc7785763533febc62ec2600c30603c433c095453ede59ff2fcabeb84ce32e0ed9d5cf15ffcbc816202b64370d4d77c1e9077d74e94a16fb4fa2e5bec23a56d7a73cf275f91691ae1801a976fcde09e981a2f6327ac27ea1fecf3185df0d56889c04100102000605025331cfb5000a0910fe9645554e8266b64b4303fc084075396674fb6f778d302ac07cef6bc0b5d07b66b2004c44aef711cbac79617ef06d836b4957522d8772dd94bf41a2f4ac8b1ee6d70c57503f837445a74765a076d07b829b8111fc2a918423ddb817ead7ca2a613ef0bfb9c6b3562aec6c3cf3c75ef3031d81d95f6563e4cdcc9960bcb386c5d757b104fcca5fe11fc709df884604101102000605025331cfe7000a09107b15a67f0b3ddc0317f6009e360beea58f29c1d963a22b962b80788c3fa6c84e009d148cfde6b351469b8eae91187eff07ad9d08fcaab88d045331ce820104009f25e20a42b904f3fa555530fe5c46737cf7bd076c35a2a0d22b11f7e0b61a69320b768f4a80fe13980ce380d1cfc4a0cd8fbe2d2e2ef85416668b77208baa65bf973fe8e500e78cc310d7c8705cdb34328bf80e24f0385fce5845c33bc7943cf6b11b02348a23da0bf6428e57c05135f2dc6bd7c1ce325d666d5a5fd2fd5e410011010001889f04180102000905025331ce82021b0c000a0910a401d9f09a34f7c0418003fe34feafcbeaef348a800a0d908a7a6809cc7304017d820f70f0474d5e23cb17e38b67dc6dca282c6ca00961f4ec9edf2738d0f087b1d81e4871ef08e1798010863afb4eac4c44a376cb343be929c5be66a78cfd4456ae9ec6a99d97f4e1c3ff3583351db2147a65c0acef5c003fb544ab3a2e2dc4d43646f58b811a6c3a369d1f" +const revokedSubkeyHex = "988d04533121f6010400aefc803a3e4bb1a61c86e8a86d2726c6a43e0079e9f2713f1fa017e9854c83877f4aced8e331d675c67ea83ddab80aacbfa0b9040bb12d96f5a3d6be09455e2a76546cbd21677537db941cab710216b6d24ec277ee0bd65b910f416737ed120f6b93a9d3b306245c8cfd8394606fdb462e5cf43c551438d2864506c63367fc890011010001b41d416c696365203c616c69636540626d626172697374612e636f2e61753e88bb041301020025021b03060b090807030206150802090a0b0416020301021e01021780050253312798021901000a09104ef7e4beccde97f015a803ff5448437780f63263b0df8442a995e7f76c221351a51edd06f2063d8166cf3157aada4923dfc44aa0f2a6a4da5cf83b7fe722ba8ab416c976e77c6b5682e7f1069026673bd0de56ba06fd5d7a9f177607f277d9b55ff940a638c3e68525c67517e2b3d976899b93ca267f705b3e5efad7d61220e96b618a4497eab8d04403d23f8846041011020006050253312910000a09107b15a67f0b3ddc03d96e009f50b6365d86c4be5d5e9d0ea42d5e56f5794c617700a0ab274e19c2827780016d23417ce89e0a2c0d987d889c04100102000605025331cf7a000a0910a401d9f09a34f7c0ee970400aca292f213041c9f3b3fc49148cbda9d84afee6183c8dd6c5ff2600b29482db5fecd4303797be1ee6d544a20a858080fec43412061c9a71fae4039fd58013b4ae341273e6c66ad4c7cdd9e68245bedb260562e7b166f2461a1032f2b38c0e0e5715fb3d1656979e052b55ca827a76f872b78a9fdae64bc298170bfcebedc1271b41a416c696365203c616c696365407379646973702e6f722e61753e88b804130102002205025331278b021b03060b090807030206150802090a0b0416020301021e01021780000a09104ef7e4beccde97f06a7003fa03c3af68d272ebc1fa08aa72a03b02189c26496a2833d90450801c4e42c5b5f51ad96ce2d2c9cef4b7c02a6a2fcf1412d6a2d486098eb762f5010a201819c17fd2888aec8eda20c65a3b75744de7ee5cc8ac7bfc470cbe3cb982720405a27a3c6a8c229cfe36905f881b02ed5680f6a8f05866efb9d6c5844897e631deb949ca8846041011020006050253312910000a09107b15a67f0b3ddc0347bc009f7fa35db59147469eb6f2c5aaf6428accb138b22800a0caa2f5f0874bacc5909c652a57a31beda65eddd5889c04100102000605025331cf7a000a0910a401d9f09a34f7c0316403ff46f2a5c101256627f16384d34a38fb47a6c88ba60506843e532d91614339fccae5f884a5741e7582ffaf292ba38ee10a270a05f139bde3814b6a077e8cd2db0f105ebea2a83af70d385f13b507fac2ad93ff79d84950328bb86f3074745a8b7f9b64990fb142e2a12976e27e8d09a28dc5621f957ac49091116da410ac3cbde1b88d04533121f6010400cbd785b56905e4192e2fb62a720727d43c4fa487821203cf72138b884b78b701093243e1d8c92a0248a6c0203a5a88693da34af357499abacaf4b3309c640797d03093870a323b4b6f37865f6eaa2838148a67df4735d43a90ca87942554cdf1c4a751b1e75f9fd4ce4e97e278d6c1c7ed59d33441df7d084f3f02beb68896c70011010001889f0418010200090502533121f6021b0c000a09104ef7e4beccde97f0b98b03fc0a5ccf6a372995835a2f5da33b282a7d612c0ab2a97f59cf9fff73e9110981aac2858c41399afa29624a7fd8a0add11654e3d882c0fd199e161bdad65e5e2548f7b68a437ea64293db1246e3011cbb94dc1bcdeaf0f2539bd88ff16d95547144d97cead6a8c5927660a91e6db0d16eb36b7b49a3525b54d1644e65599b032b7eb901a204533127a0110400bd3edaa09eff9809c4edc2c2a0ebe52e53c50a19c1e49ab78e6167bf61473bb08f2050d78a5cbbc6ed66aff7b42cd503f16b4a0b99fa1609681fca9b7ce2bbb1a5b3864d6cdda4d7ef7849d156d534dea30fb0efb9e4cf8959a2b2ce623905882d5430b995a15c3b9fe92906086788b891002924f94abe139b42cbbfaaabe42f00a0b65dc1a1ad27d798adbcb5b5ad02d2688c89477b03ff4eebb6f7b15a73b96a96bed201c0e5e4ea27e4c6e2dd1005b94d4b90137a5b1cf5e01c6226c070c4cc999938101578877ee76d296b9aab8246d57049caacf489e80a3f40589cade790a020b1ac146d6f7a6241184b8c7fcde680eae3188f5dcbe846d7f7bdad34f6fcfca08413e19c1d5df83fc7c7c627d493492e009c2f52a80400a2fe82de87136fd2e8845888c4431b032ba29d9a29a804277e31002a8201fb8591a3e55c7a0d0881496caf8b9fb07544a5a4879291d0dc026a0ea9e5bd88eb4aa4947bbd694b25012e208a250d65ddc6f1eea59d3aed3b4ec15fcab85e2afaa23a40ab1ef9ce3e11e1bc1c34a0e758e7aa64deb8739276df0af7d4121f834a9b88e70418010200090502533127a0021b02005209104ef7e4beccde97f047200419110200060502533127a0000a0910dbce4ee19529437fe045009c0b32f5ead48ee8a7e98fac0dea3d3e6c0e2c552500a0ad71fadc5007cfaf842d9b7db3335a8cdad15d3d1a6404009b08e2c68fe8f3b45c1bb72a4b3278cdf3012aa0f229883ad74aa1f6000bb90b18301b2f85372ca5d6b9bf478d235b733b1b197d19ccca48e9daf8e890cb64546b4ce1b178faccfff07003c172a2d4f5ebaba9f57153955f3f61a9b80a4f5cb959908f8b211b03b7026a8a82fc612bfedd3794969bcf458c4ce92be215a1176ab88d045331d144010400a5063000c5aaf34953c1aa3bfc95045b3aab9882b9a8027fecfe2142dc6b47ba8aca667399990244d513dd0504716908c17d92c65e74219e004f7b83fc125e575dd58efec3ab6dd22e3580106998523dea42ec75bf9aa111734c82df54630bebdff20fe981cfc36c76f865eb1c2fb62c9e85bc3a6e5015a361a2eb1c8431578d0011010001889f04280102000905025331d433021d03000a09104ef7e4beccde97f02e5503ff5e0630d1b65291f4882b6d40a29da4616bb5088717d469fbcc3648b8276de04a04988b1f1b9f3e18f52265c1f8b6c85861691c1a6b8a3a25a1809a0b32ad330aec5667cb4262f4450649184e8113849b05e5ad06a316ea80c001e8e71838190339a6e48bbde30647bcf245134b9a97fa875c1d83a9862cae87ffd7e2c4ce3a1b89013d04180102000905025331d144021b0200a809104ef7e4beccde97f09d2004190102000605025331d144000a0910677815e371c2fd23522203fe22ab62b8e7a151383cea3edd3a12995693911426f8ccf125e1f6426388c0010f88d9ca7da2224aee8d1c12135998640c5e1813d55a93df472faae75bef858457248db41b4505827590aeccf6f9eb646da7f980655dd3050c6897feddddaca90676dee856d66db8923477d251712bb9b3186b4d0114daf7d6b59272b53218dd1da94a03ff64006fcbe71211e5daecd9961fba66cdb6de3f914882c58ba5beddeba7dcb950c1156d7fba18c19ea880dccc800eae335deec34e3b84ac75ffa24864f782f87815cda1c0f634b3dd2fa67cea30811d21723d21d9551fa12ccbcfa62b6d3a15d01307b99925707992556d50065505b090aadb8579083a20fe65bd2a270da9b011" +const missingCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Charset: UTF-8 + +mQENBFMYynYBCACVOZ3/e8Bm2b9KH9QyIlHGo/i1bnkpqsgXj8tpJ2MIUOnXMMAY +ztW7kKFLCmgVdLIC0vSoLA4yhaLcMojznh/2CcUglZeb6Ao8Gtelr//Rd5DRfPpG +zqcfUo+m+eO1co2Orabw0tZDfGpg5p3AYl0hmxhUyYSc/xUq93xL1UJzBFgYXY54 +QsM8dgeQgFseSk/YvdP5SMx1ev+eraUyiiUtWzWrWC1TdyRa5p4UZg6Rkoppf+WJ +QrW6BWrhAtqATHc8ozV7uJjeONjUEq24roRc/OFZdmQQGK6yrzKnnbA6MdHhqpdo +9kWDcXYb7pSE63Lc+OBa5X2GUVvXJLS/3nrtABEBAAG0F2ludmFsaWQtc2lnbmlu +Zy1zdWJrZXlziQEoBBMBAgASBQJTnKB5AhsBAgsHAhUIAh4BAAoJEO3UDQUIHpI/ +dN4H/idX4FQ1LIZCnpHS/oxoWQWfpRgdKAEM0qCqjMgiipJeEwSQbqjTCynuh5/R +JlODDz85ABR06aoF4l5ebGLQWFCYifPnJZ/Yf5OYcMGtb7dIbqxWVFL9iLMO/oDL +ioI3dotjPui5e+2hI9pVH1UHB/bZ/GvMGo6Zg0XxLPolKQODMVjpjLAQ0YJ3spew +RAmOGre6tIvbDsMBnm8qREt7a07cBJ6XK7xjxYaZHQBiHVxyEWDa6gyANONx8duW +/fhQ/zDTnyVM/ik6VO0Ty9BhPpcEYLFwh5c1ilFari1ta3e6qKo6ZGa9YMk/REhu +yBHd9nTkI+0CiQUmbckUiVjDKKe5AQ0EUxjKdgEIAJcXQeP+NmuciE99YcJoffxv +2gVLU4ZXBNHEaP0mgaJ1+tmMD089vUQAcyGRvw8jfsNsVZQIOAuRxY94aHQhIRHR +bUzBN28ofo/AJJtfx62C15xt6fDKRV6HXYqAiygrHIpEoRLyiN69iScUsjIJeyFL +C8wa72e8pSL6dkHoaV1N9ZH/xmrJ+k0vsgkQaAh9CzYufncDxcwkoP+aOlGtX1gP +WwWoIbz0JwLEMPHBWvDDXQcQPQTYQyj+LGC9U6f9VZHN25E94subM1MjuT9OhN9Y +MLfWaaIc5WyhLFyQKW2Upofn9wSFi8ubyBnv640Dfd0rVmaWv7LNTZpoZ/GbJAMA +EQEAAYkBHwQYAQIACQUCU5ygeQIbAgAKCRDt1A0FCB6SP0zCB/sEzaVR38vpx+OQ +MMynCBJrakiqDmUZv9xtplY7zsHSQjpd6xGflbU2n+iX99Q+nav0ETQZifNUEd4N +1ljDGQejcTyKD6Pkg6wBL3x9/RJye7Zszazm4+toJXZ8xJ3800+BtaPoI39akYJm ++ijzbskvN0v/j5GOFJwQO0pPRAFtdHqRs9Kf4YanxhedB4dIUblzlIJuKsxFit6N +lgGRblagG3Vv2eBszbxzPbJjHCgVLR3RmrVezKOsZjr/2i7X+xLWIR0uD3IN1qOW +CXQxLBizEEmSNVNxsp7KPGTLnqO3bPtqFirxS9PJLIMPTPLNBY7ZYuPNTMqVIUWF +4artDmrG +=7FfJ +-----END PGP PUBLIC KEY BLOCK-----` + +const invalidCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFMYynYBCACVOZ3/e8Bm2b9KH9QyIlHGo/i1bnkpqsgXj8tpJ2MIUOnXMMAY +ztW7kKFLCmgVdLIC0vSoLA4yhaLcMojznh/2CcUglZeb6Ao8Gtelr//Rd5DRfPpG +zqcfUo+m+eO1co2Orabw0tZDfGpg5p3AYl0hmxhUyYSc/xUq93xL1UJzBFgYXY54 +QsM8dgeQgFseSk/YvdP5SMx1ev+eraUyiiUtWzWrWC1TdyRa5p4UZg6Rkoppf+WJ +QrW6BWrhAtqATHc8ozV7uJjeONjUEq24roRc/OFZdmQQGK6yrzKnnbA6MdHhqpdo +9kWDcXYb7pSE63Lc+OBa5X2GUVvXJLS/3nrtABEBAAG0F2ludmFsaWQtc2lnbmlu +Zy1zdWJrZXlziQEoBBMBAgASBQJTnKB5AhsBAgsHAhUIAh4BAAoJEO3UDQUIHpI/ +dN4H/idX4FQ1LIZCnpHS/oxoWQWfpRgdKAEM0qCqjMgiipJeEwSQbqjTCynuh5/R +JlODDz85ABR06aoF4l5ebGLQWFCYifPnJZ/Yf5OYcMGtb7dIbqxWVFL9iLMO/oDL +ioI3dotjPui5e+2hI9pVH1UHB/bZ/GvMGo6Zg0XxLPolKQODMVjpjLAQ0YJ3spew +RAmOGre6tIvbDsMBnm8qREt7a07cBJ6XK7xjxYaZHQBiHVxyEWDa6gyANONx8duW +/fhQ/zDTnyVM/ik6VO0Ty9BhPpcEYLFwh5c1ilFari1ta3e6qKo6ZGa9YMk/REhu +yBHd9nTkI+0CiQUmbckUiVjDKKe5AQ0EUxjKdgEIAIINDqlj7X6jYKc6DjwrOkjQ +UIRWbQQar0LwmNilehmt70g5DCL1SYm9q4LcgJJ2Nhxj0/5qqsYib50OSWMcKeEe +iRXpXzv1ObpcQtI5ithp0gR53YPXBib80t3bUzomQ5UyZqAAHzMp3BKC54/vUrSK +FeRaxDzNLrCeyI00+LHNUtwghAqHvdNcsIf8VRumK8oTm3RmDh0TyjASWYbrt9c8 +R1Um3zuoACOVy+mEIgIzsfHq0u7dwYwJB5+KeM7ZLx+HGIYdUYzHuUE1sLwVoELh ++SHIGHI1HDicOjzqgajShuIjj5hZTyQySVprrsLKiXS6NEwHAP20+XjayJ/R3tEA +EQEAAYkCPgQYAQIBKAUCU5ygeQIbAsBdIAQZAQIABgUCU5ygeQAKCRCpVlnFZmhO +52RJB/9uD1MSa0wjY6tHOIgquZcP3bHBvHmrHNMw9HR2wRCMO91ZkhrpdS3ZHtgb +u3/55etj0FdvDo1tb8P8FGSVtO5Vcwf5APM8sbbqoi8L951Q3i7qt847lfhu6sMl +w0LWFvPTOLHrliZHItPRjOltS1WAWfr2jUYhsU9ytaDAJmvf9DujxEOsN5G1YJep +54JCKVCkM/y585Zcnn+yxk/XwqoNQ0/iJUT9qRrZWvoeasxhl1PQcwihCwss44A+ +YXaAt3hbk+6LEQuZoYS73yR3WHj+42tfm7YxRGeubXfgCEz/brETEWXMh4pe0vCL +bfWrmfSPq2rDegYcAybxRQz0lF8PAAoJEO3UDQUIHpI/exkH/0vQfdHA8g/N4T6E +i6b1CUVBAkvtdJpCATZjWPhXmShOw62gkDw306vHPilL4SCvEEi4KzG72zkp6VsB +DSRcpxCwT4mHue+duiy53/aRMtSJ+vDfiV1Vhq+3sWAck/yUtfDU9/u4eFaiNok1 +8/Gd7reyuZt5CiJnpdPpjCwelK21l2w7sHAnJF55ITXdOxI8oG3BRKufz0z5lyDY +s2tXYmhhQIggdgelN8LbcMhWs/PBbtUr6uZlNJG2lW1yscD4aI529VjwJlCeo745 +U7pO4eF05VViUJ2mmfoivL3tkhoTUWhx8xs8xCUcCg8DoEoSIhxtOmoTPR22Z9BL +6LCg2mg= +=Dhm4 +-----END PGP PUBLIC KEY BLOCK-----` + +const goodCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mI0EVUqeVwEEAMufHRrMPWK3gyvi0O0tABCs/oON9zV9KDZlr1a1M91ShCSFwCPo +7r80PxdWVWcj0V5h50/CJYtpN3eE/mUIgW2z1uDYQF1OzrQ8ubrksfsJvpAhENom +lTQEppv9mV8qhcM278teb7TX0pgrUHLYF5CfPdp1L957JLLXoQR/lwLVABEBAAG0 +E2dvb2Qtc2lnbmluZy1zdWJrZXmIuAQTAQIAIgUCVUqeVwIbAwYLCQgHAwIGFQgC +CQoLBBYCAwECHgECF4AACgkQNRjL95IRWP69XQQAlH6+eyXJN4DZTLX78KGjHrsw +6FCvxxClEPtPUjcJy/1KCRQmtLAt9PbbA78dvgzjDeZMZqRAwdjyJhjyg/fkU2OH +7wq4ktjUu+dLcOBb+BFMEY+YjKZhf6EJuVfxoTVr5f82XNPbYHfTho9/OABKH6kv +X70PaKZhbwnwij8Nts65AaIEVUqftREEAJ3WxZfqAX0bTDbQPf2CMT2IVMGDfhK7 +GyubOZgDFFjwUJQvHNvsrbeGLZ0xOBumLINyPO1amIfTgJNm1iiWFWfmnHReGcDl +y5mpYG60Mb79Whdcer7CMm3AqYh/dW4g6IB02NwZMKoUHo3PXmFLxMKXnWyJ0clw +R0LI/Qn509yXAKDh1SO20rqrBM+EAP2c5bfI98kyNwQAi3buu94qo3RR1ZbvfxgW +CKXDVm6N99jdZGNK7FbRifXqzJJDLcXZKLnstnC4Sd3uyfyf1uFhmDLIQRryn5m+ +LBYHfDBPN3kdm7bsZDDq9GbTHiFZUfm/tChVKXWxkhpAmHhU/tH6GGzNSMXuIWSO +aOz3Rqq0ED4NXyNKjdF9MiwD/i83S0ZBc0LmJYt4Z10jtH2B6tYdqnAK29uQaadx +yZCX2scE09UIm32/w7pV77CKr1Cp/4OzAXS1tmFzQ+bX7DR+Gl8t4wxr57VeEMvl +BGw4Vjh3X8//m3xynxycQU18Q1zJ6PkiMyPw2owZ/nss3hpSRKFJsxMLhW3fKmKr +Ey2KiOcEGAECAAkFAlVKn7UCGwIAUgkQNRjL95IRWP5HIAQZEQIABgUCVUqftQAK +CRD98VjDN10SqkWrAKDTpEY8D8HC02E/KVC5YUI01B30wgCgurpILm20kXEDCeHp +C5pygfXw1DJrhAP+NyPJ4um/bU1I+rXaHHJYroYJs8YSweiNcwiHDQn0Engh/mVZ +SqLHvbKh2dL/RXymC3+rjPvQf5cup9bPxNMa6WagdYBNAfzWGtkVISeaQW+cTEp/ +MtgVijRGXR/lGLGETPg2X3Afwn9N9bLMBkBprKgbBqU7lpaoPupxT61bL70= +=vtbN +-----END PGP PUBLIC KEY BLOCK-----` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/compressed.go b/vendor/golang.org/x/crypto/openpgp/packet/compressed.go new file mode 100644 index 0000000..e8f0b5c --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/compressed.go @@ -0,0 +1,123 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "compress/bzip2" + "compress/flate" + "compress/zlib" + "golang.org/x/crypto/openpgp/errors" + "io" + "strconv" +) + +// Compressed represents a compressed OpenPGP packet. The decompressed contents +// will contain more OpenPGP packets. See RFC 4880, section 5.6. +type Compressed struct { + Body io.Reader +} + +const ( + NoCompression = flate.NoCompression + BestSpeed = flate.BestSpeed + BestCompression = flate.BestCompression + DefaultCompression = flate.DefaultCompression +) + +// CompressionConfig contains compressor configuration settings. +type CompressionConfig struct { + // Level is the compression level to use. It must be set to + // between -1 and 9, with -1 causing the compressor to use the + // default compression level, 0 causing the compressor to use + // no compression and 1 to 9 representing increasing (better, + // slower) compression levels. If Level is less than -1 or + // more then 9, a non-nil error will be returned during + // encryption. See the constants above for convenient common + // settings for Level. + Level int +} + +func (c *Compressed) parse(r io.Reader) error { + var buf [1]byte + _, err := readFull(r, buf[:]) + if err != nil { + return err + } + + switch buf[0] { + case 1: + c.Body = flate.NewReader(r) + case 2: + c.Body, err = zlib.NewReader(r) + case 3: + c.Body = bzip2.NewReader(r) + default: + err = errors.UnsupportedError("unknown compression algorithm: " + strconv.Itoa(int(buf[0]))) + } + + return err +} + +// compressedWriterCloser represents the serialized compression stream +// header and the compressor. Its Close() method ensures that both the +// compressor and serialized stream header are closed. Its Write() +// method writes to the compressor. +type compressedWriteCloser struct { + sh io.Closer // Stream Header + c io.WriteCloser // Compressor +} + +func (cwc compressedWriteCloser) Write(p []byte) (int, error) { + return cwc.c.Write(p) +} + +func (cwc compressedWriteCloser) Close() (err error) { + err = cwc.c.Close() + if err != nil { + return err + } + + return cwc.sh.Close() +} + +// SerializeCompressed serializes a compressed data packet to w and +// returns a WriteCloser to which the literal data packets themselves +// can be written and which MUST be closed on completion. If cc is +// nil, sensible defaults will be used to configure the compression +// algorithm. +func SerializeCompressed(w io.WriteCloser, algo CompressionAlgo, cc *CompressionConfig) (literaldata io.WriteCloser, err error) { + compressed, err := serializeStreamHeader(w, packetTypeCompressed) + if err != nil { + return + } + + _, err = compressed.Write([]byte{uint8(algo)}) + if err != nil { + return + } + + level := DefaultCompression + if cc != nil { + level = cc.Level + } + + var compressor io.WriteCloser + switch algo { + case CompressionZIP: + compressor, err = flate.NewWriter(compressed, level) + case CompressionZLIB: + compressor, err = zlib.NewWriterLevel(compressed, level) + default: + s := strconv.Itoa(int(algo)) + err = errors.UnsupportedError("Unsupported compression algorithm: " + s) + } + if err != nil { + return + } + + literaldata = compressedWriteCloser{compressed, compressor} + + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/compressed_test.go b/vendor/golang.org/x/crypto/openpgp/packet/compressed_test.go new file mode 100644 index 0000000..cb2d70b --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/compressed_test.go @@ -0,0 +1,41 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "io" + "io/ioutil" + "testing" +) + +func TestCompressed(t *testing.T) { + packet, err := Read(readerFromHex(compressedHex)) + if err != nil { + t.Errorf("failed to read Compressed: %s", err) + return + } + + c, ok := packet.(*Compressed) + if !ok { + t.Error("didn't find Compressed packet") + return + } + + contents, err := ioutil.ReadAll(c.Body) + if err != nil && err != io.EOF { + t.Error(err) + return + } + + expected, _ := hex.DecodeString(compressedExpectedHex) + if !bytes.Equal(expected, contents) { + t.Errorf("got:%x want:%x", contents, expected) + } +} + +const compressedHex = "a3013b2d90c4e02b72e25f727e5e496a5e49b11e1700" +const compressedExpectedHex = "cb1062004d14c8fe636f6e74656e74732e0a" diff --git a/vendor/golang.org/x/crypto/openpgp/packet/config.go b/vendor/golang.org/x/crypto/openpgp/packet/config.go new file mode 100644 index 0000000..c76eecc --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/config.go @@ -0,0 +1,91 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "crypto/rand" + "io" + "time" +) + +// Config collects a number of parameters along with sensible defaults. +// A nil *Config is valid and results in all default values. +type Config struct { + // Rand provides the source of entropy. + // If nil, the crypto/rand Reader is used. + Rand io.Reader + // DefaultHash is the default hash function to be used. + // If zero, SHA-256 is used. + DefaultHash crypto.Hash + // DefaultCipher is the cipher to be used. + // If zero, AES-128 is used. + DefaultCipher CipherFunction + // Time returns the current time as the number of seconds since the + // epoch. If Time is nil, time.Now is used. + Time func() time.Time + // DefaultCompressionAlgo is the compression algorithm to be + // applied to the plaintext before encryption. If zero, no + // compression is done. + DefaultCompressionAlgo CompressionAlgo + // CompressionConfig configures the compression settings. + CompressionConfig *CompressionConfig + // S2KCount is only used for symmetric encryption. It + // determines the strength of the passphrase stretching when + // the said passphrase is hashed to produce a key. S2KCount + // should be between 1024 and 65011712, inclusive. If Config + // is nil or S2KCount is 0, the value 65536 used. Not all + // values in the above range can be represented. S2KCount will + // be rounded up to the next representable value if it cannot + // be encoded exactly. When set, it is strongly encrouraged to + // use a value that is at least 65536. See RFC 4880 Section + // 3.7.1.3. + S2KCount int + // RSABits is the number of bits in new RSA keys made with NewEntity. + // If zero, then 2048 bit keys are created. + RSABits int +} + +func (c *Config) Random() io.Reader { + if c == nil || c.Rand == nil { + return rand.Reader + } + return c.Rand +} + +func (c *Config) Hash() crypto.Hash { + if c == nil || uint(c.DefaultHash) == 0 { + return crypto.SHA256 + } + return c.DefaultHash +} + +func (c *Config) Cipher() CipherFunction { + if c == nil || uint8(c.DefaultCipher) == 0 { + return CipherAES128 + } + return c.DefaultCipher +} + +func (c *Config) Now() time.Time { + if c == nil || c.Time == nil { + return time.Now() + } + return c.Time() +} + +func (c *Config) Compression() CompressionAlgo { + if c == nil { + return CompressionNone + } + return c.DefaultCompressionAlgo +} + +func (c *Config) PasswordHashIterations() int { + if c == nil || c.S2KCount == 0 { + return 0 + } + return c.S2KCount +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go new file mode 100644 index 0000000..266840d --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go @@ -0,0 +1,199 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto/rsa" + "encoding/binary" + "io" + "math/big" + "strconv" + + "golang.org/x/crypto/openpgp/elgamal" + "golang.org/x/crypto/openpgp/errors" +) + +const encryptedKeyVersion = 3 + +// EncryptedKey represents a public-key encrypted session key. See RFC 4880, +// section 5.1. +type EncryptedKey struct { + KeyId uint64 + Algo PublicKeyAlgorithm + CipherFunc CipherFunction // only valid after a successful Decrypt + Key []byte // only valid after a successful Decrypt + + encryptedMPI1, encryptedMPI2 parsedMPI +} + +func (e *EncryptedKey) parse(r io.Reader) (err error) { + var buf [10]byte + _, err = readFull(r, buf[:]) + if err != nil { + return + } + if buf[0] != encryptedKeyVersion { + return errors.UnsupportedError("unknown EncryptedKey version " + strconv.Itoa(int(buf[0]))) + } + e.KeyId = binary.BigEndian.Uint64(buf[1:9]) + e.Algo = PublicKeyAlgorithm(buf[9]) + switch e.Algo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + e.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r) + case PubKeyAlgoElGamal: + e.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r) + if err != nil { + return + } + e.encryptedMPI2.bytes, e.encryptedMPI2.bitLength, err = readMPI(r) + } + _, err = consumeAll(r) + return +} + +func checksumKeyMaterial(key []byte) uint16 { + var checksum uint16 + for _, v := range key { + checksum += uint16(v) + } + return checksum +} + +// Decrypt decrypts an encrypted session key with the given private key. The +// private key must have been decrypted first. +// If config is nil, sensible defaults will be used. +func (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error { + var err error + var b []byte + + // TODO(agl): use session key decryption routines here to avoid + // padding oracle attacks. + switch priv.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + b, err = rsa.DecryptPKCS1v15(config.Random(), priv.PrivateKey.(*rsa.PrivateKey), e.encryptedMPI1.bytes) + case PubKeyAlgoElGamal: + c1 := new(big.Int).SetBytes(e.encryptedMPI1.bytes) + c2 := new(big.Int).SetBytes(e.encryptedMPI2.bytes) + b, err = elgamal.Decrypt(priv.PrivateKey.(*elgamal.PrivateKey), c1, c2) + default: + err = errors.InvalidArgumentError("cannot decrypted encrypted session key with private key of type " + strconv.Itoa(int(priv.PubKeyAlgo))) + } + + if err != nil { + return err + } + + e.CipherFunc = CipherFunction(b[0]) + e.Key = b[1 : len(b)-2] + expectedChecksum := uint16(b[len(b)-2])<<8 | uint16(b[len(b)-1]) + checksum := checksumKeyMaterial(e.Key) + if checksum != expectedChecksum { + return errors.StructuralError("EncryptedKey checksum incorrect") + } + + return nil +} + +// Serialize writes the encrypted key packet, e, to w. +func (e *EncryptedKey) Serialize(w io.Writer) error { + var mpiLen int + switch e.Algo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + mpiLen = 2 + len(e.encryptedMPI1.bytes) + case PubKeyAlgoElGamal: + mpiLen = 2 + len(e.encryptedMPI1.bytes) + 2 + len(e.encryptedMPI2.bytes) + default: + return errors.InvalidArgumentError("don't know how to serialize encrypted key type " + strconv.Itoa(int(e.Algo))) + } + + serializeHeader(w, packetTypeEncryptedKey, 1 /* version */ +8 /* key id */ +1 /* algo */ +mpiLen) + + w.Write([]byte{encryptedKeyVersion}) + binary.Write(w, binary.BigEndian, e.KeyId) + w.Write([]byte{byte(e.Algo)}) + + switch e.Algo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + writeMPIs(w, e.encryptedMPI1) + case PubKeyAlgoElGamal: + writeMPIs(w, e.encryptedMPI1, e.encryptedMPI2) + default: + panic("internal error") + } + + return nil +} + +// SerializeEncryptedKey serializes an encrypted key packet to w that contains +// key, encrypted to pub. +// If config is nil, sensible defaults will be used. +func SerializeEncryptedKey(w io.Writer, pub *PublicKey, cipherFunc CipherFunction, key []byte, config *Config) error { + var buf [10]byte + buf[0] = encryptedKeyVersion + binary.BigEndian.PutUint64(buf[1:9], pub.KeyId) + buf[9] = byte(pub.PubKeyAlgo) + + keyBlock := make([]byte, 1 /* cipher type */ +len(key)+2 /* checksum */) + keyBlock[0] = byte(cipherFunc) + copy(keyBlock[1:], key) + checksum := checksumKeyMaterial(key) + keyBlock[1+len(key)] = byte(checksum >> 8) + keyBlock[1+len(key)+1] = byte(checksum) + + switch pub.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + return serializeEncryptedKeyRSA(w, config.Random(), buf, pub.PublicKey.(*rsa.PublicKey), keyBlock) + case PubKeyAlgoElGamal: + return serializeEncryptedKeyElGamal(w, config.Random(), buf, pub.PublicKey.(*elgamal.PublicKey), keyBlock) + case PubKeyAlgoDSA, PubKeyAlgoRSASignOnly: + return errors.InvalidArgumentError("cannot encrypt to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo))) + } + + return errors.UnsupportedError("encrypting a key to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo))) +} + +func serializeEncryptedKeyRSA(w io.Writer, rand io.Reader, header [10]byte, pub *rsa.PublicKey, keyBlock []byte) error { + cipherText, err := rsa.EncryptPKCS1v15(rand, pub, keyBlock) + if err != nil { + return errors.InvalidArgumentError("RSA encryption failed: " + err.Error()) + } + + packetLen := 10 /* header length */ + 2 /* mpi size */ + len(cipherText) + + err = serializeHeader(w, packetTypeEncryptedKey, packetLen) + if err != nil { + return err + } + _, err = w.Write(header[:]) + if err != nil { + return err + } + return writeMPI(w, 8*uint16(len(cipherText)), cipherText) +} + +func serializeEncryptedKeyElGamal(w io.Writer, rand io.Reader, header [10]byte, pub *elgamal.PublicKey, keyBlock []byte) error { + c1, c2, err := elgamal.Encrypt(rand, pub, keyBlock) + if err != nil { + return errors.InvalidArgumentError("ElGamal encryption failed: " + err.Error()) + } + + packetLen := 10 /* header length */ + packetLen += 2 /* mpi size */ + (c1.BitLen()+7)/8 + packetLen += 2 /* mpi size */ + (c2.BitLen()+7)/8 + + err = serializeHeader(w, packetTypeEncryptedKey, packetLen) + if err != nil { + return err + } + _, err = w.Write(header[:]) + if err != nil { + return err + } + err = writeBig(w, c1) + if err != nil { + return err + } + return writeBig(w, c2) +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go new file mode 100644 index 0000000..fee14cf --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go @@ -0,0 +1,146 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto/rsa" + "encoding/hex" + "fmt" + "math/big" + "testing" +) + +func bigFromBase10(s string) *big.Int { + b, ok := new(big.Int).SetString(s, 10) + if !ok { + panic("bigFromBase10 failed") + } + return b +} + +var encryptedKeyPub = rsa.PublicKey{ + E: 65537, + N: bigFromBase10("115804063926007623305902631768113868327816898845124614648849934718568541074358183759250136204762053879858102352159854352727097033322663029387610959884180306668628526686121021235757016368038585212410610742029286439607686208110250133174279811431933746643015923132833417396844716207301518956640020862630546868823"), +} + +var encryptedKeyRSAPriv = &rsa.PrivateKey{ + PublicKey: encryptedKeyPub, + D: bigFromBase10("32355588668219869544751561565313228297765464314098552250409557267371233892496951383426602439009993875125222579159850054973310859166139474359774543943714622292329487391199285040721944491839695981199720170366763547754915493640685849961780092241140181198779299712578774460837139360803883139311171713302987058393"), +} + +var encryptedKeyPriv = &PrivateKey{ + PublicKey: PublicKey{ + PubKeyAlgo: PubKeyAlgoRSA, + }, + PrivateKey: encryptedKeyRSAPriv, +} + +func TestDecryptingEncryptedKey(t *testing.T) { + const encryptedKeyHex = "c18c032a67d68660df41c70104005789d0de26b6a50c985a02a13131ca829c413a35d0e6fa8d6842599252162808ac7439c72151c8c6183e76923fe3299301414d0c25a2f06a2257db3839e7df0ec964773f6e4c4ac7ff3b48c444237166dd46ba8ff443a5410dc670cb486672fdbe7c9dfafb75b4fea83af3a204fe2a7dfa86bd20122b4f3d2646cbeecb8f7be8" + const expectedKeyHex = "d930363f7e0308c333b9618617ea728963d8df993665ae7be1092d4926fd864b" + + p, err := Read(readerFromHex(encryptedKeyHex)) + if err != nil { + t.Errorf("error from Read: %s", err) + return + } + ek, ok := p.(*EncryptedKey) + if !ok { + t.Errorf("didn't parse an EncryptedKey, got %#v", p) + return + } + + if ek.KeyId != 0x2a67d68660df41c7 || ek.Algo != PubKeyAlgoRSA { + t.Errorf("unexpected EncryptedKey contents: %#v", ek) + return + } + + err = ek.Decrypt(encryptedKeyPriv, nil) + if err != nil { + t.Errorf("error from Decrypt: %s", err) + return + } + + if ek.CipherFunc != CipherAES256 { + t.Errorf("unexpected EncryptedKey contents: %#v", ek) + return + } + + keyHex := fmt.Sprintf("%x", ek.Key) + if keyHex != expectedKeyHex { + t.Errorf("bad key, got %s want %x", keyHex, expectedKeyHex) + } +} + +func TestEncryptingEncryptedKey(t *testing.T) { + key := []byte{1, 2, 3, 4} + const expectedKeyHex = "01020304" + const keyId = 42 + + pub := &PublicKey{ + PublicKey: &encryptedKeyPub, + KeyId: keyId, + PubKeyAlgo: PubKeyAlgoRSAEncryptOnly, + } + + buf := new(bytes.Buffer) + err := SerializeEncryptedKey(buf, pub, CipherAES128, key, nil) + if err != nil { + t.Errorf("error writing encrypted key packet: %s", err) + } + + p, err := Read(buf) + if err != nil { + t.Errorf("error from Read: %s", err) + return + } + ek, ok := p.(*EncryptedKey) + if !ok { + t.Errorf("didn't parse an EncryptedKey, got %#v", p) + return + } + + if ek.KeyId != keyId || ek.Algo != PubKeyAlgoRSAEncryptOnly { + t.Errorf("unexpected EncryptedKey contents: %#v", ek) + return + } + + err = ek.Decrypt(encryptedKeyPriv, nil) + if err != nil { + t.Errorf("error from Decrypt: %s", err) + return + } + + if ek.CipherFunc != CipherAES128 { + t.Errorf("unexpected EncryptedKey contents: %#v", ek) + return + } + + keyHex := fmt.Sprintf("%x", ek.Key) + if keyHex != expectedKeyHex { + t.Errorf("bad key, got %s want %x", keyHex, expectedKeyHex) + } +} + +func TestSerializingEncryptedKey(t *testing.T) { + const encryptedKeyHex = "c18c032a67d68660df41c70104005789d0de26b6a50c985a02a13131ca829c413a35d0e6fa8d6842599252162808ac7439c72151c8c6183e76923fe3299301414d0c25a2f06a2257db3839e7df0ec964773f6e4c4ac7ff3b48c444237166dd46ba8ff443a5410dc670cb486672fdbe7c9dfafb75b4fea83af3a204fe2a7dfa86bd20122b4f3d2646cbeecb8f7be8" + + p, err := Read(readerFromHex(encryptedKeyHex)) + if err != nil { + t.Fatalf("error from Read: %s", err) + } + ek, ok := p.(*EncryptedKey) + if !ok { + t.Fatalf("didn't parse an EncryptedKey, got %#v", p) + } + + var buf bytes.Buffer + ek.Serialize(&buf) + + if bufHex := hex.EncodeToString(buf.Bytes()); bufHex != encryptedKeyHex { + t.Fatalf("serialization of encrypted key differed from original. Original was %s, but reserialized as %s", encryptedKeyHex, bufHex) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/literal.go b/vendor/golang.org/x/crypto/openpgp/packet/literal.go new file mode 100644 index 0000000..1a9ec6e --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/literal.go @@ -0,0 +1,89 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "encoding/binary" + "io" +) + +// LiteralData represents an encrypted file. See RFC 4880, section 5.9. +type LiteralData struct { + IsBinary bool + FileName string + Time uint32 // Unix epoch time. Either creation time or modification time. 0 means undefined. + Body io.Reader +} + +// ForEyesOnly returns whether the contents of the LiteralData have been marked +// as especially sensitive. +func (l *LiteralData) ForEyesOnly() bool { + return l.FileName == "_CONSOLE" +} + +func (l *LiteralData) parse(r io.Reader) (err error) { + var buf [256]byte + + _, err = readFull(r, buf[:2]) + if err != nil { + return + } + + l.IsBinary = buf[0] == 'b' + fileNameLen := int(buf[1]) + + _, err = readFull(r, buf[:fileNameLen]) + if err != nil { + return + } + + l.FileName = string(buf[:fileNameLen]) + + _, err = readFull(r, buf[:4]) + if err != nil { + return + } + + l.Time = binary.BigEndian.Uint32(buf[:4]) + l.Body = r + return +} + +// SerializeLiteral serializes a literal data packet to w and returns a +// WriteCloser to which the data itself can be written and which MUST be closed +// on completion. The fileName is truncated to 255 bytes. +func SerializeLiteral(w io.WriteCloser, isBinary bool, fileName string, time uint32) (plaintext io.WriteCloser, err error) { + var buf [4]byte + buf[0] = 't' + if isBinary { + buf[0] = 'b' + } + if len(fileName) > 255 { + fileName = fileName[:255] + } + buf[1] = byte(len(fileName)) + + inner, err := serializeStreamHeader(w, packetTypeLiteralData) + if err != nil { + return + } + + _, err = inner.Write(buf[:2]) + if err != nil { + return + } + _, err = inner.Write([]byte(fileName)) + if err != nil { + return + } + binary.BigEndian.PutUint32(buf[:], time) + _, err = inner.Write(buf[:]) + if err != nil { + return + } + + plaintext = inner + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/ocfb.go b/vendor/golang.org/x/crypto/openpgp/packet/ocfb.go new file mode 100644 index 0000000..ce2a33a --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/ocfb.go @@ -0,0 +1,143 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// OpenPGP CFB Mode. http://tools.ietf.org/html/rfc4880#section-13.9 + +package packet + +import ( + "crypto/cipher" +) + +type ocfbEncrypter struct { + b cipher.Block + fre []byte + outUsed int +} + +// An OCFBResyncOption determines if the "resynchronization step" of OCFB is +// performed. +type OCFBResyncOption bool + +const ( + OCFBResync OCFBResyncOption = true + OCFBNoResync OCFBResyncOption = false +) + +// NewOCFBEncrypter returns a cipher.Stream which encrypts data with OpenPGP's +// cipher feedback mode using the given cipher.Block, and an initial amount of +// ciphertext. randData must be random bytes and be the same length as the +// cipher.Block's block size. Resync determines if the "resynchronization step" +// from RFC 4880, 13.9 step 7 is performed. Different parts of OpenPGP vary on +// this point. +func NewOCFBEncrypter(block cipher.Block, randData []byte, resync OCFBResyncOption) (cipher.Stream, []byte) { + blockSize := block.BlockSize() + if len(randData) != blockSize { + return nil, nil + } + + x := &ocfbEncrypter{ + b: block, + fre: make([]byte, blockSize), + outUsed: 0, + } + prefix := make([]byte, blockSize+2) + + block.Encrypt(x.fre, x.fre) + for i := 0; i < blockSize; i++ { + prefix[i] = randData[i] ^ x.fre[i] + } + + block.Encrypt(x.fre, prefix[:blockSize]) + prefix[blockSize] = x.fre[0] ^ randData[blockSize-2] + prefix[blockSize+1] = x.fre[1] ^ randData[blockSize-1] + + if resync { + block.Encrypt(x.fre, prefix[2:]) + } else { + x.fre[0] = prefix[blockSize] + x.fre[1] = prefix[blockSize+1] + x.outUsed = 2 + } + return x, prefix +} + +func (x *ocfbEncrypter) XORKeyStream(dst, src []byte) { + for i := 0; i < len(src); i++ { + if x.outUsed == len(x.fre) { + x.b.Encrypt(x.fre, x.fre) + x.outUsed = 0 + } + + x.fre[x.outUsed] ^= src[i] + dst[i] = x.fre[x.outUsed] + x.outUsed++ + } +} + +type ocfbDecrypter struct { + b cipher.Block + fre []byte + outUsed int +} + +// NewOCFBDecrypter returns a cipher.Stream which decrypts data with OpenPGP's +// cipher feedback mode using the given cipher.Block. Prefix must be the first +// blockSize + 2 bytes of the ciphertext, where blockSize is the cipher.Block's +// block size. If an incorrect key is detected then nil is returned. On +// successful exit, blockSize+2 bytes of decrypted data are written into +// prefix. Resync determines if the "resynchronization step" from RFC 4880, +// 13.9 step 7 is performed. Different parts of OpenPGP vary on this point. +func NewOCFBDecrypter(block cipher.Block, prefix []byte, resync OCFBResyncOption) cipher.Stream { + blockSize := block.BlockSize() + if len(prefix) != blockSize+2 { + return nil + } + + x := &ocfbDecrypter{ + b: block, + fre: make([]byte, blockSize), + outUsed: 0, + } + prefixCopy := make([]byte, len(prefix)) + copy(prefixCopy, prefix) + + block.Encrypt(x.fre, x.fre) + for i := 0; i < blockSize; i++ { + prefixCopy[i] ^= x.fre[i] + } + + block.Encrypt(x.fre, prefix[:blockSize]) + prefixCopy[blockSize] ^= x.fre[0] + prefixCopy[blockSize+1] ^= x.fre[1] + + if prefixCopy[blockSize-2] != prefixCopy[blockSize] || + prefixCopy[blockSize-1] != prefixCopy[blockSize+1] { + return nil + } + + if resync { + block.Encrypt(x.fre, prefix[2:]) + } else { + x.fre[0] = prefix[blockSize] + x.fre[1] = prefix[blockSize+1] + x.outUsed = 2 + } + copy(prefix, prefixCopy) + return x +} + +func (x *ocfbDecrypter) XORKeyStream(dst, src []byte) { + for i := 0; i < len(src); i++ { + if x.outUsed == len(x.fre) { + x.b.Encrypt(x.fre, x.fre) + x.outUsed = 0 + } + + c := src[i] + dst[i] = x.fre[x.outUsed] ^ src[i] + x.fre[x.outUsed] = c + x.outUsed++ + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/ocfb_test.go b/vendor/golang.org/x/crypto/openpgp/packet/ocfb_test.go new file mode 100644 index 0000000..91022c0 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/ocfb_test.go @@ -0,0 +1,46 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto/aes" + "crypto/rand" + "testing" +) + +var commonKey128 = []byte{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c} + +func testOCFB(t *testing.T, resync OCFBResyncOption) { + block, err := aes.NewCipher(commonKey128) + if err != nil { + t.Error(err) + return + } + + plaintext := []byte("this is the plaintext, which is long enough to span several blocks.") + randData := make([]byte, block.BlockSize()) + rand.Reader.Read(randData) + ocfb, prefix := NewOCFBEncrypter(block, randData, resync) + ciphertext := make([]byte, len(plaintext)) + ocfb.XORKeyStream(ciphertext, plaintext) + + ocfbdec := NewOCFBDecrypter(block, prefix, resync) + if ocfbdec == nil { + t.Errorf("NewOCFBDecrypter failed (resync: %t)", resync) + return + } + plaintextCopy := make([]byte, len(plaintext)) + ocfbdec.XORKeyStream(plaintextCopy, ciphertext) + + if !bytes.Equal(plaintextCopy, plaintext) { + t.Errorf("got: %x, want: %x (resync: %t)", plaintextCopy, plaintext, resync) + } +} + +func TestOCFB(t *testing.T) { + testOCFB(t, OCFBNoResync) + testOCFB(t, OCFBResync) +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go b/vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go new file mode 100644 index 0000000..1713503 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go @@ -0,0 +1,73 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "encoding/binary" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" + "io" + "strconv" +) + +// OnePassSignature represents a one-pass signature packet. See RFC 4880, +// section 5.4. +type OnePassSignature struct { + SigType SignatureType + Hash crypto.Hash + PubKeyAlgo PublicKeyAlgorithm + KeyId uint64 + IsLast bool +} + +const onePassSignatureVersion = 3 + +func (ops *OnePassSignature) parse(r io.Reader) (err error) { + var buf [13]byte + + _, err = readFull(r, buf[:]) + if err != nil { + return + } + if buf[0] != onePassSignatureVersion { + err = errors.UnsupportedError("one-pass-signature packet version " + strconv.Itoa(int(buf[0]))) + } + + var ok bool + ops.Hash, ok = s2k.HashIdToHash(buf[2]) + if !ok { + return errors.UnsupportedError("hash function: " + strconv.Itoa(int(buf[2]))) + } + + ops.SigType = SignatureType(buf[1]) + ops.PubKeyAlgo = PublicKeyAlgorithm(buf[3]) + ops.KeyId = binary.BigEndian.Uint64(buf[4:12]) + ops.IsLast = buf[12] != 0 + return +} + +// Serialize marshals the given OnePassSignature to w. +func (ops *OnePassSignature) Serialize(w io.Writer) error { + var buf [13]byte + buf[0] = onePassSignatureVersion + buf[1] = uint8(ops.SigType) + var ok bool + buf[2], ok = s2k.HashToHashId(ops.Hash) + if !ok { + return errors.UnsupportedError("hash type: " + strconv.Itoa(int(ops.Hash))) + } + buf[3] = uint8(ops.PubKeyAlgo) + binary.BigEndian.PutUint64(buf[4:12], ops.KeyId) + if ops.IsLast { + buf[12] = 1 + } + + if err := serializeHeader(w, packetTypeOnePassSignature, len(buf)); err != nil { + return err + } + _, err := w.Write(buf[:]) + return err +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/opaque.go b/vendor/golang.org/x/crypto/openpgp/packet/opaque.go new file mode 100644 index 0000000..456d807 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/opaque.go @@ -0,0 +1,162 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "io" + "io/ioutil" + + "golang.org/x/crypto/openpgp/errors" +) + +// OpaquePacket represents an OpenPGP packet as raw, unparsed data. This is +// useful for splitting and storing the original packet contents separately, +// handling unsupported packet types or accessing parts of the packet not yet +// implemented by this package. +type OpaquePacket struct { + // Packet type + Tag uint8 + // Reason why the packet was parsed opaquely + Reason error + // Binary contents of the packet data + Contents []byte +} + +func (op *OpaquePacket) parse(r io.Reader) (err error) { + op.Contents, err = ioutil.ReadAll(r) + return +} + +// Serialize marshals the packet to a writer in its original form, including +// the packet header. +func (op *OpaquePacket) Serialize(w io.Writer) (err error) { + err = serializeHeader(w, packetType(op.Tag), len(op.Contents)) + if err == nil { + _, err = w.Write(op.Contents) + } + return +} + +// Parse attempts to parse the opaque contents into a structure supported by +// this package. If the packet is not known then the result will be another +// OpaquePacket. +func (op *OpaquePacket) Parse() (p Packet, err error) { + hdr := bytes.NewBuffer(nil) + err = serializeHeader(hdr, packetType(op.Tag), len(op.Contents)) + if err != nil { + op.Reason = err + return op, err + } + p, err = Read(io.MultiReader(hdr, bytes.NewBuffer(op.Contents))) + if err != nil { + op.Reason = err + p = op + } + return +} + +// OpaqueReader reads OpaquePackets from an io.Reader. +type OpaqueReader struct { + r io.Reader +} + +func NewOpaqueReader(r io.Reader) *OpaqueReader { + return &OpaqueReader{r: r} +} + +// Read the next OpaquePacket. +func (or *OpaqueReader) Next() (op *OpaquePacket, err error) { + tag, _, contents, err := readHeader(or.r) + if err != nil { + return + } + op = &OpaquePacket{Tag: uint8(tag), Reason: err} + err = op.parse(contents) + if err != nil { + consumeAll(contents) + } + return +} + +// OpaqueSubpacket represents an unparsed OpenPGP subpacket, +// as found in signature and user attribute packets. +type OpaqueSubpacket struct { + SubType uint8 + Contents []byte +} + +// OpaqueSubpackets extracts opaque, unparsed OpenPGP subpackets from +// their byte representation. +func OpaqueSubpackets(contents []byte) (result []*OpaqueSubpacket, err error) { + var ( + subHeaderLen int + subPacket *OpaqueSubpacket + ) + for len(contents) > 0 { + subHeaderLen, subPacket, err = nextSubpacket(contents) + if err != nil { + break + } + result = append(result, subPacket) + contents = contents[subHeaderLen+len(subPacket.Contents):] + } + return +} + +func nextSubpacket(contents []byte) (subHeaderLen int, subPacket *OpaqueSubpacket, err error) { + // RFC 4880, section 5.2.3.1 + var subLen uint32 + if len(contents) < 1 { + goto Truncated + } + subPacket = &OpaqueSubpacket{} + switch { + case contents[0] < 192: + subHeaderLen = 2 // 1 length byte, 1 subtype byte + if len(contents) < subHeaderLen { + goto Truncated + } + subLen = uint32(contents[0]) + contents = contents[1:] + case contents[0] < 255: + subHeaderLen = 3 // 2 length bytes, 1 subtype + if len(contents) < subHeaderLen { + goto Truncated + } + subLen = uint32(contents[0]-192)<<8 + uint32(contents[1]) + 192 + contents = contents[2:] + default: + subHeaderLen = 6 // 5 length bytes, 1 subtype + if len(contents) < subHeaderLen { + goto Truncated + } + subLen = uint32(contents[1])<<24 | + uint32(contents[2])<<16 | + uint32(contents[3])<<8 | + uint32(contents[4]) + contents = contents[5:] + } + if subLen > uint32(len(contents)) || subLen == 0 { + goto Truncated + } + subPacket.SubType = contents[0] + subPacket.Contents = contents[1:subLen] + return +Truncated: + err = errors.StructuralError("subpacket truncated") + return +} + +func (osp *OpaqueSubpacket) Serialize(w io.Writer) (err error) { + buf := make([]byte, 6) + n := serializeSubpacketLength(buf, len(osp.Contents)+1) + buf[n] = osp.SubType + if _, err = w.Write(buf[:n+1]); err != nil { + return + } + _, err = w.Write(osp.Contents) + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/opaque_test.go b/vendor/golang.org/x/crypto/openpgp/packet/opaque_test.go new file mode 100644 index 0000000..f27bbfe --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/opaque_test.go @@ -0,0 +1,67 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "io" + "testing" +) + +// Test packet.Read error handling in OpaquePacket.Parse, +// which attempts to re-read an OpaquePacket as a supported +// Packet type. +func TestOpaqueParseReason(t *testing.T) { + buf, err := hex.DecodeString(UnsupportedKeyHex) + if err != nil { + t.Fatal(err) + } + or := NewOpaqueReader(bytes.NewBuffer(buf)) + count := 0 + badPackets := 0 + var uid *UserId + for { + op, err := or.Next() + if err == io.EOF { + break + } else if err != nil { + t.Errorf("#%d: opaque read error: %v", count, err) + break + } + // try to parse opaque packet + p, err := op.Parse() + switch pkt := p.(type) { + case *UserId: + uid = pkt + case *OpaquePacket: + // If an OpaquePacket can't re-parse, packet.Read + // certainly had its reasons. + if pkt.Reason == nil { + t.Errorf("#%d: opaque packet, no reason", count) + } else { + badPackets++ + } + } + count++ + } + + const expectedBad = 3 + // Test post-conditions, make sure we actually parsed packets as expected. + if badPackets != expectedBad { + t.Errorf("unexpected # unparseable packets: %d (want %d)", badPackets, expectedBad) + } + if uid == nil { + t.Errorf("failed to find expected UID in unsupported keyring") + } else if uid.Id != "Armin M. Warda " { + t.Errorf("unexpected UID: %v", uid.Id) + } +} + +// This key material has public key and signature packet versions modified to +// an unsupported value (1), so that trying to parse the OpaquePacket to +// a typed packet will get an error. It also contains a GnuPG trust packet. +// (Created with: od -An -t x1 pubring.gpg | xargs | sed 's/ //g') +const UnsupportedKeyHex = `988d012e7a18a20000010400d6ac00d92b89c1f4396c243abb9b76d2e9673ad63483291fed88e22b82e255e441c078c6abbbf7d2d195e50b62eeaa915b85b0ec20c225ce2c64c167cacb6e711daf2e45da4a8356a059b8160e3b3628ac0dd8437b31f06d53d6e8ea4214d4a26406a6b63e1001406ef23e0bb3069fac9a99a91f77dfafd5de0f188a5da5e3c9000511b42741726d696e204d2e205761726461203c7761726461406e657068696c696d2e727568722e64653e8900950105102e8936c705d1eb399e58489901013f0e03ff5a0c4f421e34fcfa388129166420c08cd76987bcdec6f01bd0271459a85cc22048820dd4e44ac2c7d23908d540f54facf1b36b0d9c20488781ce9dca856531e76e2e846826e9951338020a03a09b57aa5faa82e9267458bd76105399885ac35af7dc1cbb6aaed7c39e1039f3b5beda2c0e916bd38560509bab81235d1a0ead83b0020000` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet.go b/vendor/golang.org/x/crypto/openpgp/packet/packet.go new file mode 100644 index 0000000..e2bde11 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/packet.go @@ -0,0 +1,539 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package packet implements parsing and serialization of OpenPGP packets, as +// specified in RFC 4880. +package packet // import "golang.org/x/crypto/openpgp/packet" + +import ( + "bufio" + "crypto/aes" + "crypto/cipher" + "crypto/des" + "golang.org/x/crypto/cast5" + "golang.org/x/crypto/openpgp/errors" + "io" + "math/big" +) + +// readFull is the same as io.ReadFull except that reading zero bytes returns +// ErrUnexpectedEOF rather than EOF. +func readFull(r io.Reader, buf []byte) (n int, err error) { + n, err = io.ReadFull(r, buf) + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return +} + +// readLength reads an OpenPGP length from r. See RFC 4880, section 4.2.2. +func readLength(r io.Reader) (length int64, isPartial bool, err error) { + var buf [4]byte + _, err = readFull(r, buf[:1]) + if err != nil { + return + } + switch { + case buf[0] < 192: + length = int64(buf[0]) + case buf[0] < 224: + length = int64(buf[0]-192) << 8 + _, err = readFull(r, buf[0:1]) + if err != nil { + return + } + length += int64(buf[0]) + 192 + case buf[0] < 255: + length = int64(1) << (buf[0] & 0x1f) + isPartial = true + default: + _, err = readFull(r, buf[0:4]) + if err != nil { + return + } + length = int64(buf[0])<<24 | + int64(buf[1])<<16 | + int64(buf[2])<<8 | + int64(buf[3]) + } + return +} + +// partialLengthReader wraps an io.Reader and handles OpenPGP partial lengths. +// The continuation lengths are parsed and removed from the stream and EOF is +// returned at the end of the packet. See RFC 4880, section 4.2.2.4. +type partialLengthReader struct { + r io.Reader + remaining int64 + isPartial bool +} + +func (r *partialLengthReader) Read(p []byte) (n int, err error) { + for r.remaining == 0 { + if !r.isPartial { + return 0, io.EOF + } + r.remaining, r.isPartial, err = readLength(r.r) + if err != nil { + return 0, err + } + } + + toRead := int64(len(p)) + if toRead > r.remaining { + toRead = r.remaining + } + + n, err = r.r.Read(p[:int(toRead)]) + r.remaining -= int64(n) + if n < int(toRead) && err == io.EOF { + err = io.ErrUnexpectedEOF + } + return +} + +// partialLengthWriter writes a stream of data using OpenPGP partial lengths. +// See RFC 4880, section 4.2.2.4. +type partialLengthWriter struct { + w io.WriteCloser + lengthByte [1]byte +} + +func (w *partialLengthWriter) Write(p []byte) (n int, err error) { + for len(p) > 0 { + for power := uint(14); power < 32; power-- { + l := 1 << power + if len(p) >= l { + w.lengthByte[0] = 224 + uint8(power) + _, err = w.w.Write(w.lengthByte[:]) + if err != nil { + return + } + var m int + m, err = w.w.Write(p[:l]) + n += m + if err != nil { + return + } + p = p[l:] + break + } + } + } + return +} + +func (w *partialLengthWriter) Close() error { + w.lengthByte[0] = 0 + _, err := w.w.Write(w.lengthByte[:]) + if err != nil { + return err + } + return w.w.Close() +} + +// A spanReader is an io.LimitReader, but it returns ErrUnexpectedEOF if the +// underlying Reader returns EOF before the limit has been reached. +type spanReader struct { + r io.Reader + n int64 +} + +func (l *spanReader) Read(p []byte) (n int, err error) { + if l.n <= 0 { + return 0, io.EOF + } + if int64(len(p)) > l.n { + p = p[0:l.n] + } + n, err = l.r.Read(p) + l.n -= int64(n) + if l.n > 0 && err == io.EOF { + err = io.ErrUnexpectedEOF + } + return +} + +// readHeader parses a packet header and returns an io.Reader which will return +// the contents of the packet. See RFC 4880, section 4.2. +func readHeader(r io.Reader) (tag packetType, length int64, contents io.Reader, err error) { + var buf [4]byte + _, err = io.ReadFull(r, buf[:1]) + if err != nil { + return + } + if buf[0]&0x80 == 0 { + err = errors.StructuralError("tag byte does not have MSB set") + return + } + if buf[0]&0x40 == 0 { + // Old format packet + tag = packetType((buf[0] & 0x3f) >> 2) + lengthType := buf[0] & 3 + if lengthType == 3 { + length = -1 + contents = r + return + } + lengthBytes := 1 << lengthType + _, err = readFull(r, buf[0:lengthBytes]) + if err != nil { + return + } + for i := 0; i < lengthBytes; i++ { + length <<= 8 + length |= int64(buf[i]) + } + contents = &spanReader{r, length} + return + } + + // New format packet + tag = packetType(buf[0] & 0x3f) + length, isPartial, err := readLength(r) + if err != nil { + return + } + if isPartial { + contents = &partialLengthReader{ + remaining: length, + isPartial: true, + r: r, + } + length = -1 + } else { + contents = &spanReader{r, length} + } + return +} + +// serializeHeader writes an OpenPGP packet header to w. See RFC 4880, section +// 4.2. +func serializeHeader(w io.Writer, ptype packetType, length int) (err error) { + var buf [6]byte + var n int + + buf[0] = 0x80 | 0x40 | byte(ptype) + if length < 192 { + buf[1] = byte(length) + n = 2 + } else if length < 8384 { + length -= 192 + buf[1] = 192 + byte(length>>8) + buf[2] = byte(length) + n = 3 + } else { + buf[1] = 255 + buf[2] = byte(length >> 24) + buf[3] = byte(length >> 16) + buf[4] = byte(length >> 8) + buf[5] = byte(length) + n = 6 + } + + _, err = w.Write(buf[:n]) + return +} + +// serializeStreamHeader writes an OpenPGP packet header to w where the +// length of the packet is unknown. It returns a io.WriteCloser which can be +// used to write the contents of the packet. See RFC 4880, section 4.2. +func serializeStreamHeader(w io.WriteCloser, ptype packetType) (out io.WriteCloser, err error) { + var buf [1]byte + buf[0] = 0x80 | 0x40 | byte(ptype) + _, err = w.Write(buf[:]) + if err != nil { + return + } + out = &partialLengthWriter{w: w} + return +} + +// Packet represents an OpenPGP packet. Users are expected to try casting +// instances of this interface to specific packet types. +type Packet interface { + parse(io.Reader) error +} + +// consumeAll reads from the given Reader until error, returning the number of +// bytes read. +func consumeAll(r io.Reader) (n int64, err error) { + var m int + var buf [1024]byte + + for { + m, err = r.Read(buf[:]) + n += int64(m) + if err == io.EOF { + err = nil + return + } + if err != nil { + return + } + } + + panic("unreachable") +} + +// packetType represents the numeric ids of the different OpenPGP packet types. See +// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-2 +type packetType uint8 + +const ( + packetTypeEncryptedKey packetType = 1 + packetTypeSignature packetType = 2 + packetTypeSymmetricKeyEncrypted packetType = 3 + packetTypeOnePassSignature packetType = 4 + packetTypePrivateKey packetType = 5 + packetTypePublicKey packetType = 6 + packetTypePrivateSubkey packetType = 7 + packetTypeCompressed packetType = 8 + packetTypeSymmetricallyEncrypted packetType = 9 + packetTypeLiteralData packetType = 11 + packetTypeUserId packetType = 13 + packetTypePublicSubkey packetType = 14 + packetTypeUserAttribute packetType = 17 + packetTypeSymmetricallyEncryptedMDC packetType = 18 +) + +// peekVersion detects the version of a public key packet about to +// be read. A bufio.Reader at the original position of the io.Reader +// is returned. +func peekVersion(r io.Reader) (bufr *bufio.Reader, ver byte, err error) { + bufr = bufio.NewReader(r) + var verBuf []byte + if verBuf, err = bufr.Peek(1); err != nil { + return + } + ver = verBuf[0] + return +} + +// Read reads a single OpenPGP packet from the given io.Reader. If there is an +// error parsing a packet, the whole packet is consumed from the input. +func Read(r io.Reader) (p Packet, err error) { + tag, _, contents, err := readHeader(r) + if err != nil { + return + } + + switch tag { + case packetTypeEncryptedKey: + p = new(EncryptedKey) + case packetTypeSignature: + var version byte + // Detect signature version + if contents, version, err = peekVersion(contents); err != nil { + return + } + if version < 4 { + p = new(SignatureV3) + } else { + p = new(Signature) + } + case packetTypeSymmetricKeyEncrypted: + p = new(SymmetricKeyEncrypted) + case packetTypeOnePassSignature: + p = new(OnePassSignature) + case packetTypePrivateKey, packetTypePrivateSubkey: + pk := new(PrivateKey) + if tag == packetTypePrivateSubkey { + pk.IsSubkey = true + } + p = pk + case packetTypePublicKey, packetTypePublicSubkey: + var version byte + if contents, version, err = peekVersion(contents); err != nil { + return + } + isSubkey := tag == packetTypePublicSubkey + if version < 4 { + p = &PublicKeyV3{IsSubkey: isSubkey} + } else { + p = &PublicKey{IsSubkey: isSubkey} + } + case packetTypeCompressed: + p = new(Compressed) + case packetTypeSymmetricallyEncrypted: + p = new(SymmetricallyEncrypted) + case packetTypeLiteralData: + p = new(LiteralData) + case packetTypeUserId: + p = new(UserId) + case packetTypeUserAttribute: + p = new(UserAttribute) + case packetTypeSymmetricallyEncryptedMDC: + se := new(SymmetricallyEncrypted) + se.MDC = true + p = se + default: + err = errors.UnknownPacketTypeError(tag) + } + if p != nil { + err = p.parse(contents) + } + if err != nil { + consumeAll(contents) + } + return +} + +// SignatureType represents the different semantic meanings of an OpenPGP +// signature. See RFC 4880, section 5.2.1. +type SignatureType uint8 + +const ( + SigTypeBinary SignatureType = 0 + SigTypeText = 1 + SigTypeGenericCert = 0x10 + SigTypePersonaCert = 0x11 + SigTypeCasualCert = 0x12 + SigTypePositiveCert = 0x13 + SigTypeSubkeyBinding = 0x18 + SigTypePrimaryKeyBinding = 0x19 + SigTypeDirectSignature = 0x1F + SigTypeKeyRevocation = 0x20 + SigTypeSubkeyRevocation = 0x28 +) + +// PublicKeyAlgorithm represents the different public key system specified for +// OpenPGP. See +// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-12 +type PublicKeyAlgorithm uint8 + +const ( + PubKeyAlgoRSA PublicKeyAlgorithm = 1 + PubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2 + PubKeyAlgoRSASignOnly PublicKeyAlgorithm = 3 + PubKeyAlgoElGamal PublicKeyAlgorithm = 16 + PubKeyAlgoDSA PublicKeyAlgorithm = 17 + // RFC 6637, Section 5. + PubKeyAlgoECDH PublicKeyAlgorithm = 18 + PubKeyAlgoECDSA PublicKeyAlgorithm = 19 +) + +// CanEncrypt returns true if it's possible to encrypt a message to a public +// key of the given type. +func (pka PublicKeyAlgorithm) CanEncrypt() bool { + switch pka { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal: + return true + } + return false +} + +// CanSign returns true if it's possible for a public key of the given type to +// sign a message. +func (pka PublicKeyAlgorithm) CanSign() bool { + switch pka { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA: + return true + } + return false +} + +// CipherFunction represents the different block ciphers specified for OpenPGP. See +// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-13 +type CipherFunction uint8 + +const ( + Cipher3DES CipherFunction = 2 + CipherCAST5 CipherFunction = 3 + CipherAES128 CipherFunction = 7 + CipherAES192 CipherFunction = 8 + CipherAES256 CipherFunction = 9 +) + +// KeySize returns the key size, in bytes, of cipher. +func (cipher CipherFunction) KeySize() int { + switch cipher { + case Cipher3DES: + return 24 + case CipherCAST5: + return cast5.KeySize + case CipherAES128: + return 16 + case CipherAES192: + return 24 + case CipherAES256: + return 32 + } + return 0 +} + +// blockSize returns the block size, in bytes, of cipher. +func (cipher CipherFunction) blockSize() int { + switch cipher { + case Cipher3DES: + return des.BlockSize + case CipherCAST5: + return 8 + case CipherAES128, CipherAES192, CipherAES256: + return 16 + } + return 0 +} + +// new returns a fresh instance of the given cipher. +func (cipher CipherFunction) new(key []byte) (block cipher.Block) { + switch cipher { + case Cipher3DES: + block, _ = des.NewTripleDESCipher(key) + case CipherCAST5: + block, _ = cast5.NewCipher(key) + case CipherAES128, CipherAES192, CipherAES256: + block, _ = aes.NewCipher(key) + } + return +} + +// readMPI reads a big integer from r. The bit length returned is the bit +// length that was specified in r. This is preserved so that the integer can be +// reserialized exactly. +func readMPI(r io.Reader) (mpi []byte, bitLength uint16, err error) { + var buf [2]byte + _, err = readFull(r, buf[0:]) + if err != nil { + return + } + bitLength = uint16(buf[0])<<8 | uint16(buf[1]) + numBytes := (int(bitLength) + 7) / 8 + mpi = make([]byte, numBytes) + _, err = readFull(r, mpi) + return +} + +// mpiLength returns the length of the given *big.Int when serialized as an +// MPI. +func mpiLength(n *big.Int) (mpiLengthInBytes int) { + mpiLengthInBytes = 2 /* MPI length */ + mpiLengthInBytes += (n.BitLen() + 7) / 8 + return +} + +// writeMPI serializes a big integer to w. +func writeMPI(w io.Writer, bitLength uint16, mpiBytes []byte) (err error) { + _, err = w.Write([]byte{byte(bitLength >> 8), byte(bitLength)}) + if err == nil { + _, err = w.Write(mpiBytes) + } + return +} + +// writeBig serializes a *big.Int to w. +func writeBig(w io.Writer, i *big.Int) error { + return writeMPI(w, uint16(i.BitLen()), i.Bytes()) +} + +// CompressionAlgo Represents the different compression algorithms +// supported by OpenPGP (except for BZIP2, which is not currently +// supported). See Section 9.3 of RFC 4880. +type CompressionAlgo uint8 + +const ( + CompressionNone CompressionAlgo = 0 + CompressionZIP CompressionAlgo = 1 + CompressionZLIB CompressionAlgo = 2 +) diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet_test.go b/vendor/golang.org/x/crypto/openpgp/packet/packet_test.go new file mode 100644 index 0000000..1dab5c3 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/packet_test.go @@ -0,0 +1,255 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "fmt" + "golang.org/x/crypto/openpgp/errors" + "io" + "io/ioutil" + "testing" +) + +func TestReadFull(t *testing.T) { + var out [4]byte + + b := bytes.NewBufferString("foo") + n, err := readFull(b, out[:3]) + if n != 3 || err != nil { + t.Errorf("full read failed n:%d err:%s", n, err) + } + + b = bytes.NewBufferString("foo") + n, err = readFull(b, out[:4]) + if n != 3 || err != io.ErrUnexpectedEOF { + t.Errorf("partial read failed n:%d err:%s", n, err) + } + + b = bytes.NewBuffer(nil) + n, err = readFull(b, out[:3]) + if n != 0 || err != io.ErrUnexpectedEOF { + t.Errorf("empty read failed n:%d err:%s", n, err) + } +} + +func readerFromHex(s string) io.Reader { + data, err := hex.DecodeString(s) + if err != nil { + panic("readerFromHex: bad input") + } + return bytes.NewBuffer(data) +} + +var readLengthTests = []struct { + hexInput string + length int64 + isPartial bool + err error +}{ + {"", 0, false, io.ErrUnexpectedEOF}, + {"1f", 31, false, nil}, + {"c0", 0, false, io.ErrUnexpectedEOF}, + {"c101", 256 + 1 + 192, false, nil}, + {"e0", 1, true, nil}, + {"e1", 2, true, nil}, + {"e2", 4, true, nil}, + {"ff", 0, false, io.ErrUnexpectedEOF}, + {"ff00", 0, false, io.ErrUnexpectedEOF}, + {"ff0000", 0, false, io.ErrUnexpectedEOF}, + {"ff000000", 0, false, io.ErrUnexpectedEOF}, + {"ff00000000", 0, false, nil}, + {"ff01020304", 16909060, false, nil}, +} + +func TestReadLength(t *testing.T) { + for i, test := range readLengthTests { + length, isPartial, err := readLength(readerFromHex(test.hexInput)) + if test.err != nil { + if err != test.err { + t.Errorf("%d: expected different error got:%s want:%s", i, err, test.err) + } + continue + } + if err != nil { + t.Errorf("%d: unexpected error: %s", i, err) + continue + } + if length != test.length || isPartial != test.isPartial { + t.Errorf("%d: bad result got:(%d,%t) want:(%d,%t)", i, length, isPartial, test.length, test.isPartial) + } + } +} + +var partialLengthReaderTests = []struct { + hexInput string + err error + hexOutput string +}{ + {"e0", io.ErrUnexpectedEOF, ""}, + {"e001", io.ErrUnexpectedEOF, ""}, + {"e0010102", nil, "0102"}, + {"ff00000000", nil, ""}, + {"e10102e1030400", nil, "01020304"}, + {"e101", io.ErrUnexpectedEOF, ""}, +} + +func TestPartialLengthReader(t *testing.T) { + for i, test := range partialLengthReaderTests { + r := &partialLengthReader{readerFromHex(test.hexInput), 0, true} + out, err := ioutil.ReadAll(r) + if test.err != nil { + if err != test.err { + t.Errorf("%d: expected different error got:%s want:%s", i, err, test.err) + } + continue + } + if err != nil { + t.Errorf("%d: unexpected error: %s", i, err) + continue + } + + got := fmt.Sprintf("%x", out) + if got != test.hexOutput { + t.Errorf("%d: got:%s want:%s", i, test.hexOutput, got) + } + } +} + +var readHeaderTests = []struct { + hexInput string + structuralError bool + unexpectedEOF bool + tag int + length int64 + hexOutput string +}{ + {"", false, false, 0, 0, ""}, + {"7f", true, false, 0, 0, ""}, + + // Old format headers + {"80", false, true, 0, 0, ""}, + {"8001", false, true, 0, 1, ""}, + {"800102", false, false, 0, 1, "02"}, + {"81000102", false, false, 0, 1, "02"}, + {"820000000102", false, false, 0, 1, "02"}, + {"860000000102", false, false, 1, 1, "02"}, + {"83010203", false, false, 0, -1, "010203"}, + + // New format headers + {"c0", false, true, 0, 0, ""}, + {"c000", false, false, 0, 0, ""}, + {"c00102", false, false, 0, 1, "02"}, + {"c0020203", false, false, 0, 2, "0203"}, + {"c00202", false, true, 0, 2, ""}, + {"c3020203", false, false, 3, 2, "0203"}, +} + +func TestReadHeader(t *testing.T) { + for i, test := range readHeaderTests { + tag, length, contents, err := readHeader(readerFromHex(test.hexInput)) + if test.structuralError { + if _, ok := err.(errors.StructuralError); ok { + continue + } + t.Errorf("%d: expected StructuralError, got:%s", i, err) + continue + } + if err != nil { + if len(test.hexInput) == 0 && err == io.EOF { + continue + } + if !test.unexpectedEOF || err != io.ErrUnexpectedEOF { + t.Errorf("%d: unexpected error from readHeader: %s", i, err) + } + continue + } + if int(tag) != test.tag || length != test.length { + t.Errorf("%d: got:(%d,%d) want:(%d,%d)", i, int(tag), length, test.tag, test.length) + continue + } + + body, err := ioutil.ReadAll(contents) + if err != nil { + if !test.unexpectedEOF || err != io.ErrUnexpectedEOF { + t.Errorf("%d: unexpected error from contents: %s", i, err) + } + continue + } + if test.unexpectedEOF { + t.Errorf("%d: expected ErrUnexpectedEOF from contents but got no error", i) + continue + } + got := fmt.Sprintf("%x", body) + if got != test.hexOutput { + t.Errorf("%d: got:%s want:%s", i, got, test.hexOutput) + } + } +} + +func TestSerializeHeader(t *testing.T) { + tag := packetTypePublicKey + lengths := []int{0, 1, 2, 64, 192, 193, 8000, 8384, 8385, 10000} + + for _, length := range lengths { + buf := bytes.NewBuffer(nil) + serializeHeader(buf, tag, length) + tag2, length2, _, err := readHeader(buf) + if err != nil { + t.Errorf("length %d, err: %s", length, err) + } + if tag2 != tag { + t.Errorf("length %d, tag incorrect (got %d, want %d)", length, tag2, tag) + } + if int(length2) != length { + t.Errorf("length %d, length incorrect (got %d)", length, length2) + } + } +} + +func TestPartialLengths(t *testing.T) { + buf := bytes.NewBuffer(nil) + w := new(partialLengthWriter) + w.w = noOpCloser{buf} + + const maxChunkSize = 64 + + var b [maxChunkSize]byte + var n uint8 + for l := 1; l <= maxChunkSize; l++ { + for i := 0; i < l; i++ { + b[i] = n + n++ + } + m, err := w.Write(b[:l]) + if m != l { + t.Errorf("short write got: %d want: %d", m, l) + } + if err != nil { + t.Errorf("error from write: %s", err) + } + } + w.Close() + + want := (maxChunkSize * (maxChunkSize + 1)) / 2 + copyBuf := bytes.NewBuffer(nil) + r := &partialLengthReader{buf, 0, true} + m, err := io.Copy(copyBuf, r) + if m != int64(want) { + t.Errorf("short copy got: %d want: %d", m, want) + } + if err != nil { + t.Errorf("error from copy: %s", err) + } + + copyBytes := copyBuf.Bytes() + for i := 0; i < want; i++ { + if copyBytes[i] != uint8(i) { + t.Errorf("bad pattern in copy at %d", i) + break + } + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/private_key.go b/vendor/golang.org/x/crypto/openpgp/packet/private_key.go new file mode 100644 index 0000000..34734cc --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/private_key.go @@ -0,0 +1,380 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "crypto/cipher" + "crypto/dsa" + "crypto/ecdsa" + "crypto/rsa" + "crypto/sha1" + "io" + "io/ioutil" + "math/big" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/elgamal" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" +) + +// PrivateKey represents a possibly encrypted private key. See RFC 4880, +// section 5.5.3. +type PrivateKey struct { + PublicKey + Encrypted bool // if true then the private key is unavailable until Decrypt has been called. + encryptedData []byte + cipher CipherFunction + s2k func(out, in []byte) + PrivateKey interface{} // An *{rsa|dsa|ecdsa}.PrivateKey or a crypto.Signer. + sha1Checksum bool + iv []byte +} + +func NewRSAPrivateKey(currentTime time.Time, priv *rsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewRSAPublicKey(currentTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewDSAPrivateKey(currentTime time.Time, priv *dsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewDSAPublicKey(currentTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewElGamalPrivateKey(currentTime time.Time, priv *elgamal.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewElGamalPublicKey(currentTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewECDSAPrivateKey(currentTime time.Time, priv *ecdsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewECDSAPublicKey(currentTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +// NewSignerPrivateKey creates a sign-only PrivateKey from a crypto.Signer that +// implements RSA or ECDSA. +func NewSignerPrivateKey(currentTime time.Time, signer crypto.Signer) *PrivateKey { + pk := new(PrivateKey) + switch pubkey := signer.Public().(type) { + case rsa.PublicKey: + pk.PublicKey = *NewRSAPublicKey(currentTime, &pubkey) + pk.PubKeyAlgo = PubKeyAlgoRSASignOnly + case ecdsa.PublicKey: + pk.PublicKey = *NewECDSAPublicKey(currentTime, &pubkey) + default: + panic("openpgp: unknown crypto.Signer type in NewSignerPrivateKey") + } + pk.PrivateKey = signer + return pk +} + +func (pk *PrivateKey) parse(r io.Reader) (err error) { + err = (&pk.PublicKey).parse(r) + if err != nil { + return + } + var buf [1]byte + _, err = readFull(r, buf[:]) + if err != nil { + return + } + + s2kType := buf[0] + + switch s2kType { + case 0: + pk.s2k = nil + pk.Encrypted = false + case 254, 255: + _, err = readFull(r, buf[:]) + if err != nil { + return + } + pk.cipher = CipherFunction(buf[0]) + pk.Encrypted = true + pk.s2k, err = s2k.Parse(r) + if err != nil { + return + } + if s2kType == 254 { + pk.sha1Checksum = true + } + default: + return errors.UnsupportedError("deprecated s2k function in private key") + } + + if pk.Encrypted { + blockSize := pk.cipher.blockSize() + if blockSize == 0 { + return errors.UnsupportedError("unsupported cipher in private key: " + strconv.Itoa(int(pk.cipher))) + } + pk.iv = make([]byte, blockSize) + _, err = readFull(r, pk.iv) + if err != nil { + return + } + } + + pk.encryptedData, err = ioutil.ReadAll(r) + if err != nil { + return + } + + if !pk.Encrypted { + return pk.parsePrivateKey(pk.encryptedData) + } + + return +} + +func mod64kHash(d []byte) uint16 { + var h uint16 + for _, b := range d { + h += uint16(b) + } + return h +} + +func (pk *PrivateKey) Serialize(w io.Writer) (err error) { + // TODO(agl): support encrypted private keys + buf := bytes.NewBuffer(nil) + err = pk.PublicKey.serializeWithoutHeaders(buf) + if err != nil { + return + } + buf.WriteByte(0 /* no encryption */) + + privateKeyBuf := bytes.NewBuffer(nil) + + switch priv := pk.PrivateKey.(type) { + case *rsa.PrivateKey: + err = serializeRSAPrivateKey(privateKeyBuf, priv) + case *dsa.PrivateKey: + err = serializeDSAPrivateKey(privateKeyBuf, priv) + case *elgamal.PrivateKey: + err = serializeElGamalPrivateKey(privateKeyBuf, priv) + case *ecdsa.PrivateKey: + err = serializeECDSAPrivateKey(privateKeyBuf, priv) + default: + err = errors.InvalidArgumentError("unknown private key type") + } + if err != nil { + return + } + + ptype := packetTypePrivateKey + contents := buf.Bytes() + privateKeyBytes := privateKeyBuf.Bytes() + if pk.IsSubkey { + ptype = packetTypePrivateSubkey + } + err = serializeHeader(w, ptype, len(contents)+len(privateKeyBytes)+2) + if err != nil { + return + } + _, err = w.Write(contents) + if err != nil { + return + } + _, err = w.Write(privateKeyBytes) + if err != nil { + return + } + + checksum := mod64kHash(privateKeyBytes) + var checksumBytes [2]byte + checksumBytes[0] = byte(checksum >> 8) + checksumBytes[1] = byte(checksum) + _, err = w.Write(checksumBytes[:]) + + return +} + +func serializeRSAPrivateKey(w io.Writer, priv *rsa.PrivateKey) error { + err := writeBig(w, priv.D) + if err != nil { + return err + } + err = writeBig(w, priv.Primes[1]) + if err != nil { + return err + } + err = writeBig(w, priv.Primes[0]) + if err != nil { + return err + } + return writeBig(w, priv.Precomputed.Qinv) +} + +func serializeDSAPrivateKey(w io.Writer, priv *dsa.PrivateKey) error { + return writeBig(w, priv.X) +} + +func serializeElGamalPrivateKey(w io.Writer, priv *elgamal.PrivateKey) error { + return writeBig(w, priv.X) +} + +func serializeECDSAPrivateKey(w io.Writer, priv *ecdsa.PrivateKey) error { + return writeBig(w, priv.D) +} + +// Decrypt decrypts an encrypted private key using a passphrase. +func (pk *PrivateKey) Decrypt(passphrase []byte) error { + if !pk.Encrypted { + return nil + } + + key := make([]byte, pk.cipher.KeySize()) + pk.s2k(key, passphrase) + block := pk.cipher.new(key) + cfb := cipher.NewCFBDecrypter(block, pk.iv) + + data := make([]byte, len(pk.encryptedData)) + cfb.XORKeyStream(data, pk.encryptedData) + + if pk.sha1Checksum { + if len(data) < sha1.Size { + return errors.StructuralError("truncated private key data") + } + h := sha1.New() + h.Write(data[:len(data)-sha1.Size]) + sum := h.Sum(nil) + if !bytes.Equal(sum, data[len(data)-sha1.Size:]) { + return errors.StructuralError("private key checksum failure") + } + data = data[:len(data)-sha1.Size] + } else { + if len(data) < 2 { + return errors.StructuralError("truncated private key data") + } + var sum uint16 + for i := 0; i < len(data)-2; i++ { + sum += uint16(data[i]) + } + if data[len(data)-2] != uint8(sum>>8) || + data[len(data)-1] != uint8(sum) { + return errors.StructuralError("private key checksum failure") + } + data = data[:len(data)-2] + } + + return pk.parsePrivateKey(data) +} + +func (pk *PrivateKey) parsePrivateKey(data []byte) (err error) { + switch pk.PublicKey.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoRSAEncryptOnly: + return pk.parseRSAPrivateKey(data) + case PubKeyAlgoDSA: + return pk.parseDSAPrivateKey(data) + case PubKeyAlgoElGamal: + return pk.parseElGamalPrivateKey(data) + case PubKeyAlgoECDSA: + return pk.parseECDSAPrivateKey(data) + } + panic("impossible") +} + +func (pk *PrivateKey) parseRSAPrivateKey(data []byte) (err error) { + rsaPub := pk.PublicKey.PublicKey.(*rsa.PublicKey) + rsaPriv := new(rsa.PrivateKey) + rsaPriv.PublicKey = *rsaPub + + buf := bytes.NewBuffer(data) + d, _, err := readMPI(buf) + if err != nil { + return + } + p, _, err := readMPI(buf) + if err != nil { + return + } + q, _, err := readMPI(buf) + if err != nil { + return + } + + rsaPriv.D = new(big.Int).SetBytes(d) + rsaPriv.Primes = make([]*big.Int, 2) + rsaPriv.Primes[0] = new(big.Int).SetBytes(p) + rsaPriv.Primes[1] = new(big.Int).SetBytes(q) + if err := rsaPriv.Validate(); err != nil { + return err + } + rsaPriv.Precompute() + pk.PrivateKey = rsaPriv + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} + +func (pk *PrivateKey) parseDSAPrivateKey(data []byte) (err error) { + dsaPub := pk.PublicKey.PublicKey.(*dsa.PublicKey) + dsaPriv := new(dsa.PrivateKey) + dsaPriv.PublicKey = *dsaPub + + buf := bytes.NewBuffer(data) + x, _, err := readMPI(buf) + if err != nil { + return + } + + dsaPriv.X = new(big.Int).SetBytes(x) + pk.PrivateKey = dsaPriv + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} + +func (pk *PrivateKey) parseElGamalPrivateKey(data []byte) (err error) { + pub := pk.PublicKey.PublicKey.(*elgamal.PublicKey) + priv := new(elgamal.PrivateKey) + priv.PublicKey = *pub + + buf := bytes.NewBuffer(data) + x, _, err := readMPI(buf) + if err != nil { + return + } + + priv.X = new(big.Int).SetBytes(x) + pk.PrivateKey = priv + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} + +func (pk *PrivateKey) parseECDSAPrivateKey(data []byte) (err error) { + ecdsaPub := pk.PublicKey.PublicKey.(*ecdsa.PublicKey) + + buf := bytes.NewBuffer(data) + d, _, err := readMPI(buf) + if err != nil { + return + } + + pk.PrivateKey = &ecdsa.PrivateKey{ + PublicKey: *ecdsaPub, + D: new(big.Int).SetBytes(d), + } + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/private_key_test.go b/vendor/golang.org/x/crypto/openpgp/packet/private_key_test.go new file mode 100644 index 0000000..c16ef78 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/private_key_test.go @@ -0,0 +1,270 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/hex" + "hash" + "io" + "testing" + "time" +) + +var privateKeyTests = []struct { + privateKeyHex string + creationTime time.Time +}{ + { + privKeyRSAHex, + time.Unix(0x4cc349a8, 0), + }, + { + privKeyElGamalHex, + time.Unix(0x4df9ee1a, 0), + }, +} + +func TestPrivateKeyRead(t *testing.T) { + for i, test := range privateKeyTests { + packet, err := Read(readerFromHex(test.privateKeyHex)) + if err != nil { + t.Errorf("#%d: failed to parse: %s", i, err) + continue + } + + privKey := packet.(*PrivateKey) + + if !privKey.Encrypted { + t.Errorf("#%d: private key isn't encrypted", i) + continue + } + + err = privKey.Decrypt([]byte("wrong password")) + if err == nil { + t.Errorf("#%d: decrypted with incorrect key", i) + continue + } + + err = privKey.Decrypt([]byte("testing")) + if err != nil { + t.Errorf("#%d: failed to decrypt: %s", i, err) + continue + } + + if !privKey.CreationTime.Equal(test.creationTime) || privKey.Encrypted { + t.Errorf("#%d: bad result, got: %#v", i, privKey) + } + } +} + +func populateHash(hashFunc crypto.Hash, msg []byte) (hash.Hash, error) { + h := hashFunc.New() + if _, err := h.Write(msg); err != nil { + return nil, err + } + return h, nil +} + +func TestRSAPrivateKey(t *testing.T) { + privKeyDER, _ := hex.DecodeString(pkcs1PrivKeyHex) + rsaPriv, err := x509.ParsePKCS1PrivateKey(privKeyDER) + if err != nil { + t.Fatal(err) + } + + var buf bytes.Buffer + if err := NewRSAPrivateKey(time.Now(), rsaPriv).Serialize(&buf); err != nil { + t.Fatal(err) + } + + p, err := Read(&buf) + if err != nil { + t.Fatal(err) + } + + priv, ok := p.(*PrivateKey) + if !ok { + t.Fatal("didn't parse private key") + } + + sig := &Signature{ + PubKeyAlgo: PubKeyAlgoRSA, + Hash: crypto.SHA256, + } + msg := []byte("Hello World!") + + h, err := populateHash(sig.Hash, msg) + if err != nil { + t.Fatal(err) + } + if err := sig.Sign(h, priv, nil); err != nil { + t.Fatal(err) + } + + if h, err = populateHash(sig.Hash, msg); err != nil { + t.Fatal(err) + } + if err := priv.VerifySignature(h, sig); err != nil { + t.Fatal(err) + } +} + +func TestECDSAPrivateKey(t *testing.T) { + ecdsaPriv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + + var buf bytes.Buffer + if err := NewECDSAPrivateKey(time.Now(), ecdsaPriv).Serialize(&buf); err != nil { + t.Fatal(err) + } + + p, err := Read(&buf) + if err != nil { + t.Fatal(err) + } + + priv, ok := p.(*PrivateKey) + if !ok { + t.Fatal("didn't parse private key") + } + + sig := &Signature{ + PubKeyAlgo: PubKeyAlgoECDSA, + Hash: crypto.SHA256, + } + msg := []byte("Hello World!") + + h, err := populateHash(sig.Hash, msg) + if err != nil { + t.Fatal(err) + } + if err := sig.Sign(h, priv, nil); err != nil { + t.Fatal(err) + } + + if h, err = populateHash(sig.Hash, msg); err != nil { + t.Fatal(err) + } + if err := priv.VerifySignature(h, sig); err != nil { + t.Fatal(err) + } +} + +type rsaSigner struct { + priv *rsa.PrivateKey +} + +func (s *rsaSigner) Public() crypto.PublicKey { + return s.priv.PublicKey +} + +func (s *rsaSigner) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error) { + return s.priv.Sign(rand, msg, opts) +} + +func TestRSASignerPrivateKey(t *testing.T) { + rsaPriv, err := rsa.GenerateKey(rand.Reader, 1024) + if err != nil { + t.Fatal(err) + } + + priv := NewSignerPrivateKey(time.Now(), &rsaSigner{rsaPriv}) + + if priv.PubKeyAlgo != PubKeyAlgoRSASignOnly { + t.Fatal("NewSignerPrivateKey should have made a sign-only RSA private key") + } + + sig := &Signature{ + PubKeyAlgo: PubKeyAlgoRSASignOnly, + Hash: crypto.SHA256, + } + msg := []byte("Hello World!") + + h, err := populateHash(sig.Hash, msg) + if err != nil { + t.Fatal(err) + } + if err := sig.Sign(h, priv, nil); err != nil { + t.Fatal(err) + } + + if h, err = populateHash(sig.Hash, msg); err != nil { + t.Fatal(err) + } + if err := priv.VerifySignature(h, sig); err != nil { + t.Fatal(err) + } +} + +type ecdsaSigner struct { + priv *ecdsa.PrivateKey +} + +func (s *ecdsaSigner) Public() crypto.PublicKey { + return s.priv.PublicKey +} + +func (s *ecdsaSigner) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error) { + return s.priv.Sign(rand, msg, opts) +} + +func TestECDSASignerPrivateKey(t *testing.T) { + ecdsaPriv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + + priv := NewSignerPrivateKey(time.Now(), &ecdsaSigner{ecdsaPriv}) + + if priv.PubKeyAlgo != PubKeyAlgoECDSA { + t.Fatal("NewSignerPrivateKey should have made a ECSDA private key") + } + + sig := &Signature{ + PubKeyAlgo: PubKeyAlgoECDSA, + Hash: crypto.SHA256, + } + msg := []byte("Hello World!") + + h, err := populateHash(sig.Hash, msg) + if err != nil { + t.Fatal(err) + } + if err := sig.Sign(h, priv, nil); err != nil { + t.Fatal(err) + } + + if h, err = populateHash(sig.Hash, msg); err != nil { + t.Fatal(err) + } + if err := priv.VerifySignature(h, sig); err != nil { + t.Fatal(err) + } +} + +func TestIssue11505(t *testing.T) { + // parsing a rsa private key with p or q == 1 used to panic due to a divide by zero + _, _ = Read(readerFromHex("9c3004303030300100000011303030000000000000010130303030303030303030303030303030303030303030303030303030303030303030303030303030303030")) +} + +// Generated with `gpg --export-secret-keys "Test Key 2"` +const privKeyRSAHex = "9501fe044cc349a8010400b70ca0010e98c090008d45d1ee8f9113bd5861fd57b88bacb7c68658747663f1e1a3b5a98f32fda6472373c024b97359cd2efc88ff60f77751adfbf6af5e615e6a1408cfad8bf0cea30b0d5f53aa27ad59089ba9b15b7ebc2777a25d7b436144027e3bcd203909f147d0e332b240cf63d3395f5dfe0df0a6c04e8655af7eacdf0011010001fe0303024a252e7d475fd445607de39a265472aa74a9320ba2dac395faa687e9e0336aeb7e9a7397e511b5afd9dc84557c80ac0f3d4d7bfec5ae16f20d41c8c84a04552a33870b930420e230e179564f6d19bb153145e76c33ae993886c388832b0fa042ddda7f133924f3854481533e0ede31d51278c0519b29abc3bf53da673e13e3e1214b52413d179d7f66deee35cac8eacb060f78379d70ef4af8607e68131ff529439668fc39c9ce6dfef8a5ac234d234802cbfb749a26107db26406213ae5c06d4673253a3cbee1fcbae58d6ab77e38d6e2c0e7c6317c48e054edadb5a40d0d48acb44643d998139a8a66bb820be1f3f80185bc777d14b5954b60effe2448a036d565c6bc0b915fcea518acdd20ab07bc1529f561c58cd044f723109b93f6fd99f876ff891d64306b5d08f48bab59f38695e9109c4dec34013ba3153488ce070268381ba923ee1eb77125b36afcb4347ec3478c8f2735b06ef17351d872e577fa95d0c397c88c71b59629a36aec" + +// Generated by `gpg --export-secret-keys` followed by a manual extraction of +// the ElGamal subkey from the packets. +const privKeyElGamalHex = "9d0157044df9ee1a100400eb8e136a58ec39b582629cdadf830bc64e0a94ed8103ca8bb247b27b11b46d1d25297ef4bcc3071785ba0c0bedfe89eabc5287fcc0edf81ab5896c1c8e4b20d27d79813c7aede75320b33eaeeaa586edc00fd1036c10133e6ba0ff277245d0d59d04b2b3421b7244aca5f4a8d870c6f1c1fbff9e1c26699a860b9504f35ca1d700030503fd1ededd3b840795be6d9ccbe3c51ee42e2f39233c432b831ddd9c4e72b7025a819317e47bf94f9ee316d7273b05d5fcf2999c3a681f519b1234bbfa6d359b4752bd9c3f77d6b6456cde152464763414ca130f4e91d91041432f90620fec0e6d6b5116076c2985d5aeaae13be492b9b329efcaf7ee25120159a0a30cd976b42d7afe030302dae7eb80db744d4960c4df930d57e87fe81412eaace9f900e6c839817a614ddb75ba6603b9417c33ea7b6c93967dfa2bcff3fa3c74a5ce2c962db65b03aece14c96cbd0038fc" + +// pkcs1PrivKeyHex is a PKCS#1, RSA private key. +// Generated by `openssl genrsa 1024 | openssl rsa -outform DER | xxd -p` +const pkcs1PrivKeyHex = "3082025d02010002818100e98edfa1c3b35884a54d0b36a6a603b0290fa85e49e30fa23fc94fef9c6790bc4849928607aa48d809da326fb42a969d06ad756b98b9c1a90f5d4a2b6d0ac05953c97f4da3120164a21a679793ce181c906dc01d235cc085ddcdf6ea06c389b6ab8885dfd685959e693138856a68a7e5db263337ff82a088d583a897cf2d59e9020301000102818100b6d5c9eb70b02d5369b3ee5b520a14490b5bde8a317d36f7e4c74b7460141311d1e5067735f8f01d6f5908b2b96fbd881f7a1ab9a84d82753e39e19e2d36856be960d05ac9ef8e8782ea1b6d65aee28fdfe1d61451e8cff0adfe84322f12cf455028b581cf60eb9e0e140ba5d21aeba6c2634d7c65318b9a665fc01c3191ca21024100fa5e818da3705b0fa33278bb28d4b6f6050388af2d4b75ec9375dd91ccf2e7d7068086a8b82a8f6282e4fbbdb8a7f2622eb97295249d87acea7f5f816f54d347024100eecf9406d7dc49cdfb95ab1eff4064de84c7a30f64b2798936a0d2018ba9eb52e4b636f82e96c49cc63b80b675e91e40d1b2e4017d4b9adaf33ab3d9cf1c214f024100c173704ace742c082323066226a4655226819a85304c542b9dacbeacbf5d1881ee863485fcf6f59f3a604f9b42289282067447f2b13dfeed3eab7851fc81e0550240741fc41f3fc002b382eed8730e33c5d8de40256e4accee846667f536832f711ab1d4590e7db91a8a116ac5bff3be13d3f9243ff2e976662aa9b395d907f8e9c9024046a5696c9ef882363e06c9fa4e2f5b580906452befba03f4a99d0f873697ef1f851d2226ca7934b30b7c3e80cb634a67172bbbf4781735fe3e09263e2dd723e7" diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key.go new file mode 100644 index 0000000..c769933 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/public_key.go @@ -0,0 +1,750 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rsa" + "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" + "encoding/binary" + "fmt" + "hash" + "io" + "math/big" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/elgamal" + "golang.org/x/crypto/openpgp/errors" +) + +var ( + // NIST curve P-256 + oidCurveP256 []byte = []byte{0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07} + // NIST curve P-384 + oidCurveP384 []byte = []byte{0x2B, 0x81, 0x04, 0x00, 0x22} + // NIST curve P-521 + oidCurveP521 []byte = []byte{0x2B, 0x81, 0x04, 0x00, 0x23} +) + +const maxOIDLength = 8 + +// ecdsaKey stores the algorithm-specific fields for ECDSA keys. +// as defined in RFC 6637, Section 9. +type ecdsaKey struct { + // oid contains the OID byte sequence identifying the elliptic curve used + oid []byte + // p contains the elliptic curve point that represents the public key + p parsedMPI +} + +// parseOID reads the OID for the curve as defined in RFC 6637, Section 9. +func parseOID(r io.Reader) (oid []byte, err error) { + buf := make([]byte, maxOIDLength) + if _, err = readFull(r, buf[:1]); err != nil { + return + } + oidLen := buf[0] + if int(oidLen) > len(buf) { + err = errors.UnsupportedError("invalid oid length: " + strconv.Itoa(int(oidLen))) + return + } + oid = buf[:oidLen] + _, err = readFull(r, oid) + return +} + +func (f *ecdsaKey) parse(r io.Reader) (err error) { + if f.oid, err = parseOID(r); err != nil { + return err + } + f.p.bytes, f.p.bitLength, err = readMPI(r) + return +} + +func (f *ecdsaKey) serialize(w io.Writer) (err error) { + buf := make([]byte, maxOIDLength+1) + buf[0] = byte(len(f.oid)) + copy(buf[1:], f.oid) + if _, err = w.Write(buf[:len(f.oid)+1]); err != nil { + return + } + return writeMPIs(w, f.p) +} + +func (f *ecdsaKey) newECDSA() (*ecdsa.PublicKey, error) { + var c elliptic.Curve + if bytes.Equal(f.oid, oidCurveP256) { + c = elliptic.P256() + } else if bytes.Equal(f.oid, oidCurveP384) { + c = elliptic.P384() + } else if bytes.Equal(f.oid, oidCurveP521) { + c = elliptic.P521() + } else { + return nil, errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", f.oid)) + } + x, y := elliptic.Unmarshal(c, f.p.bytes) + if x == nil { + return nil, errors.UnsupportedError("failed to parse EC point") + } + return &ecdsa.PublicKey{Curve: c, X: x, Y: y}, nil +} + +func (f *ecdsaKey) byteLen() int { + return 1 + len(f.oid) + 2 + len(f.p.bytes) +} + +type kdfHashFunction byte +type kdfAlgorithm byte + +// ecdhKdf stores key derivation function parameters +// used for ECDH encryption. See RFC 6637, Section 9. +type ecdhKdf struct { + KdfHash kdfHashFunction + KdfAlgo kdfAlgorithm +} + +func (f *ecdhKdf) parse(r io.Reader) (err error) { + buf := make([]byte, 1) + if _, err = readFull(r, buf); err != nil { + return + } + kdfLen := int(buf[0]) + if kdfLen < 3 { + return errors.UnsupportedError("Unsupported ECDH KDF length: " + strconv.Itoa(kdfLen)) + } + buf = make([]byte, kdfLen) + if _, err = readFull(r, buf); err != nil { + return + } + reserved := int(buf[0]) + f.KdfHash = kdfHashFunction(buf[1]) + f.KdfAlgo = kdfAlgorithm(buf[2]) + if reserved != 0x01 { + return errors.UnsupportedError("Unsupported KDF reserved field: " + strconv.Itoa(reserved)) + } + return +} + +func (f *ecdhKdf) serialize(w io.Writer) (err error) { + buf := make([]byte, 4) + // See RFC 6637, Section 9, Algorithm-Specific Fields for ECDH keys. + buf[0] = byte(0x03) // Length of the following fields + buf[1] = byte(0x01) // Reserved for future extensions, must be 1 for now + buf[2] = byte(f.KdfHash) + buf[3] = byte(f.KdfAlgo) + _, err = w.Write(buf[:]) + return +} + +func (f *ecdhKdf) byteLen() int { + return 4 +} + +// PublicKey represents an OpenPGP public key. See RFC 4880, section 5.5.2. +type PublicKey struct { + CreationTime time.Time + PubKeyAlgo PublicKeyAlgorithm + PublicKey interface{} // *rsa.PublicKey, *dsa.PublicKey or *ecdsa.PublicKey + Fingerprint [20]byte + KeyId uint64 + IsSubkey bool + + n, e, p, q, g, y parsedMPI + + // RFC 6637 fields + ec *ecdsaKey + ecdh *ecdhKdf +} + +// signingKey provides a convenient abstraction over signature verification +// for v3 and v4 public keys. +type signingKey interface { + SerializeSignaturePrefix(io.Writer) + serializeWithoutHeaders(io.Writer) error +} + +func fromBig(n *big.Int) parsedMPI { + return parsedMPI{ + bytes: n.Bytes(), + bitLength: uint16(n.BitLen()), + } +} + +// NewRSAPublicKey returns a PublicKey that wraps the given rsa.PublicKey. +func NewRSAPublicKey(creationTime time.Time, pub *rsa.PublicKey) *PublicKey { + pk := &PublicKey{ + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoRSA, + PublicKey: pub, + n: fromBig(pub.N), + e: fromBig(big.NewInt(int64(pub.E))), + } + + pk.setFingerPrintAndKeyId() + return pk +} + +// NewDSAPublicKey returns a PublicKey that wraps the given dsa.PublicKey. +func NewDSAPublicKey(creationTime time.Time, pub *dsa.PublicKey) *PublicKey { + pk := &PublicKey{ + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoDSA, + PublicKey: pub, + p: fromBig(pub.P), + q: fromBig(pub.Q), + g: fromBig(pub.G), + y: fromBig(pub.Y), + } + + pk.setFingerPrintAndKeyId() + return pk +} + +// NewElGamalPublicKey returns a PublicKey that wraps the given elgamal.PublicKey. +func NewElGamalPublicKey(creationTime time.Time, pub *elgamal.PublicKey) *PublicKey { + pk := &PublicKey{ + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoElGamal, + PublicKey: pub, + p: fromBig(pub.P), + g: fromBig(pub.G), + y: fromBig(pub.Y), + } + + pk.setFingerPrintAndKeyId() + return pk +} + +func NewECDSAPublicKey(creationTime time.Time, pub *ecdsa.PublicKey) *PublicKey { + pk := &PublicKey{ + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoECDSA, + PublicKey: pub, + ec: new(ecdsaKey), + } + + switch pub.Curve { + case elliptic.P256(): + pk.ec.oid = oidCurveP256 + case elliptic.P384(): + pk.ec.oid = oidCurveP384 + case elliptic.P521(): + pk.ec.oid = oidCurveP521 + default: + panic("unknown elliptic curve") + } + + pk.ec.p.bytes = elliptic.Marshal(pub.Curve, pub.X, pub.Y) + pk.ec.p.bitLength = uint16(8 * len(pk.ec.p.bytes)) + + pk.setFingerPrintAndKeyId() + return pk +} + +func (pk *PublicKey) parse(r io.Reader) (err error) { + // RFC 4880, section 5.5.2 + var buf [6]byte + _, err = readFull(r, buf[:]) + if err != nil { + return + } + if buf[0] != 4 { + return errors.UnsupportedError("public key version") + } + pk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0) + pk.PubKeyAlgo = PublicKeyAlgorithm(buf[5]) + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + err = pk.parseRSA(r) + case PubKeyAlgoDSA: + err = pk.parseDSA(r) + case PubKeyAlgoElGamal: + err = pk.parseElGamal(r) + case PubKeyAlgoECDSA: + pk.ec = new(ecdsaKey) + if err = pk.ec.parse(r); err != nil { + return err + } + pk.PublicKey, err = pk.ec.newECDSA() + case PubKeyAlgoECDH: + pk.ec = new(ecdsaKey) + if err = pk.ec.parse(r); err != nil { + return + } + pk.ecdh = new(ecdhKdf) + if err = pk.ecdh.parse(r); err != nil { + return + } + // The ECDH key is stored in an ecdsa.PublicKey for convenience. + pk.PublicKey, err = pk.ec.newECDSA() + default: + err = errors.UnsupportedError("public key type: " + strconv.Itoa(int(pk.PubKeyAlgo))) + } + if err != nil { + return + } + + pk.setFingerPrintAndKeyId() + return +} + +func (pk *PublicKey) setFingerPrintAndKeyId() { + // RFC 4880, section 12.2 + fingerPrint := sha1.New() + pk.SerializeSignaturePrefix(fingerPrint) + pk.serializeWithoutHeaders(fingerPrint) + copy(pk.Fingerprint[:], fingerPrint.Sum(nil)) + pk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[12:20]) +} + +// parseRSA parses RSA public key material from the given Reader. See RFC 4880, +// section 5.5.2. +func (pk *PublicKey) parseRSA(r io.Reader) (err error) { + pk.n.bytes, pk.n.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.e.bytes, pk.e.bitLength, err = readMPI(r) + if err != nil { + return + } + + if len(pk.e.bytes) > 3 { + err = errors.UnsupportedError("large public exponent") + return + } + rsa := &rsa.PublicKey{ + N: new(big.Int).SetBytes(pk.n.bytes), + E: 0, + } + for i := 0; i < len(pk.e.bytes); i++ { + rsa.E <<= 8 + rsa.E |= int(pk.e.bytes[i]) + } + pk.PublicKey = rsa + return +} + +// parseDSA parses DSA public key material from the given Reader. See RFC 4880, +// section 5.5.2. +func (pk *PublicKey) parseDSA(r io.Reader) (err error) { + pk.p.bytes, pk.p.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.q.bytes, pk.q.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.g.bytes, pk.g.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.y.bytes, pk.y.bitLength, err = readMPI(r) + if err != nil { + return + } + + dsa := new(dsa.PublicKey) + dsa.P = new(big.Int).SetBytes(pk.p.bytes) + dsa.Q = new(big.Int).SetBytes(pk.q.bytes) + dsa.G = new(big.Int).SetBytes(pk.g.bytes) + dsa.Y = new(big.Int).SetBytes(pk.y.bytes) + pk.PublicKey = dsa + return +} + +// parseElGamal parses ElGamal public key material from the given Reader. See +// RFC 4880, section 5.5.2. +func (pk *PublicKey) parseElGamal(r io.Reader) (err error) { + pk.p.bytes, pk.p.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.g.bytes, pk.g.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.y.bytes, pk.y.bitLength, err = readMPI(r) + if err != nil { + return + } + + elgamal := new(elgamal.PublicKey) + elgamal.P = new(big.Int).SetBytes(pk.p.bytes) + elgamal.G = new(big.Int).SetBytes(pk.g.bytes) + elgamal.Y = new(big.Int).SetBytes(pk.y.bytes) + pk.PublicKey = elgamal + return +} + +// SerializeSignaturePrefix writes the prefix for this public key to the given Writer. +// The prefix is used when calculating a signature over this public key. See +// RFC 4880, section 5.2.4. +func (pk *PublicKey) SerializeSignaturePrefix(h io.Writer) { + var pLength uint16 + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + pLength += 2 + uint16(len(pk.n.bytes)) + pLength += 2 + uint16(len(pk.e.bytes)) + case PubKeyAlgoDSA: + pLength += 2 + uint16(len(pk.p.bytes)) + pLength += 2 + uint16(len(pk.q.bytes)) + pLength += 2 + uint16(len(pk.g.bytes)) + pLength += 2 + uint16(len(pk.y.bytes)) + case PubKeyAlgoElGamal: + pLength += 2 + uint16(len(pk.p.bytes)) + pLength += 2 + uint16(len(pk.g.bytes)) + pLength += 2 + uint16(len(pk.y.bytes)) + case PubKeyAlgoECDSA: + pLength += uint16(pk.ec.byteLen()) + case PubKeyAlgoECDH: + pLength += uint16(pk.ec.byteLen()) + pLength += uint16(pk.ecdh.byteLen()) + default: + panic("unknown public key algorithm") + } + pLength += 6 + h.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)}) + return +} + +func (pk *PublicKey) Serialize(w io.Writer) (err error) { + length := 6 // 6 byte header + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + length += 2 + len(pk.n.bytes) + length += 2 + len(pk.e.bytes) + case PubKeyAlgoDSA: + length += 2 + len(pk.p.bytes) + length += 2 + len(pk.q.bytes) + length += 2 + len(pk.g.bytes) + length += 2 + len(pk.y.bytes) + case PubKeyAlgoElGamal: + length += 2 + len(pk.p.bytes) + length += 2 + len(pk.g.bytes) + length += 2 + len(pk.y.bytes) + case PubKeyAlgoECDSA: + length += pk.ec.byteLen() + case PubKeyAlgoECDH: + length += pk.ec.byteLen() + length += pk.ecdh.byteLen() + default: + panic("unknown public key algorithm") + } + + packetType := packetTypePublicKey + if pk.IsSubkey { + packetType = packetTypePublicSubkey + } + err = serializeHeader(w, packetType, length) + if err != nil { + return + } + return pk.serializeWithoutHeaders(w) +} + +// serializeWithoutHeaders marshals the PublicKey to w in the form of an +// OpenPGP public key packet, not including the packet header. +func (pk *PublicKey) serializeWithoutHeaders(w io.Writer) (err error) { + var buf [6]byte + buf[0] = 4 + t := uint32(pk.CreationTime.Unix()) + buf[1] = byte(t >> 24) + buf[2] = byte(t >> 16) + buf[3] = byte(t >> 8) + buf[4] = byte(t) + buf[5] = byte(pk.PubKeyAlgo) + + _, err = w.Write(buf[:]) + if err != nil { + return + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + return writeMPIs(w, pk.n, pk.e) + case PubKeyAlgoDSA: + return writeMPIs(w, pk.p, pk.q, pk.g, pk.y) + case PubKeyAlgoElGamal: + return writeMPIs(w, pk.p, pk.g, pk.y) + case PubKeyAlgoECDSA: + return pk.ec.serialize(w) + case PubKeyAlgoECDH: + if err = pk.ec.serialize(w); err != nil { + return + } + return pk.ecdh.serialize(w) + } + return errors.InvalidArgumentError("bad public-key algorithm") +} + +// CanSign returns true iff this public key can generate signatures +func (pk *PublicKey) CanSign() bool { + return pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly && pk.PubKeyAlgo != PubKeyAlgoElGamal +} + +// VerifySignature returns nil iff sig is a valid signature, made by this +// public key, of the data hashed into signed. signed is mutated by this call. +func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err error) { + if !pk.CanSign() { + return errors.InvalidArgumentError("public key cannot generate signatures") + } + + signed.Write(sig.HashSuffix) + hashBytes := signed.Sum(nil) + + if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { + return errors.SignatureError("hash tag doesn't match") + } + + if pk.PubKeyAlgo != sig.PubKeyAlgo { + return errors.InvalidArgumentError("public key and signature use different algorithms") + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + rsaPublicKey, _ := pk.PublicKey.(*rsa.PublicKey) + err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes) + if err != nil { + return errors.SignatureError("RSA verification failure") + } + return nil + case PubKeyAlgoDSA: + dsaPublicKey, _ := pk.PublicKey.(*dsa.PublicKey) + // Need to truncate hashBytes to match FIPS 186-3 section 4.6. + subgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8 + if len(hashBytes) > subgroupSize { + hashBytes = hashBytes[:subgroupSize] + } + if !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.bytes), new(big.Int).SetBytes(sig.DSASigS.bytes)) { + return errors.SignatureError("DSA verification failure") + } + return nil + case PubKeyAlgoECDSA: + ecdsaPublicKey := pk.PublicKey.(*ecdsa.PublicKey) + if !ecdsa.Verify(ecdsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.ECDSASigR.bytes), new(big.Int).SetBytes(sig.ECDSASigS.bytes)) { + return errors.SignatureError("ECDSA verification failure") + } + return nil + default: + return errors.SignatureError("Unsupported public key algorithm used in signature") + } + panic("unreachable") +} + +// VerifySignatureV3 returns nil iff sig is a valid signature, made by this +// public key, of the data hashed into signed. signed is mutated by this call. +func (pk *PublicKey) VerifySignatureV3(signed hash.Hash, sig *SignatureV3) (err error) { + if !pk.CanSign() { + return errors.InvalidArgumentError("public key cannot generate signatures") + } + + suffix := make([]byte, 5) + suffix[0] = byte(sig.SigType) + binary.BigEndian.PutUint32(suffix[1:], uint32(sig.CreationTime.Unix())) + signed.Write(suffix) + hashBytes := signed.Sum(nil) + + if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { + return errors.SignatureError("hash tag doesn't match") + } + + if pk.PubKeyAlgo != sig.PubKeyAlgo { + return errors.InvalidArgumentError("public key and signature use different algorithms") + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + rsaPublicKey := pk.PublicKey.(*rsa.PublicKey) + if err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes); err != nil { + return errors.SignatureError("RSA verification failure") + } + return + case PubKeyAlgoDSA: + dsaPublicKey := pk.PublicKey.(*dsa.PublicKey) + // Need to truncate hashBytes to match FIPS 186-3 section 4.6. + subgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8 + if len(hashBytes) > subgroupSize { + hashBytes = hashBytes[:subgroupSize] + } + if !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.bytes), new(big.Int).SetBytes(sig.DSASigS.bytes)) { + return errors.SignatureError("DSA verification failure") + } + return nil + default: + panic("shouldn't happen") + } + panic("unreachable") +} + +// keySignatureHash returns a Hash of the message that needs to be signed for +// pk to assert a subkey relationship to signed. +func keySignatureHash(pk, signed signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { + if !hashFunc.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hashFunc.New() + + // RFC 4880, section 5.2.4 + pk.SerializeSignaturePrefix(h) + pk.serializeWithoutHeaders(h) + signed.SerializeSignaturePrefix(h) + signed.serializeWithoutHeaders(h) + return +} + +// VerifyKeySignature returns nil iff sig is a valid signature, made by this +// public key, of signed. +func (pk *PublicKey) VerifyKeySignature(signed *PublicKey, sig *Signature) error { + h, err := keySignatureHash(pk, signed, sig.Hash) + if err != nil { + return err + } + if err = pk.VerifySignature(h, sig); err != nil { + return err + } + + if sig.FlagSign { + // Signing subkeys must be cross-signed. See + // https://www.gnupg.org/faq/subkey-cross-certify.html. + if sig.EmbeddedSignature == nil { + return errors.StructuralError("signing subkey is missing cross-signature") + } + // Verify the cross-signature. This is calculated over the same + // data as the main signature, so we cannot just recursively + // call signed.VerifyKeySignature(...) + if h, err = keySignatureHash(pk, signed, sig.EmbeddedSignature.Hash); err != nil { + return errors.StructuralError("error while hashing for cross-signature: " + err.Error()) + } + if err := signed.VerifySignature(h, sig.EmbeddedSignature); err != nil { + return errors.StructuralError("error while verifying cross-signature: " + err.Error()) + } + } + + return nil +} + +func keyRevocationHash(pk signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { + if !hashFunc.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hashFunc.New() + + // RFC 4880, section 5.2.4 + pk.SerializeSignaturePrefix(h) + pk.serializeWithoutHeaders(h) + + return +} + +// VerifyRevocationSignature returns nil iff sig is a valid signature, made by this +// public key. +func (pk *PublicKey) VerifyRevocationSignature(sig *Signature) (err error) { + h, err := keyRevocationHash(pk, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignature(h, sig) +} + +// userIdSignatureHash returns a Hash of the message that needs to be signed +// to assert that pk is a valid key for id. +func userIdSignatureHash(id string, pk *PublicKey, hashFunc crypto.Hash) (h hash.Hash, err error) { + if !hashFunc.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hashFunc.New() + + // RFC 4880, section 5.2.4 + pk.SerializeSignaturePrefix(h) + pk.serializeWithoutHeaders(h) + + var buf [5]byte + buf[0] = 0xb4 + buf[1] = byte(len(id) >> 24) + buf[2] = byte(len(id) >> 16) + buf[3] = byte(len(id) >> 8) + buf[4] = byte(len(id)) + h.Write(buf[:]) + h.Write([]byte(id)) + + return +} + +// VerifyUserIdSignature returns nil iff sig is a valid signature, made by this +// public key, that id is the identity of pub. +func (pk *PublicKey) VerifyUserIdSignature(id string, pub *PublicKey, sig *Signature) (err error) { + h, err := userIdSignatureHash(id, pub, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignature(h, sig) +} + +// VerifyUserIdSignatureV3 returns nil iff sig is a valid signature, made by this +// public key, that id is the identity of pub. +func (pk *PublicKey) VerifyUserIdSignatureV3(id string, pub *PublicKey, sig *SignatureV3) (err error) { + h, err := userIdSignatureV3Hash(id, pub, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignatureV3(h, sig) +} + +// KeyIdString returns the public key's fingerprint in capital hex +// (e.g. "6C7EE1B8621CC013"). +func (pk *PublicKey) KeyIdString() string { + return fmt.Sprintf("%X", pk.Fingerprint[12:20]) +} + +// KeyIdShortString returns the short form of public key's fingerprint +// in capital hex, as shown by gpg --list-keys (e.g. "621CC013"). +func (pk *PublicKey) KeyIdShortString() string { + return fmt.Sprintf("%X", pk.Fingerprint[16:20]) +} + +// A parsedMPI is used to store the contents of a big integer, along with the +// bit length that was specified in the original input. This allows the MPI to +// be reserialized exactly. +type parsedMPI struct { + bytes []byte + bitLength uint16 +} + +// writeMPIs is a utility function for serializing several big integers to the +// given Writer. +func writeMPIs(w io.Writer, mpis ...parsedMPI) (err error) { + for _, mpi := range mpis { + err = writeMPI(w, mpi.bitLength, mpi.bytes) + if err != nil { + return + } + } + return +} + +// BitLength returns the bit length for the given public key. +func (pk *PublicKey) BitLength() (bitLength uint16, err error) { + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + bitLength = pk.n.bitLength + case PubKeyAlgoDSA: + bitLength = pk.p.bitLength + case PubKeyAlgoElGamal: + bitLength = pk.p.bitLength + default: + err = errors.InvalidArgumentError("bad public-key algorithm") + } + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key_test.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key_test.go new file mode 100644 index 0000000..7ad7d91 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/public_key_test.go @@ -0,0 +1,202 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "testing" + "time" +) + +var pubKeyTests = []struct { + hexData string + hexFingerprint string + creationTime time.Time + pubKeyAlgo PublicKeyAlgorithm + keyId uint64 + keyIdString string + keyIdShort string +}{ + {rsaPkDataHex, rsaFingerprintHex, time.Unix(0x4d3c5c10, 0), PubKeyAlgoRSA, 0xa34d7e18c20c31bb, "A34D7E18C20C31BB", "C20C31BB"}, + {dsaPkDataHex, dsaFingerprintHex, time.Unix(0x4d432f89, 0), PubKeyAlgoDSA, 0x8e8fbe54062f19ed, "8E8FBE54062F19ED", "062F19ED"}, + {ecdsaPkDataHex, ecdsaFingerprintHex, time.Unix(0x5071c294, 0), PubKeyAlgoECDSA, 0x43fe956c542ca00b, "43FE956C542CA00B", "542CA00B"}, +} + +func TestPublicKeyRead(t *testing.T) { + for i, test := range pubKeyTests { + packet, err := Read(readerFromHex(test.hexData)) + if err != nil { + t.Errorf("#%d: Read error: %s", i, err) + continue + } + pk, ok := packet.(*PublicKey) + if !ok { + t.Errorf("#%d: failed to parse, got: %#v", i, packet) + continue + } + if pk.PubKeyAlgo != test.pubKeyAlgo { + t.Errorf("#%d: bad public key algorithm got:%x want:%x", i, pk.PubKeyAlgo, test.pubKeyAlgo) + } + if !pk.CreationTime.Equal(test.creationTime) { + t.Errorf("#%d: bad creation time got:%v want:%v", i, pk.CreationTime, test.creationTime) + } + expectedFingerprint, _ := hex.DecodeString(test.hexFingerprint) + if !bytes.Equal(expectedFingerprint, pk.Fingerprint[:]) { + t.Errorf("#%d: bad fingerprint got:%x want:%x", i, pk.Fingerprint[:], expectedFingerprint) + } + if pk.KeyId != test.keyId { + t.Errorf("#%d: bad keyid got:%x want:%x", i, pk.KeyId, test.keyId) + } + if g, e := pk.KeyIdString(), test.keyIdString; g != e { + t.Errorf("#%d: bad KeyIdString got:%q want:%q", i, g, e) + } + if g, e := pk.KeyIdShortString(), test.keyIdShort; g != e { + t.Errorf("#%d: bad KeyIdShortString got:%q want:%q", i, g, e) + } + } +} + +func TestPublicKeySerialize(t *testing.T) { + for i, test := range pubKeyTests { + packet, err := Read(readerFromHex(test.hexData)) + if err != nil { + t.Errorf("#%d: Read error: %s", i, err) + continue + } + pk, ok := packet.(*PublicKey) + if !ok { + t.Errorf("#%d: failed to parse, got: %#v", i, packet) + continue + } + serializeBuf := bytes.NewBuffer(nil) + err = pk.Serialize(serializeBuf) + if err != nil { + t.Errorf("#%d: failed to serialize: %s", i, err) + continue + } + + packet, err = Read(serializeBuf) + if err != nil { + t.Errorf("#%d: Read error (from serialized data): %s", i, err) + continue + } + pk, ok = packet.(*PublicKey) + if !ok { + t.Errorf("#%d: failed to parse serialized data, got: %#v", i, packet) + continue + } + } +} + +func TestEcc384Serialize(t *testing.T) { + r := readerFromHex(ecc384PubHex) + var w bytes.Buffer + for i := 0; i < 2; i++ { + // Public key + p, err := Read(r) + if err != nil { + t.Error(err) + } + pubkey := p.(*PublicKey) + if !bytes.Equal(pubkey.ec.oid, []byte{0x2b, 0x81, 0x04, 0x00, 0x22}) { + t.Errorf("Unexpected pubkey OID: %x", pubkey.ec.oid) + } + if !bytes.Equal(pubkey.ec.p.bytes[:5], []byte{0x04, 0xf6, 0xb8, 0xc5, 0xac}) { + t.Errorf("Unexpected pubkey P[:5]: %x", pubkey.ec.p.bytes) + } + if pubkey.KeyId != 0x098033880F54719F { + t.Errorf("Unexpected pubkey ID: %x", pubkey.KeyId) + } + err = pubkey.Serialize(&w) + if err != nil { + t.Error(err) + } + // User ID + p, err = Read(r) + if err != nil { + t.Error(err) + } + uid := p.(*UserId) + if uid.Id != "ec_dsa_dh_384 " { + t.Error("Unexpected UID:", uid.Id) + } + err = uid.Serialize(&w) + if err != nil { + t.Error(err) + } + // User ID Sig + p, err = Read(r) + if err != nil { + t.Error(err) + } + uidSig := p.(*Signature) + err = pubkey.VerifyUserIdSignature(uid.Id, pubkey, uidSig) + if err != nil { + t.Error(err, ": UID") + } + err = uidSig.Serialize(&w) + if err != nil { + t.Error(err) + } + // Subkey + p, err = Read(r) + if err != nil { + t.Error(err) + } + subkey := p.(*PublicKey) + if !bytes.Equal(subkey.ec.oid, []byte{0x2b, 0x81, 0x04, 0x00, 0x22}) { + t.Errorf("Unexpected subkey OID: %x", subkey.ec.oid) + } + if !bytes.Equal(subkey.ec.p.bytes[:5], []byte{0x04, 0x2f, 0xaa, 0x84, 0x02}) { + t.Errorf("Unexpected subkey P[:5]: %x", subkey.ec.p.bytes) + } + if subkey.ecdh.KdfHash != 0x09 { + t.Error("Expected KDF hash function SHA384 (0x09), got", subkey.ecdh.KdfHash) + } + if subkey.ecdh.KdfAlgo != 0x09 { + t.Error("Expected KDF symmetric alg AES256 (0x09), got", subkey.ecdh.KdfAlgo) + } + if subkey.KeyId != 0xAA8B938F9A201946 { + t.Errorf("Unexpected subkey ID: %x", subkey.KeyId) + } + err = subkey.Serialize(&w) + if err != nil { + t.Error(err) + } + // Subkey Sig + p, err = Read(r) + if err != nil { + t.Error(err) + } + subkeySig := p.(*Signature) + err = pubkey.VerifyKeySignature(subkey, subkeySig) + if err != nil { + t.Error(err) + } + err = subkeySig.Serialize(&w) + if err != nil { + t.Error(err) + } + // Now read back what we've written again + r = bytes.NewBuffer(w.Bytes()) + w.Reset() + } +} + +const rsaFingerprintHex = "5fb74b1d03b1e3cb31bc2f8aa34d7e18c20c31bb" + +const rsaPkDataHex = "988d044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd0011010001" + +const dsaFingerprintHex = "eece4c094db002103714c63c8e8fbe54062f19ed" + +const dsaPkDataHex = "9901a2044d432f89110400cd581334f0d7a1e1bdc8b9d6d8c0baf68793632735d2bb0903224cbaa1dfbf35a60ee7a13b92643421e1eb41aa8d79bea19a115a677f6b8ba3c7818ce53a6c2a24a1608bd8b8d6e55c5090cbde09dd26e356267465ae25e69ec8bdd57c7bbb2623e4d73336f73a0a9098f7f16da2e25252130fd694c0e8070c55a812a423ae7f00a0ebf50e70c2f19c3520a551bd4b08d30f23530d3d03ff7d0bf4a53a64a09dc5e6e6e35854b7d70c882b0c60293401958b1bd9e40abec3ea05ba87cf64899299d4bd6aa7f459c201d3fbbd6c82004bdc5e8a9eb8082d12054cc90fa9d4ec251a843236a588bf49552441817436c4f43326966fe85447d4e6d0acf8fa1ef0f014730770603ad7634c3088dc52501c237328417c31c89ed70400b2f1a98b0bf42f11fefc430704bebbaa41d9f355600c3facee1e490f64208e0e094ea55e3a598a219a58500bf78ac677b670a14f4e47e9cf8eab4f368cc1ddcaa18cc59309d4cc62dd4f680e73e6cc3e1ce87a84d0925efbcb26c575c093fc42eecf45135fabf6403a25c2016e1774c0484e440a18319072c617cc97ac0a3bb0" + +const ecdsaFingerprintHex = "9892270b38b8980b05c8d56d43fe956c542ca00b" + +const ecdsaPkDataHex = "9893045071c29413052b8104002304230401f4867769cedfa52c325018896245443968e52e51d0c2df8d939949cb5b330f2921711fbee1c9b9dddb95d15cb0255e99badeddda7cc23d9ddcaacbc290969b9f24019375d61c2e4e3b36953a28d8b2bc95f78c3f1d592fb24499be348656a7b17e3963187b4361afe497bc5f9f81213f04069f8e1fb9e6a6290ae295ca1a92b894396cb4" + +// Source: https://sites.google.com/site/brainhub/pgpecckeys#TOC-ECC-NIST-P-384-key +const ecc384PubHex = `99006f044d53059213052b81040022030304f6b8c5aced5b84ef9f4a209db2e4a9dfb70d28cb8c10ecd57674a9fa5a67389942b62d5e51367df4c7bfd3f8e500feecf07ed265a621a8ebbbe53e947ec78c677eba143bd1533c2b350e1c29f82313e1e1108eba063be1e64b10e6950e799c2db42465635f6473615f64685f333834203c6f70656e70677040627261696e6875622e6f72673e8900cb04101309005305024d530592301480000000002000077072656665727265642d656d61696c2d656e636f64696e67407067702e636f6d7067706d696d65040b090807021901051b03000000021602051e010000000415090a08000a0910098033880f54719fca2b0180aa37350968bd5f115afd8ce7bc7b103822152dbff06d0afcda835329510905b98cb469ba208faab87c7412b799e7b633017f58364ea480e8a1a3f253a0c5f22c446e8be9a9fce6210136ee30811abbd49139de28b5bdf8dc36d06ae748579e9ff503b90073044d53059212052b810400220303042faa84024a20b6735c4897efa5bfb41bf85b7eefeab5ca0cb9ffc8ea04a46acb25534a577694f9e25340a4ab5223a9dd1eda530c8aa2e6718db10d7e672558c7736fe09369ea5739a2a3554bf16d41faa50562f11c6d39bbd5dffb6b9a9ec9180301090989008404181309000c05024d530592051b0c000000000a0910098033880f54719f80970180eee7a6d8fcee41ee4f9289df17f9bcf9d955dca25c583b94336f3a2b2d4986dc5cf417b8d2dc86f741a9e1a6d236c0e3017d1c76575458a0cfb93ae8a2b274fcc65ceecd7a91eec83656ba13219969f06945b48c56bd04152c3a0553c5f2f4bd1267` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go new file mode 100644 index 0000000..26337f5 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go @@ -0,0 +1,280 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "crypto/md5" + "crypto/rsa" + "encoding/binary" + "fmt" + "hash" + "io" + "math/big" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/errors" +) + +// PublicKeyV3 represents older, version 3 public keys. These keys are less secure and +// should not be used for signing or encrypting. They are supported here only for +// parsing version 3 key material and validating signatures. +// See RFC 4880, section 5.5.2. +type PublicKeyV3 struct { + CreationTime time.Time + DaysToExpire uint16 + PubKeyAlgo PublicKeyAlgorithm + PublicKey *rsa.PublicKey + Fingerprint [16]byte + KeyId uint64 + IsSubkey bool + + n, e parsedMPI +} + +// newRSAPublicKeyV3 returns a PublicKey that wraps the given rsa.PublicKey. +// Included here for testing purposes only. RFC 4880, section 5.5.2: +// "an implementation MUST NOT generate a V3 key, but MAY accept it." +func newRSAPublicKeyV3(creationTime time.Time, pub *rsa.PublicKey) *PublicKeyV3 { + pk := &PublicKeyV3{ + CreationTime: creationTime, + PublicKey: pub, + n: fromBig(pub.N), + e: fromBig(big.NewInt(int64(pub.E))), + } + + pk.setFingerPrintAndKeyId() + return pk +} + +func (pk *PublicKeyV3) parse(r io.Reader) (err error) { + // RFC 4880, section 5.5.2 + var buf [8]byte + if _, err = readFull(r, buf[:]); err != nil { + return + } + if buf[0] < 2 || buf[0] > 3 { + return errors.UnsupportedError("public key version") + } + pk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0) + pk.DaysToExpire = binary.BigEndian.Uint16(buf[5:7]) + pk.PubKeyAlgo = PublicKeyAlgorithm(buf[7]) + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + err = pk.parseRSA(r) + default: + err = errors.UnsupportedError("public key type: " + strconv.Itoa(int(pk.PubKeyAlgo))) + } + if err != nil { + return + } + + pk.setFingerPrintAndKeyId() + return +} + +func (pk *PublicKeyV3) setFingerPrintAndKeyId() { + // RFC 4880, section 12.2 + fingerPrint := md5.New() + fingerPrint.Write(pk.n.bytes) + fingerPrint.Write(pk.e.bytes) + fingerPrint.Sum(pk.Fingerprint[:0]) + pk.KeyId = binary.BigEndian.Uint64(pk.n.bytes[len(pk.n.bytes)-8:]) +} + +// parseRSA parses RSA public key material from the given Reader. See RFC 4880, +// section 5.5.2. +func (pk *PublicKeyV3) parseRSA(r io.Reader) (err error) { + if pk.n.bytes, pk.n.bitLength, err = readMPI(r); err != nil { + return + } + if pk.e.bytes, pk.e.bitLength, err = readMPI(r); err != nil { + return + } + + // RFC 4880 Section 12.2 requires the low 8 bytes of the + // modulus to form the key id. + if len(pk.n.bytes) < 8 { + return errors.StructuralError("v3 public key modulus is too short") + } + if len(pk.e.bytes) > 3 { + err = errors.UnsupportedError("large public exponent") + return + } + rsa := &rsa.PublicKey{N: new(big.Int).SetBytes(pk.n.bytes)} + for i := 0; i < len(pk.e.bytes); i++ { + rsa.E <<= 8 + rsa.E |= int(pk.e.bytes[i]) + } + pk.PublicKey = rsa + return +} + +// SerializeSignaturePrefix writes the prefix for this public key to the given Writer. +// The prefix is used when calculating a signature over this public key. See +// RFC 4880, section 5.2.4. +func (pk *PublicKeyV3) SerializeSignaturePrefix(w io.Writer) { + var pLength uint16 + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + pLength += 2 + uint16(len(pk.n.bytes)) + pLength += 2 + uint16(len(pk.e.bytes)) + default: + panic("unknown public key algorithm") + } + pLength += 6 + w.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)}) + return +} + +func (pk *PublicKeyV3) Serialize(w io.Writer) (err error) { + length := 8 // 8 byte header + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + length += 2 + len(pk.n.bytes) + length += 2 + len(pk.e.bytes) + default: + panic("unknown public key algorithm") + } + + packetType := packetTypePublicKey + if pk.IsSubkey { + packetType = packetTypePublicSubkey + } + if err = serializeHeader(w, packetType, length); err != nil { + return + } + return pk.serializeWithoutHeaders(w) +} + +// serializeWithoutHeaders marshals the PublicKey to w in the form of an +// OpenPGP public key packet, not including the packet header. +func (pk *PublicKeyV3) serializeWithoutHeaders(w io.Writer) (err error) { + var buf [8]byte + // Version 3 + buf[0] = 3 + // Creation time + t := uint32(pk.CreationTime.Unix()) + buf[1] = byte(t >> 24) + buf[2] = byte(t >> 16) + buf[3] = byte(t >> 8) + buf[4] = byte(t) + // Days to expire + buf[5] = byte(pk.DaysToExpire >> 8) + buf[6] = byte(pk.DaysToExpire) + // Public key algorithm + buf[7] = byte(pk.PubKeyAlgo) + + if _, err = w.Write(buf[:]); err != nil { + return + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + return writeMPIs(w, pk.n, pk.e) + } + return errors.InvalidArgumentError("bad public-key algorithm") +} + +// CanSign returns true iff this public key can generate signatures +func (pk *PublicKeyV3) CanSign() bool { + return pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly +} + +// VerifySignatureV3 returns nil iff sig is a valid signature, made by this +// public key, of the data hashed into signed. signed is mutated by this call. +func (pk *PublicKeyV3) VerifySignatureV3(signed hash.Hash, sig *SignatureV3) (err error) { + if !pk.CanSign() { + return errors.InvalidArgumentError("public key cannot generate signatures") + } + + suffix := make([]byte, 5) + suffix[0] = byte(sig.SigType) + binary.BigEndian.PutUint32(suffix[1:], uint32(sig.CreationTime.Unix())) + signed.Write(suffix) + hashBytes := signed.Sum(nil) + + if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { + return errors.SignatureError("hash tag doesn't match") + } + + if pk.PubKeyAlgo != sig.PubKeyAlgo { + return errors.InvalidArgumentError("public key and signature use different algorithms") + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + if err = rsa.VerifyPKCS1v15(pk.PublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes); err != nil { + return errors.SignatureError("RSA verification failure") + } + return + default: + // V3 public keys only support RSA. + panic("shouldn't happen") + } + panic("unreachable") +} + +// VerifyUserIdSignatureV3 returns nil iff sig is a valid signature, made by this +// public key, that id is the identity of pub. +func (pk *PublicKeyV3) VerifyUserIdSignatureV3(id string, pub *PublicKeyV3, sig *SignatureV3) (err error) { + h, err := userIdSignatureV3Hash(id, pk, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignatureV3(h, sig) +} + +// VerifyKeySignatureV3 returns nil iff sig is a valid signature, made by this +// public key, of signed. +func (pk *PublicKeyV3) VerifyKeySignatureV3(signed *PublicKeyV3, sig *SignatureV3) (err error) { + h, err := keySignatureHash(pk, signed, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignatureV3(h, sig) +} + +// userIdSignatureV3Hash returns a Hash of the message that needs to be signed +// to assert that pk is a valid key for id. +func userIdSignatureV3Hash(id string, pk signingKey, hfn crypto.Hash) (h hash.Hash, err error) { + if !hfn.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hfn.New() + + // RFC 4880, section 5.2.4 + pk.SerializeSignaturePrefix(h) + pk.serializeWithoutHeaders(h) + + h.Write([]byte(id)) + + return +} + +// KeyIdString returns the public key's fingerprint in capital hex +// (e.g. "6C7EE1B8621CC013"). +func (pk *PublicKeyV3) KeyIdString() string { + return fmt.Sprintf("%X", pk.KeyId) +} + +// KeyIdShortString returns the short form of public key's fingerprint +// in capital hex, as shown by gpg --list-keys (e.g. "621CC013"). +func (pk *PublicKeyV3) KeyIdShortString() string { + return fmt.Sprintf("%X", pk.KeyId&0xFFFFFFFF) +} + +// BitLength returns the bit length for the given public key. +func (pk *PublicKeyV3) BitLength() (bitLength uint16, err error) { + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + bitLength = pk.n.bitLength + default: + err = errors.InvalidArgumentError("bad public-key algorithm") + } + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3_test.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3_test.go new file mode 100644 index 0000000..e064059 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3_test.go @@ -0,0 +1,82 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "testing" + "time" +) + +var pubKeyV3Test = struct { + hexFingerprint string + creationTime time.Time + pubKeyAlgo PublicKeyAlgorithm + keyId uint64 + keyIdString string + keyIdShort string +}{ + "103BECF5BD1E837C89D19E98487767F7", + time.Unix(779753634, 0), + PubKeyAlgoRSA, + 0xDE0F188A5DA5E3C9, + "DE0F188A5DA5E3C9", + "5DA5E3C9"} + +func TestPublicKeyV3Read(t *testing.T) { + i, test := 0, pubKeyV3Test + packet, err := Read(v3KeyReader(t)) + if err != nil { + t.Fatalf("#%d: Read error: %s", i, err) + } + pk, ok := packet.(*PublicKeyV3) + if !ok { + t.Fatalf("#%d: failed to parse, got: %#v", i, packet) + } + if pk.PubKeyAlgo != test.pubKeyAlgo { + t.Errorf("#%d: bad public key algorithm got:%x want:%x", i, pk.PubKeyAlgo, test.pubKeyAlgo) + } + if !pk.CreationTime.Equal(test.creationTime) { + t.Errorf("#%d: bad creation time got:%v want:%v", i, pk.CreationTime, test.creationTime) + } + expectedFingerprint, _ := hex.DecodeString(test.hexFingerprint) + if !bytes.Equal(expectedFingerprint, pk.Fingerprint[:]) { + t.Errorf("#%d: bad fingerprint got:%x want:%x", i, pk.Fingerprint[:], expectedFingerprint) + } + if pk.KeyId != test.keyId { + t.Errorf("#%d: bad keyid got:%x want:%x", i, pk.KeyId, test.keyId) + } + if g, e := pk.KeyIdString(), test.keyIdString; g != e { + t.Errorf("#%d: bad KeyIdString got:%q want:%q", i, g, e) + } + if g, e := pk.KeyIdShortString(), test.keyIdShort; g != e { + t.Errorf("#%d: bad KeyIdShortString got:%q want:%q", i, g, e) + } +} + +func TestPublicKeyV3Serialize(t *testing.T) { + //for i, test := range pubKeyV3Tests { + i := 0 + packet, err := Read(v3KeyReader(t)) + if err != nil { + t.Fatalf("#%d: Read error: %s", i, err) + } + pk, ok := packet.(*PublicKeyV3) + if !ok { + t.Fatalf("#%d: failed to parse, got: %#v", i, packet) + } + var serializeBuf bytes.Buffer + if err = pk.Serialize(&serializeBuf); err != nil { + t.Fatalf("#%d: failed to serialize: %s", i, err) + } + + if packet, err = Read(bytes.NewBuffer(serializeBuf.Bytes())); err != nil { + t.Fatalf("#%d: Read error (from serialized data): %s", i, err) + } + if pk, ok = packet.(*PublicKeyV3); !ok { + t.Fatalf("#%d: failed to parse serialized data, got: %#v", i, packet) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/reader.go b/vendor/golang.org/x/crypto/openpgp/packet/reader.go new file mode 100644 index 0000000..34bc7c6 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/reader.go @@ -0,0 +1,76 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "golang.org/x/crypto/openpgp/errors" + "io" +) + +// Reader reads packets from an io.Reader and allows packets to be 'unread' so +// that they result from the next call to Next. +type Reader struct { + q []Packet + readers []io.Reader +} + +// New io.Readers are pushed when a compressed or encrypted packet is processed +// and recursively treated as a new source of packets. However, a carefully +// crafted packet can trigger an infinite recursive sequence of packets. See +// http://mumble.net/~campbell/misc/pgp-quine +// https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4402 +// This constant limits the number of recursive packets that may be pushed. +const maxReaders = 32 + +// Next returns the most recently unread Packet, or reads another packet from +// the top-most io.Reader. Unknown packet types are skipped. +func (r *Reader) Next() (p Packet, err error) { + if len(r.q) > 0 { + p = r.q[len(r.q)-1] + r.q = r.q[:len(r.q)-1] + return + } + + for len(r.readers) > 0 { + p, err = Read(r.readers[len(r.readers)-1]) + if err == nil { + return + } + if err == io.EOF { + r.readers = r.readers[:len(r.readers)-1] + continue + } + if _, ok := err.(errors.UnknownPacketTypeError); !ok { + return nil, err + } + } + + return nil, io.EOF +} + +// Push causes the Reader to start reading from a new io.Reader. When an EOF +// error is seen from the new io.Reader, it is popped and the Reader continues +// to read from the next most recent io.Reader. Push returns a StructuralError +// if pushing the reader would exceed the maximum recursion level, otherwise it +// returns nil. +func (r *Reader) Push(reader io.Reader) (err error) { + if len(r.readers) >= maxReaders { + return errors.StructuralError("too many layers of packets") + } + r.readers = append(r.readers, reader) + return nil +} + +// Unread causes the given Packet to be returned from the next call to Next. +func (r *Reader) Unread(p Packet) { + r.q = append(r.q, p) +} + +func NewReader(r io.Reader) *Reader { + return &Reader{ + q: nil, + readers: []io.Reader{r}, + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature.go b/vendor/golang.org/x/crypto/openpgp/packet/signature.go new file mode 100644 index 0000000..6ce0cbe --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/signature.go @@ -0,0 +1,731 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "encoding/asn1" + "encoding/binary" + "hash" + "io" + "math/big" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" +) + +const ( + // See RFC 4880, section 5.2.3.21 for details. + KeyFlagCertify = 1 << iota + KeyFlagSign + KeyFlagEncryptCommunications + KeyFlagEncryptStorage +) + +// Signature represents a signature. See RFC 4880, section 5.2. +type Signature struct { + SigType SignatureType + PubKeyAlgo PublicKeyAlgorithm + Hash crypto.Hash + + // HashSuffix is extra data that is hashed in after the signed data. + HashSuffix []byte + // HashTag contains the first two bytes of the hash for fast rejection + // of bad signed data. + HashTag [2]byte + CreationTime time.Time + + RSASignature parsedMPI + DSASigR, DSASigS parsedMPI + ECDSASigR, ECDSASigS parsedMPI + + // rawSubpackets contains the unparsed subpackets, in order. + rawSubpackets []outputSubpacket + + // The following are optional so are nil when not included in the + // signature. + + SigLifetimeSecs, KeyLifetimeSecs *uint32 + PreferredSymmetric, PreferredHash, PreferredCompression []uint8 + IssuerKeyId *uint64 + IsPrimaryId *bool + + // FlagsValid is set if any flags were given. See RFC 4880, section + // 5.2.3.21 for details. + FlagsValid bool + FlagCertify, FlagSign, FlagEncryptCommunications, FlagEncryptStorage bool + + // RevocationReason is set if this signature has been revoked. + // See RFC 4880, section 5.2.3.23 for details. + RevocationReason *uint8 + RevocationReasonText string + + // MDC is set if this signature has a feature packet that indicates + // support for MDC subpackets. + MDC bool + + // EmbeddedSignature, if non-nil, is a signature of the parent key, by + // this key. This prevents an attacker from claiming another's signing + // subkey as their own. + EmbeddedSignature *Signature + + outSubpackets []outputSubpacket +} + +func (sig *Signature) parse(r io.Reader) (err error) { + // RFC 4880, section 5.2.3 + var buf [5]byte + _, err = readFull(r, buf[:1]) + if err != nil { + return + } + if buf[0] != 4 { + err = errors.UnsupportedError("signature packet version " + strconv.Itoa(int(buf[0]))) + return + } + + _, err = readFull(r, buf[:5]) + if err != nil { + return + } + sig.SigType = SignatureType(buf[0]) + sig.PubKeyAlgo = PublicKeyAlgorithm(buf[1]) + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA: + default: + err = errors.UnsupportedError("public key algorithm " + strconv.Itoa(int(sig.PubKeyAlgo))) + return + } + + var ok bool + sig.Hash, ok = s2k.HashIdToHash(buf[2]) + if !ok { + return errors.UnsupportedError("hash function " + strconv.Itoa(int(buf[2]))) + } + + hashedSubpacketsLength := int(buf[3])<<8 | int(buf[4]) + l := 6 + hashedSubpacketsLength + sig.HashSuffix = make([]byte, l+6) + sig.HashSuffix[0] = 4 + copy(sig.HashSuffix[1:], buf[:5]) + hashedSubpackets := sig.HashSuffix[6:l] + _, err = readFull(r, hashedSubpackets) + if err != nil { + return + } + // See RFC 4880, section 5.2.4 + trailer := sig.HashSuffix[l:] + trailer[0] = 4 + trailer[1] = 0xff + trailer[2] = uint8(l >> 24) + trailer[3] = uint8(l >> 16) + trailer[4] = uint8(l >> 8) + trailer[5] = uint8(l) + + err = parseSignatureSubpackets(sig, hashedSubpackets, true) + if err != nil { + return + } + + _, err = readFull(r, buf[:2]) + if err != nil { + return + } + unhashedSubpacketsLength := int(buf[0])<<8 | int(buf[1]) + unhashedSubpackets := make([]byte, unhashedSubpacketsLength) + _, err = readFull(r, unhashedSubpackets) + if err != nil { + return + } + err = parseSignatureSubpackets(sig, unhashedSubpackets, false) + if err != nil { + return + } + + _, err = readFull(r, sig.HashTag[:2]) + if err != nil { + return + } + + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + sig.RSASignature.bytes, sig.RSASignature.bitLength, err = readMPI(r) + case PubKeyAlgoDSA: + sig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r) + if err == nil { + sig.DSASigS.bytes, sig.DSASigS.bitLength, err = readMPI(r) + } + case PubKeyAlgoECDSA: + sig.ECDSASigR.bytes, sig.ECDSASigR.bitLength, err = readMPI(r) + if err == nil { + sig.ECDSASigS.bytes, sig.ECDSASigS.bitLength, err = readMPI(r) + } + default: + panic("unreachable") + } + return +} + +// parseSignatureSubpackets parses subpackets of the main signature packet. See +// RFC 4880, section 5.2.3.1. +func parseSignatureSubpackets(sig *Signature, subpackets []byte, isHashed bool) (err error) { + for len(subpackets) > 0 { + subpackets, err = parseSignatureSubpacket(sig, subpackets, isHashed) + if err != nil { + return + } + } + + if sig.CreationTime.IsZero() { + err = errors.StructuralError("no creation time in signature") + } + + return +} + +type signatureSubpacketType uint8 + +const ( + creationTimeSubpacket signatureSubpacketType = 2 + signatureExpirationSubpacket signatureSubpacketType = 3 + keyExpirationSubpacket signatureSubpacketType = 9 + prefSymmetricAlgosSubpacket signatureSubpacketType = 11 + issuerSubpacket signatureSubpacketType = 16 + prefHashAlgosSubpacket signatureSubpacketType = 21 + prefCompressionSubpacket signatureSubpacketType = 22 + primaryUserIdSubpacket signatureSubpacketType = 25 + keyFlagsSubpacket signatureSubpacketType = 27 + reasonForRevocationSubpacket signatureSubpacketType = 29 + featuresSubpacket signatureSubpacketType = 30 + embeddedSignatureSubpacket signatureSubpacketType = 32 +) + +// parseSignatureSubpacket parses a single subpacket. len(subpacket) is >= 1. +func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (rest []byte, err error) { + // RFC 4880, section 5.2.3.1 + var ( + length uint32 + packetType signatureSubpacketType + isCritical bool + ) + switch { + case subpacket[0] < 192: + length = uint32(subpacket[0]) + subpacket = subpacket[1:] + case subpacket[0] < 255: + if len(subpacket) < 2 { + goto Truncated + } + length = uint32(subpacket[0]-192)<<8 + uint32(subpacket[1]) + 192 + subpacket = subpacket[2:] + default: + if len(subpacket) < 5 { + goto Truncated + } + length = uint32(subpacket[1])<<24 | + uint32(subpacket[2])<<16 | + uint32(subpacket[3])<<8 | + uint32(subpacket[4]) + subpacket = subpacket[5:] + } + if length > uint32(len(subpacket)) { + goto Truncated + } + rest = subpacket[length:] + subpacket = subpacket[:length] + if len(subpacket) == 0 { + err = errors.StructuralError("zero length signature subpacket") + return + } + packetType = signatureSubpacketType(subpacket[0] & 0x7f) + isCritical = subpacket[0]&0x80 == 0x80 + subpacket = subpacket[1:] + sig.rawSubpackets = append(sig.rawSubpackets, outputSubpacket{isHashed, packetType, isCritical, subpacket}) + switch packetType { + case creationTimeSubpacket: + if !isHashed { + err = errors.StructuralError("signature creation time in non-hashed area") + return + } + if len(subpacket) != 4 { + err = errors.StructuralError("signature creation time not four bytes") + return + } + t := binary.BigEndian.Uint32(subpacket) + sig.CreationTime = time.Unix(int64(t), 0) + case signatureExpirationSubpacket: + // Signature expiration time, section 5.2.3.10 + if !isHashed { + return + } + if len(subpacket) != 4 { + err = errors.StructuralError("expiration subpacket with bad length") + return + } + sig.SigLifetimeSecs = new(uint32) + *sig.SigLifetimeSecs = binary.BigEndian.Uint32(subpacket) + case keyExpirationSubpacket: + // Key expiration time, section 5.2.3.6 + if !isHashed { + return + } + if len(subpacket) != 4 { + err = errors.StructuralError("key expiration subpacket with bad length") + return + } + sig.KeyLifetimeSecs = new(uint32) + *sig.KeyLifetimeSecs = binary.BigEndian.Uint32(subpacket) + case prefSymmetricAlgosSubpacket: + // Preferred symmetric algorithms, section 5.2.3.7 + if !isHashed { + return + } + sig.PreferredSymmetric = make([]byte, len(subpacket)) + copy(sig.PreferredSymmetric, subpacket) + case issuerSubpacket: + // Issuer, section 5.2.3.5 + if len(subpacket) != 8 { + err = errors.StructuralError("issuer subpacket with bad length") + return + } + sig.IssuerKeyId = new(uint64) + *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket) + case prefHashAlgosSubpacket: + // Preferred hash algorithms, section 5.2.3.8 + if !isHashed { + return + } + sig.PreferredHash = make([]byte, len(subpacket)) + copy(sig.PreferredHash, subpacket) + case prefCompressionSubpacket: + // Preferred compression algorithms, section 5.2.3.9 + if !isHashed { + return + } + sig.PreferredCompression = make([]byte, len(subpacket)) + copy(sig.PreferredCompression, subpacket) + case primaryUserIdSubpacket: + // Primary User ID, section 5.2.3.19 + if !isHashed { + return + } + if len(subpacket) != 1 { + err = errors.StructuralError("primary user id subpacket with bad length") + return + } + sig.IsPrimaryId = new(bool) + if subpacket[0] > 0 { + *sig.IsPrimaryId = true + } + case keyFlagsSubpacket: + // Key flags, section 5.2.3.21 + if !isHashed { + return + } + if len(subpacket) == 0 { + err = errors.StructuralError("empty key flags subpacket") + return + } + sig.FlagsValid = true + if subpacket[0]&KeyFlagCertify != 0 { + sig.FlagCertify = true + } + if subpacket[0]&KeyFlagSign != 0 { + sig.FlagSign = true + } + if subpacket[0]&KeyFlagEncryptCommunications != 0 { + sig.FlagEncryptCommunications = true + } + if subpacket[0]&KeyFlagEncryptStorage != 0 { + sig.FlagEncryptStorage = true + } + case reasonForRevocationSubpacket: + // Reason For Revocation, section 5.2.3.23 + if !isHashed { + return + } + if len(subpacket) == 0 { + err = errors.StructuralError("empty revocation reason subpacket") + return + } + sig.RevocationReason = new(uint8) + *sig.RevocationReason = subpacket[0] + sig.RevocationReasonText = string(subpacket[1:]) + case featuresSubpacket: + // Features subpacket, section 5.2.3.24 specifies a very general + // mechanism for OpenPGP implementations to signal support for new + // features. In practice, the subpacket is used exclusively to + // indicate support for MDC-protected encryption. + sig.MDC = len(subpacket) >= 1 && subpacket[0]&1 == 1 + case embeddedSignatureSubpacket: + // Only usage is in signatures that cross-certify + // signing subkeys. section 5.2.3.26 describes the + // format, with its usage described in section 11.1 + if sig.EmbeddedSignature != nil { + err = errors.StructuralError("Cannot have multiple embedded signatures") + return + } + sig.EmbeddedSignature = new(Signature) + // Embedded signatures are required to be v4 signatures see + // section 12.1. However, we only parse v4 signatures in this + // file anyway. + if err := sig.EmbeddedSignature.parse(bytes.NewBuffer(subpacket)); err != nil { + return nil, err + } + if sigType := sig.EmbeddedSignature.SigType; sigType != SigTypePrimaryKeyBinding { + return nil, errors.StructuralError("cross-signature has unexpected type " + strconv.Itoa(int(sigType))) + } + default: + if isCritical { + err = errors.UnsupportedError("unknown critical signature subpacket type " + strconv.Itoa(int(packetType))) + return + } + } + return + +Truncated: + err = errors.StructuralError("signature subpacket truncated") + return +} + +// subpacketLengthLength returns the length, in bytes, of an encoded length value. +func subpacketLengthLength(length int) int { + if length < 192 { + return 1 + } + if length < 16320 { + return 2 + } + return 5 +} + +// serializeSubpacketLength marshals the given length into to. +func serializeSubpacketLength(to []byte, length int) int { + // RFC 4880, Section 4.2.2. + if length < 192 { + to[0] = byte(length) + return 1 + } + if length < 16320 { + length -= 192 + to[0] = byte((length >> 8) + 192) + to[1] = byte(length) + return 2 + } + to[0] = 255 + to[1] = byte(length >> 24) + to[2] = byte(length >> 16) + to[3] = byte(length >> 8) + to[4] = byte(length) + return 5 +} + +// subpacketsLength returns the serialized length, in bytes, of the given +// subpackets. +func subpacketsLength(subpackets []outputSubpacket, hashed bool) (length int) { + for _, subpacket := range subpackets { + if subpacket.hashed == hashed { + length += subpacketLengthLength(len(subpacket.contents) + 1) + length += 1 // type byte + length += len(subpacket.contents) + } + } + return +} + +// serializeSubpackets marshals the given subpackets into to. +func serializeSubpackets(to []byte, subpackets []outputSubpacket, hashed bool) { + for _, subpacket := range subpackets { + if subpacket.hashed == hashed { + n := serializeSubpacketLength(to, len(subpacket.contents)+1) + to[n] = byte(subpacket.subpacketType) + to = to[1+n:] + n = copy(to, subpacket.contents) + to = to[n:] + } + } + return +} + +// KeyExpired returns whether sig is a self-signature of a key that has +// expired. +func (sig *Signature) KeyExpired(currentTime time.Time) bool { + if sig.KeyLifetimeSecs == nil { + return false + } + expiry := sig.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * time.Second) + return currentTime.After(expiry) +} + +// buildHashSuffix constructs the HashSuffix member of sig in preparation for signing. +func (sig *Signature) buildHashSuffix() (err error) { + hashedSubpacketsLen := subpacketsLength(sig.outSubpackets, true) + + var ok bool + l := 6 + hashedSubpacketsLen + sig.HashSuffix = make([]byte, l+6) + sig.HashSuffix[0] = 4 + sig.HashSuffix[1] = uint8(sig.SigType) + sig.HashSuffix[2] = uint8(sig.PubKeyAlgo) + sig.HashSuffix[3], ok = s2k.HashToHashId(sig.Hash) + if !ok { + sig.HashSuffix = nil + return errors.InvalidArgumentError("hash cannot be represented in OpenPGP: " + strconv.Itoa(int(sig.Hash))) + } + sig.HashSuffix[4] = byte(hashedSubpacketsLen >> 8) + sig.HashSuffix[5] = byte(hashedSubpacketsLen) + serializeSubpackets(sig.HashSuffix[6:l], sig.outSubpackets, true) + trailer := sig.HashSuffix[l:] + trailer[0] = 4 + trailer[1] = 0xff + trailer[2] = byte(l >> 24) + trailer[3] = byte(l >> 16) + trailer[4] = byte(l >> 8) + trailer[5] = byte(l) + return +} + +func (sig *Signature) signPrepareHash(h hash.Hash) (digest []byte, err error) { + err = sig.buildHashSuffix() + if err != nil { + return + } + + h.Write(sig.HashSuffix) + digest = h.Sum(nil) + copy(sig.HashTag[:], digest) + return +} + +// Sign signs a message with a private key. The hash, h, must contain +// the hash of the message to be signed and will be mutated by this function. +// On success, the signature is stored in sig. Call Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err error) { + sig.outSubpackets = sig.buildSubpackets() + digest, err := sig.signPrepareHash(h) + if err != nil { + return + } + + switch priv.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + // supports both *rsa.PrivateKey and crypto.Signer + sig.RSASignature.bytes, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash) + sig.RSASignature.bitLength = uint16(8 * len(sig.RSASignature.bytes)) + case PubKeyAlgoDSA: + dsaPriv := priv.PrivateKey.(*dsa.PrivateKey) + + // Need to truncate hashBytes to match FIPS 186-3 section 4.6. + subgroupSize := (dsaPriv.Q.BitLen() + 7) / 8 + if len(digest) > subgroupSize { + digest = digest[:subgroupSize] + } + r, s, err := dsa.Sign(config.Random(), dsaPriv, digest) + if err == nil { + sig.DSASigR.bytes = r.Bytes() + sig.DSASigR.bitLength = uint16(8 * len(sig.DSASigR.bytes)) + sig.DSASigS.bytes = s.Bytes() + sig.DSASigS.bitLength = uint16(8 * len(sig.DSASigS.bytes)) + } + case PubKeyAlgoECDSA: + var r, s *big.Int + if pk, ok := priv.PrivateKey.(*ecdsa.PrivateKey); ok { + // direct support, avoid asn1 wrapping/unwrapping + r, s, err = ecdsa.Sign(config.Random(), pk, digest) + } else { + var b []byte + b, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, nil) + if err == nil { + r, s, err = unwrapECDSASig(b) + } + } + if err == nil { + sig.ECDSASigR = fromBig(r) + sig.ECDSASigS = fromBig(s) + } + default: + err = errors.UnsupportedError("public key algorithm: " + strconv.Itoa(int(sig.PubKeyAlgo))) + } + + return +} + +// unwrapECDSASig parses the two integer components of an ASN.1-encoded ECDSA +// signature. +func unwrapECDSASig(b []byte) (r, s *big.Int, err error) { + var ecsdaSig struct { + R, S *big.Int + } + _, err = asn1.Unmarshal(b, &ecsdaSig) + if err != nil { + return + } + return ecsdaSig.R, ecsdaSig.S, nil +} + +// SignUserId computes a signature from priv, asserting that pub is a valid +// key for the identity id. On success, the signature is stored in sig. Call +// Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) SignUserId(id string, pub *PublicKey, priv *PrivateKey, config *Config) error { + h, err := userIdSignatureHash(id, pub, sig.Hash) + if err != nil { + return err + } + return sig.Sign(h, priv, config) +} + +// SignKey computes a signature from priv, asserting that pub is a subkey. On +// success, the signature is stored in sig. Call Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) SignKey(pub *PublicKey, priv *PrivateKey, config *Config) error { + h, err := keySignatureHash(&priv.PublicKey, pub, sig.Hash) + if err != nil { + return err + } + return sig.Sign(h, priv, config) +} + +// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been +// called first. +func (sig *Signature) Serialize(w io.Writer) (err error) { + if len(sig.outSubpackets) == 0 { + sig.outSubpackets = sig.rawSubpackets + } + if sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil && sig.ECDSASigR.bytes == nil { + return errors.InvalidArgumentError("Signature: need to call Sign, SignUserId or SignKey before Serialize") + } + + sigLength := 0 + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + sigLength = 2 + len(sig.RSASignature.bytes) + case PubKeyAlgoDSA: + sigLength = 2 + len(sig.DSASigR.bytes) + sigLength += 2 + len(sig.DSASigS.bytes) + case PubKeyAlgoECDSA: + sigLength = 2 + len(sig.ECDSASigR.bytes) + sigLength += 2 + len(sig.ECDSASigS.bytes) + default: + panic("impossible") + } + + unhashedSubpacketsLen := subpacketsLength(sig.outSubpackets, false) + length := len(sig.HashSuffix) - 6 /* trailer not included */ + + 2 /* length of unhashed subpackets */ + unhashedSubpacketsLen + + 2 /* hash tag */ + sigLength + err = serializeHeader(w, packetTypeSignature, length) + if err != nil { + return + } + + _, err = w.Write(sig.HashSuffix[:len(sig.HashSuffix)-6]) + if err != nil { + return + } + + unhashedSubpackets := make([]byte, 2+unhashedSubpacketsLen) + unhashedSubpackets[0] = byte(unhashedSubpacketsLen >> 8) + unhashedSubpackets[1] = byte(unhashedSubpacketsLen) + serializeSubpackets(unhashedSubpackets[2:], sig.outSubpackets, false) + + _, err = w.Write(unhashedSubpackets) + if err != nil { + return + } + _, err = w.Write(sig.HashTag[:]) + if err != nil { + return + } + + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + err = writeMPIs(w, sig.RSASignature) + case PubKeyAlgoDSA: + err = writeMPIs(w, sig.DSASigR, sig.DSASigS) + case PubKeyAlgoECDSA: + err = writeMPIs(w, sig.ECDSASigR, sig.ECDSASigS) + default: + panic("impossible") + } + return +} + +// outputSubpacket represents a subpacket to be marshaled. +type outputSubpacket struct { + hashed bool // true if this subpacket is in the hashed area. + subpacketType signatureSubpacketType + isCritical bool + contents []byte +} + +func (sig *Signature) buildSubpackets() (subpackets []outputSubpacket) { + creationTime := make([]byte, 4) + binary.BigEndian.PutUint32(creationTime, uint32(sig.CreationTime.Unix())) + subpackets = append(subpackets, outputSubpacket{true, creationTimeSubpacket, false, creationTime}) + + if sig.IssuerKeyId != nil { + keyId := make([]byte, 8) + binary.BigEndian.PutUint64(keyId, *sig.IssuerKeyId) + subpackets = append(subpackets, outputSubpacket{true, issuerSubpacket, false, keyId}) + } + + if sig.SigLifetimeSecs != nil && *sig.SigLifetimeSecs != 0 { + sigLifetime := make([]byte, 4) + binary.BigEndian.PutUint32(sigLifetime, *sig.SigLifetimeSecs) + subpackets = append(subpackets, outputSubpacket{true, signatureExpirationSubpacket, true, sigLifetime}) + } + + // Key flags may only appear in self-signatures or certification signatures. + + if sig.FlagsValid { + var flags byte + if sig.FlagCertify { + flags |= KeyFlagCertify + } + if sig.FlagSign { + flags |= KeyFlagSign + } + if sig.FlagEncryptCommunications { + flags |= KeyFlagEncryptCommunications + } + if sig.FlagEncryptStorage { + flags |= KeyFlagEncryptStorage + } + subpackets = append(subpackets, outputSubpacket{true, keyFlagsSubpacket, false, []byte{flags}}) + } + + // The following subpackets may only appear in self-signatures + + if sig.KeyLifetimeSecs != nil && *sig.KeyLifetimeSecs != 0 { + keyLifetime := make([]byte, 4) + binary.BigEndian.PutUint32(keyLifetime, *sig.KeyLifetimeSecs) + subpackets = append(subpackets, outputSubpacket{true, keyExpirationSubpacket, true, keyLifetime}) + } + + if sig.IsPrimaryId != nil && *sig.IsPrimaryId { + subpackets = append(subpackets, outputSubpacket{true, primaryUserIdSubpacket, false, []byte{1}}) + } + + if len(sig.PreferredSymmetric) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefSymmetricAlgosSubpacket, false, sig.PreferredSymmetric}) + } + + if len(sig.PreferredHash) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefHashAlgosSubpacket, false, sig.PreferredHash}) + } + + if len(sig.PreferredCompression) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefCompressionSubpacket, false, sig.PreferredCompression}) + } + + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go b/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go new file mode 100644 index 0000000..56e7611 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go @@ -0,0 +1,78 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "encoding/hex" + "testing" +) + +func TestSignatureRead(t *testing.T) { + packet, err := Read(readerFromHex(signatureDataHex)) + if err != nil { + t.Error(err) + return + } + sig, ok := packet.(*Signature) + if !ok || sig.SigType != SigTypeBinary || sig.PubKeyAlgo != PubKeyAlgoRSA || sig.Hash != crypto.SHA1 { + t.Errorf("failed to parse, got: %#v", packet) + } +} + +func TestSignatureReserialize(t *testing.T) { + packet, _ := Read(readerFromHex(signatureDataHex)) + sig := packet.(*Signature) + out := new(bytes.Buffer) + err := sig.Serialize(out) + if err != nil { + t.Errorf("error reserializing: %s", err) + return + } + + expected, _ := hex.DecodeString(signatureDataHex) + if !bytes.Equal(expected, out.Bytes()) { + t.Errorf("output doesn't match input (got vs expected):\n%s\n%s", hex.Dump(out.Bytes()), hex.Dump(expected)) + } +} + +func TestSignUserId(t *testing.T) { + sig := &Signature{ + SigType: SigTypeGenericCert, + PubKeyAlgo: PubKeyAlgoRSA, + Hash: 0, // invalid hash function + } + + packet, err := Read(readerFromHex(rsaPkDataHex)) + if err != nil { + t.Fatalf("failed to deserialize public key: %v", err) + } + pubKey := packet.(*PublicKey) + + packet, err = Read(readerFromHex(privKeyRSAHex)) + if err != nil { + t.Fatalf("failed to deserialize private key: %v", err) + } + privKey := packet.(*PrivateKey) + + err = sig.SignUserId("", pubKey, privKey, nil) + if err == nil { + t.Errorf("did not receive an error when expected") + } + + sig.Hash = crypto.SHA256 + err = privKey.Decrypt([]byte("testing")) + if err != nil { + t.Fatalf("failed to decrypt private key: %v", err) + } + + err = sig.SignUserId("", pubKey, privKey, nil) + if err != nil { + t.Errorf("failed to sign user id: %v", err) + } +} + +const signatureDataHex = "c2c05c04000102000605024cb45112000a0910ab105c91af38fb158f8d07ff5596ea368c5efe015bed6e78348c0f033c931d5f2ce5db54ce7f2a7e4b4ad64db758d65a7a71773edeab7ba2a9e0908e6a94a1175edd86c1d843279f045b021a6971a72702fcbd650efc393c5474d5b59a15f96d2eaad4c4c426797e0dcca2803ef41c6ff234d403eec38f31d610c344c06f2401c262f0993b2e66cad8a81ebc4322c723e0d4ba09fe917e8777658307ad8329adacba821420741009dfe87f007759f0982275d028a392c6ed983a0d846f890b36148c7358bdb8a516007fac760261ecd06076813831a36d0459075d1befa245ae7f7fb103d92ca759e9498fe60ef8078a39a3beda510deea251ea9f0a7f0df6ef42060f20780360686f3e400e" diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go b/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go new file mode 100644 index 0000000..6edff88 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go @@ -0,0 +1,146 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "encoding/binary" + "fmt" + "io" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" +) + +// SignatureV3 represents older version 3 signatures. These signatures are less secure +// than version 4 and should not be used to create new signatures. They are included +// here for backwards compatibility to read and validate with older key material. +// See RFC 4880, section 5.2.2. +type SignatureV3 struct { + SigType SignatureType + CreationTime time.Time + IssuerKeyId uint64 + PubKeyAlgo PublicKeyAlgorithm + Hash crypto.Hash + HashTag [2]byte + + RSASignature parsedMPI + DSASigR, DSASigS parsedMPI +} + +func (sig *SignatureV3) parse(r io.Reader) (err error) { + // RFC 4880, section 5.2.2 + var buf [8]byte + if _, err = readFull(r, buf[:1]); err != nil { + return + } + if buf[0] < 2 || buf[0] > 3 { + err = errors.UnsupportedError("signature packet version " + strconv.Itoa(int(buf[0]))) + return + } + if _, err = readFull(r, buf[:1]); err != nil { + return + } + if buf[0] != 5 { + err = errors.UnsupportedError( + "invalid hashed material length " + strconv.Itoa(int(buf[0]))) + return + } + + // Read hashed material: signature type + creation time + if _, err = readFull(r, buf[:5]); err != nil { + return + } + sig.SigType = SignatureType(buf[0]) + t := binary.BigEndian.Uint32(buf[1:5]) + sig.CreationTime = time.Unix(int64(t), 0) + + // Eight-octet Key ID of signer. + if _, err = readFull(r, buf[:8]); err != nil { + return + } + sig.IssuerKeyId = binary.BigEndian.Uint64(buf[:]) + + // Public-key and hash algorithm + if _, err = readFull(r, buf[:2]); err != nil { + return + } + sig.PubKeyAlgo = PublicKeyAlgorithm(buf[0]) + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA: + default: + err = errors.UnsupportedError("public key algorithm " + strconv.Itoa(int(sig.PubKeyAlgo))) + return + } + var ok bool + if sig.Hash, ok = s2k.HashIdToHash(buf[1]); !ok { + return errors.UnsupportedError("hash function " + strconv.Itoa(int(buf[2]))) + } + + // Two-octet field holding left 16 bits of signed hash value. + if _, err = readFull(r, sig.HashTag[:2]); err != nil { + return + } + + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + sig.RSASignature.bytes, sig.RSASignature.bitLength, err = readMPI(r) + case PubKeyAlgoDSA: + if sig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r); err != nil { + return + } + sig.DSASigS.bytes, sig.DSASigS.bitLength, err = readMPI(r) + default: + panic("unreachable") + } + return +} + +// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been +// called first. +func (sig *SignatureV3) Serialize(w io.Writer) (err error) { + buf := make([]byte, 8) + + // Write the sig type and creation time + buf[0] = byte(sig.SigType) + binary.BigEndian.PutUint32(buf[1:5], uint32(sig.CreationTime.Unix())) + if _, err = w.Write(buf[:5]); err != nil { + return + } + + // Write the issuer long key ID + binary.BigEndian.PutUint64(buf[:8], sig.IssuerKeyId) + if _, err = w.Write(buf[:8]); err != nil { + return + } + + // Write public key algorithm, hash ID, and hash value + buf[0] = byte(sig.PubKeyAlgo) + hashId, ok := s2k.HashToHashId(sig.Hash) + if !ok { + return errors.UnsupportedError(fmt.Sprintf("hash function %v", sig.Hash)) + } + buf[1] = hashId + copy(buf[2:4], sig.HashTag[:]) + if _, err = w.Write(buf[:4]); err != nil { + return + } + + if sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil { + return errors.InvalidArgumentError("Signature: need to call Sign, SignUserId or SignKey before Serialize") + } + + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + err = writeMPIs(w, sig.RSASignature) + case PubKeyAlgoDSA: + err = writeMPIs(w, sig.DSASigR, sig.DSASigS) + default: + panic("impossible") + } + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go b/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go new file mode 100644 index 0000000..ad7b62a --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go @@ -0,0 +1,92 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "encoding/hex" + "io" + "io/ioutil" + "testing" + + "golang.org/x/crypto/openpgp/armor" +) + +func TestSignatureV3Read(t *testing.T) { + r := v3KeyReader(t) + Read(r) // Skip public key + Read(r) // Skip uid + packet, err := Read(r) // Signature + if err != nil { + t.Error(err) + return + } + sig, ok := packet.(*SignatureV3) + if !ok || sig.SigType != SigTypeGenericCert || sig.PubKeyAlgo != PubKeyAlgoRSA || sig.Hash != crypto.MD5 { + t.Errorf("failed to parse, got: %#v", packet) + } +} + +func TestSignatureV3Reserialize(t *testing.T) { + r := v3KeyReader(t) + Read(r) // Skip public key + Read(r) // Skip uid + packet, err := Read(r) + if err != nil { + t.Error(err) + return + } + sig := packet.(*SignatureV3) + out := new(bytes.Buffer) + if err = sig.Serialize(out); err != nil { + t.Errorf("error reserializing: %s", err) + return + } + expected, err := ioutil.ReadAll(v3KeyReader(t)) + if err != nil { + t.Error(err) + return + } + expected = expected[4+141+4+39:] // See pgpdump offsets below, this is where the sig starts + if !bytes.Equal(expected, out.Bytes()) { + t.Errorf("output doesn't match input (got vs expected):\n%s\n%s", hex.Dump(out.Bytes()), hex.Dump(expected)) + } +} + +func v3KeyReader(t *testing.T) io.Reader { + armorBlock, err := armor.Decode(bytes.NewBufferString(keySigV3Armor)) + if err != nil { + t.Fatalf("armor Decode failed: %v", err) + } + return armorBlock.Body +} + +// keySigV3Armor is some V3 public key I found in an SKS dump. +// Old: Public Key Packet(tag 6)(141 bytes) +// Ver 4 - new +// Public key creation time - Fri Sep 16 17:13:54 CDT 1994 +// Pub alg - unknown(pub 0) +// Unknown public key(pub 0) +// Old: User ID Packet(tag 13)(39 bytes) +// User ID - Armin M. Warda +// Old: Signature Packet(tag 2)(149 bytes) +// Ver 4 - new +// Sig type - unknown(05) +// Pub alg - ElGamal Encrypt-Only(pub 16) +// Hash alg - unknown(hash 46) +// Hashed Sub: unknown(sub 81, critical)(1988 bytes) +const keySigV3Armor = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: SKS 1.0.10 + +mI0CLnoYogAAAQQA1qwA2SuJwfQ5bCQ6u5t20ulnOtY0gykf7YjiK4LiVeRBwHjGq7v30tGV +5Qti7qqRW4Ww7CDCJc4sZMFnystucR2vLkXaSoNWoFm4Fg47NiisDdhDezHwbVPW6OpCFNSi +ZAamtj4QAUBu8j4LswafrJqZqR9336/V3g8Yil2l48kABRG0J0FybWluIE0uIFdhcmRhIDx3 +YXJkYUBuZXBoaWxpbS5ydWhyLmRlPoiVAgUQLok2xwXR6zmeWEiZAQE/DgP/WgxPQh40/Po4 +gSkWZCDAjNdph7zexvAb0CcUWahcwiBIgg3U5ErCx9I5CNVA9U+s8bNrDZwgSIeBzp3KhWUx +524uhGgm6ZUTOAIKA6CbV6pfqoLpJnRYvXYQU5mIWsNa99wcu2qu18OeEDnztb7aLA6Ra9OF +YFCbq4EjXRoOrYM= +=LPjs +-----END PGP PUBLIC KEY BLOCK-----` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go new file mode 100644 index 0000000..4b1105b --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go @@ -0,0 +1,155 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto/cipher" + "io" + "strconv" + + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" +) + +// This is the largest session key that we'll support. Since no 512-bit cipher +// has even been seriously used, this is comfortably large. +const maxSessionKeySizeInBytes = 64 + +// SymmetricKeyEncrypted represents a passphrase protected session key. See RFC +// 4880, section 5.3. +type SymmetricKeyEncrypted struct { + CipherFunc CipherFunction + s2k func(out, in []byte) + encryptedKey []byte +} + +const symmetricKeyEncryptedVersion = 4 + +func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error { + // RFC 4880, section 5.3. + var buf [2]byte + if _, err := readFull(r, buf[:]); err != nil { + return err + } + if buf[0] != symmetricKeyEncryptedVersion { + return errors.UnsupportedError("SymmetricKeyEncrypted version") + } + ske.CipherFunc = CipherFunction(buf[1]) + + if ske.CipherFunc.KeySize() == 0 { + return errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(buf[1]))) + } + + var err error + ske.s2k, err = s2k.Parse(r) + if err != nil { + return err + } + + encryptedKey := make([]byte, maxSessionKeySizeInBytes) + // The session key may follow. We just have to try and read to find + // out. If it exists then we limit it to maxSessionKeySizeInBytes. + n, err := readFull(r, encryptedKey) + if err != nil && err != io.ErrUnexpectedEOF { + return err + } + + if n != 0 { + if n == maxSessionKeySizeInBytes { + return errors.UnsupportedError("oversized encrypted session key") + } + ske.encryptedKey = encryptedKey[:n] + } + + return nil +} + +// Decrypt attempts to decrypt an encrypted session key and returns the key and +// the cipher to use when decrypting a subsequent Symmetrically Encrypted Data +// packet. +func (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) ([]byte, CipherFunction, error) { + key := make([]byte, ske.CipherFunc.KeySize()) + ske.s2k(key, passphrase) + + if len(ske.encryptedKey) == 0 { + return key, ske.CipherFunc, nil + } + + // the IV is all zeros + iv := make([]byte, ske.CipherFunc.blockSize()) + c := cipher.NewCFBDecrypter(ske.CipherFunc.new(key), iv) + plaintextKey := make([]byte, len(ske.encryptedKey)) + c.XORKeyStream(plaintextKey, ske.encryptedKey) + cipherFunc := CipherFunction(plaintextKey[0]) + if cipherFunc.blockSize() == 0 { + return nil, ske.CipherFunc, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(cipherFunc))) + } + plaintextKey = plaintextKey[1:] + if l := len(plaintextKey); l == 0 || l%cipherFunc.blockSize() != 0 { + return nil, cipherFunc, errors.StructuralError("length of decrypted key not a multiple of block size") + } + + return plaintextKey, cipherFunc, nil +} + +// SerializeSymmetricKeyEncrypted serializes a symmetric key packet to w. The +// packet contains a random session key, encrypted by a key derived from the +// given passphrase. The session key is returned and must be passed to +// SerializeSymmetricallyEncrypted. +// If config is nil, sensible defaults will be used. +func SerializeSymmetricKeyEncrypted(w io.Writer, passphrase []byte, config *Config) (key []byte, err error) { + cipherFunc := config.Cipher() + keySize := cipherFunc.KeySize() + if keySize == 0 { + return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(cipherFunc))) + } + + s2kBuf := new(bytes.Buffer) + keyEncryptingKey := make([]byte, keySize) + // s2k.Serialize salts and stretches the passphrase, and writes the + // resulting key to keyEncryptingKey and the s2k descriptor to s2kBuf. + err = s2k.Serialize(s2kBuf, keyEncryptingKey, config.Random(), passphrase, &s2k.Config{Hash: config.Hash(), S2KCount: config.PasswordHashIterations()}) + if err != nil { + return + } + s2kBytes := s2kBuf.Bytes() + + packetLength := 2 /* header */ + len(s2kBytes) + 1 /* cipher type */ + keySize + err = serializeHeader(w, packetTypeSymmetricKeyEncrypted, packetLength) + if err != nil { + return + } + + var buf [2]byte + buf[0] = symmetricKeyEncryptedVersion + buf[1] = byte(cipherFunc) + _, err = w.Write(buf[:]) + if err != nil { + return + } + _, err = w.Write(s2kBytes) + if err != nil { + return + } + + sessionKey := make([]byte, keySize) + _, err = io.ReadFull(config.Random(), sessionKey) + if err != nil { + return + } + iv := make([]byte, cipherFunc.blockSize()) + c := cipher.NewCFBEncrypter(cipherFunc.new(keyEncryptingKey), iv) + encryptedCipherAndKey := make([]byte, keySize+1) + c.XORKeyStream(encryptedCipherAndKey, buf[1:]) + c.XORKeyStream(encryptedCipherAndKey[1:], sessionKey) + _, err = w.Write(encryptedCipherAndKey) + if err != nil { + return + } + + key = sessionKey + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go new file mode 100644 index 0000000..19538df --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go @@ -0,0 +1,103 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "io" + "io/ioutil" + "testing" +) + +func TestSymmetricKeyEncrypted(t *testing.T) { + buf := readerFromHex(symmetricallyEncryptedHex) + packet, err := Read(buf) + if err != nil { + t.Errorf("failed to read SymmetricKeyEncrypted: %s", err) + return + } + ske, ok := packet.(*SymmetricKeyEncrypted) + if !ok { + t.Error("didn't find SymmetricKeyEncrypted packet") + return + } + key, cipherFunc, err := ske.Decrypt([]byte("password")) + if err != nil { + t.Error(err) + return + } + + packet, err = Read(buf) + if err != nil { + t.Errorf("failed to read SymmetricallyEncrypted: %s", err) + return + } + se, ok := packet.(*SymmetricallyEncrypted) + if !ok { + t.Error("didn't find SymmetricallyEncrypted packet") + return + } + r, err := se.Decrypt(cipherFunc, key) + if err != nil { + t.Error(err) + return + } + + contents, err := ioutil.ReadAll(r) + if err != nil && err != io.EOF { + t.Error(err) + return + } + + expectedContents, _ := hex.DecodeString(symmetricallyEncryptedContentsHex) + if !bytes.Equal(expectedContents, contents) { + t.Errorf("bad contents got:%x want:%x", contents, expectedContents) + } +} + +const symmetricallyEncryptedHex = "8c0d04030302371a0b38d884f02060c91cf97c9973b8e58e028e9501708ccfe618fb92afef7fa2d80ddadd93cf" +const symmetricallyEncryptedContentsHex = "cb1062004d14c4df636f6e74656e74732e0a" + +func TestSerializeSymmetricKeyEncrypted(t *testing.T) { + buf := bytes.NewBuffer(nil) + passphrase := []byte("testing") + const cipherFunc = CipherAES128 + config := &Config{ + DefaultCipher: cipherFunc, + } + + key, err := SerializeSymmetricKeyEncrypted(buf, passphrase, config) + if err != nil { + t.Errorf("failed to serialize: %s", err) + return + } + + p, err := Read(buf) + if err != nil { + t.Errorf("failed to reparse: %s", err) + return + } + ske, ok := p.(*SymmetricKeyEncrypted) + if !ok { + t.Errorf("parsed a different packet type: %#v", p) + return + } + + if ske.CipherFunc != config.DefaultCipher { + t.Errorf("SKE cipher function is %d (expected %d)", ske.CipherFunc, config.DefaultCipher) + } + parsedKey, parsedCipherFunc, err := ske.Decrypt(passphrase) + if err != nil { + t.Errorf("failed to decrypt reparsed SKE: %s", err) + return + } + if !bytes.Equal(key, parsedKey) { + t.Errorf("keys don't match after Decrypt: %x (original) vs %x (parsed)", key, parsedKey) + } + if parsedCipherFunc != cipherFunc { + t.Errorf("cipher function doesn't match after Decrypt: %d (original) vs %d (parsed)", cipherFunc, parsedCipherFunc) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go new file mode 100644 index 0000000..6126030 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go @@ -0,0 +1,290 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto/cipher" + "crypto/sha1" + "crypto/subtle" + "golang.org/x/crypto/openpgp/errors" + "hash" + "io" + "strconv" +) + +// SymmetricallyEncrypted represents a symmetrically encrypted byte string. The +// encrypted contents will consist of more OpenPGP packets. See RFC 4880, +// sections 5.7 and 5.13. +type SymmetricallyEncrypted struct { + MDC bool // true iff this is a type 18 packet and thus has an embedded MAC. + contents io.Reader + prefix []byte +} + +const symmetricallyEncryptedVersion = 1 + +func (se *SymmetricallyEncrypted) parse(r io.Reader) error { + if se.MDC { + // See RFC 4880, section 5.13. + var buf [1]byte + _, err := readFull(r, buf[:]) + if err != nil { + return err + } + if buf[0] != symmetricallyEncryptedVersion { + return errors.UnsupportedError("unknown SymmetricallyEncrypted version") + } + } + se.contents = r + return nil +} + +// Decrypt returns a ReadCloser, from which the decrypted contents of the +// packet can be read. An incorrect key can, with high probability, be detected +// immediately and this will result in a KeyIncorrect error being returned. +func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.ReadCloser, error) { + keySize := c.KeySize() + if keySize == 0 { + return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(c))) + } + if len(key) != keySize { + return nil, errors.InvalidArgumentError("SymmetricallyEncrypted: incorrect key length") + } + + if se.prefix == nil { + se.prefix = make([]byte, c.blockSize()+2) + _, err := readFull(se.contents, se.prefix) + if err != nil { + return nil, err + } + } else if len(se.prefix) != c.blockSize()+2 { + return nil, errors.InvalidArgumentError("can't try ciphers with different block lengths") + } + + ocfbResync := OCFBResync + if se.MDC { + // MDC packets use a different form of OCFB mode. + ocfbResync = OCFBNoResync + } + + s := NewOCFBDecrypter(c.new(key), se.prefix, ocfbResync) + if s == nil { + return nil, errors.ErrKeyIncorrect + } + + plaintext := cipher.StreamReader{S: s, R: se.contents} + + if se.MDC { + // MDC packets have an embedded hash that we need to check. + h := sha1.New() + h.Write(se.prefix) + return &seMDCReader{in: plaintext, h: h}, nil + } + + // Otherwise, we just need to wrap plaintext so that it's a valid ReadCloser. + return seReader{plaintext}, nil +} + +// seReader wraps an io.Reader with a no-op Close method. +type seReader struct { + in io.Reader +} + +func (ser seReader) Read(buf []byte) (int, error) { + return ser.in.Read(buf) +} + +func (ser seReader) Close() error { + return nil +} + +const mdcTrailerSize = 1 /* tag byte */ + 1 /* length byte */ + sha1.Size + +// An seMDCReader wraps an io.Reader, maintains a running hash and keeps hold +// of the most recent 22 bytes (mdcTrailerSize). Upon EOF, those bytes form an +// MDC packet containing a hash of the previous contents which is checked +// against the running hash. See RFC 4880, section 5.13. +type seMDCReader struct { + in io.Reader + h hash.Hash + trailer [mdcTrailerSize]byte + scratch [mdcTrailerSize]byte + trailerUsed int + error bool + eof bool +} + +func (ser *seMDCReader) Read(buf []byte) (n int, err error) { + if ser.error { + err = io.ErrUnexpectedEOF + return + } + if ser.eof { + err = io.EOF + return + } + + // If we haven't yet filled the trailer buffer then we must do that + // first. + for ser.trailerUsed < mdcTrailerSize { + n, err = ser.in.Read(ser.trailer[ser.trailerUsed:]) + ser.trailerUsed += n + if err == io.EOF { + if ser.trailerUsed != mdcTrailerSize { + n = 0 + err = io.ErrUnexpectedEOF + ser.error = true + return + } + ser.eof = true + n = 0 + return + } + + if err != nil { + n = 0 + return + } + } + + // If it's a short read then we read into a temporary buffer and shift + // the data into the caller's buffer. + if len(buf) <= mdcTrailerSize { + n, err = readFull(ser.in, ser.scratch[:len(buf)]) + copy(buf, ser.trailer[:n]) + ser.h.Write(buf[:n]) + copy(ser.trailer[:], ser.trailer[n:]) + copy(ser.trailer[mdcTrailerSize-n:], ser.scratch[:]) + if n < len(buf) { + ser.eof = true + err = io.EOF + } + return + } + + n, err = ser.in.Read(buf[mdcTrailerSize:]) + copy(buf, ser.trailer[:]) + ser.h.Write(buf[:n]) + copy(ser.trailer[:], buf[n:]) + + if err == io.EOF { + ser.eof = true + } + return +} + +// This is a new-format packet tag byte for a type 19 (MDC) packet. +const mdcPacketTagByte = byte(0x80) | 0x40 | 19 + +func (ser *seMDCReader) Close() error { + if ser.error { + return errors.SignatureError("error during reading") + } + + for !ser.eof { + // We haven't seen EOF so we need to read to the end + var buf [1024]byte + _, err := ser.Read(buf[:]) + if err == io.EOF { + break + } + if err != nil { + return errors.SignatureError("error during reading") + } + } + + if ser.trailer[0] != mdcPacketTagByte || ser.trailer[1] != sha1.Size { + return errors.SignatureError("MDC packet not found") + } + ser.h.Write(ser.trailer[:2]) + + final := ser.h.Sum(nil) + if subtle.ConstantTimeCompare(final, ser.trailer[2:]) != 1 { + return errors.SignatureError("hash mismatch") + } + return nil +} + +// An seMDCWriter writes through to an io.WriteCloser while maintains a running +// hash of the data written. On close, it emits an MDC packet containing the +// running hash. +type seMDCWriter struct { + w io.WriteCloser + h hash.Hash +} + +func (w *seMDCWriter) Write(buf []byte) (n int, err error) { + w.h.Write(buf) + return w.w.Write(buf) +} + +func (w *seMDCWriter) Close() (err error) { + var buf [mdcTrailerSize]byte + + buf[0] = mdcPacketTagByte + buf[1] = sha1.Size + w.h.Write(buf[:2]) + digest := w.h.Sum(nil) + copy(buf[2:], digest) + + _, err = w.w.Write(buf[:]) + if err != nil { + return + } + return w.w.Close() +} + +// noOpCloser is like an ioutil.NopCloser, but for an io.Writer. +type noOpCloser struct { + w io.Writer +} + +func (c noOpCloser) Write(data []byte) (n int, err error) { + return c.w.Write(data) +} + +func (c noOpCloser) Close() error { + return nil +} + +// SerializeSymmetricallyEncrypted serializes a symmetrically encrypted packet +// to w and returns a WriteCloser to which the to-be-encrypted packets can be +// written. +// If config is nil, sensible defaults will be used. +func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key []byte, config *Config) (contents io.WriteCloser, err error) { + if c.KeySize() != len(key) { + return nil, errors.InvalidArgumentError("SymmetricallyEncrypted.Serialize: bad key length") + } + writeCloser := noOpCloser{w} + ciphertext, err := serializeStreamHeader(writeCloser, packetTypeSymmetricallyEncryptedMDC) + if err != nil { + return + } + + _, err = ciphertext.Write([]byte{symmetricallyEncryptedVersion}) + if err != nil { + return + } + + block := c.new(key) + blockSize := block.BlockSize() + iv := make([]byte, blockSize) + _, err = config.Random().Read(iv) + if err != nil { + return + } + s, prefix := NewOCFBEncrypter(block, iv, OCFBNoResync) + _, err = ciphertext.Write(prefix) + if err != nil { + return + } + plaintext := cipher.StreamWriter{S: s, W: ciphertext} + + h := sha1.New() + h.Write(iv) + h.Write(iv[blockSize-2:]) + contents = &seMDCWriter{w: plaintext, h: h} + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go new file mode 100644 index 0000000..c5c00f7 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go @@ -0,0 +1,123 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto/sha1" + "encoding/hex" + "golang.org/x/crypto/openpgp/errors" + "io" + "io/ioutil" + "testing" +) + +// TestReader wraps a []byte and returns reads of a specific length. +type testReader struct { + data []byte + stride int +} + +func (t *testReader) Read(buf []byte) (n int, err error) { + n = t.stride + if n > len(t.data) { + n = len(t.data) + } + if n > len(buf) { + n = len(buf) + } + copy(buf, t.data) + t.data = t.data[n:] + if len(t.data) == 0 { + err = io.EOF + } + return +} + +func testMDCReader(t *testing.T) { + mdcPlaintext, _ := hex.DecodeString(mdcPlaintextHex) + + for stride := 1; stride < len(mdcPlaintext)/2; stride++ { + r := &testReader{data: mdcPlaintext, stride: stride} + mdcReader := &seMDCReader{in: r, h: sha1.New()} + body, err := ioutil.ReadAll(mdcReader) + if err != nil { + t.Errorf("stride: %d, error: %s", stride, err) + continue + } + if !bytes.Equal(body, mdcPlaintext[:len(mdcPlaintext)-22]) { + t.Errorf("stride: %d: bad contents %x", stride, body) + continue + } + + err = mdcReader.Close() + if err != nil { + t.Errorf("stride: %d, error on Close: %s", stride, err) + } + } + + mdcPlaintext[15] ^= 80 + + r := &testReader{data: mdcPlaintext, stride: 2} + mdcReader := &seMDCReader{in: r, h: sha1.New()} + _, err := ioutil.ReadAll(mdcReader) + if err != nil { + t.Errorf("corruption test, error: %s", err) + return + } + err = mdcReader.Close() + if err == nil { + t.Error("corruption: no error") + } else if _, ok := err.(*errors.SignatureError); !ok { + t.Errorf("corruption: expected SignatureError, got: %s", err) + } +} + +const mdcPlaintextHex = "a302789c3b2d93c4e0eb9aba22283539b3203335af44a134afb800c849cb4c4de10200aff40b45d31432c80cb384299a0655966d6939dfdeed1dddf980" + +func TestSerialize(t *testing.T) { + buf := bytes.NewBuffer(nil) + c := CipherAES128 + key := make([]byte, c.KeySize()) + + w, err := SerializeSymmetricallyEncrypted(buf, c, key, nil) + if err != nil { + t.Errorf("error from SerializeSymmetricallyEncrypted: %s", err) + return + } + + contents := []byte("hello world\n") + + w.Write(contents) + w.Close() + + p, err := Read(buf) + if err != nil { + t.Errorf("error from Read: %s", err) + return + } + + se, ok := p.(*SymmetricallyEncrypted) + if !ok { + t.Errorf("didn't read a *SymmetricallyEncrypted") + return + } + + r, err := se.Decrypt(c, key) + if err != nil { + t.Errorf("error from Decrypt: %s", err) + return + } + + contentsCopy := bytes.NewBuffer(nil) + _, err = io.Copy(contentsCopy, r) + if err != nil { + t.Errorf("error from io.Copy: %s", err) + return + } + if !bytes.Equal(contentsCopy.Bytes(), contents) { + t.Errorf("contents not equal got: %x want: %x", contentsCopy.Bytes(), contents) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go b/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go new file mode 100644 index 0000000..96a2b38 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go @@ -0,0 +1,91 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "image" + "image/jpeg" + "io" + "io/ioutil" +) + +const UserAttrImageSubpacket = 1 + +// UserAttribute is capable of storing other types of data about a user +// beyond name, email and a text comment. In practice, user attributes are typically used +// to store a signed thumbnail photo JPEG image of the user. +// See RFC 4880, section 5.12. +type UserAttribute struct { + Contents []*OpaqueSubpacket +} + +// NewUserAttributePhoto creates a user attribute packet +// containing the given images. +func NewUserAttributePhoto(photos ...image.Image) (uat *UserAttribute, err error) { + uat = new(UserAttribute) + for _, photo := range photos { + var buf bytes.Buffer + // RFC 4880, Section 5.12.1. + data := []byte{ + 0x10, 0x00, // Little-endian image header length (16 bytes) + 0x01, // Image header version 1 + 0x01, // JPEG + 0, 0, 0, 0, // 12 reserved octets, must be all zero. + 0, 0, 0, 0, + 0, 0, 0, 0} + if _, err = buf.Write(data); err != nil { + return + } + if err = jpeg.Encode(&buf, photo, nil); err != nil { + return + } + uat.Contents = append(uat.Contents, &OpaqueSubpacket{ + SubType: UserAttrImageSubpacket, + Contents: buf.Bytes()}) + } + return +} + +// NewUserAttribute creates a new user attribute packet containing the given subpackets. +func NewUserAttribute(contents ...*OpaqueSubpacket) *UserAttribute { + return &UserAttribute{Contents: contents} +} + +func (uat *UserAttribute) parse(r io.Reader) (err error) { + // RFC 4880, section 5.13 + b, err := ioutil.ReadAll(r) + if err != nil { + return + } + uat.Contents, err = OpaqueSubpackets(b) + return +} + +// Serialize marshals the user attribute to w in the form of an OpenPGP packet, including +// header. +func (uat *UserAttribute) Serialize(w io.Writer) (err error) { + var buf bytes.Buffer + for _, sp := range uat.Contents { + sp.Serialize(&buf) + } + if err = serializeHeader(w, packetTypeUserAttribute, buf.Len()); err != nil { + return err + } + _, err = w.Write(buf.Bytes()) + return +} + +// ImageData returns zero or more byte slices, each containing +// JPEG File Interchange Format (JFIF), for each photo in the +// the user attribute packet. +func (uat *UserAttribute) ImageData() (imageData [][]byte) { + for _, sp := range uat.Contents { + if sp.SubType == UserAttrImageSubpacket && len(sp.Contents) > 16 { + imageData = append(imageData, sp.Contents[16:]) + } + } + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go b/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go new file mode 100644 index 0000000..13ca514 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go @@ -0,0 +1,109 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/base64" + "image/color" + "image/jpeg" + "testing" +) + +func TestParseUserAttribute(t *testing.T) { + r := base64.NewDecoder(base64.StdEncoding, bytes.NewBufferString(userAttributePacket)) + for i := 0; i < 2; i++ { + p, err := Read(r) + if err != nil { + t.Fatal(err) + } + uat := p.(*UserAttribute) + imgs := uat.ImageData() + if len(imgs) != 1 { + t.Errorf("Unexpected number of images in user attribute packet: %d", len(imgs)) + } + if len(imgs[0]) != 3395 { + t.Errorf("Unexpected JPEG image size: %d", len(imgs[0])) + } + img, err := jpeg.Decode(bytes.NewBuffer(imgs[0])) + if err != nil { + t.Errorf("Error decoding JPEG image: %v", err) + } + // A pixel in my right eye. + pixel := color.NRGBAModel.Convert(img.At(56, 36)) + ref := color.NRGBA{R: 157, G: 128, B: 124, A: 255} + if pixel != ref { + t.Errorf("Unexpected pixel color: %v", pixel) + } + w := bytes.NewBuffer(nil) + err = uat.Serialize(w) + if err != nil { + t.Errorf("Error writing user attribute: %v", err) + } + r = bytes.NewBuffer(w.Bytes()) + } +} + +const userAttributePacket = ` +0cyWzJQBEAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpGSUYAAQIAAAEAAQAA/9sAQwAFAwQEBAMFBAQE +BQUFBgcMCAcHBwcPCgsJDBEPEhIRDxEQExYcFxMUGhUQERghGBocHR8fHxMXIiQiHiQcHh8e/9sA +QwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e +Hh4eHh4eHh4e/8AAEQgAZABkAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYH +CAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHw +JDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6 +g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk +5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIB +AgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEX +GBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKT +lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX2 +9/j5+v/aAAwDAQACEQMRAD8A5uGP06VehQ4pIox04q5EnHSvAep+hIIl4zVuMHGPWmRrUWtalaaN +pU2oXsgSGJSxPr6ClvoitErs0Itqjc7BQOpPAFYmrfEnwjojtHNqaXEynBjtx5hH4jj9a8B8d+Od +W8UXZjWR4LJT+7t0Jwfc+prnIdO1CWZEW2mZ3HyDactXXDB3V5s8evm1namj6r0H4weCLtxG+ova +ueP30RA/MV6not1bX0Ed1ZzxzwyDKvGwZSPqK+Ff+ES8R8t/ZV2oHUmM10Hgbxp4m8BatEfNnWBH +/eWshOxx9Kmpg4te49RUM1kn+8Wh9zQ4P1FaMC7l465rjPh14y0fxnoseoaXOpfaPOgJ+eI98j09 +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` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userid.go b/vendor/golang.org/x/crypto/openpgp/packet/userid.go new file mode 100644 index 0000000..d6bea7d --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/userid.go @@ -0,0 +1,160 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "io" + "io/ioutil" + "strings" +) + +// UserId contains text that is intended to represent the name and email +// address of the key holder. See RFC 4880, section 5.11. By convention, this +// takes the form "Full Name (Comment) " +type UserId struct { + Id string // By convention, this takes the form "Full Name (Comment) " which is split out in the fields below. + + Name, Comment, Email string +} + +func hasInvalidCharacters(s string) bool { + for _, c := range s { + switch c { + case '(', ')', '<', '>', 0: + return true + } + } + return false +} + +// NewUserId returns a UserId or nil if any of the arguments contain invalid +// characters. The invalid characters are '\x00', '(', ')', '<' and '>' +func NewUserId(name, comment, email string) *UserId { + // RFC 4880 doesn't deal with the structure of userid strings; the + // name, comment and email form is just a convention. However, there's + // no convention about escaping the metacharacters and GPG just refuses + // to create user ids where, say, the name contains a '('. We mirror + // this behaviour. + + if hasInvalidCharacters(name) || hasInvalidCharacters(comment) || hasInvalidCharacters(email) { + return nil + } + + uid := new(UserId) + uid.Name, uid.Comment, uid.Email = name, comment, email + uid.Id = name + if len(comment) > 0 { + if len(uid.Id) > 0 { + uid.Id += " " + } + uid.Id += "(" + uid.Id += comment + uid.Id += ")" + } + if len(email) > 0 { + if len(uid.Id) > 0 { + uid.Id += " " + } + uid.Id += "<" + uid.Id += email + uid.Id += ">" + } + return uid +} + +func (uid *UserId) parse(r io.Reader) (err error) { + // RFC 4880, section 5.11 + b, err := ioutil.ReadAll(r) + if err != nil { + return + } + uid.Id = string(b) + uid.Name, uid.Comment, uid.Email = parseUserId(uid.Id) + return +} + +// Serialize marshals uid to w in the form of an OpenPGP packet, including +// header. +func (uid *UserId) Serialize(w io.Writer) error { + err := serializeHeader(w, packetTypeUserId, len(uid.Id)) + if err != nil { + return err + } + _, err = w.Write([]byte(uid.Id)) + return err +} + +// parseUserId extracts the name, comment and email from a user id string that +// is formatted as "Full Name (Comment) ". +func parseUserId(id string) (name, comment, email string) { + var n, c, e struct { + start, end int + } + var state int + + for offset, rune := range id { + switch state { + case 0: + // Entering name + n.start = offset + state = 1 + fallthrough + case 1: + // In name + if rune == '(' { + state = 2 + n.end = offset + } else if rune == '<' { + state = 5 + n.end = offset + } + case 2: + // Entering comment + c.start = offset + state = 3 + fallthrough + case 3: + // In comment + if rune == ')' { + state = 4 + c.end = offset + } + case 4: + // Between comment and email + if rune == '<' { + state = 5 + } + case 5: + // Entering email + e.start = offset + state = 6 + fallthrough + case 6: + // In email + if rune == '>' { + state = 7 + e.end = offset + } + default: + // After email + } + } + switch state { + case 1: + // ended in the name + n.end = len(id) + case 3: + // ended in comment + c.end = len(id) + case 6: + // ended in email + e.end = len(id) + } + + name = strings.TrimSpace(id[n.start:n.end]) + comment = strings.TrimSpace(id[c.start:c.end]) + email = strings.TrimSpace(id[e.start:e.end]) + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go b/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go new file mode 100644 index 0000000..2968193 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go @@ -0,0 +1,87 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "testing" +) + +var userIdTests = []struct { + id string + name, comment, email string +}{ + {"", "", "", ""}, + {"John Smith", "John Smith", "", ""}, + {"John Smith ()", "John Smith", "", ""}, + {"John Smith () <>", "John Smith", "", ""}, + {"(comment", "", "comment", ""}, + {"(comment)", "", "comment", ""}, + {" sdfk", "", "", "email"}, + {" John Smith ( Comment ) asdkflj < email > lksdfj", "John Smith", "Comment", "email"}, + {" John Smith < email > lksdfj", "John Smith", "", "email"}, + {"("}, + {"foo", "bar", "", "foo (bar)"}, + {"foo", "", "baz", "foo "}, + {"", "bar", "baz", "(bar) "}, + {"foo", "bar", "baz", "foo (bar) "}, +} + +func TestNewUserId(t *testing.T) { + for i, test := range newUserIdTests { + uid := NewUserId(test.name, test.comment, test.email) + if uid == nil { + t.Errorf("#%d: returned nil", i) + continue + } + if uid.Id != test.id { + t.Errorf("#%d: got '%s', want '%s'", i, uid.Id, test.id) + } + } +} + +var invalidNewUserIdTests = []struct { + name, comment, email string +}{ + {"foo(", "", ""}, + {"foo<", "", ""}, + {"", "bar)", ""}, + {"", "bar<", ""}, + {"", "", "baz>"}, + {"", "", "baz)"}, + {"", "", "baz\x00"}, +} + +func TestNewUserIdWithInvalidInput(t *testing.T) { + for i, test := range invalidNewUserIdTests { + if uid := NewUserId(test.name, test.comment, test.email); uid != nil { + t.Errorf("#%d: returned non-nil value: %#v", i, uid) + } + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/read.go b/vendor/golang.org/x/crypto/openpgp/read.go new file mode 100644 index 0000000..6ec664f --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/read.go @@ -0,0 +1,442 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package openpgp implements high level operations on OpenPGP messages. +package openpgp // import "golang.org/x/crypto/openpgp" + +import ( + "crypto" + _ "crypto/sha256" + "hash" + "io" + "strconv" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" +) + +// SignatureType is the armor type for a PGP signature. +var SignatureType = "PGP SIGNATURE" + +// readArmored reads an armored block with the given type. +func readArmored(r io.Reader, expectedType string) (body io.Reader, err error) { + block, err := armor.Decode(r) + if err != nil { + return + } + + if block.Type != expectedType { + return nil, errors.InvalidArgumentError("expected '" + expectedType + "', got: " + block.Type) + } + + return block.Body, nil +} + +// MessageDetails contains the result of parsing an OpenPGP encrypted and/or +// signed message. +type MessageDetails struct { + IsEncrypted bool // true if the message was encrypted. + EncryptedToKeyIds []uint64 // the list of recipient key ids. + IsSymmetricallyEncrypted bool // true if a passphrase could have decrypted the message. + DecryptedWith Key // the private key used to decrypt the message, if any. + IsSigned bool // true if the message is signed. + SignedByKeyId uint64 // the key id of the signer, if any. + SignedBy *Key // the key of the signer, if available. + LiteralData *packet.LiteralData // the metadata of the contents + UnverifiedBody io.Reader // the contents of the message. + + // If IsSigned is true and SignedBy is non-zero then the signature will + // be verified as UnverifiedBody is read. The signature cannot be + // checked until the whole of UnverifiedBody is read so UnverifiedBody + // must be consumed until EOF before the data can be trusted. Even if a + // message isn't signed (or the signer is unknown) the data may contain + // an authentication code that is only checked once UnverifiedBody has + // been consumed. Once EOF has been seen, the following fields are + // valid. (An authentication code failure is reported as a + // SignatureError error when reading from UnverifiedBody.) + SignatureError error // nil if the signature is good. + Signature *packet.Signature // the signature packet itself, if v4 (default) + SignatureV3 *packet.SignatureV3 // the signature packet if it is a v2 or v3 signature + + decrypted io.ReadCloser +} + +// A PromptFunction is used as a callback by functions that may need to decrypt +// a private key, or prompt for a passphrase. It is called with a list of +// acceptable, encrypted private keys and a boolean that indicates whether a +// passphrase is usable. It should either decrypt a private key or return a +// passphrase to try. If the decrypted private key or given passphrase isn't +// correct, the function will be called again, forever. Any error returned will +// be passed up. +type PromptFunction func(keys []Key, symmetric bool) ([]byte, error) + +// A keyEnvelopePair is used to store a private key with the envelope that +// contains a symmetric key, encrypted with that key. +type keyEnvelopePair struct { + key Key + encryptedKey *packet.EncryptedKey +} + +// ReadMessage parses an OpenPGP message that may be signed and/or encrypted. +// The given KeyRing should contain both public keys (for signature +// verification) and, possibly encrypted, private keys for decrypting. +// If config is nil, sensible defaults will be used. +func ReadMessage(r io.Reader, keyring KeyRing, prompt PromptFunction, config *packet.Config) (md *MessageDetails, err error) { + var p packet.Packet + + var symKeys []*packet.SymmetricKeyEncrypted + var pubKeys []keyEnvelopePair + var se *packet.SymmetricallyEncrypted + + packets := packet.NewReader(r) + md = new(MessageDetails) + md.IsEncrypted = true + + // The message, if encrypted, starts with a number of packets + // containing an encrypted decryption key. The decryption key is either + // encrypted to a public key, or with a passphrase. This loop + // collects these packets. +ParsePackets: + for { + p, err = packets.Next() + if err != nil { + return nil, err + } + switch p := p.(type) { + case *packet.SymmetricKeyEncrypted: + // This packet contains the decryption key encrypted with a passphrase. + md.IsSymmetricallyEncrypted = true + symKeys = append(symKeys, p) + case *packet.EncryptedKey: + // This packet contains the decryption key encrypted to a public key. + md.EncryptedToKeyIds = append(md.EncryptedToKeyIds, p.KeyId) + switch p.Algo { + case packet.PubKeyAlgoRSA, packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoElGamal: + break + default: + continue + } + var keys []Key + if p.KeyId == 0 { + keys = keyring.DecryptionKeys() + } else { + keys = keyring.KeysById(p.KeyId) + } + for _, k := range keys { + pubKeys = append(pubKeys, keyEnvelopePair{k, p}) + } + case *packet.SymmetricallyEncrypted: + se = p + break ParsePackets + case *packet.Compressed, *packet.LiteralData, *packet.OnePassSignature: + // This message isn't encrypted. + if len(symKeys) != 0 || len(pubKeys) != 0 { + return nil, errors.StructuralError("key material not followed by encrypted message") + } + packets.Unread(p) + return readSignedMessage(packets, nil, keyring) + } + } + + var candidates []Key + var decrypted io.ReadCloser + + // Now that we have the list of encrypted keys we need to decrypt at + // least one of them or, if we cannot, we need to call the prompt + // function so that it can decrypt a key or give us a passphrase. +FindKey: + for { + // See if any of the keys already have a private key available + candidates = candidates[:0] + candidateFingerprints := make(map[string]bool) + + for _, pk := range pubKeys { + if pk.key.PrivateKey == nil { + continue + } + if !pk.key.PrivateKey.Encrypted { + if len(pk.encryptedKey.Key) == 0 { + pk.encryptedKey.Decrypt(pk.key.PrivateKey, config) + } + if len(pk.encryptedKey.Key) == 0 { + continue + } + decrypted, err = se.Decrypt(pk.encryptedKey.CipherFunc, pk.encryptedKey.Key) + if err != nil && err != errors.ErrKeyIncorrect { + return nil, err + } + if decrypted != nil { + md.DecryptedWith = pk.key + break FindKey + } + } else { + fpr := string(pk.key.PublicKey.Fingerprint[:]) + if v := candidateFingerprints[fpr]; v { + continue + } + candidates = append(candidates, pk.key) + candidateFingerprints[fpr] = true + } + } + + if len(candidates) == 0 && len(symKeys) == 0 { + return nil, errors.ErrKeyIncorrect + } + + if prompt == nil { + return nil, errors.ErrKeyIncorrect + } + + passphrase, err := prompt(candidates, len(symKeys) != 0) + if err != nil { + return nil, err + } + + // Try the symmetric passphrase first + if len(symKeys) != 0 && passphrase != nil { + for _, s := range symKeys { + key, cipherFunc, err := s.Decrypt(passphrase) + if err == nil { + decrypted, err = se.Decrypt(cipherFunc, key) + if err != nil && err != errors.ErrKeyIncorrect { + return nil, err + } + if decrypted != nil { + break FindKey + } + } + + } + } + } + + md.decrypted = decrypted + if err := packets.Push(decrypted); err != nil { + return nil, err + } + return readSignedMessage(packets, md, keyring) +} + +// readSignedMessage reads a possibly signed message if mdin is non-zero then +// that structure is updated and returned. Otherwise a fresh MessageDetails is +// used. +func readSignedMessage(packets *packet.Reader, mdin *MessageDetails, keyring KeyRing) (md *MessageDetails, err error) { + if mdin == nil { + mdin = new(MessageDetails) + } + md = mdin + + var p packet.Packet + var h hash.Hash + var wrappedHash hash.Hash +FindLiteralData: + for { + p, err = packets.Next() + if err != nil { + return nil, err + } + switch p := p.(type) { + case *packet.Compressed: + if err := packets.Push(p.Body); err != nil { + return nil, err + } + case *packet.OnePassSignature: + if !p.IsLast { + return nil, errors.UnsupportedError("nested signatures") + } + + h, wrappedHash, err = hashForSignature(p.Hash, p.SigType) + if err != nil { + md = nil + return + } + + md.IsSigned = true + md.SignedByKeyId = p.KeyId + keys := keyring.KeysByIdUsage(p.KeyId, packet.KeyFlagSign) + if len(keys) > 0 { + md.SignedBy = &keys[0] + } + case *packet.LiteralData: + md.LiteralData = p + break FindLiteralData + } + } + + if md.SignedBy != nil { + md.UnverifiedBody = &signatureCheckReader{packets, h, wrappedHash, md} + } else if md.decrypted != nil { + md.UnverifiedBody = checkReader{md} + } else { + md.UnverifiedBody = md.LiteralData.Body + } + + return md, nil +} + +// hashForSignature returns a pair of hashes that can be used to verify a +// signature. The signature may specify that the contents of the signed message +// should be preprocessed (i.e. to normalize line endings). Thus this function +// returns two hashes. The second should be used to hash the message itself and +// performs any needed preprocessing. +func hashForSignature(hashId crypto.Hash, sigType packet.SignatureType) (hash.Hash, hash.Hash, error) { + if !hashId.Available() { + return nil, nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hashId))) + } + h := hashId.New() + + switch sigType { + case packet.SigTypeBinary: + return h, h, nil + case packet.SigTypeText: + return h, NewCanonicalTextHash(h), nil + } + + return nil, nil, errors.UnsupportedError("unsupported signature type: " + strconv.Itoa(int(sigType))) +} + +// checkReader wraps an io.Reader from a LiteralData packet. When it sees EOF +// it closes the ReadCloser from any SymmetricallyEncrypted packet to trigger +// MDC checks. +type checkReader struct { + md *MessageDetails +} + +func (cr checkReader) Read(buf []byte) (n int, err error) { + n, err = cr.md.LiteralData.Body.Read(buf) + if err == io.EOF { + mdcErr := cr.md.decrypted.Close() + if mdcErr != nil { + err = mdcErr + } + } + return +} + +// signatureCheckReader wraps an io.Reader from a LiteralData packet and hashes +// the data as it is read. When it sees an EOF from the underlying io.Reader +// it parses and checks a trailing Signature packet and triggers any MDC checks. +type signatureCheckReader struct { + packets *packet.Reader + h, wrappedHash hash.Hash + md *MessageDetails +} + +func (scr *signatureCheckReader) Read(buf []byte) (n int, err error) { + n, err = scr.md.LiteralData.Body.Read(buf) + scr.wrappedHash.Write(buf[:n]) + if err == io.EOF { + var p packet.Packet + p, scr.md.SignatureError = scr.packets.Next() + if scr.md.SignatureError != nil { + return + } + + var ok bool + if scr.md.Signature, ok = p.(*packet.Signature); ok { + scr.md.SignatureError = scr.md.SignedBy.PublicKey.VerifySignature(scr.h, scr.md.Signature) + } else if scr.md.SignatureV3, ok = p.(*packet.SignatureV3); ok { + scr.md.SignatureError = scr.md.SignedBy.PublicKey.VerifySignatureV3(scr.h, scr.md.SignatureV3) + } else { + scr.md.SignatureError = errors.StructuralError("LiteralData not followed by Signature") + return + } + + // The SymmetricallyEncrypted packet, if any, might have an + // unsigned hash of its own. In order to check this we need to + // close that Reader. + if scr.md.decrypted != nil { + mdcErr := scr.md.decrypted.Close() + if mdcErr != nil { + err = mdcErr + } + } + } + return +} + +// CheckDetachedSignature takes a signed file and a detached signature and +// returns the signer if the signature is valid. If the signer isn't known, +// ErrUnknownIssuer is returned. +func CheckDetachedSignature(keyring KeyRing, signed, signature io.Reader) (signer *Entity, err error) { + var issuerKeyId uint64 + var hashFunc crypto.Hash + var sigType packet.SignatureType + var keys []Key + var p packet.Packet + + packets := packet.NewReader(signature) + for { + p, err = packets.Next() + if err == io.EOF { + return nil, errors.ErrUnknownIssuer + } + if err != nil { + return nil, err + } + + switch sig := p.(type) { + case *packet.Signature: + if sig.IssuerKeyId == nil { + return nil, errors.StructuralError("signature doesn't have an issuer") + } + issuerKeyId = *sig.IssuerKeyId + hashFunc = sig.Hash + sigType = sig.SigType + case *packet.SignatureV3: + issuerKeyId = sig.IssuerKeyId + hashFunc = sig.Hash + sigType = sig.SigType + default: + return nil, errors.StructuralError("non signature packet found") + } + + keys = keyring.KeysByIdUsage(issuerKeyId, packet.KeyFlagSign) + if len(keys) > 0 { + break + } + } + + if len(keys) == 0 { + panic("unreachable") + } + + h, wrappedHash, err := hashForSignature(hashFunc, sigType) + if err != nil { + return nil, err + } + + if _, err := io.Copy(wrappedHash, signed); err != nil && err != io.EOF { + return nil, err + } + + for _, key := range keys { + switch sig := p.(type) { + case *packet.Signature: + err = key.PublicKey.VerifySignature(h, sig) + case *packet.SignatureV3: + err = key.PublicKey.VerifySignatureV3(h, sig) + default: + panic("unreachable") + } + + if err == nil { + return key.Entity, nil + } + } + + return nil, err +} + +// CheckArmoredDetachedSignature performs the same actions as +// CheckDetachedSignature but expects the signature to be armored. +func CheckArmoredDetachedSignature(keyring KeyRing, signed, signature io.Reader) (signer *Entity, err error) { + body, err := readArmored(signature, SignatureType) + if err != nil { + return + } + + return CheckDetachedSignature(keyring, signed, body) +} diff --git a/vendor/golang.org/x/crypto/openpgp/read_test.go b/vendor/golang.org/x/crypto/openpgp/read_test.go new file mode 100644 index 0000000..1fbfbac --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/read_test.go @@ -0,0 +1,613 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "bytes" + _ "crypto/sha512" + "encoding/hex" + "io" + "io/ioutil" + "strings" + "testing" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" +) + +func readerFromHex(s string) io.Reader { + data, err := hex.DecodeString(s) + if err != nil { + panic("readerFromHex: bad input") + } + return bytes.NewBuffer(data) +} + +func TestReadKeyRing(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + if err != nil { + t.Error(err) + return + } + if len(kring) != 2 || uint32(kring[0].PrimaryKey.KeyId) != 0xC20C31BB || uint32(kring[1].PrimaryKey.KeyId) != 0x1E35246B { + t.Errorf("bad keyring: %#v", kring) + } +} + +func TestRereadKeyRing(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + if err != nil { + t.Errorf("error in initial parse: %s", err) + return + } + out := new(bytes.Buffer) + err = kring[0].Serialize(out) + if err != nil { + t.Errorf("error in serialization: %s", err) + return + } + kring, err = ReadKeyRing(out) + if err != nil { + t.Errorf("error in second parse: %s", err) + return + } + + if len(kring) != 1 || uint32(kring[0].PrimaryKey.KeyId) != 0xC20C31BB { + t.Errorf("bad keyring: %#v", kring) + } +} + +func TestReadPrivateKeyRing(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + if err != nil { + t.Error(err) + return + } + if len(kring) != 2 || uint32(kring[0].PrimaryKey.KeyId) != 0xC20C31BB || uint32(kring[1].PrimaryKey.KeyId) != 0x1E35246B || kring[0].PrimaryKey == nil { + t.Errorf("bad keyring: %#v", kring) + } +} + +func TestReadDSAKey(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(dsaTestKeyHex)) + if err != nil { + t.Error(err) + return + } + if len(kring) != 1 || uint32(kring[0].PrimaryKey.KeyId) != 0x0CCC0360 { + t.Errorf("bad parse: %#v", kring) + } +} + +func TestReadP256Key(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(p256TestKeyHex)) + if err != nil { + t.Error(err) + return + } + if len(kring) != 1 || uint32(kring[0].PrimaryKey.KeyId) != 0x5918513E { + t.Errorf("bad parse: %#v", kring) + } +} + +func TestDSAHashTruncatation(t *testing.T) { + // dsaKeyWithSHA512 was generated with GnuPG and --cert-digest-algo + // SHA512 in order to require DSA hash truncation to verify correctly. + _, err := ReadKeyRing(readerFromHex(dsaKeyWithSHA512)) + if err != nil { + t.Error(err) + } +} + +func TestGetKeyById(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + + keys := kring.KeysById(0xa34d7e18c20c31bb) + if len(keys) != 1 || keys[0].Entity != kring[0] { + t.Errorf("bad result for 0xa34d7e18c20c31bb: %#v", keys) + } + + keys = kring.KeysById(0xfd94408d4543314f) + if len(keys) != 1 || keys[0].Entity != kring[0] { + t.Errorf("bad result for 0xa34d7e18c20c31bb: %#v", keys) + } +} + +func checkSignedMessage(t *testing.T, signedHex, expected string) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + + md, err := ReadMessage(readerFromHex(signedHex), kring, nil, nil) + if err != nil { + t.Error(err) + return + } + + if !md.IsSigned || md.SignedByKeyId != 0xa34d7e18c20c31bb || md.SignedBy == nil || md.IsEncrypted || md.IsSymmetricallyEncrypted || len(md.EncryptedToKeyIds) != 0 || md.IsSymmetricallyEncrypted { + t.Errorf("bad MessageDetails: %#v", md) + } + + contents, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("error reading UnverifiedBody: %s", err) + } + if string(contents) != expected { + t.Errorf("bad UnverifiedBody got:%s want:%s", string(contents), expected) + } + if md.SignatureError != nil || md.Signature == nil { + t.Errorf("failed to validate: %s", md.SignatureError) + } +} + +func TestSignedMessage(t *testing.T) { + checkSignedMessage(t, signedMessageHex, signedInput) +} + +func TestTextSignedMessage(t *testing.T) { + checkSignedMessage(t, signedTextMessageHex, signedTextInput) +} + +// The reader should detect "compressed quines", which are compressed +// packets that expand into themselves and cause an infinite recursive +// parsing loop. +// The packet in this test case comes from Taylor R. Campbell at +// http://mumble.net/~campbell/misc/pgp-quine/ +func TestCampbellQuine(t *testing.T) { + md, err := ReadMessage(readerFromHex(campbellQuine), nil, nil, nil) + if md != nil { + t.Errorf("Reading a compressed quine should not return any data: %#v", md) + } + structural, ok := err.(errors.StructuralError) + if !ok { + t.Fatalf("Unexpected class of error: %T", err) + } + if !strings.Contains(string(structural), "too many layers of packets") { + t.Fatalf("Unexpected error: %s", err) + } +} + +var signedEncryptedMessageTests = []struct { + keyRingHex string + messageHex string + signedByKeyId uint64 + encryptedToKeyId uint64 +}{ + { + testKeys1And2PrivateHex, + signedEncryptedMessageHex, + 0xa34d7e18c20c31bb, + 0x2a67d68660df41c7, + }, + { + dsaElGamalTestKeysHex, + signedEncryptedMessage2Hex, + 0x33af447ccd759b09, + 0xcf6a7abcd43e3673, + }, +} + +func TestSignedEncryptedMessage(t *testing.T) { + for i, test := range signedEncryptedMessageTests { + expected := "Signed and encrypted message\n" + kring, _ := ReadKeyRing(readerFromHex(test.keyRingHex)) + prompt := func(keys []Key, symmetric bool) ([]byte, error) { + if symmetric { + t.Errorf("prompt: message was marked as symmetrically encrypted") + return nil, errors.ErrKeyIncorrect + } + + if len(keys) == 0 { + t.Error("prompt: no keys requested") + return nil, errors.ErrKeyIncorrect + } + + err := keys[0].PrivateKey.Decrypt([]byte("passphrase")) + if err != nil { + t.Errorf("prompt: error decrypting key: %s", err) + return nil, errors.ErrKeyIncorrect + } + + return nil, nil + } + + md, err := ReadMessage(readerFromHex(test.messageHex), kring, prompt, nil) + if err != nil { + t.Errorf("#%d: error reading message: %s", i, err) + return + } + + if !md.IsSigned || md.SignedByKeyId != test.signedByKeyId || md.SignedBy == nil || !md.IsEncrypted || md.IsSymmetricallyEncrypted || len(md.EncryptedToKeyIds) == 0 || md.EncryptedToKeyIds[0] != test.encryptedToKeyId { + t.Errorf("#%d: bad MessageDetails: %#v", i, md) + } + + contents, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("#%d: error reading UnverifiedBody: %s", i, err) + } + if string(contents) != expected { + t.Errorf("#%d: bad UnverifiedBody got:%s want:%s", i, string(contents), expected) + } + + if md.SignatureError != nil || md.Signature == nil { + t.Errorf("#%d: failed to validate: %s", i, md.SignatureError) + } + } +} + +func TestUnspecifiedRecipient(t *testing.T) { + expected := "Recipient unspecified\n" + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + + md, err := ReadMessage(readerFromHex(recipientUnspecifiedHex), kring, nil, nil) + if err != nil { + t.Errorf("error reading message: %s", err) + return + } + + contents, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("error reading UnverifiedBody: %s", err) + } + if string(contents) != expected { + t.Errorf("bad UnverifiedBody got:%s want:%s", string(contents), expected) + } +} + +func TestSymmetricallyEncrypted(t *testing.T) { + firstTimeCalled := true + + prompt := func(keys []Key, symmetric bool) ([]byte, error) { + if len(keys) != 0 { + t.Errorf("prompt: len(keys) = %d (want 0)", len(keys)) + } + + if !symmetric { + t.Errorf("symmetric is not set") + } + + if firstTimeCalled { + firstTimeCalled = false + return []byte("wrongpassword"), nil + } + + return []byte("password"), nil + } + + md, err := ReadMessage(readerFromHex(symmetricallyEncryptedCompressedHex), nil, prompt, nil) + if err != nil { + t.Errorf("ReadMessage: %s", err) + return + } + + contents, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("ReadAll: %s", err) + } + + expectedCreationTime := uint32(1295992998) + if md.LiteralData.Time != expectedCreationTime { + t.Errorf("LiteralData.Time is %d, want %d", md.LiteralData.Time, expectedCreationTime) + } + + const expected = "Symmetrically encrypted.\n" + if string(contents) != expected { + t.Errorf("contents got: %s want: %s", string(contents), expected) + } +} + +func testDetachedSignature(t *testing.T, kring KeyRing, signature io.Reader, sigInput, tag string, expectedSignerKeyId uint64) { + signed := bytes.NewBufferString(sigInput) + signer, err := CheckDetachedSignature(kring, signed, signature) + if err != nil { + t.Errorf("%s: signature error: %s", tag, err) + return + } + if signer == nil { + t.Errorf("%s: signer is nil", tag) + return + } + if signer.PrimaryKey.KeyId != expectedSignerKeyId { + t.Errorf("%s: wrong signer got:%x want:%x", tag, signer.PrimaryKey.KeyId, expectedSignerKeyId) + } +} + +func TestDetachedSignature(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureHex), signedInput, "binary", testKey1KeyId) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureTextHex), signedInput, "text", testKey1KeyId) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureV3TextHex), signedInput, "v3", testKey1KeyId) + + incorrectSignedInput := signedInput + "X" + _, err := CheckDetachedSignature(kring, bytes.NewBufferString(incorrectSignedInput), readerFromHex(detachedSignatureHex)) + if err == nil { + t.Fatal("CheckDetachedSignature returned without error for bad signature") + } + if err == errors.ErrUnknownIssuer { + t.Fatal("CheckDetachedSignature returned ErrUnknownIssuer when the signer was known, but the signature invalid") + } +} + +func TestDetachedSignatureDSA(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(dsaTestKeyHex)) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureDSAHex), signedInput, "binary", testKey3KeyId) +} + +func TestMultipleSignaturePacketsDSA(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(dsaTestKeyHex)) + testDetachedSignature(t, kring, readerFromHex(missingHashFunctionHex+detachedSignatureDSAHex), signedInput, "binary", testKey3KeyId) +} + +func TestDetachedSignatureP256(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(p256TestKeyHex)) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureP256Hex), signedInput, "binary", testKeyP256KeyId) +} + +func testHashFunctionError(t *testing.T, signatureHex string) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + _, err := CheckDetachedSignature(kring, nil, readerFromHex(signatureHex)) + if err == nil { + t.Fatal("Packet with bad hash type was correctly parsed") + } + unsupported, ok := err.(errors.UnsupportedError) + if !ok { + t.Fatalf("Unexpected class of error: %s", err) + } + if !strings.Contains(string(unsupported), "hash ") { + t.Fatalf("Unexpected error: %s", err) + } +} + +func TestUnknownHashFunction(t *testing.T) { + // unknownHashFunctionHex contains a signature packet with hash + // function type 153 (which isn't a real hash function id). + testHashFunctionError(t, unknownHashFunctionHex) +} + +func TestMissingHashFunction(t *testing.T) { + // missingHashFunctionHex contains a signature packet that uses + // RIPEMD160, which isn't compiled in. Since that's the only signature + // packet we don't find any suitable packets and end up with ErrUnknownIssuer + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + _, err := CheckDetachedSignature(kring, nil, readerFromHex(missingHashFunctionHex)) + if err == nil { + t.Fatal("Packet with missing hash type was correctly parsed") + } + if err != errors.ErrUnknownIssuer { + t.Fatalf("Unexpected class of error: %s", err) + } +} + +func TestReadingArmoredPrivateKey(t *testing.T) { + el, err := ReadArmoredKeyRing(bytes.NewBufferString(armoredPrivateKeyBlock)) + if err != nil { + t.Error(err) + } + if len(el) != 1 { + t.Errorf("got %d entities, wanted 1\n", len(el)) + } +} + +func TestReadingArmoredPublicKey(t *testing.T) { + el, err := ReadArmoredKeyRing(bytes.NewBufferString(e2ePublicKey)) + if err != nil { + t.Error(err) + } + if len(el) != 1 { + t.Errorf("didn't get a valid entity") + } +} + +func TestNoArmoredData(t *testing.T) { + _, err := ReadArmoredKeyRing(bytes.NewBufferString("foo")) + if _, ok := err.(errors.InvalidArgumentError); !ok { + t.Errorf("error was not an InvalidArgumentError: %s", err) + } +} + +func testReadMessageError(t *testing.T, messageHex string) { + buf, err := hex.DecodeString(messageHex) + if err != nil { + t.Errorf("hex.DecodeString(): %v", err) + } + + kr, err := ReadKeyRing(new(bytes.Buffer)) + if err != nil { + t.Errorf("ReadKeyring(): %v", err) + } + + _, err = ReadMessage(bytes.NewBuffer(buf), kr, + func([]Key, bool) ([]byte, error) { + return []byte("insecure"), nil + }, nil) + + if err == nil { + t.Errorf("ReadMessage(): Unexpected nil error") + } +} + +func TestIssue11503(t *testing.T) { + testReadMessageError(t, "8c040402000aa430aa8228b9248b01fc899a91197130303030") +} + +func TestIssue11504(t *testing.T) { + testReadMessageError(t, "9303000130303030303030303030983002303030303030030000000130") +} + +// TestSignatureV3Message tests the verification of V3 signature, generated +// with a modern V4-style key. Some people have their clients set to generate +// V3 signatures, so it's useful to be able to verify them. +func TestSignatureV3Message(t *testing.T) { + sig, err := armor.Decode(strings.NewReader(signedMessageV3)) + if err != nil { + t.Error(err) + return + } + key, err := ReadArmoredKeyRing(strings.NewReader(keyV4forVerifyingSignedMessageV3)) + if err != nil { + t.Error(err) + return + } + md, err := ReadMessage(sig.Body, key, nil, nil) + if err != nil { + t.Error(err) + return + } + + _, err = ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Error(err) + return + } + + // We'll see a sig error here after reading in the UnverifiedBody above, + // if there was one to see. + if err = md.SignatureError; err != nil { + t.Error(err) + return + } + + if md.SignatureV3 == nil { + t.Errorf("No available signature after checking signature") + return + } + if md.Signature != nil { + t.Errorf("Did not expect a signature V4 back") + return + } + return +} + +const testKey1KeyId = 0xA34D7E18C20C31BB +const testKey3KeyId = 0x338934250CCC0360 +const testKeyP256KeyId = 0xd44a2c495918513e + +const signedInput = "Signed message\nline 2\nline 3\n" +const signedTextInput = "Signed message\r\nline 2\r\nline 3\r\n" + +const recipientUnspecifiedHex = "848c0300000000000000000103ff62d4d578d03cf40c3da998dfe216c074fa6ddec5e31c197c9666ba292830d91d18716a80f699f9d897389a90e6d62d0238f5f07a5248073c0f24920e4bc4a30c2d17ee4e0cae7c3d4aaa4e8dced50e3010a80ee692175fa0385f62ecca4b56ee6e9980aa3ec51b61b077096ac9e800edaf161268593eedb6cc7027ff5cb32745d250010d407a6221ae22ef18469b444f2822478c4d190b24d36371a95cb40087cdd42d9399c3d06a53c0673349bfb607927f20d1e122bde1e2bf3aa6cae6edf489629bcaa0689539ae3b718914d88ededc3b" + +const detachedSignatureHex = "889c04000102000605024d449cd1000a0910a34d7e18c20c31bb167603ff57718d09f28a519fdc7b5a68b6a3336da04df85e38c5cd5d5bd2092fa4629848a33d85b1729402a2aab39c3ac19f9d573f773cc62c264dc924c067a79dfd8a863ae06c7c8686120760749f5fd9b1e03a64d20a7df3446ddc8f0aeadeaeba7cbaee5c1e366d65b6a0c6cc749bcb912d2f15013f812795c2e29eb7f7b77f39ce77" + +const detachedSignatureTextHex = "889c04010102000605024d449d21000a0910a34d7e18c20c31bbc8c60400a24fbef7342603a41cb1165767bd18985d015fb72fe05db42db36cfb2f1d455967f1e491194fbf6cf88146222b23bf6ffbd50d17598d976a0417d3192ff9cc0034fd00f287b02e90418bbefe609484b09231e4e7a5f3562e199bf39909ab5276c4d37382fe088f6b5c3426fc1052865da8b3ab158672d58b6264b10823dc4b39" + +const detachedSignatureV3TextHex = "8900950305005255c25ca34d7e18c20c31bb0102bb3f04009f6589ef8a028d6e54f6eaf25432e590d31c3a41f4710897585e10c31e5e332c7f9f409af8512adceaff24d0da1474ab07aa7bce4f674610b010fccc5b579ae5eb00a127f272fb799f988ab8e4574c141da6dbfecfef7e6b2c478d9a3d2551ba741f260ee22bec762812f0053e05380bfdd55ad0f22d8cdf71b233fe51ae8a24" + +const detachedSignatureDSAHex = "884604001102000605024d6c4eac000a0910338934250ccc0360f18d00a087d743d6405ed7b87755476629600b8b694a39e900a0abff8126f46faf1547c1743c37b21b4ea15b8f83" + +const detachedSignatureP256Hex = "885e0400130a0006050256e5bb00000a0910d44a2c495918513edef001009841a4f792beb0befccb35c8838a6a87d9b936beaa86db6745ddc7b045eee0cf00fd1ac1f78306b17e965935dd3f8bae4587a76587e4af231efe19cc4011a8434817" + +const testKeys1And2Hex = "988d044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd0011010001b41054657374204b6579203120285253412988b804130102002205024d3c5c10021b03060b090807030206150802090a0b0416020301021e01021780000a0910a34d7e18c20c31bbb5b304009cc45fe610b641a2c146331be94dade0a396e73ca725e1b25c21708d9cab46ecca5ccebc23055879df8f99eea39b377962a400f2ebdc36a7c99c333d74aeba346315137c3ff9d0a09b0273299090343048afb8107cf94cbd1400e3026f0ccac7ecebbc4d78588eb3e478fe2754d3ca664bcf3eac96ca4a6b0c8d7df5102f60f6b0020003b88d044d3c5c10010400b201df61d67487301f11879d514f4248ade90c8f68c7af1284c161098de4c28c2850f1ec7b8e30f959793e571542ffc6532189409cb51c3d30dad78c4ad5165eda18b20d9826d8707d0f742e2ab492103a85bbd9ddf4f5720f6de7064feb0d39ee002219765bb07bcfb8b877f47abe270ddeda4f676108cecb6b9bb2ad484a4f0011010001889f04180102000905024d3c5c10021b0c000a0910a34d7e18c20c31bb1a03040085c8d62e16d05dc4e9dad64953c8a2eed8b6c12f92b1575eeaa6dcf7be9473dd5b24b37b6dffbb4e7c99ed1bd3cb11634be19b3e6e207bed7505c7ca111ccf47cb323bf1f8851eb6360e8034cbff8dd149993c959de89f8f77f38e7e98b8e3076323aa719328e2b408db5ec0d03936efd57422ba04f925cdc7b4c1af7590e40ab0020003988d044d3c5c33010400b488c3e5f83f4d561f317817538d9d0397981e9aef1321ca68ebfae1cf8b7d388e19f4b5a24a82e2fbbf1c6c26557a6c5845307a03d815756f564ac7325b02bc83e87d5480a8fae848f07cb891f2d51ce7df83dcafdc12324517c86d472cc0ee10d47a68fd1d9ae49a6c19bbd36d82af597a0d88cc9c49de9df4e696fc1f0b5d0011010001b42754657374204b6579203220285253412c20656e637279707465642070726976617465206b65792988b804130102002205024d3c5c33021b03060b090807030206150802090a0b0416020301021e01021780000a0910d4984f961e35246b98940400908a73b6a6169f700434f076c6c79015a49bee37130eaf23aaa3cfa9ce60bfe4acaa7bc95f1146ada5867e0079babb38804891f4f0b8ebca57a86b249dee786161a755b7a342e68ccf3f78ed6440a93a6626beb9a37aa66afcd4f888790cb4bb46d94a4ae3eb3d7d3e6b00f6bfec940303e89ec5b32a1eaaacce66497d539328b0020003b88d044d3c5c33010400a4e913f9442abcc7f1804ccab27d2f787ffa592077ca935a8bb23165bd8d57576acac647cc596b2c3f814518cc8c82953c7a4478f32e0cf645630a5ba38d9618ef2bc3add69d459ae3dece5cab778938d988239f8c5ae437807075e06c828019959c644ff05ef6a5a1dab72227c98e3a040b0cf219026640698d7a13d8538a570011010001889f04180102000905024d3c5c33021b0c000a0910d4984f961e35246b26c703ff7ee29ef53bc1ae1ead533c408fa136db508434e233d6e62be621e031e5940bbd4c08142aed0f82217e7c3e1ec8de574bc06ccf3c36633be41ad78a9eacd209f861cae7b064100758545cc9dd83db71806dc1cfd5fb9ae5c7474bba0c19c44034ae61bae5eca379383339dece94ff56ff7aa44a582f3e5c38f45763af577c0934b0020003" + +const testKeys1And2PrivateHex = "9501d8044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd00110100010003ff4d91393b9a8e3430b14d6209df42f98dc927425b881f1209f319220841273a802a97c7bdb8b3a7740b3ab5866c4d1d308ad0d3a79bd1e883aacf1ac92dfe720285d10d08752a7efe3c609b1d00f17f2805b217be53999a7da7e493bfc3e9618fd17018991b8128aea70a05dbce30e4fbe626aa45775fa255dd9177aabf4df7cf0200c1ded12566e4bc2bb590455e5becfb2e2c9796482270a943343a7835de41080582c2be3caf5981aa838140e97afa40ad652a0b544f83eb1833b0957dce26e47b0200eacd6046741e9ce2ec5beb6fb5e6335457844fb09477f83b050a96be7da043e17f3a9523567ed40e7a521f818813a8b8a72209f1442844843ccc7eb9805442570200bdafe0438d97ac36e773c7162028d65844c4d463e2420aa2228c6e50dc2743c3d6c72d0d782a5173fe7be2169c8a9f4ef8a7cf3e37165e8c61b89c346cdc6c1799d2b41054657374204b6579203120285253412988b804130102002205024d3c5c10021b03060b090807030206150802090a0b0416020301021e01021780000a0910a34d7e18c20c31bbb5b304009cc45fe610b641a2c146331be94dade0a396e73ca725e1b25c21708d9cab46ecca5ccebc23055879df8f99eea39b377962a400f2ebdc36a7c99c333d74aeba346315137c3ff9d0a09b0273299090343048afb8107cf94cbd1400e3026f0ccac7ecebbc4d78588eb3e478fe2754d3ca664bcf3eac96ca4a6b0c8d7df5102f60f6b00200009d01d8044d3c5c10010400b201df61d67487301f11879d514f4248ade90c8f68c7af1284c161098de4c28c2850f1ec7b8e30f959793e571542ffc6532189409cb51c3d30dad78c4ad5165eda18b20d9826d8707d0f742e2ab492103a85bbd9ddf4f5720f6de7064feb0d39ee002219765bb07bcfb8b877f47abe270ddeda4f676108cecb6b9bb2ad484a4f00110100010003fd17a7490c22a79c59281fb7b20f5e6553ec0c1637ae382e8adaea295f50241037f8997cf42c1ce26417e015091451b15424b2c59eb8d4161b0975630408e394d3b00f88d4b4e18e2cc85e8251d4753a27c639c83f5ad4a571c4f19d7cd460b9b73c25ade730c99df09637bd173d8e3e981ac64432078263bb6dc30d3e974150dd0200d0ee05be3d4604d2146fb0457f31ba17c057560785aa804e8ca5530a7cd81d3440d0f4ba6851efcfd3954b7e68908fc0ba47f7ac37bf559c6c168b70d3a7c8cd0200da1c677c4bce06a068070f2b3733b0a714e88d62aa3f9a26c6f5216d48d5c2b5624144f3807c0df30be66b3268eeeca4df1fbded58faf49fc95dc3c35f134f8b01fd1396b6c0fc1b6c4f0eb8f5e44b8eace1e6073e20d0b8bc5385f86f1cf3f050f66af789f3ef1fc107b7f4421e19e0349c730c68f0a226981f4e889054fdb4dc149e8e889f04180102000905024d3c5c10021b0c000a0910a34d7e18c20c31bb1a03040085c8d62e16d05dc4e9dad64953c8a2eed8b6c12f92b1575eeaa6dcf7be9473dd5b24b37b6dffbb4e7c99ed1bd3cb11634be19b3e6e207bed7505c7ca111ccf47cb323bf1f8851eb6360e8034cbff8dd149993c959de89f8f77f38e7e98b8e3076323aa719328e2b408db5ec0d03936efd57422ba04f925cdc7b4c1af7590e40ab00200009501fe044d3c5c33010400b488c3e5f83f4d561f317817538d9d0397981e9aef1321ca68ebfae1cf8b7d388e19f4b5a24a82e2fbbf1c6c26557a6c5845307a03d815756f564ac7325b02bc83e87d5480a8fae848f07cb891f2d51ce7df83dcafdc12324517c86d472cc0ee10d47a68fd1d9ae49a6c19bbd36d82af597a0d88cc9c49de9df4e696fc1f0b5d0011010001fe030302e9030f3c783e14856063f16938530e148bc57a7aa3f3e4f90df9dceccdc779bc0835e1ad3d006e4a8d7b36d08b8e0de5a0d947254ecfbd22037e6572b426bcfdc517796b224b0036ff90bc574b5509bede85512f2eefb520fb4b02aa523ba739bff424a6fe81c5041f253f8d757e69a503d3563a104d0d49e9e890b9d0c26f96b55b743883b472caa7050c4acfd4a21f875bdf1258d88bd61224d303dc9df77f743137d51e6d5246b88c406780528fd9a3e15bab5452e5b93970d9dcc79f48b38651b9f15bfbcf6da452837e9cc70683d1bdca94507870f743e4ad902005812488dd342f836e72869afd00ce1850eea4cfa53ce10e3608e13d3c149394ee3cbd0e23d018fcbcb6e2ec5a1a22972d1d462ca05355d0d290dd2751e550d5efb38c6c89686344df64852bf4ff86638708f644e8ec6bd4af9b50d8541cb91891a431326ab2e332faa7ae86cfb6e0540aa63160c1e5cdd5a4add518b303fff0a20117c6bc77f7cfbaf36b04c865c6c2b42754657374204b6579203220285253412c20656e637279707465642070726976617465206b65792988b804130102002205024d3c5c33021b03060b090807030206150802090a0b0416020301021e01021780000a0910d4984f961e35246b98940400908a73b6a6169f700434f076c6c79015a49bee37130eaf23aaa3cfa9ce60bfe4acaa7bc95f1146ada5867e0079babb38804891f4f0b8ebca57a86b249dee786161a755b7a342e68ccf3f78ed6440a93a6626beb9a37aa66afcd4f888790cb4bb46d94a4ae3eb3d7d3e6b00f6bfec940303e89ec5b32a1eaaacce66497d539328b00200009d01fe044d3c5c33010400a4e913f9442abcc7f1804ccab27d2f787ffa592077ca935a8bb23165bd8d57576acac647cc596b2c3f814518cc8c82953c7a4478f32e0cf645630a5ba38d9618ef2bc3add69d459ae3dece5cab778938d988239f8c5ae437807075e06c828019959c644ff05ef6a5a1dab72227c98e3a040b0cf219026640698d7a13d8538a570011010001fe030302e9030f3c783e148560f936097339ae381d63116efcf802ff8b1c9360767db5219cc987375702a4123fd8657d3e22700f23f95020d1b261eda5257e9a72f9a918e8ef22dd5b3323ae03bbc1923dd224db988cadc16acc04b120a9f8b7e84da9716c53e0334d7b66586ddb9014df604b41be1e960dcfcbc96f4ed150a1a0dd070b9eb14276b9b6be413a769a75b519a53d3ecc0c220e85cd91ca354d57e7344517e64b43b6e29823cbd87eae26e2b2e78e6dedfbb76e3e9f77bcb844f9a8932eb3db2c3f9e44316e6f5d60e9e2a56e46b72abe6b06dc9a31cc63f10023d1f5e12d2a3ee93b675c96f504af0001220991c88db759e231b3320dcedf814dcf723fd9857e3d72d66a0f2af26950b915abdf56c1596f46a325bf17ad4810d3535fb02a259b247ac3dbd4cc3ecf9c51b6c07cebb009c1506fba0a89321ec8683e3fd009a6e551d50243e2d5092fefb3321083a4bad91320dc624bd6b5dddf93553e3d53924c05bfebec1fb4bd47e89a1a889f04180102000905024d3c5c33021b0c000a0910d4984f961e35246b26c703ff7ee29ef53bc1ae1ead533c408fa136db508434e233d6e62be621e031e5940bbd4c08142aed0f82217e7c3e1ec8de574bc06ccf3c36633be41ad78a9eacd209f861cae7b064100758545cc9dd83db71806dc1cfd5fb9ae5c7474bba0c19c44034ae61bae5eca379383339dece94ff56ff7aa44a582f3e5c38f45763af577c0934b0020000" + +const dsaElGamalTestKeysHex = "9501e1044dfcb16a110400aa3e5c1a1f43dd28c2ffae8abf5cfce555ee874134d8ba0a0f7b868ce2214beddc74e5e1e21ded354a95d18acdaf69e5e342371a71fbb9093162e0c5f3427de413a7f2c157d83f5cd2f9d791256dc4f6f0e13f13c3302af27f2384075ab3021dff7a050e14854bbde0a1094174855fc02f0bae8e00a340d94a1f22b32e48485700a0cec672ac21258fb95f61de2ce1af74b2c4fa3e6703ff698edc9be22c02ae4d916e4fa223f819d46582c0516235848a77b577ea49018dcd5e9e15cff9dbb4663a1ae6dd7580fa40946d40c05f72814b0f88481207e6c0832c3bded4853ebba0a7e3bd8e8c66df33d5a537cd4acf946d1080e7a3dcea679cb2b11a72a33a2b6a9dc85f466ad2ddf4c3db6283fa645343286971e3dd700703fc0c4e290d45767f370831a90187e74e9972aae5bff488eeff7d620af0362bfb95c1a6c3413ab5d15a2e4139e5d07a54d72583914661ed6a87cce810be28a0aa8879a2dd39e52fb6fe800f4f181ac7e328f740cde3d09a05cecf9483e4cca4253e60d4429ffd679d9996a520012aad119878c941e3cf151459873bdfc2a9563472fe0303027a728f9feb3b864260a1babe83925ce794710cfd642ee4ae0e5b9d74cee49e9c67b6cd0ea5dfbb582132195a121356a1513e1bca73e5b80c58c7ccb4164453412f456c47616d616c2054657374204b65792031886204131102002205024dfcb16a021b03060b090807030206150802090a0b0416020301021e01021780000a091033af447ccd759b09fadd00a0b8fd6f5a790bad7e9f2dbb7632046dc4493588db009c087c6a9ba9f7f49fab221587a74788c00db4889ab00200009d0157044dfcb16a1004008dec3f9291205255ccff8c532318133a6840739dd68b03ba942676f9038612071447bf07d00d559c5c0875724ea16a4c774f80d8338b55fca691a0522e530e604215b467bbc9ccfd483a1da99d7bc2648b4318fdbd27766fc8bfad3fddb37c62b8ae7ccfe9577e9b8d1e77c1d417ed2c2ef02d52f4da11600d85d3229607943700030503ff506c94c87c8cab778e963b76cf63770f0a79bf48fb49d3b4e52234620fc9f7657f9f8d56c96a2b7c7826ae6b57ebb2221a3fe154b03b6637cea7e6d98e3e45d87cf8dc432f723d3d71f89c5192ac8d7290684d2c25ce55846a80c9a7823f6acd9bb29fa6cd71f20bc90eccfca20451d0c976e460e672b000df49466408d527affe0303027a728f9feb3b864260abd761730327bca2aaa4ea0525c175e92bf240682a0e83b226f97ecb2e935b62c9a133858ce31b271fa8eb41f6a1b3cd72a63025ce1a75ee4180dcc284884904181102000905024dfcb16a021b0c000a091033af447ccd759b09dd0b009e3c3e7296092c81bee5a19929462caaf2fff3ae26009e218c437a2340e7ea628149af1ec98ec091a43992b00200009501e1044dfcb1be1104009f61faa61aa43df75d128cbe53de528c4aec49ce9360c992e70c77072ad5623de0a3a6212771b66b39a30dad6781799e92608316900518ec01184a85d872365b7d2ba4bacfb5882ea3c2473d3750dc6178cc1cf82147fb58caa28b28e9f12f6d1efcb0534abed644156c91cca4ab78834268495160b2400bc422beb37d237c2300a0cac94911b6d493bda1e1fbc6feeca7cb7421d34b03fe22cec6ccb39675bb7b94a335c2b7be888fd3906a1125f33301d8aa6ec6ee6878f46f73961c8d57a3e9544d8ef2a2cbfd4d52da665b1266928cfe4cb347a58c412815f3b2d2369dec04b41ac9a71cc9547426d5ab941cccf3b18575637ccfb42df1a802df3cfe0a999f9e7109331170e3a221991bf868543960f8c816c28097e503fe319db10fb98049f3a57d7c80c420da66d56f3644371631fad3f0ff4040a19a4fedc2d07727a1b27576f75a4d28c47d8246f27071e12d7a8de62aad216ddbae6aa02efd6b8a3e2818cda48526549791ab277e447b3a36c57cefe9b592f5eab73959743fcc8e83cbefec03a329b55018b53eec196765ae40ef9e20521a603c551efe0303020950d53a146bf9c66034d00c23130cce95576a2ff78016ca471276e8227fb30b1ffbd92e61804fb0c3eff9e30b1a826ee8f3e4730b4d86273ca977b4164453412f456c47616d616c2054657374204b65792032886204131102002205024dfcb1be021b03060b090807030206150802090a0b0416020301021e01021780000a0910a86bf526325b21b22bd9009e34511620415c974750a20df5cb56b182f3b48e6600a0a9466cb1a1305a84953445f77d461593f1d42bc1b00200009d0157044dfcb1be1004009565a951da1ee87119d600c077198f1c1bceb0f7aa54552489298e41ff788fa8f0d43a69871f0f6f77ebdfb14a4260cf9fbeb65d5844b4272a1904dd95136d06c3da745dc46327dd44a0f16f60135914368c8039a34033862261806bb2c5ce1152e2840254697872c85441ccb7321431d75a747a4bfb1d2c66362b51ce76311700030503fc0ea76601c196768070b7365a200e6ddb09307f262d5f39eec467b5f5784e22abdf1aa49226f59ab37cb49969d8f5230ea65caf56015abda62604544ed526c5c522bf92bed178a078789f6c807b6d34885688024a5bed9e9f8c58d11d4b82487b44c5f470c5606806a0443b79cadb45e0f897a561a53f724e5349b9267c75ca17fe0303020950d53a146bf9c660bc5f4ce8f072465e2d2466434320c1e712272fafc20e342fe7608101580fa1a1a367e60486a7cd1246b7ef5586cf5e10b32762b710a30144f12dd17dd4884904181102000905024dfcb1be021b0c000a0910a86bf526325b21b2904c00a0b2b66b4b39ccffda1d10f3ea8d58f827e30a8b8e009f4255b2d8112a184e40cde43a34e8655ca7809370b0020000" + +const signedMessageHex = "a3019bc0cbccc0c4b8d8b74ee2108fe16ec6d3ca490cbe362d3f8333d3f352531472538b8b13d353b97232f352158c20943157c71c16064626063656269052062e4e01987e9b6fccff4b7df3a34c534b23e679cbec3bc0f8f6e64dfb4b55fe3f8efa9ce110ddb5cd79faf1d753c51aecfa669f7e7aa043436596cccc3359cb7dd6bbe9ecaa69e5989d9e57209571edc0b2fa7f57b9b79a64ee6e99ce1371395fee92fec2796f7b15a77c386ff668ee27f6d38f0baa6c438b561657377bf6acff3c5947befd7bf4c196252f1d6e5c524d0300" + +const signedTextMessageHex = "a3019bc0cbccc8c4b8d8b74ee2108fe16ec6d36a250cbece0c178233d3f352531472538b8b13d35379b97232f352158ca0b4312f57c71c1646462606365626906a062e4e019811591798ff99bf8afee860b0d8a8c2a85c3387e3bcf0bb3b17987f2bbcfab2aa526d930cbfd3d98757184df3995c9f3e7790e36e3e9779f06089d4c64e9e47dd6202cb6e9bc73c5d11bb59fbaf89d22d8dc7cf199ddf17af96e77c5f65f9bbed56f427bd8db7af37f6c9984bf9385efaf5f184f986fb3e6adb0ecfe35bbf92d16a7aa2a344fb0bc52fb7624f0200" + +const signedEncryptedMessageHex = "848c032a67d68660df41c70103ff5789d0de26b6a50c985a02a13131ca829c413a35d0e6fa8d6842599252162808ac7439c72151c8c6183e76923fe3299301414d0c25a2f06a2257db3839e7df0ec964773f6e4c4ac7ff3b48c444237166dd46ba8ff443a5410dc670cb486672fdbe7c9dfafb75b4fea83af3a204fe2a7dfa86bd20122b4f3d2646cbeecb8f7be8d2c03b018bd210b1d3791e1aba74b0f1034e122ab72e760492c192383cf5e20b5628bd043272d63df9b923f147eb6091cd897553204832aba48fec54aa447547bb16305a1024713b90e77fd0065f1918271947549205af3c74891af22ee0b56cd29bfec6d6e351901cd4ab3ece7c486f1e32a792d4e474aed98ee84b3f591c7dff37b64e0ecd68fd036d517e412dcadf85840ce184ad7921ad446c4ee28db80447aea1ca8d4f574db4d4e37688158ddd19e14ee2eab4873d46947d65d14a23e788d912cf9a19624ca7352469b72a83866b7c23cb5ace3deab3c7018061b0ba0f39ed2befe27163e5083cf9b8271e3e3d52cc7ad6e2a3bd81d4c3d7022f8d" + +const signedEncryptedMessage2Hex = "85010e03cf6a7abcd43e36731003fb057f5495b79db367e277cdbe4ab90d924ddee0c0381494112ff8c1238fb0184af35d1731573b01bc4c55ecacd2aafbe2003d36310487d1ecc9ac994f3fada7f9f7f5c3a64248ab7782906c82c6ff1303b69a84d9a9529c31ecafbcdb9ba87e05439897d87e8a2a3dec55e14df19bba7f7bd316291c002ae2efd24f83f9e3441203fc081c0c23dc3092a454ca8a082b27f631abf73aca341686982e8fbda7e0e7d863941d68f3de4a755c2964407f4b5e0477b3196b8c93d551dd23c8beef7d0f03fbb1b6066f78907faf4bf1677d8fcec72651124080e0b7feae6b476e72ab207d38d90b958759fdedfc3c6c35717c9dbfc979b3cfbbff0a76d24a5e57056bb88acbd2a901ef64bc6e4db02adc05b6250ff378de81dca18c1910ab257dff1b9771b85bb9bbe0a69f5989e6d1710a35e6dfcceb7d8fb5ccea8db3932b3d9ff3fe0d327597c68b3622aec8e3716c83a6c93f497543b459b58ba504ed6bcaa747d37d2ca746fe49ae0a6ce4a8b694234e941b5159ff8bd34b9023da2814076163b86f40eed7c9472f81b551452d5ab87004a373c0172ec87ea6ce42ccfa7dbdad66b745496c4873d8019e8c28d6b3" + +const symmetricallyEncryptedCompressedHex = "8c0d04030302eb4a03808145d0d260c92f714339e13de5a79881216431925bf67ee2898ea61815f07894cd0703c50d0a76ef64d482196f47a8bc729af9b80bb6" + +const dsaTestKeyHex = "9901a2044d6c49de110400cb5ce438cf9250907ac2ba5bf6547931270b89f7c4b53d9d09f4d0213a5ef2ec1f26806d3d259960f872a4a102ef1581ea3f6d6882d15134f21ef6a84de933cc34c47cc9106efe3bd84c6aec12e78523661e29bc1a61f0aab17fa58a627fd5fd33f5149153fbe8cd70edf3d963bc287ef875270ff14b5bfdd1bca4483793923b00a0fe46d76cb6e4cbdc568435cd5480af3266d610d303fe33ae8273f30a96d4d34f42fa28ce1112d425b2e3bf7ea553d526e2db6b9255e9dc7419045ce817214d1a0056dbc8d5289956a4b1b69f20f1105124096e6a438f41f2e2495923b0f34b70642607d45559595c7fe94d7fa85fc41bf7d68c1fd509ebeaa5f315f6059a446b9369c277597e4f474a9591535354c7e7f4fd98a08aa60400b130c24ff20bdfbf683313f5daebf1c9b34b3bdadfc77f2ddd72ee1fb17e56c473664bc21d66467655dd74b9005e3a2bacce446f1920cd7017231ae447b67036c9b431b8179deacd5120262d894c26bc015bffe3d827ba7087ad9b700d2ca1f6d16cc1786581e5dd065f293c31209300f9b0afcc3f7c08dd26d0a22d87580b4db41054657374204b65792033202844534129886204131102002205024d6c49de021b03060b090807030206150802090a0b0416020301021e01021780000a0910338934250ccc03607e0400a0bdb9193e8a6b96fc2dfc108ae848914b504481f100a09c4dc148cb693293a67af24dd40d2b13a9e36794" + +const dsaTestKeyPrivateHex = "9501bb044d6c49de110400cb5ce438cf9250907ac2ba5bf6547931270b89f7c4b53d9d09f4d0213a5ef2ec1f26806d3d259960f872a4a102ef1581ea3f6d6882d15134f21ef6a84de933cc34c47cc9106efe3bd84c6aec12e78523661e29bc1a61f0aab17fa58a627fd5fd33f5149153fbe8cd70edf3d963bc287ef875270ff14b5bfdd1bca4483793923b00a0fe46d76cb6e4cbdc568435cd5480af3266d610d303fe33ae8273f30a96d4d34f42fa28ce1112d425b2e3bf7ea553d526e2db6b9255e9dc7419045ce817214d1a0056dbc8d5289956a4b1b69f20f1105124096e6a438f41f2e2495923b0f34b70642607d45559595c7fe94d7fa85fc41bf7d68c1fd509ebeaa5f315f6059a446b9369c277597e4f474a9591535354c7e7f4fd98a08aa60400b130c24ff20bdfbf683313f5daebf1c9b34b3bdadfc77f2ddd72ee1fb17e56c473664bc21d66467655dd74b9005e3a2bacce446f1920cd7017231ae447b67036c9b431b8179deacd5120262d894c26bc015bffe3d827ba7087ad9b700d2ca1f6d16cc1786581e5dd065f293c31209300f9b0afcc3f7c08dd26d0a22d87580b4d00009f592e0619d823953577d4503061706843317e4fee083db41054657374204b65792033202844534129886204131102002205024d6c49de021b03060b090807030206150802090a0b0416020301021e01021780000a0910338934250ccc03607e0400a0bdb9193e8a6b96fc2dfc108ae848914b504481f100a09c4dc148cb693293a67af24dd40d2b13a9e36794" + +const p256TestKeyHex = "98520456e5b83813082a8648ce3d030107020304a2072cd6d21321266c758cc5b83fab0510f751cb8d91897cddb7047d8d6f185546e2107111b0a95cb8ef063c33245502af7a65f004d5919d93ee74eb71a66253b424502d3235362054657374204b6579203c696e76616c6964406578616d706c652e636f6d3e8879041313080021050256e5b838021b03050b09080702061508090a0b020416020301021e01021780000a0910d44a2c495918513e54e50100dfa64f97d9b47766fc1943c6314ba3f2b2a103d71ad286dc5b1efb96a345b0c80100dbc8150b54241f559da6ef4baacea6d31902b4f4b1bdc09b34bf0502334b7754b8560456e5b83812082a8648ce3d030107020304bfe3cea9cee13486f8d518aa487fecab451f25467d2bf08e58f63e5fa525d5482133e6a79299c274b068ef0be448152ad65cf11cf764348588ca4f6a0bcf22b6030108078861041813080009050256e5b838021b0c000a0910d44a2c495918513e4a4800ff49d589fa64024ad30be363a032e3a0e0e6f5db56ba4c73db850518bf0121b8f20100fd78e065f4c70ea5be9df319ea67e493b936fc78da834a71828043d3154af56e" + +const p256TestKeyPrivateHex = "94a50456e5b83813082a8648ce3d030107020304a2072cd6d21321266c758cc5b83fab0510f751cb8d91897cddb7047d8d6f185546e2107111b0a95cb8ef063c33245502af7a65f004d5919d93ee74eb71a66253fe070302f0c2bfb0b6c30f87ee1599472b8636477eab23ced13b271886a4b50ed34c9d8436af5af5b8f88921f0efba6ef8c37c459bbb88bc1c6a13bbd25c4ce9b1e97679569ee77645d469bf4b43de637f5561b424502d3235362054657374204b6579203c696e76616c6964406578616d706c652e636f6d3e8879041313080021050256e5b838021b03050b09080702061508090a0b020416020301021e01021780000a0910d44a2c495918513e54e50100dfa64f97d9b47766fc1943c6314ba3f2b2a103d71ad286dc5b1efb96a345b0c80100dbc8150b54241f559da6ef4baacea6d31902b4f4b1bdc09b34bf0502334b77549ca90456e5b83812082a8648ce3d030107020304bfe3cea9cee13486f8d518aa487fecab451f25467d2bf08e58f63e5fa525d5482133e6a79299c274b068ef0be448152ad65cf11cf764348588ca4f6a0bcf22b603010807fe0703027510012471a603cfee2968dce19f732721ddf03e966fd133b4e3c7a685b788705cbc46fb026dc94724b830c9edbaecd2fb2c662f23169516cacd1fe423f0475c364ecc10abcabcfd4bbbda1a36a1bd8861041813080009050256e5b838021b0c000a0910d44a2c495918513e4a4800ff49d589fa64024ad30be363a032e3a0e0e6f5db56ba4c73db850518bf0121b8f20100fd78e065f4c70ea5be9df319ea67e493b936fc78da834a71828043d3154af56e" + +const armoredPrivateKeyBlock = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: GnuPG v1.4.10 (GNU/Linux) + +lQHYBE2rFNoBBADFwqWQIW/DSqcB4yCQqnAFTJ27qS5AnB46ccAdw3u4Greeu3Bp +idpoHdjULy7zSKlwR1EA873dO/k/e11Ml3dlAFUinWeejWaK2ugFP6JjiieSsrKn +vWNicdCS4HTWn0X4sjl0ZiAygw6GNhqEQ3cpLeL0g8E9hnYzJKQ0LWJa0QARAQAB +AAP/TB81EIo2VYNmTq0pK1ZXwUpxCrvAAIG3hwKjEzHcbQznsjNvPUihZ+NZQ6+X +0HCfPAdPkGDCLCb6NavcSW+iNnLTrdDnSI6+3BbIONqWWdRDYJhqZCkqmG6zqSfL +IdkJgCw94taUg5BWP/AAeQrhzjChvpMQTVKQL5mnuZbUCeMCAN5qrYMP2S9iKdnk +VANIFj7656ARKt/nf4CBzxcpHTyB8+d2CtPDKCmlJP6vL8t58Jmih+kHJMvC0dzn +gr5f5+sCAOOe5gt9e0am7AvQWhdbHVfJU0TQJx+m2OiCJAqGTB1nvtBLHdJnfdC9 +TnXXQ6ZXibqLyBies/xeY2sCKL5qtTMCAKnX9+9d/5yQxRyrQUHt1NYhaXZnJbHx +q4ytu0eWz+5i68IYUSK69jJ1NWPM0T6SkqpB3KCAIv68VFm9PxqG1KmhSrQIVGVz +dCBLZXmIuAQTAQIAIgUCTasU2gIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AA +CgkQO9o98PRieSoLhgQAkLEZex02Qt7vGhZzMwuN0R22w3VwyYyjBx+fM3JFETy1 +ut4xcLJoJfIaF5ZS38UplgakHG0FQ+b49i8dMij0aZmDqGxrew1m4kBfjXw9B/v+ +eIqpODryb6cOSwyQFH0lQkXC040pjq9YqDsO5w0WYNXYKDnzRV0p4H1pweo2VDid +AdgETasU2gEEAN46UPeWRqKHvA99arOxee38fBt2CI08iiWyI8T3J6ivtFGixSqV +bRcPxYO/qLpVe5l84Nb3X71GfVXlc9hyv7CD6tcowL59hg1E/DC5ydI8K8iEpUmK +/UnHdIY5h8/kqgGxkY/T/hgp5fRQgW1ZoZxLajVlMRZ8W4tFtT0DeA+JABEBAAEA +A/0bE1jaaZKj6ndqcw86jd+QtD1SF+Cf21CWRNeLKnUds4FRRvclzTyUMuWPkUeX +TaNNsUOFqBsf6QQ2oHUBBK4VCHffHCW4ZEX2cd6umz7mpHW6XzN4DECEzOVksXtc +lUC1j4UB91DC/RNQqwX1IV2QLSwssVotPMPqhOi0ZLNY7wIA3n7DWKInxYZZ4K+6 +rQ+POsz6brEoRHwr8x6XlHenq1Oki855pSa1yXIARoTrSJkBtn5oI+f8AzrnN0BN +oyeQAwIA/7E++3HDi5aweWrViiul9cd3rcsS0dEnksPhvS0ozCJiHsq/6GFmy7J8 +QSHZPteedBnZyNp5jR+H7cIfVN3KgwH/Skq4PsuPhDq5TKK6i8Pc1WW8MA6DXTdU +nLkX7RGmMwjC0DBf7KWAlPjFaONAX3a8ndnz//fy1q7u2l9AZwrj1qa1iJ8EGAEC +AAkFAk2rFNoCGwwACgkQO9o98PRieSo2/QP/WTzr4ioINVsvN1akKuekmEMI3LAp +BfHwatufxxP1U+3Si/6YIk7kuPB9Hs+pRqCXzbvPRrI8NHZBmc8qIGthishdCYad +AHcVnXjtxrULkQFGbGvhKURLvS9WnzD/m1K2zzwxzkPTzT9/Yf06O6Mal5AdugPL +VrM0m72/jnpKo04= +=zNCn +-----END PGP PRIVATE KEY BLOCK-----` + +const e2ePublicKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Charset: UTF-8 + +xv8AAABSBAAAAAATCCqGSM49AwEHAgME1LRoXSpOxtHXDUdmuvzchyg6005qIBJ4 +sfaSxX7QgH9RV2ONUhC+WiayCNADq+UMzuR/vunSr4aQffXvuGnR383/AAAAFDxk +Z2lsQHlhaG9vLWluYy5jb20+wv8AAACGBBATCAA4/wAAAAWCVGvAG/8AAAACiwn/ +AAAACZC2VkQCOjdvYf8AAAAFlQgJCgv/AAAAA5YBAv8AAAACngEAAE1BAP0X8veD +24IjmI5/C6ZAfVNXxgZZFhTAACFX75jUA3oD6AEAzoSwKf1aqH6oq62qhCN/pekX ++WAsVMBhNwzLpqtCRjLO/wAAAFYEAAAAABIIKoZIzj0DAQcCAwT50ain7vXiIRv8 +B1DO3x3cE/aattZ5sHNixJzRCXi2vQIA5QmOxZ6b5jjUekNbdHG3SZi1a2Ak5mfX +fRxC/5VGAwEIB8L/AAAAZQQYEwgAGP8AAAAFglRrwBz/AAAACZC2VkQCOjdvYQAA +FJAA9isX3xtGyMLYwp2F3nXm7QEdY5bq5VUcD/RJlj792VwA/1wH0pCzVLl4Q9F9 +ex7En5r7rHR5xwX82Msc+Rq9dSyO +=7MrZ +-----END PGP PUBLIC KEY BLOCK-----` + +const dsaKeyWithSHA512 = `9901a2044f04b07f110400db244efecc7316553ee08d179972aab87bb1214de7692593fcf5b6feb1c80fba268722dd464748539b85b81d574cd2d7ad0ca2444de4d849b8756bad7768c486c83a824f9bba4af773d11742bdfb4ac3b89ef8cc9452d4aad31a37e4b630d33927bff68e879284a1672659b8b298222fc68f370f3e24dccacc4a862442b9438b00a0ea444a24088dc23e26df7daf8f43cba3bffc4fe703fe3d6cd7fdca199d54ed8ae501c30e3ec7871ea9cdd4cf63cfe6fc82281d70a5b8bb493f922cd99fba5f088935596af087c8d818d5ec4d0b9afa7f070b3d7c1dd32a84fca08d8280b4890c8da1dde334de8e3cad8450eed2a4a4fcc2db7b8e5528b869a74a7f0189e11ef097ef1253582348de072bb07a9fa8ab838e993cef0ee203ff49298723e2d1f549b00559f886cd417a41692ce58d0ac1307dc71d85a8af21b0cf6eaa14baf2922d3a70389bedf17cc514ba0febbd107675a372fe84b90162a9e88b14d4b1c6be855b96b33fb198c46f058568817780435b6936167ebb3724b680f32bf27382ada2e37a879b3d9de2abe0c3f399350afd1ad438883f4791e2e3b4184453412068617368207472756e636174696f6e207465737488620413110a002205024f04b07f021b03060b090807030206150802090a0b0416020301021e01021780000a0910ef20e0cefca131581318009e2bf3bf047a44d75a9bacd00161ee04d435522397009a03a60d51bd8a568c6c021c8d7cf1be8d990d6417b0020003` + +const unknownHashFunctionHex = `8a00000040040001990006050253863c24000a09103b4fe6acc0b21f32ffff01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101` + +const missingHashFunctionHex = `8a00000040040001030006050253863c24000a09103b4fe6acc0b21f32ffff0101010101010101010101010101010101010101010101010101010101010101010101010101` + +const campbellQuine = `a0b001000300fcffa0b001000d00f2ff000300fcffa0b001000d00f2ff8270a01c00000500faff8270a01c00000500faff000500faff001400ebff8270a01c00000500faff000500faff001400ebff428821c400001400ebff428821c400001400ebff428821c400001400ebff428821c400001400ebff428821c400000000ffff000000ffff000b00f4ff428821c400000000ffff000000ffff000b00f4ff0233214c40000100feff000233214c40000100feff0000` + +const keyV4forVerifyingSignedMessageV3 = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: GPGTools - https://gpgtools.org + +mI0EVfxoFQEEAMBIqmbDfYygcvP6Phr1wr1XI41IF7Qixqybs/foBF8qqblD9gIY +BKpXjnBOtbkcVOJ0nljd3/sQIfH4E0vQwK5/4YRQSI59eKOqd6Fx+fWQOLG+uu6z +tewpeCj9LLHvibx/Sc7VWRnrznia6ftrXxJ/wHMezSab3tnGC0YPVdGNABEBAAG0 +JEdvY3J5cHRvIFRlc3QgS2V5IDx0aGVtYXhAZ21haWwuY29tPoi5BBMBCgAjBQJV +/GgVAhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQeXnQmhdGW9PFVAP+ +K7TU0qX5ArvIONIxh/WAweyOk884c5cE8f+3NOPOOCRGyVy0FId5A7MmD5GOQh4H +JseOZVEVCqlmngEvtHZb3U1VYtVGE5WZ+6rQhGsMcWP5qaT4soYwMBlSYxgYwQcx +YhN9qOr292f9j2Y//TTIJmZT4Oa+lMxhWdqTfX+qMgG4jQRV/GgVAQQArhFSiij1 +b+hT3dnapbEU+23Z1yTu1DfF6zsxQ4XQWEV3eR8v+8mEDDNcz8oyyF56k6UQ3rXi +UMTIwRDg4V6SbZmaFbZYCOwp/EmXJ3rfhm7z7yzXj2OFN22luuqbyVhuL7LRdB0M +pxgmjXb4tTvfgKd26x34S+QqUJ7W6uprY4sAEQEAAYifBBgBCgAJBQJV/GgVAhsM +AAoJEHl50JoXRlvT7y8D/02ckx4OMkKBZo7viyrBw0MLG92i+DC2bs35PooHR6zz +786mitjOp5z2QWNLBvxC70S0qVfCIz8jKupO1J6rq6Z8CcbLF3qjm6h1omUBf8Nd +EfXKD2/2HV6zMKVknnKzIEzauh+eCKS2CeJUSSSryap/QLVAjRnckaES/OsEWhNB +=RZia +-----END PGP PUBLIC KEY BLOCK----- +` + +const signedMessageV3 = `-----BEGIN PGP MESSAGE----- +Comment: GPGTools - https://gpgtools.org + +owGbwMvMwMVYWXlhlrhb9GXG03JJDKF/MtxDMjKLFYAoUaEktbhEITe1uDgxPVWP +q5NhKjMrWAVcC9evD8z/bF/uWNjqtk/X3y5/38XGRQHm/57rrDRYuGnTw597Xqka +uM3137/hH3Os+Jf2dc0fXOITKwJvXJvecPVs0ta+Vg7ZO1MLn8w58Xx+6L58mbka +DGHyU9yTueZE8D+QF/Tz28Y78dqtF56R1VPn9Xw4uJqrWYdd7b3vIZ1V6R4Nh05d +iT57d/OhWwA= +=hG7R +-----END PGP MESSAGE----- +` diff --git a/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go b/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go new file mode 100644 index 0000000..4b9a44c --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go @@ -0,0 +1,273 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package s2k implements the various OpenPGP string-to-key transforms as +// specified in RFC 4800 section 3.7.1. +package s2k // import "golang.org/x/crypto/openpgp/s2k" + +import ( + "crypto" + "hash" + "io" + "strconv" + + "golang.org/x/crypto/openpgp/errors" +) + +// Config collects configuration parameters for s2k key-stretching +// transformatioms. A nil *Config is valid and results in all default +// values. Currently, Config is used only by the Serialize function in +// this package. +type Config struct { + // Hash is the default hash function to be used. If + // nil, SHA1 is used. + Hash crypto.Hash + // S2KCount is only used for symmetric encryption. It + // determines the strength of the passphrase stretching when + // the said passphrase is hashed to produce a key. S2KCount + // should be between 1024 and 65011712, inclusive. If Config + // is nil or S2KCount is 0, the value 65536 used. Not all + // values in the above range can be represented. S2KCount will + // be rounded up to the next representable value if it cannot + // be encoded exactly. When set, it is strongly encrouraged to + // use a value that is at least 65536. See RFC 4880 Section + // 3.7.1.3. + S2KCount int +} + +func (c *Config) hash() crypto.Hash { + if c == nil || uint(c.Hash) == 0 { + // SHA1 is the historical default in this package. + return crypto.SHA1 + } + + return c.Hash +} + +func (c *Config) encodedCount() uint8 { + if c == nil || c.S2KCount == 0 { + return 96 // The common case. Correspoding to 65536 + } + + i := c.S2KCount + switch { + // Behave like GPG. Should we make 65536 the lowest value used? + case i < 1024: + i = 1024 + case i > 65011712: + i = 65011712 + } + + return encodeCount(i) +} + +// encodeCount converts an iterative "count" in the range 1024 to +// 65011712, inclusive, to an encoded count. The return value is the +// octet that is actually stored in the GPG file. encodeCount panics +// if i is not in the above range (encodedCount above takes care to +// pass i in the correct range). See RFC 4880 Section 3.7.7.1. +func encodeCount(i int) uint8 { + if i < 1024 || i > 65011712 { + panic("count arg i outside the required range") + } + + for encoded := 0; encoded < 256; encoded++ { + count := decodeCount(uint8(encoded)) + if count >= i { + return uint8(encoded) + } + } + + return 255 +} + +// decodeCount returns the s2k mode 3 iterative "count" corresponding to +// the encoded octet c. +func decodeCount(c uint8) int { + return (16 + int(c&15)) << (uint32(c>>4) + 6) +} + +// Simple writes to out the result of computing the Simple S2K function (RFC +// 4880, section 3.7.1.1) using the given hash and input passphrase. +func Simple(out []byte, h hash.Hash, in []byte) { + Salted(out, h, in, nil) +} + +var zero [1]byte + +// Salted writes to out the result of computing the Salted S2K function (RFC +// 4880, section 3.7.1.2) using the given hash, input passphrase and salt. +func Salted(out []byte, h hash.Hash, in []byte, salt []byte) { + done := 0 + var digest []byte + + for i := 0; done < len(out); i++ { + h.Reset() + for j := 0; j < i; j++ { + h.Write(zero[:]) + } + h.Write(salt) + h.Write(in) + digest = h.Sum(digest[:0]) + n := copy(out[done:], digest) + done += n + } +} + +// Iterated writes to out the result of computing the Iterated and Salted S2K +// function (RFC 4880, section 3.7.1.3) using the given hash, input passphrase, +// salt and iteration count. +func Iterated(out []byte, h hash.Hash, in []byte, salt []byte, count int) { + combined := make([]byte, len(in)+len(salt)) + copy(combined, salt) + copy(combined[len(salt):], in) + + if count < len(combined) { + count = len(combined) + } + + done := 0 + var digest []byte + for i := 0; done < len(out); i++ { + h.Reset() + for j := 0; j < i; j++ { + h.Write(zero[:]) + } + written := 0 + for written < count { + if written+len(combined) > count { + todo := count - written + h.Write(combined[:todo]) + written = count + } else { + h.Write(combined) + written += len(combined) + } + } + digest = h.Sum(digest[:0]) + n := copy(out[done:], digest) + done += n + } +} + +// Parse reads a binary specification for a string-to-key transformation from r +// and returns a function which performs that transform. +func Parse(r io.Reader) (f func(out, in []byte), err error) { + var buf [9]byte + + _, err = io.ReadFull(r, buf[:2]) + if err != nil { + return + } + + hash, ok := HashIdToHash(buf[1]) + if !ok { + return nil, errors.UnsupportedError("hash for S2K function: " + strconv.Itoa(int(buf[1]))) + } + if !hash.Available() { + return nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hash))) + } + h := hash.New() + + switch buf[0] { + case 0: + f := func(out, in []byte) { + Simple(out, h, in) + } + return f, nil + case 1: + _, err = io.ReadFull(r, buf[:8]) + if err != nil { + return + } + f := func(out, in []byte) { + Salted(out, h, in, buf[:8]) + } + return f, nil + case 3: + _, err = io.ReadFull(r, buf[:9]) + if err != nil { + return + } + count := decodeCount(buf[8]) + f := func(out, in []byte) { + Iterated(out, h, in, buf[:8], count) + } + return f, nil + } + + return nil, errors.UnsupportedError("S2K function") +} + +// Serialize salts and stretches the given passphrase and writes the +// resulting key into key. It also serializes an S2K descriptor to +// w. The key stretching can be configured with c, which may be +// nil. In that case, sensible defaults will be used. +func Serialize(w io.Writer, key []byte, rand io.Reader, passphrase []byte, c *Config) error { + var buf [11]byte + buf[0] = 3 /* iterated and salted */ + buf[1], _ = HashToHashId(c.hash()) + salt := buf[2:10] + if _, err := io.ReadFull(rand, salt); err != nil { + return err + } + encodedCount := c.encodedCount() + count := decodeCount(encodedCount) + buf[10] = encodedCount + if _, err := w.Write(buf[:]); err != nil { + return err + } + + Iterated(key, c.hash().New(), passphrase, salt, count) + return nil +} + +// hashToHashIdMapping contains pairs relating OpenPGP's hash identifier with +// Go's crypto.Hash type. See RFC 4880, section 9.4. +var hashToHashIdMapping = []struct { + id byte + hash crypto.Hash + name string +}{ + {1, crypto.MD5, "MD5"}, + {2, crypto.SHA1, "SHA1"}, + {3, crypto.RIPEMD160, "RIPEMD160"}, + {8, crypto.SHA256, "SHA256"}, + {9, crypto.SHA384, "SHA384"}, + {10, crypto.SHA512, "SHA512"}, + {11, crypto.SHA224, "SHA224"}, +} + +// HashIdToHash returns a crypto.Hash which corresponds to the given OpenPGP +// hash id. +func HashIdToHash(id byte) (h crypto.Hash, ok bool) { + for _, m := range hashToHashIdMapping { + if m.id == id { + return m.hash, true + } + } + return 0, false +} + +// HashIdToString returns the name of the hash function corresponding to the +// given OpenPGP hash id. +func HashIdToString(id byte) (name string, ok bool) { + for _, m := range hashToHashIdMapping { + if m.id == id { + return m.name, true + } + } + + return "", false +} + +// HashIdToHash returns an OpenPGP hash id which corresponds the given Hash. +func HashToHashId(h crypto.Hash) (id byte, ok bool) { + for _, m := range hashToHashIdMapping { + if m.hash == h { + return m.id, true + } + } + return 0, false +} diff --git a/vendor/golang.org/x/crypto/openpgp/s2k/s2k_test.go b/vendor/golang.org/x/crypto/openpgp/s2k/s2k_test.go new file mode 100644 index 0000000..183d260 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/s2k/s2k_test.go @@ -0,0 +1,137 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package s2k + +import ( + "bytes" + "crypto" + _ "crypto/md5" + "crypto/rand" + "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" + "encoding/hex" + "testing" + + _ "golang.org/x/crypto/ripemd160" +) + +var saltedTests = []struct { + in, out string +}{ + {"hello", "10295ac1"}, + {"world", "ac587a5e"}, + {"foo", "4dda8077"}, + {"bar", "bd8aac6b9ea9cae04eae6a91c6133b58b5d9a61c14f355516ed9370456"}, + {"x", "f1d3f289"}, + {"xxxxxxxxxxxxxxxxxxxxxxx", "e00d7b45"}, +} + +func TestSalted(t *testing.T) { + h := sha1.New() + salt := [4]byte{1, 2, 3, 4} + + for i, test := range saltedTests { + expected, _ := hex.DecodeString(test.out) + out := make([]byte, len(expected)) + Salted(out, h, []byte(test.in), salt[:]) + if !bytes.Equal(expected, out) { + t.Errorf("#%d, got: %x want: %x", i, out, expected) + } + } +} + +var iteratedTests = []struct { + in, out string +}{ + {"hello", "83126105"}, + {"world", "6fa317f9"}, + {"foo", "8fbc35b9"}, + {"bar", "2af5a99b54f093789fd657f19bd245af7604d0f6ae06f66602a46a08ae"}, + {"x", "5a684dfe"}, + {"xxxxxxxxxxxxxxxxxxxxxxx", "18955174"}, +} + +func TestIterated(t *testing.T) { + h := sha1.New() + salt := [4]byte{4, 3, 2, 1} + + for i, test := range iteratedTests { + expected, _ := hex.DecodeString(test.out) + out := make([]byte, len(expected)) + Iterated(out, h, []byte(test.in), salt[:], 31) + if !bytes.Equal(expected, out) { + t.Errorf("#%d, got: %x want: %x", i, out, expected) + } + } +} + +var parseTests = []struct { + spec, in, out string +}{ + /* Simple with SHA1 */ + {"0002", "hello", "aaf4c61d"}, + /* Salted with SHA1 */ + {"01020102030405060708", "hello", "f4f7d67e"}, + /* Iterated with SHA1 */ + {"03020102030405060708f1", "hello", "f2a57b7c"}, +} + +func TestParse(t *testing.T) { + for i, test := range parseTests { + spec, _ := hex.DecodeString(test.spec) + buf := bytes.NewBuffer(spec) + f, err := Parse(buf) + if err != nil { + t.Errorf("%d: Parse returned error: %s", i, err) + continue + } + + expected, _ := hex.DecodeString(test.out) + out := make([]byte, len(expected)) + f(out, []byte(test.in)) + if !bytes.Equal(out, expected) { + t.Errorf("%d: output got: %x want: %x", i, out, expected) + } + if testing.Short() { + break + } + } +} + +func TestSerialize(t *testing.T) { + hashes := []crypto.Hash{crypto.MD5, crypto.SHA1, crypto.RIPEMD160, + crypto.SHA256, crypto.SHA384, crypto.SHA512, crypto.SHA224} + testCounts := []int{-1, 0, 1024, 65536, 4063232, 65011712} + for _, h := range hashes { + for _, c := range testCounts { + testSerializeConfig(t, &Config{Hash: h, S2KCount: c}) + } + } +} + +func testSerializeConfig(t *testing.T, c *Config) { + t.Logf("Running testSerializeConfig() with config: %+v", c) + + buf := bytes.NewBuffer(nil) + key := make([]byte, 16) + passphrase := []byte("testing") + err := Serialize(buf, key, rand.Reader, passphrase, c) + if err != nil { + t.Errorf("failed to serialize: %s", err) + return + } + + f, err := Parse(buf) + if err != nil { + t.Errorf("failed to reparse: %s", err) + return + } + key2 := make([]byte, len(key)) + f(key2, passphrase) + if !bytes.Equal(key2, key) { + t.Errorf("keys don't match: %x (serialied) vs %x (parsed)", key, key2) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/write.go b/vendor/golang.org/x/crypto/openpgp/write.go new file mode 100644 index 0000000..65a304c --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/write.go @@ -0,0 +1,378 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "crypto" + "hash" + "io" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" + "golang.org/x/crypto/openpgp/s2k" +) + +// DetachSign signs message with the private key from signer (which must +// already have been decrypted) and writes the signature to w. +// If config is nil, sensible defaults will be used. +func DetachSign(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error { + return detachSign(w, signer, message, packet.SigTypeBinary, config) +} + +// ArmoredDetachSign signs message with the private key from signer (which +// must already have been decrypted) and writes an armored signature to w. +// If config is nil, sensible defaults will be used. +func ArmoredDetachSign(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) (err error) { + return armoredDetachSign(w, signer, message, packet.SigTypeBinary, config) +} + +// DetachSignText signs message (after canonicalising the line endings) with +// the private key from signer (which must already have been decrypted) and +// writes the signature to w. +// If config is nil, sensible defaults will be used. +func DetachSignText(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error { + return detachSign(w, signer, message, packet.SigTypeText, config) +} + +// ArmoredDetachSignText signs message (after canonicalising the line endings) +// with the private key from signer (which must already have been decrypted) +// and writes an armored signature to w. +// If config is nil, sensible defaults will be used. +func ArmoredDetachSignText(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error { + return armoredDetachSign(w, signer, message, packet.SigTypeText, config) +} + +func armoredDetachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.SignatureType, config *packet.Config) (err error) { + out, err := armor.Encode(w, SignatureType, nil) + if err != nil { + return + } + err = detachSign(out, signer, message, sigType, config) + if err != nil { + return + } + return out.Close() +} + +func detachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.SignatureType, config *packet.Config) (err error) { + if signer.PrivateKey == nil { + return errors.InvalidArgumentError("signing key doesn't have a private key") + } + if signer.PrivateKey.Encrypted { + return errors.InvalidArgumentError("signing key is encrypted") + } + + sig := new(packet.Signature) + sig.SigType = sigType + sig.PubKeyAlgo = signer.PrivateKey.PubKeyAlgo + sig.Hash = config.Hash() + sig.CreationTime = config.Now() + sig.IssuerKeyId = &signer.PrivateKey.KeyId + + h, wrappedHash, err := hashForSignature(sig.Hash, sig.SigType) + if err != nil { + return + } + io.Copy(wrappedHash, message) + + err = sig.Sign(h, signer.PrivateKey, config) + if err != nil { + return + } + + return sig.Serialize(w) +} + +// FileHints contains metadata about encrypted files. This metadata is, itself, +// encrypted. +type FileHints struct { + // IsBinary can be set to hint that the contents are binary data. + IsBinary bool + // FileName hints at the name of the file that should be written. It's + // truncated to 255 bytes if longer. It may be empty to suggest that the + // file should not be written to disk. It may be equal to "_CONSOLE" to + // suggest the data should not be written to disk. + FileName string + // ModTime contains the modification time of the file, or the zero time if not applicable. + ModTime time.Time +} + +// SymmetricallyEncrypt acts like gpg -c: it encrypts a file with a passphrase. +// The resulting WriteCloser must be closed after the contents of the file have +// been written. +// If config is nil, sensible defaults will be used. +func SymmetricallyEncrypt(ciphertext io.Writer, passphrase []byte, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { + if hints == nil { + hints = &FileHints{} + } + + key, err := packet.SerializeSymmetricKeyEncrypted(ciphertext, passphrase, config) + if err != nil { + return + } + w, err := packet.SerializeSymmetricallyEncrypted(ciphertext, config.Cipher(), key, config) + if err != nil { + return + } + + literaldata := w + if algo := config.Compression(); algo != packet.CompressionNone { + var compConfig *packet.CompressionConfig + if config != nil { + compConfig = config.CompressionConfig + } + literaldata, err = packet.SerializeCompressed(w, algo, compConfig) + if err != nil { + return + } + } + + var epochSeconds uint32 + if !hints.ModTime.IsZero() { + epochSeconds = uint32(hints.ModTime.Unix()) + } + return packet.SerializeLiteral(literaldata, hints.IsBinary, hints.FileName, epochSeconds) +} + +// intersectPreferences mutates and returns a prefix of a that contains only +// the values in the intersection of a and b. The order of a is preserved. +func intersectPreferences(a []uint8, b []uint8) (intersection []uint8) { + var j int + for _, v := range a { + for _, v2 := range b { + if v == v2 { + a[j] = v + j++ + break + } + } + } + + return a[:j] +} + +func hashToHashId(h crypto.Hash) uint8 { + v, ok := s2k.HashToHashId(h) + if !ok { + panic("tried to convert unknown hash") + } + return v +} + +// Encrypt encrypts a message to a number of recipients and, optionally, signs +// it. hints contains optional information, that is also encrypted, that aids +// the recipients in processing the message. The resulting WriteCloser must +// be closed after the contents of the file have been written. +// If config is nil, sensible defaults will be used. +func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { + var signer *packet.PrivateKey + if signed != nil { + signKey, ok := signed.signingKey(config.Now()) + if !ok { + return nil, errors.InvalidArgumentError("no valid signing keys") + } + signer = signKey.PrivateKey + if signer == nil { + return nil, errors.InvalidArgumentError("no private key in signing key") + } + if signer.Encrypted { + return nil, errors.InvalidArgumentError("signing key must be decrypted") + } + } + + // These are the possible ciphers that we'll use for the message. + candidateCiphers := []uint8{ + uint8(packet.CipherAES128), + uint8(packet.CipherAES256), + uint8(packet.CipherCAST5), + } + // These are the possible hash functions that we'll use for the signature. + candidateHashes := []uint8{ + hashToHashId(crypto.SHA256), + hashToHashId(crypto.SHA512), + hashToHashId(crypto.SHA1), + hashToHashId(crypto.RIPEMD160), + } + // In the event that a recipient doesn't specify any supported ciphers + // or hash functions, these are the ones that we assume that every + // implementation supports. + defaultCiphers := candidateCiphers[len(candidateCiphers)-1:] + defaultHashes := candidateHashes[len(candidateHashes)-1:] + + encryptKeys := make([]Key, len(to)) + for i := range to { + var ok bool + encryptKeys[i], ok = to[i].encryptionKey(config.Now()) + if !ok { + return nil, errors.InvalidArgumentError("cannot encrypt a message to key id " + strconv.FormatUint(to[i].PrimaryKey.KeyId, 16) + " because it has no encryption keys") + } + + sig := to[i].primaryIdentity().SelfSignature + + preferredSymmetric := sig.PreferredSymmetric + if len(preferredSymmetric) == 0 { + preferredSymmetric = defaultCiphers + } + preferredHashes := sig.PreferredHash + if len(preferredHashes) == 0 { + preferredHashes = defaultHashes + } + candidateCiphers = intersectPreferences(candidateCiphers, preferredSymmetric) + candidateHashes = intersectPreferences(candidateHashes, preferredHashes) + } + + if len(candidateCiphers) == 0 || len(candidateHashes) == 0 { + return nil, errors.InvalidArgumentError("cannot encrypt because recipient set shares no common algorithms") + } + + cipher := packet.CipherFunction(candidateCiphers[0]) + // If the cipher specified by config is a candidate, we'll use that. + configuredCipher := config.Cipher() + for _, c := range candidateCiphers { + cipherFunc := packet.CipherFunction(c) + if cipherFunc == configuredCipher { + cipher = cipherFunc + break + } + } + + var hash crypto.Hash + for _, hashId := range candidateHashes { + if h, ok := s2k.HashIdToHash(hashId); ok && h.Available() { + hash = h + break + } + } + + // If the hash specified by config is a candidate, we'll use that. + if configuredHash := config.Hash(); configuredHash.Available() { + for _, hashId := range candidateHashes { + if h, ok := s2k.HashIdToHash(hashId); ok && h == configuredHash { + hash = h + break + } + } + } + + if hash == 0 { + hashId := candidateHashes[0] + name, ok := s2k.HashIdToString(hashId) + if !ok { + name = "#" + strconv.Itoa(int(hashId)) + } + return nil, errors.InvalidArgumentError("cannot encrypt because no candidate hash functions are compiled in. (Wanted " + name + " in this case.)") + } + + symKey := make([]byte, cipher.KeySize()) + if _, err := io.ReadFull(config.Random(), symKey); err != nil { + return nil, err + } + + for _, key := range encryptKeys { + if err := packet.SerializeEncryptedKey(ciphertext, key.PublicKey, cipher, symKey, config); err != nil { + return nil, err + } + } + + encryptedData, err := packet.SerializeSymmetricallyEncrypted(ciphertext, cipher, symKey, config) + if err != nil { + return + } + + if signer != nil { + ops := &packet.OnePassSignature{ + SigType: packet.SigTypeBinary, + Hash: hash, + PubKeyAlgo: signer.PubKeyAlgo, + KeyId: signer.KeyId, + IsLast: true, + } + if err := ops.Serialize(encryptedData); err != nil { + return nil, err + } + } + + if hints == nil { + hints = &FileHints{} + } + + w := encryptedData + if signer != nil { + // If we need to write a signature packet after the literal + // data then we need to stop literalData from closing + // encryptedData. + w = noOpCloser{encryptedData} + + } + var epochSeconds uint32 + if !hints.ModTime.IsZero() { + epochSeconds = uint32(hints.ModTime.Unix()) + } + literalData, err := packet.SerializeLiteral(w, hints.IsBinary, hints.FileName, epochSeconds) + if err != nil { + return nil, err + } + + if signer != nil { + return signatureWriter{encryptedData, literalData, hash, hash.New(), signer, config}, nil + } + return literalData, nil +} + +// signatureWriter hashes the contents of a message while passing it along to +// literalData. When closed, it closes literalData, writes a signature packet +// to encryptedData and then also closes encryptedData. +type signatureWriter struct { + encryptedData io.WriteCloser + literalData io.WriteCloser + hashType crypto.Hash + h hash.Hash + signer *packet.PrivateKey + config *packet.Config +} + +func (s signatureWriter) Write(data []byte) (int, error) { + s.h.Write(data) + return s.literalData.Write(data) +} + +func (s signatureWriter) Close() error { + sig := &packet.Signature{ + SigType: packet.SigTypeBinary, + PubKeyAlgo: s.signer.PubKeyAlgo, + Hash: s.hashType, + CreationTime: s.config.Now(), + IssuerKeyId: &s.signer.KeyId, + } + + if err := sig.Sign(s.h, s.signer, s.config); err != nil { + return err + } + if err := s.literalData.Close(); err != nil { + return err + } + if err := sig.Serialize(s.encryptedData); err != nil { + return err + } + return s.encryptedData.Close() +} + +// noOpCloser is like an ioutil.NopCloser, but for an io.Writer. +// TODO: we have two of these in OpenPGP packages alone. This probably needs +// to be promoted somewhere more common. +type noOpCloser struct { + w io.Writer +} + +func (c noOpCloser) Write(data []byte) (n int, err error) { + return c.w.Write(data) +} + +func (c noOpCloser) Close() error { + return nil +} diff --git a/vendor/golang.org/x/crypto/openpgp/write_test.go b/vendor/golang.org/x/crypto/openpgp/write_test.go new file mode 100644 index 0000000..2161ebc --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/write_test.go @@ -0,0 +1,273 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "bytes" + "io" + "io/ioutil" + "testing" + "time" + + "golang.org/x/crypto/openpgp/packet" +) + +func TestSignDetached(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + out := bytes.NewBuffer(nil) + message := bytes.NewBufferString(signedInput) + err := DetachSign(out, kring[0], message, nil) + if err != nil { + t.Error(err) + } + + testDetachedSignature(t, kring, out, signedInput, "check", testKey1KeyId) +} + +func TestSignTextDetached(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + out := bytes.NewBuffer(nil) + message := bytes.NewBufferString(signedInput) + err := DetachSignText(out, kring[0], message, nil) + if err != nil { + t.Error(err) + } + + testDetachedSignature(t, kring, out, signedInput, "check", testKey1KeyId) +} + +func TestSignDetachedDSA(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(dsaTestKeyPrivateHex)) + out := bytes.NewBuffer(nil) + message := bytes.NewBufferString(signedInput) + err := DetachSign(out, kring[0], message, nil) + if err != nil { + t.Error(err) + } + + testDetachedSignature(t, kring, out, signedInput, "check", testKey3KeyId) +} + +func TestSignDetachedP256(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(p256TestKeyPrivateHex)) + kring[0].PrivateKey.Decrypt([]byte("passphrase")) + + out := bytes.NewBuffer(nil) + message := bytes.NewBufferString(signedInput) + err := DetachSign(out, kring[0], message, nil) + if err != nil { + t.Error(err) + } + + testDetachedSignature(t, kring, out, signedInput, "check", testKeyP256KeyId) +} + +func TestNewEntity(t *testing.T) { + if testing.Short() { + return + } + + // Check bit-length with no config. + e, err := NewEntity("Test User", "test", "test@example.com", nil) + if err != nil { + t.Errorf("failed to create entity: %s", err) + return + } + bl, err := e.PrimaryKey.BitLength() + if err != nil { + t.Errorf("failed to find bit length: %s", err) + } + if int(bl) != defaultRSAKeyBits { + t.Errorf("BitLength %v, expected %v", defaultRSAKeyBits) + } + + // Check bit-length with a config. + cfg := &packet.Config{RSABits: 1024} + e, err = NewEntity("Test User", "test", "test@example.com", cfg) + if err != nil { + t.Errorf("failed to create entity: %s", err) + return + } + bl, err = e.PrimaryKey.BitLength() + if err != nil { + t.Errorf("failed to find bit length: %s", err) + } + if int(bl) != cfg.RSABits { + t.Errorf("BitLength %v, expected %v", bl, cfg.RSABits) + } + + w := bytes.NewBuffer(nil) + if err := e.SerializePrivate(w, nil); err != nil { + t.Errorf("failed to serialize entity: %s", err) + return + } + serialized := w.Bytes() + + el, err := ReadKeyRing(w) + if err != nil { + t.Errorf("failed to reparse entity: %s", err) + return + } + + if len(el) != 1 { + t.Errorf("wrong number of entities found, got %d, want 1", len(el)) + } + + w = bytes.NewBuffer(nil) + if err := e.SerializePrivate(w, nil); err != nil { + t.Errorf("failed to serialize entity second time: %s", err) + return + } + + if !bytes.Equal(w.Bytes(), serialized) { + t.Errorf("results differed") + } +} + +func TestSymmetricEncryption(t *testing.T) { + buf := new(bytes.Buffer) + plaintext, err := SymmetricallyEncrypt(buf, []byte("testing"), nil, nil) + if err != nil { + t.Errorf("error writing headers: %s", err) + return + } + message := []byte("hello world\n") + _, err = plaintext.Write(message) + if err != nil { + t.Errorf("error writing to plaintext writer: %s", err) + } + err = plaintext.Close() + if err != nil { + t.Errorf("error closing plaintext writer: %s", err) + } + + md, err := ReadMessage(buf, nil, func(keys []Key, symmetric bool) ([]byte, error) { + return []byte("testing"), nil + }, nil) + if err != nil { + t.Errorf("error rereading message: %s", err) + } + messageBuf := bytes.NewBuffer(nil) + _, err = io.Copy(messageBuf, md.UnverifiedBody) + if err != nil { + t.Errorf("error rereading message: %s", err) + } + if !bytes.Equal(message, messageBuf.Bytes()) { + t.Errorf("recovered message incorrect got '%s', want '%s'", messageBuf.Bytes(), message) + } +} + +var testEncryptionTests = []struct { + keyRingHex string + isSigned bool +}{ + { + testKeys1And2PrivateHex, + false, + }, + { + testKeys1And2PrivateHex, + true, + }, + { + dsaElGamalTestKeysHex, + false, + }, + { + dsaElGamalTestKeysHex, + true, + }, +} + +func TestEncryption(t *testing.T) { + for i, test := range testEncryptionTests { + kring, _ := ReadKeyRing(readerFromHex(test.keyRingHex)) + + passphrase := []byte("passphrase") + for _, entity := range kring { + if entity.PrivateKey != nil && entity.PrivateKey.Encrypted { + err := entity.PrivateKey.Decrypt(passphrase) + if err != nil { + t.Errorf("#%d: failed to decrypt key", i) + } + } + for _, subkey := range entity.Subkeys { + if subkey.PrivateKey != nil && subkey.PrivateKey.Encrypted { + err := subkey.PrivateKey.Decrypt(passphrase) + if err != nil { + t.Errorf("#%d: failed to decrypt subkey", i) + } + } + } + } + + var signed *Entity + if test.isSigned { + signed = kring[0] + } + + buf := new(bytes.Buffer) + w, err := Encrypt(buf, kring[:1], signed, nil /* no hints */, nil) + if err != nil { + t.Errorf("#%d: error in Encrypt: %s", i, err) + continue + } + + const message = "testing" + _, err = w.Write([]byte(message)) + if err != nil { + t.Errorf("#%d: error writing plaintext: %s", i, err) + continue + } + err = w.Close() + if err != nil { + t.Errorf("#%d: error closing WriteCloser: %s", i, err) + continue + } + + md, err := ReadMessage(buf, kring, nil /* no prompt */, nil) + if err != nil { + t.Errorf("#%d: error reading message: %s", i, err) + continue + } + + testTime, _ := time.Parse("2006-01-02", "2013-07-01") + if test.isSigned { + signKey, _ := kring[0].signingKey(testTime) + expectedKeyId := signKey.PublicKey.KeyId + if md.SignedByKeyId != expectedKeyId { + t.Errorf("#%d: message signed by wrong key id, got: %d, want: %d", i, *md.SignedBy, expectedKeyId) + } + if md.SignedBy == nil { + t.Errorf("#%d: failed to find the signing Entity", i) + } + } + + plaintext, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("#%d: error reading encrypted contents: %s", i, err) + continue + } + + encryptKey, _ := kring[0].encryptionKey(testTime) + expectedKeyId := encryptKey.PublicKey.KeyId + if len(md.EncryptedToKeyIds) != 1 || md.EncryptedToKeyIds[0] != expectedKeyId { + t.Errorf("#%d: expected message to be encrypted to %v, but got %#v", i, expectedKeyId, md.EncryptedToKeyIds) + } + + if string(plaintext) != message { + t.Errorf("#%d: got: %s, want: %s", i, string(plaintext), message) + } + + if test.isSigned { + if md.SignatureError != nil { + t.Errorf("#%d: signature error: %s", i, md.SignatureError) + } + if md.Signature == nil { + t.Error("signature missing") + } + } + } +} diff --git a/vendor/golang.org/x/crypto/otr/libotr_test_helper.c b/vendor/golang.org/x/crypto/otr/libotr_test_helper.c new file mode 100644 index 0000000..b3ca072 --- /dev/null +++ b/vendor/golang.org/x/crypto/otr/libotr_test_helper.c @@ -0,0 +1,197 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code can be compiled and used to test the otr package against libotr. +// See otr_test.go. + +// +build ignore + +#include +#include +#include + +#include +#include +#include + +static int g_session_established = 0; + +OtrlPolicy policy(void *opdata, ConnContext *context) { + return OTRL_POLICY_ALWAYS; +} + +int is_logged_in(void *opdata, const char *accountname, const char *protocol, + const char *recipient) { + return 1; +} + +void inject_message(void *opdata, const char *accountname, const char *protocol, + const char *recipient, const char *message) { + printf("%s\n", message); + fflush(stdout); + fprintf(stderr, "libotr helper sent: %s\n", message); +} + +void update_context_list(void *opdata) {} + +void new_fingerprint(void *opdata, OtrlUserState us, const char *accountname, + const char *protocol, const char *username, + unsigned char fingerprint[20]) { + fprintf(stderr, "NEW FINGERPRINT\n"); + g_session_established = 1; +} + +void write_fingerprints(void *opdata) {} + +void gone_secure(void *opdata, ConnContext *context) {} + +void gone_insecure(void *opdata, ConnContext *context) {} + +void still_secure(void *opdata, ConnContext *context, int is_reply) {} + +int max_message_size(void *opdata, ConnContext *context) { return 99999; } + +const char *account_name(void *opdata, const char *account, + const char *protocol) { + return "ACCOUNT"; +} + +void account_name_free(void *opdata, const char *account_name) {} + +const char *error_message(void *opdata, ConnContext *context, + OtrlErrorCode err_code) { + return "ERR"; +} + +void error_message_free(void *opdata, const char *msg) {} + +void resent_msg_prefix_free(void *opdata, const char *prefix) {} + +void handle_smp_event(void *opdata, OtrlSMPEvent smp_event, + ConnContext *context, unsigned short progress_event, + char *question) {} + +void handle_msg_event(void *opdata, OtrlMessageEvent msg_event, + ConnContext *context, const char *message, + gcry_error_t err) { + fprintf(stderr, "msg event: %d %s\n", msg_event, message); +} + +OtrlMessageAppOps uiops = { + policy, + NULL, + is_logged_in, + inject_message, + update_context_list, + new_fingerprint, + write_fingerprints, + gone_secure, + gone_insecure, + still_secure, + max_message_size, + account_name, + account_name_free, + NULL, /* received_symkey */ + error_message, + error_message_free, + NULL, /* resent_msg_prefix */ + resent_msg_prefix_free, + handle_smp_event, + handle_msg_event, + NULL /* create_instag */, + NULL /* convert_msg */, + NULL /* convert_free */, + NULL /* timer_control */, +}; + +static const char kPrivateKeyData[] = + "(privkeys (account (name \"account\") (protocol proto) (private-key (dsa " + "(p " + "#00FC07ABCF0DC916AFF6E9AE47BEF60C7AB9B4D6B2469E436630E36F8A489BE812486A09F" + "30B71224508654940A835301ACC525A4FF133FC152CC53DCC59D65C30A54F1993FE13FE63E" + "5823D4C746DB21B90F9B9C00B49EC7404AB1D929BA7FBA12F2E45C6E0A651689750E8528AB" + "8C031D3561FECEE72EBB4A090D450A9B7A857#) (q " + "#00997BD266EF7B1F60A5C23F3A741F2AEFD07A2081#) (g " + "#535E360E8A95EBA46A4F7DE50AD6E9B2A6DB785A66B64EB9F20338D2A3E8FB0E94725848F" + "1AA6CC567CB83A1CC517EC806F2E92EAE71457E80B2210A189B91250779434B41FC8A8873F" + "6DB94BEA7D177F5D59E7E114EE10A49CFD9CEF88AE43387023B672927BA74B04EB6BBB5E57" + "597766A2F9CE3857D7ACE3E1E3BC1FC6F26#) (y " + "#0AC8670AD767D7A8D9D14CC1AC6744CD7D76F993B77FFD9E39DF01E5A6536EF65E775FCEF" + "2A983E2A19BD6415500F6979715D9FD1257E1FE2B6F5E1E74B333079E7C880D39868462A93" + "454B41877BE62E5EF0A041C2EE9C9E76BD1E12AE25D9628DECB097025DD625EF49C3258A1A" + "3C0FF501E3DC673B76D7BABF349009B6ECF#) (x " + "#14D0345A3562C480A039E3C72764F72D79043216#)))))\n"; + +int main() { + OTRL_INIT; + + // We have to write the private key information to a file because the libotr + // API demands a filename to read from. + const char *tmpdir = "/tmp"; + if (getenv("TMP")) { + tmpdir = getenv("TMP"); + } + + char private_key_file[256]; + snprintf(private_key_file, sizeof(private_key_file), + "%s/libotr_test_helper_privatekeys-XXXXXX", tmpdir); + int fd = mkstemp(private_key_file); + if (fd == -1) { + perror("creating temp file"); + } + write(fd, kPrivateKeyData, sizeof(kPrivateKeyData) - 1); + close(fd); + + OtrlUserState userstate = otrl_userstate_create(); + otrl_privkey_read(userstate, private_key_file); + unlink(private_key_file); + + fprintf(stderr, "libotr helper started\n"); + + char buf[4096]; + + for (;;) { + char *message = fgets(buf, sizeof(buf), stdin); + if (strlen(message) == 0) { + break; + } + message[strlen(message) - 1] = 0; + fprintf(stderr, "libotr helper got: %s\n", message); + + char *newmessage = NULL; + OtrlTLV *tlvs; + int ignore_message = otrl_message_receiving( + userstate, &uiops, NULL, "account", "proto", "peer", message, + &newmessage, &tlvs, NULL, NULL, NULL); + if (tlvs) { + otrl_tlv_free(tlvs); + } + + if (newmessage != NULL) { + fprintf(stderr, "libotr got: %s\n", newmessage); + otrl_message_free(newmessage); + + gcry_error_t err; + char *newmessage = NULL; + + err = otrl_message_sending(userstate, &uiops, NULL, "account", "proto", + "peer", 0, "test message", NULL, &newmessage, + OTRL_FRAGMENT_SEND_SKIP, NULL, NULL, NULL); + if (newmessage == NULL) { + fprintf(stderr, "libotr didn't encrypt message\n"); + return 1; + } + write(1, newmessage, strlen(newmessage)); + write(1, "\n", 1); + fprintf(stderr, "libotr sent: %s\n", newmessage); + otrl_message_free(newmessage); + + g_session_established = 0; + write(1, "?OTRv2?\n", 8); + fprintf(stderr, "libotr sent: ?OTRv2\n"); + } + } + + return 0; +} diff --git a/vendor/golang.org/x/crypto/otr/otr.go b/vendor/golang.org/x/crypto/otr/otr.go new file mode 100644 index 0000000..549be11 --- /dev/null +++ b/vendor/golang.org/x/crypto/otr/otr.go @@ -0,0 +1,1408 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package otr implements the Off The Record protocol as specified in +// http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html +package otr // import "golang.org/x/crypto/otr" + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/dsa" + "crypto/hmac" + "crypto/rand" + "crypto/sha1" + "crypto/sha256" + "crypto/subtle" + "encoding/base64" + "encoding/hex" + "errors" + "hash" + "io" + "math/big" + "strconv" +) + +// SecurityChange describes a change in the security state of a Conversation. +type SecurityChange int + +const ( + NoChange SecurityChange = iota + // NewKeys indicates that a key exchange has completed. This occurs + // when a conversation first becomes encrypted, and when the keys are + // renegotiated within an encrypted conversation. + NewKeys + // SMPSecretNeeded indicates that the peer has started an + // authentication and that we need to supply a secret. Call SMPQuestion + // to get the optional, human readable challenge and then Authenticate + // to supply the matching secret. + SMPSecretNeeded + // SMPComplete indicates that an authentication completed. The identity + // of the peer has now been confirmed. + SMPComplete + // SMPFailed indicates that an authentication failed. + SMPFailed + // ConversationEnded indicates that the peer ended the secure + // conversation. + ConversationEnded +) + +// QueryMessage can be sent to a peer to start an OTR conversation. +var QueryMessage = "?OTRv2?" + +// ErrorPrefix can be used to make an OTR error by appending an error message +// to it. +var ErrorPrefix = "?OTR Error:" + +var ( + fragmentPartSeparator = []byte(",") + fragmentPrefix = []byte("?OTR,") + msgPrefix = []byte("?OTR:") + queryMarker = []byte("?OTR") +) + +// isQuery attempts to parse an OTR query from msg and returns the greatest +// common version, or 0 if msg is not an OTR query. +func isQuery(msg []byte) (greatestCommonVersion int) { + pos := bytes.Index(msg, queryMarker) + if pos == -1 { + return 0 + } + for i, c := range msg[pos+len(queryMarker):] { + if i == 0 { + if c == '?' { + // Indicates support for version 1, but we don't + // implement that. + continue + } + + if c != 'v' { + // Invalid message + return 0 + } + + continue + } + + if c == '?' { + // End of message + return + } + + if c == ' ' || c == '\t' { + // Probably an invalid message + return 0 + } + + if c == '2' { + greatestCommonVersion = 2 + } + } + + return 0 +} + +const ( + statePlaintext = iota + stateEncrypted + stateFinished +) + +const ( + authStateNone = iota + authStateAwaitingDHKey + authStateAwaitingRevealSig + authStateAwaitingSig +) + +const ( + msgTypeDHCommit = 2 + msgTypeData = 3 + msgTypeDHKey = 10 + msgTypeRevealSig = 17 + msgTypeSig = 18 +) + +const ( + // If the requested fragment size is less than this, it will be ignored. + minFragmentSize = 18 + // Messages are padded to a multiple of this number of bytes. + paddingGranularity = 256 + // The number of bytes in a Diffie-Hellman private value (320-bits). + dhPrivateBytes = 40 + // The number of bytes needed to represent an element of the DSA + // subgroup (160-bits). + dsaSubgroupBytes = 20 + // The number of bytes of the MAC that are sent on the wire (160-bits). + macPrefixBytes = 20 +) + +// These are the global, common group parameters for OTR. +var ( + p *big.Int // group prime + g *big.Int // group generator + q *big.Int // group order + pMinus2 *big.Int +) + +func init() { + p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF", 16) + q, _ = new(big.Int).SetString("7FFFFFFFFFFFFFFFE487ED5110B4611A62633145C06E0E68948127044533E63A0105DF531D89CD9128A5043CC71A026EF7CA8CD9E69D218D98158536F92F8A1BA7F09AB6B6A8E122F242DABB312F3F637A262174D31BF6B585FFAE5B7A035BF6F71C35FDAD44CFD2D74F9208BE258FF324943328F6722D9EE1003E5C50B1DF82CC6D241B0E2AE9CD348B1FD47E9267AFC1B2AE91EE51D6CB0E3179AB1042A95DCF6A9483B84B4B36B3861AA7255E4C0278BA36046511B993FFFFFFFFFFFFFFFF", 16) + g = new(big.Int).SetInt64(2) + pMinus2 = new(big.Int).Sub(p, g) +} + +// Conversation represents a relation with a peer. The zero value is a valid +// Conversation, although PrivateKey must be set. +// +// When communicating with a peer, all inbound messages should be passed to +// Conversation.Receive and all outbound messages to Conversation.Send. The +// Conversation will take care of maintaining the encryption state and +// negotiating encryption as needed. +type Conversation struct { + // PrivateKey contains the private key to use to sign key exchanges. + PrivateKey *PrivateKey + + // Rand can be set to override the entropy source. Otherwise, + // crypto/rand will be used. + Rand io.Reader + // If FragmentSize is set, all messages produced by Receive and Send + // will be fragmented into messages of, at most, this number of bytes. + FragmentSize int + + // Once Receive has returned NewKeys once, the following fields are + // valid. + SSID [8]byte + TheirPublicKey PublicKey + + state, authState int + + r [16]byte + x, y *big.Int + gx, gy *big.Int + gxBytes []byte + digest [sha256.Size]byte + + revealKeys, sigKeys akeKeys + + myKeyId uint32 + myCurrentDHPub *big.Int + myCurrentDHPriv *big.Int + myLastDHPub *big.Int + myLastDHPriv *big.Int + + theirKeyId uint32 + theirCurrentDHPub *big.Int + theirLastDHPub *big.Int + + keySlots [4]keySlot + + myCounter [8]byte + theirLastCtr [8]byte + oldMACs []byte + + k, n int // fragment state + frag []byte + + smp smpState +} + +// A keySlot contains key material for a specific (their keyid, my keyid) pair. +type keySlot struct { + // used is true if this slot is valid. If false, it's free for reuse. + used bool + theirKeyId uint32 + myKeyId uint32 + sendAESKey, recvAESKey []byte + sendMACKey, recvMACKey []byte + theirLastCtr [8]byte +} + +// akeKeys are generated during key exchange. There's one set for the reveal +// signature message and another for the signature message. In the protocol +// spec the latter are indicated with a prime mark. +type akeKeys struct { + c [16]byte + m1, m2 [32]byte +} + +func (c *Conversation) rand() io.Reader { + if c.Rand != nil { + return c.Rand + } + return rand.Reader +} + +func (c *Conversation) randMPI(buf []byte) *big.Int { + _, err := io.ReadFull(c.rand(), buf) + if err != nil { + panic("otr: short read from random source") + } + + return new(big.Int).SetBytes(buf) +} + +// tlv represents the type-length value from the protocol. +type tlv struct { + typ, length uint16 + data []byte +} + +const ( + tlvTypePadding = 0 + tlvTypeDisconnected = 1 + tlvTypeSMP1 = 2 + tlvTypeSMP2 = 3 + tlvTypeSMP3 = 4 + tlvTypeSMP4 = 5 + tlvTypeSMPAbort = 6 + tlvTypeSMP1WithQuestion = 7 +) + +// Receive handles a message from a peer. It returns a human readable message, +// an indicator of whether that message was encrypted, a hint about the +// encryption state and zero or more messages to send back to the peer. +// These messages do not need to be passed to Send before transmission. +func (c *Conversation) Receive(in []byte) (out []byte, encrypted bool, change SecurityChange, toSend [][]byte, err error) { + if bytes.HasPrefix(in, fragmentPrefix) { + in, err = c.processFragment(in) + if in == nil || err != nil { + return + } + } + + if bytes.HasPrefix(in, msgPrefix) && in[len(in)-1] == '.' { + in = in[len(msgPrefix) : len(in)-1] + } else if version := isQuery(in); version > 0 { + c.authState = authStateAwaitingDHKey + c.reset() + toSend = c.encode(c.generateDHCommit()) + return + } else { + // plaintext message + out = in + return + } + + msg := make([]byte, base64.StdEncoding.DecodedLen(len(in))) + msgLen, err := base64.StdEncoding.Decode(msg, in) + if err != nil { + err = errors.New("otr: invalid base64 encoding in message") + return + } + msg = msg[:msgLen] + + // The first two bytes are the protocol version (2) + if len(msg) < 3 || msg[0] != 0 || msg[1] != 2 { + err = errors.New("otr: invalid OTR message") + return + } + + msgType := int(msg[2]) + msg = msg[3:] + + switch msgType { + case msgTypeDHCommit: + switch c.authState { + case authStateNone: + c.authState = authStateAwaitingRevealSig + if err = c.processDHCommit(msg); err != nil { + return + } + c.reset() + toSend = c.encode(c.generateDHKey()) + return + case authStateAwaitingDHKey: + // This is a 'SYN-crossing'. The greater digest wins. + var cmp int + if cmp, err = c.compareToDHCommit(msg); err != nil { + return + } + if cmp > 0 { + // We win. Retransmit DH commit. + toSend = c.encode(c.serializeDHCommit()) + return + } else { + // They win. We forget about our DH commit. + c.authState = authStateAwaitingRevealSig + if err = c.processDHCommit(msg); err != nil { + return + } + c.reset() + toSend = c.encode(c.generateDHKey()) + return + } + case authStateAwaitingRevealSig: + if err = c.processDHCommit(msg); err != nil { + return + } + toSend = c.encode(c.serializeDHKey()) + case authStateAwaitingSig: + if err = c.processDHCommit(msg); err != nil { + return + } + c.reset() + toSend = c.encode(c.generateDHKey()) + c.authState = authStateAwaitingRevealSig + default: + panic("bad state") + } + case msgTypeDHKey: + switch c.authState { + case authStateAwaitingDHKey: + var isSame bool + if isSame, err = c.processDHKey(msg); err != nil { + return + } + if isSame { + err = errors.New("otr: unexpected duplicate DH key") + return + } + toSend = c.encode(c.generateRevealSig()) + c.authState = authStateAwaitingSig + case authStateAwaitingSig: + var isSame bool + if isSame, err = c.processDHKey(msg); err != nil { + return + } + if isSame { + toSend = c.encode(c.serializeDHKey()) + } + } + case msgTypeRevealSig: + if c.authState != authStateAwaitingRevealSig { + return + } + if err = c.processRevealSig(msg); err != nil { + return + } + toSend = c.encode(c.generateSig()) + c.authState = authStateNone + c.state = stateEncrypted + change = NewKeys + case msgTypeSig: + if c.authState != authStateAwaitingSig { + return + } + if err = c.processSig(msg); err != nil { + return + } + c.authState = authStateNone + c.state = stateEncrypted + change = NewKeys + case msgTypeData: + if c.state != stateEncrypted { + err = errors.New("otr: encrypted message received without encrypted session established") + return + } + var tlvs []tlv + out, tlvs, err = c.processData(msg) + encrypted = true + + EachTLV: + for _, inTLV := range tlvs { + switch inTLV.typ { + case tlvTypeDisconnected: + change = ConversationEnded + c.state = stateFinished + break EachTLV + case tlvTypeSMP1, tlvTypeSMP2, tlvTypeSMP3, tlvTypeSMP4, tlvTypeSMPAbort, tlvTypeSMP1WithQuestion: + var reply tlv + var complete bool + reply, complete, err = c.processSMP(inTLV) + if err == smpSecretMissingError { + err = nil + change = SMPSecretNeeded + c.smp.saved = &inTLV + return + } + if err == smpFailureError { + err = nil + change = SMPFailed + } else if complete { + change = SMPComplete + } + if reply.typ != 0 { + toSend = c.encode(c.generateData(nil, &reply)) + } + break EachTLV + default: + // skip unknown TLVs + } + } + default: + err = errors.New("otr: unknown message type " + strconv.Itoa(msgType)) + } + + return +} + +// Send takes a human readable message from the local user, possibly encrypts +// it and returns zero one or more messages to send to the peer. +func (c *Conversation) Send(msg []byte) ([][]byte, error) { + switch c.state { + case statePlaintext: + return [][]byte{msg}, nil + case stateEncrypted: + return c.encode(c.generateData(msg, nil)), nil + case stateFinished: + return nil, errors.New("otr: cannot send message because secure conversation has finished") + } + + return nil, errors.New("otr: cannot send message in current state") +} + +// SMPQuestion returns the human readable challenge question from the peer. +// It's only valid after Receive has returned SMPSecretNeeded. +func (c *Conversation) SMPQuestion() string { + return c.smp.question +} + +// Authenticate begins an authentication with the peer. Authentication involves +// an optional challenge message and a shared secret. The authentication +// proceeds until either Receive returns SMPComplete, SMPSecretNeeded (which +// indicates that a new authentication is happening and thus this one was +// aborted) or SMPFailed. +func (c *Conversation) Authenticate(question string, mutualSecret []byte) (toSend [][]byte, err error) { + if c.state != stateEncrypted { + err = errors.New("otr: can't authenticate a peer without a secure conversation established") + return + } + + if c.smp.saved != nil { + c.calcSMPSecret(mutualSecret, false /* they started it */) + + var out tlv + var complete bool + out, complete, err = c.processSMP(*c.smp.saved) + if complete { + panic("SMP completed on the first message") + } + c.smp.saved = nil + if out.typ != 0 { + toSend = c.encode(c.generateData(nil, &out)) + } + return + } + + c.calcSMPSecret(mutualSecret, true /* we started it */) + outs := c.startSMP(question) + for _, out := range outs { + toSend = append(toSend, c.encode(c.generateData(nil, &out))...) + } + return +} + +// End ends a secure conversation by generating a termination message for +// the peer and switches to unencrypted communication. +func (c *Conversation) End() (toSend [][]byte) { + switch c.state { + case statePlaintext: + return nil + case stateEncrypted: + c.state = statePlaintext + return c.encode(c.generateData(nil, &tlv{typ: tlvTypeDisconnected})) + case stateFinished: + c.state = statePlaintext + return nil + } + panic("unreachable") +} + +// IsEncrypted returns true if a message passed to Send would be encrypted +// before transmission. This result remains valid until the next call to +// Receive or End, which may change the state of the Conversation. +func (c *Conversation) IsEncrypted() bool { + return c.state == stateEncrypted +} + +var fragmentError = errors.New("otr: invalid OTR fragment") + +// processFragment processes a fragmented OTR message and possibly returns a +// complete message. Fragmented messages look like "?OTR,k,n,msg," where k is +// the fragment number (starting from 1), n is the number of fragments in this +// message and msg is a substring of the base64 encoded message. +func (c *Conversation) processFragment(in []byte) (out []byte, err error) { + in = in[len(fragmentPrefix):] // remove "?OTR," + parts := bytes.Split(in, fragmentPartSeparator) + if len(parts) != 4 || len(parts[3]) != 0 { + return nil, fragmentError + } + + k, err := strconv.Atoi(string(parts[0])) + if err != nil { + return nil, fragmentError + } + + n, err := strconv.Atoi(string(parts[1])) + if err != nil { + return nil, fragmentError + } + + if k < 1 || n < 1 || k > n { + return nil, fragmentError + } + + if k == 1 { + c.frag = append(c.frag[:0], parts[2]...) + c.k, c.n = k, n + } else if n == c.n && k == c.k+1 { + c.frag = append(c.frag, parts[2]...) + c.k++ + } else { + c.frag = c.frag[:0] + c.n, c.k = 0, 0 + } + + if c.n > 0 && c.k == c.n { + c.n, c.k = 0, 0 + return c.frag, nil + } + + return nil, nil +} + +func (c *Conversation) generateDHCommit() []byte { + _, err := io.ReadFull(c.rand(), c.r[:]) + if err != nil { + panic("otr: short read from random source") + } + + var xBytes [dhPrivateBytes]byte + c.x = c.randMPI(xBytes[:]) + c.gx = new(big.Int).Exp(g, c.x, p) + c.gy = nil + c.gxBytes = appendMPI(nil, c.gx) + + h := sha256.New() + h.Write(c.gxBytes) + h.Sum(c.digest[:0]) + + aesCipher, err := aes.NewCipher(c.r[:]) + if err != nil { + panic(err.Error()) + } + + var iv [aes.BlockSize]byte + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(c.gxBytes, c.gxBytes) + + return c.serializeDHCommit() +} + +func (c *Conversation) serializeDHCommit() []byte { + var ret []byte + ret = appendU16(ret, 2) // protocol version + ret = append(ret, msgTypeDHCommit) + ret = appendData(ret, c.gxBytes) + ret = appendData(ret, c.digest[:]) + return ret +} + +func (c *Conversation) processDHCommit(in []byte) error { + var ok1, ok2 bool + c.gxBytes, in, ok1 = getData(in) + digest, in, ok2 := getData(in) + if !ok1 || !ok2 || len(in) > 0 { + return errors.New("otr: corrupt DH commit message") + } + copy(c.digest[:], digest) + return nil +} + +func (c *Conversation) compareToDHCommit(in []byte) (int, error) { + _, in, ok1 := getData(in) + digest, in, ok2 := getData(in) + if !ok1 || !ok2 || len(in) > 0 { + return 0, errors.New("otr: corrupt DH commit message") + } + return bytes.Compare(c.digest[:], digest), nil +} + +func (c *Conversation) generateDHKey() []byte { + var yBytes [dhPrivateBytes]byte + c.y = c.randMPI(yBytes[:]) + c.gy = new(big.Int).Exp(g, c.y, p) + return c.serializeDHKey() +} + +func (c *Conversation) serializeDHKey() []byte { + var ret []byte + ret = appendU16(ret, 2) // protocol version + ret = append(ret, msgTypeDHKey) + ret = appendMPI(ret, c.gy) + return ret +} + +func (c *Conversation) processDHKey(in []byte) (isSame bool, err error) { + gy, in, ok := getMPI(in) + if !ok { + err = errors.New("otr: corrupt DH key message") + return + } + if gy.Cmp(g) < 0 || gy.Cmp(pMinus2) > 0 { + err = errors.New("otr: DH value out of range") + return + } + if c.gy != nil { + isSame = c.gy.Cmp(gy) == 0 + return + } + c.gy = gy + return +} + +func (c *Conversation) generateEncryptedSignature(keys *akeKeys, xFirst bool) ([]byte, []byte) { + var xb []byte + xb = c.PrivateKey.PublicKey.Serialize(xb) + + var verifyData []byte + if xFirst { + verifyData = appendMPI(verifyData, c.gx) + verifyData = appendMPI(verifyData, c.gy) + } else { + verifyData = appendMPI(verifyData, c.gy) + verifyData = appendMPI(verifyData, c.gx) + } + verifyData = append(verifyData, xb...) + verifyData = appendU32(verifyData, c.myKeyId) + + mac := hmac.New(sha256.New, keys.m1[:]) + mac.Write(verifyData) + mb := mac.Sum(nil) + + xb = appendU32(xb, c.myKeyId) + xb = append(xb, c.PrivateKey.Sign(c.rand(), mb)...) + + aesCipher, err := aes.NewCipher(keys.c[:]) + if err != nil { + panic(err.Error()) + } + var iv [aes.BlockSize]byte + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(xb, xb) + + mac = hmac.New(sha256.New, keys.m2[:]) + encryptedSig := appendData(nil, xb) + mac.Write(encryptedSig) + + return encryptedSig, mac.Sum(nil) +} + +func (c *Conversation) generateRevealSig() []byte { + s := new(big.Int).Exp(c.gy, c.x, p) + c.calcAKEKeys(s) + c.myKeyId++ + + encryptedSig, mac := c.generateEncryptedSignature(&c.revealKeys, true /* gx comes first */) + + c.myCurrentDHPub = c.gx + c.myCurrentDHPriv = c.x + c.rotateDHKeys() + incCounter(&c.myCounter) + + var ret []byte + ret = appendU16(ret, 2) + ret = append(ret, msgTypeRevealSig) + ret = appendData(ret, c.r[:]) + ret = append(ret, encryptedSig...) + ret = append(ret, mac[:20]...) + return ret +} + +func (c *Conversation) processEncryptedSig(encryptedSig, theirMAC []byte, keys *akeKeys, xFirst bool) error { + mac := hmac.New(sha256.New, keys.m2[:]) + mac.Write(appendData(nil, encryptedSig)) + myMAC := mac.Sum(nil)[:20] + + if len(myMAC) != len(theirMAC) || subtle.ConstantTimeCompare(myMAC, theirMAC) == 0 { + return errors.New("bad signature MAC in encrypted signature") + } + + aesCipher, err := aes.NewCipher(keys.c[:]) + if err != nil { + panic(err.Error()) + } + var iv [aes.BlockSize]byte + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(encryptedSig, encryptedSig) + + sig := encryptedSig + sig, ok1 := c.TheirPublicKey.Parse(sig) + keyId, sig, ok2 := getU32(sig) + if !ok1 || !ok2 { + return errors.New("otr: corrupt encrypted signature") + } + + var verifyData []byte + if xFirst { + verifyData = appendMPI(verifyData, c.gx) + verifyData = appendMPI(verifyData, c.gy) + } else { + verifyData = appendMPI(verifyData, c.gy) + verifyData = appendMPI(verifyData, c.gx) + } + verifyData = c.TheirPublicKey.Serialize(verifyData) + verifyData = appendU32(verifyData, keyId) + + mac = hmac.New(sha256.New, keys.m1[:]) + mac.Write(verifyData) + mb := mac.Sum(nil) + + sig, ok1 = c.TheirPublicKey.Verify(mb, sig) + if !ok1 { + return errors.New("bad signature in encrypted signature") + } + if len(sig) > 0 { + return errors.New("corrupt encrypted signature") + } + + c.theirKeyId = keyId + zero(c.theirLastCtr[:]) + return nil +} + +func (c *Conversation) processRevealSig(in []byte) error { + r, in, ok1 := getData(in) + encryptedSig, in, ok2 := getData(in) + theirMAC := in + if !ok1 || !ok2 || len(theirMAC) != 20 { + return errors.New("otr: corrupt reveal signature message") + } + + aesCipher, err := aes.NewCipher(r) + if err != nil { + return errors.New("otr: cannot create AES cipher from reveal signature message: " + err.Error()) + } + var iv [aes.BlockSize]byte + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(c.gxBytes, c.gxBytes) + h := sha256.New() + h.Write(c.gxBytes) + digest := h.Sum(nil) + if len(digest) != len(c.digest) || subtle.ConstantTimeCompare(digest, c.digest[:]) == 0 { + return errors.New("otr: bad commit MAC in reveal signature message") + } + var rest []byte + c.gx, rest, ok1 = getMPI(c.gxBytes) + if !ok1 || len(rest) > 0 { + return errors.New("otr: gx corrupt after decryption") + } + if c.gx.Cmp(g) < 0 || c.gx.Cmp(pMinus2) > 0 { + return errors.New("otr: DH value out of range") + } + s := new(big.Int).Exp(c.gx, c.y, p) + c.calcAKEKeys(s) + + if err := c.processEncryptedSig(encryptedSig, theirMAC, &c.revealKeys, true /* gx comes first */); err != nil { + return errors.New("otr: in reveal signature message: " + err.Error()) + } + + c.theirCurrentDHPub = c.gx + c.theirLastDHPub = nil + + return nil +} + +func (c *Conversation) generateSig() []byte { + c.myKeyId++ + + encryptedSig, mac := c.generateEncryptedSignature(&c.sigKeys, false /* gy comes first */) + + c.myCurrentDHPub = c.gy + c.myCurrentDHPriv = c.y + c.rotateDHKeys() + incCounter(&c.myCounter) + + var ret []byte + ret = appendU16(ret, 2) + ret = append(ret, msgTypeSig) + ret = append(ret, encryptedSig...) + ret = append(ret, mac[:macPrefixBytes]...) + return ret +} + +func (c *Conversation) processSig(in []byte) error { + encryptedSig, in, ok1 := getData(in) + theirMAC := in + if !ok1 || len(theirMAC) != macPrefixBytes { + return errors.New("otr: corrupt signature message") + } + + if err := c.processEncryptedSig(encryptedSig, theirMAC, &c.sigKeys, false /* gy comes first */); err != nil { + return errors.New("otr: in signature message: " + err.Error()) + } + + c.theirCurrentDHPub = c.gy + c.theirLastDHPub = nil + + return nil +} + +func (c *Conversation) rotateDHKeys() { + // evict slots using our retired key id + for i := range c.keySlots { + slot := &c.keySlots[i] + if slot.used && slot.myKeyId == c.myKeyId-1 { + slot.used = false + c.oldMACs = append(c.oldMACs, slot.recvMACKey...) + } + } + + c.myLastDHPriv = c.myCurrentDHPriv + c.myLastDHPub = c.myCurrentDHPub + + var xBytes [dhPrivateBytes]byte + c.myCurrentDHPriv = c.randMPI(xBytes[:]) + c.myCurrentDHPub = new(big.Int).Exp(g, c.myCurrentDHPriv, p) + c.myKeyId++ +} + +func (c *Conversation) processData(in []byte) (out []byte, tlvs []tlv, err error) { + origIn := in + flags, in, ok1 := getU8(in) + theirKeyId, in, ok2 := getU32(in) + myKeyId, in, ok3 := getU32(in) + y, in, ok4 := getMPI(in) + counter, in, ok5 := getNBytes(in, 8) + encrypted, in, ok6 := getData(in) + macedData := origIn[:len(origIn)-len(in)] + theirMAC, in, ok7 := getNBytes(in, macPrefixBytes) + _, in, ok8 := getData(in) + if !ok1 || !ok2 || !ok3 || !ok4 || !ok5 || !ok6 || !ok7 || !ok8 || len(in) > 0 { + err = errors.New("otr: corrupt data message") + return + } + + ignoreErrors := flags&1 != 0 + + slot, err := c.calcDataKeys(myKeyId, theirKeyId) + if err != nil { + if ignoreErrors { + err = nil + } + return + } + + mac := hmac.New(sha1.New, slot.recvMACKey) + mac.Write([]byte{0, 2, 3}) + mac.Write(macedData) + myMAC := mac.Sum(nil) + if len(myMAC) != len(theirMAC) || subtle.ConstantTimeCompare(myMAC, theirMAC) == 0 { + if !ignoreErrors { + err = errors.New("otr: bad MAC on data message") + } + return + } + + if bytes.Compare(counter, slot.theirLastCtr[:]) <= 0 { + err = errors.New("otr: counter regressed") + return + } + copy(slot.theirLastCtr[:], counter) + + var iv [aes.BlockSize]byte + copy(iv[:], counter) + aesCipher, err := aes.NewCipher(slot.recvAESKey) + if err != nil { + panic(err.Error()) + } + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(encrypted, encrypted) + decrypted := encrypted + + if myKeyId == c.myKeyId { + c.rotateDHKeys() + } + if theirKeyId == c.theirKeyId { + // evict slots using their retired key id + for i := range c.keySlots { + slot := &c.keySlots[i] + if slot.used && slot.theirKeyId == theirKeyId-1 { + slot.used = false + c.oldMACs = append(c.oldMACs, slot.recvMACKey...) + } + } + + c.theirLastDHPub = c.theirCurrentDHPub + c.theirKeyId++ + c.theirCurrentDHPub = y + } + + if nulPos := bytes.IndexByte(decrypted, 0); nulPos >= 0 { + out = decrypted[:nulPos] + tlvData := decrypted[nulPos+1:] + for len(tlvData) > 0 { + var t tlv + var ok1, ok2, ok3 bool + + t.typ, tlvData, ok1 = getU16(tlvData) + t.length, tlvData, ok2 = getU16(tlvData) + t.data, tlvData, ok3 = getNBytes(tlvData, int(t.length)) + if !ok1 || !ok2 || !ok3 { + err = errors.New("otr: corrupt tlv data") + } + tlvs = append(tlvs, t) + } + } else { + out = decrypted + } + + return +} + +func (c *Conversation) generateData(msg []byte, extra *tlv) []byte { + slot, err := c.calcDataKeys(c.myKeyId-1, c.theirKeyId) + if err != nil { + panic("otr: failed to generate sending keys: " + err.Error()) + } + + var plaintext []byte + plaintext = append(plaintext, msg...) + plaintext = append(plaintext, 0) + + padding := paddingGranularity - ((len(plaintext) + 4) % paddingGranularity) + plaintext = appendU16(plaintext, tlvTypePadding) + plaintext = appendU16(plaintext, uint16(padding)) + for i := 0; i < padding; i++ { + plaintext = append(plaintext, 0) + } + + if extra != nil { + plaintext = appendU16(plaintext, extra.typ) + plaintext = appendU16(plaintext, uint16(len(extra.data))) + plaintext = append(plaintext, extra.data...) + } + + encrypted := make([]byte, len(plaintext)) + + var iv [aes.BlockSize]byte + copy(iv[:], c.myCounter[:]) + aesCipher, err := aes.NewCipher(slot.sendAESKey) + if err != nil { + panic(err.Error()) + } + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(encrypted, plaintext) + + var ret []byte + ret = appendU16(ret, 2) + ret = append(ret, msgTypeData) + ret = append(ret, 0 /* flags */) + ret = appendU32(ret, c.myKeyId-1) + ret = appendU32(ret, c.theirKeyId) + ret = appendMPI(ret, c.myCurrentDHPub) + ret = append(ret, c.myCounter[:]...) + ret = appendData(ret, encrypted) + + mac := hmac.New(sha1.New, slot.sendMACKey) + mac.Write(ret) + ret = append(ret, mac.Sum(nil)[:macPrefixBytes]...) + ret = appendData(ret, c.oldMACs) + c.oldMACs = nil + incCounter(&c.myCounter) + + return ret +} + +func incCounter(counter *[8]byte) { + for i := 7; i >= 0; i-- { + counter[i]++ + if counter[i] > 0 { + break + } + } +} + +// calcDataKeys computes the keys used to encrypt a data message given the key +// IDs. +func (c *Conversation) calcDataKeys(myKeyId, theirKeyId uint32) (slot *keySlot, err error) { + // Check for a cache hit. + for i := range c.keySlots { + slot = &c.keySlots[i] + if slot.used && slot.theirKeyId == theirKeyId && slot.myKeyId == myKeyId { + return + } + } + + // Find an empty slot to write into. + slot = nil + for i := range c.keySlots { + if !c.keySlots[i].used { + slot = &c.keySlots[i] + break + } + } + if slot == nil { + return nil, errors.New("otr: internal error: no more key slots") + } + + var myPriv, myPub, theirPub *big.Int + + if myKeyId == c.myKeyId { + myPriv = c.myCurrentDHPriv + myPub = c.myCurrentDHPub + } else if myKeyId == c.myKeyId-1 { + myPriv = c.myLastDHPriv + myPub = c.myLastDHPub + } else { + err = errors.New("otr: peer requested keyid " + strconv.FormatUint(uint64(myKeyId), 10) + " when I'm on " + strconv.FormatUint(uint64(c.myKeyId), 10)) + return + } + + if theirKeyId == c.theirKeyId { + theirPub = c.theirCurrentDHPub + } else if theirKeyId == c.theirKeyId-1 && c.theirLastDHPub != nil { + theirPub = c.theirLastDHPub + } else { + err = errors.New("otr: peer requested keyid " + strconv.FormatUint(uint64(myKeyId), 10) + " when they're on " + strconv.FormatUint(uint64(c.myKeyId), 10)) + return + } + + var sendPrefixByte, recvPrefixByte [1]byte + + if myPub.Cmp(theirPub) > 0 { + // we're the high end + sendPrefixByte[0], recvPrefixByte[0] = 1, 2 + } else { + // we're the low end + sendPrefixByte[0], recvPrefixByte[0] = 2, 1 + } + + s := new(big.Int).Exp(theirPub, myPriv, p) + sBytes := appendMPI(nil, s) + + h := sha1.New() + h.Write(sendPrefixByte[:]) + h.Write(sBytes) + slot.sendAESKey = h.Sum(slot.sendAESKey[:0])[:16] + + h.Reset() + h.Write(slot.sendAESKey) + slot.sendMACKey = h.Sum(slot.sendMACKey[:0]) + + h.Reset() + h.Write(recvPrefixByte[:]) + h.Write(sBytes) + slot.recvAESKey = h.Sum(slot.recvAESKey[:0])[:16] + + h.Reset() + h.Write(slot.recvAESKey) + slot.recvMACKey = h.Sum(slot.recvMACKey[:0]) + + slot.theirKeyId = theirKeyId + slot.myKeyId = myKeyId + slot.used = true + + zero(slot.theirLastCtr[:]) + return +} + +func (c *Conversation) calcAKEKeys(s *big.Int) { + mpi := appendMPI(nil, s) + h := sha256.New() + + var cBytes [32]byte + hashWithPrefix(c.SSID[:], 0, mpi, h) + + hashWithPrefix(cBytes[:], 1, mpi, h) + copy(c.revealKeys.c[:], cBytes[:16]) + copy(c.sigKeys.c[:], cBytes[16:]) + + hashWithPrefix(c.revealKeys.m1[:], 2, mpi, h) + hashWithPrefix(c.revealKeys.m2[:], 3, mpi, h) + hashWithPrefix(c.sigKeys.m1[:], 4, mpi, h) + hashWithPrefix(c.sigKeys.m2[:], 5, mpi, h) +} + +func hashWithPrefix(out []byte, prefix byte, in []byte, h hash.Hash) { + h.Reset() + var p [1]byte + p[0] = prefix + h.Write(p[:]) + h.Write(in) + if len(out) == h.Size() { + h.Sum(out[:0]) + } else { + digest := h.Sum(nil) + copy(out, digest) + } +} + +func (c *Conversation) encode(msg []byte) [][]byte { + b64 := make([]byte, base64.StdEncoding.EncodedLen(len(msg))+len(msgPrefix)+1) + base64.StdEncoding.Encode(b64[len(msgPrefix):], msg) + copy(b64, msgPrefix) + b64[len(b64)-1] = '.' + + if c.FragmentSize < minFragmentSize || len(b64) <= c.FragmentSize { + // We can encode this in a single fragment. + return [][]byte{b64} + } + + // We have to fragment this message. + var ret [][]byte + bytesPerFragment := c.FragmentSize - minFragmentSize + numFragments := (len(b64) + bytesPerFragment) / bytesPerFragment + + for i := 0; i < numFragments; i++ { + frag := []byte("?OTR," + strconv.Itoa(i+1) + "," + strconv.Itoa(numFragments) + ",") + todo := bytesPerFragment + if todo > len(b64) { + todo = len(b64) + } + frag = append(frag, b64[:todo]...) + b64 = b64[todo:] + frag = append(frag, ',') + ret = append(ret, frag) + } + + return ret +} + +func (c *Conversation) reset() { + c.myKeyId = 0 + + for i := range c.keySlots { + c.keySlots[i].used = false + } +} + +type PublicKey struct { + dsa.PublicKey +} + +func (pk *PublicKey) Parse(in []byte) ([]byte, bool) { + var ok bool + var pubKeyType uint16 + + if pubKeyType, in, ok = getU16(in); !ok || pubKeyType != 0 { + return nil, false + } + if pk.P, in, ok = getMPI(in); !ok { + return nil, false + } + if pk.Q, in, ok = getMPI(in); !ok { + return nil, false + } + if pk.G, in, ok = getMPI(in); !ok { + return nil, false + } + if pk.Y, in, ok = getMPI(in); !ok { + return nil, false + } + + return in, true +} + +func (pk *PublicKey) Serialize(in []byte) []byte { + in = appendU16(in, 0) + in = appendMPI(in, pk.P) + in = appendMPI(in, pk.Q) + in = appendMPI(in, pk.G) + in = appendMPI(in, pk.Y) + return in +} + +// Fingerprint returns the 20-byte, binary fingerprint of the PublicKey. +func (pk *PublicKey) Fingerprint() []byte { + b := pk.Serialize(nil) + h := sha1.New() + h.Write(b[2:]) + return h.Sum(nil) +} + +func (pk *PublicKey) Verify(hashed, sig []byte) ([]byte, bool) { + if len(sig) != 2*dsaSubgroupBytes { + return nil, false + } + r := new(big.Int).SetBytes(sig[:dsaSubgroupBytes]) + s := new(big.Int).SetBytes(sig[dsaSubgroupBytes:]) + ok := dsa.Verify(&pk.PublicKey, hashed, r, s) + return sig[dsaSubgroupBytes*2:], ok +} + +type PrivateKey struct { + PublicKey + dsa.PrivateKey +} + +func (priv *PrivateKey) Sign(rand io.Reader, hashed []byte) []byte { + r, s, err := dsa.Sign(rand, &priv.PrivateKey, hashed) + if err != nil { + panic(err.Error()) + } + rBytes := r.Bytes() + sBytes := s.Bytes() + if len(rBytes) > dsaSubgroupBytes || len(sBytes) > dsaSubgroupBytes { + panic("DSA signature too large") + } + + out := make([]byte, 2*dsaSubgroupBytes) + copy(out[dsaSubgroupBytes-len(rBytes):], rBytes) + copy(out[len(out)-len(sBytes):], sBytes) + return out +} + +func (priv *PrivateKey) Serialize(in []byte) []byte { + in = priv.PublicKey.Serialize(in) + in = appendMPI(in, priv.PrivateKey.X) + return in +} + +func (priv *PrivateKey) Parse(in []byte) ([]byte, bool) { + in, ok := priv.PublicKey.Parse(in) + if !ok { + return in, ok + } + priv.PrivateKey.PublicKey = priv.PublicKey.PublicKey + priv.PrivateKey.X, in, ok = getMPI(in) + return in, ok +} + +func (priv *PrivateKey) Generate(rand io.Reader) { + if err := dsa.GenerateParameters(&priv.PrivateKey.PublicKey.Parameters, rand, dsa.L1024N160); err != nil { + panic(err.Error()) + } + if err := dsa.GenerateKey(&priv.PrivateKey, rand); err != nil { + panic(err.Error()) + } + priv.PublicKey.PublicKey = priv.PrivateKey.PublicKey +} + +func notHex(r rune) bool { + if r >= '0' && r <= '9' || + r >= 'a' && r <= 'f' || + r >= 'A' && r <= 'F' { + return false + } + + return true +} + +// Import parses the contents of a libotr private key file. +func (priv *PrivateKey) Import(in []byte) bool { + mpiStart := []byte(" #") + + mpis := make([]*big.Int, 5) + + for i := 0; i < len(mpis); i++ { + start := bytes.Index(in, mpiStart) + if start == -1 { + return false + } + in = in[start+len(mpiStart):] + end := bytes.IndexFunc(in, notHex) + if end == -1 { + return false + } + hexBytes := in[:end] + in = in[end:] + + if len(hexBytes)&1 != 0 { + return false + } + + mpiBytes := make([]byte, len(hexBytes)/2) + if _, err := hex.Decode(mpiBytes, hexBytes); err != nil { + return false + } + + mpis[i] = new(big.Int).SetBytes(mpiBytes) + } + + priv.PrivateKey.P = mpis[0] + priv.PrivateKey.Q = mpis[1] + priv.PrivateKey.G = mpis[2] + priv.PrivateKey.Y = mpis[3] + priv.PrivateKey.X = mpis[4] + priv.PublicKey.PublicKey = priv.PrivateKey.PublicKey + + a := new(big.Int).Exp(priv.PrivateKey.G, priv.PrivateKey.X, priv.PrivateKey.P) + return a.Cmp(priv.PrivateKey.Y) == 0 +} + +func getU8(in []byte) (uint8, []byte, bool) { + if len(in) < 1 { + return 0, in, false + } + return in[0], in[1:], true +} + +func getU16(in []byte) (uint16, []byte, bool) { + if len(in) < 2 { + return 0, in, false + } + r := uint16(in[0])<<8 | uint16(in[1]) + return r, in[2:], true +} + +func getU32(in []byte) (uint32, []byte, bool) { + if len(in) < 4 { + return 0, in, false + } + r := uint32(in[0])<<24 | uint32(in[1])<<16 | uint32(in[2])<<8 | uint32(in[3]) + return r, in[4:], true +} + +func getMPI(in []byte) (*big.Int, []byte, bool) { + l, in, ok := getU32(in) + if !ok || uint32(len(in)) < l { + return nil, in, false + } + r := new(big.Int).SetBytes(in[:l]) + return r, in[l:], true +} + +func getData(in []byte) ([]byte, []byte, bool) { + l, in, ok := getU32(in) + if !ok || uint32(len(in)) < l { + return nil, in, false + } + return in[:l], in[l:], true +} + +func getNBytes(in []byte, n int) ([]byte, []byte, bool) { + if len(in) < n { + return nil, in, false + } + return in[:n], in[n:], true +} + +func appendU16(out []byte, v uint16) []byte { + out = append(out, byte(v>>8), byte(v)) + return out +} + +func appendU32(out []byte, v uint32) []byte { + out = append(out, byte(v>>24), byte(v>>16), byte(v>>8), byte(v)) + return out +} + +func appendData(out, v []byte) []byte { + out = appendU32(out, uint32(len(v))) + out = append(out, v...) + return out +} + +func appendMPI(out []byte, v *big.Int) []byte { + vBytes := v.Bytes() + out = appendU32(out, uint32(len(vBytes))) + out = append(out, vBytes...) + return out +} + +func appendMPIs(out []byte, mpis ...*big.Int) []byte { + for _, mpi := range mpis { + out = appendMPI(out, mpi) + } + return out +} + +func zero(b []byte) { + for i := range b { + b[i] = 0 + } +} diff --git a/vendor/golang.org/x/crypto/otr/otr_test.go b/vendor/golang.org/x/crypto/otr/otr_test.go new file mode 100644 index 0000000..cfcd062 --- /dev/null +++ b/vendor/golang.org/x/crypto/otr/otr_test.go @@ -0,0 +1,470 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package otr + +import ( + "bufio" + "bytes" + "crypto/rand" + "encoding/hex" + "math/big" + "os" + "os/exec" + "testing" +) + +var isQueryTests = []struct { + msg string + expectedVersion int +}{ + {"foo", 0}, + {"?OtR", 0}, + {"?OtR?", 0}, + {"?OTR?", 0}, + {"?OTRv?", 0}, + {"?OTRv1?", 0}, + {"?OTR?v1?", 0}, + {"?OTR?v?", 0}, + {"?OTR?v2?", 2}, + {"?OTRv2?", 2}, + {"?OTRv23?", 2}, + {"?OTRv23 ?", 0}, +} + +func TestIsQuery(t *testing.T) { + for i, test := range isQueryTests { + version := isQuery([]byte(test.msg)) + if version != test.expectedVersion { + t.Errorf("#%d: got %d, want %d", i, version, test.expectedVersion) + } + } +} + +var alicePrivateKeyHex = "000000000080c81c2cb2eb729b7e6fd48e975a932c638b3a9055478583afa46755683e30102447f6da2d8bec9f386bbb5da6403b0040fee8650b6ab2d7f32c55ab017ae9b6aec8c324ab5844784e9a80e194830d548fb7f09a0410df2c4d5c8bc2b3e9ad484e65412be689cf0834694e0839fb2954021521ffdffb8f5c32c14dbf2020b3ce7500000014da4591d58def96de61aea7b04a8405fe1609308d000000808ddd5cb0b9d66956e3dea5a915d9aba9d8a6e7053b74dadb2fc52f9fe4e5bcc487d2305485ed95fed026ad93f06ebb8c9e8baf693b7887132c7ffdd3b0f72f4002ff4ed56583ca7c54458f8c068ca3e8a4dfa309d1dd5d34e2a4b68e6f4338835e5e0fb4317c9e4c7e4806dafda3ef459cd563775a586dd91b1319f72621bf3f00000080b8147e74d8c45e6318c37731b8b33b984a795b3653c2cd1d65cc99efe097cb7eb2fa49569bab5aab6e8a1c261a27d0f7840a5e80b317e6683042b59b6dceca2879c6ffc877a465be690c15e4a42f9a7588e79b10faac11b1ce3741fcef7aba8ce05327a2c16d279ee1b3d77eb783fb10e3356caa25635331e26dd42b8396c4d00000001420bec691fea37ecea58a5c717142f0b804452f57" + +var aliceFingerprintHex = "0bb01c360424522e94ee9c346ce877a1a4288b2f" + +var bobPrivateKeyHex = "000000000080a5138eb3d3eb9c1d85716faecadb718f87d31aaed1157671d7fee7e488f95e8e0ba60ad449ec732710a7dec5190f7182af2e2f98312d98497221dff160fd68033dd4f3a33b7c078d0d9f66e26847e76ca7447d4bab35486045090572863d9e4454777f24d6706f63e02548dfec2d0a620af37bbc1d24f884708a212c343b480d00000014e9c58f0ea21a5e4dfd9f44b6a9f7f6a9961a8fa9000000803c4d111aebd62d3c50c2889d420a32cdf1e98b70affcc1fcf44d59cca2eb019f6b774ef88153fb9b9615441a5fe25ea2d11b74ce922ca0232bd81b3c0fcac2a95b20cb6e6c0c5c1ace2e26f65dc43c751af0edbb10d669890e8ab6beea91410b8b2187af1a8347627a06ecea7e0f772c28aae9461301e83884860c9b656c722f0000008065af8625a555ea0e008cd04743671a3cda21162e83af045725db2eb2bb52712708dc0cc1a84c08b3649b88a966974bde27d8612c2861792ec9f08786a246fcadd6d8d3a81a32287745f309238f47618c2bd7612cb8b02d940571e0f30b96420bcd462ff542901b46109b1e5ad6423744448d20a57818a8cbb1647d0fea3b664e0000001440f9f2eb554cb00d45a5826b54bfa419b6980e48" + +func TestKeySerialization(t *testing.T) { + var priv PrivateKey + alicePrivateKey, _ := hex.DecodeString(alicePrivateKeyHex) + rest, ok := priv.Parse(alicePrivateKey) + if !ok { + t.Error("failed to parse private key") + } + if len(rest) > 0 { + t.Error("data remaining after parsing private key") + } + + out := priv.Serialize(nil) + if !bytes.Equal(alicePrivateKey, out) { + t.Errorf("serialization (%x) is not equal to original (%x)", out, alicePrivateKey) + } + + aliceFingerprint, _ := hex.DecodeString(aliceFingerprintHex) + fingerprint := priv.PublicKey.Fingerprint() + if !bytes.Equal(aliceFingerprint, fingerprint) { + t.Errorf("fingerprint (%x) is not equal to expected value (%x)", fingerprint, aliceFingerprint) + } +} + +const libOTRPrivateKey = `(privkeys + (account +(name "foo@example.com") +(protocol prpl-jabber) +(private-key + (dsa + (p #00FC07ABCF0DC916AFF6E9AE47BEF60C7AB9B4D6B2469E436630E36F8A489BE812486A09F30B71224508654940A835301ACC525A4FF133FC152CC53DCC59D65C30A54F1993FE13FE63E5823D4C746DB21B90F9B9C00B49EC7404AB1D929BA7FBA12F2E45C6E0A651689750E8528AB8C031D3561FECEE72EBB4A090D450A9B7A857#) + (q #00997BD266EF7B1F60A5C23F3A741F2AEFD07A2081#) + (g #535E360E8A95EBA46A4F7DE50AD6E9B2A6DB785A66B64EB9F20338D2A3E8FB0E94725848F1AA6CC567CB83A1CC517EC806F2E92EAE71457E80B2210A189B91250779434B41FC8A8873F6DB94BEA7D177F5D59E7E114EE10A49CFD9CEF88AE43387023B672927BA74B04EB6BBB5E57597766A2F9CE3857D7ACE3E1E3BC1FC6F26#) + (y #0AC8670AD767D7A8D9D14CC1AC6744CD7D76F993B77FFD9E39DF01E5A6536EF65E775FCEF2A983E2A19BD6415500F6979715D9FD1257E1FE2B6F5E1E74B333079E7C880D39868462A93454B41877BE62E5EF0A041C2EE9C9E76BD1E12AE25D9628DECB097025DD625EF49C3258A1A3C0FF501E3DC673B76D7BABF349009B6ECF#) + (x #14D0345A3562C480A039E3C72764F72D79043216#) + ) + ) + ) +)` + +func TestParseLibOTRPrivateKey(t *testing.T) { + var priv PrivateKey + + if !priv.Import([]byte(libOTRPrivateKey)) { + t.Fatalf("Failed to import sample private key") + } +} + +func TestSignVerify(t *testing.T) { + var priv PrivateKey + alicePrivateKey, _ := hex.DecodeString(alicePrivateKeyHex) + _, ok := priv.Parse(alicePrivateKey) + if !ok { + t.Error("failed to parse private key") + } + + var msg [32]byte + rand.Reader.Read(msg[:]) + + sig := priv.Sign(rand.Reader, msg[:]) + rest, ok := priv.PublicKey.Verify(msg[:], sig) + if !ok { + t.Errorf("signature (%x) of %x failed to verify", sig, msg[:]) + } else if len(rest) > 0 { + t.Error("signature data remains after verification") + } + + sig[10] ^= 80 + _, ok = priv.PublicKey.Verify(msg[:], sig) + if ok { + t.Errorf("corrupted signature (%x) of %x verified", sig, msg[:]) + } +} + +func setupConversation(t *testing.T) (alice, bob *Conversation) { + alicePrivateKey, _ := hex.DecodeString(alicePrivateKeyHex) + bobPrivateKey, _ := hex.DecodeString(bobPrivateKeyHex) + + alice, bob = new(Conversation), new(Conversation) + + alice.PrivateKey = new(PrivateKey) + bob.PrivateKey = new(PrivateKey) + alice.PrivateKey.Parse(alicePrivateKey) + bob.PrivateKey.Parse(bobPrivateKey) + alice.FragmentSize = 100 + bob.FragmentSize = 100 + + if alice.IsEncrypted() { + t.Error("Alice believes that the conversation is secure before we've started") + } + if bob.IsEncrypted() { + t.Error("Bob believes that the conversation is secure before we've started") + } + + performHandshake(t, alice, bob) + return alice, bob +} + +func performHandshake(t *testing.T, alice, bob *Conversation) { + var alicesMessage, bobsMessage [][]byte + var out []byte + var aliceChange, bobChange SecurityChange + var err error + alicesMessage = append(alicesMessage, []byte(QueryMessage)) + + for round := 0; len(alicesMessage) > 0 || len(bobsMessage) > 0; round++ { + bobsMessage = nil + for i, msg := range alicesMessage { + out, _, bobChange, bobsMessage, err = bob.Receive(msg) + if len(out) > 0 { + t.Errorf("Bob generated output during key exchange, round %d, message %d", round, i) + } + if err != nil { + t.Fatalf("Bob returned an error, round %d, message %d (%x): %s", round, i, msg, err) + } + if len(bobsMessage) > 0 && i != len(alicesMessage)-1 { + t.Errorf("Bob produced output while processing a fragment, round %d, message %d", round, i) + } + } + + alicesMessage = nil + for i, msg := range bobsMessage { + out, _, aliceChange, alicesMessage, err = alice.Receive(msg) + if len(out) > 0 { + t.Errorf("Alice generated output during key exchange, round %d, message %d", round, i) + } + if err != nil { + t.Fatalf("Alice returned an error, round %d, message %d (%x): %s", round, i, msg, err) + } + if len(alicesMessage) > 0 && i != len(bobsMessage)-1 { + t.Errorf("Alice produced output while processing a fragment, round %d, message %d", round, i) + } + } + } + + if aliceChange != NewKeys { + t.Errorf("Alice terminated without signaling new keys") + } + if bobChange != NewKeys { + t.Errorf("Bob terminated without signaling new keys") + } + + if !bytes.Equal(alice.SSID[:], bob.SSID[:]) { + t.Errorf("Session identifiers don't match. Alice has %x, Bob has %x", alice.SSID[:], bob.SSID[:]) + } + + if !alice.IsEncrypted() { + t.Error("Alice doesn't believe that the conversation is secure") + } + if !bob.IsEncrypted() { + t.Error("Bob doesn't believe that the conversation is secure") + } +} + +const ( + firstRoundTrip = iota + subsequentRoundTrip + noMACKeyCheck +) + +func roundTrip(t *testing.T, alice, bob *Conversation, message []byte, macKeyCheck int) { + alicesMessage, err := alice.Send(message) + if err != nil { + t.Errorf("Error from Alice sending message: %s", err) + } + + if len(alice.oldMACs) != 0 { + t.Errorf("Alice has not revealed all MAC keys") + } + + for i, msg := range alicesMessage { + out, encrypted, _, _, err := bob.Receive(msg) + + if err != nil { + t.Errorf("Error generated while processing test message: %s", err.Error()) + } + if len(out) > 0 { + if i != len(alicesMessage)-1 { + t.Fatal("Bob produced a message while processing a fragment of Alice's") + } + if !encrypted { + t.Errorf("Message was not marked as encrypted") + } + if !bytes.Equal(out, message) { + t.Errorf("Message corrupted: got %x, want %x", out, message) + } + } + } + + switch macKeyCheck { + case firstRoundTrip: + if len(bob.oldMACs) != 0 { + t.Errorf("Bob should not have MAC keys to reveal") + } + case subsequentRoundTrip: + if len(bob.oldMACs) != 40 { + t.Errorf("Bob has %d bytes of MAC keys to reveal, but should have 40", len(bob.oldMACs)) + } + } + + bobsMessage, err := bob.Send(message) + if err != nil { + t.Errorf("Error from Bob sending message: %s", err) + } + + if len(bob.oldMACs) != 0 { + t.Errorf("Bob has not revealed all MAC keys") + } + + for i, msg := range bobsMessage { + out, encrypted, _, _, err := alice.Receive(msg) + + if err != nil { + t.Errorf("Error generated while processing test message: %s", err.Error()) + } + if len(out) > 0 { + if i != len(bobsMessage)-1 { + t.Fatal("Alice produced a message while processing a fragment of Bob's") + } + if !encrypted { + t.Errorf("Message was not marked as encrypted") + } + if !bytes.Equal(out, message) { + t.Errorf("Message corrupted: got %x, want %x", out, message) + } + } + } + + switch macKeyCheck { + case firstRoundTrip: + if len(alice.oldMACs) != 20 { + t.Errorf("Alice has %d bytes of MAC keys to reveal, but should have 20", len(alice.oldMACs)) + } + case subsequentRoundTrip: + if len(alice.oldMACs) != 40 { + t.Errorf("Alice has %d bytes of MAC keys to reveal, but should have 40", len(alice.oldMACs)) + } + } +} + +func TestConversation(t *testing.T) { + alice, bob := setupConversation(t) + + var testMessages = [][]byte{ + []byte("hello"), []byte("bye"), + } + + roundTripType := firstRoundTrip + + for _, testMessage := range testMessages { + roundTrip(t, alice, bob, testMessage, roundTripType) + roundTripType = subsequentRoundTrip + } +} + +func TestGoodSMP(t *testing.T) { + var alice, bob Conversation + + alice.smp.secret = new(big.Int).SetInt64(42) + bob.smp.secret = alice.smp.secret + + var alicesMessages, bobsMessages []tlv + var aliceComplete, bobComplete bool + var err error + var out tlv + + alicesMessages = alice.startSMP("") + for round := 0; len(alicesMessages) > 0 || len(bobsMessages) > 0; round++ { + bobsMessages = bobsMessages[:0] + for i, msg := range alicesMessages { + out, bobComplete, err = bob.processSMP(msg) + if err != nil { + t.Errorf("Error from Bob in round %d: %s", round, err) + } + if bobComplete && i != len(alicesMessages)-1 { + t.Errorf("Bob returned a completed signal before processing all of Alice's messages in round %d", round) + } + if out.typ != 0 { + bobsMessages = append(bobsMessages, out) + } + } + + alicesMessages = alicesMessages[:0] + for i, msg := range bobsMessages { + out, aliceComplete, err = alice.processSMP(msg) + if err != nil { + t.Errorf("Error from Alice in round %d: %s", round, err) + } + if aliceComplete && i != len(bobsMessages)-1 { + t.Errorf("Alice returned a completed signal before processing all of Bob's messages in round %d", round) + } + if out.typ != 0 { + alicesMessages = append(alicesMessages, out) + } + } + } + + if !aliceComplete || !bobComplete { + t.Errorf("SMP completed without both sides reporting success: alice: %v, bob: %v\n", aliceComplete, bobComplete) + } +} + +func TestBadSMP(t *testing.T) { + var alice, bob Conversation + + alice.smp.secret = new(big.Int).SetInt64(42) + bob.smp.secret = new(big.Int).SetInt64(43) + + var alicesMessages, bobsMessages []tlv + + alicesMessages = alice.startSMP("") + for round := 0; len(alicesMessages) > 0 || len(bobsMessages) > 0; round++ { + bobsMessages = bobsMessages[:0] + for _, msg := range alicesMessages { + out, complete, _ := bob.processSMP(msg) + if complete { + t.Errorf("Bob signaled completion in round %d", round) + } + if out.typ != 0 { + bobsMessages = append(bobsMessages, out) + } + } + + alicesMessages = alicesMessages[:0] + for _, msg := range bobsMessages { + out, complete, _ := alice.processSMP(msg) + if complete { + t.Errorf("Alice signaled completion in round %d", round) + } + if out.typ != 0 { + alicesMessages = append(alicesMessages, out) + } + } + } +} + +func TestRehandshaking(t *testing.T) { + alice, bob := setupConversation(t) + roundTrip(t, alice, bob, []byte("test"), firstRoundTrip) + roundTrip(t, alice, bob, []byte("test 2"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 3"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 4"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 5"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 6"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 7"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 8"), subsequentRoundTrip) + performHandshake(t, alice, bob) + roundTrip(t, alice, bob, []byte("test"), noMACKeyCheck) + roundTrip(t, alice, bob, []byte("test 2"), noMACKeyCheck) +} + +func TestAgainstLibOTR(t *testing.T) { + // This test requires otr.c.test to be built as /tmp/a.out. + // If enabled, this tests runs forever performing OTR handshakes in a + // loop. + return + + alicePrivateKey, _ := hex.DecodeString(alicePrivateKeyHex) + var alice Conversation + alice.PrivateKey = new(PrivateKey) + alice.PrivateKey.Parse(alicePrivateKey) + + cmd := exec.Command("/tmp/a.out") + cmd.Stderr = os.Stderr + + out, err := cmd.StdinPipe() + if err != nil { + t.Fatal(err) + } + defer out.Close() + stdout, err := cmd.StdoutPipe() + if err != nil { + t.Fatal(err) + } + in := bufio.NewReader(stdout) + + if err := cmd.Start(); err != nil { + t.Fatal(err) + } + + out.Write([]byte(QueryMessage)) + out.Write([]byte("\n")) + var expectedText = []byte("test message") + + for { + line, isPrefix, err := in.ReadLine() + if isPrefix { + t.Fatal("line from subprocess too long") + } + if err != nil { + t.Fatal(err) + } + text, encrypted, change, alicesMessage, err := alice.Receive(line) + if err != nil { + t.Fatal(err) + } + for _, msg := range alicesMessage { + out.Write(msg) + out.Write([]byte("\n")) + } + if change == NewKeys { + alicesMessage, err := alice.Send([]byte("Go -> libotr test message")) + if err != nil { + t.Fatalf("error sending message: %s", err.Error()) + } else { + for _, msg := range alicesMessage { + out.Write(msg) + out.Write([]byte("\n")) + } + } + } + if len(text) > 0 { + if !bytes.Equal(text, expectedText) { + t.Fatalf("expected %x, but got %x", expectedText, text) + } + if !encrypted { + t.Fatal("message wasn't encrypted") + } + } + } +} diff --git a/vendor/golang.org/x/crypto/otr/smp.go b/vendor/golang.org/x/crypto/otr/smp.go new file mode 100644 index 0000000..dc6de4e --- /dev/null +++ b/vendor/golang.org/x/crypto/otr/smp.go @@ -0,0 +1,572 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file implements the Socialist Millionaires Protocol as described in +// http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html. The protocol +// specification is required in order to understand this code and, where +// possible, the variable names in the code match up with the spec. + +package otr + +import ( + "bytes" + "crypto/sha256" + "errors" + "hash" + "math/big" +) + +type smpFailure string + +func (s smpFailure) Error() string { + return string(s) +} + +var smpFailureError = smpFailure("otr: SMP protocol failed") +var smpSecretMissingError = smpFailure("otr: mutual secret needed") + +const smpVersion = 1 + +const ( + smpState1 = iota + smpState2 + smpState3 + smpState4 +) + +type smpState struct { + state int + a2, a3, b2, b3, pb, qb *big.Int + g2a, g3a *big.Int + g2, g3 *big.Int + g3b, papb, qaqb, ra *big.Int + saved *tlv + secret *big.Int + question string +} + +func (c *Conversation) startSMP(question string) (tlvs []tlv) { + if c.smp.state != smpState1 { + tlvs = append(tlvs, c.generateSMPAbort()) + } + tlvs = append(tlvs, c.generateSMP1(question)) + c.smp.question = "" + c.smp.state = smpState2 + return +} + +func (c *Conversation) resetSMP() { + c.smp.state = smpState1 + c.smp.secret = nil + c.smp.question = "" +} + +func (c *Conversation) processSMP(in tlv) (out tlv, complete bool, err error) { + data := in.data + + switch in.typ { + case tlvTypeSMPAbort: + if c.smp.state != smpState1 { + err = smpFailureError + } + c.resetSMP() + return + case tlvTypeSMP1WithQuestion: + // We preprocess this into a SMP1 message. + nulPos := bytes.IndexByte(data, 0) + if nulPos == -1 { + err = errors.New("otr: SMP message with question didn't contain a NUL byte") + return + } + c.smp.question = string(data[:nulPos]) + data = data[nulPos+1:] + } + + numMPIs, data, ok := getU32(data) + if !ok || numMPIs > 20 { + err = errors.New("otr: corrupt SMP message") + return + } + + mpis := make([]*big.Int, numMPIs) + for i := range mpis { + var ok bool + mpis[i], data, ok = getMPI(data) + if !ok { + err = errors.New("otr: corrupt SMP message") + return + } + } + + switch in.typ { + case tlvTypeSMP1, tlvTypeSMP1WithQuestion: + if c.smp.state != smpState1 { + c.resetSMP() + out = c.generateSMPAbort() + return + } + if c.smp.secret == nil { + err = smpSecretMissingError + return + } + if err = c.processSMP1(mpis); err != nil { + return + } + c.smp.state = smpState3 + out = c.generateSMP2() + case tlvTypeSMP2: + if c.smp.state != smpState2 { + c.resetSMP() + out = c.generateSMPAbort() + return + } + if out, err = c.processSMP2(mpis); err != nil { + out = c.generateSMPAbort() + return + } + c.smp.state = smpState4 + case tlvTypeSMP3: + if c.smp.state != smpState3 { + c.resetSMP() + out = c.generateSMPAbort() + return + } + if out, err = c.processSMP3(mpis); err != nil { + return + } + c.smp.state = smpState1 + c.smp.secret = nil + complete = true + case tlvTypeSMP4: + if c.smp.state != smpState4 { + c.resetSMP() + out = c.generateSMPAbort() + return + } + if err = c.processSMP4(mpis); err != nil { + out = c.generateSMPAbort() + return + } + c.smp.state = smpState1 + c.smp.secret = nil + complete = true + default: + panic("unknown SMP message") + } + + return +} + +func (c *Conversation) calcSMPSecret(mutualSecret []byte, weStarted bool) { + h := sha256.New() + h.Write([]byte{smpVersion}) + if weStarted { + h.Write(c.PrivateKey.PublicKey.Fingerprint()) + h.Write(c.TheirPublicKey.Fingerprint()) + } else { + h.Write(c.TheirPublicKey.Fingerprint()) + h.Write(c.PrivateKey.PublicKey.Fingerprint()) + } + h.Write(c.SSID[:]) + h.Write(mutualSecret) + c.smp.secret = new(big.Int).SetBytes(h.Sum(nil)) +} + +func (c *Conversation) generateSMP1(question string) tlv { + var randBuf [16]byte + c.smp.a2 = c.randMPI(randBuf[:]) + c.smp.a3 = c.randMPI(randBuf[:]) + g2a := new(big.Int).Exp(g, c.smp.a2, p) + g3a := new(big.Int).Exp(g, c.smp.a3, p) + h := sha256.New() + + r2 := c.randMPI(randBuf[:]) + r := new(big.Int).Exp(g, r2, p) + c2 := new(big.Int).SetBytes(hashMPIs(h, 1, r)) + d2 := new(big.Int).Mul(c.smp.a2, c2) + d2.Sub(r2, d2) + d2.Mod(d2, q) + if d2.Sign() < 0 { + d2.Add(d2, q) + } + + r3 := c.randMPI(randBuf[:]) + r.Exp(g, r3, p) + c3 := new(big.Int).SetBytes(hashMPIs(h, 2, r)) + d3 := new(big.Int).Mul(c.smp.a3, c3) + d3.Sub(r3, d3) + d3.Mod(d3, q) + if d3.Sign() < 0 { + d3.Add(d3, q) + } + + var ret tlv + if len(question) > 0 { + ret.typ = tlvTypeSMP1WithQuestion + ret.data = append(ret.data, question...) + ret.data = append(ret.data, 0) + } else { + ret.typ = tlvTypeSMP1 + } + ret.data = appendU32(ret.data, 6) + ret.data = appendMPIs(ret.data, g2a, c2, d2, g3a, c3, d3) + return ret +} + +func (c *Conversation) processSMP1(mpis []*big.Int) error { + if len(mpis) != 6 { + return errors.New("otr: incorrect number of arguments in SMP1 message") + } + g2a := mpis[0] + c2 := mpis[1] + d2 := mpis[2] + g3a := mpis[3] + c3 := mpis[4] + d3 := mpis[5] + h := sha256.New() + + r := new(big.Int).Exp(g, d2, p) + s := new(big.Int).Exp(g2a, c2, p) + r.Mul(r, s) + r.Mod(r, p) + t := new(big.Int).SetBytes(hashMPIs(h, 1, r)) + if c2.Cmp(t) != 0 { + return errors.New("otr: ZKP c2 incorrect in SMP1 message") + } + r.Exp(g, d3, p) + s.Exp(g3a, c3, p) + r.Mul(r, s) + r.Mod(r, p) + t.SetBytes(hashMPIs(h, 2, r)) + if c3.Cmp(t) != 0 { + return errors.New("otr: ZKP c3 incorrect in SMP1 message") + } + + c.smp.g2a = g2a + c.smp.g3a = g3a + return nil +} + +func (c *Conversation) generateSMP2() tlv { + var randBuf [16]byte + b2 := c.randMPI(randBuf[:]) + c.smp.b3 = c.randMPI(randBuf[:]) + r2 := c.randMPI(randBuf[:]) + r3 := c.randMPI(randBuf[:]) + r4 := c.randMPI(randBuf[:]) + r5 := c.randMPI(randBuf[:]) + r6 := c.randMPI(randBuf[:]) + + g2b := new(big.Int).Exp(g, b2, p) + g3b := new(big.Int).Exp(g, c.smp.b3, p) + + r := new(big.Int).Exp(g, r2, p) + h := sha256.New() + c2 := new(big.Int).SetBytes(hashMPIs(h, 3, r)) + d2 := new(big.Int).Mul(b2, c2) + d2.Sub(r2, d2) + d2.Mod(d2, q) + if d2.Sign() < 0 { + d2.Add(d2, q) + } + + r.Exp(g, r3, p) + c3 := new(big.Int).SetBytes(hashMPIs(h, 4, r)) + d3 := new(big.Int).Mul(c.smp.b3, c3) + d3.Sub(r3, d3) + d3.Mod(d3, q) + if d3.Sign() < 0 { + d3.Add(d3, q) + } + + c.smp.g2 = new(big.Int).Exp(c.smp.g2a, b2, p) + c.smp.g3 = new(big.Int).Exp(c.smp.g3a, c.smp.b3, p) + c.smp.pb = new(big.Int).Exp(c.smp.g3, r4, p) + c.smp.qb = new(big.Int).Exp(g, r4, p) + r.Exp(c.smp.g2, c.smp.secret, p) + c.smp.qb.Mul(c.smp.qb, r) + c.smp.qb.Mod(c.smp.qb, p) + + s := new(big.Int) + s.Exp(c.smp.g2, r6, p) + r.Exp(g, r5, p) + s.Mul(r, s) + s.Mod(s, p) + r.Exp(c.smp.g3, r5, p) + cp := new(big.Int).SetBytes(hashMPIs(h, 5, r, s)) + + // D5 = r5 - r4 cP mod q and D6 = r6 - y cP mod q + + s.Mul(r4, cp) + r.Sub(r5, s) + d5 := new(big.Int).Mod(r, q) + if d5.Sign() < 0 { + d5.Add(d5, q) + } + + s.Mul(c.smp.secret, cp) + r.Sub(r6, s) + d6 := new(big.Int).Mod(r, q) + if d6.Sign() < 0 { + d6.Add(d6, q) + } + + var ret tlv + ret.typ = tlvTypeSMP2 + ret.data = appendU32(ret.data, 11) + ret.data = appendMPIs(ret.data, g2b, c2, d2, g3b, c3, d3, c.smp.pb, c.smp.qb, cp, d5, d6) + return ret +} + +func (c *Conversation) processSMP2(mpis []*big.Int) (out tlv, err error) { + if len(mpis) != 11 { + err = errors.New("otr: incorrect number of arguments in SMP2 message") + return + } + g2b := mpis[0] + c2 := mpis[1] + d2 := mpis[2] + g3b := mpis[3] + c3 := mpis[4] + d3 := mpis[5] + pb := mpis[6] + qb := mpis[7] + cp := mpis[8] + d5 := mpis[9] + d6 := mpis[10] + h := sha256.New() + + r := new(big.Int).Exp(g, d2, p) + s := new(big.Int).Exp(g2b, c2, p) + r.Mul(r, s) + r.Mod(r, p) + s.SetBytes(hashMPIs(h, 3, r)) + if c2.Cmp(s) != 0 { + err = errors.New("otr: ZKP c2 failed in SMP2 message") + return + } + + r.Exp(g, d3, p) + s.Exp(g3b, c3, p) + r.Mul(r, s) + r.Mod(r, p) + s.SetBytes(hashMPIs(h, 4, r)) + if c3.Cmp(s) != 0 { + err = errors.New("otr: ZKP c3 failed in SMP2 message") + return + } + + c.smp.g2 = new(big.Int).Exp(g2b, c.smp.a2, p) + c.smp.g3 = new(big.Int).Exp(g3b, c.smp.a3, p) + + r.Exp(g, d5, p) + s.Exp(c.smp.g2, d6, p) + r.Mul(r, s) + s.Exp(qb, cp, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(c.smp.g3, d5, p) + t := new(big.Int).Exp(pb, cp, p) + s.Mul(s, t) + s.Mod(s, p) + t.SetBytes(hashMPIs(h, 5, s, r)) + if cp.Cmp(t) != 0 { + err = errors.New("otr: ZKP cP failed in SMP2 message") + return + } + + var randBuf [16]byte + r4 := c.randMPI(randBuf[:]) + r5 := c.randMPI(randBuf[:]) + r6 := c.randMPI(randBuf[:]) + r7 := c.randMPI(randBuf[:]) + + pa := new(big.Int).Exp(c.smp.g3, r4, p) + r.Exp(c.smp.g2, c.smp.secret, p) + qa := new(big.Int).Exp(g, r4, p) + qa.Mul(qa, r) + qa.Mod(qa, p) + + r.Exp(g, r5, p) + s.Exp(c.smp.g2, r6, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(c.smp.g3, r5, p) + cp.SetBytes(hashMPIs(h, 6, s, r)) + + r.Mul(r4, cp) + d5 = new(big.Int).Sub(r5, r) + d5.Mod(d5, q) + if d5.Sign() < 0 { + d5.Add(d5, q) + } + + r.Mul(c.smp.secret, cp) + d6 = new(big.Int).Sub(r6, r) + d6.Mod(d6, q) + if d6.Sign() < 0 { + d6.Add(d6, q) + } + + r.ModInverse(qb, p) + qaqb := new(big.Int).Mul(qa, r) + qaqb.Mod(qaqb, p) + + ra := new(big.Int).Exp(qaqb, c.smp.a3, p) + r.Exp(qaqb, r7, p) + s.Exp(g, r7, p) + cr := new(big.Int).SetBytes(hashMPIs(h, 7, s, r)) + + r.Mul(c.smp.a3, cr) + d7 := new(big.Int).Sub(r7, r) + d7.Mod(d7, q) + if d7.Sign() < 0 { + d7.Add(d7, q) + } + + c.smp.g3b = g3b + c.smp.qaqb = qaqb + + r.ModInverse(pb, p) + c.smp.papb = new(big.Int).Mul(pa, r) + c.smp.papb.Mod(c.smp.papb, p) + c.smp.ra = ra + + out.typ = tlvTypeSMP3 + out.data = appendU32(out.data, 8) + out.data = appendMPIs(out.data, pa, qa, cp, d5, d6, ra, cr, d7) + return +} + +func (c *Conversation) processSMP3(mpis []*big.Int) (out tlv, err error) { + if len(mpis) != 8 { + err = errors.New("otr: incorrect number of arguments in SMP3 message") + return + } + pa := mpis[0] + qa := mpis[1] + cp := mpis[2] + d5 := mpis[3] + d6 := mpis[4] + ra := mpis[5] + cr := mpis[6] + d7 := mpis[7] + h := sha256.New() + + r := new(big.Int).Exp(g, d5, p) + s := new(big.Int).Exp(c.smp.g2, d6, p) + r.Mul(r, s) + s.Exp(qa, cp, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(c.smp.g3, d5, p) + t := new(big.Int).Exp(pa, cp, p) + s.Mul(s, t) + s.Mod(s, p) + t.SetBytes(hashMPIs(h, 6, s, r)) + if t.Cmp(cp) != 0 { + err = errors.New("otr: ZKP cP failed in SMP3 message") + return + } + + r.ModInverse(c.smp.qb, p) + qaqb := new(big.Int).Mul(qa, r) + qaqb.Mod(qaqb, p) + + r.Exp(qaqb, d7, p) + s.Exp(ra, cr, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(g, d7, p) + t.Exp(c.smp.g3a, cr, p) + s.Mul(s, t) + s.Mod(s, p) + t.SetBytes(hashMPIs(h, 7, s, r)) + if t.Cmp(cr) != 0 { + err = errors.New("otr: ZKP cR failed in SMP3 message") + return + } + + var randBuf [16]byte + r7 := c.randMPI(randBuf[:]) + rb := new(big.Int).Exp(qaqb, c.smp.b3, p) + + r.Exp(qaqb, r7, p) + s.Exp(g, r7, p) + cr = new(big.Int).SetBytes(hashMPIs(h, 8, s, r)) + + r.Mul(c.smp.b3, cr) + d7 = new(big.Int).Sub(r7, r) + d7.Mod(d7, q) + if d7.Sign() < 0 { + d7.Add(d7, q) + } + + out.typ = tlvTypeSMP4 + out.data = appendU32(out.data, 3) + out.data = appendMPIs(out.data, rb, cr, d7) + + r.ModInverse(c.smp.pb, p) + r.Mul(pa, r) + r.Mod(r, p) + s.Exp(ra, c.smp.b3, p) + if r.Cmp(s) != 0 { + err = smpFailureError + } + + return +} + +func (c *Conversation) processSMP4(mpis []*big.Int) error { + if len(mpis) != 3 { + return errors.New("otr: incorrect number of arguments in SMP4 message") + } + rb := mpis[0] + cr := mpis[1] + d7 := mpis[2] + h := sha256.New() + + r := new(big.Int).Exp(c.smp.qaqb, d7, p) + s := new(big.Int).Exp(rb, cr, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(g, d7, p) + t := new(big.Int).Exp(c.smp.g3b, cr, p) + s.Mul(s, t) + s.Mod(s, p) + t.SetBytes(hashMPIs(h, 8, s, r)) + if t.Cmp(cr) != 0 { + return errors.New("otr: ZKP cR failed in SMP4 message") + } + + r.Exp(rb, c.smp.a3, p) + if r.Cmp(c.smp.papb) != 0 { + return smpFailureError + } + + return nil +} + +func (c *Conversation) generateSMPAbort() tlv { + return tlv{typ: tlvTypeSMPAbort} +} + +func hashMPIs(h hash.Hash, magic byte, mpis ...*big.Int) []byte { + if h != nil { + h.Reset() + } else { + h = sha256.New() + } + + h.Write([]byte{magic}) + for _, mpi := range mpis { + h.Write(appendMPI(nil, mpi)) + } + return h.Sum(nil) +} diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go new file mode 100644 index 0000000..593f653 --- /dev/null +++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go @@ -0,0 +1,77 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package pbkdf2 implements the key derivation function PBKDF2 as defined in RFC +2898 / PKCS #5 v2.0. + +A key derivation function is useful when encrypting data based on a password +or any other not-fully-random data. It uses a pseudorandom function to derive +a secure encryption key based on the password. + +While v2.0 of the standard defines only one pseudorandom function to use, +HMAC-SHA1, the drafted v2.1 specification allows use of all five FIPS Approved +Hash Functions SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 for HMAC. To +choose, you can pass the `New` functions from the different SHA packages to +pbkdf2.Key. +*/ +package pbkdf2 // import "golang.org/x/crypto/pbkdf2" + +import ( + "crypto/hmac" + "hash" +) + +// Key derives a key from the password, salt and iteration count, returning a +// []byte of length keylen that can be used as cryptographic key. The key is +// derived based on the method described as PBKDF2 with the HMAC variant using +// the supplied hash function. +// +// For example, to use a HMAC-SHA-1 based PBKDF2 key derivation function, you +// can get a derived key for e.g. AES-256 (which needs a 32-byte key) by +// doing: +// +// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) +// +// Remember to get a good random salt. At least 8 bytes is recommended by the +// RFC. +// +// Using a higher iteration count will increase the cost of an exhaustive +// search but will also make derivation proportionally slower. +func Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { + prf := hmac.New(h, password) + hashLen := prf.Size() + numBlocks := (keyLen + hashLen - 1) / hashLen + + var buf [4]byte + dk := make([]byte, 0, numBlocks*hashLen) + U := make([]byte, hashLen) + for block := 1; block <= numBlocks; block++ { + // N.B.: || means concatenation, ^ means XOR + // for each block T_i = U_1 ^ U_2 ^ ... ^ U_iter + // U_1 = PRF(password, salt || uint(i)) + prf.Reset() + prf.Write(salt) + buf[0] = byte(block >> 24) + buf[1] = byte(block >> 16) + buf[2] = byte(block >> 8) + buf[3] = byte(block) + prf.Write(buf[:4]) + dk = prf.Sum(dk) + T := dk[len(dk)-hashLen:] + copy(U, T) + + // U_n = PRF(password, U_(n-1)) + for n := 2; n <= iter; n++ { + prf.Reset() + prf.Write(U) + U = U[:0] + U = prf.Sum(U) + for x := range U { + T[x] ^= U[x] + } + } + } + return dk[:keyLen] +} diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go new file mode 100644 index 0000000..1379240 --- /dev/null +++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go @@ -0,0 +1,157 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pbkdf2 + +import ( + "bytes" + "crypto/sha1" + "crypto/sha256" + "hash" + "testing" +) + +type testVector struct { + password string + salt string + iter int + output []byte +} + +// Test vectors from RFC 6070, http://tools.ietf.org/html/rfc6070 +var sha1TestVectors = []testVector{ + { + "password", + "salt", + 1, + []byte{ + 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, + 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, + 0x2f, 0xe0, 0x37, 0xa6, + }, + }, + { + "password", + "salt", + 2, + []byte{ + 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, + 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, + 0xd8, 0xde, 0x89, 0x57, + }, + }, + { + "password", + "salt", + 4096, + []byte{ + 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, + 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, + 0x65, 0xa4, 0x29, 0xc1, + }, + }, + // // This one takes too long + // { + // "password", + // "salt", + // 16777216, + // []byte{ + // 0xee, 0xfe, 0x3d, 0x61, 0xcd, 0x4d, 0xa4, 0xe4, + // 0xe9, 0x94, 0x5b, 0x3d, 0x6b, 0xa2, 0x15, 0x8c, + // 0x26, 0x34, 0xe9, 0x84, + // }, + // }, + { + "passwordPASSWORDpassword", + "saltSALTsaltSALTsaltSALTsaltSALTsalt", + 4096, + []byte{ + 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, + 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, + 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, + 0x38, + }, + }, + { + "pass\000word", + "sa\000lt", + 4096, + []byte{ + 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, + 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3, + }, + }, +} + +// Test vectors from +// http://stackoverflow.com/questions/5130513/pbkdf2-hmac-sha2-test-vectors +var sha256TestVectors = []testVector{ + { + "password", + "salt", + 1, + []byte{ + 0x12, 0x0f, 0xb6, 0xcf, 0xfc, 0xf8, 0xb3, 0x2c, + 0x43, 0xe7, 0x22, 0x52, 0x56, 0xc4, 0xf8, 0x37, + 0xa8, 0x65, 0x48, 0xc9, + }, + }, + { + "password", + "salt", + 2, + []byte{ + 0xae, 0x4d, 0x0c, 0x95, 0xaf, 0x6b, 0x46, 0xd3, + 0x2d, 0x0a, 0xdf, 0xf9, 0x28, 0xf0, 0x6d, 0xd0, + 0x2a, 0x30, 0x3f, 0x8e, + }, + }, + { + "password", + "salt", + 4096, + []byte{ + 0xc5, 0xe4, 0x78, 0xd5, 0x92, 0x88, 0xc8, 0x41, + 0xaa, 0x53, 0x0d, 0xb6, 0x84, 0x5c, 0x4c, 0x8d, + 0x96, 0x28, 0x93, 0xa0, + }, + }, + { + "passwordPASSWORDpassword", + "saltSALTsaltSALTsaltSALTsaltSALTsalt", + 4096, + []byte{ + 0x34, 0x8c, 0x89, 0xdb, 0xcb, 0xd3, 0x2b, 0x2f, + 0x32, 0xd8, 0x14, 0xb8, 0x11, 0x6e, 0x84, 0xcf, + 0x2b, 0x17, 0x34, 0x7e, 0xbc, 0x18, 0x00, 0x18, + 0x1c, + }, + }, + { + "pass\000word", + "sa\000lt", + 4096, + []byte{ + 0x89, 0xb6, 0x9d, 0x05, 0x16, 0xf8, 0x29, 0x89, + 0x3c, 0x69, 0x62, 0x26, 0x65, 0x0a, 0x86, 0x87, + }, + }, +} + +func testHash(t *testing.T, h func() hash.Hash, hashName string, vectors []testVector) { + for i, v := range vectors { + o := Key([]byte(v.password), []byte(v.salt), v.iter, len(v.output), h) + if !bytes.Equal(o, v.output) { + t.Errorf("%s %d: expected %x, got %x", hashName, i, v.output, o) + } + } +} + +func TestWithHMACSHA1(t *testing.T) { + testHash(t, sha1.New, "SHA1", sha1TestVectors) +} + +func TestWithHMACSHA256(t *testing.T) { + testHash(t, sha256.New, "SHA256", sha256TestVectors) +} diff --git a/vendor/golang.org/x/crypto/pkcs12/bmp-string.go b/vendor/golang.org/x/crypto/pkcs12/bmp-string.go new file mode 100644 index 0000000..284d2a6 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/bmp-string.go @@ -0,0 +1,50 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "errors" + "unicode/utf16" +) + +// bmpString returns s encoded in UCS-2 with a zero terminator. +func bmpString(s string) ([]byte, error) { + // References: + // https://tools.ietf.org/html/rfc7292#appendix-B.1 + // http://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane + // - non-BMP characters are encoded in UTF 16 by using a surrogate pair of 16-bit codes + // EncodeRune returns 0xfffd if the rune does not need special encoding + // - the above RFC provides the info that BMPStrings are NULL terminated. + + ret := make([]byte, 0, 2*len(s)+2) + + for _, r := range s { + if t, _ := utf16.EncodeRune(r); t != 0xfffd { + return nil, errors.New("pkcs12: string contains characters that cannot be encoded in UCS-2") + } + ret = append(ret, byte(r/256), byte(r%256)) + } + + return append(ret, 0, 0), nil +} + +func decodeBMPString(bmpString []byte) (string, error) { + if len(bmpString)%2 != 0 { + return "", errors.New("pkcs12: odd-length BMP string") + } + + // strip terminator if present + if l := len(bmpString); l >= 2 && bmpString[l-1] == 0 && bmpString[l-2] == 0 { + bmpString = bmpString[:l-2] + } + + s := make([]uint16, 0, len(bmpString)/2) + for len(bmpString) > 0 { + s = append(s, uint16(bmpString[0])<<8+uint16(bmpString[1])) + bmpString = bmpString[2:] + } + + return string(utf16.Decode(s)), nil +} diff --git a/vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go b/vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go new file mode 100644 index 0000000..7fca55f --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go @@ -0,0 +1,63 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "encoding/hex" + "testing" +) + +var bmpStringTests = []struct { + in string + expectedHex string + shouldFail bool +}{ + {"", "0000", false}, + // Example from https://tools.ietf.org/html/rfc7292#appendix-B. + {"Beavis", "0042006500610076006900730000", false}, + // Some characters from the "Letterlike Symbols Unicode block". + {"\u2115 - Double-struck N", "21150020002d00200044006f00750062006c0065002d00730074007200750063006b0020004e0000", false}, + // any character outside the BMP should trigger an error. + {"\U0001f000 East wind (Mahjong)", "", true}, +} + +func TestBMPString(t *testing.T) { + for i, test := range bmpStringTests { + expected, err := hex.DecodeString(test.expectedHex) + if err != nil { + t.Fatalf("#%d: failed to decode expectation", i) + } + + out, err := bmpString(test.in) + if err == nil && test.shouldFail { + t.Errorf("#%d: expected to fail, but produced %x", i, out) + continue + } + + if err != nil && !test.shouldFail { + t.Errorf("#%d: failed unexpectedly: %s", i, err) + continue + } + + if !test.shouldFail { + if !bytes.Equal(out, expected) { + t.Errorf("#%d: expected %s, got %x", i, test.expectedHex, out) + continue + } + + roundTrip, err := decodeBMPString(out) + if err != nil { + t.Errorf("#%d: decoding output gave an error: %s", i, err) + continue + } + + if roundTrip != test.in { + t.Errorf("#%d: decoding output resulted in %q, but it should have been %q", i, roundTrip, test.in) + continue + } + } + } +} diff --git a/vendor/golang.org/x/crypto/pkcs12/crypto.go b/vendor/golang.org/x/crypto/pkcs12/crypto.go new file mode 100644 index 0000000..4bd4470 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/crypto.go @@ -0,0 +1,131 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "crypto/cipher" + "crypto/des" + "crypto/x509/pkix" + "encoding/asn1" + "errors" + + "golang.org/x/crypto/pkcs12/internal/rc2" +) + +var ( + oidPBEWithSHAAnd3KeyTripleDESCBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 3}) + oidPBEWithSHAAnd40BitRC2CBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 6}) +) + +// pbeCipher is an abstraction of a PKCS#12 cipher. +type pbeCipher interface { + // create returns a cipher.Block given a key. + create(key []byte) (cipher.Block, error) + // deriveKey returns a key derived from the given password and salt. + deriveKey(salt, password []byte, iterations int) []byte + // deriveKey returns an IV derived from the given password and salt. + deriveIV(salt, password []byte, iterations int) []byte +} + +type shaWithTripleDESCBC struct{} + +func (shaWithTripleDESCBC) create(key []byte) (cipher.Block, error) { + return des.NewTripleDESCipher(key) +} + +func (shaWithTripleDESCBC) deriveKey(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 24) +} + +func (shaWithTripleDESCBC) deriveIV(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8) +} + +type shaWith40BitRC2CBC struct{} + +func (shaWith40BitRC2CBC) create(key []byte) (cipher.Block, error) { + return rc2.New(key, len(key)*8) +} + +func (shaWith40BitRC2CBC) deriveKey(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 5) +} + +func (shaWith40BitRC2CBC) deriveIV(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8) +} + +type pbeParams struct { + Salt []byte + Iterations int +} + +func pbDecrypterFor(algorithm pkix.AlgorithmIdentifier, password []byte) (cipher.BlockMode, int, error) { + var cipherType pbeCipher + + switch { + case algorithm.Algorithm.Equal(oidPBEWithSHAAnd3KeyTripleDESCBC): + cipherType = shaWithTripleDESCBC{} + case algorithm.Algorithm.Equal(oidPBEWithSHAAnd40BitRC2CBC): + cipherType = shaWith40BitRC2CBC{} + default: + return nil, 0, NotImplementedError("algorithm " + algorithm.Algorithm.String() + " is not supported") + } + + var params pbeParams + if err := unmarshal(algorithm.Parameters.FullBytes, ¶ms); err != nil { + return nil, 0, err + } + + key := cipherType.deriveKey(params.Salt, password, params.Iterations) + iv := cipherType.deriveIV(params.Salt, password, params.Iterations) + + block, err := cipherType.create(key) + if err != nil { + return nil, 0, err + } + + return cipher.NewCBCDecrypter(block, iv), block.BlockSize(), nil +} + +func pbDecrypt(info decryptable, password []byte) (decrypted []byte, err error) { + cbc, blockSize, err := pbDecrypterFor(info.Algorithm(), password) + if err != nil { + return nil, err + } + + encrypted := info.Data() + if len(encrypted) == 0 { + return nil, errors.New("pkcs12: empty encrypted data") + } + if len(encrypted)%blockSize != 0 { + return nil, errors.New("pkcs12: input is not a multiple of the block size") + } + decrypted = make([]byte, len(encrypted)) + cbc.CryptBlocks(decrypted, encrypted) + + psLen := int(decrypted[len(decrypted)-1]) + if psLen == 0 || psLen > blockSize { + return nil, ErrDecryption + } + + if len(decrypted) < psLen { + return nil, ErrDecryption + } + ps := decrypted[len(decrypted)-psLen:] + decrypted = decrypted[:len(decrypted)-psLen] + if bytes.Compare(ps, bytes.Repeat([]byte{byte(psLen)}, psLen)) != 0 { + return nil, ErrDecryption + } + + return +} + +// decryptable abstracts a object that contains ciphertext. +type decryptable interface { + Algorithm() pkix.AlgorithmIdentifier + Data() []byte +} diff --git a/vendor/golang.org/x/crypto/pkcs12/crypto_test.go b/vendor/golang.org/x/crypto/pkcs12/crypto_test.go new file mode 100644 index 0000000..eb4dae8 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/crypto_test.go @@ -0,0 +1,125 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "crypto/x509/pkix" + "encoding/asn1" + "testing" +) + +var sha1WithTripleDES = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 3}) + +func TestPbDecrypterFor(t *testing.T) { + params, _ := asn1.Marshal(pbeParams{ + Salt: []byte{1, 2, 3, 4, 5, 6, 7, 8}, + Iterations: 2048, + }) + alg := pkix.AlgorithmIdentifier{ + Algorithm: asn1.ObjectIdentifier([]int{1, 2, 3}), + Parameters: asn1.RawValue{ + FullBytes: params, + }, + } + + pass, _ := bmpString("Sesame open") + + _, _, err := pbDecrypterFor(alg, pass) + if _, ok := err.(NotImplementedError); !ok { + t.Errorf("expected not implemented error, got: %T %s", err, err) + } + + alg.Algorithm = sha1WithTripleDES + cbc, blockSize, err := pbDecrypterFor(alg, pass) + if err != nil { + t.Errorf("unexpected error from pbDecrypterFor %v", err) + } + if blockSize != 8 { + t.Errorf("unexpected block size %d, wanted 8", blockSize) + } + + plaintext := []byte{1, 2, 3, 4, 5, 6, 7, 8} + expectedCiphertext := []byte{185, 73, 135, 249, 137, 1, 122, 247} + ciphertext := make([]byte, len(plaintext)) + cbc.CryptBlocks(ciphertext, plaintext) + + if bytes.Compare(ciphertext, expectedCiphertext) != 0 { + t.Errorf("bad ciphertext, got %x but wanted %x", ciphertext, expectedCiphertext) + } +} + +var pbDecryptTests = []struct { + in []byte + expected []byte + expectedError error +}{ + { + []byte("\x33\x73\xf3\x9f\xda\x49\xae\xfc\xa0\x9a\xdf\x5a\x58\xa0\xea\x46"), // 7 padding bytes + []byte("A secret!"), + nil, + }, + { + []byte("\x33\x73\xf3\x9f\xda\x49\xae\xfc\x96\x24\x2f\x71\x7e\x32\x3f\xe7"), // 8 padding bytes + []byte("A secret"), + nil, + }, + { + []byte("\x35\x0c\xc0\x8d\xab\xa9\x5d\x30\x7f\x9a\xec\x6a\xd8\x9b\x9c\xd9"), // 9 padding bytes, incorrect + nil, + ErrDecryption, + }, + { + []byte("\xb2\xf9\x6e\x06\x60\xae\x20\xcf\x08\xa0\x7b\xd9\x6b\x20\xef\x41"), // incorrect padding bytes: [ ... 0x04 0x02 ] + nil, + ErrDecryption, + }, +} + +func TestPbDecrypt(t *testing.T) { + for i, test := range pbDecryptTests { + decryptable := testDecryptable{ + data: test.in, + algorithm: pkix.AlgorithmIdentifier{ + Algorithm: sha1WithTripleDES, + Parameters: pbeParams{ + Salt: []byte("\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8"), + Iterations: 4096, + }.RawASN1(), + }, + } + password, _ := bmpString("sesame") + + plaintext, err := pbDecrypt(decryptable, password) + if err != test.expectedError { + t.Errorf("#%d: got error %q, but wanted %q", i, err, test.expectedError) + continue + } + + if !bytes.Equal(plaintext, test.expected) { + t.Errorf("#%d: got %x, but wanted %x", i, plaintext, test.expected) + } + } +} + +type testDecryptable struct { + data []byte + algorithm pkix.AlgorithmIdentifier +} + +func (d testDecryptable) Algorithm() pkix.AlgorithmIdentifier { return d.algorithm } +func (d testDecryptable) Data() []byte { return d.data } + +func (params pbeParams) RawASN1() (raw asn1.RawValue) { + asn1Bytes, err := asn1.Marshal(params) + if err != nil { + panic(err) + } + _, err = asn1.Unmarshal(asn1Bytes, &raw) + if err != nil { + panic(err) + } + return +} diff --git a/vendor/golang.org/x/crypto/pkcs12/errors.go b/vendor/golang.org/x/crypto/pkcs12/errors.go new file mode 100644 index 0000000..7377ce6 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/errors.go @@ -0,0 +1,23 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import "errors" + +var ( + // ErrDecryption represents a failure to decrypt the input. + ErrDecryption = errors.New("pkcs12: decryption error, incorrect padding") + + // ErrIncorrectPassword is returned when an incorrect password is detected. + // Usually, P12/PFX data is signed to be able to verify the password. + ErrIncorrectPassword = errors.New("pkcs12: decryption password incorrect") +) + +// NotImplementedError indicates that the input is not currently supported. +type NotImplementedError string + +func (e NotImplementedError) Error() string { + return "pkcs12: " + string(e) +} diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go new file mode 100644 index 0000000..3347f33 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go @@ -0,0 +1,27 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rc2 + +import ( + "testing" +) + +func BenchmarkEncrypt(b *testing.B) { + r, _ := New([]byte{0, 0, 0, 0, 0, 0, 0, 0}, 64) + b.ResetTimer() + var src [8]byte + for i := 0; i < b.N; i++ { + r.Encrypt(src[:], src[:]) + } +} + +func BenchmarkDecrypt(b *testing.B) { + r, _ := New([]byte{0, 0, 0, 0, 0, 0, 0, 0}, 64) + b.ResetTimer() + var src [8]byte + for i := 0; i < b.N; i++ { + r.Decrypt(src[:], src[:]) + } +} diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go new file mode 100644 index 0000000..8c70902 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go @@ -0,0 +1,274 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package rc2 implements the RC2 cipher +/* +https://www.ietf.org/rfc/rfc2268.txt +http://people.csail.mit.edu/rivest/pubs/KRRR98.pdf + +This code is licensed under the MIT license. +*/ +package rc2 + +import ( + "crypto/cipher" + "encoding/binary" +) + +// The rc2 block size in bytes +const BlockSize = 8 + +type rc2Cipher struct { + k [64]uint16 +} + +// New returns a new rc2 cipher with the given key and effective key length t1 +func New(key []byte, t1 int) (cipher.Block, error) { + // TODO(dgryski): error checking for key length + return &rc2Cipher{ + k: expandKey(key, t1), + }, nil +} + +func (*rc2Cipher) BlockSize() int { return BlockSize } + +var piTable = [256]byte{ + 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d, + 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2, + 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32, + 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82, + 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc, + 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26, + 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03, + 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7, + 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a, + 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec, + 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39, + 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31, + 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9, + 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9, + 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e, + 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad, +} + +func expandKey(key []byte, t1 int) [64]uint16 { + + l := make([]byte, 128) + copy(l, key) + + var t = len(key) + var t8 = (t1 + 7) / 8 + var tm = byte(255 % uint(1<<(8+uint(t1)-8*uint(t8)))) + + for i := len(key); i < 128; i++ { + l[i] = piTable[l[i-1]+l[uint8(i-t)]] + } + + l[128-t8] = piTable[l[128-t8]&tm] + + for i := 127 - t8; i >= 0; i-- { + l[i] = piTable[l[i+1]^l[i+t8]] + } + + var k [64]uint16 + + for i := range k { + k[i] = uint16(l[2*i]) + uint16(l[2*i+1])*256 + } + + return k +} + +func rotl16(x uint16, b uint) uint16 { + return (x >> (16 - b)) | (x << b) +} + +func (c *rc2Cipher) Encrypt(dst, src []byte) { + + r0 := binary.LittleEndian.Uint16(src[0:]) + r1 := binary.LittleEndian.Uint16(src[2:]) + r2 := binary.LittleEndian.Uint16(src[4:]) + r3 := binary.LittleEndian.Uint16(src[6:]) + + var j int + + for j <= 16 { + // mix r0 + r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) + r0 = rotl16(r0, 1) + j++ + + // mix r1 + r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) + r1 = rotl16(r1, 2) + j++ + + // mix r2 + r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) + r2 = rotl16(r2, 3) + j++ + + // mix r3 + r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) + r3 = rotl16(r3, 5) + j++ + + } + + r0 = r0 + c.k[r3&63] + r1 = r1 + c.k[r0&63] + r2 = r2 + c.k[r1&63] + r3 = r3 + c.k[r2&63] + + for j <= 40 { + + // mix r0 + r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) + r0 = rotl16(r0, 1) + j++ + + // mix r1 + r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) + r1 = rotl16(r1, 2) + j++ + + // mix r2 + r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) + r2 = rotl16(r2, 3) + j++ + + // mix r3 + r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) + r3 = rotl16(r3, 5) + j++ + + } + + r0 = r0 + c.k[r3&63] + r1 = r1 + c.k[r0&63] + r2 = r2 + c.k[r1&63] + r3 = r3 + c.k[r2&63] + + for j <= 60 { + + // mix r0 + r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) + r0 = rotl16(r0, 1) + j++ + + // mix r1 + r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) + r1 = rotl16(r1, 2) + j++ + + // mix r2 + r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) + r2 = rotl16(r2, 3) + j++ + + // mix r3 + r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) + r3 = rotl16(r3, 5) + j++ + } + + binary.LittleEndian.PutUint16(dst[0:], r0) + binary.LittleEndian.PutUint16(dst[2:], r1) + binary.LittleEndian.PutUint16(dst[4:], r2) + binary.LittleEndian.PutUint16(dst[6:], r3) +} + +func (c *rc2Cipher) Decrypt(dst, src []byte) { + + r0 := binary.LittleEndian.Uint16(src[0:]) + r1 := binary.LittleEndian.Uint16(src[2:]) + r2 := binary.LittleEndian.Uint16(src[4:]) + r3 := binary.LittleEndian.Uint16(src[6:]) + + j := 63 + + for j >= 44 { + // unmix r3 + r3 = rotl16(r3, 16-5) + r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) + j-- + + // unmix r2 + r2 = rotl16(r2, 16-3) + r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) + j-- + + // unmix r1 + r1 = rotl16(r1, 16-2) + r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) + j-- + + // unmix r0 + r0 = rotl16(r0, 16-1) + r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) + j-- + } + + r3 = r3 - c.k[r2&63] + r2 = r2 - c.k[r1&63] + r1 = r1 - c.k[r0&63] + r0 = r0 - c.k[r3&63] + + for j >= 20 { + // unmix r3 + r3 = rotl16(r3, 16-5) + r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) + j-- + + // unmix r2 + r2 = rotl16(r2, 16-3) + r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) + j-- + + // unmix r1 + r1 = rotl16(r1, 16-2) + r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) + j-- + + // unmix r0 + r0 = rotl16(r0, 16-1) + r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) + j-- + + } + + r3 = r3 - c.k[r2&63] + r2 = r2 - c.k[r1&63] + r1 = r1 - c.k[r0&63] + r0 = r0 - c.k[r3&63] + + for j >= 0 { + + // unmix r3 + r3 = rotl16(r3, 16-5) + r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) + j-- + + // unmix r2 + r2 = rotl16(r2, 16-3) + r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) + j-- + + // unmix r1 + r1 = rotl16(r1, 16-2) + r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) + j-- + + // unmix r0 + r0 = rotl16(r0, 16-1) + r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) + j-- + + } + + binary.LittleEndian.PutUint16(dst[0:], r0) + binary.LittleEndian.PutUint16(dst[2:], r1) + binary.LittleEndian.PutUint16(dst[4:], r2) + binary.LittleEndian.PutUint16(dst[6:], r3) +} diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go new file mode 100644 index 0000000..8a49dfa --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go @@ -0,0 +1,93 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rc2 + +import ( + "bytes" + "encoding/hex" + "testing" +) + +func TestEncryptDecrypt(t *testing.T) { + + // TODO(dgryski): add the rest of the test vectors from the RFC + var tests = []struct { + key string + plain string + cipher string + t1 int + }{ + { + "0000000000000000", + "0000000000000000", + "ebb773f993278eff", + 63, + }, + { + "ffffffffffffffff", + "ffffffffffffffff", + "278b27e42e2f0d49", + 64, + }, + { + "3000000000000000", + "1000000000000001", + "30649edf9be7d2c2", + 64, + }, + { + "88", + "0000000000000000", + "61a8a244adacccf0", + 64, + }, + { + "88bca90e90875a", + "0000000000000000", + "6ccf4308974c267f", + 64, + }, + { + "88bca90e90875a7f0f79c384627bafb2", + "0000000000000000", + "1a807d272bbe5db1", + 64, + }, + { + "88bca90e90875a7f0f79c384627bafb2", + "0000000000000000", + "2269552ab0f85ca6", + 128, + }, + { + "88bca90e90875a7f0f79c384627bafb216f80a6f85920584c42fceb0be255daf1e", + "0000000000000000", + "5b78d3a43dfff1f1", + 129, + }, + } + + for _, tt := range tests { + k, _ := hex.DecodeString(tt.key) + p, _ := hex.DecodeString(tt.plain) + c, _ := hex.DecodeString(tt.cipher) + + b, _ := New(k, tt.t1) + + var dst [8]byte + + b.Encrypt(dst[:], p) + + if !bytes.Equal(dst[:], c) { + t.Errorf("encrypt failed: got % 2x wanted % 2x\n", dst, c) + } + + b.Decrypt(dst[:], c) + + if !bytes.Equal(dst[:], p) { + t.Errorf("decrypt failed: got % 2x wanted % 2x\n", dst, p) + } + } +} diff --git a/vendor/golang.org/x/crypto/pkcs12/mac.go b/vendor/golang.org/x/crypto/pkcs12/mac.go new file mode 100644 index 0000000..5f38aa7 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/mac.go @@ -0,0 +1,45 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "crypto/hmac" + "crypto/sha1" + "crypto/x509/pkix" + "encoding/asn1" +) + +type macData struct { + Mac digestInfo + MacSalt []byte + Iterations int `asn1:"optional,default:1"` +} + +// from PKCS#7: +type digestInfo struct { + Algorithm pkix.AlgorithmIdentifier + Digest []byte +} + +var ( + oidSHA1 = asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26}) +) + +func verifyMac(macData *macData, message, password []byte) error { + if !macData.Mac.Algorithm.Algorithm.Equal(oidSHA1) { + return NotImplementedError("unknown digest algorithm: " + macData.Mac.Algorithm.Algorithm.String()) + } + + key := pbkdf(sha1Sum, 20, 64, macData.MacSalt, password, macData.Iterations, 3, 20) + + mac := hmac.New(sha1.New, key) + mac.Write(message) + expectedMAC := mac.Sum(nil) + + if !hmac.Equal(macData.Mac.Digest, expectedMAC) { + return ErrIncorrectPassword + } + return nil +} diff --git a/vendor/golang.org/x/crypto/pkcs12/mac_test.go b/vendor/golang.org/x/crypto/pkcs12/mac_test.go new file mode 100644 index 0000000..1ed4ff2 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/mac_test.go @@ -0,0 +1,42 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "encoding/asn1" + "testing" +) + +func TestVerifyMac(t *testing.T) { + td := macData{ + Mac: digestInfo{ + Digest: []byte{0x18, 0x20, 0x3d, 0xff, 0x1e, 0x16, 0xf4, 0x92, 0xf2, 0xaf, 0xc8, 0x91, 0xa9, 0xba, 0xd6, 0xca, 0x9d, 0xee, 0x51, 0x93}, + }, + MacSalt: []byte{1, 2, 3, 4, 5, 6, 7, 8}, + Iterations: 2048, + } + + message := []byte{11, 12, 13, 14, 15} + password, _ := bmpString("") + + td.Mac.Algorithm.Algorithm = asn1.ObjectIdentifier([]int{1, 2, 3}) + err := verifyMac(&td, message, password) + if _, ok := err.(NotImplementedError); !ok { + t.Errorf("err: %v", err) + } + + td.Mac.Algorithm.Algorithm = asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26}) + err = verifyMac(&td, message, password) + if err != ErrIncorrectPassword { + t.Errorf("Expected incorrect password, got err: %v", err) + } + + password, _ = bmpString("Sesame open") + err = verifyMac(&td, message, password) + if err != nil { + t.Errorf("err: %v", err) + } + +} diff --git a/vendor/golang.org/x/crypto/pkcs12/pbkdf.go b/vendor/golang.org/x/crypto/pkcs12/pbkdf.go new file mode 100644 index 0000000..5c419d4 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/pbkdf.go @@ -0,0 +1,170 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "crypto/sha1" + "math/big" +) + +var ( + one = big.NewInt(1) +) + +// sha1Sum returns the SHA-1 hash of in. +func sha1Sum(in []byte) []byte { + sum := sha1.Sum(in) + return sum[:] +} + +// fillWithRepeats returns v*ceiling(len(pattern) / v) bytes consisting of +// repeats of pattern. +func fillWithRepeats(pattern []byte, v int) []byte { + if len(pattern) == 0 { + return nil + } + outputLen := v * ((len(pattern) + v - 1) / v) + return bytes.Repeat(pattern, (outputLen+len(pattern)-1)/len(pattern))[:outputLen] +} + +func pbkdf(hash func([]byte) []byte, u, v int, salt, password []byte, r int, ID byte, size int) (key []byte) { + // implementation of https://tools.ietf.org/html/rfc7292#appendix-B.2 , RFC text verbatim in comments + + // Let H be a hash function built around a compression function f: + + // Z_2^u x Z_2^v -> Z_2^u + + // (that is, H has a chaining variable and output of length u bits, and + // the message input to the compression function of H is v bits). The + // values for u and v are as follows: + + // HASH FUNCTION VALUE u VALUE v + // MD2, MD5 128 512 + // SHA-1 160 512 + // SHA-224 224 512 + // SHA-256 256 512 + // SHA-384 384 1024 + // SHA-512 512 1024 + // SHA-512/224 224 1024 + // SHA-512/256 256 1024 + + // Furthermore, let r be the iteration count. + + // We assume here that u and v are both multiples of 8, as are the + // lengths of the password and salt strings (which we denote by p and s, + // respectively) and the number n of pseudorandom bits required. In + // addition, u and v are of course non-zero. + + // For information on security considerations for MD5 [19], see [25] and + // [1], and on those for MD2, see [18]. + + // The following procedure can be used to produce pseudorandom bits for + // a particular "purpose" that is identified by a byte called "ID". + // This standard specifies 3 different values for the ID byte: + + // 1. If ID=1, then the pseudorandom bits being produced are to be used + // as key material for performing encryption or decryption. + + // 2. If ID=2, then the pseudorandom bits being produced are to be used + // as an IV (Initial Value) for encryption or decryption. + + // 3. If ID=3, then the pseudorandom bits being produced are to be used + // as an integrity key for MACing. + + // 1. Construct a string, D (the "diversifier"), by concatenating v/8 + // copies of ID. + var D []byte + for i := 0; i < v; i++ { + D = append(D, ID) + } + + // 2. Concatenate copies of the salt together to create a string S of + // length v(ceiling(s/v)) bits (the final copy of the salt may be + // truncated to create S). Note that if the salt is the empty + // string, then so is S. + + S := fillWithRepeats(salt, v) + + // 3. Concatenate copies of the password together to create a string P + // of length v(ceiling(p/v)) bits (the final copy of the password + // may be truncated to create P). Note that if the password is the + // empty string, then so is P. + + P := fillWithRepeats(password, v) + + // 4. Set I=S||P to be the concatenation of S and P. + I := append(S, P...) + + // 5. Set c=ceiling(n/u). + c := (size + u - 1) / u + + // 6. For i=1, 2, ..., c, do the following: + A := make([]byte, c*20) + var IjBuf []byte + for i := 0; i < c; i++ { + // A. Set A2=H^r(D||I). (i.e., the r-th hash of D||1, + // H(H(H(... H(D||I)))) + Ai := hash(append(D, I...)) + for j := 1; j < r; j++ { + Ai = hash(Ai) + } + copy(A[i*20:], Ai[:]) + + if i < c-1 { // skip on last iteration + // B. Concatenate copies of Ai to create a string B of length v + // bits (the final copy of Ai may be truncated to create B). + var B []byte + for len(B) < v { + B = append(B, Ai[:]...) + } + B = B[:v] + + // C. Treating I as a concatenation I_0, I_1, ..., I_(k-1) of v-bit + // blocks, where k=ceiling(s/v)+ceiling(p/v), modify I by + // setting I_j=(I_j+B+1) mod 2^v for each j. + { + Bbi := new(big.Int).SetBytes(B) + Ij := new(big.Int) + + for j := 0; j < len(I)/v; j++ { + Ij.SetBytes(I[j*v : (j+1)*v]) + Ij.Add(Ij, Bbi) + Ij.Add(Ij, one) + Ijb := Ij.Bytes() + // We expect Ijb to be exactly v bytes, + // if it is longer or shorter we must + // adjust it accordingly. + if len(Ijb) > v { + Ijb = Ijb[len(Ijb)-v:] + } + if len(Ijb) < v { + if IjBuf == nil { + IjBuf = make([]byte, v) + } + bytesShort := v - len(Ijb) + for i := 0; i < bytesShort; i++ { + IjBuf[i] = 0 + } + copy(IjBuf[bytesShort:], Ijb) + Ijb = IjBuf + } + copy(I[j*v:(j+1)*v], Ijb) + } + } + } + } + // 7. Concatenate A_1, A_2, ..., A_c together to form a pseudorandom + // bit string, A. + + // 8. Use the first n bits of A as the output of this entire process. + return A[:size] + + // If the above process is being used to generate a DES key, the process + // should be used to create 64 random bits, and the key's parity bits + // should be set after the 64 bits have been produced. Similar concerns + // hold for 2-key and 3-key triple-DES keys, for CDMF keys, and for any + // similar keys with parity bits "built into them". +} diff --git a/vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go b/vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go new file mode 100644 index 0000000..262037d --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go @@ -0,0 +1,34 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "testing" +) + +func TestThatPBKDFWorksCorrectlyForLongKeys(t *testing.T) { + cipherInfo := shaWithTripleDESCBC{} + + salt := []byte("\xff\xff\xff\xff\xff\xff\xff\xff") + password, _ := bmpString("sesame") + key := cipherInfo.deriveKey(salt, password, 2048) + + if expected := []byte("\x7c\xd9\xfd\x3e\x2b\x3b\xe7\x69\x1a\x44\xe3\xbe\xf0\xf9\xea\x0f\xb9\xb8\x97\xd4\xe3\x25\xd9\xd1"); bytes.Compare(key, expected) != 0 { + t.Fatalf("expected key '%x', but found '%x'", expected, key) + } +} + +func TestThatPBKDFHandlesLeadingZeros(t *testing.T) { + // This test triggers a case where I_j (in step 6C) ends up with leading zero + // byte, meaning that len(Ijb) < v (leading zeros get stripped by big.Int). + // This was previously causing bug whereby certain inputs would break the + // derivation and produce the wrong output. + key := pbkdf(sha1Sum, 20, 64, []byte("\xf3\x7e\x05\xb5\x18\x32\x4b\x4b"), []byte("\x00\x00"), 2048, 1, 24) + expected := []byte("\x00\xf7\x59\xff\x47\xd1\x4d\xd0\x36\x65\xd5\x94\x3c\xb3\xc4\xa3\x9a\x25\x55\xc0\x2a\xed\x66\xe1") + if bytes.Compare(key, expected) != 0 { + t.Fatalf("expected key '%x', but found '%x'", expected, key) + } +} diff --git a/vendor/golang.org/x/crypto/pkcs12/pkcs12.go b/vendor/golang.org/x/crypto/pkcs12/pkcs12.go new file mode 100644 index 0000000..ad6341e --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/pkcs12.go @@ -0,0 +1,342 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package pkcs12 implements some of PKCS#12. +// +// This implementation is distilled from https://tools.ietf.org/html/rfc7292 +// and referenced documents. It is intended for decoding P12/PFX-stored +// certificates and keys for use with the crypto/tls package. +package pkcs12 + +import ( + "crypto/ecdsa" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" + "encoding/hex" + "encoding/pem" + "errors" +) + +var ( + oidDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 1}) + oidEncryptedDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 6}) + + oidFriendlyName = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 20}) + oidLocalKeyID = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 21}) + oidMicrosoftCSPName = asn1.ObjectIdentifier([]int{1, 3, 6, 1, 4, 1, 311, 17, 1}) +) + +type pfxPdu struct { + Version int + AuthSafe contentInfo + MacData macData `asn1:"optional"` +} + +type contentInfo struct { + ContentType asn1.ObjectIdentifier + Content asn1.RawValue `asn1:"tag:0,explicit,optional"` +} + +type encryptedData struct { + Version int + EncryptedContentInfo encryptedContentInfo +} + +type encryptedContentInfo struct { + ContentType asn1.ObjectIdentifier + ContentEncryptionAlgorithm pkix.AlgorithmIdentifier + EncryptedContent []byte `asn1:"tag:0,optional"` +} + +func (i encryptedContentInfo) Algorithm() pkix.AlgorithmIdentifier { + return i.ContentEncryptionAlgorithm +} + +func (i encryptedContentInfo) Data() []byte { return i.EncryptedContent } + +type safeBag struct { + Id asn1.ObjectIdentifier + Value asn1.RawValue `asn1:"tag:0,explicit"` + Attributes []pkcs12Attribute `asn1:"set,optional"` +} + +type pkcs12Attribute struct { + Id asn1.ObjectIdentifier + Value asn1.RawValue `asn1:"set"` +} + +type encryptedPrivateKeyInfo struct { + AlgorithmIdentifier pkix.AlgorithmIdentifier + EncryptedData []byte +} + +func (i encryptedPrivateKeyInfo) Algorithm() pkix.AlgorithmIdentifier { + return i.AlgorithmIdentifier +} + +func (i encryptedPrivateKeyInfo) Data() []byte { + return i.EncryptedData +} + +// PEM block types +const ( + certificateType = "CERTIFICATE" + privateKeyType = "PRIVATE KEY" +) + +// unmarshal calls asn1.Unmarshal, but also returns an error if there is any +// trailing data after unmarshaling. +func unmarshal(in []byte, out interface{}) error { + trailing, err := asn1.Unmarshal(in, out) + if err != nil { + return err + } + if len(trailing) != 0 { + return errors.New("pkcs12: trailing data found") + } + return nil +} + +// ConvertToPEM converts all "safe bags" contained in pfxData to PEM blocks. +func ToPEM(pfxData []byte, password string) ([]*pem.Block, error) { + encodedPassword, err := bmpString(password) + if err != nil { + return nil, ErrIncorrectPassword + } + + bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword) + + blocks := make([]*pem.Block, 0, len(bags)) + for _, bag := range bags { + block, err := convertBag(&bag, encodedPassword) + if err != nil { + return nil, err + } + blocks = append(blocks, block) + } + + return blocks, nil +} + +func convertBag(bag *safeBag, password []byte) (*pem.Block, error) { + block := &pem.Block{ + Headers: make(map[string]string), + } + + for _, attribute := range bag.Attributes { + k, v, err := convertAttribute(&attribute) + if err != nil { + return nil, err + } + block.Headers[k] = v + } + + switch { + case bag.Id.Equal(oidCertBag): + block.Type = certificateType + certsData, err := decodeCertBag(bag.Value.Bytes) + if err != nil { + return nil, err + } + block.Bytes = certsData + case bag.Id.Equal(oidPKCS8ShroundedKeyBag): + block.Type = privateKeyType + + key, err := decodePkcs8ShroudedKeyBag(bag.Value.Bytes, password) + if err != nil { + return nil, err + } + + switch key := key.(type) { + case *rsa.PrivateKey: + block.Bytes = x509.MarshalPKCS1PrivateKey(key) + case *ecdsa.PrivateKey: + block.Bytes, err = x509.MarshalECPrivateKey(key) + if err != nil { + return nil, err + } + default: + return nil, errors.New("found unknown private key type in PKCS#8 wrapping") + } + default: + return nil, errors.New("don't know how to convert a safe bag of type " + bag.Id.String()) + } + return block, nil +} + +func convertAttribute(attribute *pkcs12Attribute) (key, value string, err error) { + isString := false + + switch { + case attribute.Id.Equal(oidFriendlyName): + key = "friendlyName" + isString = true + case attribute.Id.Equal(oidLocalKeyID): + key = "localKeyId" + case attribute.Id.Equal(oidMicrosoftCSPName): + // This key is chosen to match OpenSSL. + key = "Microsoft CSP Name" + isString = true + default: + return "", "", errors.New("pkcs12: unknown attribute with OID " + attribute.Id.String()) + } + + if isString { + if err := unmarshal(attribute.Value.Bytes, &attribute.Value); err != nil { + return "", "", err + } + if value, err = decodeBMPString(attribute.Value.Bytes); err != nil { + return "", "", err + } + } else { + var id []byte + if err := unmarshal(attribute.Value.Bytes, &id); err != nil { + return "", "", err + } + value = hex.EncodeToString(id) + } + + return key, value, nil +} + +// Decode extracts a certificate and private key from pfxData. This function +// assumes that there is only one certificate and only one private key in the +// pfxData. +func Decode(pfxData []byte, password string) (privateKey interface{}, certificate *x509.Certificate, err error) { + encodedPassword, err := bmpString(password) + if err != nil { + return nil, nil, err + } + + bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword) + if err != nil { + return nil, nil, err + } + + if len(bags) != 2 { + err = errors.New("pkcs12: expected exactly two safe bags in the PFX PDU") + return + } + + for _, bag := range bags { + switch { + case bag.Id.Equal(oidCertBag): + if certificate != nil { + err = errors.New("pkcs12: expected exactly one certificate bag") + } + + certsData, err := decodeCertBag(bag.Value.Bytes) + if err != nil { + return nil, nil, err + } + certs, err := x509.ParseCertificates(certsData) + if err != nil { + return nil, nil, err + } + if len(certs) != 1 { + err = errors.New("pkcs12: expected exactly one certificate in the certBag") + return nil, nil, err + } + certificate = certs[0] + + case bag.Id.Equal(oidPKCS8ShroundedKeyBag): + if privateKey != nil { + err = errors.New("pkcs12: expected exactly one key bag") + } + + if privateKey, err = decodePkcs8ShroudedKeyBag(bag.Value.Bytes, encodedPassword); err != nil { + return nil, nil, err + } + } + } + + if certificate == nil { + return nil, nil, errors.New("pkcs12: certificate missing") + } + if privateKey == nil { + return nil, nil, errors.New("pkcs12: private key missing") + } + + return +} + +func getSafeContents(p12Data, password []byte) (bags []safeBag, updatedPassword []byte, err error) { + pfx := new(pfxPdu) + if err := unmarshal(p12Data, pfx); err != nil { + return nil, nil, errors.New("pkcs12: error reading P12 data: " + err.Error()) + } + + if pfx.Version != 3 { + return nil, nil, NotImplementedError("can only decode v3 PFX PDU's") + } + + if !pfx.AuthSafe.ContentType.Equal(oidDataContentType) { + return nil, nil, NotImplementedError("only password-protected PFX is implemented") + } + + // unmarshal the explicit bytes in the content for type 'data' + if err := unmarshal(pfx.AuthSafe.Content.Bytes, &pfx.AuthSafe.Content); err != nil { + return nil, nil, err + } + + if len(pfx.MacData.Mac.Algorithm.Algorithm) == 0 { + return nil, nil, errors.New("pkcs12: no MAC in data") + } + + if err := verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password); err != nil { + if err == ErrIncorrectPassword && len(password) == 2 && password[0] == 0 && password[1] == 0 { + // some implementations use an empty byte array + // for the empty string password try one more + // time with empty-empty password + password = nil + err = verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password) + } + if err != nil { + return nil, nil, err + } + } + + var authenticatedSafe []contentInfo + if err := unmarshal(pfx.AuthSafe.Content.Bytes, &authenticatedSafe); err != nil { + return nil, nil, err + } + + if len(authenticatedSafe) != 2 { + return nil, nil, NotImplementedError("expected exactly two items in the authenticated safe") + } + + for _, ci := range authenticatedSafe { + var data []byte + + switch { + case ci.ContentType.Equal(oidDataContentType): + if err := unmarshal(ci.Content.Bytes, &data); err != nil { + return nil, nil, err + } + case ci.ContentType.Equal(oidEncryptedDataContentType): + var encryptedData encryptedData + if err := unmarshal(ci.Content.Bytes, &encryptedData); err != nil { + return nil, nil, err + } + if encryptedData.Version != 0 { + return nil, nil, NotImplementedError("only version 0 of EncryptedData is supported") + } + if data, err = pbDecrypt(encryptedData.EncryptedContentInfo, password); err != nil { + return nil, nil, err + } + default: + return nil, nil, NotImplementedError("only data and encryptedData content types are supported in authenticated safe") + } + + var safeContents []safeBag + if err := unmarshal(data, &safeContents); err != nil { + return nil, nil, err + } + bags = append(bags, safeContents...) + } + + return bags, password, nil +} diff --git a/vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go b/vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go new file mode 100644 index 0000000..14dd2a6 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go @@ -0,0 +1,138 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "crypto/rsa" + "crypto/tls" + "encoding/base64" + "encoding/pem" + "testing" +) + +func TestPfx(t *testing.T) { + for commonName, base64P12 := range testdata { + p12, _ := base64.StdEncoding.DecodeString(base64P12) + + priv, cert, err := Decode(p12, "") + if err != nil { + t.Fatal(err) + } + + if err := priv.(*rsa.PrivateKey).Validate(); err != nil { + t.Errorf("error while validating private key: %v", err) + } + + if cert.Subject.CommonName != commonName { + t.Errorf("expected common name to be %q, but found %q", commonName, cert.Subject.CommonName) + } + } +} + +func TestPEM(t *testing.T) { + for commonName, base64P12 := range testdata { + p12, _ := base64.StdEncoding.DecodeString(base64P12) + + blocks, err := ToPEM(p12, "") + if err != nil { + t.Fatalf("error while converting to PEM: %s", err) + } + + var pemData []byte + for _, b := range blocks { + pemData = append(pemData, pem.EncodeToMemory(b)...) + } + + cert, err := tls.X509KeyPair(pemData, pemData) + if err != nil { + t.Errorf("err while converting to key pair: %v", err) + } + config := tls.Config{ + Certificates: []tls.Certificate{cert}, + } + config.BuildNameToCertificate() + + if _, exists := config.NameToCertificate[commonName]; !exists { + t.Errorf("did not find our cert in PEM?: %v", config.NameToCertificate) + } + } +} + +func ExampleToPEM() { + p12, _ := base64.StdEncoding.DecodeString(`MIIJzgIBAzCCCZQGCS ... CA+gwggPk==`) + + blocks, err := ToPEM(p12, "password") + if err != nil { + panic(err) + } + + var pemData []byte + for _, b := range blocks { + pemData = append(pemData, pem.EncodeToMemory(b)...) + } + + // then use PEM data for tls to construct tls certificate: + cert, err := tls.X509KeyPair(pemData, pemData) + if err != nil { + panic(err) + } + + config := &tls.Config{ + Certificates: []tls.Certificate{cert}, + } + + _ = config +} + +var testdata = map[string]string{ + // 'null' password test case + "Windows Azure Tools": `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`, + // empty string password test case + "testing@example.com": `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 +HQ8CAggA`, +} diff --git a/vendor/golang.org/x/crypto/pkcs12/safebags.go b/vendor/golang.org/x/crypto/pkcs12/safebags.go new file mode 100644 index 0000000..def1f7b --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/safebags.go @@ -0,0 +1,57 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "crypto/x509" + "encoding/asn1" + "errors" +) + +var ( + // see https://tools.ietf.org/html/rfc7292#appendix-D + oidCertTypeX509Certificate = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 22, 1}) + oidPKCS8ShroundedKeyBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 2}) + oidCertBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 3}) +) + +type certBag struct { + Id asn1.ObjectIdentifier + Data []byte `asn1:"tag:0,explicit"` +} + +func decodePkcs8ShroudedKeyBag(asn1Data, password []byte) (privateKey interface{}, err error) { + pkinfo := new(encryptedPrivateKeyInfo) + if err = unmarshal(asn1Data, pkinfo); err != nil { + return nil, errors.New("pkcs12: error decoding PKCS#8 shrouded key bag: " + err.Error()) + } + + pkData, err := pbDecrypt(pkinfo, password) + if err != nil { + return nil, errors.New("pkcs12: error decrypting PKCS#8 shrouded key bag: " + err.Error()) + } + + ret := new(asn1.RawValue) + if err = unmarshal(pkData, ret); err != nil { + return nil, errors.New("pkcs12: error unmarshaling decrypted private key: " + err.Error()) + } + + if privateKey, err = x509.ParsePKCS8PrivateKey(pkData); err != nil { + return nil, errors.New("pkcs12: error parsing PKCS#8 private key: " + err.Error()) + } + + return privateKey, nil +} + +func decodeCertBag(asn1Data []byte) (x509Certificates []byte, err error) { + bag := new(certBag) + if err := unmarshal(asn1Data, bag); err != nil { + return nil, errors.New("pkcs12: error decoding cert bag: " + err.Error()) + } + if !bag.Id.Equal(oidCertTypeX509Certificate) { + return nil, NotImplementedError("only X509 certificates are supported") + } + return bag.Data, nil +} diff --git a/vendor/golang.org/x/crypto/poly1305/poly1305.go b/vendor/golang.org/x/crypto/poly1305/poly1305.go new file mode 100644 index 0000000..4a5f826 --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/poly1305.go @@ -0,0 +1,32 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package poly1305 implements Poly1305 one-time message authentication code as specified in http://cr.yp.to/mac/poly1305-20050329.pdf. + +Poly1305 is a fast, one-time authentication function. It is infeasible for an +attacker to generate an authenticator for a message without the key. However, a +key must only be used for a single message. Authenticating two different +messages with the same key allows an attacker to forge authenticators for other +messages with the same key. + +Poly1305 was originally coupled with AES in order to make Poly1305-AES. AES was +used with a fixed key in order to generate one-time keys from an nonce. +However, in this package AES isn't used and the one-time key is specified +directly. +*/ +package poly1305 // import "golang.org/x/crypto/poly1305" + +import "crypto/subtle" + +// TagSize is the size, in bytes, of a poly1305 authenticator. +const TagSize = 16 + +// Verify returns true if mac is a valid authenticator for m with the given +// key. +func Verify(mac *[16]byte, m []byte, key *[32]byte) bool { + var tmp [16]byte + Sum(&tmp, m, key) + return subtle.ConstantTimeCompare(tmp[:], mac[:]) == 1 +} diff --git a/vendor/golang.org/x/crypto/poly1305/poly1305_amd64.s b/vendor/golang.org/x/crypto/poly1305/poly1305_amd64.s new file mode 100644 index 0000000..431c432 --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/poly1305_amd64.s @@ -0,0 +1,133 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +#include "textflag.h" + +#define POLY1305_ADD(msg, h0, h1, h2) \ + ADDQ 0(msg), h0; \ + ADCQ 8(msg), h1; \ + ADCQ $1, h2; \ + LEAQ 16(msg), msg + +#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3) \ + MOVQ r0, AX; \ + MULQ h0; \ + MOVQ AX, t0; \ + MOVQ DX, t1; \ + MOVQ r0, AX; \ + MULQ h1; \ + ADDQ AX, t1; \ + ADCQ $0, DX; \ + MOVQ r0, t2; \ + IMULQ h2, t2; \ + ADDQ DX, t2; \ + \ + MOVQ r1, AX; \ + MULQ h0; \ + ADDQ AX, t1; \ + ADCQ $0, DX; \ + MOVQ DX, h0; \ + MOVQ r1, t3; \ + IMULQ h2, t3; \ + MOVQ r1, AX; \ + MULQ h1; \ + ADDQ AX, t2; \ + ADCQ DX, t3; \ + ADDQ h0, t2; \ + ADCQ $0, t3; \ + \ + MOVQ t0, h0; \ + MOVQ t1, h1; \ + MOVQ t2, h2; \ + ANDQ $3, h2; \ + MOVQ t2, t0; \ + ANDQ $0xFFFFFFFFFFFFFFFC, t0; \ + ADDQ t0, h0; \ + ADCQ t3, h1; \ + ADCQ $0, h2; \ + SHRQ $2, t3, t2; \ + SHRQ $2, t3; \ + ADDQ t2, h0; \ + ADCQ t3, h1; \ + ADCQ $0, h2 + +DATA poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF +DATA poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC +GLOBL poly1305Mask<>(SB), RODATA, $16 + +// func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]key) +TEXT ·poly1305(SB), $0-32 + MOVQ out+0(FP), DI + MOVQ m+8(FP), SI + MOVQ mlen+16(FP), R15 + MOVQ key+24(FP), AX + + MOVQ SP, BP + ANDQ $0xFFFFFFFFFFFFFFF0, SP + SUBQ $32, SP + + MOVOU 0(AX), X0 + MOVOU 16(AX), X1 + MOVOU poly1305Mask<>(SB), X2 + PAND X2, X0 + MOVO X0, 0(SP) + MOVO X1, 16(SP) + + XORQ R8, R8 // h0 + XORQ R9, R9 // h1 + XORQ R10, R10 // h2 + MOVQ 0(SP), R11 // r0 + MOVQ 8(SP), R12 // r1 + + CMPQ R15, $16 + JB bytes_between_0_and_15 + +loop: + POLY1305_ADD(SI, R8, R9, R10) +multiply: + POLY1305_MUL(R8, R9, R10, R11, R12, BX, CX, R13, R14) + SUBQ $16, R15 + CMPQ R15, $16 + JAE loop + +bytes_between_0_and_15: + TESTQ R15, R15 + JZ done + MOVQ $1, BX + XORQ CX, CX + XORQ R13, R13 + ADDQ R15, SI + +flush_buffer: + SHLQ $8, BX, CX + SHLQ $8, BX + MOVB -1(SI), R13 + XORQ R13, BX + DECQ SI + DECQ R15 + JNZ flush_buffer + + ADDQ BX, R8 + ADCQ CX, R9 + ADCQ $0, R10 + MOVQ $16, R15 + JMP multiply + +done: + MOVQ R8, AX + MOVQ R9, BX + SUBQ $0xFFFFFFFFFFFFFFFB, AX + SBBQ $0xFFFFFFFFFFFFFFFF, BX + SBBQ $3, R10 + CMOVQCS R8, AX + CMOVQCS R9, BX + ADDQ 16(SP), AX + ADCQ 24(SP), BX + + MOVQ BP, SP + MOVQ AX, 0(DI) + MOVQ BX, 8(DI) + RET diff --git a/vendor/golang.org/x/crypto/poly1305/poly1305_arm.s b/vendor/golang.org/x/crypto/poly1305/poly1305_arm.s new file mode 100644 index 0000000..c153867 --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/poly1305_arm.s @@ -0,0 +1,379 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 5a from the public +// domain source by Andrew Moon: github.com/floodyberry/poly1305-opt/blob/master/app/extensions/poly1305. + +// +build arm,!gccgo,!appengine + +DATA poly1305_init_constants_armv6<>+0x00(SB)/4, $0x3ffffff +DATA poly1305_init_constants_armv6<>+0x04(SB)/4, $0x3ffff03 +DATA poly1305_init_constants_armv6<>+0x08(SB)/4, $0x3ffc0ff +DATA poly1305_init_constants_armv6<>+0x0c(SB)/4, $0x3f03fff +DATA poly1305_init_constants_armv6<>+0x10(SB)/4, $0x00fffff +GLOBL poly1305_init_constants_armv6<>(SB), 8, $20 + +// Warning: the linker may use R11 to synthesize certain instructions. Please +// take care and verify that no synthetic instructions use it. + +TEXT poly1305_init_ext_armv6<>(SB),4,$-4 + MOVM.DB.W [R4-R11], (R13) + MOVM.IA.W (R1), [R2-R5] + MOVW $poly1305_init_constants_armv6<>(SB), R7 + MOVW R2, R8 + MOVW R2>>26, R9 + MOVW R3>>20, g + MOVW R4>>14, R11 + MOVW R5>>8, R12 + ORR R3<<6, R9, R9 + ORR R4<<12, g, g + ORR R5<<18, R11, R11 + MOVM.IA (R7), [R2-R6] + AND R8, R2, R2 + AND R9, R3, R3 + AND g, R4, R4 + AND R11, R5, R5 + AND R12, R6, R6 + MOVM.IA.W [R2-R6], (R0) + EOR R2, R2, R2 + EOR R3, R3, R3 + EOR R4, R4, R4 + EOR R5, R5, R5 + EOR R6, R6, R6 + MOVM.IA.W [R2-R6], (R0) + MOVM.IA.W (R1), [R2-R5] + MOVM.IA [R2-R6], (R0) + MOVM.IA.W (R13), [R4-R11] + RET + +#define MOVW_UNALIGNED(Rsrc, Rdst, Rtmp, offset) \ + MOVBU (offset+0)(Rsrc), Rtmp; \ + MOVBU Rtmp, (offset+0)(Rdst); \ + MOVBU (offset+1)(Rsrc), Rtmp; \ + MOVBU Rtmp, (offset+1)(Rdst); \ + MOVBU (offset+2)(Rsrc), Rtmp; \ + MOVBU Rtmp, (offset+2)(Rdst); \ + MOVBU (offset+3)(Rsrc), Rtmp; \ + MOVBU Rtmp, (offset+3)(Rdst) + +TEXT poly1305_blocks_armv6<>(SB),4,$-4 + MOVM.DB.W [R4, R5, R6, R7, R8, R9, g, R11, R14], (R13) + SUB $128, R13 + MOVW R0, 36(R13) + MOVW R1, 40(R13) + MOVW R2, 44(R13) + MOVW R1, R14 + MOVW R2, R12 + MOVW 56(R0), R8 + WORD $0xe1180008 // TST R8, R8 not working see issue 5921 + EOR R6, R6, R6 + MOVW.EQ $(1<<24), R6 + MOVW R6, 32(R13) + ADD $64, R13, g + MOVM.IA (R0), [R0-R9] + MOVM.IA [R0-R4], (g) + CMP $16, R12 + BLO poly1305_blocks_armv6_done +poly1305_blocks_armv6_mainloop: + WORD $0xe31e0003 // TST R14, #3 not working see issue 5921 + BEQ poly1305_blocks_armv6_mainloop_aligned + ADD $48, R13, g + MOVW_UNALIGNED(R14, g, R0, 0) + MOVW_UNALIGNED(R14, g, R0, 4) + MOVW_UNALIGNED(R14, g, R0, 8) + MOVW_UNALIGNED(R14, g, R0, 12) + MOVM.IA (g), [R0-R3] + ADD $16, R14 + B poly1305_blocks_armv6_mainloop_loaded +poly1305_blocks_armv6_mainloop_aligned: + MOVM.IA.W (R14), [R0-R3] +poly1305_blocks_armv6_mainloop_loaded: + MOVW R0>>26, g + MOVW R1>>20, R11 + MOVW R2>>14, R12 + MOVW R14, 40(R13) + MOVW R3>>8, R4 + ORR R1<<6, g, g + ORR R2<<12, R11, R11 + ORR R3<<18, R12, R12 + BIC $0xfc000000, R0, R0 + BIC $0xfc000000, g, g + MOVW 32(R13), R3 + BIC $0xfc000000, R11, R11 + BIC $0xfc000000, R12, R12 + ADD R0, R5, R5 + ADD g, R6, R6 + ORR R3, R4, R4 + ADD R11, R7, R7 + ADD $64, R13, R14 + ADD R12, R8, R8 + ADD R4, R9, R9 + MOVM.IA (R14), [R0-R4] + MULLU R4, R5, (R11, g) + MULLU R3, R5, (R14, R12) + MULALU R3, R6, (R11, g) + MULALU R2, R6, (R14, R12) + MULALU R2, R7, (R11, g) + MULALU R1, R7, (R14, R12) + ADD R4<<2, R4, R4 + ADD R3<<2, R3, R3 + MULALU R1, R8, (R11, g) + MULALU R0, R8, (R14, R12) + MULALU R0, R9, (R11, g) + MULALU R4, R9, (R14, R12) + MOVW g, 24(R13) + MOVW R11, 28(R13) + MOVW R12, 16(R13) + MOVW R14, 20(R13) + MULLU R2, R5, (R11, g) + MULLU R1, R5, (R14, R12) + MULALU R1, R6, (R11, g) + MULALU R0, R6, (R14, R12) + MULALU R0, R7, (R11, g) + MULALU R4, R7, (R14, R12) + ADD R2<<2, R2, R2 + ADD R1<<2, R1, R1 + MULALU R4, R8, (R11, g) + MULALU R3, R8, (R14, R12) + MULALU R3, R9, (R11, g) + MULALU R2, R9, (R14, R12) + MOVW g, 8(R13) + MOVW R11, 12(R13) + MOVW R12, 0(R13) + MOVW R14, w+4(SP) + MULLU R0, R5, (R11, g) + MULALU R4, R6, (R11, g) + MULALU R3, R7, (R11, g) + MULALU R2, R8, (R11, g) + MULALU R1, R9, (R11, g) + MOVM.IA (R13), [R0-R7] + MOVW g>>26, R12 + MOVW R4>>26, R14 + ORR R11<<6, R12, R12 + ORR R5<<6, R14, R14 + BIC $0xfc000000, g, g + BIC $0xfc000000, R4, R4 + ADD.S R12, R0, R0 + ADC $0, R1, R1 + ADD.S R14, R6, R6 + ADC $0, R7, R7 + MOVW R0>>26, R12 + MOVW R6>>26, R14 + ORR R1<<6, R12, R12 + ORR R7<<6, R14, R14 + BIC $0xfc000000, R0, R0 + BIC $0xfc000000, R6, R6 + ADD R14<<2, R14, R14 + ADD.S R12, R2, R2 + ADC $0, R3, R3 + ADD R14, g, g + MOVW R2>>26, R12 + MOVW g>>26, R14 + ORR R3<<6, R12, R12 + BIC $0xfc000000, g, R5 + BIC $0xfc000000, R2, R7 + ADD R12, R4, R4 + ADD R14, R0, R0 + MOVW R4>>26, R12 + BIC $0xfc000000, R4, R8 + ADD R12, R6, R9 + MOVW w+44(SP), R12 + MOVW w+40(SP), R14 + MOVW R0, R6 + CMP $32, R12 + SUB $16, R12, R12 + MOVW R12, 44(R13) + BHS poly1305_blocks_armv6_mainloop +poly1305_blocks_armv6_done: + MOVW 36(R13), R12 + MOVW R5, 20(R12) + MOVW R6, 24(R12) + MOVW R7, 28(R12) + MOVW R8, 32(R12) + MOVW R9, 36(R12) + ADD $128, R13, R13 + MOVM.IA.W (R13), [R4, R5, R6, R7, R8, R9, g, R11, R14] + RET + +#define MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp) \ + MOVBU.P 1(Rsrc), Rtmp; \ + MOVBU.P Rtmp, 1(Rdst); \ + MOVBU.P 1(Rsrc), Rtmp; \ + MOVBU.P Rtmp, 1(Rdst) + +#define MOVWP_UNALIGNED(Rsrc, Rdst, Rtmp) \ + MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp); \ + MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp) + +TEXT poly1305_finish_ext_armv6<>(SB),4,$-4 + MOVM.DB.W [R4, R5, R6, R7, R8, R9, g, R11, R14], (R13) + SUB $16, R13, R13 + MOVW R0, R5 + MOVW R1, R6 + MOVW R2, R7 + MOVW R3, R8 + AND.S R2, R2, R2 + BEQ poly1305_finish_ext_armv6_noremaining + EOR R0, R0 + MOVW R13, R9 + MOVW R0, 0(R13) + MOVW R0, 4(R13) + MOVW R0, 8(R13) + MOVW R0, 12(R13) + WORD $0xe3110003 // TST R1, #3 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_aligned + WORD $0xe3120008 // TST R2, #8 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip8 + MOVWP_UNALIGNED(R1, R9, g) + MOVWP_UNALIGNED(R1, R9, g) +poly1305_finish_ext_armv6_skip8: + WORD $0xe3120004 // TST $4, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip4 + MOVWP_UNALIGNED(R1, R9, g) +poly1305_finish_ext_armv6_skip4: + WORD $0xe3120002 // TST $2, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip2 + MOVHUP_UNALIGNED(R1, R9, g) + B poly1305_finish_ext_armv6_skip2 +poly1305_finish_ext_armv6_aligned: + WORD $0xe3120008 // TST R2, #8 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip8_aligned + MOVM.IA.W (R1), [g-R11] + MOVM.IA.W [g-R11], (R9) +poly1305_finish_ext_armv6_skip8_aligned: + WORD $0xe3120004 // TST $4, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip4_aligned + MOVW.P 4(R1), g + MOVW.P g, 4(R9) +poly1305_finish_ext_armv6_skip4_aligned: + WORD $0xe3120002 // TST $2, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip2 + MOVHU.P 2(R1), g + MOVH.P g, 2(R9) +poly1305_finish_ext_armv6_skip2: + WORD $0xe3120001 // TST $1, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip1 + MOVBU.P 1(R1), g + MOVBU.P g, 1(R9) +poly1305_finish_ext_armv6_skip1: + MOVW $1, R11 + MOVBU R11, 0(R9) + MOVW R11, 56(R5) + MOVW R5, R0 + MOVW R13, R1 + MOVW $16, R2 + BL poly1305_blocks_armv6<>(SB) +poly1305_finish_ext_armv6_noremaining: + MOVW 20(R5), R0 + MOVW 24(R5), R1 + MOVW 28(R5), R2 + MOVW 32(R5), R3 + MOVW 36(R5), R4 + MOVW R4>>26, R12 + BIC $0xfc000000, R4, R4 + ADD R12<<2, R12, R12 + ADD R12, R0, R0 + MOVW R0>>26, R12 + BIC $0xfc000000, R0, R0 + ADD R12, R1, R1 + MOVW R1>>26, R12 + BIC $0xfc000000, R1, R1 + ADD R12, R2, R2 + MOVW R2>>26, R12 + BIC $0xfc000000, R2, R2 + ADD R12, R3, R3 + MOVW R3>>26, R12 + BIC $0xfc000000, R3, R3 + ADD R12, R4, R4 + ADD $5, R0, R6 + MOVW R6>>26, R12 + BIC $0xfc000000, R6, R6 + ADD R12, R1, R7 + MOVW R7>>26, R12 + BIC $0xfc000000, R7, R7 + ADD R12, R2, g + MOVW g>>26, R12 + BIC $0xfc000000, g, g + ADD R12, R3, R11 + MOVW $-(1<<26), R12 + ADD R11>>26, R12, R12 + BIC $0xfc000000, R11, R11 + ADD R12, R4, R14 + MOVW R14>>31, R12 + SUB $1, R12 + AND R12, R6, R6 + AND R12, R7, R7 + AND R12, g, g + AND R12, R11, R11 + AND R12, R14, R14 + MVN R12, R12 + AND R12, R0, R0 + AND R12, R1, R1 + AND R12, R2, R2 + AND R12, R3, R3 + AND R12, R4, R4 + ORR R6, R0, R0 + ORR R7, R1, R1 + ORR g, R2, R2 + ORR R11, R3, R3 + ORR R14, R4, R4 + ORR R1<<26, R0, R0 + MOVW R1>>6, R1 + ORR R2<<20, R1, R1 + MOVW R2>>12, R2 + ORR R3<<14, R2, R2 + MOVW R3>>18, R3 + ORR R4<<8, R3, R3 + MOVW 40(R5), R6 + MOVW 44(R5), R7 + MOVW 48(R5), g + MOVW 52(R5), R11 + ADD.S R6, R0, R0 + ADC.S R7, R1, R1 + ADC.S g, R2, R2 + ADC.S R11, R3, R3 + MOVM.IA [R0-R3], (R8) + MOVW R5, R12 + EOR R0, R0, R0 + EOR R1, R1, R1 + EOR R2, R2, R2 + EOR R3, R3, R3 + EOR R4, R4, R4 + EOR R5, R5, R5 + EOR R6, R6, R6 + EOR R7, R7, R7 + MOVM.IA.W [R0-R7], (R12) + MOVM.IA [R0-R7], (R12) + ADD $16, R13, R13 + MOVM.IA.W (R13), [R4, R5, R6, R7, R8, R9, g, R11, R14] + RET + +// func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]key) +TEXT ·poly1305_auth_armv6(SB),0,$280-16 + MOVW out+0(FP), R4 + MOVW m+4(FP), R5 + MOVW mlen+8(FP), R6 + MOVW key+12(FP), R7 + + MOVW R13, R8 + BIC $63, R13 + SUB $64, R13, R13 + MOVW R13, R0 + MOVW R7, R1 + BL poly1305_init_ext_armv6<>(SB) + BIC.S $15, R6, R2 + BEQ poly1305_auth_armv6_noblocks + MOVW R13, R0 + MOVW R5, R1 + ADD R2, R5, R5 + SUB R2, R6, R6 + BL poly1305_blocks_armv6<>(SB) +poly1305_auth_armv6_noblocks: + MOVW R13, R0 + MOVW R5, R1 + MOVW R6, R2 + MOVW R4, R3 + BL poly1305_finish_ext_armv6<>(SB) + MOVW R8, R13 + RET diff --git a/vendor/golang.org/x/crypto/poly1305/poly1305_test.go b/vendor/golang.org/x/crypto/poly1305/poly1305_test.go new file mode 100644 index 0000000..91b8e2b --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/poly1305_test.go @@ -0,0 +1,92 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package poly1305 + +import ( + "bytes" + "testing" + "unsafe" +) + +var testData = []struct { + in, k, correct []byte +}{ + { + []byte("Hello world!"), + []byte("this is 32-byte key for Poly1305"), + []byte{0xa6, 0xf7, 0x45, 0x00, 0x8f, 0x81, 0xc9, 0x16, 0xa2, 0x0d, 0xcc, 0x74, 0xee, 0xf2, 0xb2, 0xf0}, + }, + { + make([]byte, 32), + []byte("this is 32-byte key for Poly1305"), + []byte{0x49, 0xec, 0x78, 0x09, 0x0e, 0x48, 0x1e, 0xc6, 0xc2, 0x6b, 0x33, 0xb9, 0x1c, 0xcc, 0x03, 0x07}, + }, + { + make([]byte, 2007), + []byte("this is 32-byte key for Poly1305"), + []byte{0xda, 0x84, 0xbc, 0xab, 0x02, 0x67, 0x6c, 0x38, 0xcd, 0xb0, 0x15, 0x60, 0x42, 0x74, 0xc2, 0xaa}, + }, + { + make([]byte, 2007), + make([]byte, 32), + make([]byte, 16), + }, + { + // This test triggers an edge-case. See https://go-review.googlesource.com/#/c/30101/. + []byte{0x81, 0xd8, 0xb2, 0xe4, 0x6a, 0x25, 0x21, 0x3b, 0x58, 0xfe, 0xe4, 0x21, 0x3a, 0x2a, 0x28, 0xe9, 0x21, 0xc1, 0x2a, 0x96, 0x32, 0x51, 0x6d, 0x3b, 0x73, 0x27, 0x27, 0x27, 0xbe, 0xcf, 0x21, 0x29}, + []byte{0x3b, 0x3a, 0x29, 0xe9, 0x3b, 0x21, 0x3a, 0x5c, 0x5c, 0x3b, 0x3b, 0x05, 0x3a, 0x3a, 0x8c, 0x0d}, + []byte{0x6d, 0xc1, 0x8b, 0x8c, 0x34, 0x4c, 0xd7, 0x99, 0x27, 0x11, 0x8b, 0xbe, 0x84, 0xb7, 0xf3, 0x14}, + }, +} + +func testSum(t *testing.T, unaligned bool) { + var out [16]byte + var key [32]byte + + for i, v := range testData { + in := v.in + if unaligned { + in = unalignBytes(in) + } + copy(key[:], v.k) + Sum(&out, in, &key) + if !bytes.Equal(out[:], v.correct) { + t.Errorf("%d: expected %x, got %x", i, v.correct, out[:]) + } + } +} + +func TestSum(t *testing.T) { testSum(t, false) } +func TestSumUnaligned(t *testing.T) { testSum(t, true) } + +func benchmark(b *testing.B, size int, unaligned bool) { + var out [16]byte + var key [32]byte + in := make([]byte, size) + if unaligned { + in = unalignBytes(in) + } + b.SetBytes(int64(len(in))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + Sum(&out, in, &key) + } +} + +func Benchmark64(b *testing.B) { benchmark(b, 64, false) } +func Benchmark1K(b *testing.B) { benchmark(b, 1024, false) } +func Benchmark64Unaligned(b *testing.B) { benchmark(b, 64, true) } +func Benchmark1KUnaligned(b *testing.B) { benchmark(b, 1024, true) } + +func unalignBytes(in []byte) []byte { + out := make([]byte, len(in)+1) + if uintptr(unsafe.Pointer(&out[0]))&(unsafe.Alignof(uint32(0))-1) == 0 { + out = out[1:] + } else { + out = out[:len(in)] + } + copy(out, in) + return out +} diff --git a/vendor/golang.org/x/crypto/poly1305/sum_amd64.go b/vendor/golang.org/x/crypto/poly1305/sum_amd64.go new file mode 100644 index 0000000..6775c70 --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/sum_amd64.go @@ -0,0 +1,24 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +package poly1305 + +// This function is implemented in poly1305_amd64.s + +//go:noescape + +func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]byte) + +// Sum generates an authenticator for m using a one-time key and puts the +// 16-byte result into out. Authenticating two different messages with the same +// key allows an attacker to forge messages at will. +func Sum(out *[16]byte, m []byte, key *[32]byte) { + var mPtr *byte + if len(m) > 0 { + mPtr = &m[0] + } + poly1305(out, mPtr, uint64(len(m)), key) +} diff --git a/vendor/golang.org/x/crypto/poly1305/sum_arm.go b/vendor/golang.org/x/crypto/poly1305/sum_arm.go new file mode 100644 index 0000000..50b979c --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/sum_arm.go @@ -0,0 +1,24 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,!gccgo,!appengine + +package poly1305 + +// This function is implemented in poly1305_arm.s + +//go:noescape + +func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]byte) + +// Sum generates an authenticator for m using a one-time key and puts the +// 16-byte result into out. Authenticating two different messages with the same +// key allows an attacker to forge messages at will. +func Sum(out *[16]byte, m []byte, key *[32]byte) { + var mPtr *byte + if len(m) > 0 { + mPtr = &m[0] + } + poly1305_auth_armv6(out, mPtr, uint32(len(m)), key) +} diff --git a/vendor/golang.org/x/crypto/poly1305/sum_ref.go b/vendor/golang.org/x/crypto/poly1305/sum_ref.go new file mode 100644 index 0000000..0b24fc7 --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/sum_ref.go @@ -0,0 +1,1531 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64,!arm gccgo appengine + +package poly1305 + +// Based on original, public domain implementation from NaCl by D. J. +// Bernstein. + +import "math" + +const ( + alpham80 = 0.00000000558793544769287109375 + alpham48 = 24.0 + alpham16 = 103079215104.0 + alpha0 = 6755399441055744.0 + alpha18 = 1770887431076116955136.0 + alpha32 = 29014219670751100192948224.0 + alpha50 = 7605903601369376408980219232256.0 + alpha64 = 124615124604835863084731911901282304.0 + alpha82 = 32667107224410092492483962313449748299776.0 + alpha96 = 535217884764734955396857238543560676143529984.0 + alpha112 = 35076039295941670036888435985190792471742381031424.0 + alpha130 = 9194973245195333150150082162901855101712434733101613056.0 + scale = 0.0000000000000000000000000000000000000036734198463196484624023016788195177431833298649127735047148490821200539357960224151611328125 + offset0 = 6755408030990331.0 + offset1 = 29014256564239239022116864.0 + offset2 = 124615283061160854719918951570079744.0 + offset3 = 535219245894202480694386063513315216128475136.0 +) + +// Sum generates an authenticator for m using a one-time key and puts the +// 16-byte result into out. Authenticating two different messages with the same +// key allows an attacker to forge messages at will. +func Sum(out *[16]byte, m []byte, key *[32]byte) { + r := key + s := key[16:] + var ( + y7 float64 + y6 float64 + y1 float64 + y0 float64 + y5 float64 + y4 float64 + x7 float64 + x6 float64 + x1 float64 + x0 float64 + y3 float64 + y2 float64 + x5 float64 + r3lowx0 float64 + x4 float64 + r0lowx6 float64 + x3 float64 + r3highx0 float64 + x2 float64 + r0highx6 float64 + r0lowx0 float64 + sr1lowx6 float64 + r0highx0 float64 + sr1highx6 float64 + sr3low float64 + r1lowx0 float64 + sr2lowx6 float64 + r1highx0 float64 + sr2highx6 float64 + r2lowx0 float64 + sr3lowx6 float64 + r2highx0 float64 + sr3highx6 float64 + r1highx4 float64 + r1lowx4 float64 + r0highx4 float64 + r0lowx4 float64 + sr3highx4 float64 + sr3lowx4 float64 + sr2highx4 float64 + sr2lowx4 float64 + r0lowx2 float64 + r0highx2 float64 + r1lowx2 float64 + r1highx2 float64 + r2lowx2 float64 + r2highx2 float64 + sr3lowx2 float64 + sr3highx2 float64 + z0 float64 + z1 float64 + z2 float64 + z3 float64 + m0 int64 + m1 int64 + m2 int64 + m3 int64 + m00 uint32 + m01 uint32 + m02 uint32 + m03 uint32 + m10 uint32 + m11 uint32 + m12 uint32 + m13 uint32 + m20 uint32 + m21 uint32 + m22 uint32 + m23 uint32 + m30 uint32 + m31 uint32 + m32 uint32 + m33 uint64 + lbelow2 int32 + lbelow3 int32 + lbelow4 int32 + lbelow5 int32 + lbelow6 int32 + lbelow7 int32 + lbelow8 int32 + lbelow9 int32 + lbelow10 int32 + lbelow11 int32 + lbelow12 int32 + lbelow13 int32 + lbelow14 int32 + lbelow15 int32 + s00 uint32 + s01 uint32 + s02 uint32 + s03 uint32 + s10 uint32 + s11 uint32 + s12 uint32 + s13 uint32 + s20 uint32 + s21 uint32 + s22 uint32 + s23 uint32 + s30 uint32 + s31 uint32 + s32 uint32 + s33 uint32 + bits32 uint64 + f uint64 + f0 uint64 + f1 uint64 + f2 uint64 + f3 uint64 + f4 uint64 + g uint64 + g0 uint64 + g1 uint64 + g2 uint64 + g3 uint64 + g4 uint64 + ) + + var p int32 + + l := int32(len(m)) + + r00 := uint32(r[0]) + + r01 := uint32(r[1]) + + r02 := uint32(r[2]) + r0 := int64(2151) + + r03 := uint32(r[3]) + r03 &= 15 + r0 <<= 51 + + r10 := uint32(r[4]) + r10 &= 252 + r01 <<= 8 + r0 += int64(r00) + + r11 := uint32(r[5]) + r02 <<= 16 + r0 += int64(r01) + + r12 := uint32(r[6]) + r03 <<= 24 + r0 += int64(r02) + + r13 := uint32(r[7]) + r13 &= 15 + r1 := int64(2215) + r0 += int64(r03) + + d0 := r0 + r1 <<= 51 + r2 := int64(2279) + + r20 := uint32(r[8]) + r20 &= 252 + r11 <<= 8 + r1 += int64(r10) + + r21 := uint32(r[9]) + r12 <<= 16 + r1 += int64(r11) + + r22 := uint32(r[10]) + r13 <<= 24 + r1 += int64(r12) + + r23 := uint32(r[11]) + r23 &= 15 + r2 <<= 51 + r1 += int64(r13) + + d1 := r1 + r21 <<= 8 + r2 += int64(r20) + + r30 := uint32(r[12]) + r30 &= 252 + r22 <<= 16 + r2 += int64(r21) + + r31 := uint32(r[13]) + r23 <<= 24 + r2 += int64(r22) + + r32 := uint32(r[14]) + r2 += int64(r23) + r3 := int64(2343) + + d2 := r2 + r3 <<= 51 + + r33 := uint32(r[15]) + r33 &= 15 + r31 <<= 8 + r3 += int64(r30) + + r32 <<= 16 + r3 += int64(r31) + + r33 <<= 24 + r3 += int64(r32) + + r3 += int64(r33) + h0 := alpha32 - alpha32 + + d3 := r3 + h1 := alpha32 - alpha32 + + h2 := alpha32 - alpha32 + + h3 := alpha32 - alpha32 + + h4 := alpha32 - alpha32 + + r0low := math.Float64frombits(uint64(d0)) + h5 := alpha32 - alpha32 + + r1low := math.Float64frombits(uint64(d1)) + h6 := alpha32 - alpha32 + + r2low := math.Float64frombits(uint64(d2)) + h7 := alpha32 - alpha32 + + r0low -= alpha0 + + r1low -= alpha32 + + r2low -= alpha64 + + r0high := r0low + alpha18 + + r3low := math.Float64frombits(uint64(d3)) + + r1high := r1low + alpha50 + sr1low := scale * r1low + + r2high := r2low + alpha82 + sr2low := scale * r2low + + r0high -= alpha18 + r0high_stack := r0high + + r3low -= alpha96 + + r1high -= alpha50 + r1high_stack := r1high + + sr1high := sr1low + alpham80 + + r0low -= r0high + + r2high -= alpha82 + sr3low = scale * r3low + + sr2high := sr2low + alpham48 + + r1low -= r1high + r1low_stack := r1low + + sr1high -= alpham80 + sr1high_stack := sr1high + + r2low -= r2high + r2low_stack := r2low + + sr2high -= alpham48 + sr2high_stack := sr2high + + r3high := r3low + alpha112 + r0low_stack := r0low + + sr1low -= sr1high + sr1low_stack := sr1low + + sr3high := sr3low + alpham16 + r2high_stack := r2high + + sr2low -= sr2high + sr2low_stack := sr2low + + r3high -= alpha112 + r3high_stack := r3high + + sr3high -= alpham16 + sr3high_stack := sr3high + + r3low -= r3high + r3low_stack := r3low + + sr3low -= sr3high + sr3low_stack := sr3low + + if l < 16 { + goto addatmost15bytes + } + + m00 = uint32(m[p+0]) + m0 = 2151 + + m0 <<= 51 + m1 = 2215 + m01 = uint32(m[p+1]) + + m1 <<= 51 + m2 = 2279 + m02 = uint32(m[p+2]) + + m2 <<= 51 + m3 = 2343 + m03 = uint32(m[p+3]) + + m10 = uint32(m[p+4]) + m01 <<= 8 + m0 += int64(m00) + + m11 = uint32(m[p+5]) + m02 <<= 16 + m0 += int64(m01) + + m12 = uint32(m[p+6]) + m03 <<= 24 + m0 += int64(m02) + + m13 = uint32(m[p+7]) + m3 <<= 51 + m0 += int64(m03) + + m20 = uint32(m[p+8]) + m11 <<= 8 + m1 += int64(m10) + + m21 = uint32(m[p+9]) + m12 <<= 16 + m1 += int64(m11) + + m22 = uint32(m[p+10]) + m13 <<= 24 + m1 += int64(m12) + + m23 = uint32(m[p+11]) + m1 += int64(m13) + + m30 = uint32(m[p+12]) + m21 <<= 8 + m2 += int64(m20) + + m31 = uint32(m[p+13]) + m22 <<= 16 + m2 += int64(m21) + + m32 = uint32(m[p+14]) + m23 <<= 24 + m2 += int64(m22) + + m33 = uint64(m[p+15]) + m2 += int64(m23) + + d0 = m0 + m31 <<= 8 + m3 += int64(m30) + + d1 = m1 + m32 <<= 16 + m3 += int64(m31) + + d2 = m2 + m33 += 256 + + m33 <<= 24 + m3 += int64(m32) + + m3 += int64(m33) + d3 = m3 + + p += 16 + l -= 16 + + z0 = math.Float64frombits(uint64(d0)) + + z1 = math.Float64frombits(uint64(d1)) + + z2 = math.Float64frombits(uint64(d2)) + + z3 = math.Float64frombits(uint64(d3)) + + z0 -= alpha0 + + z1 -= alpha32 + + z2 -= alpha64 + + z3 -= alpha96 + + h0 += z0 + + h1 += z1 + + h3 += z2 + + h5 += z3 + + if l < 16 { + goto multiplyaddatmost15bytes + } + +multiplyaddatleast16bytes: + + m2 = 2279 + m20 = uint32(m[p+8]) + y7 = h7 + alpha130 + + m2 <<= 51 + m3 = 2343 + m21 = uint32(m[p+9]) + y6 = h6 + alpha130 + + m3 <<= 51 + m0 = 2151 + m22 = uint32(m[p+10]) + y1 = h1 + alpha32 + + m0 <<= 51 + m1 = 2215 + m23 = uint32(m[p+11]) + y0 = h0 + alpha32 + + m1 <<= 51 + m30 = uint32(m[p+12]) + y7 -= alpha130 + + m21 <<= 8 + m2 += int64(m20) + m31 = uint32(m[p+13]) + y6 -= alpha130 + + m22 <<= 16 + m2 += int64(m21) + m32 = uint32(m[p+14]) + y1 -= alpha32 + + m23 <<= 24 + m2 += int64(m22) + m33 = uint64(m[p+15]) + y0 -= alpha32 + + m2 += int64(m23) + m00 = uint32(m[p+0]) + y5 = h5 + alpha96 + + m31 <<= 8 + m3 += int64(m30) + m01 = uint32(m[p+1]) + y4 = h4 + alpha96 + + m32 <<= 16 + m02 = uint32(m[p+2]) + x7 = h7 - y7 + y7 *= scale + + m33 += 256 + m03 = uint32(m[p+3]) + x6 = h6 - y6 + y6 *= scale + + m33 <<= 24 + m3 += int64(m31) + m10 = uint32(m[p+4]) + x1 = h1 - y1 + + m01 <<= 8 + m3 += int64(m32) + m11 = uint32(m[p+5]) + x0 = h0 - y0 + + m3 += int64(m33) + m0 += int64(m00) + m12 = uint32(m[p+6]) + y5 -= alpha96 + + m02 <<= 16 + m0 += int64(m01) + m13 = uint32(m[p+7]) + y4 -= alpha96 + + m03 <<= 24 + m0 += int64(m02) + d2 = m2 + x1 += y7 + + m0 += int64(m03) + d3 = m3 + x0 += y6 + + m11 <<= 8 + m1 += int64(m10) + d0 = m0 + x7 += y5 + + m12 <<= 16 + m1 += int64(m11) + x6 += y4 + + m13 <<= 24 + m1 += int64(m12) + y3 = h3 + alpha64 + + m1 += int64(m13) + d1 = m1 + y2 = h2 + alpha64 + + x0 += x1 + + x6 += x7 + + y3 -= alpha64 + r3low = r3low_stack + + y2 -= alpha64 + r0low = r0low_stack + + x5 = h5 - y5 + r3lowx0 = r3low * x0 + r3high = r3high_stack + + x4 = h4 - y4 + r0lowx6 = r0low * x6 + r0high = r0high_stack + + x3 = h3 - y3 + r3highx0 = r3high * x0 + sr1low = sr1low_stack + + x2 = h2 - y2 + r0highx6 = r0high * x6 + sr1high = sr1high_stack + + x5 += y3 + r0lowx0 = r0low * x0 + r1low = r1low_stack + + h6 = r3lowx0 + r0lowx6 + sr1lowx6 = sr1low * x6 + r1high = r1high_stack + + x4 += y2 + r0highx0 = r0high * x0 + sr2low = sr2low_stack + + h7 = r3highx0 + r0highx6 + sr1highx6 = sr1high * x6 + sr2high = sr2high_stack + + x3 += y1 + r1lowx0 = r1low * x0 + r2low = r2low_stack + + h0 = r0lowx0 + sr1lowx6 + sr2lowx6 = sr2low * x6 + r2high = r2high_stack + + x2 += y0 + r1highx0 = r1high * x0 + sr3low = sr3low_stack + + h1 = r0highx0 + sr1highx6 + sr2highx6 = sr2high * x6 + sr3high = sr3high_stack + + x4 += x5 + r2lowx0 = r2low * x0 + z2 = math.Float64frombits(uint64(d2)) + + h2 = r1lowx0 + sr2lowx6 + sr3lowx6 = sr3low * x6 + + x2 += x3 + r2highx0 = r2high * x0 + z3 = math.Float64frombits(uint64(d3)) + + h3 = r1highx0 + sr2highx6 + sr3highx6 = sr3high * x6 + + r1highx4 = r1high * x4 + z2 -= alpha64 + + h4 = r2lowx0 + sr3lowx6 + r1lowx4 = r1low * x4 + + r0highx4 = r0high * x4 + z3 -= alpha96 + + h5 = r2highx0 + sr3highx6 + r0lowx4 = r0low * x4 + + h7 += r1highx4 + sr3highx4 = sr3high * x4 + + h6 += r1lowx4 + sr3lowx4 = sr3low * x4 + + h5 += r0highx4 + sr2highx4 = sr2high * x4 + + h4 += r0lowx4 + sr2lowx4 = sr2low * x4 + + h3 += sr3highx4 + r0lowx2 = r0low * x2 + + h2 += sr3lowx4 + r0highx2 = r0high * x2 + + h1 += sr2highx4 + r1lowx2 = r1low * x2 + + h0 += sr2lowx4 + r1highx2 = r1high * x2 + + h2 += r0lowx2 + r2lowx2 = r2low * x2 + + h3 += r0highx2 + r2highx2 = r2high * x2 + + h4 += r1lowx2 + sr3lowx2 = sr3low * x2 + + h5 += r1highx2 + sr3highx2 = sr3high * x2 + + p += 16 + l -= 16 + h6 += r2lowx2 + + h7 += r2highx2 + + z1 = math.Float64frombits(uint64(d1)) + h0 += sr3lowx2 + + z0 = math.Float64frombits(uint64(d0)) + h1 += sr3highx2 + + z1 -= alpha32 + + z0 -= alpha0 + + h5 += z3 + + h3 += z2 + + h1 += z1 + + h0 += z0 + + if l >= 16 { + goto multiplyaddatleast16bytes + } + +multiplyaddatmost15bytes: + + y7 = h7 + alpha130 + + y6 = h6 + alpha130 + + y1 = h1 + alpha32 + + y0 = h0 + alpha32 + + y7 -= alpha130 + + y6 -= alpha130 + + y1 -= alpha32 + + y0 -= alpha32 + + y5 = h5 + alpha96 + + y4 = h4 + alpha96 + + x7 = h7 - y7 + y7 *= scale + + x6 = h6 - y6 + y6 *= scale + + x1 = h1 - y1 + + x0 = h0 - y0 + + y5 -= alpha96 + + y4 -= alpha96 + + x1 += y7 + + x0 += y6 + + x7 += y5 + + x6 += y4 + + y3 = h3 + alpha64 + + y2 = h2 + alpha64 + + x0 += x1 + + x6 += x7 + + y3 -= alpha64 + r3low = r3low_stack + + y2 -= alpha64 + r0low = r0low_stack + + x5 = h5 - y5 + r3lowx0 = r3low * x0 + r3high = r3high_stack + + x4 = h4 - y4 + r0lowx6 = r0low * x6 + r0high = r0high_stack + + x3 = h3 - y3 + r3highx0 = r3high * x0 + sr1low = sr1low_stack + + x2 = h2 - y2 + r0highx6 = r0high * x6 + sr1high = sr1high_stack + + x5 += y3 + r0lowx0 = r0low * x0 + r1low = r1low_stack + + h6 = r3lowx0 + r0lowx6 + sr1lowx6 = sr1low * x6 + r1high = r1high_stack + + x4 += y2 + r0highx0 = r0high * x0 + sr2low = sr2low_stack + + h7 = r3highx0 + r0highx6 + sr1highx6 = sr1high * x6 + sr2high = sr2high_stack + + x3 += y1 + r1lowx0 = r1low * x0 + r2low = r2low_stack + + h0 = r0lowx0 + sr1lowx6 + sr2lowx6 = sr2low * x6 + r2high = r2high_stack + + x2 += y0 + r1highx0 = r1high * x0 + sr3low = sr3low_stack + + h1 = r0highx0 + sr1highx6 + sr2highx6 = sr2high * x6 + sr3high = sr3high_stack + + x4 += x5 + r2lowx0 = r2low * x0 + + h2 = r1lowx0 + sr2lowx6 + sr3lowx6 = sr3low * x6 + + x2 += x3 + r2highx0 = r2high * x0 + + h3 = r1highx0 + sr2highx6 + sr3highx6 = sr3high * x6 + + r1highx4 = r1high * x4 + + h4 = r2lowx0 + sr3lowx6 + r1lowx4 = r1low * x4 + + r0highx4 = r0high * x4 + + h5 = r2highx0 + sr3highx6 + r0lowx4 = r0low * x4 + + h7 += r1highx4 + sr3highx4 = sr3high * x4 + + h6 += r1lowx4 + sr3lowx4 = sr3low * x4 + + h5 += r0highx4 + sr2highx4 = sr2high * x4 + + h4 += r0lowx4 + sr2lowx4 = sr2low * x4 + + h3 += sr3highx4 + r0lowx2 = r0low * x2 + + h2 += sr3lowx4 + r0highx2 = r0high * x2 + + h1 += sr2highx4 + r1lowx2 = r1low * x2 + + h0 += sr2lowx4 + r1highx2 = r1high * x2 + + h2 += r0lowx2 + r2lowx2 = r2low * x2 + + h3 += r0highx2 + r2highx2 = r2high * x2 + + h4 += r1lowx2 + sr3lowx2 = sr3low * x2 + + h5 += r1highx2 + sr3highx2 = sr3high * x2 + + h6 += r2lowx2 + + h7 += r2highx2 + + h0 += sr3lowx2 + + h1 += sr3highx2 + +addatmost15bytes: + + if l == 0 { + goto nomorebytes + } + + lbelow2 = l - 2 + + lbelow3 = l - 3 + + lbelow2 >>= 31 + lbelow4 = l - 4 + + m00 = uint32(m[p+0]) + lbelow3 >>= 31 + p += lbelow2 + + m01 = uint32(m[p+1]) + lbelow4 >>= 31 + p += lbelow3 + + m02 = uint32(m[p+2]) + p += lbelow4 + m0 = 2151 + + m03 = uint32(m[p+3]) + m0 <<= 51 + m1 = 2215 + + m0 += int64(m00) + m01 &^= uint32(lbelow2) + + m02 &^= uint32(lbelow3) + m01 -= uint32(lbelow2) + + m01 <<= 8 + m03 &^= uint32(lbelow4) + + m0 += int64(m01) + lbelow2 -= lbelow3 + + m02 += uint32(lbelow2) + lbelow3 -= lbelow4 + + m02 <<= 16 + m03 += uint32(lbelow3) + + m03 <<= 24 + m0 += int64(m02) + + m0 += int64(m03) + lbelow5 = l - 5 + + lbelow6 = l - 6 + lbelow7 = l - 7 + + lbelow5 >>= 31 + lbelow8 = l - 8 + + lbelow6 >>= 31 + p += lbelow5 + + m10 = uint32(m[p+4]) + lbelow7 >>= 31 + p += lbelow6 + + m11 = uint32(m[p+5]) + lbelow8 >>= 31 + p += lbelow7 + + m12 = uint32(m[p+6]) + m1 <<= 51 + p += lbelow8 + + m13 = uint32(m[p+7]) + m10 &^= uint32(lbelow5) + lbelow4 -= lbelow5 + + m10 += uint32(lbelow4) + lbelow5 -= lbelow6 + + m11 &^= uint32(lbelow6) + m11 += uint32(lbelow5) + + m11 <<= 8 + m1 += int64(m10) + + m1 += int64(m11) + m12 &^= uint32(lbelow7) + + lbelow6 -= lbelow7 + m13 &^= uint32(lbelow8) + + m12 += uint32(lbelow6) + lbelow7 -= lbelow8 + + m12 <<= 16 + m13 += uint32(lbelow7) + + m13 <<= 24 + m1 += int64(m12) + + m1 += int64(m13) + m2 = 2279 + + lbelow9 = l - 9 + m3 = 2343 + + lbelow10 = l - 10 + lbelow11 = l - 11 + + lbelow9 >>= 31 + lbelow12 = l - 12 + + lbelow10 >>= 31 + p += lbelow9 + + m20 = uint32(m[p+8]) + lbelow11 >>= 31 + p += lbelow10 + + m21 = uint32(m[p+9]) + lbelow12 >>= 31 + p += lbelow11 + + m22 = uint32(m[p+10]) + m2 <<= 51 + p += lbelow12 + + m23 = uint32(m[p+11]) + m20 &^= uint32(lbelow9) + lbelow8 -= lbelow9 + + m20 += uint32(lbelow8) + lbelow9 -= lbelow10 + + m21 &^= uint32(lbelow10) + m21 += uint32(lbelow9) + + m21 <<= 8 + m2 += int64(m20) + + m2 += int64(m21) + m22 &^= uint32(lbelow11) + + lbelow10 -= lbelow11 + m23 &^= uint32(lbelow12) + + m22 += uint32(lbelow10) + lbelow11 -= lbelow12 + + m22 <<= 16 + m23 += uint32(lbelow11) + + m23 <<= 24 + m2 += int64(m22) + + m3 <<= 51 + lbelow13 = l - 13 + + lbelow13 >>= 31 + lbelow14 = l - 14 + + lbelow14 >>= 31 + p += lbelow13 + lbelow15 = l - 15 + + m30 = uint32(m[p+12]) + lbelow15 >>= 31 + p += lbelow14 + + m31 = uint32(m[p+13]) + p += lbelow15 + m2 += int64(m23) + + m32 = uint32(m[p+14]) + m30 &^= uint32(lbelow13) + lbelow12 -= lbelow13 + + m30 += uint32(lbelow12) + lbelow13 -= lbelow14 + + m3 += int64(m30) + m31 &^= uint32(lbelow14) + + m31 += uint32(lbelow13) + m32 &^= uint32(lbelow15) + + m31 <<= 8 + lbelow14 -= lbelow15 + + m3 += int64(m31) + m32 += uint32(lbelow14) + d0 = m0 + + m32 <<= 16 + m33 = uint64(lbelow15 + 1) + d1 = m1 + + m33 <<= 24 + m3 += int64(m32) + d2 = m2 + + m3 += int64(m33) + d3 = m3 + + z3 = math.Float64frombits(uint64(d3)) + + z2 = math.Float64frombits(uint64(d2)) + + z1 = math.Float64frombits(uint64(d1)) + + z0 = math.Float64frombits(uint64(d0)) + + z3 -= alpha96 + + z2 -= alpha64 + + z1 -= alpha32 + + z0 -= alpha0 + + h5 += z3 + + h3 += z2 + + h1 += z1 + + h0 += z0 + + y7 = h7 + alpha130 + + y6 = h6 + alpha130 + + y1 = h1 + alpha32 + + y0 = h0 + alpha32 + + y7 -= alpha130 + + y6 -= alpha130 + + y1 -= alpha32 + + y0 -= alpha32 + + y5 = h5 + alpha96 + + y4 = h4 + alpha96 + + x7 = h7 - y7 + y7 *= scale + + x6 = h6 - y6 + y6 *= scale + + x1 = h1 - y1 + + x0 = h0 - y0 + + y5 -= alpha96 + + y4 -= alpha96 + + x1 += y7 + + x0 += y6 + + x7 += y5 + + x6 += y4 + + y3 = h3 + alpha64 + + y2 = h2 + alpha64 + + x0 += x1 + + x6 += x7 + + y3 -= alpha64 + r3low = r3low_stack + + y2 -= alpha64 + r0low = r0low_stack + + x5 = h5 - y5 + r3lowx0 = r3low * x0 + r3high = r3high_stack + + x4 = h4 - y4 + r0lowx6 = r0low * x6 + r0high = r0high_stack + + x3 = h3 - y3 + r3highx0 = r3high * x0 + sr1low = sr1low_stack + + x2 = h2 - y2 + r0highx6 = r0high * x6 + sr1high = sr1high_stack + + x5 += y3 + r0lowx0 = r0low * x0 + r1low = r1low_stack + + h6 = r3lowx0 + r0lowx6 + sr1lowx6 = sr1low * x6 + r1high = r1high_stack + + x4 += y2 + r0highx0 = r0high * x0 + sr2low = sr2low_stack + + h7 = r3highx0 + r0highx6 + sr1highx6 = sr1high * x6 + sr2high = sr2high_stack + + x3 += y1 + r1lowx0 = r1low * x0 + r2low = r2low_stack + + h0 = r0lowx0 + sr1lowx6 + sr2lowx6 = sr2low * x6 + r2high = r2high_stack + + x2 += y0 + r1highx0 = r1high * x0 + sr3low = sr3low_stack + + h1 = r0highx0 + sr1highx6 + sr2highx6 = sr2high * x6 + sr3high = sr3high_stack + + x4 += x5 + r2lowx0 = r2low * x0 + + h2 = r1lowx0 + sr2lowx6 + sr3lowx6 = sr3low * x6 + + x2 += x3 + r2highx0 = r2high * x0 + + h3 = r1highx0 + sr2highx6 + sr3highx6 = sr3high * x6 + + r1highx4 = r1high * x4 + + h4 = r2lowx0 + sr3lowx6 + r1lowx4 = r1low * x4 + + r0highx4 = r0high * x4 + + h5 = r2highx0 + sr3highx6 + r0lowx4 = r0low * x4 + + h7 += r1highx4 + sr3highx4 = sr3high * x4 + + h6 += r1lowx4 + sr3lowx4 = sr3low * x4 + + h5 += r0highx4 + sr2highx4 = sr2high * x4 + + h4 += r0lowx4 + sr2lowx4 = sr2low * x4 + + h3 += sr3highx4 + r0lowx2 = r0low * x2 + + h2 += sr3lowx4 + r0highx2 = r0high * x2 + + h1 += sr2highx4 + r1lowx2 = r1low * x2 + + h0 += sr2lowx4 + r1highx2 = r1high * x2 + + h2 += r0lowx2 + r2lowx2 = r2low * x2 + + h3 += r0highx2 + r2highx2 = r2high * x2 + + h4 += r1lowx2 + sr3lowx2 = sr3low * x2 + + h5 += r1highx2 + sr3highx2 = sr3high * x2 + + h6 += r2lowx2 + + h7 += r2highx2 + + h0 += sr3lowx2 + + h1 += sr3highx2 + +nomorebytes: + + y7 = h7 + alpha130 + + y0 = h0 + alpha32 + + y1 = h1 + alpha32 + + y2 = h2 + alpha64 + + y7 -= alpha130 + + y3 = h3 + alpha64 + + y4 = h4 + alpha96 + + y5 = h5 + alpha96 + + x7 = h7 - y7 + y7 *= scale + + y0 -= alpha32 + + y1 -= alpha32 + + y2 -= alpha64 + + h6 += x7 + + y3 -= alpha64 + + y4 -= alpha96 + + y5 -= alpha96 + + y6 = h6 + alpha130 + + x0 = h0 - y0 + + x1 = h1 - y1 + + x2 = h2 - y2 + + y6 -= alpha130 + + x0 += y7 + + x3 = h3 - y3 + + x4 = h4 - y4 + + x5 = h5 - y5 + + x6 = h6 - y6 + + y6 *= scale + + x2 += y0 + + x3 += y1 + + x4 += y2 + + x0 += y6 + + x5 += y3 + + x6 += y4 + + x2 += x3 + + x0 += x1 + + x4 += x5 + + x6 += y5 + + x2 += offset1 + d1 = int64(math.Float64bits(x2)) + + x0 += offset0 + d0 = int64(math.Float64bits(x0)) + + x4 += offset2 + d2 = int64(math.Float64bits(x4)) + + x6 += offset3 + d3 = int64(math.Float64bits(x6)) + + f0 = uint64(d0) + + f1 = uint64(d1) + bits32 = math.MaxUint64 + + f2 = uint64(d2) + bits32 >>= 32 + + f3 = uint64(d3) + f = f0 >> 32 + + f0 &= bits32 + f &= 255 + + f1 += f + g0 = f0 + 5 + + g = g0 >> 32 + g0 &= bits32 + + f = f1 >> 32 + f1 &= bits32 + + f &= 255 + g1 = f1 + g + + g = g1 >> 32 + f2 += f + + f = f2 >> 32 + g1 &= bits32 + + f2 &= bits32 + f &= 255 + + f3 += f + g2 = f2 + g + + g = g2 >> 32 + g2 &= bits32 + + f4 = f3 >> 32 + f3 &= bits32 + + f4 &= 255 + g3 = f3 + g + + g = g3 >> 32 + g3 &= bits32 + + g4 = f4 + g + + g4 = g4 - 4 + s00 = uint32(s[0]) + + f = uint64(int64(g4) >> 63) + s01 = uint32(s[1]) + + f0 &= f + g0 &^= f + s02 = uint32(s[2]) + + f1 &= f + f0 |= g0 + s03 = uint32(s[3]) + + g1 &^= f + f2 &= f + s10 = uint32(s[4]) + + f3 &= f + g2 &^= f + s11 = uint32(s[5]) + + g3 &^= f + f1 |= g1 + s12 = uint32(s[6]) + + f2 |= g2 + f3 |= g3 + s13 = uint32(s[7]) + + s01 <<= 8 + f0 += uint64(s00) + s20 = uint32(s[8]) + + s02 <<= 16 + f0 += uint64(s01) + s21 = uint32(s[9]) + + s03 <<= 24 + f0 += uint64(s02) + s22 = uint32(s[10]) + + s11 <<= 8 + f1 += uint64(s10) + s23 = uint32(s[11]) + + s12 <<= 16 + f1 += uint64(s11) + s30 = uint32(s[12]) + + s13 <<= 24 + f1 += uint64(s12) + s31 = uint32(s[13]) + + f0 += uint64(s03) + f1 += uint64(s13) + s32 = uint32(s[14]) + + s21 <<= 8 + f2 += uint64(s20) + s33 = uint32(s[15]) + + s22 <<= 16 + f2 += uint64(s21) + + s23 <<= 24 + f2 += uint64(s22) + + s31 <<= 8 + f3 += uint64(s30) + + s32 <<= 16 + f3 += uint64(s31) + + s33 <<= 24 + f3 += uint64(s32) + + f2 += uint64(s23) + f3 += uint64(s33) + + out[0] = byte(f0) + f0 >>= 8 + out[1] = byte(f0) + f0 >>= 8 + out[2] = byte(f0) + f0 >>= 8 + out[3] = byte(f0) + f0 >>= 8 + f1 += f0 + + out[4] = byte(f1) + f1 >>= 8 + out[5] = byte(f1) + f1 >>= 8 + out[6] = byte(f1) + f1 >>= 8 + out[7] = byte(f1) + f1 >>= 8 + f2 += f1 + + out[8] = byte(f2) + f2 >>= 8 + out[9] = byte(f2) + f2 >>= 8 + out[10] = byte(f2) + f2 >>= 8 + out[11] = byte(f2) + f2 >>= 8 + f3 += f2 + + out[12] = byte(f3) + f3 >>= 8 + out[13] = byte(f3) + f3 >>= 8 + out[14] = byte(f3) + f3 >>= 8 + out[15] = byte(f3) +} diff --git a/vendor/golang.org/x/crypto/ripemd160/ripemd160.go b/vendor/golang.org/x/crypto/ripemd160/ripemd160.go new file mode 100644 index 0000000..6c6e842 --- /dev/null +++ b/vendor/golang.org/x/crypto/ripemd160/ripemd160.go @@ -0,0 +1,120 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ripemd160 implements the RIPEMD-160 hash algorithm. +package ripemd160 // import "golang.org/x/crypto/ripemd160" + +// RIPEMD-160 is designed by by Hans Dobbertin, Antoon Bosselaers, and Bart +// Preneel with specifications available at: +// http://homes.esat.kuleuven.be/~cosicart/pdf/AB-9601/AB-9601.pdf. + +import ( + "crypto" + "hash" +) + +func init() { + crypto.RegisterHash(crypto.RIPEMD160, New) +} + +// The size of the checksum in bytes. +const Size = 20 + +// The block size of the hash algorithm in bytes. +const BlockSize = 64 + +const ( + _s0 = 0x67452301 + _s1 = 0xefcdab89 + _s2 = 0x98badcfe + _s3 = 0x10325476 + _s4 = 0xc3d2e1f0 +) + +// digest represents the partial evaluation of a checksum. +type digest struct { + s [5]uint32 // running context + x [BlockSize]byte // temporary buffer + nx int // index into x + tc uint64 // total count of bytes processed +} + +func (d *digest) Reset() { + d.s[0], d.s[1], d.s[2], d.s[3], d.s[4] = _s0, _s1, _s2, _s3, _s4 + d.nx = 0 + d.tc = 0 +} + +// New returns a new hash.Hash computing the checksum. +func New() hash.Hash { + result := new(digest) + result.Reset() + return result +} + +func (d *digest) Size() int { return Size } + +func (d *digest) BlockSize() int { return BlockSize } + +func (d *digest) Write(p []byte) (nn int, err error) { + nn = len(p) + d.tc += uint64(nn) + if d.nx > 0 { + n := len(p) + if n > BlockSize-d.nx { + n = BlockSize - d.nx + } + for i := 0; i < n; i++ { + d.x[d.nx+i] = p[i] + } + d.nx += n + if d.nx == BlockSize { + _Block(d, d.x[0:]) + d.nx = 0 + } + p = p[n:] + } + n := _Block(d, p) + p = p[n:] + if len(p) > 0 { + d.nx = copy(d.x[:], p) + } + return +} + +func (d0 *digest) Sum(in []byte) []byte { + // Make a copy of d0 so that caller can keep writing and summing. + d := *d0 + + // Padding. Add a 1 bit and 0 bits until 56 bytes mod 64. + tc := d.tc + var tmp [64]byte + tmp[0] = 0x80 + if tc%64 < 56 { + d.Write(tmp[0 : 56-tc%64]) + } else { + d.Write(tmp[0 : 64+56-tc%64]) + } + + // Length in bits. + tc <<= 3 + for i := uint(0); i < 8; i++ { + tmp[i] = byte(tc >> (8 * i)) + } + d.Write(tmp[0:8]) + + if d.nx != 0 { + panic("d.nx != 0") + } + + var digest [Size]byte + for i, s := range d.s { + digest[i*4] = byte(s) + digest[i*4+1] = byte(s >> 8) + digest[i*4+2] = byte(s >> 16) + digest[i*4+3] = byte(s >> 24) + } + + return append(in, digest[:]...) +} diff --git a/vendor/golang.org/x/crypto/ripemd160/ripemd160_test.go b/vendor/golang.org/x/crypto/ripemd160/ripemd160_test.go new file mode 100644 index 0000000..5df1b25 --- /dev/null +++ b/vendor/golang.org/x/crypto/ripemd160/ripemd160_test.go @@ -0,0 +1,64 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ripemd160 + +// Test vectors are from: +// http://homes.esat.kuleuven.be/~bosselae/ripemd160.html + +import ( + "fmt" + "io" + "testing" +) + +type mdTest struct { + out string + in string +} + +var vectors = [...]mdTest{ + {"9c1185a5c5e9fc54612808977ee8f548b2258d31", ""}, + {"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe", "a"}, + {"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc", "abc"}, + {"5d0689ef49d2fae572b881b123a85ffa21595f36", "message digest"}, + {"f71c27109c692c1b56bbdceb5b9d2865b3708dbc", "abcdefghijklmnopqrstuvwxyz"}, + {"12a053384a9c0c88e405a06c27dcf49ada62eb2b", "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"}, + {"b0e20b6e3116640286ed3a87a5713079b21f5189", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"}, + {"9b752e45573d4b39f4dbd3323cab82bf63326bfb", "12345678901234567890123456789012345678901234567890123456789012345678901234567890"}, +} + +func TestVectors(t *testing.T) { + for i := 0; i < len(vectors); i++ { + tv := vectors[i] + md := New() + for j := 0; j < 3; j++ { + if j < 2 { + io.WriteString(md, tv.in) + } else { + io.WriteString(md, tv.in[0:len(tv.in)/2]) + md.Sum(nil) + io.WriteString(md, tv.in[len(tv.in)/2:]) + } + s := fmt.Sprintf("%x", md.Sum(nil)) + if s != tv.out { + t.Fatalf("RIPEMD-160[%d](%s) = %s, expected %s", j, tv.in, s, tv.out) + } + md.Reset() + } + } +} + +func TestMillionA(t *testing.T) { + md := New() + for i := 0; i < 100000; i++ { + io.WriteString(md, "aaaaaaaaaa") + } + out := "52783243c1697bdbe16d37f97f68f08325dc1528" + s := fmt.Sprintf("%x", md.Sum(nil)) + if s != out { + t.Fatalf("RIPEMD-160 (1 million 'a') = %s, expected %s", s, out) + } + md.Reset() +} diff --git a/vendor/golang.org/x/crypto/ripemd160/ripemd160block.go b/vendor/golang.org/x/crypto/ripemd160/ripemd160block.go new file mode 100644 index 0000000..7bc8e6c --- /dev/null +++ b/vendor/golang.org/x/crypto/ripemd160/ripemd160block.go @@ -0,0 +1,161 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// RIPEMD-160 block step. +// In its own file so that a faster assembly or C version +// can be substituted easily. + +package ripemd160 + +// work buffer indices and roll amounts for one line +var _n = [80]uint{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13, +} + +var _r = [80]uint{ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6, +} + +// same for the other parallel one +var n_ = [80]uint{ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11, +} + +var r_ = [80]uint{ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11, +} + +func _Block(md *digest, p []byte) int { + n := 0 + var x [16]uint32 + var alpha, beta uint32 + for len(p) >= BlockSize { + a, b, c, d, e := md.s[0], md.s[1], md.s[2], md.s[3], md.s[4] + aa, bb, cc, dd, ee := a, b, c, d, e + j := 0 + for i := 0; i < 16; i++ { + x[i] = uint32(p[j]) | uint32(p[j+1])<<8 | uint32(p[j+2])<<16 | uint32(p[j+3])<<24 + j += 4 + } + + // round 1 + i := 0 + for i < 16 { + alpha = a + (b ^ c ^ d) + x[_n[i]] + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb ^ (cc | ^dd)) + x[n_[i]] + 0x50a28be6 + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // round 2 + for i < 32 { + alpha = a + (b&c | ^b&d) + x[_n[i]] + 0x5a827999 + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb&dd | cc&^dd) + x[n_[i]] + 0x5c4dd124 + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // round 3 + for i < 48 { + alpha = a + (b | ^c ^ d) + x[_n[i]] + 0x6ed9eba1 + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb | ^cc ^ dd) + x[n_[i]] + 0x6d703ef3 + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // round 4 + for i < 64 { + alpha = a + (b&d | c&^d) + x[_n[i]] + 0x8f1bbcdc + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb&cc | ^bb&dd) + x[n_[i]] + 0x7a6d76e9 + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // round 5 + for i < 80 { + alpha = a + (b ^ (c | ^d)) + x[_n[i]] + 0xa953fd4e + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb ^ cc ^ dd) + x[n_[i]] + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // combine results + dd += c + md.s[1] + md.s[1] = md.s[2] + d + ee + md.s[2] = md.s[3] + e + aa + md.s[3] = md.s[4] + a + bb + md.s[4] = md.s[0] + b + cc + md.s[0] = dd + + p = p[BlockSize:] + n += BlockSize + } + return n +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go new file mode 100644 index 0000000..4c96147 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go @@ -0,0 +1,144 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package salsa provides low-level access to functions in the Salsa family. +package salsa // import "golang.org/x/crypto/salsa20/salsa" + +// Sigma is the Salsa20 constant for 256-bit keys. +var Sigma = [16]byte{'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'} + +// HSalsa20 applies the HSalsa20 core function to a 16-byte input in, 32-byte +// key k, and 16-byte constant c, and puts the result into the 32-byte array +// out. +func HSalsa20(out *[32]byte, in *[16]byte, k *[32]byte, c *[16]byte) { + x0 := uint32(c[0]) | uint32(c[1])<<8 | uint32(c[2])<<16 | uint32(c[3])<<24 + x1 := uint32(k[0]) | uint32(k[1])<<8 | uint32(k[2])<<16 | uint32(k[3])<<24 + x2 := uint32(k[4]) | uint32(k[5])<<8 | uint32(k[6])<<16 | uint32(k[7])<<24 + x3 := uint32(k[8]) | uint32(k[9])<<8 | uint32(k[10])<<16 | uint32(k[11])<<24 + x4 := uint32(k[12]) | uint32(k[13])<<8 | uint32(k[14])<<16 | uint32(k[15])<<24 + x5 := uint32(c[4]) | uint32(c[5])<<8 | uint32(c[6])<<16 | uint32(c[7])<<24 + x6 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 + x7 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 + x8 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 + x9 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 + x10 := uint32(c[8]) | uint32(c[9])<<8 | uint32(c[10])<<16 | uint32(c[11])<<24 + x11 := uint32(k[16]) | uint32(k[17])<<8 | uint32(k[18])<<16 | uint32(k[19])<<24 + x12 := uint32(k[20]) | uint32(k[21])<<8 | uint32(k[22])<<16 | uint32(k[23])<<24 + x13 := uint32(k[24]) | uint32(k[25])<<8 | uint32(k[26])<<16 | uint32(k[27])<<24 + x14 := uint32(k[28]) | uint32(k[29])<<8 | uint32(k[30])<<16 | uint32(k[31])<<24 + x15 := uint32(c[12]) | uint32(c[13])<<8 | uint32(c[14])<<16 | uint32(c[15])<<24 + + for i := 0; i < 20; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + out[0] = byte(x0) + out[1] = byte(x0 >> 8) + out[2] = byte(x0 >> 16) + out[3] = byte(x0 >> 24) + + out[4] = byte(x5) + out[5] = byte(x5 >> 8) + out[6] = byte(x5 >> 16) + out[7] = byte(x5 >> 24) + + out[8] = byte(x10) + out[9] = byte(x10 >> 8) + out[10] = byte(x10 >> 16) + out[11] = byte(x10 >> 24) + + out[12] = byte(x15) + out[13] = byte(x15 >> 8) + out[14] = byte(x15 >> 16) + out[15] = byte(x15 >> 24) + + out[16] = byte(x6) + out[17] = byte(x6 >> 8) + out[18] = byte(x6 >> 16) + out[19] = byte(x6 >> 24) + + out[20] = byte(x7) + out[21] = byte(x7 >> 8) + out[22] = byte(x7 >> 16) + out[23] = byte(x7 >> 24) + + out[24] = byte(x8) + out[25] = byte(x8 >> 8) + out[26] = byte(x8 >> 16) + out[27] = byte(x8 >> 24) + + out[28] = byte(x9) + out[29] = byte(x9 >> 8) + out[30] = byte(x9 >> 16) + out[31] = byte(x9 >> 24) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa2020_amd64.s b/vendor/golang.org/x/crypto/salsa20/salsa/salsa2020_amd64.s new file mode 100644 index 0000000..6e1df96 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa2020_amd64.s @@ -0,0 +1,902 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!appengine,!gccgo + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + +// func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte) +TEXT ·salsa2020XORKeyStream(SB),0,$512-40 + MOVQ out+0(FP),DI + MOVQ in+8(FP),SI + MOVQ n+16(FP),DX + MOVQ nonce+24(FP),CX + MOVQ key+32(FP),R8 + + MOVQ SP,R11 + MOVQ $31,R9 + NOTQ R9 + ANDQ R9,SP + ADDQ $32,SP + + MOVQ R11,352(SP) + MOVQ R12,360(SP) + MOVQ R13,368(SP) + MOVQ R14,376(SP) + MOVQ R15,384(SP) + MOVQ BX,392(SP) + MOVQ BP,400(SP) + MOVQ DX,R9 + MOVQ CX,DX + MOVQ R8,R10 + CMPQ R9,$0 + JBE DONE + START: + MOVL 20(R10),CX + MOVL 0(R10),R8 + MOVL 0(DX),AX + MOVL 16(R10),R11 + MOVL CX,0(SP) + MOVL R8, 4 (SP) + MOVL AX, 8 (SP) + MOVL R11, 12 (SP) + MOVL 8(DX),CX + MOVL 24(R10),R8 + MOVL 4(R10),AX + MOVL 4(DX),R11 + MOVL CX,16(SP) + MOVL R8, 20 (SP) + MOVL AX, 24 (SP) + MOVL R11, 28 (SP) + MOVL 12(DX),CX + MOVL 12(R10),DX + MOVL 28(R10),R8 + MOVL 8(R10),AX + MOVL DX,32(SP) + MOVL CX, 36 (SP) + MOVL R8, 40 (SP) + MOVL AX, 44 (SP) + MOVQ $1634760805,DX + MOVQ $857760878,CX + MOVQ $2036477234,R8 + MOVQ $1797285236,AX + MOVL DX,48(SP) + MOVL CX, 52 (SP) + MOVL R8, 56 (SP) + MOVL AX, 60 (SP) + CMPQ R9,$256 + JB BYTESBETWEEN1AND255 + MOVOA 48(SP),X0 + PSHUFL $0X55,X0,X1 + PSHUFL $0XAA,X0,X2 + PSHUFL $0XFF,X0,X3 + PSHUFL $0X00,X0,X0 + MOVOA X1,64(SP) + MOVOA X2,80(SP) + MOVOA X3,96(SP) + MOVOA X0,112(SP) + MOVOA 0(SP),X0 + PSHUFL $0XAA,X0,X1 + PSHUFL $0XFF,X0,X2 + PSHUFL $0X00,X0,X3 + PSHUFL $0X55,X0,X0 + MOVOA X1,128(SP) + MOVOA X2,144(SP) + MOVOA X3,160(SP) + MOVOA X0,176(SP) + MOVOA 16(SP),X0 + PSHUFL $0XFF,X0,X1 + PSHUFL $0X55,X0,X2 + PSHUFL $0XAA,X0,X0 + MOVOA X1,192(SP) + MOVOA X2,208(SP) + MOVOA X0,224(SP) + MOVOA 32(SP),X0 + PSHUFL $0X00,X0,X1 + PSHUFL $0XAA,X0,X2 + PSHUFL $0XFF,X0,X0 + MOVOA X1,240(SP) + MOVOA X2,256(SP) + MOVOA X0,272(SP) + BYTESATLEAST256: + MOVL 16(SP),DX + MOVL 36 (SP),CX + MOVL DX,288(SP) + MOVL CX,304(SP) + ADDQ $1,DX + SHLQ $32,CX + ADDQ CX,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX, 292 (SP) + MOVL CX, 308 (SP) + ADDQ $1,DX + SHLQ $32,CX + ADDQ CX,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX, 296 (SP) + MOVL CX, 312 (SP) + ADDQ $1,DX + SHLQ $32,CX + ADDQ CX,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX, 300 (SP) + MOVL CX, 316 (SP) + ADDQ $1,DX + SHLQ $32,CX + ADDQ CX,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX,16(SP) + MOVL CX, 36 (SP) + MOVQ R9,408(SP) + MOVQ $20,DX + MOVOA 64(SP),X0 + MOVOA 80(SP),X1 + MOVOA 96(SP),X2 + MOVOA 256(SP),X3 + MOVOA 272(SP),X4 + MOVOA 128(SP),X5 + MOVOA 144(SP),X6 + MOVOA 176(SP),X7 + MOVOA 192(SP),X8 + MOVOA 208(SP),X9 + MOVOA 224(SP),X10 + MOVOA 304(SP),X11 + MOVOA 112(SP),X12 + MOVOA 160(SP),X13 + MOVOA 240(SP),X14 + MOVOA 288(SP),X15 + MAINLOOP1: + MOVOA X1,320(SP) + MOVOA X2,336(SP) + MOVOA X13,X1 + PADDL X12,X1 + MOVOA X1,X2 + PSLLL $7,X1 + PXOR X1,X14 + PSRLL $25,X2 + PXOR X2,X14 + MOVOA X7,X1 + PADDL X0,X1 + MOVOA X1,X2 + PSLLL $7,X1 + PXOR X1,X11 + PSRLL $25,X2 + PXOR X2,X11 + MOVOA X12,X1 + PADDL X14,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X15 + PSRLL $23,X2 + PXOR X2,X15 + MOVOA X0,X1 + PADDL X11,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X9 + PSRLL $23,X2 + PXOR X2,X9 + MOVOA X14,X1 + PADDL X15,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X13 + PSRLL $19,X2 + PXOR X2,X13 + MOVOA X11,X1 + PADDL X9,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X7 + PSRLL $19,X2 + PXOR X2,X7 + MOVOA X15,X1 + PADDL X13,X1 + MOVOA X1,X2 + PSLLL $18,X1 + PXOR X1,X12 + PSRLL $14,X2 + PXOR X2,X12 + MOVOA 320(SP),X1 + MOVOA X12,320(SP) + MOVOA X9,X2 + PADDL X7,X2 + MOVOA X2,X12 + PSLLL $18,X2 + PXOR X2,X0 + PSRLL $14,X12 + PXOR X12,X0 + MOVOA X5,X2 + PADDL X1,X2 + MOVOA X2,X12 + PSLLL $7,X2 + PXOR X2,X3 + PSRLL $25,X12 + PXOR X12,X3 + MOVOA 336(SP),X2 + MOVOA X0,336(SP) + MOVOA X6,X0 + PADDL X2,X0 + MOVOA X0,X12 + PSLLL $7,X0 + PXOR X0,X4 + PSRLL $25,X12 + PXOR X12,X4 + MOVOA X1,X0 + PADDL X3,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X10 + PSRLL $23,X12 + PXOR X12,X10 + MOVOA X2,X0 + PADDL X4,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X8 + PSRLL $23,X12 + PXOR X12,X8 + MOVOA X3,X0 + PADDL X10,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X5 + PSRLL $19,X12 + PXOR X12,X5 + MOVOA X4,X0 + PADDL X8,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X6 + PSRLL $19,X12 + PXOR X12,X6 + MOVOA X10,X0 + PADDL X5,X0 + MOVOA X0,X12 + PSLLL $18,X0 + PXOR X0,X1 + PSRLL $14,X12 + PXOR X12,X1 + MOVOA 320(SP),X0 + MOVOA X1,320(SP) + MOVOA X4,X1 + PADDL X0,X1 + MOVOA X1,X12 + PSLLL $7,X1 + PXOR X1,X7 + PSRLL $25,X12 + PXOR X12,X7 + MOVOA X8,X1 + PADDL X6,X1 + MOVOA X1,X12 + PSLLL $18,X1 + PXOR X1,X2 + PSRLL $14,X12 + PXOR X12,X2 + MOVOA 336(SP),X12 + MOVOA X2,336(SP) + MOVOA X14,X1 + PADDL X12,X1 + MOVOA X1,X2 + PSLLL $7,X1 + PXOR X1,X5 + PSRLL $25,X2 + PXOR X2,X5 + MOVOA X0,X1 + PADDL X7,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X10 + PSRLL $23,X2 + PXOR X2,X10 + MOVOA X12,X1 + PADDL X5,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X8 + PSRLL $23,X2 + PXOR X2,X8 + MOVOA X7,X1 + PADDL X10,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X4 + PSRLL $19,X2 + PXOR X2,X4 + MOVOA X5,X1 + PADDL X8,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X14 + PSRLL $19,X2 + PXOR X2,X14 + MOVOA X10,X1 + PADDL X4,X1 + MOVOA X1,X2 + PSLLL $18,X1 + PXOR X1,X0 + PSRLL $14,X2 + PXOR X2,X0 + MOVOA 320(SP),X1 + MOVOA X0,320(SP) + MOVOA X8,X0 + PADDL X14,X0 + MOVOA X0,X2 + PSLLL $18,X0 + PXOR X0,X12 + PSRLL $14,X2 + PXOR X2,X12 + MOVOA X11,X0 + PADDL X1,X0 + MOVOA X0,X2 + PSLLL $7,X0 + PXOR X0,X6 + PSRLL $25,X2 + PXOR X2,X6 + MOVOA 336(SP),X2 + MOVOA X12,336(SP) + MOVOA X3,X0 + PADDL X2,X0 + MOVOA X0,X12 + PSLLL $7,X0 + PXOR X0,X13 + PSRLL $25,X12 + PXOR X12,X13 + MOVOA X1,X0 + PADDL X6,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X15 + PSRLL $23,X12 + PXOR X12,X15 + MOVOA X2,X0 + PADDL X13,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X9 + PSRLL $23,X12 + PXOR X12,X9 + MOVOA X6,X0 + PADDL X15,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X11 + PSRLL $19,X12 + PXOR X12,X11 + MOVOA X13,X0 + PADDL X9,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X3 + PSRLL $19,X12 + PXOR X12,X3 + MOVOA X15,X0 + PADDL X11,X0 + MOVOA X0,X12 + PSLLL $18,X0 + PXOR X0,X1 + PSRLL $14,X12 + PXOR X12,X1 + MOVOA X9,X0 + PADDL X3,X0 + MOVOA X0,X12 + PSLLL $18,X0 + PXOR X0,X2 + PSRLL $14,X12 + PXOR X12,X2 + MOVOA 320(SP),X12 + MOVOA 336(SP),X0 + SUBQ $2,DX + JA MAINLOOP1 + PADDL 112(SP),X12 + PADDL 176(SP),X7 + PADDL 224(SP),X10 + PADDL 272(SP),X4 + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + PSHUFL $0X39,X12,X12 + PSHUFL $0X39,X7,X7 + PSHUFL $0X39,X10,X10 + PSHUFL $0X39,X4,X4 + XORL 0(SI),DX + XORL 4(SI),CX + XORL 8(SI),R8 + XORL 12(SI),R9 + MOVL DX,0(DI) + MOVL CX,4(DI) + MOVL R8,8(DI) + MOVL R9,12(DI) + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + PSHUFL $0X39,X12,X12 + PSHUFL $0X39,X7,X7 + PSHUFL $0X39,X10,X10 + PSHUFL $0X39,X4,X4 + XORL 64(SI),DX + XORL 68(SI),CX + XORL 72(SI),R8 + XORL 76(SI),R9 + MOVL DX,64(DI) + MOVL CX,68(DI) + MOVL R8,72(DI) + MOVL R9,76(DI) + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + PSHUFL $0X39,X12,X12 + PSHUFL $0X39,X7,X7 + PSHUFL $0X39,X10,X10 + PSHUFL $0X39,X4,X4 + XORL 128(SI),DX + XORL 132(SI),CX + XORL 136(SI),R8 + XORL 140(SI),R9 + MOVL DX,128(DI) + MOVL CX,132(DI) + MOVL R8,136(DI) + MOVL R9,140(DI) + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + XORL 192(SI),DX + XORL 196(SI),CX + XORL 200(SI),R8 + XORL 204(SI),R9 + MOVL DX,192(DI) + MOVL CX,196(DI) + MOVL R8,200(DI) + MOVL R9,204(DI) + PADDL 240(SP),X14 + PADDL 64(SP),X0 + PADDL 128(SP),X5 + PADDL 192(SP),X8 + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + PSHUFL $0X39,X14,X14 + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X5,X5 + PSHUFL $0X39,X8,X8 + XORL 16(SI),DX + XORL 20(SI),CX + XORL 24(SI),R8 + XORL 28(SI),R9 + MOVL DX,16(DI) + MOVL CX,20(DI) + MOVL R8,24(DI) + MOVL R9,28(DI) + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + PSHUFL $0X39,X14,X14 + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X5,X5 + PSHUFL $0X39,X8,X8 + XORL 80(SI),DX + XORL 84(SI),CX + XORL 88(SI),R8 + XORL 92(SI),R9 + MOVL DX,80(DI) + MOVL CX,84(DI) + MOVL R8,88(DI) + MOVL R9,92(DI) + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + PSHUFL $0X39,X14,X14 + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X5,X5 + PSHUFL $0X39,X8,X8 + XORL 144(SI),DX + XORL 148(SI),CX + XORL 152(SI),R8 + XORL 156(SI),R9 + MOVL DX,144(DI) + MOVL CX,148(DI) + MOVL R8,152(DI) + MOVL R9,156(DI) + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + XORL 208(SI),DX + XORL 212(SI),CX + XORL 216(SI),R8 + XORL 220(SI),R9 + MOVL DX,208(DI) + MOVL CX,212(DI) + MOVL R8,216(DI) + MOVL R9,220(DI) + PADDL 288(SP),X15 + PADDL 304(SP),X11 + PADDL 80(SP),X1 + PADDL 144(SP),X6 + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + PSHUFL $0X39,X15,X15 + PSHUFL $0X39,X11,X11 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X6,X6 + XORL 32(SI),DX + XORL 36(SI),CX + XORL 40(SI),R8 + XORL 44(SI),R9 + MOVL DX,32(DI) + MOVL CX,36(DI) + MOVL R8,40(DI) + MOVL R9,44(DI) + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + PSHUFL $0X39,X15,X15 + PSHUFL $0X39,X11,X11 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X6,X6 + XORL 96(SI),DX + XORL 100(SI),CX + XORL 104(SI),R8 + XORL 108(SI),R9 + MOVL DX,96(DI) + MOVL CX,100(DI) + MOVL R8,104(DI) + MOVL R9,108(DI) + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + PSHUFL $0X39,X15,X15 + PSHUFL $0X39,X11,X11 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X6,X6 + XORL 160(SI),DX + XORL 164(SI),CX + XORL 168(SI),R8 + XORL 172(SI),R9 + MOVL DX,160(DI) + MOVL CX,164(DI) + MOVL R8,168(DI) + MOVL R9,172(DI) + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + XORL 224(SI),DX + XORL 228(SI),CX + XORL 232(SI),R8 + XORL 236(SI),R9 + MOVL DX,224(DI) + MOVL CX,228(DI) + MOVL R8,232(DI) + MOVL R9,236(DI) + PADDL 160(SP),X13 + PADDL 208(SP),X9 + PADDL 256(SP),X3 + PADDL 96(SP),X2 + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + PSHUFL $0X39,X13,X13 + PSHUFL $0X39,X9,X9 + PSHUFL $0X39,X3,X3 + PSHUFL $0X39,X2,X2 + XORL 48(SI),DX + XORL 52(SI),CX + XORL 56(SI),R8 + XORL 60(SI),R9 + MOVL DX,48(DI) + MOVL CX,52(DI) + MOVL R8,56(DI) + MOVL R9,60(DI) + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + PSHUFL $0X39,X13,X13 + PSHUFL $0X39,X9,X9 + PSHUFL $0X39,X3,X3 + PSHUFL $0X39,X2,X2 + XORL 112(SI),DX + XORL 116(SI),CX + XORL 120(SI),R8 + XORL 124(SI),R9 + MOVL DX,112(DI) + MOVL CX,116(DI) + MOVL R8,120(DI) + MOVL R9,124(DI) + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + PSHUFL $0X39,X13,X13 + PSHUFL $0X39,X9,X9 + PSHUFL $0X39,X3,X3 + PSHUFL $0X39,X2,X2 + XORL 176(SI),DX + XORL 180(SI),CX + XORL 184(SI),R8 + XORL 188(SI),R9 + MOVL DX,176(DI) + MOVL CX,180(DI) + MOVL R8,184(DI) + MOVL R9,188(DI) + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + XORL 240(SI),DX + XORL 244(SI),CX + XORL 248(SI),R8 + XORL 252(SI),R9 + MOVL DX,240(DI) + MOVL CX,244(DI) + MOVL R8,248(DI) + MOVL R9,252(DI) + MOVQ 408(SP),R9 + SUBQ $256,R9 + ADDQ $256,SI + ADDQ $256,DI + CMPQ R9,$256 + JAE BYTESATLEAST256 + CMPQ R9,$0 + JBE DONE + BYTESBETWEEN1AND255: + CMPQ R9,$64 + JAE NOCOPY + MOVQ DI,DX + LEAQ 416(SP),DI + MOVQ R9,CX + REP; MOVSB + LEAQ 416(SP),DI + LEAQ 416(SP),SI + NOCOPY: + MOVQ R9,408(SP) + MOVOA 48(SP),X0 + MOVOA 0(SP),X1 + MOVOA 16(SP),X2 + MOVOA 32(SP),X3 + MOVOA X1,X4 + MOVQ $20,CX + MAINLOOP2: + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X3 + PXOR X6,X3 + PADDL X3,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X3,X3 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X1 + PSHUFL $0X4E,X2,X2 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X1,X1 + PXOR X6,X0 + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X1 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X1,X1 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X3 + PSHUFL $0X4E,X2,X2 + PXOR X6,X3 + PADDL X3,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X3,X3 + PXOR X6,X0 + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X3 + PXOR X6,X3 + PADDL X3,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X3,X3 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X1 + PSHUFL $0X4E,X2,X2 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X1,X1 + PXOR X6,X0 + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X1 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X1,X1 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X3 + PSHUFL $0X4E,X2,X2 + PXOR X6,X3 + SUBQ $4,CX + PADDL X3,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PXOR X7,X7 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X3,X3 + PXOR X6,X0 + JA MAINLOOP2 + PADDL 48(SP),X0 + PADDL 0(SP),X1 + PADDL 16(SP),X2 + PADDL 32(SP),X3 + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X2,X2 + PSHUFL $0X39,X3,X3 + XORL 0(SI),CX + XORL 48(SI),R8 + XORL 32(SI),R9 + XORL 16(SI),AX + MOVL CX,0(DI) + MOVL R8,48(DI) + MOVL R9,32(DI) + MOVL AX,16(DI) + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X2,X2 + PSHUFL $0X39,X3,X3 + XORL 20(SI),CX + XORL 4(SI),R8 + XORL 52(SI),R9 + XORL 36(SI),AX + MOVL CX,20(DI) + MOVL R8,4(DI) + MOVL R9,52(DI) + MOVL AX,36(DI) + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X2,X2 + PSHUFL $0X39,X3,X3 + XORL 40(SI),CX + XORL 24(SI),R8 + XORL 8(SI),R9 + XORL 56(SI),AX + MOVL CX,40(DI) + MOVL R8,24(DI) + MOVL R9,8(DI) + MOVL AX,56(DI) + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + XORL 60(SI),CX + XORL 44(SI),R8 + XORL 28(SI),R9 + XORL 12(SI),AX + MOVL CX,60(DI) + MOVL R8,44(DI) + MOVL R9,28(DI) + MOVL AX,12(DI) + MOVQ 408(SP),R9 + MOVL 16(SP),CX + MOVL 36 (SP),R8 + ADDQ $1,CX + SHLQ $32,R8 + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $32,R8 + MOVL CX,16(SP) + MOVL R8, 36 (SP) + CMPQ R9,$64 + JA BYTESATLEAST65 + JAE BYTESATLEAST64 + MOVQ DI,SI + MOVQ DX,DI + MOVQ R9,CX + REP; MOVSB + BYTESATLEAST64: + DONE: + MOVQ 352(SP),R11 + MOVQ 360(SP),R12 + MOVQ 368(SP),R13 + MOVQ 376(SP),R14 + MOVQ 384(SP),R15 + MOVQ 392(SP),BX + MOVQ 400(SP),BP + MOVQ R11,SP + RET + BYTESATLEAST65: + SUBQ $64,R9 + ADDQ $64,DI + ADDQ $64,SI + JMP BYTESBETWEEN1AND255 diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go new file mode 100644 index 0000000..9bfc092 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go @@ -0,0 +1,199 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package salsa + +// Core208 applies the Salsa20/8 core function to the 64-byte array in and puts +// the result into the 64-byte array out. The input and output may be the same array. +func Core208(out *[64]byte, in *[64]byte) { + j0 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 + j1 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 + j2 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 + j3 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 + j4 := uint32(in[16]) | uint32(in[17])<<8 | uint32(in[18])<<16 | uint32(in[19])<<24 + j5 := uint32(in[20]) | uint32(in[21])<<8 | uint32(in[22])<<16 | uint32(in[23])<<24 + j6 := uint32(in[24]) | uint32(in[25])<<8 | uint32(in[26])<<16 | uint32(in[27])<<24 + j7 := uint32(in[28]) | uint32(in[29])<<8 | uint32(in[30])<<16 | uint32(in[31])<<24 + j8 := uint32(in[32]) | uint32(in[33])<<8 | uint32(in[34])<<16 | uint32(in[35])<<24 + j9 := uint32(in[36]) | uint32(in[37])<<8 | uint32(in[38])<<16 | uint32(in[39])<<24 + j10 := uint32(in[40]) | uint32(in[41])<<8 | uint32(in[42])<<16 | uint32(in[43])<<24 + j11 := uint32(in[44]) | uint32(in[45])<<8 | uint32(in[46])<<16 | uint32(in[47])<<24 + j12 := uint32(in[48]) | uint32(in[49])<<8 | uint32(in[50])<<16 | uint32(in[51])<<24 + j13 := uint32(in[52]) | uint32(in[53])<<8 | uint32(in[54])<<16 | uint32(in[55])<<24 + j14 := uint32(in[56]) | uint32(in[57])<<8 | uint32(in[58])<<16 | uint32(in[59])<<24 + j15 := uint32(in[60]) | uint32(in[61])<<8 | uint32(in[62])<<16 | uint32(in[63])<<24 + + x0, x1, x2, x3, x4, x5, x6, x7, x8 := j0, j1, j2, j3, j4, j5, j6, j7, j8 + x9, x10, x11, x12, x13, x14, x15 := j9, j10, j11, j12, j13, j14, j15 + + for i := 0; i < 8; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + x0 += j0 + x1 += j1 + x2 += j2 + x3 += j3 + x4 += j4 + x5 += j5 + x6 += j6 + x7 += j7 + x8 += j8 + x9 += j9 + x10 += j10 + x11 += j11 + x12 += j12 + x13 += j13 + x14 += j14 + x15 += j15 + + out[0] = byte(x0) + out[1] = byte(x0 >> 8) + out[2] = byte(x0 >> 16) + out[3] = byte(x0 >> 24) + + out[4] = byte(x1) + out[5] = byte(x1 >> 8) + out[6] = byte(x1 >> 16) + out[7] = byte(x1 >> 24) + + out[8] = byte(x2) + out[9] = byte(x2 >> 8) + out[10] = byte(x2 >> 16) + out[11] = byte(x2 >> 24) + + out[12] = byte(x3) + out[13] = byte(x3 >> 8) + out[14] = byte(x3 >> 16) + out[15] = byte(x3 >> 24) + + out[16] = byte(x4) + out[17] = byte(x4 >> 8) + out[18] = byte(x4 >> 16) + out[19] = byte(x4 >> 24) + + out[20] = byte(x5) + out[21] = byte(x5 >> 8) + out[22] = byte(x5 >> 16) + out[23] = byte(x5 >> 24) + + out[24] = byte(x6) + out[25] = byte(x6 >> 8) + out[26] = byte(x6 >> 16) + out[27] = byte(x6 >> 24) + + out[28] = byte(x7) + out[29] = byte(x7 >> 8) + out[30] = byte(x7 >> 16) + out[31] = byte(x7 >> 24) + + out[32] = byte(x8) + out[33] = byte(x8 >> 8) + out[34] = byte(x8 >> 16) + out[35] = byte(x8 >> 24) + + out[36] = byte(x9) + out[37] = byte(x9 >> 8) + out[38] = byte(x9 >> 16) + out[39] = byte(x9 >> 24) + + out[40] = byte(x10) + out[41] = byte(x10 >> 8) + out[42] = byte(x10 >> 16) + out[43] = byte(x10 >> 24) + + out[44] = byte(x11) + out[45] = byte(x11 >> 8) + out[46] = byte(x11 >> 16) + out[47] = byte(x11 >> 24) + + out[48] = byte(x12) + out[49] = byte(x12 >> 8) + out[50] = byte(x12 >> 16) + out[51] = byte(x12 >> 24) + + out[52] = byte(x13) + out[53] = byte(x13 >> 8) + out[54] = byte(x13 >> 16) + out[55] = byte(x13 >> 24) + + out[56] = byte(x14) + out[57] = byte(x14 >> 8) + out[58] = byte(x14 >> 16) + out[59] = byte(x14 >> 24) + + out[60] = byte(x15) + out[61] = byte(x15 >> 8) + out[62] = byte(x15 >> 16) + out[63] = byte(x15 >> 24) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go new file mode 100644 index 0000000..903c785 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go @@ -0,0 +1,23 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!appengine,!gccgo + +package salsa + +// This function is implemented in salsa2020_amd64.s. + +//go:noescape + +func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte) + +// XORKeyStream crypts bytes from in to out using the given key and counters. +// In and out may be the same slice but otherwise should not overlap. Counter +// contains the raw salsa20 counter bytes (both nonce and block counter). +func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { + if len(in) == 0 { + return + } + salsa2020XORKeyStream(&out[0], &in[0], uint64(len(in)), &counter[0], &key[0]) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go new file mode 100644 index 0000000..95f8ca5 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go @@ -0,0 +1,234 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64 appengine gccgo + +package salsa + +const rounds = 20 + +// core applies the Salsa20 core function to 16-byte input in, 32-byte key k, +// and 16-byte constant c, and puts the result into 64-byte array out. +func core(out *[64]byte, in *[16]byte, k *[32]byte, c *[16]byte) { + j0 := uint32(c[0]) | uint32(c[1])<<8 | uint32(c[2])<<16 | uint32(c[3])<<24 + j1 := uint32(k[0]) | uint32(k[1])<<8 | uint32(k[2])<<16 | uint32(k[3])<<24 + j2 := uint32(k[4]) | uint32(k[5])<<8 | uint32(k[6])<<16 | uint32(k[7])<<24 + j3 := uint32(k[8]) | uint32(k[9])<<8 | uint32(k[10])<<16 | uint32(k[11])<<24 + j4 := uint32(k[12]) | uint32(k[13])<<8 | uint32(k[14])<<16 | uint32(k[15])<<24 + j5 := uint32(c[4]) | uint32(c[5])<<8 | uint32(c[6])<<16 | uint32(c[7])<<24 + j6 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 + j7 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 + j8 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 + j9 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 + j10 := uint32(c[8]) | uint32(c[9])<<8 | uint32(c[10])<<16 | uint32(c[11])<<24 + j11 := uint32(k[16]) | uint32(k[17])<<8 | uint32(k[18])<<16 | uint32(k[19])<<24 + j12 := uint32(k[20]) | uint32(k[21])<<8 | uint32(k[22])<<16 | uint32(k[23])<<24 + j13 := uint32(k[24]) | uint32(k[25])<<8 | uint32(k[26])<<16 | uint32(k[27])<<24 + j14 := uint32(k[28]) | uint32(k[29])<<8 | uint32(k[30])<<16 | uint32(k[31])<<24 + j15 := uint32(c[12]) | uint32(c[13])<<8 | uint32(c[14])<<16 | uint32(c[15])<<24 + + x0, x1, x2, x3, x4, x5, x6, x7, x8 := j0, j1, j2, j3, j4, j5, j6, j7, j8 + x9, x10, x11, x12, x13, x14, x15 := j9, j10, j11, j12, j13, j14, j15 + + for i := 0; i < rounds; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + x0 += j0 + x1 += j1 + x2 += j2 + x3 += j3 + x4 += j4 + x5 += j5 + x6 += j6 + x7 += j7 + x8 += j8 + x9 += j9 + x10 += j10 + x11 += j11 + x12 += j12 + x13 += j13 + x14 += j14 + x15 += j15 + + out[0] = byte(x0) + out[1] = byte(x0 >> 8) + out[2] = byte(x0 >> 16) + out[3] = byte(x0 >> 24) + + out[4] = byte(x1) + out[5] = byte(x1 >> 8) + out[6] = byte(x1 >> 16) + out[7] = byte(x1 >> 24) + + out[8] = byte(x2) + out[9] = byte(x2 >> 8) + out[10] = byte(x2 >> 16) + out[11] = byte(x2 >> 24) + + out[12] = byte(x3) + out[13] = byte(x3 >> 8) + out[14] = byte(x3 >> 16) + out[15] = byte(x3 >> 24) + + out[16] = byte(x4) + out[17] = byte(x4 >> 8) + out[18] = byte(x4 >> 16) + out[19] = byte(x4 >> 24) + + out[20] = byte(x5) + out[21] = byte(x5 >> 8) + out[22] = byte(x5 >> 16) + out[23] = byte(x5 >> 24) + + out[24] = byte(x6) + out[25] = byte(x6 >> 8) + out[26] = byte(x6 >> 16) + out[27] = byte(x6 >> 24) + + out[28] = byte(x7) + out[29] = byte(x7 >> 8) + out[30] = byte(x7 >> 16) + out[31] = byte(x7 >> 24) + + out[32] = byte(x8) + out[33] = byte(x8 >> 8) + out[34] = byte(x8 >> 16) + out[35] = byte(x8 >> 24) + + out[36] = byte(x9) + out[37] = byte(x9 >> 8) + out[38] = byte(x9 >> 16) + out[39] = byte(x9 >> 24) + + out[40] = byte(x10) + out[41] = byte(x10 >> 8) + out[42] = byte(x10 >> 16) + out[43] = byte(x10 >> 24) + + out[44] = byte(x11) + out[45] = byte(x11 >> 8) + out[46] = byte(x11 >> 16) + out[47] = byte(x11 >> 24) + + out[48] = byte(x12) + out[49] = byte(x12 >> 8) + out[50] = byte(x12 >> 16) + out[51] = byte(x12 >> 24) + + out[52] = byte(x13) + out[53] = byte(x13 >> 8) + out[54] = byte(x13 >> 16) + out[55] = byte(x13 >> 24) + + out[56] = byte(x14) + out[57] = byte(x14 >> 8) + out[58] = byte(x14 >> 16) + out[59] = byte(x14 >> 24) + + out[60] = byte(x15) + out[61] = byte(x15 >> 8) + out[62] = byte(x15 >> 16) + out[63] = byte(x15 >> 24) +} + +// XORKeyStream crypts bytes from in to out using the given key and counters. +// In and out may be the same slice but otherwise should not overlap. Counter +// contains the raw salsa20 counter bytes (both nonce and block counter). +func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { + var block [64]byte + var counterCopy [16]byte + copy(counterCopy[:], counter[:]) + + for len(in) >= 64 { + core(&block, &counterCopy, key, &Sigma) + for i, x := range block { + out[i] = in[i] ^ x + } + u := uint32(1) + for i := 8; i < 16; i++ { + u += uint32(counterCopy[i]) + counterCopy[i] = byte(u) + u >>= 8 + } + in = in[64:] + out = out[64:] + } + + if len(in) > 0 { + core(&block, &counterCopy, key, &Sigma) + for i, v := range in { + out[i] = v ^ block[i] + } + } +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa_test.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa_test.go new file mode 100644 index 0000000..f8cecd9 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa_test.go @@ -0,0 +1,35 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package salsa + +import "testing" + +func TestCore208(t *testing.T) { + in := [64]byte{ + 0x7e, 0x87, 0x9a, 0x21, 0x4f, 0x3e, 0xc9, 0x86, + 0x7c, 0xa9, 0x40, 0xe6, 0x41, 0x71, 0x8f, 0x26, + 0xba, 0xee, 0x55, 0x5b, 0x8c, 0x61, 0xc1, 0xb5, + 0x0d, 0xf8, 0x46, 0x11, 0x6d, 0xcd, 0x3b, 0x1d, + 0xee, 0x24, 0xf3, 0x19, 0xdf, 0x9b, 0x3d, 0x85, + 0x14, 0x12, 0x1e, 0x4b, 0x5a, 0xc5, 0xaa, 0x32, + 0x76, 0x02, 0x1d, 0x29, 0x09, 0xc7, 0x48, 0x29, + 0xed, 0xeb, 0xc6, 0x8d, 0xb8, 0xb8, 0xc2, 0x5e} + + out := [64]byte{ + 0xa4, 0x1f, 0x85, 0x9c, 0x66, 0x08, 0xcc, 0x99, + 0x3b, 0x81, 0xca, 0xcb, 0x02, 0x0c, 0xef, 0x05, + 0x04, 0x4b, 0x21, 0x81, 0xa2, 0xfd, 0x33, 0x7d, + 0xfd, 0x7b, 0x1c, 0x63, 0x96, 0x68, 0x2f, 0x29, + 0xb4, 0x39, 0x31, 0x68, 0xe3, 0xc9, 0xe6, 0xbc, + 0xfe, 0x6b, 0xc5, 0xb7, 0xa0, 0x6d, 0x96, 0xba, + 0xe4, 0x24, 0xcc, 0x10, 0x2c, 0x91, 0x74, 0x5c, + 0x24, 0xad, 0x67, 0x3d, 0xc7, 0x61, 0x8f, 0x81, + } + + Core208(&in, &in) + if in != out { + t.Errorf("expected %x, got %x", out, in) + } +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa20.go new file mode 100644 index 0000000..fde9846 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa20.go @@ -0,0 +1,54 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package salsa20 implements the Salsa20 stream cipher as specified in http://cr.yp.to/snuffle/spec.pdf. + +Salsa20 differs from many other stream ciphers in that it is message orientated +rather than byte orientated. Keystream blocks are not preserved between calls, +therefore each side must encrypt/decrypt data with the same segmentation. + +Another aspect of this difference is that part of the counter is exposed as +an nonce in each call. Encrypting two different messages with the same (key, +nonce) pair leads to trivial plaintext recovery. This is analogous to +encrypting two different messages with the same key with a traditional stream +cipher. + +This package also implements XSalsa20: a version of Salsa20 with a 24-byte +nonce as specified in http://cr.yp.to/snuffle/xsalsa-20081128.pdf. Simply +passing a 24-byte slice as the nonce triggers XSalsa20. +*/ +package salsa20 // import "golang.org/x/crypto/salsa20" + +// TODO(agl): implement XORKeyStream12 and XORKeyStream8 - the reduced round variants of Salsa20. + +import ( + "golang.org/x/crypto/salsa20/salsa" +) + +// XORKeyStream crypts bytes from in to out using the given key and nonce. In +// and out may be the same slice but otherwise should not overlap. Nonce must +// be either 8 or 24 bytes long. +func XORKeyStream(out, in []byte, nonce []byte, key *[32]byte) { + if len(out) < len(in) { + in = in[:len(out)] + } + + var subNonce [16]byte + + if len(nonce) == 24 { + var subKey [32]byte + var hNonce [16]byte + copy(hNonce[:], nonce[:16]) + salsa.HSalsa20(&subKey, &hNonce, key, &salsa.Sigma) + copy(subNonce[:], nonce[16:]) + key = &subKey + } else if len(nonce) == 8 { + copy(subNonce[:], nonce[:]) + } else { + panic("salsa20: nonce must be 8 or 24 bytes") + } + + salsa.XORKeyStream(out, in, &subNonce, key) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa20_test.go b/vendor/golang.org/x/crypto/salsa20/salsa20_test.go new file mode 100644 index 0000000..0ef3328 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa20_test.go @@ -0,0 +1,139 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package salsa20 + +import ( + "bytes" + "encoding/hex" + "testing" +) + +func fromHex(s string) []byte { + ret, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return ret +} + +// testVectors was taken from set 6 of the ECRYPT test vectors: +// http://www.ecrypt.eu.org/stream/svn/viewcvs.cgi/ecrypt/trunk/submissions/salsa20/full/verified.test-vectors?logsort=rev&rev=210&view=markup +var testVectors = []struct { + key []byte + iv []byte + numBytes int + xor []byte +}{ + { + fromHex("0053A6F94C9FF24598EB3E91E4378ADD3083D6297CCF2275C81B6EC11467BA0D"), + fromHex("0D74DB42A91077DE"), + 131072, + fromHex("C349B6A51A3EC9B712EAED3F90D8BCEE69B7628645F251A996F55260C62EF31FD6C6B0AEA94E136C9D984AD2DF3578F78E457527B03A0450580DD874F63B1AB9"), + }, + { + fromHex("0558ABFE51A4F74A9DF04396E93C8FE23588DB2E81D4277ACD2073C6196CBF12"), + fromHex("167DE44BB21980E7"), + 131072, + fromHex("C3EAAF32836BACE32D04E1124231EF47E101367D6305413A0EEB07C60698A2876E4D031870A739D6FFDDD208597AFF0A47AC17EDB0167DD67EBA84F1883D4DFD"), + }, + { + fromHex("0A5DB00356A9FC4FA2F5489BEE4194E73A8DE03386D92C7FD22578CB1E71C417"), + fromHex("1F86ED54BB2289F0"), + 131072, + fromHex("3CD23C3DC90201ACC0CF49B440B6C417F0DC8D8410A716D5314C059E14B1A8D9A9FB8EA3D9C8DAE12B21402F674AA95C67B1FC514E994C9D3F3A6E41DFF5BBA6"), + }, + { + fromHex("0F62B5085BAE0154A7FA4DA0F34699EC3F92E5388BDE3184D72A7DD02376C91C"), + fromHex("288FF65DC42B92F9"), + 131072, + fromHex("E00EBCCD70D69152725F9987982178A2E2E139C7BCBE04CA8A0E99E318D9AB76F988C8549F75ADD790BA4F81C176DA653C1A043F11A958E169B6D2319F4EEC1A"), + }, +} + +func TestSalsa20(t *testing.T) { + var inBuf, outBuf []byte + var key [32]byte + + for i, test := range testVectors { + if test.numBytes%64 != 0 { + t.Errorf("#%d: numBytes is not a multiple of 64", i) + continue + } + + if test.numBytes > len(inBuf) { + inBuf = make([]byte, test.numBytes) + outBuf = make([]byte, test.numBytes) + } + in := inBuf[:test.numBytes] + out := outBuf[:test.numBytes] + copy(key[:], test.key) + XORKeyStream(out, in, test.iv, &key) + + var xor [64]byte + for len(out) > 0 { + for i := 0; i < 64; i++ { + xor[i] ^= out[i] + } + out = out[64:] + } + + if !bytes.Equal(xor[:], test.xor) { + t.Errorf("#%d: bad result", i) + } + } +} + +var xSalsa20TestData = []struct { + in, nonce, key, out []byte +}{ + { + []byte("Hello world!"), + []byte("24-byte nonce for xsalsa"), + []byte("this is 32-byte key for xsalsa20"), + []byte{0x00, 0x2d, 0x45, 0x13, 0x84, 0x3f, 0xc2, 0x40, 0xc4, 0x01, 0xe5, 0x41}, + }, + { + make([]byte, 64), + []byte("24-byte nonce for xsalsa"), + []byte("this is 32-byte key for xsalsa20"), + []byte{0x48, 0x48, 0x29, 0x7f, 0xeb, 0x1f, 0xb5, 0x2f, 0xb6, + 0x6d, 0x81, 0x60, 0x9b, 0xd5, 0x47, 0xfa, 0xbc, 0xbe, 0x70, + 0x26, 0xed, 0xc8, 0xb5, 0xe5, 0xe4, 0x49, 0xd0, 0x88, 0xbf, + 0xa6, 0x9c, 0x08, 0x8f, 0x5d, 0x8d, 0xa1, 0xd7, 0x91, 0x26, + 0x7c, 0x2c, 0x19, 0x5a, 0x7f, 0x8c, 0xae, 0x9c, 0x4b, 0x40, + 0x50, 0xd0, 0x8c, 0xe6, 0xd3, 0xa1, 0x51, 0xec, 0x26, 0x5f, + 0x3a, 0x58, 0xe4, 0x76, 0x48}, + }, +} + +func TestXSalsa20(t *testing.T) { + var key [32]byte + + for i, test := range xSalsa20TestData { + out := make([]byte, len(test.in)) + copy(key[:], test.key) + XORKeyStream(out, test.in, test.nonce, &key) + if !bytes.Equal(out, test.out) { + t.Errorf("%d: expected %x, got %x", i, test.out, out) + } + } +} + +var ( + keyArray [32]byte + key = &keyArray + nonce [8]byte + msg = make([]byte, 1<<10) +) + +func BenchmarkXOR1K(b *testing.B) { + b.StopTimer() + out := make([]byte, 1024) + b.StartTimer() + for i := 0; i < b.N; i++ { + XORKeyStream(out, msg[:1024], nonce[:], key) + } + b.SetBytes(1024) +} diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt.go b/vendor/golang.org/x/crypto/scrypt/scrypt.go new file mode 100644 index 0000000..7455395 --- /dev/null +++ b/vendor/golang.org/x/crypto/scrypt/scrypt.go @@ -0,0 +1,243 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package scrypt implements the scrypt key derivation function as defined in +// Colin Percival's paper "Stronger Key Derivation via Sequential Memory-Hard +// Functions" (http://www.tarsnap.com/scrypt/scrypt.pdf). +package scrypt // import "golang.org/x/crypto/scrypt" + +import ( + "crypto/sha256" + "errors" + + "golang.org/x/crypto/pbkdf2" +) + +const maxInt = int(^uint(0) >> 1) + +// blockCopy copies n numbers from src into dst. +func blockCopy(dst, src []uint32, n int) { + copy(dst, src[:n]) +} + +// blockXOR XORs numbers from dst with n numbers from src. +func blockXOR(dst, src []uint32, n int) { + for i, v := range src[:n] { + dst[i] ^= v + } +} + +// salsaXOR applies Salsa20/8 to the XOR of 16 numbers from tmp and in, +// and puts the result into both both tmp and out. +func salsaXOR(tmp *[16]uint32, in, out []uint32) { + w0 := tmp[0] ^ in[0] + w1 := tmp[1] ^ in[1] + w2 := tmp[2] ^ in[2] + w3 := tmp[3] ^ in[3] + w4 := tmp[4] ^ in[4] + w5 := tmp[5] ^ in[5] + w6 := tmp[6] ^ in[6] + w7 := tmp[7] ^ in[7] + w8 := tmp[8] ^ in[8] + w9 := tmp[9] ^ in[9] + w10 := tmp[10] ^ in[10] + w11 := tmp[11] ^ in[11] + w12 := tmp[12] ^ in[12] + w13 := tmp[13] ^ in[13] + w14 := tmp[14] ^ in[14] + w15 := tmp[15] ^ in[15] + + x0, x1, x2, x3, x4, x5, x6, x7, x8 := w0, w1, w2, w3, w4, w5, w6, w7, w8 + x9, x10, x11, x12, x13, x14, x15 := w9, w10, w11, w12, w13, w14, w15 + + for i := 0; i < 8; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + x0 += w0 + x1 += w1 + x2 += w2 + x3 += w3 + x4 += w4 + x5 += w5 + x6 += w6 + x7 += w7 + x8 += w8 + x9 += w9 + x10 += w10 + x11 += w11 + x12 += w12 + x13 += w13 + x14 += w14 + x15 += w15 + + out[0], tmp[0] = x0, x0 + out[1], tmp[1] = x1, x1 + out[2], tmp[2] = x2, x2 + out[3], tmp[3] = x3, x3 + out[4], tmp[4] = x4, x4 + out[5], tmp[5] = x5, x5 + out[6], tmp[6] = x6, x6 + out[7], tmp[7] = x7, x7 + out[8], tmp[8] = x8, x8 + out[9], tmp[9] = x9, x9 + out[10], tmp[10] = x10, x10 + out[11], tmp[11] = x11, x11 + out[12], tmp[12] = x12, x12 + out[13], tmp[13] = x13, x13 + out[14], tmp[14] = x14, x14 + out[15], tmp[15] = x15, x15 +} + +func blockMix(tmp *[16]uint32, in, out []uint32, r int) { + blockCopy(tmp[:], in[(2*r-1)*16:], 16) + for i := 0; i < 2*r; i += 2 { + salsaXOR(tmp, in[i*16:], out[i*8:]) + salsaXOR(tmp, in[i*16+16:], out[i*8+r*16:]) + } +} + +func integer(b []uint32, r int) uint64 { + j := (2*r - 1) * 16 + return uint64(b[j]) | uint64(b[j+1])<<32 +} + +func smix(b []byte, r, N int, v, xy []uint32) { + var tmp [16]uint32 + x := xy + y := xy[32*r:] + + j := 0 + for i := 0; i < 32*r; i++ { + x[i] = uint32(b[j]) | uint32(b[j+1])<<8 | uint32(b[j+2])<<16 | uint32(b[j+3])<<24 + j += 4 + } + for i := 0; i < N; i += 2 { + blockCopy(v[i*(32*r):], x, 32*r) + blockMix(&tmp, x, y, r) + + blockCopy(v[(i+1)*(32*r):], y, 32*r) + blockMix(&tmp, y, x, r) + } + for i := 0; i < N; i += 2 { + j := int(integer(x, r) & uint64(N-1)) + blockXOR(x, v[j*(32*r):], 32*r) + blockMix(&tmp, x, y, r) + + j = int(integer(y, r) & uint64(N-1)) + blockXOR(y, v[j*(32*r):], 32*r) + blockMix(&tmp, y, x, r) + } + j = 0 + for _, v := range x[:32*r] { + b[j+0] = byte(v >> 0) + b[j+1] = byte(v >> 8) + b[j+2] = byte(v >> 16) + b[j+3] = byte(v >> 24) + j += 4 + } +} + +// Key derives a key from the password, salt, and cost parameters, returning +// a byte slice of length keyLen that can be used as cryptographic key. +// +// N is a CPU/memory cost parameter, which must be a power of two greater than 1. +// r and p must satisfy r * p < 2³â°. If the parameters do not satisfy the +// limits, the function returns a nil byte slice and an error. +// +// For example, you can get a derived key for e.g. AES-256 (which needs a +// 32-byte key) by doing: +// +// dk, err := scrypt.Key([]byte("some password"), salt, 16384, 8, 1, 32) +// +// The recommended parameters for interactive logins as of 2009 are N=16384, +// r=8, p=1. They should be increased as memory latency and CPU parallelism +// increases. Remember to get a good random salt. +func Key(password, salt []byte, N, r, p, keyLen int) ([]byte, error) { + if N <= 1 || N&(N-1) != 0 { + return nil, errors.New("scrypt: N must be > 1 and a power of 2") + } + if uint64(r)*uint64(p) >= 1<<30 || r > maxInt/128/p || r > maxInt/256 || N > maxInt/128/r { + return nil, errors.New("scrypt: parameters are too large") + } + + xy := make([]uint32, 64*r) + v := make([]uint32, 32*N*r) + b := pbkdf2.Key(password, salt, 1, p*128*r, sha256.New) + + for i := 0; i < p; i++ { + smix(b[i*128*r:], r, N, v, xy) + } + + return pbkdf2.Key(password, b, 1, keyLen, sha256.New), nil +} diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt_test.go b/vendor/golang.org/x/crypto/scrypt/scrypt_test.go new file mode 100644 index 0000000..e096c3a --- /dev/null +++ b/vendor/golang.org/x/crypto/scrypt/scrypt_test.go @@ -0,0 +1,160 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package scrypt + +import ( + "bytes" + "testing" +) + +type testVector struct { + password string + salt string + N, r, p int + output []byte +} + +var good = []testVector{ + { + "password", + "salt", + 2, 10, 10, + []byte{ + 0x48, 0x2c, 0x85, 0x8e, 0x22, 0x90, 0x55, 0xe6, 0x2f, + 0x41, 0xe0, 0xec, 0x81, 0x9a, 0x5e, 0xe1, 0x8b, 0xdb, + 0x87, 0x25, 0x1a, 0x53, 0x4f, 0x75, 0xac, 0xd9, 0x5a, + 0xc5, 0xe5, 0xa, 0xa1, 0x5f, + }, + }, + { + "password", + "salt", + 16, 100, 100, + []byte{ + 0x88, 0xbd, 0x5e, 0xdb, 0x52, 0xd1, 0xdd, 0x0, 0x18, + 0x87, 0x72, 0xad, 0x36, 0x17, 0x12, 0x90, 0x22, 0x4e, + 0x74, 0x82, 0x95, 0x25, 0xb1, 0x8d, 0x73, 0x23, 0xa5, + 0x7f, 0x91, 0x96, 0x3c, 0x37, + }, + }, + { + "this is a long \000 password", + "and this is a long \000 salt", + 16384, 8, 1, + []byte{ + 0xc3, 0xf1, 0x82, 0xee, 0x2d, 0xec, 0x84, 0x6e, 0x70, + 0xa6, 0x94, 0x2f, 0xb5, 0x29, 0x98, 0x5a, 0x3a, 0x09, + 0x76, 0x5e, 0xf0, 0x4c, 0x61, 0x29, 0x23, 0xb1, 0x7f, + 0x18, 0x55, 0x5a, 0x37, 0x07, 0x6d, 0xeb, 0x2b, 0x98, + 0x30, 0xd6, 0x9d, 0xe5, 0x49, 0x26, 0x51, 0xe4, 0x50, + 0x6a, 0xe5, 0x77, 0x6d, 0x96, 0xd4, 0x0f, 0x67, 0xaa, + 0xee, 0x37, 0xe1, 0x77, 0x7b, 0x8a, 0xd5, 0xc3, 0x11, + 0x14, 0x32, 0xbb, 0x3b, 0x6f, 0x7e, 0x12, 0x64, 0x40, + 0x18, 0x79, 0xe6, 0x41, 0xae, + }, + }, + { + "p", + "s", + 2, 1, 1, + []byte{ + 0x48, 0xb0, 0xd2, 0xa8, 0xa3, 0x27, 0x26, 0x11, 0x98, + 0x4c, 0x50, 0xeb, 0xd6, 0x30, 0xaf, 0x52, + }, + }, + + { + "", + "", + 16, 1, 1, + []byte{ + 0x77, 0xd6, 0x57, 0x62, 0x38, 0x65, 0x7b, 0x20, 0x3b, + 0x19, 0xca, 0x42, 0xc1, 0x8a, 0x04, 0x97, 0xf1, 0x6b, + 0x48, 0x44, 0xe3, 0x07, 0x4a, 0xe8, 0xdf, 0xdf, 0xfa, + 0x3f, 0xed, 0xe2, 0x14, 0x42, 0xfc, 0xd0, 0x06, 0x9d, + 0xed, 0x09, 0x48, 0xf8, 0x32, 0x6a, 0x75, 0x3a, 0x0f, + 0xc8, 0x1f, 0x17, 0xe8, 0xd3, 0xe0, 0xfb, 0x2e, 0x0d, + 0x36, 0x28, 0xcf, 0x35, 0xe2, 0x0c, 0x38, 0xd1, 0x89, + 0x06, + }, + }, + { + "password", + "NaCl", + 1024, 8, 16, + []byte{ + 0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00, 0x78, + 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe, 0x7c, 0x6a, + 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30, 0xe7, 0x73, 0x76, + 0x63, 0x4b, 0x37, 0x31, 0x62, 0x2e, 0xaf, 0x30, 0xd9, + 0x2e, 0x22, 0xa3, 0x88, 0x6f, 0xf1, 0x09, 0x27, 0x9d, + 0x98, 0x30, 0xda, 0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, + 0xee, 0x6d, 0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, + 0x40, + }, + }, + { + "pleaseletmein", "SodiumChloride", + 16384, 8, 1, + []byte{ + 0x70, 0x23, 0xbd, 0xcb, 0x3a, 0xfd, 0x73, 0x48, 0x46, + 0x1c, 0x06, 0xcd, 0x81, 0xfd, 0x38, 0xeb, 0xfd, 0xa8, + 0xfb, 0xba, 0x90, 0x4f, 0x8e, 0x3e, 0xa9, 0xb5, 0x43, + 0xf6, 0x54, 0x5d, 0xa1, 0xf2, 0xd5, 0x43, 0x29, 0x55, + 0x61, 0x3f, 0x0f, 0xcf, 0x62, 0xd4, 0x97, 0x05, 0x24, + 0x2a, 0x9a, 0xf9, 0xe6, 0x1e, 0x85, 0xdc, 0x0d, 0x65, + 0x1e, 0x40, 0xdf, 0xcf, 0x01, 0x7b, 0x45, 0x57, 0x58, + 0x87, + }, + }, + /* + // Disabled: needs 1 GiB RAM and takes too long for a simple test. + { + "pleaseletmein", "SodiumChloride", + 1048576, 8, 1, + []byte{ + 0x21, 0x01, 0xcb, 0x9b, 0x6a, 0x51, 0x1a, 0xae, 0xad, + 0xdb, 0xbe, 0x09, 0xcf, 0x70, 0xf8, 0x81, 0xec, 0x56, + 0x8d, 0x57, 0x4a, 0x2f, 0xfd, 0x4d, 0xab, 0xe5, 0xee, + 0x98, 0x20, 0xad, 0xaa, 0x47, 0x8e, 0x56, 0xfd, 0x8f, + 0x4b, 0xa5, 0xd0, 0x9f, 0xfa, 0x1c, 0x6d, 0x92, 0x7c, + 0x40, 0xf4, 0xc3, 0x37, 0x30, 0x40, 0x49, 0xe8, 0xa9, + 0x52, 0xfb, 0xcb, 0xf4, 0x5c, 0x6f, 0xa7, 0x7a, 0x41, + 0xa4, + }, + }, + */ +} + +var bad = []testVector{ + {"p", "s", 0, 1, 1, nil}, // N == 0 + {"p", "s", 1, 1, 1, nil}, // N == 1 + {"p", "s", 7, 8, 1, nil}, // N is not power of 2 + {"p", "s", 16, maxInt / 2, maxInt / 2, nil}, // p * r too large +} + +func TestKey(t *testing.T) { + for i, v := range good { + k, err := Key([]byte(v.password), []byte(v.salt), v.N, v.r, v.p, len(v.output)) + if err != nil { + t.Errorf("%d: got unexpected error: %s", i, err) + } + if !bytes.Equal(k, v.output) { + t.Errorf("%d: expected %x, got %x", i, v.output, k) + } + } + for i, v := range bad { + _, err := Key([]byte(v.password), []byte(v.salt), v.N, v.r, v.p, 32) + if err == nil { + t.Errorf("%d: expected error, got nil", i) + } + } +} + +func BenchmarkKey(b *testing.B) { + for i := 0; i < b.N; i++ { + Key([]byte("password"), []byte("salt"), 16384, 8, 1, 64) + } +} diff --git a/vendor/golang.org/x/crypto/sha3/doc.go b/vendor/golang.org/x/crypto/sha3/doc.go new file mode 100644 index 0000000..a0ee3ae --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/doc.go @@ -0,0 +1,66 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package sha3 implements the SHA-3 fixed-output-length hash functions and +// the SHAKE variable-output-length hash functions defined by FIPS-202. +// +// Both types of hash function use the "sponge" construction and the Keccak +// permutation. For a detailed specification see http://keccak.noekeon.org/ +// +// +// Guidance +// +// If you aren't sure what function you need, use SHAKE256 with at least 64 +// bytes of output. The SHAKE instances are faster than the SHA3 instances; +// the latter have to allocate memory to conform to the hash.Hash interface. +// +// If you need a secret-key MAC (message authentication code), prepend the +// secret key to the input, hash with SHAKE256 and read at least 32 bytes of +// output. +// +// +// Security strengths +// +// The SHA3-x (x equals 224, 256, 384, or 512) functions have a security +// strength against preimage attacks of x bits. Since they only produce "x" +// bits of output, their collision-resistance is only "x/2" bits. +// +// The SHAKE-256 and -128 functions have a generic security strength of 256 and +// 128 bits against all attacks, provided that at least 2x bits of their output +// is used. Requesting more than 64 or 32 bytes of output, respectively, does +// not increase the collision-resistance of the SHAKE functions. +// +// +// The sponge construction +// +// A sponge builds a pseudo-random function from a public pseudo-random +// permutation, by applying the permutation to a state of "rate + capacity" +// bytes, but hiding "capacity" of the bytes. +// +// A sponge starts out with a zero state. To hash an input using a sponge, up +// to "rate" bytes of the input are XORed into the sponge's state. The sponge +// is then "full" and the permutation is applied to "empty" it. This process is +// repeated until all the input has been "absorbed". The input is then padded. +// The digest is "squeezed" from the sponge in the same way, except that output +// output is copied out instead of input being XORed in. +// +// A sponge is parameterized by its generic security strength, which is equal +// to half its capacity; capacity + rate is equal to the permutation's width. +// Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means +// that the security strength of a sponge instance is equal to (1600 - bitrate) / 2. +// +// +// Recommendations +// +// The SHAKE functions are recommended for most new uses. They can produce +// output of arbitrary length. SHAKE256, with an output length of at least +// 64 bytes, provides 256-bit security against all attacks. The Keccak team +// recommends it for most applications upgrading from SHA2-512. (NIST chose a +// much stronger, but much slower, sponge instance for SHA3-512.) +// +// The SHA-3 functions are "drop-in" replacements for the SHA-2 functions. +// They produce output of the same length, with the same security strengths +// against all attacks. This means, in particular, that SHA3-256 only has +// 128-bit collision resistance, because its output length is 32 bytes. +package sha3 // import "golang.org/x/crypto/sha3" diff --git a/vendor/golang.org/x/crypto/sha3/hashes.go b/vendor/golang.org/x/crypto/sha3/hashes.go new file mode 100644 index 0000000..2b51cf4 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/hashes.go @@ -0,0 +1,65 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// This file provides functions for creating instances of the SHA-3 +// and SHAKE hash functions, as well as utility functions for hashing +// bytes. + +import ( + "hash" +) + +// New224 creates a new SHA3-224 hash. +// Its generic security strength is 224 bits against preimage attacks, +// and 112 bits against collision attacks. +func New224() hash.Hash { return &state{rate: 144, outputLen: 28, dsbyte: 0x06} } + +// New256 creates a new SHA3-256 hash. +// Its generic security strength is 256 bits against preimage attacks, +// and 128 bits against collision attacks. +func New256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x06} } + +// New384 creates a new SHA3-384 hash. +// Its generic security strength is 384 bits against preimage attacks, +// and 192 bits against collision attacks. +func New384() hash.Hash { return &state{rate: 104, outputLen: 48, dsbyte: 0x06} } + +// New512 creates a new SHA3-512 hash. +// Its generic security strength is 512 bits against preimage attacks, +// and 256 bits against collision attacks. +func New512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x06} } + +// Sum224 returns the SHA3-224 digest of the data. +func Sum224(data []byte) (digest [28]byte) { + h := New224() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum256 returns the SHA3-256 digest of the data. +func Sum256(data []byte) (digest [32]byte) { + h := New256() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum384 returns the SHA3-384 digest of the data. +func Sum384(data []byte) (digest [48]byte) { + h := New384() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum512 returns the SHA3-512 digest of the data. +func Sum512(data []byte) (digest [64]byte) { + h := New512() + h.Write(data) + h.Sum(digest[:0]) + return +} diff --git a/vendor/golang.org/x/crypto/sha3/keccakf.go b/vendor/golang.org/x/crypto/sha3/keccakf.go new file mode 100644 index 0000000..46d03ed --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf.go @@ -0,0 +1,412 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64 appengine gccgo + +package sha3 + +// rc stores the round constants for use in the ι step. +var rc = [24]uint64{ + 0x0000000000000001, + 0x0000000000008082, + 0x800000000000808A, + 0x8000000080008000, + 0x000000000000808B, + 0x0000000080000001, + 0x8000000080008081, + 0x8000000000008009, + 0x000000000000008A, + 0x0000000000000088, + 0x0000000080008009, + 0x000000008000000A, + 0x000000008000808B, + 0x800000000000008B, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x000000000000800A, + 0x800000008000000A, + 0x8000000080008081, + 0x8000000000008080, + 0x0000000080000001, + 0x8000000080008008, +} + +// keccakF1600 applies the Keccak permutation to a 1600b-wide +// state represented as a slice of 25 uint64s. +func keccakF1600(a *[25]uint64) { + // Implementation translated from Keccak-inplace.c + // in the keccak reference code. + var t, bc0, bc1, bc2, bc3, bc4, d0, d1, d2, d3, d4 uint64 + + for i := 0; i < 24; i += 4 { + // Combines the 5 steps in each round into 2 steps. + // Unrolls 4 rounds per loop and spreads some steps across rounds. + + // Round 1 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[6] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[12] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[18] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[24] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i] + a[6] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[16] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[22] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[3] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[10] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[1] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[7] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[19] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[20] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[11] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[23] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[4] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[5] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[2] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[8] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[14] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[15] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + // Round 2 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[16] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[7] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[23] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[14] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+1] + a[16] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[11] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[2] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[18] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[20] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[6] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[22] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[4] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[15] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[1] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[8] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[24] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[10] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[12] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[3] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[19] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[5] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + // Round 3 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[11] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[22] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[8] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[19] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+2] + a[11] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[1] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[12] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[23] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[15] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[16] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[2] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[24] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[5] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[6] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[3] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[14] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[20] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[7] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[18] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[4] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[10] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + // Round 4 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[1] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[2] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[3] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[4] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+3] + a[1] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[6] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[7] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[8] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[5] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[11] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[12] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[14] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[10] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[16] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[18] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[19] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[15] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[22] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[23] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[24] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[20] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + } +} diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go new file mode 100644 index 0000000..7886795 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go @@ -0,0 +1,13 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!appengine,!gccgo + +package sha3 + +// This function is implemented in keccakf_amd64.s. + +//go:noescape + +func keccakF1600(a *[25]uint64) diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s new file mode 100644 index 0000000..a353351 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s @@ -0,0 +1,392 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!appengine,!gccgo + +// This code was translated into a form compatible with 6a from the public +// domain sources at https://github.com/gvanas/KeccakCodePackage + +// Offsets in state +#define _ba (0*8) +#define _be (1*8) +#define _bi (2*8) +#define _bo (3*8) +#define _bu (4*8) +#define _ga (5*8) +#define _ge (6*8) +#define _gi (7*8) +#define _go (8*8) +#define _gu (9*8) +#define _ka (10*8) +#define _ke (11*8) +#define _ki (12*8) +#define _ko (13*8) +#define _ku (14*8) +#define _ma (15*8) +#define _me (16*8) +#define _mi (17*8) +#define _mo (18*8) +#define _mu (19*8) +#define _sa (20*8) +#define _se (21*8) +#define _si (22*8) +#define _so (23*8) +#define _su (24*8) + +// Temporary registers +#define rT1 AX + +// Round vars +#define rpState DI +#define rpStack SP + +#define rDa BX +#define rDe CX +#define rDi DX +#define rDo R8 +#define rDu R9 + +#define rBa R10 +#define rBe R11 +#define rBi R12 +#define rBo R13 +#define rBu R14 + +#define rCa SI +#define rCe BP +#define rCi rBi +#define rCo rBo +#define rCu R15 + +#define MOVQ_RBI_RCE MOVQ rBi, rCe +#define XORQ_RT1_RCA XORQ rT1, rCa +#define XORQ_RT1_RCE XORQ rT1, rCe +#define XORQ_RBA_RCU XORQ rBa, rCu +#define XORQ_RBE_RCU XORQ rBe, rCu +#define XORQ_RDU_RCU XORQ rDu, rCu +#define XORQ_RDA_RCA XORQ rDa, rCa +#define XORQ_RDE_RCE XORQ rDe, rCe + +#define mKeccakRound(iState, oState, rc, B_RBI_RCE, G_RT1_RCA, G_RT1_RCE, G_RBA_RCU, K_RT1_RCA, K_RT1_RCE, K_RBA_RCU, M_RT1_RCA, M_RT1_RCE, M_RBE_RCU, S_RDU_RCU, S_RDA_RCA, S_RDE_RCE) \ + /* Prepare round */ \ + MOVQ rCe, rDa; \ + ROLQ $1, rDa; \ + \ + MOVQ _bi(iState), rCi; \ + XORQ _gi(iState), rDi; \ + XORQ rCu, rDa; \ + XORQ _ki(iState), rCi; \ + XORQ _mi(iState), rDi; \ + XORQ rDi, rCi; \ + \ + MOVQ rCi, rDe; \ + ROLQ $1, rDe; \ + \ + MOVQ _bo(iState), rCo; \ + XORQ _go(iState), rDo; \ + XORQ rCa, rDe; \ + XORQ _ko(iState), rCo; \ + XORQ _mo(iState), rDo; \ + XORQ rDo, rCo; \ + \ + MOVQ rCo, rDi; \ + ROLQ $1, rDi; \ + \ + MOVQ rCu, rDo; \ + XORQ rCe, rDi; \ + ROLQ $1, rDo; \ + \ + MOVQ rCa, rDu; \ + XORQ rCi, rDo; \ + ROLQ $1, rDu; \ + \ + /* Result b */ \ + MOVQ _ba(iState), rBa; \ + MOVQ _ge(iState), rBe; \ + XORQ rCo, rDu; \ + MOVQ _ki(iState), rBi; \ + MOVQ _mo(iState), rBo; \ + MOVQ _su(iState), rBu; \ + XORQ rDe, rBe; \ + ROLQ $44, rBe; \ + XORQ rDi, rBi; \ + XORQ rDa, rBa; \ + ROLQ $43, rBi; \ + \ + MOVQ rBe, rCa; \ + MOVQ rc, rT1; \ + ORQ rBi, rCa; \ + XORQ rBa, rT1; \ + XORQ rT1, rCa; \ + MOVQ rCa, _ba(oState); \ + \ + XORQ rDu, rBu; \ + ROLQ $14, rBu; \ + MOVQ rBa, rCu; \ + ANDQ rBe, rCu; \ + XORQ rBu, rCu; \ + MOVQ rCu, _bu(oState); \ + \ + XORQ rDo, rBo; \ + ROLQ $21, rBo; \ + MOVQ rBo, rT1; \ + ANDQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _bi(oState); \ + \ + NOTQ rBi; \ + ORQ rBa, rBu; \ + ORQ rBo, rBi; \ + XORQ rBo, rBu; \ + XORQ rBe, rBi; \ + MOVQ rBu, _bo(oState); \ + MOVQ rBi, _be(oState); \ + B_RBI_RCE; \ + \ + /* Result g */ \ + MOVQ _gu(iState), rBe; \ + XORQ rDu, rBe; \ + MOVQ _ka(iState), rBi; \ + ROLQ $20, rBe; \ + XORQ rDa, rBi; \ + ROLQ $3, rBi; \ + MOVQ _bo(iState), rBa; \ + MOVQ rBe, rT1; \ + ORQ rBi, rT1; \ + XORQ rDo, rBa; \ + MOVQ _me(iState), rBo; \ + MOVQ _si(iState), rBu; \ + ROLQ $28, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ga(oState); \ + G_RT1_RCA; \ + \ + XORQ rDe, rBo; \ + ROLQ $45, rBo; \ + MOVQ rBi, rT1; \ + ANDQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _ge(oState); \ + G_RT1_RCE; \ + \ + XORQ rDi, rBu; \ + ROLQ $61, rBu; \ + MOVQ rBu, rT1; \ + ORQ rBa, rT1; \ + XORQ rBo, rT1; \ + MOVQ rT1, _go(oState); \ + \ + ANDQ rBe, rBa; \ + XORQ rBu, rBa; \ + MOVQ rBa, _gu(oState); \ + NOTQ rBu; \ + G_RBA_RCU; \ + \ + ORQ rBu, rBo; \ + XORQ rBi, rBo; \ + MOVQ rBo, _gi(oState); \ + \ + /* Result k */ \ + MOVQ _be(iState), rBa; \ + MOVQ _gi(iState), rBe; \ + MOVQ _ko(iState), rBi; \ + MOVQ _mu(iState), rBo; \ + MOVQ _sa(iState), rBu; \ + XORQ rDi, rBe; \ + ROLQ $6, rBe; \ + XORQ rDo, rBi; \ + ROLQ $25, rBi; \ + MOVQ rBe, rT1; \ + ORQ rBi, rT1; \ + XORQ rDe, rBa; \ + ROLQ $1, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ka(oState); \ + K_RT1_RCA; \ + \ + XORQ rDu, rBo; \ + ROLQ $8, rBo; \ + MOVQ rBi, rT1; \ + ANDQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _ke(oState); \ + K_RT1_RCE; \ + \ + XORQ rDa, rBu; \ + ROLQ $18, rBu; \ + NOTQ rBo; \ + MOVQ rBo, rT1; \ + ANDQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _ki(oState); \ + \ + MOVQ rBu, rT1; \ + ORQ rBa, rT1; \ + XORQ rBo, rT1; \ + MOVQ rT1, _ko(oState); \ + \ + ANDQ rBe, rBa; \ + XORQ rBu, rBa; \ + MOVQ rBa, _ku(oState); \ + K_RBA_RCU; \ + \ + /* Result m */ \ + MOVQ _ga(iState), rBe; \ + XORQ rDa, rBe; \ + MOVQ _ke(iState), rBi; \ + ROLQ $36, rBe; \ + XORQ rDe, rBi; \ + MOVQ _bu(iState), rBa; \ + ROLQ $10, rBi; \ + MOVQ rBe, rT1; \ + MOVQ _mi(iState), rBo; \ + ANDQ rBi, rT1; \ + XORQ rDu, rBa; \ + MOVQ _so(iState), rBu; \ + ROLQ $27, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ma(oState); \ + M_RT1_RCA; \ + \ + XORQ rDi, rBo; \ + ROLQ $15, rBo; \ + MOVQ rBi, rT1; \ + ORQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _me(oState); \ + M_RT1_RCE; \ + \ + XORQ rDo, rBu; \ + ROLQ $56, rBu; \ + NOTQ rBo; \ + MOVQ rBo, rT1; \ + ORQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _mi(oState); \ + \ + ORQ rBa, rBe; \ + XORQ rBu, rBe; \ + MOVQ rBe, _mu(oState); \ + \ + ANDQ rBa, rBu; \ + XORQ rBo, rBu; \ + MOVQ rBu, _mo(oState); \ + M_RBE_RCU; \ + \ + /* Result s */ \ + MOVQ _bi(iState), rBa; \ + MOVQ _go(iState), rBe; \ + MOVQ _ku(iState), rBi; \ + XORQ rDi, rBa; \ + MOVQ _ma(iState), rBo; \ + ROLQ $62, rBa; \ + XORQ rDo, rBe; \ + MOVQ _se(iState), rBu; \ + ROLQ $55, rBe; \ + \ + XORQ rDu, rBi; \ + MOVQ rBa, rDu; \ + XORQ rDe, rBu; \ + ROLQ $2, rBu; \ + ANDQ rBe, rDu; \ + XORQ rBu, rDu; \ + MOVQ rDu, _su(oState); \ + \ + ROLQ $39, rBi; \ + S_RDU_RCU; \ + NOTQ rBe; \ + XORQ rDa, rBo; \ + MOVQ rBe, rDa; \ + ANDQ rBi, rDa; \ + XORQ rBa, rDa; \ + MOVQ rDa, _sa(oState); \ + S_RDA_RCA; \ + \ + ROLQ $41, rBo; \ + MOVQ rBi, rDe; \ + ORQ rBo, rDe; \ + XORQ rBe, rDe; \ + MOVQ rDe, _se(oState); \ + S_RDE_RCE; \ + \ + MOVQ rBo, rDi; \ + MOVQ rBu, rDo; \ + ANDQ rBu, rDi; \ + ORQ rBa, rDo; \ + XORQ rBi, rDi; \ + XORQ rBo, rDo; \ + MOVQ rDi, _si(oState); \ + MOVQ rDo, _so(oState) \ + +// func keccakF1600(state *[25]uint64) +TEXT ·keccakF1600(SB), 0, $200-8 + MOVQ state+0(FP), rpState + SUBQ $(8*25), SP + + // Convert the user state into an internal state + NOTQ _be(rpState) + NOTQ _bi(rpState) + NOTQ _go(rpState) + NOTQ _ki(rpState) + NOTQ _mi(rpState) + NOTQ _sa(rpState) + + // Execute the KeccakF permutation + MOVQ _ba(rpState), rCa + MOVQ _be(rpState), rCe + MOVQ _bu(rpState), rCu + + XORQ _ga(rpState), rCa + XORQ _ge(rpState), rCe + XORQ _gu(rpState), rCu + + XORQ _ka(rpState), rCa + XORQ _ke(rpState), rCe + XORQ _ku(rpState), rCu + + XORQ _ma(rpState), rCa + XORQ _me(rpState), rCe + XORQ _mu(rpState), rCu + + XORQ _sa(rpState), rCa + XORQ _se(rpState), rCe + MOVQ _si(rpState), rDi + MOVQ _so(rpState), rDo + XORQ _su(rpState), rCu + + mKeccakRound(rpState, rpStack, $0x0000000000000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000000008082, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x800000000000808a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000080008000, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000008a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000000000088, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x0000000080008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x000000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000008000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x800000000000008b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000000008089, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008003, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000000008002, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000000080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000800a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x800000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP) + + // Revert the internal state to the user state + NOTQ _be(rpState) + NOTQ _bi(rpState) + NOTQ _go(rpState) + NOTQ _ki(rpState) + NOTQ _mi(rpState) + NOTQ _sa(rpState) + + ADDQ $(8*25), SP + RET diff --git a/vendor/golang.org/x/crypto/sha3/register.go b/vendor/golang.org/x/crypto/sha3/register.go new file mode 100644 index 0000000..3cf6a22 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/register.go @@ -0,0 +1,18 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.4 + +package sha3 + +import ( + "crypto" +) + +func init() { + crypto.RegisterHash(crypto.SHA3_224, New224) + crypto.RegisterHash(crypto.SHA3_256, New256) + crypto.RegisterHash(crypto.SHA3_384, New384) + crypto.RegisterHash(crypto.SHA3_512, New512) +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3.go b/vendor/golang.org/x/crypto/sha3/sha3.go new file mode 100644 index 0000000..c86167c --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3.go @@ -0,0 +1,193 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// spongeDirection indicates the direction bytes are flowing through the sponge. +type spongeDirection int + +const ( + // spongeAbsorbing indicates that the sponge is absorbing input. + spongeAbsorbing spongeDirection = iota + // spongeSqueezing indicates that the sponge is being squeezed. + spongeSqueezing +) + +const ( + // maxRate is the maximum size of the internal buffer. SHAKE-256 + // currently needs the largest buffer. + maxRate = 168 +) + +type state struct { + // Generic sponge components. + a [25]uint64 // main state of the hash + buf []byte // points into storage + rate int // the number of bytes of state to use + + // dsbyte contains the "domain separation" bits and the first bit of + // the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the + // SHA-3 and SHAKE functions by appending bitstrings to the message. + // Using a little-endian bit-ordering convention, these are "01" for SHA-3 + // and "1111" for SHAKE, or 00000010b and 00001111b, respectively. Then the + // padding rule from section 5.1 is applied to pad the message to a multiple + // of the rate, which involves adding a "1" bit, zero or more "0" bits, and + // a final "1" bit. We merge the first "1" bit from the padding into dsbyte, + // giving 00000110b (0x06) and 00011111b (0x1f). + // [1] http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf + // "Draft FIPS 202: SHA-3 Standard: Permutation-Based Hash and + // Extendable-Output Functions (May 2014)" + dsbyte byte + storage [maxRate]byte + + // Specific to SHA-3 and SHAKE. + fixedOutput bool // whether this is a fixed-output-length instance + outputLen int // the default output size in bytes + state spongeDirection // whether the sponge is absorbing or squeezing +} + +// BlockSize returns the rate of sponge underlying this hash function. +func (d *state) BlockSize() int { return d.rate } + +// Size returns the output size of the hash function in bytes. +func (d *state) Size() int { return d.outputLen } + +// Reset clears the internal state by zeroing the sponge state and +// the byte buffer, and setting Sponge.state to absorbing. +func (d *state) Reset() { + // Zero the permutation's state. + for i := range d.a { + d.a[i] = 0 + } + d.state = spongeAbsorbing + d.buf = d.storage[:0] +} + +func (d *state) clone() *state { + ret := *d + if ret.state == spongeAbsorbing { + ret.buf = ret.storage[:len(ret.buf)] + } else { + ret.buf = ret.storage[d.rate-cap(d.buf) : d.rate] + } + + return &ret +} + +// permute applies the KeccakF-1600 permutation. It handles +// any input-output buffering. +func (d *state) permute() { + switch d.state { + case spongeAbsorbing: + // If we're absorbing, we need to xor the input into the state + // before applying the permutation. + xorIn(d, d.buf) + d.buf = d.storage[:0] + keccakF1600(&d.a) + case spongeSqueezing: + // If we're squeezing, we need to apply the permutatin before + // copying more output. + keccakF1600(&d.a) + d.buf = d.storage[:d.rate] + copyOut(d, d.buf) + } +} + +// pads appends the domain separation bits in dsbyte, applies +// the multi-bitrate 10..1 padding rule, and permutes the state. +func (d *state) padAndPermute(dsbyte byte) { + if d.buf == nil { + d.buf = d.storage[:0] + } + // Pad with this instance's domain-separator bits. We know that there's + // at least one byte of space in d.buf because, if it were full, + // permute would have been called to empty it. dsbyte also contains the + // first one bit for the padding. See the comment in the state struct. + d.buf = append(d.buf, dsbyte) + zerosStart := len(d.buf) + d.buf = d.storage[:d.rate] + for i := zerosStart; i < d.rate; i++ { + d.buf[i] = 0 + } + // This adds the final one bit for the padding. Because of the way that + // bits are numbered from the LSB upwards, the final bit is the MSB of + // the last byte. + d.buf[d.rate-1] ^= 0x80 + // Apply the permutation + d.permute() + d.state = spongeSqueezing + d.buf = d.storage[:d.rate] + copyOut(d, d.buf) +} + +// Write absorbs more data into the hash's state. It produces an error +// if more data is written to the ShakeHash after writing +func (d *state) Write(p []byte) (written int, err error) { + if d.state != spongeAbsorbing { + panic("sha3: write to sponge after read") + } + if d.buf == nil { + d.buf = d.storage[:0] + } + written = len(p) + + for len(p) > 0 { + if len(d.buf) == 0 && len(p) >= d.rate { + // The fast path; absorb a full "rate" bytes of input and apply the permutation. + xorIn(d, p[:d.rate]) + p = p[d.rate:] + keccakF1600(&d.a) + } else { + // The slow path; buffer the input until we can fill the sponge, and then xor it in. + todo := d.rate - len(d.buf) + if todo > len(p) { + todo = len(p) + } + d.buf = append(d.buf, p[:todo]...) + p = p[todo:] + + // If the sponge is full, apply the permutation. + if len(d.buf) == d.rate { + d.permute() + } + } + } + + return +} + +// Read squeezes an arbitrary number of bytes from the sponge. +func (d *state) Read(out []byte) (n int, err error) { + // If we're still absorbing, pad and apply the permutation. + if d.state == spongeAbsorbing { + d.padAndPermute(d.dsbyte) + } + + n = len(out) + + // Now, do the squeezing. + for len(out) > 0 { + n := copy(out, d.buf) + d.buf = d.buf[n:] + out = out[n:] + + // Apply the permutation if we've squeezed the sponge dry. + if len(d.buf) == 0 { + d.permute() + } + } + + return +} + +// Sum applies padding to the hash state and then squeezes out the desired +// number of output bytes. +func (d *state) Sum(in []byte) []byte { + // Make a copy of the original hash so that caller can keep writing + // and summing. + dup := d.clone() + hash := make([]byte, dup.outputLen) + dup.Read(hash) + return append(in, hash...) +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3_test.go b/vendor/golang.org/x/crypto/sha3/sha3_test.go new file mode 100644 index 0000000..caf72f2 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3_test.go @@ -0,0 +1,306 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// Tests include all the ShortMsgKATs provided by the Keccak team at +// https://github.com/gvanas/KeccakCodePackage +// +// They only include the zero-bit case of the bitwise testvectors +// published by NIST in the draft of FIPS-202. + +import ( + "bytes" + "compress/flate" + "encoding/hex" + "encoding/json" + "hash" + "os" + "strings" + "testing" +) + +const ( + testString = "brekeccakkeccak koax koax" + katFilename = "testdata/keccakKats.json.deflate" +) + +// Internal-use instances of SHAKE used to test against KATs. +func newHashShake128() hash.Hash { + return &state{rate: 168, dsbyte: 0x1f, outputLen: 512} +} +func newHashShake256() hash.Hash { + return &state{rate: 136, dsbyte: 0x1f, outputLen: 512} +} + +// testDigests contains functions returning hash.Hash instances +// with output-length equal to the KAT length for both SHA-3 and +// SHAKE instances. +var testDigests = map[string]func() hash.Hash{ + "SHA3-224": New224, + "SHA3-256": New256, + "SHA3-384": New384, + "SHA3-512": New512, + "SHAKE128": newHashShake128, + "SHAKE256": newHashShake256, +} + +// testShakes contains functions that return ShakeHash instances for +// testing the ShakeHash-specific interface. +var testShakes = map[string]func() ShakeHash{ + "SHAKE128": NewShake128, + "SHAKE256": NewShake256, +} + +// decodeHex converts a hex-encoded string into a raw byte string. +func decodeHex(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return b +} + +// structs used to marshal JSON test-cases. +type KeccakKats struct { + Kats map[string][]struct { + Digest string `json:"digest"` + Length int64 `json:"length"` + Message string `json:"message"` + } +} + +func testUnalignedAndGeneric(t *testing.T, testf func(impl string)) { + xorInOrig, copyOutOrig := xorIn, copyOut + xorIn, copyOut = xorInGeneric, copyOutGeneric + testf("generic") + if xorImplementationUnaligned != "generic" { + xorIn, copyOut = xorInUnaligned, copyOutUnaligned + testf("unaligned") + } + xorIn, copyOut = xorInOrig, copyOutOrig +} + +// TestKeccakKats tests the SHA-3 and Shake implementations against all the +// ShortMsgKATs from https://github.com/gvanas/KeccakCodePackage +// (The testvectors are stored in keccakKats.json.deflate due to their length.) +func TestKeccakKats(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + // Read the KATs. + deflated, err := os.Open(katFilename) + if err != nil { + t.Errorf("error opening %s: %s", katFilename, err) + } + file := flate.NewReader(deflated) + dec := json.NewDecoder(file) + var katSet KeccakKats + err = dec.Decode(&katSet) + if err != nil { + t.Errorf("error decoding KATs: %s", err) + } + + // Do the KATs. + for functionName, kats := range katSet.Kats { + d := testDigests[functionName]() + for _, kat := range kats { + d.Reset() + in, err := hex.DecodeString(kat.Message) + if err != nil { + t.Errorf("error decoding KAT: %s", err) + } + d.Write(in[:kat.Length/8]) + got := strings.ToUpper(hex.EncodeToString(d.Sum(nil))) + if got != kat.Digest { + t.Errorf("function=%s, implementation=%s, length=%d\nmessage:\n %s\ngot:\n %s\nwanted:\n %s", + functionName, impl, kat.Length, kat.Message, got, kat.Digest) + t.Logf("wanted %+v", kat) + t.FailNow() + } + continue + } + } + }) +} + +// TestUnalignedWrite tests that writing data in an arbitrary pattern with +// small input buffers. +func testUnalignedWrite(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + buf := sequentialBytes(0x10000) + for alg, df := range testDigests { + d := df() + d.Reset() + d.Write(buf) + want := d.Sum(nil) + d.Reset() + for i := 0; i < len(buf); { + // Cycle through offsets which make a 137 byte sequence. + // Because 137 is prime this sequence should exercise all corner cases. + offsets := [17]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1} + for _, j := range offsets { + if v := len(buf) - i; v < j { + j = v + } + d.Write(buf[i : i+j]) + i += j + } + } + got := d.Sum(nil) + if !bytes.Equal(got, want) { + t.Errorf("Unaligned writes, implementation=%s, alg=%s\ngot %q, want %q", impl, alg, got, want) + } + } + }) +} + +// TestAppend checks that appending works when reallocation is necessary. +func TestAppend(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + d := New224() + + for capacity := 2; capacity <= 66; capacity += 64 { + // The first time around the loop, Sum will have to reallocate. + // The second time, it will not. + buf := make([]byte, 2, capacity) + d.Reset() + d.Write([]byte{0xcc}) + buf = d.Sum(buf) + expected := "0000DF70ADC49B2E76EEE3A6931B93FA41841C3AF2CDF5B32A18B5478C39" + if got := strings.ToUpper(hex.EncodeToString(buf)); got != expected { + t.Errorf("got %s, want %s", got, expected) + } + } + }) +} + +// TestAppendNoRealloc tests that appending works when no reallocation is necessary. +func TestAppendNoRealloc(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + buf := make([]byte, 1, 200) + d := New224() + d.Write([]byte{0xcc}) + buf = d.Sum(buf) + expected := "00DF70ADC49B2E76EEE3A6931B93FA41841C3AF2CDF5B32A18B5478C39" + if got := strings.ToUpper(hex.EncodeToString(buf)); got != expected { + t.Errorf("%s: got %s, want %s", impl, got, expected) + } + }) +} + +// TestSqueezing checks that squeezing the full output a single time produces +// the same output as repeatedly squeezing the instance. +func TestSqueezing(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + for functionName, newShakeHash := range testShakes { + d0 := newShakeHash() + d0.Write([]byte(testString)) + ref := make([]byte, 32) + d0.Read(ref) + + d1 := newShakeHash() + d1.Write([]byte(testString)) + var multiple []byte + for _ = range ref { + one := make([]byte, 1) + d1.Read(one) + multiple = append(multiple, one...) + } + if !bytes.Equal(ref, multiple) { + t.Errorf("%s (%s): squeezing %d bytes one at a time failed", functionName, impl, len(ref)) + } + } + }) +} + +// sequentialBytes produces a buffer of size consecutive bytes 0x00, 0x01, ..., used for testing. +func sequentialBytes(size int) []byte { + result := make([]byte, size) + for i := range result { + result[i] = byte(i) + } + return result +} + +// BenchmarkPermutationFunction measures the speed of the permutation function +// with no input data. +func BenchmarkPermutationFunction(b *testing.B) { + b.SetBytes(int64(200)) + var lanes [25]uint64 + for i := 0; i < b.N; i++ { + keccakF1600(&lanes) + } +} + +// benchmarkHash tests the speed to hash num buffers of buflen each. +func benchmarkHash(b *testing.B, h hash.Hash, size, num int) { + b.StopTimer() + h.Reset() + data := sequentialBytes(size) + b.SetBytes(int64(size * num)) + b.StartTimer() + + var state []byte + for i := 0; i < b.N; i++ { + for j := 0; j < num; j++ { + h.Write(data) + } + state = h.Sum(state[:0]) + } + b.StopTimer() + h.Reset() +} + +// benchmarkShake is specialized to the Shake instances, which don't +// require a copy on reading output. +func benchmarkShake(b *testing.B, h ShakeHash, size, num int) { + b.StopTimer() + h.Reset() + data := sequentialBytes(size) + d := make([]byte, 32) + + b.SetBytes(int64(size * num)) + b.StartTimer() + + for i := 0; i < b.N; i++ { + h.Reset() + for j := 0; j < num; j++ { + h.Write(data) + } + h.Read(d) + } +} + +func BenchmarkSha3_512_MTU(b *testing.B) { benchmarkHash(b, New512(), 1350, 1) } +func BenchmarkSha3_384_MTU(b *testing.B) { benchmarkHash(b, New384(), 1350, 1) } +func BenchmarkSha3_256_MTU(b *testing.B) { benchmarkHash(b, New256(), 1350, 1) } +func BenchmarkSha3_224_MTU(b *testing.B) { benchmarkHash(b, New224(), 1350, 1) } + +func BenchmarkShake128_MTU(b *testing.B) { benchmarkShake(b, NewShake128(), 1350, 1) } +func BenchmarkShake256_MTU(b *testing.B) { benchmarkShake(b, NewShake256(), 1350, 1) } +func BenchmarkShake256_16x(b *testing.B) { benchmarkShake(b, NewShake256(), 16, 1024) } +func BenchmarkShake256_1MiB(b *testing.B) { benchmarkShake(b, NewShake256(), 1024, 1024) } + +func BenchmarkSha3_512_1MiB(b *testing.B) { benchmarkHash(b, New512(), 1024, 1024) } + +func Example_sum() { + buf := []byte("some data to hash") + // A hash needs to be 64 bytes long to have 256-bit collision resistance. + h := make([]byte, 64) + // Compute a 64-byte hash of buf and put it in h. + ShakeSum256(h, buf) +} + +func Example_mac() { + k := []byte("this is a secret key; you should generate a strong random key that's at least 32 bytes long") + buf := []byte("and this is some data to authenticate") + // A MAC with 32 bytes of output has 256-bit security strength -- if you use at least a 32-byte-long key. + h := make([]byte, 32) + d := NewShake256() + // Write the key into the hash. + d.Write(k) + // Now write the data. + d.Write(buf) + // Read 32 bytes of output from the hash into h. + d.Read(h) +} diff --git a/vendor/golang.org/x/crypto/sha3/shake.go b/vendor/golang.org/x/crypto/sha3/shake.go new file mode 100644 index 0000000..841f986 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/shake.go @@ -0,0 +1,60 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// This file defines the ShakeHash interface, and provides +// functions for creating SHAKE instances, as well as utility +// functions for hashing bytes to arbitrary-length output. + +import ( + "io" +) + +// ShakeHash defines the interface to hash functions that +// support arbitrary-length output. +type ShakeHash interface { + // Write absorbs more data into the hash's state. It panics if input is + // written to it after output has been read from it. + io.Writer + + // Read reads more output from the hash; reading affects the hash's + // state. (ShakeHash.Read is thus very different from Hash.Sum) + // It never returns an error. + io.Reader + + // Clone returns a copy of the ShakeHash in its current state. + Clone() ShakeHash + + // Reset resets the ShakeHash to its initial state. + Reset() +} + +func (d *state) Clone() ShakeHash { + return d.clone() +} + +// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. +// Its generic security strength is 128 bits against all attacks if at +// least 32 bytes of its output are used. +func NewShake128() ShakeHash { return &state{rate: 168, dsbyte: 0x1f} } + +// NewShake256 creates a new SHAKE128 variable-output-length ShakeHash. +// Its generic security strength is 256 bits against all attacks if +// at least 64 bytes of its output are used. +func NewShake256() ShakeHash { return &state{rate: 136, dsbyte: 0x1f} } + +// ShakeSum128 writes an arbitrary-length digest of data into hash. +func ShakeSum128(hash, data []byte) { + h := NewShake128() + h.Write(data) + h.Read(hash) +} + +// ShakeSum256 writes an arbitrary-length digest of data into hash. +func ShakeSum256(hash, data []byte) { + h := NewShake256() + h.Write(data) + h.Read(hash) +} diff --git a/vendor/golang.org/x/crypto/sha3/testdata/keccakKats.json.deflate b/vendor/golang.org/x/crypto/sha3/testdata/keccakKats.json.deflate new file mode 100644 index 0000000000000000000000000000000000000000..62e85ae24236b46c09e5cfa84c71c69f5cc33cf6 GIT binary patch literal 521342 zcmV(wKzy6Q^@gM*Azx~Vq{J;Fmzx?Ch{x$i(5WRo?```ch?|=FG z>3{z3AOH9N=YRii|M5Tm`SX8hy#;>6sy0=|rHk_99c*FNJPEr@%PjJ-+%s}pIW)HOadPLF*FZ1|m#XVEZQL^J z8}q2xyRg#2Gfi@x>sGO%u(G>lHS%u@0*@p+eRb&B7)x6 zN8q{HPb`wT#pgU7NDnR~FjQ-F0CtB9*D1syD{4u-^FG;N`lJK5Z?1ph0V@v4gb@;o z8qApUxUUa^^qr%q02@32@&v6X{_!F2Q<;Q^{IbPjE;~`mCci#u zMXxC(#SH=&=YW#-X->!mi}R8_Q3iQ1K4E9TUk>*v<=wGIL}ZFwdcyrvM>yu(Y|WHZ zh9&T-GeNEaN;wWM*Vf0EkE>rCJpB5oPf>5~j`ZA($87HtIsElm^4j**aT_lNKcehlYQBnAr;U<|JieS6xWwAc)abQG0+dqn7?Fg;B-D9(fn6uhft?JZ|+3lz< zvO8!_!SD0?{8Mw33Z6ySJ>&VFSc>heIicxKlXZB~XFkL}qG5E{F7WVGKX}(VU5Mv@ zf*j!2ik}Gb=c{m94B7{eXL^vfPbf47&cSx)rv~rFAG8SM5QpKG^m^pdjS^ATl^tZ> z*cJeYq1M+ozR&kzqR!JLqWGYNNFG<|280)367J7eOtW3GiA9n$nOnp!eL@#bj1V8G zswVB47O_h!eSM|SXW-R+d;0`fR`D|Lkz2j-!9(f{TlpEo#3NYQAbALYqo2mSm)NAM z^2X9WMN=(C+8ugN5_Od;TMPU?4 zFX89gLU+|B>{>nwWPJ@*tYDs62jwJQu#F;1ONDvFU*8+_`Muj!Kqhham`AS*G?d#O zDE2s)6yK#Da{u&IVg()08$Y)u0?8`5f!EAi$siCRLI9$gaAs65zGg0f&o9oK4thL1 zFCkRKlNGwj+Q*d+YK^C4-81E43M@%``3B85inwP>`lH z@nk)m-MYfhuSWgO04>B~k`dd_$s#SE#D?DmV4&wS0e(!jS0es?raoK^E~s8&BN3R~ zV<~)xob~uU+);ZpyS%P9IKKDw-QQz5oEME>-^8f*U88khA(}yy@Q^;GD=T}KnRy~T{b(Q;r-M&m%Xy_YdqpJtt={SmZP9X5ztwEVSar&5ysd1_3huoKX9U} zdm(hg&N=5Cq(2AGFm!hA2L`SEjzS<@BeLn|=0a0l>?#AeVveTYHcwZHKZzX2^u=p}x89dl| zqTF1*5>CQszHa*l=1lh8(b4RTB-FzD*_$dEi5Vh5!q&-%<~ z<}HMlD^~M^GSd@U7Tj7k&shek{Ho%6_fa%`8+RB>MciwXl#jrMSGKJckis=G5%MLZY_&M!16{9_UPlMkr#ro?jX_5l2W!?aI zXKw==^I*#SGxNlE21ZI93R<=8qTAIY*hLQz1BfJl^VM=!qcY8m|m})$_ggv8+s_ZA#;3YH#0r_#hXqRARsvTXnX_ zM>jV}E}!7295*odQoN_-`+EmCV}dl9(8{kH#oZ0cp9YT2Qlry~7>t;!ug#>)XGNbb z(C)JvL8cbvd5#>jrm~-DrR!Z#P$hGx z4+WQ{?U^dZnlVHrp?S|sWT*@JOe@TvegL?SZ&~1a`w47EArJ_!mW=2^c<92+1lYSp z_Elgf1Ttvn*Q=Y;ROMQyKeZR-k7Y%!1#W}o&-=quDH?fQw7I2k=sA*x>B1*d@6#EW z4T#wwpO@0^V|jXL{r0HN$F>LO#RXKB!Yk)!T3x9jlm|mmNtWfy5cz(y6}%QMphOjT zMv(=gn-6Ho4zPrYQ5+GAf|W9K z=@uuUI5$*ycQ^U&>KH_!QKfDt%X^_#Nc_oc`LrUyE1P0}Y6NmJeZ?;+`!=+HI$=n& z09!hk2I;l*BWxB_$d+4SPBNz>I2yiJST>)vefvg&V$zoO?zlVl5{RMExW*VKhTtlX z7%8&9a_B92f@@ZweQ=VniP9NhyVzt~`TKkh^zz+42W3U{>vkyzGk7CW`UW*oAXB(! zA09A#RcD_Lg7!GgNN_ahkqPuW#0SFE!_9nA(miK_Z(aP&OS!ljW2ioV1M`fO^;Oh` zWRc)R)zA7Y1+NPH&2EVx>)seCtP~hteu!Y?cF1mpFal0(zW zx;qyQdV5NiY(3z8A_`uWez;6;tnE;Y!Z)km^xAmz3M##bi=RCJ`$1OLD{7foZO_iVl{hb@Wn09sTuRizS zJB=*LP{pRbPK8r#pUYyi2@EeQ)Y;O+O4#JKU4lpFF>J1D7JVSxX6BL^t3l_4hcE4Z zZ{vYHm7{GNDsg%nNbq_hw)Do}k^`RO!~gi-t0kZZ&oP&RH-wc%)- zJ6n{?Ota$HkN2JJ5k=Q~%BMVZG*&~M|@RE zpYF2_7h#Bi+M1MLISzyR=d{|Z_a1`84Qaebm6_zNoxoN^yV);B#^W{AsS?IfgKrG1 zXA#cI&w1|2B$=V~n4GvtZP^6AK6~!;V6gDQWFEuNz1XNvR{7J1VEPFGN;1>PtK-uf#{yBmV8XY(|)myl9jtD-j2v#>R+bTpZNGRt|DRoh^M z59WGr_4QeG2*2q>2vK;nj8iKx?TWc_|D-9doH(T1Bc@LDe%7J zt%j$r7m-gp)*ULe#h#Oh)4C%i=}NlTU8`7}vOT(=^*%QYp6FT$E}l$*d2@3%LyE)z zRl!{x%e$ADm!I{1ded%oqk|X;bsb+c7#yZCA+zYnylRYW%7?h^J-cfuhD%GZd5SmC z%n5f}6gE?48Fr8lg`Z8SR_D)(VYW$Xnaq}K-kHA~x%0Ca#ffBy8VwfY?AjfqPd&@0 zOFh(*o{rlPtYO6(%eqE_6p&})Tj_o?>NozDW4Iu)NnY5n*5j_Va!F0@tx2DHEApaw zSFlR2OSAF!-GQOhS_e}UmB_NjIP3Jb46YYP^3^f3w@!C)%%`gL)32oE@>Gv$;hYhh zX?@bkU%nj$4@^m0fh!8p;;u}KYt>FReF}>J59I+~Q@NnGJ^?y(+r(GbA;2bKAipD(V}+;rvkwz3p$bKYFbIQf zfVT##ZB^t1<90GWQO;(~EQhbU{nNwfCK++6l8gykm_iUPSL68s6GEBJIuj~?BPQhiAiqa zhC}POq#Z3D;BKFles55Al>u6Glb#6YT8Tzz^rB$-@7lYYOXA3zubu5ehjZ{=Qjn$JiPWp7*31JQ2jQMc!b9v+06J%J1`%#>S|?11>A$Nd?;B`6An>7=nHsCjaYAB^%)lGiH0qp@M^Rz?QN6&Y z!<|^`1JH?0Q}m$4Cmk_|MNc2N^Q6VZj*yZ|Oiy}qGc8B~Pxw2`dPxlQC`-$HSbbVD z6IX{{_z1J%`YULh_j}%Nl&4@9t`~IyG|ouD?d&?NMSz=?dU^$==Jm?)tA70Sx((7? zFUZpsM$@UgZb~ip)*4f};20h>kh<4k01#bs>VM?IJK>P^pzMY1gl?A4x#NWI3c z2ajW%C5_(F<=RizlXc4uIC+>A(A8%*wy@AB)O+S5yXXuXJD#{>UkK2r>!Gd}k6*ZN zRKc5#4n0ybN9-`}eJK=L&x|^G_qH5Tg=&uQ1pYM6G(~)I#>2ryBQ}vhVP{E4Ytc8! zamm4Rm<{l=<4KJTkUSinR|wgwK#}wsEZJ{FIV*|m;LLPWmOe4~^uOyzZ@0)AJrNu5 zI9f!;%RC*V+@}(!DIe{~Qp2{f-KiHn(Q(*vSwzEk$>*DO6`;e77W%s0$(j~Lqp3^* zPhc(E^-m?lY?t@pJbPhK+?Q^bPpM3n$*scc)jkM*6iYPvg#v#%Vb=09DtT*U{Awy~ z0>zE>=_A2@M_9~P)j?yI9m&#fnThTIhuEPj^X>T+*bpWmd0E9t>BR9{Eyt7VUOnJnw zb%eW(Ulk9dKzpUPoI7lm56SHyTX2Q}ZY>iC1i9Y$KB5iAiRkdjH)m^*`<_*n_uT}s z(|DShLXyPwyBeckXk3zVLGUJDXbDXz32u_4ki49fk~hz^3oPESyT>OQpN@%KLyma5 zL!}4rjy)uMcdYh&dY)_{p#@fByo7U50%hwd8LqN*EF$a4%gE2vlXkIqB`#5prDWYpvGjfW0K?k6!Of(h-yL)GLI|;Tw#gotfRH ztu+*w4nO6bW@6hDt3VFR^!%AC5GY7Wxp;#^&K>DB*QJ>qMM^zv?~IZrX58(mAe<^a2dHOPh~|Obt!?#9Jb`jyUI7^V6`L# z2Ee?RL|ijcINb4C7XzY!N(tr_7N>UH4!tq37Ygt9^!YlriuNMIiBgHY2GMo8-$SgH z*beqNvXxihC?BXOd^&5@O)wAMSe?YnwtFmOHjOqul2X2JkSBEL^sO0Y)d;4f=cYZZ z?XH^iv@M30d|al0?d_3(vbrPPjQ zNxc`oc-l^_ovYXQ{7G?p{`Q&zn+@FSeKc9-7_m!R4EXZJi+IGENX4_n3{9V2!=Da} zG{N!Qok6lgSLLV<77M*8I^Z_O@Xbh^3Z7887Xx^U`(u&kpt?!duMrT@JMfr9l<1{A znAN?R>ZH&;yaM2dCk1%h*Z8!iNU*pjM?`ym<~q9GBZ-&mBD3#Wb-G*7QY8?*IOAyL zR@uWLr>?&6d7obFh6!US$J#uJbG>5O<5~XPn(SQ;vsNS9*67_+@seka)0d@kz?La~ zEPJSV_p;WkQt?!r^sH7LOG-x)HyvD-a-&E3AOhVy8L{L=>S!J@{B-3fZhY{ByN(@2 z6WQM~ue7PSm(|ttG>GDOJb|vC2z|Qp2GqOTd-KGq%@FTirV%lAlH_U866krION^U% zd8GBQBFGd8`+!b5SB{)2S0bjIp5hVfjhv5g%X%C-C-=6Zlt5dn zfk|TrAK)uG?(_0^o9!a+CrWDm4)KNfcu6VAj7PrZFiu2X8B~P16sdRhBtIug)la8Z zettx;RyfCH25lzqt)S|HqYGSOYrCVyl)X0HM_b{1*+r%~nlN~2B`~~PdOa4g9rg@@ zAT4X>*^v94J1@OX!nSijt>CJtSTL`tFyNsw$5Pav9qpmpZSK6Q;SrDwO&#{^QAgai@ncoZ=at13dwF(W{o*f9hxkFm6dFjvpxB+o`Fp`b#9WlicHj@pGV%x zL$c>o3Ao_?MB>$J%ua&}&(0&w}6eHA8OZ>CgFM zpQ%p0jX?zJU7cIVB_d?PiiTSQJ4kbqF%kP#lz+N6_)|Op?Yq~luS}>zjNDcdF0&e> zqwYM0_$Gjc>9s`w*YoT0^Lqt&yl&%Hh#>Df#*gct5fF^l|m} zbAM4tu)5F@8Y!-tCxPh{6?Du!kuMoTLoD%mzd-iIrIR+rNFCYP+6c)W$8E2Qwu-(^ zH6L)?j3r5v;h2KA=<`g1px4PO-Wt)vqc>$FPm6^T_NP~!9{F;ql=|zK5KvGI2Y3pK z9MC;WPdo`O3S4VHb5ndedijVxqmZ|ZSMrwpI_>fK8=vOqfnB1n^%eM887k{+jlNFY zsj0MUY2F9$qBoqX(%Tjc82BwSvOf*km^Cdyct=0Ycu0w_FT0jMUfBzjB0RkOaWPcC3V1l>0xtQ|HvkX4H9Y#D`RWAMUqgCj=UB<$E zn>__VheUI&&JbXhJ9xZ8eq!ztyRonL>ZOryJY{-8R%+7o?q&NseN#Nyw=U2)gKqD& zz25GL+c!=4zy-nY!P_hyzb91k9_6$7>GJxV*<=vunriJ7vG!H?Tu!okP(SXy6jvjy z=T%>b;de4Ok)@%P!Nvj z763W7Q_J@;XPt6+iV}a zb>Trt1Z+J?T4@Iy8<*)2a!qu2?FLnG05@;CfHR%R$ppn6V>-u3_;`7UEjQD`g49!{ zu(cOFW80dDHaShHFn7!xIMl*wERZx)A{>Y zoV(`cbu}6&7p_e}0UfL^?Sfpym@T~(1r8FHeYPNAhGG}$$nsvI!PCHZu~+&`DT(_m zU)%~MQR(@+4dzCsNEh6_buOgElyiR@VLYS=S z@wl0LE2I`Hz~P=Sk4}Oq=zQVE`sry#*FgMWF9K02$LN9@a9=}kg+!e8^^-1k*j3jq z*#eAp(5$EtS>>07kg1d*2;HDYJ-jm|9&K|}YS+U|ar)<*@8Nd3C3E|UOunnikv=LC zvhoe*D#oPC*)}2mg2^5rZH-ifA z4&;JwM2xPMLM*oDc{QhxHf_DsB3<^;maC%%hxc+fpF#T3k^bzYJ9e`kZ-TnHO8vSy z^pAAthoT4XI(jE!kor`$R`*`H#oOoowCC6ekk6d9cW~L9G|FnJtWJ>aK@chCBEdRQt-2horL*d*zFPKM zSLUO)%6zvN?u*rueG(~dV3A@O2sNny3hPpGQhH{3AQZ|m(Y>#Jc3Ah@tMv$33eA|^ zH%ayIjifE|gD1+7T4>rd#=7%~-}jUd7g?1m60{3A^`=*7Dl4GCui;^^0$I@Rn@my$ z=8*tLaVv|!$%OTyQ32ZTXi2!3Bi z*%KjIs8e$1(ifxkncMhAbDB&Ym#e+HEQ*q;Ym`(Tgv(X!!PM2ECp01!YMVJ8`8xc) zFt>tY)YmCxXc>P>EGPl(ErYJ=@-Zq(qX@o$$ef^q_ZCW$IKBIJw^SW(-S?szS@|8J*o&s;jn;$D%Lv7i znyt=5W7E0bXr(vok|8$vF5(Nh$M8Zzg`oGb0=xp!(#A6is_4gBAktMvBMjpTgJha0 zKq>fOx%uQ}uqy8xf}L%qA%9CE`cCPENXhTrcHNRbrR3w zgxwN~K4-F^PZamMI`0WKQcNvCMejkgy%^q&dDvDX06F`hr&VUBs&dL*QVL%&B{U4U zISBzS1Cx6ivp>4Dm57EGd<*6W(oWcx?}Zm&KLDnULpMt7Ah|^ACE@j8+1K2Lc#@?onxXmvV+?c z=I_0CL<^oGnd0)OgkAyl@W{w%faR@W%h*#QddU|PE4;SgPp7M1@6Y+ouk@uocI!x9 z%zjzzG%SIo#V?LldRE2X_*k>yCz7AtCEa+T)jE{}NK4fjz|S(3>CFoZ5!k3+(ASBJ zS7FIe_$=uipQ<*b(HQdcoi)Hd8nh)6ZhnK?T>5OP_vqZ>-j+M|bB3}&Htzu3GLlVc zG-A}&QP71vn|pJ1ruzbV7>X+Ao~ZwxPNs-nb)R&)&QG;!6dbR4Ny&vXGd zNRG6+180@+y{J`z*8R5R&^LWYnwl{zUWpihRf&MlICE-7nu9 zd50a%A@+htIm%P5b$4ZYyv68EIfePqx)2^RxP;3?BfzkV!Y-*KMz0aEH#kRVFAtyl z!xxoNbnodX#2h{7WfqADvGQ#PH=Rgu$pwD_RxP1e1a)%SDLyh;>^b$*GaH)bkP~mz zluB3NiWeMKUo@ws&*VetM_0;*tY3J3-<_Am9JazDa$cJW%ewEoD zd?&i5XP)b+#yOzJ$cqftcj=UZDWvkYjj)O{D`a}>rE6+l20Q6g5DVG{`7tkFr3=gx zRoHW`aMSG0OUekhBzc8wt&0zmPy-i1<01R=-`BGfW!NUCD7eb;cPJ1{`&6IpbU%3u zTEwWTilgv_==Y^s-!>3-h|2=rtqxsF!~+dGVd$g+-8*V)?Hj=$w!qrfH+XdX?I)(6{YXMy zWeHLrlZ|T0#8D_ZfWre)dO4=#0$L)no6b(6#Ps@}&{e)9WSHeel|gjIB!h{ruwHK( zrVKrSF;sx6*GcMq;TtgeLJLwABPG3+r*u3)`OUSqZTn_4fR^?XJuHGAj5WtRf+sKA z9e(D{7Y1|O=N-#1U8{YX^y!d=5rcv-}- zsfPaEgO$QTd15srCra=x1MTwpss^BTJ#V~gT-+yQuehGE#RBAGf86H^m?DA?aT`g1 zS2FwYxSA#wQP{R6IKb5H!lR%Kwj*o+IkboPjN#!=#hyZtlkzQ&Tne&I`YaALmqN`e z14v$K65SBiy)R_HFYYG3$+v0jVLS!pwYCybwf6*rjYn6f$1r5mU9KZ=Jk*pT$RwH) z0)PVP3VfkU%Jg2KQf_&lTcJ@O=U@N{&neQG6&|!OEtgzJG!5hVsQ{veB)BEZ?%Q2i z=GUw-zAHm<8saG9s*@3Od=?LWstqVUrFt12D@5u zO(lR(%So&rt5~2nJFOWGGeRIyw^za93in$c=rJ*cCaglK z_e?z2b$v_=H+tvijE?~uH|c3(&X4ctC>YpSaU25)D){ zNPlSXzzDnh=9R@}kC#fasr5>wtv!U-;gT&{-W|C$sJAt*Cncwlq2P{~qT5FixA09i zsV7~mGIzu*bA;XI!xlpl)(!J9!^Dl9#VS>ma_Xkb zEJ|(erk)SMOY#r}i6vzkL|2?ESe0t9Y)_P6_mO5YTOuRZQ@N9slHA6h7{4B&z{CUx ztF*?4zzO%XmDNJd&xaFfCDwhS~Fr}_}*op#i;8uSEAl0(Ds}ZI%Kf&ars3_ zWNoKU@N=Iue#(0fFudNNUO|C@5gjdtW)Gn5 zVO$je1LK?;-b=Qy5PhdXPP5S}56qv#k98In98)rNiCm7I?^O)>@F2;fHo%hYN2qG@by8y;SkSR;X+cS<5o}uzMQL=}}?#nE|dX0yQ1xn+_ zg?-8HHw-BFPKoHDSViqU;x=G3;bT)^R%?-iyappgb)g9J3gF%oP! zgTyh(dc2hEkeE)xULt%J5vY&ey2Ox;c|5j?A)^O%-Yhwl*W1lR^*ob6ih@IFTwH~+ zvTMY>`n0RreISBsl;}cth44EB}rSFl{7uxdK5xJwDK7od#&h=#{KCh`qX2)3eUN3E-fxMb&ojcY%yBAlU z#01@3bH0$YNs+@TGK;7(gpso|C1^szOM}m2qx5EgmYRq2mAp|{&S%W8*#fymL)bi3 zW21~_n<-BozYD&nXu5UqUO)5q)Y<@^!9YVjXiso&M{(4jPQvU~bV;1Zb-899a(KbP zl3)nCoIrL5qZ~25-CuYsd^!oP$}6)j6gg?LFid@Ou`>LcG`VxM?X(zRIA#k20pe+3 zP9}uZzDgNa4ahKk?9l>gNc{RkJ1 zutFqJ+fW*}afy0)OP`e2J5oLcRoG-8569gaZEsFiBbU;^_Fd68c49QQ-(O+xqVn4nSeF)T} zzUSd11LLHxqF~@X4Xj4b`@-Dx6LZ1TEACegZLQu4h-$J5@wP;>POcfmnBG?FGjkG9 zyg0J8jHk?5gO?JX_H4OR65y7K*F>T@CdHerH!@wJ+4%}MonKwOjl6L0?K;Ypu&#ix_^tF4=rg~2D##rm z9MMgJppF^P3m(@y53V};2)*-tq3)lZ(=!i@uGf<$v>Ktf1KS~XgTd&EKsxOZvc_q9 zociEFVfBkm?`ic4%HtB- zo_bBHWJD5!7Cwty8?Xp_+caR$-$W56yTMXsENByE(m+SwBLIhV$iUe}y`Q*KW-a9CxIOSr-Ff0ZZ}36!zSqFSB6HZnDEh|kIg1JNd;BET z92c=i7DCE+PR^-4mvaEzELc5M4L6>33oRAJ^gQJWNazR(B%dUrk|e|@P}Q(N@A=Zt zZrU;cgJx?uR*_+3uu1^?h6l_Aw`j!+sTOK?;tP2M_-v=CPa?`wv7~!DRxNil-m@ps zKFNdI+Sb-iX^*_3#NVab2Auj*16=0x!jy;To!K*Q(zJ%CO)C!X zYi9vIVc(xYy(}#1wKh3v&z>!2PP&};lczHhLvanc`QAGRvv2S}J1Z<_!Gb*FD1e^Q zbgMz?T%cF-x@1LQwI2y9G_Bi8JiwD}dV9e5T;$+H`)Y7*Mg1MSc2BkW%q)FeK5Y*x3^hSBR&lk~a@I7jH z+?Ftvk}ZWJtdO}<0V+RTC&s%^)t?6UgLd4i0nmOC{;u*ksb~WvYZXjo<`aI@Z|&2y zgw%u3Rc2k`>$ ZZsLg$&N9BRAe4vjM&U3cLIy|dQ%H^$doZq>M6$A<4IbEga)XZ z!m47)a-lu0$Zai1pKje)%*x~(rEExTnKhMJYBt0&jpdttFYN*9-8p4Hz4Sv18!k#C zEe&0sO%aC2k-f|Lq$vffnPxyl1?m?8J9x@&X|)hQW~GvHJq8cjYGF4IZtU=dI)u4# zeG)*Q{gz6ntan^hwl-!994Lg)A8AddwN6IP5V!|Z&s}9=<3oz-o-sJq*eiTNE-pS) zI4CmsX6dHXA-#Z%{DBBMC3G&C5Wnu|AXjdzm!*0PuMd>4N1mvh)ZJ4YuBTY@V2&Ka zmyJmP>$$?_i~tYm=xQ+gy@e;bu~B(EPL``KS2&J8r&ma_UJc_eqVz%lvGlc6c_3bf ztK+TFD*RCHpdCLc;Lp~JFeMO0J)M=>pp?s8`y5e|VhepaV6iGEr4y12J+FF*ALDy~ zpc2o6;c>SeDG52&*(|AuJA`Ty8^}QmiZq>cXB;)*qYWKMT2n3qb?teCB~y+x**nlW zD!_8HBEIpCw0L!9r3N`1x*aH}j2Mt>fSLS>zq%t+F*hve151B#FMl`TTCRN&4)^#< zCA>BW$Hs3GkHbzuCJek~kfh(neUk7#n{Y6{S%r?UnpAK_z*NR}`u08Xle>5VEf8}6 zy590EoLdDu!`uQ*GAp5lW1R-1ae?|dgh^L1AUYC)V&PWyJD*54$E7JPba=FY+ZTYA z`Vv;`J=?bHT1`7AaXEXyyF|nzG;Hf$^q5{*b>>H6BpLd-KVT1)5RM{4_lAw!bx84p7?JO8q z%+F@y9*>A(mm^q3$<9wAEL6jL>FxET6TU%3WIt}3)GTpIE4;*$vZY|J+p z3z*JZy6p%RPn^2^>XNQ2f=XEZUD@*?(sw{GT%pi~qvg%dn@V2B^`;RsG-YNaz3nN0 zeymw-K&+TfRqo{F!W!jmw7mdMx1b`1${x{_u$ND@nHwHIPUm=NAjT1?oE#LjxceMr zw3k-~214yN0G@`XsPete4zvK!q~0=-M`JSTKdp&SgJDs8RIc#u(Yx3z?IDj)V%(Em z9F?i17&iE%LO)xyL@q(;*+Ow!hDTnJGrfFpoh0Kb*oXHtm!0=?{5=%6Ol)|~%XRMS z$k?m+q^~@TCluEoQxVXmAF)`EW*gFoHQGu<$*x5_zYOV?E!WlcbcQraliOEtev)+rV_aq z4N1DvxvLf_rM=~$gn9TXRC^V0@qLnEpUv8A*WpzhQ%DxEl7*L1L1NJ`1x{}{a(F0< zIK%NPE+!X6VLS(mvPj(s2LnL?SA9S?jiwFaVapP!U6_^yYV5rA!q6#gCHD;2_jTwX zbCEd(+Cy6o6qb_361->QJGO5gklcn(yHzwQk>aa69t4V2UpAUG3O)AAQo{-)CAg9O*q7%!e5~ zDEfE|9fy+kAbtH!pd%f@4&mXm+B2p)PKCV(YR$&4T&lh28Jfc(OvgF}mN;{ynpG$e z`WdbTA6Zy#@{0#5NKOGN!&W7-X`z?zL~qqSuyMm;8!oKR~+DtarxG@wFE3)D#V zAcl4xKCKv&G361O3ZHl}TyQ&@4nkKy=Lvmd?r4VZ7KDt39b|PeK(tU_0BcW=K)f65 z_JI5*#6JmPnvjBu%%OBgoz(#yJXZi0kQ#4%NbhtbQMn{3XGP9g2DaH9_5=)IxJdR< zH{^jp_h7B8h!ionExfV1aAYMihc-q|40-4Fpmdjp&+trr=AoSsJf|8?@Oei>^>$-w z0OdU^W&xWKIL>wl@Kn%dNeF?4-bJi%spdo-aEzykC@1zqJ;&fu%em z#Z--IdNnYII@CsK7e1Da0Rc5(evvYV*X5AK4xP+3rFfw^S84SL1eI#T5#*uvbbfieS@;c4H#C6dnKBBlUI(T#WqzDpih8AS7{4#CpKC}{-ZKp& zAn`Vf$5&58o0TTI((4d7w*vT8rf+&(MZfb^d(;af)Gs!D!`?B6BCRuQtYtI>sQeDW zq64F)qiM8=JP48#3fO_cJi@-a#}N_HyTC(7r9>UQaz4 zr*tvq_kh)B_ibTUTZv?&fEkzGKAT!#?I+^2qqfBN+Mc*fmO#v5IV*zblPCJ9sBrr! zFFHKGCVpnEMVY`N@wSKA0`oNQbu}fTYF7Fvd5f)q9Tcn^Smy=yyjN3!vOu8=7%-y4 zJU+7sC8fY-&K|~%6OWr{hgtR~H6dptNb+=Fp1K4hJvFrI=Tx^rWFASndw@0TG~d*G zwtPah148s}C3w66fvL|rr*=XVF@^9JM&G)iA8I>z7KIs!gy&MIJER#aSX%g5b6>B+ zkl@y~x(lFOWSwnhlNq-#v&o z&lE*%*<-u)ord~8&^Ko==dAf`pbeQ>OMtvsf?+7OEbSsCFLI>sJ+vp4+ffDhdiPH9 zVWl+og3E1%LuEyu#Sw}x@Sd&mQZ)OR{~6-EGh8@%UUto>;F8Oppl}!Ev(0*eIkDA{ zQrgVkReq`x!;g|4tM|`-lLa>nE&*b1^b{G0Y2xxS?)o;(#UeHR)LH@_!6!ZMGX`uv zSm!SE;-p87+pXOLWiFhLW3s44qpx+EJuyx?AiK^q_hOUn(H)n(JsZ|7>wS0Fk;T=B z(RW%K+`voV=FBV&S&nSAQV2b*ddKIHSTn7OyJPPJUe_80Xh0Q(q#IQ%-%{_!YOD3b zDc>6#SMEbNe{ielYr#6n({KU`)Sl@uJL6iFsm~jD-Tc@mkuCs% zlsDx%uVzUsrs%Z9FAzt9N6z93=E!;IeNbLNs)d=17|IM zB`DAI6#4c&%eT;cTz&+BknNEiW+2j`Ff=k$Mm3(@hLQm+Ojxc4oDXqk;i-;zN|=Tk zWh&%|TlsUGeN`z!iTcDW%tHXTg-0G#z;nW5DyTshDR}$*`NetP#@2Ws)`pm4n#5R6 z7`-$Enp!b6)3R2kYL1GM#Q?D-QV~jtc#TuVC2ek)h$q4Zi11#^Pm=7;lROIv>>*I@ z@m_hrBY&l6#KuHPbq3gReS7^)(q~BMHuIM+kkYawhm|0+C@S5+tcSatl{Kg1cskw* z?wk-7q2eBbA7MgLxQK;g!wUCm?>wnFb86fpfT5@?#~FPJ;u`vPvaGkJYTM+-f&>)K zCaGMwsK7(qFX6mVxAlb=z80C@WtJ|^z|ru1!@*g;zS-a;=Q&%ui=lH538Vp0?XB=5 z?aU{9K8sx?7Jt&Phx2~#(*$~IvtCsuxZ?4$zC0ng7%zEivFwIfomN#;x$;SqeZ~b- zj(UoBM+QYtBpV0wdd(@`%T3t;x2=~PTcK6bT$u;!>g_^0{NPT0emKU&%|M$5&Tcd#>jt9nvS*TYB(XdsGf}rw5dc9zzQ0~Osk<<>*DYE=$#mS? zmfMiZ9k#_Gw^~DZjE5`hy9iSKXoqd=6|PA5tHXx4)x=BWJ+9Ep%^gij41q+#-|vZ{ zw1l{w?nQuk8!JO4JCRil_#P&WT0N2m@!9((%D;m{sUTk~7DHd9_`I=oxOjt4JRqPC z$DweJRvp}@72$Y4$GyfWm)gWc~YP= z$$bx9Ra&fT_f^%i%h!44_jXnEwu$Zb?N;R_fiCV*4eY*L!y4EqI(Zj3nR9qsHwH}X zILcbaJY8I8dWCO^^A1maho|~XIx3>|NPpind!c61S_QwQ^ivI zmjZU_cAY9Sf&yXhb)%QT@wtYR>Gjon z3)}LvsX6+_cLRanT`(|+*CU~)bgu2hTPStUakVVEIe`dWLW)& zTfDc%^)v4QdFcH4M}%t}73GVde6f3$g$#aAw9VTgYO>wG$RhX*6R$6k%mWxmPxW@@ zA=?x2S}buH;FcDd?0Bp=N3Qc~ING`#*mk%`t-zX}D(QPM&@BZs)JKG8`RXWXk!K0xG)_qKwIo*2)y2k4hrxy?e zv8skLx?yha{bH{I+zJi0k276|<_#vObko6v!JJiE?D){((= zqMcN<5;>JF8Y)lIQ9$k5(i}LHVqQES6k978CmpQwbtJaRGA3lCo6I*tXzyLPPwCCU zlNSRwog6&M(MFMHs2lB7`TS?V=mE4MjZ{``^O)%E+~eJ7787(#@JFg+oFO z!0<=i;w(GAjCsKT@nNGC` zD`tu*xFY*i=GvUJt`Xp(ouOrkE>h<_)7lpbo%Xngivif41*=I!qDhK${I zf8on}EqL;V0mjK^rn_RGKxcq3Df*;KiUc%JYReNb!pqBD7cR=uVZ$acZ2-yOBF)f# zQI<^(Nr)YuV5iqrhH)gYypmc;9h}Y_rX9!lZ0nOU`ivUduOPuN#CXN%xhih>Z7q|E z;YDJnBM&RPFy@libA=;rPEOCpCIR4=s<1SMi#nX$uP%BCrS(t>8?J55hKCHrR&_FZ zw}ZsbkLqH9>SYI8@Qg0SGT6?th9t}>cTK~!>XjKd@)o}6qzu$Rtlbwt{jAM_R%0K? zEjPU05+Smn6al_;iZd`WB2pzh>*t=P;SHmaDT=jmY(L*wlfMoIPx8{C=*~13KJSN> z(=*kW`8MJ?rtZ?c`6P`$Lx*75R9P?GZ9TFK?7kI3zj<)6P`30;bY4H}5m8V8uW7PD zeE`86pf_<0dpGmk0f+`1QG_4m@s;)nt5KF+NpW&@?Xz0E;UqHeTu-@CY<$dT!vbnD zL+HTvv~xPe9x@yt0RX*Levk#-)MxLA_^HP6+W?3?+KT7Iqg0F!>|W*5!^GWws1MiQ zm>F3~tUWDHHLSg0J&;-_Fp0}wwDClSMe&;_qOsWF12L^Mz>3;Hg8eYP0+8JV4)>F` z2cP!H5;4IiqPR|21DMZ8Q5bQ;^_RK!#=#IM9N}ci_59FOu!n3CtZ?hG z)0w;;>=05n=Nt$kI1wO!zy|Z;)fO7kBZAYs-oR~7I1ysJP@%`X(#y}IjLcB`UT&pL zPZIP{WJbCK0g~{=^O<-Yl9jRSLNz!FGikXp4Nr=kCjoS^E62GTnSzp0rbL7pq?LRI z0`aNDPm}bSj>CnE*GSJ&Z4@#7jKGvy+YYzw6mb+;IE&$%xbGuKZPW>A$4HutsLUYl zDOXqwsH;TV0cnHR=F3CHamlAN4*LWiY~VdqX|UIivsIBD7%{zTN21&J^%L}U=%F^x z!p=I?x^vzvP6vE00u06oAuxZ|ORgQ9xV;_}tL)OUT&0_y)^Mex%(P6fhTU)LDJ7-S zQr&_dbms)GV(pa7K$&YAd6udk*n*f2dUQ}-ToFv?i)nG4e2p4$) z+OXCuQ12#e~P%UHKqi<>u?>fQ#)&seejStZP9rckhMp09XfEuA#B!CL}+I;@&o z?83DZvr&5+qLJ;Hn`{|Zh8&5BX(MgV6(oK3io#rDYiA5cQBo#}U+5q%VpbKB7J*(u znuYD!ETV-g;Gdn*^q!eC-Qts+)SATZV$wQ&?`NL0zC^ZAZ;s7G5@vX>oK&g;cpJ5S z&`SI85VYkxPwHnlIn#2PR(pg%GWs?cLI=l?$|}#U0MJkmXqbyop{d=e8DS4O#k8<# z820?k_k8G{3VtZJ?oHw^*k<8YmY{mB6ei&C(hjA-7lYEngbc}-fMd= zUAWI7p-I$d-i~-uhrZ{a_Xy$juCS7?)SQ)aK{5LV<1&_8(<^-1I`BY2M6GvELSZfz zh`OG}yf(LcUCAx)C1wX+$o;fUV`#!yjEQ0EvQ*ADGa~D6x`0^stli0rlDMPdlRl$Q z+m!N-2BuA|9%H_1H}tEb6ySWDeulG&Xo?=E@fhC0o%*^`I);^VgqXb8qsJ*^aZUQP z<~2Z+4(@CnJ!8kPta=?mr-jo|>47H(Zjs$1sfDhA8QeCIKI|7#%F#Hv^}Juxp>&^A zjDVjrb2H7Fn`1q6fg{Cok$$z+jU>qqEpG&{Ww-`xwS*7|QNewM$5fmPP;n{62h98+ zkU%qQB!3RziVb-65)h6t27|kFSV7qYLm)Bzf`y|tnaLNg(!3Q(AY~F=O%2 z?%lEN^PIShHuvV^CV&Mro`_Ih?CK0w;v#(;1RO8-dDUx9sS3TT_Jb8Zh9wHooUA5O zIk78KTzs}&=b|ReQ@R4}iRbYcA>-|wgU)!TCM-T|xU`PT)z(~O(^ubMS4c*gfJ^8z0#;WEJFK56&YiASz*Wiq7a`1 zyf+t3db0H3G_`^qj9=&YE0v(@(BPSg3w!%b;b(Mt`-CbVA=z|?=-xX&mKpUfBDpdy zskX&!Ne{0|3Pw?0dzW`yYK-sb;r5GrX`r}V1B9IGq?N@EhllSn%M12qMsBd`1sl6? zf**qjkEBRq9tqPKT80W@>_iXI>Q|`@5fFJ~V%r(5C=zKl1QvLl7LqGdqx~SotP0mH6-tC4ZXGH|6;fYdU2)uBI7xvs- zEw$g%QUJHhj)bG@_T{3tVf%=mRB*}Jum(EC@Ok&VD%OWsF4x55ThM}CjDlz23OP(q zdqIiQr@gpeT!^1*!1=N(tl<_FK8uvzgyQqs8@KE{VWr2ix!omn?21;cElsUU8k>Vx zqp|UDUJe1$B()S__0@&%OS3G>!{eJ|Vm^2}?1$4o$M)0*^ZX$P+_ULt^XmGL;rawy zj^+hkU?a1=UI~>i8X3ONIsyJHS1s(Sp|n^>SKJ%Y9*>cjd#6C@SP%kGwRC$TQ zs^yDC?&I$S&FO)Yg-M!n^^>-O$FQCvG54OkfGj|?@?^w2e8Bg>LY#nmt904MqvNG) z_9<{Alb!aPs&-Y?X>!<{bZQ`228LV24n5b0rCg7? zUQ^V~SeRso?p%|-Y*89`_F93TC7AcVCRzVUq)Qd=g!gms@l$If>OhQ^wx{JF9i$>d+^6 zdW(eD!FjN^j9xa_0mMPPeRMQ>gcQ$X{psc%7(n{GC%pHBlXs@k?}4{jI+KZ_T~@zM zPIBf<;|JQXp-QG;G3@KhE*xpF7_VCdIWwPFYXm#rU;q@ZQO%XJ4Bjwdu~jDRxrwb`1C3aJDq4QT)D%mknfBFd;5n2g`*)_2UGnb&ApAMz(or%SH8V ztxTU0r_V*Huy#B=Xw+shk7u{Y>FE>QFk;fFo{~PkB9H6@T=hvA2@hRPMHLn=Ff4{Q zn#BX?@m{UKi;;z;D#yq^wNwB_MDSQOHDns28JF6buAM$!4uX9M0>0oTmuQ^*u-o^W%jualvS87GRlUp^)^=fTcgtao6buyLkNUt?Mel-UjSE=&yf8exp^Kl0H8fJw zc=_8vbj*8d)g~E(KV#3z2zb6V2>=YNp#QCy(%+KZBLP{t)6GO|Mue?WU0-HzOZz+ar2H4j4 zjVm|Rgn86!dJLh+ex^oEOpI^u=2`{$ku6P{25JdC59V4%+LD=leFhHiio~jXMxd*ls=NDnffa_+LOk+SYCqji=pM<{mX|_zPWjtG^ zN_BiZnc|0R#p0EUAPRf-M9d|l_NIU(L3INR-UUTXs7LQXFW01G-+K<#TRsqjP!OKu z0x(euhI7q{FHhS{5XW&j)BU}0ZLUqdr*W}B7_Wm|y+=+^pOUDB-@&67@){q%n%jxX zE)FQL;YS-m!Mbqnbpz}E5@t#*2IN`yY%BXCmwfUl22rwYh$Rh;9s%LtG>bkwImqYh z@5xk(uXa)U<}XSq=t0JYvAb7zayn};yU08o&nj(p&{WdqIrP*1q*OkmP;uOrlk?`Z z@;dq}!8yt0n}?b08Ol{qi#_0(;%eg)2(21KxW@FD74+$;$e;0oq`&oPm<1_)7~A}! zGvYl53?9G^5|ZO9p580)yw)L&XEjwfE*N~mC7=+k_#i-9I8|Lse1(%SQmjIW8Fw}u zU*z#DBYHZ<Pb2au}?=Mm#56uf_xc54g$dWwJq)Kt(w4hjM%;B9Z*yfY@Bvn5{QHJx#I{|j! z^|pw(w^OxF8{qFA5kAgfnwjZmiB?c1`qGXqBL>WMBcACaABsOKYz#}Ix-8^Jjg)Zx z%KcpXPI{LD`AhRZ?^D6yRMCE;tm zO?zb^SVY=J1QFZj&iRzexioL)0R%lSPhvX-xs?RJwefnwgpY8mQmw`yp#Wy;;#FqZ zvBb#WZX(E$Pv6gYbn>{~JmSr4S7xu$@m6%q(P>B$V-Dfou`Oq_<8N9&8MKJO4BPAh*RF!%#!!x(Q%j8K7URt!O|Gvh*Q^Y8w+5x0bB0s*lj{#_|C69sbkzl zE$1ri?Gi{vos~cTnR~4sSnO_0EZ-yu?n38ds5b|Q1EPx5nD?G0x;1?gYx-%z2rXg6 z%hNfdV>0J9kSGpojLaEj1JD(+jd3E+fQ*T2O;EfL&!KejQEQqDqq|PPvjSfcT$5E& zTnlqy)iIz~V?EKwL=&|(VppmN8b{But;!^N4C@tZCsos&4kwdeZcRl^*;`t11uaNiWpKa^_9A>6tZ+L&Lr4y&6M8dCtb-WFXy1FQkU@v7z4T z+aVp0=qphzW_>j;cEQkUCLCb~-}vP?Ox5)3ykhHCxPn_shpQ(K%R6HvruT^%d&cni z>BBs4zR^iknnt|_%xodcmp~%*h8P=a1@66rDJVnE1D;U7wS!aK0jJj@{Ypqhp5NAJ z=19x#obujU@bhSn@*9dlc)$DXQw(Ma4y)$P9*w$t2m~z7>@*v^-ESPGuimxbcb|># z@U%7WF#TP7q3nA?DX#`-G?w9&9h0JF&IAZsupwyfTk_c$&n%$9sOF`c#Zf_#SPFf@ z`=&A;8zjD|DjJ-(1Vjw98?XeYi@juowc;5+&nLdK zJgqglEzb%II#-IsYFX2e-XbV88r=QN#!yXxU~Nk>@16HL=R+x+l{xlQ!!Qj6HKj5P z`nKfJBy`sX(TeO7Zo%GIhpSWbOgwckWbB<1z{2KV)`{U zo|k49TIxg2Br*kSL20ElW=E@(HKlH~=W7e2Zq(s#jJTtU3(>Ybl+lF&(xEO@diI5k zK|byGTwFn}yLP~}sh;#+C=WBmo7ynYLe3*PEbG@J34nduBzTqRYecP!{R&Yv(CeMv z^9(P2#SM1tn)+ARz;np5n78^+N(c`7`5QGU{6%m*7k#gp$hpV?EzUX&9}655XWv*q zNqSbtr9B1qP4H)+O3579r%#iqUHUrP_<*j30S?3IvWkw-V#yhJ-!qp7@p`UZ9wV$Y zoI(Wm-pLz(qxF=DCm3=HtkEQ*SV}++V$EN5O1Lbb5s6vYm9V~8+A!k1L3Nd8ENLD= z<@abr=wQ$1Y?SnlI$LMXckE~ z$AyN!Q2|A47)b_)k>bQUbj_MaAu8_0CEgRy!(b@fOhMsiW@dl#=tb-eF+0vyPawS( zj($*=1}kXfaH0u8u=q(ae(#{Pt5$8}WtbE2=4gXhVoE{yGp|>#Yfmz4gWLDfi5MBO zm|Ro3KVckGqVsbLc1xE?heOx{GVmThd&pVrlGiMz<`rVzuyy)y4@?u2;qXk@Vq>}} z-KAzIBtUi@8c;ozG9+ve`jBR5ymz1KleU$_ho=imocWxxR#dT3S7Q&CoDG+jSeqp( z-v%{_lBSj2A)ju(+yGtdTU6da!zerx$k47?x#|#}STXG()VvO0;-5x6NXzc8+WP`c z2F-juIWrMsUwW9apO0f9nODE(pCr>~$U1Bx?=$0Ydj>XdJVz@0tj$nk7D^1==ZLvz z+Ea>gCuQnU;7pwQYUQw%kDYcjzyLyWpHnvaLA*y}&LFogX>U2!6!JOSbK0SMY%|D3+X#>H`eL@H zdEIOU?jC~XAf%8G!ypC$(@RH)H_14grO!0;(Gj#if85vD;`071g@tN{?ZJ#Dss-iJ zxE`WDtTMFzNwm7k)7P5BP_Is3C39WalNcPL$t#QnzgITd3v~BM^!pB8XyNWg&oQoY zI4^^2Sj;R`6;{)+g(iH1fk|;BUpf=h>6v)&8-YycyI6vhAf4OF>=!~Y0J;^#Ex7{E zcjUe8XSib+xN}cgnVp^91&V1Duew9LR;L0&!IfRW6@+?>?XHq{URru|5?wk-F=?@3 ztwZIP+B(Unz!)(!Se+%$)F~Z%v`^(!1d)&f$Gp0UOKM<)Xj{kY!a9W3-wb)~1w>Xd z?oj}ptvaP+=VfLsw$tPg1pH*8C6vXofma5|-OZSWHeeAgpg`aXUbMCtpt3yTsX>WKb z{E{OH#2$+5i%+uUJB-Z{3SGW?EY@xhg<{5R%{fSh$8IMOnQPf*mjE$(A;cDIY`dL3>mft!fF6!~>l;z}y5oFD^yt z?6>;{n`APjjZbBXwM0;22jUeNln*%e%21(RJt zA)$A^=y+~f!l6o($hq>g!?I>iOOzdE(f}!){Xt-tPZZP!Ku5h*z(rvNjsot~_hNB7A1C9)1lg3g@|YinaH~WHU9i zg78MmSOyJ+Wn*VZtud$~+@akf%n$(xARuHsEg##GIKs<^DIhC*hAWCZGX&rma?oOL zwUTciKtx|6>dIl#rKe89tDLU4G%_&Dc+<}TJg}dbV?t(I2Uv-YGG3?jdQs0R!5|Kr z*-l(4@Sn;o-b{;$UyodldHN;gI|0z-c~_IAWvs|6Pz+Uu_cZk&@l~S8 z4(Wu{C|MbSG#Cv~DNMnQ?TbwiZ(67%pvgO!4P1ZHXYuo$r*|Ps92CgXT|9i<3$r@Z z^#-KCSzZ%jq#Hl#{3iV~wDr?hH92I`0@D-DrILeyQE}&zxQ6Xu#{{p6ItZs3uX?=Y z`iZOO#-2-QM>$s|rKA%P;EuYuZp${=6}ec-VA4Pg1fm?#baUJ)o-9_vovzo*uGczg z&ui`Yz&VVA0+(FQtdTGwi%`+QiG3YoE6n}QCORo~jKtv1~dRuHO2M3BV*?a>%-Y)5K!uv%# z%*>!rA1EK3fRvzb`ILzmynE7NEatGy>ERi~pR~tkeDm^Aukti8rdu*{lvGdbXvt)( zhqKfEg4a|?1_zLbxwj^kFr_MFiWD_W(;Mvi9^%PqwVo}MSazCslLe$+l!v=`cC z-ex_Ccra{>!&B^wyi*h<4fo)k-npH_wbxn_$sN&EMSE%C7&Ek(KNxz|CIwm!!!SAO zpz_`bLZ0?Bmv!Q7UZ|f#niz*w;rTN}eYo-NA)kz~h*oH&^exI6gpe!geDBExK7*VV zpc}$_daSA(Rn=YWm^>~CDg37HOw0W_O(E5#Qmf$diFYE-t<`n@ol;c0vKymT$GZlwE7 zAH97ev_UoRiTLwxCr*J!mh;x@Ra$ozM5;p1f%S?obs~;W9FC7Uc82a@`j#$WkW0v?M($ z=AZNW;gfzsNF3zx)(-ovkdZ%w^P~wy!RHzguvhEE^hrK_hC8qTZ8r)lSIfF5rW?oI zc1}lBC@-(;D7b<#4hzKJq~?PrE2f3QvU^DV4$J8|tU(5`6w)>s1f(Q0nj}?`kLUC= z>Aht>bKvt{vQQ&5c08a}ORjhR((tf_$QPP&!jO$mPmPq`^`;MIoC_LU4#Oo>4GFL` z*TYmanWq-vHApC@$F6$9{_LVpeUF!}N?vuunn14Cr+Dsz5jd-h&KfDPJxrPA$;fs&woO$ZnPUFwSf?`#9m z=6%!uy_<92coiTos|h{kG|DUa@xwCf86jVDg_YUsOpAh!d_p;|oH7}-)}OF$S?_c$ zh>w-O)ZBB@0`l?%GAxa3R*(#3*^HA-$TWcCEpwJ?d5Ty;6#5vTLwIlP1um;uQ*SLe z(S~Rb>SHdTR_~X@B-DJdD3}kmUMQ1TnezhsX}yt-Lxgif6>3X;kygFa)!lkDU?f!m z+>N1?rfr%ThmaUhIEd;IT$yp#p@}L&sAl}cYul(`IXaFS3EBKM>#ga}yIPHMr@zVe zYH=MnsAZw4s>FL;k6|{`5uDOd;_Krb6>rUX=4JuY|KTx#Phazc->B$ zMbC1kM3UT{^>%&o&oZckzyn|Mn%khf2Z1Ml#q(dHK4dpU2;#Z_nT z@jP=(C>HbT2yM48DExhMv)#A3sYur9d%da=SbpGww_r5Kg$pGEww$l_TLSXlXa6rs z;&)G$wntpqL-Gj@dn9XQRz%+(jC9;};_51&DVH?9tEgwr$nEP5dt00x0?;Qn!4_EN zv1*%*bOY>5@~qnzu4769k2!H)fVI91qM0P#4ku%TVo(SddHK@(K!B8{q~uAV#Nr)J zr*0X)awC3R{;0(^uW!;H$nI1<-(%Vc4IN|&3u0+b5Z1SB*fgex0dzRd_;fB_NJDCi zjn&1j**aX9Tkew8;w_T)bnJO>zO?D8X0?5A`}R-0^=OkM5Adf5j(5ep;325n<_YV? zwvEawlM{H2@XFkR`}GBke2PFmL*Ss+<{VHK&YRYAFYhPvT5w%;&Kb(1LDyVU&P{AR zAQ&M}u>HZ_`VbTgGu~s7aX4cN341C$GfL1i`;6gA+XsfGi|WY)&AXZswT9$%t-qqx>qiHAK?5O8Nb#E>ndp7j*;x+`O62a-w#@a;nLJ1BC;Y+zk_i-NTtyQMvm zmKKoLeMkJpx)3X3>%@DY#p4KSvfstQlAp=)!doextzHGo7drlY)Gn=FAX6Kbo8O3t zEjT6mcH-4!ym|FY1|3bxp(_eKxa#yKR&>$gx;?XB!vxcrGF3{vdHpE^{oeJR%4xMk zx)=zcE>*7GiiN{0BiTw8nVc98^E=~n1xCAw>wOtKNGc zv4FNj8``xGT_XnYwQd4-8~}SEP=x!N+GdQX0?Fxk8zPCqOc;%bayzhcghXCocn@a8 z`q6_4AGR{yhja^<&w!C&tfAGyXor|rW{UxmNI{;_B_~(9{=DNIg9k%10McF+37J`2Y;d$T+EzA>iWI|}ZQI_IJ;MB4-Mk^vr%W5*1%Xr$4 zR3o#iYR&-{#osZ*lDAR#vrT*`RHJOg14qSPuSV*kEwIHMlpGN_d9x~aR@M+#I9Ah( z`Y5cA1slxkUHaLv^eNWXx#O#&=Lt9u*R{n^HXpR|8Jn<0+7^!aktxyDQ_nJgnOXT( z_@&Mb&gmtJAo9aCk{w#N3pcjzveMMK+=u$io>9TmI&?&I8x*X|I4i1)>?z{pS^?`h ze0_6*Hq<3ou`lbV6eL4m9s3qPQ-4H%uE|@t*QF2JFA%#xJ!a2)S@95q%`uR!d)S zx}K{hDoZ1|L|;V?+EYlgdP0=a=+4cf+3mWDN~*T~@NFc*%k&@+PAVKDR7n@9?D5NU z;FmHJWvKTo!Oy=96uYed+bA_l&)?e7`&OlSJrK4K&8h6rSlR`Q<%BiKV$m7Ok679ezc z;V%&Ch4=^f=erU(cr){4*>XQg(3ly-w^3M){sD9 zM`4E%^;m{tVX>ZUUGU+ff^}a4P=HaYiIdHH?sKmBp1~%O0Vq1{dkz5*uHLW7p&yTp zz7$fwGz_p83gA|pn$^zcPUlX4f8{4ELBSr0RMh6^wzLVh=jFRcHthmH&ABXxDNwtb z*v~6%(d3v>)u712`59$uD(()XIw!|26N7^iY`&Lq_8wxc^hN-KkY8lIXp5ttxuK;*}_+_TKzeVG23ufnM}vsx`N@$ z$T1edMFNm;g_)(7<;G-0RQmeN-a|=)GkQHo2D5zoY$m}I`Hgi>w6%uh`YWbjmujdz52-lZx%U!yUOj|v z; z*KxdEj=d}*^A2*J>db2d&j5}X19%u=%|*gbGF14uBh?VIumVRjh6wdNnxqcnu2Gj= z)5mpV#$-unxzR<=N|4}&I#*9=rEydqQ)i552CO5#$33`RelUv`9bL~W-|20$LaQDL zovyx}4*fZ3TG`_D8+PU$w;NQwfH-Lq)oIv}Ld$l3ha1b2^C=4a43(wG@1l7FXB+_R z!2raJgVF;>9KkGs!BLSS}Z^XBy5{&^zw&4)E2Lz(4_=fK;&}c9? z56+xO=mwd+jozCF3;T$b$fSq{uwOHK9L9`B&4u{Zk}qSvyQPvtPd8`mD}#^|Pq&Us z!YQLl(qN0CX<~oHlOfy|B&K*fOiu~2Hy_Ii)uWeY#HUFt#`aJw`Smynv0#%V7BM+# z?=9Bw8r(HXGOjg9IAM$(z+<-+MIA zE$>B-G)G{si*HgYOqQlf@_YC~C78oFo1PeWEK8t5SLaTA?QivT1_If*}lWqeIU)c{ca zRvz-|j8jMOIWwHJ4%WVEivv$g$oF#yeY%4HXpRt31TDgM_kfKus z;HNP7GibgSv3HmKsyBt~+1}v3BPip2ZsN6p((Z|OD-=;s0OD-(65o9Aap*52*v1x64H%G))H{U)ZXwTdM;p(H5hv~=Y?+RzI0&m z>^9eD1CM`6WAx=N+Kw-k%W6T`)C-X}EPB9{{1T;X{k?4;_xO~?`;45sUFA2IZ&C>j zZa|IfG;AEt`4sR@ai2MY40o9T9koXtub=47JdJ@D4wmfhl(u`-F4vJE5JDT5{>t;V zhI`Fv-lT*BkdqZ|g}c)x9;BaTMlT?zZd5;|E7kUSi9SjA02eEmMYoWSjihu6)!z{V zWOzj)#>$Z08N9qJMPDQXU$fPfj_kh)w6n4P%WMK$4@`l)rD~*N ziV2YobNChs=WW!zM-=xKw@(r-4z}`*^p=sEXAw0YY)L8!6KAWQf#SV%ylm(93>R8L zgb%@=$t?xU=z0;$CT5BJttt9pdG0tHU5(I=JQ2%#L~z*+w8YC8%KS|RV|We zYo-kY^j<+4KRS0Ux8j-UmDlbDSEOl}ekugS-?>9S1L;wO zhlnE2Jbc}VI48Xf86i~`w4_k5Y$=5kk8T6dFkd#E>bxKy%VD#710t{MUJLOM-k*6} zjNU6C@9By{6CW-PRi;OG+@(9K$(ni~Q(XOUVO+7;U+HX%S3&4NKB60WG>0aOwJ3&H zLb<9(yRu)}3(A4Vyjv(wUY;K#6&IzLnZWX14I8YdcQ%TXIELX>a^=U=b=tu;SH>ISdd*v8&6nG* zF27rh)?$niM%0}r0H6mN{;=)&eW6`>aHPN2VU?dlhbv74X5ez7xs>J|Nfj z)CXz+YUytQElAVgu}@(YE6(1oF&Yp)l5;1VJ<`FwF}rr*a&&nzAd=HT{w#FGxlLDZ z?R8|6xMe=g^mB)IbX(%A-LE(+E6X26ia9UZNJJbHJ=&7kW9YG*tVSK9sVN9kVtCf! z;c@PRZ}WiC2&oozn+7Z#GczJy%$&#e1Tb@&Rlmh>Pp7Q2w$5V;{3VinS{|jZpe-0? zo}3hk(~U)2PC$xxycW8sOOd|*6p4R^)HrJNoQ-0KHh+r-SEjs?Ng$_>fkABxt2cw^ zWU^nKBrQOhW5_x99KCDPCGE0W#%Y!Vf3If;MXf3+T)gi(?1};qn6Usyldl*hy0OA| zNMthn@$yT^2a26F6+3K459_jun_!si@jW0diG1D7E=de{&J6{L0R=|`m|cD_4-s(@ zj_xhKU<)#lh!mOzk7BtQA$|pYWu@b}HKN>!mnz)SKsYyg5(KMn%@}jZ*yp_k4w4XE4h6Rq?8BsiVQL}+-e81Zb9*nyPyV1ijOhZ~ZQKv@HiW|yQ z@<;Iu-GvYGTPB}zH5Vn0FPRksfO56E*Sl)QhJ0lwMp5`lNWYGI+z%+Dit)G@u=dk>Dcw`Sr3H?mtt3g=CUoK0HPzNXUf2@R}#%znq`;D z6%8Nn^y>%phLKhAUS!P#_ol@lnxH$#3%%9sqo96GiDz05IK#%8BPP$Kp62*lRC?NK zqt0q#HOs6`0VDGOR~y+ii^;v{I(ej z;m*i9%M8A6P#iiyYYVs6SKSJ6&;b^r! z^rsF^DlFpBhKOTacfF6XUO#w2YswR3AqttvzD3jcl90xTFXAQMs_5OD!6$;fZ>^QE zC{q+(A^>2Ko2Q2*d4fYoGsz+(>ChFXN!{pc5@3ibk$mrntFmE4P!n6-hU?)TUDZXm z=se?}191rmnISejn>~X<>m#@@s2z*O#tI>mCiB-Ez_XuX!S929TL_P1`w;jIc9=TO z^LsG^z)y5m;hB^_FxY$kteLs&iAmwL4<)*WzUPu$uKaE@Swb=slkQ1K+Gr^Xi}LI; zR%O4(?a915Ix-=e;gIUA+9YHp0=pqV0&}H-n_VL#nv1W(K-Fu}UVF^ZZ9dKwI%IsL z9PR#Yl#vtFLR-s7Z@sjd75B9x>|b&@ zvo0YMLh7JPn4BOil@oA$PP9Ba;;%h~JOU2rQ!WIba!Jj1@1`XZhltrRSMpx?*efHU z?UPvc*cZsqwz;dMYc=6vdpALVcCUL@wctH?NCkc+5qFJoA(R<6%iq@C_vMQYq)ugb+tH zAfxotn^JQ(DQ?FF;e2r7*jL;15+A%mHB2n`)B!~Tq7d{eM7?yH@#>N1zp zYGOL?tv9CAdY^636{O?sizP(xh4>cCXTY7fOnkkyQ8p`rr46R?Ad)%QMG25g))y8R zQXl%9al}Asn&FjWb7$0Wl`n;0LA3=5Nm9J6L2y=g2fdZG!$rG!%lU8s+GG9tUb1rM zPGNS5`0|L-Ap;eUbCtX9kd-MgTR1XK7DzopW5>-*t3=s$f+}g`64V)eu(>TsHXt|G z3CB{L!btekLF+Y;N%cTxauJ{%KMj*9QN5@)$aZfRLEmdinpBt5I!? zqvUlMd#nlVVlr|esqqQ+r)2mu>eBcld&~o^cr>AX>(GZAOr(++$STdHn3+5}-N12L zNjXBP>D>(12xlOxWd?#EVRrdK8{5E>%o6D_yu<4Ufw=Y_4wkH0g<$4b0p7?I7Ml&K z6iC&1I6PVoRp>k~vbYtZ7)+mXZHR~+l@%Vq?&?>M(YX5}s5tS7>uKeqlUs(o^xOw6 za}=R^!A~dUyjTu3ah9`m7VepikE=qUgTlI3RBUu=J^};ga!W^=I+6E=W1l+#!a0@p z0?7ILo!)Y@gH}@+Hp5`qOP=f@g@;Cu`7Avxg|zb}C6eLx zwTz6_N;Ztk1R;d5z+9_D*u2M0*bea)l5cM)6ss#cO~A201XvUJ;#hZ-LQ8byhyl0?4Ni(KA_8-dZQe zakEMJo_DPYzp2(&O;CIF(E1d%gHCy3*EsC=KBkh&M`iKdWDA}`oV&Z@l!HM+8H{;Q z14LpD`KNI7I|$>GOQcu!C=#!U7>O<8MWqp7b)ypvlhG`Ilsa)ZhBnFBN;e&OT-|#Q zvru<$*82*fWJ6n9RESz@W)GBrk>`xAIfGk~2bTd0ZCYAYelN5K{r+N>O%*e-kJgTWB zYy*LMM*-nfE=>~O);_gMv0kou@x0X4#$LvpG;He$L)X!+Vy_-(wI8{@xf5|V(_)Oww^-_?y>X@B_^PcXc%kNd*`3j*=f!nYbwi(m2Ya)Z!cr`^(C;&^E zmry1~-_r3<>D*jScML`45a$AWYpe7m=AMZWVYwUa@R;2BoK1p~4XG~CTSsb+vvA%g z;&lUwN43YdC0YrA1be0wXcY~?t`^VbS?-1_z#xoU5g@3Wrw>ulYD~0At!sBX`a&~%bss7}dMIZOr#RYV??~xCbfeK6EJ_O$qC98Te zhS3F2og;S{u@keVoiP>!MlFoGSW*iWut=uv`A^@uRG@<>@^iH?!;R)p1*USiq=RE# zf5$r-wU!&-;n+UIakwixVcal;Ji>F*6Wwra%W;? ziRR0@+<7mQ<{)%@q;Sih>@lKy@gf}NIbtFoiq@7Txo55fZw)@fQhJ$~)|zvGO9W6n zM&q8GJB$GBPK^6-uh}#}4@w-SJ>gpA0;KD6&-X*Uw(Qq~l#U zJkj@zE$Bf?7G9a%biODCIj~CC`YY=y_Uc^|NxS-!1JX@-1f~_3P)$99tcygg615~T z;Vb@d?lqkPGt3+B*|j=MNP17`?RKl*QSM0{fJVoOZsz)gCF0UHdx#MxAbIqQh?DZkcF9D5nfsQ~7Goe0kYiPa{C?b7b zWT!gzwBQ+_YFB?ZulNki&&mlk6Rt`|EmV)zsnHrNlSY|rL$AkqdDfU&J&t!RB3@$M z6L9J`MzZ7ckU+YmdQO@jp4nv=PCiYkDC+7Ln{(z`J??mHm?4*FbH=Bjf{~kWXEBn9 zkF3IX?T}L%K-rdD9`e&bkZ=wpyv@j3>cQ%&IH8`H+zT`=w5@17dDYd&45hXD|(0RjIT=32yMB691Ht!)J8%zQa?y6>bRk&DRTZGt)K*r%kWAE%9+Z!~N$rNUMR+phr)V(j?kvuf5dV@8% z9xCrKl}{}uvh*WFDUMe_&qb5cdD>;voN8aa_lQH(y0>4Uzj^X}bNNmagN`3lP$ex> z!jalBc9R;$mJ2cLOux(d!sHG}U|$4F^>a0Gs{Vg5qU&tM`_u%CHjp zlQ&$68o3~z&dBVIW{(y49Cy*Ut|7>tzKa?opWS$^xmlLEy346#`%^@z(a`8=NDqAc zlGr0VtGP~3AJS=<^Tx4-!a#|Bi|8{%Z}xzNVc$hXa0Kvq<9JueyeTYso-PA#flctG zI4it0w_}Q+Izq$>%a-*Fc48JGV`M@h%93?)7DZAh8|1CsGnXRHhc_;!sgtHJeMiTM z=7m_wlM#B)L>oQRVKH;w;6)P*Nz5)9;!?NY05WP^S@-K@FIGBV2-e)d@UnIG>CJbR zQt>FN__V5zrh`OfSxp;TR=0SD63#V~cxQOP0}sRAGYztM#dAp-ikK62Mr9!iRPUxR z{P>2q9@awveI&a4WPQ8^TSTTk2?Jh6!C?;UU6z?^{%M#CLj`Q(m^)eY(a$&y8gaw& zP{-Kd(cv`l>v}` z-qBB!|3H-`FEb^IdxP}m0bfoGTs4)cdWVdc!29+i`V7{9MsvnQP95{yRijya`2~?e z*9QI(SB=ZJsr?GJk)oa)J<48)L!oOWev7s1ndLpA>-Ah0rz@jD9$3?bO#1j?L!S9A z?KmZ;#Wr+-L2&48#rIj7*atbZAb}E zHgMcWgX#sjo`xaVLXRZ&ErGlhmNE;qsL5GTy%jM47gzLE(s~J(=ONX-0f+)GUo6Ot zD3Wb151t2FUdi+AoUBO%0z|y+V0`_MUwE=Yf$IZ#kwjg@ZH(D#k4Y$<$P$LsV_qu& zDyW*zRS^D?lIZ!yX(UIikVj}g!hxVvvi#%#RWd~ zdJ*;-Y}zrhMvX(JU_sp8o%76Oc?iFkHL!+=MRT#@V>&K5;Rsr+6yl_{@aC~7ii9Z0 zzIs(oubBJgZOK{{48{e-FEK^H8?o7`V0mOmEC~RiNW^mZHXdma`U3g66*u&!nBMoE z`dK%o#O+na%V?8IS8axAY3zcA^9@#<@aHc?XJjxRoT9(HTAu7UQy?Gg-0rK>z=+mf zs@D*dd~Ya4ZzY)%z{Kv2&92N92t7v3uv}2}d=`ckVya80GtZk(%pYFh!ApP~*)%ws zXOW}?)6!$UnZ?Nkh=x(N=7TYF1{06i!t=}oZL38%=z0LJ6<~axYQ#bw=uO9Jul>@E;Zp8Gv%^ZnpY(u0c zT=0f@la)m|t{kY1o62y+Q?zQ-u+VS$?a=acvOC!*-xSWfVsd#P0I#TcNx?Dw4!lQ) z3jBPnYy*rrw)+&6d54mdCW9C;6bc_HKXsu_%gA|2r$t57PW8@ zP;heHWD*)ixh0xsK%if1x;;QFK!1dJ{ggNh*wGn_CMmu0QHSn31J{@R-XiG5V?+>K zdu`T8fpsz!!m%2nR;P*Br@>TJIn3wrv`!pfgX*}TG7qL83j%NyzX*=Hc~mamgih9e z2XZ(Ng$1TEZJx+d()s2p!2zpt<`PYmxV`k*W?#McUb*CZXY2tAHlQP5`OZ05#m!wc zPWRqyi4S-Sbb^VFEZvL2v>fAwgW}HBPX?I_Lub{CG^x0kGYM<@Xm7|9AO z8o=1RS_W5JHdY7QSd2KkYQzDvU%0%Y5{-G!XqfLoRk=HbC_QObon~U{JiUBE%AhF>G?kUsMTb}=jGFREbG0CaJ*z5V6{;5$(0ABwOFc*ZDr7u! z7oys)F4dh^X^72T9N`7lH3A-vx3Vq|?5wlrfHZ+6&%MhreL`We6>$`KxxF*k%H_k_ z$L3F7VwGCj!#2y-(&7ubcR;0YvKr;FEAr+G6PSCn8-Rd^D4CH}ai@>z&1_6o6(Go4 ztkHVa(-sW*UK0b1Tc>%02E73$&M|k}rya1~ZxA4RVs{Alm#}R09k+PMfVg%`$>SoM z#Zt{+LBplBmV!HNB19{!g9dqpxBQI52n|HA|XBmU? z9)Y~{48-znbW&HDrxSd**0NOQ$Q_gdy29>yJkJ2Df`?Kaa}c8aNx-Xe#XQdgeOkI4 zQS7DoKydh-`Xf0uos%-!lIj+hW)yg0liswo+)Ei4`g48K^Iw$!=@}T8Lvo2otCITn3L9@K)lIBmZ{2gao zQ@|@Jx;i2Qpk6^j<|D!34N1GzD z`OGSLqu%Qt0dF>W#EO^~v?Bauno!K5Xaq5~@%u#JtioW=R0qWpC4#@i74W@B z_kp`vPTjYsqTriqw9gqDDISlZTlXFKy?EHy$SY5dE822ow`!>X^-(?7&U2BbHa_vj zeajp;=}V(Lp^I|kFNAZYi7^lhAV)!<$1-m+I|@#fb2YP`2*$t(2c|qUuz421Z;exP z93+<|976NJ{E&kg@CA=5&lsMwYjl!T3V7KDuHzzkqoGc7_AP_IA_81^eGZ_Cw%doL z51zf0dD1r<_lEa^Mh8SHAUp`;ji(d(l#UZ{`Xj|5fH8c=W6%Bgkv-H>4{cPH0(q-opi{dW!i#pVXnL0v@g@%*xN%Fr?cNyG4aCA1wEdPb4uc zA>cYFUI8w-jf7N_Cr%o zj-{eIkeS&z6Fi(fMH<>Sjxd>=&>ipu^&%hVsRE<03!0};tl)X(;zI{-ua>b==xoxe z@RyAqFz{IS%;Ax?Jll9_1%80pb^Vf^WOL!25M%)A(UsQ;s_Y;c>$Tys=8H5|e8#bv zyzTrzqp%(vvOrUDmb)}i>w}6jb={GR5VC#P*JGi#uSv86jnTD<6gBQhEaYuXIyS6a z#Lqy#waACG{doDbKtRW`2z9X;k>j1U$7o~_^Z+z`3XDDjy9@EH(V+3Q_l?0hwYNFw=nh<3<@qV6a z7qD2ynb*VTglGq-s$zeph5%CNlY0DcbOWxjr&y>MF89gsbBebDSjr?ci_ab$l}oNr z#LPCM(X5vaR1!uKByp82!rkLH98-Ma%pe;l4IC3L8p~#7k_K7MHaJHb<@rif??F{y ziP;mm;pRWFy-U!Fv|f5`jFxCLza-`a2zc^X#&t1jTYLu=+g2HFoo0f@4BkF`4wR_h z68ntyibjWFn7X)c6%Fz#CuHQdBkDAYUa7rmv>9_iRFoBS2tC`% z27-YixR#9er38k0?x81=(x{3e41&RKV7E`QE}lP3jkHv!7Ke4#csPU;5XpIs2NlYT zosxyYi}Vsxcn(|Kp23PcUdfwWEEs=q(0(yk@LHc#B0OvxpE@F7NF~lhQTF1ANa_c0 zXL?LRV3FrORBXqxtJ;`1@`XM@pXGh28Vd7)Htk*rmp$_^? zsFY+g-ZRECndeD1@NCrN+2NakyG)TwS&Fkf7*rgW&Fgmr6lG`~=$jS8@Z>QC)KnUZ zmpTwMRK5j^>X4FZxQ6#Kf+}9U?%^8Mfz2wJs;q!FN(*2@{gw+LaLl;+UgN9BW|O>k z=kyA@=n}A)2KQ+P#470yO>Pj}Yn$3qmTHrC*)={dYAgAO8~b5*T@UO+Bfixzwi5|! zsKarIgEqBA2cTSEjwU6=yIBf?;epD74Nzp)(7u(jWhw=@Cv%*c9Km#)HWyL~mu^T& zWO$v&f!J#$h=o68ra(qCSaFOMEfBbHX9S0X=_$CS7qY|kkY+)7K4td4<35j)Ja?8i z$FO{ElIlCx$M4TVG<`8k?P8?mxn`(S%w>a^lLt5zr4pho_C54^TmcI??T*))>j={B zzOg-oxrrUQm=Dc$8dmhUl6#B_4I_FJ#`Tx3$-rHdWMe_ceyr)?@b{(Qw(qI zz3S)bCXG>P%Aq<5TbmBBfJG-z02?!}vs0&w@eKg_+cVrG4jfbH5HN(Pmj)MvboYk@ zUQC-%FS@Ih=RiN7^QXFJ#JH9%Y6n{)5V1Y&P%G!-YI6z&&g1vIzvZi+Sl?3MO0LbmEpp&_e3dFwBZhA0Be?tzom1Eba3 zeNhBTUA|mTi2FPE%V+SXohGNd3aBtdp8?KH;KC=z$^o+6H8cX-qd~=12LR~ODmc7h zq^$wNX1tC2ToCqAq1mH?0ybNl)$$Wrfb@J*&mQ!yPJuHB#SDg`3E(ttutX+TA3j@1 z)8Z_He&Mf?mpN7)w2EcbInRX*g4Mt!j>i+OZC-G7rB)%8oXQ%mfpp4f$MaF$;W36H zo#K$<_srOu^m4!>6LMe~w2QnBvJXMeBaiLL!M4!|zfkW^dE7&t0v)gLiP~e5w=CYs zXbqNNbyTpOk39{7)h@3+Qj9o&{911NM!0-0#P<+(LBY#Tx*~{k!a#f*)C{28o;H%D z;_lB=k(f#uh`kHuhmGAYyZD_xDVeZxoY(8e-t0=Jjo(t!&k-P?$Wt@%R+s~&x_ljX zw6muXLaFS|>DfDfvRkfUrT~2g1y@%mg3DEjh9;Ux}wg+v72}y zuUVM(vXeRsND#PafLd=1CppdTp^XKTy14uAoaR@IPEYE=BOuS# zFP8L-(BxZe{^@I>@tzHuynv(3r~(ndH?>ErF0Vt*M+Ql9Nm)rv)A?exjwvC*bO5c2`( z&oj8N5^YdhfSrhP<@vp}JZL&Mx_2ec1(+9GJOTD8H~Sn5j8LB_bH10<=7jcDxVh+nKq0K=8xgZ|%J97M=v|k19n%nI{ z3)v%um!Cin)5K6bEa=Lb5}5Q&5@dXW`kJ$}x`qV%Js+A^;Fc|x5>4bXqVG^A-;S(; z?SzE{;nTZKK`y6r8!==9CCY^m84vV7e%=5?D>_a;Js%8OUUV0zXaz-D0#*sJsVyu@+|VoDFqQ7%BFdQ zAGP};bME-3;QVty&~k<0Fp|VqFTBd|iM@Km)@g1Jo~fU{*5`#LSS*|!RN2&=nmUzA$1Gy~zGId626CKw)20^@|IAWC8V7Ly~9J_2G1s>f#i&h*}F zmw?v*lJH0gc-9LTMtXU5kCe1%4LsgPiBggKK++TF%RYPwGr7|640R;|oSHctPl0WS zM;4y!;vSLnm6x)42ELYw_fW~wh?<=4p3st{Z7TR^^zP%}1S1)=P#)k%>hDP8g^nkB zQz+sSMnML7!HCyj2aI%Oz6xf{@7y-ijceC4Lo_@>w+Pu}i|XwOH@*i*V6*i^ox@jV zBCRiMy+f6knEBPyKsx958e^}|n=19-G09<)Ehv>ziVv9TwNAaE*2ExJcm-%OZZxQ6 z0lwAn&=k?F+gyaSDcOy0vpMxq6~_q+ia=hNK{I)t{q(u*1&;U74^&SCh%HP67xXl3 zP@kw%=9`!?$@8_Zr7i({4h_XEYp*ndxk;E2v_-jICjqe^m9CnstK;%Z_V9S-Qj@b1 zDl{*R$04O%YM#6s+_;+@Y<83rVBgq#Oqngs{cin1HyiZ1ibE&K~yi(pHDYt5MpOfb8+7mqh!xUVsY7sFg>9%dXV2DPmliHiH)=J$_?<4f2 z;#VVmL6+rDmpva;jiX6yEHgU-YMRJt#2m}00)Ull&QZ|qUKtC4ZJj|$4Vv>it4mna zF2cxpc|tD>H`$n9rs`u^84kOK1eJb>Th+_d^q>Ns=`dKY18qAs_KRw)?dJ_@vQ4S2 z$2+`I_Hd9N8-y5Gi^?L5Cqa1=JoUQ}eAmZVk6!dRP49{~B;^TvQDC|)bHErI1}50^ zmoj{O$Dh6EZqX{7s}w_wA&YrP2RoX@&*e;ca?25^i?d}4N577){IS&L5tQi5_~TFd|xC0rzXOAL?`jr>w4ZtKS zusFj`d6+ZyTPuL0CccJ3xoL)RxiV;mevGZ`i%C*~orh!V1p;N~QCAEnac~5;eaE95 zS^Y?)*wwF}%sB3|Eu^dmN11Ibb22!MIT6--{l;0#<@Ii40|fxE9=qBtjK91)wwh%I zZz9lE>SvGH1mYpMo3(Md70J_EkWFN(oomn}3nhCHkuV}}($B_-IG=YNW7%wH;#Pa% z6H{JRV^nV}EJJDRiP#>VDPk{Bc;PPFIl<4G9_!pOwHY42WEZ!5FP&P32iX$1Gs#x9 z{qE-i}fJm8`aCk@K5nEeK%ZGyAw8e&6yY*SIoe| zVG{jx=0RWz&E!Uo>jN(hW(ki~eE6yfvfcm^!Lrc9y^{_hDzLap2~&IRW2m?9;fg9E zloFya_I97&fL8ko;sBV-ikbUPB(}7%&^th97+S>V9W=1hVTin3R?@@pLdmkGyf|jw zs0S?U21f7&6)?+7_Y)$)mZz)l@tbHKd-C29Uj?ru4IN&g$dh`Dtkz-7Qb2+6UV9ls z4$m_WGQNE8Dtye7wYk~!W$k8Li$>!_T3$tR4?D9HvnD1Kp+KUr_%Z7M=c1pgwu$kG^t(aF zrdaL1S>;WZgPaq0>1#+He@R9AX6U`pDf3uWMuXn7XW^Mx)$_#OCRF8v=P{*E&qc_W@_gYlC(}}@mV$XC^%KB~Df(sfglRH=g4Itjt zF`EmUkHs{po~G1l73|BP?cK`#KM(%@{PVy5r#SxcZ~vP7Ur6+y%J}#HohZ}pTF>in z$5aIypNS?Yjw+ov+`ZYy_2SZL9P*XJ`Qw)#;`~%5z^~__W`8b;J#2s!JnVA7R>@?c zBvfU+=uiM9PBT#inK^b}W6|eK)cteO9>-X^Dm>Q{ojasJH*Tj`O7cz|8R<%Qx8E2( zzoa$FFHF8u^26VWshWtN?5p9kpyY>r=-FT%haDZNhLi$W7=xwC)IAS;TfW@mGdJP6 z*-va*T%y)V6uR9!kol~gU+S)sFAJ`~TLoMPi3C-vOMh%c7y?v2ezExnq!TG0hGT(>Dpy|2?2#O2k)?q@kD z6tDW>F`>#_eZ4jPl=sVb1oZp~l92xVuyEJC0BNroGTKR}a93F{4c9pA(DxJuGh-~F z)y=@Vzwk2pes`)_4_$Vmludr-*epNyVGLZtG?F50}BWW!&4rB-y2R<`$QGOCO&X zpU*&QA9uhJ1<<}*-=X23AK2swu&^hfhHaa?K<|<(W0JOJ>dlhA=A=j3tT}vvt@zb^ z;CoQEr({gzNObJjTu=A?2GP;E_PNPr*|uE7PP~%~fIb|p5FS6n#kFn#SGRCjMgDA% zNS}eW#SMEDqcu{w?S;M8#;?o!ZI?gQ9(V~8pC==o%) ze0?Q-zLQHLw^!Yu?iTBNh^cX4L_cp{ZEIaDdeiFL9%TC>hEgk+${ZanFxn}$YMn?b zcbi?Dmf^F6T?+gWo$`{{{og|v4XH2w$?x;e5H6xG18i!TZeyI8T} ziP>HYMJH*0eJOvw9;d~ieeigu2Wk6+LSx_@YkHn>t%hf&_ZHMdBrhRKyj|et zuwaSi)d6Vl!-l|VQ~LVW_xX-Y)Oor@6d$w@$>S>Bfbb$r!u|Q`2k;mPwy$Q$r}sTZ zQ`J7#cS0Okv7PLXr=F-<(?W*le0{CZXAswYd;0`fR`D|Lkz2j-!9(f{TluY7T*Z}n zLcm8>u7?zy4wc0ZgC_4$xe^x=fD~O}qi5HrOX+tHBE{hF7*J8aRrfWK2e}Dq&nC|0 zr)TBB@==%?sBKUT_V$E`)0`h=)K<`DlI<3woD#4~2EF(B#heMa>-*wp!|t)y)Bs~SXZ#uStU}J$|>!wxhQJEK%nSPD*A|d(K27Q5Z$iOZe#+aB(8lB9l+Gny2wRoF(-^JTaOz z9(_BiPZNhr)oKkgzP>x?^SigJfK1}-F^^ssXehTmQ0#FoDZWcROV^XsicRDeh7O_k}p^HsgH*9#ZOG#RkT^7vGvV+MR5@-lyZ zJ?eMHXdxDpjM#oo7HRn;HvBFC13jM!@ME&Q67lylZR#xQ%TUshd?#;QUN(wHykkjU zR@!b8J`r@XfZ&(3FrZ)G|Gi#-^P=(Vn;7-JYqahwL^FsI9@3|jeEjsv+M-;3cFr;d zMykOgi)%G{7DL#w!!K5DLk~P25L-P#c|u0mFA_g1;O|!(%FXK`cal*1oZbTv^l^Mh z=O&i|Lb#;sve^L*@Aqc-nnY&b9!A6DD~O_{%O*SmcwSErtr^rMYafiXJwCSY9S?l6 zz=^Kzh0qN<=bUqp{v15R(Al{k7_{~~3W0Eq$fo|iHp`cA*H3{pJQwmE552cvvBCoRagt>iAxj#L;zI2h2jiXu0*+hM_lZ zY8N4*U(?8JT-eH#X5&U9{GKJnZeiJbIFa6FYLD9)Bv@2;gK_f1^@c4B(<@FsE3@}i z$@g|;)(?v>^OeDaohQo8 zEERFDO;SDr8(!JARzylqqTCKONq1%Q#kW#dIq#xtC%p!z~^RMI5`kXWISU8}yp zeD4L5MM`aU#qwie`c&HY+UMDchGly*K8OZacQSsKikvJ;@UWG+4-e1PRZ>hB$XRx% z>BY~f+@HRvyPoGlRzdFTlX5~=S)}l$B?J2vl-oSBsj+%cnxB~}zOy${>QK z*SZZ-g%D1Y=kM^atbom;oI~OfhU5V=3_k zkKg-!ArXz&NyinTM5O74%3178Qa$bAX-sol)T~o)%Uw~+?crBd_~{G|wOc*3e4gwf>@db$RqJVbn?TUZ6`8N9A?+-dA%ovjn|$@tBfO8?a)7g5+5=Z5=*!o=_U`$m z^c2cAP~jP&vF1B}u?k;x(WggPRwmLmrSUVhx9>fCkPBBTG2n}>I@{x;n;RsTPjFO@ z8yI{k-qZ5^z2j^d$s@`)7uf?1qL&QgOAksdl3?DDGLXWV#hs&cI*rX|WuI=*?z0;~ zrWWOSk0`4v`^dQh-W}s&XN$KvhC`gnh=a{jBQAndt5k%hvR}19wh39}+^ML-(2Zm96?Zt~sLF^EE=O5IMD_d>0Z_>RTnHbfM8;hwMSB>S(tg`^@>8~p7(`nEirx^*320b!?euwx#n0mOGFG{-SOz^FX zzj-MaS7Qv-=Wk%1k+Qyux{xdqoT#7uo!_~FZ6h=UHC95YsPrm^fl|N4WJzCdBi`pp zLl3pt;_Y~uom3V^j`c289>1ExWiw3_Ji+qvnWFqoAx>tPPKh5i_Io5ysS`X zOA{+$liPL)9-YUqxvp9CfpD9dOJ=MFof96uv=jW@R}LlwOW$)umZ#d+T`Tm^yK#W8 zP)kZfn`MmN>4|ie&S$lsjuc54wT}(CM$7?a<0e%bj>fsOMY+s0D~|nm-`O5fbiKz6 z?phH--KVlTkogSVpV$anw&blk*A+b zebtNlo$!uIgKJ<+_98mBripUyfqRA|%cD~^0$y^iY9@7aSaTcoA@61ndqSs4l<8vJ zy>;{?jDEWD$m=>AX@^|Ign`O=8KgU1}RH!Vm$q zH7UVz90v8znYCB%Jp_px(s++5Gs#;!fvt#kvtNvi$7`rlC5)p6-xyfWBAgZa$?}0f zKFQg=*Vi_o4}mJ(tR0vj*({z1uewU8Y?D0ec^zLh^QT|I^b>SswoayWBD%HYx<}V> z9`+td^qmR|yipLm^;ej7Hw0bJ=4ogzA*H%jMQx;KVQX0FXfpqN%hg!j2B+*HK7|09 z$5udF;~{TbqBy&9kT!d#T8eN3{HyBs>0GnqTKNccy#U1Uox>IOTyD(<4#oLX;C;zk z4NqM!BA<4wJ5*?kJtq;Tbw^6lm2|PYRNozDW4Iu)NnY5n*5j_Va!F0@ ztx2DHEApawSFlR2OS5r*&I>vv_!e-1U#od3>pZArwMja*Qv>rVF}{xN<*6Ri!Z{;0)B2>7zkE9i9+;B00#_8G#a)>e*Q%Xt`V%>Q^rt2d@7CCOb_sy#`ob?%WCBej-T~A2sk7EOeyy1aE5A& z3sj3~of>2As(MbG`*x3m43C>MrO$d7q&l5Z5mcvX39Xo6&Iu9NBIb1LIl}I+a!$Xj zh+~DPKf4->w8f3CUb^o*pwh6oS=@1u7oN3+fcJ>8Wb_R_juD|x_WjfA=q4F)s*;Qe zTbM!+E?49E0TV)*&f~TBd{8|Sl-;a!@bx<#*v!yI0T5)vvl-8a7-y5x&$*jdjkp1? ze&gX1nOHjOaYrFGXX@<*njI6vzh(0-sKJVyzEACpJydgBG83#2gkq zec;ZM785%{N-i-y>CMfwAO$?(?=b5nG0>wdE%RaZX~|4n9e&{>%!cc)pmARP^aQfh z_i#5j>giIm`B>f-tOxe9Bu9dM?t2GWhI!!T-dp^I1Acnq25GJrC{~}rIveZ zjj3F43=f)T)NJf=CNj3-GB)m`p38gnrf0<>*%k%%YEML@USrpT$1%>5MsMkI?H3aL zsz8mM0ch&IPBRYlDtid86kdw+A{A(@Xp_NtJr<;+FC^&G9Z}bd$1mJBs^HB=haM@J zBX$_~z7z_rXGWd8ds_~vLN!Nt0)N_Pnj*e9C{K#@Q|6IV_`RHKvlQ_h+7)S3;~V{g>*9o=M#%hpS*tbc8jdh6R`o0qeW!A z%+o>2eJXL9^3jegHEbK(oqEv|9fvKKMKpYue7;#%0Xp1hp|9(mtZ7j+n#vUL1lF=$ z|GvCmjP^#Cii>EO_SjbP3UaVUP;)kzl_gEat1~ps~x2Wa+oeM0bEg?9i3@_WTNL2$PV!tm33};`lA{akSkvtZ`p9gh26J&SGP=L0Brt0YRsf{60+`nX=bI*8GJ_TJ6F zDUAtO%zI#<^*dS4yt`MzAVT*%FVch|_33kr9ZV@>27hM|`*89wyI8jG^SuatE2P~_ zxpT2IyvAF~sk2gEwlle&+lC?_dG4E4&kmWBWr}76L#yEzM_O(q2N z*ZY!m#H2j+3So2j1|w)^X18f;4F#sdPdTTV*!ILKki#-Pf94YHXG@!}l48*;X!iP* zftkF1s;_2IP(1|!>fCYL8mLJ83mN}(+e#_5l5I}D%caJcaWqZZGim4vU?Z6)9bEG@PD+G0}$hK78xNd{KICtv`kc+w#W)eYiFLD=pALuB2I&jrZFc02X zoy5zwdn{x&jW#}#Qoe7HCv@oatr=$32&Saxrai3fu9-r!>P--OyfpyaH=FBb-T5Zt zDM+blU|@_FFrV45zfM32Zmgf`0RlR}HGDAjZubTJ`B`4xoaXaR=3%8aHz{AAijDyl z`NZebivz$sB5t@@%Jb?TsCLaViwCmG!L>;vx%Q0vrQl`7yC|PM>&Oe1w1pW(J?Nv z{gqJVH5S}j&s2-NQt$?B4|uH_<5P^95W@LdeS4YSw&aVuDT%}yO$y3{{fSXUMU}cV zJv<-fn>v`vtll#)$r-DBAW3((mLo;HK-l($5qLiQOF~$hdI^IjKp(O+#5+)?QmjP_>D)|c~{&Z@j36AIP z43ZtXDo1s&Sm;gB0k<)RZ${!&@Px{}7{FWHAB#K()lIs7jev;WfyX4GL@(vRtnSTJ zCx!0e6#zdxDZtyl#-}w!g2gpCBHBYgJt_9j@u-NR$0QUfMF_{$vM5pFRYT#erg>S& z>u!IY2cI~-PtSJ4gt3%kZJxxrUa{=)EPrlI_AZB6tC4MM^zNy6$+O1k%ThUD%M?GB zJ=DB=S!-6Qcq&eMR;!LBr6Y-(4lYZ%(Ib5jfo`6RSn?uuG>;g5cDJ=|H(`)Xt%{~= zGpHDUH^CM9K<1)?8SJ!VmUNND==CR3pYFW@_3rlGJh5ss#JiViM2wvzd0MmtdS2%e z<0f7nX+5k6GDX5Zpp(v(Bd5xhh$*M1c*J@m=Of&*9*54!y{#xE(AMg>W;_USXD_g% zn}|aD=X|=IWpdfO?!eF^T_X$z64_)e9K95iy9qs(|DA7->jC@vUOk7j| z`n6d;az*NKc*oFu2*Y|s7%iQU$zY^e7_f4DWU*k(W41+eLonCLrv15`$0hc=9z^14X(z#*=nysjb##n8XQb z=@;W!A)m_9Pe)gNenhcWILBoMZ6@!npz4C73tVDryQ9XGy*AxPTj6}!MW#8LFnDPt zFuYuPJr=PY_6&j`Eo}IyXsNMJDRd&m(W;A=z`P1YB@`BJoNM88m^UBc-MEf(w#Eh^F1_vDHe` zW9>Qy=(Q}hXTk6Knjtsy^ry>D=CfuoLNQX!0Wuv4(!3)#I?#e1tFV_2W2sIy56Ap7 zSNW&QgFnRs(7t=!`pSel#K>(W;WDd1I_l12h;IUDm|j~1a6P{+KfhOi$NOgLIZN=6 z900JZhM(lDUFK{k%1sLlleugP&I^yXPb!nA4Qz>?y0<>?QZK|`nDG-CqxpSe_UZTP?dSfYkYIJ8BQ#Q6HBSQ5DJtlgdm>*l zhK5+;^L~Nsi%TbMijg|9v$YYDJ&xO66>SxLooYVdxEV{5Cc`lWZ_($O1VOKpSG+Z% zhevP9NS+o8CG1ZxJE29O6{BD`Z}OvDqY%pm|5MZ8GZfWF27KVPv4|dxOc&*m>0VfNalZK!`?YlL za|$H6Cnp*V(t>Vv9I^)rIBwuWqLtYYSQ!WW&1mQQ#{$XF3>oGZtu0d-tLLpH%<7!1;OvZ z+bkWwCsgtt<@yBolC7lWX%z|942i>Vkkdw;fo`Gp*QCw&uH z8d@1_EI`pGTEbz%cMnws=RFNyHvpPG#pz3`w?;?$CUPWj4sUj?9u{o@kaJ6J6+c8K zE;ZUreA0p>=<=sJIA(Ep1;iw!v#FxM$1m=UjF&mh@YCr2ja}QzTsnS`^w7L3OAz37 zC1y5HATl=t7|NzoqZw&5i0Bt~-#5rYhxx-E5pmbVUnTV`Adv7Lv6pSO58k@)pd|?OR$8I(l*3v)D+W}oigm#tsd{3KGFN^5PdAp zU32rg8V!^S*CwEV4px_TK`vs@9%hQuKVN+hx6>_|+fQWjT~&_s zQIU|9Z#Y*mCSA_93Gpuk1(gqon3tJyqL!(NpLSf|a^$64ZB%35R?xj5K#?NY{zCBk zGHSZp7osVoFV4+`9G}iI&(Vt>2UtR9IF$`JIFim7l?ONbK!J&2JJl2pk)!QMeYTQ7 zK^b>5sPOJUF8D^o=xQm%VtbxfbNXo0)=MqYWgl(1I%;ruFL(19q#qsq%*K~_upxxj z`3gnd1ovoP4?mpPW?obUsDr4W*2B~}e?$9)q0lFWISr*6yoya4N9L>XUP{t91BBx~ z0HSk_Y<-X2>aqh|RRCO?dRkm=^I65v3XMuqQKU_?!2{frQJ8@tyjZG$%MA?1D17BD zqEhgPd#{{qzZ2 zeKkMTSiI^rU$QbmGx0jJ*d z3Qc7N6!P3f>43R%5x|4|(6uB@tKWbXbfHoQ0 zmktkZIZnAMuO9Hkl6P~tF1+P<8U5$IQp4?X83%11r~to^#HRCk=yz)9g+BAzM5o(# z;GT)BH_;1A?Z!AC%e6nb+82`F7hd*6NEYgp+`06{Xnp23zR{c}Q^)0MuP%$CWa=6v zl?UN+ReLaXb?6C=h=tl_jz_)@e=p3fpcwUaN*P+lpE3(dKzqxetGaxQiqa^8FCa1} z=-|DDlBAC8=t52Cq;tF%zp%7TN7U8Fudy@X1!zpwMCrlCwD#O+x(7cVE>a-}2J`#u zGv7C19dF(Dq8eHG9irHarss{;gU`zd#gdw>&O>94iuM z{X~;>+}#8(v)}ld*OLm#DwKIJ;p4#GMkKXxLOk*~Hl;pOchD!AdtIIP1RE))7NDZ{ zpxIsw@5VfAs}X>lebCb?vr|<$97KHD)+9S4Q-h6T&c>4F<`7yUJFfuB=1|S?)PX;G>ChG$=3_=M+=)mFk zI^QF%aKcwwo7sfz4u2x%^A4_gR1nmS1=>5uL~mpVw<*lud+&%AJVi3a&Ir$qFUFD6!aZNZ;TSH0e!$vh!_bVRzl7G&GrG#MA_sCHBUsH*ICNhuHy zZF00ek@tz{XBSF0UTC#Wf-K~Z;rgfj^+@1 z!J{1Isn)u?GCkg6^roD`d}v(=4;fs-<)IN^SVdu%R1%}th}avPBea)?&;8+x$|$<` zbQEHa9`rJcM1)xRwu75aB)H^)zW}S2P%MHvIqei5nJo64`i1MVLOpsZ4QlWPpR>@y zyQhNZ!^JKQc=T=(Vn}t~j@_w#;`)6*Ulw!N3X8~jZ6+-9W=fs=nD8+Qpsd*Xfq*FmGXdC3mynK}|Fi%ur z&$+@)vpX*-BixeY6|%K1K1f0hTm+4W?9YE83&XWtu~;t`52a%_+?eWF=tkUF#F_3G zGo^YKYnvtR#TT;Q7k7QzK-eKJ3wXCWj8y{jUR#t#@EEB%Do;Io@hm}D?J35fIH2Yf zJw9n4fy|&2$YNcwxTDD`b4V(oV1vn|2m(vvC)C1oqlUR`qK?EXKV>vhn=12d1NxUZvdaPUiz}nQJx?2c-0JOvwebL}WLeokWT0^*y1hd`ZYK%Zn<5=!{7Q z6J24w-ZV@ZdIDpp09CJ()ce9WVDyC+q$);AdMi)qc!KhqYi-;1&1e8E?I(Iz1U(pQ zj(G%6UbZ{@%&jQBBW9WowB@@%9rIKk-#xvxj2;ZSw0U=>>-flSu?)Y^mG2J56Bks} zqGAv!>P9ai?*h(`pWWjEV)l!dz&lK<$E>P%;y{zH9cy}FU|kzt-n^ZrYp;h7o5G~@ zz?7pf;&m8LWaRbo#ITAh0q_eKvK&D3a_=$@|5 zzwn(|#q(N{@*-X&q{fEwbV(SXad}>aHf)B>%MChH;+>zKtKYqhalPKff)b7}4pFj0 ztxRN%=;gL>*KibG7BOt9p}+TFrEpN5SPjXE61>YmyL`T?0jOQi8}Awy_X*i6u4inq z0QuM-_qhV5h~PuqMiSta%ziwsrin!qwrvRxFm=1|C}@N22pd2S?IAv6c=*$MC5~$6 zUh3{u$h9=&qKRm)*G$WzJ6sl>x+icxts?L5Nx{B%ed3#Zo5mi-Q&3)OD-l(DPcYbc zbai?RLpI&zIs(T-O(}v*qA4K&D3Gqe7rLZO?*%I5miM_88uf7w29WTaBAr>`K?~Dz z$#q22FrJ?ZAZkd0Te9rF-IZm2%^KsoG8CsFjxw$~88OFa@qmBlTq)Q!H%L9(dN-jm zu}}eHad*}7k^uc)s}ntSI#%H0PmKM08nf1grm`2$pGpwAy2Cp-s}Y!CVsV}}e;45y z+=HF3bm#2*!f;WgXPYJpmW)e(>jfQdI6@n~Wu!y080^ zj??y-9YA$#JS=Xq6+Lr!Y~6J>-vLPO%K=#d{XMlkVvr=kbb#2oQEHpOK&a4)k{Q2A zDP+>yhkLqvVLn*!uNJn_+tsMaU$^om3S)eO=f8ayzf&Fe|YDP$%L)@#as)e+ zJF27CJzVkbeW6Y8scex(*j(6Fe~miGPx&Y)u#U8ymM-BDWkefJy*zv~(RR!`DRg5z zfYuF1Q)~Rj84tz@26W^+CcB@Dao~IBee*1Whzs*BfH4uIOA{z64OdrOZCq01MPRef zamSuFE^eeLL#<+GR;LCzG)FXESt1Qm?)A^!=pOru3n^X#is)s`YHA92Mw;>nGT-#P zU@NU6?&QS){KWgSH`4B=2A{ax+tJf=SEJ=Tw6Uv0mGSsdsDbiO3Ogf4t3 z6lG)CuzIHomQ0U#;|j6*c!}ZNn%wowXiL*lzMdzi+@Umppie-2SjF(cOC73r@0rNs zH>MH3&JUuQKr&HLrrrawsR$&-p{_?tPwbsM`ROMER1d?YX3$x>p1mv9*Cb8d8I!O> zSCwTV^y(o5u%lFbAsLmAYFBd(L|e0*CuZ8LQv6XB;IwL*;RzWDk$smsx=I8V?l7>c)FrFS5Qcf1myG(MBYlL+-)?AXy|merJpeIQ;Ux!gK^Q(jaV*fMz&G zf-Pr|I3`(-my#V4(`ndCgwG-Z_0e0G7_u>s$5t_9^q|h0C8zRwyP2q-XA($Ja43z7 zt58;Ujks5zb~U>XL~xA~UFeQH#n&XI8JR*R9-DdBhcmh*s-fM428Z*t#afwf*%V+20j(Yk88jd>Gm!0^$rXHCcW7&JXw1o!pYNmDW zSo7>&TzL``baT!5LeeHh4yVX0qRJ3P&d!ve2?;L^K97ykn*myC9?n!I%->UM19%1l4fUWs!Mz>D@n;Vmm388w-nVxZ zMK)EZdp&9FIVf~hNJ9udw5>t`J4f42 zivfmXwlEMNo(AS*LP+halyTL74AV!hEF(gCyz%sGnrq%vn@7Z|@Oy}E>3EUTBgrjC z@~WLg3sC&zsqu6pF`aIpZ(VB(_Nr}e!J~;2+wE7kfv~8NXI?z}e2{JK9r=S_$oJ~d zjE}sB*C^%gw_^l~ixf!m7;9&fX#sX2O+^~CS^N|E&u*%ur{3tPktzWwkIXDQzNq;BzK0htyc}I^s=-Fmnj^1HehhYXs$dG9SNFGL0M$z zXI~`;LvFY`gzh7fik4e&x{C>aBpN zCaVx{OEl}`nn8@|ZM8l#CjrHaBU{UO%A7TLDdA~P_obM1p3rNdZ8Z01ctPdOcElFa zi7_HE?`dbDcJ=fIl*J_iY44iVy(}yNZmD=pB${JVyxDpq(-oSXuYl9})z#a`3-{ix zqg)B=3J8ne$~VFrH`34}oXrdgY3N<62BQ}W7-SuqDo$F@-Fhl9H}ngA|Lm}yd0=$C zo;0D=2*n-P4zU{yMpp#VX@`(CPTS+u2M-FXUu+@|x|pLhY=k+^a!!@J$GzAdwj$`> zn@5D1p^nNv3zCb)M8SSft5;ASm)Q2yYf>d6k{Gn`S>)P)McCV>0ek)?iZIy?mNH{O zn=q3GI{F>~IHW@c&MxZx!oP&`TnUP!b7(X?(KNvzH#4r(YJgdqpG$IS8>iv4wDcGL z@!4yIFVJrQ3JtJE;GOquI&gL;VK#b;zN~Sg}oZ53a2f)pO)kD>A<5{=R zQc+CLQ=Wi?j-WvDNg^sqLVN;M4GZ+1Fa3N0p6GRuLaS$XC}(&3I=Lfa#TJ`S>kvXf z9Pa@?ft|9j4+aq6v+brni6~FSlJ4zTwcOEo&z?m4BoA(DTU$G&J@SeYf0t?-aOz79 za8)}`kyUjC)hAz~9*3MIH#<{tA-}qguFR03gj*82_p((Tw{#w41vU%DRt_a!a@qlvZn}p8}49i)tAkR1opr$VaP@MN3b9xy%^IXKaNrXeGmc7+d3gYzhHM=0>8SDZ=nLvUfS3 zG^JoQ(+r5HK>chBHo%yvQC4qAlchX#Op);&j^Y;5bmJOjo?=DMa{$h7B7i>oGL=qQ z@3^XLZOj%pPza$v(wa8#WSrCjFP=ZKmVTj${S7!BZmoNyhtZ*1`N{6*|IdQo$7gQyJgs+xNsz?&1lwK+FN? zddstLZWZhda|<-dtb`VhbsCVy1?uMzCSApV=tu~PgADHSL_lo&YN9&PTID}C`c9wvrDM4cw`PSPQhU3Z)dMv+Q&@V7 zVD+_Sg|*GFJU=#9=J2qTgXRE6dC}4$EnZT? zw*pp2fTVm3^4Kv1p^>VImuBjnAr82u>rP>@2qUv{(rkp52Lj3BGhhX`2iSewX^v9I z{o)rXGrYCXozOX)XOw4r^c%^kSt;) z3ooOB#G+veoZfQe@K6?UhT~UUOfHJTcn%h2k-8BM27&^v`had4O&i3+mL*cVFf9wz z*m>)Pp;OvQ?isM}>(D{wB6A9~hqfFjEG3I2c+bXnY~MT}xecFot7udr#aDMc2o$Tn zY&2^a4(wu`LZH?&nG@n6*hQe;tv~GxV|Rn92*OI=I`K%Dg=eDIMp+wcIY?yPs99vQ zWIL98(&FD|WHTJ;JsHf089XTZcnlqflJ+2d{Y{`F9l;La;j`K^raDfAy$5Q|#;;te zz2_O4!y!z^It7+EbEKM8C=mJ?t_2@iSZ?x*2P#NT0V=~*C9-Lum+wSx+(YX{Q4dBv zCX}2|YeOn}E5J0MLQD(PNcJFxb{;;h7?UyO5t<60crjdXJDLtcSM~F~oEqOl5Vp9} zGLhXZg5H8@vl4P;eYdDB(d`*vc?V`p-^BPQF-#LuP?0&5?x?dmpo8ZM-~v+PjSuOa zZX_y~B;~BgIm^H{yThJ<0Sp((KI(=%5a=GPl@*a92DgPbRu_(}MCQ=O$cZ8E+#Zzf z((oCcsn0yL6N2Yd!wEj`h^XFfObwvCXT>aFGXlq1kDj&6MtasLrO);z;BvXOSCE|) zcx|z%z1H((hlcl)8llJ3$EEcuUS#_71@Y-o8e>^NGqNC}wQR_9foDpW`E6zK+4A8% zgk=P$d?x}=U>iY>+(0P|85HP=ZV9dBj`Z|P@MYT5dx@S#ecO1&rVjf2jt+;baYg^wqYO| z=$=I<<<=|oWdnmEIG4nt&v^ymd%s?e8yz%f+R zSCu_&pfK*FDDw~>dv1bg^MjrXGjl&(v_bS)5g>Ju3nqhSGxd^r}H*28G zfMs~vw{MB0v$%*UKvHxg-huCu2UZ5ryl9@hEt9j>Fo7<$aiR`I(|%gxNpWa^Y9OH^gZuay*#XU5DkXC+<6(aZ_BvXQ%}YzU5xoXVD;I3TiDfB zBH1Wl#-+EE&Qyxuh(HnaBExL1yC-s z&Nj1hpIZ1ibxDxUN)z9E$rl&GuekLdND1p}I!~`@>3q@lqISIZRX+DHP|Ed3uTy7M zPNZQUWys)CP^Y}Br|IviqsQ%NpkwVlpJjNQOLQ|tKj$6pT2Oau&t-)Tu`TdUF>`+X z#4hI^`aqX)s9ic)66Kq3lK3+u#4EdmYV7wmUKEZg+A!8Lg08hrvDV9X58}-;MNwP! z*lvBNp}r6F%^A!&Yd#xjLuS?zATO3+7>X@RyGY549O-)x?MdZ!Q~|!;y_0-cDUH40 za$Dh0S4gyIXlXREvv%|7OTMmg^c7fzm+T{9}UjaW!J} zoz@07@DjK=GfP93BU`N$LQkvS@p&ZHOl#uq*gJvOwMGFNP(>l>MitAq)Vs0TYW;A^ z_r}JR`w-3_+$#E7uuk%HN~g{R^U*sEd6nRRi4?EL$5wSN@Au*}gY_!%+^*DItax*z zO^Gze-{dnjKW@5PNsgP6KZV`ZCsFc!6c8IJ+b3YBI+3LIOo!PS*Q!i?-oWeT$3BU4 z0SKhLDc5;5OJXrarzL)YI1)T^7FQs*ETPMn4tI2>I9RY^-~b|x=qJdUn3&UhBP0ImGf`cmbU`?-T_lL_wR>Tu9=eB7tR(ppd!8vLlABn!qXwf&?@ zKO=;*7QYgdXL^c!`<~@nXg)4Kf02U@JR|C$6IJ59n zM?57=Lya;Oa>T9tInKVS6rn_YVix8hfZM_&4=Ug};V~7|poO` z%rQ-3EGLX!8UjtNn3`!>D^oQ`Mag1-*b=D-r9`~Osp670H%!D6VFN^XujMCM7|C6{ zE`kSsRVh=7Z%O@>2Tv24)uU>|cqE3U>fI9=_$KQ!Omv(1%NIy#S(3v_kXaO!ZeZ5K zUCzpy({Vfn6J_T_NeLGp! zTT``da$`XP3TKm4E?iXLA?}xO-l*I9!V6!EOz$#F7iZvT_`c!bEMMPjaFX+!t=+}Y zxrYSOfT;FX_>p$z6F#5Ct`dtsiP*z=zxQ>W-dD(BeCHB2nwbt-!?aHKHq|SeujKKO zs@v?V=vuG&q{}{Ig(*ip#k(Veq9>A#gL%E?6z}DxY=GO=OOCD3Drv6FgLU{<>rni zC5AvE;qUhqxoU9fk|nLh)utBKN3Vxn5W&Eat@M0vd@u={!yOy_lQ91d7^Q-Itym0w zmE!Zp*5Tp}KJkEnJ{*U_Ia+mapH_qy5|uFGJmT`_Nm-EF(8t=(AIp}|PGr5RUQ5YZ zwdk;1np&3iZk#6tI+NV@&{d_yx^`bxJ-d9JXMS&2MQ@wfZr^TIUJ~fy9@W6^%QdWl zjiQrxfs;9hw{>H{#Ezq^Wz5sXb*5MNmN@V5)OUEQ&!nRwT95Q+CS;mZLa#KrdFGzB zVq|Hf-r^Mff}g7MH6ia~&f}?+tnW-1-%&&2jlDXV+4ml)%xid)6GnK)%dhK{X!7{s zEoy~6#?yXtc&0G?jzYJ>CVWI8N67WI-}IuX0pGRJ0xB=@r%q>L~3x zRb~VQ!rtpfFN5QA4JXs8UpU=XiILQm;j+ljYO>Yn3jS#)y( z5xRsFtN41cu~Ut}^UWQ(0cy5*Z;k60X+Vy~%dO2pD}$V8&yUT09={jWG9w|3^fqPZ zI2g#}R6j{0_zWGdFOkdx7)Vd`cIF}56Y*LsaT(y27MbjLtT;!m^J+NSx*XVcxJa$Q znx87^doj>01vAt~glGGj--~>;5#cg4vTAilLCj(^n@Q>>^j$Pj2*>75mGO-)Ay$9W_8C8hSEVbc zFD+E*H17qEh9+3|F=gg-?;YqGuTPv_KoG>L8p`N~xw-d?y$WzEG}u1QbRC*En4ppi zd+kB*SY_0-xGR=wJJ4@J2kP2G@ypQqfA}RJv%WJWWRdwQEar;82Qr@qAEh ztzevVu+Gr==)-tIWULY|rWS`VeL;o8=0c*sy}RVSl&J4pQes4f<$UUskr&*)Mt zgY7J9NWz?Q*EC$KUYUU-Z{dqh%0Lao+I<1k&)OVlHTHqra>MH_5h4pp5#URwI0GXi zB2~h(e(q@+-Y^=OqF5Wp_Ve8t>oR0_i%6jRLuw04OsQ2Iynw?O5Ac*x!s0y?NtesB zPxAOPoCuapmG#oy)+5Wn?pq=Bn+F#QWlPUQ=k>E55d{VCnkF062N28wdK1U6cQel& zfM~!GMfg!3Uulo98fDp)6em~LKC8tWP9pQp^^_aM#>ad%ETAScgbr*^JEv3ZA;SR@ z0MKjY2U*ZfefExspK2Vx4S?9At$0p6O2zoV?o~cLOx*2<`f&Y?nUR&m+SBq>!`chh z1F3ZaleqlZ?<8V&yIaGPUOvUNhp~ad(e_Z0@AbOdRC-L?GTEPH)VFOu__R%yhzULs z#dX3OzDzs$8a4u(MC2q#Of=ZB_(J!F$$giNhh)*ScnrAJH z8!BkNMvC53)O+j-Fw)hqaW95)+S64G8-rM}`QCjK_448gfWa6c1m@3@$+d$Mx7UMWm0envt8~-T8m@GdnU)FGu={O2rKD6^s$1}b z?wsINteuh>D059C&r;O`TM*Mhj}EGfD}w2Kkxj!PI?vc;=@*4>7!;rtcH$)rRX3U# zCPodQK~HwJ`M@JwsLG{e&F7`_Nuhj3mrm2+M3RtnG<8xm0QKi;BF~1`PoRkqF7g7j zVXar7-cvx=TZ1Q-v2L*zH*YZ2y$zC|v10qPN|@11pffST(oU zg=;5fqxLpLBil1K*)pySIT91oM%tb$Nc!v*g}KJo&KQoOq)ZaO&_P_ptSTfe0=Lk`jJ^$q(7`dJvdXh705sGC8s;KYXli$AM%Y76 zF)eHwhCM&?Js-NK0$>P{Il*VIE7rzp&pISvJ&%jj+M`jXh#lGci8FV2_seIP=0HZg z_uAe|7w&UNXcG0Aw^uk4yF5~Vg&r0nVV_W+#Ktn3mhqyi}b6lZX`)|Xn7-mEyFcnt0ja$hzjm2Jf`AY zfQm~gK49htfdraaBl&ZXCncY0GjRgXjKh8L!ie4$skaVQPi8$Qn2knFmDW>0%TFR5 zK8eJ>X-exZJ7z2%+PyoreV!AS(dOQK+ytOJDkpYjii^*->s-`?c}iEHJ@GsqBV@dtbI=*@)P%){4VTt&x!Rhm za_AkLE)=UPCBk(gM^a1ckl{`>Y==*7yS8}Vv*dpJvWBSZ36_h~&z+q}mp@B|W?D1SX|PoFdYdTUZIAO+RSqsY3qM}g)-Kg14So5TwqF|@FIv4%GDAQ6WV)!~oK4O} zq~7g@C1*ths^N)JU-OcMw_*E;pHy(k*{}vW#qfFe zyeig*ST5JZ&tu0NhOB$PlSEI4JMVfEF8?@O~R%ERNEWMV#eI_!tj zKgWN3N=KX6EPs-t^@d_-vQ+SK>M^j>!Gz3_ZfhPaA8m#&IvKvtNdf*WS1s(Sp|n^> zSKJ%Y9*>cjd#6C@SP%kGwRC$TQs^yDC?&I$S&FO)Yg-M!n^^>-O$FQCv@n=3R zAPW$!JQ?v0AMib}5GUZ?DqXhm=y)lceF_}OWT*Y6sx2uQY{E2?V;|cl!@j=k!jT4x@w!Ej zGxLeHMzHe@20-B&)m%Bt;0+TNTcv}%C@{|#o8Tzq8X4%FVkaeU$8g^bXG?<`#V<;o zS{`mn7s_BhBspPql3;IQ@!h7HX&LN(@MxCvfVETPlT!MOLVYeug|*}1L8CU4c|5yC zPEVich7pra^_2AS6?tSQ;Hpo`NOOwFsTd>}M;yNIb ztb&|FaFs?_H7bt?O6cv&vc6ouiVQdnhv(1>O%yk%CJ&;<+*#h_F)BUiTgVIE`uR@% zRar1SW#d-$@3VRpk`|N2Qv@JuAB0Q*(ZL+6D z;mTWf2)s3^`1(;`I!I~0cEU#tqAx+jstth_YIuj(Fi7a^v5dYUgk8$K7MI!pzI?bC z>Md|1BdivrbCw{>`KS+URrD@s*0_MR&kMuD8@l+3SVJQqV^U?5^a?NFrZcSk&4KrDm`>Tw<$m9V$oM#*r0XlGS805btehR znZ-{chTy%b1984AAM9Nrh!^Q&x5&^k+x)JU!Q@)yCU&yxpEru0Y|fJy=S6;c6aiV zSXm;ku1Nz$eKY`%jpwaCurf+Eb{wp|>$8jSo=ovW zwqo&0MG%EOdm`qNQF~LslAyW)2JeERCe)+%pqFb>vhO{I>Mb9LK`02%aRHbp1;e@K z#FwXSCWzy>oaz2vxHi|O-qW~PAdJ^RuHGXjs831M!tdbG3we!?U(M~rWfun&*zlu` zpkQ4%_qu^~e+e_C76bCEd$yJRkxM>#6oV+)HpG&KMvs7SaGFIQo*d-!_4i~d#aFwi zee)N!AjAz()pz^Qhp&gIHS0pMuGlYLuZU84T@USMTp0yC{G?VsBU5qQmXq`5wDLOo zE5SL*<(r3@?HS5dP>Vg_nc`~W69}yuM7YNEm=*NtsmPxpgQUOpX_y5meHh#PqBG(> z2Miv-4ib{%E1upf@VwR`jb}AgH!c`_!X=;(t@t27S~yi*OMHcsF;c8Ti5Yh`9AD(| zEF*e4#^f7Q15J4J>MafhLctDcp5mauR@YMrnMbM#HFhdk`D~!=(4v!Eo&eYctv`%; zeseYUUjJS`bTx_7!<-$qhzM=U(H&SGdwtz%_G0)s6lJ9O%6Z=Tcc0bI@RZ>^@=kyq zc)cwm?(I~q(+2pvM}&_vm}X}BS)vt`iN3UB%ZLGU-H2!U$cN(3A{)cfs4ffnQ6nW> zKXbb=KpRU%d+=iOafw-=#-2T+nyQJ1)8%w+oY_y(GhWA04L`F}yy3FY14=9>eM$IQ zZ_{2G2o{mH5kbVZxpO|HaxTrAc>qDr%ahnnL2f0%Z*9DuFySNIs#L2nNGO1rx_FgY zb}TV6xSI%a%%9HnZgYcy!$5wa=deORzLXIO5c`+r|PIZNQehI(C~-7{2o> zPwE(VQOmgsd%FaZQD^1Pe-1yrNudC4@O*W3o-L!uI|jLK#|7SiN)EQTa`)l7}hJ+PO7Fk9Zn{{+?tAz z42zdOMkul)f{EwW4s{9=_4wNK1wf%EHob>u&&?k9`CCyr#q$~3UM=nJc<;dr49mfh+7(V_TBbhiAb`4sZBr?Obc1-kZ)> zV)S66BR(ni&uBG;cnVQjX$76iFGve#grmJHC+UUSSkAl&H$AhaacH4nr#J~q@_eLJKB5`87A#jLO9#V#0H&4eS&;2XajhpC!=omXt#3RiGT>2USr zVR>ha#PmKfW6u~KKYf_z%{MxUO4F#4EdB79uw{~!f zJK*$Mq+bcC$n)D8%^Ydjom1Xh3w|EWQGP=)2=8|vcJROi*F1Is5>U5@!=Q)Q>e2lc zCQ{<~9!?cd^5era`6fBOL)O;3!}NFUg|hDnrMw!T(O8C8c1((zITIjk!G@r@Z^>t4 zJhOlXqnej)7Doj|Vkz_q@0-eaY>@b-s%UWD5)d)aZom>a6Yll6kmq>p(`o0}j5$T$ zbdHx=cMQH}q?HSeQ9Z9#Xi`ahY42@lCLz7|DDK6cbUoLxJC@GI$}ZawLyY&TyC{pF z0nDSpE%uTT){1BRJfHZ^^0e0Iwmd5==v*lht7T0?dW)dYXmIy4OPkFc@GF}eEeguy zg2ol0dsaB!#9$7Oy2Yz_<{3f7?wc=~AAH6w$xhJ(PGs{}(@Y){tnVzA(xs8ev|d!u z6y#*SBhV2bKSDk=Zx)0_#Ea?I*mz!=U1+HfIg`i~tOcc&(wH5sQr48Z)t;{{jJi>W zzcJ#DDlSCZ@=!(>21tjxRO#6lG6wmy-*a&Vx$fEl*QR>Xd!anc6mM$7KnppK=&-C` zk0b#0ZIj?tqOTFPF7_)#)j+Rzde1Yw^c6SQwQK5MVFS-0%VOT@Ln$FR?B{RPq<-IL zc}U&I)e;>ZtkapBW*@w1&S<~~w==<8YdIGLMdv*EzKQnFTrHUc`}AotwM$=T8z0cM zFu-9rT~^T%S}ZvO?|bI*AYRY4%VUI$6iW%nL9F?! zP6?Lj@Cj3vz@h+N`TP}d#=mo<~%IwowZItDQyP=jxvL&1#? zMK4E+hy6j%^>ox~o?uLoQj*;R56vR!=D5)CH!7fr4I|0mFjAaYhpt)kC`84*xWs$n zc^C|Zn<*&#q>+2dOJ1{>npcQhmxN}5)7hkUyEasza+Z&7&z4WsZ( zAVa%m<*Gw?V#TzFQ1d!~iGLb+9<)4rLJmwzN>P4Qu>2m#*^%HpT;mc|tK|mkE^6!$ z{v?||!`NX9d7l}F+cU6v<2h2{XKjWWvruB_K1a+&)1Fd{J1J9-0%zjXS1X6DeC)KN z0p2UFvscwTHfZ6C>;_RVCTlIh!`(fNMbL)!>a7Olj1y!pDb17a%Ox;dH@8rJhU%b@ zsI=Yb&EA;qEKs9dB^=1_4B+PF%t%Nqi7?w_f>yh-_+@qN&6QNUhdGZwZt%=$?RVO& zr*bH|F4&Q9fwnJMtt2OS+@2#P&T3i(_Xy{N5z{ZaqiWC6gacV#vU_G)C$LN_4HIKI zKwy;sOhB{0+4D19q4A9)IQXQSKVw-;9H(uMU_Cq)qZ=4-$7SGvxiW_coLrmYdZrl2 z&(K#d+#F%$kz&kcS_w#-ma#zVV;Zl+zO6X~jS5JXgMrsIhYSUCZEkWe-zxQ#uaIQU zSg$`4f_zTd=m+s0jX8tdx}?43SX0R7Y|m+j?y=1v7i}Xv%Ik~Sp5}G46}Wo{nuCx+ zLJWf#1WYd-A>Jh8Y?eOL%tuGi{`_%YV~flCvltet8MX&Any40(OXGTo`moB-`X}Lq z;7=^Ih8b%gciiGq0meJhL^$=mYFThUglkoQ)(9pu&jhT*M)Tmt-l%a+zW`TWZbC$F7m5u z<}w5BiBLjGL}LGG>52&9>~krFPv_ohb4|77Gpl7SCGxEa1QI~Xd)=`0AigR0Ps&aA zSO|upET2b|H;gPx?2{Js$QcCK$F+|lfv$K~?%w$gti^;XXLlO)P;@+TDhvur5o;-A z6bc(uzbbhfOWT9&5KSf58{s>xVjxczU&PefmA!e^W5?peMMwow$0upgnf!>}&8WdJ z%XJ~>$pkgW(|d0?uPc}KVYbK{Up0wirZTPdNML%ING;E4aFcgEX6FU#@p6O1V?E)x zM7FipI?Nt5C;0^I^|NX#f`WMdz*2QwWa)m9{tk|zJ)j`#!3#wc7h_?+jie%e6)zzI zk91@c-pzEhsC<$x-=S@eQ0VgAW3hI7C=@ehYtBJ3Jf<5`c}XRYlA8H=a1d=!qVE}> z6C<$b?Y<7kSOHms^P}eyD$44W5bStKPqwsqO!*js589)`XjMyiBp&F*0p=#yd2uO9 zXTRMyASaL31}5vtsC9P_r-F9Z7UL#f8h})Sq3J42mW}zTBkY0eJv#7}kb`YPW1|WW zgKlL)F`b}Z_Os@&e882HD9?vLnjdFF%yzmm2^%+;>BKPs`EB|Zlc4;f-Q`L26_AHS z^o&|ReGi6ETkjrEk%~A(-3J zPs^+7AeD{0_cDh-NQoP2Bp96ok@C4RUvU$_Td)`HmJf?Gy`IMt;TXJon6F6VDcxX1 z-S#|TdnS4!8Hl<;5S$(H1aq$_FK(Dd$4;)=&QczXKv+ZQR&#M0p*)-g4W*7yX~^)QJHD2No9O31|6p)oY!xcrI z83J$&IcTxBTFJK$Afhi3b>%SW(o-klRZiDi8X1^nyy@ov9@tOJF(I?91FS?x8Lv}% zy{KoEU=Rn*Y$q-i_)l#XZ>Gh>uSYJ&ynoK;I?4}&z$#+i6y}VDj0>etW+Rq)x4hJbT0I`F>9%xIb4ncWvq$z1qyc$m#tMs)g z%kD7h2{QV|_$+c8BxNPM#OJIoaxD8CguKjjAaOm3OP;ltk0uO6(Zk`|U^7(c&bMm8 z1CW9;O%c>(*YchtpoTeiur$i-3ylLlfS5ao!b zo8wmTWU&(NbiH17z1B&4UTen(&S4xJ@6IlLInK`3Uotnls+%-mbs;HtJdgh?L5@)Y#*O7 z&&x->%G1P{Zpp||Qa!PwC6lop&QALaUQ;0%96%oC-kMm#l&X*^Qq(X_Z?Nloh$pAj zdbUtv*=gQQ7La;T9`54V(H4a&cl1_O&4h6|PK;`09JiSC2|aW~lw&dn6057o-PSy$ zJn|K{&Ia|wq!2EN9Cf(Y^rUEcoAo5(!LTh3Pq8oZPEnLJ+=F*|=XMU)UTaAtcSKhe z?WKid%+O-~VCYqw6lggN!{n%g%6lUSdD_oh)`_!uq5StAo(rnU@o_VysuyI*nAVCR zHLx3qUcp)%HJu$czs>q-s^W6{21~~dN817S<^1)T}JJ$VwrX(z3-2IVzFjMb>YbWcd8ut>b84B|;~7Qi^Vof)SlgM_%j617gMkrwSD zn?4>h>`iToGXvYu8yhBJk7*;ZHW!q7#&GB6=IKL>+E|T2PfNS8URXlVgZ6@~dxo;q z`Ft<#$(ttN4pmVVE+YeHK|bFr*L~4~TxH_L1wyxkhYeE2+-yiO+UBrVMjEx(kt8rl zRH+*T`@m0+8WxP>Qv~!G0>J{b-6*VFE$g0`ZX9>pIUP}x!(Cp z!^0LLUuen+LpDA=HBx%ln?9IvE@*H$43|(fB*4;K4^z=(o?3+0AfcQdyXp!1vx`3U zJzlyhdDRhbmKdmF^Ttju0#S`>8T6Uuqzl*ypA{)BbQdZ%kae60MX=AM%lke4TrVQFNu zf@CPmW}Iw7rU4vpnX^>OQ^X3Q(8mBB!h35ka9PcodTYUnHbi?+A9Dey30ABAgqlP+RJYwCbI%?$)CLBdH4DZVat7ZPUy+gv5ZtK~#_6 z%8a`XO;iy=HRC5<+eQV;(Q(vB$mX|MZ%y-OEI)?$0R1%f*BI+3& zgC}X}vb>pF`4)n(e)@rjMB2W}T(=kGj?DVN5aTTchZ!Bglr^Imn1@@7SX1gq)~b&X z>>f|QKn+@4!s>B{oUK!?dW2j89(D;JB)apkL<7$Jgj}S30@d@Cs$MTmQa#bJw6#Xd zlA|l!4JeD%a6{TqHk5F_0n>-MuinPAF#%sT<|1C=d0RZZZl}$nXE{@%OUnM9ZHz*! zB9uZexT;m)3FQ!)uC>6M*fK&i*Vrxf02MC_s@e)nW)d&HGJ zB%k20N3up{MfB~#NXK0#uCDT#a!KR6ihAaZ+`ithx5e2Z0DW>3Y=LDStG3xlH^9Cm z&$@l#I;JG>m=pH}SnJCmnn~jAa56?H28D2umoLo^1W0L0N}d!-EZ*UC>Xz{E>>`vA5J*JJ&&_R~4AeQC?VSUSnO=Ef(K!@XuPv_!=G^DoJSY7Ozt;2=6 z)?j*CNFM3c zQCw@Q#KWE`2)MHzV#pR!&w2`a-IcMk14$(V_;#WB9Td4^Hn1+eMZsE+-O`>&OAE;B zz9W8PU5FL2b>cnH;&B8u+3(_D$yHHuy>lp%7RrYThFMlbgB zi$zyJ>I+Sr=P$-&PO6+y*zLxAV^Mfb&ns+joW#|uiUN3yP6)+zND)Hns`nm9 zETApXhIZ{k*N6dpt($-y2f$tk6yg4+wizR;Kyo_XhDf3?6GkJV+zzZ9A(0mt-h&yj ze)M3%hpmkFA>G2|GhiebYiPAF+9BqZ*Ha}KyD{*D=zyp6)2ZQ?_r8f7aUI4bsfHBuLCfi3Q!zfm_p)R?KeOW&xanP@k?HzLlPOI2?@};0DcMV)6cHRuNgzPX-W?_~|evg*+ z86|JVG9Ghsy}Yck6Bq299uM{kHKtvsSk0dCNGouqgoW{Tl4lvm?knrfbdf@#B9KK|$>FCc2*nyz zc580nJ;9CDJ}5-0!slDj57vtw*{*Mjt-{EReu~0BL#07JsH?poGE2-Hqtmh&Kr;;M zw>6JR)%&(V1|qV%R1lO(<_<+0ii}y+E#nobTJ+7tToH~0`AFsC$;)F2+A zmE1F?NmSeA3l3762am6#D}xxgtYkxT6Dem>pG(ZWa^2X45?>AoTrG632c8{ok>aHX zB0bq<#Z_1Z+&l5XVN;G{6RvHCt$KU2B#!o2!BmN_RUXQ%;9vncu<9VS$QxICeB4|r zM*9F*F%^sy8Q;Uo7o5&l8+nrfXL*=wXv980XANh~sx#X&UsRg)E7eyKp(6<#7-bK) zUh)C0RhW~C#(l4&gFa>PSajcudv&hwomt_#H)>s46OAXiET)7b<@jtxsZ?53Tsn{T z1=e$+NWkPbL^_W(Bv9B<*kMFHmZ4Z!tS4I+eE6tf-Io9qV3ca&Wb>Z;oNK;kut{V9 zicb5ULjZ)U_iJ+K$77=}h14$%1MGzYxD}^nwX?a?xzpcY`3XxlwK=*iZG!E2 z`R^GaJZIc8KfD6(*VMwyz5y924t$+64C;GhJX?`535hnOq9 z5x^ki7g;ab;(iXH{=%Rw7+i+HyOvl~2g5k@^F&4o^0+4WpnWdNI#$-fP`ufb?LrH@(dOb%5vwZt( zCc#RvV~>(W@SdcIKUbjVmo=-Vi#;Z%ERxBao3&hm(~dlGMVt8!4kym}jdf16wT9&S zE2dzVYN$OAsW{xZ_Y!zsJ%n!Jv`8(beaBBz)@NL>$;BdMrcR2+&~nS4F~Z_$KF#JK zO}nV~!X-~dhsru0=z7NbJ)5q#r{&z4eUW>mh+fxsw(r%R2HVz5d!Vaxl-Wh<9 zhcO@=FV?*~8XgpG_1a^T9O#8;=y@Ybt#tmv=35&6nJ-eb&KUZgbBLRuMDZA0=Z7Jhsv^CFuWYy zimK2;=jth~G>*z+>WmT1 zfOW+8xCgh(4`$J#qw9I)JH2gIXw@U3)77`rq4jefxd4Sc-na9NQL|5QrGk*Sr=OG6 zyxfaGai1Os^NQVk@F@=b449KkGs! zBLSS}Z^XBy5{&^zw&4)E2Lz(4_=fK;&}c9?56+xO=mwd+jozCF3;T$b$fSq{uwOHK z9L9`B&4u{Zk}qSvyQPvtPd8`mD}#^|Pq&Us!YQLl(qN0CX<~oHlOfy|B&K*fOiu~2 zHy_Ii)uWeY#HUFt#`aJw`Smynv0#%V7BM+#?=9Bw8r(HXGOjg9IAM$(z+U<_PR{@l8sF$)Gi?N3jSQ7=-3>T1NDCq4)&{_w=2jUTyE ziVD;$^-vAo(2Zlbek5r9M~C-FzHjIW8P8UU)_%0phAaq0*@XNHs3!P-}Cao~vw z`F;+skL*vbFtUUaumVrgp8%nL*>P;bg zwl}!%2+DY$n|N)Yw0q*+3PltYfH+$|EjogXE^b|Y8OtsDlC0sdH3vh1je&Jr>K4<6SyrB2TYFT$G%l~EssFJ9g-R#x?0NxTkp_g2CHiwUrs zdh9zMLNPj_gmfd4wFDe7wKx2To(tGx4aT0$d7)dnFCADsyUq34z~f&MDOrUCjP-|a zoYifGeUsGkyfpV4%;tNiBjO)8ah^=mq4|jq0a#rP@9((I*KX;9>={=oZqkk(5rM`a5EP46jJUSQ)ZAgO_)u z=!<0FYqq*_{E#ChA0p!ojxuYLQTjC-I2=4|Lw;Dhnk52VF9}j-O4Ao8;;8Ud8$-)0 zFKq1RRxe&n_YJ48uw>B@qXg7ZKTx`%9Pta#q=EUFL&CKtHwyWxgDhAv_Ju)KGjsS+ zNs6U*)q_+b30l&Sxo?s9r%3c2@5^3kf9Ruf+f*$>$-pyD9QYaQa>1NoKzOYsfzIX$ zjaE7_YUeS-o(r)Fy7w#VQQTYHK1sMZ*vdE3TSji4Mbvz-C8;D#oUM8Wiucm-vYp>ETxbaqJ_LUzw-hjs zR}(~XdH3m++9Nv0m+Jj$dA;N3*_~e7wI^(|hpdN2ueF_RXUe;!-Ht3q0wYDxBg&*O zdH5+4`HZVWT{OlF%oiKTA&lhU?A-khI>X+&ZL2?k5!%q=OAUY7;uAR#>@zDF#sEH! z-Y*nvVwT9?nxY?;=Z>?{)d=m#6S2HU1eXmlm;N3DqDEBM*yHn~!rWtF+o~ti9g93y zkNuJFVnDvVDel~|<6uU#I_0csTd~@DXxO%xLkd|SZVuXSkgb$aOCYPGdtvT4J13u2 zm20h;t)f+}nBP6Y@b{)zVIf0X4UhuXv?^ps56%$yG#t`-y%A*P{pz z5k;PP__`5sPI?(KLaOY~rl4TiQVJ&?-3FjxzHBw@{wEJU>P%E=n;of#tm#Hds&ZY!oMP48yDB%2xwp zx`sa4=Z|@qQ)0;NygP{attA=4!xGYEkG+C@P@3q)nWy6Gw1aJ~j5oyfnzzWBFSlJ? zen}-g!&i$FK(321ZdbhJi4DBc7>N^hzUP{^UJu%uI2|x@x~~QE^Lld5o+NMWv8NbWa^>5SK;zm!q*~N%8nAH8%!qg~a~|6hz|3h@{T9PLowCl_I*%#vXHM}rDt?M& zn-xnAA=B>#dShbd=E8Hu#u>o(5_iGQi5vY>EdCj0nes*^ft)@D z2DL4$-VC0T$$oW`v;bv}A?M(8^sY^pw99H4r&$jCy`CKuwW_3W@xJS@D+)kh#sVBo zzG9T<#tP#hk;(AK%P%1xD0bFV?64g@tjj8Hf?=}9_kgq{@^v@6Br)JQHxwiW6dVm; zcKN|PM8riny0`d(EyzS7QfL}Hisfd6_!ab(m5%4uh;k=hs&GpK;oRs+5Ud`0UEb7o z9b^HJBQx&^RAfZRi^lfzRvuH*e$GT27C3TeMDgH7%?7UV{cJ;P>6l%6EMrBl3{+m! z!>n;q^6tCHzK2KcIYVxb)jb#RTP~lmHWww1FPRksfO56E*Sl)QhJ0lwMp5`lNWYGI z+z%+Dit)G@u=dk>DH$2!6R`}uO<7zS#znRgD( zlZq)Go86ZN5?LF8PKGa>D>~-Au@ikPq4SP^=9l!Ud5(mS2$7IXxz2ar=tAb?t*nse zCSGAJqC4omxNpfAyidtIe%p+N@aLqr+c2Xw@z&w2GNuz_4@}Os08NncR7dkwpABjy zI7XrerLxgQu~fHpI*ROKtUvN`_W>G_dx(P!qP9;%PuZ>afb#p0W zqF=rD;!^VxHF=7vA0h3XaI{(<`cnrd6&CSmL&PzzyWYoGuOGaiHRTDi5QWTS-=b-J zNl0VF7x5BrRrK!7;1j{#x7JEnlqm`?5dg5r&C|n@Ji#HPnPd@?bm$7xq;B*z2{1&J zNWOQ(RoO5isEMs^!}V~FuIi#&be{3gLHdD5q2ruvryRb?LJ-T$-OfssBY>Mpn0>)w zqZoRb^YxMuqe+iV^#Kh+@8$4qazcd84jt=s!c*xBCs0*BrsPR zxY;!_qPh4g3{<@q?X|}o-R9$5p+m+;%F*ucMk!gH8=5WX;OJ!`qgNN%65cbm%Tj8y zP4?DYUhW^wvwOS#e)G!v5Kwwoamom!R`Ul=SR)Q}Zr7fHQid?R zPGArMpRytNluc^Bdp9kSI7G~jxsvz7$6gr;ZJ)%l$G$*@w#{87U8@NX+q($@w0qsN zss-=CQ|j5dVWDvpUd`7&mf%QdfZfJcg62&kdSHl109#5n)fCa07BrXQ#}X_QammSo zu~ERNI(LZ@2z-|;>tc4+kgl!u^cH!_mwG0quhOMvrh6eReNp5b&ydD9ZuKb&4-Zj0 zVhzVR!(%QYN{)VooHq6Qa>}JTp6HxSSG|MKnB)MRN~i ze)KJz&mcT;nfQ8Zqij|LOB+n(K_qjqixME0tS>Asq(1aH7gVt*xlj?!Y(>x-7sxH-s_2~06%_!R6_NtMdx|9 zr`SZd-$5Gr`ST+R;Ttl zKBdE-k(kCG*<&7P#iI%BTZcZ}U?P>oKvrok#mwZ<=?0F|O3D#RP48y7MmPgmEi(`V z3A4)=+Smr3WR^&e;T>K-2*kDbaIj>}Dg-mf3h+jzu-I%+r9i6A!{O0#s6yv?k;SbL z#bElBYePirsI2e+c2~c8jKo!m0yrRP3qnWG5R3w}B&=f!fUiL;!g zvvALBd|VX*9Te8RqGF>{^AQ*@ms>j0)QP+|9Q)h}5YDNz7eLO}@AQ_N9kiOtxT&1; z%HZ)6rC@j$=gQ)Sv~juI$v=IEZLLo;lCdD1ik`(|Dsy%fvxfz{7CDnxq`&vfEY9$-SWr7ew zSYWPIB5dB{CTxdz3(2=P6pGaqFL!_`FqaX!Cr!q)_f^|?tPQUWsz6Q3sCsz`)U~gI zFZ#PToRL&H{qE$z78zxO!|JyhYjB8!^@)z^d;KBM_H%!vJFe!Is1(zn4FSsJae|; z`;?D-#^m-5)2yfL0l{v)Tt06Fp_v#~G+=@H2?Q4og#|)ZKgSi_O*jg@aJHE10Eaw{ zH7??a!N$k6>yV2~j!L~)X{YIIPc4cdvxgnF-YT+FM?|>68zlqG%fNS$WFS2SD(-Ru z1Fp?mV!{T{?1t!7_~>|b5;xrEiZR<{jMam2pA2$flD#52=iUONi|VX~B2;y$8}m2; z;xGhyg>Ie%@*WA%#ios0SUvzubQCt>Y?>1YzLk4#IAAtZeA-9uXvbha>dt3RIllkyFNuiyBQvv$rCznXC>`^3M6EPB7#*0cL!0JXP8YZJz04a6ia13pdvz2Z-^0>P99?EG% zm))v~SzzIN{1Av=E-3Dt60^ioy=7{QI`=2=m}USwQ?^hOr`h~Cuv3=%tsILQdCklV zlPPNtnDnal*KK@9?{U0=c^>k@+*I}@KuPc!9Cd<|8Ye04xKH&SBAJno_jpuOOV|bi z^^O9QzO8*~mtwtK^Wu4_tBt*kIceC|6Nav%UBzBK&}u(&eRC(`Y^KFH=WTag zijO=+>#T+i-Rq?wan&(92j@NANtfR%K~3>@aW8xP+81TAhe;{$HW;x9!i`8;u7}-8_AWS|6L&DZjHb34jI; z*8;PGIxl;WPVZSMR>bWJo3?DJI&8->xF6IEw5U5ja5LoemH3dN64pe?v z4sDNH(}l|FT`4qI5*}Bhl(W-gOZ6wuEc&>|E-s+EeUE&g3{+SO_aXR}C|T8$F^n#F z>KwVth@F@CjHbN2j=N zGFPSFA;R!lCxlA24ZY>pF#RfN^bYEzYJ-c#xX~V!(1`ewS3PpL1lX7Qb zWr^m?yWDv%l;$9Ge57#8pX@QBd+{P1<~d>_ABxtNCAnv=1aA#K!%}*gnAVzefJ+2W zJVxW5oI8vF?M{sQaIe`kKo3eBrak1q;U>i%{*~~vo#l-x9zV`?eyxNH_OdmAla^PR z-myyYW171(rh8`DNZ+%Vf5+*}QZmtDuvCq~r&$^96JW0;QKER(1qIVF3eh_8P9^LV zMc3hG$UB25soH2t^PhD{AA?kz%cy((%z0VED;Tqw50nz2ot=%{ z&-TP6JlUV#i+K_1RO;L>L8%_0#Jjv|Wao~@mCiMLg0k0#Fh7I!^tNiW44`RYO#_gT z4?Sven@Ql}tV;!ZLOguA_ne^iQ%La{te=$=Y9?Hjj9RE3ty7~lSSF1!*@j+^^YW}Q zvw9rwT133Wx+mb&Z;WKe=OKY~N%fpGKRmO`E}VRtQc={^FE;1QwR+s~*f2vb(dLX# zK?Nf>;m%?t5g%EF@7f`!G=Q=#xjf{jfgs@=NO+r(wbX;vRdr--uk%>V7o@JRvqON{As`U_~Inx>l7kdH^ZU z5*Oey%5r@CoxkFjdx$P5Yj5@tE6}|L7cXogk(vRSw#h-6qb4VNl5V`rf3~)oGsddo zfu$_i;t3-pPD@B|S;g<#DM3@=+}pWb|DDHV^RichQhXgWw#mesVeWp#^ZDB)Z)iFbwvJn%5=J<}kI zS3H-bp@=zQXH*uVK=p14!;f!x>tQ_<&_|-nPu9m9 zkmzfwMY(0ToR>Z6VewwlU5mqAkYRL4A7wt87Jq85OERj( zR4PViPRzps2jzSwNHUS?F0XnOoUC3zmCf-?>QUn3_PWrl4&ZSfiL}6_QF46gQ4S7C z4ho{)M=u?67183>-@;uE0K21km!_f(+uq3Q1`LCI`EW3Oc&7L1PF21v>wp|l;qYP8 zdyMGO>y6F4$aI^l={;zv*vbG%zXVm`uW7XOrpd)#=7``mYN?+~opwKmL}?_?6-5=r zd1{28f}+m=4rnxIOytxt&s{Z|#g|_YDRgb%AA!}le4E;@U>hmw$uKGc+_>v+ z87Lt(9f;uNZ67=cTeX4n^^74EMAC+o@MHtWeKe?Ekn3p}f-Uq&V&4+TTVW})P>Y(J z71di218{LgUnQ-VaCsh5-5Y=?@bbli+=wFC=JMcqpyic3-_FUJL?A%K+YZLp5BY^B zD-^gskQYhRMcl@iz4n-d(upi#NImAY0-%Db`CJ9zFG&TaR9w?^%jHgr4Xx$F4WenL z5u@Ci(~;NZ&AE@Btc%L0r1&$6vzt`VgFaqJFNs!hd2pm@fPLuxLYJD*p1Bv2-cUTC z(KLC&m7px-Z@``99)Ms{hB{9Nb;zH)Z4Cti+)ebT2 zyLlP6`0!RiSno5%o6TC3Svtm;t30$vJzMM{5^e6tm}~75Raa+Qgc(aWL$qR@(xSEHu=Uc&6Jufcssn?6J*I?6*ku_=@G6f6b_U@c#Cd)(k zy{v&XL@b(%6(7@a$q7f$Vx8i~zEsb5! zaK6Ec6aM^#=!^{JgH!aESId(fXA0zlo!fnN8W_>qOZ6IplJ5UiTT3|Ja`F^Bbx?C^DL5-U|M?2H?ugo0MRhY)_gE# z&S2sZTX>$Cpl!7X2VD=~wE~RKQ>|D_OP4z4i*9)s8#Qik=0+hLQD7#|$8Ib0vAqK~ zN>TD*bO2z)r4tolm7F(!ZVf99Zw@VqXl-`eq9qFvbzF=tum^OpyRCPGjrH2qZeDC} zt=2g>t>-UU=>YS%OztqNj+~9`JK*90DHSu{-2{6DtN}x_1pzY051>H1E?aY#jT{7vSMCt%UF>)bluyQE;C5ycDemOlnS+v7?W4+s>?K1|S-^u< z{KPZHoDdv9PpWLzq@S!Gx0xeRjcthZgbUst-+}k&P=TMXm2E&$7VcO+EF3^` zA!<6WJJGaTwa|D(z0Q#_Pr(oPm#_f0s*E4PZe^=Vb3Fj%0l<4awJ~T!TTFZlZpveK zps4*REYZ(g^%iw@8i_1`D)X3Wc)){L0c%FziScD(l@VZ|_bqDSBB0>py2&IojB-mf z&wxO`)^vM-Sb+Wr^ZF@q7OM z9a*{;gK0U&3kSu+B?kf7r$mKr-V(^XFa7y~ps)mOI<{WjFKPL3zUUI8tcZ>}AVyZL z0=!Pts6=DlGaBZ5P*v_uAxcl0Ri{~;#!y2uEZ<^?*gjl&v-_M9 zA5j3v1?LU*OB+{wgOFhva|w3V6HhOnkTNLG48@dREWas*$z)Q02Vk^G8IN>(>r#m0 zO6@2by(^RQbm!GQ`jdkbXQKt6zT1{3meG~grq(IJK@+dD>^(n$Eq)sroDM+t40|Pv z^&q0%bv7~Ub>$n6lWWVRBkUfsQ^f6jN?J7F(?smFL5+Jwr+L$U(>#Pm3hxA1`e`|a z%}?LDDoMz~& z5I#}yT|J4Qq-zVfcM3kyQ|~1Nj#RvIU&qUSHz)n#Jv!tH#1?Var=b)gh#s4FO3(c; zpGDaeVxlN4hR<|&p8!fg@FTgi!!92jq^AR6Zu-D&w6aMINDBh?a=o|Zh)R#JC9)T@ zja^U5ovl+7sr2eZ_|1SQ?16NeBfQ~?$1_C)x4G?+DXT#Va88tz6-l=WEHEZ(wWxO_ zq|^G?jRa@_@6n-q)()g@q@LWsV6TmsNXK2O7UV$@)HvvYFDQy?z&K_*qM3K{WK+|N z3I!lQyWZdxu;mKj?28C}<WpnY)$EMDYa|EdLS}v;mB`xkMxGOfD;}qOeRaW ze|wjI#`y6+351@QuF7@-iX4X=^kt9pv1SA!?ue<+(IDy&5-t;qRlbwAvq5&~aTGS3 zVVCnZ5>D#j_;}3NEdh#JL{nL5U37?5!l)^qG*=5!*t4nQdc#m4?{d#Sva$T_fP(cq{Ajz|J~*4oDMN^4z-|({su6?giW-ps~iRRMy$ z#Tu;NxOJL0XwVyA;v93gecA!*{RRQDCw7N$e+f(mr_v9_Up60Wadwbw zBWII8K(0`Ip^~MfQt{}imW*$I3+yw{b0VD!cs*#Qw)cWcm5JG8`t}9-Yx6Tki(|%D z7OTvr<=N_dl7ffAuf`|}sNf9%ok-XC`gN3S80eL zE#Bd5F8G^mak#L7RCAZPb$%6d*_aEa_NX_O)C8$h@N`b{iR3}cjb>fE>`eqtW`kyV z&n3;DUimxDwx)nrQgn4h20*=ngv?d8*lz_utZs1Mn__P3snE!XC4YtfP9X6Ws3%?v zKui>cPi+u!h*6r7Wj0XO`tfo-I-@B^*NY!2FPd8Sn*n!-QV(rpnjXFA zieVx&O;EcjaPLWiCHtYNC&yCJ9mve=oCzMzo+1tH8%LN-PUsGJf_jmU^HhOR*agi~ zC|2-1bMc{rw^z$pDReezRrt$B4;Xl?d*<*+Tb^yav;sfC?7Du*PO`c1P6#pp_2|m$ z1XXsBjP=@ZS@T62D?a1cOx|{Wpix*44q2e7ILlocsP#d`nY!-CMF`nG?CY`6+t(!8 zfyU_CM2Z@BBo^|vCLJ4AF5;Katf3~Y>(S)Y0NV+q9NBV~Op^FKH8`xz0F>8m9geJ( z-$J9$;4jzf2$3u<2KykK7t!C!LualE2wZYF67MT~kKGDnFkl~J7e-~Ok#Qxoc-96o z_@cizJy5LXmHFtH<>(TG)Dq}HaT|I{JSr|;uFLQgX_CaJx;~Z)Y(!mDb-;Nkug5ep z;uyhLb|pb3mzroetR_TRPQ0I|+663@apv{#IU(8ss;bzZ$svFg`lKE|9NmCx>?sy1 zhRc02{G8&g0G2Wd&Em5MN9B?$6fv{SXf*4k1C@l41W8;ai*Wb&4aXFpI5Wt`Ndw1( zi^j59nWRCMvklIXMtQyx)q7ACSYq}>Zn*hRbng1x}%}-BLXyHmiCJHWh zJP_oytY^1jPj_Bwc681vu8sqZxDgwDOYL(6P&7IW!_>unt7wo{IUysr9Z{!I^h)hj zqs^EDqN1z-&FYDkYhfA=-{a@tM(EjAHV_OH!L?+xFC{S4a}Pa{ltxt)VGs;<1G{~a zb@BXRYNVw)wK%M^#={|;fJn}3Jg87!?364FUZj_p!gJW-_6%0s@k-w0V!`->gZ7KT zg4g<_65(On_|y>rLn?75in13^L{dM1JJVwl0*gHNp<+9hUDd|?!zIawhuyQEK!uGQ zoW(wQXd*0HT$rMv1;odZWm$6MbB}<6wK|N0E4VsPx=>;hYb+rjzOGl6n9X_WComQV z9c_$nP2g;RE>pbj=K%>@^-rP#J7$9x3H{hcJfOo_68QqsI02a{3yd)zCZg=8*jPV( zP1Uz2Vy>1@`XM@pXGh28Vd7)Htk*rmp$_^?sFY+g-ZRECndeD1@NCrN+2NakyG)Tw zS&Fkf7*rgW&Fgmr6lG`~=$jS8@Z>QC)KnUZmpTwMRK5j^>X4FZxQ6#Kf+}9U?%^8M zfz2wJs;q!FN(*2@{gw+LaLl;+UgN9BW|O>k=kyA@=n}A)2KQ+P#470yO>Pj}Yn$3q zmTHrC*)={dYAgAO8~b5*T@UO+Bfixzwi5|!sKarIgEqBA2cTSEjwU6=yIBf?;epD7 z4Nzp)(7u(jWhw=@Cv%*c9Km#)HWyL~mu^T&WO$v&f!J#$h=sr8_B;V9iC(sd_&rRE z6GFDBK&K2ogeUXZJXQjEtoFeJ?{9B=-(vxfl00{oH^;DiZj$Od*T?VAQZ#)rOYLH$ z<+*04Q_N+9n3D%M6{QlQE%rV1dRzeuIqi_wxtI^w=LU_Euz*D; zPyibXT-Rc zEoui_A`r1kv{kNM#3lq7kczFE!|(9kl1CSlQ!a02D+=w<098P$zZ>eH%9S(~C!rMX z7i9%BxAJa^HUR9E_Ax@X>QBMZgZy&=I|kIopd4AWl?yI?e9QZ10&$O6gOlGRn?EPZ zPr=FOfIvG& z?4v@nM+F6Jwl=HfC$a$P`KF#d=v|!xXAp`R3`G;bY209mOs+nBwveX9SqA;WUn4Jb ztU72F%c^sp3mF8fflC~ZCtTaS;Oa`PLMl0xHCzMfl+ljoqq@Um3`IJ{A;s^Ru{G)C zfJY|ez%pnTc^zaQf}Ten+mnNBqY-|g-ktKehdKp1Uf~n9$0ToAyphowEWzriU^^ds z8U(9dUVEe%aRB+X-1d!d`Cf?cA?$*Jmz{J)5a)z}_%^5+K({?@Bum9z{wcZ47)YF` zC=IMvt`Apzp1h%n=GXf;r9@`LB*0M1^J$-bN=`pVg@7VY&BR+_4wUNhb==X;o<<0z zvOA||@BGPbxrUhn^cfUbr7v43KHTL8%h&6Vl060TY6BQBxu#nJkJct;h4+OBi6~Tn zw+B6r2uSKAwP+EJyE$bwvz%z`*>i}VjP>cMCzw^S(P(@5*dlA_6*|>~W9PL6>4QY) zQq*`1IPhAEH*+*zYR&5g-IGbbB(8T!sZS(YQk}zs0W5|DTCn;6mI^hsU!dV*F36l4 z2Vx{sQ7DHeK4S(RWrMS5Z;GzL)y)m5RG`oj37EJ2m?mu&!ct4HBGFZ zUhLbA!X_68wWBy0aASYY_0Xz9i&FHUJv)`DLNubGc+qo-C$OYBKPfr7sD^buX*%tN3do{2d~zBx-}7l>3-Oy##piMu)0Y+4V@APl$#p#;utjrZ~S8b3d`W@k!ywntSf7Lm2nCyU2Mn+`$D2cSRi zq3v^yg^N1|DG!;|0evczykMc8C_mx`!IU=ukU6u^pr5j{&+)+s^@%d)dr56x7(j1x z`^3d0i@3=!z?qxWO{U>s1nOySM)Tuw+O(1471%ZadD4n9xw)y&ND~f3!NhcWICLDT zfUi^pTOWd(iw+1B!fL(|F)ODG&nu7Kb&1z8jjvsLTn z%@CtA9gvqNtvKf*aquZT{~RQ=TwyqjB=OY?uQGgMuimhAn%jeC>Zh;ud7%jw3ugya zHZ>>tWC7S^ zR|OMLuhC&JiCHR8*cVm(;zA!;K)n^Y=q$LUnxSAB0NmAwk(DJ+%pC@%?g)0=#P2o1 ztx4<^Gd}Et^&oM(b#z;~YB6&yTQBfXqz=}(1|G7#se!I3+5y_c4yzH<`C zE?Y=}hiG+cXdJ&+!GfEamoK+Hdq@>@^l`LENvm$#l!J-IPOC?}Vt}&*`_6YkpVCV} zXUJpsND_3W_h!2UyatejM@qo6UcfNY%d2~&q(y7s@it17irfd1oJ7Cf z2D!p3K$CH!K`jgLt%irDh;H5HBBV{pZhV`~sgJ5SPFPR`^1=+7$@A=|?*%lCoG)oX z&1@P5=&J%srAJ5Il8=J5@ZF-FE7r5JMgMBJ1n@ar6t}Fs(g@}zVMfpv<$9e2#C}w| zYO=15%P-l(MNXc zEKU{$z&e*aVpp`;MYbz;K*WGE<*%TZr+@AVc?%-a))<8h6lUPVk zC)PWN42$-;Cd}vKDcn;<+HXppU4!l|UAVx`khQw-ObjofXln)5!ENUPD~ifya9Z zG$Hn?IvHK-;kW!g#|-B@eq_;I@)&Mw8!R0|U>NR|>OFr>nzw6D^Z*P~aIvaI#Gs_x zw)KJ`8m&%hZ^l|Hbwj<6(36T^jr0XsmOowgd{8xxCb6;1>CU&hM-)VNtsXBj@D_y)4{hV}6;ck7Z>z>>3hO`XO#rFH_Tl3V5c& zV7(5s?bO&Wsk-rrM4dL@JiXkL4IryVqh&Qi!h!99))PV{90hV9#I5@bQ(mA4)HXuB@Ej*2?0Q#Hc+8hfL5;PiTS@L#o%a zGQhM!Ssn+u`1@Y*&?v~e5EeCydy4rS1%V3yQrkv}O*@Ao5BOeD!6NXd0P%C+NZave zFS=W_3g;@t5M#(<9#VORtGkXP9H`~-i*?O6jt7~3{fVP`R7ZAl` zYTj60?}P%TMc~`3wMK3ilH@QQ)JMh^^63c z3qRi%j$Cgmc919mi#MO-$YKV?oZ?8s@tQ5(G>ew9JEy`%SH(3iK+`cz&C^f`cRmeh zHKS#gQ?zR4L&ee4@JB+sNUKx|0NFx}3mw%ewM0BVH}P5kULs&#+-Sq^(c`4A-W;E` zq?sRkay>56XOXa;FMy#XvN5jU4^0Kf&X=DOr1vR7y=9obp2TE|b;=T0rjirbB55~n z8DbDuNN36IT_t^)toiIw1W~{8;=BQvL^$m<;Uo@@;I{90lq0Jji4?o~^^+OLeYS;^_24M8jb%;-r!gnO zdavI&Yq`AMjclL*0M=tyyM^(WcgI$<%-~G~+DiTGF`Ga<1b4GGF1I3idJD3NY_)R@ znq;A54jXe?D!!t$f1qv_RWjiPM zS<_>kJEk_nmhYug%kUsu0(U0asP$pWlF1`wHR!n9GWp`%Wab zw6V}TKxY_Q#OEC}u+w3Pyj)h&!|+1MvZlN^X5Od=EbInG@C6kx%S-nYBEgoYtMBof zXdZj=-Vt8~uOtl}UZKd7dW)>qVa!rMf$?5@8AA@wGY>MpeD5lJ%#*db+4N=YW?PF! z<33InS}8MV7I^0d0kaDxiT&E8p*i{|vVd~cR=0^ijEEP9q!zr!cUS!4r^=85j5_!!qtl()6MLIbl@FfBn7*QO&YV^)d|of1Cxo6hl8v}wze9ZJ z8jvz`fb=w>9rAG-z#ksY$}xSD4@qheIsIPj67MkRWww|$UqR!Ns2Yx=U6b%jp_6(X zXS9#rESuhIQRz-62AhdJ(@81ow`B`1XtYf3U=1{Ycvr`4E^Iy))1-QuQma+4FN3ys zE4ThvF8t@8|Mfq`@sEG|*W~}g{{E?qfB)ZlWGkmh`ICKT1BhVbLi?JYOADqzW@fx= z#Ryr$s@-r-%4S1$M$(s4&#trv7sN*n;LAfll?(9mdb4ZC_QJU5Rq^!0WpL!D7XHHS zbXmKCg~)Mk!3OMF7&;@z_bhWn_hcT{I*+V8cKBL3ea>9nKlAsDqe4tK1?=5eHe|@W zByd7;SkW4Rsqx1_paQj)4vB^#W|Pd;H|M&7ZTdQs7NO?jOTW|k!{12_-|0QqtMHwt z`4Yq7!K8!5TI_p1nZ30Ea`pOP&UKH{Q1Fy)A*9X)bqmz&R>6$l(wBRE<~Tez`-$xY zRgJ={8G04&A>ijCUdS6NA=v@dp6}u0MG1~(HNLw6XSoViT@ECHNBVl*_7QgZ$LD@` z{KoB@`}x63&qwe0(Xb@LHZfER_7o}t$>?E|V0LOQ3*&)0HR?;e1|un~y>sv+fJR0U zOCpE(_~7r}KzPV6TkI#sIzv0)ji>LqSfWf`o`bO0u7r_!N7ll#y2`rp!s{}5ybif> zhK~o}-eev}A$u0zeSPxxQ_~ZuvbXeeh2UxC>8gDCV!!Y<`t}Xg ztcNZ;QOYL2KAm=DjwG@^2 zxZJ5I+wq0De?H0Gu}4H?id=fa{rj@w+I+@W5LAo)uBk9ig5Y@K9mzZ)MwMKri{dD1 zqj#e;9m%8&fk_-Adzd3iGw+7<>*M|N<8ybU=WaY^d!NYR&(9BZM~-dk93KoD1}_Kg zV`p<}iu5MirD$2kM^ZF{UUYIV@al?v49rhl5RjxnU&7boAU>a|)IRQjBMP8>x4uKe zKZnY8DsPjPkq2v|^n#omuhPp03dMQs9UpAIBY?wRc_#Rx$!S5RG-O(>@*d6JP4kI- zHFx-4eArVmCUPV?c5JSv`+k$)3`0!P0I0+}w;8sH1FI5F^L8w&eD!TAw#!B}y3-(D zKNN0;TIFlildE2PRUA)3ziPnG$IC5l*rOP&k;)|xwj`D0cg(8AYK4r}t3^m7TS^@c z3x<(rIn*3LuJODX)ppJ9bjf7fA7e|-tG90@S1n()`@km?^!bi2iQHawgSuO+?;)nf zff4isY zc|^VHv8r~@U-&(d^*RI*6+S|Ww>dVn9$p}qCcB+ar%6oune=nWe9@_&wY<-FZlcc9 zC8GGCg-9M(=>~)sVG{07*Lqmi9yPDTDQyT=ELv|0y%HKpaI&&n-SXb^trsX*)$nq< z9LK`uRSO<)-5oL9b$`Bi`F!!9`}Xz;u&m-`-XphqRp*)DuC7TYwdfN* zMs2{TNgK<>n*=V4?1x;1NB&^MGc()lXc|F>=r9dY?Be`kzt1W8T}>mAB^aS>0zH7wEqdl1|%Pkgp zfl3p3?PMI3?&@pj5-+7O-bDLpK87xKEgvW8*2#K1WsmZ!Cj0L81}-#EeTKegxI2>|55o0F*$)3BvRy`-4EY|mm*7)8=c_*GZZ%!_o1A zh{xNx@126a_bw*uFvV`)y5VUkk?NqU(9PSeseM6xEk#9mUv&k2*0o&)WD;kOdGxwK zL%HpNVvlo4@m=a6xBm3ApO9?=brSHxWk2I2%ezrOm6^ zxYZ>UVc%^Mk`fq??~DCsWqH#}#9tDRnK z+%zx3)6V4-YO|f^;tIQ@undJit7AKS#c1=irg&vWPd!`{JR!WFR*cKwk-S86^9Jw> z3)1#PZgzGf>|0K8Fg=c-BmJxn^*iIW5Q|AhY(FQ9w0sg9eiwj&p3emMG1*>;`1?6c z=)<%;j&` zE(L^eN!Mkw0~+4X1kaKbv=|0pOWvzO`Ns+$t3(Ty!DG*ieazrEJZD%h5tol^C68&T z!G}1Z-dl!(n$H^Fr@sIvy1ExaH|(5q&O!Qf@C-v|=YC+&+V3a?!ZjkB`uEx-CA8kt zk?!$>AWK@dfIwV;!xQSO>xYL#0bSXH9l&jGcF!N&Acrr~t}ACxQ03Nlm7h-I?@F)) zZBARVyJUdq{KzLE3W1pB5fj`s)6{mev()cRVr8yn?!2pebit@?>t{r}1)36G0&(cC zh^|J`v4bb%?hNr{Ho%`1)AQ0f)6VJz+x@CjK0POnuG>0b76L}gt;aSDy>U~!2oe37 zMrPx}R;Dx?HyYumyHa0!qNgG1yb7QI!FcH4&BaW6Q^?eUa)AhoQO@#MWa24mN2pZO z;L-Cqe?ob7MW2l7r~AzMVew_YGI+4_M7gLo$h40(CrmsH(X3bY;uzt5*B; zA*Dlk+Z=D8+QbH)w1u~qTLLVo$iQ<<8=ANhpWxhSH7)s_<#e6yDX7BnP&ad?M6w-| z><%FFEk#DxBTsH3F)FRomPs0zr%(C?vZ!#v3k#XIlmlPY`lllmP2a{H#!?aY+9c&8 zu;G<$Yel5=B+BhjlXO=$UwkWdmGkzeH&LKMD)x~-Dz;4*bFac)r+Bjyn?tHBF^Y3M zIv2i+B0IoYn1Z7eSP#`90YsR>w?6Cr^rmMg8kX(N_#hfw-O2b_Dsr+Y!NXSOK0G{E zS4lBlAZOX3rWe1rMl#MmI|r7{Df*NMb6Ptk;7ORyMKiP7O(xWGUW@G>%;UEk)T8Ld zm!xf*HRxk*Mqd@j_iTlfIux{O+eNp}wQhq{A%xT9`MZ1lj<%Bu@?fWD9&@x7?Y@=w zv*vl2OfS(ms`@&dlZpgPAQ914tcFyOx@9^IRL3ifa$*arxNTW0%HK7tBSmTSu)nW2 z%<$<~VcbXcrVr}Ujp`xB>jJ5Ii)spq{$QLRGoS;BDTZxhEG53+@q73CLTfO_m1nlO zmM)Z7g;A-ha@!l$Q~%==X}ema*!?N$#h zpJzP5c`qUqJB%?`)q0xVCJ^*;Mdqt&NIQ#V$l&+XCSU#Zu=IPWkbWn{TlF@lqMsh# z1J1HLWok>rbGQx^cJX@tD6lwK4H-;Bgun*c7DL}O^3$)n>C?k3D-&s(()gL$+xH$m z$b~DF81Thbo$c|_%?*;vCpap{4Gg{%?`iq|zA=cSjCpp30w@!4l=V8hjIFbsJG+dn2;W+59rk+vUz4NV~y;y@=rHw_t}jgQ;YJvN0il-edJsL?~ZY? zv&GvS!y!&(#KGpN5f{O!RVqSL*-zGG0t-+DhF(1rzK3pjX#g8xBZqs@pyLRsmIbc2pTKq$0)g;q$%rn5hc3)afW2E} zUj=qTAcJ;(y}CI~RjzeEQ%YMUsJi1+FmANk8+*OP5XAu0I#NvpqW$ENVo$Y9@GT>3 z&X~wPyuvY$n~F5PN%H%u{(U+evjH(1>_Q70|NFT~cdHk(ffk?dtF0Sk%%UJ*`J} z*9W3LZvboM-NAg-FW)K6gXF=5zV^0PLsLKvIqpvoy4dsPJ@!1t>p(Km`#qAPNuK; zC1u}+_D|>Ex4_+%K~+PJP6HsPG5glA6MboC&^l@i#B!;%bbc`uq*dGg8)9Q5TX$ zf)iCgJpsvXuV?7NnNs)i$)N~d+hWgFTL=vH#A|i;djVZUE{SjhyB1cc-qQI@@sgM_ z59A96|DIC)vJy`)UcV_hG`+05bJ3u;r)0_21Kua1;8p2|%k;+D4#g;Zv-(Z1jYqGb z(u=tGeJL(UdOHPDd;YW_@%Wxk64G4LKxNxg515x@bhVsT@6MM>9+i`s#ZyBfGAvw} zqZ;}`B0k-*Hq>9O0Y7jBHty)>R4Hid5!a5DnMf*!;r6C*Sd4B4ZdD7SLjMfz=82RMt52O>?t_B_j8ww4sHVQ$OovZT7gzd5Qxg zCDEz=KCpQ3oemdesAAJzr^2bW&tTGFZC2VrrF2SSo7&g~6i#`x;Gjqv| z)u402!iQ)&$tA;OJn7jmV-K@f2QPzRxhk?X@p4q& z8L{{EdoC>(=Opxn2kLi%J}M2afic;O=-iqn%DD&b8ImlIPT2@}$+@bT)XibdZPbUn zn?39aohDJHi*fhX(UY*>w^)vu1xm&!S=YGNf{DX$_vVfJ)(X6qcPNr6m&1(u;N8?< zpo6_(8GM!PK6)&H;EB^;h|s5tZo@?wBA~V=C0LHbpguAI?bUk^LE?rq-lNJ)^43mZ zE27=(7bD~G8tPODidygdgPK5>D zC`wj9ADfi?Y4gxPA~++n2W; z$N1g`pM-ANYStCM>zxAMNpt6|x(C2smL~7wzEF9e&N@r3m5)Hz3qTCtIb31S<<@NA zP@F#n-j}@9@YMAp@@dDqLxr~3a}se{ccdg;Nf*0o6^m20NB7fHDw(!36EdSE)(DM{ z(i}Bg@EEzDS^^pdOocPGGU7II`G}Sk5nMuKfMY1_?Fjm}THdF}?p8NCh>=j&@kN8d zVHy)Mi;m2z#>l38h}+(?yOv_Ov;>={cmvIxaJNNaGi8=x2l-I=*_3K^{zOLP=4hL2 zm|sar>{XPGpf5=+oZKl}oK;vnIbI}|Z37A^j;+l)gX=t8#ht3%cnH~yAmxFE7gUf8hK zvvGfRX2IlR4vbrwguPAO$sxc4y!40K?2;Z6I%kiE9;aqjN|^=>x>ZQ$-DD50%ZZjF z*B3VW>ATW$d8)^>aL$O$v_9$NFW-)W2d1R0z!imPaaX3rwQ47uK7~bqhw=cgsa()o zp8y@YZQ`rz5MYxqke`VbN7pZ;U)V@(UOhrtu%41wST=}0QB?F(TLuiqA$YC5&urmL z03yU+>64{1bQN&qFLdnFfeqCb7pNA~IyJ`JRrQ=W_w61B86G!jN}u&ENOd}+BB)N& z5?V3CoD(9jMa=2gbA;Vt<(z(55yuKoe|GJ{;b#M4-DBixg;WPnCy3`Zdp&TeIXQW+ z3Ue&rK)0*#-g8f2i~{MWX>QNO*r3-wUzUG*G2J91PF0dIVGC0T!sTi_KVU*A(|Nr1 zo)4-=g0h>H4!(Y;1DhGzC;)EUP@-k&?CxD z-RFpI&YVg}H8gO6PcYSH%yq5<=XL~(<(@6hmZxXEiY~P>K#OkD6X9Gd(Fl!R6fFOV zk;xL@4wuA~77nv{*}56&qprF$Lm1D%q8C-#>dXFm9_nFay5a9-=b;5+0{u`zC!PQ!MF4xF)kNFT&9I|RX3Mo|wR=V)v;wbgBCaW2V1z(Z) zgJSJ606toqS{|I*Ny4UaZ`wngl;RdxJFB3-WY@(RAvrn^McYwZ>E~ zIEDw!Gio;WI1?FLaTy!;QP1VQdegIFk!*_sd$lJbQm?V=!Q&WbNu#%Px%M+LD)n>0 zVZ=1o+1Hb{v59*Jb@`M`@lN|3-b&z3Buc?_a8i|~_T99P4RI243bpIzCsOq3-l*%v z;}`B5Rq$q`Lywfq5j%`~UkZiRGow!4y)B1Sp_(H+fjNs~nj*e9r|=!w{X$I&7(Ugqf_3WG0Sz#~X6rR&^C zbeVKn5}w>!7cwXfc$IIvO{)aSgY@oVEY8TkmBpWqp0)gpO5Pe7znV&$KyhPz`bee0zQcHiSt?URH5ZI&u6K`8e9{n$~Eaxw}ME{>+*D zuvXM8L3YPclQ2|c)S>For5O8o3x+%{fDo=QEgnqN-3tgN$bHLYWN)SRS@hGxFTCET zx3gXxq{>m}3m@aCcyDy?cv7}1#nvYJp@b(D>|=-HzE{s;oA~(v%H1l7lCdD7yu3cH zSFa9Yw4c3qGjK{{0v7Wg7-;=Y=3{W?9&ahAz$D>T^eTjkdfhT!Cs6P+l(;ISB0}Jq zH~pGa%5vR9pgTSKK?&ny%Y0vm34JT9-AuW2u`|5JTgs`kQeL(*xt`mGA|QG0n^n&a znUiITW(7m5;TK0*ZY1O{sM9)LQ{&>EXxW=8m8NVK49A;d9MCq)_X{(R8ZGONoSD0Q zTIbTD<-Mwlh4nNv3d3^hX!(_a#CR3R#R=D7il;54>dGF0*NKLFVWyvcAMdQw7gHYb zYaQWk<5$JQD9~Q%E$0rK{waUwc=^3B;A<$X6n z>@=QcrjR6Y{jSF7r5i`Sd*5LP86y#&`+mpafcX%@yR> zR1992M$rr4h%v*Uy20kz(=CwU>9hpK?f|7dQ!BTj@p5#2;^vP6eXi=b?z&sZN@u8H z?rrfQz<~xC*`(Rzy_YJ_O#!*sfU#e2HhKsE@NNx)CB+wRrk}X&PIM(&BtUG_wg|Wx z&oIa{>qNBG5sg(XIeo3w`W&#AB>mCreMvfEQl5H+usM8#5wtV2+qAWY0@LBAoYPEf zdtw#HVVRyka~Z*)c59y08_Dh79Ef9p!fBigP6cO!T`1~9X+{aM5342MJEozKv)7e?B5KKFY zbSif*%Hc9{Ri4UXVR5Wk9|rZzNCwD7 zDx)VzPvA>=`hB&mx(VjN8>^Fe*>;bG%%;)CM^ei74f2EzoxU~0tQx_T^xU+EwcRyS zXjZ)mLXWowfcs{1-K;y`WIP2aH4O}m@dD;E8}`=;D8Y^O^W~n8J)1dwOh94v-nl&6 zdvv|#`TQUy5`7B$D(-Q^3njm>hN|G4%nC(A5i)x8&K{6`;`hDn0Wgn<8*Y~Jyt)Uf zU9-&Mfvj?HZPG}tJ>z~UcvO|aHinUGNK5bzZB9oriX?5R-!&&+CcjEii4 zB~*Eh1-I5S)grGHyaC$-UaQ9V6r(1DaK2XGUZ%G#`QmO$BC$r3f-+%$s*v(wA==Y- zb}!Uv9XS$4YKU(E1~H(p9>$T?3n-%~(W;DDeKBJl?xn@xz^;mm%}QSwe&15(sk~Zp zuQ)D4Y#Jay3G?)Bv1d4<4hcb-!tacY+ORjXj3n8)-}Sxm*-WwPl*7y!lMo$&+_NiWbbmAwHn#BM(>`Ampp5nzATjkwoLJ3*+b2{ zm$hbEN=I8$Hqo5$NX0h$SylNArl`7n1l8_9Cl%!V6nv5jhnD zrC>Fft0g8G+pn9W3{}=p0t5ZA$v9DhwV9vtW2~jz?TPqA^83OYQ15Q<%@eCOL%e&L zM#R`jlBY#WpyzciF>d1Jk=DbCAX6ml13KwkIdZC8iI{SFibt$Baz4T>>v8Cu+}ny$ z0&T61YsP~RclH8Hx``;Xe{WnEb_5HaJj2=az9SWcQGf9iar;K`&5M z_aeYFFk7|)0qECe`N$Qi$Kf4A^C1lD6=Ae=LMDTe zW?{g}@sY)XF^}0AsWnD4=(}W9eA(j-l+kSVP z?<=zM^COD2!Z|K8Xft_l1yvUuUEmU1+Z{Eg?6v7W+6w2(E;7y0guzQIf#K!S>#>OK zuxAhiX<0kZhTQMmdFgc$ww(iN1y@DIf_Y7a0S}cqmZI*@-s56?GGIag!%mFx(r`uG z;ohzJ^B{gx$8)@F{JJ{Vr*XV7H{@b3BY>x0KXELHnfX-b_ucswlHIJ#8grsLG+6*E zE7>Y%d-7pD1DkN_+$3=onW#fQkGz$KWY4J*aKZhF#49yq&;*i>l$O#9E=Ud`ns&3t zRx3@9wd)w5*Rs@}1;6WShTP24Ux?n^zQY23#@y8L(u#Gdgv?%sG}SE8_0092(An)- zs~z~#Sw(rM?R$2ndx4=aX-fV%*?eEB!Jpy*Xy3hVePu!&V&t}xaGBL09d+k1#5Vyn zOs_2hxSn5^pWiFM<9##roF#Zj4glCy!%uS7E^{^%<)#IO$y_!C=Y_}HCzZ+52DU^` z-CG}csTbleOrMWxK2*t+C*<4fQ4^T}n}wmrG&lXm^oUhOoJGho6ZO$*-P<{O2Mi~> zdtjFjPKG`){p?5T?dSfYkYIJ8BQ#Q6HBSQ5DJtlgdm>*lhK5+;^L~Nsi%TbMijg|9 zv$YYDJ&xO66>SxLooYVdxEV{5Cc`lWZ_($O1VOKpSG+Z%hevP9NS+o8CG2l6Z4whU z>cwM+)K#qlldIhDYg!#1QcHq6VC1akSrS^{8>zYUYATCsx7R)SvZm^#exdq(4KE+j zXB6_5@k-v3U#C4jf8*2qJg`gjwY~yBD???St5;7ialuvTiSp0M5_UDW(`OvY9+6}}cUr2( zRmbS4cn1U3khp}Ib*~V+>`gu6SM7snF*dy?EVXewNnZ|N@ID=2#Isf9(jPxsh2Gm` zEX=prQxJ4WG}r130cN>_$1CI~<}R@t`+Bcl8u`XkrWa(TCOz+7w!hOi#gl#O0*y21 z_FmiT?Vh-O(}WLP5d0pz&C>CELM87}KAT_2I*_fvdqI4@yEupbT%{+hlqJn4G2+G{ zhld}h>cg5u>n~*Sdr~ryrJS56q06DkhR`Ek*;!>l{#3wCCf-Zlmg<}?nS3pcs zI-4pAeEj0x$atC43_p$TpV(Tcqc1!Qb$eKrDM}v3 ztg$a+d=U`kW=z_{z|t?iuqF6(19X_hR76DFHSt$T{R#*qyhrS1o9%-JmKC;O0#iaHcaknV`61Oy?L0A1@EF(HKuLGg9cqP2xKrr&o1FhM9vlPIrj1nb$+wV7l&W? zvVMB5(KQf1*o#1v$}zg22He*WTpmC>RuU*E<8B5O z-W|vV--sApErnQY&+}?dA8p!tsYSZ%qb*lQ4G!<+Za#zbqa*#9$ke*{7C5=91TGhE zZPT3-a)rCrjLsmYML>=_z(ikzU%xQ0z6<3jlD4O%z;X9H_tS%gJ~7T|DAnLqY|=O~ zUyb)tlExVz9QOebopWUCd+b)19pI`0;L_C7;&PkMDuz~QRFaA!ZJG@p;GT@a3=HAL zQUzRYU@%7ED{m2%f=AqYDO(=FazhLd)$muvN3g%)q0 z_tTzZBS1cL+TOusbJ8fQrLsCfwg*9^n2QAKM78R2w3g1Qulj1)Z(W&>-YWCmVz@6> zOZG{mxPe8AWgyg~0w}CY$w}#%>48uv$3*wOnx8nY*ETe58{tATDX{grCJOo$hcst6 z&@5o{5qJyNZkkTNUrR*rVr1KWEz}5asHm#;v%b3MS^w#r{44mO=SfX_%%EX zRv-)7eUnMbz&sM*C~gH&wJ!$hMTe6Nkv}N9lZh4-xiC3DYFf*HHW}KN4i9cQPPr&bN{duNLc77@^DwV;zO_5# zVi$YYmv=P;M&T~6^rFc|)$GM1ctm)UUr5_$_hV0lWT8&Uol9Sg)@N?x8_j7lbzH9Y z>ar+Grmj&^c@QpFwFgsIhn~=gSg390c;xHw_rlx?icw#ul%Zw(DZ8Kqw6_eps>{cy zD2*cc0wQyQ4&GZRN$SXsF4TlhI>&qQyAPr%wwOe(T1P|hwzM-g-dShq%eHm^0@a<) z9e8i{#CntWv^HGKS$U|J2Tv;B^ZT6c{CfjA-n#EaHL~(MM6nl5&l{}=pO+DeB{f@} zhsLIJz0pc<*d;@3@?FFia*yGKgbG3LV+D8xq@|5#6jafVwLqk+j7Av76$Z&PQGinL z!E*D-%V1UBHv~J|Ohf*bMD(4~3y~7~nd_2XVxIbxN^_V!#$87UYBN3SVjey4cz^(# z^dM>QT#57Hfb~YORoAw6A{Zs6`Fee!9rTIzURUQm!A6Ry1*qsfXto!_yD<;jY6Ku> zAM~`!>{L}wxl2mnE2e~o0XHWhz-3@^Ph<8+m$nko(1LHl{6N|X+w#5e0_+FCv~lQ0 zi5(=DXuTx79xVHs+mM{-QJ0|>fk$`aPj!=Tyur9u0F{(I+vkAJZtZY1EN~1uaEgG& zhB4A^Z(e$K^Ml)*SIc6HXO8qRJjd(v`_?TN57#Wpb0}zg@Cxeqbll6fb2B8EZ zbl~uNo$nD>IN>X;&1}MU2TN+^^A4_gR1nmS1=>5uL~mpVw<*lud+&%AJVi3a&Ir$qFUFD6!aZNZ;TSH0ff8~8*YrSr7ClhzrN@-8sGVc1n~H*eY& z&m3%-fi1{=tl_C>RnTg1y_5;z3pw{liartl?2_rm3$50v96(yC&H#RvsZ4KPSct$z z^@6@mT)YZPhQen_@Ay=;A&th6pYN;z_R*j%k#O@H+~(3}Q@uy$7WcN?v7a-P1+sYu z;FghWN}~~@wvK`>ItIDKO@l=BKnlD!rP(4Y2uw0Qu6BdF8yg*kpti=cs4`YxvDaA@56k5Vpur{ad{ z>u{M4=QRFKfdN+(mysr}dXSLbwe;;sMBZXJme0e7V6^emv4@|!;a<< zd%>d|<*C-XyD~lAV)Uk*!hC352oD)t!sVe6U|2m=e3!z z%$q57?ql9#HA7*tzSl3sccN>0=DD6~oCA7{yvSgEmrf~|LMm_D2&*`=LZ-J~x~Ar3 zu#-*&v7l{`AM^56y1+b9g+1pAH_h(6q>OM&l2^#qy7(XoHE;Au#8gHY`ZyvsLeiB&}wc1lK<&$OBy#T}~9MKnp*y z|Lm(0@+wP^`j~7~OD2v&(E%JDkkZRBB^S^Vk==B55+$bB_k^zUB_YEsFRBcpGbR~K zbcOYL(=cV|35=lvRJ~48?+f36(HB~fsu(HhtvsdU3CeG-wQbusqXD$EpXgx`^kA$x z<`F!3+3r6l(u-$LW6F>=Nsr_V;?CRxSvM&y7Lo>bWcTG9EUF!XRzHLe&czAWZ9-hQ ziF{xWT|RT9e0Nx$xS*mI6@y4oH+l(q7jS<3>>d{ovtPUf-eFojW>vit2bz5CSknsw z>)P=0=Iu0Hdp&&E6egtyrW}P4ufupEBd?byhE-e%fM2*E*CnbBDaA6r340G!tpM!d zTjLnJt%F-`rbf#|_jGms={yo1b#JTgHDU1#KM@>0MYTX6RyC}$Nlv57m`P45T z?7j3xB1_DNO^zU|FPq>CfBo*YjO+C-7L;&=afp%~YGop8L@&36yN09ivWQ_*4gI|b zD}{sd#A--Rl;B+k+U4_A4M6RB-gwuzxKGGlaXn*;1<1$#xX%?ZMFbz>Hj)6ZWcK56 zHBBs{ux(3lfT`PsM?o8GN7w*zXb6cCoe$IibDw-A3rvE`I+nOdzUM|$+v0jVLS!pwYCybwf6*rjYn6f z$1r5mU9KZ=Jk*pT$RwH)0)PVP3VfkU%Jg2KQf_&lTcJ@O=U@N{&neQG6&|!OEtgzJ zG!5hVsQ{veB)BEZ?%Q2i=GUw-zAHm<8saG9s*@3Od=?LWz5*V6rI)KHy5^>==3)7Q zG|+KVyqi1!z=d-hO}Wxj6m^(@D2mfOTcyi^HwN&uHsaHT{Ck?U)`h0B7tfzc5W2d< zJ2D?*RV>h(oz@J8 z86l9U+pA!4h5IcJay{;SFAPo=8Z3r#Y%Ez`^q81J6IP+rdnO+1x<00b8@=;;ha;K; z7~qR;ozxp^`6hSV+&dsPs>9yiU`M`}%{mpOli||wtZgBmWs%h(^q9is^Sna!r{(f8i6Ve6AX@Vtp;nHpkQC@sBv{WitdL|zR5J%z_yg!(!K*VWJB z*&l!~7PK$xpjPe)xN!G_ad|F9jWIuU}ISm5=11%&kDMD2dOVt?gb!8{LAuT=SZCk$xuH-qJ^Du)A zppjFtcbfjiLwxpR@zIQ^)+g@tibMm|4ALJOJTSuUzIkP_+2f^>Y-+tyX=@MRb+}}U zmUl;P4eD*p>q*HeWGJ{Jrs(!j#4UW2P3lP(tIQoS%N$|1`LKo3S{4~?q-1i3Wh-qY z752&CrEO+4%Slr~!Vy~#V+b=*zx~Aoj!Ru+Qt5Ovf~<{QAZQ%mzK-zG11>Wa7!&6h zm9&Hx7JQqgi2;JHzsTSf1)Si3{w$7NpIvkgOZ#V}^+vJBwASD&^EomsynB+)X_n zf|ukW3KC1oG>EP^SFkG8VA-B1!R{l?WVQfZK%&1yMy{uFCo3hn{d+6n(wE}c$M+87 zq1G<%NH)oPs+1{Mb2zm8e4@I^`0;a_BPjHV(<^?Kle%Fr@Z$7!|M&|6%-g40rIm20lmW*z}kd+ zRGt@Wn0Q!&>gEU<^M=`P_5kW0##I3@FwUvry<`gu(RUi;G#jn*!2H<^ObSRA>ca+_ zKd&0+7ykPKZVK)P0UVwApbq1Y&BNg9*e*rXgzREs%goXq2dlBXC*$zO*%E!ICeoWH zlM@Gpzu2J9j$I;+u(`0U{u*_VpYl;qU>#{YEnUJR%7`|cdU^O}qV1S>Qs~Bb0IeI2 zrq=k4Gaif+4Cu&tOm;sPDR(FhAm|ei zA67AZ@KT5B-FqhT_>F0Vuk(XwCXh^2l&SYXY$^hYaj5H&(i3|pPku2nh3`Fj021bg zm!gAk!nIcQ0I1(ndi~ydbVP+9k(#FI9l1Xs7vfmjcXefg`_Mwn#=jWh&n`Y$h|^H; zYziJhipz=iqX|Y6QF5V2{vu8_VagHzAkCt)p1U2C$17Jxh*0{}wc1MEErmVjy#|59 zeWZ-lZ`(7D5}u**I8m~P$L`B4zoWVF3W5m zhEeIks`OEhrum(4A#zI5tXgNQ)0Q=!9~c0lM2c;DcT$+w>uLt;7&dx`K_M4&!;>k>mY=JD7nhKwH6d9&nHUT-%O)$>dODGCmyad8#O%B~Uj z>eH@f_kjqmQKAdok*D~Yq%;5@^cA@VF<&lOlK>^cm81$jZ4 zEos=bik>$Q-DXGYDL%yHSfkCignSDr#Mm!GCRhy z_j+jy4dm5K>)f&C*}b^(Bqr$Qn)8LEO^O^&ky%8QA&i`zDM1qwUK)HJ8>Ke`wA4JD zujGxwaz0~z%@)Wl8p7tO8XILa+e~@#_+9WlMboW=_xhQ?r`87W3=e3#v{JUyG{nm5(v5wR-#9->=1UgY#ha?6ptYA4YG6hC=tJl#l4ryJ;7*V=-;YMWc| zXyU|n`_*kAENbML7tcN)WSe_O{@@ogN+=C~tQNZ`@-tOn=~o$ok5|D5rSt5Og)+Rm z#8g@lRmh4gJQenOd3e0(QEMZ3_sPs>w^!0rZ}ikil>n5;=%=;7BcY<NlE zZ}cNvIKm2%L~TQ9+{Pv932r#_!MzE98s?sbB7b0H`n^lmIxz9Pp^phLG)GO{+ z4sEU83W#d53h}l?vreuV#F*Yz>oao_P`o&@wT!3CS%a4np7wNKidp9gy%yR=bAN^x zRNibyY$2T(BNFqTb{1+^Pj5h3Tq2P6u36p7!V=(?iq}M+yds(GD1^;-)^mA_U&jjF^2S(THNfTO)P~3s-5WB%(bVVSYb_iMHv^`FJ@Sw2z z#U}Egi#bZeMwsI)=Tymi+>7mDD}wI5c|@2Q>Zt6qAh}pf6zuo3dIjZiiEU54CRH*b zi9rjWMXn84guQJVu;*{02$S7lDKi$d2{UP+qwf)bLpo&O?4sV!*TeCINwNi2wAxEh z#8fDai2H%pm^VFU}BLu zY+)3AWA~iJg!w&wl4_2N*dq%eWjrV6)Sk;Z0B#nn9;${L&$@+{ieh@6@&qJw1O<{$ z5>ZJK;uEN9SfKZO=@&y1NE!&qPieUja1S!4Lv`#)8x*5#^~^(!Cw4mOC2n*^_9WUbd>^md=B$z{UY`x*avZ z7JJIWEk{+}n#O=vPfRnp5Ss zQDfm|74a1~f>s{itAszRwvxX0fC0p^)u>k}w&1uXSsf$P93%7co21W#0LxjhAkR1o zpr$VaP@MN3b9xy%^IXKaNrXeGmc7+d3gYzhHM=0>< zc0GV2Oo&$SPBqsbUfc8m$6BJ&Vq#AY_R z6Ii_0n_8$tri_77PchCOPtr0ZG(go9{yB4&3+-`5ZfimMbnC`qRwm~tWkYJqtf|aW zvmusgEZ^*VX%A5E&MEupr5{?@a8Vj*Y3TB7iZDEm>|M?$O(|H-Gy@_kP``-s8^C~I z$1Ov4;D^DA=nKs7Z)EY926ORvvgDH zkX}GW{y+qs5;~Vmh+lVfkSjOV%Thgt*9S`2BTrOL>h38H*Hf%{Fh`Ez%f=*t^;}_d zMu3NObTyd$-og{z*r+@nC(BirD;!7r*`LOy4dS3MqKgRa}K_#9C!{cr{QWA2kvsqFRcL>!aHjslB6lpr?&NynqM;khjw5D7J z>e}-NOQsxYvUi|$RDk7XMSSBOY4PgJN)2*2bURQ`88IN&05ka$e|1NuVs2Q_2bTWg zUj7afJX)3bWNbC2s^B1Eo+Tb3`@94=(gJIxKK5sLa21_E)QW#}1|VnD_{g}8FW^MI z`6TOohKXQ)vkDzyHL2i=fT@h{^zD1%CwK7#S|H{CbiL(SIJXLRhPefrWL828$2tv2 z;{x?_2$Qa2Ky)Mo#lo%ZcRrD9j!RQo=d$w)YwVHNL;&S$YcZrBc zXxQr2J<><6$fNa0EF8ipAv;UJ)0CjGi+t;C48!$9R^0wY*H!O1%z&;f6qltumrkjs zV)w4VBo8=rY!@qD$l4nPl@~EiGa|>=gSIT#kgTlb@@<3fGghp77Pxw#24@OOZxO7% zwydzW8J6eA=E@u%mU7S>z$h;|-2hehnc3s+s|D10k9<6geIMz`-8w2MvK?A(-zk>S z)GkdEgrYn2Eji9*$u4_g5W3?NSX5w|m3~aLFDB1Z*7_(<~WqY<%H}d5*Z0peWy>!Eif*32TmKr@D>zF~7SH9$} zj^fEGf-{rlrT)ZX7e5J;&wz1*v4H8krQ42B@x-aiuP*7jBB+Gb-<3TdB7Fx0!xai$ zI9lHPys6}6TyGjNLsMo((%YT_=*ODX2E>Z#ROL=yF04`BM%xSEbPFnCsO%9<348fe zo4Mif<8+RP24WnM%E>`di@VQ3MtgZ>U?9|P1K??BiYnjh>_7_uP3kQZc{C=Y{_~Ap zhmXG|^%{uIf#|V%bulbE8@4UtF6$gCVnevyu;l3?0Kl%RewoXwFEQ#pE)utIOVrP( zA(2Z^dbUv9mf?|CF(PEw6A86~YvFhE(8blu`5HGC^zbp%Mt#~_a#Ll7FNns{lZ-WlS6 zTe|KP7K<=4D<{oHXn7!zEItEPaC?B=$DQUVb=)t0k@gIqiU%}TH1N*V!KpissMv$b zNiI|J98Iz_ie_m{SJe<+uZW@c*jcEdkukX0L#$8I>@#$j?K-@QV+zS4Rm5o`@RkxWG*tNKznG*fx=RdQv6hT*_2 z)+q#PJ(D>h9)ev2>fQQ_HaM>|!Z!=c8H?QHRF@FFX->`9AasH{keLs7!VGm`zzfeV zsvfwMh}eU6<}J4t36|? z<5bvtpw?{s%B9+So}oD$!gQ=tV2LwFs#%2sp`YPe@R5b(Cck)~g5(sSGHg{Mn-+Tc zPV~k-v|beTVANwm$qBVKq@uS1Oam&!v_Oqy4`OKN;nRvS8B-pisql#x!v(ja=^%9V za~|s)8uF{@=9DqK;+)=XAx6%5IPVTGP&$*}E|NLN)X_#-fiCvj9wm_=ZPW%`!M%ZR z;{201rU@yi$Q(*{)L9+S!E*(00jcrEhxAT25|vAma#rM=Wni1#VNbvShKpn$bweHq zbPv|bibxTI+rk^G3rAKWb7*7a#E^Gx4@!4w_zcg~XCB%K!E>tN1fO?ARBtz?22kF! zVivF&f#a-4&st_9J!_QGXL}QHx!l?-$W98pw%F8O>-n-n!}~d(6$Wi(JtLI#jVs?b zqF6*wIL&Hc$p-x)GKBMH2Ru#Di8&%|Fn z&;vmZPt96;`z9r-^juc!#d_k|Q76D$r97pk9;%!5(sxBT1`W=K$mk`SLIYfmoh`df zvBg*eU|x!%<~qrvO%WUFTDIbZ zYwb%Yk7&}3TLA$zVSbS}r{_>QqJ5VxPm(O@NeZks4WeDMgx^ys z?J*aHd&O--NPOg{))}i(w@`MX+F})ZU*sWt-%rYMqjF|}^zcnc14ftuy^ckmvXmae zi;e3SIEIS)s89z>zGPx|mPrd;ao(3@0MO(Fuvr-hNi)U+Ly@ebl}_HgYQxj7=A@5Ah- z6pw)jGNn*{ejG}|CDsM|fC6jC$&6LBbYZ+Uu_wV_vavgA`h(|keSF1WXJ(gjoBdov zn)04$7y*g5Svni%4uiB$t7@>Z#=^OTrITUG~VPh?$ zDd6|Q*rU!puEvu6QNVEF2pPmwsw)ewaIh&uS=#|t&m=~npbevq%38##Ya1qHy-_KJ z@=pTkdtXxZ^03}PG#K`B=Vj2oE#qEKJsGETG3NJx)o1r@VOLv;WTSu?m)<^`T43!b z;X01h;z#{RshuH%2H1BmaC8BCp z`Y3set$`gBtQ%P81@^pGQ-QKTp$ix=qQg8svj`=nz-G=K#*Gt?n`nnw_V<4B!E#X3 zN>Q{!)0jdAXX0Y;GaB2KSOT7T=C|}(Qc2&E8|N`*%{n@nD+OS#gcw$RQ}`KO2-OY< z(Yux4@dgB@KI@#?2~orp!dn=9>w1N?2dhd3sGt=Zm%%wd1|7^0|kBQm#LG zojS8}A`SZ}Lk5?EI^|tGO@CJ%J#I$>9c%CTEW_hmqMIT5Iqz93Cro2=^u5cXAv&eT z0x+@6R~|bshUAm>W4ra8hWb9xH)k;Ctodx94VhU>fV^0OVJNmN?II;F za-{D)v?rC@Q3d#V_fGO*r8M?}%WZ{2WksLG5sEMHo~`myH2awU8S%U`TsV1NcFm~Z zlFOc;a2MsX&3b`3vDJ`L+RWZneyS3~kCGm%_s@Q~11{qXc|+r8p=9LPl#a^HfwxU9 zPU@$6_WCYNu!>?~z;M%V==$O@5Des)I62mR)A&B)%;tl2?m{n4depex+C5O_!udER zi&`}LTBq3)(!>r8VmHrXECamm}WVcoLccZVHWT#Xogr?tTiyaaB}%+iqM$W|+b z(9^1Sd>)B4)0((D_DUZNVI@P;qj7&*tf#H+q3}6{0Ehvb&FHE&9C@F-1-QRm#drMBD zSIqNB;c;}OamKUQ1!(18R9Sx4p*5X%!@=Q;WZ{M?g3(d#nM-T|v9?4+_A{`1tBSU3W zWHU=X{b@ALXNnVKgZcul_Hd=Pt3wR1aMn;PjR#_Fh&iT7jOB#UOGBWk6;m@UYh|kDs3=(s5L+S@p_GW%I8|KI z=7x!QB5Z&N@3rtxgMG_Fg+mi=$=1%O6t~ct6`MuPvJY^u+<^mb+I>%R z_8g<10&5`aq}w-{pJAul%wN7hO3RWQR)Wl;sB{Cf9`15h)|`&x>3Ao&b3#~zihBrt zgb7LEA{LGfE8MHS^Q7j?sd0}0hN7|@XY?tEYv|j_vfi4iZIc@d5>Pmsq;lb+0uOP& zg!4w-))!v*T4Z{cS-Lm_N5l6G2WR>EW`mQQ=WOjRhR!`CkOoAxx5AIKGoSGJEOwPx z{7J|j&ilPD)h74bm-Y^JuviD_XiCGb`aM9a5*zl8t$A{iUhlRf@Hr^tzDm4HR9b}9 zKb}+VHfk=D2rncmVZ?dF<JyMz1@FpjW@Q#;X*D2BD@xxox3Vn>H{pRpYVfY<|ZiP+wh(eB# z>uta3MWc5FCGW=O1n1QuTh6FxJIK>3tP|8x+I6bT2nvL~*Nt8V$LAVOrq@^REo{rv zrsn7y-wgzQcfr6QUXO&H(z&)1Z=uvZ$JMgv<^&>i2`N_b^kJr>}??a!_n5|z_!ChY6aH(R7u~9 zfo>_7p*|u!+t>VFv!>2U8Qm~9_kOWg0d9o` z+sB!%L-Pg`RB~ajJ?I^)jG7jA#Zqkt`c3FSJ)T`>BkRcEI?+xlT8W%W7Y&uC=_sIf zZD|f1N--~<4~nf7jFS%5`8pC?Wf>DP(oNK12#Cmc#Nc7|)q=*mguE-ji+sWkPPl8q;-t|7wrr!OLUPs=b6^NQ1BcY0ftzc=R@PO?@~OQ`!;WP zpEqRew)+cT-fO{=Hw-XNJ~Q1F0|hz*gh|mST~Z{Vfl^zZh!I|1?z(VMmJS;>foTIs z1{Z0D_KVukxs3>|yOfo2ZjM5{XNNS1gm5;G0m{%}&;vI!?e;mu#q%g!dSG{MSES@K zhu1*g)Y4~U(tZUAh9Sl)M$c7o!*6SuR17Z?I~{pg*@ZEeyq+r@adUEdHZ}&A`MJHvT24d~L0P1IL4zwEkKyJC=^_B>c1*Hh^rBj@Nkr9z9;aNZTG!1VU zjZ9Ijjbr=yZY}yK8PLv2gBwy9lhx35K;(Lr!Exupp*5jGt#rHBWR#`CpUXyRkxPLy z>m9#U>~BNn&+sHzHdWS3cUzAv1G{g9&~F}GER-!h6P?%3dPEcyz-yXpP#-`r2k1>4 z!`{t2cL1URM-<^ld3>ck!fKRdS5ll@UHhySZ#ap}JJ(Zg6dND&*|30`%n&-TJ?)%M zv4;!?NB}^ul^-Hr z$@TouRIrC^60C6RvD2Bn9_$cOH|HD(A~+Esf4~Ow;?))!(j$V?yxzcVPdE``yilRX zywc0hqm0Z@`(AFPO-~Z^P-I5B1Obxp#q*hX9Fmo>>_Rm-3NvZBG7V3PoF@Tvu`9>9 z8<~QVQKm$M8KnQL5d!h4#7}e9NV2K}hXoV~^5EeT84R%@HS;GLL7Yz&RZ_2zLXpQe z^%UXQ6qaAi(}EzgE|(`yzX|?6uGL1Jkamou$%x7f;+}Ga#elj>v>lK(cx}EsR2-Ll zO5?Ck;K2soLzM=5{Wx0{*?|$$yLKeHeP2I8UxyxQ^DOMFQ>{Da&Ej;x=OVyhj1U6z zXZhsX!HL`JL9xm%Ez4E9>1hpDI?7DT1Z&v+ww_W_DlOG5_(6A0@G90$$qbaarjci< z>VYkY>7Yjk)x{OTbiT-@;Sil??6UNW;*EA^zz0g98i~`=zDriC8f8dyZ`z&cDND~X zznlm~Ilk%V8Y@c5%Wd}_fw7+9Tl%J0KBHBq>2M-RNIIH2DH?$Kb2X7?!|Nx|LV{2y&M^REHiC^d-E@D;{k`{qp zLYjr`+AN}lD~+Q3SnXMd1gz(Aky?8+ z$`r99dp~jJ4)1>X4AUIQi1%LGd+EY`4hc=7KJ#|OlRET02farKuXlx&e5K~BlnaX4 zHyD?(+?rnD)7F6p3LQ&Fl+?kg8e z2e)|#yXGd%#j97@&@=tSYxF4_hDM*j&_F!8ZhOFDTz~~qPvnzkqffh*@{R_kO|2ed zzH2x1tD+R(e4BoTvx#Vm9;fjb-oc&vx>7oZm2-rcyx611DP(a?`n2XXK$H&dY#lvg z$FQt=9YLps(^2VxCkAej-6N@mu7MfcHjqB-7gEa6IJxz_U(=yL1#d48;wbhLz$qp@V1h8ee25hy25C~DheTBzVoC{EKDa8lO{2-7(GixOA7tu&k zf=$94sAetEz)Y=)JYcgTo8{nQ5`5qsDSD~qElX!zbiprcWyRebUS`SoA@BElcK9S3 z`=%+ayX=^;cxdeu9OJZi5y8StwV-8)vz5tx$WBGdC!vj?b9X{dfg&DqjW-;6_j3SR2~+g{i2GD zF}$p>V}DZ3(62yKnT4$-}Lek?QUT|{zaTvBa|+maq$l@yGky!I~dxYQWm(ZlT* z_tHRdxdsS1*GVgj9S#rQWtJE0&5Yb&)eAOu;RHVh5gtjA?y7PWo_z-IC_1TT_uyeX z^#z#`6tV7hXvk0usOo-WwtYv~sx|jqpTs<}3)hEm?wk%O)y>od2hY4JGAxnwS}x=X z?t`PCe2Om^2IRF1W)EO=|1@ykgiF2#mdyuUwUOM|dbW~}t&-qKjrGVw&T)imJ1Eh0 z?U_;_^vhHd6*eCBA|JW=Bs=u8Pp69-&e`N#MC#pcSaMcGpco=cr_Xu z59j3&AWc$B5msMa_`WpDqC7mlNhaolr^9|Y{d+yqc$iQ3LBP|JWPGN!Uba>^kwL-u z9=8loiX$5qJLDz0+KRm9vpL!)V%axwzQoY)ebLSEeJ%{}XSr%&R}H1bI=bTCkoI_t z#N0atO2>j&Xwxa)Nu|n56jm)?EOH-zCumL&oGeVzl&hb#6+DLZ6p6X_+y!I-qLn8j z-r)nj2NvQ4+*_r~HXa=>WwTF#Bbn^9-&D0FC4)_vW^(MqJQX&2d`;+csabEv(MprU z=A=^t!7?!1B6jGxJ}l*W)b*O8ZpOkSJ9Ouo>}8A6z_Zs1{4Bw|_ch7-Pr@mO*wFx} z{Qx}X5u3t^Xl$uQBE13c{K)=pN8{R=GGBiFY>L}Qk5*!?!sbJl3CX-hlz6&wIjqPdIsJ8vP!4o24_EDB5N9+vFr?&NP0Y4I8Rt3Kqk@ zzU;!028;2!MUXS|iM2+s^9=?-;TqLkIm_S;6Bb*ggS;p(&lj8EDC8O$=$&FGC2z-Y z-wkI=gBryz%7i!^oed5G3iuKNgrR4M|J|P`lO76hc2h0 z3X2yQ7Q-9O;sNw{uU6p2$ih;UV`QINDu5y)c&wTlGL6xUOYKZo(dc`jQ_vk0B3ZAM z_#N&hy`vF)&PPiS`^2Lz1mm&=>kTNb10u;P$T-o7mB%k`_sfYWez z4!zJsaf52|AZpB=}gTB@|GO}Z%rz` zeiWDvQkt)w@DYRPOAxVYL!gBk-XS&&5;}VH}L9y$hN(E@18R!tn5hE`B1`&`3?=AvyW`LMRM51- zN{KZ6&nwMZ1p^RY_u@H2^4wlZdXo7_pTsLP&K7UbZF?bp=l%WG`7^%3_(0?i#vvew zMz5@G1)XyeM6PKqW1BpGZ!-|Jw>Xk$s}z6%t*VbyL@rh7p$ocA`9T+pzVgBbty7nI zc1*52Nl?x#eiAVR?^PX$^JV#%pUb<2lu&dghL$~Fd5_ctHjldBQViD&u&wbMS8l2a z^QhPK7($W#OpThD7~kH_wF>ehTbeWt)Dn6g%(aZPB{Tc_3>@ASiD%1|(})i^nq})f z69u%plV8NUndul1O`}UtiFpgZrRx)mrweDVpUt@_(s{H>@Qpymz9$XOM|(072M1x3 zi#v=5K8b(t)8v_0%Xqd-mFoC-GQ|(sip47xK@|4viI_`9?M(qog6aksybFq&P>WzV{rew|pQ5p&&fR1z@5S4Ck5?U!Jy^Adcg5ru%#0+FYA@Pvc^NFkT0_dXJo- zJ|$5Lzk^3Fju{SCCrps49K(Y*;e*PF8Sn945DP) z5K9^wJp#hPX%>BWa*)s0-;=2nU+tpy&7aisz4r*8-Cp}j3m-b2G}+WJ_wK&PF2?uU*Tko6su5T#+?nv7kNC(h@Ory`Nq^h6CS;K zi$j4>utS=sI4H2y^;AOUk!nJXoeEYy8)!SU=p>gX05(DE4`ZI+T#dcg`-^-*7DoxN zH=)o_F~%c@ls9?hCu0FplS*unx-e>F1H3n+yD3unKnZ>MUVHo)IKB7B^|G&9rB60M+2^ranJMhuwiMm*C;J`{fz+!&Tdby>)d z8Y$uWncIy4+E^;ugBP2ROUwc__UsweR82gbE~jhb%zl!d@j8xb_?eyJ4VQ%;P+~dh zOTyQBoA$~;u!yvc2qL!4o%1P`b7|hp0|EkzQ$5-aw!rsba z;U`pdV4N?FO>Y?cC4bZZ8T0lHHhNe>x@xcJQC%bM{TDMX3WQyvQu@j6k8uv z0dJbHX0C)e;zr#|t0%m(j2Bia6_zoafWs^!BMx_8CpL-v~0V z%dDBnxM`#HnUY^bw9g{h? zfkbgwV`R=K8-T8mZHyCn24qZJYl7m1cn+nDk6P1Q7~OROo)!3t;F_$G;#!ystBwJ^ z8taKZCYq?V5xY`F&^UUIZB-`GV_2_PJE@xHbU2y(a%(C=GAv&D7@^3H2qvCeJJcyi z)Z=T@7XXEx*z_KrJvV#Y=Wj*j6wha9d$qK?hIKoi1PjMW?tBgUi^0yvZ2*m)+JplX22I}@TksJdtKuxr|Din{2yMM4EZ zIMhtRHa;cbpV4m$@f4!6(h542Uyv5g2uFKYPSOjtv7C7mZhB@-GBJi&|HHnmN+4JEy$27W_P#qx^~?9*xI*o-+v-*k?bT6YY-W~7x1jZry_+5JQajs=FwQp8?FH!7cWZ5!Q-l{5+rd&hoU@=(ap7Ea+S*602oRLwbv# z&}eY?a~3dbcn%eKOnVM7-o#nNDvk%$=@su;zF{SD5Gu|p&C+Pa!5AZWuE}>VET0;e zzpjwav+RSLqu!wju z{Tdt3OS20t^&w{xnS!;Tv{D+gqgBe9Qn%XkwS`eP>hL#4+)>4aXj>l2=)wT$P?st_ z`$EPbpZ0q$t{~T4JK)+>PkJwuhneC{Z5U`F=Mf#2_3M!Yz`kt~yh`*nqSnQJg{T_n z^-k}3hL^tL2D^4m{VQzXIb>PPTYV@c1c&|njhYnx6oTVZT@o9*lz7WAO$12_ZO?oN z#j6bVkzQx-ogBiA0wRI(#w`O)6u;hYeTan2Qf$?s+64fJX*Y@$em*VyonuIKPZXPv~K`ZwI z%RM!RPbuK{PEfmQ)iz#+IRS5uHi#vr6ofzXdiA>YB*QkieIK2Oks*u8HKqF##xW&2 zKeu4Fbcu90ggqbw@A0#ToW(AA&0=a^A?6KRrw{kQG%*Dri;>DYKB4rWY?hq z)l(@$!UmxaX@E_D~(8az*i{PH*&wdx0GN(nrS_vyi$bRXD};M< zN9a+IvZwm!stgPD0%4gR>_iDrVQXC5G;E#9TD(DaE*xGW95MCQf~|a@fkpPCFXlz2Z81Rn23A7QV=C5Cvnh))GA2 z-P2eEZD_CFYEaHNLH3f;Jn6n%0<(2<3*~314ho4%+nwI*jp@z;HOf`Of&9(@ZeGre zgv62vvrQ&wwJVEXR@dHKNws^J^Z5HS+ML#Yr_FjQhob9(9SIj``;yg4a)QV0Ia1=R zrd4o{a84L8{gOja<}^@MSV%rEU<7`#%QY4nd;=lI39Fb@GTnKRbwkAxtfQ#SfR zyhmfsAh#}QZ#mW!@;Tdc+M#=FGss2T2#@mmVz#Gw-E0N!9)ji|q>vE9AO-=`OGk(| z$vB&(&ouMV5wt&l+}GIR^8PG}g=&WF!Hg!V1?AGX9-=<1GPM3F2pH&|x-H0HK0@5g zcw0{>0GJ*>5RmTkDa#4oFeSrtq$>|F2RUWrfr4N>=^)^mO8FGT`woz3;qFGyF|Kkr zFN17Y%q&zDR@1SCCVYc|NpU1!Iuq0BnRxIUflTMSSb~%wo!iRn7eX-rx)sDNxdP93 z8H zQ~($G)iraO0rx~Gp(G-)|7;n1T6kmyz12_D#eJ1*$Y(?&#nUfRFmcG;>cNRTD{8ei z47Az^9}Kr_^9?ZTwt%c}N%*HEO!rs_hM_E1Nr1yaW+Y0;Vdh~CYp!7$5pA?V2jHOJF?Z#b_jm-b<{$QxfZiDRZRt@X%1 zdq|{~=QOyheiT-Nw|zL4)w zIY%gT`R=h;yFC<&8M8I#AQ>Lh4XM1Ol1E9+d^|XaHYm~ejL(S?SoC&Z2V|^(tik!w za|sn?^-2hKyrd^v+B~Lw48aHOQDL;IB|H)jbm9PW6YRXW6s5D@?i-MkM{5I<^<>n# zyN6RjyK9Sa6E6)wD#6fn6(-BZ{L~Tl!1W#-_)5sZHleXmg@-}6GNG7GP%rygb67s$ z%1M;xLm4p(I6sO z-X1%@B)~^gBapBT@+7?1;$fZ4ygBPWLO-DUl!boAOI{Qf7`M@_lJ=a4c_b)(ixv*S z+?IY?UR4LFY~;O{IRrvV+)yLI=p2ZY&z1R#n*iQ|y=b?5SfuIoJe~;0;N8P~MH)}( z1|#aW=Ly?0(G$r))D42*?1(3rdqsJ1!!$Z}a@BU0@?ZqQ8bY_4i_-|@;Vc*@b_1PV z!4+08*%cHLdgqId=awZLsziyLD^EKtYxcB6*2WLF51UNGc6{5J#snb4ZmB-k;kf` zJiP5E5rL905iE7m1c}rHTs`ZaPd86Gi{`OiT+g0bg`0YnLr1#3;(OZP((up7=|i)8 zP;9B}(gDWdAcY1Xb`aPDZ3)#OC=ZS_B~6M~<0)g6zBXmq9Y#GtM&B5pMQ($ntb~{N zoYh5+WuJqPmzfSEt|xKHv-a}Qgn=k}I9wZSh6>&JRxNk{Qc$KTg1YS59!_?m;bWYP z=w3ZDk3)*3Z0S>}2V=m%(nIJ{6|C(9K$GWPO_r9iBCkL(R2kmW)PuxVi6T3s6H=pO zWdzb-G(e>=1vj=YHbJ~;p^|_m?_f4?{Yjt2&%1^tnm2MC7Rl=8Odk zaY zYzI3gcvaLvIL&y~<1N=uTs=4TTuM92xhg3oornN;)WvmMw#lx@#Zm^724Wx(<%p)6 z<5uxxu@dfdy`)=7I_YsUx9VH_Oq&Mtj9&d%0fGB>-bn>1i`At`q}kO>U%jfE0e zdlHvb%Hyq7Wjwz8oEsuaq?+Llg6`Byb9Qc?*(i%a$BCf$vtwO)l~4vEV#v_jVp};l zP>jju8|d+NNtYAe&)a7|nq9@7uogJs2Yqk)oh@Tr$z@xT*2CFV9rJK_HF$ftM}er1 zI~tc7o=b;Cu};vpcZ7a=NBR7@PnsChEg3mVswZ}|WHQ#n*=c{lYbqpz1IWYNTN6u| zQWY{qiW;Wr4R(DG@#M5x&lXB7JI%Yv0#Yx^!(BW(+M-b9j^3)OnJ_NLiBYYL;}(-X zp@)u$a!lqxVs#a{+nR@zN510L*`S`76v8EuqYn3)o)j%_vz|me7`DaXDfUI)DThLbd2a+EPy3n6I&n5H)X(A7 z2vFcg68qxiqYI+Ft}^1gcz*Uebs+gTB3s_17gvKF$Ldm8G-|tvtM<`}zfL=v&*4?z zGmvTlx*@!$$Led3@UR-XPn0Ga{joo-_6Z;CsI!UD>v~?-T<2V@^IpHp;Kz_>(t`mt z%bIpU=V~XO4jce;4(KSr{>EjTkm-;ZK(i^gQhb3D*lsniMrAv#-wU%Dp0;<-OV<+X zM!Mhh(c3pd8&vb2h(F&KRnc&F&W9_h0yMf!6jslX85hzajCH;wx6}s&YLJeTlka+en-;~eo4>p)x27^ zc2Ax}aN0@htU-Cr5MwoJFx?Z9DJ&B2DT8=YoCPqBZfC}+$si$autcqsYNSQG$fl3S z40}_X;>^G{^u~rs*kjsAtjz_bo-y3Hxq12!qc&D!(9_axtQVFL^q{>U>z<)3bw1yV zd-A3UxIe+;bDVRF*h4hjCMO7=AP#ClY(_8OJ}&1 zCw*cAA>u%dXhYmxBAetF(lFk1(USD2nD3WJ-jXxjE(Ht*TB8)B2cL?0BSpL?6;b`% zz!#aHC*l?z*)5@^@(GhTTkxRwY4SurgXmfb_@cUVr(VGS~frI5DCARr}~(Ilygd_1S0N$)N5nFF8q zl7$+fvEu=)T5`SfmxhNeM843J6NYSjdTONft~Y%!<6O|-au_b5YDj>kxgMsX$vm|P zuR%gNJ$BU-_GcG;>U+F&Rr0DM-YhXtIYrBEs&BuC*OfOmsJZVp?k>CzV5ORJz8iN&Clqr9J+j(kEn zubeU&wAP=nZdvbiEr^emztr4w(gO1G1Trj*Y*vsAW!a3AO~^EW<1KTRYI%xSK@|EJ zphI|X?FBBYSyOKAx) zqh!9Ju2Ba;`4kH4r=NI8r0uKBb$dbX$gB?xG2T*en9&hTSu=`(dAPNRHKmSZt@;ST z?(y^s)S$&BtR8pB**fK_N601MVV3|xqB{>uG~mon$VJ*GP(5F%>h;nj)e{{{TWho| zIl98#fU;N(H>3?^LkZ^_FnyT&>TOIL6YynYF5)Ggx5dNjcG@g@mNO-~r0nn6#wf%p zLMilutBPiB9Zqt4664s!Te^X~eOerNhcAsbxA@-6d2=qVI(v`jnPWn+m{&(=yM;mF z?;CAuojlLNxKkKSH;PN8n~stoHh*j!d3SC`%sXta`V11#kTmQy4JH%O_ylOJ3na;W zO67e<*e*)qcTbkKM_k!M@(B)mBx__=MBg5abli2~>MEZpmo&bssAtZ|?duJDTbvyN z&?h&+7Fg!7YMYI81MExktlJl^V@d*#IdNZrwZ06ZnIzs0Cu4+SPzV=!`O^GAfRv`B zZW+IFBYs@|sKqv~Z_*#g?o>VBW7-G}9b^d$Vrfng*0*ffG^U3EbU4oV zbS_>y8+{D%cf)Vlr+aK($4?(do<2@D`hcl*-u&2T^ zqXa#(&ls+>ePC$1sGdyFysIfuYe-(#8ca_M$s@fwife6^c-S)q0e99z4B0~JSx-T) zyE1lmAgN>k-!3%2gCcj#2G*swC|K*UTiO$8X#siNcf@b33$Y@$PP_+NJdU6y`&}F? z`I#&)yp`hF>Q%6Oq2td-?b7N6GPPm3`HhI!f>WYzCtgj)n^!+$t#?WwH6l)_TAI~b zo1H&gFE(VL=WLc3J#@)EwA;^%+4>f&Dd0#0a$c-OFK1k=@TXk#d-r-Or_~baVjzIJ zRJnF577nwFWGh)@a$-Ep?~KnC7(usLgaK8-_h?2}qv+K_86wwdnnI;+^kP51Sab!X zzR<*Z{$fn#q{=YWgi@0el9+bI0mCO#CZQMTfNqhhaDBX!Xh*y0XK zjtHE*S(Q60YltfxtLa636xPRr4d(SO{p?u!6l?3;@zv4u1e}NK+F~f14_f(*P1quB z3&;G(l<4ZIXPLjutb8l{Qs)Ne^b$o7`QaML4z1gT8(Vi-Y3f|=Lw#n?sNiWGIwHCa z3f5(u71c%d6mfE`fb|@{zBxe~>XNJ2m-SOJKpo%&BbSkZU=)GtR=3-B=!|mSi2=S- zhvBaMI;BQlR&0l+W?4B(i3|IIyQ=}ieM-hYqwdXE#$!&dmzOn`oU;7HR&=(`eEpRr z6m-IR>j>9C)8sN189*zNGrxNrjEJc_~kk9OPPr>)O(iT=nYY&l}D5* zzztfjlN3+HOffu$@@m{mQ_XXbJWpMX5NzP^+PJ0D9y|#OE2f|##|^IDGR2xTB5Y0( z17F$p_l$a`GyQEJu@QGe1hPmg`OiVxB-8}(&K&oeJ4V9LqP;tJ9~)29X{M&sjvzV% z@3faa^L%#Hn+K^SWkhdCl6%H9iE6ui z!9hy%;PG{IWe@|Gm27BkBIQi#bBVcEt{b~h;>!VntA+0Mz_a5mQoQs)q$j(qxC*O) zdnZ0PY|3$L!nN(NRc~*W#L*rrm@4tL%0syo94sIQRvn}kdE;u2kDE)yXdeJ8rh<_o z<9k^7g46kGBX2U`EDv)Hjo9axY$%-FDm{72eV4T!fv!9Zt`-+NN(SzIICs`uBfMw3 zJp6KPp$#7+rq%e62vBD|eD%G53Hp@HW6^yt?$x=zcV>m}-l%nHO*Ee5vX~N%l;g7% zrBZ2Cap^qT7g*1QA_0@%5a~SDkU(KaVTTd*ScYO@v7T&Q@ZqC^bzcHdfKjT6lg)eX zbFTTG!6uObC_3$X4gnCZ-ml4_ACHZ`6jHx546qjp;8vWP)z0Ql=T3irmyZ!*=3z;b z4QU5FYCl4a7_IGi}=H`Y1P)*6!Qub6^es-gBgq~dVr-b>(l^$@y=(;~H$_8mV> zS)XyiCKrp4nK~&NL(46H#t4h2`81n{H0`3^3zs|<9V+X1pz9gy_iVb}o|bcG_C@ZM zB6?ll*}hkM8f;rL?SZb&QD#3Qady<)#2MNEN_c=*J~1U5&a-wTK0|~VyQv2oxT~E_ zfazuA$^KTAJ;0yM&6~AL({JhcXTC|%I%DW}&LM7s9*xlNiUbwJ#L{oO883`&xk-Qv zNWoW)ab3oeor7C#R#3}@;W@p!LY8H&BPvef3gkM?9xBUn!SHf)E2^F+Z)BO#JG+=} zloXpW*G^mBo~9+`>p0#n$6gkZc?UU9b>=mKX8=cx0X&Sb<|5%I87h3-k!pxpSb?J% zLxlPsO;U$(*Qm>`>EpUFW3r^P+~^`_B}i~XovWv`(l{!QsWV121J)7W;~v~DKbS>} zj;`mG@AS4=p;eEBPFLSfhyEPE5BL&zUtcuw`!n2{D%FXs%G)ay0DOE0btPk?om7Wo zJ@7cK()Q~4p=`DK;Kh^hwNLTjXE-iJeizLfIO70d4+bD+9F!h7;s|D;Jk79IUFgH_ z>7&Y&9tq$)eweSlCCbL?%Tv zfc=`;<1l74YA(dLmV6oW-7S?Idb&AdUm1j)c)E355>6Rak_KB8O%wYoo($o(ATh<; zVR}lCz4=&Hs2;sEBR)-HF}8<-+MIA zE$>B-G)G{si*HgYOqQlf@_YC~C78oFo1PeWEK8t5SLaTA?QivT1_If*}lWqeIU)c{ca zRvz-|j8jMOIWwHJ4%WVEivv$g$frMZPeZl5R4afS1HP6J69jwx_C4F11?bH4_UoJz zQ*UM{Z95F~gZEBaTEr0s%!OZCea~6SpMm+kh`qb)SG_4@&-MoQ9YGoIa}%!(ly*%R`D~Z>E?%qlmU@-x9Q;&VeLnuZkl#p&jvX+1& zruK#((Q^TNtijl`IWKfe_oV}iXScaN8+iOvLQ@!>B4)%r+-Pg#_@I*kQopsQP9IfH1X$-t@uw-|qwB4(AxsD8h5Zbu(SDv>u+-pwrCM6tzoUCvw z+?_V@ApI;edI33gqxvabskYBc^hv@8xLCm~x`lLXB&AcR{*D+R!z&UoR)*}(;N@K@ z`XU+lnys!JKjcWshsbz?qs-c5l>Udd!@ueWYTLiE#D&YPZ8-m-j}`7{?JF|wy9c%l7VNQ zIPf#p<$^iGfbd#N0-enh8m)9<)XrmuJr`mVbnjUzj_!Dw?}eDBEu}A?WQ_VcYWbkL z$5q4DL2wMbQwHYT$fcSr<8p7((HfH7r?88A;#ZKDLEXY}-loF?VQZ!#qPVxXeUfl-u$6D5w~X98i>UcvOHxUgI9v4$6z`?u zWjnuTxX=5(qh#FC0V~@{|3UiNzZL6M4cP#Q;J@!YwivjuernqyXfsl zZN+Nqp<&x%4k=`TxH)LQLAFvxErG0#?uEJI?3{d7Rj##Wwu)A@Vt)4o!{3`?g@p`l zH9!hj)2fgmJvfKgp6|%eHv6s3#!=sKRf{CrnrXuTxhOED_8{btv;S;r2wROJx{OJ- zc?v1Fyy%E5Et`n8d`Fl^1FtqKk{;jPDbwW0gqmPa)}Nus(|L5K-ir zhp!tE=cJb*Bc#fLmJ|w>Ev0bc(QN=4=F6s2ofqU|Ic#=sK;(7ZYat%O)0Jb3(R&5t zJzY^~;={$E%Jk@tyL4wYSyK;WimM+kj4KxVE1hleDhM6OM|2~P=FnuZ7RB&NC|C7p zT$4_nUV2|VT1Mb&PH(($1uD~u6#8xrfcYv zeg2q-IVFbN&bxz%-&&F(JS-ty_Sh@f2c?N#oOvp~PCMA<%6LOuuX&5C`EuLU<>!bm zrxK?TQ90hzX8kAt(??(9rIVfc^Kd~{d{8IzimQqz^bL)p=*10C>9A9^KZNw}lc^eg zM{KjOC66ehWYJ2Ix;Mw!o!V0f54WCK4LZM!i|lHCkQ8r>;^@NWI2EB5?of6rT1TcH z>U$M#j}`F2wZ0R|1U?|w_S6Sz0BY%P0WC<=;IU6(6)Vo(t}z-AK9X}MoITRPy)nCX z;c|3&G9Z%ELH;as#koyaZ|!wtlelF*&Gd7JcXV6gtlh6TD=W(%MT$8u+DJqk6Fu6J z*kkCioUBG2qp2wfQ(}15;o))agKzVI(g>**b(;n(95XW_Ud)`w_5?60@9}+rsM2;5nJ>S0_meQ05qN4n9Zk z+H^^~td?<_<-p(T*+EgON(vY6yAHde00d?%z|rI@Mu~2$Fdh<_41c`*67qp!XHCTp z+tI_itl}mZCVPAjNJ}DLce6_p1D0i!a!MOe7+Orop3F zZbpb-L0?(vcy5g-cjBcAw=@vWjh+O->Y>-=O>Ngf763Ui^Nv78Mufa*Y(H=1F(vKi zOtfKvBX>p=4_?%4;2Pi0Hur4o-Ap7#3VSfJBIx5wm$-u(D{(G}xS5I$hv^1@ye;LJ zi2%b*#xR{^DXWebHSgP-{4;jvqQvnfvtj^Hu2%PYSIyXvuk6Gq3O@g0cBJ% z9v1_4-MoC<`(Pk#W`wZ;afOrLG(Ar`Sp6laD2KrC>0Wwhvdj?9jKleW(g|~eN!Q3s zGMC?AMwReTiMeus^o@c%uIfkiOy>=!of=GVtq_MDvzr*`;zt!^b=Q`a!*6WL3NuSu?@CX)%Z<=nnEi zZ#DZUs9#g!nbrf&u(9Td$#bcvIsO)vp0?Vkvzl1VGHX-7$UMN+Mt03&vamd@BEgNK z@mrJE&z@5mEfmMwEYmlKtSUx!Bf@HQrG?dQC6S+Yk06dSdEu z$QKsjEF$&HI|t`U#T1Xt?n?uStc^e?!xzpK9rNDUi9VLldB;B`#U0L10I!W)z!POF z2xQefoR4b?D&MnRyNyeXb7K+ z?#N}Zz2=6fS=3OVZo*KDQ%MxnYh%=V-CW9;=vVK(xYWEvO`f9aM@V}o9Ie)e{?x%q zg+)Bt5OIv_uJjy7rO?iSWL?JWTw`dw)64Ds)MZCmY6}@{i_(ZVxt+f&sWs1T} z1OO~@^YpMJPjConCRv0e9lF9asT+Mw0t`_llJ6aHRW^(WYGSL~a6R0ktGehGoo5`s zMAeYv&1;(yg7D^5LxN9NyTGFzff=7Dz^rE-2dWpC!*#c_55W$%@T3$wZ5{-UI@7nP z@H3QKTL_P1`w;jIc9=TO^LsG^z)y5m;hB^_FxY$kteLs&iAmwL4<)*WzUPu$uKaE@ zSwb=slkQ1K+Gr^Xi}LI;R%O4(?a915Ix-=e;gIUA+9YHp0=pqV0&}H-n_VL#nv1W( zK-Fu}UVF^ZZ9dKwI%IsL9PR#Yl#vtF zLR-s7Z@sjd75B9x>|e6V^vMLu>T1bX48V0KT}|yz;??6EJ9p>1g;(>nk0m(L8DO`um7sZ(h#nXs62O*{O*KVyrUlKV z_^|{FMO<>SU~CjHs?J@a1OneB%et7IHKc26J-tPq@}-`M>8o_9ndx3gOJ5W@$1|ky zjaz++!ox$fJYMSAdV{>QJaFs8GU_rG72}x4CtwC^BcL%+dwZlcbdCU250NP{y z`d+ef=T2dEiTLt}(jfyCk8_o~?vRx!Fk3h>P8LW#LSx6xOshoMc7iHt)IsYtkV*AGW^xgr9X}0|DN((sH^_Ex7eU`^N}5!i-A>_0ORO)X zxs@D*yl$8_An)}=Re&EqKq{en)uQvf+fz%TvH)MWZ`L3!CL}g38m#@2)-_(+VVrgh zWkL)oI zwBpf(_N_x7ZZMHbVj!zDmttn}=yU_eX(iIFZYl=EUa)WliN(pk7?Ha@Njfes4m zUQw~psrd*Dn9D64Y3fAY8;*VM1PJF;+6y4(>vwv~%??^kW!zNGd1dhUiBd4Ui*sdh zL)y4p?&P1o<>dog0D{7)t+#38ZIjOwcNWZ0{3$HR zOFP5Ci1#V3_Zi-0F(%C2t}`3hZHZdXftz3QWDhAkG1ipXoi8bo47aakWUN-Q zVO%B%A%q3yS|!5fJ#NBwh_{e@dqbgEUGZ`Um;!Sdp?lI~JbPcYjmO&X%Ag9=q>QSU zmq1*rCB&(I=KznyDez85nEleUJ zyn)O&m;vA(C+w{MtcJ!KCFcI)Nxc`FFb#IT|P3)D{_ zxNs;e5VHC?uIO&UQRs!U#astCcvVsO=o**Q3RPi?6CD# zk)1js!VTUi8DL%pzKbLS=_ycgmlGIpZQc?SHh^X~M6bd}$E%aL;XYT4*(PJG9*p~B zkOPzK7125O78qSrXEhX|s!QFN#|aRJANQf>rZQR20AyD$%LjyK-61u%5uMzV^JfonR#I{W$gizUe*4(jqm6^ zjyEvRLtdDh%Dx0B2|k0PPHz{*sBLx?MJR}?nIo;v>4~S?XFAlk*8>#)v%#^y%Z#_ zI%enKyr(a#x#bpBavYCaY7LwO8cPI0V5OWR`j^#KAfX@?{$pH z1*=9lDUV`D2+3B&R`jclCecWRg7tr0lM?O#nDlCQj5PVCNtm?@a zMi)GFj@)I$PRyEi##j&-wJ_>pNi9^sBAL49KYh%dUgY^pJKPt8@3}_uyj#!I#e8mW z_o-D!Y&7!{g5=Ra*h3pFb72b-4w|BtE?lUfPm$SY$PagACyX10kVkkOM{giy)0p||`Rre7tE-a(yIZE&%;9LpP% z$6fL$F;kw}8#V#6qhW>gd-Ldc3K^TrvW!7VtrEdh!u4f9dk4f*NMj`&Jee5238^iN zBA&u7Z5X)9z+v@3p(w9$QtnKwEYW;bB7V2-HCA@?lqeR=s}6Yw1*rx+@#pUzY>1Q zte+y$0F>fd%mGQh5t8y$ptfv)$M7gu>MW>l*d}cf zapEmR&X_@|r!F}55OqQWyt=g>a;|%v;yxL80#RhC;;)~*d`ZWeRqWNfCX#mbCkLdP@(4^TFrk`y23Z%0S|w^pV!~Ja;oNIF1!kBx z-m`0Un2_|I(A(`+zoXofIslE1bxXw76^vQT2TF<1&d$c}XM5rjp6pNW#k>f0Ds}Fc zpj3}g;$2=fvUA7dO6QtALD}m=n4e9v5_Y*!ho?>Wbf0Q7XN0FQIWf;ixhus z%IdBwLRg~KkxKJGc18SdD>tzEQ)uxS{GXK*Y9?Hjj9RE3ty7~lSSF1!*@j+^^YW}Q zvw9rwT133Wx+mb&Z;WKe=OKY~N%fpGKRmO`E}VRtQc={^FE;1QwR+s~*f2vb(dLX# zK?Nf>;m%?t5g%EF@7f`!G=Q=#xjf{jfgs@=NO+r(wbX;vRdr--uk%>V7o@JRvqON{As`U_~Inx>l7kdH^ZU z5*Oey%5r@CoxkFjdx$P5Yj5@tE6}|L7cXogk(vRSw#h-6qb4VNl5V`re@TtJ*pTFi zxzb0-R>)tXuI_E*`WxPA-F@wzyO4z{jflx~M?Kw-kh7W83gqcDjJ@{H6^6s-2;hB( zr*L!qd9U%n%GXj=6KYj8bO-eW4CT1;f=M~G4!uYjJ5CZ+SV z%cwckzIyKwhp2ULze0cW3l}L@s!uFuJ{vNhb8A7u=w3aNXXLo4 z;wTT6ym4$ngXCG@!LZAw#<$qua~Rm{0Sm*vi;Ca~;Pb}uu9A6ESn@nw2Hpaj;7f5< zcx!IQ6hU=_h!vJC>ly6CEJDV}ghG@h>*6emq);}+I8;?<}R_ zQB?71RUb_UiORB?Hnyy8@eC!LYbNo|@PG#%hP`JRWbumUk~9=CC+v*MLKLXpO=0-) z4R1ZHhXVRYbot5pcnh|OOnVXryo`dw9N4=oGuQmnIv0it*v2t;vgo7VyMN8#h58s zweCG>X4YPvYr3;pcYi&^(}8q*aAu+nG0f8Fah$_RtYKM`E|`w)n9$yx*Wr*wZ9t;0 zsTSq-^{Y69xgvT#FwjLy?soGeJaJz3q=&_ONp~#{cR_~HA$^qjXj=TKy)Mb97E`Gh zojEZN3mla5nIOqTs=K`ERdBL;0aZ4~GpR?3kK5})vpRssc_h*Tmqy9)rAIk9BsnOE zdLO-X$W=s(TYn38IRNaA=3SbKHf(z%uNyE7^5w(9^x>J_r#n^ovaADgM1{kLP46+H zN3SC?3#gnmpl3P!{qx;LdUnKrksoou`BH zD%jaDFpwD0fGsNZUQRpeZCAlXzo%s`bwXgF{&2`En!W(*+zrp1;ia(%|qGq ztzfI37Z>={>qXdWuxZE08Z{1?f(3DVcg{1D8i~zEsb5!aK6Ec z6aM^#=!^{JgH!aESId(fXA0zlo!fnN8W_>qOZ6IplJ5UiTT3|Ja`F^Bbx?C^DL5-U|M?2H?ugo0MRhY)_gE#&S2sZ zTX>$Cpl!7X2VD=~wE~RKQ>|D_OP4z4i*9)s8#Qik=0+hLQD7#|$8Ib0vAqK~N>TD* zbO2z)r4tolm7F(!ZVxLBZw@VqXl-`eq9qFvbzF=tum^OpyRCPGjrH2qZeDC}t=2g> zt>@1?=jgt914|ce_ud*5`xM^tA{9Oj zN}x_1pzY051>H1E?aY#js9GpSMCt%UF>)bluyQE;C5ycDemOlnS+v7 z?W4+s>?K1|S-^u<{KPZHoDdv9PpWLzq@S!Gx0xeRjcthZgbUs< zZ?du|$CU%MaZ?$Nc#2ky8W#F3za3hhPIf07<(tBJS4=Js1mG1FFDW>t-+}k&P=TMX zm2E&$7VcO+EF3^`A!<6WJJGaTwa|D(z0Q#_Pr(oPXOkW0<|9(+fZKc3S_6ZYgnqCX z`aHU5{E1ZUI%I{%-R9F-6XvHoHPY_y`Rx?U%bYi#!V~?>b#GB;r;*44s4|b4h6g-| z6|iRXofuyxRv7^Xdf%cJE&>WpuA59k!zi~z^9%^|YfZNYhz016Ft48yX8}7pW6>m~ zS3c^{eP`hMvfo<-y?BfWf@`nM8Y!?&rb0MYL)7Xt5&JZlsw#*1Jf7Bx<7-eI7gXlK z6l6gFj^Y==Q8$mu#hcK{+V4OP2codRRHn@nSxP$JTqQVQbrFd~ZgQ@5BDLs9kt+pMd+28KMk^Al1O zXIG6lVD<}_S5%@g?->pAJ*X;orx2wl&8pKZPGhK{8J2G`L~I|fyxDzDiH|4%xrkAPe>V*XNF?RFP7hw!elb3zXLGZq>M+py>%(Xaiw+?joy_> zdAjrJ9{tJ1iL=oHP~UCK6U*pIYg6l#;Gl`uS@xcvz!txa3{D3idxpId#(EIZ?mC;8 z^}6zn$H}$j(h+tK*(u_7J|!(0@M$7;+Mve0qSL%-ziA#qBZYSYEd8_`!{(>&MKNo= zrV@rzX}~-_$ftc+N;)!iShNCX0TsuuJ6VlUZm!NI6r(5KB++tQFbV@Ze$TV^Ib1Bo z2ndQ#%>>)T@(?~z@m)QMprmUHxOWOZ(Npgw1ddd^a$m>Gem5um;ypU#3d9z1*QcQr zB8VQFcS_IwFrP))6k?(%EQZf?cb@=CK=32Ev%@YQ9HgfMVQ%`sZM3pU3`h$C_Hwvz+kV9m`KN6sutuy5!5*7fiEbEYQQ*V zJEEC)@?=xfiwXrGK)c@H6|m(B;p~eDedW)7$*;5DBO*J5e!()2ngSm@Ml}y;-o<+& zI_yJWYU>Xux8E2b;t}v8(+xOs1e#TTOPcrHcKvhA82^(<=!xm7Y$u?|amYbm_BbDF zMj+yjnED(Iq7EV9GO<|YJ9#@BWQQI{VZ#}AId3E3q#lls$Bf+)pr}POm6g^-hgc77Y1b69bG}r+I@0y#Xf9F?ZXi z9kAYS5FmSEcL?{F06~_ooOgW`!tIR&3ppFmQLLq+aW~f0=YDB!W z+FY}c1kXhE6@2@je-0d+Naq4x51Og%y`WNMVm6t+eS!Yk{EX4!nDLdxDzj;MwmP4r z;GyuVF^U2zcmqHu(lx$*9VOeisa2~918a{_&{r#;4AKLZi{a^o^eU^v$B=O~ zj$n)6uV!&{Ok9EtJyh~@BTwX-vwZc6>Dn_59!ho0L5TJz0k6sx^E?mqY3XuAv6tcl z!Qpr6k3>1)*tP+>cwFUL#-8>Iw^>RRFhl@%PReLYs#{!|QQ(P9dehc&16n^NsQZ-L zuB7j=7QXj_FmFwVF5g-b?_9^c&^(;BHBUg}v9P^!II3dm8-9}~%G__YdcGwXpQ8u5 z;!f|=OUXf7yu;aC@HgAyaA573*f$%B>~&ANEm zn+TlD2F>!GOPW8u@^_qVO#!c@=<0|JfO-W9nX7EE-wJ?O-Qd1A#oX3Yp^*_w{tEq_ zK;kPN zP&6*-t#tA-)4-!glwOYF!`rIq07zkajCXSka?sK8Q-lFeYTaW*YJV6Sx()zr=sASYP8Q8 z8Yv!+pB^*NY!2FPd8Sn*< zD$f|6vukvcRSJ072Cm~Gd846DbM`HRzaj!$czq6_iniN_r4OFHlzGxO8~29yf<^~K zDj+-vn!-QV(rpnjXFAieVx&O;EcjaPLWi zCHtYNC&yCJ9mve=oCzMzo+1tH8%LN-PUsGJf_jmU^HhOR*agi~C|2-1bMc{rw^z$p zDReezRrt$B4;Xl?d*<*+Tb^yav;sfC?7Du*PO`c1P6#pp_2|m$1XXsBjP=@ZS@T62 zD?a1cOx|{Wpix*44q2e7ILlocsP#d`nY!-CMF`nG?CY`6+t(!8fyU_CM2Z@BBo^|v zCLJ4AE`HuW3KFX_kS0^dVW(9vN&rhKo+!r~t4VtEG_T_tCpe)blrGVz3Xwc@h1sJap!&fWRe(Bk{h%_t>pK1_Smnc41Ve8W~qY zi)U>hgD?7f(*wn7UYU=MS&lA2NG*XL6t|(L#G~Tk<+=<{ktRues_SE^z(&+XRR^4x z@_I}oBaRV_Wmghpa;b@i!)ij5<;44Ws$IZh8E0M(pA(`TpsI@fnIr;8p-<}Z!_f`6 z#-3uKVz}HV!_O(+{xQWQG>gw39F;i$ zCk-4EE*i^bWs(M2&Netl8s+&)RPRAmV2Rlix#8wNQNByiinLyOZH$&^G{5(Q`;^VY zE1_#*td#Y(W*R6TO8|D&p4XWUud7bjh_Jjeyhd8Jgjfq6d%>t<_-?`bTZ*3}ilWhB z7^W`nTSbGs$_W{{?T9*!qE~9K8g0fL5EW$wXjV_OTnp21_#Qt8H$u<0vVmZr2(Bfg zeJO#Vo_pwtq%^9c2!mj-8`$lWtc&LlQzI?asl{QPH69M(1VnOP<3WY;Vy9$b@FKm$ z6rRHtw`Z{8j#u&~7YoK89JF5y7QEIcl?V^p#;1-57*dHdQIx%SB9i(6+?gJe5Lo27 z4;9<7?5Z~AA1+BgJnWwR1S)Lg;4JpZLla@q;=&XSEg(LQEX$H3pL+xptkq#0T*1|W z(uES6SYrwK@O8bi#B9z}KY_70=xAenYXWBjbeZCHKM!N6<^Mqux z=jdl~EAUL0NXDa-_Hiwf$c7F^S2MrdgNH$XFq^c^rx;m3eNol7Ct|LaQ2HS{hi6B} z=3(MvzO2_h!=VoPOsJG(Gu|`CGnwZ}Ht=lJ!W1=Lg;ikCVNG*rF?i|UY)YPg2?GJ+~zz3$-})q%|_nX0USH%bd&Lj9Ht zAaKmM`d;I!$7Ykfcjxp9yXX?ImU* znH<4%oHiFy3YTt3No07P$AQ>uC5VN;06=@1dw7C9fMo$1<0Jc&b2zbGr9 zxs`WQv;knRw2u+8ReuWd7Mt+#QHVLlTy)HU48W^}6|vp%mZY-YCpO}u$W+*mcYB*P z$KYi!q|0+je$B3M-?>pf2N>FEa=NR43Pbc6;LHRrd~&QDAj@4tBd|RhRBUwsfG(|q z!y8808Zd0e+qlmKVILKmJt`<*v$a_*KamAU&o}k#LGS7mID=5kU?`dZPU8kkWODW4 zvxPJ*&NAp1{u+6iW7R>cSXQ0$T*x3;4P4@QJmK2r1y@&U6;jEmtl=6+r;K(yAJrWm zV<^%o4k>=mjIBv82Rt$%2bMv*$m<~c5cE9q*q$708;$S__3o6%J=7`C@d}@)Jtld} z;*E^fU5=9(;!&w^4cTChy%#4<+g8x%lATj4`CM+yzHbaf;cA(#J54s0J`mI zBUvi${yg!$!BbLoU-gKR>z-$qSx+{!6&E#JqqFuNkaN*PpDS|rD~IklY9W1LEzm;m znZLu3@BFBrqf9`Nr)J`Yvw_L+a0s0IItkRb)6d&&L zgXQb>N6DT7d9?uym|W8>fk$f-v%>pAghUi7z}tf!M+78wl3KI~$K9N=npsXX_Ut)C zPsaN6)Dz6A*l4u9d~A_5^a`D7!m;z(g7iV6b17;(1{`=T#hW=AFSX`%gYLkYL&OY)kuXc#N@%|@$tqqJsgv zgiQr7nh!P(q42$4$`(5rqp*vPc(LzJy$psq&P@P&T?EREj;VFhbEuaPAU$Nfz%Ow( z$C^#+ffad`g zKlOkFEOv;kAntxLcSqMrPI^zANuFwlb7AYNP4?>C&LHf78Gy&M-RJQsOZyyej8LB_ zbH10<=7jcDxVh+nKq0K=8xgZ|%J97M=v|k19n%nI{3)v%um!Cin)5K6bEa=Lb5}5Q&5@dXW`kJ$}x`qV%Js+A^;Fc|x z5>4bXqVG^A-;S(;?SzE{;nTZK zK`y6r8!==9CCY^m84vV7e%=5?D>_a;Js%8OUUV0KmF1VlG~%tRy4cO zvlo@U`j8po-Ncz3h?+I`zz!?El;E!3f@t%0T^6_jyL*o!HBseLnEpBFXt~007)j!* z7hYxf#9qB&>om6q&(u#}>+?brEEdiVs%&ab^38y_Ie5g(`T!GXmAC0J2?LB1m%6?x z1H2e(OFZ9>fm{}UnL4Aii4oT0jP)vOBHyGyFwNVWv_H-7Lk1666wO^lWJ8_25YtCQ z8HjFEw0D~?Mg}AlfkrWENK;X(Zqk`WK&}cVpkAZHU=p)bps+8h`o)DlvVeLka?x3E zOEp8mG61-%4mbV9qZe==N2xC%)59X$E~tGXb3;kKH3l(3#$w z?Go@BKoTA)0nd5?!$>c$?vauft%1keC{ZeMA4qxvec6XEVJ24^o}sQJfKxMv<0-HW z@yNoHUECvbzVcEw&%oC*@g6E!8c~ze-4j}pv`qycjoy76oM0q_7Rm$sNc|m&ywLGP zZwf_x!YIffFBtI}?0}K3%vZsT`JLNlx^eA#W{8GI=oTTHY*D>E;l}p>32e5WsB`$r zOr-UNt#_#M5;MPg8c65-USsU_c~hkxJSI6zvIV75O7Q_xz1FEW)S4LN3a&s*;b-gMHa2Kl@zM$?lkIb3XTqWWL136<1#9Sw}yRDJOQ*#eun;>0$=v$tjV~}$mKeFg9c?`F; z4VI1}Fbwxf^`1W`&D*sndH{wgxLDO9Vo=g;+j_wejaDbMH)E}px}n}j=t;$|M*4y* z%bzZLKByW;lh{~hb_CQkk<*AdmQe)&E7_c*pxeDN76RKkgOVCF=XX|@u&7;xk@NC| zUKVb$F~3aJ$FedUb`1$C{SddRm#OJN1w7MXuwDn+c53Vw)mYol8`NZ*Qd^IAc%|&& zAU`$;F|ZbuMHo+l@+NrdcOm$$kFg%T=y96f6>mt&6ZWFObX(?tF*XcLu;(vj`1s1( z52Y7GS60q%Yi03DV$>dlLndgaCp5u{A=T?y8DQF=ERTa+{Mp=ZKo%S#-nEY99*wu| zd*dk^aFWERrVEz~L*>1w)ENV6NaD~D5te2U35pIgkFMg|Kk;)QO55>gFS=W_3g;@t z5M#(<9#VORtGkXP9H`~-i*?O6jt7~3{fVP`R7ZAl`YTj60?}P%TMc~`3wMK3ilH@QQ)JMh^^63c3qRi%j$Cgm zc919mi#MO-$YKV?oZ?8s@tQ5(G>ew9JEy`%SH(3iK+`cz&C^f`cRmehHKS#gQ?zR4 zL&ee4@JB+sNUKx|0NFx}3mw%ewM0BVH}P5kULs&#+-Sq^(a0}JXC&p-#YZ<)+tM1 znMzJzi=^GSWr#ssA)O_+ca`*IvgWf#5k&pUi}MCx5*1jSVW&LI8T+jjz)=%lL!sO> z!?;`-G($heR`$gtDZ$RevGoFhvh%1bhLborg4@31QI4#BBvS0^*H2~~_t_Rw)`O$W zHkLUVoW`68>%D&CtmX20H?n~O09cP*?H0yg-W^-bGJ`h}Xe;%z$7}-e5Zuk$xZH~5 z=`F}6venKtXp)7JJ%~sckvHjQV?>qMyz@2uz`w+{kf#;HAMV;jxMjUo}D28$cph7J9gM(ji0z7FQ`@YOj3^_4Ykn zQALDOLKMc{?(-YaYF|Md0CQO}bKi-?mNpi82j~n#i}<{Q26j3Ok(bL#dKg|PS=N*n z$IKh`fQ8+_2)>{KW_js;LL}JoboD)c6U}2!-aF!};FYAI!z&bdQg4yfI*eHgC@|h@ zFJs8zdFDaJm+xJLk9o2-H=Dk!-E3>oXxzuiLMvqk%>wV-AYgXEB(Yz+G&D!wBdqCG zl#9L7u6L_X9pL5m$}uc%w@wk|L~vA5L3f7=;auIz1@Mx3S`DE4OQuLZt%#;n8-*;z z#_|01WlpC($59u2$8)16V_t=>oU4uu&eGEcifKEcub2*}Om@H9{reo3I5{1opYP35 zPT;#bfJM*J>Ua1AIg4zd(LB+;6d&W-i4u3I7BN3HlVR5q*l_9>oKtlzuOhjJo!N<5 z6BCM1AW>NSn00`2(N9&|#CSyd-JoMrtajh5@+Qkc&WXG9H6)L}q@sN@^j_$cd8{g< zLGRhK@Jy`gd17x9s`A0}7}HmD&Y9Dyh0p6H^n}pUMzRq%?01L{T?0~P4v?NEv_n2_ z1Ng(kSvjU}@*znLBB$SrUE&=Ez04NV<|}Ai5>>--v}+Q6DRfegQ);ye_GQraZspeh%BBDO^S}P5 zIR5c(|C;d#g!bVhx9|-pUMXK^$a;UuG>qjlod%HO){qQ zTbXXwrCm4`$~IacrFTgyIlJ99qg5;pM6cc`vK#2Nu7iY?kb@vG6o3+TQxQePW)jFp zC7&~6_peGaA;?wofySFalQ-3-Rzg639!#WehR-sj%j>oO`QokjXn>GtfyX49hi*zI z#!ydW#cRW$YmT#?HxeEu$$;D%AC-Jh7Y~0Y%`SrJlNTcA5QvECUfaF*yfNuuK*5_+ zOiV2JceSTmdDDvnQ1gh*U#ZR6996Pwqc)R7L-0kCQeCL(BQ)`pJK-uB1V^y6! z+_eVuRTk+?m!fXHg*8%mR2auM0yP6eEyd4+7GU)_VwU9HM^W-=3W#CI-OjsvKf{y2 znA_;q3pHrU*F9*f-D?T2@s{Cwfd}_U08MCua^ZFHlbc5?2<+`#RPX%eu@BZOk#2Es ztw2Vm!&LDrBcB#M{mU=fk?J+G}DR*4j)2C#x|%?_e>@lQ}dFWUC9trQ$F&q;{3C? z+#Tt;8;{xECvy0!ypuTzp`f?H%nUVBV@j4v&1!V?@gwLVhn=-l^Z4aezYUmzCp| zW68yaX&v~*AHt`jq&+2LB1fWQ$L4yv?>C9^n(Q^t9O*c{lbh?}7pVXq0AgFT1Vr?t ztGuRRh#vH%^Ya73z{_e_gbQ**7eeef(LknMo!QqMs_ONs1ahzWzG}ozbKw>@>`{!? zNad0TTarpYZ3e*9h&7FcM6k#?efwTpkiGMMy(z+3kFO2;h_2|=RdRsZy$&Gg2pPoq zLA#_d`YGLuzy@gLE)emqKIGByx5o2TC4KtLC6U{!ZculN^*zMYI548$b)urP(VF11 zynu#2)aI(m1dW+$rRQ86G(bK(FU|z~rOb5;=k~;j%~TmrCOo_`1ds76**WdY)5CpB zlEbs4+MjiPT8>aEcot#zjOTk|DYmobg!Z#1hQ7Dl0j0J?NN+>uc6x<}xu3!zldB(u z$)Fce-$DkN@v&|0c^pBxQ+UoL&3;wNpYG$d7_<)_ z&-5T|pHOHFoP+Jo&k$-H5sw3m{9Xq8oD~ybkFpuM_!B<3!_2U{i>KjV-$*oq8Bj z5S^0J9hPtOWxqBN^G{~w(~&^;?d=m_S;fn|M{f1T2M?(;Y=3$a2KFAdW&%WER;s;P zDn6Ke=rD&kFxQdjV>57J`!Y3=XwjM*ln|QF+Fz6<~CibM9Kb4&|~KoXSG0h z^m9c2&OoFX93BHI>bL5?Ch{ORLG9VZx!_NR6~@Hv(JP}z6I|UZD2Hv5OSNVQXSBoj zRyMtwDt+`p#Oa*998NZ4VTCoJ)%DQV+R*_GKm4<|((~deS#< z)+H@x&=)M1=#+yf#y2<2M#cj-GK`p~ZG<_O3~1)7+j5qg5yonVfRkjE>T% zz%bb7g#$h-&zlZtE4`p2;w><4o%W*@PYeF4pFX_~&WpycZ(`K@ zuF<-$5X~S;cu1d8^6}FvYm0K(pZZT>dlPgQDZcOoS0OT`p{3ENia@;`L}`HOU36&z z+hYxcRtdfk==a!Oy_GsW9nQzPy*im&qJz)Idz_;?SvLC<0seNqP;Ooixs!z2=ky+c zppWB2Iybo#5W*#0m(31nc)u_(1d;)d!(dt^VURVrY@RX4_y)*%@we@vYx6P zt0$+|O!ko!6=X`sLXWoFG*i1gAWIKlQdUl_bk{{v2RbuWZ&*g5B%gY@U% z8HUcz{lK8L-%$vJYeY8vK5aC`mLY>9r3&ToU6h$ps6XW=K%1&+Ya8bP0o#-@8qnU6 z=KACc-b4>+tby)Qhps&WyQ)c%m?oEwYN10(67Bp%;nNBIT?v+;&1p+^mkbb{ANeFi zArR9%VuHJ7n%Zu5mioPEFL3LCN0?jZ7Kr+6Hs+~xO`>Y4(e|_Mc_1$hSrYf$Wi5b9 zsQIY*)`$ulH7G0t%juDaXacn|CeedKLZ!B9BmKfbK0PsxuG>0b76L}gt;aSDy>U~! z2oe37MrPx}R;Dx?HyYumA}B*zui-e_&(gKujFMtnbUe5&My|ffs52C@lWK!KC+i8D zOLTHrnc0=@Y8>TW_g<==ahfbeI15)xYl1@DcV9^8r#sI2Vew_YGI+4_M7gq+>O>rLvzg^vfX5XOG2^p62j-I+O1LOmC*Xu&_^`R63Nm&G81RO>E#vTX=i9 zCBTA;3_QoQp@}Q;3C^8X(~{p=xvp(OeV*_m&~UJp!wP*QeRmtNgRJvRRW^VYNE^`& zu*#a(ZZyzb5T$R5_J}1_s~g#0;(&X3cLq$1Cz-;#nW%kpv=P$6%VTpnT%->7CC`G%VYj@j*1W zx|8vQK*SZZ-g%D1Y=kMy8`VRM*9B7b7S$9I{lPdtWo~M+T^RB9xERG zR7p~^BdMb!-QPX3<_0Er%N0(IU@D`fCkPBBTG2n}>I@{x;n;RsTPjFO@8yI{k z-qZ3O{^>2&4+v9rb79K#__ zWyHbesSy{!sZ}aMQ`yhXOjxtC&tE6{sS${)S{EHn2T{Mrf*aD*lO}n#PsFTFVEG6b zIZjE5EOM@y2rFKKkv=@HDUs<0I>G_B*pjuUnqS!Pr|$yp<69QE-hKkxQ3wRWt0g14 z5FWZPGXeH)k$n}|34sjS`St4NG*!9Q>CZ%4qNGy6PeVO9V8b7dl(~7Lc;!w!1@(3C zeWJ#aYWso+E=!d-Mn*tqOj7))MVF+b5hU5k8Xvz_Bayxi1WXx-FLd6g12Y>Cvq3&D zrQOH!^w9e4QJs%%56+7Vs4Rt7&e62GQbQ;YhN6-z%aXsmjAkhpl)EOz%y_1-#WN0h+ z^kVr=xgI1BF7&mxy&9SVYRGYag3!gDH}A3MFHgV-ST#mAaiQ?}b_+@h7w8(~1DEY>NH; zna9cW6~CnH+tB{mxoDaMRr(lh$7ZSC(G5h%n7M>`r;FpJ1M>#b(Z08<$g_1V!qU%2 z+1Zat1|Mn#Iy6DeIw?MZSB8ogt{@ECY0#e-efx8QV$zoO?zlVl5{RMExW*VKhTtlX z7%8&9a_B92f@@ZweQ=VniP9NhyVzt~`3t2kMT7(z>r~dKe7Y<^-3Mq~0PvjJ7Jzbs z%o+!Q(Q0O^dD1R$0F9TIE<~v2X7kNpUY!YeL1<>7!wbR$8gN%x!yzIE|8FXiHDjG_Ac4a_rA)>ly%l0||O^*bN#agxVt-9LW; zEEIlz0ct2H*#BkTcBS=r2Bgyr5m^#)zYwyZ>@A=t= z-mK5#FP!|-v&Szh@dV@bo03D*%ep%k4SIV@mTW!XeIg28m43KPZ>;T5jKVjo-}Kse z^a?7yh>KrHakS;aIUvQvP&lO0)1}fwNRGX{(Rj0ilnNdKF(KP4pwsLP8MDuAVjkcW z9ts9Oc!3BS!d#vE`gscw4rms$kAyYs+Q8wVtFm;^(^!O^&&lL zA!Xl9_25L(aDvoF)v>ptJ+`FNPd6;>TKw|(FfB>Wb$c3*4sG>)VD;cTT`$T|#iqSZ zg;Q;x%VM($3@4DTu*;9gNp zjcspmAP|MCVEfOUiH`^9U7EDdQ!*Bh@-u%-^I{Jln(xa@vT0WB=rXsXSH|}+ERE=p zfe{^3FLmFkBAEwIS`nvMR0ZGK7+XG!2f<%>p?*&&N2S3vFeZBuomRJ`Gk)DOEVWp$V{PS&=PNJgV^`Nse8>#biK#XK~7Fv|D^3HZz z+p1k1jV0Fj^jgHN&Fb2)M7PxfR)b%3rX~()lg|^sp5^-90q$FKQ7rSc}i&M5o_j|K& z4}xW_1JE5`za=A_D9PO&W&;gi^L<7&6h~z5QRj^FWY6u zzzZ{vdYQpQoIVbFpSXSYfZggw2Qd=rI=*NyI80+gX3>#()fm~74{_UjcGpr2mzH4j z6mOuJ6YjPsY^KaI>>wWsKbumm&Y#G&4?Vh)J8bPiOn8u+$I=b4ERtce@MZ_c`JtQF zj?A4`)nIAd8zkx#W{7NX6Rwb<6f?rPL0W_KJ)}ik)LFQRFXX;2iVwA~9dR=VGe`i;Nk7%qrxk{33t^|))TTvC&JYtpCQio9sv6|Bkwd*Fp!_8%QmO?3I)qZ638Y(m%? zSJiXk+_!riWO&@9DSg(vAl2!Nil918OK8Omb54lB7BQz|&k=Tqm2>)KMI0+U&7U0> zcu%VYnKI_R%?)lNpu(ro)KtL+I*^P-LB#zKlS2ef;W#Qp^adW(m0X-b1S6Nbz4je7 z>ub5-iKKX#QGon?=X~FHPP$1(oT?;a!WO0wgv-@Y|tKV}LacvHSfu&hd$PLjg0Fo24Hw~*ZP=Z_` zzDi0!>Nk6RpvUeuI%Nrov+$}pqGp3eYYhWlMy6Fz?OXx@AC4F3eIochImqC%my%gB z^oX)k_c@}QGp7<#4Gmo26HK)kbDitJxgEh`xo3;B<>^_kqD!p|(4w34L^#(OMV)lv&A;1CW-ZXccY`i?>JDom(8bVkpl`EFT+T7U@QJ^g*b}&+)aDL%5 zX7%`OJhT`{-bIk$CxNhw)BS~Ed`}aGH5L!=;T*h|6lCdlBK7L2HS>VSLAYm<@KC&* zsVOF5XqZRfg)k8kPJGaCVEoh{fX-Q*L4+He)(I10`fn7uY{Kstg^GY)=DbU&2h;j! z{n0#O2HD;tbFsJVibltc`u6QrG=*RiUmK5eqt*+6tDxNSy#+1t3-s!j&v9Q9e{~Z1 zzP_GV>tC(0X^I}S_@pD|u;}Rncb>GE*b!24iRnpiZl(n(;0b?+Sucr!9%X5n535g0 zX5#Ab3m;)NTz>_P^XjK3ZV9N>nNm_7w#?} z2<)L{zJN?nzOs1KC!sP=f&lQn#smk<8jXyEc=?6n_q}$5G}jCAbcNA$>aLqo%e}S6 zR4zD%2hH=(Q}#F$8C!7~8~0Jq<-K~-vtp5KivoMKCn8d>vFpL(7-vbNw{*F`Z*{Q5 zqX3nUP|jim;91q}2+Y~&nug#T3(Xr;o!w6N8thugYomO)z-URtL{jg>oz95!x{~v( zpV*d=#M4P_;VSq-^83Pzx?Vhf;l5D?Z#FvgNXZg3(qa!3`bIl}v^ zD2{20_~ML*gNsINB7wrrl8)A*Z<6DZgXb_C;1`z8KnO~RHW|TWD}-Ym$czMD#|Ifk zscjRa>zUx&~g1KMNmPb@$C%=M$U zTV#!%hz)ogEh6J(o(@v(Q;E}*k9K6KVcXd5)Qg_zIBdBrqT##b^Ub;n(BVc4eO>Ql zO^c$@ROZhUu$Jxmr!qU^KuasK{7m~DPpz7b)GJ2dN38EXe{I$?-ZG<&33Z0nrt3Tz zMfG-WUpF#0Ub}MWdUM7;x)}n&xX#1~4fMD#G{3LNSCdD%-xM-vN9Va6=DKW$8KDP_FTudd+jiQugrh+_!c@%d@ks60Cx9_l4rcG! z-U82_5I7*DC$7IQJm2@-SuYM!<*4(8k8xDIH@bH`DO;6dYZLuY!jlU2vBPoSt7oxI z{CoiAZk0sISP)TOULV)1R|hfL&)&NkIHfTGi+K+Ww0=)EQQn4+(BWXmg(XS{U2{Ro ztZ2%b7Y|f9XpOmS_in5a&r%y&49Ga~_%<;iCA%8)g*72Ge z7xzTV-c+eHWwT&7-W212wpqTP2`S4sAx$d68g`v2nt62(*<-^A4bj!kO!6oMZRf7` zAq=qLpcg0%4t*emF933NHZG`%OnGJ#*1e&4p^opt(R$|HWQBiwEL zs(2U$+AF=~++nkPNNxw&f-?+oYnebG$o0ne5p6I|M2AnlIa`C=_pGwK?%GP7D;;DY?Yx}N*J$-184ZumsiKf65FkRzV%Q0c+DV-LyR9jiT`o+n#KXo1xj zFX0@NK1u{IHmcZB@ptNUdSbiRRLJEjB~4G)B$7$2kgarg2@I#XT@;`42`)sw%2c=S=F{IOt2Y;yTxzOaq&o6TO5W{Vo5 z+H`i7D+JSyBAv?Ji*mS(T$QJ?B9FS1z+?_va^+p+n{u#Pk^%!@-b*5`87Um@c&&>8 z(LkjH^9qYoJ8p;G7}yJipB)VBAkm-kt9(^Pc&uZE#m=X75j}Dy@o@X_j*3YRI4=wa zr|^I!ObiHuPa;hb>OkHg0owK`!XNYpidpzV&&~DAYxVo8Uv(4AgEv+u@v`k63z*tgeU{GGTOw@fb%3wQVLvyN zxj}*^wF(62XJ%H+flS-{y8TnZ_}SI;A;@;RvY<4!5H7G9`)(>AE!$w$}8{f_ZGZm~dbqm!R3pKPclZ}n+nqAool z9OLG&0Y6u0}LTn}G3R!Z$?mehOUi>K|>+PQj-&z}^x|Lk-*>1*E0 ztMi^!QrYx{8~Uxy<6<9mL|ZY7e7G}yX@ud+#f=Sw5+v0z0Cq#oB0Hn%2~D;KcOGZj z=fcYKI(7l@3uXT7bVw5%&)pd$J9Jf!>R_?Zo1z15V+`Mn#Hrv3m3uLOx41tRc@C;g5A&vZaxd)ZT!u2s$ z)~d2|`2z}7(ZFTxys)0^MB9xG8+!yelukZI8&@^5V9q!J2eEnFu3UpaJ%u}4?K$Ep zyuF`D`}gJ>>fP^+52 zOQ-k10JkCpAK&%a<5w~?`|)0qECe`N$Qi$Kf4A^C1lD6=Ae=LMDTeW?{g}@sY)XF^}0AsWnoC*eHt{z)ettx;RyfCH25lzqt)S|HqYGSOYrCVyl)X0HM_b{1*+r%~nlN~2B`~~PdOa4g z9rg@@AT4X>*^v94J1@OX!nSijt>CJtSTL`tFyNsw$5Pav31l02Ip9*|rV&BjGIgBP z$?Aq(HNPeY4}N+_G+|1$b(;7t?V@Q_9}n)>wg$<-B|-Q(z5wx!7@!>KQmofqsZZ?- zZ~N?xuaN9!W!9Jz)uG7(SXs$dIop#D>lxUDQ|Bg$tH?wh`g!E7JS2Ngm4FNGPb6Nc zA%iB6bfmPDUT{Hj2+_2gJ+@kDdaPZ?0KJx__AK~aUo+%pp8m{yHAO>dD_61=&5__126SL{5g%IwnJCe4p<8u zHI|z7;}x3qK{UaYw-UP0@QR%+ZTV%~$ZDw>h~OxHoO-R z-3eO!6LbG`6>mTH7lj0?3mu`6;;MNPm`+ha$J`V7k})*I5})@AWM5o5X;X~Uk)5rL zknC~X_Nr*B=<8JT0msc)k~A5PDR_%M&m;(XoxI|$5j{M5Q%3T%SSVqCdU?KexpRF^ zjnJBz)fOqnUFVUIL52upB1cq0QDc34+O1vTiYpK*Mvv0GpdruvE-b4X)7hO2M%#yh z=1E7T_=ER_dVF@y@)3PTA#WM4EAX>2RMy!VeVw>dQ)$=I zybs_-Z#Y$@w=Ebj@LOhNe;TqeYg&Tvj;{I%%XaNnGgp%x#i5@b**XvxT$P?E|Gt@q z<(1iRoCmyIPeF>bnfC3Vfb0h>x>&+9Aa-fuuaYq@FZQHV48pDvWiy%Ac9wMpz?nwP zwg#;E6&S9uILvT<;BN3f9cIL{RprtjKU#&}+hr`wx7kw=bVxMU>I?y9xr4_mKMFed_{^GwAkS+w1L~xP8-v4_pxZ9=y%c@q0og z?@>PceF-SKmdM9Rs@g%I6^!;Q$YoWb)S&ec@ghP**HLg`%Ll32sUvNz_h&$-5Jw#mXkbs{yA6hvoW(Jbq7_CbBfNGT2yvqEEDh!-Vf1stV3~8oq7-G<}NG zmsD?!j`U6BNZ=ga>{>l6+5#ZwmfR|Sh)i5+w3+y%1xe85PxWxj;_wQHNlIr^MS+iB z+#4A$bDH6&(ft#9NHxy$w=~3P<&bV%x9mkiZe-xao);CO%OWqErkBpF9YumCA{f>( zRkg)R!Wax`rC&yg`HP(yLrOM>2U|{W{0n=6Pq#sbSxiMl#9b4AmDI0*K*D>(Ubfjj zc^9q@Y)Tk;s9>mbOC2NlamRGJH~X5k?`^I5L<4hg$1dn zOkry;c*eFhiG?}0=QUp7?@J91KYj9)w`zi^jbZ-)Z3NGBb+9Qlmjmh7>u|izKT*R0yy%hxx5|(|oAYg`K7wX9JUZTO%z<04%`b;T_`z&AF3MJ%gz*dI7bt5as ztBCZtvu?!c6f_30g@;ytYZ-f$Iw370_j7JKvCBY7b6W1!aFj~IxJQ}PMAT!)5QmWG zkJ(@GaByTo1aoX2Uy4Yb?UAtrpFxEk{qDEwuUlu~9QidROgBtbl&Xjnx%~7dc z4>QFn7Up{ox6>_|+fQWjT~&_sQIU|9Z#Y*mCSA_93GvStAjnRgELQ~OAsN$PZ`AGR zm}T?Cp6IYxs>_}UO-i7>;UkXBSa^qzkbUAI7h%9tmAyAdr@X3MFMyp@;W?f;D}6EW zKD(~zZeNI|kiIxK6LNey%REOfdK_R0o#FoYJvfri7?lS%`#^z-VLR0n4w0knNPV`F zKtUOIGpO+HKrZ-3#OP`%#A17%S9AJk)7DEZ(q$iQxjJfacrSPJ8KfT_{hY0cGhf+j zdF%HCKwfFqRO@N;zQ?M0y$unCB4#oR59+w0XQ15VVqU;yYP>`5uDfmRESnWeiEU*v zdXOzKN+VE&{l$UMCkHtVr5e17O&Uk$tMOh+(l`Tz<30eQbB=6%kKO9B16)-AT$*}X zTyFDO#n1|kN>WjzO|!uR+>=q5fg!wDs({N448|yYEkmaMJGea;^SDz~b%me%fO3srI@DM2)E3GiBm50I!%oG#INRp!+bh7N zc6te?PfR%TDUYaikvZjcQBe~DZK}Q&jqtMoC1t(FPaeLf-nhuBRFR-vz^OOALQ`1* z1%3?=gB8evcHd-@GBA$>IEq_ARPBp_dePw|L*x&N?qs3`MJ`OvkDAsppiPGMrNe_; zj#IA6s|P%>mnzrGIpQp11g01Wb;J0m?u!Zg?9S|o zkSx?GxpV1@(fZ77e4{x{rjEd+G!5ev1=9FKe*{$7|{ zK{4vi z7jlo`g@g)0?_&jc1*D~oXB1S?kF`LgtBgh%#uWz1G*N(3@WFEP$;)6>-Zun0+e}0L zmPGWO(hHFi`uQ>%lKcsrZ8ZXr zvk!V&Wp=76r`#o_@D)=+!+@KU5a2Q}xu-Gvqf1+fXlTK=V16L&gl+j=cmehUVA?oz zqr?u9OSE1RUJsUi&230d^r*{Fi@>A1@fRQF1W5p*bM|mC?%tq)DnIu=*9%q_-iRfs zU?MmnhPrBGR<0*LIu&#=gg6GmN(E?6+lZchD_ps+HJjR21`zS;gAa$#-u;+c7#JCq zUIP%0t0#k#Jd^c-8U~>RB6Q&Jd!6qQS2*D-t<7x0b_Yvp=JO7&c~lV8jRo2}$3$;r z2e&EA-+S+f7Cc2V#pO{6y#ngtk&)8?%Ui>iv8P1zk}oD!cx}O-PFKC&UyMNb%g5xJ z+(mRHapn$-_?CD%hYRL0kQ|5GK&D>$3a^6dIovZ1dN@6x^cdSt4XMRim&s&@kE$hb zN~Z}{Y9WL_8Tstu>BbAK)~OtSzM{?mewL|BZ(dl4z()0gzD``c3QLBPb^Bdge(q~h>N9Pvzw%oCwGn56gc?aN@k!(t%5u>(_f-dCQ+?%sA z-51cqP*gehME&=)oyq_&>{P%ddh9*5aF-r=Y^krCLs9Ha_o^%^qM~M87zP{%GE@o^ z#H&$y`Uc8Nh{BROnkEP2xclXsBk!=IImBM@C`Wm!weGG=kGB}TDW@Eo;}z{)$_mVQ^N?BkU6ORo=+ROPJW+)`=L$E? z?!2Uoa7&U`$kw{}APF^a5i}mMKmWzdL+1-MiM0kLKe~1d3$k~Q5HTOu$W*bqR1q4y zUM<++L4C7*8^lHP_&$P;L_?7iTQeP_dJI~XFXxQVz)$y{*n2PQ&mq}p2`ua3 z$eyISQ0zdF_9r)=eP2ReWeHLrlZ|T0#8D_ZfWre)dO4=#0$L)no6b(6#Ps@}&{e)9 zWSHeel|gjIB!h{ruwHK(rVKrSF;sx6*GcMq;TtgeLJLwABPG3+r*u3)`OUSqZTn_4 zfR^?XJuHGAj5WtRf+sKA{pUoFMhC49jKC%+8i);6=okkTgY*R7HZ_|-7cEDSCV4(( z&9d$3nHbGb7}R!sGvcC8#_jM)OEC&N9*e5zDB5k*a}I6;}e_7cR(kiK;_Nv5arR-a}O@0DJh>IL2=4;Fg=I(K69JU7deB8%$-&@)JIq zyk2CP27E_;bsF6MwrpN)mqYRt)1s~iC>7sHG|tUsF^#_=Ab-k~lx^qdKCcXj&n=#E zCHkGpcWTz}EWo&4?_xm-M;M1F*`Zb@vPSfBTexdD3NMQoHr3GId$3YCC{L`0=oBDwpf6C?2r3g0aHZqA#NiH@JePs9#_-EA`08K1P7S9 zU3e6d7H z1cQx7SEt7?WYb-)BXB&_lp@F^ni2wl0_h5Tp-am2UZ7HLd7oRMQ6J}E013}2(wP+= zv@k7~Tt_qwjytq6yoqL+8e&-}ExmjFHpSOOUJU>}g~wck`Z@*I)z9MDAHXmcv@h$RR_+P7 zaQB08c`ileF1E>7vZ?#JFX=dKkJ$lK$Hv3rCR@=nhsV}kXY(C^M*$l2abQjC%#)`t#X``j-QwBvO2OnOt(Qv`cw*uYaNj+$5h!)1!Z`@D zFm391OpO`Exxk-1#b;&^AI*qred129NHkE*ApN1i10(G2n^zW_Jzgrwrq(N!w)PNS zhfB6-d3WU2px)NJo|K$IhJrg{if$i8+`>26q@HxK%G?pN%n^2*4_hd$Ws%WFN+x$$ zw$esYVV?|M+GbX>oHP|A9I*v4hA_E*Z2HJnIOws7;P;J z^XW6nD-$KA9#q8>)+sU3TA4~;&ria?g5_=pv zc3x^AOCu#-)Ywi?MQ{0DJQqgi2;JHzsTSf1)Si3{w$7NpIvkgOZ# zV}^+vJBwASD&^EomsynB+)X_nf|ukW3KC1oG>EP^SFkG8VA-B1!R{l?WVS>`uBUP* zD7o!mQ5>XjtDM>-KL(O9YwUtHm5j_?)7_bvl1MqQt|67@cTw&$eKA%m5V z%P&eIYdd{{pZlcoQ{H=k;q?af3JMI20QuR1fZkyYU~R%ZD$k2GOgyYXb#nxbdBf~C zdjNG0Ygb|Ml>=zaX(|{Ll@3?wSTlC#LTo?axfe4?l}7Etl)lfj zUOkj?)=#$RGf|XCBWx~gtG`AavPD_{Yh%%xLr(PbunP@xaofNt;9zg4c zqp3B1YZ(xnL$m4>S;t~M?y@*=R==eT3f z8y7dyl%ZC!GpkdB9GW8qR$@4zUD(rlov6Pfoc*X#hc=fcUVA;e(etRPWw1k;iXLBYd47L^FY8qM}T_2VzqZNQ^^W zkCdL+J9+YpF>1djdI5og)_ECoI1sx^xN}?70FxE(vB*f!+$55pvk|$NFNeyosfEOF z&+J<(wFRPwN8a+#mU+|Oasbl>`{oy8{FyQ)3vn6>o=w3cNO3vQel)>oB1$gw$X~>% zCQLcvALLnd)^oRm@_6OS2oXx3x>j4MyQQ$_yw@ObxQ~>v`fYp0QNlA+9w$on@YsEs z1z4}~P_aO1+_Y$VJrt{`y+_<;&SjbH!!Rm6Sd~8N(KNp}<6QIyl=F}{ z4|81o2}oc+J=MoJk0>c7nC9Z;MHVlKo`Z@>@fHldoi<@Kk_BelS{1)olh5SA9rg4H zG#quVFFWyhO+7L@#=;oU9g``c298Qs0M3o_ooSi8_ z6B1q;d>$L6Hv_cPJe;rOjlyz1V}8vR$SoSe=BXMRWi;DNdGh#O@I6J-t%LXanZKvj z2Jj398tOrNf_poP5#Z8ugtnogn@^2!NMBYN;?iG&`7&uCneKhx*xz9ABq^I8KsgWuHD3Q@mYk@~XMZ=FKn`h0U{11=lN4Ri= z6(Wh+hSIo=OVrC-`lP(xk@6|1!X^WGIPTVHdvmfHxs(RB?~2BIX+2125wPOcfmnBG?FGjkG9yg0J8jHk?5gO?JX_H4OR65y7K*F>T@CdHer zH!@wJ+4%}MonKwOjl6L0?K;Ypu&#ix`2F(ojj-=~u~fWuk$LSt6f5{DVW@qU4D|T) zQj+>z$jOvcmPBJ}H0nN=NDO1hDq5`rMWOd(Cmoh+rB{W3cvEa;zu5E7gyNY8M%U{} z6IzW>+=1;7yTM>|MIfDa2wCH_Jx+b_ps@PICi0+*IZDGunBy$xRLOhXi|t`6g6_R} zM3@=ssO+;KxmZjT?Dw>K1?6#xZBM->RWc%pK?|Qnt_@g(y=@w>=Wn72ligq`GZwT7 zGijis?-77QI%MGNqTWyEG^U})hsFHj0$}bjs6<6p>_nWB=CE`T_$#qdSV^g8gq%aj zF46NK^tB|ZHL(sXJE{rEnfa%-l;oJ+~*BGDBkxPm{?>ETNp*(*ga=4 zVSbOFq?+R*_Q*m=8PCZ%wdZmUfSU!YhpOSmvu>fKqL`kiJOK$EL4o9xL{yT5_ynpN z7U(@+`o&<_G%4ufJFC0H>wICMvaFrS>DV{=BnC*HP@KNW2X|}lQG+K6j`l9s(>i|m z)&UU`&Tx0%8;b`(HoE~E82iFU<%2;4_>3*7Pa?`wv7~!DRxNil-m@psKFNdI+Sb-i zX^*_3#NVab2Auj*16=0x!jy;To!K*Q(zJ%CO)C!XYi9vIVc%aQ z&PteX_P!N78}c}+z1l9$Y~Sdd=a+EC2(88=RMoj#voE?NO^5l7&dmsBV-~%Q#hwln z(3qMj9$JQif+j8A#cvWn6AUb8!Gb*FD1e^QbgMz?T%cF-x@1LQwI2y9G_Bi8JiwD} zdV9e5T;$+H`)Y7*M zg1MSc2BkW%q)FeK5Y*x3^hSBR&lk~a@I7jH+?Ftvk}ZWJtdO}<0s1q`FlTjAq^Ci= zzCx&d>9CIH0Jv4b+%T`gQ$va7L$#S7RuE=dINS|)qSj@`g9HneXZJ9NdS!y=KGL7Y%eJ||+ z>fJeIKfUxr3mYy6G=3tIF2KY=HxX5c(sn$+XtV$Qc6nVCuQ6Ol*8eQQb2J#~OQuFUZBkhYANp z2Hz~*lscprkdZ$SL8pYyB@^P;9UbJ#jrForkKy%!686Xwm6N)Aio^93YaYyzWB9T$ z31B@}*qjmIAst-}X1}-aL^n1nkH^V!)#VDu(SA`W2X*!EX(04LGXd)>&G7^(2vwrU zA~l^*gM%4*xQ_6qfGlkHHld=kY6J2;6Dwdgksv9$?&Aaic^A2U)q5tC{z)Z&MjV7G zfhg+ftkedjT;|&6h?*2z=*t0%RXHi0kYwn2)kFLk-vb1dcpeOoyX{Cx$g$35Nk!Zt zRFl|14q8y8>7+a3s0kl!=s?n%av7*=&m%0Ea-_-Lf!0w0mYWsvjd!HQt1~M#$l=iK zKtW~1fLsI2OM1j+0ibs3d!Lgh06-C!(WI&bN=BUC(b>hh~g zx~>Q+VfA-q&xc6g0l{#ELKlvfH$QJGc^TK6M$FKZnUVCirvUn~X0-vaVmej1la~u? zl(*6L0yy1*iWn+;L{q|EKGkM!c>Fk>+5OY2$)z2s-kxNi|wou%b;gMJ5OfMf? zC&{=9_TfFvW#>H|e-Fhi6B}Oha-I7+GWIGy=_?Q83B~otR0MP>dAty#B$qi(QjIYg zC9O>`Kv|P?-Qp!Rd@Epe1W3xqAdekG5E`kPcxk5I8RCFjy6zMfi!d@PC(TA^c_5H1 zJ_A;8dw|`?o#rTY+%JBS3imLJ2B8I)T-hfF%~j-3q3BF_>b>33-iPosxcgq@yps=G2;U(ot(@Gf~kJ`JW9=8aIYLeNqpO{f5xLS!;#*T!F-s(gQAbe&~Yef z57O7)1Uk|Y>=53c*PJocaVqRRP-`}Ry=&K#QG<(OcPR2kvWv^sIxktgXaq1 z0#f6R59yt5Br2CA<*dj#%fL3f!=8Wv3>V2h>V`ZJ=pL+<6_Fwaw}m%W7mln%=FrB- zi6QUY9+d9V@EM+|&pfmfg6CAj2|n+LsNQZ&4WPVd#VlYm0>@d8p0&(Ide$hV&-NzZ za=Eovkew8GZLz7n*7IeDhWCrwT3>vnCU&>N9c6MlvyoQX51u`EIO{ww74%6u=~y0S zE$&{ImAz8x)D(OxM;bQbQn$UmNWoaOIB&Zya=H<(}IJ8@F9pP*cQ)x|Xdt;adCB z6K9l)&=NJ9Af0Tn;v<@L<5oaGO_-kpPTT6+g>h0ao_Ft6ABt-_SN8GJBKzEwN_ly) z+}PwYz@{!!D?RB>vQ~SyMHp%#@g&PyrZ-}<0>#rr(6h<XE$BoLF1=7Pe zAq^N|2J|`>dCF3H2ro9SU*H%j>Z{70Hc%LMQj~d!k3Ba*wE02Lg_*gZF4`datO$_0 z$OV(ZGa9@>uUK10s$2wHn42|FX23E$?c29R(pg-@6d)N( zYnVWn+Bi{%qG>;^@uWC3KsLUDNK9RBL-G4XulS>Rlhh0`QIu(Yxduc^X9nr3PnBR) z8jTDe>c&_&-USbl_b5zbH);?9!T7^{9P9Sy!~#4|wF6$(dC$mpXT~SJ_!*-vb$94Z zs;VXtf#cJ{NMUN)j>>okaX5Rpc8%N|k+$Up*0RR+{KauS4M6 z3gB0nzUg%p{mxhIQ7?>8zu5E*d&eA#w9c@xmeCaOd!c_`^n|RW{dGnf&=j4pocRtg zaZ@lQiA>QuHxj{4J85`M#Tw8`yX`p|3_e9;#Nho#QF@l0r8w%H-XY3UJtkBBB$&SU zO;s-s>m5XcVJ~-H2JPE2?)B7@aY`3seh*lEcHb6uwUtOV3Yc-}?X#%`)_x*RJ8DaO zukDG;WC_F^ma`&=K6#>#iVC-%@}k4@YvO0tT9gSa5^sB$Eig~>URP5hs%E8+lDF6z z*g?U%fpuPB&wDi$C<_$2fB_>q%;PhQP*MtP=ImkIIPtiNc9>;BQyOmGwOyylMjK_$V$0Ao7H1B`yK zL#p&m@n^ImR68I)S~3qPkW3DQ|<;(IUo;zIZpx84IOVSP>K=`}5#FWO$z zj`zOG=N<-1x&G*N>deZCH0+}c8C(kLly~(s{atnRxE&32ti9*643Be(ZiXm+_Tezk zdDZXW`n_gp)xgfDN;dwWGR0^%3J6t=JKQl01AESq`UrzyL8v==aRh9z(x&uKZ~&Dc z=g%Zs+3EruqVe0P`7>n2E4zeh?DsZa6pks{FxE4IuC-3F*2{Mf;>|NfQCs%dZhfbr zz7O=x8O%9rJ{xF5X4VoQFP2~!iY-gKNXd&F>3a|DN#%A_0lwb7lYCeyjlJMJZ4 zq{r(0vmbN%275m_J~WF!3N3n~GLfnvf~qJJnxNEPE1WRelKR|gS%%V&`&0=Anx>Lk z6h@swj{McyIUQF}U;uMRuZ+Vd&F?dAZ9Z7%F7)E0M~&O9-2-JVoR4F&s70f%b(%df zPC6jF&NTO8lkL$Rm%Ke2)-CIOci54|)riq|S{vNJOW@|rEDc$XY_(DdJ*|4j=aE=5 zt%dLpXnMtLSUNI?2;1ojMoHNAEP` zRe}R1QoJ4?Th+O|--mmL+ug(&3KI6bB1d3>-kD5xs?1 zxTlmsgcQd*ii)EqAiJ4_psS`Pso#ye=v42bF)}5o1%^+aGk|53w4fm7zA)9cprjB2 zc7N|}?JYTpUNO%jg~!pA#u?9I7oe4YQJr^+t&3RUE0Rsfg$dO*3lD?{vt_T4DE!er z#dj}(qN4_1!j9cUW#i>1)%qF1oVECspghx4 zJzgt4*}d39(hm!&k2vIpaxx};O+D07w3H&TjPOP8)A-W5@R`G^wJP$ zYQ@w{%UYSLIVwsP1H_g{MJOfWHBJ?mw7Fp-o(LNt!h0=0$tHaWiwT3vD)HE7rYMBB zI1`+D3n-cF5+GdcjmHJCp3Ge|+U&8N_P&y7+?69fF~7yYT`$4Ia^P28Rb{0q04d*O ze}=JcGk^I4DJ@HKSP3$VqS6h_dbrD3S#vs$r{kUA&Iw@=D()fp5hf&si&!`|tZ=XP z&Xbxmr^Y=37>deroYAKsuAy%y%X(|7woPsCilFEgP3OvO963!cSTVHtLYmw<) zX6fP#91Y($9GvCrn+;BKp0l;P7&`ZmKpGI$-U>g`&V0h>v)EN)@h35RIPdqqS^#B| zk``5QIE7MWFb*h~fxg_^0 z{NPT0emKU&%|M$5&Tcd#>jt9nvS*TYB(XdsGf}rw5nel~ zyD+uaEm}aybllsP+mOl~w#6a0T0?k@hb!y52vYrMhi&W?u1NT+!-lxk#7pEouF%WP z9ZgCMfkeXJ@4LvHyl<=TjfZa5;rSb|aI&)Lwqx)lc&5+Zte`tZdSo_F3y@J?hG{{G zWAu}b-D|;eOR_=iSh)}jBt(*QH+kQ~mVXDdQbE2}EQY>H@p)tGaPbD8ctAiOjzi%b ztva|*E5ZwjN*Hk-aryJqEXZx>W9{dUWlLx$vR+lMrDUyIbXYD;Ez5d0&XWS2N$z{- zs?uUzyRWLAUB1pUzqhNRw@qxfZ?`Hh33PFfYGC)}8rHx@(aF2O$(+O6x-np4$5GZY z=IP=((<^*SoOgKYJ3Q5A(oqquM?c^AqifLVi>S8_uZmwFU_Bj8O=H!4CL#}XQ{>U} z$~~b)%gYB&abgeycK5*CaSlNbMLUf}i3$z`$D55#*AaVi>D$udJE}>%u~#QE``#m! zc@1xJ!U*qp`E{KVO&&kIMXk`sc-n6c&lHB=QRr6KgpVlX2)W+&n_e_}M^N%^Y))`q z9kS(&infD1y}~*{9i?5T%8Z~u*n8dRWpI41;beM!_1?m^JZ)-@zVY2a;CB}c4C3`j z=qa6RJMk7u-E&+mi*8OJLYI(Y6<;qlcB&D0zPTeeK+P8Kt#SP#9XdTa%E)+@{oOGi zR(6#Oh?4gkUIrE@W?@B9&UvUgDa1%LY}vIfW`t+eGEwki@!l=>>sxrX%nAFR@5zX; z_I(aw1fQYp^(B&d00Zf%-p)K^dm>(oB`yQp(jt=`j}_<0bzTieTbBdd4i~8vSo2dQ zeJ=*OrC^5oi12J*^Lvr6HX>YxMpmuvD2Q2XX0s%#>nX-@a*7r81$hF|7MYs1_Bn`p z0KDsb^Kes}2J)Fln}VEGIs1$|7w7OQkgb_iA1S%xBZr8#y9+6N4I!Jzuuu`~DNA%M zqyi^_zi2maiS(X(g9DbTRdktlmxM?o4cA#`%i^(NN?cPxloxsQ0==pGda2x@P9HvL zgXze3v*tGkfj&dMa+}c?kv$K;Y5$CG!>iI2)Rz{jbei{qM?({=`?Taw=UkRGy}zfZDaCIdCY&ym&q+wpK7sI#}oHNNkm5Ovp$#nQw&9-n($0 z(wl=PF9vQpIe3(#jUvxbH`=T6`7h%8-Utl=8O;K|VKqiD6LQ;?l`ejLk!QXtgM+tr zg@;^9Gf~dXe`cpy?=)UK^L7cpJ@fSu7Dl|raPTgZC7PU_PvY@2$oZpgaTa*Op+sY6 zxVDV0oK)`8q6w8sQ?Duc=mu#mRAJf(q?00H8q#g*O)Kp_%ZF2}6*I*YT#@}Mb8Svq z*9dUY&d{<%7pZfeY3&OI&!G`uh_!h>G(P(-#k09@^LF=nL&k2qzwqU~7Cd>w0ORB{ z(_Jx8pff<26n)YqMFJWqwdIKz;pOG73m0YSuwfIJHh^Ssk!EPWsAnE!+6UZmk-;yD zJo7nWA{9=F*m#fw@G!L47+~LFzo_hZM!kLa1olnfu(tM?6QKp{ogQ4>3kQCHudA|G zrVrwidisoX+OHtNFvNJp=(#Fx_-!qdis40Kry~z5yD;XG*K>se)EfmUN5$SpU#-V!0QpcDbVbc!=DG9pqXJnQG4rr`~v zktvF`acn=|eaLHr$m)VBca)$BK52T&z22aZgL4eR476#5aa7N$4{li^o#`T7C4G2m zxK_gFMhC93#ol&8ZkvxUlRHP$f_#$CpW#lhY^to6?zSFT26o>Hq2D~XSSVY1COWU5 z^@u1afY&tHpgw?L4$zx8hP|74?f^ssjwr&9^7u-7gw-g^uB14*y7pNu-f$9`cdn=0 zC^kOkvta=>nIUvwd)hgjVhQ;!!Hb2X?RW z>0#n-Kh%foZ_JFWB-WmmryAB?upUUQ6PU#1FZz?&KV3nX^gsBteU^wn zX^P@HVGUqDBX+H(ySG>Kaz|mr3D;ld+8YN$pm2nfCD-#qQ^6jxNwC7L$4+PRday%C z-JEkEh~Pwk`~e%xi&tA{NRJ3k^LhifJ>f)%@j`_j^GYv2k1{et?R&YEHa$tuLy;Nj z5(G%X7td$naY$CivJ2JVD9ohg$}~JFa-Iax#jYIZZe$8dMwt>3W{_6$83@Fu5w5SP*;hzgQpE%o1BM=@~U)_Qqbms)EV(pa7K$&aW^DI?8umv$4^yqkXarIz2IkMkShz=XM?E86& zu}L3Xj)4hf2H0h|X!iw!C+P(R&^fJ-Q)%C(OQD4Cd+iRd78>tJT`+_rP2R#2RtOrZ zaNfrXQ2DZ~EndZfaefkz&*;}_I+XY%BpprtDH?z}yP62w(E17Vdk7bK0ot(ED^Sb| z=z43wVj1feYjMMasqSr%#72tkY?Uyhneu{k^L)h2W&VX=BKeu(g+rS+X`gWO11m^Wx-kl%5McvAw+-|$0jL{qjDo~%>XK$%OSqpQgfkScHzl)!KhQKo|muWSA2v0_N zgCKNp3}0F0*%bg9>cJbLdZ^H^-Cq;J9#V>FVZR~R^E2P`dB-XMh7g$(bjDq=HdcGq zApz@oR8Orv8fEH{BYCqpQHOVPvSFITvqyW}#+)wH=aA4()Mt1{JYR=0JLvI4;NBI| z=PNa5rBqNvzCpNz<<^f2Sz8Af6hzc|_aqeNV&T0m));PcJMKzqVNT2rypW&w_bQd~ zU}B`+^SCLHB1w^L6QE^bO@V9LZhtaajfs=1ZH84CcJxS}xYQ+!%w2@hC-u%hH-sd`y@{R_2n_4|abk}a^SM^eWk~jSfXA{vBJx+rO_~1@`U0*te zl~aV6aO^#%lxK1Ml(mK%AW8>!w(hZ!V^~&kN4(R*>8SL;69c!%?vd0&*T4*F8%Q7W z3n`^&oZMn>?sq8NClw>$=S0->X3fp97+v6=V!23jZFS?5B!?Cr0c;tn0b4D32oF)g zeTBwUoC;8JUy2Wy`9a_V&8(5cpNAcWx%beaG%C`GKoz52r}y}RC2`f(dl=c)=U%Ly z!Pd;|>`??%qavUki@g%Wo-wYJS%SjOz9A*#VNRzfSDNFW5F9=sVBhph>n=MYESk4_ zcVx?+6PMBE-gMLtU;&LLB9s=pI)n64J>`uD6r9Um#Z4(yp?B4OutG<$?}cbiRzFiY zu`5$tWZSNDQ4^vmU4iz*^I$^A;GJ{O8Sm7DMaG6p>$qHP%~d({4oa67t1Bf!bt3nq z_N_yP`>P>4WV!9yqG7hA=4I`N^0-^1XY`#s%!-#@X|FsiLYt%N8DV%?VaNV_3f8xr zh-q73WEU%IuKAY|k-Q)8knNjb0Pp*tgs%>#w(!;Cr1)(Ud@#P(r z8X@0f+~zn=1I48pcu2Yaw6e(I@Q^RFykKu;nx#cZjIJ3^B3m9B8;J3 z;-EnEI&M539ZPfh_R~d88Q@g{yNYmuWMSBJTDqrCkBDi*-uE%+g?{FQbWy`Oo1BYC zz1s~-%8Ce7!xMdhA;94d9L8?0mfFl(3gC9xk#O(2eW@OA*zzNm3Mx4p(m;PPblyE& zMaqcfa{cJ}7PMd&q2L*~LJmFFUeHJB(_YjZ7vkp{aK7XUYq<3a*&?Mkq3FE!#w|Nf zNFS4IZggor0&f@q_iiTC$MT!KkFgXWIVsFxO1_@X7M?Tuch<8!)bgp2uehaDonS z$ZXhseC(1chWm=%!c)Zi;z00y4i0d(T(z*PhSDM(U2$(nV;Xy6?wtaqWARAdroZ5m zN)=8NQY~Ms=RVFSX#N=dS(v0LRkO4eFu{6?#2mA`fGj|?(qsf5GSD$th(Dm-DqXVi z=-`yiJ_U-TXQ$0m)s`;_Y{E2?Vj1&P$R5-6L!V2{;u%LPO$wWnP7MUhz;KJ$dF;wq zO2w~>`$gT1g-Lek&h<0S7JUP3+zP~&VBX99Wc??I=MqV%a^zhSv;0g{yec;ma+Gbt zUSIen>^3*puE~h$)WyjRM!Mq^FP}{jZo`GG6z_ymFPb3W)u zztRp0;cI=S@EV}GGt!23@YORkI;huCu$&SU6rQTGYO66&_^xcZx1P{CI1ToeJxTN>0}{9GB&u?FZiL|9hnVFo7T_@zk#NX7GZVu3joV+=QF-f&oY?0kKA5^nHz z9x(82FMGb-nCg2EAEFfMaA~UzKBIpIRz_A|iOKni|p@ zdowPzGhOvYnM0?bJ6?!naqA;K+|9@LMv$HE?SohrkGc?y%N8siP+SMZC#xXm5LBfR zR*gy{f)aYmS=N{9SCIjy;lK{P(C@_!stH5Xm^%qi9-%&lzJVU+ycU<*0J>yc4D}Yckr7ghr*oDdOUbVfY*q9w-mFmpX`dH{ zhc|Q)i&#VB>o;D`8;Fj1tX6H3F+Xc(hRSM0<6Z8OMv)3OC83MITzZi!xY~Us&*a3< z*n6k^w48}An-h^FCrU&zy&LZ$^1TOL>r~g+WPI20tO_9O`yN5`882acAaV!e5RgKn zSJt-Tol`!DT+>>@HeqMp3`FfMihOUY6o3G&s_&_YT&g}s7j&EQgDw)~^1=qKQjHdHW4I`@l9+7FZAk%wr)rqUSk}TF$STPQ;=Hb)2gbydF_O$v)oq>a_FC z-exCiRrq<&<~`l*d)L8v%L?4bpD>s|mk2%5GMX(@eRXs+nc|0JMdFo;APRfNBIc4& zds9G?pt=DDeDR_t)T8&Hmugb7kJ+Jm%Lif*3c_<-047SoaIPtl^R&$baU7R2-I>F+ zsW$ak<6_}qaL04?9yvi}eWDhA2mCmM8=1J~cH**&0t#%1-$uM3T{!o;fpzDEnNo`Z zVe6i4CFkdoEc{{+CEMnaq@g{2@NjUNL>W&Gl6{?7rc!*h>$UIC8>SIz9MnE#QCXHN zKUNhJT9JDU&bkG|j=cxZcsXfYLLQph#HmSxKA-7Dk*8LvuJ@3igBa31XznKq^_aq2 zWr_Vea>{4qEQ;Im=d?Mkw2satI48Mu!ZbKM9w<>&L_f5bP2rMgor2s-g5TPBvCu<)xK*iEV~|h)Gj+k0S#~5b zGPs)va?hvlXAFhr7u~4*gc?G~RUJt>nDnOFV$v6{Hr`rQ>lT4NlfX4%>n^6V+$;>{HlO9O-M6W!W?mTc9!tMiZ$h6PcXqSUs0gXp%%&$j9fC)i^H8P z?w4fN^x|zOgOkLNB02NO76k#oa~jDZ224UPd^gC(<%;iKmB5vzS1deA;jx*0-b|z8 zF5Esbh$2DK7~zOh*KQjNU~dDq+|{w$wJ;Y_9fQX;))Rg7-bAg9*p(`R#yxgyt1^im!{Q?C zeARDGhmxLOZcRl!~>x{b@nbOLheY)h}fbvS>%rH_esP* zqv;glDMV$Z6?7_bJT06NiuSIYd>m?HIl~ifdS?B`q2YLXug379u#=JaGm!3l98&X= z$xv^Vcb*PN^p&UTovJ({BY=EWfJ?;OJ2k&1T<9?pzr_{!lzAF1S#?x?0`)=P7r_flHx zQRtgT;;iIr_%_g~A)g^RO@W)8y*Ctrs28B+sK_X98y}{vq z@E*b24cG@x5BGXpp67Th>$FpB#+;&WIt8cJ9f7ae)5?X$s2;ABH>pp2-yUyh=EKL# zFOFkRy4ZE>j-<1(vdcEa5QDk8>tzue!0;Q~A}<*stzaYeWbvJ)X|2(1VJj@?T&X8k zOPYp{7eS%X;O=LaDbh{RDy?&vz>!ptbB4&(vT=)T21hB9R^@Ijz&dS1&tc_5Y2q0q zl(a};(bA^#9gkI@fNH}%V_SSZZDyd4Kl2E~XIz!+6iuK+GUuA6=P^ObXR$9`8s9T5 zj*2%0IhlM9bOfH?Lpn8Y5`;y>i)n6bJTJ{Iv{XjQe9siD1*P?+5jk3=tm*4kV_#bs zb$cDoV~;wjs1R+-LkV37ARX#brDr*043f2(U0gw~yLP~}U$OLFC=JmIp4u?bLdtvZ zu&lX95&-+QpWs!Zuf5m0*j$LJfnI!i>=|ClMGbcCn)?642G}9XVtAENN*)|GJCB+a z{(|D$<)`mWmVw(whV%e2V!Yeb!Vb~7$f4QsN5Nj^9L+~4&><4?AcVGN!*@(im#J>~ z>d8$SK6%nQG?@oU1VK)LHJU^eNeRe7tT|Vwgv$cjdtw%LC8QktHtf;f zpt?#EmNbnZQi)eVU3)yZteFJYF(F&kF^B8RB_!I*mb z^4T$XXx5W%iVF?rQ2|A47)b($k)p&pbj=!mAu8@gCEgS4VK6V;OhMrn6~TBYlf>EA zqi;shwnxI8R2Xf<`l(@Bv8zaV9JAM>!skOdz=4ohRnq_)!imdaDrlOXo!n$2nsu;H z_Ld0K$NG~Be!r<|SFPFxXP7^r&Cv$2#FT~qx=YQxkO0|r zXh8MUmmy(;(1&m4jrT6Avb3!vGM+B%qfGXfwW5lRx*B`9&&hD#KGG(MO5S+=M4zUW z-65TBa&CYw_AM%HpkWlA31n#3tXy>nO{|#qJk-1nphrI!5DYfv@M7QIt_wG(Q6vz* zr5FR4%3}`<^Rae{b!&Anv{B09Ox&?873-ZipV!CsfS~<%~bb-luO^x-a*E*}A!f5*w<6LZZIy zPH*zYbSHrtr7EF7;xm97&Y6*r*e60{lL=bwO5&H*wKrE%?H=Yd&eY(U)7pI6q^EKy zx-Qs}aDld*q*js>G;Zwp5@$87f_j8jQ(^+t1b5>i zhj2*eX%AcLqY%R;e|{_~2_s~#<~WA05%!FT-m_D|FxKbpHq0+&FXodAea70DILiOI zhsAg*_HJOn9hZOt=E@u*aB^*micK+)*w9xm+#F$rpJL2qS_w#-mXSa!(;KhDzO6X~ zjS5JTg8}ZELxO_2Ha9s=UVS~~D^D_Ktk?O;ga6sk=m)|4#+*QIUD9|d))bPRjQ#Dr zW3m~fdfN#6^7>-7r)k}61@0I@a}ZLVJc2=t2lO}{A$XE-HcQzwlixjPXJ_hbY;ocL z5l8ZBhKylG6V>A7zHvQ7Wvnu^{t0H&X*O~}%m7cf)$i0c-U1Of`c_%wVF>jTWCkDc z)i?xUM&*|{QZ@<*XI&_Rgfl|uBArB*R!|mvsiX1e04?u3xA1qsMGJSg$BuE8LwOm` zhQ!Q5Rbe$9Ti%3k5YST`NlvFn@AOPOh({pP=`Qv`N<5w0%4`mKF#x(1k6LmC*ms0^ zn+7ye_Om-a5}b&%J=iO2VBA zpn86FO;lz;JrVj)67iA$BBLtUPljj^%ASxMPCZSW+qV_bGXlcwfG!>-yiKCCGoYezrjt~^_U$F(xasY2PQqCxJ0rwZXF_znv-M!<7TV2 zdQcGT43?_nBKz(anlxdR_t?&!OYfWUL;#Z32*u@#h9`?R;MO&SPZu~c*6B4JB?n&5 z5_x$825ZmQY|~4>u^sFpV5!a{3J;LND*i?z-=TNzp}b2zCb4#7lovB*YfkZGXiPVx z^757N%hyClgM(;;5`AoR{s@6YZz#dPBJlAkq&B?DDXqOi{cX=2KTnC*0>CuG!ArV~dG zp5LZ#(G!$kY_1WXovOgmQ*su{GNY4Tg^N>Esg8KQcj#?N&rulKQc>oOzKpjbHk`PP z@5MSh#=NNm?H!(ly8vL=u238`Uv&Irqo47Y7KH@HZFH-oJtt!L2}<9hg+mavrJt5p z)j=xR^WMvx2lDh$LyZKXQy{)%SE4KG2fz!)(Qe6DPt%J%ScGEmjxo8O2J5@Qh`Q}z zA!8FgkqkuLco38w!GgJ0FE4KBjgFmMwVkCfj6hgJ=vGrv+CyQS1*61ncxP8|g%$Md z3JM>3Cr1anWeJ7qdx?}QtR0p$ds?F8Fp~!O(#aVDOI36r>)9Jp>P>T0x-*rYLCQiS zuV5I|&fo95)DNpW+p>3khsnx~cdX|gY`%@@@GO7$SP`cAoKYWp2@(Xb^j!7E+sjzd zmLeTpnP=ia7`+<(-pXjZtqAT8f9D$e48l!5T2Lm|CGu(+f?<0BAoi%BBnYgL1=aO1 z-!pjeo&$_{^;#-vqdnUdwg#++Y!>U`*RY~+o@=LAdpstasi74QZ?ueL&`?M=cIK%y z#;XW-XtxM6M1Thn5Hg;YOtw!Pfs-)>WM$8AMUiIa0XT*nv>2~e(k%l-^d+LM9Ok?9 z)JfpV>EeAO1G9uT%?{v!&0>xTnQa|lB|1uYozm;|dR89{;-H!B#H9lLYqj8+78Ac7 zxg7I`pHF!~L0sNSkWptyt$a6#&o|p-u=i$9mEYB~d(b7S!Tm11Quq33VMW`_qc5|y z-dR1i*>qC7o2RkH6+KrVWI(vzbo?_C`@C5?D6&*?=>Vf}kU|3xI|%H7wuI^s6oz}6 zk|sr~!Ae-A+@>VEL#QW6=o{m+NNtcWD}fW)NnPYfmL24Indv~{dOj*)YcC&77>Ig| zL$yI>sL-9fYC!{#f-?OgUYA`P<76iqGT~%I_v)E>9KP6>EqyA*Fa`u9Jr7-~g0%es zyvg&fewLQ8B3z&tsszlMdXUJKD6;c(LTdC`*#l{?H}Fbf3T|vUHbK1KLgj-uc?YwB z>nwd1KMw}nB|gq!VIHW{q;JS_7GGP!_$?K9k%3Covxoiy7kH1DAS46bt$-n%yBrGI z74ZgNqi+sbh0ueM*qNe-NXswz8;^g^9agTIoM+Mk(-Tgml7oOzap#h_hV5WS54h@e zJe(%H>hYFq7FW-WJ(tpsa;nOglK$QU+))?TZP|Wy^;|4vFyBB71ftw~(@k-!c(Pat zce-AjUEDfp?6r1u;1otd!FP7)OL2C#&Pmkds&3MN)rC)~gFz-Rz&933V2vd%tCYrD ztIBA6iJclEN~D_L4&vRZm*(u;u-PbyLC1-pINOo#<4Pz45ium_ZLzH!94Nvh^9}Ui z-KR?l{EH7s)A_;la|PcHeqH+9*x$n_e)YDxa^e*?@tWxTX^47jVjredg-ks~4b$`nyFNxdIjz>Sg%Zn7^X_K>sTbwpE}k82QK)kF zcvaO*2$$l-UagGd7CmKojE;zM^vvOj)m7wfYaYJ5=PPcV4eE*cLZ~Ei)Zw@vOTDFS z(vt{=AzK`pB44DPdQsAF419X$b`IBGYx$nsy?0g7URpRt1TE$a^SIiiK+9nWCPy7q zm`4!uwAozNA7#@*`OoFp#K~ z$uK@7(;4r6^J*$DS(LzYtf7%AT@+(XNWh*geE|~q49r@9ZV1eJq`t-v538a3MBhZC zGdXLuPxxR*olT5h7kgb(ol}txbMs{o6XconU_i~1rd_;qwG&SV3V=BWbQB=xaT$L| z@9+_TX20A@@r9Q_cB^?cD%)wz9A+~#ZG7ydYl(Fu-8_Admq*^lt6>&#_T_k9u-RV5 zrnl4$w5~6c=Z@K6>UMONeHr1NKq$LyU(?HH&+O;~9@VoaIm?QLB;p<-obIF@eL^*+ zc4A~Bg3h~%S#&}>17X_iKRZ_hhmlAwTA)P?qL8+cg7ge>Xd5qW5R^W9i9k)6-r+oN zj0-T=UI*Vx9!k*IY+ZnGo`;)DGgkC+z+X|Q0zy#bCn5Zf&LPD4*pO?umaN^ACK3GY zq;=Mya1+E>jT%h%gk%bd1hW!|=Zmud!qM%_I5io3h#MqP>rXY(qFrRu$76=PUz_60 zz&7;8hDjLH+eoa<1${kZxN~#E%7{@Lt1;+lX*bpj`w;Y?y&&t@Q1*4Q@5Qn3^aJWp z6;+|KXW%4A=X>S494$yyCSFt^@AlzggH#bU8NL|pc09~I&1sf`b$^yla4Rf*Vgn)K z@EXzPQFn=KKEIHL@qQOA`S=yl{X*2?PlZDN=k2x7!zZ%?VW}>7Ep=p_^tPWK(<;01 zVU*^Bs)VZ}c=i#z@)s?;slLsO*OfOmsJVO_ zcNbmFRF1H(*by0;n59D^1%pGY%m! zpl}e?Bd9Xtu0s=5LNPE8w-&K}sUumdKJsAqXqp2x-r_#29(Tyu zI;ARpNG0H5mjLoacNj}F;LJ~+i?mOmdUC1i^}fkhEIO99)@WIB?+SMV%3?L#@NFm= zN;utsDPt}dZ%i9Kpv%Tw#7jJH3&!jAw^@%ZXG(ORk~7=JD8wp4DfEJ?ie_#dPEvb5 z!m$b7cLRCLS`>JPoc1=i=$LbO&c#({k7?K(6N<#VIzrnm3<`hW*v~?x3^80u5A}^C zFZdX(w`XKy&eYskqeHVtcN!@a-7Y0RR}^N2I#-KFMeKD;Z!IQ}BB4uOvtB+hm&?tC z^y*Ja%%AzFUOwVu*|$C7N***NLmEbf#3&$X8KpPDt(R4SQRZ z9RkoNH$fIy=CNvlz1Rhc1a)7mR#(OjQXgmBFAryf^xCkew`GLUG zHzg%3g%XQ*IGws>#O3ygshnSnZC>A`Gsx~#vG38_2n`)135!S4lpv(MWY}*^4+Gxe zI3ep?a7aUHi;dOAuGu9DOj}kF@`5^F?dfJcrdLQr)44eY$_%>ix#IPvKDzO8DFRk8HZ@ONwOuXT%DN$=kTGtv(PYcO=dUY?Z zwN-+#X9@!DtmhGA%Tv!{1-t_krbjPaCk`4Ry=-Mi7LlIqLH1 z$TJK#1r-jNDa9E?>bnCi#BqghPWt_JeJZEb66saa9xm6Z%6avcnf4PhItxL1F=I-`mixWps@gKyKXx>^K1OLU8tO8ySgN-fBfKFm69kXDo*d4{i zlePBr;9LnB#I1fKgR?Y|=z#8^hVjfMg3c~$=NpuNf?^L`c?-jWj`R?kZj_`b5-7DS zjnL{nOv~zLFqgsF{8S^et7^^x7sdIAV4t_WaJEfklvkreI(dmUVQ0iN7AQQTj!2k_t+C~7}vGMP&OG_>5NRsB5e!D z{GRE1SFE08&Y4-sE5xaDgL8U`B8bGe_GIU++l3ohcUfubTrQ)s8QUvhtwTpdw?VbKiqDDon8LA^>LC@5C8Cc++iEEXrR%wB zqLMT|m*}g=L1Tq9E0*_C8r`XBG`n3_QJ<=9GxA0vaHhutp?rm74^`4dDtr9$9Eek9 zq73!e5*)oDsxn^MHUSGJwmUe9!<^Y%TmN8J#CB+~jEexbs4HxGB2?v7kXc#(Zj z+A-kNQ(?wUEQf6(E8Hv_c}i(8{jzdz3v(Ftu!bf|W4M`t=e>4WCHn!RNJKsil=WFn69HM;}K9<$%f`8zMM&A zmzd*n-PnZ^UkV6ZEp#si&kkOE!RdkcSawNq6;=WFPJD34l;X&QYTIF}cyIQJqcJI% z>Z5BFM!6LnEO-v2I`~?I$JLmQno7mqG5{&2f;~k-W~}6(bh_Hen+!P1!(2mq{O~*hz#H^vFZYz<3eT1AEg2 zFR~vz7ROiKmnoto?~_%$PgYE#%N)mbuFPjv$j77Br8Uubl1pOxaHJgBR`iuhtBOnK zz2(4Smlp|`#PgmGlZFHeISM(9sK*i%35oS&>w*v6D_Hk^017brYT{(`*nQ45nGH7I zGXO<@%j^&U;p)x(9GYotlvAGirD1?^D1cj0YF0a$`#bmd|0l7K#0&CBeD&HK-S%yQ z?Roj`J)3p`culz^hbd6In%L}>wrFxhsA^Ep!inu=YAWsyq&g+VEjwAkQzdINIXgFIefh%P-A3O37_Hj4;G8BqnOyd_a-iZa^bDfk)4Ih;1K+rdN^shdCa&IQ^1`PZ_qqk6_}ed zo@h{Qx}VAb>m#q);x`iJ zoI>0LJsP3;>Io`{iKX9m6J8kEQa=GIcnZF1gzGYvTrj*G-Re~j3y&-jdS@5C8-0pRm}{pkyr*gTk~@yJ%dwY4WcVP5RcE*n zJOe0V41h7hn(7I$WT?rq>xGngQ#G%+!P1w%z@N-0Cp z-9V!FOX1`8E0RWtvMaWystZg*4UkI<3zsO`+JmT9@ ziAI1U+i(co0|L=ibVGL+Xm2nm56=8Oc{fPpZI5{v7M36BdnWbX05&&~$6?H9)Le*f z?eir}zS~!F=;`K!ePs}G;_23L`Ebf!<`D-TOJaq{Ug3Cl<;dMK?a@pr~Z9^py=q4cshE;0Y4$Xct)qC;~DR#P@pV zktyjarro^&S$IgP14f|D68q3&X*FZvJI3q#ep?U5o{D~+1!;lzR@&FA2-x`3<|}ar8)21opc4=1Yai(o{)eMh=xA3Zv}DV&JhPfeK|kJI(K2EJ6mxLvuMT zdyjXah=YQ9`c6@>1d7Z?Aw(h`4TN(~DggM43e+t1Pz~DCd>B#G@10GH03=HJ6Xyp@ z$o<}{27qc_VWia=e;q;RL~znNSj*KG2cDRatUr4qsXZbA7h50`J$S3Yg86(6Q4!-= zIg(D_(Tdu%qTi7gA%Kx}m}5mdrSBJfS?=Phj*J=$Rw- z?y|XhQ=YNy4KCkbE*sq))IJp86~G$Numlyy>A5D!=f>%NxSVs=g};?m%~M zeHdUd0d`YNzT+V;Mkn;)yAjFS2NW^2H^lF;3mB6IVbA7p=$0<01Bqw1xv~u~{a%r0 zhLi~p6Ih;{3EF!ZxzgMg!~^+U53fM{(YR*(|7hUZo=_Mc9@Tv zJHr|S91fP`?k{cks$H%lLm=dBTsoKMZ4LFBzu`#<2YCLha4X#XZQ?=tS!VPCQtC!E z>$_5IA5QeihYYw_K_t3`@5r8%PN6#ABY+IANW@r~XLkmicctiy&%oDgb>)bWA|)A- z@CHYTw4c57Ycg;+U~EHTtX<6#fiBJmsWYYN3oqhcAy*qg3zru*HoFxE*L2@d3JFQp zyGJMib*~xp-Mk#}3($N6zaJ(RyVS<)ij~gH*ly>=%kW5I1m^Toxx_hS#!SYPwva&8 zrwhv#H&AI8h0`dv^H?fE!iR(;oOu1_Ngsx~JdE1+jm$rhDIYCoue3AzsND9emU&4) zGb|3oM!HlmXBZG(YxzKD^W=?I`XkiNBZ57bM<(drv#%(+gEN^!%+vOzFP&tJ`Z{X) zpt{FZ!`4Ai4DcxdQEueEnk=Jo@28_RPj*>h7x%=kATQ%}3&nYx4h@8@rKZwWMTxuZ z9QA=IJa4HQshFaNNQOCdiw}o4>X_e)JxgDt$GHE z$LV<4PRxc2Eg?dO;B0dH0)}ZdK_r)US+CUiy>sMLZ?2{Fj-Po9n0kf|HZ5p5(znUq zIT)V8gOV40-u^Z;_ywXB>BARg>M?YAFZl%pOBo+s^kCy zd@_^IxIeG!jS&IS#RgIc;d5|u>gI#aFkZK9bp{xD8(MU!;hZf#kpn?Kvyx#1;N$4c zpVn2`eAwQIN7@zc{{=)mdEeGWkbxRGZP?cM1_qpo!=|WJrc65Vwvt(q`6{p ze!hzV$$L}Oxn)N|glKh2S<|*+wZ&-IwwUu2vOwG%w0V%Mlu%0`tD}2i?kGDa*{aI5 z*34GXs#eVJSTLMU1Mj`xVy@)-hS z$Fb17q+R5A`l+0xDMn?k zaAQ(HhHK@MmkD(6T-#F_)Bx1dc>yh+rU8>rVHGLP-mVcEJme?m{&4o54(^TFwF{M_ z3(J5=PRDb$&=sdPUA;B#$bRCM$(rfs4t(#n#7VokC@U+=`9+F3E!s##9KFYHOJa|p z$8xe7b?i+|L6|-Qwhj-Eb06f*gO~R3)uL{{0Sm{>j0ldI^VpsMB1*GrUJUp2mvz?G zdGrE*zVnCUWyVlvbG&+&U_OZA=lIy?e2O%?MkUZwAfD zWOJS5TYxghkaO_4$JeI&w99G#~aa!O%0NV|ZE;$=yvZ`3Ufw8VV8v3hoVHcKN|DBH|+4 zJ6_})NJ4y-On}Z0Z$sKT1zppE~jwFMopJv)r2?Z z8ertL>>*W(wX+Ozw#i7Y9;hM1a|CMQ$A)&?@9K2i2ShX=-1I@V6f=lveslY*1-U43 zbV;Nb054aod%de>Y@V;|#3%}}gfw>?Q!~7bD#D{8z^)rkre5yHJ<{PE-TEZ9Ghkm@ zEZ|*bgH^&J+a*6WO&nDhg9QpDx033Si1k&?+`;n1z?Nhawo@b{czCI^Ib9;8G>@ns zGsC?$nkvCK>$sHk(6={o`s6h**kQojUXFnswE@^@+>w^EM@nf~i`ZJs@Ch`iAf7~= zXnSapbfA?|B}wa@L%hnfK^0%K>yYu(WZErmz#}>!H@kRdTS#$u z98nJfUy?K{#AS?g%`@IGzy1Ulp9O)+H>~BZ-)J&i+N@pgb-+>K>tI;RVibC~FLpKF zT((6NKy<|POd0s~N}_p7lkC27MMI{Y=4L1!LQ=)!$eIc2O^ZP^L3a=iz18e{@tXT3 zo@p^qhK)5vOrA@z<~T3vV{NrjCpEE}CDMKYBg25JjpUj|&%*Mw>IrVt8^1N-W@CS4 zZ=oo7vrGdOpWdi%+Nf*=jl@ZDOE$wo;KKi**FYf_Xk`SRbrj;WcKIpq(tWxm; zQ`$WVCSss*LMlIiI&?Ji@LaQ(T36Pcf@x+o$RKJcin9W=Y)&-`YABI|-N}{M<8=)R|Qz>DhUomrBYF?ryO}%P<`1VdH zTCESA)xn<%iFmXj;uzIkFB29w1IJrans^qXkeTFLZyGrtzOhFa!HKsjddD-!BG}7o ztq<#EiUKDB0M>K!^ss!M;1JUEWD)Y|yemwTx>4>YKoC_T$$XEhvSCC}6IDenQ4~Ki| zrCz5mYpzhtQXZ4vB9{bmcz4Kw;d{;sZ7n0c#c4Gw?rZn3f3btY7Fu;xBjl2!gCp1{ zt?w14>mV55Z~`0MFx-1BkX>w}w0SB1@?EX4P|_LIRcAa>hvR;27t!J5-e5ChdG}iP zlih<)cB#q7H!YDk?-4oXN*;%gaoLl%eG*F^%Yg)Ko4fjSttLEd?)E*>dE+Rwn%q8?;P}n}yN#>_&HIVyfg$1p*wSZH{USQk;?1S_kp#($xTGY(*eD=W zox4N{1iDL-bul|@NY~b4y+xYxeLWM?SLsqS)4hHar?JK36nvh3P4M-@>dQ)odCPnSIAe0Ozj(xTLIFW%1)iAN# zQwJ0uycdFgg_OpfkS)2t;Ej_G^in?0F>FdVwa_}1%yRN^UUqmp9NEC^oC}%>zC$=$ z(&UZs-a+>6aCC_;`A}v->}~G^aojW!Svrj8$4N?^JB8UL;!7j?4hde-I90jp&a*NFA`3^t$pR^UXymw=X_YA3{-8=4sRVUK z88){ipAE>(b;6Mpr4T-3bne32g#0i5tO-KzDd>D?G)m- zkCa22TAzbFuN!(BkjFhy72rn<_)1=Jwdk;SdumBk79fZFW(~f@gv5S}25Z0QDVC?n zgURBd5MVCM=x#oFN;|ngPfTrTUc%mc5=7~Ewq&8t!40M+%UNv1r5Qm9rG!j{rfJMJ zP!Qnw;S|L&6@Aj9&r0#e`56-pwBo%9?OTUF+@SYV5(7!4sT4DlMyDGnPAgxIywvn= zf@_2`kkv8+L69)Jvwuf zO%7W9%BWvC<&^;wi@qS>i*qG$!?$s{)JZ?*UO8L6c#ggfP??OK{ot1CEnfL>rOA#_igjAt)b+jy)EtqiI_P0FZxc?s0DuYxZ+9}i{ZtDNRL zIk1I>YR|a0P%od}=y;0&fL~^o$&F#&OMYD2k=7IAbUECJVe(x?<`dy_+r6l#UhJ0sOV~F!^(IWcg6k$C8AYsRiU1`p_ zmlX|{0`(|N`hMOfWJkwE&5T!-fv@S6CE#M~lWV8Y)z`AtN4T%1X1X%D7lEnbW=+>X;V*^2tv=YexHqX%;JaK#*H6l@G5VG(Cb94On>1 z0zrlI!U7?y*>Od86YhmxI9beffJ2_f8r7qS!A7Rqb;w0}j{17B(oWOKSS{*7W)C@R z@hXzPj)-sr9(@Lwmw|kd&p>(#RNUnR23(uA#Dol>$qmt~kl)ejByPCR6=Al?7^w&0 zvJ6sSKI3}toO%oFT~uc^)I(L5x-pLvcoc^4xX{h>fiORL?_$%&Ei4(~CCxD!kf}ex z8(BbWm%#^+tc>WHBr3etNpaLeQZaevzSJr~Xsk^-NH;HN$~Uo;jNM-M8E+Kyom%T`6+a~k z=n36dGp>A}0QI|YAj>5_F5?%8*Y6QNvJ8$&dw|uA{@&2DHwz%8{wN$n`^ni#_q*qD zb?>Y+jZx>$0!(iPurp-~HF28Ej{-Yosd?o{ z)SlPOaF|S4d%&buwR5-8-D9TUfng8fFgKOu1SknQgL|FePmS^^?zm6&9^x~5KHlR| z{aV5{5MJ*nAe_pjNg{78t6hrqQVj=tsjH1~#+)>4>j^>Ey77pq3bu7MEmb9LEew4V^iP5}m(%~# zvvMBg0(onz^d#nW}rpgiIGO3k;I1D5kp|b1J)D(fjUr$u^if%TGQo~6<;YdRX#kb zMkyzMOqS{_Y!-dgV;2|D-M;sHpbS(<3YQUlOY~V4%NRx%usTKV5@IK2O*>&M2#i|T z>mo@lRKR*Nb?iUqput$Bic8Pi3#@vI@Z@5;9nMLjW166?Unm|7o`P6KGcRSTC07F+ zlDX?r9}?=AoNt{9w#8gzL}v|<6M&OF!0-NRpCu&RmHc7c5QOl<^QR}ed=N{bFSPV| zQ?CX=$GtW28%&4xXLRormnU;onhz0%);b|nvTYtOal28Dg%eq1LZ||jX$N%#L5y)&b!=U4t;YFIzCdkX}j-uK` zw&5rm0ut8K-lRc&GW72{l3DspbOlaQ3P^em9F*wv#w&V`1(C*S7$kRx+(m?v;q^VU(X=v;(M(U zwNGNgSDbN<`<((243GEhS{)|jW0uFe-RgHQ_oNO$qhs9?v2_Jw7L!3=BD9l}k^9-6 zxP&J;>v0T6sJ~LD<^+Ak4<-2Ws*#*Jm@1uW_5@|G4`F^mbTWDA-hncVK`+#v%ytWO zG{`&|t(wSt3wxl?b^CThaW*7srwR!Sc$i+lYL6gz;Ku?B3Gb<*JqD(E>Rpf5uKD}^ z5ue3`t^A>8!d1zrh3dWa*Jurv`9|s4hF*`;(yS4YdK~RqL~vpq3;1gud$Qxh_&~a( zdQO@c&+M`bCs|V}>UA~8=A5}!k2@Y2X2>PloY5($VB{v;S&SqiKdbOvJEW8bP_lh4 zjKmrU5>9~+Z!@y?^13g z&t0U2Cyb_5JXnM4p~6hBd}=X~r1>FAQEOx@-4lDdum76{nRkFTpr6X%9V#@zey(A4a^9B+%a}& zs>zIogDMDsO@3|hg0s8TdrMShNFO>24^^T@E{LZS5_zK;lLDRNE*jM}#4}dDsIlj> z8{C?kWtpqHl=^IcV%(qzG98cR8D`~W@h8Uwucv#s8K-zX1Z&Z%TUpS>i5`WQEw7#I zt~x;*3JWf0_7qyo$YZP25qsV>3<|kr))n6vKg-Hy4_FxXT~q``0G&6Eca;oJVF`P> z4DbS(Ag4Gf@S5Avi+FVp5i2ZP)-%W-k;pSbdMNK@$+|d+;!`Laq^;dEmwJ?pH!h~B zlct=$qvP)lhgb^B$YVCqM$dFu%p4xP=m+y8W)}@{U$@@?5^7voH}{ek={sKt(%iuR zuj}N~n|zj1!7r-lw5sn-#}kz$HEnEJ-J+S7aITq;c7_H#@Gy+oG@b<)&E?Zj#GJ6R zR~Dl1if;}PlGO=jC$JulE~eqj0>$V^F2Zot%z^SmC*tx{Rsau{!*s4=g?h7UeKf5=U7p8j+M zbYLXdm1X1HsUP@|O*~7+PmcI~JE3geNPew*EKNk(t8@MCY}Vbm=h1ZFyFEBF(S{fz zY4kYCp?suaS(7f9j_#Py-ksOskoDT&iE_VMlv{4DIE1-+k9}aE>+N&58%cblu}J!q-eN&xtNF6#xlUMjV% zdQRZ}=tMJvriv%_rY490Camxx_PYEvsdGz8N~ZE!61PTqP(){e+VSB)m|C64zLx;F41Ks7GirZyLBdTyRK2P5DwC+x7 z+;v`pmk^r{?*Zp+A25Wi+Q9jG#yl0orwu9LNd}I~Z&1A;*V8ZrTOL1&<$WN$LQ-a- z7Bx95s<$Er;NptD`m{LV@;s!vHvmz9lVd?{MDf|?(%^ZZ<(05+=VVPHJV3vodYYo4Kozcl1`=GlZ#kASNSeksuorV-K_IU8-j@2HK8R4p}OMzd|k9;yd~z zNuO1Q+@#_$^wC0kNwkU!!#zy{>_c}B-PaF|&AssH%?pM%nkFn%2}<&u2i!@H0R;19 zsMB=3yb5wM3=DjPXh0T~dYsdadfQcS(ac)rQYQ~A)EQUY&C968hqemBdf60jHfvF4 z-x0=K<)QKG*&+{-XmdxxR0~=Ra#2+z({}6)QJ=)f)Ob>CcVm`JZ3%1QO*R@&I3Vue zY8YkDw}PyCI4+RYizAF1Y}zrhMvX$IU_spY&S_?{JcO9D2G$U<-dwEsn2t+MID!`G z3-PD5z{4bpA|VR0TwLXki>NtoOV+AjFfJf|-d(V~$3g~E{kZ}zz!Y@gU8J6qG4lys zpT|Z(xt|;@@fHWHy+jMSEax+yq_e#C@X)rN6;~Oo9^(&BG0 zy~^N>HmP*gCYYASE@(L4AjJu1=MbHd!DKi^=e$~)>^M_+KG?b4SEqpyt-Y_fAzsq) zycE5aBuW4iJ06=|nJbXTgqUHupz6sMh81F}`%Y)rn@-FbFYtg9AV)S0?hRYy(+AVi zW4@V1Nd<_8QMTrTF>?kJ{K&%d%mi(#MJV3&0A4G=_^@ilT3Wi)5nXf(V{Fv8@yv}v zIHJHzo{!yDCX?}j+e^{sL+AiNi2F`dgj8~P7_1+xH1Hf+zW3Hi}&p*X;m2n%QAgD>{Gz z?YeBuU9#sOShRA7P<*lDHBdeoOhD~KCQ{T%xibePT@O!;Zkuj{`2lNZ(%s|V-9fcM-mCAjL8DMYh^t3zel=bm;yauv5uSPvkcx$rD z>K1v7M|&r|k0d~jTr`2OsXHLq1&@22l`>an{S&6>XRhQ$ot?(_EZ|k<5xt=Sk4Fkv zGs-7Mmx)#O00X^mQ41FV1t-@{CZS=JTB2zN1e#mZjRCO$ogd~k>!U0nM<=W|`O+)- zb?EXLxND_`I++TgSPfCD(?smkpjTBnMCZX;Cyv~pIxeV0gDFUY z02D0#lhbPb4Yn)w%r$aJ>?ZVYW9!$52)7{zCMzG^tLL_!~nF&9LOf5V2)k z;n`(>iTqvw$OYxiYfc+ij~CNmZtQ<7 zd+Smj#g*EHR$&0TAAFQz#G8hcj%tA z1F0LSCpR$IYa=GoahIwEc~B2(9Q42!6h$>)9J3wK%sXkaUq6lt1$cmVy+JErOBF)d z7ZJ+kY`=IWL5)KfWf#?@Es!M*%oBhx9>WkjbtFL|c+m8=c+~xn-oO>G)WWmF$3+t) zUGA~e)tsFC0G?L8?3Y|vC@of{{K?ZlYtZ;Vq0kf4RoPBJk)x1AS7d^~3C_5q4oM8C4qy66zAgi%vEX{r`{ zVQf_;r1Fa61@s-Z+rFNA%@s19xeHP4SC{Het8X5eyEp;|)-?hij<=F74eYFw=YaGB zOPb@$F=csSu@!MI@^X7;u$9V(w2#bLII&7Cjj_$LwY2C$jt^cbPgbKaxgu?Hn7|yr z-2enUM9GY-iaTX`JhL%bRe&J8Sfj<&(-s8D+>Zdpt<$_g(ejO#-xT#gE2?J|PDCnz|EQ61MqSpvAq74tj~ zl(lpzqR2~;L2!sqou4Qr9N9KN7mcf2%NT2OxXr#)0Ye0Er+gW0`RW$;%_z{s=HqE= zxdE;HIYTV~wTWw&F-y7-o;jPRl*oYfTW~@rnOQx*^U2F5OF8$e1nb_rC2@|a!AAu; z_lTqbp0W&>-(rC~Q$Ml9s+I2*AD`6-U2&(E^-^-s7VmI27o2BX94>4i)!b!now#By z8*{@cseJ^B6-kqqgfZ6y@^0cWY8qcE@{qs<$RQF{Q|h8-qpQl0Iyf@ zAyJhrHm?AP)eSE56j57Gg+@l~b1rl~fkZA)PrMd@n5Y*%wecQ>*h|xAnGG*%{b;G! zh|!L8c%Fa^YMGcF%hQet&S#KsZdqVJC;jv?MBO4GMfx^kjo+q-Y_eG;Z4`6&2zZkT zKT^cJcq>9I(+|Zg>Wv`AR&uoAa8%sVp=ew_Ug@MIdIS9Uz4USvAKF$;2f!DmM|d|! zAO{^SKancXSwV=35)U&%iE;9DY_b}Yg|eWn?4@9mz9d+0rPm^;FNp-JMCdI;uxCc% zQo6Y|@O!yU+eF@WTw-eR09amqAr1Jx3;Dp^ETt~*sVMlS+FN#l#urRu=+=D)ejJQ_ zjkLmYRMD0ryH)!NQ27{|lodJk}c`y4d;gH z57!iC1l~``P7OLd!JuWy-|kPp0@j^QigDDtjrlMDa|l7T(aZ)apKn7(D%n=ly7@Ve_s@)N1T?!$W~IIeIfIH2YLu3n6XMh5>rc%;}3szzG}3*e4h) znD*kG%mVB(i{9$;Az$dotgRjz@6_}DhWb8>lU%POM3T4|EJHXgqVo!)6IBHS?sK>& z-dD&>ZUr(JuuRy6QJHGbs1jN{YXb><(V3?QiqyO^`5lqmy99Y^36G(u4Lv3J6%{Sj zWq6A8lSEcsA4>(Y_qtxy0p+D|k7;DY5rUEIN`g%8>-UDjYC@Fc#G5_UE?}{YGOvfu zAEF(gs*3#&Sp<+mpVTA9(G9r9o+5cgaJei)>@Ro)u#}#>S!83lS1!5oB4)M;?ag}W zK;^^82l=Q<7U7PGhhmCOoCsv&q=90>MPtdVOwu6B$p+`1MtO3H>M>LWmYA`~4K@9v zk<9_iRFoBXvwEWCT9}4I$HWe94?Ww;27=&4Q0=p~oDvx7xrd(k^o^=0!XOyz z26p=->EbzKYNVz5YjId74aRvm0g;r~cu=9V*eO{UwD>qNh32rujSW`Z@k)4dv0$9x zp#5U7fLmEA5g6OXr|vxyG-%A{Fzg$$JUx8ZYC&2$Kt}S-w3f{9P%wQWqZd0zZL|!%6n#J z=(Aw_IQ0?H-7uv9rVBH3q;)p6k3U>;DClyuSHVHwIhFKtuB!U>M9kGblx9Sy@a*W= zJWOPw%i``C3UyF6d8JP_gV_krWZ3iB0Nbbu+ab@uU8cyT?2EHJ7*rgW&1=2~FUrt5 z&^IfFfQ9J=)KnUZmpVLXsN@BU>X4FZxCZ8ocokgSJyfGQuvsNjl@-9FZvjkR^HKo> zju}-SH*ztVP14?-KQ8Qgmw-iYa9KMbR-f*?$&ClcZBtuHQfu;N|*K^wXz!H~Zqj&_LzE1}KtiXx~cN(klfxmO08y zilBFtHWyL~mu~p-J;Uof3dCM3K`i_^TdxO~JPW8zfK>ZjXY6fL-FqihXSWH+F@&Y5 zR_Y~WB~eKhXgBV?6PZ3Q7*pj$URgXZGM82zWjHG1JfPS?@BQS;-?fTHpRhX#&k-!0 zo22^A^%4J%G)-U3Qo9&wVb=`x7jxMl=FbEC)k}Sdw%Et$#Z&@hVr+RQ$YAJ&HZhr$bj0Jxr28YrD(1 zobOIZ--&j(*8?|5s=X9ogK4>}rSOmjQ+ytmH-T(fS@1;h2wV`kZmDNi?R%w!?}@`C{`V` zie%L(&*d2esewxzjVD~&a8PxnR^cl-l{H)g>6Fn9_EFuTF@kzJMIlAZW@P>Ja=;@K za$pIx>vUo_49bCww#`J`j#2X2%!4jKMyr$La~ z<+VqOJqmb!Ew_CmRK6GDdkDLr;AJOW5sz}hKztk244~Us8=s}(?#~md<9bQV^gMRN zVvsX=F^NwOrZI9Ku3JcNtZKZ;QkJriVAh<@Bv71Y<(GovDf;#bC`}#m;N&$RgO2n= z+RWBkkx#PvS+xS{d1@x!3Q?d`m#^cFcJ?$v=qtPP$HwO@yX6{Y3eaazV3odPp~$#P z3`^JR{E|Ec@@fMJFsY_n0`IL&%nB`s$P-bh0B?`S6cLcG^QlFPP~6QashQ8mQ<&(AOMSb0xej50Q(9xwK>p`i3&33#^Dh@Q&A`f7N0Q#kFvz7?pRx{ICtFa z(T>+l=)|5#$AP@{3{evMS_XCOCOCwfgx+3uzWyIz2vl$2wcZ#`Qkos3jRie*arfUj zmiTc&fX3Clfy)MPkjw$Q5nX~RN7NEF%?+s2>}}_!Vj=a6t+MM)AC*u!d4ilTB@%RX zK?`hJbJxy9>l)qn$v0a6oU@_9Y=b5oa4$2eKm?Gd_TH)scgXoDgh1VTL#@v~;eJ|g z2rHInqt!cdj$?T@3j4W0sNIW`0XK4XDn_dct(T$)?b)gHO5}k=OJp{k;#skDsFum$ zL=fKbN+^SpdG7{hraetc=O#L`jh|v zViH~QyY!hFUsROnAOJ5RQvr;ogN;KdWbS?0VkcuS?4lz$mhaTdV2I+}1hCgdpv>OU zYn}9**ZUA4J!HJVFL5`=noNtq48nj~5K7?O)@Yf|*NFYxnw(w=+uo~Mv52glK3P1n zx9Jd%=m7L*o?U~uA_2T~^b=cyCY33c?t5FFeyKVeCHD|V54ywN%h^!sP|1bE~P+62Hne(-IVZh_f?GqQ1tVjI}1DvRz zy2&&gj6kvGW;8L4zfBt{T7hi?5SCVy$<0k=dzx?{3MQu0L!smN3g}8ju$2+qTy#L7 z5LS~%#H{>fcwTw*u1j#oG{#!o-U0c$zQJdQ$z;B`y1-aS9x1fM0zLF5 z<^^LxSJsrkq;Eb!LKakR%F^nZC)mtBZ@9oMTP!8|J(m&XL!IOuSq0k(3yFuUcLjTN zG)3T7#BWZvBpxUG6TLPiWXxyo$n9@*l-R{gSll3&(y8qcWW!4ohFi4ovpt9doKggZR+ja zCdbHtgd)6AjGCvZs8u)VL?R$p1rt!*=rEX%NGeds7ghb@Lit%h@rqn@7Tms?c|kG& zxT}njl_f0Z4g*tn4|d$dkNd%`N$eF7GWNlGJaM~qbX&P@_jFYr)&9i(#&G|%>` z*4owRP(f=1NAAe=I4w(k=Om6?w(tcWqSdXT(eG125M=SoI60}7d+)tA_Iqre0LRc& zI?8UNV>>X02yhJ7Rj*Y=b@OQsB%|qzlT@5eM(m!4XQVa+epFbG1JEB|Mt#za_enPa zogk0gBcGttW1j62@EX7;G*SYd#Q{V3IIoVMKCQO~9=uVaub%rrJ{IW9KIDX%TxnoK zT}c3cO%#r&KsJv?7Fc$1?>(n0FD3H~cp%kzm2BEFn>tn)i-LDQk=cA3c3EnZ7FRcEmx^$e`dMa5Yuy zG^z|1%qRRPKkz<)&vI7Ovc{zmME!&aL0goHJ0Cpqd!?%;>*~0~Ngf_-E;TtTq4I{) zXdF`7rG|xXaN}-ru*p$QfP7<*>1DPwHQzczHyQM~ibE!~nAJ;M0l7JowuDqJoO3Kn5(U6InB#?)cr9@%*fHX= zt?zNwvuLfYe4)DT{zjcl!Lh=P)z@+d_X4&C0&@L{h4ge{@j+x*w9oa!WFJqVo~ozK zQ^Ix)y0`Db1$O4COR_31_i;b;4P^3BIHngT?0&!f?#hquvXG6HnT`?)1iO!MsJjbXh_da0+mw% z9rUo?E?_KDxd>?w?Pb1kLY2(46?JE@4r-9!3u5$>S{CBqQQXRVG;(3cH2` zm1e}P>ZR9@p#s=+2&~uPZTo9%j%uuJ_69ZCeyOcTJG4^9I7mzeAqLi>vIyh(pu8Wj z`dtX}^$`|7jvjy0yW$P`@`SuzV7e_)z!(_@CKx-X3>{s0`=RuL=*r6ZZLKU`NsJmp zIAnr$dO|-qF?_{6D+Ba4UY5r}F8%`CgFA9}dP&1VZch+O>lwc7Xx+*XCL%6aTaSKX85b?6n$PU*nR*FqynrhlHpT7K{sxSng)MEz**LmevtT+BaU_B*w{4IR45?hr=-ow*SPzLvRhtbI0drCD`kS%xw#jI zS%Ghx)+fPu=x`pPAfA}$LFsM|tw(CQ-x5J0T=qV-x~pqif`GQ0NEZ;rBc&XZO?O;- z%;#_?;_ycHEHQblJgzSt4s}j=ut0QI$yP(TV&QI3N-?x%Z0Z@bXt6y(b|LoVaHQg` z*unP_uxOJdM;0?)%qfmE9Ie^nO_OLTxl<}^bX8o_0`xn2Q^Oi6;ZCOkt!8hDFuYd2yo+zpGncCTwBH!E0cR-7CVx z6zareQ#tc(H0(o}w2>Bkj#gf0V?9>Ls714{DnWLxpg4#_vLAvam%5J3_-GDeaVCv@ z5`O$iSZ@iYuO~6-#rn$3F|G$CX&_8HE2EyeZ~-xFd{tZXJhYCvUeR}*=%RxR(m0f zDJ`iHsy7yvp)~eHY!A)UBQH?kaF^|zAhv!?I(PKi439X;#VwiBU(3)SSps$DvsG=s z(_e^Rt>OQd**DcUOrrx28tgIu|CsiCeJF+lmpA|%L`Jdy|MN#6YGDi9M08SzZmWDa z?zjR^?TOkw;8|Fs-luCAFrSF&eFq6tyAv|trc8{DD~LE#Fn-{!t5Q_wq`X0XkXj{pm;#Y17ykJ4X@n)Zus|-oK0&dN9*jYs80iG@`U&R z{lU;8vUkwHPKP1BePty*4>*)8Ys%}z43B!i!fs&1yP$&igwy?mNU()(y(a|}7|iWu4|3kHd62zJ=Bw~A&!_$RnR3={wzX(9F28(2 zD`f`#1o+$_V0OVIvAJCu`b8fT)^sb%#olQb-zuvEaBi>MgT?LEDWaT+7gbcy-JwD_ zSI4;kUQ(>p0J?v!E!N9xFr;QgK|S*5vDdV5mi2(_ctwgC;>IucVWc<75_r2v1hSKz z=X6(EQql4ZF^5i>$ErRw=sjZ#&%~-87UNB* zN(S~AQ!YAxnbWF;?8ON^A;j89HsXfOhsfv}kTP?C#G23!$*&FIR}X*sV)`Z-Noo*Z z`f=>i+j*du*<#x73L2M0)o>i`n&fc`ofN+~qh;dRXL{VC(w$BZY$o6!|4GKb z|G#kCMN=iO`#IStDzFHcg1EdLd*u-Cbg$Zd3sX1yQgx5?b>VJ?I{;Tagx6P)yEl~T zx`3CQ;_LbJMW-k3yT}z=dQ#r)_L|y167qp3g-BKcGcuug0#!gnB7Ru!+`_)|X={CrXcv=c#vhdL95+Pn;~b za~!IrI23Yb&0g->?y+^jb%v?c;!SEW##{y2#vIsVFAUYdtlScZdNh0D^1OWLotr({ z)K@^omvHR%p2Ctd26>Od4EL^g!*B;thNAnxBQj?tKjy>IaM01h*CMM zLF0;X0R=thX%$V%K#`3uWl;W(9PsG4-WjyS+kClOiZAW3aQ3|$6L35UdLT#3Lb}rs z`mhi}{8)M1;~rK50twut9X|DK3bkwJJ<5%|BlU$s1IW8pCn%wpZvqXU9L*i=g4V53 zJtQ{5;UsO~m6s;_VC|)4G-t>Jw#abE#tF_q$;S9=9a-;nc$vQhs_>M&fheE8BYQo! zCH5}IfA)xZZPS{;0PfAYt`X)tYwcb#nXJ_%BPJAfHpd;k?iC~pWDhd_$?En~5y$~#JF=Ag!$5oSS}NfHWwkCnsUqq%%`7J$FnB+qaG0H;l?;`_zdi=Fix7*Gz*yQfml8r2c1S`u5YNO-RuL!)Jj zW7Vm$a)Ic1KD;3VUq&A*6JEmQGAWg{c~MeKV=q8;t@TOBU47ctMX9Y( zxNQ$P3Gaygz0Fc2@kb_TrOrX##>~&*C*LTfZZN>)vs46uR*B;Y7IxQmH&&02j?0hUdrHW}(EbMfHD+ey8G=kUxLX{0LV*vKJb-AiPgpzWLt z9*;w;iTcBQj~mRd$+OF}B&S~8>5NKrCP(+angS6MDDQ3a#Hi?k z#_(J&6hq@^X-^T3#{ev<7nJcBZPhC^DzUt`5$!Tb$JlG2Mm?|~glc{*x>@>=e>k6) z5kJ!g{nDsh9mp%zT#VDJ7xIoGjWy;>-Px2Z- zBrds4Lq=!ftVo_Eschs~Qitn#DXdNF)@vRIN!`8DtCG4|!W~=2zNsysg32$s<{hY1-Cf zcbK-Q9D%v(j?E8A{7aJVza)X^P@$?&kI;Ow?8r+dZus!z-2i6Atv?gb-g10=y`9AE zd=k{V{F2#p-Q`_p+2rk6DQw@?jlo=>xYf&h;z_Qz&+yf;JxS*ReQ*gE%Jv~YA-YZk<+|s7!bbN1MIcAy3dzcvXNe4a+ z#B{oYiZ&LF#Ip80qb%H%qtnx5*;fTl6ghJlsD+-!XYry1AD~dSKYodz!6aDv;Z_dtXF$N15u4ad6QdS+-a?jF3DDrV&}1x=h8Md&h1PnTj+! zh)n1rIVg8ofvl9G=k}`d_|~1plC88sf*pMz13f&1UNkbrj+^lA3WpyLTxrL^9Bj!$ zC66^~&D`= z%CvP4Ka|jipd-NYhI#KKI$DK}Gl*;BHB^Xil50V7Ntj0@c}I;fMgxrN;!GJi=L>3xwi$>U~D zAa5K-4sM3bpY*vuc)Iem*Yx((BW0~dS<|j;j1K}ZUeOC!MK+1DEt?ILeE!Id#RCfW za4mPtQGFwHEZdBS?fekE-U6i6pddc1dZsq?3ZH_-3wM$p~^MJMK{NTO!I zcSQP%akF_~CsAEE6t6Nh2RJ>}C>1DMLM65-6&eQ!D!Yx-5Qj-PX}jh8K*@^FC>I~J zfCQXZU<-v#Eso5^q{nkJXw~BVTs;+_8uwJ?^0I>3pX6fLzv2Con z-VTRCRS4avnGFnTdHV$BRnWaGxZdOCSdgk}^g`UuU}{e=(;YsFS9TrcYYh)xQY7Q7 za^2QYsJRIR3>zv#26BO!^xPpsQK@!8M1q_=v5t|oi^DN5C+{A5*VZHcC=}l;*M@5p zA5Ed3SdfMEdY0W$LHfEOD1BT8f6Y_cX8LY9)=*hTia#qP^!y z1xu7AbL~}bY^7U=mikVgx`nhR>g<9%B_{g7{S=VpJ-CM8?pw$^oR9fJ&cLr?;+ z501_d-K*DKLhy*L`pGQA8Y4c$YG;e{kOU0{V1Fh^At(J@gpEgqpVnhjaPfyEsWpt9 z52ho!9#a`*=y?+1+werKs@Ug=jKx=}-k3&jaKtnj~zTwvB`{!6^& z0YOZaEP_89X^FrgQw5~8bxkLKUMy0f<4$Eu(g8-PI!RQJT@iHix=*f}TuI79YtDzu zo_GKbl7`L3OF_EJr6R{cm2tmJ#9rOflwOQ z#^ZatO?hM2BNVz6(ewZ$6dE(@9)s^}=q&mo+-!sym(;umLHc66HpY$cL5DuXEuBuM zZt_%Wz~JA1q~mZd~cK*w{PxGP^_+s zVe%PpiZ}(2Ur<l3X)ys*th{T7j)xrkra1^xuGZ$%4hPEQbtPk&>`GUfr$9^?I4cQ072@zdBrbho z#b<5HQ!vobSVnAa(xvLMAZqDZ-d7vX-{fYJ4H0)nYcyD12E|=NB)mnHF+zDcU-QZL zZjbQrakkiBr1-dLtEF_Kq%dzeZoJZK6vKCeEiz_Kz+0MU;F|Yt!v?8%hNvxbgtww& zUtk5KwMbTWzjmBKbN7%#gZD-hL1C$)?}jam4?|l6EWqZbReJ8d%Dgn-&?jl|0mf^O16L1r2N&43 zLb`;S?KH8n%m8hG-~hFhEqrC{`YDWD624(xDU%NLj_oRZ+>29-uNh-f>5--g;!=WQ4|;Bm1p2OVtqF`pbbQjKMB(bTE_HK}YR7 zH}5QC{1km)fQX2h<`~DtyULPvrH~SW-gLotjk@wEyR{W$#a;srlD@FnC?SKm?i5|L!%rx#RmdG)IfCE#$^jPWM4&Q}( zZY5V{t^_q{)b*Bf1!lcqwD=wA;!D(<1FuaJDi*6_*Ip*OL95{w4@i$ZYL}v*7VK>k z4rpwhjZv89n3ra|Ws3noC}6?#7=sa|T3t56@!Sg*CtAhjsO4hXLGH9opEfSP7C z87K7y?VT3s7b)MLV)X>7jF;l??J8TnB(Rre&qdbAMxrb5GP|>Nv7i(l%Zl zFjv2al(IZw{Klw;JiAd(Ia?qg4NY<4=~YZxn^Rs?80H6eLH*-k9dtoeE2cMPZ3e8C)qA%oss2G*x}Y|a1oxhDo=0OC0#X%db*!Yfp;5I zu_7U1-{YoX;Ci;c=@ZZyeFN>S+oi=^XYY7`J>kYh0>_QCR*7|vLD{GiWYFhsYqM-8 z0&BI0f?+#~^rC|>=I(lo@MI=lpFF1YNNo*Ncf&%C$HRvfyvP-_8G&g|K}_$Y2U6y- z@QTbX8JLacnU7o5yNbmZ?_t(G(wn7QoL4CCWy141iJGR-_uhrNA|_u{s_t!2t~W$% zUt>P4HBv{tylyB!ZSlfo8tOJsS;MRv>uuZ-w%j__lldivje1PEyIyl%b_zpHlbz7% zL&1%kfE=kxJLisV+X&U5a;7Ux;UQPZ2beLZ_r#hOq>)khemJD-@?>lzyy%%Ngwd5* zT1aszGQeS9r|>$%lQVjP=UeY8g-OXZowCYgleMnlRFalM)cQIM`swH^>b93-7Z!*X zg$d2$tb)@kR-wuWo%H&;qE2cIM)af((>h+v8VB)CUAH15zV_$v3hCY3ydmys!f(j)-bR1OT~yoj*eaoCWObBSRpq^S|} zo6TkGZaSa00d=}Q;d!-m?D$T-^s2ehJIYhU62@(eIhmf12Pp(2JO~zfUNi@`AU7-} zP-6iJg0RE+6~H9Kdw7V?5QOFd!b6wWcCQ}^d4m$AS+ldg9_$I- zKI4EhIMfZsuFF}&8E3QYJ4CZGjJGVh-AuJt3kIq-dM~ner7NFsy_fzJsIk$=VQ6Zg zSHiXrZ~GOQBg{Q-a**+I8HEVm8EStg9^S1=j~EZNxr3PbN)rruybe7wCAVXw4w>CS zOnDQ!+e`OFgyLLUSB%g4H~={8mJA?NXJ@OCug|hmKO+N{n67p>4kfi`Hers29M330 zUeU-Sh^84uLhXK;L(xXhM+=$8FoSw`*$~*YDcLWl)L#YDGqPSYx?ZZOK67luxZ)?I z<(qjp2uHZ$8bU<26qT!ZNo_l=q;RHL!jG6&o})ugKoi(|ut(9G;dYiimq4EO3+_9_ zO_V6Yx_1JXTNa9LypD=W!(>l7=80NfvJ8%wYVVb}nt!mO{KX0<9|5tmAPMPTu;7F) zuy8Fr8xOeJGSgn^AgZ}?vR{$1cCp&)<%Y04c{B_S^)5QzGQgd|>DBNIu)!Q2=mKYP zN@(c?Rdwb(6&QsI1_&huA`N`}q@(KOC}zF7!w8Li-{EZ8<+>XqI1AWfrBRYvQxlnv z*Z2-Oi+Qo;I?{uC{s@W4>&Ju(Y&wC9Sh*J2%@LBsH~7L&Pi=|d zz3S(fwK~fSqK}^6^ozuLAeX`LcAq!^KZ=O0$Asxis4^Qdi<=B+3&tXMh>c!f*}F0-*1l{O_R8Q235#2~%?5)f3pYcUXZuQn$n%OO z>?q%RDZ`M?FQRq$ByDRivIl%ro6K=5z$KaXdGlj>;HVWa|V}5 zt%)*}+X^x$e36WM8BYO+^cl~)^_2H)!>cT@x0W32;2qV>0Uxj! zeeZo#vlv}=qV$>kMGLe{$riV?znk9M*i(8EdZ9yL-a6efQL=ovC0VseZ-?33LnbEL zZ4FOJB>x@VvL()|wsukPZk6(b^vtWv|O(PA#N7j;f8@ z{@qo0>m)ASd#@4XDG8{l4uYJ4O@MSM{;1)iwn=_)E=M^`0NYozVbCBu_@2cSuR3)G$ z-0P=Tsbqf9lo!?4aSy3ijl@$Mdrwa(<&CvUGNc~T6&)&KV>BM^8s{7M6p#Q?APJb{%7)=DEJ~ zqdFU-J5aP5FfE>iVzHA;DtEk2F(Oyq>O@qapjQK@DS-6BZRo zj84mw%;0&QV<_)1S+$Dg=}G^A4?$q^(>Wh#QshKNNiqx;j> zHn#8HUNhv~Q=o7U3-uy_az=29p6QjHb|_O$$vf1$!+t}d$gS1f4g(hb{SUE-}7&J#}=jn(r&+kQ+U{6s7(LxTY1k#g(?zGmhykM9Spu4z zOI>C~&Du1W2W$%OT*UZ^+cTax$TGmEdAm5cbD=bt8xvFT^vF3PXZ^XZ`OpZTpK!YD z!I+^5q>P{-@{8@uqGZ=g>@!;rdmCo8jjlT^r_JFk8;c=8-Szsa`AAGB=0O6y^9GnE zh+XwVwm!7ll9gqI=bq5pto-s-5|_%O9(z;3QO3*LGQ}w33L(#&!cw7WuME_<*&e$; zmtxzDjd>A5xsigh_@W5LG#{+WL6nUF)`1z__MjsGUA#sFlOOQ8B6(YdG2b z>BIQeGpw4ph69QSFIh-}&m5n&dJ%^6H4MS}J*riD+l zHeh(ei%SZ8WoM$$scG<1)3wlh)N)E*;-iq9g-Q=0>I)}*5L{2GL7#X)AKxGk^vZ0m z32?OJJ=>|228UOqTN{EA3h1Ny07onlyNiFMG9`%?=4>gJ}9Yzpn9+JRp1i2J4$88!xkl> zu%>(HFu7b#%n-#-oGBCO>;My8P9tuLS~G^Ji%kkR-jVB^u-fpYxC;UMyJ= zia;7}lS_NixmJx|!z6?vSCu}w0Lk1p47e5=Gaa|!&q5;AI5JJI=cPdqn5rs$@DlpP zi`4S#fFlZ^*^VmI~K?Wog^v5$d znZy!ANp>@dtdb6*Er@B9<_sYmdI=;BU@y2a-j0EYyMoPOq_WWQN_)VqvcDH8VT@i$ zYipqWblx<_%a`g*_ktmM(Upku%5e*r!Lb!ty3Y&Ng{BoKsSF-Ikw8pqEYuz2^%`y7 z_H0o>H1!7XN|ML#R=O>ll$up3+u>~^IHgd6JUD3Qho`<5XU%PM9SuU{`}BEPl1@+D zkiUm#1zdYCL`R$BI#{Q}HlCzuy`tjTo>at_F`X5t@>~dteD(@tO5|uz{YEcO&0BZg zlYFmbQcFy(`%3wa_Nt}&NB|B%m+s9Kw?a~7Z96d_zc!0}6DIEvtokAx2{edIY=N)i zfxjJuG#hD!w|D0fl>Gu|X~4=TrA^wf^x@ppy$Cbr8+{}&v{ljqJbyS! zsSWQK-agoT<#5#g`@!~_hK^dWyhQXZYeI@8Q1jZG1P**iuCgf2BsgzM1vLeyZ?6#5 zde4Ax#o(svT&YURu~>1xfI;9dVbWO19+4x_J;#2rxMRB3g)SqAdMVCDiFM3j}8?laXfOsF~?})X&rp%RG8d=|m%5 zm(hDp#w*4EO0{p>^6umj%6hN@)RURr!c5!%Yt(x za(LL&$y-Itlp}dTow*&ti>sYT4ti>XRq2#XVI~l zUxO16wdH$6AaVXOQLpDt7R>YLTtw+$6!g(?nij>8)dW7kBGYb0&a<|HB)EkEVVG(v zOFj+sdREzwg%OGE=xj%FXOPw?XH9gHL#b&oD#CLyDHbMApGC6d+#YFex5LB^8nQT@ z4Z|$-tIIjgCzDD${KU$=S%}OLM&G?x8z2)`@r6GM_&7D19pDtXm3xRar20B%@OM` z=IPFW8?Ef}I~i(e7krGW7e!e?@cKGKlR+*X-z$Gi5go$$=0Q@o+Ov2v8OG(|%VFrQwJU^(I=((eakP5W8}tfuOu5`wFNre_+_as?ORowZYq}A8 zMl4DT`S@O;+Uel|K*Xq>lv~_-S@1K`Q+5<@c%tFb%|1a)oXi!Vg}mj2R?;Tpz5)*s zz#4n4a%v*kw|n?Jo|fZ4QU z6jAd%s~sMECA3HfTE*w-4hm&fargjA#zW2?a;}jxVP^>5`Xtwi7`%W7_o;qcfV}Prb)A;b{>CbVo}j7_XqQjIc>V zbL>&JSso!xvJ}ygjqspIB=%UnNRCu;od+_*Nn$Lt@nGbrUmt3#8t0s2EsoQ}DQzsz z=*~;s@cL4Q;7gfHA~&vXP$H95d!y;k5m=gXX`_uEEA2w;Rbf;5jwKkyz(f%oysAEtbajdCT8H+|Qm8C$8PGSI zM7&P2&y@*@Hx1;GEtr(zfG-rsG&;9nFa=d{T38S91aY^rqt*rD)p5AsgOnKcJ5YPw z-kdKWN8;7ip)$rDD{t4kHg8lYor*J&l*_b?r&8j*b^)xC7YfZ@W~dPhTSRv944&I6 zu`k*#1_2n7?^@2A;HpT%cvZuSo>wnlL>B?-_Q=ID<{=p19R^D3Lf|pqFQI1?-JB=4 zed@2UZHAP2jK!PfZuH4+xwOR+W8<-F^kl5rI-Hf8H}OWE*$|DlH8g{^XP&@`RhIg- z_DcdXF0Fp@R!3oyVf|^~i(&zv+|a2+n$8%9!~n*87G5NDLtIC-%J8HobwWm03^rYT z%N-o!)w3WEOG366nruVXj>B-rbwNm3^kOW{W4vdCCBuu^PP6Kc>-1J1_7VGY$Bp+I zS1Ac=Ti~T`D%>lyxad?Dn#@Y>9m`qSCmRZ^?~?oFqvIBbgV#gLatQlKz^=$0oa{vF zTHrx)XRtomDSRvrhLZH!ZA|1QuuxP7lMU}7>=ZRpCgRbMgZevuC^BkG+rZn@MZGI8 zc>vBV)86!G=O_+lSwBc6>oz%m!(MZdrdcfd>5P9lBa{lBMc6&#$t;#)J8Mp8`lmFb zv;wn1bqxA!*s*tNh>oVRa<^fF2QT8@9<6%eiA-2d;v0HK2t4|Nb>Eh?z}SkPWWtC& zSbnNiUE1>=1%pcnPJoa@z+2H+mgTjZ zp?XSGQi0Tjwd4fe8_?E|X?2!e#vb$Zz4e%A!+Qh(*g_z@Ik5e#xa)~_p98qh4Q=Uj zdW6vVOf9SMDZP%$&8U^_@~QH9(_!s?S{cn5&HNHzBiZyOCtgm*DG!pvo3>kQL(-wg z5Bk*Mf)9$&6LjQ?&oq3xq&*Z265hz<<_Pao;!Tka)lKCAL(aTdwA+(Oi15>VfJLz3 zE*3Z8{!lqe&al*aT~7tz?a84+p?4DcFl%d~-(w`FZjTig4^HYS;zh9PtyP^zDjt$b zw1TB*DFy^ZvGjD#oD2)gt>tcaujbx8-FhgbZUhk&?En>BoD_X)dB+c^BVZN!6tkzY z`t{g_*JX;-D7H;ly@HGVQ|8K%zDqXY%-!B3;O|h&+bcHCV+;ueUhH=3_QO zE%!nmAes-;^_!W&N7VChyL{>Cp|O*~vE)5Zu}q&q3$3Y+$VMJ?z}k=mZ)|PFGRXas z=INI-PK!ayz;C7pY5RmiW8fTYcm8}mfl~V+p&w4my-sPmd-tBR-8-_ zOFOQfrZrARllXf>(mrk1$LB)(LZrBZSdY8=T}5pxN5INB+k+8ZS@sv3^oqo5pDF-y zb0|xa`WC#piAUoWMWj&2t=+sE)?U-mK&ueXXz-dCC@>zIL{O5oP!k-U6CSzL4Ia1d z1oN&(hPuL2Ugj`dD9zj+W*t}WI75@Rrnljclb5cr8nBhfWq7uGsFMn4mGAO;J(T>E zRVfdtHeos*5#3(ed;B=r%ny!E8YYQfw6vH#mXa{TH zxY{WcI6QXP*sMayk(=m{qAnM!?UjJ%`)aLmWf(FN`iJ$k*(vcodmS)|Zc6BBUaJDu zv=Nacw{9!<9`E>5k9e8`ns)F|0&?&n$n@N-iSRI;OI7;Muh+;DNpfHtugoZ3v9FIm z+iZN~xD!xbJh9q^XFKTvVm9IEoH8_}_&=w?DmI6Lsf$6JdHx*#J zV^(KiCjfVL3FG7D8y8l2uHl<6fGuRctYQAL#zg&1mxv-m3z6`v(hUeN!X(_kw8?68 z${6x`3;fRA8jP|xabdMdGoVgyW3etsh5!NjoiFQ*=;K~6J2iC{P*MaTgsORJ9=D~u zv5>GO0JgcpL;Mg$Q!A5WT12q zqt9+H-#8ekhaOvsj{>2pvSdo<)k%}X=9x;e9fxCv+S@5I@VJK$IrXX4)q8I_<5_pV zHDE&5(2MYVq#@{`QkxKx@wn0O%)?@|cjEc^)f?^hQ{36Cn@xB=b%qjww(o+mY0&lw zzJM$^;vs*a5AkJOg{rrl)Zw!EfPh^Z>t+M4`QB zH|+69^_K;c8S)7L(O-3D`kS8FBNcCGy0$rP74R7WlExl&2!g6BMH0!*+2 zUQ*j710j}X5A-r@=P|Ej&of9iQ=vD{(ko!(<*=~IWF-}QFEm7$UzQvv^rfQlh$vDS z0`*Q=O5m2Jnb$D(y(W(VUDx7y6lXZC{c26dRu$JaN{)Mih~!El@a)mEB_XKDRNyad zgub)^UEW(3c(RI@c}#A_^raTgeN|SEnu*%Tic!ta97lzw>o6J0m8?V;fHURL>;!LqR}PYwa-|iY_eZk85haxKH347i-g*HCXoz4ORIK{ z6Y@4{YUQzTb52n+W8MWSnWR3ju^^{9Zwuu27V0g9 z_Vb)rK&8r^_BgDkF3%9&o`vNKuX<(;y;;XH1@-V3j}b-UfraK+au^WeJ9{?ZNJ~&I z(9ips8WW;fy|_}icRf&!DUhzjD^_Ys@M^8Srd4Yrt0XZCO$=n}RBBEJG44GikWAy% z1#VMa1|KL=K|$>GD$Bsi#(vzm3{rXWuD!bM zY!fj$<(Hfi_=7=X!DpU*yU(51^UE8BFK?C<3!|Qo2;!jUdSu@*P6tAqKTU2H;J3C}#~7?P zAVFmG3RZ=5r6LMpJ?b@gYOf@aVh!$b_PQeeV}yMRB8mJ(h?C4=i0;E^CH*e;|a#D1lZT%SJ4HlqXE?n#6CkaP1;Sy1xBKkywnSHmC06CS3=5o z-AnjDCP)r$YL?2s2R8lE6-ApirXudr8T(Sca#+QMu*+hsdn8)T2b7f zOHpzT!*Ux}cAqpcA;%PrOwUO8l!Rl-w%9!EQ0BgxX?Qnua_){p#GDX($H*`wv?L(l z@t#$XjPt%debk}uzHlo|uW-~-`Rq>6?CQX1Mqb)`9%l6xQ@ z0gp|Qs7iP0nDE1_Fg^oCMqA=KH9m&&F*qe|>)$|$R zD}5Fi=$e=3WQhq~a^ie!V)Vv_c8^hMK`yd~2>UVW+PV+XaI;~8Y{9gF6Kx;`6De*y zjfQ!WYLwlQ?Cm=0Pj(`z2{3_r8P;{7A+)F;uT&?2t+aGNpKI0Y9=q~Td@FA|fLJcZ zAIcyCu~IKW<}NEZ0_ILVbFnF+>>eo~-g)#;a7>8aY8UJ=&>`(ofVjpB-P0V1)9Y)o zhfuYwo#tpjILGg5x+g{n#q-jS-~pUpq7?zzd;GldwBT^?3a>rK8F^iKwrZ>7LZ2Ew zA!2c?C|}`Kj%R1!Nqt~qFPWN!nfuvHA-N3?SlgXVh^jg9vE<`M_33!S zUS}9vy*={O6_=4n zP?kzIed>Vtp6>0Gt&Yy5Q=}}*60+)XU5iMlv1i;uD%Pv0$f5uR@ab1xSB9pzo87B^ zJ9KbR&p{Ra;j#&%Nv_34L%b*wIJd=K$$^fJ}qxspI& zvyFgwZE`09nt?AS%5&CShx2xvQ$(MQCYkjzVtXq|#}E#TMiQMg z@3LQBH`C(C%pN?o*G&^?t7!0k(Mo($4@=kI<9QF4h(P2PF#FAx1UUr&HrSk+kh zq#7+m=H!p9QgpAJzCT0 z(E`y^7|7@?Cu*!RqZ6rixj~|YFe+%c^>QD3=x!T-l~%+dSI?SSk?Yx@zK1uWQ%uR(6a5S- zFTEo!Fr~MMN2r9lRZLw`ABeHx(Rhbbo>>$~B`yad*ND_eEY3}99LHwpnc)?mmfE0# zu8s;l^?ca<&KRA^(&zNR^322~i3K*=P02s}+5Zqj>eMtycKf*bU1(pF!&)Slbx@<@LifyTv(^)#Q!8X`!0Yyy12`>$L$(JrnumTJe3i^P&rUX9a%2<*(=-R^ zf}YNEVF;7AZwEUT)u_zha-cpbGQjICIDD_M=i(`s)rjh5560#;Cj2xvF5?T z+b`Hyp9;|}tFIHw?n<2t>i#-$=I=llD&q9`*iq-E-E4)(6bhn zXq$Xis1%wuv_x1Bx!6vK6L5l^<*e|YkB!izKUY{WT@Qq(l7zNZ`Iy?4G@rm-PYPd- z1)1m;jvIs?D9LEivo!;SeF7C-ffiGtRyW@I79}%@-_!DkTpDyh))6~ZCbnW!FbPmB z6F>kpW?nCJ(4WbeE%ZHF+iU@N7My@kFLAmh)K4OzcZQ3$jt>q6SH{o1DNH~q1ROfB z6LFII9x)rSEU4Px@Ree;AOmvFmDzg}Mi^en&N^bdK5=JngkRUAE_I>^9pD1b!#DR* zL+741MX6b(Ub16K5)CP0`556IV)IkXM<8d?0cFK6ip}HoNIz#KWql$Jup2lNPj$TW zHSL*j`AqSpzZZ6yyHQ2F%QxvEk9utJK)QK^OnAE_rnNeszKM0-7WGNVJ!+X&qygm}7*= zo(86!wg56v3#}(}?qO^xjwP(dGlQNFfK(}c@bKB|zGyIo0`PQ@wP&i(OI}M;d~=-) zb+hoq6s5c%ij*rd`t4j9T&PtEK|!Rc3U6oJoaSK^{V;y)Ybj=UuisMEu9!MTVoSK= zYWWpTVIlGu>jw1d#c4ximo#g^Q+Zz#4*`72lQ$j2Z{Bc1sEFrN=q76)S30P*Hzn(y zDe{*+0tnRg;;ttA9!K2C3uHIwT4sh$FCE3QC|hO63V!1&kAiJLQx-UN+gCzDoLIp9 z(!ms<@B!@bEL+k#z&KLnq&(jzIN8cG5BRN}iWDOfV+TCkAyXmceMYS(!B4_H^zHeB za25gzQyhNF^C-G%fStrJaAY$)oLFVNR7pLd%dlQ14}>uKCB5n0m1w4HcfP#^UnC^i*Y2%C?O`feSVkR#n)~{= zJsDqiikdV!zql6=)jk=tW7tL*=`lT3Z^81V4h21 zsM8X!zYWaLb=9ha8lwirxnaJ0ESLV8xbfwJddxD@3}CyU#cJHdg5Ao>^W)MCo->_xs#FdiOSV@QO0`4GOJoxbQCFOj&D;DAW0;REssp<$Sg>%qABe9 zY#Q{+J%_q?s08&|ZG2m%hiwbF!F=x!UxrXwo0YFWn(HcAb6*Oz*$%t7!Y(Q7gTg=c*`(A)&d$VF-ivbl^bx3# zBy+Am9;X6;y#;=r{0O&kOJ^UxfGQ5zv;(!_d^b^x_QDZNtCoZOXansX=R@&no{bBJ z8g5_HrgPVp;RZ|c)lRG@$^EcV-lHerQ%IvPz;{d>L%LF=u)IUvhA@^3wbU)wZ=!gZMYC0EF$`8*-nq3{ZIj1F z$YsXep=K6rr|hmj3=bRP)lol+iu8DvFyV%lqxcM#q~V~{!+038PNw=bNRl>})Nm`D z3>_UHshX6zbW_4W4HoS+)eW)*F?2>`y@ z-H?7Wi{U77np8c4y6G_N=ezpEA?w1zK^|m@$2Fn2fowqupo~_~Fb+?+sABDa_2BZ8 zkj9J-paT!nBU(Tw>7kA=NE(Ps$X4&iGy* zMsTr=&6y>8h(@6iH2Mpml(cn3C3@4Z2X396G|7iZ)gKQOMBd?JMI?CR27Fs~_=~)5 zhpQi-K9}$sd2l)~nHI9?(iFne=$>SWoY}RsX+3i;^`_%!P7zJy0g~lC3Eq5xt`~{^ z*e^z5hU(E2fvvpolbFiKB8U?fuJ}gvp|{-=;N*u1UA{5#r4QFoaQQR{YgZvs$C^4uvx?ldC z+cMFwv8s!UzV({JP?@K8jxVBS zI+h`HpgK@;@Qg-?UP$W$9boGhQH9NJR^w!TLlLC?$~d!ykvA6N=>ksfA}F@>5Wjv7 zIS#}UVKlF4jx7u$MYty(dirHPK+V)$5KCUM?k){aF4$(odpL*($^`P;d_LcAc$3eaF;#_b?3&!+5MCkW6 zHS8Kg1j#zEW|&}Bwp1NLH5L5`rPYmy{Q^bWKNw_lZ1!T_XTh?~c(nh`IKShItkn$Rl3BP(v_ zjh1zkb5mI@7J8;#xGDQkunE^Zt}9V@KptqzJ38d1zS}$#-`aCGQkyY+y zMdpk-+CY5^$GD-87`+65^^!0w*^YZq*5(<|l0u_<-&~DIAHPSn+Epla>8msVZvu$l zGmH|{mY9d<7f*Tz4iI)#*O#5yucGdyi_}hZEAX7*OZ5No_y8ooeHELD9?@@jNpTAwH6u`D1M!$60G4PX zk`ZY?K}$d}CkPu8ruW9*JbISECVcORgsu4zUZcsy`dhUq*fvp~U>dVi-ed=JAg1nw zO6BxsY}?=!lb%?GCW>WKX|IlWz@Cm@sg*fso z703|H3gc){fJ5$H@p>jOa*JPMVpwcNJiorytd|#7k=EY9gVav=We~&X6!a2Z-3y@` zcFteUK{`8lhM_-y&0x^ld=vuV8j(%?mqJUFZMQLnfow%nBd((@{w!tY&Cz4sRGe&+ zSMUtUcp4EDDfdl1fz8`3k1E7p1;#l+0*d$z%tU1ZSSUOgGN%L7w=R!7Armx=(;nff zDhD}Ec?&25JcO*bgv9T-satxyo@QG=X?pTNRtv?Y-ZN(p8>ggsc&a?1FDDOZLw|=iu)|1RbPJ2LrNxS9+CsT?qu>qDHWn5EhFK3L-|LJ_(s-1+3nMN8 zQq?YR9Wss8Krhc~1v;Sds?nDM1cb~ss-iBVO>ILc)tfI~0`n;?sIFo{&I7Ev3c_}D z4XD#W)Yh)GIW$gNu_dD52hRyO*u?6Qa5e)2ryZvbUMTTO-%B%iK}BY-JgG;cPjoF5Y?PH6JoPA0xH{+fZgdH@%K#SLSLoG?2m7Qw0`hVQ z8Se}ODW|}u0Y<9K$F4;JSj|x?<5+w7q;nnzLW;4vjh|gMokBex?pLWpGH(UZ%LS{; zUSlBur_wv0X-^oi9KvEb;n(SFAoW~%u=y5<6JtlNK$xZy`o%4z)A%FRiALg8oGAnw zU&s>cFz8!xi^)tw10Z7Xvy3Ei3~g!4R^+bmZZaJ_*&d6>mW&hj6cS@q)G?(@*1YX3 za;Ap?Cw10l=M~N!p0PS;F1+K=P6KRb_D_ZUOCjeg!4kANZOQJE0iyFGpM)p`dNfRr z;I1D{ZTIshMe&zI*RwfJ_oC-|FQT!sN{utpmpEI3m9-xZ5G40dHHmQEm^UxuJ9FSm zH1LXJ0Jw35ePD33SQ)$f9OMaQj*1i)q>&$uTsJ@B=OooIz3+7zs*+BdZV-%-m@Mhc z7$OW@1ZE%sl;F!5Y|O~ujob8^Lz**jp$w}@t9YW%HBu=X9_WhDu*)N%Y@Qqsh}@Y<4x<~sqZ#ncD_PXtiQC7#>%-6e zriq^5>GQ{cR`O!s9rC*uTvEmZdMX>5mT!Rk2KlrN0JkiMrmv5Sm@O0SCFS}~iDOCC zc&sO@-$FhYFnLg6A(O9qTW7XqWji7f zUIzBPhoKAJPSYx@o;&nBt%+DS5wYXFBRm)c26&3wb9#-MBe2Er&DOC zeIqL{*ItY3nqk|!G44xMlrQhtu0}`IWE}Sv3_M87G3z0x5MLV$1fbGTw$W>Tqze~| zdNq|)xDm)zyK@&>Uk-_WITT0NZ5=QR0i)&CV;hFvxT#%)h<;5YvvFZ7Q<{w%jqs;L zkv#gwsdX=<@GhW81!4O@TV56RD`T=!ZpK->gjWql4lW%=8=Q7^EB8VVnthF1P z1g7;C&p2n-iN*%;0HYcopO`1fv5YVS>Dw8|7>~OFz)tn{{|%!GYs- zild#*8!m-gZ3o5fMCCOZeUW)4W&K{uJOyFP$E}XY>*>Lx;>$<2ukqPpQ4&0g*MJfx zxy6z7PzITR*wp;#-ZIYgF|l|{2|dqQum_Z|)8r}3r>=t+{)`eWre|pH%mX?1l7ku~ z@8G3$zD4&_#BAaq>L$;2KoFy2(1snXO6O4J5Xz9ib}_S7h3j&`8&s!pgqn;Ls#`(b0xC)aZ>7%y=dc z2wuLAsux@n5d;jLgT_U$*-V_t-sJd>EB5nNTypob%D0$J&yoyY^(Y@k?QIZ}#JLZV zRFtsdfdPdjd4T7WF|ScYmG(|~v@PDslNj#%VvwGRyDG+ekDwjuL8Ct;O#~tuZJMoA zNRcfS<2(d`EKVhPjI+$e`K#$gdR;%VkfQ&W8uxz zE)8tSL6agJflK(fAk@cQ-EC_k2aaoB4MTqAjhS|}s4W3h(T3$~rRQC5e}SZIl) zT5>^088liK$}6v*k+r~0FnVK84d}svAl%-|+Ogv9hw^ycWoH1c@S!T&D8E<45u%Ht zQfsur{&redHlWy`ixxakU|zj4xVuMW_;6t^k&=kLL3ytI8PGK=T@k8u-qhZM*g32+ zmz=3ZYh9f+ph~VqqDafK-_HlS4|IbDW(^3gu}joXHcJkYkf8uU+-7UW8F(hCd323D z`7lM$X#w3l`WBu7JV0d}nWbs*+s?_zSY(pPIy`_)z}FyqZOV3#aHu<`KWbS7MZB6i1MQ1ZuOwO34|WJYpIG9jZ6^GEB|+nxQoL z;Cj}Wh~KR7O)?oAM8m@OvTuoZ;-A+KIiEaickc`_fV@lkDRcA6pi<)EO1!m z+^zQkK?Qh$t+3>CC4Y-{;h-o~(CbSi@yGoxKaxj?{&cm1~z+{?(7LfUA_paHU2HWj3AeBhu%JaC{WtpA6 z<-WpU8HrsPiqSV z?DkrAB@t(zw#r`4cdpPj2M??auHG9*<=c0gkv&xR*txQIuZo9w%xcy|`%ICm>3HDT zq6WVO=Vux+xdhw^9!9m!?<7XSA4%KjC>K6Oc6Td|Yr~usD#UdV)61?jhH;O0(`Iu~ zma{FKI(ZK{im+l}0^w-)s9$8g2Yj@mqI1f+B3L=NTvVB_tnSUlxRDvXCl3+n&1{H>P0W6ravh`$46$tQ?ytNU~m)T zksLn6l$q&Q0{TXl@>mjkfV;>mbmyEo^I2P;?(K`GFLOl~R~uKJ_4$f7!APE1Ca7DO zuWz!()7cwMy~nOu6^jR4isXiHCJ%W|*+4PiII}zbGL9Dk{JE?$9>Zk~kyp$x;XXj; z2r+`;K%{G?K$XnW$tmb7y>MMbR~>vllb%wnq6JE0udl1U-0ca(ZITl#3aC-8HQ;8S zOo++07Ea&ciL5qFCvUG@aq8i=)qqD6BgY{=%?m&ef-n<|djVG#6t~VqKC)fs*CP~Y zfqizRokrkKpl@U>O|i>Mg?Ludh1F)435XsMdau@t6#>};Vxi(|NVk5}QPELeCs!jT z^6;GqdSJ^SF6oU}sU*|vz1jk6_d&ECRDVy>jHAK|Zwk0==M80I(iE=&k=`3Gx9rA9 zyvL_d*VqG_=*le_ft`eH)TnQuv{L-N@x8XpoRw;w_hgk^C}*;s`@>A&X(qO5TkMpD zqRH59dE)6Fn?pxESMq!U;IdaCQy!5ci!xtxCe=QDDzc;9%{KJ9GhsIYeo`*A8f0;{ zOSR!(=UHL{ZM`<&(&2@ zOc%(X>`)U2{VCEQse|uOcCh$40QI3!sJ2fY5U>dPPW8FnJd}I5X^w4AEM}rs^8vuw z=t?s{7z~%%!wVRbPQVq}S$;5{ERo@DIMIt*ef=KSCHDHFr$GwrD+?({xP4@=V#{WI zq6|$gtRG#0n3|7c6yoFT2NrgEXQf2F?25`y@2sD*JfN7dda}yi$k|4+#Q|!wbTHRD z)a8+_;ogbnYcwzz+s%%~UW>L~nORdgRn7xNN6FE=3Jn10+od?vLo)7+C^k{LW84O9 z7I=E@y^1BbaO5*X#hWWjX*hQr5@0v(uX}`O6K6yyFr~=2_`SEKqyi&S(5twOKZ9sw z^FIb;}cK-(d6%+@tHHesq&ETk4w;cXC#$+k8_^=jjy5^#mz}fI01~ zMNJ+((+R^|0aid~Y==M%k@rY-kP|tZHSHNZBMj*(t|p{CqeMRorQKC~zK5wArTXeU z?RvyJ4&E>CmhOch*Y?P$u%Wcey_KGt0E)&Fj~*D&ml@uA8DScZ5=5Pr5AFx7^P35w z6C>`PD)A(ZNgGg2VHbv`cbvvBP8UF|gYlXup$8PO2_7u?%0Wh!6|2vJJUD?u(SAO4 z;DlEC%1FzF$WkuH>jG8Qw1Bz*`fTP3-o!j_cUs3)v0IVQQe87!HM(Qed?+%!w6&Wp z#gU%-Trdk?<(EjIUm^)o>QK!c6o*W zG|BbNuso*4JjPR}#^<{}d7%%yFznSchThs}iilwhD3CUNu+wfA!E_H3JPfIh%0Le9 zjXznE6dzziw;+L{8d|V8*d*2G4O08;1;D^t|inQyo z8ay1Q3Rjq>_EhL8Mdg|55*=>k-j;nO`P6+}2s(TOwcYH5*-Lw_F>#Jr z0K9k21Qj5Zp6xZ+&7(!7@F%6JPXU!JbCyFA(Hck=UOS9W(><&z>lq$ufwpj42YA`Q zM7pvdxIPpQE?y(QBL|+Ddi*4?7x7l4b{Kxxf{|~Di3Sg!QrTJn?n?m42O5eXm_Qhp z983DvW!;M0p*K1@=h?~h0pJ{|TroSu>jU4FpjI8KnP&ku%0UIPN4%j0KFKSR`I^j-~53;f3=Q z8ZACddca>Mg}pv1o<68cH!4O9?gFXeMKy&)XBdC{9-sq>DTZxhEG2Th@#CvMCnc0B znAIe=XY*8^yp018+9@HUR6BpJ?=hy8g?9#qB?!Wca9g6)yO4XhN3|>xqGv4ze8~uY z3NS@%4rE9>q<&9|EXyMY5S3WW-?Y_63F0m%JomJ{NP4`8il-3>^BUUJo=OC?FRunOI6oJ;9>_9DHdI(QSazcqMfj&${XO@yV|+e>LydKFhJH`a$D8&ms(EJ z#BjitRC-#$T(1S6(hN-}>(J{Gpfpm;o{dOf)71yAthn0-sz@xf#BgD5uaody+-e%F z>IBxjQyAd0N$Ua$5_gk>VR0llaDbZYt+`vuT60DZ2JNWQcW)i6*1e5-H-%G#n2R0V zWSZKZjz>&nkoN&Km7wW(wv=*J+5|_3@hZM!Ea}Bkw+fuv?Jd>ZO7C@xsK?F|Br?Jx zkyC&Z3WhKke(5cVzISZ<-mgZ~&vl%&CPh~!);idHM)bA7IK#9m4}xq4l~SvUE_Kht z5ZSfn=OkK0Ch&B&=s7g_kPd0%>hrVBMLJoR7iTP}hmT>>3N?A_Jg4KG2Hd@<7p+Lc zbUxfQrd)K^+k->`Lgom~0R?xSF9P=k@#Z$XQ>%vMF>eU84S!6R}r7x9` zzEpCk-Rhxz=NT+G%n_m3VGnavt*41MfuQ$QWO7wQ+F9&_jK{1t$pwG86up9xc+ZO3 zp!Jlo!Su{+J&P1w_p-LM7k$guq#%8F7WBq^9_d!S0*+jE9?i4D$<486D$md?G#}66 zR9^sGOB6+z=nLQJ1$`|lOdu^cq@HP*`l6rgli}H|E1ym@buIDK7YCC9i)rz^*pgKT z-mC#*2?pKd!Bb%?JED=KcV3#!zSe4G&nOS}iTBwXx(uSM*X#6By+W#A3cpHvx{NPh zH`PPOIi9B+Y)tqP&XL`p(u2z493v{qcg?K*Lc*-;xk-aIz{7R0Ca$&3C?FyB!;EMS zW}`kvONZA#?9SbxVV<%eq3YQ_zVK%ytr`yjEqU^-z6c*U1{z5dLTU#lL(1hmE)Iab z)sDq&$xg6qda%0Yk5kfBjwTIvJ3yGpf+YiA%VQDH-AAjrx4ik5-7CRZWWqbR1kBfD z=>Z?D%S_C0E&2hy!EDW13F7v(a>Cg6D+6zFnU^-|E%nP}s4!8@c~u@L9Hf=!PB6B< zEMn*Qd?$|i<;6#WU6P)%En&P&n$Z$<^;Q8)A+eo=+qp3Gn7)Oyf;-MBc zgEt=SJF1($_LY1Tr6!D?)$9<{bCj?7TrDdW8gj{l_<92z$WU&CiP!u!f4M~P<&tG( zB5hOJV^ia0W@N~PE0q}V#a5l|@zKoiaq?P&eH$-B51#Vg8$5dS_Espk#siFZ#jprlERBi{4`Igaj=DHJ9`K1Qd1Q{KJjm}x3z9#|) zrocpI{YX%#UG3ew(GG{vn&r*n2k85VW}dQ5qQ5}s*NrN%ZhRJ4lr7sJ|Bvj2sH&$3#F`05raSi*%TrFZ@l(K`H@SJls6-3bRLLoWVUS6}KrCiT0*T_fsbSlBwNiH-bzp z%JY~gt1J7+Uj^{p!^O@PZ*vTXIF%6x8&;!N1gBQ12u)>w*;LCjl@qm*)lTnJQrQ9_ z6O>d+*b3-zW1c2bxB!iKXs8` zP#M=%E4cU?Myl1#R^t;RnGMA~OUJB$UdA8M19Kb+A~9o#ZB3e2{p+ zx{_|mM?F`?lb8FRHQtoeOw86JG~gDO(MMfn3H+SN(zW|cOkA|&Nzn%7bEBh@c^xc` zdQaGj&0@vEtDW56x`4Q(T`mD6TdChwu5h8z^RcdXNgdBPn1r4orV*<{Z1&1XO*le2Hgij$U7_1wEBMSWyA5f^7t#w%?nx@J3&-5O)@BE?1`Z=bO- zj$g;zqk2^e=a;pKn;AkL#c%M|kW!%R)v0$5Y9>kIOvpGS92$dS0!|#dK!^vr54zS= z1ZGDvGQG+R6effn?Sk-8XV!=V%jdqkrt4GbfMj|)lxd*?D)&0*WhpDcBraMqvjtp~ z)g#R(78NO*a@!BzQ1FFaJL?!>u$1P^29_!d-_cPz_9ez?v9#cT)jFZxTH}IH5(jY6 zHf;pOL+*)5b{42DzuWQV2uE!&&n-$Up#v)kwAqHV+HER-XXbT<(#!Zdk{?)iS^I0Z zaN>c!?&f;A-GcE*@3Nk}eby3H5qGu4oFTP^lSAVCYP$u$Yf4w1Krh4^gO%M=efEC9SW= z#e_E|G{Z<5DTf}HyWPl!c8`#NRg3aTEG?wpdL%PvK4EIA2Q*l5es35LI}{dOE%{b? zMhq0Wvvyxy|71qa#PYHK#Ax8u%MvxP!yWFhP!O*0unOONxL3pyP#;P zIff6B9FO=sFugl>oLF^~$#ulF1jaxGS|+zM>X78HrfIeglCr`wuf6xUP@br!7i+ek zc7v%rfDMB}$~j+{%kI>afFKVXdpjaCN}R;X0&yjZP)oU>p%6BrEL|NNL1l;c0zh^X zav{A$auSbxn^Krbm6cZWRfZ)1Y#NaPY5;(3+708?JAZX9Ba4xR3`cjXGX{qdWf2l# zyUnk{vpQidfS76Ekk^)r+|%Fr^2x7Sequ>;Avj7k6%~DRZ^#dxan-!ytPmmQTxMQ+ z;ckR0^_owfro&YkBF~z}h?@d*ki3|nenm>yY5~d`uO>WR?Yw^S^5n4@SgE)M(rE8U zz{@JesU9h=Qrn|^DCc!U5A2Ppp{#2h8_(%Uhwp1#6+|m^=7Q%>&@Htn7lb!g(86X7 zxNW%Ilf?H5Y4AqTCpM%x_t_?#@ZK$a0|Fcg(!S-uY<`S0mTwT0w$p*C9-jg`K&Dbr3eIpl{i z*^L9x;Ax8n6ZTZ~d2rmqEeSFEgmG*m2!gCvu|FaP)5{>>i)3**6xhs}cvvzXvNL}4 zE9Zlo2t;F0KI@5B@c3~PrLXjm^({up_;C$`WDGhjk6k1cK(zWETX?dDDlG%6rpfp z&Ef48mr0k0F@I4n-j(*t7?}4u_aKz4{=E-$ScSyW6 ztld!p1%1PYX>ls64CPIb`0xsaUsT+aQII#4tVKuaM2;I`WCS%YSUOwbt>QXWFClYc zOyiL-S}Y(Agx16rb)H#G3Pqir3M2Z+6!y@Cy%X8CLd;UswTB^MLO1@{483oP`gBW0 zu$iM%0Vx7iXKWF+lG*0GDK?a!mipsErLl0EIFUm7@=55+C-op% z0ts1k*~yR+PAH(!%5gt^0?|^A+Ve~r$Z_zN;t(Ht&6DN4g`N|vXzSi27jwHbP9ry; zd2TK$3VQ4w^H@0W6-<|9H5VQD2TP~AUg}2GF zcxs60O-X;!a! z4W(f(O@i9{00QT+q4D~J@QQ`ZQ)r&W0du)!DZ@#3R*4R;><1t#HSUha0#Bj@1tBNo zP!D{&mAk^34$e0LHs}<`}D^J7k+m5ia0xgviU@OLi7bTZ4>z zf%=*jJdU)3?Y$X&n~g)&Y2bt`40K~ks?zU_Okw&CUnj4_2{5uFGYFRT#=em8a-~5@%j{sN1LK`%p71dycD@TBQ@K!;i!Q`Ff*P zX+5IzRWf9FiskhieFX&-R2nxh2P`;tk10&(WyFYo38nBQ)JZ7L4He$qP4Zpc15s#H zsoTl&UZ@okXPGUZRs`U(spqUlAScsTkCU=*LmU1w>WV1utaMQ(BBikP>(e@EEtH+ z2;zYEEMD*lD!|)kvQSlUD9bHL?6#9b-G5GaagdWTUDQlNP*UOH`iU_Qc&)JWkSLkV`_*l6z0SVH|6P+Z|5fkV|YEZKGYV4JvK1bRc7P@Qh z8DCMv2wi&JkmAHGxtvuJDU-_}`a*^Ml`20gT$879r&$lPt{#hH_W*R7_8H~bcB(jW zvL^eLdwX_*cD2kim#LR!UWI7du+kmduGJ{8SDWZi*g*|qA6Q*?Ra2Ba<< z@}h%K0QbG;O{sHMawJv1n^8MLd#K#gH9mQO58R^DpHjDWlAk;r$5Aj6FVzu`&5RyN zq8sCYiUjP^h7fOZf;)e-6@0MJ84?w5I#)FLN+=u;;?t<_@8b!INn6^xYbMhu#tvT(bi0gOh|!l+FO##U|Uzzm(cCeiFHlxk&fPd%?D(y;tiH z@ub&!VI*v@8A*ict`5x~2rXPdGSHa2cc)xvZ;Tta0u(KfR`OcxFxkDyP-d^)V*_lm z&WEmG0Vulh3Mu25f+GEV!VEiKl|=ReG~1)_7h%)c2&^l{Td~rCl*9WR9{{#%2bMmU z4Vv4aJLwBhA$52``QB+_JWI2=sMsSBRelc~D5j<4mR@$0sI9i+zy?H;#flTk5aFX8 zf756DK&7Dzb;~LO&zX>fge%){97_2JWGvz|{NUzn6QhG3Kd}~no=~SbgQko+^&W8- zSP4HA?dMH*1#<{|``kIT{NNR=3D$Gs8wk6aCt@uX9ZDNl6lgMd1QtJ0CY;}5N+}nu z#_fwUYZ}aV^K#17XwVFA)HGVyOyXAOB2@7gy?&)WF_h9-BfMqM;&ki^U z=i_>VT5h-JKyE>uLA|O3AvC7S#-iG|p>t|g`i$v4fNqFD zs7T%m7>=OyJHO0ViqCTZ*ZQ@GDs1ShA|_G}@tBi0f{tv_Ba$M8MGm%u1ealE*>~nb zBuJ5k4zx{d%|69dP0prX(t8*)#p4gY@|=QqAnzh1ShKga!Lc?y)5a+Ba~gGo2#iB zeI>77qys_f)`kLPCru<}Uwe4MWSfN!>*_sV5lHvojKvnz#6&W38{RYCNQO6$bg~w& zg?%s+AHAk*hInq^V{Q}*i%9JBWGM4R-`jCd^z)=^vS2ix8g9JuR@Zu_jBP#BqN4r| z2JMB=P~$Y|j+~T(Hj*K7Ab3z=B@}FdH9_tHYPP>LZxkwS-e&9`595iq>Uu(*uA-AV zF10m_(9CQALgxBFLY~EmwNNzg2A3}*Kvp~;(24F{cf`x4!xAPbJurr=JUVBCjBqJ4 zS22M{+M{qTa?E6>Ta`)HbCAHycVu2olp@tB7m(sbHWsw2>k+=ej!|l_j07w?8=oC2=R(F1Ftr?%~LyiqaBkLJ!<^XjIs7&biV93Q8BvIz%BvpTt+(v z0r#p_CPDO?YUqdyGa#U7G#lT3;d70V;khs0x#nUz66LgnP@xBsMzcC$qbL^Pa)Qea_#TBB`TWplSB%VXW-=-B2vC0t>C0d)#Y(R28~I$plS_RFQcQc$XR z$O(Fx>*vgl`7}zI9&c|3^R`~SzI;gHfHqUlUW=r1!^Ilkms8GPPK{qy;t2*fPsyR_ zW!;^N2JxPf<+C2}J`n}4N%kc|n=ACYvy*F;R^;_?Cj-^Aw{HvMBOm98WHL-gl!EH#{~n zo^8bsc%Sps!-7Zt0vn?<<~gqFFgofgTXw15LrO-skcLsY$cxi(#yyOc6<@Wp#2&IO(RN?7ht2v2R>S8{pcT{{W$HG!G; zV%WW;Q{H$P-Lo*nG z>MP+BQC2=)w-)MshTXpeH>8bFMF2uvG?LAk1-Q*;zGqa&&4A_|A2Q=`0XMZp^b- zP|J*Z*DtjPrp5-Z^)+V`qF&Uz9)k)_d1V-Gjdm&{YnCHw+>QDvRnV7IwV}?n29LoN zp1qD{r%FLvkGOWM%tTsg9W$~p863t+uRU|`Dd}Sc?PzQ}#oUp&u=&fXmlJSe*LPJ6 zVA>V#8iG*Etmmkh%lGWW;>9^Q_w*F6^0eJ^xIHiRJ~B3k)Reo2g(LQYX$_4HjA=cv zzP22g3-rJL(K+3#m z2RR%z)?;)d)`O*9232H}lQOB`1S`P!%8I{~s9f&T=6wF-Re%SlL zA|p+a+lE`IGC77fds*ReCey%3??m)P#Gt@qe2lcHqlTf80~40&;DsTU#*Xu-x@&gZ z93lfAzg>xT?$I24EEK&h%ajkDUv=kWj+vLVU=rcx?ue;?`BZUiC=jVUEFY5fbyfw zeGkQlvrz>0S?p~=V7tEr1Uj4C+NMn2>>;zXWtoQ8?Q$DJ^GN#%VcmtpqE-Pg=@358 zxJMGN2cO86bTBX2edWOP&Ol& z2LWLnPI>o6TR4l}T&oJuOTc;&u$mqbYw)arL6SQw&`qmU;d0lrAKX;bhgA&lWtA<; zP{pQkr^2bW&t*Nc2@EeQ)Y;O+O4xjDy97+Pg3gml33Q9Hr2q9+3%qXU*HkWMO5Q!MM<@s9A&=L_q2%I50|2q z<1w}-hr|jfWW;HNVV=jTN&*VmRy3KbvQ#PidFyP8l`=}SC z?cPEOOIV6TO|Mm7mR}Fa7A&;Q0l8DB+R_29lB$Te-P0RLsvVXnflC_q*HNz7z6|Lb zbPN%lRlBivgXDCe^+p0btR`<<`58q)6q_(tzI(akv)6BSUyq7wJqCYrFX!>-qJq4o z?BJ5F;p?hi8Xy)X%mc#Jg%)Xf;@ll*6XEE?2jY^WDgb$fudOej=)D1)n`wLAk7Nl- zU!PMxuw!oFS1TUIh)|Q;$B)%JfS6+H3Rpazo?4eg^D?893_OHbcNPqf?j3wOl>tB| z)TiJ~uTzNq6_dOnUMUvl2dJ}4W3sjtvy76+-uwcDlrS6TELNdQT#^gC(|}ytEI2;3 z@-M9-38R*u;j0mIK-suS)rO<-*V&@4%rqI68E~(trpC56ULX*K zt6;nS<<-El3barS-YGYol)1e14A3zaE48joq(@XTI8t5SZ|gX^b#DEN(L?ZIh^k_n z(NG1O~C>gHi^Qw!Okv_8bc2$-g5fpk2lCieBoj*~9m!1UlbP z4QQOj%T`xob`5(W-GXfFcyY=R{N5-r3D7345^1`FIy^cRz4j4^0mj3DFy9(J+Innj zV&X|bZYQw@o>C(nwy8?iDvji%(j?qHb*e|LlZFD$NFa61&z>0Lf<1i|T_}?~1@8&f+$r?| zyohe5NKcYZ>^7C$L9{Xov?A#tqv&J3pz(Q!_%JU@>rjal8M?%3r9-=DIiJQ5>7`R0 z%)MJm-hKA?aZ9JVIyJNem-$O5x>N<;drmG0i~ST*(ZoI5vC;<{z3JtHA(qMM!B&qq z&ml&)9>~h`doi6~UZH+@)qYeOuLj0sFQRj6nkeTO+%qJfFr7XlcuW4O`jNUhthtT) zkas^1W1-U|%5<^Uy>-MAM){XmxVbVX%mK=F2QOSy++0ekksU^6?rpuqTjdaf1#3X# zo5PunbU}9ue{YmC;vR{JI?-F2fsRzG%$g&jrhLfpv`0+LUkJGm!wj&ETFyCn5Lj!g z5zt$blv5q5%&Da?+I%FaSthUZS&ke(&EURKLZ`A(--WdV)OKNThQZCLmnc5&8EYMI zB6#a!jYcZj5>=_ecEsZJFgU=`Dk3E?%sYc+c;M)9#LUaIN2p~@zB?uD_ZnQ#B}OZw zfTz`NiYu4LUZpUssywZ|rMoJb%nR%-CF^6?cw{Z}ntCk^z(Ur-B)#>b!77AQ6nTzi z1vWiqF7D(g3k8%So>gGj3ct<=;JQwcSF<9-(+J8rp?AgOZ!@shI^Fp-7iJid8-Z9s zcJzv^b=VMfgWlm8t9T}P-3#B@ICRa^WtUL~@8o1rRuA--BeV_ooCJEtpN%>vE?+Lv z107I3I?NtX3p<>pj9G_}8CI?oA1NB~i-&Y*7F$%5b7=O?=_;FFp>Ik-cl_#I6GM4( zia`4GIa*mrk_5b`yXYd%c_~TT7G>Q)bC0pr@MwG~VUr3{#JirPLkKxZJBynXWq_^o z3tP%JNOH>k@HNWxK~JkbL(>$$(}vmy55@JhauOz9B3mA8?=;a(T}GD&U7-zWvqIVS zb{M`5NLG%he$YeqOC}Dvd?$SNL&0}#}*?t#%rb-PaF}m z>?A1nNO?{Thbcj#wHuKMky_Mk6q-IO$i2vDZ`FUQv)c2f^DT|g>7K55`L)2wfSpYL}9)qcGSjB<8{L8FIUuMBH3p&1MosZIq=+^SpFHQSs zNvyjDQvq*PXZyRg2jyJ(it7QuKL-z8 zS65Q#o?sVq0}jaa+@+i6Os$k8iePC8dTt)PYcPafimJP%R(ggwOxP@U)ZGDZ2G!pn zZOK*zD{n)+4(d|c)UJCbfu*=wi*mgMjrOpZ#^;HfDWU!j^iJtcY{ZX}h^^=Nb(!dC zl3Xu<^B7mAz4TtBWej-@uPNg$nAKC`_lJ_xa!ESW7xqZoW<+TN&iTa}L1Q))lfAT= zE<G>RA&j8ax*wC-Gc+R5PLg(os*a@%x~~%EJSBc7>Ge~?;GDN*6!Z7 z>~nIYt=`5ifk>`1h4nNBA6Rg>$}7Tsm3EZ@U;YzzrIdMth?E*LeOVa<5BY#sZ5QLQ^9r+KtFKxH(c}ezTpq%)$`i(;l+Iioa^~m`jK|ok zFJ2_@dl^&nz<^*KN+rvRvR-5~#h}{sHHZ?sLJ1V~yMEzXKv3)_*9XuqwZ`viTk~wQMNtB| zfsrw+P%1RGhi@|V#PxN(a7#d$ouRPv=QR4F#}K{Kg+vA~JnQgef|Vmt5uC>8Lo*j+;rQ%i;H` zBTbXg8}V^tmmIu%XU}bk1w2v;y+h|75@JdCBji%Pdy5lLO^=gK_G}|w`|-+U)PB0< zpD)C%ZgdbMp{{!u4F-p4kMKRwk>P5LY)VGl_MY9f6vL$@*gVA>==T!twkT|-%rfjC z8RfA}saEHoa%J|jySUU-29Dw}VzG9s-FMgYfH`a7aFFl?F<>d|yKV3o&V7#|6a%HI zEv7Txv*rZajmU~e^;n+?YJk{!wLQE{4kqdo3PmC|6o*{?-Dv}k*G1de)8sA{%9MRV zSaZG9i})U`JbJpzr}&B-pvhMPY^Wb0pMs$xa_BioFvgp1h`ipnS!fz5moyhyi<$)( zCXrw$JcRw8$}~aESjToc0Sg3e3WJoWD^{h(yGP`PHKV+=jNxJ?JC^SdLfUw1I#DXN z;;3Bdai~qXdV*6TYw`q}l1I-p23xPt#Orn8dblQ#oMcn_=wU`~ zsm{D+97ZBE&}1j>%huE>jeUb+#7w~zLsAlCTzGR46z=y9y#jB{O>Mj936*uvdvc-k z>IJ?4YIkWiXgV7zfD9rHgK&LoHt&izu^qa^JNhO<7h11e?p4VHuaNcPCnDX$B_2*O z$xKyU2Pth8MZ9m;SvS`Cy~E^uq*-lw{!*&?Hi~PUoso+~p~dTM-;!+2!&Vnk@iuAf#F)S9h?{sqEYNlPQ8H{xYkHJBVrHS%UaW5 za_~`>AhZKbn=iRUzvN=nlAey+5UhEMHI{Xa1SueF;#=u{GwL_a`(j=}WRq~%JS~1* zYvq!fueTzVlUYBO${$0SdNd-T z3$qEm_7T$~3K7<>*G#zaf{2{V1JbWW-{~}qlnrzqaa&<6Gl|YB%hnA!9_i}<&@)es z^?2bB@;r@KS=Xd_==Ff^sh6Uyw#?IZdF;>L^>rUc=Bv?I^iDN^z@ZW-Xv&wFOL(<+ z9-QbQNXNT}M&fzEK41?mjs@naQphQUsO_e|E=^i0M}yN?doji4#*0TB*&!j!B!+_k zz4NG1aED*SNp6R^2{LWtdKr7hrS#ib5%zMERY)S9@CS^s^xk!(dmmgp6V)y9kibA~ z9F(Y0ujg>)T=P~FV7SdigYWt68^5|)0euyC`NHx#!5&r^1(U{}qgctq0$-GFp=@7S zQ(v8V0a6u<#Y*g$m*K&TeP9l~S{S5b7!1SPPC}Uc*dnN&nVjH_ z(aR@mbaA0l$?t(^h`kg~0K&z|f;^&4c#Cz5>%K)p6}IAH7Vp+d-!r@?8f}(l`yK}I z^krN*7#(lkOYwMym4&sFvm7^%-HsT##gNF>V|FUn=Wl~}Sc*ILgx2(qo+eBtcAU;*syn9# za^3Fdh3~42IOEnHb-kB5@+QROT|I&3FT0e#?2?wtQ@uwE=MS+Ttxq~RC+{eDU`pBw zTv3SD>&mpaR_%PItgr~cC=7T_<$~VI0(9uMiCotq@Jzx${?ZHE+m&D8r4|gK4dDut z3m}vczt?%DY+kd1);9fiDy%)ni79C3)UcY}7?>+G5u!?*(8X7n zAz(eI-fni;i@YaWAk!;Y`0xdHgb}eFHjK@CGUydgL?Eg*xOuh;8Vg;K``)D^Mj2e6 zl*B$$d&LHwh5UfVL8>1;p?VBghG*-k$X>5;`fJ$~@w2GWv(`@pL1%A`ARiUqcW2>m_7(TahXcb#Z>gMh}__paF{P!wYt26SB1 zn%CWAfKX?nEgRPcO?*Z|?2$cp^|0sE>uV-Lp*Vs&P;Pgf&udEUaniemj%0XQ#kXT` zdIXp}))qNH6QPhW#VWX|p9#~Zzt&fl%( zK?uuE;K9DQv_}L2B+0QT&+lw9cchGV+ufC>f$$|D(Tmv{;_CwY(#z;eFGID(1**lg zPK_~lRXwMd%e(i24DU5*N}u&ENOk%{MNpllCA4}E=A01WS;U-(32 zHUIQ$^7$MSW=_3H4LT0DMMK25DD%{13IT1aZosP4r|4XB6I=5Yy25^@MyFGd*d%PUu%Oaq#(;BaErwLCLMN9C3c+9~7---PK$ z`4;Lnc?~z(PdrUf%n87Z5*Jtj`~jf|-A*!TZfiW&g`0<$i(VdFYSYihR=8BD7X;H; zUgH$Oi9krB*@^p8l3}Rk;s}*yZ%#z_5N?6FT&9;u4`p^2ZtDqqW|$B^>QNWVJf=Da zHbV0OLmo53Cmw!=A|6_>#%PDH zi*efc9i<%7lXvLCyfjKLlPS*yCHVOfTV}8YQA*~8*N9TCutbFluAD=#o8yRhvQA<@xHR%+x7Lhh<<0s}?Q$C?gAP^5*tji*I zCG2H>`Q`BC7v1DToT?;yge{Lk5H44P{ooNonGU}-W*=0K1buE+I>^nZ1DhGzC;)=b z@NCAD5#wx9n*DXZRioE{S2lkMrV5p8co~e`;gW2H!RWvgl9TIRjg`nUd&OWms)zAv z8F!Z#&T!D=bZ}Ifi^$R=7KWU%4S5Cj0Z`_-h895D(^Tl_zTiPw)+u!&uSDa?MKQtW z^DeebyHKwnQXusVhzWE!fyiuVpyVBT^!T!@%W=cyT+)*ceHp3G_>KGT&)OAH$99j{ zy?6nl*v{%C60jzyp>)k~-JDA;A$KRVC{_~-5z5sInGvL18nGL&#Uni)(+rC)3MUMu zKEJ&!cp%!ZjX8v=m*@Oo{8@7C__L^Oc4pf zBjd~oE#hQLxxpwRXI&Pjv5MWR(<-#m4tO{^i;B_V9a>dz*8!I@E;5X(>+bZ1@D8RS z)vS5+!vi`aJXTv&>$g$xMBP3G^Dn_d2H7|zvt)>gvQw8G(aqmWC8Qb}xIh+6wHb4r z>%h4k!FqCRi?ikFSzOVjRt9L%O?o0P*Ge=(qZb9s|1>NH$WHii>*+R1k=DIYyocjB ztPOWeI!q7?H}4|f0uJO!Z^56(Y z(3~1yT4doswTd9p7z^+V#F7jlUfp&_qMpe!pniPm&aiGSX~0@)!K?Iy)JcmCd*YP( zA`fU^c!OEnxq{mRG0!1N=AL{p=ZApZM+ibKbd3~hGuLK~^2R|usi4f?Grbipoa~8& zdh4bv_^7twUQbeAoCR#oODN6j@SU#W~e-V&d=N@D@6g)vW4M| zazNM?0})6sS0U~B(;F`9y))qRq{>bieU1Wb@eW&yZBXWt<%}cA+pbYtLlSCFgP-NR z^Y(d@@?29VOh_oUdYt=$Mj4Yk(L~U!&K9*3nU@TfF>sT#u8>*Cg>W9tr9X_@XFWi= zat3yev+MlGdZ3IOq)$WmZLqWVD(W?&pFILCd~`r!K~g^PrW7u9;qj2A$|e+Tp@V2Q zYe22}L`@gZmg22|M~mlp5BL;iM^aOPBkmbKh$-}k6FUfx5=m_y3N7c<5io7CgT{bh zTuZ@Ac_v#=q`DuOsTS80341ofn>{rrMSe*5LvnW`y%ARRh`JrN8FGz!3yPeu$_S-9 zR#{4AO%+VD%m>&ECkaac!|l9s)TMQI89GiuK_>NK&zE7LUxu||jRoT|&H-~$kfq;= z6c?-YdjlQ^;hstIhJtgZrXI$_E?<(bk5=oBHZA#P97nq|E<^y z!4l%|drkX*5mU#bMIJ-i1J!z3m@6{TA;@%zyZCm!j6%V9oR)b^XqUo36m*=PL;N(B zq=$4KM9VF32V)dgu6*6E#_=JJ#*m7khS_Vz^s|FiS};9n0Fg;xnpv=MLZiCdt15VS zWhlbh$rkWDWV+bFDw>}R>IF1omig0^$HEI9NfLs>a!@bQIqp&9hN$OLh68^T1x(~% zStzV{+G>l5E9Ly+ctG*B6sPwhWaE^?B=t?>`K5U)tb5vO!x6jZZ7ph5r#kGaRLNt) zrD&(;We0=Ltra#~V7vI`@g0~50Y=pBLuKsb_wLCkRp>37^#djq0AdC}UrufnRSWdk zPJMFA5MadSe4>b#8MhWKoz) zSM8Djpmxq+C$1$_a+rBxh6*Ixv=l_3i!KH^0$qX&MrjFZj$5%tC-@S!2|4g!b+0T)-36m@wZIhWEzUmnfTpUFe#t!9QBbf)g~i>x4<_y6ozSSL zA#EYe^*v|@vUe-#$5a84NgazD?Sv7Gp5@|;))0fgs&N+F# zComW0Y_maj6uSE2y=yeydH~TP4t@Kg%<7&*y2|W?`@AZBNTRd4Wlvk5X}oE%aHimJ zg-9j9){V{{GpE@#t5?HDUim0t(mjz0sfK_lsC4%R+P2Y=%K&Kny1>I^IHQ#i;DQ;r zZys$O2ZL2|tA_Qcj5R|D_L>>ftEn=DGlZwK2 z3Lo{CEssXid2s%qa*H}UU*%4sUmz_{b>T@*U&e{jzFI0kC*3{igK?NdR8v_PR(nFE+@8@$ zOlLgd^W@CfsFUZM9WvL7M9YdAjn@bn32~Qp>%y##Am|%o{Y%sM*+i znfS03_hI8Q^;{koPtS@)K3f#nt345s;>Iopelh+ejdFtV40`#7$9Bt2!ywSeRSz!SgbMHjGk`HU4x%mS#)$0fd$?Xx zm#F%fdW?e8=qb36+oNiiv23vi*3Skk8{R|!L=y4W4sm@h21LS zcPd7WKu0()gU$n-9}C9#S=ba?U&X81NKwm5$GC(ir@WMg&S5u>66$B*8lal%Q}K`w zKw0&w<*7n-O1Da>xb~Q=IFn6Vy|clzgA@lg6MEb}5MV6om*>`6e5C+3nrnyy;_>@L(Z5LLdX!$Hs>mJ92B0YFrWYlmtkRkMt4h8pW7Io0( z6&+QDQ5-W*L19I_)E?Rld&3VXaLBZaEyfS5;ueVRIUB#N*C_E0lp=V@<>j`L+N!q^ zUr6kPPs}s~#>tx+;U%vs@?1ICtm>!fxFiXL#*O^k)*ChC!e&+5xRRjTw{c76P2M0| zdT?eA7r~q*=vI`PIxD{C>Ibx0hCr)hn_iV_UNBXMr=z1eaLJF6(oRjNnT$)b)Df7w#KX zz_ZbzM@r_19rk)Tg+hzXsPpaKmP4vg%@Ll!oW(twqIYrj=EW--v55o-xh~g?DBX*7n^w+69~={HeZ{u2uaqV`#mo!)+w2>tOo&lmJb&S9?YZzw3+G_ z`@(S{H5>PnC(IZw$M8&dD&m?Fs;Dv}C$~8oPi|f+@UBnEKnv#C&QLs1b**P1DsO2k zYiI+}%RF2??VRvRs%5#)9X@LEpsfseF%o z)>GBl9;~sU@nb175L)lvFqN#FIIEY<>rE(fDS60O+W=GqHMGlUr=7Cp6#{PkcvGl- za5{wLofZ)QVLJP&X_d(i76%CV_$?ixkD+-M*?PQr zudplQs$Rsr__WMFUzg3qyG7RMiP(VmqD5r9%+o>2eJXL9l4(bl8n*4(oq7?Aj>DGA zA{z4LJKwCU0G-!pq1?qMYg!bIrZNR@0&AaL|E1Y5QwixV%tBh2WdmQd6YagH(L=qH z-5^<8ZHVLt4N2!CO`_U8*S%}@@@A;vJacI!N;E=_Fft0X^!ZHSKvT94Vottp4onFb z5;4>^DK@^kcCqg8sMU%u}+;8rfCrmZv?~- zM5zFDoe11!e8}uQPhAmd;gqLC;SWc}t=K}*BK26>V>;Gl=7Czy0l$6S0UP=PM*&%; z9@d(f&nW|qIry#a&WjAGOAF$PGhcLk&sGHTZW;PEq75Q~ zx8fWtd68RHpS{Osk6`zuQiz1f%Dp4mdOLZE%b?tan-kT8!MDu9&RA$zAQ% ztwNi*Z=;$0c^X{L>yS|65tI-I5VlJin=OgkTqxSuFfT-% z-QCgm|k17{o8pChk!RuwH8=#!f-5KK|6~>6d0%``D<2*T^2%RN4fJ+f!C1 z!R8~Z_pYjg#x6VZN%Ou(bO$)}9J(@j&#%CSFbT=aDo#o#?(yQg7j1V%YOr|b_7xyf!D`jllw zUcE6L7o>8Fp~2W^6R%+7iJ`(>0~|q5=rv{vL4g~b%d1C>rEbD8O@oIR7~Xfe&l#wf zyUjA}^>G|V3hfy^+7~7Iywzct-(yo!u@~06F|Bg>tS>I{0w{|D&U?AHowAZe(t=A& zYZ-WlxJIBNIp_^=zr*Nqqy-qAm`;EU&~3QK3Wq$ed$n&9+kBk?8m{pvCZ~cU)CuP0 z>m)4nwmG@Esu{mVH5|g;V&IFJX8_I^J-1hfBX*W$s#3W(0?^M>vVeEkmg|vdK>^Bu zAgUMzF#5>ccJFW|+a+>F!iK5dLwfB{DmM+*wL|R%Chw>ScFAxMhx~Ryy=GqXF-O>A zeT{a6r;xG|wS4vRalnpSCK^O4DZf>@b2IB1BF;V11LL3rpiF3`W&gWE5 zFASPJRH50qH_HVQA0S>PSjQW>ruAjEjIe^bCRft{H1tUIv00FwISt*4cjXpzBt>D7 zJCmE1@kBgo*-6&lM%4rAm%8rbuPO($QY*?KUMsf}Ikm80 z$nGk(Cz5S?1m{Q^Xwo!VuCyMi6q~8YfEuZd`!hZ@u0=ZWd@||gkF|#V38KlSQ9_q2 z!7-+$tqTRt1%hGyCJd=5WGF2?skEXS6ZK#UKlXMkft_P_PvtSZS@-yKtbZeNqcyLapAAq z{2iK-E0M1RsOPp4V-Y(zgZ3z#+DKxSfxj^q4(G%(cu+P5Ff#1B*IEm?$=VJ?BP#1cTIU z8M44mNj*$L`FQd0Rab9CLn5tVB-xTl+$jp>>mBQgA>=M5JxXozS6B=b99A>v_8pGxns^{Vzr!g-xQ+`JuHZK$!DcU2&> zC!TO5Pa^CdOS>wt;96IYzgD81f${WvF#gP{9@frY32TQ3J#2Z*R_18g@0@5Pw4{x7 z#9xed`{}SWJ2^hFb$dwt-YIR1`V{A$9R|;;h2y9dm8t}(i|Fq2xscoD>c^0;D&)nM zBEPzsMyjFr>h9zgjNjy&_BgQ_lt?xi9e1b7S=Hr^HyQ#vK-$I@>gPN=>g0TKKpAJk zQSL{~H%*H5xJI>)?j$uxL?ywiJ>}fV%_JqCAX|&|J+kKL+hhyt#s`DznPg6)*R_nw z1Xrg1RtHiFSvAFV!yB28d*q7D8dst)K1CDyp3vIO^mQ(FhSzvYIdxVFXZs`9bK6h^ zB+unp_3V&2*+faWk11iys3u++GfdrnI;WD zENBV_J#_RATNb4VGf=U%lDN`v!lQOPz?^noY`NGzlDs61oPu|Uxo1PVE5xI{PB_%g z)cgi6kF6AFMan|q3NrNh>ZFs=WJ&pyIZtNWgF1M@Bajm9R!jsA7-$+zSOcDq^0-M~ zL5yPJ8`vf-9UOg0dnv_N(ZhtiXdk| z3)-d<^a`Ohq2xaA=67VG6YpWc`{|U?dwx|nPeC)~YH6hAAtR=X)oWjiq&qBteZR|X zl7aCT;-x%24I#wn&-T5y;>(lD_ex6affuR-adFETh?-dt`yMku?OTV_h^tq+4E?ln zn(9h`tIf>btBjIRiE~vPv3kO-`r^T@dJ2jrgLx<76otaY_({^4;2>#^7$F= z@^f&Xkhf?ldYD>ZFcdqJMF4}nUNoLfyB8ScGAyDWA9dcj*yNoDZM zG=(qIg3mgAF@@=I>&WZ2$5n403ba>x%elj5`H|e3@wD;Y4)! zB+uCziQF`KV;Pl*q% zs^#$ks~yCeNlle!S7&>@Y2CgIx+hy>6p7UV^z_7X9^DmdgGk3?qn1;_HF6?>+6W9>RZp$Vb41dz!q zcanE|V(PdGH;FEo=-YTN~w3{T?`K za1i2nZ*JPNEw{Q@9S(}|S8hvg?QZ+1R4)&Op_E&m#H(Jgm$_VZhIrGKr)yns8_$Q% zP5E8(WO3Rs3IobIF;OEcz%no60LYX>S8-F=d$J3wsQYMaqf)A1+^-6xc*G*+gq4x}s_5b=kv+yW1;LSy7P1GUI$$yf89TcpSH$%mQww-DqEcxE zs^-YgE~kp^)N@T}-GW?`1PIO-;Ko)dPd`=jFV*nXkRzV%Q0W2RJrBv=9jiT`9+oX6 zw7_Z%PB;f8(7NkaL5@xJzzfqTdI20UW*(?+JoD`77Rc~)S^|6S0Hr-sE4QJ+IXZv2 z)_IBUTjM?Vg0_6s%yjg`_>2@Kt4b!HM1+8`!WGUFi{~eVRp=Ta2=nC4E2cf8HQ@ba z1SoOW_Nltzkr&BXxRG?e8)Q41q~drK*OCCsu8Fb1DrHWEXj;y!lA#CwLhRm%2-0cq zah|LPB6zX-BW(o1T@;Ka1i>foa5E|AMLt@|xp@Gj!zG%;;SZw83SMH!ouqY=t)TNh zqKYzq&D^};Os5)B<1wP_wGb6#5itG2VeK6K1w996SZsa>n`&8SG*K zzr57a9?fTzdG~Z$oPePouL~i$>_)25lL6Gu>tOS87^^Vz&XY-A8+4VLtAIB9}TToI|3FHx=WU+iv=JG-#Q{!5Xp`f-hnU>@ESDCQZ-=sr^CN8z%7= zMzjqrNpleI0Jq{Kb!fq)bJN>0HL5*=^$n~@J4$GP9TuEp<>uPsBEH-=5#ctH2kQ>1lt-h9Ef!fDWkd;gWkkk;zVDQbcWQ$a4jS z#8jcY$E~B4EWj(Rj>qvbnX6nQ!uo)i;oXLyB2wFI8j-Z6%6hSmWdo=>LZsGp46{?JVbsi#(Z5G)1n3Qy;AzP47b7erRNCQ$rP+(%T@HkSl;GMZ6p;L4$?Z3hi#UM z;3+&GeiQm&or52i#{oz()d=Fq?!BHoL{A^`TMN8| zYaUMObfv(@05>8a_y)SSIoVAJx8>D)!&gHir-tv~@LuC;l7}=emFTzzaOdpX1J2_f zytkfZZaV94@I5rx7wG!p1l+~*JsBqE_DT16BbYYYIg-SPQ~4@n_f^QfqHUd0Ay-dF z@w*&*ff3Etk0z1>EeEt`3_0xix~LayX;}gZEegtWavdbf($rK>t;$Lc@dhzclC@)h zR&!x6rIEpJr5#o-dq0cLRpPIvy{(0ymwX zuc_BDt2riBE=Oyht$5rz6t&(HCC?DEZoB|GP+a~IKSVq<-g3hYdf3*RMpY;8!bwSI zkidJN$u6J7+ntMdMu6B^PL9BlrrUS{LO${`X+b>d0+=Dd3J$0R6B8$ro9p4tJ@XXy z=27Y8ty;6<3)#q}$kz*Klspdo3`Rq(j%;R%0#rn`s2_pcCN8<*sgcf&UrB9XL_b_J zMX3XYeD7Y)MPj=Sfi!XGTx#$7IV$meN83Ay zCh!hVAd*f^pol43-%!ePd*fa6^1&epm>=YHy1{gSHuPE7B8D}-hE}<8Hmnxf0UL*a z_SbjCU$zB(*#>(_nk{M%)uywvTp=FqDAK9iag@VlVf*?YJG{F)$7V{!6z6U|OXodB^-f>8&spO0QFl^>+ zR6Qc;;ex{^W#i{4eOC7@-rMQt{SsN83+*c+Xc-}Wqt;Got8|Sq#2xjh5z z>4#}azTqbhPtmaI`Yd`8T(KMa9zQ2~5yH9%(DJB~RsbK8hUo&enLmuT&97~rT+`fX z7P7yyl9dqYz_YWgE}_In3D2)Lo?Ej%S>sCBQJ4A6nx(K02Moj7&Nbni2FpkkQ zHNW+1!3&>C)|whiZrvL*SzPI?;P!3@sL)8! z=C!8BIVb|1$#dfEJ?`m#YmZ{u&pO@&UwEZ-2~PPb%1E$jJ*rv)M4Z{OY^})lKGi;} z_k4+@W+#V}S`M0m(ZP4EhK5#R(g2}XRrItFZzV_sd?iVBq4mH*-s`YyxDt_AP>Yuv zb#>cb$MX=`{AHgGtU+WVGC$G*A4XZr>vS-Z*(UafZ^LQ!LpKHZoZRXr-W$BJItk9U z<0oV`jW#}#QocO+CUoeO*9^021XI#;(->>JYo^ewdJ}~BZ4JQdo6U8z?&Qf}1t~QR z42o>xRhyiMK6n~tQy$td-Uj%PO0 z*qL?q9zz81TZph@)~U+PLQVlAg5IZlh=Ak^Su<}^FMNpcEgRE1jdAdMEi9XrAtjszTgFgnb6W72~VC%CcC!_xOW#uWmL=O`)(Hk%Z zkN_2NWZPBr^Hyhg_3XV&eQ(a}_>7+l?aFJ?OXVTKhG@^}h}?ano%lLiT9fN{9kFyP zxQOGjpwMNy@1c?pa4?}>(K8RUfk+c^Qkn(G$1;`+q}6Tly!utci;WgYrSnV6EXieF zuSmR3D3#gw#nUIUEs#~|iPK^ZH47ULAvK*RN0>_*4$AO&ZCyXWTCZ zFDv+>eD5a}(0#3{TgZl>Zp5$EnT35AjzIaRw% z;YpY5l-n8!@Vm9dtpUl2<+=3s@d+xsU{!6zm}SF9x_D}DQ*9?@RNLXn0$Ub1iY*d( zaX~zY!$=_Ty|r32_og#@Y^}`2FF4*i&3uc{Sdrm8NT~y@zT{vodx>~x55-}$4Lf{v z^}2dabVg*{TqUPo$Xei=9NkFXj^~MEOE2&Wu}=Z)IvQxx;FwEor;tFWT^nFv z{BGhEJU)NWAm?J33hLvQl+C0;v#oUe(9dsm?rA`?!?NEpXt{J;Po9Wp1H&B(AeJ^} zqrcoqD}WmIMJ)?62(JuADmExvI|fvONT7ogm!@bDF6r~EG+$d;LuLz#m2hCKT&jK) z;;WK&mPwHmP1|0NR|spK0-lM~FzuW|!2rvP;W~ZW4H5hn8p#z7T2#ft(izr;L!0-_ z0oT)Bze=W=6p7IX)zsU@5f8H>w3Hz;w) zYvx3E(358qTJN6FD&`!yIKn(KadIAtT!lM!7LT_Bws~X( zh!#6BV$9BO9dV*jsZR{>rCmm54CKQ%%&oO{2O0tjYK~U7We+#+oS+@aR22DMW4@QQ zATT{EdLylujmb|?mQFga3Ls6U=u!|_GJ=7n{0vhgeD#*Cht-5*g?*c^_%*#XlVFyr zr^(D$(1BC$A{`HbeF^&>RljAjRD_syzJX0I0PP*~0k5(aHQ!~xEh>8lJ*3Zz+VJtt z*-uj4qBo*v%e8|!ca3W#I$~!jxh!-ZH4s`* zn#B24fL*dI6`4MNr}9lOs}bjuajhpLz+-XDn^u?}r2T>baPtVzhn+zH zRs?{JvOpx>z1#&7XtJ%Tw_6e-GdA{S(vc?I?^wQ!BmOdOScPlJz2aUOV$%QtN|>j2 zi?QK|IwS;T%Hy+V)P}v8WhD9hHD4c(&t{5U=j#R0dq|5%;Aft z?bO=2dX4NX_1g0<%Dlz^mLro4SHT{u-sVrL8p-Au2ia)$s1Umc3#eI8$oq#npoSH z539f)-oPHaA9gOKcZz#4IjAqh>eJ8zDZ{#{@i<IEU~t!s5N zKVLV}8|%qK@y2`dUP3-H^XMeQ(~?~@#GG10Le=dvt%2&mx)2*Kg>hzv+U(A*UTQLv z98BV8clpYuZ>cz;YnHqqmivK@<9pi~LXI#*jgM+t9s1hVxK4s&ZRF7;ai(Dr6^m&n z`!-&Y@}O8kZ#zD-oJNwPD6+l-WmxE0k9lrV#<7f)0vQ+yF0QFmZtl(5o7qjy)MgQb zBpcD1)Od;l-2(512~GlFS|ExYC56l5mEY6CTQU$zY1KzOwz>X7Yzps`Ou)J;M+^cGNPrzoxvt<*h2J+MqLi&(Pzzdt*%nB6wo|n*n*JQtMu^EO&e2pNlR5# z?)9x+$T74lhVp$X_vlMGq=^^o?hhn8bXAV(V6o7fq62PY40%T4RPcn#y&eEnK&roh zx482YVF%Ssy5>eeMDM_RB%(x|!Z53QGu26*QoB(S1D)UtKR7L=Frs9}{OUZz~d{r}2A@Pj;Wf)X8LxL)ANL%xfCRv~f zk6G%iw5P-L8+(M6)4QTp76PfRg&c4Nos4+kH<_R&uhiJ=)Dk;0pC5!gxD`j|P7#{z zh7~R@0DEh8$4~I)TFzQm59P&^#uakkF0pXz1x9U=dD5!n8D3&%JGPAM6+SPV zdBzuB;a!r*6FNa02Nyj|E}CR=L16M86b9+cLQNggORw!JEv;u^Gai+^*+#xvq8gee zlwiAs3E>FC0!8X{q!H7KXm!PM`#`hGJ;KzV&tTm{3uK^P;v)|^1Acrtn8VYq2lpU$ z11>MSZH*er(8yynWElW1r$IasW1_icBOA_(rE}QZyoS^jK_-$+9lD$xKp+B{K);-0 z_;St-6UI{RX}?LF>lMo$&vJHaGQOPmv>Kmnjoz_}m#{TXUzW?oV8|^ zil^eFXSM2BQaX~j>EN=I8$Hqo5$NXm5KA~xNAu{xU(&hv3p_UWsmiC%B{=L1E%I-+v`lhz%-sB;?A-<44sf6SSZuLpj2jCzHo#*{D`4P(611pZq(6G|m+TG^kle1IhMuI!C z_L)v1;@)I?Z;A#JoBX`tLDGX4H6X}2>fjD?C5U)}oCtf{d`z;~fd#v7>dv71^s%lU zE5nqd^CbC=w>}gtaw6rx#vm$JB6vry-5_b)x8zPz8a5=z&DcU4g;DF3pk~ha1OzxYmbdhC#t>9$DXzFvTXlo?w zG^a!+@Q{rqD8+8xySo{Grov6sp-h|*sg!cadR@JEl=CT_e@V9i#dmu=ELLrXc*mJW z^stj8Pm7j7&+A-b+{DWxt>^u?Et2O0I_a-+d^6u7HC74lC*x=OVyB*hx?*+_r{{nW9VMGQye;I#GC`E z(veFjY^j=xf{I-B2$+zME3rMLm$_lEB7tb?c5Zo`;n;R`xD1I4c$6<2)?=`hc1*CM z&>TgM(&z|f1(zdv#pRfZ+QiNSa~Oax6@5~LD_<|SrYUj|S2Sdm7q#|mly@Id;yy^i ze9!1bP|m(!ViIxzc`_-t#|LaZ5x#9XZqw#GX=5UF6(grT9lJu6D1BvzOpz$(2d#GD zqs!dYUWqy|H>qQE)tJojDEFGiQ_&qc#Kz0m7dl~H34~O;xs)~m$XiYVe*7Nl7+=Rv zS~JPw*Ztld6(9Gyfa|bT4?b!rSPXs41=y$SHTf2FNzq3XxJrP5jTzsSuxeBpvjLAs zOM%XAiVrWv>0ES>ruHUMSg1{_ia!;;nRm(@@LqB#Ml6@!vxTdNwF1WWOpz!A#RNiF z4G;iywNG?V+R?Ki|+M#dGKbt z2>+$s!SbQ=ytiI*o>`6d3V0RkiV5~{4$;2#?1!EMIzj6tb8}p9YojbICuHp) z6BqK7wE9WV>ma&@SQ`qqc}#VIE4=skO2W;6&j$KwN5*5jmk~g=7!+WSsYo8y;3TNd z8i^XD0Vz^wGY#MncW1>h>8@hjVaDa@4A6R90c=y=8a2UfK~W zcA`aO#gbL#mrJwKolHvNqh5eQAi)*FmWEuA&n)MKACp8p@w0o+MOOKc&V6DjAXZ;k z_C3x%3w@L~D~9Oej$F>iMq54bwmQ`CUbu9`bXL&qFwBPKYbKfJQ_a5fxC!W);m##r zxW~h?%F>%rq~R=`elh%3b&Ma_re{2f9D56)vhI=-7>Bgl%F-|$LDH*oa&HSCwLw75 z9n*s@)Y1-7%T$^P3XVL4)LYeVfuiU`kEs$uHp_@uy`?e=oBYkBx0NQOliw;^D*NQqo|VxLeP9KC{oKw99ckP|JedG9$Y;)K22$9CQH zsOt{kOFQK+?ewu9QLGity)uI~6Xq3EU2t@POKfd-)R;1E(`DKUf0tcknxhGWmsSGv z_LW|bMQn$$K@g;6?XV5G-?_gf?j&qG2h@sJ6%`BSH5CSLsLZhxb^r1XJ>H#jK;@pX zy@2d&lwsK3P@?Awl47wY0qocb8_l^lRA7H~#&5pno?XwVqy`+%Vx z{Agk;>G>MR!>+u%3D$rllflHsrZ~g$>F(_24dHhO5&(=gwydpu#VlNJrYxZvuv`*y zyXJz7cCRMgaVTreaykwzNn2o6dG;`e5+W_OO*FHy+cQvAMURI;g%R3gho7 zn#HqYopZ~kxVW0#z?ktNR=UP1gC(m7+9!w4lqIfF%JimR>qNiPiQswwOz%**^osnP zCG$6B=bA{c$+XtSshAy7H3cH--;dgf}U+M{Dlm;Y8c>fFfHI z7$2oN<_RsePbSWh8IPV~)Lx<~HkbZ7MC9T$?_ ztjyYbiR#c~0Z*Tjt-fr}cUWv-6Hc9*B(5S8b?E1jx57xqPL+TQ?ko~qYWP4CNIFtl zN-thPz7V2mH{)lu(!@`@?g8{#mKs|;zP^5tn|b<|c%mlWtH5Ob`e4wLn)&KN9;k?6 z_4ON!*=_QJQBf}RBC^uSty~qK0hMFq<-0r+9Rw%1ecp;`YISr2O-!3_Be=U&P_IwD z#st~lTTo1u7c^+nrCV;#c$P`+!Sb46TYwm7m5l9s$``EV35u*F7z4F>Mg>H`f=8{b zE4_q9N{`<1wd2$sYD_2aW4CcXpeku1eti89_$j;;WO&MDO?_x_hmRP02Ldst_d)Ym z*={~w2yWLBqD}V$Bn^JowC}vJ9ZgfNgYqLo3|5Z1S+d+6Hf`6`6IPs4Ch| zQ!A2`+nvUh+Zz(LWAK9w9F?{lSbchJd{ix7+K|bt zJI$777yxyYRlrGB^59y<$Z};#OgHngTP=bMx9QNXZi$i~t_7AoTq*2(FUVj6>K#d@ zd6Dl;1!xwHh{A+vrr&UiLQ>2kHCsLfd{`xi=QoD=C7#2Vc;Kvf0NQultz0J5Ax3U1 z371(7(ouIFL+>Vl<`K6=z$^Ca^7G>Yyth14>`&qi$pOG~)$o&?wac6hMY(B#d1Nk| zg2Um#%Tk$d+Q62G)xDL$OT7^PGH(P-Z$YP77#NRn%;r!XLcEK&{2>Ozh<7E8b~l#T zo{j3j1Y3c6kS~yPQqbrnlXMH8GYm&u!L)=16yA^6eV5 zEkU_ivRK%xKNWUW2GV>E_dpGV9_>6kMqor9aZo92V`kint^+6sdyk|TT(Fqoy-Qvd zWJkq8$5WtiQ}VE#A(VnI4VV z(cOfB-66v7`Zz9_=n&(*(eBlm!%y@4^HuBZ=gv_`u)5F@8Y!-tCxPh{6?E_QL~=e1 z4Y5S_=D_ERODAoLkvg)owGom%j@w=pZ54f;YChn&8B3BT^I{5k(T7cfpx4POc#Vkh zh^LH%wVqJI@?Yu&u(?i`q~B|<<>}BqRBx5Nd9x~48#FhegOm}7{j$u zh>_mY3)L4CqD8HUMC>>=`HWO);Ha2ti;3LLs$BBrl~Aiky-5>&Rzl@ifliyE;jq+@ zH!x(%JkaA>W^nb6??}<_0N~D?6-1b0F}t1-9=wEAxqfDc9!|WVg>O^S!lrFKJr9(@ zB!h|5AXv03m6~4(9wW=>35%kHnis?!W>^)*aWbYqEm(yBMN6uRimbBXQZr+ZJM4bC zdgtU-WJNloNG$nI{P~OHy~JjDqazzd^@448Nd`b?*|h4}2*|Y@WJ6Zid5M;bTlyVs zDfT;m5{?AL8XH|L*YNU|&S)13(azDgyx!}P=Xp5}*kv+Ybb?|&N}gzdbD|X$Rfmud zX2Ii??&}<0Qf_gI!j^tgFR@&r(w3tsI^Kn^#@5z(K%6`Y(djd_7F^0}4usbrl-Zas z1}Gq&zigl^CxYd0aic(;(b>${cVcXk?-k6p#*yk_MZlb0oXci9T@vZkR4@fqV827+ z@=ARDvK9h-g-UJH@Zl=v)e%s^PKb}*RoJdA-b`)uHgr$_mF_P~M=4^B> zzly%O&! zxsWHW`eZN$A2H9DdZAzHm5(SJh44PS5?=D_G=AqiKKW7&ibFp=vUQ+Wa8-Ju zum5!K>L&|<$m_)8a=_~{c~b?;lJ^c3j3Ys=Dd+qSPr#-hFd>h*v@BRy)9IPonC9Ch z>RK2?J~{74Rp*l~AQ12z7ZsEn01q9EJO-x3wIR}F&&ck@tD!x-ke)^}TYOghW)+4> zT24k?hTq6(AhGyOzT@oeX#(OdTRnaZ*Qf8jE{aNYz)XjR^Cb2pd?1xdqqOQVA`>86 z@SeK)>w0vik|Og!(TqDD^Sbnt^9p7rI5se-#~tet+T=JMuo5^@(tGe&-?*+jAqLvo zl%3S@Jr$K27ulOBm*}u2(2;xo)EVxc>#KN+mWe@*1eB-SP*^hE)&LXJ;7!xrxs1DX z9kCE4V;rlGl?)lH#MAvwm;n2!ztJf{enxEBJ@d??Gjxa>D#j|UO%219Kj{L~%? z=>ssHdygOY)9ttgwe_`N3&y~EB26R8mt3WR1~e^lyxRT-o87XC91n=qkrTI8Ne|>e z2O^(gUhx{M%5$UhS4;vSzy)GcRtK6l9r#WyHWx2>f~Dd$SAng;u^+P4sCpq`fuxzG z=(D~hPO3(c4y$+%>g_9MKlMm}EWALyM|j&Hrf;ToRP?Q7=IeYA+1pj%&a*9!BI4tB zM(YG0?iujs3wOk`Rprw8F|9)H?LI6_-s~v|IwYEF^#=iFxr6ss$WP2&VmFq1uQ-i- zgY^*yS*b}6A7?wC^3i?*R#cH>GoH>PEI7jM5vfG6V5&Y;u+o$wu|%X-tk%T3RG z)hT>CiNQ6lM1>sQNdU2&AA=*@*1UH|V!`{u#5clu*_3oQJ&TZ~hn5uF-mnmxM7l`P zB($ePYd@7WU9V?ZT#-8APHr$wbc*>Huj3I4)k-_(Da)4Os^Ke~C~@LIm6!fhYUSaG zN|B+&MN8Y|b^_nxDrsX!+S=W7CsitNE+?xDT~{fScWZB7JYBZEINU@*H$OGZ6Evb^ z69L9h*rv3m=ANhA9LT4<0o8d|d&su&B(>n7DyRtPr5!;USPq-v9gvPy!IZ5r-}dM; zr|FuQG_f~k=d_x_tc4PCw&w`WotqoDLUgIX`3w{(wT_iX+-Q4dj+I=J!N&Z_67lnO zTBS}nyg4f-Sd@!tP|PP7<@Y>*s0MVS9_Hh7;e#`|if(zH(~yf3j#KK5wt6oEM_Xa9 zGM`v-Tn(~k*)C1!W_m!F(;8=ZhzAVNt+y9MdB#!tq7#6Vw4jGJQ%mGUPP}op9G=59v!j zG?AsDmBGdW6lKwp7bfqHQB`o5HGJIwX!;bVFR6Hqj+7^IBybLIcC8qTwgAXqOK#O; z#7D2xXfu(e1xe5afsf$c69+D!M^ZYQDhlr&$MMK`nbXW;jqX3~TQb(3_u@SYe9KR7 zT8fZR>czk#-4J&=3UrRzdoQoGts;SrpEs=@qsgq?0ha}dma`DP3bcBhfQXKqCtjfK zC3!K#<~isGNY7ry!Go-_sIj`|(A2aC28wGkR*CqWr5%=Em7zZ~dj!hm@LsGxR8X(J zd6u=Bo4S*)#j7qP%`5^%>cNegDIgt$@5NC}1>z!Brdm8pp1sC;vN%Xm?0WGi#4|_JDM3p&ZYGIjj z`ja@@W_n!!8-Y@-ugFf<#2KhWEn=)6#4Ai9x+`xuaI%*=f+$1X#uOFL$@Dqc^@UZ+ zuG5*HKdHV{QI?#iCpr?c0~*9)T;e#|tWX66(W4=b_Gm8#XUz}F5h8WC$?zx}3@y^R z?rH8LFC1{CQz_26yN2b`M7vpXf57y(o0u&tGl|}yPD$qa0_mV-;Jwnvtg}}Y z-42i5Y7x!t#>DdT>XSv@ndX3r>1{e`eKL;{OIvxcZ@{LFHiSEDic;5U%0x`i=rjw4 z1p~#;x&7(AvSNSG3ohEv{KbroU6y8K0bEQq5ahD7vOtqqS%WI}n4F;O{_^k22a1sD zG#p(#7z~jQEfYpnZQm+hHBA87aY`LuVZtC2`a9>ly{(|l(e0xAw2$EPwTlk3n2Lyq z`^#D-H5U*_c#jxon=J#c%NvwLz}Azbm3F|fahVPw*F*ipOxZ&x7m+6n3Oi!ADekNxW`SIDx$n_+AX*X;3b}i?ZZAE$4F?tLN*|LPBcSv+I%A- zE7ED<;F5LZ`N5Q5MD?k$)Q;^?8W>Rq1!nTCMwIG$ok-csCMk* zId_T_zkF&2>x!eouLQC+`9)TP5lOH6@XT~gkpB|}{6 zA>riHYm<-a*aDq@C$gPHiY4h-wQ z&L+a*+i>)F20=A1TL|Oe##Bo29c|e@O*!`K+Sl8yCJYzkG=f5Y14TkLKbi0+lOAMWk2Y2tu z+s6-|2j?3~NY{evGks`Jl3Mjum*GgTH5Y9dGlo-HVDb@Ext?9YdxWrjD?YtOq7UMx zw#UZq-5w3j*#fcMh2t<}lct%G3547O?RIzi_M zzk}b1v2#LXks2PW_0EdFLOJId4Y##|o}_KN0j{gsDBf~KFTu__8Nb(oCxm-c6j~^Kr{arFq=z<#$ZB$88}5l* zaR_|zUX{A!%b1!B%_z5{&08Q(YZZL}j;ulbrVn7^!20efo&wfU;$_FC_?Ylh;ODes zeNSdB$DRnWJ#-6YRdBq@1i8snQ59yN#ap#3Q6PaNe76cGpc}hu1ed0iXG2MkgCwl( z*#f9V7=+x7K6a?fJGBPqot9c{sJjb|I?yHAFaMr?`3FYVK#yTB0#Pc*=zxglPK zM4a|DOV@MQRo5=r0*rOgtf&!LeVm1msgxlI-JnK2Z)Zw8+UBU#uID|9Q!Gqo#_e>= z_u5ZnlCLU9`lv|A$~XK~JxscsZ4-Kb3b@U@vUp1IWII`agL6i6&!(`k{mDCg!p$8| zbz?=-M`{M>`Kw6aN)ED+kcSnhp`bnCR9Z$sHnjZS1i-ywps|zc42yckw6xSX=fjKo zl>CY1*0T;q#q$i(@JG|+$;;udSdbwltt0v2yM0kbjc6>dX{EPc!|+HWY7{W-!)P-@ zYCyw%?A8)+8%6ZWP90C1i#4YMsj~7NE(Ua|PC`Ae_dK#XJKykTHz}}o8#dS5MIqR9 zPAvDZw0%*rH!ApG)=z^I(($-Af)kE!u_u^cjEZ2VmxiPq(Y7EEv@J1ISzi?Hv*50h6BC&b?VMR z)NGIF+&!aNUs{|e-6yiPj@dF}Xw7jPRD(rK@8OmzxgElyj8$vQZuC2ZM~zAa&I0~+ zRNg#4GB7qlIH%=zu(`T5*Lf5=Pa(ona((T|^_u4{y+>!Jdg(7z|soLZ#&e6;22sKJ3bcasg$kB;jO3glPAtx8wS=IWK8Fc!NEhD>EvQ9z#Ym^b6A&p@RE0hV$u(I% z*XZ&Gi}KbPMh}%|vo=6QLr&W-oT|!(vg>+mHr_grXNUR1nD@H*ymNe6hl?fXpb#mvAO;7y{2Jt21 zTdKG`McroPDu^4^wk=V5V8_~EEP$KF=-0}D zm>mpFz9vh^N)Hz**yHU@!R&;wxrMIVOn~0q20eP}J)rh3LUpYkQZpZ^ay$`czopCF z#PF2UEf!!HQBYs0@SkJBPG*a@0*ZUr1>~h@>`Q}yUDWw7ntdN*L$DkY5-y~EZ~ zFlRciAcaJh>;*DJffY0&bu#nP25DX273Nw2kkF|=ygQDd(N{@`EI@ORk3F)*kM*@* zB-ZPi*X~b`JM#gSy{F^TLm~~P)F?~*WuVZffjJGO8gCVwG>*(ygE=K>`~igHG62!} zi)>|nZgtrKt||a7O+76xx5-v9v_hkjR1|5`&wv5MSZ zz1}M)8#yF+4=7^*g&v0|Pa!ejOq$Wixp%UV$GzDyuS3#?$y~;nBy(kGe2g<7kTW0DF!=#Ftst|^?m3h-CNstI zIzpSgS6h*7)jxI_moQ7<2Pznf0TGX2!?&j9=NRa~fp{*XAlm z@DWUV))TnwtS3fVBC3|v)7I1IVhW}u*O{fHtZu_$^Jp6eQkv=Z+#{Iro}QIakUUa% zSuC}Y7^}9~Cv@)2$K0>B2jj~!Qs}p?25JZZ(NU%;+t1d@t=}(obulD(^>w8DM`rh4QxGz>q_DQ6;fkldC zAk?G+D6C7#N$HvCfl%m+iSFf^zZ@)o!xwU!*S3OS>jIk6q zYU905ReTmKc$x+2o2}LChA)Bdp=Yv8DzRR9PqeFEUPrRGthNrw2;cxL_}TCySXm0b zPAcUWGq(9^Po=MqL^qmOFMw*|H20G79=ru0ADDr%CDnVlgh}s&^_qJtYEzQo@w}O{ zI(;Rq=ZRzQ;zSqQptNLhyPB9)@DTwCxMsXJ!GlNGQ3;RZ?eih;nR|lAvmMd)SUkE} z)OmIzvn}qaRWOV$W{KrZ-Z9a|D6GF5O>h_mQX7m}RnqI81(VRQY3ttB=UkR;8&A^? zY4LG`ymIK9ey$M6QDjze>W&;DN?WX25yQiY<q@ZIb@m0L_nF}Uu(g=BIJ!CHw9$?tJ%*ed0*+!lq zRxOa2cWFH%?}5pQE4Dlzjal&H07Weo$dZH`G%Eo(kOjotmkrv)4vuOD1G{GdZi;!} z4`{Bl!?_mftwP@Q2{~TtlIQLNCS07_Q#0v|>LQ01!VR?oI3gnhiQVQ-S#n5jCHeM5 zxdQD;MW@Ti8p0bulcG+5&9+jq%9Z_e(7znixX7whk)U0`DV|=TsjPqkzXry53S>dM zJei~q-Wv&U6t{w?T8@F@=x~xDa)zQinP@?g3zPGsrnL-clcD8wV7Ps8`l|AZ;Y}=g z_bb;0-WQzFu?{LVuU#(Vpv?mn;4cX!9j_eEyOixUa6G7KX~^gd9ZmsAtCS2><3O>O zX=sjsqkOCxk6js5k+b4n*qRq$_;t8C7CDU-WiTS>Jg+8gz20nn#5z zyQEogPD*-=4;qW1N0&OLM%8RpnG<(30d;B;UzDp~(^&`Ut7CbxzTL#rN?Ld?>$t#| zD7pts=eozEeP`Ni;|@ruX8Xz18B!mlR8?AWTNzMSJb9a3`34r|*hgD*paeTfqhp!8 zh(b_A+Iv+>47mFp?>tuyHg0a>(347ZQHn_BuDv-L~uEaB)?SPy1Wx&)u*ARB&Dl1&?ZKlI))J7-1N1hj5 zDBO9&9ZQcrfeJ44dAlg7NRRBhrkWjPo>JU|<{7f}vS_OnI+1>aic!*DJE<@LGjH-W z#&8p9&e2G7stS5A95G{c-lYMzLjVYppw^NhJV3EHp!ec=&=uKkOtoRo<2_OpTzs!y z6OIRRm2NQWA(H!In)1Vb5uvW`I7(j-xp(TUmdL6qgr!5;H7bv9Ibq!@2H^UFf#>{b(y0YpFTcBF^(qoM(aWLGD5MW zepct9vFWdPw9*@P$q<`-7m-7bA8<&h5cKj>04^XcZ9Jo(isq*UB3)%P@?czHkW3Q= zC*g0-cW9ilclT$i8a>QJ{!Jj@L;0s zt3}kLeeR*i$=S#1 z6eD<(u2?=jN=%%(Oh$>-N1o;8mthc7{Kf$`R`t zhu2yaGIbcoVMbB)peSydtNBELUTA3aX^7SOr5#%G0jJ)qAt@Ie7Q^1njVQP}h)yO# zYWHeLrl+GUKP2ohTyD;HEvs8(XfP}d6i32G^P7SJ#o>``}n#fLtT z@H&Ohcg19 zv8_e`a+aZ|Rc5EEa>`v&3b`I7Gz_>o2?6edNA79wIn$-BL^QM@FPI-lJ7HTghZkTo zz@v>rH%javxkT$FdF%0HxnCQS6ESreY7uyJH~!_}?L(HNjTJ6;_r@!?G+>}DR)B(} z(Wi4o?_5Lt1%NQ00#!^ulG2Rzh71f+pe@-I$9)C0DjVoiRUCVOc4*u$w~(4(@C`w~ zXRz4U82Z>F{Jji(Ci>9uO;HG^?|Ys8Vpk5y;I$*CJ`Szo=NK{`dD63ZL_41M7|N*h zCPWpg9;Yyl-NNUf~8gzF9V#O!DgJQo{3k16rJK-$e@TO+d&~2~%W#B&2}~ zXXO&xVvxu){6MUZvtAEvAHEI3D<`DmXVDV%9$liNJq2Ss@zl3)`s7lmCH7$`giuM&aceuieGsS}*^hUDbY**1#cAPqCz=ND2ZbLe3>b2FWc@Jjm5yx2`(>`27Q&oC8 zYZO8LK;OI>?RFo4&?k|&{w&0q4Y|5w+$Z%aK?hM3kz47mWFp1MIF}7an8!8@aC@?% z^c8LM?G_l4o;UV+b*|G}t3uBZRVC{SSsl-_+F&w?M@sSGp#yw*$nUj0c=%9>8-Q?J zJs&s;o2(DiJP=ACLWdWA+{sL@!U?&wHnR!a9W1HeJMVZkOa(#RSfIUgkBCQhaGS!M znfZtoJVi3ag{g$NfO_7@$Z3G(tzpX;D-m(Ni;0!Dw&1MORowfRh@3#!8pE=EL3(Qv zlnoMs<9gW@CJ@CE11!;#Hhom!T!HN(ka3hj%>hjYodL}V=*>qUEBRibI9~}@;i0~K zwf^RyjgX!!@h~Hty&`pJ@F(RAQ`}6dl>1)KMAS@> zsts4WF+w4W2E`K?&<;!yPfD~L=q-lqfQz4}( zrSINdEP&%F4m`nK5yJ=ohfu!Hus*RVm*t4uidC6;GPOWJqJmTDVzWHmh+(-y!)lK`V8; zRtz#pEa*eoY{#HCjIwx7s{7cFy-r0|%k4a&M3OMu6l%)JE1%%pr-=R~V!FMBR_oLk zKw7H)0Q@XdAMtQlh`>hmf^sJ=UWMg@LbfEncdFWuMq~Kcch&&=Xwa5OUOyh(ex+<`KUpLqx1mXT~qqtQcc9R*#;vpJr#GhGhoc~De2$D%Ix=c{=D{Cr2S zHC+RtA8hAQDKnDNShwm5*NckG>fO$x4NWLH>`HokEW}jf7n)*~8QwV$$dNl_L9Ne^ zttff*N~>GiAT3ScOxTGxE)14ic=+}C@xt(X6%XgAw6+j#rO1y`OS+eMptTrz+V?dm z*SsRFbXsQRdfd;RY&_Y1WtmS`^8hFzGiSrKAW`yQ<1kywd+u!jQI`(YMxWG!Y+tI9 zHPsVx2fEIB{rWM;kvz5Ay+%50n+QWY+Ef|?z+z{yct!3rv1UdF3VzEVt_qUp9d|+l zw~UDElim*{#5Fi;pKH6MYvvI=pHp%i@3FT881@W!9`f8-O26V!;g^qF?^+Zwr0bPA zHD)(iyh=@zFhqo9{=hiTu zRH7%(v$vdG_PW#Dt>9id7u8kCW5_GF+AP~=;Otz*o3vRyi~z=aTW>@VUqIqHUOP+2Qe3|{qydbCSyH+TCT*m*?M-d(EK0Ji}9gUo%w5ZZoi8mxjK_*8~>0}K#wJ4zi~k2d{0%gPZqJtrQIbd*vnB%A&D zcD7`#r&gIjZx@3oAA=XNOjd`b$X1*8-G$uvD1ojt!d^$$K4nghCIASlv^ezw$9S!Q zyns4c;ZM;(hOE4R^}ub;W+J?SsvWA(o*6kmWof>6;83usVp|YEc{4>G`sx>loVwSf8OeB}CXi}I6%(k-p)(h2 z(10I7rEqqqY^w_opTCXg=kjEa+;T`ShHZeYjqh}M`#mS3YD?V5x?KWkBu4YjGL&!z z#5f}nA}k{4&^5pW2A-r!Q5-zCTk{PJ_VP{Ne3)Q-$spMehWYaKq1Ltzb4iN@PSZ23 z!Nwpo0rBQeDO{NF7+0NGFkL61OnEKkF_w8NW%3LJ2xjaoI^H}yQ_opEVGb>&)3HL* zBoSXO%2zgbc))sb(^f?R^gI?DE;$z9cs*!Lu1XTUh|cwujad4jhZMf-2w*C&MdSxw z_8_O5%2%3Jr?74ANq4NH!kkF$PzU%+sZV^6>Hu% zss?Z@L>RSL0^pDN=9RALATW!|YjWhV%`rHJ}z^Vlc2fVrx+{oT|$>wZCMFTAF9s}s3bajJdvN_89 zp^14BeFaDkW~$8$2?(p3px#us&;3Xzq^2;~Y7X})4+*uSKglximn%I#NOv(FpsrL) z1~dr;W6V**BA?#`z;K0N7zh!z!IYtSIXYTFZD;pxnA8hheb3*)yLJfc)!j%%8hKkS zM)thWn5n(xXnd{Jz+UMsF|N)4%o9~c5!xLX>_-WakBQ#lyoCpn&(&lXR7)R`uk+p%*m+^IRFH$Y9tmGo}taFY6(7@>0n-NU3xSmgw$-b+5lv7)KdSBBs+ zv%6bbQ3D<4am>UgGL!7U>$+6o4<8gO!@F54gBAe2P2j%w1a1_G+ny-C>21@{>vtx- z<@9_Y28$WiB=Qm|%sm5}-<>hN18LpBN2kmz-s?|e#*jN>*%{}mC@Prv2e?1GtHYBp z&_LO0w&&_;=tu6B+3r5ncH7r@zS1`(^NQNA4|^FPp|jA#sWKVMnNbpwBS{uL{a8$j zHHG;QEcoHdfdxthjaLfNV>nuVr5>}Zh;FV)j47Or8wSl=|y?Z||uY$|LLJ<`mzFuIU+eJ=Hh|^cdmD zc*>VfDVRbkylsS4FSA0Xw>Vu>^D>^3P6a(d+aSO9_Fbh542vr4`Kxf#?9NNd2)88R z!e_0E3`wYgi=e^yoc%8uyIhzgv0IZbbzI`rz#~vsvuEdH978pRPjVK<5|2=?g0iLA z!+M{HKj8q4NH{}DdSVFB;El`JA%!nJ_LcOGbs4C==z;rIq$ zXaTIsqJ)5qQNj(h?C}o~|QPHY8*QVnN7zKq@zUg>Ro% zs#!fA4TiYD(_@}fppJ8XN~SirSmFl4ch*_q`Fgl|=wXog0Wwdz^8;0d$yp%?O@ttC z$#Ve5*f$<9)l+FbhjqylL0~)zJzDu*hxgLNIL9dLq(88N6Np@MLa7XZkrcyvo27Fo zCSyb8olOU?xkPA%*fMYFah&WHWTvQ+ZShFI*FVGXRz?DENSr(cksHqIm99lpY2@?` zJW*{6iNPtt(%Z6FAOIZN{5j)Er4et8)ExCqv2m~^$Wvp* z7!(K8oFaZF?IVyGbOKpVS1j&mvdSEiN+_PeWYX_i`>JPNMv}m6tw=+wIH7aeGM5y3Tuiyo6aa|40}qcqDgeta&equ3(q39gJC}|zIa5&=Pb(*8qbiT4Au+)2J@j=08|uf* zNuEnA^PY9Rso^C67;ENXjQ#hB;9_rILal3NysFv%7$%M+S1v{ z5SXFa8&xE8D@rCx9)uiwtZzqQ;0Z@pD8G$rV|Yc(2^%Tt`TWLQ!dVqNNN+*{(V8f> z=7~Amxja)peUy-taA@$dWbuIz=X>WQ_Rtt|pup#X&hK>B05w3$zh2`i)*VKvN{o$ ziB#oF9w>;*IJ-ykxHHqpkf3SeS??menAMjldE)TS607J4Ub{_}OLo$#r+Y`6I5+YS zd4#xFpson+vG!QE3e(g&8BOBF{iK9?-00#zA z;v7?Q0WA^PO@B_J^oaXd=qfo0AI!c*l|l4}Nd^;LVZGiok23TG#!vyOxRccT!Z%=) zLkm(BBPG4{P3d@oKAvlB+xE?904;46JuHGAj5WtR0v678hre`$$*2n^l$#%8`Se$M za5(l`hz=6ubmq15l@wkkim+O=h0THX&NE4};xWS0H~Wq=9_bo`W@q~)@Mw!*k!KB2+p0Ht}M?E^mK4|ua4XWcH6SANI*++acwVCER+w&Th zxb}7394Z`3k6WL;Rcz(AtY)<5tu&d77z==K<17z=WV;u`i^}y%*LU4do9(pN5LQh2 z7-Y>w)qM{htXw%4aj{d-90e&4cmL>4yEi~+VUtYCKIxE`&qO%(zp8iy%4VKx|Rcit8U zDit6~@xCG5dKFivN3Jm+KOjOY{*h`QtvBJ!6dP(w<3!HUqJ%i%T)OA}Z z9jd)f^VNj1mDG~;z_U8e?jph`(c$$VuublU#6h-M=!^u%jUZPrn?ng&bDrtpOVlKd zU~;C*9+IY0Pp)_=X}z)Yyp3Fn%q;KG0~_ab?v{&ZWg(y*eP24t_Xg%oTu@Pqib15P z8*xJ31)SewJAMW9o?mdn+j+El@2TpYIM5`wV@)p%tZM`34evBvdoeOLg-Pjw>5IY$ z?yxtJk=Oes=Bc<6z~gYiSC^*1_%TM~#+=?&<39FCV2E zWf{Rq#t_>G0~I;2~7dSujrl@0uBg{!jfP5^Hy6w z6)BWQVY-4eWkN~8ICXkgeGPd#5%VmD*R{MKJ+e~-sWKT;jik}2v7~00dxg&@}l z*ch=GpRn`bq>_} zmif8Ga2@Ssgh5gh^2+ljaLu-Awn+p1MY5Z_T1W1=W$deLaKPtBWB6J-GKUs=E#rC4 zab3PXb?;hRq8l-=-J>zE6#(uFn0AMKdGwN>B&pLyBU){4`ALeM5E}TN(R2Th{^r{=3Vq^m}t}9R6kvWk_mBKrq?%QLU5!Sx5n8&w^@1fNKY}R_~osJO=uy2{z zT0U=;PE0Fe^avh#y$%6L)WI2#MR=h4x#$ApKvJB`3t|o8Gksh_Dh5vA#Vs-2;QZyI ze(z!)t`}b{DB;M%AUM!CXye%t zHh>%&BeFeU{7c9ok89zV=U7uR6{dn(K4!nZSgtC1Px393 zX}t%{gdSYk&FoVUXJmpyn*wexV=e&NOh)#pSWJ`pgMQ|Mbu0=lL4qz7*nN>t>gmc8 zZ|>&9cCaBACd8mxAn&q~c~fech*_%ooRl$Z_8n>f2h75VXhD(y>PQ(H=8{TKNwdN- zQfLDb(SUJz%gZ=>xlPgfR(KCa{SsHK6*%em0hQ%}6v2?M7*PRHY?kRwPvOwnitpBP zUAI&5a_PwG(DWIL3#kyc8BAv>rZYPBzy@WqOE%4Oe_*ga6<2bgTe60O&}gzS zwyhCtgI9N+F7}k3zo&jejq&#S&G|dYD4iL3V^8x5zhQmuMb4s+8sI=p4W-u`GvA{S z6b{+VbA^n&>CguSx>3?Q-PR?BXmL;M$p8(yj1|0{WSmG|j{FQvpN`NpQ<2 zyS%%y?{Pnk@m(2;(-21)SDlQQduPG$=M-7qgtK@^&|=I_Xv=VO*KuRk)BAMyExllV z4)`Vt$IQXuH95NOdz_Dp`_M!n_ey-$T=t0%WojzcNYoY<9S3(un2s8_5W*XI7c%nU?uQ-<-jopn5 z?FEloyd>!Zx{%UcrM>Yb4QHgs2L_BI{eq#b=I)ugmakFMdrV?}2~#{xcsvbnp1dd* zJYmKXuAT^dM0;@EE{!~UQEOCQOu>7PQSCXJy;%dn}@+_ z+*3~$o)$}IKWUaN+R>Ug&#qvg+E}sd23W|_mU^^X6|UyyP4AdYrYYToANlN{EP>`e zEQQ+5BRgA4F>Iy?X5=T*E?u9HCx?F->F{MFTkAqo83#M71fi=t@WEM)z|5m3 z{-(|OB0S^uU?;ckIS=EsV^cHSt^on!alXK? zF^$wbeW*}7;V@<3?xdR6Wz6ZfjE6OmSgKx}p{f0vZu4!UC`%ANcHtu3hX^!SA%{qa z-XXyznR+zW4`83i4Jh8Is!cuZM<5b_3b7|qFMXCTszFA`SlWDjP{f|!gRPgouN3QP z&g0ZNYl)I*ys%es!5uq_X{_g>2n7o3HNf4Wfooy0H7gtbUhW>@#q@@rViFFOyYhkE z^ys{!sy9W^+ofu-E|DBcDYt+Y^t9HPbfcpvp~42Sv}1uIE3-IQ@F6)Ho_ip#fVQRp z=njP(KV^g-;^H3MmQ3ihR9%WW?WgoS+A_)>E*Jp=Gz7gGZ_e;k!BWcf%*m9?VaEke zw4{3HnnUkSA3WAKsSlvo*x#9khSI#3hqGia`oUvWl~d?|%O_>rO$_t=VFT`XSK#I2 z6zAD|=B$03Q2a^;n^eMzGO@#6g25rdfwy_awT}?rHXZ^QAH3wW_4Ve)n_`s2EcD{W z16z!z=Xkevl#rN?vUC*h@nPXQP^>LdS~$9O7r|-c<^>jVDHh#wKNqT20}83097gZ7 z>wD1}mvPZ6oQJj=ayW`yUBhv^FP_lzUWti)=J!@Y>oIa5$0ARZ<3SZf)10raKH{fa zBP3N*D&|DNFeHYr>{-&>^c)nQ&R7tn53a`MS()-cvPL)d>TDUzjK+Q{>7Q?H4M=>H z#aiS$m&z98Z2lc}L63#FxZ+`K8iCc-rU#0vag5h`~IuB)E~+YdMx z3tG-PsFh;@m)FfOF6>fN?qZt{OEz`6`;zXZ?Y-v!s$=6}ag(j+ne)chU1yUIKyo<; zWCc|2FDJtvX)T@MW6|x<4#rC;@qLI*q-@M?XKs(%2Lw59mLJ7K)X{$L@@=cz;0Cyf zQLD2>E`r0I7t!-Z%uRd~2?S~NZg)km=~5$**<%;6(7Iw?9&~*vhs0+EG$4pLVSCUm)KX4_&tEEuHj^o> zux5{H;A}X;HId;2`Qu59pgx9&72X4Zv4HbrX4;;Q<^yS61^|u>Tjabt1}746e>C(^ zrL*%;Q;_#YhrlxA!umbveDAd*G)C^_BHha*weGmig0eSMwsNlktj9rQpjlNqTHdvz zr@ZZnhDkHstrx%yv7@ivvon!yGk=rbW%x?4jiAX%4e{>jgd4r~0%&%5yMy(X&dbMm z`*Oe{IqsRN%nCd_x;o)WJ-o8ez*jN7REY$-Od|K9A96m<-2^-gm44cJ9!Y0cv3a)9 zVM}G8PqPko08V0XCWj%i-vg1=GeO%>s+K3ab6vSj@GkIbsPHvu5?nOV(-t`{0d31o zvDkSD1pG4+Xi$6{@Wr#3rZ)*%FngO|v3`vs7^Wt+kt|{u%~BpJA(0e6GRjsbL$zFi zVu&sUoRNbcyeutL1$e}Jfu46Uhl)gen0BOPb5GffjCi;(uM)AO5n1$IOp*d84VFT6 zzed!Qjh4@8GW5$y@zIQ^Ru*^SBGEuKgLFm%1|#h58!n5@9xs)Arq(N!w#EqD;gT&{ z-W|C$sJAuTlaf>Tpx}-kMYoS4ZXr)LsV7~mzSj}6??u>cGPY1!%i=>DDVf}PvXwTH z3d=HhX`5O7H)h`}%i`UP z2GxmyA<)WZk@X@4>{4oy96umA=$XmsynB z+)X_n0#5P}1&JknG>EP^SFkG8VA-B1@!UuHk=YU%xt_|Mtd!(7{$-_ts3dV2v?=TB zX?bBa&|p?(-3EQ{A$h`6P3s4!xP<-a=zv%dGZX|EMk5v(;UR9n^$?2Z9XR%K3>{wW zJIhj7%52NPQMv}Bpy28%csMf>q-Q3VE<@5Ti(UOV=-I{KGQcV~N?KT>3SR9`^B8fh zGQq_%m42EG0N&Axl%8tMku=;W04PdhXBgItV40?X%KR?8NQC;+s5kGuGQLO&T@#m9WzA!8v?l-sLWFNy!Po=xkRw%uGYCOl zJ(c@~*zs$(2XpoCDKKoSd(I84#isFsou)Fniavfryvz#ta>f+IiSaN_dYFzx&o{g+ z<*cH)_nizzU#>=;&${|uiG$57G^b29G6aRSl;@B&E|%Yo7*sQ!;SuIphrXy*0TRT! z812(nx3r#Xfh8bhWAPq$xlL4OVEB7uNUwa%E_A>Uw59~|HCMR8%3@F5a&h!9=o@IZ z(7K~r6!=wbS39)^1D^M28KNUWlWf8aRt^ZD&w)>=<)OMeG&xV6&AgXZhfeI3wib2h zrQUCmRe50XaSV(1+9G*G^rY+>=nebj_yBu!dW)g=y`e@GeQ2Kh9>kZGNMBa^iX-!7 zpv9;wn=4T-3$(G5LWc}i@+-e6iLCAPiO24f_E_H@1BMq5>J=0i7y&-E1p&Ro7{J>oooNJY{grJWFe?d8+OG~vh#d6&kd2|Gn zRElwDM%yF}(4?_;hp_#;;zh)aS6jU)hOTvku3wxX)tS=h!n`u_)U1yWL`*5GuzgaY zPi*4}HG4r#13bK0Ph>40cbwsY0jZHeE}{0wDNVAzNvb!d0-GvOWiqbDo<=mb58y4r z@*9s_!VMImhay_`o}8Fw5E1((0mH1aCk)5^21}Z& z*OhBX&nDFO`T~QV#dE%)nG}S|k$P}|E(FT)Jkk1jDXOBuEy_WhvUD56^Jgg2PdfZ` z$)2;ldBkn4r*BP>*oj5BVDm8&T=tNYwjHIR4LRDlVP$0>9w>G;uxu*Ujt^&M;xHze ztw2L4XrZ~*sw`&hA)HR@kZ(DG&f8a>qSyY6oC293yG}v-aZ$Z>q35{wi_uNyV_cBh z4VaEBLwob3CBf%pDbfg=3)|}4sDqF79R&r}k+##)B`{G&wBZ!zAH}(e5 zy5VSQ?eX}-gK>fZ9XXH5Zg#O3$b8;6Y!O7SFz*5$CW3Tn0!5|a>WZt4ONwv=_Vc;d zvFDA88)^EWRB)MGwKmJIU>&Q@%wp>;c?1d~vSx45}+NjZg@x5#>F2 z;U}VjV@XK0PJCpU2oFT)oi!pU4Q-MTj8Pu$<8-&G;`F%))tgNddxBePb2t|lb7Ny3 zG_P;)pgdoq<_L(41n|rRz;en32jiuMuHT~sUI*J*3~>w`aS?pxDF$w-bnN?b$%VGz zsc;uE4V4SFM93o^lpwn|nVE&|Go`As;1XJf6HR3diE_T?2h^HQ&=&oOUWSjw5Xmz+ zeJ0z4DTJCafCKdWibY*)ZB!9Er)kcaC!+N^^hvDMG^zInj=gsaup5yA*;hN^tJ!EX zp3iKT^Wq+QA9;^<+7y)cy5n1 zQ!LjuAI#!FC!oJe0!-*aPN66p%ZAlERj_=-Z#S+GtM4s6;9HZso*8XvT1xI=Iei^U z0|?3j;`3At88~&Q_?S(EACGB-uRn(9MM>v0Cz$ya~nvN6^t8sJT-hEX_q!Q5qri$8w-|l0 zhuaA@&mGEPA00p$f+$Mw0|6C7eW*kT80p+eLvbl4D!nQ6f}P7Zj3E~c*lXZSO2Ek) zpNGYDsA2J{a|q2vs^dc2jw9flfD+8!IN_sh#}lv@fvd7OW0XQAp*?x4Eu|9#BJb^? z3_eS|-84~dc>5A#sp1$E;0{wYiP4_z*=15}`LlS{41>$wlYK9qHb;~g<<`;c3AjGt zIh$K`s%UaN?o(%w0a8cx6AlS{7Y|AS;)%K13(s!35FC+l;euuwT0*kUwwD8Cf-ew} zkxxfceF1yQf;V-Acv(^@ox)&P*=J`;TEhMva(OP<|qLsd2sCu)G1G#q&32X`0?ho{3T!mU!q=gPTst=@{J;X(x*v1RbA|)b} z5nTA@E<%g-;vUq_*i>SR1E%`mJPSgMvD>0ZWnXXs>IBwjc@<0sWFxULNlz-1M}e~F zj>M|uDml}lW5{JAuK6LW3pxTp(?(-o5e=>t=1ep^OFPH11$=U$94(;Khi%^JnTSe(2&m#yB&5ChJ8?SXGP61ccU;Yogf1 zgzrq{0Rbc9p0xEsnzpz#5j}J~Ihqr%l=0Xaf@lCfNkWmX@z6vwz`_{mkr9!j4CT7o zBO9VCCZ9sZhOCGIhCB@2D^rHO7AfoW#maU)e(I-4JB0*GX`SF)akA%=kcjxSO=0?& zNjt-jK#+l>cIjgER5P!cNcw8{g;mv6x>2E1LE+G^W#NqixNEWnMPUQ#WLYA+^J z_|4^Lae2B|xz%$|4dbi;6J38gE99=RN%nY6#xuux4^yG$8DfBg^V5+weUx-S*01~4 z?@e$)lhT!CMPK4M_ry(0mymZb>|HTe^t(50V-#BJivs7g4idbN^DThy zF-$1iF6rWO-;7VIy`yaTGL!ksOs0)UI)~ha1wgV$;>TwX7jPaYb749H8fg$VNI*Zh zhXh;xK;jg1NKB_;FA=gu1S%7+OAOhV2S2MAGGeInev(spz1@$f*fR;FC|)Ry zi>pvpc8$1KpLX?gABcE0N_3$+!iwA^r5Tw*CLWu4*M~N9_LrLBLzbj@+x+&NpkQ7sL6Y0=IFRZPm>$pfL>c&5!a>D8C>o3f?^L7q5GQ_k5BfNv*JIsMpKQ~Dn98IAAW9kVJ}Gm%49FH1H`{7Y zQPiyne-6W&*jh;D%*jONQBf}$CwGJ4O!~s4SlON`>Nt$Yb89r5z;NSx&hqk@cTnA( zkg~~Q*aNys)QE(~bmS_C7%6FYQo_Ma#0%F$$ggmdTpqmbW9L`sJ9&x^2A?t6o1Kl# zywTNTc46Dl%;!Q+0z(0o>jt=+YQ|&L6>_o_*WNyB(Pt3%(2ZZ@1F6{bS>F<&R1`yE z!NExmNnfA}doL5u%6wKE4*E2oMM&(`rKfq9ZoD*c_ZTM~+c#~DiBMM}!W{9`U(xf& z81qi*DhuBhZi1MskYCRr+)hCQzSq9ymoT%8?MXp61zcTzS$X=zcZl3rU+4IWI+K5mkmTa(1Q!O-SC- zAbV_--VD%Ezj?_eJPP}g?LF>ifv-hFo_VUqMj6faqdeiq7w=fnbnAe**_>Ie4S)>> z8j7Jk!Mz>DQUBhUhqQMd&_u{&ww(3^=XLy$0>I)@#^va#vK1S4Y6~+?CT2<(*9F$m7)(xaJkP$%N^-Fhlbx%ccou)YOHOEJ=>0 zSVpdfY(Sz>@RXodkY)6p9`IMBOi>AmDNmfYZi}x0pXq7oQhSyZ(rTpwRr^Qx2@ zr-kOZtPKP{z9r;de3EUTBl%j6gsYuI3sC%o)!uX? zJv!Y$-@4Wo>{Z*`0;Y)*+ikAfKv>ksGp{$xKKN{okDTEzIZY+mmt>b;HtK^`sS|vD zaux(3i%#rs*4^#kM6>1^gfyjM*MgGdJ%+eOQFY|#Nta`21fR`pih&XAOz>)p4xx-wKpzm^4z)!v|^1^M^`(N zPyviHlx6{M>$0+2*S*iqh`YGxAY5tm^>rVPJ4}eKtvttL7WG-JoP0s==pZ`RVMtW5 zf*%rKW1!FBGSiV7!b2XfckUZ3K&u;q+_bmbmX5kkf@W%U7Dl6wqDnXi>(rd7nd5}p z`*GLj_r;a5u}@E{3)k@$*H8L-sq{3Dgh{w z(X6%bMnXlyk0$%gnnn4~qi7~vIKm2%L~TQ9+{Pv9eOt;>UVNnQ6jWjJ0eLv?)@Xab zd}`!U8rZ%o8q8@uNN5qZIMIYkQ1Y~QYfWZ}`x$;PK zB z0c&<663~H%oFJyQ9`z>H(0@%pdcw%ARjdEP!`TR8}s{}uI$S(&lMyd;h z1bA;~d$I=Y;S|v5C1=OtJa|?nWhs5<26VoYcGT4)kaPn zdT%leU1N6GX0EIzVl84<;pTNetl@egI(a$1Y(aqWZUKx% z9P+H?O0uGi8;4#VwZb46HwLfu%ruxv+pV?UFvfd=9!(?8{Cu8Uw7~FN?IIa5(_#m5 zjF#E9F2b;Sj}_(1PSa021yiqHb2+rNdMhBR$tnbIiDsQ#KM;GwTdi#7B%pY4WNR6$ z?_~{MN_ZOUa{e-YLfk^zXzpxyLFN7I=vhc7#)!l)YiFT$_4Edm#U%o1@0!(d7M8$k zso*9O%`vIB*?J?>6`Gw~@X{aG6>sE)dvDiKu7q_3gvH;JrwXN(+rXMZKvZQC8Xa2? zNLhlF*u*y53*G2WhMh94h{}cZ%S%BUq#dP_4axBkg?pPl#F&&vT!jZzlX{Sned%(1 zu6<`x8*3@QL_2vvzsN3~b&nz5dq#rZnm|42KX}_hRJz7n< z*`rq{$ZS*|404NQk13O{n0;Y)JXuSRB)}esiDAJ@o}=JOcPr0j<(+ZlKSZ+6&9FsS`BlU6Qk7R?ioCOAExBo4C<_|AzOFQdMu zs%Taq87F!54wQm)(9Y!<`QBb3jK-?7R_hxuy>r7?`b~j5t+=plZkjiDnw%jnarbfns>G)p7Y-1zE-A(?!iry z5yvm*=)zWBCA*3#FiE6WHj{e1cUWOHY*!C1B!`^OAIs!EDH7M;P&t!&k+jW0!rf^H=TI^Pp_E2BqGm+JHASI1Ocw8r z>NqtI+U04_RZl)W2qnxH^oqCQCD}4tXb(1;fj=pK>oMdzUwS%!>FJpVM%U{}6IzW> zuLIj5cH@E36@hfxA!Loy_BizcLt!F(^xC~`P^VBGZwT7Gijis zj|spb9WrosQSa~R6E$BFMvVqk6tF-y)bWAgYu4rlGUoF$oF&ByMhP+(Rq;1G1KcC_ z)}qC<@ksn}2hPjWxR(zw_fk;7$u;iv7F?iaz?%R=})#kXMx83$>E!s-pLbCGtvgvzLA4 ziS%2`=XNpOks@Y~Ob5AL%6Dtu5aK0x*NkU2tLOpwHEQZ8_{-3!(Jdi14H-Y36>NB# z#&2lK*kLvqo5=6x@{pqXU|{4-nHl8H^UORaQs0*FDJ=@xCii6q9UaNa0bq(!Y4MQP z)eCRZIbZiC_uP@PymfWWhaVgpJvD2q_fGebq>DU&Rh<%v znd%-9m<1XO8!ht0UBF9xsdPqI-C~y7@99f;J7M|)H#D9_<*U-Fiy*^$D|0zBbx`$a zDz-<(4<^a=-TJZjQsR>rp2XK_60)K5uyYSW<3tOIjH8V&5xg1aaR51a5uGE~ zJ)y*s6542$GdX&+Uw#IC`6=%L{RW`W0BZ#Jyl2zlWp@&0qqit$1vDkvqy)8%hPt1M zgP6P!5nS(iZ{ha9J9US}eRzi&j~a_G62OlHmBaTTtdx91CNJqqN*XK_0&B$Bu*F^#o$JEEi2u5WY3~%n~!lINr;y&v|#1N(yRPT@%s`Ae0I#$BSW}lYE z>lD9z#<}aW*D3~2uHCrI1-D^#mW*pbc}TpWUL-vqa(#7Pwl#3J)bEPYc2XT+vS{`c zFa2cI169aEn>PBywF-pe^z7Ap#>r!?kLAwZ)kR#9bh0_UNMq zE_7QlDX84b6IBUn!4j&f1F+-cvOt)DHeh1VQ(W0AUEs}Z(*;Xg*VcV023r1J3)Rdy z@**i3@r6xBnY+D+vYWm_euU$Rs{R_M6=l=go*&dHm@bHmoWuAezk?4!5dgjjO=XEF zPsNh%?O3(k(O@=~XrFw8+uGLFPH9YDQQ~~5wgIQU)Bsnt!-`K;S5SSD6ZKxmS-yV$ zs9xdYx{j{QkfDTI5<2E=RmUwIhOEHG0dl$>HNX~Qee+t5s=PJr0ba3~X11es70`K?UR zrOd$|zujQ1yNAb8qNF0yHx_gvtdbLVAY2BDxhH{Dw<)zK+E!$C?mpwQGh)BOa!Vq>n?v$Pg!JA{0Fv&sCah?$&t+)61kr@=~bJ5~q zJ$opJI|d-q)y-|*($K?&alIofn*aw(8zz)Q#w@d~BT#SbWetsEM`mluTLhm3Zl>Wt z63%-e&Y-@Jd+8WRuk8b7{AAPcWnjo)h=H85K599SY#qnB$F zCqi==jZCSYR<`Y41v07s*{TgCx$LJz{DOUnN{S)U`aZdm8cpFh~%^LBnW=ETkgo zUbvdpJv-X-8-66NZzN(7Zk)%*Z15XV|3Vb@Wx;~5y(oa5(sZjq>Rcc$;VxMbSZyYG z3Qg;_5)62-2sGvt1Eom5mFBZr)hYtUd&?a= zb9UfPdS20p`U-lz9-2m`Q5Ls^*Q>%FvB1>o2ZMMZfdiXakH_Kgu{|COs&3s>%#PCvu@H;boj2(tf(P|BA6OXVU94u58H`-toF}bQ=Ga0|60X_i-wg>HE2ekUI zu^gx7y?L7?FD`PoGn}bjhg@QLVZR4KdMmB@LJ3)()qoa9SqSFAMK185_&sG4OQ9@0 z!eSKhkf30Pam#utX(3RLaO4IW{r27ID};G{W1Pog#sZM@E+>3ah8RZi)pK1n8!4z3JuPBYQG<4r=iag*K*}E@Uno_X((F};FK>Y=&ENHw{o?0~rk$gA~lP>9) zSSefBr7yUwFq3kc${TN&k8$pv(i5QTejLL^wN;G|agPG`*p35Qukq0XlM;+}n;NsO z;3j-q!cOL?jabl+u!HexD~zc$Aj8buWIXW(l&qxpsYU8kx0k#zleL!}7lOud{p9Vg z5kY4$9G^Aq=0og(5(wiwbl(hP5{PCbyar2yYw`nquS6@WSWtv(en6-MmssJs&n4Il zpEp~U+*J;|Nt{%sJx*Pd459Vxdf|aj%hQ5Z@4X_Pq;6g&!l2#CLqbukc`tP==2Xz? z9RRKx-;1j7iA-1&B7Gi(rXp)a7CI(73;ZBqZNT6~`94u5F*s$h^T(VLQ!|3(XMB<6 zuLp&u(83KcGNH&y*Fv!O)Jlv8M4t4PYyrJ|QDP5E^H#gc>vrJ`9b+u8$-Qo4Yt=x_ z{8lL)a*wDh8iF963(!4Cf-6pTqJf5C8i7%})HK}-j1HI92YQ?K^3^c{=)tW*!vvKB zf{wSLRMibW`e(UO-09Ac9T_ zol7S4xH~$?^)(h}son$b110Pc7L}8_W5s#JiZu*#T(CO=!$bg4DPbkUdXFwqcZ^1RC1)g_ahw(3^iGPmeQ;|mHxjOIH1y0M0NO1Y|N zqjm9G98-`u?Xi;dIAUql0u;e}7->&;6D%*xFksBAkyvF>k*`y9%24>CS@a~r1C&O= zBgT3xNak=cn|6Dmz~F43LxGuq$31xE$|JqN(IRNJj|rJy3HZ+LWa|S9wd6;Lgu6s! z&9+bMGN_F4vR*)lbx*u!#Z-;H8jd%y*FlUoLtHt~YDR=w-CaRVo1OLYA@u?Qq0V%m z$-Q%Z{FZd6*pAw)9eX1e+A#EW?@eUz>l^FPYgO5- zHdqBEe3Q?5Y)dbgQd1QCft2@nMGcRV%*xnwmk7`6W!2G5Z=5(pyyOinlDCOiJiD)! z(AyoH89+xFP$l|FQ&PN1`lR&H7o`YO0#Ve{S*Z<5x$o7oBWhA?q3;V=tjbC0gd{`H zs~&p%kQoqEf;}Ga>$W2$A;&tKB^7apP)&LUa?pYzO()$MM@`7Ip#w>4`pQ6Edzi3f z%8@2}2UI5AfB%d*m$6bw{RRZdlLvzR@T zr>LE6)%;YmSPp8i#4%6T9arBq8XWTtoR8b+6)L1Tge7}uEr<-D8h}l7r6Np%xA$XO zuAb~|J*cV&2!0ev7;G8iOoFiLS7-v}6`=f-fpvu$=ym4?vo{#o`VHxOaHN+CdmhLh z<$ak-4_u#7Lo_^l9d~2~N< zfOR1&!b1__XbTDL2^KMJ-lM1Z;s|!LCD;V$A-XC#%L{{h?JTq`T>FN{VIu_IJ%L)> zJ2&$keD}tk+|-v&b>TI!7GFtpQ}0O6km@`F3`qrSUJmkcZl#{_T-tnM%jx%+=v|@b zC#DQvn8tfNtI!cvlM1c~nEH@Ud6~se?t%qcAm#vcy@f6OwF-8IxdobJRzk~*bsCVy z1!{H(lm3Me9SK3Pa4Vb7C-Rx&(v%iDFfHKr1)!yJ!iq85wq4h1+Bu2K8N=HpqBlbG zthkOznOyOW7L!;wgi%6vmVl=zL1P#B7H`ahYsROz{THX^K(AS*!-esXn{bYiJsq|O z@PxKDx6hh<4TLflOA+362QE+jvs9&r8#JhkghxsB204beLlpP;E9tq!@O2nO^f_q6KT*p_03eILU z7rbxyt;nH!jhB}cg)M^~l{47g?5yo<5ZR9Am@kC?+!rT}ChcxG3ikt@1yI2>6lJi^ zF>&XeIngwcof#H*klg&zX+#uY{3ZuQ1|J~zke!p|gHw38fcBEsCnNnP&Lm(v<(?Va zN>+C?By5TY6V-*X-Mb8rSNRmRpEt^m_Tj}grE)21zLwP%SGw7Ix|GZrh@^3xvwl_q zWVBg=H~Dm;2g-fgLlE4zU~JTDtKOp_Y9@x0nJ3(>rUHG-Dlt#km~v8`Jgw)_>C6t> zS)U@f4Kms@lVfgIz!WuOa+qK|5>1cYasd#n=j;$hsnswZF9|_foU8k7=$oVIgnCg< zPVXd{6t7~Kk+QPV%;h@uNjg`V*y3}LhbMdCdN0jzIoMSmninzTqjNPXFBLhc_DARP znm~t6*WOf3lWI(=scNw83UoSkC(tX&*X)upgi3Eb-}pDD{>ACKXMw8+YPga^b2?>9Gz}}s>^1^uls5NwV27r!=5jbp4_dYlH#*N z%k4YGGMd_@X@XF6hrT7pxh&azUKoV#$O4NBk7i|gL~?xiIu*hQ3pA**Eovn}7tLZN445bBT2zs z@P!gTnKwC6I3>congjy$Jc;Rr-RT-*h(^}yrETOEX2;RTCpvhKhUH~$(JKOT0m6Xx z!9L+-wZ0LYuGV$B5Dd$~)1C+D9A(-)D-3<-3~w;D%YDi*S+4OZg#!!#Tua}afCKXI zBfiriMwTZldymmYq#QF}cN^ceL+kOOLB5%Jz=I=u*(buNys&BEVl-9n#XEgz6%DF6 z>U|`6Fi#m^nJi^0>h^2bPdEk5c#y>Q0VdOGM@X#KTQH@^k@&to4p}!B|`z z4;`O{GR76-y&6a*c!gY5~kx%}*)JxwY@{LY4^8=*ApZ#=hZ_ny+B)Ai@PLG+yiwmLsG?t>-e4?X`rFcNN2p+N>hh~gx~>Q+dFp&+ z>_en{KrpXDp$kXL`>{8baK`nf(RbBJZ178OgPY-6>i^ZM&ia) zWX`^N;I8(ab5Z zjYR;{6ETPMEm28oES*8VlPAH#P*i~m{Xi@qt-jZadO9`dqq`XKwAZ)RtE{RKeT-n+ z{hmC%9E2;S=YVYl1NKyqU5%b|O$WRIwZkHFVQOk7rP_FmEB=U(>6lGmP<1XN_h1nx&Wy+o6bl%9rzJtmI6 zT=Z3zmBDtqTzfk&Cq5hn-9{Vr<1vOip<}$0AoPAD?R$D=6a-^OvW^Yg}8{-QV}D{ zwCuzXnU_V?{$4#am(Uh!9G0J+~;pk$C**wGO>aC z?W=QN$A`U&EPdr+Z$fdM9~A*zO5R(DQIg9XC#lAmjFQ$S7@(|4x^D53ns+N;bp%NI z?t$=g3_)n5YI;jE#b<~EZt1#HSWo2Pd-{@QBeXmaNEX@PDY!9U_q|SYl)Bd(f1#>t zL{>u zc0RMUhfg^knc7OdTn5c)Q1T}nqkMI5H?PJ5l$l^>ggKBe+2V~CV_1uGZM5pkuwcKOLBq4B#1d9(yvyrY#*sJ?#wfbbe6!4WnM?< zCU%2js$K&*PJa^^}wbGKltV2uDn z?GN~ACN3LePFotk0C~W&`{cP3bCOeh(&5oxon2KFmI>Q^J6)`IkwWRdYrguK=i#9Z7EdLV5c6l$cN8L+ko1Xv1pGr!tI2^ zK2bILLe*^7fh+D&NESUM3ooOB#G-i=IKAcg!b6{kKe)&B>XD10JUj=BvPj(s2LnL? zS7o4^M$-oIuzeD#U6_^yYR}&mhoMv2O70mvU+&Ps_lnFZ&=_rBpgbvAEWu+N-?8Ok zAh`{ncB^PqB1NvdHwYA~zRzgZFdUwXbqax6&ty)BhhP_hdbj??s?`%0DdSPIES;LF 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

;TQ8)#7l>4Snz*J)FMZ0Q-2>;ACWq)?04 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 z zB&4f$zO<4m!@b8O%L=z!6v%Oe2C9lrL(WA&6N0r*JuD757wqLZkcVj?8-LxrSEvJ1cl)Mf?u9#doV1?YRkEbIQQeE_Zs;C_s#0td~%R;;x2s+`Nlb^XnBU1L#NDRRUaDkp0R~z zVpR`|@g`Iy1AB}q7oES%Y1KmZ;)I?MVr?WFal__AWONNknK?jWO=ySY*9P#bhd+HW zeUpqNHHa_$ICkmhtX^h|X}>FIToP5oakOia$0>AD{Njw3iD#ebaf?cKIz6zN*fX7! zvgR#Ya6zMe((;Rv7$ z1TaReBb9MMV#$5eU_`HdgW_53IakAG zxsuC!9NQ+sdg52sWG4Nbm0AE{oVC%VQ4nz@M2J$W2er@j-XIY|>?^#P;8&X4te!MV znAV`J8Dgze!jspp)=kt#&FJ9^IYl;#SL(f4ma)*{PuB21ovXD2V4REwN3`k8s6 z+z|V`7dvY%S9X$^nW6LWZFYM=JZ-es(*u{~PR(K>xAk%-blB`J^aa#Kst!K&BJd?V zYlH#LH#NLZLEl@M;!+?5Y~@mw62Xy;2E~CO7 zqCfLPJYcg~5J|_3ofJz>>MLk}K`{>@kj^N!wJ)ExW^0=GGvo&>V}ac+dnZL0kB*)z zRv*0-Dw$NCvH~IlZ3QLMa+)ED7wMw_MVnb2JTZAq>6joii)bj6!h*Xx-v{WxFE_m zGehSV1kYR;ne~Y1oy3cWHCPF>6kxrNftBz`D*y&05iv5B<8fM#qt66AW0pDrHc3F- z1TZ&u2OPq=?XsjQ3SJJ;xilQ_W+Mi9Omz-OaEqQIIPRlaO+5Y%%<76{YgUd6o|=!E z?JDc^J`Nqh=f5nNQ>P?A=H2V!Dz~={M;ni3jGYbM+m-_(;e9|>kc~8Dqw_AH^Sl(C{(m*cNVc)!6_dLTYRnUU6z}agWQ)*YnDt{QaXpe9!8Eng#HDZG5 zN!D1LRHO@ocf3)g_ilUjInZ;HOrVOL%5GyTA3Exh z&r^_~MN$Ea3raa>Zm!czfe9ZWBe1abj-cb$rfKgcon&>I;9jz^T2lFmVD?|#P)@ui?@ziGu2Wb^Nfjs5cYzy zF{?32S!V8wseoXqoaYV@J7OrU&Q-h|j=TAYw@+1^bHFE#tTlQ16h#7EtlFOPdRpUC zRm_#Ub@H~yGqNcOhGe?VX5~V%KxM@&6WFc$Y{ZRWnhG>(b%NIBLK?G#%Jj?>b00tQ zP}*!m(Pf2t4Sctq+ipZDy7ugm%Q6jjws83Q*oe`Vyc6m6< zFC$^%WdJR^V+k@uJw4I4oep`KQ+8gM%#$4z82smByVXlu$L~ ze(7Yx92ULa-I{4D4}2??voG%M1m|frGvGO*4Oi%6Xr)2Wf>dTXz;L^0Zb&9r%&6Rw z;OfGfx|Jvem94<8EfQjTZ7#l@Y_iyn>rB$N)M%j1%~|zwb6>niY_UCia~ZD{wi&=u zuw@3~m5`A#iX0Kp0uF({AsfTg(+(PcvAStP{EKVz(+7t&pi9M4)G&}^P?L!G^ig^5 z3XzH?Qzg%DuE@L=>Wv&Infk@T7G_63Enbj)IoD|~9D6HI7uXUVLpRNxbt28Fbg_2{ zp1SH(r*SCr8t+N6JRi<0G|+kqXOA8E;hSIFTS;rzvf(z4%!a*Mz)`cq_@&}LIxo^r zJ)U;FwR<9-Nrx`3{g=VpJ-CcSpm zC;~5B_m#6e80SRYQ+|(9H^ue|ZybSeT~nre-~|`o4ATvfb#T3Rk;BsW!iip-<5g2v zwmHNBE;a>&y&N5K!bbAf(oA-YH>@nOXT_T^I1y7X^3a*z>O-QL+aU?O z)&L>9u!IPLU@Rbhk@qT}7TS%tFS=b<;~hd|amMzw8V2bebVobwf^MrxESY$^OO#*6 z%(0F(a46xOc-*@a?O=@2V^8%`zr6wVtZiZ^9=k>XGHc=&b>@RI5>uJfg|jFhd7wl6nNYCEevwE44<(tlAKAlPh8hA2;Zxc}!(wDBJ$19EV z2{kaU5yqOpQIygJ?~r<`14RXw^1b0BjF)z;vGX`3RE!M|xH%NTd8@=Rt2;(upBksl zR*}oK5lWpZ=oG%7v_r+H$Cf-`Lk}jw9Pwr;x0WRh(7ewXTQSa%_DE}YyBYl@0t1+? zz3bD=q7L&Q%zYsOp|*_Y zY+k<}-c|?jcj7F^iH!mVD;5?FSRQj$tISU}+0m*YhhBE4cDeZ(K0KfcLRlJVq`p@? z#6_V5?SUzr?X|jZw!vSRyUoI;YdNN{M1}fQE_!jnBc8Rj#@xL&30LM`yz`3>PQEv~ zjoUZ(_hY9#o!JDfGCJ+@@peQy0Pqoc7CEtzGj6?kX-Xs=Q)_m%3<;`cI*-~o7zya& zIFsKXwUTmPO6ZGbUc{3{K3vfd0-rL!XMHaljaXw=tsDS(Fu6iKMbAYl?@5wL`Lgxd+(=zIN8ADafg~ElpAzNOGHO?sMYESI|9@d=<2R%cv#xS<`AZ{|R z9a*#DdYFXStUxI1fmVshcB&h>zLMj2K-yIM$YWh>1eozX*akYy;?_q|==1U*aVMq> z?lGWlLgyVG?15M6kc#S@c5ft$Ee60VkAF; z2_RV`Ida5B-PDuoV+X;cHXY|C=5QGyg8bh&^k2K#{<`q0>^0fD!xzhSmo_C^D zkGPYz_QcE54?GATnzs++Oi7{x5eoMKLK{(&MXo|-I7`^J3ezrTO=qr;2+JMI+K+fc zmR!n*#9yF%@Ae1}A7_jGMT!OkZXFJ{Z3;lG!XBvkn=XJze8tz}^%z%EkJ)&pp zYN$u*_8Og_`somyj;wM<%j#1Xc_3Z=j%zt1KuXTy$~4k~DPr@|*YPd|t9TTM9SWP_ zVmE3R&_>2iXVu%&VmBxWDki1o4PdpX^vqi^*J~d3GmHl8(RrQMBLK%|>I$&xfe3Wh z2!}6tUos@t2tP+NsbYX#U4jZ>g6pDot-8MFP#v;+o$poqtkYY3#RZ&}i#Jc7y9>@O zGE7!CF@#j;F%Oh}&x6LUM>{OBjh!`T(%DWtr`PvPX%L$a<<2YYqINoLF+Ep=8!A?{ z5{JF|a$rO+uvC_$;H4~kA5XzlvszU(E<7`S5twaMTqH3nfG^3wx13~dS_R@IAD?VE zlg(Ny;B!_R4}hHO#Uo>IeLk%kVnfzt##MO-wX+MSBCoo#!-$h$eFu8A=uCO}U>uf( z(A-nH-TTec!w8aWIs)m_En6LR_uU()<*4?$@pPzIkZBWqwUt&YG%xC+hKi;K-c9@Y z+6AP)$)X&W6C7Zugu{l6>E|01DKKRhk)-}qkyZg)mmllOddMDkUyr7AKQp^Vyj0G} zCL8KWwWa7nPuqy4POt~9U!;70iq#XSGG2;5A3i{$*ht+osMZ-06DHbi5UgjnRaadCf9G5d*omvA!guK>bS(@^!po@=12y}KDxwdBX~6a_~pGF}&{ zB0vS_0CPxKp#;3}#MIYJ%JE!^`!b!pJ>c2Gh1E_v3#7UbAV2rWpeAu;QROYMt_18? zh>suoA|^Wf1k%7zS8k0&8kP`;s9_7c5FG=);9K@7ju35lz}$H?49{>+#SSxFmqUXk zs%i*lQ}m@EJ0%;k?YXd9O7~RDqiV{nex$O7H9n%pLf8}U38%e5lj}aotUWUISsGs# z9KI&JgGWxmh*PBM55VPB%6S#uP4Bytz_1$h_lB~rydRL&(;^IwvwhmH^xkD@7@pq6R&9K`WSJN79HPlXlGr-(*w3ap95bJ<-HV;94o4tr?s<>p`5SMN4vMQ& z1=0&te(|g1(i#mbqk(5lJS!oR6HOpbi_1zYpzo`4R}F#3#R?#(Pe1t z;d#VcNWRiWld$or=QEZ^68nfuup1J)lXf{6jyFYn11*BFk2RD;dw{cC9;pt}+N#Af z8{wsR1iWk<)P}r3d-^ zdfkv|#$S;ih+J9*A)Nr)GfvxVsWK;S6b1>KeOw#c9=ut7CRjHz3lxc+leQ8u{9a`P zM`TWzlUNKn(MuUrQr@c**}`XF>}!+FB}yW!{!1Qby#56|P6H>B6TIXl$|+tZlKMW+ z+~Qa7dg`DO;4Q(kEur>}csLcUaMw6^y=$s(5YV!8y0L=TDBbgosOL%E#e>|O$~8fg z*L8H^_MXocW;)R=xw*S4*n1eN#Lr7RPiuTEW|417=fPR{J26BwGnKKC#l2F5%j=l6 z_d2HD4ITCqCLD^c&~r_G;3=dJ;m%kS_q7^`SU3hbaR_Qw!3Q&m71Tn=DP}`zIAOy@N|nxB?06*DT>|9j2#~(O7$8O`ASb$NQ0c9 zJy>6|jakDHrwqw?Yre`A=Ho^cnC`7;vi&Y-B(ssL_XbYKN0t_2mepDw+^lQn>80cX z32y?9fh&-C6W7{V3#mr#ZVR=7-m3Cg`nuSbaedy55%J&FO{`m1;%B zalU9SF;Abz8lZ!mY50bURHvj|at8!myNev6o>$fDxQHfKw0PGB6GkO?gb`}I_IOxt zVSP(Y%q%;WOU%<|dHPDSe*$a)sL`_u7Z4a#cR82d#|W%e()o-tjtRzlWs;NQ@vS+i z2xH3|Fl_gOJAAa8vsaTX8%}~PVez1+9*u>HZZTg-n^#RZ$Za&y3sq_xaXA#zp%Hp@2TZHU%`W9t)O8`bwE$Y zIGO+>-i(uL!DD8CXJQ59R~LH1_$V|ps$3qKy)EyuzIJ$GetAORG+gC*3i<#qgDiuu zl+xbP#_dyEb9#d4BB+gynQFWk4=|q(K9fZiPjsBRAPaj9L|~Qu5=y0^HGtPKBwwot z48Fc$ZFHA#BYo@CE6Oe=QFlekc1)loN5%e{OyCNN4J-+e@5Bm|>6z5CV&(!z>>cik zH_|L3II`G2M^N1p{H$#G1&Yo@4o`r*czN0Q*s>@r9I*#$v#nXUxeQgyrEZ1pv^hXp zWc)Qszl=0fsL8nI3fSh%y6AeUknXS6@R_}r$Yx^1c5JY){Hg{Gp+!+Sgn%?E*gN3+|CcowcfCGOy0ZQbtvlP z49YFI^Yw;c_Q^3lxdI%Gu&u%uW0x}L4RuIW3wcz!Pq-O8?ooLQ1?&67#XoV$-I1QV z@tEypk;A`u0k|h5Xq`1;H@j;$9$7I5)#O@!CRR-o1(9jR{)}Vc+{LLcy5F#sCuH~-WLvyPdM#Tj z?;XHyKd#Gqf_}#vUKZk{giX~}W!avW>7y|B4veldPmnL|Cia#Jujh4zrkz2$@zWp@ z=Zd#yTm_GWQFm_}d2djFA3fE^#+9?+XcBupi<-pE6zCloSrhK(AxL1zac=L-hb-QW zGTp1U@qn@1MasKRDd{w+e0zD?fcrEaXjGfWu)#IQ^Bj63B{KwrZy!FEBGfn&SdHeu zw{I@-aE0>$M*4fNRM}M`HEH9y(>0&x0zJM#4x~5!@Q|JGotUqO;tW{tTyTJ8<(%z} zvjD6B){(gHD->B9Vn>+_ah8z1p=&)f^;5ydErbQ25P5ta=`$PitU=C}_hOTtmZF?f z-GHr~-WImfT+i@Hc+J)8D!6_mu@gE%xhPr$2d7&F9!S;~e!x=Gg*4^dw9DoIy-%|c zE}ZD$t+CFdYXKkwSW?bRAiTMUl9^?J&qEAI^w=eTC1 zKVY#Xd+k|X?|twR`o)XX^6P*j3ZUg%-=TSb0fT+0;Rgn!@}4^D%h){xS{L^lSwlRo zMBQiMV{P^zdwR81HlK6!bjE=5v)Y9?^AUPs9W-zN*&QPrEI|0~J*!9)4O_penNGFt zDmyRgEF_2*mb{Z#8Ch7&Pj&e$VQ7kNgdK@6-#D93~pQ$|2RFL z1KwbjJsmdpQ<>V^E;dDVY4tZH+8_f*dT0R%U5{SVwO1tb3?~}Z5|OtSB$!2kK3grB z1vWF4utd8J9@osBKunw&vh!0kgzof~doI8!aDWfEM1nC6wB&%_+=g@UY|@lMKx6vT zBW*BpU~d=?1~j4yF%`2zG=Qp>)T+a#*XmZq=7=;2Gbz-#qeKHl_MFaiCs%Na?vNY8 zE7yl4DdkPLfKP^ZL~hTNZO-p6xr}v$DN*m1>&>ViT%i!t-UHFAGh?OUJGF&+%(Xz> z2k$EUbVg3+fhIQQRH3wl5Hio(9P1crP|QSQAbtj@MV2FOXirG?#(P z#jS*U0kf5X_7UmMJT7IfE(uHkO7O0P2d9NW_5ln6e+iSuO7@5xiS9Y}E7s+|hZx3( z4|4{lk_wWY`OSL~9-5<4C&x@W^f;HGV`%D4%w;(;;Fu9PQ;I*N^JiKv<_f@9Ah{KYFyvi7SHT72Hkrwc0}{@aqUM-OGLLu#ydJ=6fhonV)X?mE^Qu;FrZi%o^dr70 zA?(@feK3Gxkn7~|3Q9PwF^`J{30X0noy{8Y|F=(^xBlSYq6% zD+KAA%BTO36fQ7X|Z_vruj4sI^@e3 zq%UJ$iyQVRMr)+L5{4~FCHYGky3Kom!%|ePk2Vn;be{~X9G$66_hvj`0ZQ(RzHvG0 zVXcFeo}+%4{8}?-3!2qmy<6c0rUqmd8xW@SYzU!fjE6Vay9K+aEr~;Zc7tmXF3-li zVtRArK|vOYE!pEo^Tr5dS+Mt71C#}4rnO$dBn}?Uy#szP)Wz2nqdb{lpo@C0YWXcj z4OOeb(#fP?VmUINUBab>JiiWzdFX7-s`A>=8Ic8~1)HOtc^f@fTKCKe7+}C9>N&yf zXaT*!d@Rybql;-nf*K`WWtdI~=JAefBe)W{EruX=!uClFP(|P}P#+BPmf~>ZPCP6Y z($TlEA!wH=)&7#65GuiyRBU8p&#}nUJmD3!lZonw7&`P?yrB)^1&8HZ#7kk$XAxM^ zpygvHHV?$sU%$;m6WVJQ}ep@4ZZvDcMJ8-cS3M>rZOBsSMWiE-_xVk~zE!OuCQ{%vh{&GePF`5PJ!XyVa zHu(@$S1w8d>PQVUw-^T>47C_kUW-LR#WuTi+tY+}_NsQ*u1t%&9#HF5u2+m;j9Gx# z!b~LU;K3kuxIQznuX=AW4c|ICd`(Puz zU0|@*N4^jU?^1iQcslM1YK@*w*2@}-HQ<4MLM_CXjl4)#ia{~qvlI5l*3Bh7`-JjD z8?aX?C!Q*Fyi$MHMBqO5fX--Oa)m`+LBG{WYYwlim&v-u5@wNDuy}fSw;r$=UbiA11+@2c=95qm@ZvBD6UxvOQRy(fe)j#frcZ#=!(iQgdkCM8#Tgbpe^ zK@4uldEveT*|MY9cw(CGbs#s@)-LSUin#ew@k_xK1QG=GeGO-A6oejPZ%gySq9?b~ z%lApFmOiSiynRA$_IidBU9l{S zjDwF)y4AMNFG4sP0y|a1?g$pVPIIHQ*0|d2NT&pb0i>g9i>2Q3{$~Lh$?l*gWw}Q&~zP(34h^b=eA2#az*l- zFK*vi8fD2WVb?43r)N*m9~d!>ym;1X-EvRUMCbx-3Mu(1+tUJ9!-u@p^X_r0!9o?N z&Re&j>?L{%ev&A(T^HBI#B@82ONRXX$w7lY0yJLR-7SUFlJx1w+_3HB;IXJTb2GJp z^C&or`_=0je2kkMX!hO}zC@{fT&xEp;n*?FVu|#cQOHaerJlJ#6Yn(CM3=q3l%W87 z(P-q+H2cypD`75sUzyGs_LQ22Jwh{jV&b;1>0va=xLTT?wAD!`ozNqdVMN~?yU?l! zkK?5I*&A8DEC$ow(kySp?nx~pBP2}3130y@k=%#tx|7A?)w96V;``=3^=Wpg$r^@y zr)3n}@VtEI0qGiScWm1zCP!bFGU zpMJ&Hy@*F{+bxkocYNVlh)s;Ry*5NeJW9rFBTV$_ofV zaAnIoyNAQgoe2V4m;qThm<^{^af}F{$z?jy#l=2^!joa)8rFPuQ%YsjqyZobg!O_ zdc9;s=Hf7X$p&?b1Dzl%1k9%1^CivGFKL_>gO-8cOb^ob35CYMIoR&}`Fa9T41+qr zWdyJ0@JTMe07$re=4LRN8wPJt)x+I5(FwDFAB}b4KpKFqu;R=Ej_1~lsE=%L-hzqr zEI__ysFLfeS;>L4WmSP(>v}d#2g@g*Q_059cDLi4UiNt0+uSp?+|LM87>a)v@+nV<8_UTHM&f z)YuoDwh0R?RiYja!z!^uaL}tR@RT5fcWk8N{ptt~GBjxehg_2NDxN+&GwfJ>10|NZ z`{d=F8cArgDs;Vgjv0WU0KM@rtXmV5F!Gssc@&)H0=$xo+B5Aw9T6-SS};vDPvbRN z245T=Eer*AzauO?E$atPAQ!JDCb4xAXT!iA7$ekJF3}zF5?9^iI>+6TsutG#lmYLH zfqQ2f-hAP2xPo@cONz^D!uz4+UKitv&WJodiAinedP68~L%YUs!U=7cqm=q8JkQwZ zS*f3SzUWGp&~r?p_tfUGh^c!$;*$5IFH>#J(;=jT#=wD+GEI?Ub~P$+(4?jz*(Jq0 zu*>%zX;J&&I6ac)tmT9=ndtdI;j~1!aKo%?0YC$ z$<#%pwQqxuDBi}xRb$kg7@EGfXeGg%KmyV&uK*v(;FyI9g=}hR2`o}Dn%Wt;R~)Z) z-#bxD+kmmLSMI_3njnt|F(ToFx_}Q}iL~E) zArF$D)l@BTGnE!msH*8>fD?|l4?D9!G1apB7(=)z6VfgL+>*=56Z5K-Dj_y7UncV< zr?CpTQ`z0~jz$ft^LLe*X!mG#bw~vL5{!`by~mextpfrJT^O=#h60_4;akgtv7L*B zj}YKFy*l9Wi(yx-e1NYb+3uj^U1}Sg*bu?EuGg($Dn8+Z2x0+Xb}N;&W?2Z(2diiA zrbUbPR_n1w&BLMhoO?L^K^p1^v}NE7M6#sCv5mc|M}u6oE`23hmDy|)_EPU%T+`bb zGtP%4?_J+dH%b#XY6)R;hp+{9mM?9DzO(^d-dh%UvWk~^Om4;FgNM`^w(^%Zb-cUs zD!22+k~^D2;sIC*Xsl(xVO9;&o>`kE!}Cs2g&3iV+C_Zwbo{n$NckuP!RT`8XkJ1Q zYQT=Lc?v@VO~9+CCgv6t+002btrAwWMz@DZB{gd~;sWYE$| z@FZsI;utuxHlKCQd*w&)DEUUN^^h2tuZ}X7jR|kGk=^IqDwz5JFRtzIojGw^Lu8(g zy*S?IruF;@>$W=0X6osCs}B%RS!<9*yNS{&TL1%ueOI*Q3J}F1YPE2zPuM+4Rbe3= zrqg3jMKbiQ1HM%3C7Yy2`~dw8V@F3`Xd|z)=FB~HHm4=9Ky`u>Ti{mMhssPoc+0z{0Qyf^m7gc{`Gmp2Mu z-YhA`3y%R6^;>mc6Jf|rP-B}o7yL_{)UbQ%t_0p!Bhs%Mo5A{BnCC+=Uam+BFw|AR z)?LVICd`x-b}zA|c%9>U44~4e$Y2B0b6tZ*cWVHpFt(TE(QG32-laTwDpLXAw7XD_ z#7z6ts)t$dQ0RJu)oqq@3C^w+uIo(?He>9ZF$r!vv*A2h-sHFH93cppo!QeczI}2p zoWTV|tPN_B&5{n)yEg1LT{h8Of|F}X{O!dIwUj!U@!HzLFOg{U`T`Z6#cM-cnpAO( z+Ly$`jt!5})wpq?CooCv0d<3O$!q7lH;^_@ph_v}UImaX9?5IsVaI%&<>Q6QXD z9n$z%xSDg_T9y|9%Lcf$-vO*vb8%G=-HUch&T)PQyhw7=*EgQHz8*{udd8;4Y8Wy) zD{D(CH@Z2dR5UwaYnStCpNAEkr7}oVy@$!B7XBFC+|v#WlgQD!d=^0;5MMr%L!U}^EQbvY>uKzML0LTkA`BKOYL1IB($=c+^gvYBlq2bH{sAv zmj^*TW@Lrr9?zK(V=XA=l6!qag*o3v(_vP3(p zm?Lb8@x9@oYD1?XU@&AVfYrL>suxrTul?jqSZi#~XKSQ&39ogYGowmdr6W=5_8 z%)zLgBxplM5;WZ=pp5g2KzkAvOfO~*p6O)?rl7*Xwe+B_mCY3dzaAk5WdyFl?hVVw z1Wzv6@OhKX#1+7)kTb+0)Ha|Byh2mARy|4pFe)XMZBUf(Nin#m6}NuBy1w=6dYza) zf$ug8J)k{z*2q?0E4Y+2hOSf9xlw?&BQtFO2$do-Bo{?(L&P?qP~Jz6vLCPYaE_da zddEH}#}|wZ#H!_JT`2TM4Q<7Xx4U|bGw7{@j#J(fdLc(7qzjsc;!=j9v2OhaGjF|r zxgcO*>Y`=bAVgaxskiwa||8H|!Z3Ud?4PNn{G z8&;`cFxf!`fN{%u`ffTDFzd;iz_3mf1%86pL|P-p{Ytg4mB`BaRLtf8g@BMV6bBgI zmpP_i=7@pIjV&^vW+Bk{Lo4Wd&(mB-t{;uxU+SE@C7_2(D`&kCg{UPYTzh9(2E!Rp z$EFG^Ps(VnA#sji8~Pc!Qq>H$@sw%84pLRaBl4Fimx_}22o@XVp=_ez77?Sf1`fV? zzV~9bE=eioe$20NbBrQ6P5IOfboPV7C-1=wABi%Ty;~>KR(&Lu;@*bl^I~&e`;^p` zrrd**0Ca5U)^cwqOwL)M(z!AoJRGMj0=+s{^9f<5DW@Rx*nAxG-jnv^5?lA?3oN7_ z$ajU{56quyWVd@|@XH>3*)x}}k8j7{3niuZ6nU@r#VE|sc;RWan?*F2ZB^MYSc?*_ zXcw)|3!w!Y5d~pBM<}Z5-+!ks!5(Im8mRSPdvge0QI4`IgioS%2wS!ILuJjjS2dt3 zp}Es7=D-EGPr zU@&aa?U7fBjzDo0c5%=#hsCvUPympGzR#h{IT^BMESA*7eD_)OD>Y7%e6Rt;00nia zsnKOwp{i((YkeT8MYpl=o@!FR<&R^;z2m{Z_REcTWQlnl{%wD!< zJy94%(o6Wu9hzD!y=Q*dqM2QCk%o!1^#nDTj)tX&m3(P*Dl@s0oJJWOw1ceU)tlDA z4jm!CrmN||F|$`wOf_(w9#oo=f+7W~)v1_4@zy|g z24HrSfevY4^14sKU*Hj|82Lk>ez1mSR#tH@4m2vDm{Zqz+*Dz(`a;~2WJ}^4x$n}u zdTng8pA^};ft|`pnO~vSTBA9ViYRO(JKPZfb0IA_9^buFGl=1V!XA;SYc@(dSxuqWI zXsZu-O1|qo%q8jFem<@`#x_b_QF7k(ynqb_G3bu@Zn2(}4ETmT=7p#+4DM_mRU_)y zr*f~Mtk`cMiQ+Ar7q7OjmUX;i)Mr(2gL2cvtISVAF0-{C)B5aL9N^r9t`et*a6xW7 z34A8ympZnSgkqk8xv-@%VY8OkczkJLmpX_eO{y=wAXJ6*nE?P0$CM;JdauskJZ(#q zdFyKLgr*ym42oF6btMOsou0P(UL9~g#EgW1HcCwkMBS?7%D%N@Ezt)@))7Zy`C9aq zE601~*H4Y|bJ_{|bZ5H?$Ry7Az0vCe4Sj74iaq{H>fNOtzSh6wkzkTrDU#S6TVQ%5 z{90v8vId%`^kU&PItTf>nS)fUZKLRTV-4(*Enmh%e^iX-I61Fv=+&k=wlN77ZVP4r zm_5;XEuEBP7B#EKQmZ*laH}&=%^vkem)~sjo$h-{+)7NC1m(t1iHomBnQdvbdndaz zD4EsU!_QIX+{^PV5JUAS50Tk8iz-tWQk*NCc$ zc4%+?;Z_E1DnNAz3e{V>NpgE9>;R3@M53k+5tWjiV-ogQ-djH|X`?8n>+HTw7;P(= z&GD4Pfk701I{Mgj>vg~*xp&v>9m=Os6k>~n69UK}+b2CIZB7Olb(}$rR=CW~%;ROq zyDlhPIm${8O;Gx<)FE@abKbqu7y~x}f=e?xrGH0Yl4F(gV`&o%3`1;-fe zT>~A%1A8=sxhDwPDmmV&H&3AP9SsmY8!E2Ielsbw&kS#c?KNAQ)j7`u>^(=|aj~Cy zr)9ZX6lCBB6>1sbspF^06piiJD-F;2xmhl^=po~1g) z8}pR(<*dEprpPo~X^?8j9EJ{H1WkN4M1z!42-@Z-P1?Ogc>8!vVofYT9(S zB$$&9SiUyPcm@v?g>I-*TN&YMgrY7wiHh6rhM9Ty@aZ0uBAG5z!2lBQQdV!O&xiIo+<9kn|Enj@QqRLVv(Jr7=-nxY^CioDfdAt<~@MzA6&bvX=e z)e{}I$SOiO9Zc1hhZu;bUn-yeC8<0Y7$`cL0C>ej{1b|Q2Rt%hNFOEfDJjCY~ zSj;&TPG|sd@FFALy926-EY%dlp^-%uu<4B56D|ydCEa_9?j}g1tX( zdVL3&Zbx$;$RZ0{=L|Z;GZ7Y7!iIo%t65EvgU0A~Ffv*XxpO7?LR*%Qh*t{`3P+)zq;3@C1Q)jDx``DDAX)O=t-;4GlV`?z%T^()oaV|J|o z+$8qMN%TkwWRr2vlIeAu*gDo&HG_xyWU;J|J}T9i&S7zxK7H)%Ekn~Pn4FCcdM`z$ zRxVd!1ePj}vYa#6E7no;Q+b3Xl2Hw8$_6HRZ*y+Qn^>&OulBbOJ*t zP#}yQg^zAL1=w6=wjSD9PE#QT*q>JC#6A&bDd9B}3Ay2Hf-J z-X6mWBMh_}>xJD5m|uo9R-3U4Anv+j@3meOO{TKWfL-qk&ro>PL@$#l57aas4&RIn zHE8S6@jM)M;WJw1P2|`?qdFAo8Sr^8Pu$JRm(+Wi*NOEhHiHE-0!u|l8Z5O0DU z@1tGHU5DU2#h0ab&hv~iIbn-R{qCZkC-)>8NTs^RZ?< zxmqmdeyS*u=N5J~6s-j$9$c!V`W}I~D-8Hcakp2#GfVaWiqY)2Fb(!d#1!E$if(+4 zHRw{<6VMZoPox6IZ0CuETf%!gzWx?0Wn`YRE0POuA@GAQe~7>Qf%BsA>zf$$zH7AZ zD?~Ghk~gHRl=1}ek3Fc z({YgFtY=+KkfS9*o*uPc6U2zPI_7MB5fqGo+>BJVYC+gy#tAr|{ag^AZ0jlNig}tyx|}Ua3wx&nm2@g!wf2P5+_g3>%DFF?zb`J z$%1do-JwE`!cCivE&corc(_GTJb~%b&SDNr-$KqyXXi%`p$Xp@zXH{*ZYURuxC55HHPFm~NDr8>AX!6k9>D_v?d&_tMG_3^aQMekK_-aPEWim~9lU@;16 ziim0S_e>th9 z+lTj_+r51ZF)v(?mg;PVUihPqt1p4x_gCl8*Ka-KP7-R_i5Wo9$B~iFO)dq5a7ou? zvjZCV@68wMm>1Oqs&b#3gz-?{6y%aEz~#>Ndj>6C{*Yp8LALpMLITkv1?=~7lpZRT zSE0hm_(^+ERkDH(#9d_Zu!f!Noe4R1MX`idUU=~40Z{bbQx8Ufwa|F? z)`BIpHzKFcq- zRJ^E*gI|&#kR}CzcquvBb!_2_8PI2Cdui`6yEvHVj^4&gJ)*@$uAp`6eqGXhV`#wm znuB9yKxc;eHXxg~Hka|GRc7H0RYc_-GcAg2@D|6I?9EIxRFyVvYqoMIvb2eq``nhP zb^?jcMXPvOwJJFHxyi;pueTH?{DwNUej3 zP9y386$m|)EDotCa@%l!1=33Piu=)Z;-Kr$96O%y6PbK@Z*8+U8X45Zy5b~Yt+0Gk z$`V?p%5Ka&`AQ6Gsmq=mVW&jodBBs6iDOP#VWQa`q7SL{G0#V-0BoWT&JLD$W$1fJ- zWM=ARhw7I>44+fbOLTQFgl^b5e>n%~?BE%O{`@tAL2L6-2!v}yHuYZ$)tlzWl|$zH zBV6Yy8yU5Z?dqAbWb10#^4wS~E6DDn3JcjmSAW+fdV#P+&w%fc01i+#uV@z(9XB=$ zE77WDoU4hFMj9VSU z-cy-$fZ$_AFzCB{oUU^QQf}R3HVzotuB||ibbViDFV@-tK5Yp1%S24N3(O5hi`eGb z(2Ya2WpHmNs>*KGxqM`EMhG4CFyrij=9)YdO4o~p?Sgl+WsK54Om!5m(~jr0neOV< zY5=+d1zopxd0eri`YEdHQ+JtRP{ZA4ME)eOI-sdIg^8RBU+o%hRq`TP*qp>In{p&s z9->ahF)kdGRw$j3!d%jcMuyd~F-Y<@r?NhE*cb4+tzReIi;bsxy`2sZCq0(g>e;<= zFpZlA=AgjK!z#b%?VZ{!UPziQ@)71a1SS>PNnKB!-KQyFjuV41U{0e4Tv$N2^_hRKT15R49Y1k*Po(-Ty0Ps=?}NM#&4$=_xn zh?Z6-#2baWCHH+5K(UhfLOSm43w*;xR5?ioNlthEI`nPW;hFHu3@SOs2z$S)gqIeB zFQ^%I#Yp8Q&m_z`4mP~0cV_IYg^H0Vc?FFeI)rU5;;tTO(9VmXxWsRT{7WI{E5RSD zr!CoCGC*{GK|5DA{UduRzk=KWHF z2+QYcDsRAd>DhIY(RN{*8Wm&tY}*J|xEFV)N*{$Sj_{;PqUjUJW{+Td5{tNxv)=Nk zF>el<$y`8<)Pf<^2=B2@lZChmS(vioX!*rJ!!2?lJR=d}uAzpRh&#)p@;zRm(cqW3oo&?ls-2`pahf}KF_9MJ?L9;k7Mertu8hGrSsW>=yvql z!V+Y?6kn0@5b%3kD?yYxJ9koHZff*iws?@V8XX@Ol-VOqDe~8abA(ni zH&=(Wd|S!1^cr1F7OoCRV`=0i5Eql{Wq`Ugjj!6iRH%h9FzT1%wQ-!!gq1Y~9;K(1uHn7!U zi^^F9$=gTyTApufjx#anL>-cKi{@4{Q*rrK$)vPNEY?C3AhA{`JmLhmdifyU9$3$@ zOrSI+7u*?)a-$+PS}R3uxKKBP=Pe;!KX{Fy$3zJ(X{64LzzR#jR|>sxG_sTuv3$7i zvRsYf6nANQ@@%nvyqdy~p(0+_K>AMA!j>CKX^Ic^_7Gm{vjSR>$}!njz6VV;g<|A> zrthFIfYkxD(KUkw9*NN!hR`FK2Sd}dl!1a8EjZB3uFPXD*(zRefRE~Rhq`k!&TLMU z7?a#I;2TiWu!ft}q?w0#`>?w&#-&&v$!PD4Lm6xv8kvtl^J6wKa1YQFv!*S0aGpbj zo|qUqORDUFA__y~XFwrZWWc(kZ&RyW-&t7CB4Pp+M(T0Yv~3o_0z*8n2(yvLH3K*p zg<_8Mq=_SmxBZbBq^S^`G_0Itx312a*v(qZT8=kAAQzN!QsjY22WNm5v)LQqDbX{&n_A|Yjo$_RjT1(9XiSg-YZxbBxk%3l)A`eD7xt7bJN75ub*PJ*vbniW`rXoVuGcFXxu^7+U@NL2XfL9R~GI@K8E=cyfk@vPEy8)S| zGT$9eumf!Y*yzh}MFKt*zlWAxyN58F{kC z4TOFSFH32Jmpl_u??QWFbRA5Yz*(pJLOL@0vR<+)U%Zleu8}r5DOKkf#)zScszt{q zv=0St9jHT_EpIgAl+Q%?_Ki?k)MSr#2m^Mc`5{X1V_UN`vh0xseAwsV&G&SwKy4Rf z`FZJO8jP12!B()5GXt^}N{CsP^mX4x#`Yrw$6<;)_vWkxYO75ugi>4~bdQzpreK3< zRD8r9SNtHTv}3PB(7LCgz=<Pq#N_^twPOE82{y7F`z8aN>L?a{yKXM=3Ggd<73-nLrxrMF0V#av3wr*gk;9ip zMbo!&hp|-jdTo-D32ffVwzVQsdJ^S!s7bo(GhgJDy2|1G%cHCve`jRxUR&Br0}z!% z&Fv~!cthqAoD`Ssub!(%E=L+MVwYa0j6U5;Z&B!m=fyVZ#!OLbEs#MdB@lkWh_J`| z{M^T&>mF+t=g9)sdRPnbZg)E+8PSQw!HU}oZc)`3mgz5cSK(+ z7OoYysX4i^6Kb6nvWhn%w@_KiYoUDSRZoEZ@hgm$!nj1dJ{fb9CP(;W9&(|>zxVhW9E1lhdEWrEd1oqyj=tIV-it_LQ zEhBlwAhwYj1EfiIGRIzZbh}gvj~Irzg5}+@OA#SCIVkp)aL+Va`z${gT329c3n+T+ z%n_|sz$jRoEY_ar(+3cIq4895@kroNE(mc`LX^fC*1SE|bvMkMSK=L1&85LLGHmJT z(CL#~sp7mcQaoCshVArL&wRYpQjLY4)~U&oCtA~aXBU?Yszu#JbUvNcHU&dsd~C2OqxXBAqVfP zL93^+X*g@I57xF`APLH{urSw}qxlr$#Z_~yy}`})1{4l0aDVZbC-fZ{tmNL*QPhBF znKf0oljgp#?F9pzPS0c^mLnZQpE%YIxW_rZXAnl&tpIhhoAK$9e|f}qqG8$I4;iAt z)t&6IrQ*vcO2F9qULPKwtE;4#E|5Rjp(YOcQ=}O7p4kA1cjqu|&RV&B+%|e{YVb0d zfonnFvDDen#ofDjz4&OKZ*2l*X<%i?dGPCcFLTY^Hq75bB5oxOzDPxx^Hkd9tXQ$? z#j{I{e)Uc>-AmXGY9t$$=vfIevY@?OpWV_^(9T0)={RN@=XnYam4a*%`x*x4se8Wh zvL>H#2F{d)$ZW`ajch?<&W}wAH99k%EalE4<-~>rkbV;NO1w%gDpFUrSJ3rhnzTbG zDZEUZ1D_9ph1YdCzX9zd$ixu_M64cx)_F14^!6-0(>I=wYCyY!E4@UBLJ@9fIFwa` zY3}#-)i|0nx%ImZzw24eJ(-jSc)kw@5&OM&>^Z8Bw~MV=2;b4mh8A<{3RRg`54S1d zE?UBppV1ukJ|5^({A=6865$0Phc?li4?A{ERH_Mz!^tLVU{nELcc^3q|~9HRogDQW!Jh5QiYJ0 zChUC2%}3iw1$nU3GyGn(7VYv1|7j9q55GL(S8E62kWmbpDPe0A;zPVFCzQ0964mmg z32d*cW4u&S)H*>XS%Afx?nb=RJ6{1RT9(dXB=>Ws;7l|gBkzhgI!@L2WIO2axxw^^ z=oB+yW2@+Mc)KfGQ+>$wax8X=7nH)F^6ISvj?8j)9tfo_SOGmL=u7UI#TD+C(A&1o zfXVZGkucs`*QgS{vbKV9U?qaPymj?`*cc=9mEZB#rz zOc7FA>n5q$pog-LV*C_o&QLjaAv0h2yW(&zT|_c;-;8_1AOYjTC$(ZA{BmY|--D_o z;J_FQ#1%E5y-Ihqc;L2u(wkwD?o$SO1)k}NP$_3L^nj)?0qan%`xQus#xnqc&K5l3 z2pF-6d}aY9OFG~sIt!VXid*zt-G*Oikw@I=kiZ2M&QNykR5vyx23G=1viU%jN=yI( z#GS-DO+Hl!IyHJ85Fomku#4>@*z=snz-xSc&3NF?-XNKb$+dXKL&o=3 zsgW0i)wabcLd``TZ7t7b8q#0hTQ>+Jgf$#{B*qRzOM=0Iw89mIu3`Pkph7!+#K;wg z1kJlLUdP46!!Y4c>16&-KZEbxC^9;7u6IJonid( zdw>okrWm%3v6RU1#*eT5oRpx1V&(}poVC2D%a(i(=w#gkG$~e9Chvh5GF!jtwd&b) zpnb}vQV*U5yq2AsBt}|r?&{$aOa|gkT@;=)Xg0^`YxAcEy0WaGgF3WWJ1`1YPs{nl zY4Zw&FtE>o2MG^O;}N51*?UuMvG_zPiU*B!U%V!2r#jqqc}9J}DZzl=`Vwg8s>p+g z&`pkD+TMGx)4Q-rU1CF({4Q}l&vFjM(!v$5*mpQO41rt6V<-R=iDCq6E-RI~%$mc~ z$MBTw84)uJ3CHjmYh*7j#rBI;SQmZs?kYRQfk#!Ltx+W0;tn0S&y{n1uzioji?Ilc zodI%=U!-Y6%_v<}lY))QF@~-XkqP>cK<=Ikr&2`pp2U?P6O4^CCdln-UESx>`(v;r?I^t77)+_WLnCUmHZPYfn zVatq6BxzbAiBUv4l4e&}GW?|y(w9mOwOc*3?>vJAhdCk?JM3Yus`WJSCJ^+#icGF* zNIQ#tknxz+Cb|Cp#=R9zNhW;DIvC?!=UO}xJjlg_?O89E*_4=V5 zZyi`O(i<`3E}n2r2i6=2X6YrKCiB2Dg_(z)Jf;xOscu|FN{(XPRb_&Gd_?c9=eXFD z*bLftweOrU5Xt<#(V9DVz^Ihca5`pvq;6Jko+_DI>joC2UJSW=ZPJS(IV??LPwmM@ zGYQiWzYHbbxwP2_0$uhLXov@&>1!Ib1k?v!$1QK7tvExngh@Dpxr~#x9-O)tUI#ue zu`AQ8N04nb>_*ndy|w$5%A{ThH73E9dPHzmdTm{bcDL2Vz#14QOvlv_OMSIcJrS3Nm7XGNh%FOWs#X5 zf?jLCy*gr{HUX9q^L|c5i%e`&OqU9mIsvhe+Ymc<7tqaEk1~wJkeBf;lMkV%)W!Pv@H4W$y)BrzJbVPwLCCsPI*kSI|>J<_qo3apwW}{l* zVQqDjJI-!tvB=YtUoH`Rxnxm9qF=Y&K&MSk3yXz&k*FCW#LE(AW0#Rko?w;NTp*L$8N=~wnw16jAENv z+Ij<@bVwk#cBt#|OVK_RN}VB-PEGfxf@i*dU5@JOGk#+Z_T<2g;O$~QC`o)Hr)9nQ zxV!V!yr)IrlPzw(E_KLOP`n1?cJ^k0-Kz6SccLEvEzOA@p_F+W5F}Q|@q4IPY1hHU zy-zK6Lu4GDJ|-~rj<$WR8oI&TU696pjfclTTic)x=B{+OG}qpv*Ys`?1Xplw->B3x zi=K5SuB-GceYeNPqwKewe$n7>7gqcHPECFAgzw=qkmGz~qK-imxN*SX>sy6@T^p7Y zcczK=*zQp1SSE@fw`|tB3D}lRpTMJ#cP-u0%QC9jLyOpEmjjbNeJFQG@2O13J(&&i z=V))MYceKLE}slSDX&!-$_oP@cTi+W^q{L@G%ebQhk{(&Xg4W6)Ot zK~K%%DYLvsK&escuV}k4a_3E<_zUYGntmBj%IQubjFmDId1L1^)e7%WwBi&a{k7qv zgz+3h0%?DloI<5UPrx|d!o_8UJTRrifR1Ykb?8tm@V=+BrIwLwbQe#D)I^1n`>2#D&Yi; ziCv}2+o;zTI3t*Z5!}1*E}vbdjHsZemWmiP)=RWKp;M-|qTU4+a=JC9m5Yu_0eE$& zrdeS8qPy?T#>#ZgdEZ1_CTSe7NtbNe6v@2$Wlk$pAD6g&2@-IRlsyQk(gbvGVWxKEs{mqM4I0GxL-Aq%gSZLb^X;apUd9o1T8z1i1WepTPAt3v5Rr5Xf6C8PSFC(1n=^Fuuj-tMHr<$e{gkuWn9Lm1~{; zr4w{{7Oo=4F%AV9P8Bm3+-tDgn-!ht8bpC>en0PH;bf-;&STTMVN*Mn9zAW%Y@@38 z2vabx>(ND)41(YeF)yVLqwz!6ryLpqW?-?XZuRs`IzmR%yxcN2I8rpJuewosuQRo& zOYlG#j1r`guF|y-=E1ACx7q0Df>PHrg=jRQf8q7QRksT>_(6tM)B z;~UXY#SCBunQ`RI<@Y#!_pC2jq$9ZBKCBS1Ygn2ENKDA%sqX5jd+}aiOK!)$;(6^W z=N98@a{9o0)itqZWc7)+I9RI2d0fEoRy{0xp$#ZBGIgpl9rLSZT+@ z^Wi?%S&`>c0&+E20R$b+$x;0x)Kg=m-cm(IDUO=y$m1A(kNW{r!$V8T$Mkr;OSwFT zVqbdcx)5mk$ z=IS{@TP=bkeGOz*DCNS6d^y7Yo*eg$(pmfgdp2Z8OOH$9AsrEC`ys#j1+je^$$-Vuvv+9?qtHZS!Z zA8s98KJ328E2A)c&n>O@uJjb|9F+=tg5LxRZ`V^=-ELh{jWgClCJNwu(-ZIETZV`9 zymSlEP_>@%rRO>`yk$m*4=2}Ta@eT z4>}t{UO(O;uMPM0h@g&x_G|GQS$nKgbi`F9rl1d~KnTV%SNI+W%_%ShY94SsI6Gp8 zBC2@VY}YbN-LplOY)t|z8j>6LR``kxgu29$G0+iYK?zaxjw?s=$(&SY!d3dHB|1Jh zL`#UffO1nv12RRf6^$!3m8gU1!Fy$ckBIU;zgV%SBa@@>2t5`#hG;}xv5Zm_GbY7k zjNnB3skF4$0E;wwS=pOQR-wibgM80Z3Wt&gAo;l|zCo-^F;qywcU;O7XfGBX?HEjxGjH8gkrO5W1e{4fFH7hu48*qWAW;wH}rDRzJU{)CznO zn*R5v#W3_04HAN@+QSw`sv_KAtJbH%%e$p*cuR&GgfdgR!@IhX^ zIjKfSJB+j)noeX2Bgf$gp#imm;ABwecx!VJ3=j0>09dd0nl7d70G$Cn;kW!Y`nES% z0iQ(zd)iZd83kIv20RisrL&bB7BO!fgc`FRKcJ+f7gX|6u0q(9e232u#io2Lq-WFK zMGz8&2~q-+M#0E2`jUmzt?9;#^XfRlXUI57(gz_&Wx}TeedAm&05jk*OIaE!lDs%R zdpg%RJc$+Qed%^6`*=7VpM!VbQb$G_LSlspp=yNgtOzV}iA;`Av}Z(B+>*NYQ6B{p zi-Dmu$L0k$Y(m`;*$%VtlYL5h4|`Pb&g&+0=7ZBaoBn ztH(*%x1s&_=I&HpBq9I?>E2tIy8>hq_u*yV;UpxJhvdy2%-t&RR&E#(#owr1-Eh$k zjT5tNxXi%o;>qY9-#!x1Sm$D6Ol~pJQHmdMCJG4Q6QTJ`=K7)N$cZlbjo+(bi>H7J zuR0>?;;F>wyH_DOkcTIW#xW-t)*-nC(&}&eo^9Myn!*`nF<;+_#_ofBIq_DboGu%H zvx?ZGz#cbuwiISO)b0nzoXr%-xf-hBt`yH_V5;8urKY^WGZ>OYlRiht3BaM4ezgqC zhmrEYyURk3`Dpto2kS(f#LzTO6SmBtQdxVCRIML(`YC9_o)jy_X1pTv>1o>F$0CR3 zJ4%C%q|Eb;~^fNvjYVCYo~Oo#f(d|U5&w6iOdHw89`?dM;(cK_1;uF zf~O5p&hvOY6e0OiMtpk8m!AweL`>96x#%qP3WkftqN%73Q!gEgCI}~cwQtL8z@~NC zUA=e5g`Jaig7Z08?-(@&-DpJil@?CIgUz}V7QLR!T!VGNN)BY|6!HlifL>%b@e)3u zc&jb1O&Cgq+#gW^N-3z#pf+?FV(SZoZq&-la7gbrJ}GxZPsb-K1d}drDXxu3EGL2? zj?tGvT>NS#TniXgtoFr_b zbOzWiHrZDGrBpp6XhB^|gBNAzL+P%?W_%foTn=exh4TOb1%G|hkMgf^G1mb zL2uy|C&LlmJ77cxNlu3iy4MXXZK2j>d35i&#q`CbtmT~JgTSpPwjB*K5LT{!OJgXF z#5s`6OQn-@QcvOXG>weeN5;xDi`r0yUqURM$%p~MOWzQWT=4-6;OtA76JEVLz#StY z)w30<2)cTV%%YC=KxG*;al^-F7Tsf@jEn)X6X1ze57=;@KYEAoMxBa`GW><4LWa;Y zb~=EW5hCFCDA#E_#I`=bl6~Gb|N9IX)eDQBUxyFud+5%u94u)N&PjYx@ZC z6{ak12_+6nZPjZI2Fp=$+9eTmiHknBf$@W^r7$<4?_HF1&zT^vi}P^G#nsq@>T@0# zHqxhDQ5TX$f)iDLIdu~8-o?f>8$YJ9>hj_lt+WEllbxYPCoUqZ8cI=eBQ*z>#~b`M zHA)O4U~^uMOb%#gG}MLNCf;*%CpM=g<}qWied}-Jge>u-ZoG}{8oUJ!mQTA7IivgW zhGvtAo6}=v!Mf>!0NNJHxOM_J4Cz6@NM9*<%c03+N;ln=x-Irb8jRruYS@It;|qWE za3_>0p*87(FuXX_Ak)sY(NONSgR-xJR#=~bOK4V%&$JD^m`yyMzA)t(65^KrX}d9>jrv2n0!)nX%Yf&{Gk z1kqLMZn3YK3LqOsgWWQ#TiI*I3GgW;zg&zAF_=A*>bukdfKb|anDc0#W+3_)x0zj} zj?3fF4SoI|^;;b)NI7^=RE*&r^)Q`!5si@=nFD#vd7@yd%kw>gJEG>}V@DWqm$tb# zaC;AmkI0A~ka;VBKgRc(7cp0*I+sA>rmshZsi%+MVznmJsti%%xZl01u)62R$7Y*V)CCg_$;C&(rUX^~hk9e%@ zP>jMit9g2DJbDF{IO5{Zci)t#m4~3RlHkK~;4t!pRIQ$&BAaJUp2zs)%}HJ&%*Azg zHzLgB1H*jsF!ltTun#S?q#wrc#z?CHV$?aN~J()9Bjn8v6{szz|60ywO+oc7(%24!WM74Fzdf1Pj3|BAhuD z^s&_ySl?B5>agjsdJ$PY20iAkd#!sK1V!;KTO-J(iw5OAfwuNa8s}leeVqn76OXVP zo?Gf%ITK-^K=AHDlF^acG$J1QvbK&>k5+iRM~Wrs4!3hdFN@Afdmo2+>}*&!JRVqJ z@O}HrWI}Lk4qh05QuN~Qn6zX@n-1;jI6CE~YN>DE-4kEqEEYpLsKz!n5u6D~%CdRSMdA#I<8(Celjln309a z;4oHt?U{Q|Ngpd{M`PP5=8nXL&EK!TF*L7suMxAB2}!j=1Yv2qhZR-PsHdXoOApdV`C3}@nQ|tam>OD6 zO84Z0%I?WCG=_&72;Jc8WK?QGNI|z~96)+GvuXUEI1_FbAcET<3={a}`p78QE{sQ* zR*yv@9q)Ky%K&;5EbT}^z0h_kGSgR6Cp4lJw1CnF4s(38?eN0qYV1A1xECn%4uJ+h zb(mx?ZZY%awTpB6@knr1y5i0~dWU8b{rN{bEysgZ+Bw`9Qq1h$Gdj2`I2* z#n{KR&+`V&UD*_}5Tc8NV+H+zlv7TR`mJsd4Q6H0;G;oU$gIgTKjukS+Uj{o}leXE|n|UZO@+J-w9)Lb13e=lat!%;8=*^Y)&Jsl-!%7%=2WThs#{^A@MVkLFfV{l!TEm+o|`J@RKm@4{uVJD52ecn*rHriyuq=fxZy zvyIVR1(a>Hda^!>9evP~8*E?(%=9%?F~FBqwkSgto5r0Ar`kT3^~@$PysS`XOA{+$ z^R?{~FrCLdb6vCO19@#`E}5|!bWV84X(#xXR*x}L+D*3j9m4u7xq!I1tGK}`WhCFR z)P-3E+dwT^(R3M)xWkn^)Ru;l#kNV}@%A=a=}FFDkU$!wZF#7QxW$m`oB_|^o!UG{ ztFo7EP0bv`qhrsy7POH$2`*yp8Y%q{crKRNGj#U(w2qy>M||~?l(agKL3Sn3?wQKO z5xJY05oxVci1X;esWAV}KyvZoI`C;FEi{at?#l6I*lav|LK93*M5;DneC!Oj3ud5V zlPg}8Q*vxu(eCu<%BourZzoL^;F470Z2cip)Z6Ex*{Nf`FxKMaLIN+<+|kX66Hv4SqhW;Tsy zgT{W8y^z>~lmjNn`>+f8#`vu?g}&FMtU2gTXj+M~*6mDoNl-)~2%vKcCdwy^EY>z0qnBN1wN(S63s;RN-mN=74B0re!ZJx#l2+RnH#yrmscCB_ zGHJ#n>}6r9RGP#XykNbw@PKabSPfTu!srpBy+b}pg<*cDsMJTJ`IZ*aj#8^~vbW{9 z_zh={LjXJ@3a4w!bHZFkeuMOKQ_IFhKo}=u40s$T7Rd>=;jJ@2SKUm9l*cLIPaF>? zukDaHP=@IuiQSFBn&?r(jczOy z+d=P`fW+j%$1CzsMK~HAfXN~&p?P!U9#c06yqH|<=*#=^3iZpY_M_5xH83W75uIDp zL^;Rco+0^!>GT=FTk==ckJQa!&27|&y!&|=3!NrWri;Dqts|B&%D=>F3Pe+H7K?pu zTAFo`oDYh&oLi(ZC}wcoQ0N;ULarE;bT=U-@Ul&ROh15A+1UftYf*iQ|j3*18vdZ zMqF*1eFmiObwsmG9WQtuzhqCrBvFFKL#?{yUQD4>D4tPxLOlCCyQx-%7*24Xw#s|s zl2&j9dXvipY3tmq%oY4rx;dL&K>C1bd;O|7E1*!z@?OrqB|bNtq;Yk8i2&`iN*5gc z#NZ0i7%a;$RiTQ>IT5+=)X|i1_m)_@0W~_UA#PQjGYq0i)>;}OpA?TQLM*;F^m^|u zmY>%up_pa(L~#_{17ld*2hZE94{Y7D%hWECUnxvJw^FpxyYuvMa~6D~9D6U3DJvVQ z$5G<=N@a>zQHkV=ul4C@;{;Ec*eY8*t~Bdlt+D}xTxs(KK`~a9fUe1arw<%LIcm=i zh715QP_$@3raZC(GVpltC}b#f%>1po(PeiTbaf9g*D1jWM?5DcZ0~wbu_n4&jFR`7 z^g>8p402ViXv5~!-!~rqoIzBRCD0=u(=C)v#!3xBK{I<8!o~S z0kt(L!Ezi1mB|FOSC1J%;)XPssWOwiwG*Bd(QY=!$aru=oho4*HTcHBdKTfV(BEd| zwY+YbT2>7^<&n~QR))SnToNcTmxl=yU)7e?P#QeKXNRE+qT1x#gXlzi@w_q6 z^wri2+T3@emt(eRB(!T};VZ=tJrwuURzm6)YT;?KdApZG3-mjy0X9%Q?pk=5uBOaF zkyo_})_Q5CK-qhd`egPMUX6CBmEwEAFqoUHWV&ApnL6}=l50aiWshC!~adafsx(@6~D?0cn}P4ix)a3*GVNt?U^ z$Ai){r{}&_PHpyp@4><=nOD~fhb1VUJKI@o9F6usrjH&b@FwxoV|pj)=*@~7Fe*E# zG1D?(Rv1UR+%e_GM+%hhq*k)Lr44$j#a8M}44#?#Vkiw{YnZZ>gg5Kxi?)QBhh^PY z?#sqfM`kJ@54_25roj2s6uq1WSTKt+S@;hY?x>{_y=JLgI0cmpDd-`gRL)PmGzdpfLEyD=Oxj9hFo@r2R1o^F_^Nc)#r zkG{-;X%=*R&pIEa6Va{Zt7E#3^Dt(T=sT4sz@s2|>s*+2Hw0a5!y4L4NU5$>Q5)%5 z*cw(kn(zJjHjFhn87||y8e;AVQJr%|AuX8=ah^vGm6Gbb*)hx=*f6~!|euII?ZpwJz<0UW%w&`blsfJs@Y&$#RDdsSo4wy(}%mv}f_ zP6zRp_;zZqp4;$F9p~aP#Ht;FVI12F3-x8t6fBsm;*A%0d+;vKs@X6ep%BP(4dlz& zXMnbI1#{~ySlmw03N;fClpw1&= zC&t$rd~ukwDy4S5IFFV~M)2Ty(`AguO;I&E`@XdjZtmd$!sGVJJ4H9~h_cw@L{=|g zei|5#m(?KyreIJt;sJZPi@~YvyyE>sb@I_!%!I;HK}^a7?5~Vw{9pd3Z}1 zjvV#IJ6@q)E*^lfW?JzvY&70@q%FC)40SbL^K7a&o(3o(aTnXDzbRr#KJqvaIuA!; zhFaPoF9zVqm}--HR|xQGJ+UIRmYEFF-!wr!AElNs9EbtEn||ls$)MEHjYnEIqnLyVIKn(dDuCV8FYc_Bw&RO9t=i6#vb-jpW?O1oH&=zAS z5vO%WO45~dvAb5WIDN)+f4Q|qyj|MS-IKUK_mWiomA>TH>B>tl)6_9J$nvhnb9S8! zxQOc!j&?vKc3l_C%LZo=yLHYYSzvaT9S6aLttu9qaKeqoNA%#1tog`7kRMGl$^?u= zpCP+wbR|&Uqx9o41&wzUG*l77%)FxMG}?|2qbFiyrs#la zgP4e!MMfr0qBkbzpw=8X_@=YkD0g4j;p-X|9bzpdhQubU99=-t&Q0ui5SomA%3cjS zmLRzBrb}?C*>fMYJG$#*AWSahoaUm=NI~@BQVn0X#(l$0sv4o^CQM9(e6PS9w0*O^ zOJ80uB)n1{eZ!g~@8Gdazl>WE7=9Zo8s|-wRn$N-&hKnQeRj3ll;#yrIh5x^jOoHi zv_82-ebM>wT^n!qX30fm(+X=pow25%3W=nS&hQ@O*WyIg!Dumi?+vmhDg>%~F9y}Y zOWXIj2Hu-e%{RiFev3AA()H<P^>a?l}PR_c%GtfIOsUtaQmLY0P-1ZJQriywR9ad*ta_o%~ z*DXRN^ge|!!xbn&0IpF23X*sL``#OL4a+wJ3_j0VmQ1=mxwR$71sI-6y=1Z@th+c= zg~_oPe$g^H>LP363}RNA=|rc<#ndMzifORxgnH3E&Wk-^R;gh zJ*<;^7?>RDxa-IAjK?v}c;mcvS6HP)t-2T6Y@IyXh!GRpPZ%gbf%TX=Z{15cWxegH zBU=RRa9h10t zU%{yD=z}vJy<=UmyE1w@A_gx-axrR2PseQt);z@;%eqE_6c9G? zt#rQ`^&97XF|Q!9NjPkt7Qe2wa!JkCTa!M;E5gxlSFlR2OS5tRvP=I@MSJMRbSU8TV-o zz@YJA7b7h;w{XRDc^plEHsL`UH0yH@W&3UMY72O|0MNCqjye8*0m*d+9rCW&cAS81 zgIxI_zbV?&@>gyyAM76j1?5yY!SkxU}Ofn z>Qdljrkh@yjgA=BF+B6Zig*a`krn1=(Cg7E6U=u9M!KXxPYT1(-A_ zw-Q?}X>!Xn7O<~!*0do<7ZreEWO?o->4teJ;$YcF5~6;A7c-Ae)vYtz%{K6DgZi4Yb# zz?{Pose7sB1KD@XE#N{I43mMG@6uDMz1wKc@(}Z2F&foQ;o-D7%(?hG3IK_dtZfan zvpwPWLY^}*J!WA5uH_fr1D)D~YdG+Xj)+16&y)?B8edC+hdJoI&)1^zmtE3wd8+ql z;rt=?qxDHA=j0s)4@^m0fh!8pdR>_o*Q%Y*lob{M7=;0^sa()oS%41RHj(Q(1fEG4 z$e)uJ@sj2|1@(PSvUm~Jx8peo7+j%iy2m6nkBx-uFsfW>hB+3{X`_4z+Pj1q_HmcJ zz<5%6G933FMuzh~d>O|(hG5Na?AZZo4Z+y4aH;`Dh-znrHxJ0cJS=j=WZz1j1B`fD z(7NHTpNLK04HG?gm$a_LXWEm4QcbsqYXbOsUUs_PESI7l)$K#ThnceLq$dR|I6T*I zur-@qPt!}YLdV9jC<)INqGbd8I{VV}%?>}srHO4u8l;EAsv6)n;rZ!#b1-=^$yeNyAxdyYRZ*i3z;bNTHDWNlNSSm=Z z&?3C)%GQxEr1J_A+#hzbx!3~iqW~j#Rxd-R!yIl(=vl0x!w#&os}7S{jK_&yaQe75 zD8K_s2ogDezL!-4erffXwtC&IYc|OE<IL(IxlUHac5_r$R!;m3T*pS3M&wBIS z(7=E;JndXQ({h&+sCSE)FYW<%7*L%Y@r)z^=*F$)(97+R@O@ldz^@>va|a&vyJUKx zpzI)P?-rgYWbdnSn=o#_3YmmfU)bg%mUfP+0j=PC7z826239A`hWK`0A?J01rq(_1 zsfCyRrI*o{UWRIm3sj3~of>2As(MZ@mv`?48QyEsls@ZSkm~e@il918OK9~T%sC;# zvxqqzV@KGXr!S{DE8?C4YyRcezy@D=nq@=~ zW9w4~OA!%RXm7by7zhO|gD;M|ZuOe0UcW6tLw-US+b|BbV*3K1dgGA|!rb&4RL`SE ziW?cJZsF$YFgi6+vQSpNsBU`^Q_jpyyB@kd>ArBWV-(>MK?gMkw)3_(43ya+69-|q z3Qg~S2(x$83Zf7Uz+3WtwDh6-UsB-K11SQRbn4HCXEdE+rk8Lm!`)0Mkf9nf`5wGe zQ*_i9-`;fKa; z1eife)8gU)41C!KV+A1Hu2yZHJKHK@Kv?|J>=n@Iy?w+YE~ShIZ|8a0)|1z#p=@uP z_n7Adhg3+?)lVUfM@ND8wmg(s#O#_2aMDOD)d4F83?9xiP17|wB9sd*J9vbsEIbd< z;_cC*7%vd^@lN!0t)}CuOxB|qrK4kr+P&wM{Omci zt0!xb6=Z4aPoXuhI)!ZVWTZID1-H8AY)DUH@}zJ5?bDR@n7wcZlVuu1JM3-&hf3Iv%TFwSGGptbo6#3!38Bals zdz0GY+|6r`xB;);{3qBk&U)v(m(0>E4imgw3@$Q<+bohkB0WRz6+pz110Zp1!K9X& z-84HNEb4n_Z)d0)4sq7r@xGLa*J>TdRd8K0yfWbTjz^o}YG}fwNA%d7>XpO`g8{_!6H6`dEe>KL z=RIb+mj&ZDH9y1&0G-jTmN9Mb-swpXy+*3qoq~s&u(o)%tWWv&9YBhWdjnIh8fU7T@ z5h8%6>SVx$C5`-*&zWgWT>*!_-h8>TdkU6?_wta{x5W3|U59}+nXUB%a6f&Imezek zMO|kD5HU$%*XSB)p0>7n*K6R825ZXf*s0qBN+fu>dXYiHG`*(eiTp@+YM;Ji2$4vE z4JJ2sA8&|@x;lx~E2nS4{7bOVL3xszSvn*{*=Z||=+Bwc2&sk!E>INH-pq5G>%h4k z#bP~qi?ikFSyItuuO8rwZn9J5+*fK57QLug{;y%l6WiMfoCs*?DwgxKU$G+4XjTCb zUg=TcDVGKs$sU|FMx4o1ACoS>lVn3S?=v{A$vDL7(>vP2l!gKoD_svKkWF1de5V-q z=;(A70bfz&!Xuu*6o#VW#_)GDBzG`y*s~B3Z)4isr#XBKBZ(#PtH`0WZmijxZV&)#Js0Oc{TT14NMEedIsR8GG{p* zhNckcVa=JKADrX6jlgYC?M``8hKqStYj?(BSs)M1A%wZw^PaK=NUVW2HUN3T@PmCl z(72@!ulPkhed{%ZnTAbEM+E~@L-RPhXa?M05SI(Ui|Qw5ZDCG`UQ|3cd>b;H&$hhA zye~t5We!RO13~O*#p$Y@w=L`)(nJv~J!MUZjY|Y};4*5ndAShh%aM8tdR!Mg^mZ2u zO~o!=9vE7U1hJ4N9^59HDzl`Lw@!+MDNoM&t$8tnza;zhvM5{d7@V;Cf`8Q_XF zX%0vRucqf=3{gv4y@UC3*5{$W^|On7ro`7yu;1Un!oCdahczz*PjC)Il7e3PooY#m zy=ETpI0*MlQXUG)nVMo!hK3OWFNBHEaN>i8gU4bn05uQ#)vA0=sn)Qm0p0~Uq z*+qJan$#hcp_+gR;k8#9WC%`2%+7>x>qOxCq(YzZbs93|6|aeiVc|SKZeNgbgDVK7 zi)7BXYK^&#J=__{oklmTSAAzx08HYt11~FD5n4UYC``wmvD5Zj)n$#-x_n5ID&^cH z`bcwLSoqtM4Rq@#>xHG<2lSMg1?hP~S{dQIYx7dIgW|;uWu%iEmWO*-$IY$V>tsG}gKrmez}O z2g?5BL}SgtsMQp zc|$bJll9y#E^CEaXe3_R;*bXcUiHX*MX?pn?x6|_Pd^_$ZP^hZ!k1izV%F=>okaTP zy{U>Q1B;usp3ab{K6+8SGOI7lXJF5{FEW%Yd6d|ERT z*M=p0l=iZ{(N;s|3JgD*~FYk(iV8^$ya=|$>MwE(k4c6aTf znypGOwx{}fU1G~Ejys#(0Y+T#)K_ak~@xwz5?ve#Ff+-$VpXaP_8)R0ufXl&W; z-4MhgiLwr=RQN>%j>|1(KI2wo9>MJ<=3oeY(_7EO@*dn{O*(Dd7vhjN3L#vrfKq*s zk5w|?J!CX4)x;I78PKcBXq=+90O6h3O}YHx0o^6((}H$6lFUK~>a=jqWRvDj7-E~u1xwq9k(+iH_!RHw@8+)9IjBU7# zjVsi1c~Ua{^Ede|D(uyss%lANmw<4Lv*sgNy4?4lWKI-yZLIk$#?90?tllHO606E^ z^M`cwn%@i3PAgU~=fH&=Z-&W-*M9KOszS31CIQ;;IA68TA)`Lj4bsD{t1F#HUAz!} z(14N->z*RSIFlGMm%gma8fUPn^HLWE*ChRBDdc2_mN%S2Cd=82+KMl)iy|}|U!Fa) zNRq3Ej84qyH0>2E?G{`-_gqq|SbC$2Z}vrA*QHs*8zi6(m34{9X=og+d{LKA0;93* z?xxCF$X~mX5~XP_57RQgraH9d(j^+v_f8A+u>29aGJ#-)1r=z%*tG)i0ZBJNH`cQRi#J^s~eoi($f{Y+QrT;=G55 zrx3LOMh~9hYokeKwq|f^j-u&`$#=xHk74mV z#-j3`1l;m_q}yFSa`Fl#T?>Zoc5_A&2qt+ZCB;2-CR4O@&n04m-+i^nhAH>yBpqr;Aj zo+EZV?v+#uD|wGPdH1#)(v)hB@D%1=9Mcr>#XTMlE*gCk2^8;M($T)?o8-9U;5p0& z_|GykBwKou-e>@2KColDaq?Qw^fHB~WeY3fZfBZ#4VRz*3k}-k2^3u1Qrsk7>E4lJ zOn8I5o`F737!GrjRY?}pR|5^K+E4qv)#iyD0^Wz$^jy<EYPHnbi6;v270!HUMzk zuu;13G@E0gSyz+5lh8#E;1vr2c6hf&d~D+PA`bm(4DRkd(19l=>wpWnBS!}&RFTyB z>r?=hM&TqzLh#eZM#iUQ=nz=$P6_)6bk{h8Ft)2NLpTwJCQ_ljp>%``fY06@j8aZr zoM}`UUD^WJ^C}+^2^0568L`__#nbFqiV-&o5J-6$+{S4|JOBeJXkvbo6`VU0h)Sll zoFW1<0u*=e+$Wx@5$}5!!cf67xk^zRX~pmgi-NK=(6>kmMZ;C4q}#|sF!}*XNWHGq z;;}gE=}~mN0bY3G1HQPBsV&<^EzjR;1Xq9DfVM}nZ$&2`4o}4taiMbePDVzSc8|A; zS?^Ie0)%foTXB2v)Bw*pX{aYLniwzAJo9D~^XPfc z@5Mghg(|&ZT^rGh=hH>GgEZIEDHf`xYKw8CBOMwY{#>u*;YbbI)8TS?LeFfpQtFP9 zFOWVh^Uv313(0QLYxG2Hz~g9D9k1uo#X6z~Mr^1J>|v%TB}js`)xUO&~deeaQbY@-ht$Q3#WOylZv z*03HYC?QOk&Q$XDG%9>ageJmZk0xy#eQ8xS)Axm$rk$TY!j#2#>$j7tnB9SBho`Wi z&T)4n^rmsby?`v79f4Hd$cQ!Kkc!vxxho=$@-Z0ZlX%o>`l8LT32JoYr8H$IarL4K znBN>b^67}CkBB|>CL}{yPFshqzCFhk0hWcM0lFT@)wM#HCfS6jkg1mEkDqzNwDnO0 zR>*rIt^z^QrEgfB=9RA~Z-})%q#)N)@#}WR;$_6XyJR#BLGxJdF^T4rH(|ifK?d4V zF1;ZNG2dvip0#9olu18UR2HJ-Rf@%^$a(j=S?mHNkQUP#!n=34Hl8Z-OR|91H}76< zVd~?Ihb^hkpi?=bYfb0?!6aTL4x7yMWF0?kl~*%mfOur3CIj6k3#!xL7S-gyfvXJ! z44@N4V$1JMtHGchXQ(@v%i}`1eamstqzJxAFD87BFo4!zMz(;-Z2j?YL6gidgINT! zTMHwuI>tMaJcmnE0CR!ogiTCu1AqloVV{!~og!qLjuhbrvl&8&CaflG`ykU;2%{a9 zCt){<60{M>9W4SElUw6}%x#Lh^bQr)3kzvdG8L@2+Vdtvq+vh)Vs>voq=9 zum|{D%jDS`IehudcQKse<&)Jx!*};2nTZ?X2L;fJWyL0eSLGf(lKapLA}b%_EoY)%EOAr9U*lb$r!hOz$|~<(p;AvxE?zKAxRw z&xb0#t`xw0_O4CsLT}`i!Ah8;hi)x6$(+LZCWu2RY%!UTaJttX#p%ga0#do9&UHAb zdr9kv-e_5ewgmy@E0XPNf z-J8-)tR^+lJuVf?N1k`mNzisq?ssq}^`_3*7n8SDjI-Rko!$WF6Thk;dGRuQ7^1Qv z_A#N>dF=~tR2(K6Lxd)WaV^p3I<7Lwkq&3#@dCZkqUJ4LD-8fgM1xD6MOoO|JbCLH zGc>ksm&hE+p{_3PRZEayG0^ps1$0kJM|OqBj6vM2FH3fZ&*UxxelZF}1CA66qPR#S zc<>^C4B~CS(|nlk3b0fjuLJ9_bHx$c(PhGdO%<|caO_1FV;(LeoxHY=T0DhGwlB{_ zzC2^QI7ri@P6?mKQ6Vz6cRZYRN^{LEhkOc8O9(njxx#qD;9j-+^o}w1V?mTAFIs{F(>FnC zS%8IkJCjjyt~U$=vs~d*>{$V`1|aHeeTCG5t2Md$D)^Q0Ys4LS_hw0GEAG)SDYuS0 z7ZEcbI^N|NqzX=g8{iAPhVzLN$&gaT!t@vQ?3(HYW6}u&4icuUx#4NM+;stRT=OII z(({z&8wqfTK9Mu8#x>Joi;;OU12vlucR*2^U&=$0UK9&@^khQ8UONEWP8_BdBtq`P zb$$skwKC1>b7KBDXd;TT*K2b!OwHa?^g@HzzR2}X6angbFL7kqE2=2AhzDOqx7j@~ z*0ff}+UW9tTxafiy{r=69p~8kOo9Wsa{MV%J;dX4_s1JM;^|yg)C#;1mdxiQwE zfYzz^0Inw3@1pi>`5YD{wpf@QEphnv9e_R-4C*dTFPJyNOs|wxRr>B19x1FIZ(;R<-$v|pkreQ#*(?-_S4c81q@YdLjRs$@Hp+xgot1SHRu zS@Z1BIbEh`HhB1ISmMaaA1S#6b-oU1YFyk?t0z-s+LX`Q{AXGQfO7gh z_B3zwE`L{<&JSu(=z$;&07~nu1Nc=vS;Ii51QBW^ytgD0sRbC*(5vz4aNh8m45CYj zjVOVqn>^xt+>J{@_t2jswi2B?WS=sqjkDIE!gakVLpB~Fc)}8QD#@#Nqz~y)Amn4_ z&=~KgIEzw&)$LA&x%VQ7joFuiR81`ymdIWtr@Agvxi>vgs(o6skDo`08u41_)f4b( zMGqW>=IzbPUt4h%}@^&Bv&#yN`5W8H)>qc=e@S#hZwOTPI z2IK;j+ZpvF-8^}?4GbHyQ)-POK$=(?^@37Sr|JY~n5#?_ophDbU%hf_k=|u8iwip* zpUl=EMtY@~rL8-{s~Id(Os&Zeltp*LyIV=4W0-}y5ylMY$&8U7HZ?Hb#tu0tz-V(g z^^0dla3zKTtOT426z_1XoH}G|J8`pbw!M zpDVJTyXu^4R3B!l-riR-f zpCjTz5Jr3rhKK!j`w_QxT{@#I7W$@j88=YH*d-UepePxk!+EZbe0z%|ai;Z1M`ks0 z;bF>I3S=f(u%67`T=FyM@UC^xRG6(|KwJO=)T?y?=qoHM9zr8P8GAY>B%fQF!IxFprD;EV^jwM?K8r6~(czOa_x3@q z$g3>xy9r{a@qF(YBxzjB)jax7HF|Y~o`6WIC{q-XV13 zKyvWqQ$7XZ*B%V0LPM{S8u*m&-oqZ4lVU%CGI(XLPcVRBSQ`DbhHHdmI8NRmdb^}@ z8tdX?({s557N})H0<}if8=^N{N*A?H^%qqpf2FhAu=@D5i%V7|)LOUjgxcXt!9K_7 z)qT!n#@q+NWD5XN_~;pfM{4j~RbxUJB-#eR2JX9h|hRA@r(cyfl#7Tvo((_Zj&G6on~@ia%kXieW8vwb&u2jL8k z>?MonZc3gRJ4}X;g9^?TnKQziCug#m+}Q!V_BN)?;StmcF|NCdn?d`YB*kM88{Y@x zyFM=Qa>w(D7o%&wSHxaw3LOEV;}3`+8k+GI-vbc3<(ejSI=yniElpzSl8!QdSJFBY z7eJ&_(nga)a6IUtSF{DXoILjI-Q$~TuaFT>Rqd6YRS>OHCaveR&?I!lJ@h7wGxh*w zrcw$F{K)8CXBF+7K1hii<@XA!9|li!cN3ouYtxj*fX?|y`YMW1c-hwCENLZz$Mh51 z+q3E=D&eb$-K?3+XKE%&ry`r_+AFG2Y0im6z0ZOk34y{DvDG95ibEDw6}hhDpQ`znYREO@h-W)gb|81`q1n6hYR{)fbPEYzU^Rv$ zoP!Zq-8EN`V^cABVLpmp07r}&2D1%*o;}?P8JQVHY_B^=3m#Ymr&U# zm3Uq~yK=TIQ8#-K(dyNT^LFiQw!%ZolKJVgg2{_?FmZ1lVt+>UlJ*r+W)F^qDZbr7 zp-i3DgeUL7SC=D6+~(;?ysohpj~F|xqs;6;kF>0|ef|n2TFJRxU=_VB3plvXfcdcn zDb59J0?mRLPhHCNG|mRFTt^e$RZPumadw$IMnJ03(~O>*ddSh-tfvNnJSIF-k30|r z`H<|@VI8Vl>#oJ*kd-p31j{oTX@_PRMXVW54m{@}l8f_mF2l(Lu~wn#=ZDJ4xkGP} z%t8Gult_K($sx8+7)xr+$Xc|)^x=8T5wUO1?Q`x*Q%Y4qw~2Lz*Y7=kM1vsF?5Ik1 z>TF0=<7ch@2Gq;pYSMSc*K9Khp2HyUgn&D&*O^z0qwe*goyNkrdLHww4Eakc zU&FSoBU`j(mEt|)_hc6^Q7o`fVjK?;(o~PZH_SQ$7HhA|R!I3yxK1AD4>@rR@vIP^*1(r*&put- zo#;w@kpQtx+p6I2@eG5?d!2}HZPa4TO3$RN+Qb2SNz;X-SCVY>X?fZe!shS|M$pd8 zZqwF2RG1Dw%84+EYe`zVKft_nk3wwGRxU|wN%Tk8<~k-aTRKZDpom8?V06|8 z$Kk-$%nTwu>x{stniBWkorhSycLhO%efUrhh~n+YSwRYuiW{3?OOwcyzguxj-g-X6 zrLTLz9#MDIDQ|bXQ97v^X%?^=-^ydSC++tf_|+`GQT9nE$_*4Ohw${$H&3oN6CORW zsU2@A;tMRE^@@7T1J->>*XU2426SWtW?b6S@h(LLh4AwTZVAz#CN(@ix?L`^H-7bA zVwNillPg?6c`FV05+??crQw2lxX|{NIB1+7){_`DUTRaS2Q6e3SYEIgdsK{ZG;gj+ z59T4|v(8|q3#wx8^O&7*psJUnrc%WEn6wM~?6BjCP4)zLy&%2v^e)!@`Knb)?dGye z%>l(qAkO)^oR&U#AfsIN#;P#)_{FngKLMS{O?z!=^BzA~el^d5#Y8j81k@g}*)$l| zvC9^0>|-&z(*g93N~IYxnvNF_x}-cy?76%qo`fp|Jk3|Jm5SMG4T!M=+%Hk`I_+8Q zhy>A2S9bM_vMFM0gXxj1s!M3(hAbX)$nAW-6?FhPK*qmt4|~ns^3IweG$dn=2GD|9 zjZD)vNUhndrIpJXuG!1>(09D`;e_ncTUQwAFWFqaWUJJ&SGvu~ce&IUGmg)a_MSHM z1n?sr(T=VM5E%ds1)VP`>}6=KIa#Dlor_t&G8ai41J5?YdwU0RizSu3c%@_L95pXd=Ril7RjKJIw#BQaR;H!m^kAvT z9uHT0C<;@iV<$3Ew)EoB)q=uWK2v_X!y8wqF0o_STy(Y!=}J838(Npk8C=C+EKEp; zP40-SAwo~1U7OdOBJo87pIeI1RMts^0L7c-qv(vYUDDl?sOVSxrbQw$25q>QCMk;p zvvIA`j>DcZU81i-;VO*{Z;{B`CFm86op>-0mw6nLV1xM}RzmVA52^+vMWH_Cs}3f7 zC9l|A5g?Os6ey<9Zr)OGE4J#YEUM_c2!POlJ?~eq77;|b9+#L>(M5xJ%{$s84H)L_ zRt2vys^x@0Z+tQlt-*1-(c&7^*F zIbd_%DiHze7mgqm$3$E(r?4F+W-39ut8QJhqc5KxzGsvazy@-T1UES0n78xBa#Q2> z!A$RCPr*|@L#&{;%`=?!)+3>yID|Ko^2sGN5QNM0mcDmZye~Jrs~nGe;yJ9+h}7&| zo|xTazZ9XU_MlJ#DY&X=PomT#pmk+ap(c^8V*qIA#;$^vMNf+EAd6S9>RFikUM@o6 z@OIFa#bc9B3wqJAyT>u~8f=Xx`x%hWz0`~+=N&Ik`(-kgR_Wo%6s>XbNXMB=AO*Pe zdpR3Vjmo}k3;MDR_L3}H?J?S$&dzd!VA?UHGrf~2hs(${71LD}>N0|-bJ&`za+NaW z@M=j59su)R5^>FF;c$nvEe1pbl@W{-7N>RG4#_-t5(e_GZt8bv`_Oi!4DzFu10(TB?$6%ge%kTu9s)6jKiMMuEBEw_6rYdDcu|3d~?j~=WwAo+S zLw{098f{s{SdtC_wW*nJtUymqUgzfIt7I+F+ueO4)v(XTH?3T{1%ZdvF{rW&$sC|d z(-u)4#JeJ^*2Jc53?~ZR|8HC48WD&zE}cMfY(Q-+XK~@uqdrv z&Mp;`+X~ndt{tvUNWD~%MM89TZx6kKR&1fVv9T3YfO~$;R^W!H#=* zb5PeAf;k{DA&e4=DeU>IAl5tEsy>^VwX}x_PBX=IKR~LhISA}KfWA9xEgh0iBP=oDU2C0?hW%9c~&j^NCS@}(dpG;};s}i0x zFsHl00qnu8iw%f}w`llm?k3gkp~98((Zdx1+EHqpdwx`>^r4#pd~R-a6U>7*uTDd< z-w7+dH;r$6G_`zXkSA>DO!hs@s!>c$&&?-T+g&q-?^SPtlJM35aNlgMzt^2I8DgMi z&jJHuyny-M8+Pdg)ZoVY&o>}EuztvXW~@ZjBOE?BKH_&lN<8zt5unG_uk{8`0v&}!-XfBtJ5Dr_ zIXJ*%KN|}W5m6uIWgRjuT5vph(6O%Xsp;N3Z)LdWxktc}P^6sXOR?4rH)MAg_THKz zVJSX!qJa<^n5v9>CW>+uY;18)m}LDzp{^T)k|78WM3qQ%_eIwwV}S9>Y$Nj`Y+C^V z(52y4lY6;<%sNh_B455+o1!+XmYlS?nUazy?cBwA-KUjy0?CmVv`I!pt}t?P8Svs> zu&INIKzW#PKhPw3M$x|H``!({;m9t2HA%DgTwWv1J9J2U)zAHfj^zgWTg#n8lO?Cd zea1xT$L?xv6DkJr-mRbIGdKxE6acZeZ(%bv=WVoJB)$@(ZZFYe@UFD?u(O2a1YW0g zCqGQ<$H<)xs);<>FEDg!LL%il8lN@U+UWMNaACyC^CX=~)!UXEL0fv@c>q}D+58^w zbCRlTY%sM@4wpiNIK0p)$ee{P<=Xewz0*0})Od0I0pdRND>k%BUX`S}n7e0~Lc6#Q zF@q_L{nD94NDLzZX&4`kDW>!*$6)-&#x zikB5~Q9gUGBU_zPr+PviUtYbz5t^PG;}MQU;iiE zR0At?XYRhUMb~F5tew}d+jOfPi{2z1db)egE{34j*~wrrxUV`%of!jpS^%q@WGLr8 z?&-CH&~(-w(H(tC^Jpz1`+!j?<}r&C`ex~jUHI73Wp;Gtj?~t&W-zq8tF!%h=%tD37(P&oU%|%6sfN{dgH?8oSZ(PH$K>)r zVY68j7nK{JCd+xe_ZY)NrqE{`4iRb9V2PDyqiM?OM#!07W~GTVp#1MD zp?wKwf}q>!#){em`}!&q63QI{#L(pU$yi`djVX9$R-B2$GJd0Cp zyR0QPpJNOJuWLdgvv!Z13LA*oz2-LuXWFZDuQ;qEh9fyM6KI&+>t>!bfNUET*erxb6-{=)e5z=NxKdn*>Hi0W*dO% z#k%$bcdmU0R>996zjJ2f+1k!*K18tsh4W&AG?cP_v>lkdB86cO`ShtAlEm5cZsn$f z#2wQyxFTOPG_i7rqcp6&&M`?mW-<~9NRBzbsJ=98M(rat21cP!d&~mthXZc4P?1tO zJ<*cj0xVu5&l(_K&yBm$I&4Kca}8CgjeD2s@PG-Em0yC(1szY*c+XYxa>DXf{Oa6W zP~+;CPcQPZrN8t@)HFvzgxjF3)AD<7)4hq{DZcwMj^xX@5mTup_lo0sh)n|osPR0# zTc11}HHUSE{{|nEN@58`ds%>d?gW(50?Z<{|F zybhE)uL5Gm7I@^twaSR`ETq>&W(LIv_EZ|)8?`b8OUV!{@Rx?eqpv(y*-0jSybmk} z`*coh83MuQ$uat{-(r{_szS~S!ii@)n$-rOymAANlXKrCKTiZ*xaR6E?q#t^W!p=> zSZ&vU!`Oc74?Hg@qm#9B8=vqIxlA&wA?Fo8RCwElt@`9Wta-ww&Vo9=B4B$QsIUrM zOU(Hk*WI3R%t&D2DHFb%#cQo#d)QbOj0-Q!W*_LF(V^^dhpxRA$ifB}WQU6kG;Jj! zdGEI3Z6volg3RmPDE>{(61ER8d`P`w862F;$&TrE@hzpsH35iqI_fQiYNvZTUa95l zfa)MZwk#+O-m4Kr*P z0aE#e&d%8@^HGMl#O#=IH8mVtM>9)_%vqUz7>g;T7`eSrBO#b<60}e+y58Pi&dE+& zvPesT2_(LQefMAk_Pv=ENGH)ZJ?f^;XeAZ=ybjb0G?!zbpMnKdP!$bY=?N3S>^XL~ zVNsHGZv@r_hq8>J1~GYErFo`zoZ@kUh}qMaH&|izJgzHUcafmY(vO?L*AkVP2v(B4 z31>2;=vwhg;xyW&_)9saFXfOXIKL5B=vH@jczC z9vwZVIKUNEpfZclzKYa?C%&;*T`W?@;g75G#SreXm3L!}C$YZqxjJs9N^59Z54Ni? zXOHngc5i};(?@mDd%+&qCOr12-BfGrZ8r~WhbXlTCOnTE?#EI=hVCng#bYjq(vUi_ zk9sH(TKm##r=e1hv#k^rlGKhWMAa=E&mm~R=~2j)i-p^;yB>SBU5HiyY?X>Z$WmPP zY!=ou&b!67c3w3ahy`birRv1vt&w!9*sk%lVh^x!!=;4>vMZ-LJF+jI9J&+2u5h69 zI?ScN(8POsus0GZ*ZcG9&>tIER3{KUzEh!`D%)*jBtM)d?Qg8DL?781ZR*>RV8U9v zRJ6iOVu|8*O}%*7vZxQWayD;hJqh0+x+6uOM5^4lI`CGp;XFPVAILYVZ(#AYk8{(T z>6OO;p4b=L2j}3r@7*L%d$f~5q{&;-yY!)JHw-Dt7u>IyO4@@Fb+aNL2)Kg03nEPl zVrxV91AI9WkIb-NSTd>aNJy|U*IuMX(wnY6L&?oNg4#p195Sp+;;UU6mwA>4`v@OL z9?;xF7$E3!SP!iuFxTN+!`V)!VIeS9^aq($y~I7qYHu3zZZ8<43X_mVsWK;Mz#^Hc z1_*@UhGp%_E*=7PzG5Gd>hd_Y4hy_=YvbOg&KK(A)nmTuw8Ie{;lj0yta=YBS_>ke#$%L z(TTZK30zKlIJv>Ym97qaq%}gA! zp%ylqd@J}Io8?j<`TA`jQ}aRJ-I2Ye>i2Mlg3OlMBr@dqP_O!7s$rNfTVKi_Y?qO=P*ti)E7MQ8xg*Sxq6*!qs5dxFq#v zZn4AROlLH_nL|jNg#P_VZU)m(Y$T+Vr z5@bJS25tc?^TEz%MM;n+cW^859G0|%U121&GBESen_64)viI8i&1BtHU*_2>-yW~U z5{;TMFQM31q-6yOG(&Zez1P~+x7q`*9c7u!fZpaBQggt2?FjqK(jVoEF|YPp-?;?o zrFLM_rrQE8ZD$u!Hz<;{Dw@E$)U$^`$!FQaGuFZUYL+*|B94oNah!th1-l!u6M4;? z6#EgyEs12UJS?=t>V91HD%UdjxzEC|MAy?tF+!AAOr6`kcP&(}1}vmdh1^bhQWT%E z3^ZN73g1V$2TSGS3sshS>9plQO-~U?t&x?AU}!Z4hR66$x0&t1CB06Ip;I>}8&2GW z@Sf<-AjW-Cfg2HflSpTL>F_K?Jfs9%;HFxJ^cT;2pVIl4bQ@4|we(3{vEAtTD7UW1p>uL?8)_-^ zYjfQ9co5?5NnmL=5rwt>XWhHTd)M@c_?fkzFar2XZk5#ZOfcLc7`BHYBwS_GZvr5~ zT&j-EyR7P=1GQ1dF{wvTL&po%XGE!2sGYD1N#=q3_yuh8oVbQll$<&DJ8hbRTk!3B zRxz?3FUvt0CJqNlsD$uAV|YJTQnR_7Y<&V_m`W|~bYe@9x73eWTN6>=Y6Tm@K>CVO zjLT0BmAAJry~uqRxL$F=4fhGfD-DJ%`=hGr!orDj;C>j?_RU7 zko)l zsgtAOZNDZKPtmwpROVth2|E`BVtcg?F^~mq>n2aOXkKzkFGaTxY+v~+F{7J#9vJ~F zY0_E(_lyU^-TjJ*#kNeO$#1O2s*Dy!Gbiu%pbl!v0n;Jw*}Nzh14C!9R|;xM-gn1Y zDF@py9b|WXP5d6PwwE5l=%;mRpVmF{S)+OCY6{TO@1>9%QjdciL-QdF+ZAE7c0wk@ zBg?{o)#IZV3y*o;+eh{qUoE{MG=+?m!DTv=FnY#5m6P#+`gJleS?r(yO3`tjmxpY& ztIB`cVNHv0`Qcj1YkfZlyaBdjEkL}MC>!kcG!ipDOpASw%NV1eZh;&RI;&(7?`f+u z6J%H#-TKTS3^d>Khd``G_})6bTPXDe8ur$d0It{L1)UCnMC|-%T4(YBrjWmZhnG|o z@8LaA@m}HVf}_=xVC3s(TY2mCbdm6YLRRoG@pe>aT;8SQ?NH`>nn^=#g7a#PWYZ06 zv`M;evhi*%TZ~?FxTfH)Zs}X1SWK*7q_&$B3N+9ms}up;L$JBh+RHav^c3I_6T^tdM!nk@oM#9! zJQA1hu=ARfj#loNnmdJ)IOOflNV#vC!0L|%?ShO&B&2P;Dw66hjsnXLh{shk^g^GT z*~*{=1r#u0YZ1mPOMM#GedB%U1X&5H=XeMVE^u6X?y^Z%MFav!W zEOykRJoTlW$(MG<;ztzw3g@`qgMLp%R?%$1(G@PSt=-XL>PbIap{;Pf?4oBmmN0nv zN?~}p?0R0rc073y1o^Udv{}))lbXvhj zJ>DnSIXuF+9GlRV?kXZcrJWOZJl!X515(t$MI8)O|NcCu(aoyLpMM9A1fG(3m83x!X!P zqT}m(M;O7<`bMW|0G4-&rSwHv+0rPB4g0g6;-_RJYbq@3KB|l4Lh(A+NFubb_}Rnq zXnpI?uGnzLvyDY9c${js79gA7tQkJyAkf@Xvqr->0Xyl!j`v<3HN3OnWnCeU?3%#V zII!0WBw|O{i3T(XT{zDNeY!xnrDVb45k9Xh=>RZdp*uFQ-gYEN?Lk?Lhk9n)c7`zt zJ9XGGQ90>wP(=s_AZ}J6{AJ}VNl=mJUil;$| zK&REd#1K9e;isc8qEl3P%prmShaqD35)b6wijGEwiZ9^i*~-``Y4JY0=si%U*RXOIqM7=Zbg#B?P_#9D5>iHN9JKi?`>s&2KwS15@ja*+f5F-_3nD_#y1h)+rTo2Q9LKkzVSH?a zd283JZ$d`lJ-omk$iiyFnRwL)yw%mzv~B+CfhJYA4$Kxo*P3XU$ed?<4Z&i?a9Ru{fEPL{T<@%Z-H}mX2@dRaa+MMYE6Qte)SToNQ ze``Diii%6IhY!8q#7W!EV7nJ+ARO^{x=MxgL$ww{B%?<=^*C)&ofWoUa)iSq2BWdq z;4wqQ%$SlLkmsQhY{oL@BB603vUnf{yB$zXQJtj=@Zu z^L<>|*6S|ziXon%g0Z2Pk^y67$C=s7e5hy_t@mIRXx^Z^`PmF>j1Q0{2;^~RDf6ag z=*;UP08^zG*1EVw%_TN9aU_n1CFFfGNd72dUq7TMes4Kca$z^@Lbcujs~AGLn9>7H z(2xev=AIfXHK}dko6;b!00rX0O2HEG}>-ho)6KXfRE!^g>z( z4&LCRpS-S+ql8CpaeXofl1n(6nDZs9FzTU|U z3<&p=mxP420WXdFg$_|rZ;*`&9y4~`WgMEKjY>q!bp#?K^r^}C;Q>@oOAJ1YEv_9@`{`rRVG(QJwd$#(RXpA$)1~Vamof zsShxsA5@EBwAm^h>tW^)KOd)>^qhJMjQl`Hkc|82W-BpA7f7$4O&dW^bD7KbERgd> zzOhIb<5EA#ey4>?$EOaR?*!eC>4D87sudMpUkIUMv@l?a?`y2Xmw4b}cmURS(rr>t zsY4(6TTQskYS50l^BCfr02(Ig7Xe)2*X8FY1$ewNQ{t?_LwW$fZWex;v+puz!%%Np zVVIulrs7C=$ck1bPd|7|B<9{G;ALKj|CtAUkqHO#T!iNWYUi3nA3z+hdV%c~(cqEO zq$Dwc5hp2(x*WZw5xoaKY4$Rzn`~Jdqg4wnBRDrEJjCya&BhZl!2)$xAJQPd5gYMV zwy8+cnsdL13_){V7AjT2TyZR{v~-Vp*|m|T!L7^^jrGQ^{o2gvC0*Wg#D;^Em;fQM z3f(9(U#}t^B|HdF7pzy5ZBn$XaV367F)taVaA@BG77QVTo0&98Og}^x6N&5hDtBd0 zg+;p2)6sIG!=VNy2CyYZ_Mjh7-}rM-1P+9C?BTOM8RS6@->14N50*H)(@GIKHSQ8h zi8JQiz0`5N$}L{aXv7J5*?N-=Qc&-$4iF_`BRsekdrgtk# zgZ)}q2<`1RPSIPHJK}y#_QGp7 za;(?=n1KQeQ{5NetH!P(+2UYvJT5~+`!vr#U$x$T?h=IrYYQD=k?Ll78kkN|LC4$^ zDajZX`Vz%k0@)XrPWu@~+UU;KMrigpZhKYqtLW>r=L3$Lv84HQIHo`redK8n^g4Nk z>?0C9lBq{3R;-k;@}GKCek#N%_$JEfO?WmA;nr*HIbrc5zXLBjF!osKCPr+1gbI=B z?sLHRPAX)Cy3CHtT{pduAy^WDln9>1V6)Oa8h(D9#=VLAjIuZNiCJ?Vy1z&MsL{qf z4y+C`nGhdbW2Ot0AlF@7GF{_>!MSOny00pn$IOXzZZ!c& zFcB0UP-^damu`o?dN0O0vE$6uv$te}-Xciiv_|U&6yr(S(lg=`8-bBWV z2vhT!<+5j)RwM&EqjhH8y_qdVwB4gf+hMq*2qBaAGIER{*#o?fS6XHM3<=&P}m9 zv=MiTHKN8fJUST9&FZ!BIqV&>PSGtEzR|fud7)uomz{7+v|88hBYXz>rUJJh2U;bt z%!;<72sQziP){I;PH;zdObjgy=#k+&rZGBlk5>uYnr`|EXC$W%&R1E2B0PvvUKP#r zcnWlG{#s1i^BF35fDwYv12nPs7IE>617FG!|5$#H#m*h-m2VH2z#teAGCsyWk!MDE zTUEr+0aWDUBHDVq35>Zf59G9nhI3!9dRv!l3#w12l35@4L2PHwMX;R>PU=Y6fqsP2Q4x$R6S4pjaaIMgyw^O*0;`L z^qA|^i}LmJe4BU!YKSxUrC!*VdgY@gk3wY`uT+-&I-l^lj8C(8V3(S-NrB(1hsHKr zW73H`HI?sLn^yoNdc&zIz2CwE29{+;cCpZn*=MB)a&*X#XYAXK z_oQXnEY!i=8WL!`C!F46(-1i6+SC~>sCKz-k!$Q5 z2s1b%n7nRc0*WMXw^XH}=xzpuNDe`lMr6 zh;A(K;S=~tRz;R zUrCSe20euj_a4aS3wPAB&GgcRh1Q_=b{Pv(HhT(!4vFU4oFU-7+`;2j^3&(8u^TJB zSCWr>LySp+UfI(gImvc8lPR9;TUThDL4P9sq_=zGR;CFBToL>PWV3AiM5$DSQr`S0 zAG}vIhfL_E%&q;0{JT9-;Y>tDo zP*Kr3gBjIcx-3!k*`BwUngZo7DR@{pWYQ$%3@p?LnaS>C+$E9^<2mMKOf}@dLhYy` zn$XjcYeZwuqYr#z)gy* zfC3W!L@Y6QatT_BT?QtC%uy;c-IxhNtm0|(tHWv!ICm$T)L0-t6YQINL_9@MEM@Fb zAl_B3EeR{@GOev7I5fGLP8$%kLuT>t23?2C4C5ghG-yi+Rr=!kGTy3tLuEQ9)e+z; zT&Rd@Hn==wM(uU)HRUF#>dQ>u0pu-@OP%DnmY9g;28A^uB&xR@TocUosFi~XP1iu# zt86J|8B#+YD32sDuxIWS@|0J~6&I#y$&(3L=?m8)0jeYFd{>Wndd9iZpU!a`u!6gF zmL=8zT^7^fbVB#|i(*9#TRg9BR>o{oHjrQ{i+yZbUWTjs)U{qZ8^0JJ3Kuym9cnqo zv`XreBz3Ka%54BT2ue29D1sgZPhQum?;M@nbvoQdq}06j?&a!iwoDzEH%spak% zp7RiddNQ~*_eiXdulA)G-x^ed^!5XB=%#UQm&Xt9l;vgcsDMV0m6e}TujLJ`8h^@% z^d%oY)uo};!Nvkq6SY!~r+g=9rZ^%NzWxAc`V6Npsbn7=nM~wp;2hrUz7j0j0wDiY zSH*(J#AS~*6GdB*6kQSI2##4Dq=1;TY&J~|_*mj(biAI^42wngzxG)bdW+URRB#d8 zbyP6ic}^!)ntjT_)luc7*DpE;NZTeJjG>;8E4o@(FOh}C=z=Yp@OfqMso~2j2+KOL zS=xQWRF%oBM&5#lcMLA*s@95YlMKdDsgrDp63^zQ0a+E#n2`AqXNIbl7h)Y~i0Dfz zaxXx14SFdqNPw~GM(ALd8Rng2Y*y~lLT>Pe#%^OhNY=*ZS>zj<4ZzSWn_cm+tZYV% z8`NDxQoPQ>VOLjrOKXee+n{xB8k;P-iqSbc^IojLkb+m+X4{oA&Z73cV|kuJ?sKX( zQr0okdRPVzZ|At>BEz82&lwO*O3v8`js(b1+5k2kuBb?=qP*UFRmp&mjaO@!i(YpZ z3Up?OSl)>XbM~+qG3^j7-i$Yiwp56fPXUiLygif_?Yn03wMGi@5#%@Kz+$lx);KQB zjZ@`)y&6RLP<7fb7FX4~)GdBh=sP_}eSTn2#EJPdYaI}-m0d}uu~db}<@CsVRx%Z$ zJb^`tj?VCWIn8-6ng9J?*ip1;nw#2$^TKtY#n+%!oZ82*U+LzgoLp zVP17(Rama*dP&DB2gr?AdBG))XI4~gRl*~gN=xd8N1pRQuh!}&)Nds?Ti!fKY$>jJ z?5!B8J{M<(3~la=`R0k&D|P~6M{v`g2#?3Qr08Y=m*{VON$S1&vX9{NwTlk3n1+am zyH8yzsilBG!+Z2e_IoQJ>&kW?&7e zV!vzAa>y%R(iR3uS8`ZG5)a(RaUFBMELjs|G+n|BO$|r1&qZGGr9FEuyYYB@oozQm za#P08kjWG}$lXDjyHgJvki$q8!%cXUS||)a>8koX@&HEN05UXQ4N`I>b8hbz8ty7R z4zCH+tTUk}w$fpm?`@#%1LzFUt_MVvoL=5K%h~rdBLPg!QQ{rF+_l0J0or_sy;dX| zRBimux$**Oco7!zEpTrz$`zTc-c7TbFg!MLeodZNOC3_=4lGYh8j* zP@)e;T@WN1=glOp;+!87T4y3g#xhZKCKv(77Mh-n&YEA>vmK_x#XvNxb?!2DxouH$ zbstYg_l(I`jiB1tK(4d{5C} z!rz?J3DeW-SDp;s##67!Ln9}~*M?qds^Xe!nQ=T3(}_?0{7b(+R_Cs{k*>xE#)bPP zpnwk6mUcleV%}SlRRa!E)|I!Q@E+>BFh^FA#0O%5aL%E!$vSXO!o@B)oT z+_5>Tw=-2d6^P&R`5eK8n<~ZgoQ#$&T76(N`%xYtnBvs<;BDxCx5g=Nk>+;~1>sB7vTD)&abu=;_P#9Megx0E$X zBrj+?ts%w`n-N<@s+g&$V^CyBLg6^+xxR{v9GsH5irh1;UTPxQjoWyx8r&V-PX?Y< z>9jsA*)+Y>NSo_5mOW>9)KyunnW>z6+9gAck%l|~Dm%%cQv22k{2aB=K!Gn z%IMrxpX5f1RKRFo1xG+<310I?81=w8$m_)1LXNo1Ya6@nGb=ivz6xdXi0;KqUnklP z2~T^?@krp!ZFpE*%tbGgr&J_PE}CNH6;m!notb_4$M)qPJh}#AfxQSst(->})PO4u z!4(>D*4Lt4?67NYUAhGr>tI#~4-ib1I&Olsyjga3oYfxxxK&TdN2nCn2VP>}*hFBo} z80cxj$=HZr__#rE1Y1W54(91RibCvQaAmRaXVEBFj<*ws@5Z$O%@7lz*_+gsMzQyj7jgz5AsGe-4 z8lt%35L(<2Og>dg{Y<0ZqOpRgzc3nqscTThEpFahO(4X6310E?9?nMAz7vQX7z$Bc z?9~uvbKTp_?XCqBqrzu!OIq10(wDYa+T_y-@B$`msO)n2yT{v03IhlIU@O zC3J=}-GGB5?Tj%MxLE-MCWh^_XK;ud{f^9MD+vsYaW{hs?+)~WZ&V*$Erq_=9`R~U zA8Xo@v?5#fvDT}j1_zPcO?i-hbY%Y-Xh9E`!T9wm8%IVusMGnz1TG{-9yV#pGFnP@ zU5m2JE1OcSnoWL3O19bw0&gHW25c#>OxYVri#Z_OV1b#Ri-2I<1sY3r3hj2}IIQZL zjxfq&brb{kj>@ep2XD+Mnip0_RGFzVK@?6%`w(!|1{0Dfy82?lUtn8}m~2HnG*KWC zZHnN+p|orvp}`XbZ_1Ua6TcSVD?e6l?c|+?XdQ`Q5D%llnUW_#Ubjnc&horAx5#8? zAf_Y~vUQQv@F~`CRtt8d<5_DnM`qk3vo1;UU9zLlhxtxAiWTBXZ9!&^2~7mc#@@ZR zgKTw9nl1{06%BZx8dVtnZtOY~nP?@YWLKeIzHVVA;Xnf(^QghdNtJL~;G`NPLr91k zc-GK-Hnz~o;)pOlt&^$kLKvQ{+d=sPB62qICSeYWb=@EG<6@*SR22@K>R4>O0C*k4 zFQQ4NCBZ`$pFXg;Hy~Ry786ie`VilOlsR6Jgy?Z4&%DDx!iTCRCJHceRRJylo-a0A zVZ2TQjq@sf;c)ew7L`;v{ER%HLkSb~p(7K*b(cChdfMQVmyAv{rP@+fhng7htlk() z_~Uk8w;F!~z5wb;NYA0&0<}{$Rvou_`i<6QMXLat;X#PY1^8UigqP{L3SaRdP*dwb zc@*lZ=|+Jpyn86PtO!(7pyq%GP-yUFpwg#-ISpkNyoOB{N6*(nBsFQA0m5+wfashf z+eFx3U3P$*DS&HJPpj)~%BvV!r7=w^ihR@jKmhl23}#>mFP19casz`g3Z=YNO$&s$ z_sZ#w9uhDEWelJaOL)o@0zdgrL3#}K^z>xv*|5;&y7#$S@q=)p_m(8_LKhxxL6eV} z>V)F!N_#WQRB0*6M8hvfQg$yO4VG>>)m-q^J{6|Z7baCW^HLK{o8;I}z_nXcu~}P2Zdakqt28tV7N&x`c0PLR1ZeY?g{_HQ2J>b4Tj_o3sp*_@W9*D$ z=f1KIgFU2gM@rCdu}Z=LWU$wJvUgS}Qu)BP-Wy2El2^OAi*#FC@J3jcEFXrxRXsT- zmr6KCeY1SnzOdp?resZ5NjRM9MqkE081z~WaF&eb7r2&XEciGwj5EX*CmmBJiXTyB z6C(z0CLphnG*y^}z1(mc1tFVoh7FR41qZ*e&7kx|P`TiQb7{mn!8Z$-ub@&r03TIn zR`F0bu`4@K7_6D8dQpjm9(xj%K70Ba64OQa?JJ`f9x0$)D50{Q5OYL?V{PkhD!WPf z1n0PFY>(1gjOWE8qJ1>$E7IO}bXy|JLyYjt21n-cEwvO?$2=5jpuoDgj`t9sr??0{ z0-An={>%Xu5LWpx9xWR~>GT4jvErIPRm!8wN{dKYUT9_4ahPU%H!$!>eMTd#Qim4q zat%@!TAYMmNFaCiT%!yD0QN*eyo_#r!^i-(P#&T=8!yn2%6P+*0=ocWJz}o=)m)tV zv74PWbMAW&9UN2fJ%VPL+`UwKCitbG!Iy%IcbDO0-RtF6{S)Ygtayv{96ti&drsRs zxcreW)cIz@g0L1dVV1nWe#=6bX*oz0~BYT0kyn2%(Q`ED`X7ppb=ir>(_{lzVU@Yh*ZHzdeZ3DZ8nDIe+( zzhc2`DrjwsXrszfMOB7~^(0jEymNr|9ibALea&zbYk`fz+WV->9vCpZ!NO+8pkJ4B zcnCHYDZN7}&J$S@y0d-u7ks`39r0UQ-oaVTxrBPnBuubmL`;b?oDYo?Bpmwcz+Y{X zEUV3p=gMpp7(v|)-UZ027YDc!Wg`!c3Z5BFD1aB9x6-6Nr>NIM;MGx{To&|JpVrmA zr8w*yXPOwm9l=#a%3i^!pnG@;eR?mJ8PG--WA{!CJH+X!ixDIGCfl25UQH78I_MfB zB5v=$gIePxu-`_J@g@7gX4MOpfD4cIjq+ci!Hbrv4_G}VlJlIK}vV}0HJo`jb60qE{cXPQd z$Z|+V$2yqSaJyc{K|c>Pfd3@q_CONYi8DG;Q!i~CUYYme>5BFhLW?SL(A$g&#Nrhc zlxf&a_VzS4&sfMKxUkB0=Eli;I8e7)Cs^KO4TutYKHDMlD7&<^Bdf6a(RsZWwNJ3! zU>{M!xprpr5Vmz}tznyZ+^IU|oSH(Jpe?L>x<{u$w+VvM7~n`C=&L=pl4&ljXO#!D zvX8`5V4~JWHQ#!ZnX!`(xP(qIUr2VpeJhbK4Ud%^ZM>yniH}VM1U=WL0phZlJ4D-7 ze8-?#%;foV2OuJtj8ruc(lj*61kM|M0KIj&!Z8Htder4)-R>wMaMVY-EKg;84tQ3? zZ*VY+y{f5D->brEj>%Vn_15^Fx1MnN(-wMFh_Env2X6r+JH`=)nHeDIJx?&UpTp*o z?Uq{|Z(c=1h)}bxS&&x2N`tf(4@CJKl(+v@x&+)2LpImxilN2i{ zb_|RQ#WNQ3t^-0T8r%-a;>&efef`9dNEzEuYigt?)v}H;#y0OBdrdxbu9Tj6{`iI9 zbhccJF2ATTMcOPIl$PVsC!X9V`jB7HFv>X|4xVQ3*h|RB1TtYhCQt@rTD?a|RL0o{ zcvRh!Q6ty-Vr{08AI^2%V|n!@;j=FZ*%KjIsZ(?3(ifwD2_D~Q&Zkqy<@Tg5i=uSu z8a0gv;d0G-Fl}u}lt%T1z0Dktlnxh(=dYj`O**w6z6?H+Ehq)+tp{Dz<@2a0A4Tv5 zMCJq?h%A&Qb!0~uT0$qC<4OGcItEn3!ZAP0t6&I!@70^oRjU_(Atws@ic8_ZH$8-H zRVq7DH$-c&s}!@Z3dV4iW3YHVEU_AetnpI7O9yQpnCNTP<*~=_Ws&1Udg)4&VtflW zv^PTvXi9h(<)fU)wgdBZS_Jk)Tp zHJC2u$pDA6*3+=@uFUpliM_0nh=VJUBilrd<;O5Qm6?o>=e7yIb5$GZN&$<8U}*{OHF<8-*rP3&x} zW=~^|W_U+DO}b2s5JHI8Zm-~=CI;2z>P}N>n@f#k+EEC6#iew>qMoO|x7`i+Zl`LH zqmfIYI5Y>XTNQ|YyeU~R@Qirf+||r3RJu5(I~^X!5}?LRG?H8 zSZ+R*3^wDHA=uew8gf}uH8~>*)l<L!s0_?Z&BWwYw)yIwekd;Y$p_(ImWyb2b2#5KD?q#@SkP4z=r!bE7KF9}X`I@t)$f z&+93;j5f463w$AML)MLno}w=AHlG2$(Kk_Jb%U$DDIH`W+3g0TGy|vXZY@55{y?SX z7K0;cZM5}4IyD2NsdDY=BD`J35Y~en^a@g?ohZ4xkw@L)H217*GFOFZ@HNR(5vh9C z^Ma9kP>i5)s95|>V3Vf2oE5Rf*~`~9)U=(9#t3!@JE`x*rZwUDyyyMvr2*dRiCR6G z0q?gx>vtMaWGY}Jl|{xVqD=BKL=8#K9M-%mu$<&AtR`3wo2?kA9^*rru5>I7xJs7x zHH`M-z2O)ti|)4OL6;j)&!`{L}wxoc{n6jMUOfIlZCz-3@^&&TXSmv1$qp%rD}`GK|*_DhlQ0&D?b+Boz_ zi5;Yu_Kf(2yxx;|!YRA`z9mrYGaV=yL*&A+OdJT4ahrAXlG|KcE_V$|*QJ_v>d{sT z^L9OkT9nhgeW1#9_&-Lc1ULf@;C(7R_*kEXp~RHgU9 z?Ks|W?x>I{DG3IN5T_I(2M%YUHITlSvy2QF2B|Ncx%o~nrePb*n>&bDDrOlJOPv{V z{0&suJ&+=V#nwc7<^rU7@dBT|E|>(xx03X*J#u%qRw)cZDav9al^cyQ06{>$zsn;p zdElniX@hw6h=K#So~AStBEG8aqeYZj1)cTIHt@#TY`bJ`Q=dnoa;?qJB|IEBonzE= z5?t8!0UTHRTtp3vX_qvvyW153t1L35QCx>fAv}}=uy~Gy8;{>S$oHln-@WGyOLN6J zm09g<`oikx zb2@nfy?OLdH{LeAn^as`>v}9ec{$+robat!!4f%tc<2CM9tv|S10$o6Gyvhac``Vu zJY65CVNgmSLI(~%=@cQZa6&1o&1}MUhnLjM=N()lR1nmS1=c&qL^8UA+Z4}5M2={| zQ#Dgvg-S^ZsE0>K&jMcFK5U&QMnsZ)F|o?~7F=w)N_zhjab*IMgDUI!3>&vUd97~1 z%IXJ-yB-kFsCgnwiVo{-DU>{RA#Ocwk~V^)t1YT`|M}Syqed6+Bl?`L}TOk?BTp8_(X%v)Uj3lfoZE|Zf-V)xcjpm7+pO&K1g@~ zrT_!H=iR87WhFN1Z|*!8vVEu7MQcdI*k7tSX#%h<-rhb~O68QsC|%J!%fS|75ZYbj zC=$u{6eqJsI$vuiJRK_IxU$@3)tQmoWBvhr6DFh`zi7gam6)flpBRl2uAsWjYZt#|1XhhPEp|^BIF~zXNpVK6WH;#5qZSMc z3&tLg6MW2-^_Z^DRk37;Jo$zWXHbS}^Z|%p))LU~DYd}h{=kLDqZ@9YEYqrtaC%FQyk&1LeYdXLUu zoNT#ci!;;<88y_)R+ZfnF-kX!Tch6P=dKii-=S0o*{xdO)jnd3sGYYTz zl#VVsg@~vLA6^mCWnOQZT1iL8q(T_PzKY0#YV3EiZRi781 zcxF9q+&pMXPr+rzANQL(+zOyQXNWSaE1Og(OXs^*5!(6q=IN4SbD}6iv=NlqLtju| zeE0-RV(R3%t(S9Sr1rqAy)s|EC514f3G)*|B9aob0a@|q{h;It#OjsW9i<+VWZ1rl z?rSsTBAP6|pYrQ~Jibcid8M@q5!;PD{ zH!B^y+RJrZ0Yhp+dqz)SH!qdDgw=X9e4|f*IeHw;ZnM#HpYL-tFIDQ5vFq5ohRf8hguXJ%h39M2K1HI@Nbll7@r(7BWUo0P zb{!fEj`u4Gi56z2vW?JpD2zDxwLz*i<0 z({ng9{@T;bYwT+0RnDEnSPx~36{~0GHQdA_x^o5j}F0; zeIqKsBRp`u&zrLxmud_!f%z30XVKCkcFVy&u7(xN+1xJer2-+^jW;vsZc%-6QPP*u zbEh*mt6ZRCTDn6DfmqJ9Ua{(?YOd+S+>e|rajWr2B!xLc1d3$(+5#u?`7!Z}8n2p@ z^Pg#xuM_*8T+4cM!()kACk}^+Z6}K47OqXbEvWJ%H3X!$gO~UOFQAWfZXYx1hyb`Z zEAhl=Es`+quV1{UryE_U4-b5XB;S@0cIK1jC-=IiXSQTVAH^dgLb#M*aQBYPJ+Ni# z=Pg_p80O+#@D?Wo`(bolS)Qi?%1*{y6oF0$Xp!&PQ7kn@pXg(J3s}XHJ-#e$@5H=M z@KMw*E0Z%1%IlR?LwD6954PcyEn8qGkT8_gSt!tAd?b*z5ZHU3Wc?PI92RIW(u@_D zjd`ztuSZ`l+4DAzBBKK|lh=m5Iy-=hq1bN=FLAkQ(7_2Id5E$y+*#Ay=Gc&OP1%Of zVV0&8fmdp=Xr82tlPJ_-#mQx$8!G7O<2aLf?OooQoOEu2h8HEFBAR$+z7^@V(4>Pk z&t`q>f&xmnIrFbM{|h1;8Bh$X0`5aOu}1?-jq|Ag0Blfkij)v1s?&%t0?T!N@DaH z)hB~K2;0foNIL?dvI*^b zY%~krhj@MRnk9MEjvk6~jnO^P=Lc5U9O|_;{+Mwb$>BkhNC1@0EDCXv8Y&2?T{Vb4 z)y2|4VhMxA6uDIC?7|nCjvgKllUP7s4fWFy~3W76804->NBpQ%?!AD0n zrGt+R{0hpN+xfJi09m3{eFs)uv18Uyd&^vsJKBs9Lw0I2>@{5MvPBjxwTj1!$jJ{g9~_ zKtuH84okZpST2-KMz8T^2$$#h6K=?p&c3wmNUAH*J#%1JHP7r;^ru=csbxpt=-HCi zqR2Z$#sQPmRynRIhmo~KW=C*RET@pJmEl9D;}fIeaL%fCq$LyCp1gG2og5Fvx4Kbf z_D!XxI6>Qcmor@oRF?MgU>XdlXSFh%`_%%mw%5*Kpq-*Hk3){X5=U)oj+YT&MFUUk z8t#!WP9hvg<{GMK8nMYS+fyNN1Iq%V7ZL7j1@o|J>H^*pVux|E6Eo9T)`=(#BZ9-1 zi%efGF6(pHiWiY1{hqRp%#=CzG4HXxhsyN&q$SmNqHB6a+|De{0X;?~GT7wODHT)6 zRJI>s6=zoH^p>PsT3!Y_*;EiKz76tYUcO3K7*R9WbFT1b*`1e^5&n`?3i-7y3M8Qg zE`o(1yZC=HmWc-N87(DnNWBS9CF`}uN1DJVKkX{$<;XQTW}jHq^aE(u-&JDCGv3`voz>>dM2vdr?0 zWVh2Br8_!IDS^WceUHK*&WH2%h%;njd9N;c&8l%nq=jtg?Z{0+NmXSVC`>;bFqtK` z83!0x5_I2$LXXI@fo!yJ1C}amPr`mV@4#Xo*kcfd1F_MI;s&#}t_yEP#nloWD>&ZX z1AZ@eF~&IrJ4eJN2Y$_dlO)2i%kEDloZ$7%kL2Voug(JXeo*30uZifn*#oldUeok5 z;hJPfPP?trtykd~#(nV4ZjK;#{8_YbvkGYoo9%9rWs%nj@4IO)xo4Er*9v6 z6fU`ECs3YDBG`3@75TWJZ?ZsjII~EV`jN;{9 zXqyRTiyQnUqrjJpCfh*Rp{@&fw>FGb3M0}l$|86k*>g0Wk|!ZALD`-d#-KW&E>0KylK`H7jb2girLoY=Q9gJ^zIQ!-`as?7#%z0A_$62H3{kM;=J6)pi4t7 zOBXnS?$z!uq8>xmvB^teQ#Hz-B^DOo zoldrr%<6*{S1f`sqUZaZ_g&Y;%jg3%U*9zWYA>TVtJN}hnQe1CdIDuK<@LgJvgg6B|p`oG6qQMcrMiM;4 z_o8P@ZpPK?@$sDKfu3-+`GE zwh#{a25*K=N!qYCj=Xk&>*8~?Wox&w;?=P##%9uf3DYUVp>FSl?clw(hgcOhT^VV! zZH#^umE{z<0(B2s6~)Tm#N|XfNAHOdNz}ANIS>Wea+}GRX(%xgr|pJAS=6RK;m1Ui zIAg?`PtZ8b8zLkdnh@3G**G7STfD?lgcmx&Hg!#XYi~yYdmnf|WjrjIeY&n-Q{Z$H z#YJL|gPnx#PL82AUg!As(79LXNxbw!6)_FM4zZ{QSBWP&&pJ|o$TN8CIa}B3TRPIz zQ)@y47bO&zd_yus#Zg5`puF-OTRxJh2UFEH$9#7YACX zFhIzXMWQ}e3({$qOh|wIuFwoy`$>T#iu>@08=$OX!BEs=QAn@{Y3D>d7g{Q$0mWwu z){Pz#SEj*-sY(kbC5!qj=jH1opoQ`a*t`IgHzIpzz&IQb0+TvVnl;IyBL#fR9K2UKKnaL+2H+ILL&itBZprwXJfH*ULTU91bf!j;*WHbuu>CI`wI!w0F3 znKT24?oX*7kAR7x2Mr7aMC(r!g4&(xSLmAgIoUS#;6-A^psu9Jh3h?Lku#HOTH%5vcwC&jH$0xa@;FUfpkC$_>(Kx6}^cTSSFE7lEP%SzV1E{Om|6mEvP z$HVcQZG|YQdx$70!hn-kHaDY&n#UwzySV!`RP(sKenE^?)!wutgtXIMqz%&gHj;O} z5jb}x$MS#_&>9opBlnZUcT148git@evW$nXWX<0WS5h?^AHEK-H}D#rKnC){Qn2T= zHrmQVf#&rgIj@r-6r%F$4n`4%XJgRwrK5gdV0hw!idsz{M5_5CNyxi^^J94@TtLiz zAql+0w06v9cBc+BDeYL(3j^!cAbBG@P1jz6f=%(X?BE$kVT5!%p2*1S<%wZaHv(V@ zSLC`xvmv8cMwxgbX!Z)=3Ccc>dAD_N%gxmIGSNNVod5Ij7v;>Bch8ByPa%&l-rGDs z8jEWn4%o$4htF`k9uI>15L+sXvO^ig%fXu-MSO#n+=7t12|*JclpETw;=N!n)qdLd zoTU-)EQXdjG4Z8%EC{qt@j0gw+K#^G!-2*y_ylwpGVJD+vxxXDR2%lT0!mt56r8Km zbEbV_;T8q{Na6vr6AcT-2=j~FvSt*pyg`h}%I)K9UsAD($9CSb9MNv!Wl!d`&uSg} z@hVMcyci}&0;rhtiKwzR%~y6tu(-0O>>21C(X-aYj0y)HR`pZ}%gHpengknYg4bA{ zH7j!1YPn6DC1^j%rEPzkIQVo>6DjA=FJ4eQnB|IP@PKg-V+cnbeYwQ$p_y-=%~*;7 z#sTPIa6f(}O2cFl>BmvH1CZrmn6?FS7O`o>`syWn3vp$P5GnNh~tkMZdF=wAIKn3a=dRM0o5NM6=OeZ~rrtzK#;vwklu+DnH zNI|JQRS{S+Vpzo}Gsdv6wX8vhJ7ttzbQvysj>qgb!^^?ysweFwK!_@vxAr8SMhxU~ za4MQT&UnyQQ4iFeY~H~&#qkcy4&#ZwfHYpseu19S+$AAjKHB#!hH<^*V!;SU8HXs@ zp;jldM(uK2xobEIFN+v9?V*bZtQHQc=&K<;H3GQ|e3#;D7J$|z-gwuzxT5r=xa9GR z1xR5R?sEf7RYgJEMpEF_%oZNEXNg4=Z~G-Uz|`%6P|yayBkW(GpCHO(5d2Tbdsf2M zqziR4PZQ<Sj9{+fV#12 z>n7+m_HcloF6TL@ZMjpfVBk3|7%|7Ff+|^-P@VOt91I&N=JP#z($z0sdDx>)BI$|> zSvC_dHe&XXaCE|gV)q5_jYrC*>;0Z>6z3-MT(hH=21T+1R5`2g2rV2lHklNL>DT=fn&4UU-53@>W$-w88WB@FH1}`YYy>_Q80Psxb zQ-5&`6Pk>X0_x$2+JW#lE)Vkfk>@+DWU_kC zSuJFl?CFYe8%U#1$;#+|66-aK?0v&-(mc4z%?m#pVqm^voMSSt(ski%OB*v3Hj(t z$fv%^xB1xP@f4KTzSW4TJy8sPJhnDH4?{QI^*RE_!=6zDJ&mS>0H8p+0$=FTdUg_M zlw02CukcYH=U@OS&l%FaS9s9Mv|M@}(KL+bX9|cGn&2;4cV%~VnWfocd{>9!EYwlQ z%_bw}_+AM7yG6D?=)NZx884jP;=r9RPIhq8!XYG7zLZ%Ibmc&udgIonfG{N}gainr z!(w`eWN%aF+Bcx5WPJYZw$(}vX%?YtXc1o)kv)rq(?wc#SPu}7mfmGlE9t|LOS)BEf+?_ZnJTz&=43WG z6LC~~{RAWw-;~eOGlM7g_I6-Ap5^rGcVx;BQJDxCIgL`VU=4Xp8nP{<5b@DlcN@ajLn+FmJrHVHYS92I~eAvzL`E?)j)PlG_!TU&zRwLZzhwHEmHn z5mT&(r4dgEC>`9NL(f*{p=WugujU3hL+nlIXd1`7cCI~ttC=Mu!1pqSXlJmiMmZTzvlGh$mdCFxUA3mj9s_a0M8c#OZRoNjyW zwy1b74X*v2N@0tZ<`u=>Kn#$&UwfMDbpv6u#;hUfPxs7JY4`xS_rx z=c9XUutjRUx})G!!49Eww9PP^O%c1PWFBJOB#;Yz4drS|todH;NU5vAA>ySPLxklh zf@xZYzIeeRP1bPL;liX?ChZYfiBqdcl7wj>`@m8`o=^D(A93^`j&jkVd4|}=i`)wz zOYY4Dria`lSdPyQk15|F)AsiAwLXS8JD3iCR>AaI8n}h>$u^-aOf8VjpuOFYTQ2~n zi%MYL;kDZH>6tEa@743clBotvty8>tqy$FJ{eXNNkP{yqOiLEROA+eO0z%1$!!sjCGZgl$cZ?^3)8n7>K1-8IHP-n zDm=tKpe=16OE!el-QND3MK<02kRCrG^b|!b2VP#=1n!w4eX_>3CD2JiSBw@;0b9|4 zZ7Q?H3rJ+j5-akZOOqGmJSHN`58Ffo z!Sg1Xb!v!pp{(pqS~k`9sY(q1iGeT|p-HFWy7|43_X7^*1+8Qq)ar?XD|ZWwtGE`G zyS`1v(*5PGFX=en9e`OB3& zPSm28vf`1F37BiN#Fv27x9n90SS$>orIQ5RRN}1EMWU??mUJ0seZ?eYvo&doOoSM( zNVagB)MQENNnj}ld2F5r2a>3dvo4>X*n)bG6_@LPGtXLJ;)3_s6WUi4`eu4yL0tXD zB>c5mS>@$Ra5|<@R9D(yOm=!fS#r1dieo&``woD*02{h+@rJ3&3urD(o{|!;$(;3* zauIqM&GV+8_Qv$8Jjt;mR&wYXJRtMKSPNANK-&<{hk|!vK+KR3*7hu-C}yh4&kW!_ z=o(lKFF+2a0#ULA)l!_GgIrhEd>a^Sb%ePO*nA-Xv`~(3V%b=aH4MgMk!7P$! zlN6~1+Ix^L_(0$hcK40ci_IP{)8uEbS1aE>L68pDY_;<4$gM%Ut&yJ8oI-|zJ7S7% zA4A+inQSsox>#fGh*{={cbkH(l&^J>@r{;F?yzp<8%={19lU&-S4(%i?39ew;%{$Z?NF>e)o85*oaL6F*=Qy7Hded+;m*()vY`a+8uT974tvQY zh(pO-nw{>$5jh0Z05k}8!3Am-0Ca%Xp3H%Z9!f@$Km$?g*#cfa zXxtw4GcNZKL8k+j8h8Z*gj@AQ-kHIgRW+m&_H(5{=W?(ESIxzcae&9Rb{n8`i=?J8JV$zs(AX%5 zL}W_PTNfiQ-_-~J<%mHTy5#3WHbzm>E9A#dE0=FmSKA82gM2#( zB95E)L&^a8lCt))^a+Q}J1={nOQWS;)Ywi?MY4QSxx9YW!!~t~Wfx_2EGr)6&aes) ztC+2my27rsB5lSC&AMSeW|+8n_hOBz$~bM)br!WYchk;?K$1MvKx4_62GI@Y3f8n5 zUbZJ{u={8;y|+Y<+|Kk)S4(pn|Fx3Wf{WC(nS#unI$mv}!H8wAW*uD0%K(?_nMkV%9`p3C!OkcU{ytuOR=3-Z;0aOZ-piwJLN#58FX_u>hrn}Ad6aU=j@FP&%<5Oeo;xrnT`Rpi02LjTCb|7Qstf*D(n-f!KIG3CMBtm_@Y9f z0rTbFCh-zYvj~r=F5_KZ+PhZON3VT=ny+~FjWx2cpD}TH)a!V9traj1wZ1okRlNac zY@L92wVcI~2`4ND$2^x3^w3ifAL7QoVc)D!GgU@8)?q^e;#ZsEyF0BCqy_;qyPhR= zWERNSR~pc!RlR`TyUD#Qk>2IJtmwUdth@#90^k`y6Ij2qvcgG{!zAMaj`w&^FXD1- zqNo@RFyioyM2^KM)|myWD4y{4oP1e{^kt>5I*MEdz8G_p=SI{k3jM^%phE{Mh08BW zBWpW-g2jFEu^8_OV0g)(T|vQvM}RDELBZ}Y2Cz2agv#?`A0{5wp!stIi;-dWn>~O! z!MG{_2F5vic#{0$g_@iNIn73!3OtuL1Ct7xg(lcQvndDTEaCS58~pik>63K9cHbi` zOM*lIBW0G8+to13A~Z2KRLqLo0jEyMK-7fNgNW7{sg*qhr%`4?s&bY>+OvSVj0`bIpygEzex1cfp4;+;#+w9?c_l%yElU?OD?n>a{P zKy4O79`LhH2p^HvLBT;|JA=n+an$<=`Ap#L@-uT-AA1%;gqX2cPi-%zQ$U|&4uQ+% zLK(h!^yY|7#A2=5m2Ai@vz z$;72Q`n2Mh5D82TG=i)L2NyLvh6sa?lRpAAdB($ayF^%*5fjfI;KMgUDBVlfq|dmq zNcZfKTh&{Mr@@5@?*-Cw-m?f!S%Q)EoO!t?_fS_4+iT3%19@T`^ohKq$Jc`QAb|o> zw{CjH2m%6t$pMdgPoy1C*G=c?)96=(_}bRDtn_hsMNq-QxVuXqP2WR6bl=b$jEQsuF?CKF1w<-nh7t&lqYAJF_}1$e}r+ z@#-bgAmv{F=Otq6%a1>$M(79C&l?zCKiwjvf}I?6Q2;Vr04F{n z9+zsG9KLI7%Ce_P(tUF_5;o&H3zoCY1DO({`!idh6G7a{7`#?y%>y93^ z$=guAiidIOnbC}K-J&a(15at6pk2%X7$2tB2`{55bAwpR(LPd1pxe!@>5(~%0&Mj1 zxosQ@ys-zBHo{VZTL$LIrtuh@5MI{UTp8U6c}1b~;`MczN?N~Et-u9CHFc%9lrwyO zDW|>16#NV=@=&;tUqv|jBf6J=lJc$$oeU%HoES`V6!~sz+hYVJ&D7@ilTK zt8re5Z2bNgXDj&*O_BeBnTdZZRal)C_ygKi^ab*ruMP)ec zJrIyzSyVg1SafgrSgi{TgfZV~VOd{|K8VMb0={Rxhb5|;PcZNxZuf{GF@eGy-g*|Z z0B0<3qAB!H-lv!TeFBlOYi4ZB5?WkAi zpu7}&Qk}*zPo3aygB2nR{A%A;K2VViW^ArxmRC?B3%6_+^&-NUkQ610)*d7CrcU%R zI^Jc!dm&HbAzR!_K=;FB^Y?;C-SG8O!amxL7bG~o!J-ueO2UafX+eU1?y8lBrLUj% zdcL9o40jl6wKklF<<3s%F{X9Ln9jRkHVI!GecWhdF*IrlQQJHEq8*wKVg*gXaq|U2 zl@Ia(KfZLJlkhwY*gBu5rWu^?VP3bl;M){~wRe)69^Q|)d$sUw_1W%u+AEA*s8Q4W5Sussc#7I=PTo>TYQk4o2OV*-ZhG?_~obC*|InoQ;v@+f#WPanl$4 zgaHz}QTefiR3jmj&uD2cNMS%aiJE2PN&?OGgFByN3{>(A+<21{5A$-oeEM3znQD+i8Oow?%WO5g_dVs9QzsGhPRuFrEy@_rPjIE+tRVdcg!g~=bp ztmA{hs#lthSj`JJU`KGky{PuOr_}@PagVQQ$Rj}AwN!oMQ3$d``+!kP-~pCIKdS@` zJM#=u-90kmRmOQdsF?4VP#|i?(YZ748oh1CxN$4x9lX-w5s)SV=EwUZbjZeIZv3>8 z?g5yX!pq}6XDM~F}+=2rd6++Qktj!1*T;R+dJwQPIFQGz@) z9w$on@Yt2i0xW4fG%PS0e_Ys??0&<5igHFog8C|IPl)?H=X#m#!!V{jSd~8J(KP>> zDY`K8t~YftR;Su}fJeQlvZWk*9is9L^wTc4H)-3`(OaGPURE^I_idYb;#0n*;N9M!a%z;bqF86 z#+uk|GZKPbq3qGtLnq=2$|j3qf@%z4RcIX5db#Q#n_G7FTA%Vm!#x*+6}3qrjBhmg19RqoczJemQr>DWxURHb6;X$lTqV`51PsGDS@94kuDVmc_ama zW~liI*-cHpDi9)Z@S-DJS%;-VKiL;xDhp#PZY&@sWtZX|dJ!oIwxMas&qcl5*i@|_ zz`VE?wRjDYE<@Xb)i-KzkSK3^O#loYa=IzncAF4~Em|5AaQ7lQ#J?ZnM}~$e=uUuPk9})GElOe( z2h|xV@^V)$ki1nL85KP=L2PBTWZ$5L7L2@V)3^6tD8fVWLel|pITq_^iS*e;f6I+W zo;Lcfx!$A%2o*n4m;tH|hj)v4`bLw{OgdncAF5E1hv_;fk(lCzIUCAbV1T9!cH`JD zGey446xxWSbI4s-0Hha5!g7ys0f!|;3eyqrkp*Fc1~kJl5^Onx#xd!7NNRRyOy|R1 zB9s>qXhO2CG4$qn2)~ME8JS8?JvQ^M58uqa|J2;W6ex6zY=V~9#baEya%ID4-!PcO)M__-()tJ* zj#SqnqDS=6KwN710c+N-UMD`%3-?e_>yd>)AKrfLRm?3V{Z-&4}xWgN!j; z%2tMMRlVNfi^u7wUTZdw^Kx}oTT3jBKo|8q-)Zr7uW7jM)UCAJursU)b;OG7v1Y24 zvsl=)Vi+q4jHLxg3kua03S60pTTAaGboC=dABSBFf?DFI}h!)IVF6<$w zqcbEn;XMV>L5kP0C*@Bz0A!@j?dClwC&aldbQfxS|iz-nHY>Q`5s^ zex63qkrAbk$AGM{;lsE&z%pIHEOny8y`2jgx^i$Z1_i$qzRZJdY}v$l14g5ToEBx? zt5@uF_m(sXqu;If;5;vRX22L{n;?Q754O1U(%$oN*&5;Z+KZ>in7Rzj7^j^2%)2Fl zQ{4-yNoMYS44a9T!~;+x;EVXw>R@A<$uw(6%h`mYS2UD2xiT4CB^ z>qeLR`qc}4*l#*tjJ|k~3jw0??7d>>nKuv#@i^CXYyplh2(%K$!TNZnG`p@e8)uI* z{h6%isc-oh$oK$I)+TZ`Y?1l<)uAdViJ{U2VlI(gyl&ov&ooyR3PB-lWAux z5QlYm0iKg@J&D?pMKgUH!|e7J7-MauauN=$#q7AST!Ctu)TO%SA$i8Lw)Q$2RUY;% z@(L#h8eAi5d8NDH%5X=N;Y!(v+-fkhXTf;3hN8`@q^E0Sv2U(N8Wdlnxl5a4Va@ZA z6jb04j%p2gZQ9LRqqJ{n;1=4wsDnCy6Q-VyRyGfhr6v=1?!v0J;d)ggBIg^=9VlP~ zf}Yn3ELPO9du!MPjgl4edg>JqD&wQkW2zy0CG%cB1M4dV2T(t?RqTy>yl=61uD5ds^d00dzcrk62(6V$9XAWecqZh=I;v#H z8)EmSxkje?c|@!!iy-<-$BUdEO>R9>sdiE;K=o6x$J33(bhd%Mb#1NKYj1N4geFek zZcE(;!lFgq^Ws_YL4I>`y zAEvRx-ng(_Y83FxLT?uL5|9Q?arTV0HYk1_ES^c-ybuRyg$M6;d?cZQ>n8B$1VBD8 z_eb$EFc)dD*wq=7E#32SCLKl!}GCs8c&ha8%k7S4}B=sPe809}f{4kYFn7u(0|Kl!^)TT`Y(P)Ese5 z>hya+0=HG~`QSiFaff%lydg!>u&p_u^Tl25CzWK$x+qT1<&0bgMlbPowS_7;ko8C$ z!#LflWAO7?WK?iaRTZ%Et+J}}**euEFFj<1J4Sn|&##_7Qf@CZ@c*xJrTD3R9tLBnlpFK;GS*IiR z=W15sWPyT>uOEYqky0q3Iy^6NycBxSG-Hf;`vVAl@NiDJ!UYe(9}btpiaAV`N3XZ^ z+5WM|&!X_2M@sFBfPwZNlcYT-wd&9m=C`Ol+h zAzV1Z3e`mGhuXM}OVrC-CR$!{WPAo@u*pCkj=MG1-kfZYT+0I6chy29Uk?(#h_^V= zgho)xR#T(19;9~;UlHr7O)T9D zNv%-?05^~A$6AykXdkwkNv*-eb|PsbEB7p5Ksk|jB4b*1?`!wG^`E@v@)u?xdU7C1KiA@g^L0}QeXKN0U`by?7esXVqrdC>(4&zR7|_# zmU8IV=52szPuC!1OD*g4nn53vY_-XIP6~z>M{i$-7<1O(rH1DdTSkR3$0pd0%ZEA}eW^~J3%0Np+< zhns$!L(q?20dN^Prq^D*dtIcWC!}s!{-WbfiN~_tM>OORRD12|=btJ(%8N>1@CssK~pvSqL$cD`q5_?T4TH74V>uLMaZ37neRtNDc z33kE}6T4I4Epwl|+a#N}_AdQb7Ks)n$@poj%j5=AE$)(Tx9%DaBO)db?$!~3nQjZ< zl2^G_@EB^DY!2KWtmQq@PTh1-DSepFWiK>=fD~_uEtCcsENC1bP@$bqA8?OTI)uMh z;O~jCrntspD%wU1vR(-)0O1S9q3dRw=t&zC*iFfG-VE^N88g%yKjgdn;KpkzIeb-&o+4g z?>Ls0sN+SJ`kcev)YB4DKZ*R()8$J~&pdc^y`D5-)deHJtqi;05$#Hv?Og-hS| zlr)*qBhnar;j_rK0gJG=O#@F{CWX2F@>! zQ7FQx*Vbg5m5!0!Me*v9^n|u5Ib6MywNwN^$D6SQgfMBNYsH2u6?h>%T-jrx2~I@- zXp6OYe&ez4WlqAAmzQJNMHj|Z^6an_wHpkiSMwFRg4J#L(>ifRk0EnXMX}3z^_(Ed z=5FKl!vNfK)XOmSoR~3TBjxycGucDA^J4%g>-M zKb0@gZvYA(V2y&D_iQ?Fb|+yrdaFrRKvUwI)S!N2VeV(@piene71w*17j6%{({@DN zM+OCoSEPZ7Rp+pkQBCHZIO|hp5f)8*j*Hl%3!(LRPS2@5mvaF8yAY`8g43u?;Ncf0r5Mbcs)|I;_WX_vWgt-nNb1L8NTso>8b;hJ&0^dBzmr+ z+JYDl(hzc1OrCbb^26+9k>c9LNAq~&Qu=Pt!QjEZKJj`))7$XWwr~?P*2Qu5h-)q+ z0Tg=4#q$VDqBNLb^knDis4-2M!D<UneYJB9153U0%>AoX($!Q2gR z$lPZWqz2a#{u(;H>)`cFRM_H?tn+ESm(*(L55{ifDZQ`&=oZYBqaw9%7ho{WXa&1` z-Uu zHOr#HHrdM9_~=1vvQd(E_>L6^YC^EiOX62Wl8HWoQ%VnOQRUyIP;|jxT+m7WHVbu^GQjxB=w_^{m^@;It>rs`ryp<)L=>o;+`|d<{{XuQRqyX+GDn zncThRv^+}B?djl45{oNHN2z;wO-S?5Xvg8f%S=V-(K4qBtq@Pom>0X;ixoK{!)t3> zqS}YyK@T2{A9*NbE|lJsk?$xuSm?fVHq#DC;;lhrWqa{qjtj}IG< z-P=+0+w9m)yzq_Xc=o`Kwu*%z&!p?QCy8M_wh8oSH{$qf8f%Gq>FWjvjq1ih(V}|K z=9L!Kzz(X+l>y!J_ECGskbNvH*uiSG?r++4Lr@K9F{VIy!_)wKb;`{eGj`S+DIHzm zFvWTrRS-!H5|_ON5>OTq0z>bJK_yg9j5D3|ZZY}2;Vzt_7elMn?>0fSkBiI^AM^>0 zG$?v?tYY)I3Mi5BFt&o*6Eam=>)cy@WG~+%O%a1z%6BxOIMb(^W?34um}dEIP|>1p z_c4c%GkAl%SMZIfe<2FXS+Jn;I0~SrEdA9WbuN&UN|&xGthJD`LDTwM4FNpeCfNf< zan*xUYk3wrYWc2E@L6ykCGIE%9^G!}J>4CZ#KNX^B(keJJL8;Hmq6@?VK05_K`>YI z>7Z5zmNuElgrW^Mr#GtXiZ7zqpa?Yx_e+>c&DO$EHppD90MmbW(M5?2HCTh0XOj)D z$Mg{iaJGr@17=gMF#zS`P#>7XJ)GQP;X4y|^>-2>ni%rJ2{L@n#ih4>*}&8L4XTEm z;pMr?yMjs+&Pu)wp~b*4TuPTz@sxVDfFkv9!EgXqOUx*y)paKcEv)Pw+V;E&UzJ-4 z3o5;P`(y_dom)~Kd0NU%yI!h|grP2=V4E7stm1ptk5g%-yq*^?FtggzAYDqkdN&>Xe3*ca!wz(=2a+)O zE_pIkwnW6OL1o@}H4%mw639C`Z@p0=R*3<& zV4{07Zk(w?E*#^lJ4{4JEVc~#G)m0L7C7$GlM4EwyrxVMFd!qldQo5zJE%L+sq!<4 zH!_rTir7=pANW3h5Tm^d$BAJjou!1~JDTbp{+{l3&GPmmB$TO_;nF@Vj;L zu888@t#y2xWd!cP%rQOz+Aew>EaLAJ?|Mqsd3>4QWLHn?JGZy>y^ErK@1k_Ap(PNu z#%!y6J=Z?ijZf#{WXC*(G-MuPjM&U3cY+rpy=jFu^o%i3OAOW@U1YQ8uKt&OXywYJQ0IES7IpB%c7<-8p58UHajRH(ZpDtSoGK zHdPsfBYT%qv?&#=+jLoWaj;Cfkd~ z--!yO@9S(2rp{*scy4N#GZ5p5fQ6ow**N<83(VJe zLgxmuUO+Zttjje;uM@7w_bI+QGpdTn<>a>T9LS^t67YSNdcj%O!CYv8>9NaOo#d{Y z#yoJFGSvfIpk=;rGGq@$ZW=s%RtylGDd(3b$#*aw%snGcoho(zIIP>JAnPgdG_cZ7>8W4PLQ1D)aJ=ZjQ{9cJ#8=tY7VA8-BfT_rS5V>&ZMkFm z1auaCp9dDVs~|nmSdUv3p-vlZA}$a^d3CcZtbMYVd-Fi~@wC4ss5gxLhF`!NhVo(p zm8#fIhk?AT(rpFh2^qzAsJn(?nJ9hR zlL{}nGmR5x`;nERcgfA{jwQ<{q$FREQrXn&9XHdhjoAVR3MF(QtI2$AlaVt7{!8}U zRVFqHQdIZMgJX-mLJ4wp^`XK+)j^r1n=*&=0(#^Es_2x^x%8A+x}$^KxUnS5>=>jE zjIc*VO;77i42Me$YXs)VF?{(kDPV~kY|bd~kd3Vcv!5)8+QvrZ@i@I)bG^cGeE(5u zb`?@aCVF8vs+(lE;2E4*`K z#6o$ajBmIbVq{ph8moxdjEg0P&+I^F_NAGj?K_WxYIBX`Ef=72M-M2%cu{L-&^Hxl zO*g9#=0#@=2}C%-3iC{at~AlZEwTuHT@~gW30(Q|9$C&2*Sn;1WAO&@Scp`Of!n(4 zI_7z=cgRyX4q|C9^Nlgf56`Ei?#R*>!kl|>Zl(>o@wO>%C75lOdK(^z3#ADX_d8+p z7~FOD$LEom8;_wdDV}*PtVH@NrN+}7@Oc1xQTmeLbh=*?d+Mt7CMWFTMa`R$5j0m&2B~OMMyxNRxA&q@C_mFiZW1NZQVqVsAUEz_*5~sZr zH3(aJrvg_sItS}BrD-Xu+Y81cqvTEMRO^R`i}(5+ft1q-oIz8bLB!PDn9R9)L?tCq zlKF$>+fHkE8<8V?!9zGrPZ#qB7ukkR0)0%t1KiBP=FUFvm_^Q>le%X*br zEf=_hkXSpoS`^JeZh_ZGlWHzHMW#`1NN9QtvCjlA)tn9rYOJ^-TsxIM5+DX@<524% zR2EDewuh`n+$I7cJuX_{S^d(xMvlwu#QEvmL)B`{=eQR1Xd8=jWw|eLd^qZ$r0|nc zrY}knrWB&6r?b);jB=T4#Stwjw$PUY7OQenJ0a3cA%ho#DH7_%;cgjbw|(i`NM)fcE`0mQY0-ST5@VlDJr`VdDV5_aih15{Zm0%5 z6D&Pt{Dgv;l;>4Bl_>W)#W7bz`KncbwHq?ln4Ep@r2=1=2D8i>bi}Jk12+UrW0W&l z5%tr%5QSEVIRIO4l^4!!ikL{*TjG7xunu;#8Wa&Taww;K@)w1?UvB8gTMyfy@kM;$mn$96IW~;$N*4js?n}$N+sJA16Cb@;%ZT5{obkP z(^pTMYjlt9oau6bU>iFYqY?2X!aGokO|t`oml81r%@k%CI__i<71k0Gfy54|aG@B1 zx$l{;CK=gFPvOpIxzW0FjPqLQs31DFP#62;oof-)sCLS`Z4fV?^N0kWTH0v3M|E>t z<-mCerHNHNuVgV$7b2R7;h_p3wY}uHeD4v=1F&*S+>wLOG84&*N4+D8qFg+yukdob zgdDPs7Iz?)F#K@^)s=#Yv2cs^a0{)=M!y3+%+$P5=QGzNxCpD)V9o$!fj#6SD)*3C zn%Li53lGy8a{yRG`?W47pGin3RAty6LcL>qGmJ(&(+kLy?kB)1XKKm856D9=LyEP0^3b!c^E$y!?kjDDayXE73j%m z(diG+Y~{Tt+CG{0k~P zAbDuz8#)N`oRi-3AZ0RS0DhQqLtuakd^YH>cM$C5b|IFe zlqTa%%}G*WWi;#-G}XSxfX{D*H9#B7A#b9GUUeH|>q~^=IzDo(a+qj2><2px5f*}j zJ4DKE^-kVFK;Ix2Gbw}~#Sn>+-1_{c0h8aY`q2uoyJ#JY;`#tlbX>>tV8_10jG#A$8}A zt||~`TboGKeV)c%;4kh8urNoJTyg9Uw2zrf+MDqx0xU5=xP08JSGnu&#$%+k1rB7Q zw_Ooxng^b8v=cDi#$$1^KDH{sVi2-nN(3S$h$bmxOn7)(lu^#&2^bU6 zo~5bNCfh`mSdbsjvcrrdd{EX|xg=sdb}LdW1x1FtvcxyhRY@DY3iv!g&b zuPnmGN(E=1&fwE^f=3SgN*R^V6+52r4)FQpQILxjZ370en<}a8hQUHOPQ5ZswxCit zBVfLHkrXG%*7U0OCD*ILb>!ouoy6WMig+=BkDz;ybfAUjfqPIj`@m21?mmP0;cnpZ977Rs8g3;UD9<$P$`?s)e|2glLLa`3WF{jD{mHWDwT}u%}318 zl$ntv+fx87Y+3z)*f5={+{w$8Ez0}R_5wKFf~h_<_K2p0y%e)%ZV(nu=Ma3Lk0a7J zIVfszR~&S#msbY{!rpBFh=rw^@kwU~z5uYK-g>G+^K{JrBUN3GUY@<%B@uh}3ba?i z=v9G@01Lx}q|w8eTym2hk$vgA$pRHVIiLjNjn-I&S!&d9)3pT<-$ovF_M3 z&x@5F3%YpdSGrmBAgP{Y8F49LNrCGF=Inr8?I{Yw)T@Ih4nnV~CjsHX={{ecohJ|d$xML`g-Bh2h(Dvq@CECZ4wqbSy=S2$ zK7hT8I8QVBor?CkRX)-3995HJE=aFO`#ep|BfRylI+ndqeD;JD;_*Ix z5lM>sC|POf0Z?E!A7+j~P6sH|UbrJZ*z93~mkq6tm)Ofx0V?86Z?U`zxgG_JKH)ml z+&$ElM%Ed^5)dl_JV8|C+zg|raDPMC)56dE8XF5~Q#wUMbHwm(gF#XdZ-Tz1~GaS>F1nb;uB%XRMS$k=Nr+E*TrCk)qxsR-y&^LQb~ zNH24ov>IbFO52)XfU+j(y46c-_*UW75g-{Kg99$i?tjfr2 zoHQF@<$*xDC=b}cp8$3rcRok0dphT z=BlIoNLeY9Cz1xBlNP1lyEDV$Op#@%9v&$~NbfDvMTNNugxC%7yF=^&Jj?I~1Q=rC zQ(7iorj6TIl{O-XyUX480Es5GZrdwpA0fs_VHYME*)(*$xRR9)_LO{``NF6`5|N@L zA)`g#9sBw)zW|YyGA$=&dk_^WfIZM@(g>$RltgCF6E|h4RTKhTv!(@eH|H7l3$bHH zfvop*4DS^H9tsY?DM5f^AzoAV>I4d3bv*=pR^6Vvqyy+AhS``RcAO#4y;zaUeP&Ll zpmwi|8GA^T1ufaYPNcMtjnVs&0$vipyJwXOwyg*XUi8L-`ewEco)*U{V1 z2b)&vd7BC4WI{ld)WXorg92f}*-DCWA_ah1m(i-B4UcRFci7tN_0UmVW*{vY@?a}2 z4YZvXy{n!vZX#_QMi!qLPRYcJi*bocs%W6a*^g$GP}#p1rj9PoSkx?p+R#=HDR5(Qjr z`I*DBVWFFYTIoX8F~2%i?oe!c%Z1@W&(86_^d%a-m*qo7v{?Xd+fX=@z5#XYVJK? zU+J(x=A!2m_ypf_pt6=Omg319-+3z|KzbWK?XRNIhzzCfcn~PoeEHGr!*F2N*Qo^d zdM0y1JruhL%)9MBR;>*}b-FywxNQ2J?!5(zPQT^Jh%}os4GYpyeYX>M@*q&)jomC0 z5SPBCU1`gXSMZ*ZTsG<1BA;NOg_S_c+|x7cQ6-#kY8!}g7HWLSX4}SM%Sv8keHW;; zAwm^f-3)hhmNT$Ul>yR^A3%3R_MJF%9*Do*Rq0B8%4MlDb}+Z54-XJ^{qZY!2#i2n zRt59IO`4AxjrKWN^e*xB%B#SVn+v>fF-aW4eG!B2o;6lEyxBE-1x1fRrIx}eq6Vp6 zI$W_zFRu+|U$_YSi&T~Evr4uKkNger=A2B$$u5Vix$@pGy`|Z(St!yU|wXHQ}-eF}#k-F#t} za%wm3VI@)2gHghSniKZ=Ar;9gFb$Xz(*iZp6NsT5L9vQ?I?s5NrotyAh6`@T(n0B} z{)4rfHWOs`Twe6#x|(hIT_OUcz>Cnjh{%n%vr1-;(<}jocH|;71d~BX(hH92UXBu& zJ7?ON2Sab2QVJFaJB!$vnf$PPQW)A3{F$X2Ke%-9d{G+VQ`~n0`YLR3X&3g0Vmpz! zQC0lHIRXfTAH#}ND>cXEG|ueigkA*45kV&dn4t>Hy`70Xex5p#7)2Gl*3VC(S($|s zN)IuRsg#ihK%8*^pG7j-&?(lLbQeJqHub%1zp}Fpcwk6YlM9A8gB(Wdr98H|Wc><; zRB`f*#5cy&@v&2Z3^4}{g0BpV@T}(aqsRRS)6bb;`_}QjY_Qkqsel$~`xpSWdKy=D zjXAE}Uh}-%EEg2x@OhQ9NH`cCm!gkZ)nw!8dyt#}q|pifz!01aGig|60nR)7jp(qh zW*To=EDk2!n=B51QCz4tW$`3c6@UjEsnpyI5e|c|a|jMmjS-Tghl8I%->RRT=d2Ji zk~=vh>*AC@aCEM~zC3k$8&+`dNsB^o3BJ6G854Y~5he*(Lup8NeU<15hrv@6uOh7* zhaOD4%=Po+v?8<6EHhzj0$Su4;~7qp_uQWK-trO_(6+3f_KlhPOQaHk=hwrryCPM4 zk|B}C4RfR3M_1IN2S7^&gh6I~4UCRY+-4t?kZXEAI3D&i97ffN$UJFM4w%O#n#Jqm zaPSSQf5OT%p#>G0L+Oq-YXdfTZUC;JHQp#la<-9ZT$+@#s^_c&+w2Z|3J+koNLQ#E z@<5?`uvS-9ix~VZ$h^96WFvYG{TMkhRL-A3*)9#=!+Yj4g71_-oN741M~;X}c4KM) zRpb@3!kbYz&JvQ>IveR(W0XGIn}EyZuf2laX@S=kKYP-4zUDGL)q_cXX3M&*-WP-muY?Pq^^Ntqf+vA@jGYRSqAn0?hjP4>Hk*RYQ*%()krKxiLNdU`su5ElkH?F z^0w2K(yBxXz%Ur*)ZC=``2s^c99Jk3)d6nu*wTS~Z)85o+}! zYC-O*K7J`e_)`|tkEGc~j9!$eZvYObgAoG&37AjBcw>28+3~77*X?m*?x=ZZhvc0CDQ6pIwn7no2lz6(4HfbD2JkY*+ ztqtw)FieTCrC#*x8J*Riqw8Y~O?y!>{o(ao&2A8eAw*4si#-1i2K7xWxls8EjO=;chv+vQGLm8u2w zEAOOtH`pXZPak#Dd-sTywJQOcmo*6As1n&TaYe_h+M8;|b~HJBF7K1purFFc1YsG$ zDdnk43D|)mho@!jla)!0Dm&M;l2}i?chm_mSE*vu)I)W%UM5$B^Ps``5E;GHQfYw8 zv9oozDYh7E0G^kj+H;%avGHbx@Ya@BWiQ)g3I$E`OiM&X#=&M*PyCJY<9-(}s3~H@ z-0H15;lB1IQD@YOuu^+(f^4$&6(7;0KW+mAw1oK&*OxT6V8wZZ zfH9PJ;)Amy>NBl7G(W1eWpc2!eG|iGqnwOUP3`5G{rVi$k=*bR#XQT^ker7N3o2M{ z@H~y?;Zg*xs_xp=W`K3ys^9cOz%beM<^~;T>NlQ%^%jky`izLVLHsS-Vw1{~MT&ZK zcu{#{3->y1)@MX!8fU`HU4TMbi=zcR6Kjw|2TzjNd}44F%^^6AACrpSYDh8d2A)Sz zyyav*<=RM00269_lMf6VVNgkr1sw*YpI6pdVY^v+HV(!$z9u>3P64Jdg_(TfO9?SN z@sf~ql-3?JPDTKwv; zLyHm)jGsaDs0Aog>G4AZlAaB!+B@vW9cArP`LHOH*fYsW0A4)bD;68R1z>Cr%m>Ft zEv>gWNyGhkrCKQkU^T+cV7!rDi*>&n^_Zd#rJ;lORsgW5ti*P8)lx*Cmy}OqUNSdF zNbl>FC>cjb425SE>~#iuhWX^86|_y7@~Hvt+vW@@BGkv=RU?k7oOR~!^OU1m5L)6RSerR8>SWuzB!UOC2zMar}v`tHi6GG^cbf>Ulev7 zJ}=^;XRC%Dg3q83-wzjOe$s(4HbPwbw6#T}G;=IzzHmj5FI>GGH!5cq$PQ&f8!+NM zAn91-sh8SAc(HLUf%DMNq$+#*fx) zd*ehMhR<58#*^ak0rKN3h{UwzeyD!`@p_eF&XN|P!JIjBuBCAXTU_sz=CD^2rW?VF z@gbtu6~(>0y&eo9At$I$APBB=-e>Do^9QQ8XuP6S7S%deAT!8dJvLA-Dn^ zVkgbT^j?Cg%j;O~o<2mLZJn+?%}i{qz{Xh6-7-5{3&-d63g{M~Jf=Hb$u41EQ5(ry zYoZP3T% zYP&Adkm-yY1C2Ez5H##HEk3L#hI*nlw1~Lxc6APb@RdZB1U;y|)tc)?acktZ3|Yn` zXdHg81%XK#Jn=OR$V2EPd+VCijf*cQ*&dk6U~Dk?4kQ{2u5M(NL(S}Ao!*wtY^nh%D^r@mTUsO+huI}?&Qoc7 z8xOm!)Yv)Iq@ZeO9H{LwU$v1@XlUUZkmg*1dt9s;xiYLa0?48Z38VO=TJ(|HRE>*V zq}27ojQFv(o@b!0VG?^p3tSqf;=v#qEE*Zq$s`6)9$?#Bk9b9yw-_D+$S&3wu4vN0 zf*uTOcmsAZ3M;;O&nS$=kHbj0^mV}sP+$!?y~n0jwlH3s*puLr{Ma2WT|iu~ zkFOZsz4tElHe1|6oATsYJOWbh_d@teRIS-)qAR@)fpaT>r80ff>nd8#*Pc)>j8aQ% z`o@!E4ntaJ*w~lR6kz%vuu=x00FL3Woth34t70oN^3fux>RSq{-tbU0Y|GH#hg+B( zi5w^=f>Dx?2;#*fM5RoI1=(a<;Yu69Op1#t5jNXK82P|>{1JKj{CK$yN!X|2+J3}S z#Dcp|I4;j$VzEYV-UoRMiLQj4CYh33cYs__GienW?W5!glLC7OBWe2Rl12?*hdFj9#KuhsCeljhBfT}Wo> zeH?*0av;`@B1m&emUAaZ?1**PmZZXu)>rHRz|WY;_=SVu1L4Z@Yr^G+S`Rr(YH+4_ z6s}@)EVnM?Zc=f$MwYalib5-=-}xbSK7Z2*qO(*=`GUx@Dn!rXF(nR6ax#&R$oL66 z`FNF7iEBrBrGoe!Mfy*DxdsWb~g zvZvZl*#gbp8_JT)^ut)6-gpga0s7z$5MMJTp8_=9I=&oJoTKF?KV7#6&S&t}2NdFo zs(a3099BJX0)MICgl{rGfhG6?HmW2KOAeypVJ~-H2CZy8?)9|OaZ1<6ECOskyRwB{ z{Yo_(72e~rTX|CpY%QuzJNB0Nq@SqkWGTcPma`$KiHe#~QQ@{2FFJ@{6U%#TMVY{= zA=|_J0`n|Sx|$NvEGvDCy!GvacTlkY;B{VLk4Q}g>H>u=V8Eyi^Z3jnl$HU%=j`#g zaYDF>c9?blBUZbrgKvkxyY?V&T&tVD99o?@& zF+*et$d*;3JCzD(8&BDBq`5m3OfRJ;o0zRQSg6+FK^B$9RMzx+tMCYjmiHkXuwJJVg<3%+Wx`G{DzeegzM8hGwm}YJ2D=rFmmLO{sLU zWS}@Y&s>n5y$i#D1oJdftiAL)1ysp`dneVzjpl?}o!%BdWW?JGV!Xv7-hp?Irc4m< zk;dD+(t-DK2hB0w5i}QIH@8xTs8~Isk}NesEO89F0N=MSUp*j5KjQ}p^>{&SnGolg zm1YY^VPdgi;Wr?btkR;3IK3u;&4WbD(qr-kjxhPOssr4*afH9U#z$2Y z&XxgKd~$pn_f4#S5ld+AfDpag2!uBvFil?P)J~`&rV`%5n5--Mp|yi&QM^a0;kgv% z4*4D%ynNyJn)`Ykh7`B9&0PWYBJ18}R<76!Kc_AYvRQ576G^_fP?qAh6VOsNX*y4@ zY3-EgCs8}zE0y9N4~%kMNIGq1^;8>HC_@LAf;v^M#M0%eqsQOTK*v52pJfovCAt}+ z_z&66=zEg0W0+D+Pzlf1LHPkyV~R-cS!98FMZ>8Zxizx)0cEmvSuAvQE1jqs@zAT# zcpYrMsgv76&-dw%=c^uZm^t6$C>{g{9|DpGgO2D)sLq~n)+%q9A_sANUy$5r?azX^xgvxdX~KQ#y1OA5}Fo6 z>?*Ow>@Pt)j z8ZtrPt+un63Kt$W$>4&@Q>K^VPT1H8>aNh}@SbgsS%l4K0=ek}T3C6Y>r4AahV(#P z$+N>@%NfV&!M<*=on(}8SQO@>G~R6itzF74^v)*stT|GdsoF;-(B1}d4+f;)8>$Tq zxaaLF;=r0gU@q9IeSu23datwRg=bqBMW|xxi0&YAhxE7+#@j{o&XHH%;B|6|ZS)`w zXKj>y41AHS;jXs&oyZ7!mA_Ses|r1n1WhgPsLxmh5j}=scBU%e>7^Yg;ZVyRtc(c) zSfB1D5@Y%sATSd)+e&RUgfiaM(o|?_@3eVa-qSVHEV%=|^A>i6-x8}xj5PK^sG_Vo zF1IJ@=1uNl+-xz{#unL-D4b{bhOy)kbnWZZ*LEo<5Hj)%)!wqlcAK1q`3jiKJ(zR0 zlsC{1nb}H#yjX)_D7Id{i`2Zx(LND;qLtfG1t`6Hrzu#ejlJM{Tj5Yy(f8sA)fag0 zt?^Pc`#eWWmyvt8a4KH!n$f^Dmp#GYF3M+{?E-URt0A?lnZ2w0%ru6Dl7!9s{$n<- zo?U?To}~B7=$U0wSsPKu>3gC@7NOVGNW2g2;Kf2h#SgrmnASY^kfMp_%%S(HK__$x z1fx;s$!=Z|mmO9Ly^O-eHBeXvMYI0(G9Bb zKwOi;V12a@;~_pg19^^aY9s|un;YROK?vvo*aC!FVCFL;Ta~-0`7pLN9+39fk4zn9kWOH9bu6lDzbrS4O2RA>VP&rx( zV{!r)SI*P+V@OP4W`0tVX6Qcq_}=3?OMRA*Fvo2H-5N^B&pW4(xW*nQ$mJE;RE#N) zLHav#7IU6>r(;WeN7+j`kb0f{unT|*ICcS(nwMYkVxwfQNNU;&7cM4TwdWPIBX%Gj zxpKQ6!hn(TP_WT}E3vcC<1k!)Emg2Naxa#7-rE`&7k&_hgy*FYO~PR+F@*l+lsdw8 zGaR%fx#ixY0N{Bw?=EkQUEYhaGBnP4ZA>ZPL8S1|eUoU+bwS%*aWmT1NGHT_4=m43 zHu$1MMGk;O$YfgINd^YNZ37apzEWY3?ST}X@ic$G{+-zoQCrv6y5YM9D{==tap<}Y z7@=ez4966F7OwAUchGXCG4;u4N)!QZEYPT`m=YPINVn`Tdp(+vt;w`OyB+y6m3inQle z7!8*t;Bye^y?5}|Nu#H`4jK&l_QtP=L$P*3s+$2oC&vMZ=w*wNq_5F~FeEcO6*q$? zNAzf|JBibMG(l&yM5a#=7x|rtiK4$c;PFn3DQAr*y^ONs$A?`k@VdoKAq~@6>5`?T z8D9Ccup3KL&<6U$)M?fCwDJj*FM?~MRKFJqWI*mE-VRw()O%;5*Ycj?*xWF1kXY)z z^TIK^Tv)1y_^3%nBYM=?E)Sv9URODbgEZP8VyTUX;kLbAo9XZ<$c8J9r|LLd^8kb& zDKnaDg~k%)nL>QRd}{8aKA=8(FJsnA@<9R&aIoVTPFn-xOPDpv{DfBN z3tH4ST5m<+o!LZ^J$W|F&bY7YnU4%eHw*hD(gh%p@uptq)hy|YDLO0l3&hdj(R*

nJLYnt<$PQi86UnxvK+ceSbB#mC5$ zWG^s$@|*!)MrkW5Vy?t9>lc(1O2F=7OwM9Ez3;B^G$%LKjia8*hkv>G{9|`&2@y2 zcg(5qltuZ$yTx}f>@koo@s`xpY=gn57?+iOC)5IaA4B0BorE7CBsI-~Ok21hB#)Q{ zQ>?iBA~)KAx5Hrna0^NfV7j#D0AlXMnYu-F_|#O<~kRV*yO8#m#AH@>gzW}hpDnu0p;W-8UPc;CK7jVFx<`-@>xbl8uMpSQZSFToUq>6g*A-byKQeb01+k3$`JuBIvtV zcoNh;K|CtVc6^X2B1A33OH(i!PH67&l*ysM5m@k@Fq-<|){;Hq=Rk{F*Xc$;FDY^> z=X@v9fWvvArfOY^CsNOivg&lvS5>KDc%QykVS$FkB?^*xgz(OU!CtxNECrty-|$(e zc2DHIMV5}!U4yg9=fISM?K%&knlLy391#r&O`pJP6a zc{%Y&@*&XF>a+K(UK>+2M@8vkfW9R%RZ5MJ#;M}ce*Q2KPn91af=KJX*qW(t(QQRO zjyrrLx2RKdor@V^IZsHIAt}ej=DR3WBl&6;1Y5={+|PY*{{^ z>^___NXXfT5oaFl2MyBgVvK%J-YkVgRpIP*;stBL_=0`zSx4I_P+czGB)^$T1ka15 zf!DXCQ1xP*{6^DWNAr7lmkF<5%DXhjL{>M%%4Y>HPHs^qD-woNR)?|$PY(GBW86hK zPCQUVF*%)#+!$k|ORqel>+PhH+Q#&8e<#lo5BFs^y36d!6Ud^orIPbTY{z~pP>XQ^ zNACt7QC4VW5=se#l@wxPMyYbk_B@Z=i6gpR^;`_&G+I%Zr_u%DZN7W3Z>T9zi~%x$ zT5ZP%C91U9)U3;s=hD?ljZ!@5&1{R-K7}(5ckF8B;Sz5opFjjZO4UbF(~3rAO5MPt zr-2)GQYDc3aIuI^LDH&hd^}!0b{EjMIJAX23&ZMKjnXrh*ULFNmTow&&#Ck<@3|Pi zjHnkEsN^m2>=7JGaw1hiO0`Qo?OjHDBm0PgHYn666nIQ1DKM;pWgoV&kmfuq$UcoFD#&3)}AZ zTv7rlUzX;u5o8ucr9XJDhr67OEvMsnI^-00P6><9aPOB3Oh^h>ec{-!%DvV*qBZxN z8utibC@RZw#>7C~!el4w_108vKfQTD3I_Kksa(0Jz(d_H;k?ndO~MPMRi}5EwTm-w zEPQ1+ILp^J8=Uk!XKQycY)+6s8xZZuDhpX>it_m^c9p*P5&r~7+WzCV?~TLkxbFj) z9YrrX00{xjO$)WaASu}cBhVRgiG2wWVDg%iSm5=@)@Z3yGnJ`IE7%HJ#UKZ8a*hSD zIN7o-x4Kc~UepBdu_%(-^JUr^ty~DhU?rx}T9xcac=PlY(Ub*K@Wvg6IA)Q+R37H8 z^~HlOOE{pM*>uC(y9-=vT5;NpYEr!d=w7__UY?W}TjbCDSgmQ#`2-;0pw~4F?AVQx z^~D;*toUK?aJyw}GLRU}M$#)dQhebT1KCBi)(-*kU`DhM*Oys^lj&)Zl!-|=q?X-f z(MCI{_9R-ZwZWC4r5~@?(@>?PIV#X{vD#ep1f0&o4N}p9;%=HIMHYSmgfnlNLTcjW zd)oLUL5|Lz2D;#a1B18vTLK>}iMK>S1kElMA+jfUhH28y3zotG)yL?oyppy-C>O$m zyP>ZhuB*dBqH|k;21y^2L%c^ll@DN(Ekry^?Kpy6N6N<)yM1gOfDeJSZ68MmF7V;? zgc)T=EI%sIYj8s#(^ZC3zI$Y+5zXubSz^9cO|6OqLI(8kR;(c@o+f&A-}p=AqI|nc z5Sr*vkXrr5Wc1znUK%+|EI_*yJ)F5k-U0~rR|u-d1^Y_XdMzJ&#k4yV(Y`P<6i;iJ zctxG+=q7g}08ip6R2Fbv5R;?U5GJOHfjBE@vm7~%h8tI$1SZD-`RFIN&%U^Q#!+H; zcl4l0RI_m~ulG5HNN(x|_}h}?*b1xC=E^)+H*Z(6VF9@i(0#G*)n)5ldDLO(Dw8L+n6s~Hx)L}#1TH+=09#`1q=8h#LhC(9Y|NHGtN!OmcD#=5* zu)`7$h)7?(INhV_?j|lv!>D$=n7T8r$To-?orKGmmkn#LDlAoglP{?dUPuW_t-Irh z?nu0u(&tZDPJtyEI-k8BPsXyKXTsVMZF1adZ!3@6;;Oe*po^~TVJAE5_7Hi$ekLIZ z2yZxIXUwqLL*59FR*PU3?Q!H~+jFn($yPBMweT}AG(<^fu?Nq<1{JWKMdSfv-)0b| zYqmRK$WyrTl_Ao{N$)5C>uH<&8*oi4c}umUdC#?@3?|vD;|!m|p%pDyXJYqzokJDc zI_f;ISUqnM3dS#e@-4(uc!TJVITX#7HL$W=aZh^Q;(_+K0Om^ACoCo987yn(&=~cyoa&C&FtuGE;c0XJg;Zg+7d9g%QzHL zN~*79yBcrvxKu=?s~-iWDLHi%%xgA*0-hTs*J9O(F-^C2p8`#e}KziUbEo^3UXx1)FtgjyTkWW~ad z4Z}{`JWY$ioweP9$pH-AR9M-W9_4!+Z^o{fB#L_RWwGGPj+r#tebU08;QIH0tW1%w z4U3_#Qhj9JI$X%0s0Re};W!k|(VBz%v>`}nRKhR7>bjxNvmm#jkFCXpbxUa{vZSi_ zrDmH80&>@a9(IiD;d+g z1s+m0b5cE(hG`^|-SAk_8Q6R;-BqifY$BK)0d_<*)EW;uzB%S8BRLh=Ix%i3akW6U z^}t4ON`7lOV?os5w~91DY8>7Clr5R$*cF1Q6%hN9IqEk?^}*HiPHwM8l>bn$E+HRj8Mjg7~k8WN$( z549lQ&X%pVw#q=8s4zQS0Xap3kUGf)kp4h^}uQU0*++0mcjI~KR ze2gT$1DR?{nJmUsi`cj2*W8g%(xUl-x$L1ZWt!RL-P#K^nn&-RTNoHb1`fodW-Y16 zp*J~cNwNUy(S=*F^1xD_wbnfe2%Hms&=+xMIki|op`cYcj+&#eHGM<`9{jG-Aw@YO zIwb()fhBiyhW2H>gQgo=V8eI(;^xXTP=ub!tdWDhcsV6Kd2{vB;;5iErj;RM+xrQw z2R(H~YRPN@SCe3Ufe*PPDl}t`P;chR1=#s!zCupeOc9>vDNbyXRqpKgO>TUj$~0u2 z)alHM2$_yF$mGN$yyIo*IwP7q7Q98PFkw7vnZtVq!*Ue16>q{v4RVy+Zd;}oAITAv z%FUZo9H~QoIb&+=pkh~8r)Xoe>r|N$6bO6Ljb0Cq&n=vuU0;bTY^zvPbM%ex1_H}n zFfgc>kdhdkTRZU%tM<(;;Xqu5t_^ zZXl~Ys8cy{fUfh6r4hJDY3tf2{tTc_6rXeQb5*aTN9L*UBoB3MIt1aU~@hD59s+?ek z(dOB*$0LM_JK@Q$(zp%_Zoc%!yLu{M>R3Sy;T9h#zrfgjje+_C#TRVec+~P~ySFeb z`wiPT!IWkQn!|#Z4!XuB(`%eIekwfdT5&=^;!nb!cGkvK`8&0CQzk7ZYZ;~`FI=fZ_c$7W zN`HHRk6<3}UNyUucRmApZEDL;eP*!tF)U?f1FLL4+!v$VFsx)dehnm5-eXU*DByO- zdM5*uA|IYMlFQ@mkX?>n>l0l9_(E6u z66tvW1KF9~&Is}oRj!*w*X8hwV3ECo*DPjaA~Ddd z1vAt~g!fjOMIxm(B3y??*IwOG5VO9S&C;wcF^uEn)K}COMwmfI0VII`i$ltY6!=v$3Q(oPtEG@U4?& z`m&yZy$+!MNmrJ6)dk2uRHGL zyU;go4Mf!L9xek#=Q0(!+?qNdw}sOX7KgvaP~|E;MSUwYL$KLF`~TB;+gsj zam^|oHGLB8J-P~$(W3Z{F{_gOa9+aY!jPkNLM6`Ks>PfT>JX|un}zFB&8L@oZ$08b zG^Gp_XM$CMX|mO>)mp+mrNQaSwVtH3r@-sQ1Zx&4T4yH5PLrl1zVVEUuvX)ZJbyyS z&+s*@SSy+@l(4@iVhc}=XN%{V%ETtO=kjc;w?5@#x!Ez$lpr={J1AD&(AneKe986{ z-eH_9q|E^DFa$KY-ZO0ROe zr&0CIu79yRyrx}2efh$S&hjL9EG*%5A5&&d_uhf+!hO9$fNCB9uqRsO{R>f5(vp5`mJH@uJ!#^7zghd|0cs;o`H%%M!7jO-EGB}bh1 zAWj>B*NpbaVnegN-d-SQ>%4cEERsi zBd>8__f>~-JJO;*Wlb=RqRzEidE_D(Poyo=tYVe#S;Ym6BYE$=w^wl{NLz@!C#Rlo-K46cIdvXD?T<3gWe! zJ_2-YjFcxU&GW$0*j5M>lK7c5-Ek7OY|Okoqm#Ft_VDEKQi;Db&8q8s(mPiOs(IYSrLx#$px(0HsmTN7E*5lH z;Fo4Bk))DKnSPGl?@ASApG_p-g>lGo0*C-di_-SN&1re+OG-6>EXKSWT+|U0I!u1E zov>}N_mp3}95b&saa0X7OXB@77;)9Y7SY^iX71t9VT3SaS6@}!5ed7K8UZjrmZo=c z`{hTg6N<1y^KCW$v5PwtWP+`0nA$Qd^|Xk!Q6M2A)Hsz!3XJd}w@D zF4eQSZ}WCnydh(^-6ec^uN6;a7+{=yX1Xf|3Ty@llcG<%v`E1MwYEGFBfPxaZQ-I` zI&8cN%r}7a;3D6{_aD9f$TPH5Cmubl2Uu7~P2n$#L3B87A)a@Ly%rpi1~75!<4(l# zh9PRhNMA9f+**6Lar1_i^%-;fB9@!hNUQ3@c_wQYv=pTsY+&?Qi89o87rKa1*CVmC zMfVvOiWZ_-%ER|uHiB33rA1t}v1{nd43xTdwe{{cn&Ci=gG(Jc=_e^2i^qv|Am{VA zQj?LHgyXRq<*h$y0cHfZeHjll`&qAxQ@sKTdfsW+_oOs;$RTZCXn?gepOUtAvD2#N zLAG{m-n0@FWIs8S1p+=Kh+8wk!HI|cj2{rlHA?kZIuS2Jr(?Z|4LR0nWn(e1By95a z$CdX4ALxo3Wm$-taxxNM{@h9 zo6%tO%#YX~%PV!*5Iq4bC?HM3jd!~ZBhxKNLmE#(#G|;IV7cA7Vcd^Q1G8Mlu%wwu>Nw1fd7v<>TVYf|FwQ0~?Apvrz zQqz7-feZ9@fOofV2keE#C%q(J^jb?n!o$$VtB=IZaKmqFnM@yEBz8LTu(2y+E_sO? z9C34UdNwvG085&|(mY(W;p~>W=q1#)LoIB$e*50=&_jJ|HW|I!LF(s6b+JGt*}*S( z#+G6k-p;axCd?UkO~bX>)qCK`TPV><8EAo6yAnVxub%_0#R}*xH%M=(61|{Q1-^8O zd+_KHks0B=7WaG>-Y^!KYFHb`@87+*V3!66^)NJ8hJxQH@vtA}q4G5fHOT6ii?e9h zaRmek279Uz#0W|a=0cb77L`~tN@GGoq3Q@z$ZJM7p<8V&xv_zjCd`=DkSPLXcqO=Z zgMxyhva32dYWBLHXbg~Zrz47?ki+%d~*djgf)?|Mwi+1Wh(4yJEO z3r6gAp4v# zl&<8C>OIV)C*;2apGB-5g}mwT4n4I+N^uv) z2OFLHfKLIilqQ85vSY}#J&|)B0fLaoVKhUrcaIV5xhM-@C){qempYJEwXHSvbN2{; zIGmbnJc{EHSlXrFdY+@C`EbLvc=i)trZ0RI>rK_`rMoSmmx0~4O6WHN7Yp^481`;P+yRIN98r~p^7zVnlRNfVc*9BbymLME z#;{SC?+q*1(-}eseqx=|sZWsM00{s{+E^e9x~cEU5wV!Xv1|au9&Lp<@fa1Oz&oiF zJ51bdK@(h;dGFCHjeTO}X%A~J*bcPT37*E~fBa%B$2}2ANmy(EHbx;%BWzF|Sa=7E zxTm$~Z1vCrx?mR7)LfcXcjIVnO~bhy0ZS3!I8fhAdHV$QV>1v7&T2IYZ1oQjDSJU0yjM8SepV zh1@zQ9KVEWlvUsDXDY>P8Ou3@$ zS_*&xm$lG;7`oF}&MG<(HKz z=BCNWFznkcVXNZlTSKnC4Uqa4bs1h`vJSFpdBxk9?bS5Sd0ic^7>+t-Emq>`RCY5i z$f2e;(CQHH04iAS?HZ&=%o4Pw!Xbe}yqeiL8|q>Kw#f%xsXTYD#u8T$^et$WzT$go z7%#RgT7bo8?~&J~v(ss{PZ?h|_?m*{I8-n6!|M=W+s(p;_DE{a69B3~HGIyJ0eF`} znIv&<^8u{gNfF|`0;L_T*(eg~@F&~HQH-AakPoLB%!D*+pS9%3JK^oyX}1(z++Y<6 zkKUKF`Bu8PFA(IlTx`zk@Z2!|5flET1b~+B@RMJGFMgdhVuDZAaGkIQFy#@uRnwj9 z)ky9bj5^`EWbTu3cnB1ZaJuAne)vqWhu$Q-!YyH^dn!HHp=AD?b0CP|RDoQ8AB=?5 z7Cs~)g0sBdz->=BRbsp_C1GCeW$~y-@1gZcZsnVvB%%7Mm__9D5mlL1=#cG-C{|ur#yJi#o;n;-j!PkZRi` zn4nLVo^y&JgdZ6zGkc5zmyWAK`x)HWZ78=Iqp_AnfUumm`T0gRKfq!GXc~vpLK+l8 z7smh@Jk)&8`W7#rC<0f6UUd5UQYRR-CLi9ki`Ny*O3K^KNyJv{C)|VDOm#sx@Q#Ga z8QjdkK#Ss5w6zcW(l%qFIK7k+#SXQXGH;6`g=z z-g*?p%<0VA2Sr}nl6ZVu^QilFoekF6Z=Sz_Ov>X_pfOQl&MoXadFyM>!ddztDP1dX zBRxu(fvVc1-Lvdg9?~&7Ca4ABSvEPgKU&@*)PPo~Ks|PR=t7z{L_&>RwSjwpmm0{s!2;0H)fgQ?icHd^&16 zgScm0@nXQ-H2NKoHF#}G9vY5oiqSZ%COVp2*RaIRiZ}B)<1t zTF&4>`vvHQiCfX=E%K}N(T55rulr3m0OC!=vChfFq8?oEdq(XKm9z1g=#D*gEcT^h z@rZo$$TGGY`)C!zcQo&ik5nWxF~OqOlcCFOvBCv_hTxt>!-aI{MO>f^lK?%z(UvjB zim_G0VH(V-!NVB~s`5DTwrV-|GK*WOp&;tDWOOl5P-db~T14*fVg_~{YbjHD46Me} za}ZHY2y}rub6gAIvF+7cK+$U$PqGD*Y;5|SvVf)>XCOms_vSr3CojHt>WFVko~0NW z3-Ot6Hw(Rq3~375do7J)ubB82^(;JOj*V8OM6gmjWO$*}>OIOUy{_|KBa=6G^Stt% z`0Na==*x}UHBbj|Nzh~TfHzkGm$?-u6O9I>k#?@cdGEFNcpi(K;EW=!SX)H;MQXZk zcItZ$0Gh|h57Y_9L2;ggf(=kY6o@?F@PQmA&Z$fDBv`ZcJ>@7XeF7{ce5!js!w>G!t9YLTt9=pN z`D{3mG&CKbIT=0xb8&mB@`l$>p@|SK@&c@3U#~)m7@*tj1JReU{$gL;$Y7d#KS-9x zhVAkyVa76*f^GAB)e~#!w6Pz^5}??yS#Gf_*G|kv?QN(Tk(iiow4baV#)lZpol@w zptt6|SwvEPd`b+;nguJBfY^pAXG&S^j~{q_t3$=_R%9a4JDz}`tfr6RiV>KtE{ z3C1JMTER_Jin5tD34$5tuza^%WT4Uz%LrmxXPWs+t>ynfFq6N_aXYLB)^eW8Yl zL=oZ@%!xAP!?$#Bjb@H-DPu{J(brO@481I!of2y>4It1v!MCc3BscOkcDKj#r*Voj zFXOEY9w26IOD`DSg0v31C3P0 z;}mrfi%z%i$zGvk+ZBGb+bWAoF!UpFd)vLUB1%MCjfQGpU4VwBF8-zXN)MtfF z!?5S~e9wnYOaUH3WKQrs>56^xYVUPuzM#)pJ0S$=U1cL*t+`jm1;y+ejLTU5nxs&yZ9u?4)n4zOhQVAc z5Os;gNI!okUCFH?iP?b{djByT93#TVnfDxmg^IQfAY(A)Ewo^0$Kr(c5?yFlcxF5} zxfzOl+c7H-6PtxboM8y&TC*<0&+A5d?kO!m-J#;VPLa{7ec9+4+l{D?Rf<403%oG* z6@wV@4-6Z5c*N<{wAl6zag<)T5_qeGAiJYB_ZiVkOS|ljrNre?FQ%n1L0xr^RbQNT z(^tSGHMrRZcRuB8PwJ^Tv-nuV^8>MXiG#yyLoq-Q()3;*u#6M%w9EsY^UZo7*5Zhb zezYB6^;qi$n=+ZfE}Q2H|om%dWoJ3H^J$H$v^Ci&#}Ot^%yicQMLm?D0VS zN%88`+CG`ULxet08QtuDsTgM_9Y%$i;tNE5rXy3bvI-W8iagF{(a-JXT=GTkP0mw6 zN$YmnblKv>$Ls!vgBXmltebMkTD60{t)0;E^f|$;`)r2gCKbUlLsK+Fnkcf!qryT4 zE0E z3j=Iz-&NN`NnB2srQ1l%h=fmuAAK=QTHevXv}x7znD5#j`c+XXaLT6N!`Vc9h8|}j z403R1zHXF`@ya=-Yrq$B98a5^eI@brPd$nMd! zLbt#S?l+J=>=#fo0Zc;(rj|!a6M5nk^WDIy&oE)bdFH&iT2%Ry6w%|~Fu4<|Y!vIVMHWvF<7QA23yE!}vHF6h>0)8|+ zcW*FB$-!tCC*I(@cish&y@2TNA#6-jj|+8sLnI8|vIq$|U+>d35itYr+!xk(#;zA0 z*TKbjxYKMk)V#;_a8QmE#EX_8_2>mU-0=;RGk9n4$>2V^ccT3mIm;Mz@SrgKe6-{} zp$*xoVK!loXNDY@PR{g1_98lqf{(0yqu^q!qn&DZ7g9>rc6g8Wap>&{5gpIH0;WxJ zVUXty>?=BK{9By@4CC(&gF` zq9^E{@Z5r1Ee%N)1mMAYn6e51Y;)LABunTT;3>Rv=a|!P5JvTR0i;dEm0EAwC~81q zPe%2wTh}-ltG>*Gxm0E_fJ`%2sk8Hyh@r=tHSQ8{a}@kVTnR5C#&h1p1!MR zxF~PC&efhWPuVK8C!U8eLWb;|gUxuSB`gXyT)vLWwYFT-L+{{prC3`nRjyM#(pp-F z40o#GcPM(>wZ$Xyl3P}+36-Q-b{@_wGEn0xs()teLm?-7Sb8E&lTJK5^GnCi#+P#GuY585< zjiC#$9vowi!@VVaSF|49u{xQW1O}Y2DR{XW`^?3}(#cvB@E~7$8&RJoz2UbJz7r}3 zbCYc8)~nH;KF5=$llpWHR4~Xw*bk=R1g}`YWW}pxZ?}W1(m_k7OrKGvZ>F@HJo^RLL7#MT}|LH{i+@Z)fJ29-a9D@(w>Vm!Q;A1J``v`p@B8* zS{|GOD?rm1`NT`DJw_|t#cb-udSG9^dZ0`xV?Oo=)shJR^ELwq+>O zBApQz>d;Pte&=qB77BJ=wWH>jo3EEtk;V4<9^7a%l_i5ds(RG^+NeB&c8aHH zk#&x__B`_xEbm!r?e=Psvd6vJB4_LZ9kHtKxI{a)gTk?IikDy)1oDtGXijiF!QUHD zjk7zQnChfcPFYGXd4%4V6P=dJ9(05W6Aib4DF^hbNy9bd{1@+%KvUkKZo) zk;m)W$jT7*?v05@+hjDX-posDN9QO9OJ4FInsyMQ6f~qZ{4}I{sNSd@@HfT&MX{_X zRSF@!=?=9$IX~7J^DZL2dR$ul7PmD$yecUe)p(y=-f`Julq11yiIaR_xLgB-oa>db)m@nvzqU!5zhlUKp zfU0hp_qOi{+pOlqO*BU6UAPItxpO+CRyR`<9LV#k$asll*LtC%xB^E(DTWdZ11jx` z*#j8e_aDZ2a3{2@Pz-PcWa3v#)8IlJB0{0&tfCL@`KvHxOaRe-h8`=*Y{8CQuOO9Q z#WrXrk-gZkel@RC^##xLxFMjV3C~ zO?j{~#L5a{SMCV9Z{`}DIW}TEpF)}7I&Nl(C3@%bUZw=UfQ${H-LeSSf<>topX=mQ0tLi7gLqk7kxf_JkGhVzkJ+RY^A8I88I62PJ?jll5&<33EE zrPs^Dq1IU&ZK>5`ui=(-s%A?cK{@ez&r!GOz0!~ll!Mpd;Us-f2nIVaQoOxnFW53(OThBmN#?GC?QHDWz_OX?Cw zwWe;v)c1~Y3G#7t7ik$aaO0HbKBNW0sOmz)(5Xb(?~0z*N<9VDLkb9-qmVr2mSE;|yA zuG^Q3WaF(6i&k*yyC;}^5*O;{ z7I41o2K#V}3gty=Z$j~T?Tx?eJY^$c-Q4a{I(EZXZLLjhOBS1hS7WguIFdtvG)b*R zSbcTjEBRg)<>B#7GBF>B4g2A=|HpCY5ZcHUVh2E%vpu<?VXfGCES1O!z8V`Hfr zPkFKSA1@3jo< zCuqOW(;J>%injou~d<-7FTe6&DrDkQI1}@;V{c@i}#> z*CvtJtGIoAdJtOtta5H*tDz=$svDeX9CCZc0wart(ZnW%tXpgnS2=t}o^Hs^RfZ!) zd&J9-^i^3uC#r<2*$(%`PzN=T{{OKrHVRtm7EMOVhQ>*je| z%X+T{{1EwN7gF0eKkN2={G8rl{K_sK&&=S*65SxhZDN7JIE{P=+uHh0MiV*Nm&{NY zsEL>1$a5jgq9pI41jgpFOtLq8U6ZP0MYlP46`W5fh8az~e(vSny1&yOTb&B|C&0<*#ll$1su8lZr;KR4^c+9KJYakS~rmz~$xIi+9yfR%~Od?hW~b=aD}5PKC00 zL9Ddt6mnW=Dv8Qw<%>n`<8q46NxL1@lb#k?=L4&!uI_jN>ayjyI>B76>l` z!(YS>iJM>;Hn>)S85`vMWHyWA zOPdkagmj<;WAeL-}2fcBFfv6PUJcq%%x#&(HD`kUhZ#s~T zf@V-BLo8nh*YXXwA#Y}=zIB*BL=qcTk(1olrn+LLGOegcLVfwl2wEtfzQR#@@bGp$ zpdWA6VGSC?v{s1`?nrCf-8;dP>Kz%zBGehGwbW3m0h^o_N>)81H?*nv^)z~0Nb0&g z_(J@UO>$o?-U~rae{so=_G&cF=$ie-RRSAPU&tG{p#~Cz!FjAJxV@N^6%Q`sxlG$T zxYv}NkSYd;#RwEvrh^%24pDNHOL3g$-PF%v000hNK!i8k)@5oWrdsbr+*2}_Je%uv zrU0x6N40*u0I%Px6TrU7lC^4eD(jK=uDc3VqW!^*t&uTTzzzcMl)QNo1JWEr)0sRY zFF5q=4bnWX$EQBR;O|7unS}{SmXSsx-iw}GW2RjncR76+1Mj)zYu5}Dx^2TUbCwHl z(uH)O;&YiaGioUi8cD}&?DBMRiSI#v}*dHK`EoOjV^#vTc-N z-s!GcZ)Lecv6UT?q00`L1bi4TXSVf$1C(#6XYRz-c*2;Wk8qUOIV0LbRrA!)H#8Np z(A3ixPB?D)FvHr2Dz$&Epzu?3+lN1C<@z+ArcLSj7Cl*;;8IFTMTCZWFL4Q1BX%IG zo@a2XSUh=YgV(aWT)BO|$E*$qFseNlNU~JBQ|>73r=$3=&ope7HLo|Mw@Ghx%-=hK z$(Ev_n@rg7Yw#)Ho4n?fqzoTeH|>aeW~a&$W$p?#uO494@6XO*tTudxpVYVzVjCjT z3{)iPUJ_n7$UG8MamN75SLdilU?-V~Pg$IhT1DAw*B+OeIw@e91{fyl6Ork4X(9`@ zjaWrek{?BLTR=zCW?J4YM%2J$@%-}TOCNkVBHFu(kxb+G2rptzDGa3!Vuc~L4wND&h_)C{m3dguutRPKopJn`_5NbFG$$~~PfDu@vyK!tF5_(DO$ zA<4y7eWr*u;}WiGIVa{WGlfoWPcmkl10}Rl9wco!j7HGp^Xc~W;KoYofar4qPxNNo z%I;5+3BE|~b2Tcg9S;v0do!8Gvs>gOCTbgxm~5)2w2!aIBRc`td{Rfl!=)GA1fE-Y0!M)uiD129AckF{qHndZ@qYwb)|(U?fs6m$oLYL>JS%i(U4 z9F3wlA1y(ws7GBW#$_v(3>dBhBIz3FIRsZ(#H&W*QAG{Am7hwveia#T77pUj3r!R^ zXio*A=DD-V0n#$3Md;H!ztlLWcEFx#0Z9~;|d_#|p za}4Oz_x!;Cl5L{r4IV1JU~DE#ADhHF12Y|XF9&tcP}L<#V*B3kBX8IkzJ{pt;j4-v zgG;$Xt{Rz2b5;!)dz*E671YHA!g^%;w#oF~61*p3i|TNLPu}{&c{#Wd)R+OWVBX2+ zVSI156kt7*f>9n%bG6t#>?hIW zxIkrZ{GfOMX;wn0u(%D9G<03GQ&fOlJOrN$O{BFvFd=DeNO)W~;IMj5(A~Qc-EzZ^ z3aVP6>7Ui|aX0zAWZkdPYK~6qXP? z)is+GBnrc#<%m{p*D47mrFuyBjk15COxeqrRgkny_CjRno-V3JxK2G*Y5S3eKJD^A zh_92O9y3l9b4v=7J?FvBTr4?wV6b=beC3JNLBD0_F$94c-KHm26mGor4uQ8O4W)$w z(?QEp+6jdi)FeUmRX+q;sNo&rhe1mBgmp}Y5Oyi^T3u@c_)>5&%v<3`N7-JG&AkL& zPN6<{Yif5vvyThd`n)hayrGLl^))n7(|EaTAUfuWz3QhKga5L;_BO5x)Z7fVQhcx< z;5;?ui8qlU`yMo_E*+oEM7`#oeh+V*w*A%KN@fvOzBZ4`K1B`gqUZP0Q^v8P_l0-U zRVtw9Zow?PI6z~go0UK#=z`=X>(bFHh;Z2F{GPPmP{()xY!w2}>$sMT06&~66EI_E+>@|f)4XmwCiP+%`*6uvV&Bg@MJea7H2r> zBiF0!D0I%0*hb&*jS?870-_TrLN>uJTJ&WGUg?16lg=h)Q@*sWVYI3Q8+T@X5f`@4 zA_&RRkc5#}D~;t{#NpCRt6ExYaGk9QwtP`m|M7P-B{%5 z^DR4gvP-*Hwbn`l>xCe83^GfdXX27g@|b?MIfpX_OHm%vbp!=~eW->oQFGWSQ-YWf&ib+`%{m zOpqV*O>5^a?MFyO1|BU9B&GZJ(~e^Y+Y#cEPs*kE<$ zI`WRmZ6^uJnbl7thCrn1K%Fnk=lQwHEu@B_GcmO8`Kk!nQ`kJ}mZcc38Q`~%W!$)_ zCZ0!0lQ4uK`#pQq#Kb6jH`k`fLT_pES)i4Ycre#8(w5Gw^gVEpD^kzaE2mK(aC|S@ zPM#XzyF2|4=0_msrgZ!UN$V^~ManCo-8E`+%~lE|C)HfrN}3zXlby6E$Eu4?MYyEN zb50+-U*Cyir%?n;XPrM{m6c=;p?d7yBa0zugi5j=ita<%9eZst`w|~i$CDO@3TIf- zxiE-V{9KdH%I!E-L!T^8G*#g45HXGn=3b3X@AB$p3dy687#NI64~M!odbWZyV*oSv ze4RLWcQqpy+Mhm$hhz52-8QS%p1xGd3nx3%eVq` znD)j4O{|{GcxIq2JggJvJpv@vHFG3#<%6nLW zC)VbtZ`ug8LZ+b#_&lIyfo24Ib>RHOS8j51@E}1aBSme}p`1=+FO{dlBTlH2v9~AY z^;+sIb3K?bp*NgSjP0DWi@Wf6!M26iZ&x+}DE!&2ZKuvYTN$P@Rg=BWWU@R~jGYwQ z;uYa^-RJ2`HiU)hOrC0a0tGJz@hn zO_)dTK`+;&W}k>d^_CCBAQXh>xB^U+!Na-cM9H&$PZ7s)In!Mv+?s3CPAo1K2tzu^ z&3p6|O^noD_#FsIs5A;o&F#cx7Y7u)VWEwnU|Tr%x`B0(wz%(L-l`XFpjcy=z{QAH)&W2v}PM_ZCd z!iC3l+KEJ25+?5^Eufrp;dVuhv?R&E+Lz6G6c`ga*acp92%(_#iZRN2%_9<`4+5=9 zunn$3vyn7;9a-#YOegf#%rh=S366O6o}@a-(;+fEyI*9e75l*~A`(BfEvr!9)g!o) zln@G5pC`OhM)NE{hWJJ&JGSc%#Z~I)&7@-#pOO$VMS(u+=7`OHEc5s#s{B!)`LZr0 zOTfIkOpaAv6&4VExh<{jCk?k7%mKxxpsn<*J!-SLh+~#q+@2wJ@{E(hdcT`fqJ?$Yl$V@fsxo(H^(K*7 zBK6ohMV>^o=%lm+&NU)?kUc73Q+RirxNqT=@Kxw1%}QT17sqWmId4uIucJ#T&S@^+ z2xhit7*|0p_JC)q+Z&%iXtN-~eN4h^U}9&gJlF}EF6+}U3tA=^+bq!;A>x3+1K2@I zdVIyxdj+1?He?~Mrs~EOgHO2>45AGM0<@LW%&pW{IT<7MRTwej&W58z9?vqOr(;aY zJbPdXLQ=9g6bJ=7WO;^z3R_)b8ahH|2{rFbu~ObZzrz=ux@GME~J!q$Q~`t%7BMY-sqDOpDlXOO*bzl^`Q@pX4mt4$MBpCUnVVZ z#fd#OBUnXB%am1Jsu1OuPgvh-;~JsWRP(9d3pLImvG*yjp`2Vtz9W35z&St z$6P;->!(qxFO0{9-azRP1o!C)vAnbiXIi|i5`7k|m*^WjQv~b1M@L)9+-8TXPY@qg znY6?qdA@>-gV1C>O@fTD zKguJb+u%r=r#9C62(aalzj>Q-a0ZEzPQMG z__AFb11JD&9*_90YA15?aO_ZU4&=3Owx5q+JR~81@40Uyx$UqX7&DmjEi(wEk*c%y zsAR%xKr>b-SG@3}97?d8R4a5i#0o>JQrrnox*e^ii`{!5mh4ZZ0#$fxsSY&-2OIdIXwT#Cd z?^eEXHu%Ch!+BIrfgO0gUqqbjRISqnxSSB7a0b)NOv_7r1@+V<-|@?cf#?joUR{dwrF~WbR5;N zymy8-Trcc^63fXX38n2epVR}zBC>u&5V8H-ImM`)%kpLfAV|DCiQgIMttR;G8!u5N z6vC}ado>Rd3Sg!#q%!LrYm5%=CW0RM^wobn^HX-SYZ?#*jmsbvq~SZbK~i}nv(3H$ zhY*&>HjvMN0~kC4;6nSN`nI>FH&N=1Ll={@+8U@u=ETB@4(B5~e`|-X8V_*Sa$#S( z5tZn4TLdQFq0U-8uj&fBcm^Ivmh5{NunTPvQz|FIr-y*@jE>pPXiM*Py+WXkxUBJa zY`Md%u?182IOb%xi)jedR z2bT-O5poWORD~315uEw>h%VQJp36L4?9%M1Zi3`26dyZ2d?-L1h=f%Fa(?=3_d2o% z1Gp}7s7JPtzz>C|T}*hD^uY*NCFA*Y9FudA1)h_&+J_t~|o7j9Kr~&74rko@9usZ5@ zCNT4S-coj&EtX-MP!;gzQ?|_2c#gPHC;3X0cb4(um00S*o?^noq~buILn~BLj9h-t zE)I9Hq$&BmW(wLc0cVY2Lw1qTEe-|%avsfL0Zc|Oq#Kkc<%V=rrEq2G6$`|vGH+(d zTX<~TRoW*8Q8ic_BOGz++TX?kJlcRQcXRB1O7T$6uRN(^+|^#rRXo`x(2TlQF8=@i z?3jtmtRUQYj}6A8AMo`V20VFbXsrtO{55mx0YKIg97EeR}O+RDUYDF>tCWBNq1Ov0S|7G2vUdN+~g#X^8AHE5{BdFXWE4$@%H z0gN(?m~yG@#r64cbw9Waf0c{^Y13lKA z9kd z_pMz**hO#%?)BY4v8xFeHi{_Jcm_Mi1Fvq|G8)H4HhjjI3imyp;0gojGFH*I%nim7 zIFvRr#FU(C4f;vOUV|L}&aj&dsFu03?_(D4mkvmAd4RDJC<(c8VHjXP$a$I=i z6=iJfGWU!6Wup5lBRU4@j$AwqzPyp5qacVvmn^Z=!Be^J@=dsGY}r?mI=xoix8FO8A;embS@c3Z`*(*XO>^h9KnH!I&R~^&4TBTI0@ysM@hRH8 z+iIQ*ogEj^?IwdtF;r{!QbJ#Ky4~1nIr477hrxEQwe|pfUe2?8P|H1h@Bm-n14`nD z1}~h5cdu@DUNwSm^b775x?py!iqVUQz!FiD#)iPasS575hj6>h&~mH;DFesW*a_AH zE@4wJV5(eWNG?uD$}tOL;i(MMu?S1OtV)7le^&#%_?ylGxs_eh5e=LFu0<%$z6E&Dl94Y z^g{@GGx=O*w^d$?2qic=h+5dmNTn>yqZs5*qFug-osH}VioyHPmg)_?0-j$Oi zVQ*f}$b>(;_nO9`;beNR<{_bq^J8^-pxsFlT0<%P&~8n3$Obg}O3jMdq()*F9=@6h zN0>nwzZ{3DnwHKhe%%IFa7*cMB`R3n8KW`1qVKV143D1)=6UmtO`_2>+BINiE4`Ei zQY{%`Y^YT@k%K9yhnxpIVSf7#&Tt2uq*Yr=$yCK}YbX@PDb0#q-Jk=EZ>_vih7T(vv_xcMTV)GcMPo& z&Z1AUxL6*%@Gb?*SJaJ#-_tNRtv&7b$|l_KJMeZbt9UNr_l#VPt4W?7Snk|AN;j`yPD zNOeS_SN1fo6!kq0)F`Ixu8e-YlziJCBmpUv$6@mNMmfln8^;Hl)BIC-qm9k^g(ElK-Sl0seB zct_gX!Ct%@1R5iPS#*>&Q-MJEWoBQp*l;1)^(da|s*$EuXV#O0wW!2v)Gp3-oBi}!S#%2A?%4-vE$xlVBj4!yTW=lp@agoieK zZZPW|;VJ&w6XT)8zVD0nku zu$d-MyBu5l6Y2Oq5^jwgrpvV#>WV0(N)6ChEQ8cLCPT}d2~d8)55aO}$!B9cvw#Mp znwM@C#}rj#DNK}CrZR*dB+6734UQ}U5d-Z8EP*rOUXLqzj>n2kJI7|s8TzJkNLt-7 z_`XM0xzHHZBehDCM(Rs@vSFEoBq9_iv8P?)Ht&wLv$3-4ZRkS`k?JnWpJgyYgInyS zqihxOSUg32XL;IcY+L0O7Idx_>8oYSha`(&(D>jk|7AKgLV>h-CWN26VAvf*Lj{!< zlwxTNGjes$?=?*07z&Gus5R_udJC|VC_axuWgGdnz!6e5x=0}TOjcJV-TO>VbX~bO@ z=xBWughSV+v)O^i3wtCNuT#+n?Hz@RN}dyV7O4slc}5o24eUVsK;-I+dWgmz6_shb z>~2WM#Dj}QZ_w~tEatSPR`D5IjSXXCQ4S~$i7VvY8jAq$0dz# zLHa6Us@Lj4*Ax>XT&PGOh{S{8%qyc(Bt9zP<8pf1LxaEq=5CT9iDj%z$2hd66^-#0 z86(ck*d2WEO~>*CO13RL?^%Pyy_kv%S+%A(b`|u@($mpyCOIfvs<`M5(ujxG`jTqU z%?(5sBsrfn8(8_y($Y#S6(3-4Nr|GZg|d4tGxj#ReK9QnUrcLuswHqDKbM+j@|a+g zd$E+RjYQ8%qJpL%CsU5VMuGeY`RsYKA}k_aOiN?qd0BShOB3WwqG#}0QQIgVv*WAO zeMa5(#P=@{Le3*Ptk=?`34nduqkbbL8tgH?I_)Gx6S~)K zBdwtz?Q7$EI!gWC1JmfhTtvdn>J>&G^&=CRQycVv*pBz+>ChX}p}_42mK@1j$SYxi zXU*u|3{XyQIS0?q!JW}3<=Mb9vs}TT1|P|K@m5(xiK92g^?@9aSxaQk+p#w!laHD6 zUPK8L17?o9^8-F$w=nYaLq#@XSf8BYD(X6e>?3HOUCyM%rVFK6wQC0LLp&*9?{z7p=P!QqB)rwMA?b6w5+;j8uXG@T$dR{nPlB3-l2jyWl ziby`-7M|l*WN#QvfH+)FPggvN-$@y}@LPCtDSghsFsUxKCJUUzJG6_mD`aAW@U;8_ z%MHgS)2pW7U5#4yqg%J9z}VOWMwEAR9YpVBy2^x5?EDP{L%9Yz_G!)=%j@=66`(on zFWbxWO+M%~vaaPtUPRSL&tcf7SB^6+Lru_y5TfEKMEL_GE46$J}85~B76YJ0|YlK2g-HS`TC&c5yQ22WW2LDpM{YKHM=-KY8H4mh9 zyPk);;G0rinj#fSurBw6*%8rTHJ?zOuZS?k$<-3gqXVFG5{(&UpVwpp$Pwl4B*tA` zN1`tuIGk@cP=X%ot30doS;lb5synkBaO#TCM2C5zT62|`>0D2GLdCtuPy2e&wu&YW zd{ru0kVQ>=;9B(okodc`g8@NzbqnvzxDkBVee4d`kg-p(uGFkD;4O01^TgOU(5=E3 z^%%IH)Pz2is8&#AC=yE_L1PEvaxRzJ?H3u?LpU5x^;VxcJ%7{Q(cABlArJ}Kdx=BpSsviVyJ?{iyn0oV;(Lu9B0|X>w4v~Q2CCxgcHupM^ z1a1}F@i|`~UBtwx#qjbm9dsVe8v}iJW#~NgBrqyQO1id?v;%R?B;2<)GUVfKOeHe!u-Wl^p9tl{h5~tfulfNo8JmblhHzOz z52TlyAK|U+E9I=?Y&H(rA6%K;;Nj2IR)nHw<_BJHr zIRS5uHRwxBEeMzACBKoJX1on&6)~rz}8`PvmmapC&^4X^32H0ZXqVWbkjKX^g z8P+wcR~^a|tIv7}Ew2NZ`2PKf5;2A(@JJ7Q0|0ld|>Yf3L(UEq7|;XNLT z<&DJU=w4H_2E!!5CmYf%6?dEf9{fUc0m#7+6gC<-m9w9}=P#LQM*8V(H`dF>wMmAx zNU`aV_Q&Q;sIXi7@Tt@2sw-Bhg?5*qt&EG&fru~6LoA`gvP+oC5!kS{vRHdn81PCA zrWvFB05#C<^Zzhak3`W*Hiu^xe62ldqVhg@y&T*;Ir!y{J>@ zrL64=>1tOiALL<-t3L(&I&cgRmy=Z_W*7rXGTL~NtO9cCRnu_ zt6x^v-dt(5dpzfH;Rer~wwAMIJJUn8b;XW^3w$fd_DXYt$A6JXoV9!v+@qWmkC^`B z`rS}WJP42SgUL~H>+#-qx-YmK_WX<#?4BlKTyb`B%p>cmwUa2f&^Vm8=uiaf$>%VYg6*hHHz8L~B1 zN{m36h)jofYNfr^OUH8)U2W*nu^kub=xxqgs2`y0@Flm4q$v|_p136KQ{iDFqj%KR zlFov9$(@E)(epOF2Or4^Spyp83idiaJ<#x5$=tx?LmF#0jRNC4ZIjzk@g^{)IB1=e z+^d`iGH8iqFWJZ8t;qo=XH2e?nDlcoDitk|Kv?L@(Y44UZJfCYFJzGV{NhewN)|{Gfk3DjIqbyHFRu~O< zAHMCEZ}4?^zGkw9lynZ&e!GnPqDZjmC~JYei1iI;ObCoWJxVo}E_tLn9dw77^(I@! zo-Q)7G|Am7P;a`34p$c-e_ad^W!*eaGj(4yMVrsv#Dp$C4Jre+l-_M!mfiN*_w&0P z4ib4c%0>jE!;(GVb%<2(v}pZ3YmipP%f&^~cFL5R>iXV6>M ze6k$-3{sq*IPK60zZvABZ3LmbzL@Q4UVm>D?gYVd5K>8rVGx6WNzxHQCK+e5OrB*5 z9YMRea9?AqtLUx+E7c4?ff-A*7nDomc8Dfe_3-t-VDBXbM`=v^vC`}3%Pxg|Nc|RF z%wIxt;!WIDym<5Ikmr0cqA1YPDxGd#2Fe3Af4dJ}+xc@*5t{APIPk^M*%PmB;VMj% zCo(bv1np)F(Ff%WmlAOZkp4XQnrJ;9U~Uo%<8(jZEDRY^8f zoc-eTJ%SVr$W=`>mONYGo-2Q%u0d8Kq2XBfTIcC9VAs@)Z=Au7tCHBE}}23q6k_{!qowHJlQS+x@&pNsOb8LOP>-x zemz&c5i{j@?&H`GTMsB(ryNlDjo9QdRt1B@lO&uBKl6w)a#)dQEY;rP1yP~_c7~T( z8z%J#vY0XPQ7U)u;gfVa5IZ3!7{rh_Sd6xF9MEo?wL}8G0N}@A3Hy#mu_D}i=&oAA zEpA~OIGH^$eId=5#FF1^BI2x)1co6>gdq?SkCA6RxO%5tE>s4`PiO4Cm=Lnu%3YOb zMrC2NYzPqT+|zqDUTuunjn818OBeSU36j38MY#!8*mg$y{d5ipi0UEUi+kSFC9W$i z!1i$U2=;BBEHoI4jLM?E7kG`Oj+qTDdm%5o%Y^oMUwwit-v>r~;qH&bF|KkrFN5B& zzW2h+U@aY6X~H)cm<&f#(wUgf?x_dMC}cX{#S)|j+1yrUODM$v*j5m?<|>HqsK~ZF z+<6$db7E}F&Q5ZH`Yejq+##gRsen*%br*0Ip@gyBP4mvn%8pK>%LXYXUu?X#q4G;> zo8&WKj2IfM&Qf{il#V^tXL_cJNXUWnyt;`?YhZ(D+s5nSbttXN40-MaL{>8HQ~($G z)iray2iy~3gqn!N{vX-#f@qx{8kf7pL_Sl=6=m8ayYNsWMI}Hwlvj)E=yMKa9urn# z(O$3t2m?Yq8IWbWL+z{y*eT6!Z45~??plg?NH1cuH^T0snzmd~Co`N*0#Z@iS(>>^iS7PNX|CgrKl ziO!ajk=qbD@N0W)0kp#!d9Qm@i8fZ9Qq2MXdqfnaaa1BRpvFv~pkPGx;8G84H81>+D*8@>d(%czVr7=la!McY!Y z(uCDCjRpb_eMlh`wMMi|^?|d!*XT|oe&%lzHr)!en@^V+W~93Dt(F{h%Tb%W$2-R$ zdMVz@;20F!$G9#Tpz1c9SBwO}c=t4GyeH@Nt{J=K%ZHu;6}}q}+$7Q7rFhj#zUMjJ zgrEzzMNd!)%UYvft=?0JRUI{KCMCZ1#zr#oT@#u}i+jTWC6T|z_}@g zCF>!3m9K?9B!}CRuy3;clk8`EtOUbQFU2Fu8%CEkRRGKv0+VDS zwTjc=ChvO8js)BBa)X1gopM|vzkSj+%pNtTDGE%#;~*}^mDQzfZu7Cy?h3?d{w)1-K>(DBrBB*fVu9yx1YlIcd7`q{madNn~~ zzE2M(T~1zyMZZJpQ+$B<>h11$y|x7 z&(leI#3%*O*FDPKBx43ttK;(tkQSz}mEn_k@1Pq2;#Tqa6`jY6jyKsI)IP9qEt&ul zqe)I-88= z-J4c^R*Fge+5}kR5ncvoDCA2#c*kZ1*Q5PH9_|vqK@7Hf#x8)5AHtRQt>7g2JHtV~ zDtuC+cnp)6cm)U4R4nF^kF@aIGK}P{ow&zaC0UmVtnN7Q**x^vOP4%KrpYG`IT=o? zFVdOrN8jzJt`Cf4K7>szsQ01|%-(iwoI1T5$T_>T37@@bNIqVd(OmMeXT1-2@xWlE za;0H{@m%s*(|d0o7SO@m@C<-~v~3lW31w_;42uC?JuIy+ zSei@m?0_V0GTwB9rQhqVDW)WsC_@y=x2ip;cZ%tRL(Ij^I&l^wFRN^*RM8?g2{G-- z(;M;OD0AaITgl1wP=c`R_72u$s=QpIo#Vg~~}hLs_b zTL8DP@}qZ_L59uH`d*0(V9^Hbs58{CH?p7&#zon7*b(c!1brBWhu(0U@!k{IIPH#J zqqES9jC=8tIq8bzrBSu9ip0v@799zN*Ay!4dymNAVn5k7`C^+Fl@-R{*j8zKPQ(Z) zYTx1uhhXlPepX&p2WkAsdoObcl#IBcMuX8g5Glot`HGtWWZ_A)zZ5L8^b!wI1JO1Jg0mw;G53n{;)ZE#-sx4pd#M7W5U(L@tGPHIp$g8z zZhQ$p=X3>;i#hrZ$j8kA{tV z^En#dJ=2~+&cerDAuwp2`ybra!EX#8w4PB}qy?hQEIv{!yMBiFhVb#i0}}AM@g&p) zeMdTv;Icvx>NvK6dCa^0>7#zvUfe;@kDwu0?!^2d9@A4^UvuP%@vLUZ=G09-Q-~y5 zz+?}OxP$;DF=e#c2MSmZdaDUbd-dJKFY#o0g@DAgq2#ebEG3)`Ribs}Ng*Elng!t` zO@O@f)ojHpria1FaNR108P2*|C-D}lX31jt04qo0W%EJ^X}y)v(PYtzo+dSOZl1@F zsH~VzN$2JW5lo-#aAL7XKtrPEW-1zC+ZgbuXD$_v$LU)KTC?+fNK_{+jdSdGQ7Er! zWWZ$+gTgyn^03-CAhQW-a7x#FGanloUhPZ_PNI5?!P2XFgDl~Sp=PxWD97;(pY?-&l1oA=@BMT!e9p7Od2VaN;M zj;T`bxu=~&@t$fukhQ=#(ybF#g5I-vcq5oO^j>CBRl8NhD@)dv#`N+AS?l)%*S#0R z(-d4V;*q~q?juRM368_udyyS5{ro+TTqqVPQ?HZYvq{_2K%~8AHyr5;eJ>s_0A0Uq zQSFwS@CIP$*U#|z;Lczc(y|19!~N(B?q(k=sHd+>m1+e-V0!@|_PC%l7+#|&n%iL# zJ)j_RfKjjBm&Vrk=y`-^xF5r6;!LdWx^@LN(xkQ7V>UEO=QYREG~0FI#ttxwh}`BnfT`V!Gr50frE zZ4#t%x@2i|V3zTw#Q{99MW16rX1@-2r8dTRo!aX~J!=GmIQZV%iAw`k!Pyrw)B4n} zM=$4j!+&(+vvw5#%MJtpBk{xDyFRE+6hN&P90g#y8tLpu$Q3(cZJzvIHY36ecrL4t zG~q*gI7-{? z0VS#T);c^`(6%18GWk!P=|xn94XX#Ja*$w3h@tiBtjHk8-nib-aOH~$D{hye%?o1% z7P?~YI$fDYns=|PH51M$m)s=Tfvk*!W=lDY-!O4&lGs+g^tb&$e6F`~I>U#F<4z4U zJezS~A5rW=vei5Vs0gf_)_e4{#uR3sz~s6RF6JW!4rz5R5?p|T` zY)#8rX^53?b$C#S^RXZhOVXV&bwO+pnc6im*Mh=TmP8B}xQTGwi&C2l=Wct~Vo*RY z2c>)w={)>BR8cUTIVDq?LCFLbC&@$+M#WnYnmQ+#s0#iYC&z4@3? z6K70yBdtm!x$K=D>ItT=IFEPuV-7T9A6?(8O>eDA0)U~JV}{M+DcnedN2^sgqc;S2 zp2!Zc?_qq>?eImn56$vH@k?XZ4tN|6TKE9;9R&73zl7>gRDmN)&8Nj{A;wr`($83T zhtW=v(Kp6tk^4bXR)Qpov$^WAt~e-py=Mc7>q%THuf2RMVIYbGhiil1Lxb*=wHG`9 zsi@NwL0#|q2~Kw6Lt&hZ=w7?`JPs+AvbE2&1m*z)YY(AoRj{=a08O5EHNAWpt11PC zVa6b0X$Of?iK;tf6Ix^R>JezeqX8;|DY$tnu?gx;3zY;kc?YwB>!N)x{=@q;IxVXe zW$x{2UR0o`vTEm==1ga3JGj}-qG`w}%9|aPs0#GAa*E12yn9V>8V`7J?@77kwCMRP zlPSR~O)eqg=6bM^Q6vZ6RCuW8>d%-R+v6w;CAUrAzLoBrip>ocFEUZs=&XxUNi`3C zVMQYil1at&1jo*GBfZP63T6WDDsZFl#i#{cw0X2JYW6ZW?F*KXK<88jEk6ZNB%yhn zMB1uvp1;a=4;c-A?Ij(kKuw`HTO~o{s)po7Mw2g}r@sU9g;&ybPAsx^mE2wr@^x+i zaTS0xdWzVb3sZY&D&ur!`2<3%5u0MNQOgprB%>Svs-zH38c0`Wsg=ORF$t}oVRvL? zNe42By61(1qC2i1H+_QcmtdXsQE+o8oMd_G1*O9xQypw*zRsBB_Jfe> z;HTyZEN)wk^s-K5P$AoZyX$9H=340TaMc@JQdDkL@mgBPce zL*_Y%JaL(xYm3sRrmJKGdb9>M*jI)F&zHsx4inUp7u@nL+mKc5Dmv3dJfo84{$sPg(u!$*^i#bzE#?JUB_1a%Eb;!hLZ@>DPBtLvqV!*RC&d8%5sC; zVpfL^+{geLeBR1kstm?7Sq+?BY%y>B^^D=>o3hbxX!8Te(IG#D(vpbe$CHapj@UYR zRXd%;xK9j$9##+RV@{3H9ZTDNFH3e|Ou7KF-?qBtFdQD&DVUMDVh}{eu7DRz6|U{; zyfUuN_k>dO_49ebTns(Ea9#?uY-U#pO`TcR1x{vy`J{nXFXq6|8UX3B_!ECkTNb?T z=t+)U>VvRwfq3aVsk6tuNyvur_C?}5^;K&jqvM(xe-kwVnS{@%h3`S2X;|=3osL%n z8`I`Mn?u>wDsRs17(aR_d@Ijf&^;%O1NU~yQsX_C6tDsa&_)t-C@$hrX&}|G*Ien3 zXy(A=5ROSX9yO%gX<;S4^9qu;G>(_Ja&Nf?O!i^&$)UUYfB?`d(XOl9*KG&VNLp^M z`&f}%-~ha-!w?8c;+mL553 znkRO&W-^xG?6gbpK2y@c0pwxst%)T}tqPqYLyKqW4e$B{@${_P?k$wQ?0nu$FCgur zJlxf@qhA!7-jS@Cy{C-Jar&rM$8n3vL`l#QQIF|4kiNQ#+-=K4$|GO(*V$m6m=wyT zkz)=gO`=81+ia&10>f`{c#3_IcZ#C4;RNLD&fhs)d+kdiy(7A+XfG?A#|*8{1%{;h zX@Ql)Fieg)n2L-dRh0UN{JQ?uD^Jooj9n2fVr=2c+A zt9y+t>QlJTu1)5;4%X_-Y^O$WB6qABmXCD!73MpXD2Cm&oud}p^?P?%ilbT85StUZ z_XORq685&7=G>Y=>J;<}=nk~-#ml$FDzO#&q|RIm_0~|U-({&q()wmAvR%C8;CKsx z7jIr8j<1z*Ko~Y8CiqZ39e^%-(f+_+G)YPhT*>aCzcrwEW^OD8R_|!S%eAL>+l8i> zu=~|>;_+jqJI#76GI4HHhQmUfon{;qyGbRlqo1D#j6%u{2)r1%_cDrsuR1+lX|!vh zAm-lm5I%1g1%7Y_z0dNt`-V%3#rlOY3di^hgkXJ_B{|E_nMPny3LSNP~D zTV|_I%$v?%&Q=k*XBA?p~u(;6keWJN6A z>rC>TL@Ga`sM3&iAVW<;9>Ts!2&~68nNa8x``$)QxCkC`kexNyY^PCG;F&P6(z?D( z6!&s+f@348W!RTB^jz0B#*(`dGRSg;l#~|*U(SPbXzW{wehiC6{`TbEnv!bf9twDy zoe}k5nYi3G+S9{)lGn`=d-B9e#C)<&-}?ewLB0UD0`!LW9!%Yi&5Exe94Ul}zwK+Lq(|=^p8|2wBh6VcEM!&pP?dCN>*!OidG<~p zzfnb(-NYclj>!I;!yBE20Tt2x@Nl+~^U0>1vax*n1lD=J=$)6*dj_Xg4_l?Z@iBB zX8KVh4p*2<&xwU??P9uLaAd@DpxhO!+LyHus4a8mExZMmC`fGqJ9~aZcp-zfEpLR- zycx=qo6_I1I4cnV2=w-|c+NUwmcF22Qz4u^ROv#JZ-B8i2bib>IWr2erEwv$`@BN% zCaL!>n~%Ll__lcM4FIi==tM){kiXQkmU@utNa6Nc><%}41c-o|-h%t2f-&k_sFi%} zWb9i;9P(0QPz$d*O!KiwJjC1GQ^GQAxsZB!1*qs+{o29^;1HTj-xBkga6=K~qg{Rb z7T>mm6_g~BUmToO9#V9VQ(;{9qcgfh5Vfx5$M|Yiq7ruF##uF%i9pz2SLu*}3DOhs zp`!=X#jm+jOCmh_RRFt6z+22GeiN%63Aj6HSNsH@_v&i{dd$KR`8=!xuaeK3wgcbM z&2k8h!41FKn=}cCWH}wL+1<9;$qDw5jkfd<<5!Ns9vY8ZXIw~_tTgBmH<&t~Ig?{% zK=T#nQ_1$+Gn8qDX#>w8+sqOw@d)I1GD0gTbioho+}k_6$_jNMf}G{KCcV4vxF+D2 zoLo}eWR$ZS%V`h2U!*s*(J;CL6P0NK?l4m`<$CnMS&`58%55cD zk*l71ae>k;;bDVTF*iS?80&UC%stC#(SmiSm(FmjqJ8=XLe+s9@eOfzscw>AXv28Z zMQf5!G2efP>u9dVdyj(j__fY+e72|@RHJ-lS`?&p>M?WiCTLfXj$B^$VrfbeDQX8o zLOywsBYmeK-ja`P4+sy8T!Ec8-*fh;(_?OBeZ4q{gE&jCX5iT)u%O3p)%_J*TluBf zkv%m9c;w|#vza9)?0 z5iRm%?^eGo7HjB-iI)j;WEv9=xsrV#jE`TGEft}gg>Y?;`Y|m`y+GJCNQYvAY zao_MZWTBzg1Y}galq^%VEr>~ORm|q2hf*tD5Rxq_2eUO8CfkRK=x6VVNgE(|`djx< z5F?8zLNs62ZJ9en@wdSxk$$=ByViUM${~XT9l(IZU00#cIsmm9E+#>ku_F`#Pt;@R z^_t1hSdg~^@7j*3mKh$o9g;){y@KMA#z=qAZD6Y810znCi-gaNo@NiyV=ScCqB8iZ zhUwmmnj4KFBJ2+0XOciX;)xJP8ci(|guJYRm~Z8P8~yp}vx___mkj4K*+Ej>eVvhF zVbACRhC;_XesTma`viy^R>&0F6q*^flJdRBdCr`Xudss+YWv+h_bKB%=dy^!$_A8l z%Z+D;>JTe)?ORTyv-&z-cMq8J4%C*tdP-?Ex`*Tw)t1A;1(KWV{cK*6ECcBX+xEl( z3sVFp#$cfd<>@El1Yd~53$XS_@yhLGo#?ZTN065(DaIF zp|IWwQp;gEiNij~Al5?KrUwD3$&62vs>sK4TAudaGT(FH^Im#kkMObM0j<5{l5@$2 zhpj}u(3BGo`SID=BO|%q^udgC#Rr$ea0yjI3arf~n1)YB>_vDD66)Epo1L=DyXZ6D zT2=avOISUI(yRO*twvfp>9}GV@+pKa~s&)xoRG zf&UmUmJRcoL0j{FxMM*;$=<4R&PJE)bU5369?DiQbeFHsA8Bvn(7Zf-W-4K2!s`U4 zX6OAQr-i0W#qlXHM%D3~m_6hHg`&w;UNp{T({;>T;F=OBdjrpHXRoQ4<8~iDo1G5m zphC+>wuZ?oSy~iN&@EEd??`2swT(b|H?B)7han2F0&QobQU^7pAglTw=SyNNK@i|K z2+btS7ctG6tOo8EK;czUg9_J9N`SAn4-63}ce5X8bsyI9rCrhF6qJ7} zTjBlKE+db0lLw&lCPB9RKt)QuC?<7;J;MT}6Gz@rJ_;m1gH<~T3&f!$VzN%Z24>YIX4t(b;o6cS(gg-{-ydnmFtgy%LOLs{oy*i9H;8bsbWo z=4|=RxPLLO?i*48Dp^hFF=tU;$-;v5Ue74`J~vpMz0Q15(2=5)BjuFIV6`sFw)J|a zYe9WpxuoTulNFGcC(y&P$Yul0FxJgD-Gs~saJ==LwOYjxD~Q5`0XmfT_DSHfz1P%R z3r@75)`KR@1=Qv(NlZ%37mJE1XeD7x`sz6^u%DHTb{ry{KQyI&X%hLWce=XUjs_lS zRRDKmSmm>RmKleT7*IHf<`G<(ao1sqrb=k-~}Ox8i+ej7+=$YD#eFAJep_ANu!yD%V`ZNUz zxpCi7T1!1bnlXGG1t~b<_M|K^+PE=`k9yx>!li|Dx&S61A-s3w*rQ{qLXwTciI^Gh z+@JF!TJx+KHkW{R#=9Uo?|2bZ^q9+~83-ZxezI7AL}6)>J)Hr}Val$vM+(+U9I$xokf3tIDwo7UXnSz;2ICC;2? zuA4B32Q(?~nL8$)y6@smxB*=`WBa(iuE&!K9g$ru(=P^&>9Use_DW@HBm_{BWLvdl zWP2}0>ScI(&4MkHtQFPNzS><&(Un^d@nJ?agn)YddQpafI=XP)F7NY!dOc}3NPWP5 zUO~%xuf`V5B=zK;?yAMvYrzy2W|(WR^R|AdM&OB9V-LKDjuCZrWFk&Q6esLeyFUGX^l0>nEJ7=lVjHYqG{^WV?g7pgM5VwK+*6PJ$$KJ#*v1qJdtS zP+0{phrAM<=R1~ad>Mn#a~CXaIL}Kgx1LJhZ684HfH?=74yM$b=vG%sxu<%7kGOp~ z3_IwUAcePy$0?}gM3`-#3rWhF!aS*#w+*`KV?k;_U=`EE2<^cd&JR}Sbb_Knq%2!s>B{ zoUJpi5<)Hok9P^6q_!hiY618Blw7ra0?kv(%&wOvsYGpFzI}}^OOLK_H=tgug+HVX zvq~Kl9w~3wq)!gZ(|H%4WSHr!Ohe%w+<({ zJ&AGNge=`a-ij3m-l629%`HBW9GP=A+Fv{PCQ6Y31KI=LM_N00JW-7_K^oA+sH_er1;bf?R&Dr zR*&P<-w?n=K94&!6#~O7nFX){e-h1D*`RMGFV(T_o?12E5m&WvBZ$|KixY^tx5rvD zMr^ZB$4M1J^|q!Cv1O4X^2!R2Qp~!L9HMujq+S74KEg^dg}zHxGj;+LUx1|ahVqjp zn5rdc6k92!ki^#!O>=M4=mOzokKS$pZcl^BQ6Q$6RU?oT<}JeU%yZ$IEjK6T$k2NU zYp6+R?UDP|)7*p1UCybRQv7w1g|?|r*@JCzTjRXaB9Ty#c(u&n*qv~Lk`n5+; zw4715ogt35JH5+N*2u?zeR=MLpp9|__M&v(3K=&A$2+5f5DBPRwXVV+VXEL53ps-{ z=^Ctgl+obIZ-;?pID)wx0Drp%KYO<83o{3>8v zw9r}^ePEEbwU;5&xICXqXYhd}F9UL7ykwd2JTcCfx#FYPZ+E9fOKap}wH9pT^^3qz z+gIb{vrCxLk`~R?wG}8=!Om3c8Ey&hU2{eN11eMRltwpj!d|W3xeM~a6g+VpWU2QE zU_n{130pYdHS7@_siX+|#Yr?dvTeOP9g}rO8bN+tEC@y7G)x}Z4eyh3kuS=-D2e4n zm$paU*h5nkhdq)lGAp8Q4@NugI&p1{?-`f&uMs8B8M%GEVQ-7GLjn5qCin%`^H_VE zjdTO-ODeD17p`MU1CKdzCE&G52GL9sZ->)kgkmrVSCy1}exN``Q(7uosIhp5(`j3e zrTh^KmkYJN&FhPJ4Je^a(mcTb_i|;K4h3v0^b0dW@}(c( zZ@l`Qy~iP1-f7Bp!50Ouu5w%sL%VPDSnoF8B0><-OrAc#Iy%RERElYKjT)dVPK=L& zUNvvBP=?J#L7#?_1vp6abCk;A6m*GsnA!V~LC`rx-Wx_Xm41v}kdepH*`B^q=FWMq z46xoqO)Wy98gDnRFENGj36aE2C+m+*jOIGNr*G zbcQ06FEX2tdz3GrUKvYg*^3=|EZEM;7qkA169$}HHf4*;8$H6_T0Fq#y=2KpBRrT! zD?>Jh#zy+4P&7Su_sW|+Gsfb;7%HOVE-yGVEq9`g_j$ha-aK)a6*Jz~u^jjKJ>b*9 zeq6LJcBy&5O5X2qke_#Czg{4Xpy#4`X^Zu0=R|pX%ppC}`@O42FU>t$AE$1YiW2(i zOcsO8)pH{ZQ51WUN=FAyV#&a=x57i$+AK(>S#Ii32*!DuAEfi zgks(kxu^=_L~a~A)VQz;7~qG6tm$XMiqqaP*O12!;lt_bJd+;J5x7Vtv@VMZMOMb? zJ!!C(?yUva)C!bo+}pki^4fS!yf)eWVvibhw84+McssT48QCFc z=ur?ywx8&mUROu0bUuhEoZc77)V3hxP~Lm%+l0KtPgQw{Q05bJr7z3}tv2U?vT$VD z&b_=vRa$Y~Y|a_VqrvvMrJg^1>jA+Cd5Y}sEv5`9kx^u8!i`+B5`vrXb+%^$YlY$)aMd$8K3q|xV9D?4@`9`u z&sML&O9>knAA6UtB#@~emOsBy)wkf3=-Y``lOZGZALlZ#s`BV^C*Q_F(6*!+uCp!~ z25Y6R4We$0v;g5F-RF$0^$vlK1|_5b<8Gr)mDGt^;<@v|DuxskgvZomJ4@H~%`j5P zo^X;t!9%>czJ|=UwAFLRqFhAcdundR0;i|MlGc!aX4I|_mmyCQ0cTQlt%?% z8ZM*h6?IstCTJ_$kaOsJ&Q-zf#|wnXFb0Yp&M_^X4;twiqDVM#fgQ| z^@YPMBfZrudV2bJnB^Xy8!&=xvnm6cf$!0btwoX4LOn#TvwQ}Xw$Y0%ezE8VNPS_6 zBQ7yd=d{WhmHpj3-&j=MXXlk~+uB{i5l-Vus-ggd(FvjW9a4mnx!H+;#sa=2+OVz_ zbc+~3Y1;(sH~{uSpa^%F+GdQX0?p}=4b?RsgW6JGWUpkc7_+jbC|2^0Xn zFfh{fBLr!-=xyloVVBqB0}2kbTgt6@;PYS`C|&@@16XvbhxE*F&Mh2Xqa8zRfge9> zZH5B$I4mh9A+7}j0czZi!hLxpOqbUXD|`2*?Nn088eT}BfMg6E#&{`50 z-#tiP64PoGzJiyl=wUi^o+G15cGbxOgOAv`c|EzjbKLnghNp^)M5Jrt%7fq^D=@N(W#? z#hwxifu@I(&{1e3gZDn#05j?<D0L*BfFrnWtq*lmppEbGQ+|)^fc8RKpEVz$!ht}VPKYrcy%F^a?1x?6=r0LtT0mD_Q@OeyZx4LwzQMZ?%({F}4z*W&26JiWKF+ zd5t3LWq#?KiB_)6B3T`vyB$!hWsWzVl1gF_5w&Y19xe7zaZ?-SweL|yXxxYlJ{)Dp zk<@1i{j5+P(hEYzS7`4_7!>9mohqI0dpnATSpWe~BeEQ>RjgfOY8vFIlb1c822T&s zw#Pnh2@+K5H&{xJ7J(|sOp0L}Zy!%mkm4Csn?Epj6(ay@BvX6~FhG-*#08xp2wQ>H z7`OdwHZtIey!2^2XOP`0TlN79al&0-H%+ab1-1pud6LEP@@mi8sCAkUQ(pD-%yx+v zzB*;LJ7=7Fd(rz$xX4vOMnchWWZk6fcI^%9<&e8KNO}YvV60M_G2J8OxG|-N>!|$l zYGdCEZBx&L=At&)VyPKeJ&aAlSGFBWa6KzxO$4tacSF)L@8s|}GBD^(-Za1JbbJgf zsdA&Nb-;uaq4AUijsZx-CUFq4;o^1Ba_EFD5>%+433ti1Qrl3Y_*z0rJSJ9C1;|2t zLfDef2MMavUNYqG%&zb4WU?KyRz=^N&2%d(r@Nv2y=2tUe>(i)Me4P zYO{6E*QH)UK_{%YjdBe%O)g{61875XW;x+-tmPu)!g-14qtS1zOoG$x+$_;p8_6~L zDsu3NLB3a_M5&GL+&q@uZfj^{_O=COBM~IigFrc{a2}y)x@u*QU!MQ+HWT&GPF{ke zH$;_H9#N(OH&{t08J_BUhT$=kSL0rm_B;p4^UUoL!W%fee%#vm1Vn@46;n`=;|5o6 zJ;R!PMA)3F4}5joMIQA`XS!@3@gwer2xQeZa`+E*S0Y{Zm=hIscg*MXo~sWR(zYtS z+Jyl=!M#cndwAF+y2o7Yy?xwQZ_|m4_x$u^sbPS5aL#gA54UrRR^W(s;-m)#E3WWP z^O|=IRN~OtmPvEW1Xn~PkTY_#j}7eQTid)`IURiLCna=>u6fLIyGzb~xoHFpOvkOw zL*&K{^qdFPXpsu~@f<^VZxeX6tJb+>G%*5UjvijsDkkAlm07i_8j=Dy(Fsqfh762> zGSwqnPGM-WiPh>JedpYRy_}kiGu?!9~+#r1-aFWO${U}syMTeDmdz05txQfzT(QG|}e6XRY+>_Vw82L!Gax|e`whb&S^ zdLWYME*q}F8sOfk4-P-$IDX2t?XXp{H%sdHgbkh<@wKU--YO0jkOP|yQme|iJ>lc# zGJUiHz=mn?$dFM4D!iv6k5kg>bEw`qX^16RAC$vqmKiUd%HdsM&Y22B z)#>@mgM4>n`n=<1DWG^+p*}=LyxlNLuV^03$}#mPG5DOTRuxxD;8fy>I8fp zg2Kgf_>NTPax@0|3xax)Re7$~%bwRyE#Et;8*NVDXmD|; zY{xOd^9t1>Dzg&RYA}8?5{ZP~vflZ)rp(J-VhF_>2>WTB%Y$JF9=U>I+$rAiq-;nOzRwCIv-eT!v*KL zR@CjLfPy4X6$iAX;3MF8VgB;9Tij>ZhBQvDY+)^_~N}S zxCT(RMg`E7vx%dy$O(Idb^Fp%oFw_7#vXXVwLzOJ`i=CetN?Qh=B#xQde58OeP%@U z5EBgo&8rbLN6rXi^Qt9iS!-Iv*3E>upNJ`#1%<2+I=v(XI9>)1ZWJe&CRw)P62%SC zsGH6;Lh}bke_j<5?JC&k$}lEL^i?}8mR23>@aE`%TTPWuP56UeE6tf z-Io9iV2oHL#GvS2!L?&mL`W5o;N0`WPbTD;7J&Ozv8s4c7E=3 z?)3Y~qO3u|9*I=c&(Yt~CcHf_-#vQMt^m}W%X*j!wQGqjUilWE9y6LfD0<;6k1{O{ zcL&m(lVg{O!NCYNMKbP*Am(as1TZN1MV3UrIQkEEW`W|DJ3|L;b|lVO(`Fs7L_w9F z660aN3{vw~A=ZJcRZlaE260V{;c;Sm@4%*W3O%-5*TISy9NLY{E4zx5eOcMXQ5|Qa z;m#R@1#@mq8XS_KE@Uq2Df;*@xwpi&S7Yuy(nu&EEoW@%hRG!jRcyDZHw!H+*VU{{ z?g#`Jz!l^`Jv!MJX(u^dpxe4&6v>wnHAkskla%M!H7M*(n2aIdV{bJ=S*R|mWYV>! zPq;N{bD~Qw$y8{wL1g-Y>$}6kzEB`56O#%{vExMc>mn;9T}z02xC6TSa!!&j%Mg1U zEEdpi=T#gXO0y%7A&r>>?}4in^|R;e4{~3v^$PzOd@Iiyas=MNU~VpwsS=)Wj&&a% zEws}rhh|+1E_h}MTRIpxFNt-wC@FHCZ*;7@S^I@37hNXY2Zpc%cr|i?o`DyJ-z|F&-A4R3V&8axPo|#bN}r8?%~=m$(4--uO*Cv_9cY z+?uLu3YRM^dLtrvTr_~`CP>Ky0V&F^8A!(={P@5S^4@TRjjPG!We%5nKftiW**TJz zrKqdd?Gljgaq(o4#%J_q=6qIF0ebQb?x-H@8?q8d_Gluen_c1Dh$2D{zIr`n?hPhx z`Y<6XGD?RgTOlgZY@qdYe6!h@Nr=}iU-&9kn~T#t<~N*GPp9K< z-Qb~Q0p0R2sZ*JCdDNZ}`#1(C(92`!Zv&`$9=+_pS>rza?uGLU`9$Im@b0P^m zQi9M;oWI~1tsIM`uFtq)lk1DnnK~_+hcCBW9wRKCrC2r(S-y)B3D-PR8>-hKVCxy{ zCvUoB&&s*;r_f#*qSy7^Tantc;I}o?9_Z#A_1=H9Uq`ElK!7ja^UQ#CcYo2b7r;HD zFcq>|yD*-8ma?LpOlb&h1Tk@%BHLMGEF(G~rxRk;!|qEVJODYK)?!W*t|vM#ENj#C z1YSbxKXF)w&Sl^j=0Y$bfP8r&dDH)`3Mm#xGcYXmb zx6D_vCSU`;=%HcN-kN%bNjc26920Ve?vt9ha?~9fyg>!yu}EFAc5@!BO|s)WW~bR! z1!>9cUZ~itNIXl&LxVm(40MG+5odm;9h#c~nQVtWloUE)?Sj;*3(a zCy__S55f068C}7#V!z1;a7idyK&*>X30&<{$KSO37wwm7b&sLtoJ0L7dNe}I6)76% z)0ckR&3N(nEjKA}0U7w(V_esH$xhbzxB|J(vWMzrxng)Z z`YWm)Q5juk^v*7(8zaMJ%zbCAvS;~{QaX;e%dwYLb>tvN%x0t!JOeml9)MuPYc5h2 z%`oNTj!2kRv!+*@Rd@@c35jsbidOU9zVX)*0DRbukIQf*D_2o*G#_!(nm#P32OQTo`KVFi zi73+OCBc;UW6KBE06~a1wJ?uFTbpdgpZ6+FK7-7F5lvOVy?kQtm1{n>A~*17MJyzP z-SW%;1U4{ccJb`jg$ba<(Z*?udQiFP0i_nmMD19FFw>dbnbrLsta)KoYJoS;vuE$2 zfd@&t^38itlsn@iRJgCxxR?v;AUvj(z#@ z4!#$jisfLY4P?_)mAsoJ+!a7_X9rUJu;B@DFAWqer2`ZpPuya#0N=VfI;h3g0FVZT zM!ET0h;!^HDxZD!Xz=m**1!wN9)?IViXF&&i&E;wim0jHo1?Yh!w9;xrb01z&xvb% zvLe7`ag3|l`0et`5u>;I7Il`jQ|ZbD-ZQA7+(CO~o2CW*sG^ixJ<$djlIZmW9mb(l zYK~O_q`s#s34!xmB!^~2x?300={XaMKAjQX}#;$y(kZ8(JP0fp!)zTvwId^8xG2lt#v z=?0m-ABl{>!V0kwJuRXEY-whX!tlcC%%NT1>DFo_XlZwl)wm5}6n#AivYkDs8vWa)8IV#Ov+EMju9-dn8U zeQ?*P$+)jU!wF;F0SFs~459~?lfSB_uI% z_2;lCoVqamMocia@U7^gKSH-T2Srv+%X`3$_9}?kkao;Bl$AtgBGQnrgpb~9XIA%n zNjXQGgPM~xw)48vvY*=%tS8F5W1#)cH#vPN(?`vH9_?J1G`I>0(X4um08OGV!oKaQ zL8e5wWv6_bkRctb{f@C;%>nv}RG9^Dn-rNX<{lnoz-^i0YHX#SDKsTfSuQa1u=~1LrNbjcdq!=pSFXfQXaZ8`bp)QnloKyYScIqN++jiMZqHQZGgLX-$*n(!4 zr8q~AT>WSa_&sQW@OLI6G~zE$qDPw}u-DZ$DGese(ll8FB}{`k9%qy21CM15G^p3J z(?UnF2pJfJ&-JVxk?caT1PAx@ouOhW6u&nHp&CIv5H3Aw0N@lAXj$g*1LZ6UBZ`~o z-n1$}qL!1o5GC^pBB}ShJN4DfC_R4qP>?yaoVmNz2$o+#njlh`kIc)yOHQ)|k!D+BHa<*< z-4)-mhkTX2NwH&`2U8(CR7KPcSRMn)fsNJfBDG$JpducmImC}gY*_GJ5P;bFN?t-E zrh~qc6uOko+t#4-rt`!7rP7ct+2@*vZ=U(yV|)(8Li=nV48s$>%4?_rczfqhx|p8f zJb-pzdQ&^4uj_Wx+!qea0bO1rh;^O3rAFF@6hIqYC-y*_bbqs1PI_T_!PYPGF`Af` zcv5+dxv+LVXTm+HtSz~m+f|dP*z?k(y=Y>qq25I|Hg2-& z#cg*Pv1lzvzCn20m9MqMj?j3jaU%@__KaW*l*?V+_Hm)FqY+p>I*PX!V(rC1Y0K9^ z$@?-g{ViFen2};HRt ziG{}Vp^Y3Rg}bvJl)!tH4N>o9oe)V})fmr~21ep_Sjv)3#XJut$WP#zzJM2r*t^S? z>P@95Z*Oqr2@SeaAy7#wLuAZd9|DfFq{%hJ{F6;R#zX_H2%XZP`jXuzGesH+ciX{}DgFr?KL< z@d}hG0e|P|3yTf&&zFMOPrE}G{?rQ8`Q z_u;$*(13gzE9IjkNYW<`)!XK1*Snq7vB<1;5jjbW(YyuSv0SAfJJa`uokI~Tp#&)( zHK(`4y)a2R+MQR9@`zIWEpOVgyq+d?g#ctInO4^3%kTx)LwJ|ML{w;RYmTbMG5`jVeN>Yzd zfFbVdcQOi9Lq#zd4K#{@K3Z$*YIWn&+nYt3aZabT%Bydr0J8a^uOC%4opN)ZA2VS3rnT?o0L7!DhdOCjM5_Dz0m54W-w4X_{4~5fiYOfg%B!E{vX$HSskfRcbsm zQ9UMOOrF4Px|i-WH?W1=QmzF_yd>|H^1`hyJ~>b)^RpzWXXO7V4#*cY% zl0=0m3pix6L3f;lyhYGwHUV06^(8)xenSJ2&+&W!{q<{R#Fu=h^0-DD2~nP1$(Bj( ztY$1t-7bJV+?UaPd(TJ~&)n<1u70W&TDHxB;~O(jrhO-i*F>jg2c_Y4Z^!nNc!4kC zce~1OE@jdPAKZXFdS~&*@tn^9?+jO-Bj|9~Q=p^vsN?lh+ZnMKkZ^d(?oRo3uiEuG zG895->sIgLzeH~=}l!mV(3+QftOdzsM-$Y~qZVsvHJK9cB@gaWu&!K}80 zbo@xmrqEoD7$Czd5;0bX-rWPqyE61edf@xs+Ul_&M`{Wp;|-26ThpWTYkuHxAlMIC zuy!p=6}lt|(q_ui7bxPWP^uq8tCSZuw)iUvsp-DqR94n3I%3p-I%)x<8_H3?081K} z|Bw$CeUOgWWu;8W2yKJ+bp9WkSlL`qYneJ(UaL#j~tU zYeO5?+zPKoI0}3(Sp(`egim=$k(hXOUyRAcA!CfZu}YVIoBTMa29-!AqzY{!78dt` z(N*)#yml1yakTZPR~_?&g(Su!4S=fNd&~Cj1z}Xb%TD0M3UOz6vl)I2Lh4uD%B`N_ zoOa#MCnkz~BBuC3EK}od;4OpRqXNNTZtq+>^ERR|_0hoIC`5p5RN;#2+9*DOuEseJ-O5NYiaUVPb^46-+iYX>Uewf3zNI0@lCqfh_i`%CO z7YAD@qrLUWpJx#@A8ctFDHCU#-2=mubi8b5k%tSdp~{Eg^7NJhMtChjHJ5kAuIvfX zIZB$h)be`Af6P!l>Mnyv$MM?u41-Tut3st}R1cX%xX6S;exqnZ#gORUC*a z`fd*Odc)vt^?~wRxyYmkJVcaKdTT)E@2ph1Uxv_gc!{uTwOSO_JQH|3z(hxZqk}&YxR^?7*vCiwRVIOhY6pvS^s z9$kyUQ_f0YlB0P&j~|^NkEFyt!_HYb4a7me*AM9odoi`+;O$U>&}h4rOvPKQmzDaK zj;6x9OF%Hub_o|edkI;P+QzVlTc}FMCu?45hUl##9j!@oq2rsVRu>psw0o;d*=*`s z=Lj!n2AV9&6=7}>iD(vUk-M8xD_z;#Um_;tW8QL{;72jyPaIA4l(9}S*GK|g03qHs zgyOwxW$hYQ3tU*(-E2v9@iff!u`whZzUoRA&3dXW>ms=GT=`C{GsPj`k>|_ikg#R| zs?3P#fCGuWm2c+NzL+2CqIt}~e6fKX%192*&fRj*8Bf;Vwz&X|(uNgZTDWAZPvk(b z&#Y!V2Jmt8mN0k|vqUcY4E?Y?cbp$xjna;a>dO-%xNL~IbP)zbi>P?>gwKx(bB~qZ zR*6n`Eb?3lyO8fLR$eSRm3;UZIPu#jPG50C=(Sykwe9h`%-ryMs=KF-VyN@m3<7TlhxJ<4{Xn+8A->*%pNmRTLAZ>*;Tyj z;?0g>7{f(QoXx5rnzU7WI_>eSM}%zWUcP+sX2*kVA$cF+thP+3t&_i&0v#lTs$uJe zWvh3Tj3IiRR@vB@#Vt0{PNK`J9#bZ6%hUD7o(ON!VG4?c&V7@IF7SdL96)@mw_?0#0^p>*{GQ9E=q{E)(>8TFa0w zC~(>05iMIj)8{YYo*&T?KL=azhdmkbY!ddZP)p9^ONrr&CVe~DZOtAIRz=NJc<+hK zbShUWD)Bp1_tVSQ#>NI^F4QT`!=)5#Op*Q)0{wTsj)sSZdr5h3Fw3i_xwCV*d85AtP)WQj& z+W>r+l1*ne66Eu8_`Q<>Rp~luB_6`F)#DdqCk5m^T~YYdhl|6EN$8HdY-cUm(hhWr zs|6Rv4U1jMW?Q`q!Uj@^Zd7OvpDxy-KD<)OH9H!&q%$W;@5}7UmV6SF1H!ypsG^eR z$4JFRsqa07<-Hnyu%6!8s7~q_53iCdr3U8NKJ>{x7v^D3jUj*M-9f~%FX=mp)S)vzbo~f_X4)$|nydf@W-lErhx$WlqAN9d;l2W?-%AShCb1GO@l^RQO!fglb zg?A&T$<^#=Nep_#%6ECF?!3<+c{agh4%NBubjLa4rO{jrKFM?l^?fEG23O(^b4fV! z8sPYGW*i`F4bHyB%*UsAE^}-(G`&{*<|QIhTU+eaW9eSXLQ;H}%YJaIK`9nYid}Mo zd2gNIaP5StE6%-~u1{YSrQX0sYH^dRP}XEdo8lfOXtFCPno}{claV~l-BR|Da(c4I zuZZ}}lBr>MPW1RNP*AR6-JdUyx+|6R)HvA?TRuSOlxSfHeQrH#58=Vi@()cpmbuH` zU2+7W&EuisSmh>7!{dUYd9lKv6^XCqJ%3N$aCeHWd+iG`skuR`64`#^MhXn?4X-S> zY9%IKPZGXSK5e38J$Jqu*yonVPS1)3AM-iYZnYr#h+8uy?@KXQl2ELxeFmzwY~kpj zB~Z?<6y>scosfgyb^*FbFh&mFV#78@DbV@?M{xM@c|S40Gt8)DAUssw5zUBdRLFF< zItVC0mPyj0C$Oui*0;4_1}JFa-|YLXuVBR}QKzPF6gb9)UYNAM``VQ46DM1sd@F#450@o&|lnH!5ZtZCT z_5kdq%L2Y2%Ll?fg;i`gd%KVE0ilqdJK^k+4erf**REWSuA&2~IUVHk!d9L8+1l-s zj%-qYnPQoK?jT3ErOwtZ#aUTdE)=QHdGU=##4(Z3mc|}K&&$bbw0Sf&1@Vj+ zoco|`9#B3)szuwTfftUM84(gQ=dnEj%$)C4%VM~vQ`WtHoyQdTANJhOn`nS|nebS?&V@%Hs9pQOGGie42J%^={Fn-MCu41k6xn1$AmfEb6N=U9x(j z!Lc|a&oO~aw>3v<@@8>UAV)#=3O0^qQ5Ti0&>tTu4s(;kMdv)M{$UxUdC@#I()Pk@ zIM_%5U+ZuIo7q)!?$Wbdv&f^3MaZQwaFTaCz5XnHlWW&@0kC=WT;6q1QbrHl%;tzT zUXY*^@goAz%=3H+s4;={-buoW%vME0*o*fH1Rfc4iMr3hSVa3pz!=+DdMW`Rx?;Fr z47*qZ0+cjjY&tp^CAWnDvPfUZNn}N6liP{lI0>FXK6Yax&+%OBeh!-vy>~E;o;VPC)$)ZntcAq%n-X9y(f!x;x_?@#ON$p;8^k%qeeGYJRVY=3>RLOgcLCBtf|=HcO+PsRon!_^n_1yU5h~Hxe%{9OjI70(XyXNr-aVoakf_vd+`-~)3-C^Yr310Z~f7fTSVf%zUYtf^fq4-#>8h*%>IQ`qAY zbW7K1gFqB$c;Ld%VDC~b&`(e@+KvXp_YE}0iR54muE&zHY3~VmK=>O{O+!dL zagBpT-@&u?>O;#1>nfA?s#m=kPqk!V!yJp_rZEN{aK6wc7C>wD7q0I}(`57D0kk=; z29ynjfimJ@O>N41MpajURENOB($rbXqr4bKmF5cdUX1s_r&IU%KARb0Yyg*YQ)V@|SztQT6T)P-G zB~`yCjWezmM$B2Ux2L_kPY;sC8rsrv!Yx18=ENmi$;gi?}58_;iI66@^vP^iz&v&Qzu|1T>og^8NPnICt z*u2cJ5}hP3C|ry8UFf^$VC{#hj1M@iycCg>O-`xb+-nv0h?ji#&>!Dq7p9$La~WeY z3s$prJ)v_1C~~0Ku@<>5!3{1ue3)QTaL7gHT=)W*VfKiU{k2l>y+a#Z4oBinAjWzo zA@jhyEhNd89E)WKjq3#?BTc5-Qv!#UFgrJPWHE=Xu$FVwYG3<(U zJRV)IQjGgyy7@gBcn574Z5INkJnoC`LA%zsdK-&rx$3MYfvV8TSZby*pwp~8ZuUE?UqO7U@B8L(uFo{0iZNEh2W=k3uQ(&x`=ba|h% zBls1UTbZh#SBc8uKD(?%KQ6OQ6!FFank=jyaoq>e=>VhjFq8~vqp(I@&oJ1=XY6?g zfWY&hr z1rQxEJyQ?-dNuKRYqRcBx#2_Mot73T8Adk4lgOG0?#&m2_!QkiCG6I+kAhm767N|F zaK@Y095H#WC6?o|Xe8G5#+>cxt664i3K$&$Tx(>vET$JP&#FjqqiFp0skA(Csz(dO zA)ECq(2(rLeDjUzR`6(?mb7LI+-oj=`;IN-D1@X*^1S_EPopQM4u^bU5$;8#-Sf`D z5v`cwd9y3|KqG4-(CMLs|3Dd$d8a0W8-|n+l?+jcE4u>_}##`GcSyvOW z97iA;sXa&EdrP9(%@$dun=wA2_;TNs0P|i|b=89#>&8_@f0>^2`spg7ZKc>Owe$0c zry%LX0c!=WDcX9uO4p3C{%rE)y8t5Vo#B=ZSNC^lq{uas&BW{a_#KDJwE7@zxK*JG z3~YfI0yQ8zPEnwSV-e5x%8zI)!BQKBW=-Tt!nUC-sCuDzAPy34(}eWy9dk?Y8+t;o zUp+9|dpjE4kSr+wsGsv7<40!B$SeRw;#%Xr~e8;V9WMOVIs#K$Asjg4~KlfnU}TyTTErT2(%H zg%f=gvBR5$A?!|O@mSAdNRI^0-*K_@ypV!6RyIcf%WTbg+9y_RVxlkVv>s~q6YRlm zu%1p^AANCj=NwDM9ir~tL*|9UPgm!(uDxD*+&t>5i#ip6y**`gD+P%+Ar!{D(_{IB z?71BKxr4XDxxFE3giDz>J0+*Aa*JCiE*)p098aB`{ji_IGY@QCT#?Wy?I%k1jk79pfrATQLNSdIvrJaG1i5=nrH~c)pqnU_(^j^ z)GS&UP&Z-Ni!)7Bv+KubC*54enCMp`5|@^jXvtGlErhgp%F*`v(8U~_Oj*^VA0p1< zy6Y9jk`|DleZ~{?LJcyLeT$}1l91*RUxXyyn%bSrpr~T6>}w+|%2WeM1OP1Z=jrj1 zJi#HfnRF47Z0HK}Y2BDKDKJEpYKk0jRW^(&T4I~O;S$`VtGeh`8+jc6qTfLB3IjVx zm~~vZ91W%6FfAhsbIO|Bf{5ddHx?NYBx@u0L&asii(*qwaGPX~O*~L{JVDu)Xl+<1 z%H;2Yq{TObIYI#-qoZJJbiMYdgPfrIqRP79#5A*!q;y}%O?4ZnOM!NC<$#S~U(D$6 zaJ^gXJ!6?w^)eG$4XmcK$l6@PJ)NXiJ4b;-DF{|P8DdxZn0%dH`^YXfn`z#Q3+twU z3lbJ@1_GU@1y}`|8FS6}`et_PEk6_WXaHWy#F;Zl?(m#hQG6>f;C&7zMxfhqZ5zpp zWm2>`Y8d*Ommb30J%XCI>Vo1pv6vt}*w2y|6TA)(guMNR(vGH6ZuYhJX|$8A&5>Bo zzBlT`Gq}+3H1eF))?-H+n4TrSt;)yK7`87^OJ8NqBIiqbmYE`IOS~c~BSHofn=?;* zWZ$CeD;t_<2Fx==rw6W)-NFXkFOts2!u{cmvdiQN7uxO0_9BYys4RApZ|2d2Fc>=< zL|u`M8Ot01hA#|;0ubur^LdXc?kPx~!?e|-xA|TmgI=-UOkwZ6GqRM(wqjNvMo=EHqCt)4vcQth1< z#>FDv^z^VC&lb`oqvEaOF933Sy+{sPVB(?n@SyqG%hTi`;DOLu1{+DTPxO(#(0~0x zc^un^z;CeQnd69`#0&t7+N^;*Ef;vOCoZp(LwxiLyM=Z5ANbZ{hD$mrEYZwXHxzsoY}_cqz9e=Rw|dy{3-$hWl* zmFl$WWobS?Ww8u7ID zzM56{eMi{;vd^bG=i0TQ(Q~y~wUl9rj)W}RG2C5`#(-nwdiJ37RXxh*RL{b= z5cpom?TBkT_3ph}xD_*92qFQ?#q(iVz4z)G^1P(ou`cdeKTl%z@IiubtPMMRgRGBO z;O&r-Fa>$PBXziP0DvyVVEZoous zK#F|#Mjn!x?-;Wfr6sUsY*S0VmCPO)qq&&G+t8Sb?13vgzz%vV}f~M&!v$%$l0wb%M zO%6}9=niXyY8T_^VvLQUvt4&PnIa+4-&+^IqBOy0f|&2RX~uZ06GN1qL)FS=5qQDn zE7Bu8e6`s3S_L&huCvTvy^%^f)3+R>dyVhd5)+nZ#SotRb_;jygG!od=B$%u))1Ic z_P{HfUV<6m$o^!X;FJBdl#`p*NE{+&$6U>m@Oe^?l(tV}*<&S;q2K1Nk?pGqkGFRd z1o%$6XUz&kK#Y2JZdhp?mDf_*=OsAOJ;3hAuN0p*soKFqL;~0{dQ(jio%w?1QvFzi zl_D-VSur*W7|rG`Q3HYRl676*yVsCzZ6$V#JmpJ06Vq4eS~JtVkS~2v^&IaZjc?qV z7%C4BQ9EJ{$2o&A7ZLJ|7z2i2X;APDB=b@k=hTD}M>Qa$w%ASCbAMXgjtj~uaO&7s z+a!qsQfLno%ROztkbo!@{R%msbV9b~{s(^?1J8DE23rU~D|0U`8aaCCTl6z+(6pxl z(&xtSrt}??;!Tr_{4%{0uLlSPZJ)`)BMnEejfpox0RF(=^yzu_A;`;DqUdYRtJyY( zdsz9lUkdsmExXOtOG(|C@bJ!6857N73=XFgHlDNxhgbbF6EP%#tDbRSKA+sTa(9n8 z?JziaqorH7_*8+%3wv+39%ysD{ldsIWF>N@ZKnun7F&{sm|SzSwAvqu{}-hGFJD&bZe)<5Q&8jo-j9zP8sIv zoG!w(=Pz{y4@Ne0spPE?UEgZW+iKHfAeI-*u;Ed>)6N7t?dDfVGzZV+K>y zVK_|6_C0;;a`+yCHPvNnbqgo*v_PfjXyd*|tv(0GbO(pP;^x)|W^{B6BUmY3NVu3N z)(_T@ago8H$ICeDg7)bB(|ASF!-*%}0Ab9b;?-FLY7Ze%$H2cSLH zuTPSVJ9i4ROVyW0jSd;8c$}-;ZHHbx1LhZwjFSagLipHmGxJrVZaYDhHgYN2j0tRR zYtkFgo9l#QEly=56mzhW26|dOkeOTr_>RTm>6DsXlnnAa*+npsrld);+3i#oT4IyX z<~DLr^15N#fIR7mssKM0Kq{q@YPAvX_O#NdEIfJRN5{$9SZ$JNH;&~P~QOfOD*wrKAN zMG!AE=QX$BS>E;wUjQ7&Tq0pgmCEU-c<&x^NwNi#y;|-WPMldxU1LY#q|4PvO4eA6 z*C(rs6U>tn7x5k+n&9K*b@cFe7=uKa^+@wbBwiM$0Udj7&+_|AipFX6(cq;^z!4Uq)q+gZcFlo zkU5uIcG?xrd%V#>jM(z4RmH3~pbxOkaGNH`cVSqQt`GJw{awDH@F#CYrZS}i+EiJ* zyy-nWetwk)4`?sCq=b63$N+8p^s=#Dq{KN8B|03)dAOH)s1pguuvh{cQR|rPhzeOqRFv5q2U+62*vEU;A{3c% zERxgvCi015PP~B*Q?5WOplFGQYftSe-_ygurzmL61?sQqT0!{Ohsp@lL0aA zyu-{Bn&<~{gtZw`-uYPIs=UZ()>>Y@m{lUm+kJ%{Av;QzBcmpWY^Ovowd#|8wlDf= zT<8h&KpP%SSl>GI;RX|#CI+%;a~WnPk4-mloK;eeQd)X9!!^P^(6xFG6n_F;N?2n* z@TB(=Nf_ktS|AYjiQr)AzE`1`Ij;b3bP9{#8#FD@s`GFVS`IVlJTH22t3)xFKIPUB z5j&=NRQo{JS`y!|~QPl0MQt0%SAul~wpmmNS%r01LQqPO^&=O}k%Vy!^z437~ z2y`%5_lk;*PD>$pz+C>)k)}>nWH?sb2@uYytQSDf*YE6>n;op0>Ty#!=hXvYQKMjx zi*sZ3hqQ6I+{yp${Wf7kBmg#7>$^?vK{r(A?sqDzfJf)KT2@>39{&2|ZVy+A9b_!@ zG29Gvf!vKhE?5CX;JI8sK)EZ}WG7}`=5QSZegX^>2W>)3jLz9^<^gZ^1=bYQJw&>p z_DUVDV5Y~V2u_aBPf`0hKAx=Let9ikkk3ZNy`FW#>Ld|anMKlGsvRVOV7H_JAr+OJ z6ws3>LUc9faP#hl4Av>U$Dn(x1|-+dU#JC?Mb{?aHk4+1aZ5H0Ix0RZePA>#PiXei z92}33U9SBpbDTi9uIp?a=f<8xU*{9!rxIi+x4O?VY!ys^Z>dkKOE}k7*5a)j@mnXY zDKzl6#WXzCeUwLKB-tey1`E$|Uz=M&aeBf^ZQ%vT!nhOwus`<%>NTrOjXiW-vgaBO z$ZbI2tG%UA53pv)LXyP!-E#{@pqC9}l0+c@rO&yJB8y`#a(f55y<+S(m1cQ^2=r;m zah@&Bp=uJ0zdJtNo(AF9_tMkE6KbO!54KtKRi%!GI7&3%ksyMyN@SDFU7MCll}8ah ziC9)5yNShg-8!977FPEcms-8!Uv!?<^SZ zpetDshHIkl`RTow`NUu33x8dViRb>VGaK0761ANJH%szl4;ctP66W6&UMg9qBqh?r z?Q0#KSF71Dt`me1$_jIB8u3Pio3I^17LspoC=9DBBzJ%*FqaX!C!daIuT;PB*f+d7 zXbLr{W9H?hP}jZ&zUXo?oRL&HEq8kG78+GwbQi!#qkMsqM(u z6XSe2(!RkMh-zx-58rSpahl&bfRK7c1njU8gNvbqRPu7Z4H`eX%hjf_RayrJ|q$0TI=QJ=k*^S4hB<#xt~ev-L#>Q3#`|k(@F5 zBGtYvOJ{qb;0u9pW$T(Q5q@yBU13hfl3Q*OYx z4+{oBdp-QH@AY#!g!0}|e$Yp+p0qhpAe1Rr%`kbcrUaopPk~3}{o12MY(d}Iv{(?j zbv8#I_;T|>hv>T#nS5OCy~vojRMM8jIwK}4@4W(x;mFvfRDW;bt(!%`7=j`rPyw7T z<=ZBN7T}}h@Vz5i3{EqCHZb5>49K}Dqu{&lJHv)IshP6)Dm}uOx*iej%xEz|p1HNd z(R*(~E-6{aQ(o?40ZZ@OVj`SjB6)M0_xc`x52a53x5}tH_8=4gpMc6e31VK=2S*fpgpORRMQb zq%9DJJ+P~Cwk8+CyoD@!_8y_a4cL3x`%HDy2;~fi(mwfD`r^NR<5`v%dqA+iUM?S5 zMQA35RSQ_47KPx#p?HCi)#A8ny9q~sg_%3b1zQS6^B#?E-=PnkMGxi9y)OqkEBGm> ze5-s5U7;6F7IPiokf*Um^(bPnk*Rhaa*>{+zFw@f({wUci+YgRLk?TKisY{&BHVyS zp8@7&AYbG&ke&h+cR7Ip*QPB1ML@d0F(CtJazpegi5u>7MVM_eM(RPhEQ1u7 z&$!+@r``g47u8t}^-$HNZp`BZ9)%%1E_CyJAk0tRyV$gG3rj|LNpp+_Wa>}wMi$W8 zW$*zcD#;Xz} z&fu+3*psWtm3jn$Vmx;d-eH}D%Lv6t50LV5g$Yb6J25=gN+!`(g;$l^MH66bmT8Of zwUjThZBn6U@Cb1Ov#a6lYf=DW5jbSIK+G=d$C44ZWSywC<+*St8v~_sPh=j?@}sD9 z>$hGehVkG*Q9d6bSDY8^EW^wBP=R;e$h0pvg7vToptF@g?_+sMs4jr7B{&wklmOh( zJTs-EU^A717XU(g@}|wviH@w5cVCE1K^!&}nOed@Ja;8g6Qq&)&EVrzO^Zzl7@69W z^^%DY+KIEL2o1w0o1<354>!ONkbEJkP(osEBbUMRGP3VFF=oK2<^+8FD&tHN{q()a zaDiD;6-r2oa5Klvr89Csxm}pa~>$`JqFi zv2IajWiU^r)KRboSfUqB@Ekja+sntZJCl@WN#>TNMI(pL2b#LGGzXfP4695hlO8VV z>0OZAh?fMo_<3*%*F}WQc^L&oVB`_MQ3*Q2Gi`c;S>*Wk*#R77E;I;9de=p3#yr@k zs~Dpmv7Mf*@^tKhB;7j-!&X?P*URL`(64I`?&a7MD)bzorW!v4|33ccx9~-lOMG0$ zFA}fcBYb2T9F_I}s~i2jp=WOvKuY~lIEMCkPNv~?>Zlk-$ zOu+-g9>QU6D$5B_5_AUlI>DbB z6zioL4)#)48{>>QY1q~ig06eJioJTE)qc;F=T5}QOp9>N+wQs)`FV=gSq&Mw7pLH( zsv~j=%46M0m(@S-|4`3{WpM+WM7<*52y}RW$jPBOAGa_~S%BntKd5NdNQ)IXyETvo znm5>Yv9C$47gzTI$o z7XZ2o4+O@ggq@fhqT5nio8fw;MTmW|wj7ZCRT_+TOFk|t=tz3v1wq`Dj8_M?C%_8( zYEr-qF@)Rct^)gBJ%2WG-8#7jbK?Hgqs8b@BBNL|n8gRKJOuy>A!^grQQt%ho9>-fL+yRrw=^p?MiI2;==T?q5EL^v_ruQW{b8hpb%<)GP*^bt#?hl z?3^U{tQ4fPE+q^fGB#g=GhE4o#DVlFt`|O!XJ6W5z2^(0C5Tgj7Q7^7GP%`7X(x;Yfl&*4T_mZ63Rq93j{VO)K!bqQj8N>sh^vCg!+kvT zjAbqh{LQO=l!PkH7*5z2te)ULVJ}Ao6wo+hPOljYvM}GBy-c;)}K$9VqhUuXKamKh{4_3}>D;RdpA+%py;-hQWa@@}2 zMlBzCsf~9_1cS(9*qgJ@tAO8gkxX1$C(j^xL?|_IPR^v5;_@QjQy$e(aZr_Lj{Rin&ewTYspn~FxDEMHV}^sE0l%XdojeLwalp5MHgH7j+Xd*l{B>wac($! z>vhb6U{&7#1T02_F99fbpb`YVd*vpA=J;Tjwk(9+)$QLG41n! zYR@frV`zT4^=>gCF}P41PwBmJw7h$>HkqNvX-~FlyyH6BQ3ldCE}Ng+Ge3L?&N<x%Oc%7~~t0j9wx*Cs=PVmxaluO?9yC!N;bz`&+ ze(Ip6$doJr>I|p>bMcTCU4cP-jRCO`@sJUO@M?#isO4D#VU#4Np`ADk>cj>yuK5|- zK6~QnoUf;gz&@j zrzg665KE#jwDfsXuLeQKy*2S0Oo#Sobng_GCv#Pr4-tmeIw4fDZ5}Ui!!%dE(L1P< zstqaX1BcWDixe^2-e14VB`Tr^nd6#{yJRLo61Dv!tT#9U8|$TW%rsf-G)Nd#%Q;Sv*50Aot7 z9V{!ShsC3~Ma9#FuLA=?QV!fA&bpGy=hoh=GdwF|?80CjP0j!ty{kqkO#lbU+9$xq zrWG+lshPFWCSFv>Y&y5M_m)%@Es?=os9@lk&+)r50IEVon0z_%_`QVfZevH^DxQ1F z134A?sA3md$Z+FejmB;W^A+R8q<4e}A)xAYuGU7T$85Nc z75jcEUk4%y$JKNqa(jYoRaQ}BV)oqpX8LZ#?_NQq;wY#!9C7$wm0XvRI?`GAJ|u*< zY)LbUsdW)k&xxm$YHw2a1#E^;dWBw+slc2dfWH^)f$i$?9*PSjaUSl1N@y?>PAX|f zO}lVb__c-h^BR5jI$Gv%Frqh3q)JT8b*o2RaI(YVapo1m ztTD1Lv{bh*d$+2*htEo7 zMmScR9zI^^6cKT~P6s9ktH`B^>hp+8&|Miwv~9?@Dz;>OGMplP+z}gxpn(dH@y)Y~ z@+oQVr_9&>-Xc0t(L?oYk9#A5#yVjj>d!5h#T({Qqoa&fT+$RH1AnIAFI5!(7=R4Yk z!xLpTvUm(BS$Ji3)5%c;a$uFN^?TM;>=j?XC++Gi2TwPJADC8PLiOtzBwc*3RigGu zO!$g3&T+p}AcEoXo?WZMgnZ2Mc(+^q?&Y4;0cdorTOziuV9a7N=u3olax!v1+Y^`Y zBxgO2;Ry9t>eQT|ulS(^UtTqmQwLL}Q_Y^B?DZkcpJG_6W?Bk`v$EX%cmev=HF`dP zDV-hP$}!kppg|aX)bfT)@Nv)0zL9jG^4joL)_rlx_i9Fj;|XCsV{8S6Yr(TQbOfEq zTz!W@P+3oJ1l2}Ro0s#3fMhgpW;aFAc+R+oc{*IoZQZ03Cy;{gkb@g$GEszpL%O{#7|&mE z5h9=Ff=Ii(f-v9CR73FG-om%$O%!0*3F4QWLM-AQF@`&&{ZM%pI-cS?us&9~cnyi+ zcEC#O?FguNI}%w6p-;XZkLK`-=H9+qXT_U z!4R9dk>28wD&eDTD99%?Yg0J=5}X~y@RTc?t|vCz$ZCpTCJ)7%xezvdih(m-@7z-i zq_(5h+Q)rE9`0FPm=KDb9;He4a7PD{xpdt*n&PC-7?pp5AU?$~TlquHgsYNK3)Oq; zuhAMT^NrH84ZR+xrCB2)^*GwKh~UIJ7Vy_R_GHJ0@qu(n^_(;@p4nv=PO_#{)az=F z%{gP9yB%A^t-ezR&>%r=( zx@T?Nd8FnGQdii);bEJACwiAWd9|+0il{EFXh{#WEe%MQvmMnUPJpRVjN6kiwR@0GCmg(;}8_f#fyQ zGsq1d7zR4a^I*;#5)Xw^O<41L%Z+i5x&3v)Ak^R-M_+mL+BY%I<(5_pssKc0psHh_JmkGm_+U zCcg9#*soccZZ1zaSHv%hVT*if1@(!pPnZG1d!@d35Kf6aHnmq0lPzEb`et3jYb!c< zav?cx1XC3+HPiVP!F`JtE|fz^pQMKuPy}t)W8WKDRdP_Zemm%LE$X@Ai&BzeSvSt1 z3c(OhuV$M^7MX~uw z$2cjIWOOua?R#;_!6nB}Xfj?K`O6~r<^y?wxN-Nqn~71{(;uiX(Rfc*puBD*3_P?K zn;{xhT(#9yK=;D;w8$tDjyQz{!|!BX@r#$~qY3;BS!pf=Svq3dG*HbHHK4;tF`QFX z3P$>&M$YWKFBCX@Dq`Y(9Xj;XCHMkxs%=F5q z786ODAEFcm7d&>+eCagpGHU*6xtRG;h+6kH7dj6M`{vS}CdNBrdhsgX(o49fc7)we z4P(pYu?(YJd06(FWTM@`jNr!|V~3`i%xE~Mf&kd$*A_20yIZ}tL{*0Lp|kK%C2Hh? zcse1GH<~di&^hj+QC&kkW95q)dp^6tt+`p2xw=cK&-PCk#0$aAw1*)?m_4H;_HGg1 z!W*gf-x8hPTc_oR4SW6ai+iJuB)ue`&P zsS-j>(yo1@mn_0S>36^mDRTgiLd%z#D*z-T!-fFm#mVKKS;IAOQvtR$2iRd)JPY7z z(aCo%kYH*X*ivTW$=G>aGtzD9`yQ+_n=1tM@{{VKI_;y|=2e;{-0|81i)=W2 zr|zU_INmWveo-swg!m$M`{lZ3neo6lv9w-V661T6OjG5OBhT1D>rqnG5uQq%`_c9sYTB=tk#7=q|b5oUHPwtFu3wJW8mPWBZ&s%*ir2$d> zazlIc9i=?-aC;W_K>JD1&8y>)R3>&#L6N(A0Z&K;$gQoWq3FgqwlJN~643(kdWNp; zT`pA>wupp^bJ=5EvjM{=`f~FQ`!^*TJ{6fHkEc10Gg&cOF1l(NGx6>vR1UsF+dk`n z)vJE6^~)C}lD)@L#~e$$;sz=xZuV?Qs&yhL(tNrlhn>Uhiw@t%y7jIM}o+!1;@*0>C)RbzN z6N#a;>{kgFzmai2#NqY zZyfI`8J@xt_H-HG1u{WSaZ=zlx1$&F>K-CiShlQZkUt`kXN2@n-pi78aT3L+P&Pd{DOj9RKIekaR-y06G6qb?4Y@&^x>9CkNJb2L$=1I&h8sffgzX2rFxUz2U zB`?x`nU8jc20ZXEjM+4v z1sBcb(@?~mu(MYdqVS4u3d4_XXp6BJ1(cuY63hB{3$}<%dp-={jDo`)*t;w<*UWyC zR2V8?8%NYhqWtVn93WV=@I~&6n&+>{`nVQl-cEB#KDZulB-97Js~z+-?}>-jJQ0Cz zD%QrR5+8q(hN8)t4Y~G~TmdsRbEkQx#e9$@*Aw!1l^~Fd<9aBXF&-zzj;_3I6d0_z zx_yRLQLLl2QKMvTiic{ANVH2Bju)klqsIHxiW0EkSmYw1UCUOhXlJM2jBERzp4J&@ zW%M=YgH?EDanP+#7mftU!P=`0g>?oORvtoX*3{Ht+oBgQ z({~+tPR4b#@R)MUZT)5GU<39s9~C`$Pa(PmL+vu=FBvSKl&P(V%Yk|{09%QyAb z%bZ^t9WF?MoTUxMwfl)_0mr$mi<4~f)DALcBRwp(+^L)AQp)aSiu6F2okSwNz@7|2 zU;-b4k#1rX6-x6`0XC@e;9Zl@Vzv+N*Q@?rhfGx#!Vz;JZCIGtq_^B5CwE z%AtIuVOf(dn2zq4(B7Tb;gI#(;E8g-T9jLEt~i9bdXIfzpzG~(w;Pu5#Nq5o4-4je zcP$Qg@eHFw`d%i#X>nHLF3G4CQ>hr8IWZ3l9F+5!c#?^)?((Wv!JiceRM{NOq~1$p zYOf2;>Hr$2kw^>NH~JhoJ<7o$pM!#^_dQOBTt&3FbzZp30U&oY@6uGXA=?|_Zon`| zPR7CXp_yLRovP$4>wp|lq3|KoV?y-k^~NSzq<5RE={;zv*h&ES{sIELd02kCTqRLF z6yrV@SZZSWlp%tLk^pM#NhEF9>^LFfn`cCE%_q@zXp^-&gs>Zc<1g}I5I<}le?Etg zJ=IUM;`y#y-q^F5ex^DLh6q&13=9{0?@2s~NVwGA>32PmW?Xx&Z{7&D?-TOD*#p_) zmbJ=jZvcHGd*gxPzRH9sxblX+v>SoP-75YxGqh$>_u+Qgz?j{tVE2>lr_k7p#{+Ze zFO>4_?m;%R;-d+Bn(!zzLGi6uY7d8dBfYiG!V(BWLl6p`ddy*D!~{(`k83#i$(kZvo(dYuf^J=;~=|qFCdDr@g7i-ru%X>uEi(MC| zE2BXetlx!9`uJf(p84+E@t2eq+t39DL7}_)GN+u+lXpF>yOSDsotNMx#HPc0zT&Gz`I($4_E;9|*6Ilv$`nP0otyt%w1*xT3E< zEl#*R52@}AKosEQSdbf0e73nXcphkZCG6WdS(6A45b?HykeiV>JV~Lzl|eZ2y{<=X zgxPCMPhR?amM~8}hFbwpLDhV&;^ALNFb#}SnCB^GXxkWY9TBkf;K3@B`tu1G&v%@b z^YGA2<35Xm!z%<~n>L9LrZmx@$ilgN;m8ag9RuDJXJBD9E~gU@Or7Dq>iGcbur0dRc&3zyy#Ei=F|; z%hY9j-Rm0@Lfnw#P%NDj^js14=(0EMPB7wdd4Tw#QlW-o!G$mDx}xO19^;9(Z;l{o z4xp;?hbiBL@axx4Ie1vE~7L|IO(~f%ERdCVF zTINzG4=mIfSKQ6ZsKtl23c`BX6mK?bQD)x}#$4s0@$1;ukkyMLj2mp)F|tODLZ)Cr z-1yFEX0kkln6n1f5V77|toWFYOHMd~7U>J|r?tStB#I&-3bI^W<&TS~Id4nWs$eiK zApV5HOJbUPjV=rzDzvyA?H3#`FZS%Rk9E#o zZ$L((#XyOZTzPI2CEg2T%}~qdYzN0n%|12taO;u*7QOCylJ!3tNU!UwGI{DHi8DC?IYNU1UDKLa(9e)H`N=I zy!ZeqMUUsb6K5@6;2M;T+>n4apk2!))^dfx;zGv^rN-$Y&0&{JcJ38oBsY(KZk#3V zUIzQjmq3WK=YGlL$-HQQ6UC5g*qr3A=3dVs^H zNV10>yDwk~`pNV=rLyrpjE%97*m|dEK+bQWJvP~m87ms?QXL?bnh_6&?zl+~*Q3fG zj6yx>!W_d@aiV}Vp&&Mi6joCQ1}W?)T?!nXX%>XL#~dmWw@-l^$W!K2$#3k;9TuFe z+@VpQA6xBlsK-DPHoIEo>2-qNriX**bfKYk2r*_SsZ~!@k-ZF>cfG+@(pd(!#(XGO zBel>>Q#qGMEgf=$uzelO1OY&j&lV z`|30>qP6!GH^fUio|mGxl0*q$V#i~%D{}?%m=H587gRmj!mvV2b>Ha>d((+I;{_gY z0_4c1!M$ONeEMKoddxSoD5(I^Fv`|^FlNqRf*)CUo|&L+wFt$#9>8k_7#~)xSW8Qn zI--kiVT_F$H=ems2uBo{$@8(>%49M=aC<5Gde z?6yTq79#4n*t@_U(8cby-Vrj=YgfDB*xp*LbMUvGe_2sj68J_e}3ya^seiH(5?oamOsz^m8!2f2a+dqy7m#8gwbHvLV}mDn>qwr2F2k$cdNtZnh8%a>nU)ANd%!k z6*KKBj8>^^o#s@h5N(i`E4>NtaCuV$E>?!>C_&Sn9_*D)mXLr6-KFI;n{DK>aLb}! zjPlMNpxEF6UYgfEM^-=Nv1kegnO9Q3RNX~XBW!v7m>#<~OVWxCT|~Hu5|U%d9(6{gwevH|fUJAbwmJUpt+mdot&zqwyel{yeN{e>1qf2-=>`FtqM@)I zQANj8kMKL-4lBrKK9Bd+?It{kOQ%udyj9tbwG#ocVC7o# z3gv{`9z#CvL##tJg7Q_<3w8n?+N>j#4JmtcSF<`nxP4Tstufy1?+6EvBdT&dCqspm zU=3aBv~k?ui~*b-7G~9v^NC0Bh;*zIW~Z~2p9&Wk96x?)>ViO3M3LOXG#Bi_8~92& zyHGM)<%UD~@y)@jwG3TU?9v1vj>o_OC__|(f{d0}|nxgEwN({DTW zfL~Paw3f2ji%nE_@zmwWMlf6hJx)nw=|o;{GuBZNM17$CIzZdYbvpo$W_B3WiVmPa zyDnREm+UzR7OmVN6kqIk4U|s?6Hq&mi4=8G?#w|6SNo{aL-LY&QdvNQR>a~NWBw2v zKu@Y{)}*AN(uIp3jaNC~8sJ7u^KIrxRAU?BW1#{bqD@i~rMPlO4V;VXJB3yd|9|-$yhjm&*i;-=XEEV zcB>W|{9dn9WDG0#0sVbMdX$@}JCN;pkJ19M7Ep%yf{y4#4mQA}sz_aSWwVJsA+REG zc~-|3H<@g7tI*Rc(L~LIQ$YY?Oy1eW06K5A=~>Yg5Y>|N9oQB_GUxJ8Y=#B*i;klV zJhj+k4QNJwuP`WHsPF&`^MGD&6v@i%ru2hucsB@~#-@B!b@zkbFMt?@VKem2*1hSFYOQ+Tfw8K_H-&kFrK{Pw~a7f?H)i;~Mv_{65( zy(*>Wkx8DGaa*(Wz+<`CVxkY7&jy>(OWFI@R>9(I8oNpEy(L_IV8BLN%(u9dYSwwD zcoU-Tw0he0%%5|D)V<=KD5p33K>V^u6y&u?0nKBn%n>SAMrKApFtx1B2e?n~87Rjl zNda4=YEA`Hv{;(0bD413((~oq0Yx`{Jsi0Qd5FsTj#BC|F)cD)3!YZok!ccyN1@em zXH38Bt>Jrbe6zsc>btv$z82|}wdQhFBoaOB1Ib8Qzp=naR~Y&%O&nn;kNF|ZO-jIH zxq7eI*SF=wcX0%3cX_lHYR=XNJ-5grWE9@wCSE@o7`9O!PxpF8m)@-$4QQ!!#ElGz zy#1FVo7saCiXOCx$O7fEodMQGr3%l)?KX;Hlw<&#n>56uVm!b`IHQbi*6w;I zZkVaiJ>I>z*&8cbLo4|NgXpJM;6C$q z7Xbw)*G(p&VU${;X$AzEThomJu>hSP<~8f1EFecGtT*}6EBSTk@)@{tHuECr1rs6& zu5p_+zQ8(}3ZYmHQLEEL?9-rERXIfG!CEJd+@Lxxs6>M)NP++qMI1pnKn-(De2_7N^rpHoVi33ebipcw%J$A%;l2IXXF72HlQP5$>$WL;^wXz zr+YkG;sf3SonWFP`;KEUEyrl#plGP%ARznny+Su{2_#xhXI~H$l6aertylNw&hUCH z_l3y5etpwT#yJtodM~aQ?CooCSvYvlF*#k*-^<63g_RLl^+j~209H!6Ha>8n2lECH z6+?RnS8dUxE-N7RSvYI^-6_y&m|r$9#0G|kGTo)iWg zO@jhEB6>J3kY!)vP}=2TC}z)sf}Gmw5&Pp=a8Ve^ELK0VcjA{v5z zqA^BQd$wcX4`01govFypW{E`XaD82(#_pmR^B5{?$)V~ViSp?L>i}g6^AdY7CA&A= zyhlYkB?Ws`E6s~fsOe4{#4|(EA)d%15A0&HMb8P9@j#(7IoPY^3>p;7}9Ug>U3nWl_Ggvw4>jlz)c_SLp z282|6ZzvW$Ya@KuXqKG7rz<<3m7jJM5lE4Ac}6jg&0gL^3BA`*A^7eW>wbD}YIllEnyt2- zH2Y+v{j)T?>>SjF~iNqHsV*_!v-J{k|o)OVyh(Me@h`H`h zG$?(hDzKK&l~+jxz8^-lAq{ibOi+Ed^YAZgZe3>*3r4#wpM+?{y*h>c%LdyW>8 zulR^Q#}1#6Gp%b#$R&uO>Gw>SE^^lp+XWt$$32Mwc<6q-CNwk6#4w%D%9&a662KBy z;3Wo7x|ldwXca!5xlu0Zz|!c6dIa}uE@j?JhyuG#99Nh=LhbifY?8#|3Jz@h)Nr~` zAdq@pK_{b^BE`kZ$)5{>Xi5;=lO<&XlrpO~$01C}hv$WD#N-y**Rx{G zUck&e#FqsMCk1Fq(1f0tG$)O+dY(z_yL8lO*t}lhU7RmOFCW9!^AN?gPJ-Rc=(A9# zDa%)I&x;D{2x=ttb?A0`jq%{ULBbazVXf*;o<39$dNFyI2N7si*s>pjaBd z?`deJs{4Xh8_1@e0fIV@0cbTOpjBlSjv_{3iAT}X!ys*c%?6Lezq?7PG6ZF^hi*8-v+|e~fb#$nL9C<5jsWCWO4zPNDa9dFG`^r`*`8V73n-dc)1+a=qo}`ZBx6dma)K z!_1gMwFP>zVxewll>)kAiSO*{nrG9U35Y~kR(eB=xp`Jf+9w?BQ$FvD5fBugnhCOr zrFqDr;=6hh@$y|;!0{>gL{Bj%1ddd2xv%48^UX=` z*+#A>izO2Z1t3U!{vQ~?F z_vGocGPym0H-N|Q&^>DhQa4ghZeXz2MogsRE>#QipdQpX=z%XNifX_(W;>#pchY3P zejF7F@Br<4gI2(nDul8xB9zP7{=x$u*c}HV*=!sxMKmOV3p61ND!i6` z57!kBtwI=9>4ZyB^!i0;y?LD)^mL)il2c5vC~m<6(CEFoM`a~5mB<0Y=uCA6B;Y54 z57Efr2|f0EbOh6V&p@&K92+5^+jm^`DP0NV=uyJ6y_(E1Q`o%ThIn4dfJQ0MiV|8T znLPHwHNCPc6(?sBDad%xoXJR#w0#;Dx!+b-#}*=_`s*@Fdusu$zKG7wgv@wn&{Zu+ z8ABdJ9I2E!n!%p@W-Rbpq!w>Gd zO_XkB%Bn|^%6aEFLz2(u#ZuNnQ?#dP>6J_gPC?|uWFOksV6LT!M1qELKAlhYo_n(@ zVLcgnNyAT06P+5_C3r=o%PC{OIG9+ za}-6gt7G!eF2!E*J#xKL9}z-qrSILrKQ;9DFTz7lOjl()0Y#2N4*Igk=}0pI5qHGY z=iVUdJbbwHNUV}icxU6;p~t7=Pz z@P)Bem5|CSju+5(*lzoJ?lo7)c;+rdwO?JTJFUKXWbWb!99Y)~csSllx-_t}PM!nO z4=ibpFUOSSg~e9Hy~xY$oxxTrAJRTDXW_&uwKT>y%huAO3pqY`r94@U!sLpy$zcL> z{B{En@DL?4vMTPB>G90QWK{uz@M4V?S5I3IBy&Fk7`IOI293u9^eD&NZCN{Dy?GEI zdt!GU?q7iLDqMVc?Xd|*W3lOv#!WZVxU~DSNMmi;oVt3*0Nv!UR-)j%*!zjw8UU8A z?Vvy0ryQWM&JR$W>WRLUV9Ap{Bi?t=3IWsp97Cf!q+M}4ce}7B&DU=cqZA6Hh1t2X zL$J)8ci_pDo9~N<5~wZiS}ygt>dC{~t!*kd)k@@Bwq01q$x*LI9w20vH#H*5NXm&1 z9fx(^K6_P%SI3x6{bI+R6q$rV6*(Un!8oh)&`Iih`H1c?N5tvUz@`9vX?G;UP#?zD zkr-ZKZ#ciKAUPzm;&7V)*N$dJb& zXV5!q&#cP1Ev5BQhtU>MU>Qio#+rKUQ$9DR&|~tZpe>Fy z7|mA&sTuDaZu<2*gS@JjIEUM;#MRI@9fOYo{mu2=5J2c6UUSl`V(t@!WFC@j>bfT3 z1^0y#3VH*xJm-|5GyyLRDP9>*NVCa2MQ4#Xy*Rl*ftO%_SOEs-8?|yWxDuhnOVv9j znjG2I^^7R=EPL*XYH^uyeS8PReIN))$VjJgV%SWGJ41D;ZGcbV`EMg`& zsFh8v(t3Xb;!{Xd;yV}cVrY78%<)Q<9+AoPEeATc`5B?b5h0hwDv@b#`J2G*ER&{r#21|I{-#nALZdX?276J(r zdy9O|h1Eb;*Y+k~G>zHjF4+F2C)F+9 z`exxmg+70a6H-_)qy;gWZ((Q1-m`*vaj_h5IEtcky(q$~ksM{JFweca^l~qf;Z!sO z(w`()%Ptr}JndcNyQjfPH3%~9(eCM;IM2|Y&A@fT%wXr+4UvJ@=RIi`O9@a+`dTAf z3FQ&7Ox92+3Fo*z7B|wt+H0;R*<&*~cn4^eZ!7LD-isHH>1BxmRX!kotIviU{4ogJ zDfXk1HIKQsPI4pKDz`NNxT~Si=CAbG1*C!7?&G1CE(2o@>46w5M~2bTyA^Hlc)Ac@ z!}W~4M+OWn8_Jzxy8`SSOMuc3pqV=i0_#$`uWu*F|JZX(uAuMFQMc!ee)=$N(c996e@W)jOEe1ZOb@FG-T(YgBS_G zxUSMQwBd3w5D!xY;WJ3#8%N2^*RJU)#rAl znhdf1BwzMM8@7ZNwVCO%d5-vr5`1=I#;jCKG<7hI$HjO#HKtb>rF6$_QPBrTWN<4L57hG zhfzOv2U}q9gh87DXEDLRZM5`}qOoLgGj0~b#{!YNu8K}`ou;H?Or<3j-aPt3aBNDH zVepvM#tmq}8Sxn$anNJTJ@P9PJAi{-P1QDfhvY99OlO}QIO6(ZTq1q-WqLu128c}Et8F&jE(Rl=dp#)J{RfM$gNdyz84QbL0*yY6dw?oWS0ss z_q)lhFzfVnB=mWkAx+`fYdRAzo|;$7fso+5;^bt6*;Wgfz6{8+iSw~r!@|UUudZni z^d7c#!~rfMC}d6Gdoy&GdeE;J-k`J&ub<1~lw3W0?4@pw2Is|T6VfgPEN-B>#DJpX zP!HC?PuRc#k5i5{jc1pL-WB8=u)Xe)c=cG{=7vVLAj20V0zM@*_`uyPr7rKODEOw@ zTXurR7ffU5)_n(l9E^R9w8C;!(Uv2-Rr?B1`4zi%o{RKrqZ4mjUZTKB-#1DVx+pi! zA(Siq2m`SIaufu5Eb}I_qu^92S2K%6Fa}O2Fon^;hAn`2jZ$+QB$p%{Li51_6lR;VP&{P2r*A!;u{?ye;o-gz9I5mJsgCviy+~^AV%=S#Ry6HG-036ec zl+^*qCxzUpPmem#MFJ89m&tqEP`SpCq)s8P%rl`G*>9^9v;`8FgA_tuV~sYeumdAJ zc}OVBVtI3kE}}A_rS%Asi*#Y?9!gH;k&Rrj zF=AT3vn{=~Ft)&*Lw3a@NPgazaS6V(&CQ3cEqyN%bj*w;a=Xc*4sAVBxJ>A}j-1s= zdN(eexa$Syl16w?PTQ=~gdU!CDHz4tsJ)Ca0P~9gy59`uIBkow@#C#2kBS5{eeQOY z-0NlO6bE;+`_SK;xp--`E{FK$r7k>beE^~xw!|dejrP{m6GJKm4jy?9B^%#Nj&6@s zz|)5YGw{@(o<{e}UL2dqtc*i$qt-*@9a%XOwNQ()eB15F^r|Z(sClt7N2hEez)N(I zfp-NQlredp;;=i5B~IGN;z87HOg&oa;o3*#m(Cpoh#@{=;+~-6b4U`Pn1D!#FNCyrK&0hDDE3Manjo`j$# z*}(F$b#NDYRQ4gVt2F1Fd4D?@CJaN)d5Ryy8e=3j6@G>zb4N$>su|Jjejldskj3sIr64NUsf- zG&#~pk&R+AY1@fGqp%nbNuXa*mb)~(R)&f*b={GRkY~%-*JGi#+)uOvjnK8DaJx5r2y7H-(nLfQW|~R50RnibfImFZCY zXVJCC^d3B3HG2v3%hmKL!;l!0zCE}HUESkyC|ME;4c(J+$dz#LLfqsfaPV*m?CVx* z5ysHE2E|iBW@vSMeL@&YaY1ux{KbDETzsX~6Nn{NP;5>C0EbjPmefGj;!j&N&I za@#kAlV&@Oc^OJ?%y!@Kj&Q`Q5#)d*o-wBBZBd&Iu@MoF!SNZUS|W&hlB@Vk9#Bmf z(-AzYIN~CnG6C*4c7vG_6{Ks=`C^~Exwk|TH5+3hv@!XBdwZri|DM)W&ad18~gK>~NcTiFPb=hLzezO;@0R zGF}Oz>GQsD9l0P3Bci%387oa|b0q^S+Xi||C#|nj6JC%L5;Cklws3yOed;Nk$hnY3 zBINKS9vqaOf{2xl8_=%W?nWB#1q=a zM5z}V=j;(mHncBgM0Rl9L@|XmUs_`TfL9;Y_9NOFoDq5a#x9#u-fIQa)u#rhx>NcB z^40;BU|)4-6$>m6b4HDy(r^K9+;hm65caa(3la>_lcP6l$gZ}2!1GMm{a&W5z9}yy zer^n$M)oMHY*8M9rA{gwwC!bv(3F8vctSYI%FaYk(3B+VyQLN77fvD9levCrYZ>5J zzQ1m6#4^#sFw@iNx3NTIzG)bH<}d^#9tWx9j3pyuysi7Hz^Fu?TPkBzYo19A(s{d^ zG}&u>L-EGWLBSc{R%E<1S75J;)B_sCWbM6Bvs zPxLX{@!{cYDV?%_Z!HG9Owm@jf*rNnY${wP5fZ``SBeqzGCW?e;zHu*%J!mnS z)IrgM@j`{79OwM?pzI7keV|858Ov@Rms3?S6)@@d#%P0~1tqQcF2R^-NIDbRV>eb1 zN3~!3?K`;pM#ZPXRJQ32!mj-8`$lWq>JZ_sgaiIuf<`VG#KaM z1VmC^<3WYeVy9$b(Bk976q>^pH#S&t$1CB<#e#8$gZ7KT0&ZogL||+ipSt&eAoWou zijo&iM80N#JJX{l4=nQB=M~wJ?5Z~AuP*s~XvjUA1uAUh;4GGf(L_kJs4zuC3mzRs zmSxF3pW_EFNUOsrsDi2kr3)oCvBnaTk-NAoF`M$#Phcz#I@$<%P2gaACW5CtS`y%BB>r6BxbbO{uRxD8%C^u|$jU0QFu?$knkehfk=3Ec$h|y}>MbbK7z!U13fambGe&t5# zetF88drIn@RTNd>nG&95YS}y&+H*=cAOO{h)BfJQ79LYP=y z%7CJ0DEXBF5=E_Y)g%|4fkzm?)uhNEk)15jNde4-t#&^2dHA->aQpUIJ(cub&yI;B zuDoZ_97X6`SIJ?$W{;?|IRjbuWX>u`?WG7MZL?0^df5ftBSOWiz?16qnBtLp&F>Qy zq@R0*{^lcMuJ)lcBRYj=N5|%2A`@K}ch69$gR;pheX<$MMtCN}p3er@Moribc?Rw> zMJ{DuoaMow;<#*H^F4S`hSq_;Suq4GOz)RUX((Rm@SvfR7c8nnN~+-+m^0#4aB=rg zjq1Q=l}uGu0FS-}FnP^O1rRu9RDImY#bh=~dw2f0ur2s3pW@x@iw8pk zl?NN3NUouMD`iWs6yR9qC^IR7-cj0INGV*p;mh|7uk$Dnd#wbq@K0Y6kjT+oR;e8B zegXDy<1Vn9#A6=>7g#`qL`S0B0YWQ+KR!#29O`_o3?3VlV_?!4sz8(_vhkGMaArh< zX+-@NTi~d-%mcxZ+pOPvyrL6G^SY+l zH`M@UVSzx4Ba+W35#G9nR; zi>JdUnmObfcvtcw*&p0f7?YPlW3^({?@S)?rJ`ip%iA`^Sh%NPIG)r2hga;%VIz64 z%W@L~#hI{R53pk8p4l1=`_9#w%z4vcDoGlV1S(2Xyk0URcfonN&epmWSu%msleQrQ zjNRG??_gDd*K@^0XXUxF+-Ac1Vaw@33uTqPa~`0uq)5A@w)JXz^~e^+%drD@&==wv zbv`Il8sajGDvJqeGLFnNpjn|CyS^gDeM5@`>X%>&4;#s-H)1AX=7Mlu?F@t@UC1&f z6hw;-;1jwRB2Mh1=Zpa!&Px!QmN2QaW+_wnIFtG9GzH_+ey3JgoG`nexZrQCO`}iP zorLEImd;I5edqd!VVzXd7qiqZMq1c4L;b~EHi-H20DtvTAEGVxF?umoz(P*DQ8@?*s~9V}?6Bb-D<70ML2QaPv{%m_mnuAxv=^Ts(Yt zze?c6w8`s5ceU~yX!bd0)jfNJYuTc9uq6T!tM6@&N`| zb>;F&E4!-JwOz`j+gig6JL-!!H=^~bi=2w?!Vq1`9y7s(gdPb*o7$p;8!2+(@HWe( zi|h8Ihh>4HU@j|5y+}E-z9<4oF91!l?~QrSpfzkhkR5BJ(7KogXGZl(O4Z^nzYiLXn)pNRM0;1a*jmVJD)f%z z!m$aTQS>s&Sq=@D%k(Jwz7z^9WqFcrE=LQ>tgY3!5Os;s)+lX7ZiS$@wNAIXG z3=szBd-&?5oBA5D0lyN3Q!n24mfwz_V3U){#U)E4Q3ed39$JsoVNAy&kj$B%Er1y# z)(za`qg9h2_q=9dm%3-zep7^+^vc7VMyDH$yeJcxvIm|0%35z-)0wYLIfRDdiH1B_ z^Gn3)(Skgx^|k5(06kH6bdR3dXKrw79cw@*R@${NO7`y2d-Vwn`4rr5r=P#O3aBtd zp8?8DphA`-r2tv#nl}R5qw$KY4gk=lRd8s-p0)-Inb9^byC5vTLNk5^1!T51tK}!M z0O`q7Yz)1tQ{V*hVg^Ie1aKNRNFtM}57`#dv?$AX+(7}Z)YD`afNxYHJ8Z5!;Ucq)Uc^U+%U0!>n*rR~w*K*r8 zLgjlQzK5_23SM^774ax148*rV%>cTMweeXh?$Te#7;ZcY2p@b@Fyk)3cbdhIm+)lB zp6=DT3P7(BRIb~$8g|&3`h^6wGh&G?ffjU8@DY`(a!}PZ9e7;wx`~Tl^*ZuwRe)UD z<2ajIBRe^@Cw->#QlJQ9LhE`&7ASS&Q2_$b>PVQTYNkAaCbEv^W_T4w)PDNZJgy$y zAuw@p8im3O>kLGgN3(}xuN3gK`Sm#kIRF(Ux%SKsr$IdqlMZnS^WYoZ*Nm^Hb?I%| zQTXF`&cnwwtTDThgHVRHmHG4@JHE%qh9nQ;5k8A1bu|-AHqBGW<~%gx)u8Kb$Q^VNQS zbL7(=5Zs2b8UmhYS-U*QKnsTy#IE#`#lSP`*)Rj0jFd|{X4~7@*vIULS8ih1ouq^{ z85aZ7pa1{`!~$1s6P{;$P>`NjHM;}Y+)e-mvLJnyXa2YztEz4ZA;$G(4z*?O-oi6Z zk*o&HI!JQ#Sk@lu6+K9v@{Qu~-Bw?qDZA-Fvqv!3_KqbP(?I$79ko15Sz)7kr#{$T z845L2EMEI+?=|V8B2U$)y4jo59n=uVeWFUw)_j|ySA=odk>Bl+L!O}GPPCFezCJF&qshM~yM1fLWzK%QE z+0zK2uk6kr8=tf6mTQJBI7PGEM2ejOY#)Rs|_H)q?&FCytg(nE3_OU zPeh>tygeRML_ogIrxq?_pN=0HOx zD#)B0he!BKMWGy6e8vns$`Y%(V{N(O+;OuLc6xSgR&^>XRZi&ODAiWb|deG^jCQRm~;qYeU7`8 zxEocVnWK2L@cKBV%IYERW3ruxOm?~EWPZ;J8J){!Z5`HGoGjU?p>@vp5vki59$Xm9 zhzlbg0+DD!v+>0vXP{*Wg;Ppmbc~=Uo4UR^N!Y<>-gj6|`Sy~R16US%iBnn;o=^lm z@3FH;T<*4b%w`}PYgd4F(Hb;1i9A*tRrF?JBh_Bu0ZrKD+lqWv7PSLdTQ<9l zF40J!K`|l)OBge6VFB|Tsz#Bq#c)# zlbpSP`mD${cVCX~u#qm_gM{#z+*W+Ki}r#EX%dx%#saX<;o4q=z6YAa{-6NX_h2Hz z#hl&~T`6;3Pmj5oAwOM|S#V5$i;*uuhS9#E;h%d(XfWHL2?yNEj4BWTcSmz zJ_;dFx86|evro96)*Hf#<=JTUj-2CI-i^Y3E)Z(>;$*;$oSll%szU3f=s|mSD!meU zAkh+;O{aKPEFG$4aySu$cf1nHpk&^=fthJflhV0~j%=f+R-cv_OG1Hya(eoRu2AM7 zym>SebC7g%mP#%Vsiv4jm;5e$rp6Z)B{~SeOUP6Jqv>Gd5DJ-lU$)rE*bBSp2#)1D z^)eWuI5z?8brC4Dcl25(J?Hg41V|4VFYrs;&9NraVlaa+pcaG@IJY%grt>voKer~Q zm%_I9s#Yu_Yo|{ZkL+za#3MQY{qsDfh$y-5Mwp+Q4fs-|*qjfi9HNa_KXq5M^hxCl z_IHwwwlFlej2V4LgvTRGk71I0naav7p4^hT;OlWhd)L(cC^S8L>I4uv#Z-aBvCign zOkVIKgD8S2M}1Ins!)>YZ&N#5MJJyX8^ol`kn%R5^xMpPnX{9xfuV9P3-zpDF2$rK zY9NRaU|G|X=gvK`3l^*HVxvQ4$LAuV$S?)O4-aC)%ORcL6M!U+l7{iSdcs7>_^?d< zoeP=(1i{KZQ*Cu~RuSqr(^>Lg$l;j|<$D@hA!b}7TgGn&e z@FE8Xb17WQP_+ZWv*yCLnvdX?v6Bbv9qIFVVE%e+mNz_K%z@MG3DC0cUYgr^!A9X) zyK@D;7iL1Q#_&oBA2fmniVEsHm0J>tLJyS<^@^%dA$E3EXIs;!Z=kz&{R#*JFk0^0^4EUhS$o14n^G~qxLOiZVTLdWqH(3Of{Dm*9?RjJ3GE1M+u$gU=4jfs!kN^*B3{$$W8jfw7Q0QfP?< zdgx8e3&w)3tSNy>-+Y3EEU4U+rPVc0u$g_{aDiL4SW5JJE+fi^I>|e-3bqp#5)WDL z3ijw|iomak-<)hoJWlo}dTmO`n9tmi+u!IYv5T3oxIr$ZQ`;lRhLhhAvo&c@)`S;r{FQ0z&@n(tG~cORY!1n@fbUn_SyDpw5-ROq(&A&hVr~CJawW1 zSA;}J9Ry^oMQrZLIA92?6A(U>0o3%gVUL;ecJ~kU~}@KgA2NmfrSZB|?*q zNB{|#sc@UOKu_2vqBXGSHNG*5XZ%uf*#@X2!Bd!py=t4KLL6qXx63LHG~E?>G7)v` z0ZjWk?onGy+AqM6XkMz`)g{TIs^3mD0?VY?Ts%=e1#lZQI>RzKV5rt^>*xm zgxa+q_CsImtQ7JWq{m$~XUCZN@=;VD=`D(vjTzSV{UT;EvkA|bCpainA9Ycc38TlA ztockZ8aCEw4u#N6>hNR_mDrFKmeFOwyv~G@qSJgGM~{yyr~_XFuE4q5tA3^|7#eqE zk-68@hA@kY&yh422A}#MXjSja>?E#u{ExVFQ>_Ap$tVE{*@Vyly&$GR@TE9qK1Qo$D%e}gb zsg2l?tit!e`pD0&qS9>4^b+Q%F0((u;h!R0%N2&go+NT{c$FcGaq*CKni~U~`YE@v z7n)#^Pwyxo)idr!+Vp)(u&JS-~o%GxvPj|sFN3B%J01lM7OE8cbgm|0}_hxMlouh zrlMBeq!WpNTop_}aihavJ|d|=A>Ut2#D(&+fZ`Ro=q$K>HS>aG0B~0sBP&Z-%pC@% z?jG#8i68faTa(x;B4q4?^?2fT>*%&})nevawqD?&_&P}E8fc#FRjswF(V>FY2#(y5 z>v39^`p!ulxoqJJJVdKoL!*d4(edu8LFon7ybiJHX;Y;)gVhUD*V)4Hp3gHI$I`6I z03IeH*mH1PR35+1lLw2h$h{d*{e`5`kV=WAY4C6hIKGN#*9B5UO|S!0E(3QVQ}^M@ z!-eZ<=hjJ|c;>;Xsi23uPkN0NFIDD%Yqt7vQgUTe!7J8iUzZb_V8^L_%+qS+)$81C zXo5(?WAzwG0XLAL%;8O38NMLjXaVBhO%p0>vj(rm1{y)!f#MMWtI8(dH7zwMqug_S z)EV6)7W=$%Z8W6z$<>q^9Wh{TU?)7L&%3xys{qPmeuP-y;JC$w?YgcMY5J0~RqOZ9#jIo$!{+^fY7Lr*-6w zq>_VHCDy3hWwyLGR#K2Y3P#UKB|vn|nI8Cin`fY^=#X<$`P8I%bM&;{oha4L4u4@yYnB*W`ydfna8Q)~})M&9P^(kW$XCul24 z1jKt0G6hu;$=O_X^s60c93g=!cy*2RQjS_wJ+z0ZpKwtJDC(PtZ0~_i}0{Cm9a6ARFc{H-XvWt7~IbC@vnP(uk zOfaK9OM9=MzdM$foUYJ4C^E~@=@2Gr*y^U4Hx`~lz=^8g})I}C(;IlU;1k(`_8-j3M z@N!QKi(1y6__$6x?37R$Dl;NftiOH~cW8U^$Qf4icqD8bd3a^}ZH6xkHVC0Jypg)o z)fFRA$x?;|sMGT%Wi2{YQDAF@9VQCOvwP!n9w-T?$2=Oh7&Ie_c1ux{O1?ZZX@&)B zhJ>C%IomaL2R7QbnZW5}K-{_sYtVlEmhB@l?;L>@XiVoTV^G&$u(5DigsHJiu4*(R0ARekFawT zg71Z%Nvw<4S!TTOddFucO{mt$vW-uh;dEuX$F2Rb2Ls%BMOhTavONh^^xdJW)>{#l zDte|nhR})6llomoIpL*VQsGl_Xs+COG=Z*{?F1fp;q5pKm?}t%6sN*^pt7E)iy0E~ z&=a1Fzj$bRp52_CyGq~i?Uz7%+lQ^rAfxT@wdo38Dg81Wvzk$$LV00oqFhj zC9G1`teqK(ue-oaNTav8`eGt#NfszqtevhM0w`~vY~P~+)IJT5osJ*&$BKGNI8!*I99l^`daSbUclBsK(0Trke*H~K8Os9 z_PKtT?BglaQ}wiYO4zPJ_x4@5z|K5%Nmj)!4#Y#1;ZoXrQf>noIy85h1tuO5ne&hb ztcDMXQjPd#ndO#^4Y4#b{A}N!_+ZCA(|tRbxMd6i8%i&!dO48hjiBxmbkuw!VxWXP z%1#v`_Xf_8gaZ+N7J6h4-3NpA2xkwgW&@STdBYbjS>RCrgWI zfj+pi@6v9%D)-TyNlv{QcX?L5dhl+~2u;|{9Pepc+tdv(GL^w7=|jsp+tVQB^0MZj zR%YTE>@In<($($w5L5Z~GLG?XihN>xWFcb(Yssg32yN zMWE>zzSoOsO2m>7m|Na5=UHSuJfTgGV13is8s~Yq4pI1QI^1jareX$_$JN6wFbz*1 z78_*S+%vK_A^x6)tmhlY%ly;RJ;34iqS0Zxw-dSF8L?#tA(}LB|_{D8FJfueBA)AV; z_U$3`?gyqGrkeCjk$1EJs~{y`AMi;D?@U;&y_NG|dcNzL*fH;}R61_pHo4MO1~&On zXHTscM~5GTG`6!lnI_Xy3cV#}XJ->ep?bp^+{~|Ltxs*eB7!%>hq}>53T`a<9uPd< ze$iXUP{MI9NV~N$G|Oq*o5f|GFX7PkNtHy_<9gj1;47F>JyO+|@fzML7I>#EW#*1i zvp_(!SJV{0*PR9F+LF@L2&u${M)bb%@u|t3@`#^BcL@{R);3r=hQJUUm+G;zKh4`U z7CivN6kM!o5iuy~wr#y2h(@cE+MBV~O5ITJd+7O!xJLToS(dXdc`{Uuqe*Nm5jg^C zn#gIy9LcBxfR${{y?D2KWh4)5>kLY2(46?JE@4r-9!3u5$>S{CBqQQXRVG;(3cH2` zm1e}P>ZR9@p#s=+2&~uPZTo9%j%uuJ_69ZCeyOcTJG4^9I7mzeAqLi>vIyh(pu8Wj z`dtX}^$`|7jvjy0yW$P`@`SuzV7e_)z!(_@CKx-X3>{s0`=RuL=*r6ZZLKU`NsJmp zIAnr$dO|-qF?_{6D+Ba4UY5r}F8&D+ix+JJ%~N)#pX4QHZGoDEgM7x9=j z+XDem24Py!pS(01uK;L9#=d*3*bLqn73PB_z8c^t4GmTSh-Arfz>-zt!q2l$kP(n% z>lr@ZR(k^aRAq2AwR|gw%5g}|pr8ktfGVEyJek`?u4fj$?-gsB=)F3I3i{v$JkDF#gR~=aIui-A^Fr8d70;}GP;VF3hjP|v zU)q{4_ck>|P7-)LwpQ~;E)E`;ldLcblP@fJ%VsLo2GRE68Y@<>^|gr+$MdB7kRG6upcYQo!Q#6?;)@)Y za^bw`UgXA>H&BPWxbhO;%_u3oi8(CuHIFDDc{b@1hL3Zp-NII#9+C@qmIr9mX}pY; zL3o`H94xs;fM~4FI?yA0XynynC})nrR}630PM{v*N!VcxMQJ3@T_mhdEwN=Ik`*c8 z49bN)w3NDitzuD4&3tYiv-4IJ#T33g;@t5M!RjFuw8(S9cvp zI8e(Yj&240KM{2s?5AiAq$tD#)6a5pHW7+Nzn^$c3H*q$J}5c_gCQt?*o;Cl&Jw8@eqiy1HG z6h|74)@<>nNwk#QDHS%lDz0e(`W?NgVGWgVr_+E|v$sTYidIc@s5p8W&QIPhzSUO> z0NL^g7dom{YTu*rxe0Co;6%W@xY36Ddj|o`=V8~W{!)Wu+%G7$FPM;FJNaF}xXzm< zz`f1i3mPcGM_s44@i7q}v{afJ-;9nP|DK_6Otg!Y#R6R z05{h<$spq0#pH=1)(jD&2%55vwlwM0cyog2p#)B4=B`4a0_ZG@Z+T|cACMGKYBOnA zPrbsH=B>vA!_L`-Aj0tiDy~P`i+2f!w}fB54ka63Vs$I@tT%n}(x1B7#i6NgS2HcS z#j;~_X-))->mh=p=Y!G zpn25>!pR9$?}c0D>r{KI(XWiCUEyB5=6mQOR#x$_nbb-V7sqZ1`dE0k4k7|tvd4-k z(KzERl#ips+%Uvbe8zVWCjv-mC;s@&3nJjBH9WrOq_RBg${Nk2*KpHRF21|8FZ%81 zslZcBE8=+xD?3cS3LZEY?^Y`WCZsCj0*Luq_M{$y#si6sbBScrq`c!QHb0q32Ys=R zG;hfGEy=M0Yt5m&Cjp|boyeNvhP?d5dS^H={C;l>K_a;3ftnLWB9uDV$zHCmnE?DN={(wNxMKLrGjXfEkj0di)CkoZ3(HU%dm^@nX6lg_C~&yTc1{pm zKPH_!dToYBoaEw`%;~RXXpk&{I`i48w%_Sr5b-t9g4jj1n5z)Wt(Fq$?qo*J%@Kbu z5EK{^Q~cP}=P@R@MpD|SznLJrLLzymB-=D%PR<&YniZ5W?Yc)2enJb(w;4`=VVDp7 zCEAmwS10n~dVy7?<6h%48Fm(?1@aB$agoId45v-vvr%1)eO7uB^=Lx_`UNsQ3qrM& z^^9W9t=O(i0obRg+4S&Ba%a@OWrYx#7l&tJl*3PNU0ORf5N|9yt26 z#R0m|?K&2*JcOQmq1=>D5`uVpwUFRN$uG9ep~odzSC~WS`9WnWfq7A|qdjISv2ig> ze{E>V6O?)rIZ26o&3L3?3NY}lOGI`LM^Il8>v+7)YK13Qz#bOIvE(8*k{t3N6$T=9 z-bqTkDZ5GX=Htg;E?P28L6x|MH^41~j$$t-U;&+jc&t8lnSpl;GB4? z;_1b$+^2?O*`P)!QL!&$GbXt8idJeuX|6Meo%=v*O_uIaB0jhBSFMU(x|60bF9ydM zpc%KR_~qkmTrj9!*lnBE*2CDBT4|SA_GTQ9(2*0pH=NrtS0_3%9e~go{Y2fcy>Hyi zFViN6_^ER&LIL9_25d14Bb=Npn}WJn+)j&Yd_siY_aO__?t~1uDHCJkiU>$3Orlw5 z7y?t?Om5`3GI(haNqDRxBUeAj;sJaQmgF(+opi{11r}E+VQSnyhI-44E2@Z4`VfV% zxBL7CwAxn?2f$ob%-nY(v89dV@c}x)yhUX1cmq2fhDb|gB|QWj`Ydb8i(-aHJz!xs zFoG^#0g-UJpS&m7!n(>#Jkd19!hDaef>!d)JG?>>mf}TH>o6iIc!9y(UPh2Z!{+gf zE}5^w$2>`!noK!sH``h?8kZ?a-b$H4lK`I^1k5g&BsRB8LsRte!zh;6Q=`YtP?o)w-)<};FgGz8#&mp~Oe1+PL$*dQwofjnGBIs2?89CfLr?zw3f;(PQGwwO&0=Ppj#kS6Yi zyUQb26zrD72i7MH%%qC6-d~8>l#t~~HyHXlM z2v1gNfSaT(ygKpe8&RW-J_v%69FH1yk%(z@mgkdf0SE3|g9fD}6XK}!=G_HMS*S|y zFadbvA$8ot(_yA`bWlFD+>VVF76ZUbpVqv}sU;*oavzU@)qC$$)$obbLoneTrE#2I zlU_gcC?Q@QEfR`M!F96cHy3jfZMcetJsj|Ev8Ii#&`e6&gcEmo(~c12T9|f$(I@AL z9-SikrWqn9YNL=y@pH4psh2hfiz2x=t_E4XO)PM{Z@0tA&qMgpp3*!;B(Kbqi9_Hn z$q>s;(1wcgHZK@vw9siFftk%J^CT)gyjb;}r9lU2E8EvM!V8z9?_j)BEzM+_g*7iA z^xjUrhg1BVX;kQ$D?WeI!J1GBn24^F^#cf)d4Je zmR9p23sTmzfkyL0_fllSwG(~RrCN`O)l7z5OJKuab5KszwQxmJ4>^%PB27%FhXRR0 z;zy(dl#70<+9pOL(tLxC{bIHIW|cNc4suT1rLQ4rob%ONo_WlnQ|7U%ga*B5Y~h($ z)x%=E3029!9%IV&&M9+RwUE6yp(o_AHa;71!{$R|bPY(EIl#x7&<@Ge2JowglTu9I zB;%7BL`px7-A6kFdYLVzO;^ykPgD)Z(XO8mr@WJ5inF);c$Q3$TU5H!AA!xpp6R5N zHE-F13))+H?qCgX0P(Jl$Xv*LET*68X-chD!E(mi-mTpFzZd!U|KI=o^Y8aRCpfy) literal 0 HcmV?d00001 diff --git a/vendor/golang.org/x/crypto/sha3/xor.go b/vendor/golang.org/x/crypto/sha3/xor.go new file mode 100644 index 0000000..46a0d63 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor.go @@ -0,0 +1,16 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64,!386,!ppc64le appengine + +package sha3 + +var ( + xorIn = xorInGeneric + copyOut = copyOutGeneric + xorInUnaligned = xorInGeneric + copyOutUnaligned = copyOutGeneric +) + +const xorImplementationUnaligned = "generic" diff --git a/vendor/golang.org/x/crypto/sha3/xor_generic.go b/vendor/golang.org/x/crypto/sha3/xor_generic.go new file mode 100644 index 0000000..fd35f02 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor_generic.go @@ -0,0 +1,28 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +import "encoding/binary" + +// xorInGeneric xors the bytes in buf into the state; it +// makes no non-portable assumptions about memory layout +// or alignment. +func xorInGeneric(d *state, buf []byte) { + n := len(buf) / 8 + + for i := 0; i < n; i++ { + a := binary.LittleEndian.Uint64(buf) + d.a[i] ^= a + buf = buf[8:] + } +} + +// copyOutGeneric copies ulint64s to a byte buffer. +func copyOutGeneric(d *state, b []byte) { + for i := 0; len(b) >= 8; i++ { + binary.LittleEndian.PutUint64(b, d.a[i]) + b = b[8:] + } +} diff --git a/vendor/golang.org/x/crypto/sha3/xor_unaligned.go b/vendor/golang.org/x/crypto/sha3/xor_unaligned.go new file mode 100644 index 0000000..929a486 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor_unaligned.go @@ -0,0 +1,58 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64 386 ppc64le +// +build !appengine + +package sha3 + +import "unsafe" + +func xorInUnaligned(d *state, buf []byte) { + bw := (*[maxRate / 8]uint64)(unsafe.Pointer(&buf[0])) + n := len(buf) + if n >= 72 { + d.a[0] ^= bw[0] + d.a[1] ^= bw[1] + d.a[2] ^= bw[2] + d.a[3] ^= bw[3] + d.a[4] ^= bw[4] + d.a[5] ^= bw[5] + d.a[6] ^= bw[6] + d.a[7] ^= bw[7] + d.a[8] ^= bw[8] + } + if n >= 104 { + d.a[9] ^= bw[9] + d.a[10] ^= bw[10] + d.a[11] ^= bw[11] + d.a[12] ^= bw[12] + } + if n >= 136 { + d.a[13] ^= bw[13] + d.a[14] ^= bw[14] + d.a[15] ^= bw[15] + d.a[16] ^= bw[16] + } + if n >= 144 { + d.a[17] ^= bw[17] + } + if n >= 168 { + d.a[18] ^= bw[18] + d.a[19] ^= bw[19] + d.a[20] ^= bw[20] + } +} + +func copyOutUnaligned(d *state, buf []byte) { + ab := (*[maxRate]uint8)(unsafe.Pointer(&d.a[0])) + copy(buf, ab[:]) +} + +var ( + xorIn = xorInUnaligned + copyOut = copyOutUnaligned +) + +const xorImplementationUnaligned = "unaligned" diff --git a/vendor/golang.org/x/crypto/ssh/agent/client.go b/vendor/golang.org/x/crypto/ssh/agent/client.go new file mode 100644 index 0000000..ecfd7c5 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/client.go @@ -0,0 +1,659 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package agent implements the ssh-agent protocol, and provides both +// a client and a server. The client can talk to a standard ssh-agent +// that uses UNIX sockets, and one could implement an alternative +// ssh-agent process using the sample server. +// +// References: +// [PROTOCOL.agent]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.agent?rev=HEAD +package agent // import "golang.org/x/crypto/ssh/agent" + +import ( + "bytes" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rsa" + "encoding/base64" + "encoding/binary" + "errors" + "fmt" + "io" + "math/big" + "sync" + + "golang.org/x/crypto/ed25519" + "golang.org/x/crypto/ssh" +) + +// Agent represents the capabilities of an ssh-agent. +type Agent interface { + // List returns the identities known to the agent. + List() ([]*Key, error) + + // Sign has the agent sign the data using a protocol 2 key as defined + // in [PROTOCOL.agent] section 2.6.2. + Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) + + // Add adds a private key to the agent. + Add(key AddedKey) error + + // Remove removes all identities with the given public key. + Remove(key ssh.PublicKey) error + + // RemoveAll removes all identities. + RemoveAll() error + + // Lock locks the agent. Sign and Remove will fail, and List will empty an empty list. + Lock(passphrase []byte) error + + // Unlock undoes the effect of Lock + Unlock(passphrase []byte) error + + // Signers returns signers for all the known keys. + Signers() ([]ssh.Signer, error) +} + +// AddedKey describes an SSH key to be added to an Agent. +type AddedKey struct { + // PrivateKey must be a *rsa.PrivateKey, *dsa.PrivateKey or + // *ecdsa.PrivateKey, which will be inserted into the agent. + PrivateKey interface{} + // Certificate, if not nil, is communicated to the agent and will be + // stored with the key. + Certificate *ssh.Certificate + // Comment is an optional, free-form string. + Comment string + // LifetimeSecs, if not zero, is the number of seconds that the + // agent will store the key for. + LifetimeSecs uint32 + // ConfirmBeforeUse, if true, requests that the agent confirm with the + // user before each use of this key. + ConfirmBeforeUse bool +} + +// See [PROTOCOL.agent], section 3. +const ( + agentRequestV1Identities = 1 + agentRemoveAllV1Identities = 9 + + // 3.2 Requests from client to agent for protocol 2 key operations + agentAddIdentity = 17 + agentRemoveIdentity = 18 + agentRemoveAllIdentities = 19 + agentAddIdConstrained = 25 + + // 3.3 Key-type independent requests from client to agent + agentAddSmartcardKey = 20 + agentRemoveSmartcardKey = 21 + agentLock = 22 + agentUnlock = 23 + agentAddSmartcardKeyConstrained = 26 + + // 3.7 Key constraint identifiers + agentConstrainLifetime = 1 + agentConstrainConfirm = 2 +) + +// maxAgentResponseBytes is the maximum agent reply size that is accepted. This +// is a sanity check, not a limit in the spec. +const maxAgentResponseBytes = 16 << 20 + +// Agent messages: +// These structures mirror the wire format of the corresponding ssh agent +// messages found in [PROTOCOL.agent]. + +// 3.4 Generic replies from agent to client +const agentFailure = 5 + +type failureAgentMsg struct{} + +const agentSuccess = 6 + +type successAgentMsg struct{} + +// See [PROTOCOL.agent], section 2.5.2. +const agentRequestIdentities = 11 + +type requestIdentitiesAgentMsg struct{} + +// See [PROTOCOL.agent], section 2.5.2. +const agentIdentitiesAnswer = 12 + +type identitiesAnswerAgentMsg struct { + NumKeys uint32 `sshtype:"12"` + Keys []byte `ssh:"rest"` +} + +// See [PROTOCOL.agent], section 2.6.2. +const agentSignRequest = 13 + +type signRequestAgentMsg struct { + KeyBlob []byte `sshtype:"13"` + Data []byte + Flags uint32 +} + +// See [PROTOCOL.agent], section 2.6.2. + +// 3.6 Replies from agent to client for protocol 2 key operations +const agentSignResponse = 14 + +type signResponseAgentMsg struct { + SigBlob []byte `sshtype:"14"` +} + +type publicKey struct { + Format string + Rest []byte `ssh:"rest"` +} + +// Key represents a protocol 2 public key as defined in +// [PROTOCOL.agent], section 2.5.2. +type Key struct { + Format string + Blob []byte + Comment string +} + +func clientErr(err error) error { + return fmt.Errorf("agent: client error: %v", err) +} + +// String returns the storage form of an agent key with the format, base64 +// encoded serialized key, and the comment if it is not empty. +func (k *Key) String() string { + s := string(k.Format) + " " + base64.StdEncoding.EncodeToString(k.Blob) + + if k.Comment != "" { + s += " " + k.Comment + } + + return s +} + +// Type returns the public key type. +func (k *Key) Type() string { + return k.Format +} + +// Marshal returns key blob to satisfy the ssh.PublicKey interface. +func (k *Key) Marshal() []byte { + return k.Blob +} + +// Verify satisfies the ssh.PublicKey interface. +func (k *Key) Verify(data []byte, sig *ssh.Signature) error { + pubKey, err := ssh.ParsePublicKey(k.Blob) + if err != nil { + return fmt.Errorf("agent: bad public key: %v", err) + } + return pubKey.Verify(data, sig) +} + +type wireKey struct { + Format string + Rest []byte `ssh:"rest"` +} + +func parseKey(in []byte) (out *Key, rest []byte, err error) { + var record struct { + Blob []byte + Comment string + Rest []byte `ssh:"rest"` + } + + if err := ssh.Unmarshal(in, &record); err != nil { + return nil, nil, err + } + + var wk wireKey + if err := ssh.Unmarshal(record.Blob, &wk); err != nil { + return nil, nil, err + } + + return &Key{ + Format: wk.Format, + Blob: record.Blob, + Comment: record.Comment, + }, record.Rest, nil +} + +// client is a client for an ssh-agent process. +type client struct { + // conn is typically a *net.UnixConn + conn io.ReadWriter + // mu is used to prevent concurrent access to the agent + mu sync.Mutex +} + +// NewClient returns an Agent that talks to an ssh-agent process over +// the given connection. +func NewClient(rw io.ReadWriter) Agent { + return &client{conn: rw} +} + +// call sends an RPC to the agent. On success, the reply is +// unmarshaled into reply and replyType is set to the first byte of +// the reply, which contains the type of the message. +func (c *client) call(req []byte) (reply interface{}, err error) { + c.mu.Lock() + defer c.mu.Unlock() + + msg := make([]byte, 4+len(req)) + binary.BigEndian.PutUint32(msg, uint32(len(req))) + copy(msg[4:], req) + if _, err = c.conn.Write(msg); err != nil { + return nil, clientErr(err) + } + + var respSizeBuf [4]byte + if _, err = io.ReadFull(c.conn, respSizeBuf[:]); err != nil { + return nil, clientErr(err) + } + respSize := binary.BigEndian.Uint32(respSizeBuf[:]) + if respSize > maxAgentResponseBytes { + return nil, clientErr(err) + } + + buf := make([]byte, respSize) + if _, err = io.ReadFull(c.conn, buf); err != nil { + return nil, clientErr(err) + } + reply, err = unmarshal(buf) + if err != nil { + return nil, clientErr(err) + } + return reply, err +} + +func (c *client) simpleCall(req []byte) error { + resp, err := c.call(req) + if err != nil { + return err + } + if _, ok := resp.(*successAgentMsg); ok { + return nil + } + return errors.New("agent: failure") +} + +func (c *client) RemoveAll() error { + return c.simpleCall([]byte{agentRemoveAllIdentities}) +} + +func (c *client) Remove(key ssh.PublicKey) error { + req := ssh.Marshal(&agentRemoveIdentityMsg{ + KeyBlob: key.Marshal(), + }) + return c.simpleCall(req) +} + +func (c *client) Lock(passphrase []byte) error { + req := ssh.Marshal(&agentLockMsg{ + Passphrase: passphrase, + }) + return c.simpleCall(req) +} + +func (c *client) Unlock(passphrase []byte) error { + req := ssh.Marshal(&agentUnlockMsg{ + Passphrase: passphrase, + }) + return c.simpleCall(req) +} + +// List returns the identities known to the agent. +func (c *client) List() ([]*Key, error) { + // see [PROTOCOL.agent] section 2.5.2. + req := []byte{agentRequestIdentities} + + msg, err := c.call(req) + if err != nil { + return nil, err + } + + switch msg := msg.(type) { + case *identitiesAnswerAgentMsg: + if msg.NumKeys > maxAgentResponseBytes/8 { + return nil, errors.New("agent: too many keys in agent reply") + } + keys := make([]*Key, msg.NumKeys) + data := msg.Keys + for i := uint32(0); i < msg.NumKeys; i++ { + var key *Key + var err error + if key, data, err = parseKey(data); err != nil { + return nil, err + } + keys[i] = key + } + return keys, nil + case *failureAgentMsg: + return nil, errors.New("agent: failed to list keys") + } + panic("unreachable") +} + +// Sign has the agent sign the data using a protocol 2 key as defined +// in [PROTOCOL.agent] section 2.6.2. +func (c *client) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) { + req := ssh.Marshal(signRequestAgentMsg{ + KeyBlob: key.Marshal(), + Data: data, + }) + + msg, err := c.call(req) + if err != nil { + return nil, err + } + + switch msg := msg.(type) { + case *signResponseAgentMsg: + var sig ssh.Signature + if err := ssh.Unmarshal(msg.SigBlob, &sig); err != nil { + return nil, err + } + + return &sig, nil + case *failureAgentMsg: + return nil, errors.New("agent: failed to sign challenge") + } + panic("unreachable") +} + +// unmarshal parses an agent message in packet, returning the parsed +// form and the message type of packet. +func unmarshal(packet []byte) (interface{}, error) { + if len(packet) < 1 { + return nil, errors.New("agent: empty packet") + } + var msg interface{} + switch packet[0] { + case agentFailure: + return new(failureAgentMsg), nil + case agentSuccess: + return new(successAgentMsg), nil + case agentIdentitiesAnswer: + msg = new(identitiesAnswerAgentMsg) + case agentSignResponse: + msg = new(signResponseAgentMsg) + case agentV1IdentitiesAnswer: + msg = new(agentV1IdentityMsg) + default: + return nil, fmt.Errorf("agent: unknown type tag %d", packet[0]) + } + if err := ssh.Unmarshal(packet, msg); err != nil { + return nil, err + } + return msg, nil +} + +type rsaKeyMsg struct { + Type string `sshtype:"17|25"` + N *big.Int + E *big.Int + D *big.Int + Iqmp *big.Int // IQMP = Inverse Q Mod P + P *big.Int + Q *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type dsaKeyMsg struct { + Type string `sshtype:"17|25"` + P *big.Int + Q *big.Int + G *big.Int + Y *big.Int + X *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type ecdsaKeyMsg struct { + Type string `sshtype:"17|25"` + Curve string + KeyBytes []byte + D *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type ed25519KeyMsg struct { + Type string `sshtype:"17|25"` + Pub []byte + Priv []byte + Comments string + Constraints []byte `ssh:"rest"` +} + +// Insert adds a private key to the agent. +func (c *client) insertKey(s interface{}, comment string, constraints []byte) error { + var req []byte + switch k := s.(type) { + case *rsa.PrivateKey: + if len(k.Primes) != 2 { + return fmt.Errorf("agent: unsupported RSA key with %d primes", len(k.Primes)) + } + k.Precompute() + req = ssh.Marshal(rsaKeyMsg{ + Type: ssh.KeyAlgoRSA, + N: k.N, + E: big.NewInt(int64(k.E)), + D: k.D, + Iqmp: k.Precomputed.Qinv, + P: k.Primes[0], + Q: k.Primes[1], + Comments: comment, + Constraints: constraints, + }) + case *dsa.PrivateKey: + req = ssh.Marshal(dsaKeyMsg{ + Type: ssh.KeyAlgoDSA, + P: k.P, + Q: k.Q, + G: k.G, + Y: k.Y, + X: k.X, + Comments: comment, + Constraints: constraints, + }) + case *ecdsa.PrivateKey: + nistID := fmt.Sprintf("nistp%d", k.Params().BitSize) + req = ssh.Marshal(ecdsaKeyMsg{ + Type: "ecdsa-sha2-" + nistID, + Curve: nistID, + KeyBytes: elliptic.Marshal(k.Curve, k.X, k.Y), + D: k.D, + Comments: comment, + Constraints: constraints, + }) + case *ed25519.PrivateKey: + req = ssh.Marshal(ed25519KeyMsg{ + Type: ssh.KeyAlgoED25519, + Pub: []byte(*k)[32:], + Priv: []byte(*k), + Comments: comment, + Constraints: constraints, + }) + default: + return fmt.Errorf("agent: unsupported key type %T", s) + } + + // if constraints are present then the message type needs to be changed. + if len(constraints) != 0 { + req[0] = agentAddIdConstrained + } + + resp, err := c.call(req) + if err != nil { + return err + } + if _, ok := resp.(*successAgentMsg); ok { + return nil + } + return errors.New("agent: failure") +} + +type rsaCertMsg struct { + Type string `sshtype:"17|25"` + CertBytes []byte + D *big.Int + Iqmp *big.Int // IQMP = Inverse Q Mod P + P *big.Int + Q *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type dsaCertMsg struct { + Type string `sshtype:"17|25"` + CertBytes []byte + X *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type ecdsaCertMsg struct { + Type string `sshtype:"17|25"` + CertBytes []byte + D *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type ed25519CertMsg struct { + Type string `sshtype:"17|25"` + CertBytes []byte + Pub []byte + Priv []byte + Comments string + Constraints []byte `ssh:"rest"` +} + +// Add adds a private key to the agent. If a certificate is given, +// that certificate is added instead as public key. +func (c *client) Add(key AddedKey) error { + var constraints []byte + + if secs := key.LifetimeSecs; secs != 0 { + constraints = append(constraints, agentConstrainLifetime) + + var secsBytes [4]byte + binary.BigEndian.PutUint32(secsBytes[:], secs) + constraints = append(constraints, secsBytes[:]...) + } + + if key.ConfirmBeforeUse { + constraints = append(constraints, agentConstrainConfirm) + } + + if cert := key.Certificate; cert == nil { + return c.insertKey(key.PrivateKey, key.Comment, constraints) + } else { + return c.insertCert(key.PrivateKey, cert, key.Comment, constraints) + } +} + +func (c *client) insertCert(s interface{}, cert *ssh.Certificate, comment string, constraints []byte) error { + var req []byte + switch k := s.(type) { + case *rsa.PrivateKey: + if len(k.Primes) != 2 { + return fmt.Errorf("agent: unsupported RSA key with %d primes", len(k.Primes)) + } + k.Precompute() + req = ssh.Marshal(rsaCertMsg{ + Type: cert.Type(), + CertBytes: cert.Marshal(), + D: k.D, + Iqmp: k.Precomputed.Qinv, + P: k.Primes[0], + Q: k.Primes[1], + Comments: comment, + Constraints: constraints, + }) + case *dsa.PrivateKey: + req = ssh.Marshal(dsaCertMsg{ + Type: cert.Type(), + CertBytes: cert.Marshal(), + X: k.X, + Comments: comment, + Constraints: constraints, + }) + case *ecdsa.PrivateKey: + req = ssh.Marshal(ecdsaCertMsg{ + Type: cert.Type(), + CertBytes: cert.Marshal(), + D: k.D, + Comments: comment, + Constraints: constraints, + }) + case *ed25519.PrivateKey: + req = ssh.Marshal(ed25519CertMsg{ + Type: cert.Type(), + CertBytes: cert.Marshal(), + Pub: []byte(*k)[32:], + Priv: []byte(*k), + Comments: comment, + Constraints: constraints, + }) + default: + return fmt.Errorf("agent: unsupported key type %T", s) + } + + // if constraints are present then the message type needs to be changed. + if len(constraints) != 0 { + req[0] = agentAddIdConstrained + } + + signer, err := ssh.NewSignerFromKey(s) + if err != nil { + return err + } + if bytes.Compare(cert.Key.Marshal(), signer.PublicKey().Marshal()) != 0 { + return errors.New("agent: signer and cert have different public key") + } + + resp, err := c.call(req) + if err != nil { + return err + } + if _, ok := resp.(*successAgentMsg); ok { + return nil + } + return errors.New("agent: failure") +} + +// Signers provides a callback for client authentication. +func (c *client) Signers() ([]ssh.Signer, error) { + keys, err := c.List() + if err != nil { + return nil, err + } + + var result []ssh.Signer + for _, k := range keys { + result = append(result, &agentKeyringSigner{c, k}) + } + return result, nil +} + +type agentKeyringSigner struct { + agent *client + pub ssh.PublicKey +} + +func (s *agentKeyringSigner) PublicKey() ssh.PublicKey { + return s.pub +} + +func (s *agentKeyringSigner) Sign(rand io.Reader, data []byte) (*ssh.Signature, error) { + // The agent has its own entropy source, so the rand argument is ignored. + return s.agent.Sign(s.pub, data) +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/client_test.go b/vendor/golang.org/x/crypto/ssh/agent/client_test.go new file mode 100644 index 0000000..e33d471 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/client_test.go @@ -0,0 +1,343 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "bytes" + "crypto/rand" + "errors" + "net" + "os" + "os/exec" + "path/filepath" + "strconv" + "testing" + "time" + + "golang.org/x/crypto/ssh" +) + +// startAgent executes ssh-agent, and returns a Agent interface to it. +func startAgent(t *testing.T) (client Agent, socket string, cleanup func()) { + if testing.Short() { + // ssh-agent is not always available, and the key + // types supported vary by platform. + t.Skip("skipping test due to -short") + } + + bin, err := exec.LookPath("ssh-agent") + if err != nil { + t.Skip("could not find ssh-agent") + } + + cmd := exec.Command(bin, "-s") + out, err := cmd.Output() + if err != nil { + t.Fatalf("cmd.Output: %v", err) + } + + /* Output looks like: + + SSH_AUTH_SOCK=/tmp/ssh-P65gpcqArqvH/agent.15541; export SSH_AUTH_SOCK; + SSH_AGENT_PID=15542; export SSH_AGENT_PID; + echo Agent pid 15542; + */ + fields := bytes.Split(out, []byte(";")) + line := bytes.SplitN(fields[0], []byte("="), 2) + line[0] = bytes.TrimLeft(line[0], "\n") + if string(line[0]) != "SSH_AUTH_SOCK" { + t.Fatalf("could not find key SSH_AUTH_SOCK in %q", fields[0]) + } + socket = string(line[1]) + + line = bytes.SplitN(fields[2], []byte("="), 2) + line[0] = bytes.TrimLeft(line[0], "\n") + if string(line[0]) != "SSH_AGENT_PID" { + t.Fatalf("could not find key SSH_AGENT_PID in %q", fields[2]) + } + pidStr := line[1] + pid, err := strconv.Atoi(string(pidStr)) + if err != nil { + t.Fatalf("Atoi(%q): %v", pidStr, err) + } + + conn, err := net.Dial("unix", string(socket)) + if err != nil { + t.Fatalf("net.Dial: %v", err) + } + + ac := NewClient(conn) + return ac, socket, func() { + proc, _ := os.FindProcess(pid) + if proc != nil { + proc.Kill() + } + conn.Close() + os.RemoveAll(filepath.Dir(socket)) + } +} + +func testAgent(t *testing.T, key interface{}, cert *ssh.Certificate, lifetimeSecs uint32) { + agent, _, cleanup := startAgent(t) + defer cleanup() + + testAgentInterface(t, agent, key, cert, lifetimeSecs) +} + +func testKeyring(t *testing.T, key interface{}, cert *ssh.Certificate, lifetimeSecs uint32) { + a := NewKeyring() + testAgentInterface(t, a, key, cert, lifetimeSecs) +} + +func testAgentInterface(t *testing.T, agent Agent, key interface{}, cert *ssh.Certificate, lifetimeSecs uint32) { + signer, err := ssh.NewSignerFromKey(key) + if err != nil { + t.Fatalf("NewSignerFromKey(%T): %v", key, err) + } + // The agent should start up empty. + if keys, err := agent.List(); err != nil { + t.Fatalf("RequestIdentities: %v", err) + } else if len(keys) > 0 { + t.Fatalf("got %d keys, want 0: %v", len(keys), keys) + } + + // Attempt to insert the key, with certificate if specified. + var pubKey ssh.PublicKey + if cert != nil { + err = agent.Add(AddedKey{ + PrivateKey: key, + Certificate: cert, + Comment: "comment", + LifetimeSecs: lifetimeSecs, + }) + pubKey = cert + } else { + err = agent.Add(AddedKey{PrivateKey: key, Comment: "comment", LifetimeSecs: lifetimeSecs}) + pubKey = signer.PublicKey() + } + if err != nil { + t.Fatalf("insert(%T): %v", key, err) + } + + // Did the key get inserted successfully? + if keys, err := agent.List(); err != nil { + t.Fatalf("List: %v", err) + } else if len(keys) != 1 { + t.Fatalf("got %v, want 1 key", keys) + } else if keys[0].Comment != "comment" { + t.Fatalf("key comment: got %v, want %v", keys[0].Comment, "comment") + } else if !bytes.Equal(keys[0].Blob, pubKey.Marshal()) { + t.Fatalf("key mismatch") + } + + // Can the agent make a valid signature? + data := []byte("hello") + sig, err := agent.Sign(pubKey, data) + if err != nil { + t.Fatalf("Sign(%s): %v", pubKey.Type(), err) + } + + if err := pubKey.Verify(data, sig); err != nil { + t.Fatalf("Verify(%s): %v", pubKey.Type(), err) + } + + // If the key has a lifetime, is it removed when it should be? + if lifetimeSecs > 0 { + time.Sleep(time.Second*time.Duration(lifetimeSecs) + 100*time.Millisecond) + keys, err := agent.List() + if err != nil { + t.Fatalf("List: %v", err) + } + if len(keys) > 0 { + t.Fatalf("key not expired") + } + } + +} + +func TestAgent(t *testing.T) { + for _, keyType := range []string{"rsa", "dsa", "ecdsa", "ed25519"} { + testAgent(t, testPrivateKeys[keyType], nil, 0) + testKeyring(t, testPrivateKeys[keyType], nil, 1) + } +} + +func TestCert(t *testing.T) { + cert := &ssh.Certificate{ + Key: testPublicKeys["rsa"], + ValidBefore: ssh.CertTimeInfinity, + CertType: ssh.UserCert, + } + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + + testAgent(t, testPrivateKeys["rsa"], cert, 0) + testKeyring(t, testPrivateKeys["rsa"], cert, 1) +} + +// netPipe is analogous to net.Pipe, but it uses a real net.Conn, and +// therefore is buffered (net.Pipe deadlocks if both sides start with +// a write.) +func netPipe() (net.Conn, net.Conn, error) { + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + return nil, nil, err + } + defer listener.Close() + c1, err := net.Dial("tcp", listener.Addr().String()) + if err != nil { + return nil, nil, err + } + + c2, err := listener.Accept() + if err != nil { + c1.Close() + return nil, nil, err + } + + return c1, c2, nil +} + +func TestAuth(t *testing.T) { + a, b, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + + defer a.Close() + defer b.Close() + + agent, _, cleanup := startAgent(t) + defer cleanup() + + if err := agent.Add(AddedKey{PrivateKey: testPrivateKeys["rsa"], Comment: "comment"}); err != nil { + t.Errorf("Add: %v", err) + } + + serverConf := ssh.ServerConfig{} + serverConf.AddHostKey(testSigners["rsa"]) + serverConf.PublicKeyCallback = func(c ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) { + if bytes.Equal(key.Marshal(), testPublicKeys["rsa"].Marshal()) { + return nil, nil + } + + return nil, errors.New("pubkey rejected") + } + + go func() { + conn, _, _, err := ssh.NewServerConn(a, &serverConf) + if err != nil { + t.Fatalf("Server: %v", err) + } + conn.Close() + }() + + conf := ssh.ClientConfig{} + conf.Auth = append(conf.Auth, ssh.PublicKeysCallback(agent.Signers)) + conn, _, _, err := ssh.NewClientConn(b, "", &conf) + if err != nil { + t.Fatalf("NewClientConn: %v", err) + } + conn.Close() +} + +func TestLockClient(t *testing.T) { + agent, _, cleanup := startAgent(t) + defer cleanup() + testLockAgent(agent, t) +} + +func testLockAgent(agent Agent, t *testing.T) { + if err := agent.Add(AddedKey{PrivateKey: testPrivateKeys["rsa"], Comment: "comment 1"}); err != nil { + t.Errorf("Add: %v", err) + } + if err := agent.Add(AddedKey{PrivateKey: testPrivateKeys["dsa"], Comment: "comment dsa"}); err != nil { + t.Errorf("Add: %v", err) + } + if keys, err := agent.List(); err != nil { + t.Errorf("List: %v", err) + } else if len(keys) != 2 { + t.Errorf("Want 2 keys, got %v", keys) + } + + passphrase := []byte("secret") + if err := agent.Lock(passphrase); err != nil { + t.Errorf("Lock: %v", err) + } + + if keys, err := agent.List(); err != nil { + t.Errorf("List: %v", err) + } else if len(keys) != 0 { + t.Errorf("Want 0 keys, got %v", keys) + } + + signer, _ := ssh.NewSignerFromKey(testPrivateKeys["rsa"]) + if _, err := agent.Sign(signer.PublicKey(), []byte("hello")); err == nil { + t.Fatalf("Sign did not fail") + } + + if err := agent.Remove(signer.PublicKey()); err == nil { + t.Fatalf("Remove did not fail") + } + + if err := agent.RemoveAll(); err == nil { + t.Fatalf("RemoveAll did not fail") + } + + if err := agent.Unlock(nil); err == nil { + t.Errorf("Unlock with wrong passphrase succeeded") + } + if err := agent.Unlock(passphrase); err != nil { + t.Errorf("Unlock: %v", err) + } + + if err := agent.Remove(signer.PublicKey()); err != nil { + t.Fatalf("Remove: %v", err) + } + + if keys, err := agent.List(); err != nil { + t.Errorf("List: %v", err) + } else if len(keys) != 1 { + t.Errorf("Want 1 keys, got %v", keys) + } +} + +func TestAgentLifetime(t *testing.T) { + agent, _, cleanup := startAgent(t) + defer cleanup() + + for _, keyType := range []string{"rsa", "dsa", "ecdsa"} { + // Add private keys to the agent. + err := agent.Add(AddedKey{ + PrivateKey: testPrivateKeys[keyType], + Comment: "comment", + LifetimeSecs: 1, + }) + if err != nil { + t.Fatalf("add: %v", err) + } + // Add certs to the agent. + cert := &ssh.Certificate{ + Key: testPublicKeys[keyType], + ValidBefore: ssh.CertTimeInfinity, + CertType: ssh.UserCert, + } + cert.SignCert(rand.Reader, testSigners[keyType]) + err = agent.Add(AddedKey{ + PrivateKey: testPrivateKeys[keyType], + Certificate: cert, + Comment: "comment", + LifetimeSecs: 1, + }) + if err != nil { + t.Fatalf("add: %v", err) + } + } + time.Sleep(1100 * time.Millisecond) + if keys, err := agent.List(); err != nil { + t.Errorf("List: %v", err) + } else if len(keys) != 0 { + t.Errorf("Want 0 keys, got %v", len(keys)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/example_test.go b/vendor/golang.org/x/crypto/ssh/agent/example_test.go new file mode 100644 index 0000000..c1130f7 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/example_test.go @@ -0,0 +1,40 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent_test + +import ( + "log" + "os" + "net" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/agent" +) + +func ExampleClientAgent() { + // ssh-agent has a UNIX socket under $SSH_AUTH_SOCK + socket := os.Getenv("SSH_AUTH_SOCK") + conn, err := net.Dial("unix", socket) + if err != nil { + log.Fatalf("net.Dial: %v", err) + } + agentClient := agent.NewClient(conn) + config := &ssh.ClientConfig{ + User: "username", + Auth: []ssh.AuthMethod{ + // Use a callback rather than PublicKeys + // so we only consult the agent once the remote server + // wants it. + ssh.PublicKeysCallback(agentClient.Signers), + }, + } + + sshc, err := ssh.Dial("tcp", "localhost:22", config) + if err != nil { + log.Fatalf("Dial: %v", err) + } + // .. use sshc + sshc.Close() +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/forward.go b/vendor/golang.org/x/crypto/ssh/agent/forward.go new file mode 100644 index 0000000..fd24ba9 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/forward.go @@ -0,0 +1,103 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "errors" + "io" + "net" + "sync" + + "golang.org/x/crypto/ssh" +) + +// RequestAgentForwarding sets up agent forwarding for the session. +// ForwardToAgent or ForwardToRemote should be called to route +// the authentication requests. +func RequestAgentForwarding(session *ssh.Session) error { + ok, err := session.SendRequest("auth-agent-req@openssh.com", true, nil) + if err != nil { + return err + } + if !ok { + return errors.New("forwarding request denied") + } + return nil +} + +// ForwardToAgent routes authentication requests to the given keyring. +func ForwardToAgent(client *ssh.Client, keyring Agent) error { + channels := client.HandleChannelOpen(channelType) + if channels == nil { + return errors.New("agent: already have handler for " + channelType) + } + + go func() { + for ch := range channels { + channel, reqs, err := ch.Accept() + if err != nil { + continue + } + go ssh.DiscardRequests(reqs) + go func() { + ServeAgent(keyring, channel) + channel.Close() + }() + } + }() + return nil +} + +const channelType = "auth-agent@openssh.com" + +// ForwardToRemote routes authentication requests to the ssh-agent +// process serving on the given unix socket. +func ForwardToRemote(client *ssh.Client, addr string) error { + channels := client.HandleChannelOpen(channelType) + if channels == nil { + return errors.New("agent: already have handler for " + channelType) + } + conn, err := net.Dial("unix", addr) + if err != nil { + return err + } + conn.Close() + + go func() { + for ch := range channels { + channel, reqs, err := ch.Accept() + if err != nil { + continue + } + go ssh.DiscardRequests(reqs) + go forwardUnixSocket(channel, addr) + } + }() + return nil +} + +func forwardUnixSocket(channel ssh.Channel, addr string) { + conn, err := net.Dial("unix", addr) + if err != nil { + return + } + + var wg sync.WaitGroup + wg.Add(2) + go func() { + io.Copy(conn, channel) + conn.(*net.UnixConn).CloseWrite() + wg.Done() + }() + go func() { + io.Copy(channel, conn) + channel.CloseWrite() + wg.Done() + }() + + wg.Wait() + conn.Close() + channel.Close() +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/keyring.go b/vendor/golang.org/x/crypto/ssh/agent/keyring.go new file mode 100644 index 0000000..a6ba06a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/keyring.go @@ -0,0 +1,215 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "bytes" + "crypto/rand" + "crypto/subtle" + "errors" + "fmt" + "sync" + "time" + + "golang.org/x/crypto/ssh" +) + +type privKey struct { + signer ssh.Signer + comment string + expire *time.Time +} + +type keyring struct { + mu sync.Mutex + keys []privKey + + locked bool + passphrase []byte +} + +var errLocked = errors.New("agent: locked") + +// NewKeyring returns an Agent that holds keys in memory. It is safe +// for concurrent use by multiple goroutines. +func NewKeyring() Agent { + return &keyring{} +} + +// RemoveAll removes all identities. +func (r *keyring) RemoveAll() error { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return errLocked + } + + r.keys = nil + return nil +} + +// removeLocked does the actual key removal. The caller must already be holding the +// keyring mutex. +func (r *keyring) removeLocked(want []byte) error { + found := false + for i := 0; i < len(r.keys); { + if bytes.Equal(r.keys[i].signer.PublicKey().Marshal(), want) { + found = true + r.keys[i] = r.keys[len(r.keys)-1] + r.keys = r.keys[:len(r.keys)-1] + continue + } else { + i++ + } + } + + if !found { + return errors.New("agent: key not found") + } + return nil +} + +// Remove removes all identities with the given public key. +func (r *keyring) Remove(key ssh.PublicKey) error { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return errLocked + } + + return r.removeLocked(key.Marshal()) +} + +// Lock locks the agent. Sign and Remove will fail, and List will return an empty list. +func (r *keyring) Lock(passphrase []byte) error { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return errLocked + } + + r.locked = true + r.passphrase = passphrase + return nil +} + +// Unlock undoes the effect of Lock +func (r *keyring) Unlock(passphrase []byte) error { + r.mu.Lock() + defer r.mu.Unlock() + if !r.locked { + return errors.New("agent: not locked") + } + if len(passphrase) != len(r.passphrase) || 1 != subtle.ConstantTimeCompare(passphrase, r.passphrase) { + return fmt.Errorf("agent: incorrect passphrase") + } + + r.locked = false + r.passphrase = nil + return nil +} + +// expireKeysLocked removes expired keys from the keyring. If a key was added +// with a lifetimesecs contraint and seconds >= lifetimesecs seconds have +// ellapsed, it is removed. The caller *must* be holding the keyring mutex. +func (r *keyring) expireKeysLocked() { + for _, k := range r.keys { + if k.expire != nil && time.Now().After(*k.expire) { + r.removeLocked(k.signer.PublicKey().Marshal()) + } + } +} + +// List returns the identities known to the agent. +func (r *keyring) List() ([]*Key, error) { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + // section 2.7: locked agents return empty. + return nil, nil + } + + r.expireKeysLocked() + var ids []*Key + for _, k := range r.keys { + pub := k.signer.PublicKey() + ids = append(ids, &Key{ + Format: pub.Type(), + Blob: pub.Marshal(), + Comment: k.comment}) + } + return ids, nil +} + +// Insert adds a private key to the keyring. If a certificate +// is given, that certificate is added as public key. Note that +// any constraints given are ignored. +func (r *keyring) Add(key AddedKey) error { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return errLocked + } + signer, err := ssh.NewSignerFromKey(key.PrivateKey) + + if err != nil { + return err + } + + if cert := key.Certificate; cert != nil { + signer, err = ssh.NewCertSigner(cert, signer) + if err != nil { + return err + } + } + + p := privKey{ + signer: signer, + comment: key.Comment, + } + + if key.LifetimeSecs > 0 { + t := time.Now().Add(time.Duration(key.LifetimeSecs) * time.Second) + p.expire = &t + } + + r.keys = append(r.keys, p) + + return nil +} + +// Sign returns a signature for the data. +func (r *keyring) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return nil, errLocked + } + + r.expireKeysLocked() + wanted := key.Marshal() + for _, k := range r.keys { + if bytes.Equal(k.signer.PublicKey().Marshal(), wanted) { + return k.signer.Sign(rand.Reader, data) + } + } + return nil, errors.New("not found") +} + +// Signers returns signers for all the known keys. +func (r *keyring) Signers() ([]ssh.Signer, error) { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return nil, errLocked + } + + r.expireKeysLocked() + s := make([]ssh.Signer, 0, len(r.keys)) + for _, k := range r.keys { + s = append(s, k.signer) + } + return s, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/keyring_test.go b/vendor/golang.org/x/crypto/ssh/agent/keyring_test.go new file mode 100644 index 0000000..e5d50e7 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/keyring_test.go @@ -0,0 +1,76 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import "testing" + +func addTestKey(t *testing.T, a Agent, keyName string) { + err := a.Add(AddedKey{ + PrivateKey: testPrivateKeys[keyName], + Comment: keyName, + }) + if err != nil { + t.Fatalf("failed to add key %q: %v", keyName, err) + } +} + +func removeTestKey(t *testing.T, a Agent, keyName string) { + err := a.Remove(testPublicKeys[keyName]) + if err != nil { + t.Fatalf("failed to remove key %q: %v", keyName, err) + } +} + +func validateListedKeys(t *testing.T, a Agent, expectedKeys []string) { + listedKeys, err := a.List() + if err != nil { + t.Fatalf("failed to list keys: %v", err) + return + } + actualKeys := make(map[string]bool) + for _, key := range listedKeys { + actualKeys[key.Comment] = true + } + + matchedKeys := make(map[string]bool) + for _, expectedKey := range expectedKeys { + if !actualKeys[expectedKey] { + t.Fatalf("expected key %q, but was not found", expectedKey) + } else { + matchedKeys[expectedKey] = true + } + } + + for actualKey := range actualKeys { + if !matchedKeys[actualKey] { + t.Fatalf("key %q was found, but was not expected", actualKey) + } + } +} + +func TestKeyringAddingAndRemoving(t *testing.T) { + keyNames := []string{"dsa", "ecdsa", "rsa", "user"} + + // add all test private keys + k := NewKeyring() + for _, keyName := range keyNames { + addTestKey(t, k, keyName) + } + validateListedKeys(t, k, keyNames) + + // remove a key in the middle + keyToRemove := keyNames[1] + keyNames = append(keyNames[:1], keyNames[2:]...) + + removeTestKey(t, k, keyToRemove) + validateListedKeys(t, k, keyNames) + + // remove all keys + err := k.RemoveAll() + if err != nil { + t.Fatalf("failed to remove all keys: %v", err) + } + validateListedKeys(t, k, []string{}) +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/server.go b/vendor/golang.org/x/crypto/ssh/agent/server.go new file mode 100644 index 0000000..68a333f --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/server.go @@ -0,0 +1,451 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rsa" + "encoding/binary" + "errors" + "fmt" + "io" + "log" + "math/big" + + "golang.org/x/crypto/ed25519" + "golang.org/x/crypto/ssh" +) + +// Server wraps an Agent and uses it to implement the agent side of +// the SSH-agent, wire protocol. +type server struct { + agent Agent +} + +func (s *server) processRequestBytes(reqData []byte) []byte { + rep, err := s.processRequest(reqData) + if err != nil { + if err != errLocked { + // TODO(hanwen): provide better logging interface? + log.Printf("agent %d: %v", reqData[0], err) + } + return []byte{agentFailure} + } + + if err == nil && rep == nil { + return []byte{agentSuccess} + } + + return ssh.Marshal(rep) +} + +func marshalKey(k *Key) []byte { + var record struct { + Blob []byte + Comment string + } + record.Blob = k.Marshal() + record.Comment = k.Comment + + return ssh.Marshal(&record) +} + +// See [PROTOCOL.agent], section 2.5.1. +const agentV1IdentitiesAnswer = 2 + +type agentV1IdentityMsg struct { + Numkeys uint32 `sshtype:"2"` +} + +type agentRemoveIdentityMsg struct { + KeyBlob []byte `sshtype:"18"` +} + +type agentLockMsg struct { + Passphrase []byte `sshtype:"22"` +} + +type agentUnlockMsg struct { + Passphrase []byte `sshtype:"23"` +} + +func (s *server) processRequest(data []byte) (interface{}, error) { + switch data[0] { + case agentRequestV1Identities: + return &agentV1IdentityMsg{0}, nil + + case agentRemoveAllV1Identities: + return nil, nil + + case agentRemoveIdentity: + var req agentRemoveIdentityMsg + if err := ssh.Unmarshal(data, &req); err != nil { + return nil, err + } + + var wk wireKey + if err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil { + return nil, err + } + + return nil, s.agent.Remove(&Key{Format: wk.Format, Blob: req.KeyBlob}) + + case agentRemoveAllIdentities: + return nil, s.agent.RemoveAll() + + case agentLock: + var req agentLockMsg + if err := ssh.Unmarshal(data, &req); err != nil { + return nil, err + } + + return nil, s.agent.Lock(req.Passphrase) + + case agentUnlock: + var req agentLockMsg + if err := ssh.Unmarshal(data, &req); err != nil { + return nil, err + } + return nil, s.agent.Unlock(req.Passphrase) + + case agentSignRequest: + var req signRequestAgentMsg + if err := ssh.Unmarshal(data, &req); err != nil { + return nil, err + } + + var wk wireKey + if err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil { + return nil, err + } + + k := &Key{ + Format: wk.Format, + Blob: req.KeyBlob, + } + + sig, err := s.agent.Sign(k, req.Data) // TODO(hanwen): flags. + if err != nil { + return nil, err + } + return &signResponseAgentMsg{SigBlob: ssh.Marshal(sig)}, nil + + case agentRequestIdentities: + keys, err := s.agent.List() + if err != nil { + return nil, err + } + + rep := identitiesAnswerAgentMsg{ + NumKeys: uint32(len(keys)), + } + for _, k := range keys { + rep.Keys = append(rep.Keys, marshalKey(k)...) + } + return rep, nil + + case agentAddIdConstrained, agentAddIdentity: + return nil, s.insertIdentity(data) + } + + return nil, fmt.Errorf("unknown opcode %d", data[0]) +} + +func parseRSAKey(req []byte) (*AddedKey, error) { + var k rsaKeyMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + if k.E.BitLen() > 30 { + return nil, errors.New("agent: RSA public exponent too large") + } + priv := &rsa.PrivateKey{ + PublicKey: rsa.PublicKey{ + E: int(k.E.Int64()), + N: k.N, + }, + D: k.D, + Primes: []*big.Int{k.P, k.Q}, + } + priv.Precompute() + + return &AddedKey{PrivateKey: priv, Comment: k.Comments}, nil +} + +func parseEd25519Key(req []byte) (*AddedKey, error) { + var k ed25519KeyMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + priv := ed25519.PrivateKey(k.Priv) + return &AddedKey{PrivateKey: &priv, Comment: k.Comments}, nil +} + +func parseDSAKey(req []byte) (*AddedKey, error) { + var k dsaKeyMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + priv := &dsa.PrivateKey{ + PublicKey: dsa.PublicKey{ + Parameters: dsa.Parameters{ + P: k.P, + Q: k.Q, + G: k.G, + }, + Y: k.Y, + }, + X: k.X, + } + + return &AddedKey{PrivateKey: priv, Comment: k.Comments}, nil +} + +func unmarshalECDSA(curveName string, keyBytes []byte, privScalar *big.Int) (priv *ecdsa.PrivateKey, err error) { + priv = &ecdsa.PrivateKey{ + D: privScalar, + } + + switch curveName { + case "nistp256": + priv.Curve = elliptic.P256() + case "nistp384": + priv.Curve = elliptic.P384() + case "nistp521": + priv.Curve = elliptic.P521() + default: + return nil, fmt.Errorf("agent: unknown curve %q", curveName) + } + + priv.X, priv.Y = elliptic.Unmarshal(priv.Curve, keyBytes) + if priv.X == nil || priv.Y == nil { + return nil, errors.New("agent: point not on curve") + } + + return priv, nil +} + +func parseEd25519Cert(req []byte) (*AddedKey, error) { + var k ed25519CertMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + pubKey, err := ssh.ParsePublicKey(k.CertBytes) + if err != nil { + return nil, err + } + priv := ed25519.PrivateKey(k.Priv) + cert, ok := pubKey.(*ssh.Certificate) + if !ok { + return nil, errors.New("agent: bad ED25519 certificate") + } + return &AddedKey{PrivateKey: &priv, Certificate: cert, Comment: k.Comments}, nil +} + +func parseECDSAKey(req []byte) (*AddedKey, error) { + var k ecdsaKeyMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + + priv, err := unmarshalECDSA(k.Curve, k.KeyBytes, k.D) + if err != nil { + return nil, err + } + + return &AddedKey{PrivateKey: priv, Comment: k.Comments}, nil +} + +func parseRSACert(req []byte) (*AddedKey, error) { + var k rsaCertMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + + pubKey, err := ssh.ParsePublicKey(k.CertBytes) + if err != nil { + return nil, err + } + + cert, ok := pubKey.(*ssh.Certificate) + if !ok { + return nil, errors.New("agent: bad RSA certificate") + } + + // An RSA publickey as marshaled by rsaPublicKey.Marshal() in keys.go + var rsaPub struct { + Name string + E *big.Int + N *big.Int + } + if err := ssh.Unmarshal(cert.Key.Marshal(), &rsaPub); err != nil { + return nil, fmt.Errorf("agent: Unmarshal failed to parse public key: %v", err) + } + + if rsaPub.E.BitLen() > 30 { + return nil, errors.New("agent: RSA public exponent too large") + } + + priv := rsa.PrivateKey{ + PublicKey: rsa.PublicKey{ + E: int(rsaPub.E.Int64()), + N: rsaPub.N, + }, + D: k.D, + Primes: []*big.Int{k.Q, k.P}, + } + priv.Precompute() + + return &AddedKey{PrivateKey: &priv, Certificate: cert, Comment: k.Comments}, nil +} + +func parseDSACert(req []byte) (*AddedKey, error) { + var k dsaCertMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + pubKey, err := ssh.ParsePublicKey(k.CertBytes) + if err != nil { + return nil, err + } + cert, ok := pubKey.(*ssh.Certificate) + if !ok { + return nil, errors.New("agent: bad DSA certificate") + } + + // A DSA publickey as marshaled by dsaPublicKey.Marshal() in keys.go + var w struct { + Name string + P, Q, G, Y *big.Int + } + if err := ssh.Unmarshal(cert.Key.Marshal(), &w); err != nil { + return nil, fmt.Errorf("agent: Unmarshal failed to parse public key: %v", err) + } + + priv := &dsa.PrivateKey{ + PublicKey: dsa.PublicKey{ + Parameters: dsa.Parameters{ + P: w.P, + Q: w.Q, + G: w.G, + }, + Y: w.Y, + }, + X: k.X, + } + + return &AddedKey{PrivateKey: priv, Certificate: cert, Comment: k.Comments}, nil +} + +func parseECDSACert(req []byte) (*AddedKey, error) { + var k ecdsaCertMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + + pubKey, err := ssh.ParsePublicKey(k.CertBytes) + if err != nil { + return nil, err + } + cert, ok := pubKey.(*ssh.Certificate) + if !ok { + return nil, errors.New("agent: bad ECDSA certificate") + } + + // An ECDSA publickey as marshaled by ecdsaPublicKey.Marshal() in keys.go + var ecdsaPub struct { + Name string + ID string + Key []byte + } + if err := ssh.Unmarshal(cert.Key.Marshal(), &ecdsaPub); err != nil { + return nil, err + } + + priv, err := unmarshalECDSA(ecdsaPub.ID, ecdsaPub.Key, k.D) + if err != nil { + return nil, err + } + + return &AddedKey{PrivateKey: priv, Certificate: cert, Comment: k.Comments}, nil +} + +func (s *server) insertIdentity(req []byte) error { + var record struct { + Type string `sshtype:"17|25"` + Rest []byte `ssh:"rest"` + } + + if err := ssh.Unmarshal(req, &record); err != nil { + return err + } + + var addedKey *AddedKey + var err error + + switch record.Type { + case ssh.KeyAlgoRSA: + addedKey, err = parseRSAKey(req) + case ssh.KeyAlgoDSA: + addedKey, err = parseDSAKey(req) + case ssh.KeyAlgoECDSA256, ssh.KeyAlgoECDSA384, ssh.KeyAlgoECDSA521: + addedKey, err = parseECDSAKey(req) + case ssh.KeyAlgoED25519: + addedKey, err = parseEd25519Key(req) + case ssh.CertAlgoRSAv01: + addedKey, err = parseRSACert(req) + case ssh.CertAlgoDSAv01: + addedKey, err = parseDSACert(req) + case ssh.CertAlgoECDSA256v01, ssh.CertAlgoECDSA384v01, ssh.CertAlgoECDSA521v01: + addedKey, err = parseECDSACert(req) + case ssh.CertAlgoED25519v01: + addedKey, err = parseEd25519Cert(req) + default: + return fmt.Errorf("agent: not implemented: %q", record.Type) + } + + if err != nil { + return err + } + return s.agent.Add(*addedKey) +} + +// ServeAgent serves the agent protocol on the given connection. It +// returns when an I/O error occurs. +func ServeAgent(agent Agent, c io.ReadWriter) error { + s := &server{agent} + + var length [4]byte + for { + if _, err := io.ReadFull(c, length[:]); err != nil { + return err + } + l := binary.BigEndian.Uint32(length[:]) + if l > maxAgentResponseBytes { + // We also cap requests. + return fmt.Errorf("agent: request too large: %d", l) + } + + req := make([]byte, l) + if _, err := io.ReadFull(c, req); err != nil { + return err + } + + repData := s.processRequestBytes(req) + if len(repData) > maxAgentResponseBytes { + return fmt.Errorf("agent: reply too large: %d bytes", len(repData)) + } + + binary.BigEndian.PutUint32(length[:], uint32(len(repData))) + if _, err := c.Write(length[:]); err != nil { + return err + } + if _, err := c.Write(repData); err != nil { + return err + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/server_test.go b/vendor/golang.org/x/crypto/ssh/agent/server_test.go new file mode 100644 index 0000000..ec9cdee --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/server_test.go @@ -0,0 +1,207 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "crypto" + "crypto/rand" + "fmt" + "testing" + + "golang.org/x/crypto/ssh" +) + +func TestServer(t *testing.T) { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + client := NewClient(c1) + + go ServeAgent(NewKeyring(), c2) + + testAgentInterface(t, client, testPrivateKeys["rsa"], nil, 0) +} + +func TestLockServer(t *testing.T) { + testLockAgent(NewKeyring(), t) +} + +func TestSetupForwardAgent(t *testing.T) { + a, b, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + + defer a.Close() + defer b.Close() + + _, socket, cleanup := startAgent(t) + defer cleanup() + + serverConf := ssh.ServerConfig{ + NoClientAuth: true, + } + serverConf.AddHostKey(testSigners["rsa"]) + incoming := make(chan *ssh.ServerConn, 1) + go func() { + conn, _, _, err := ssh.NewServerConn(a, &serverConf) + if err != nil { + t.Fatalf("Server: %v", err) + } + incoming <- conn + }() + + conf := ssh.ClientConfig{} + conn, chans, reqs, err := ssh.NewClientConn(b, "", &conf) + if err != nil { + t.Fatalf("NewClientConn: %v", err) + } + client := ssh.NewClient(conn, chans, reqs) + + if err := ForwardToRemote(client, socket); err != nil { + t.Fatalf("SetupForwardAgent: %v", err) + } + + server := <-incoming + ch, reqs, err := server.OpenChannel(channelType, nil) + if err != nil { + t.Fatalf("OpenChannel(%q): %v", channelType, err) + } + go ssh.DiscardRequests(reqs) + + agentClient := NewClient(ch) + testAgentInterface(t, agentClient, testPrivateKeys["rsa"], nil, 0) + conn.Close() +} + +func TestV1ProtocolMessages(t *testing.T) { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + c := NewClient(c1) + + go ServeAgent(NewKeyring(), c2) + + testV1ProtocolMessages(t, c.(*client)) +} + +func testV1ProtocolMessages(t *testing.T, c *client) { + reply, err := c.call([]byte{agentRequestV1Identities}) + if err != nil { + t.Fatalf("v1 request all failed: %v", err) + } + if msg, ok := reply.(*agentV1IdentityMsg); !ok || msg.Numkeys != 0 { + t.Fatalf("invalid request all response: %#v", reply) + } + + reply, err = c.call([]byte{agentRemoveAllV1Identities}) + if err != nil { + t.Fatalf("v1 remove all failed: %v", err) + } + if _, ok := reply.(*successAgentMsg); !ok { + t.Fatalf("invalid remove all response: %#v", reply) + } +} + +func verifyKey(sshAgent Agent) error { + keys, err := sshAgent.List() + if err != nil { + return fmt.Errorf("listing keys: %v", err) + } + + if len(keys) != 1 { + return fmt.Errorf("bad number of keys found. expected 1, got %d", len(keys)) + } + + buf := make([]byte, 128) + if _, err := rand.Read(buf); err != nil { + return fmt.Errorf("rand: %v", err) + } + + sig, err := sshAgent.Sign(keys[0], buf) + if err != nil { + return fmt.Errorf("sign: %v", err) + } + + if err := keys[0].Verify(buf, sig); err != nil { + return fmt.Errorf("verify: %v", err) + } + return nil +} + +func addKeyToAgent(key crypto.PrivateKey) error { + sshAgent := NewKeyring() + if err := sshAgent.Add(AddedKey{PrivateKey: key}); err != nil { + return fmt.Errorf("add: %v", err) + } + return verifyKey(sshAgent) +} + +func TestKeyTypes(t *testing.T) { + for k, v := range testPrivateKeys { + if err := addKeyToAgent(v); err != nil { + t.Errorf("error adding key type %s, %v", k, err) + } + if err := addCertToAgentSock(v, nil); err != nil { + t.Errorf("error adding key type %s, %v", k, err) + } + } +} + +func addCertToAgentSock(key crypto.PrivateKey, cert *ssh.Certificate) error { + a, b, err := netPipe() + if err != nil { + return err + } + agentServer := NewKeyring() + go ServeAgent(agentServer, a) + + agentClient := NewClient(b) + if err := agentClient.Add(AddedKey{PrivateKey: key, Certificate: cert}); err != nil { + return fmt.Errorf("add: %v", err) + } + return verifyKey(agentClient) +} + +func addCertToAgent(key crypto.PrivateKey, cert *ssh.Certificate) error { + sshAgent := NewKeyring() + if err := sshAgent.Add(AddedKey{PrivateKey: key, Certificate: cert}); err != nil { + return fmt.Errorf("add: %v", err) + } + return verifyKey(sshAgent) +} + +func TestCertTypes(t *testing.T) { + for keyType, key := range testPublicKeys { + cert := &ssh.Certificate{ + ValidPrincipals: []string{"gopher1"}, + ValidAfter: 0, + ValidBefore: ssh.CertTimeInfinity, + Key: key, + Serial: 1, + CertType: ssh.UserCert, + SignatureKey: testPublicKeys["rsa"], + Permissions: ssh.Permissions{ + CriticalOptions: map[string]string{}, + Extensions: map[string]string{}, + }, + } + if err := cert.SignCert(rand.Reader, testSigners["rsa"]); err != nil { + t.Fatalf("signcert: %v", err) + } + if err := addCertToAgent(testPrivateKeys[keyType], cert); err != nil { + t.Fatalf("%v", err) + } + if err := addCertToAgentSock(testPrivateKeys[keyType], cert); err != nil { + t.Fatalf("%v", err) + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/testdata_test.go b/vendor/golang.org/x/crypto/ssh/agent/testdata_test.go new file mode 100644 index 0000000..cc42a87 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/testdata_test.go @@ -0,0 +1,64 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// IMPLEMENTATION NOTE: To avoid a package loop, this file is in three places: +// ssh/, ssh/agent, and ssh/test/. It should be kept in sync across all three +// instances. + +package agent + +import ( + "crypto/rand" + "fmt" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/testdata" +) + +var ( + testPrivateKeys map[string]interface{} + testSigners map[string]ssh.Signer + testPublicKeys map[string]ssh.PublicKey +) + +func init() { + var err error + + n := len(testdata.PEMBytes) + testPrivateKeys = make(map[string]interface{}, n) + testSigners = make(map[string]ssh.Signer, n) + testPublicKeys = make(map[string]ssh.PublicKey, n) + for t, k := range testdata.PEMBytes { + testPrivateKeys[t], err = ssh.ParseRawPrivateKey(k) + if err != nil { + panic(fmt.Sprintf("Unable to parse test key %s: %v", t, err)) + } + testSigners[t], err = ssh.NewSignerFromKey(testPrivateKeys[t]) + if err != nil { + panic(fmt.Sprintf("Unable to create signer for test key %s: %v", t, err)) + } + testPublicKeys[t] = testSigners[t].PublicKey() + } + + // Create a cert and sign it for use in tests. + testCert := &ssh.Certificate{ + Nonce: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + ValidPrincipals: []string{"gopher1", "gopher2"}, // increases test coverage + ValidAfter: 0, // unix epoch + ValidBefore: ssh.CertTimeInfinity, // The end of currently representable time. + Reserved: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + Key: testPublicKeys["ecdsa"], + SignatureKey: testPublicKeys["rsa"], + Permissions: ssh.Permissions{ + CriticalOptions: map[string]string{}, + Extensions: map[string]string{}, + }, + } + testCert.SignCert(rand.Reader, testSigners["rsa"]) + testPrivateKeys["cert"] = testPrivateKeys["ecdsa"] + testSigners["cert"], err = ssh.NewCertSigner(testCert, testSigners["ecdsa"]) + if err != nil { + panic(fmt.Sprintf("Unable to create certificate signer: %v", err)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/benchmark_test.go b/vendor/golang.org/x/crypto/ssh/benchmark_test.go new file mode 100644 index 0000000..d9f7eb9 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/benchmark_test.go @@ -0,0 +1,122 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "errors" + "io" + "net" + "testing" +) + +type server struct { + *ServerConn + chans <-chan NewChannel +} + +func newServer(c net.Conn, conf *ServerConfig) (*server, error) { + sconn, chans, reqs, err := NewServerConn(c, conf) + if err != nil { + return nil, err + } + go DiscardRequests(reqs) + return &server{sconn, chans}, nil +} + +func (s *server) Accept() (NewChannel, error) { + n, ok := <-s.chans + if !ok { + return nil, io.EOF + } + return n, nil +} + +func sshPipe() (Conn, *server, error) { + c1, c2, err := netPipe() + if err != nil { + return nil, nil, err + } + + clientConf := ClientConfig{ + User: "user", + } + serverConf := ServerConfig{ + NoClientAuth: true, + } + serverConf.AddHostKey(testSigners["ecdsa"]) + done := make(chan *server, 1) + go func() { + server, err := newServer(c2, &serverConf) + if err != nil { + done <- nil + } + done <- server + }() + + client, _, reqs, err := NewClientConn(c1, "", &clientConf) + if err != nil { + return nil, nil, err + } + + server := <-done + if server == nil { + return nil, nil, errors.New("server handshake failed.") + } + go DiscardRequests(reqs) + + return client, server, nil +} + +func BenchmarkEndToEnd(b *testing.B) { + b.StopTimer() + + client, server, err := sshPipe() + if err != nil { + b.Fatalf("sshPipe: %v", err) + } + + defer client.Close() + defer server.Close() + + size := (1 << 20) + input := make([]byte, size) + output := make([]byte, size) + b.SetBytes(int64(size)) + done := make(chan int, 1) + + go func() { + newCh, err := server.Accept() + if err != nil { + b.Fatalf("Client: %v", err) + } + ch, incoming, err := newCh.Accept() + go DiscardRequests(incoming) + for i := 0; i < b.N; i++ { + if _, err := io.ReadFull(ch, output); err != nil { + b.Fatalf("ReadFull: %v", err) + } + } + ch.Close() + done <- 1 + }() + + ch, in, err := client.OpenChannel("speed", nil) + if err != nil { + b.Fatalf("OpenChannel: %v", err) + } + go DiscardRequests(in) + + b.ResetTimer() + b.StartTimer() + for i := 0; i < b.N; i++ { + if _, err := ch.Write(input); err != nil { + b.Fatalf("WriteFull: %v", err) + } + } + ch.Close() + b.StopTimer() + + <-done +} diff --git a/vendor/golang.org/x/crypto/ssh/buffer.go b/vendor/golang.org/x/crypto/ssh/buffer.go new file mode 100644 index 0000000..6931b51 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/buffer.go @@ -0,0 +1,98 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "io" + "sync" +) + +// buffer provides a linked list buffer for data exchange +// between producer and consumer. Theoretically the buffer is +// of unlimited capacity as it does no allocation of its own. +type buffer struct { + // protects concurrent access to head, tail and closed + *sync.Cond + + head *element // the buffer that will be read first + tail *element // the buffer that will be read last + + closed bool +} + +// An element represents a single link in a linked list. +type element struct { + buf []byte + next *element +} + +// newBuffer returns an empty buffer that is not closed. +func newBuffer() *buffer { + e := new(element) + b := &buffer{ + Cond: newCond(), + head: e, + tail: e, + } + return b +} + +// write makes buf available for Read to receive. +// buf must not be modified after the call to write. +func (b *buffer) write(buf []byte) { + b.Cond.L.Lock() + e := &element{buf: buf} + b.tail.next = e + b.tail = e + b.Cond.Signal() + b.Cond.L.Unlock() +} + +// eof closes the buffer. Reads from the buffer once all +// the data has been consumed will receive os.EOF. +func (b *buffer) eof() error { + b.Cond.L.Lock() + b.closed = true + b.Cond.Signal() + b.Cond.L.Unlock() + return nil +} + +// Read reads data from the internal buffer in buf. Reads will block +// if no data is available, or until the buffer is closed. +func (b *buffer) Read(buf []byte) (n int, err error) { + b.Cond.L.Lock() + defer b.Cond.L.Unlock() + + for len(buf) > 0 { + // if there is data in b.head, copy it + if len(b.head.buf) > 0 { + r := copy(buf, b.head.buf) + buf, b.head.buf = buf[r:], b.head.buf[r:] + n += r + continue + } + // if there is a next buffer, make it the head + if len(b.head.buf) == 0 && b.head != b.tail { + b.head = b.head.next + continue + } + + // if at least one byte has been copied, return + if n > 0 { + break + } + + // if nothing was read, and there is nothing outstanding + // check to see if the buffer is closed. + if b.closed { + err = io.EOF + break + } + // out of buffers, wait for producer + b.Cond.Wait() + } + return +} diff --git a/vendor/golang.org/x/crypto/ssh/buffer_test.go b/vendor/golang.org/x/crypto/ssh/buffer_test.go new file mode 100644 index 0000000..d5781cb --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/buffer_test.go @@ -0,0 +1,87 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "io" + "testing" +) + +var alphabet = []byte("abcdefghijklmnopqrstuvwxyz") + +func TestBufferReadwrite(t *testing.T) { + b := newBuffer() + b.write(alphabet[:10]) + r, _ := b.Read(make([]byte, 10)) + if r != 10 { + t.Fatalf("Expected written == read == 10, written: 10, read %d", r) + } + + b = newBuffer() + b.write(alphabet[:5]) + r, _ = b.Read(make([]byte, 10)) + if r != 5 { + t.Fatalf("Expected written == read == 5, written: 5, read %d", r) + } + + b = newBuffer() + b.write(alphabet[:10]) + r, _ = b.Read(make([]byte, 5)) + if r != 5 { + t.Fatalf("Expected written == 10, read == 5, written: 10, read %d", r) + } + + b = newBuffer() + b.write(alphabet[:5]) + b.write(alphabet[5:15]) + r, _ = b.Read(make([]byte, 10)) + r2, _ := b.Read(make([]byte, 10)) + if r != 10 || r2 != 5 || 15 != r+r2 { + t.Fatal("Expected written == read == 15") + } +} + +func TestBufferClose(t *testing.T) { + b := newBuffer() + b.write(alphabet[:10]) + b.eof() + _, err := b.Read(make([]byte, 5)) + if err != nil { + t.Fatal("expected read of 5 to not return EOF") + } + b = newBuffer() + b.write(alphabet[:10]) + b.eof() + r, err := b.Read(make([]byte, 5)) + r2, err2 := b.Read(make([]byte, 10)) + if r != 5 || r2 != 5 || err != nil || err2 != nil { + t.Fatal("expected reads of 5 and 5") + } + + b = newBuffer() + b.write(alphabet[:10]) + b.eof() + r, err = b.Read(make([]byte, 5)) + r2, err2 = b.Read(make([]byte, 10)) + r3, err3 := b.Read(make([]byte, 10)) + if r != 5 || r2 != 5 || r3 != 0 || err != nil || err2 != nil || err3 != io.EOF { + t.Fatal("expected reads of 5 and 5 and 0, with EOF") + } + + b = newBuffer() + b.write(make([]byte, 5)) + b.write(make([]byte, 10)) + b.eof() + r, err = b.Read(make([]byte, 9)) + r2, err2 = b.Read(make([]byte, 3)) + r3, err3 = b.Read(make([]byte, 3)) + r4, err4 := b.Read(make([]byte, 10)) + if err != nil || err2 != nil || err3 != nil || err4 != io.EOF { + t.Fatalf("Expected EOF on forth read only, err=%v, err2=%v, err3=%v, err4=%v", err, err2, err3, err4) + } + if r != 9 || r2 != 3 || r3 != 3 || r4 != 0 { + t.Fatal("Expected written == read == 15", r, r2, r3, r4) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/certs.go b/vendor/golang.org/x/crypto/ssh/certs.go new file mode 100644 index 0000000..6331c94 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/certs.go @@ -0,0 +1,503 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "errors" + "fmt" + "io" + "net" + "sort" + "time" +) + +// These constants from [PROTOCOL.certkeys] represent the algorithm names +// for certificate types supported by this package. +const ( + CertAlgoRSAv01 = "ssh-rsa-cert-v01@openssh.com" + CertAlgoDSAv01 = "ssh-dss-cert-v01@openssh.com" + CertAlgoECDSA256v01 = "ecdsa-sha2-nistp256-cert-v01@openssh.com" + CertAlgoECDSA384v01 = "ecdsa-sha2-nistp384-cert-v01@openssh.com" + CertAlgoECDSA521v01 = "ecdsa-sha2-nistp521-cert-v01@openssh.com" + CertAlgoED25519v01 = "ssh-ed25519-cert-v01@openssh.com" +) + +// Certificate types distinguish between host and user +// certificates. The values can be set in the CertType field of +// Certificate. +const ( + UserCert = 1 + HostCert = 2 +) + +// Signature represents a cryptographic signature. +type Signature struct { + Format string + Blob []byte +} + +// CertTimeInfinity can be used for OpenSSHCertV01.ValidBefore to indicate that +// a certificate does not expire. +const CertTimeInfinity = 1<<64 - 1 + +// An Certificate represents an OpenSSH certificate as defined in +// [PROTOCOL.certkeys]?rev=1.8. +type Certificate struct { + Nonce []byte + Key PublicKey + Serial uint64 + CertType uint32 + KeyId string + ValidPrincipals []string + ValidAfter uint64 + ValidBefore uint64 + Permissions + Reserved []byte + SignatureKey PublicKey + Signature *Signature +} + +// genericCertData holds the key-independent part of the certificate data. +// Overall, certificates contain an nonce, public key fields and +// key-independent fields. +type genericCertData struct { + Serial uint64 + CertType uint32 + KeyId string + ValidPrincipals []byte + ValidAfter uint64 + ValidBefore uint64 + CriticalOptions []byte + Extensions []byte + Reserved []byte + SignatureKey []byte + Signature []byte +} + +func marshalStringList(namelist []string) []byte { + var to []byte + for _, name := range namelist { + s := struct{ N string }{name} + to = append(to, Marshal(&s)...) + } + return to +} + +type optionsTuple struct { + Key string + Value []byte +} + +type optionsTupleValue struct { + Value string +} + +// serialize a map of critical options or extensions +// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation, +// we need two length prefixes for a non-empty string value +func marshalTuples(tups map[string]string) []byte { + keys := make([]string, 0, len(tups)) + for key := range tups { + keys = append(keys, key) + } + sort.Strings(keys) + + var ret []byte + for _, key := range keys { + s := optionsTuple{Key: key} + if value := tups[key]; len(value) > 0 { + s.Value = Marshal(&optionsTupleValue{value}) + } + ret = append(ret, Marshal(&s)...) + } + return ret +} + +// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation, +// we need two length prefixes for a non-empty option value +func parseTuples(in []byte) (map[string]string, error) { + tups := map[string]string{} + var lastKey string + var haveLastKey bool + + for len(in) > 0 { + var key, val, extra []byte + var ok bool + + if key, in, ok = parseString(in); !ok { + return nil, errShortRead + } + keyStr := string(key) + // according to [PROTOCOL.certkeys], the names must be in + // lexical order. + if haveLastKey && keyStr <= lastKey { + return nil, fmt.Errorf("ssh: certificate options are not in lexical order") + } + lastKey, haveLastKey = keyStr, true + // the next field is a data field, which if non-empty has a string embedded + if val, in, ok = parseString(in); !ok { + return nil, errShortRead + } + if len(val) > 0 { + val, extra, ok = parseString(val) + if !ok { + return nil, errShortRead + } + if len(extra) > 0 { + return nil, fmt.Errorf("ssh: unexpected trailing data after certificate option value") + } + tups[keyStr] = string(val) + } else { + tups[keyStr] = "" + } + } + return tups, nil +} + +func parseCert(in []byte, privAlgo string) (*Certificate, error) { + nonce, rest, ok := parseString(in) + if !ok { + return nil, errShortRead + } + + key, rest, err := parsePubKey(rest, privAlgo) + if err != nil { + return nil, err + } + + var g genericCertData + if err := Unmarshal(rest, &g); err != nil { + return nil, err + } + + c := &Certificate{ + Nonce: nonce, + Key: key, + Serial: g.Serial, + CertType: g.CertType, + KeyId: g.KeyId, + ValidAfter: g.ValidAfter, + ValidBefore: g.ValidBefore, + } + + for principals := g.ValidPrincipals; len(principals) > 0; { + principal, rest, ok := parseString(principals) + if !ok { + return nil, errShortRead + } + c.ValidPrincipals = append(c.ValidPrincipals, string(principal)) + principals = rest + } + + c.CriticalOptions, err = parseTuples(g.CriticalOptions) + if err != nil { + return nil, err + } + c.Extensions, err = parseTuples(g.Extensions) + if err != nil { + return nil, err + } + c.Reserved = g.Reserved + k, err := ParsePublicKey(g.SignatureKey) + if err != nil { + return nil, err + } + + c.SignatureKey = k + c.Signature, rest, ok = parseSignatureBody(g.Signature) + if !ok || len(rest) > 0 { + return nil, errors.New("ssh: signature parse error") + } + + return c, nil +} + +type openSSHCertSigner struct { + pub *Certificate + signer Signer +} + +// NewCertSigner returns a Signer that signs with the given Certificate, whose +// private key is held by signer. It returns an error if the public key in cert +// doesn't match the key used by signer. +func NewCertSigner(cert *Certificate, signer Signer) (Signer, error) { + if bytes.Compare(cert.Key.Marshal(), signer.PublicKey().Marshal()) != 0 { + return nil, errors.New("ssh: signer and cert have different public key") + } + + return &openSSHCertSigner{cert, signer}, nil +} + +func (s *openSSHCertSigner) Sign(rand io.Reader, data []byte) (*Signature, error) { + return s.signer.Sign(rand, data) +} + +func (s *openSSHCertSigner) PublicKey() PublicKey { + return s.pub +} + +const sourceAddressCriticalOption = "source-address" + +// CertChecker does the work of verifying a certificate. Its methods +// can be plugged into ClientConfig.HostKeyCallback and +// ServerConfig.PublicKeyCallback. For the CertChecker to work, +// minimally, the IsAuthority callback should be set. +type CertChecker struct { + // SupportedCriticalOptions lists the CriticalOptions that the + // server application layer understands. These are only used + // for user certificates. + SupportedCriticalOptions []string + + // IsAuthority should return true if the key is recognized as + // an authority. This allows for certificates to be signed by other + // certificates. + IsAuthority func(auth PublicKey) bool + + // Clock is used for verifying time stamps. If nil, time.Now + // is used. + Clock func() time.Time + + // UserKeyFallback is called when CertChecker.Authenticate encounters a + // public key that is not a certificate. It must implement validation + // of user keys or else, if nil, all such keys are rejected. + UserKeyFallback func(conn ConnMetadata, key PublicKey) (*Permissions, error) + + // HostKeyFallback is called when CertChecker.CheckHostKey encounters a + // public key that is not a certificate. It must implement host key + // validation or else, if nil, all such keys are rejected. + HostKeyFallback func(addr string, remote net.Addr, key PublicKey) error + + // IsRevoked is called for each certificate so that revocation checking + // can be implemented. It should return true if the given certificate + // is revoked and false otherwise. If nil, no certificates are + // considered to have been revoked. + IsRevoked func(cert *Certificate) bool +} + +// CheckHostKey checks a host key certificate. This method can be +// plugged into ClientConfig.HostKeyCallback. +func (c *CertChecker) CheckHostKey(addr string, remote net.Addr, key PublicKey) error { + cert, ok := key.(*Certificate) + if !ok { + if c.HostKeyFallback != nil { + return c.HostKeyFallback(addr, remote, key) + } + return errors.New("ssh: non-certificate host key") + } + if cert.CertType != HostCert { + return fmt.Errorf("ssh: certificate presented as a host key has type %d", cert.CertType) + } + + return c.CheckCert(addr, cert) +} + +// Authenticate checks a user certificate. Authenticate can be used as +// a value for ServerConfig.PublicKeyCallback. +func (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) (*Permissions, error) { + cert, ok := pubKey.(*Certificate) + if !ok { + if c.UserKeyFallback != nil { + return c.UserKeyFallback(conn, pubKey) + } + return nil, errors.New("ssh: normal key pairs not accepted") + } + + if cert.CertType != UserCert { + return nil, fmt.Errorf("ssh: cert has type %d", cert.CertType) + } + + if err := c.CheckCert(conn.User(), cert); err != nil { + return nil, err + } + + return &cert.Permissions, nil +} + +// CheckCert checks CriticalOptions, ValidPrincipals, revocation, timestamp and +// the signature of the certificate. +func (c *CertChecker) CheckCert(principal string, cert *Certificate) error { + if c.IsRevoked != nil && c.IsRevoked(cert) { + return fmt.Errorf("ssh: certicate serial %d revoked", cert.Serial) + } + + for opt, _ := range cert.CriticalOptions { + // sourceAddressCriticalOption will be enforced by + // serverAuthenticate + if opt == sourceAddressCriticalOption { + continue + } + + found := false + for _, supp := range c.SupportedCriticalOptions { + if supp == opt { + found = true + break + } + } + if !found { + return fmt.Errorf("ssh: unsupported critical option %q in certificate", opt) + } + } + + if len(cert.ValidPrincipals) > 0 { + // By default, certs are valid for all users/hosts. + found := false + for _, p := range cert.ValidPrincipals { + if p == principal { + found = true + break + } + } + if !found { + return fmt.Errorf("ssh: principal %q not in the set of valid principals for given certificate: %q", principal, cert.ValidPrincipals) + } + } + + if !c.IsAuthority(cert.SignatureKey) { + return fmt.Errorf("ssh: certificate signed by unrecognized authority") + } + + clock := c.Clock + if clock == nil { + clock = time.Now + } + + unixNow := clock().Unix() + if after := int64(cert.ValidAfter); after < 0 || unixNow < int64(cert.ValidAfter) { + return fmt.Errorf("ssh: cert is not yet valid") + } + if before := int64(cert.ValidBefore); cert.ValidBefore != uint64(CertTimeInfinity) && (unixNow >= before || before < 0) { + return fmt.Errorf("ssh: cert has expired") + } + if err := cert.SignatureKey.Verify(cert.bytesForSigning(), cert.Signature); err != nil { + return fmt.Errorf("ssh: certificate signature does not verify") + } + + return nil +} + +// SignCert sets c.SignatureKey to the authority's public key and stores a +// Signature, by authority, in the certificate. +func (c *Certificate) SignCert(rand io.Reader, authority Signer) error { + c.Nonce = make([]byte, 32) + if _, err := io.ReadFull(rand, c.Nonce); err != nil { + return err + } + c.SignatureKey = authority.PublicKey() + + sig, err := authority.Sign(rand, c.bytesForSigning()) + if err != nil { + return err + } + c.Signature = sig + return nil +} + +var certAlgoNames = map[string]string{ + KeyAlgoRSA: CertAlgoRSAv01, + KeyAlgoDSA: CertAlgoDSAv01, + KeyAlgoECDSA256: CertAlgoECDSA256v01, + KeyAlgoECDSA384: CertAlgoECDSA384v01, + KeyAlgoECDSA521: CertAlgoECDSA521v01, + KeyAlgoED25519: CertAlgoED25519v01, +} + +// certToPrivAlgo returns the underlying algorithm for a certificate algorithm. +// Panics if a non-certificate algorithm is passed. +func certToPrivAlgo(algo string) string { + for privAlgo, pubAlgo := range certAlgoNames { + if pubAlgo == algo { + return privAlgo + } + } + panic("unknown cert algorithm") +} + +func (cert *Certificate) bytesForSigning() []byte { + c2 := *cert + c2.Signature = nil + out := c2.Marshal() + // Drop trailing signature length. + return out[:len(out)-4] +} + +// Marshal serializes c into OpenSSH's wire format. It is part of the +// PublicKey interface. +func (c *Certificate) Marshal() []byte { + generic := genericCertData{ + Serial: c.Serial, + CertType: c.CertType, + KeyId: c.KeyId, + ValidPrincipals: marshalStringList(c.ValidPrincipals), + ValidAfter: uint64(c.ValidAfter), + ValidBefore: uint64(c.ValidBefore), + CriticalOptions: marshalTuples(c.CriticalOptions), + Extensions: marshalTuples(c.Extensions), + Reserved: c.Reserved, + SignatureKey: c.SignatureKey.Marshal(), + } + if c.Signature != nil { + generic.Signature = Marshal(c.Signature) + } + genericBytes := Marshal(&generic) + keyBytes := c.Key.Marshal() + _, keyBytes, _ = parseString(keyBytes) + prefix := Marshal(&struct { + Name string + Nonce []byte + Key []byte `ssh:"rest"` + }{c.Type(), c.Nonce, keyBytes}) + + result := make([]byte, 0, len(prefix)+len(genericBytes)) + result = append(result, prefix...) + result = append(result, genericBytes...) + return result +} + +// Type returns the key name. It is part of the PublicKey interface. +func (c *Certificate) Type() string { + algo, ok := certAlgoNames[c.Key.Type()] + if !ok { + panic("unknown cert key type " + c.Key.Type()) + } + return algo +} + +// Verify verifies a signature against the certificate's public +// key. It is part of the PublicKey interface. +func (c *Certificate) Verify(data []byte, sig *Signature) error { + return c.Key.Verify(data, sig) +} + +func parseSignatureBody(in []byte) (out *Signature, rest []byte, ok bool) { + format, in, ok := parseString(in) + if !ok { + return + } + + out = &Signature{ + Format: string(format), + } + + if out.Blob, in, ok = parseString(in); !ok { + return + } + + return out, in, ok +} + +func parseSignature(in []byte) (out *Signature, rest []byte, ok bool) { + sigBytes, rest, ok := parseString(in) + if !ok { + return + } + + out, trailing, ok := parseSignatureBody(sigBytes) + if !ok || len(trailing) > 0 { + return nil, nil, false + } + return +} diff --git a/vendor/golang.org/x/crypto/ssh/certs_test.go b/vendor/golang.org/x/crypto/ssh/certs_test.go new file mode 100644 index 0000000..c5f2e53 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/certs_test.go @@ -0,0 +1,216 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/rand" + "reflect" + "testing" + "time" +) + +// Cert generated by ssh-keygen 6.0p1 Debian-4. +// % ssh-keygen -s ca-key -I test user-key +const exampleSSHCert = `ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgb1srW/W3ZDjYAO45xLYAwzHBDLsJ4Ux6ICFIkTjb1LEAAAADAQABAAAAYQCkoR51poH0wE8w72cqSB8Sszx+vAhzcMdCO0wqHTj7UNENHWEXGrU0E0UQekD7U+yhkhtoyjbPOVIP7hNa6aRk/ezdh/iUnCIt4Jt1v3Z1h1P+hA4QuYFMHNB+rmjPwAcAAAAAAAAAAAAAAAEAAAAEdGVzdAAAAAAAAAAAAAAAAP//////////AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAHcAAAAHc3NoLXJzYQAAAAMBAAEAAABhANFS2kaktpSGc+CcmEKPyw9mJC4nZKxHKTgLVZeaGbFZOvJTNzBspQHdy7Q1uKSfktxpgjZnksiu/tFF9ngyY2KFoc+U88ya95IZUycBGCUbBQ8+bhDtw/icdDGQD5WnUwAAAG8AAAAHc3NoLXJzYQAAAGC8Y9Z2LQKhIhxf52773XaWrXdxP0t3GBVo4A10vUWiYoAGepr6rQIoGGXFxT4B9Gp+nEBJjOwKDXPrAevow0T9ca8gZN+0ykbhSrXLE5Ao48rqr3zP4O1/9P7e6gp0gw8=` + +func TestParseCert(t *testing.T) { + authKeyBytes := []byte(exampleSSHCert) + + key, _, _, rest, err := ParseAuthorizedKey(authKeyBytes) + if err != nil { + t.Fatalf("ParseAuthorizedKey: %v", err) + } + if len(rest) > 0 { + t.Errorf("rest: got %q, want empty", rest) + } + + if _, ok := key.(*Certificate); !ok { + t.Fatalf("got %v (%T), want *Certificate", key, key) + } + + marshaled := MarshalAuthorizedKey(key) + // Before comparison, remove the trailing newline that + // MarshalAuthorizedKey adds. + marshaled = marshaled[:len(marshaled)-1] + if !bytes.Equal(authKeyBytes, marshaled) { + t.Errorf("marshaled certificate does not match original: got %q, want %q", marshaled, authKeyBytes) + } +} + +// Cert generated by ssh-keygen OpenSSH_6.8p1 OS X 10.10.3 +// % ssh-keygen -s ca -I testcert -O source-address=192.168.1.0/24 -O force-command=/bin/sleep user.pub +// user.pub key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDACh1rt2DXfV3hk6fszSQcQ/rueMId0kVD9U7nl8cfEnFxqOCrNT92g4laQIGl2mn8lsGZfTLg8ksHq3gkvgO3oo/0wHy4v32JeBOHTsN5AL4gfHNEhWeWb50ev47hnTsRIt9P4dxogeUo/hTu7j9+s9lLpEQXCvq6xocXQt0j8MV9qZBBXFLXVT3cWIkSqOdwt/5ZBg+1GSrc7WfCXVWgTk4a20uPMuJPxU4RQwZW6X3+O8Pqo8C3cW0OzZRFP6gUYUKUsTI5WntlS+LAxgw1mZNsozFGdbiOPRnEryE3SRldh9vjDR3tin1fGpA5P7+CEB/bqaXtG3V+F2OkqaMN +// Critical Options: +// force-command /bin/sleep +// source-address 192.168.1.0/24 +// Extensions: +// permit-X11-forwarding +// permit-agent-forwarding +// permit-port-forwarding +// permit-pty +// permit-user-rc +const exampleSSHCertWithOptions = `ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgDyysCJY0XrO1n03EeRRoITnTPdjENFmWDs9X58PP3VUAAAADAQABAAABAQDACh1rt2DXfV3hk6fszSQcQ/rueMId0kVD9U7nl8cfEnFxqOCrNT92g4laQIGl2mn8lsGZfTLg8ksHq3gkvgO3oo/0wHy4v32JeBOHTsN5AL4gfHNEhWeWb50ev47hnTsRIt9P4dxogeUo/hTu7j9+s9lLpEQXCvq6xocXQt0j8MV9qZBBXFLXVT3cWIkSqOdwt/5ZBg+1GSrc7WfCXVWgTk4a20uPMuJPxU4RQwZW6X3+O8Pqo8C3cW0OzZRFP6gUYUKUsTI5WntlS+LAxgw1mZNsozFGdbiOPRnEryE3SRldh9vjDR3tin1fGpA5P7+CEB/bqaXtG3V+F2OkqaMNAAAAAAAAAAAAAAABAAAACHRlc3RjZXJ0AAAAAAAAAAAAAAAA//////////8AAABLAAAADWZvcmNlLWNvbW1hbmQAAAAOAAAACi9iaW4vc2xlZXAAAAAOc291cmNlLWFkZHJlc3MAAAASAAAADjE5Mi4xNjguMS4wLzI0AAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAABFwAAAAdzc2gtcnNhAAAAAwEAAQAAAQEAwU+c5ui5A8+J/CFpjW8wCa52bEODA808WWQDCSuTG/eMXNf59v9Y8Pk0F1E9dGCosSNyVcB/hacUrc6He+i97+HJCyKavBsE6GDxrjRyxYqAlfcOXi/IVmaUGiO8OQ39d4GHrjToInKvExSUeleQyH4Y4/e27T/pILAqPFL3fyrvMLT5qU9QyIt6zIpa7GBP5+urouNavMprV3zsfIqNBbWypinOQAw823a5wN+zwXnhZrgQiHZ/USG09Y6k98y1dTVz8YHlQVR4D3lpTAsKDKJ5hCH9WU4fdf+lU8OyNGaJ/vz0XNqxcToe1l4numLTnaoSuH89pHryjqurB7lJKwAAAQ8AAAAHc3NoLXJzYQAAAQCaHvUIoPL1zWUHIXLvu96/HU1s/i4CAW2IIEuGgxCUCiFj6vyTyYtgxQxcmbfZf6eaITlS6XJZa7Qq4iaFZh75C1DXTX8labXhRSD4E2t//AIP9MC1rtQC5xo6FmbQ+BoKcDskr+mNACcbRSxs3IL3bwCfWDnIw2WbVox9ZdcthJKk4UoCW4ix4QwdHw7zlddlz++fGEEVhmTbll1SUkycGApPFBsAYRTMupUJcYPIeReBI/m8XfkoMk99bV8ZJQTAd7OekHY2/48Ff53jLmyDjP7kNw1F8OaPtkFs6dGJXta4krmaekPy87j+35In5hFj7yoOqvSbmYUkeX70/GGQ` + +func TestParseCertWithOptions(t *testing.T) { + opts := map[string]string{ + "source-address": "192.168.1.0/24", + "force-command": "/bin/sleep", + } + exts := map[string]string{ + "permit-X11-forwarding": "", + "permit-agent-forwarding": "", + "permit-port-forwarding": "", + "permit-pty": "", + "permit-user-rc": "", + } + authKeyBytes := []byte(exampleSSHCertWithOptions) + + key, _, _, rest, err := ParseAuthorizedKey(authKeyBytes) + if err != nil { + t.Fatalf("ParseAuthorizedKey: %v", err) + } + if len(rest) > 0 { + t.Errorf("rest: got %q, want empty", rest) + } + cert, ok := key.(*Certificate) + if !ok { + t.Fatalf("got %v (%T), want *Certificate", key, key) + } + if !reflect.DeepEqual(cert.CriticalOptions, opts) { + t.Errorf("unexpected critical options - got %v, want %v", cert.CriticalOptions, opts) + } + if !reflect.DeepEqual(cert.Extensions, exts) { + t.Errorf("unexpected Extensions - got %v, want %v", cert.Extensions, exts) + } + marshaled := MarshalAuthorizedKey(key) + // Before comparison, remove the trailing newline that + // MarshalAuthorizedKey adds. + marshaled = marshaled[:len(marshaled)-1] + if !bytes.Equal(authKeyBytes, marshaled) { + t.Errorf("marshaled certificate does not match original: got %q, want %q", marshaled, authKeyBytes) + } +} + +func TestValidateCert(t *testing.T) { + key, _, _, _, err := ParseAuthorizedKey([]byte(exampleSSHCert)) + if err != nil { + t.Fatalf("ParseAuthorizedKey: %v", err) + } + validCert, ok := key.(*Certificate) + if !ok { + t.Fatalf("got %v (%T), want *Certificate", key, key) + } + checker := CertChecker{} + checker.IsAuthority = func(k PublicKey) bool { + return bytes.Equal(k.Marshal(), validCert.SignatureKey.Marshal()) + } + + if err := checker.CheckCert("user", validCert); err != nil { + t.Errorf("Unable to validate certificate: %v", err) + } + invalidCert := &Certificate{ + Key: testPublicKeys["rsa"], + SignatureKey: testPublicKeys["ecdsa"], + ValidBefore: CertTimeInfinity, + Signature: &Signature{}, + } + if err := checker.CheckCert("user", invalidCert); err == nil { + t.Error("Invalid cert signature passed validation") + } +} + +func TestValidateCertTime(t *testing.T) { + cert := Certificate{ + ValidPrincipals: []string{"user"}, + Key: testPublicKeys["rsa"], + ValidAfter: 50, + ValidBefore: 100, + } + + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + + for ts, ok := range map[int64]bool{ + 25: false, + 50: true, + 99: true, + 100: false, + 125: false, + } { + checker := CertChecker{ + Clock: func() time.Time { return time.Unix(ts, 0) }, + } + checker.IsAuthority = func(k PublicKey) bool { + return bytes.Equal(k.Marshal(), + testPublicKeys["ecdsa"].Marshal()) + } + + if v := checker.CheckCert("user", &cert); (v == nil) != ok { + t.Errorf("Authenticate(%d): %v", ts, v) + } + } +} + +// TODO(hanwen): tests for +// +// host keys: +// * fallbacks + +func TestHostKeyCert(t *testing.T) { + cert := &Certificate{ + ValidPrincipals: []string{"hostname", "hostname.domain"}, + Key: testPublicKeys["rsa"], + ValidBefore: CertTimeInfinity, + CertType: HostCert, + } + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + + checker := &CertChecker{ + IsAuthority: func(p PublicKey) bool { + return bytes.Equal(testPublicKeys["ecdsa"].Marshal(), p.Marshal()) + }, + } + + certSigner, err := NewCertSigner(cert, testSigners["rsa"]) + if err != nil { + t.Errorf("NewCertSigner: %v", err) + } + + for _, name := range []string{"hostname", "otherhost"} { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + errc := make(chan error) + + go func() { + conf := ServerConfig{ + NoClientAuth: true, + } + conf.AddHostKey(certSigner) + _, _, _, err := NewServerConn(c1, &conf) + errc <- err + }() + + config := &ClientConfig{ + User: "user", + HostKeyCallback: checker.CheckHostKey, + } + _, _, _, err = NewClientConn(c2, name, config) + + succeed := name == "hostname" + if (err == nil) != succeed { + t.Fatalf("NewClientConn(%q): %v", name, err) + } + + err = <-errc + if (err == nil) != succeed { + t.Fatalf("NewServerConn(%q): %v", name, err) + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/channel.go b/vendor/golang.org/x/crypto/ssh/channel.go new file mode 100644 index 0000000..6d709b5 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/channel.go @@ -0,0 +1,633 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "encoding/binary" + "errors" + "fmt" + "io" + "log" + "sync" +) + +const ( + minPacketLength = 9 + // channelMaxPacket contains the maximum number of bytes that will be + // sent in a single packet. As per RFC 4253, section 6.1, 32k is also + // the minimum. + channelMaxPacket = 1 << 15 + // We follow OpenSSH here. + channelWindowSize = 64 * channelMaxPacket +) + +// NewChannel represents an incoming request to a channel. It must either be +// accepted for use by calling Accept, or rejected by calling Reject. +type NewChannel interface { + // Accept accepts the channel creation request. It returns the Channel + // and a Go channel containing SSH requests. The Go channel must be + // serviced otherwise the Channel will hang. + Accept() (Channel, <-chan *Request, error) + + // Reject rejects the channel creation request. After calling + // this, no other methods on the Channel may be called. + Reject(reason RejectionReason, message string) error + + // ChannelType returns the type of the channel, as supplied by the + // client. + ChannelType() string + + // ExtraData returns the arbitrary payload for this channel, as supplied + // by the client. This data is specific to the channel type. + ExtraData() []byte +} + +// A Channel is an ordered, reliable, flow-controlled, duplex stream +// that is multiplexed over an SSH connection. +type Channel interface { + // Read reads up to len(data) bytes from the channel. + Read(data []byte) (int, error) + + // Write writes len(data) bytes to the channel. + Write(data []byte) (int, error) + + // Close signals end of channel use. No data may be sent after this + // call. + Close() error + + // CloseWrite signals the end of sending in-band + // data. Requests may still be sent, and the other side may + // still send data + CloseWrite() error + + // SendRequest sends a channel request. If wantReply is true, + // it will wait for a reply and return the result as a + // boolean, otherwise the return value will be false. Channel + // requests are out-of-band messages so they may be sent even + // if the data stream is closed or blocked by flow control. + // If the channel is closed before a reply is returned, io.EOF + // is returned. + SendRequest(name string, wantReply bool, payload []byte) (bool, error) + + // Stderr returns an io.ReadWriter that writes to this channel + // with the extended data type set to stderr. Stderr may + // safely be read and written from a different goroutine than + // Read and Write respectively. + Stderr() io.ReadWriter +} + +// Request is a request sent outside of the normal stream of +// data. Requests can either be specific to an SSH channel, or they +// can be global. +type Request struct { + Type string + WantReply bool + Payload []byte + + ch *channel + mux *mux +} + +// Reply sends a response to a request. It must be called for all requests +// where WantReply is true and is a no-op otherwise. The payload argument is +// ignored for replies to channel-specific requests. +func (r *Request) Reply(ok bool, payload []byte) error { + if !r.WantReply { + return nil + } + + if r.ch == nil { + return r.mux.ackRequest(ok, payload) + } + + return r.ch.ackRequest(ok) +} + +// RejectionReason is an enumeration used when rejecting channel creation +// requests. See RFC 4254, section 5.1. +type RejectionReason uint32 + +const ( + Prohibited RejectionReason = iota + 1 + ConnectionFailed + UnknownChannelType + ResourceShortage +) + +// String converts the rejection reason to human readable form. +func (r RejectionReason) String() string { + switch r { + case Prohibited: + return "administratively prohibited" + case ConnectionFailed: + return "connect failed" + case UnknownChannelType: + return "unknown channel type" + case ResourceShortage: + return "resource shortage" + } + return fmt.Sprintf("unknown reason %d", int(r)) +} + +func min(a uint32, b int) uint32 { + if a < uint32(b) { + return a + } + return uint32(b) +} + +type channelDirection uint8 + +const ( + channelInbound channelDirection = iota + channelOutbound +) + +// channel is an implementation of the Channel interface that works +// with the mux class. +type channel struct { + // R/O after creation + chanType string + extraData []byte + localId, remoteId uint32 + + // maxIncomingPayload and maxRemotePayload are the maximum + // payload sizes of normal and extended data packets for + // receiving and sending, respectively. The wire packet will + // be 9 or 13 bytes larger (excluding encryption overhead). + maxIncomingPayload uint32 + maxRemotePayload uint32 + + mux *mux + + // decided is set to true if an accept or reject message has been sent + // (for outbound channels) or received (for inbound channels). + decided bool + + // direction contains either channelOutbound, for channels created + // locally, or channelInbound, for channels created by the peer. + direction channelDirection + + // Pending internal channel messages. + msg chan interface{} + + // Since requests have no ID, there can be only one request + // with WantReply=true outstanding. This lock is held by a + // goroutine that has such an outgoing request pending. + sentRequestMu sync.Mutex + + incomingRequests chan *Request + + sentEOF bool + + // thread-safe data + remoteWin window + pending *buffer + extPending *buffer + + // windowMu protects myWindow, the flow-control window. + windowMu sync.Mutex + myWindow uint32 + + // writeMu serializes calls to mux.conn.writePacket() and + // protects sentClose and packetPool. This mutex must be + // different from windowMu, as writePacket can block if there + // is a key exchange pending. + writeMu sync.Mutex + sentClose bool + + // packetPool has a buffer for each extended channel ID to + // save allocations during writes. + packetPool map[uint32][]byte +} + +// writePacket sends a packet. If the packet is a channel close, it updates +// sentClose. This method takes the lock c.writeMu. +func (c *channel) writePacket(packet []byte) error { + c.writeMu.Lock() + if c.sentClose { + c.writeMu.Unlock() + return io.EOF + } + c.sentClose = (packet[0] == msgChannelClose) + err := c.mux.conn.writePacket(packet) + c.writeMu.Unlock() + return err +} + +func (c *channel) sendMessage(msg interface{}) error { + if debugMux { + log.Printf("send(%d): %#v", c.mux.chanList.offset, msg) + } + + p := Marshal(msg) + binary.BigEndian.PutUint32(p[1:], c.remoteId) + return c.writePacket(p) +} + +// WriteExtended writes data to a specific extended stream. These streams are +// used, for example, for stderr. +func (c *channel) WriteExtended(data []byte, extendedCode uint32) (n int, err error) { + if c.sentEOF { + return 0, io.EOF + } + // 1 byte message type, 4 bytes remoteId, 4 bytes data length + opCode := byte(msgChannelData) + headerLength := uint32(9) + if extendedCode > 0 { + headerLength += 4 + opCode = msgChannelExtendedData + } + + c.writeMu.Lock() + packet := c.packetPool[extendedCode] + // We don't remove the buffer from packetPool, so + // WriteExtended calls from different goroutines will be + // flagged as errors by the race detector. + c.writeMu.Unlock() + + for len(data) > 0 { + space := min(c.maxRemotePayload, len(data)) + if space, err = c.remoteWin.reserve(space); err != nil { + return n, err + } + if want := headerLength + space; uint32(cap(packet)) < want { + packet = make([]byte, want) + } else { + packet = packet[:want] + } + + todo := data[:space] + + packet[0] = opCode + binary.BigEndian.PutUint32(packet[1:], c.remoteId) + if extendedCode > 0 { + binary.BigEndian.PutUint32(packet[5:], uint32(extendedCode)) + } + binary.BigEndian.PutUint32(packet[headerLength-4:], uint32(len(todo))) + copy(packet[headerLength:], todo) + if err = c.writePacket(packet); err != nil { + return n, err + } + + n += len(todo) + data = data[len(todo):] + } + + c.writeMu.Lock() + c.packetPool[extendedCode] = packet + c.writeMu.Unlock() + + return n, err +} + +func (c *channel) handleData(packet []byte) error { + headerLen := 9 + isExtendedData := packet[0] == msgChannelExtendedData + if isExtendedData { + headerLen = 13 + } + if len(packet) < headerLen { + // malformed data packet + return parseError(packet[0]) + } + + var extended uint32 + if isExtendedData { + extended = binary.BigEndian.Uint32(packet[5:]) + } + + length := binary.BigEndian.Uint32(packet[headerLen-4 : headerLen]) + if length == 0 { + return nil + } + if length > c.maxIncomingPayload { + // TODO(hanwen): should send Disconnect? + return errors.New("ssh: incoming packet exceeds maximum payload size") + } + + data := packet[headerLen:] + if length != uint32(len(data)) { + return errors.New("ssh: wrong packet length") + } + + c.windowMu.Lock() + if c.myWindow < length { + c.windowMu.Unlock() + // TODO(hanwen): should send Disconnect with reason? + return errors.New("ssh: remote side wrote too much") + } + c.myWindow -= length + c.windowMu.Unlock() + + if extended == 1 { + c.extPending.write(data) + } else if extended > 0 { + // discard other extended data. + } else { + c.pending.write(data) + } + return nil +} + +func (c *channel) adjustWindow(n uint32) error { + c.windowMu.Lock() + // Since myWindow is managed on our side, and can never exceed + // the initial window setting, we don't worry about overflow. + c.myWindow += uint32(n) + c.windowMu.Unlock() + return c.sendMessage(windowAdjustMsg{ + AdditionalBytes: uint32(n), + }) +} + +func (c *channel) ReadExtended(data []byte, extended uint32) (n int, err error) { + switch extended { + case 1: + n, err = c.extPending.Read(data) + case 0: + n, err = c.pending.Read(data) + default: + return 0, fmt.Errorf("ssh: extended code %d unimplemented", extended) + } + + if n > 0 { + err = c.adjustWindow(uint32(n)) + // sendWindowAdjust can return io.EOF if the remote + // peer has closed the connection, however we want to + // defer forwarding io.EOF to the caller of Read until + // the buffer has been drained. + if n > 0 && err == io.EOF { + err = nil + } + } + + return n, err +} + +func (c *channel) close() { + c.pending.eof() + c.extPending.eof() + close(c.msg) + close(c.incomingRequests) + c.writeMu.Lock() + // This is not necessary for a normal channel teardown, but if + // there was another error, it is. + c.sentClose = true + c.writeMu.Unlock() + // Unblock writers. + c.remoteWin.close() +} + +// responseMessageReceived is called when a success or failure message is +// received on a channel to check that such a message is reasonable for the +// given channel. +func (c *channel) responseMessageReceived() error { + if c.direction == channelInbound { + return errors.New("ssh: channel response message received on inbound channel") + } + if c.decided { + return errors.New("ssh: duplicate response received for channel") + } + c.decided = true + return nil +} + +func (c *channel) handlePacket(packet []byte) error { + switch packet[0] { + case msgChannelData, msgChannelExtendedData: + return c.handleData(packet) + case msgChannelClose: + c.sendMessage(channelCloseMsg{PeersId: c.remoteId}) + c.mux.chanList.remove(c.localId) + c.close() + return nil + case msgChannelEOF: + // RFC 4254 is mute on how EOF affects dataExt messages but + // it is logical to signal EOF at the same time. + c.extPending.eof() + c.pending.eof() + return nil + } + + decoded, err := decode(packet) + if err != nil { + return err + } + + switch msg := decoded.(type) { + case *channelOpenFailureMsg: + if err := c.responseMessageReceived(); err != nil { + return err + } + c.mux.chanList.remove(msg.PeersId) + c.msg <- msg + case *channelOpenConfirmMsg: + if err := c.responseMessageReceived(); err != nil { + return err + } + if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 { + return fmt.Errorf("ssh: invalid MaxPacketSize %d from peer", msg.MaxPacketSize) + } + c.remoteId = msg.MyId + c.maxRemotePayload = msg.MaxPacketSize + c.remoteWin.add(msg.MyWindow) + c.msg <- msg + case *windowAdjustMsg: + if !c.remoteWin.add(msg.AdditionalBytes) { + return fmt.Errorf("ssh: invalid window update for %d bytes", msg.AdditionalBytes) + } + case *channelRequestMsg: + req := Request{ + Type: msg.Request, + WantReply: msg.WantReply, + Payload: msg.RequestSpecificData, + ch: c, + } + + c.incomingRequests <- &req + default: + c.msg <- msg + } + return nil +} + +func (m *mux) newChannel(chanType string, direction channelDirection, extraData []byte) *channel { + ch := &channel{ + remoteWin: window{Cond: newCond()}, + myWindow: channelWindowSize, + pending: newBuffer(), + extPending: newBuffer(), + direction: direction, + incomingRequests: make(chan *Request, 16), + msg: make(chan interface{}, 16), + chanType: chanType, + extraData: extraData, + mux: m, + packetPool: make(map[uint32][]byte), + } + ch.localId = m.chanList.add(ch) + return ch +} + +var errUndecided = errors.New("ssh: must Accept or Reject channel") +var errDecidedAlready = errors.New("ssh: can call Accept or Reject only once") + +type extChannel struct { + code uint32 + ch *channel +} + +func (e *extChannel) Write(data []byte) (n int, err error) { + return e.ch.WriteExtended(data, e.code) +} + +func (e *extChannel) Read(data []byte) (n int, err error) { + return e.ch.ReadExtended(data, e.code) +} + +func (c *channel) Accept() (Channel, <-chan *Request, error) { + if c.decided { + return nil, nil, errDecidedAlready + } + c.maxIncomingPayload = channelMaxPacket + confirm := channelOpenConfirmMsg{ + PeersId: c.remoteId, + MyId: c.localId, + MyWindow: c.myWindow, + MaxPacketSize: c.maxIncomingPayload, + } + c.decided = true + if err := c.sendMessage(confirm); err != nil { + return nil, nil, err + } + + return c, c.incomingRequests, nil +} + +func (ch *channel) Reject(reason RejectionReason, message string) error { + if ch.decided { + return errDecidedAlready + } + reject := channelOpenFailureMsg{ + PeersId: ch.remoteId, + Reason: reason, + Message: message, + Language: "en", + } + ch.decided = true + return ch.sendMessage(reject) +} + +func (ch *channel) Read(data []byte) (int, error) { + if !ch.decided { + return 0, errUndecided + } + return ch.ReadExtended(data, 0) +} + +func (ch *channel) Write(data []byte) (int, error) { + if !ch.decided { + return 0, errUndecided + } + return ch.WriteExtended(data, 0) +} + +func (ch *channel) CloseWrite() error { + if !ch.decided { + return errUndecided + } + ch.sentEOF = true + return ch.sendMessage(channelEOFMsg{ + PeersId: ch.remoteId}) +} + +func (ch *channel) Close() error { + if !ch.decided { + return errUndecided + } + + return ch.sendMessage(channelCloseMsg{ + PeersId: ch.remoteId}) +} + +// Extended returns an io.ReadWriter that sends and receives data on the given, +// SSH extended stream. Such streams are used, for example, for stderr. +func (ch *channel) Extended(code uint32) io.ReadWriter { + if !ch.decided { + return nil + } + return &extChannel{code, ch} +} + +func (ch *channel) Stderr() io.ReadWriter { + return ch.Extended(1) +} + +func (ch *channel) SendRequest(name string, wantReply bool, payload []byte) (bool, error) { + if !ch.decided { + return false, errUndecided + } + + if wantReply { + ch.sentRequestMu.Lock() + defer ch.sentRequestMu.Unlock() + } + + msg := channelRequestMsg{ + PeersId: ch.remoteId, + Request: name, + WantReply: wantReply, + RequestSpecificData: payload, + } + + if err := ch.sendMessage(msg); err != nil { + return false, err + } + + if wantReply { + m, ok := (<-ch.msg) + if !ok { + return false, io.EOF + } + switch m.(type) { + case *channelRequestFailureMsg: + return false, nil + case *channelRequestSuccessMsg: + return true, nil + default: + return false, fmt.Errorf("ssh: unexpected response to channel request: %#v", m) + } + } + + return false, nil +} + +// ackRequest either sends an ack or nack to the channel request. +func (ch *channel) ackRequest(ok bool) error { + if !ch.decided { + return errUndecided + } + + var msg interface{} + if !ok { + msg = channelRequestFailureMsg{ + PeersId: ch.remoteId, + } + } else { + msg = channelRequestSuccessMsg{ + PeersId: ch.remoteId, + } + } + return ch.sendMessage(msg) +} + +func (ch *channel) ChannelType() string { + return ch.chanType +} + +func (ch *channel) ExtraData() []byte { + return ch.extraData +} diff --git a/vendor/golang.org/x/crypto/ssh/cipher.go b/vendor/golang.org/x/crypto/ssh/cipher.go new file mode 100644 index 0000000..34d3917 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/cipher.go @@ -0,0 +1,579 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/des" + "crypto/rc4" + "crypto/subtle" + "encoding/binary" + "errors" + "fmt" + "hash" + "io" + "io/ioutil" +) + +const ( + packetSizeMultiple = 16 // TODO(huin) this should be determined by the cipher. + + // RFC 4253 section 6.1 defines a minimum packet size of 32768 that implementations + // MUST be able to process (plus a few more kilobytes for padding and mac). The RFC + // indicates implementations SHOULD be able to handle larger packet sizes, but then + // waffles on about reasonable limits. + // + // OpenSSH caps their maxPacket at 256kB so we choose to do + // the same. maxPacket is also used to ensure that uint32 + // length fields do not overflow, so it should remain well + // below 4G. + maxPacket = 256 * 1024 +) + +// noneCipher implements cipher.Stream and provides no encryption. It is used +// by the transport before the first key-exchange. +type noneCipher struct{} + +func (c noneCipher) XORKeyStream(dst, src []byte) { + copy(dst, src) +} + +func newAESCTR(key, iv []byte) (cipher.Stream, error) { + c, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + return cipher.NewCTR(c, iv), nil +} + +func newRC4(key, iv []byte) (cipher.Stream, error) { + return rc4.NewCipher(key) +} + +type streamCipherMode struct { + keySize int + ivSize int + skip int + createFunc func(key, iv []byte) (cipher.Stream, error) +} + +func (c *streamCipherMode) createStream(key, iv []byte) (cipher.Stream, error) { + if len(key) < c.keySize { + panic("ssh: key length too small for cipher") + } + if len(iv) < c.ivSize { + panic("ssh: iv too small for cipher") + } + + stream, err := c.createFunc(key[:c.keySize], iv[:c.ivSize]) + if err != nil { + return nil, err + } + + var streamDump []byte + if c.skip > 0 { + streamDump = make([]byte, 512) + } + + for remainingToDump := c.skip; remainingToDump > 0; { + dumpThisTime := remainingToDump + if dumpThisTime > len(streamDump) { + dumpThisTime = len(streamDump) + } + stream.XORKeyStream(streamDump[:dumpThisTime], streamDump[:dumpThisTime]) + remainingToDump -= dumpThisTime + } + + return stream, nil +} + +// cipherModes documents properties of supported ciphers. Ciphers not included +// are not supported and will not be negotiated, even if explicitly requested in +// ClientConfig.Crypto.Ciphers. +var cipherModes = map[string]*streamCipherMode{ + // Ciphers from RFC4344, which introduced many CTR-based ciphers. Algorithms + // are defined in the order specified in the RFC. + "aes128-ctr": {16, aes.BlockSize, 0, newAESCTR}, + "aes192-ctr": {24, aes.BlockSize, 0, newAESCTR}, + "aes256-ctr": {32, aes.BlockSize, 0, newAESCTR}, + + // Ciphers from RFC4345, which introduces security-improved arcfour ciphers. + // They are defined in the order specified in the RFC. + "arcfour128": {16, 0, 1536, newRC4}, + "arcfour256": {32, 0, 1536, newRC4}, + + // Cipher defined in RFC 4253, which describes SSH Transport Layer Protocol. + // Note that this cipher is not safe, as stated in RFC 4253: "Arcfour (and + // RC4) has problems with weak keys, and should be used with caution." + // RFC4345 introduces improved versions of Arcfour. + "arcfour": {16, 0, 0, newRC4}, + + // AES-GCM is not a stream cipher, so it is constructed with a + // special case. If we add any more non-stream ciphers, we + // should invest a cleaner way to do this. + gcmCipherID: {16, 12, 0, nil}, + + // CBC mode is insecure and so is not included in the default config. + // (See http://www.isg.rhul.ac.uk/~kp/SandPfinal.pdf). If absolutely + // needed, it's possible to specify a custom Config to enable it. + // You should expect that an active attacker can recover plaintext if + // you do. + aes128cbcID: {16, aes.BlockSize, 0, nil}, + + // 3des-cbc is insecure and is disabled by default. + tripledescbcID: {24, des.BlockSize, 0, nil}, +} + +// prefixLen is the length of the packet prefix that contains the packet length +// and number of padding bytes. +const prefixLen = 5 + +// streamPacketCipher is a packetCipher using a stream cipher. +type streamPacketCipher struct { + mac hash.Hash + cipher cipher.Stream + + // The following members are to avoid per-packet allocations. + prefix [prefixLen]byte + seqNumBytes [4]byte + padding [2 * packetSizeMultiple]byte + packetData []byte + macResult []byte +} + +// readPacket reads and decrypt a single packet from the reader argument. +func (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { + if _, err := io.ReadFull(r, s.prefix[:]); err != nil { + return nil, err + } + + s.cipher.XORKeyStream(s.prefix[:], s.prefix[:]) + length := binary.BigEndian.Uint32(s.prefix[0:4]) + paddingLength := uint32(s.prefix[4]) + + var macSize uint32 + if s.mac != nil { + s.mac.Reset() + binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum) + s.mac.Write(s.seqNumBytes[:]) + s.mac.Write(s.prefix[:]) + macSize = uint32(s.mac.Size()) + } + + if length <= paddingLength+1 { + return nil, errors.New("ssh: invalid packet length, packet too small") + } + + if length > maxPacket { + return nil, errors.New("ssh: invalid packet length, packet too large") + } + + // the maxPacket check above ensures that length-1+macSize + // does not overflow. + if uint32(cap(s.packetData)) < length-1+macSize { + s.packetData = make([]byte, length-1+macSize) + } else { + s.packetData = s.packetData[:length-1+macSize] + } + + if _, err := io.ReadFull(r, s.packetData); err != nil { + return nil, err + } + mac := s.packetData[length-1:] + data := s.packetData[:length-1] + s.cipher.XORKeyStream(data, data) + + if s.mac != nil { + s.mac.Write(data) + s.macResult = s.mac.Sum(s.macResult[:0]) + if subtle.ConstantTimeCompare(s.macResult, mac) != 1 { + return nil, errors.New("ssh: MAC failure") + } + } + + return s.packetData[:length-paddingLength-1], nil +} + +// writePacket encrypts and sends a packet of data to the writer argument +func (s *streamPacketCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { + if len(packet) > maxPacket { + return errors.New("ssh: packet too large") + } + + paddingLength := packetSizeMultiple - (prefixLen+len(packet))%packetSizeMultiple + if paddingLength < 4 { + paddingLength += packetSizeMultiple + } + + length := len(packet) + 1 + paddingLength + binary.BigEndian.PutUint32(s.prefix[:], uint32(length)) + s.prefix[4] = byte(paddingLength) + padding := s.padding[:paddingLength] + if _, err := io.ReadFull(rand, padding); err != nil { + return err + } + + if s.mac != nil { + s.mac.Reset() + binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum) + s.mac.Write(s.seqNumBytes[:]) + s.mac.Write(s.prefix[:]) + s.mac.Write(packet) + s.mac.Write(padding) + } + + s.cipher.XORKeyStream(s.prefix[:], s.prefix[:]) + s.cipher.XORKeyStream(packet, packet) + s.cipher.XORKeyStream(padding, padding) + + if _, err := w.Write(s.prefix[:]); err != nil { + return err + } + if _, err := w.Write(packet); err != nil { + return err + } + if _, err := w.Write(padding); err != nil { + return err + } + + if s.mac != nil { + s.macResult = s.mac.Sum(s.macResult[:0]) + if _, err := w.Write(s.macResult); err != nil { + return err + } + } + + return nil +} + +type gcmCipher struct { + aead cipher.AEAD + prefix [4]byte + iv []byte + buf []byte +} + +func newGCMCipher(iv, key, macKey []byte) (packetCipher, error) { + c, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + + aead, err := cipher.NewGCM(c) + if err != nil { + return nil, err + } + + return &gcmCipher{ + aead: aead, + iv: iv, + }, nil +} + +const gcmTagSize = 16 + +func (c *gcmCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { + // Pad out to multiple of 16 bytes. This is different from the + // stream cipher because that encrypts the length too. + padding := byte(packetSizeMultiple - (1+len(packet))%packetSizeMultiple) + if padding < 4 { + padding += packetSizeMultiple + } + + length := uint32(len(packet) + int(padding) + 1) + binary.BigEndian.PutUint32(c.prefix[:], length) + if _, err := w.Write(c.prefix[:]); err != nil { + return err + } + + if cap(c.buf) < int(length) { + c.buf = make([]byte, length) + } else { + c.buf = c.buf[:length] + } + + c.buf[0] = padding + copy(c.buf[1:], packet) + if _, err := io.ReadFull(rand, c.buf[1+len(packet):]); err != nil { + return err + } + c.buf = c.aead.Seal(c.buf[:0], c.iv, c.buf, c.prefix[:]) + if _, err := w.Write(c.buf); err != nil { + return err + } + c.incIV() + + return nil +} + +func (c *gcmCipher) incIV() { + for i := 4 + 7; i >= 4; i-- { + c.iv[i]++ + if c.iv[i] != 0 { + break + } + } +} + +func (c *gcmCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { + if _, err := io.ReadFull(r, c.prefix[:]); err != nil { + return nil, err + } + length := binary.BigEndian.Uint32(c.prefix[:]) + if length > maxPacket { + return nil, errors.New("ssh: max packet length exceeded.") + } + + if cap(c.buf) < int(length+gcmTagSize) { + c.buf = make([]byte, length+gcmTagSize) + } else { + c.buf = c.buf[:length+gcmTagSize] + } + + if _, err := io.ReadFull(r, c.buf); err != nil { + return nil, err + } + + plain, err := c.aead.Open(c.buf[:0], c.iv, c.buf, c.prefix[:]) + if err != nil { + return nil, err + } + c.incIV() + + padding := plain[0] + if padding < 4 || padding >= 20 { + return nil, fmt.Errorf("ssh: illegal padding %d", padding) + } + + if int(padding+1) >= len(plain) { + return nil, fmt.Errorf("ssh: padding %d too large", padding) + } + plain = plain[1 : length-uint32(padding)] + return plain, nil +} + +// cbcCipher implements aes128-cbc cipher defined in RFC 4253 section 6.1 +type cbcCipher struct { + mac hash.Hash + macSize uint32 + decrypter cipher.BlockMode + encrypter cipher.BlockMode + + // The following members are to avoid per-packet allocations. + seqNumBytes [4]byte + packetData []byte + macResult []byte + + // Amount of data we should still read to hide which + // verification error triggered. + oracleCamouflage uint32 +} + +func newCBCCipher(c cipher.Block, iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) { + cbc := &cbcCipher{ + mac: macModes[algs.MAC].new(macKey), + decrypter: cipher.NewCBCDecrypter(c, iv), + encrypter: cipher.NewCBCEncrypter(c, iv), + packetData: make([]byte, 1024), + } + if cbc.mac != nil { + cbc.macSize = uint32(cbc.mac.Size()) + } + + return cbc, nil +} + +func newAESCBCCipher(iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) { + c, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + + cbc, err := newCBCCipher(c, iv, key, macKey, algs) + if err != nil { + return nil, err + } + + return cbc, nil +} + +func newTripleDESCBCCipher(iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) { + c, err := des.NewTripleDESCipher(key) + if err != nil { + return nil, err + } + + cbc, err := newCBCCipher(c, iv, key, macKey, algs) + if err != nil { + return nil, err + } + + return cbc, nil +} + +func maxUInt32(a, b int) uint32 { + if a > b { + return uint32(a) + } + return uint32(b) +} + +const ( + cbcMinPacketSizeMultiple = 8 + cbcMinPacketSize = 16 + cbcMinPaddingSize = 4 +) + +// cbcError represents a verification error that may leak information. +type cbcError string + +func (e cbcError) Error() string { return string(e) } + +func (c *cbcCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { + p, err := c.readPacketLeaky(seqNum, r) + if err != nil { + if _, ok := err.(cbcError); ok { + // Verification error: read a fixed amount of + // data, to make distinguishing between + // failing MAC and failing length check more + // difficult. + io.CopyN(ioutil.Discard, r, int64(c.oracleCamouflage)) + } + } + return p, err +} + +func (c *cbcCipher) readPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) { + blockSize := c.decrypter.BlockSize() + + // Read the header, which will include some of the subsequent data in the + // case of block ciphers - this is copied back to the payload later. + // How many bytes of payload/padding will be read with this first read. + firstBlockLength := uint32((prefixLen + blockSize - 1) / blockSize * blockSize) + firstBlock := c.packetData[:firstBlockLength] + if _, err := io.ReadFull(r, firstBlock); err != nil { + return nil, err + } + + c.oracleCamouflage = maxPacket + 4 + c.macSize - firstBlockLength + + c.decrypter.CryptBlocks(firstBlock, firstBlock) + length := binary.BigEndian.Uint32(firstBlock[:4]) + if length > maxPacket { + return nil, cbcError("ssh: packet too large") + } + if length+4 < maxUInt32(cbcMinPacketSize, blockSize) { + // The minimum size of a packet is 16 (or the cipher block size, whichever + // is larger) bytes. + return nil, cbcError("ssh: packet too small") + } + // The length of the packet (including the length field but not the MAC) must + // be a multiple of the block size or 8, whichever is larger. + if (length+4)%maxUInt32(cbcMinPacketSizeMultiple, blockSize) != 0 { + return nil, cbcError("ssh: invalid packet length multiple") + } + + paddingLength := uint32(firstBlock[4]) + if paddingLength < cbcMinPaddingSize || length <= paddingLength+1 { + return nil, cbcError("ssh: invalid packet length") + } + + // Positions within the c.packetData buffer: + macStart := 4 + length + paddingStart := macStart - paddingLength + + // Entire packet size, starting before length, ending at end of mac. + entirePacketSize := macStart + c.macSize + + // Ensure c.packetData is large enough for the entire packet data. + if uint32(cap(c.packetData)) < entirePacketSize { + // Still need to upsize and copy, but this should be rare at runtime, only + // on upsizing the packetData buffer. + c.packetData = make([]byte, entirePacketSize) + copy(c.packetData, firstBlock) + } else { + c.packetData = c.packetData[:entirePacketSize] + } + + if n, err := io.ReadFull(r, c.packetData[firstBlockLength:]); err != nil { + return nil, err + } else { + c.oracleCamouflage -= uint32(n) + } + + remainingCrypted := c.packetData[firstBlockLength:macStart] + c.decrypter.CryptBlocks(remainingCrypted, remainingCrypted) + + mac := c.packetData[macStart:] + if c.mac != nil { + c.mac.Reset() + binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum) + c.mac.Write(c.seqNumBytes[:]) + c.mac.Write(c.packetData[:macStart]) + c.macResult = c.mac.Sum(c.macResult[:0]) + if subtle.ConstantTimeCompare(c.macResult, mac) != 1 { + return nil, cbcError("ssh: MAC failure") + } + } + + return c.packetData[prefixLen:paddingStart], nil +} + +func (c *cbcCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { + effectiveBlockSize := maxUInt32(cbcMinPacketSizeMultiple, c.encrypter.BlockSize()) + + // Length of encrypted portion of the packet (header, payload, padding). + // Enforce minimum padding and packet size. + encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPaddingSize) + // Enforce block size. + encLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * effectiveBlockSize + + length := encLength - 4 + paddingLength := int(length) - (1 + len(packet)) + + // Overall buffer contains: header, payload, padding, mac. + // Space for the MAC is reserved in the capacity but not the slice length. + bufferSize := encLength + c.macSize + if uint32(cap(c.packetData)) < bufferSize { + c.packetData = make([]byte, encLength, bufferSize) + } else { + c.packetData = c.packetData[:encLength] + } + + p := c.packetData + + // Packet header. + binary.BigEndian.PutUint32(p, length) + p = p[4:] + p[0] = byte(paddingLength) + + // Payload. + p = p[1:] + copy(p, packet) + + // Padding. + p = p[len(packet):] + if _, err := io.ReadFull(rand, p); err != nil { + return err + } + + if c.mac != nil { + c.mac.Reset() + binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum) + c.mac.Write(c.seqNumBytes[:]) + c.mac.Write(c.packetData) + // The MAC is now appended into the capacity reserved for it earlier. + c.packetData = c.mac.Sum(c.packetData) + } + + c.encrypter.CryptBlocks(c.packetData[:encLength], c.packetData[:encLength]) + + if _, err := w.Write(c.packetData); err != nil { + return err + } + + return nil +} diff --git a/vendor/golang.org/x/crypto/ssh/cipher_test.go b/vendor/golang.org/x/crypto/ssh/cipher_test.go new file mode 100644 index 0000000..eced8d8 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/cipher_test.go @@ -0,0 +1,127 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto" + "crypto/aes" + "crypto/rand" + "testing" +) + +func TestDefaultCiphersExist(t *testing.T) { + for _, cipherAlgo := range supportedCiphers { + if _, ok := cipherModes[cipherAlgo]; !ok { + t.Errorf("default cipher %q is unknown", cipherAlgo) + } + } +} + +func TestPacketCiphers(t *testing.T) { + // Still test aes128cbc cipher although it's commented out. + cipherModes[aes128cbcID] = &streamCipherMode{16, aes.BlockSize, 0, nil} + defer delete(cipherModes, aes128cbcID) + + for cipher := range cipherModes { + kr := &kexResult{Hash: crypto.SHA1} + algs := directionAlgorithms{ + Cipher: cipher, + MAC: "hmac-sha1", + Compression: "none", + } + client, err := newPacketCipher(clientKeys, algs, kr) + if err != nil { + t.Errorf("newPacketCipher(client, %q): %v", cipher, err) + continue + } + server, err := newPacketCipher(clientKeys, algs, kr) + if err != nil { + t.Errorf("newPacketCipher(client, %q): %v", cipher, err) + continue + } + + want := "bla bla" + input := []byte(want) + buf := &bytes.Buffer{} + if err := client.writePacket(0, buf, rand.Reader, input); err != nil { + t.Errorf("writePacket(%q): %v", cipher, err) + continue + } + + packet, err := server.readPacket(0, buf) + if err != nil { + t.Errorf("readPacket(%q): %v", cipher, err) + continue + } + + if string(packet) != want { + t.Errorf("roundtrip(%q): got %q, want %q", cipher, packet, want) + } + } +} + +func TestCBCOracleCounterMeasure(t *testing.T) { + cipherModes[aes128cbcID] = &streamCipherMode{16, aes.BlockSize, 0, nil} + defer delete(cipherModes, aes128cbcID) + + kr := &kexResult{Hash: crypto.SHA1} + algs := directionAlgorithms{ + Cipher: aes128cbcID, + MAC: "hmac-sha1", + Compression: "none", + } + client, err := newPacketCipher(clientKeys, algs, kr) + if err != nil { + t.Fatalf("newPacketCipher(client): %v", err) + } + + want := "bla bla" + input := []byte(want) + buf := &bytes.Buffer{} + if err := client.writePacket(0, buf, rand.Reader, input); err != nil { + t.Errorf("writePacket: %v", err) + } + + packetSize := buf.Len() + buf.Write(make([]byte, 2*maxPacket)) + + // We corrupt each byte, but this usually will only test the + // 'packet too large' or 'MAC failure' cases. + lastRead := -1 + for i := 0; i < packetSize; i++ { + server, err := newPacketCipher(clientKeys, algs, kr) + if err != nil { + t.Fatalf("newPacketCipher(client): %v", err) + } + + fresh := &bytes.Buffer{} + fresh.Write(buf.Bytes()) + fresh.Bytes()[i] ^= 0x01 + + before := fresh.Len() + _, err = server.readPacket(0, fresh) + if err == nil { + t.Errorf("corrupt byte %d: readPacket succeeded ", i) + continue + } + if _, ok := err.(cbcError); !ok { + t.Errorf("corrupt byte %d: got %v (%T), want cbcError", i, err, err) + continue + } + + after := fresh.Len() + bytesRead := before - after + if bytesRead < maxPacket { + t.Errorf("corrupt byte %d: read %d bytes, want more than %d", i, bytesRead, maxPacket) + continue + } + + if i > 0 && bytesRead != lastRead { + t.Errorf("corrupt byte %d: read %d bytes, want %d bytes read", i, bytesRead, lastRead) + } + lastRead = bytesRead + } +} diff --git a/vendor/golang.org/x/crypto/ssh/client.go b/vendor/golang.org/x/crypto/ssh/client.go new file mode 100644 index 0000000..0212a20 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/client.go @@ -0,0 +1,213 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "errors" + "fmt" + "net" + "sync" + "time" +) + +// Client implements a traditional SSH client that supports shells, +// subprocesses, port forwarding and tunneled dialing. +type Client struct { + Conn + + forwards forwardList // forwarded tcpip connections from the remote side + mu sync.Mutex + channelHandlers map[string]chan NewChannel +} + +// HandleChannelOpen returns a channel on which NewChannel requests +// for the given type are sent. If the type already is being handled, +// nil is returned. The channel is closed when the connection is closed. +func (c *Client) HandleChannelOpen(channelType string) <-chan NewChannel { + c.mu.Lock() + defer c.mu.Unlock() + if c.channelHandlers == nil { + // The SSH channel has been closed. + c := make(chan NewChannel) + close(c) + return c + } + + ch := c.channelHandlers[channelType] + if ch != nil { + return nil + } + + ch = make(chan NewChannel, 16) + c.channelHandlers[channelType] = ch + return ch +} + +// NewClient creates a Client on top of the given connection. +func NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client { + conn := &Client{ + Conn: c, + channelHandlers: make(map[string]chan NewChannel, 1), + } + + go conn.handleGlobalRequests(reqs) + go conn.handleChannelOpens(chans) + go func() { + conn.Wait() + conn.forwards.closeAll() + }() + go conn.forwards.handleChannels(conn.HandleChannelOpen("forwarded-tcpip")) + return conn +} + +// NewClientConn establishes an authenticated SSH connection using c +// as the underlying transport. The Request and NewChannel channels +// must be serviced or the connection will hang. +func NewClientConn(c net.Conn, addr string, config *ClientConfig) (Conn, <-chan NewChannel, <-chan *Request, error) { + fullConf := *config + fullConf.SetDefaults() + conn := &connection{ + sshConn: sshConn{conn: c}, + } + + if err := conn.clientHandshake(addr, &fullConf); err != nil { + c.Close() + return nil, nil, nil, fmt.Errorf("ssh: handshake failed: %v", err) + } + conn.mux = newMux(conn.transport) + return conn, conn.mux.incomingChannels, conn.mux.incomingRequests, nil +} + +// clientHandshake performs the client side key exchange. See RFC 4253 Section +// 7. +func (c *connection) clientHandshake(dialAddress string, config *ClientConfig) error { + if config.ClientVersion != "" { + c.clientVersion = []byte(config.ClientVersion) + } else { + c.clientVersion = []byte(packageVersion) + } + var err error + c.serverVersion, err = exchangeVersions(c.sshConn.conn, c.clientVersion) + if err != nil { + return err + } + + c.transport = newClientTransport( + newTransport(c.sshConn.conn, config.Rand, true /* is client */), + c.clientVersion, c.serverVersion, config, dialAddress, c.sshConn.RemoteAddr()) + if err := c.transport.requestInitialKeyChange(); err != nil { + return err + } + + // We just did the key change, so the session ID is established. + c.sessionID = c.transport.getSessionID() + + return c.clientAuthenticate(config) +} + +// verifyHostKeySignature verifies the host key obtained in the key +// exchange. +func verifyHostKeySignature(hostKey PublicKey, result *kexResult) error { + sig, rest, ok := parseSignatureBody(result.Signature) + if len(rest) > 0 || !ok { + return errors.New("ssh: signature parse error") + } + + return hostKey.Verify(result.H, sig) +} + +// NewSession opens a new Session for this client. (A session is a remote +// execution of a program.) +func (c *Client) NewSession() (*Session, error) { + ch, in, err := c.OpenChannel("session", nil) + if err != nil { + return nil, err + } + return newSession(ch, in) +} + +func (c *Client) handleGlobalRequests(incoming <-chan *Request) { + for r := range incoming { + // This handles keepalive messages and matches + // the behaviour of OpenSSH. + r.Reply(false, nil) + } +} + +// handleChannelOpens channel open messages from the remote side. +func (c *Client) handleChannelOpens(in <-chan NewChannel) { + for ch := range in { + c.mu.Lock() + handler := c.channelHandlers[ch.ChannelType()] + c.mu.Unlock() + + if handler != nil { + handler <- ch + } else { + ch.Reject(UnknownChannelType, fmt.Sprintf("unknown channel type: %v", ch.ChannelType())) + } + } + + c.mu.Lock() + for _, ch := range c.channelHandlers { + close(ch) + } + c.channelHandlers = nil + c.mu.Unlock() +} + +// Dial starts a client connection to the given SSH server. It is a +// convenience function that connects to the given network address, +// initiates the SSH handshake, and then sets up a Client. For access +// to incoming channels and requests, use net.Dial with NewClientConn +// instead. +func Dial(network, addr string, config *ClientConfig) (*Client, error) { + conn, err := net.DialTimeout(network, addr, config.Timeout) + if err != nil { + return nil, err + } + c, chans, reqs, err := NewClientConn(conn, addr, config) + if err != nil { + return nil, err + } + return NewClient(c, chans, reqs), nil +} + +// A ClientConfig structure is used to configure a Client. It must not be +// modified after having been passed to an SSH function. +type ClientConfig struct { + // Config contains configuration that is shared between clients and + // servers. + Config + + // User contains the username to authenticate as. + User string + + // Auth contains possible authentication methods to use with the + // server. Only the first instance of a particular RFC 4252 method will + // be used during authentication. + Auth []AuthMethod + + // HostKeyCallback, if not nil, is called during the cryptographic + // handshake to validate the server's host key. A nil HostKeyCallback + // implies that all host keys are accepted. + HostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error + + // ClientVersion contains the version identification string that will + // be used for the connection. If empty, a reasonable default is used. + ClientVersion string + + // HostKeyAlgorithms lists the key types that the client will + // accept from the server as host key, in order of + // preference. If empty, a reasonable default is used. Any + // string returned from PublicKey.Type method may be used, or + // any of the CertAlgoXxxx and KeyAlgoXxxx constants. + HostKeyAlgorithms []string + + // Timeout is the maximum amount of time for the TCP connection to establish. + // + // A Timeout of zero means no timeout. + Timeout time.Duration +} diff --git a/vendor/golang.org/x/crypto/ssh/client_auth.go b/vendor/golang.org/x/crypto/ssh/client_auth.go new file mode 100644 index 0000000..294af0d --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/client_auth.go @@ -0,0 +1,473 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "errors" + "fmt" + "io" +) + +// clientAuthenticate authenticates with the remote server. See RFC 4252. +func (c *connection) clientAuthenticate(config *ClientConfig) error { + // initiate user auth session + if err := c.transport.writePacket(Marshal(&serviceRequestMsg{serviceUserAuth})); err != nil { + return err + } + packet, err := c.transport.readPacket() + if err != nil { + return err + } + var serviceAccept serviceAcceptMsg + if err := Unmarshal(packet, &serviceAccept); err != nil { + return err + } + + // during the authentication phase the client first attempts the "none" method + // then any untried methods suggested by the server. + tried := make(map[string]bool) + var lastMethods []string + for auth := AuthMethod(new(noneAuth)); auth != nil; { + ok, methods, err := auth.auth(c.transport.getSessionID(), config.User, c.transport, config.Rand) + if err != nil { + return err + } + if ok { + // success + return nil + } + tried[auth.method()] = true + if methods == nil { + methods = lastMethods + } + lastMethods = methods + + auth = nil + + findNext: + for _, a := range config.Auth { + candidateMethod := a.method() + if tried[candidateMethod] { + continue + } + for _, meth := range methods { + if meth == candidateMethod { + auth = a + break findNext + } + } + } + } + return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", keys(tried)) +} + +func keys(m map[string]bool) []string { + s := make([]string, 0, len(m)) + + for key := range m { + s = append(s, key) + } + return s +} + +// An AuthMethod represents an instance of an RFC 4252 authentication method. +type AuthMethod interface { + // auth authenticates user over transport t. + // Returns true if authentication is successful. + // If authentication is not successful, a []string of alternative + // method names is returned. If the slice is nil, it will be ignored + // and the previous set of possible methods will be reused. + auth(session []byte, user string, p packetConn, rand io.Reader) (bool, []string, error) + + // method returns the RFC 4252 method name. + method() string +} + +// "none" authentication, RFC 4252 section 5.2. +type noneAuth int + +func (n *noneAuth) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) { + if err := c.writePacket(Marshal(&userAuthRequestMsg{ + User: user, + Service: serviceSSH, + Method: "none", + })); err != nil { + return false, nil, err + } + + return handleAuthResponse(c) +} + +func (n *noneAuth) method() string { + return "none" +} + +// passwordCallback is an AuthMethod that fetches the password through +// a function call, e.g. by prompting the user. +type passwordCallback func() (password string, err error) + +func (cb passwordCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) { + type passwordAuthMsg struct { + User string `sshtype:"50"` + Service string + Method string + Reply bool + Password string + } + + pw, err := cb() + // REVIEW NOTE: is there a need to support skipping a password attempt? + // The program may only find out that the user doesn't have a password + // when prompting. + if err != nil { + return false, nil, err + } + + if err := c.writePacket(Marshal(&passwordAuthMsg{ + User: user, + Service: serviceSSH, + Method: cb.method(), + Reply: false, + Password: pw, + })); err != nil { + return false, nil, err + } + + return handleAuthResponse(c) +} + +func (cb passwordCallback) method() string { + return "password" +} + +// Password returns an AuthMethod using the given password. +func Password(secret string) AuthMethod { + return passwordCallback(func() (string, error) { return secret, nil }) +} + +// PasswordCallback returns an AuthMethod that uses a callback for +// fetching a password. +func PasswordCallback(prompt func() (secret string, err error)) AuthMethod { + return passwordCallback(prompt) +} + +type publickeyAuthMsg struct { + User string `sshtype:"50"` + Service string + Method string + // HasSig indicates to the receiver packet that the auth request is signed and + // should be used for authentication of the request. + HasSig bool + Algoname string + PubKey []byte + // Sig is tagged with "rest" so Marshal will exclude it during + // validateKey + Sig []byte `ssh:"rest"` +} + +// publicKeyCallback is an AuthMethod that uses a set of key +// pairs for authentication. +type publicKeyCallback func() ([]Signer, error) + +func (cb publicKeyCallback) method() string { + return "publickey" +} + +func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) { + // Authentication is performed in two stages. The first stage sends an + // enquiry to test if each key is acceptable to the remote. The second + // stage attempts to authenticate with the valid keys obtained in the + // first stage. + + signers, err := cb() + if err != nil { + return false, nil, err + } + var validKeys []Signer + for _, signer := range signers { + if ok, err := validateKey(signer.PublicKey(), user, c); ok { + validKeys = append(validKeys, signer) + } else { + if err != nil { + return false, nil, err + } + } + } + + // methods that may continue if this auth is not successful. + var methods []string + for _, signer := range validKeys { + pub := signer.PublicKey() + + pubKey := pub.Marshal() + sign, err := signer.Sign(rand, buildDataSignedForAuth(session, userAuthRequestMsg{ + User: user, + Service: serviceSSH, + Method: cb.method(), + }, []byte(pub.Type()), pubKey)) + if err != nil { + return false, nil, err + } + + // manually wrap the serialized signature in a string + s := Marshal(sign) + sig := make([]byte, stringLength(len(s))) + marshalString(sig, s) + msg := publickeyAuthMsg{ + User: user, + Service: serviceSSH, + Method: cb.method(), + HasSig: true, + Algoname: pub.Type(), + PubKey: pubKey, + Sig: sig, + } + p := Marshal(&msg) + if err := c.writePacket(p); err != nil { + return false, nil, err + } + var success bool + success, methods, err = handleAuthResponse(c) + if err != nil { + return false, nil, err + } + if success { + return success, methods, err + } + } + return false, methods, nil +} + +// validateKey validates the key provided is acceptable to the server. +func validateKey(key PublicKey, user string, c packetConn) (bool, error) { + pubKey := key.Marshal() + msg := publickeyAuthMsg{ + User: user, + Service: serviceSSH, + Method: "publickey", + HasSig: false, + Algoname: key.Type(), + PubKey: pubKey, + } + if err := c.writePacket(Marshal(&msg)); err != nil { + return false, err + } + + return confirmKeyAck(key, c) +} + +func confirmKeyAck(key PublicKey, c packetConn) (bool, error) { + pubKey := key.Marshal() + algoname := key.Type() + + for { + packet, err := c.readPacket() + if err != nil { + return false, err + } + switch packet[0] { + case msgUserAuthBanner: + // TODO(gpaul): add callback to present the banner to the user + case msgUserAuthPubKeyOk: + var msg userAuthPubKeyOkMsg + if err := Unmarshal(packet, &msg); err != nil { + return false, err + } + if msg.Algo != algoname || !bytes.Equal(msg.PubKey, pubKey) { + return false, nil + } + return true, nil + case msgUserAuthFailure: + return false, nil + default: + return false, unexpectedMessageError(msgUserAuthSuccess, packet[0]) + } + } +} + +// PublicKeys returns an AuthMethod that uses the given key +// pairs. +func PublicKeys(signers ...Signer) AuthMethod { + return publicKeyCallback(func() ([]Signer, error) { return signers, nil }) +} + +// PublicKeysCallback returns an AuthMethod that runs the given +// function to obtain a list of key pairs. +func PublicKeysCallback(getSigners func() (signers []Signer, err error)) AuthMethod { + return publicKeyCallback(getSigners) +} + +// handleAuthResponse returns whether the preceding authentication request succeeded +// along with a list of remaining authentication methods to try next and +// an error if an unexpected response was received. +func handleAuthResponse(c packetConn) (bool, []string, error) { + for { + packet, err := c.readPacket() + if err != nil { + return false, nil, err + } + + switch packet[0] { + case msgUserAuthBanner: + // TODO: add callback to present the banner to the user + case msgUserAuthFailure: + var msg userAuthFailureMsg + if err := Unmarshal(packet, &msg); err != nil { + return false, nil, err + } + return false, msg.Methods, nil + case msgUserAuthSuccess: + return true, nil, nil + default: + return false, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0]) + } + } +} + +// KeyboardInteractiveChallenge should print questions, optionally +// disabling echoing (e.g. for passwords), and return all the answers. +// Challenge may be called multiple times in a single session. After +// successful authentication, the server may send a challenge with no +// questions, for which the user and instruction messages should be +// printed. RFC 4256 section 3.3 details how the UI should behave for +// both CLI and GUI environments. +type KeyboardInteractiveChallenge func(user, instruction string, questions []string, echos []bool) (answers []string, err error) + +// KeyboardInteractive returns a AuthMethod using a prompt/response +// sequence controlled by the server. +func KeyboardInteractive(challenge KeyboardInteractiveChallenge) AuthMethod { + return challenge +} + +func (cb KeyboardInteractiveChallenge) method() string { + return "keyboard-interactive" +} + +func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) { + type initiateMsg struct { + User string `sshtype:"50"` + Service string + Method string + Language string + Submethods string + } + + if err := c.writePacket(Marshal(&initiateMsg{ + User: user, + Service: serviceSSH, + Method: "keyboard-interactive", + })); err != nil { + return false, nil, err + } + + for { + packet, err := c.readPacket() + if err != nil { + return false, nil, err + } + + // like handleAuthResponse, but with less options. + switch packet[0] { + case msgUserAuthBanner: + // TODO: Print banners during userauth. + continue + case msgUserAuthInfoRequest: + // OK + case msgUserAuthFailure: + var msg userAuthFailureMsg + if err := Unmarshal(packet, &msg); err != nil { + return false, nil, err + } + return false, msg.Methods, nil + case msgUserAuthSuccess: + return true, nil, nil + default: + return false, nil, unexpectedMessageError(msgUserAuthInfoRequest, packet[0]) + } + + var msg userAuthInfoRequestMsg + if err := Unmarshal(packet, &msg); err != nil { + return false, nil, err + } + + // Manually unpack the prompt/echo pairs. + rest := msg.Prompts + var prompts []string + var echos []bool + for i := 0; i < int(msg.NumPrompts); i++ { + prompt, r, ok := parseString(rest) + if !ok || len(r) == 0 { + return false, nil, errors.New("ssh: prompt format error") + } + prompts = append(prompts, string(prompt)) + echos = append(echos, r[0] != 0) + rest = r[1:] + } + + if len(rest) != 0 { + return false, nil, errors.New("ssh: extra data following keyboard-interactive pairs") + } + + answers, err := cb(msg.User, msg.Instruction, prompts, echos) + if err != nil { + return false, nil, err + } + + if len(answers) != len(prompts) { + return false, nil, errors.New("ssh: not enough answers from keyboard-interactive callback") + } + responseLength := 1 + 4 + for _, a := range answers { + responseLength += stringLength(len(a)) + } + serialized := make([]byte, responseLength) + p := serialized + p[0] = msgUserAuthInfoResponse + p = p[1:] + p = marshalUint32(p, uint32(len(answers))) + for _, a := range answers { + p = marshalString(p, []byte(a)) + } + + if err := c.writePacket(serialized); err != nil { + return false, nil, err + } + } +} + +type retryableAuthMethod struct { + authMethod AuthMethod + maxTries int +} + +func (r *retryableAuthMethod) auth(session []byte, user string, c packetConn, rand io.Reader) (ok bool, methods []string, err error) { + for i := 0; r.maxTries <= 0 || i < r.maxTries; i++ { + ok, methods, err = r.authMethod.auth(session, user, c, rand) + if ok || err != nil { // either success or error terminate + return ok, methods, err + } + } + return ok, methods, err +} + +func (r *retryableAuthMethod) method() string { + return r.authMethod.method() +} + +// RetryableAuthMethod is a decorator for other auth methods enabling them to +// be retried up to maxTries before considering that AuthMethod itself failed. +// If maxTries is <= 0, will retry indefinitely +// +// This is useful for interactive clients using challenge/response type +// authentication (e.g. Keyboard-Interactive, Password, etc) where the user +// could mistype their response resulting in the server issuing a +// SSH_MSG_USERAUTH_FAILURE (rfc4252 #8 [password] and rfc4256 #3.4 +// [keyboard-interactive]); Without this decorator, the non-retryable +// AuthMethod would be removed from future consideration, and never tried again +// (and so the user would never be able to retry their entry). +func RetryableAuthMethod(auth AuthMethod, maxTries int) AuthMethod { + return &retryableAuthMethod{authMethod: auth, maxTries: maxTries} +} diff --git a/vendor/golang.org/x/crypto/ssh/client_auth_test.go b/vendor/golang.org/x/crypto/ssh/client_auth_test.go new file mode 100644 index 0000000..1409276 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/client_auth_test.go @@ -0,0 +1,472 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/rand" + "errors" + "fmt" + "os" + "strings" + "testing" +) + +type keyboardInteractive map[string]string + +func (cr keyboardInteractive) Challenge(user string, instruction string, questions []string, echos []bool) ([]string, error) { + var answers []string + for _, q := range questions { + answers = append(answers, cr[q]) + } + return answers, nil +} + +// reused internally by tests +var clientPassword = "tiger" + +// tryAuth runs a handshake with a given config against an SSH server +// with config serverConfig +func tryAuth(t *testing.T, config *ClientConfig) error { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + certChecker := CertChecker{ + IsAuthority: func(k PublicKey) bool { + return bytes.Equal(k.Marshal(), testPublicKeys["ecdsa"].Marshal()) + }, + UserKeyFallback: func(conn ConnMetadata, key PublicKey) (*Permissions, error) { + if conn.User() == "testuser" && bytes.Equal(key.Marshal(), testPublicKeys["rsa"].Marshal()) { + return nil, nil + } + + return nil, fmt.Errorf("pubkey for %q not acceptable", conn.User()) + }, + IsRevoked: func(c *Certificate) bool { + return c.Serial == 666 + }, + } + + serverConfig := &ServerConfig{ + PasswordCallback: func(conn ConnMetadata, pass []byte) (*Permissions, error) { + if conn.User() == "testuser" && string(pass) == clientPassword { + return nil, nil + } + return nil, errors.New("password auth failed") + }, + PublicKeyCallback: certChecker.Authenticate, + KeyboardInteractiveCallback: func(conn ConnMetadata, challenge KeyboardInteractiveChallenge) (*Permissions, error) { + ans, err := challenge("user", + "instruction", + []string{"question1", "question2"}, + []bool{true, true}) + if err != nil { + return nil, err + } + ok := conn.User() == "testuser" && ans[0] == "answer1" && ans[1] == "answer2" + if ok { + challenge("user", "motd", nil, nil) + return nil, nil + } + return nil, errors.New("keyboard-interactive failed") + }, + AuthLogCallback: func(conn ConnMetadata, method string, err error) { + t.Logf("user %q, method %q: %v", conn.User(), method, err) + }, + } + serverConfig.AddHostKey(testSigners["rsa"]) + + go newServer(c1, serverConfig) + _, _, _, err = NewClientConn(c2, "", config) + return err +} + +func TestClientAuthPublicKey(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["rsa"]), + }, + } + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +func TestAuthMethodPassword(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + Password(clientPassword), + }, + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +func TestAuthMethodFallback(t *testing.T) { + var passwordCalled bool + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["rsa"]), + PasswordCallback( + func() (string, error) { + passwordCalled = true + return "WRONG", nil + }), + }, + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } + + if passwordCalled { + t.Errorf("password auth tried before public-key auth.") + } +} + +func TestAuthMethodWrongPassword(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + Password("wrong"), + PublicKeys(testSigners["rsa"]), + }, + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +func TestAuthMethodKeyboardInteractive(t *testing.T) { + answers := keyboardInteractive(map[string]string{ + "question1": "answer1", + "question2": "answer2", + }) + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + KeyboardInteractive(answers.Challenge), + }, + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +func TestAuthMethodWrongKeyboardInteractive(t *testing.T) { + answers := keyboardInteractive(map[string]string{ + "question1": "answer1", + "question2": "WRONG", + }) + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + KeyboardInteractive(answers.Challenge), + }, + } + + if err := tryAuth(t, config); err == nil { + t.Fatalf("wrong answers should not have authenticated with KeyboardInteractive") + } +} + +// the mock server will only authenticate ssh-rsa keys +func TestAuthMethodInvalidPublicKey(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["dsa"]), + }, + } + + if err := tryAuth(t, config); err == nil { + t.Fatalf("dsa private key should not have authenticated with rsa public key") + } +} + +// the client should authenticate with the second key +func TestAuthMethodRSAandDSA(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["dsa"], testSigners["rsa"]), + }, + } + if err := tryAuth(t, config); err != nil { + t.Fatalf("client could not authenticate with rsa key: %v", err) + } +} + +func TestClientHMAC(t *testing.T) { + for _, mac := range supportedMACs { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["rsa"]), + }, + Config: Config{ + MACs: []string{mac}, + }, + } + if err := tryAuth(t, config); err != nil { + t.Fatalf("client could not authenticate with mac algo %s: %v", mac, err) + } + } +} + +// issue 4285. +func TestClientUnsupportedCipher(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(), + }, + Config: Config{ + Ciphers: []string{"aes128-cbc"}, // not currently supported + }, + } + if err := tryAuth(t, config); err == nil { + t.Errorf("expected no ciphers in common") + } +} + +func TestClientUnsupportedKex(t *testing.T) { + if os.Getenv("GO_BUILDER_NAME") != "" { + t.Skip("skipping known-flaky test on the Go build dashboard; see golang.org/issue/15198") + } + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(), + }, + Config: Config{ + KeyExchanges: []string{"diffie-hellman-group-exchange-sha256"}, // not currently supported + }, + } + if err := tryAuth(t, config); err == nil || !strings.Contains(err.Error(), "common algorithm") { + t.Errorf("got %v, expected 'common algorithm'", err) + } +} + +func TestClientLoginCert(t *testing.T) { + cert := &Certificate{ + Key: testPublicKeys["rsa"], + ValidBefore: CertTimeInfinity, + CertType: UserCert, + } + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + certSigner, err := NewCertSigner(cert, testSigners["rsa"]) + if err != nil { + t.Fatalf("NewCertSigner: %v", err) + } + + clientConfig := &ClientConfig{ + User: "user", + } + clientConfig.Auth = append(clientConfig.Auth, PublicKeys(certSigner)) + + t.Log("should succeed") + if err := tryAuth(t, clientConfig); err != nil { + t.Errorf("cert login failed: %v", err) + } + + t.Log("corrupted signature") + cert.Signature.Blob[0]++ + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with corrupted sig") + } + + t.Log("revoked") + cert.Serial = 666 + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("revoked cert login succeeded") + } + cert.Serial = 1 + + t.Log("sign with wrong key") + cert.SignCert(rand.Reader, testSigners["dsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with non-authoritative key") + } + + t.Log("host cert") + cert.CertType = HostCert + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with wrong type") + } + cert.CertType = UserCert + + t.Log("principal specified") + cert.ValidPrincipals = []string{"user"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err != nil { + t.Errorf("cert login failed: %v", err) + } + + t.Log("wrong principal specified") + cert.ValidPrincipals = []string{"fred"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with wrong principal") + } + cert.ValidPrincipals = nil + + t.Log("added critical option") + cert.CriticalOptions = map[string]string{"root-access": "yes"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with unrecognized critical option") + } + + t.Log("allowed source address") + cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42/24"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err != nil { + t.Errorf("cert login with source-address failed: %v", err) + } + + t.Log("disallowed source address") + cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login with source-address succeeded") + } +} + +func testPermissionsPassing(withPermissions bool, t *testing.T) { + serverConfig := &ServerConfig{ + PublicKeyCallback: func(conn ConnMetadata, key PublicKey) (*Permissions, error) { + if conn.User() == "nopermissions" { + return nil, nil + } else { + return &Permissions{}, nil + } + }, + } + serverConfig.AddHostKey(testSigners["rsa"]) + + clientConfig := &ClientConfig{ + Auth: []AuthMethod{ + PublicKeys(testSigners["rsa"]), + }, + } + if withPermissions { + clientConfig.User = "permissions" + } else { + clientConfig.User = "nopermissions" + } + + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go NewClientConn(c2, "", clientConfig) + serverConn, err := newServer(c1, serverConfig) + if err != nil { + t.Fatal(err) + } + if p := serverConn.Permissions; (p != nil) != withPermissions { + t.Fatalf("withPermissions is %t, but Permissions object is %#v", withPermissions, p) + } +} + +func TestPermissionsPassing(t *testing.T) { + testPermissionsPassing(true, t) +} + +func TestNoPermissionsPassing(t *testing.T) { + testPermissionsPassing(false, t) +} + +func TestRetryableAuth(t *testing.T) { + n := 0 + passwords := []string{"WRONG1", "WRONG2"} + + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + RetryableAuthMethod(PasswordCallback(func() (string, error) { + p := passwords[n] + n++ + return p, nil + }), 2), + PublicKeys(testSigners["rsa"]), + }, + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } + if n != 2 { + t.Fatalf("Did not try all passwords") + } +} + +func ExampleRetryableAuthMethod(t *testing.T) { + user := "testuser" + NumberOfPrompts := 3 + + // Normally this would be a callback that prompts the user to answer the + // provided questions + Cb := func(user, instruction string, questions []string, echos []bool) (answers []string, err error) { + return []string{"answer1", "answer2"}, nil + } + + config := &ClientConfig{ + User: user, + Auth: []AuthMethod{ + RetryableAuthMethod(KeyboardInteractiveChallenge(Cb), NumberOfPrompts), + }, + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +// Test if username is received on server side when NoClientAuth is used +func TestClientAuthNone(t *testing.T) { + user := "testuser" + serverConfig := &ServerConfig{ + NoClientAuth: true, + } + serverConfig.AddHostKey(testSigners["rsa"]) + + clientConfig := &ClientConfig{ + User: user, + } + + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go NewClientConn(c2, "", clientConfig) + serverConn, err := newServer(c1, serverConfig) + if err != nil { + t.Fatalf("newServer: %v", err) + } + if serverConn.User() != user { + t.Fatalf("server: got %q, want %q", serverConn.User(), user) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/client_test.go b/vendor/golang.org/x/crypto/ssh/client_test.go new file mode 100644 index 0000000..1fe790c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/client_test.go @@ -0,0 +1,39 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "net" + "testing" +) + +func testClientVersion(t *testing.T, config *ClientConfig, expected string) { + clientConn, serverConn := net.Pipe() + defer clientConn.Close() + receivedVersion := make(chan string, 1) + go func() { + version, err := readVersion(serverConn) + if err != nil { + receivedVersion <- "" + } else { + receivedVersion <- string(version) + } + serverConn.Close() + }() + NewClientConn(clientConn, "", config) + actual := <-receivedVersion + if actual != expected { + t.Fatalf("got %s; want %s", actual, expected) + } +} + +func TestCustomClientVersion(t *testing.T) { + version := "Test-Client-Version-0.0" + testClientVersion(t, &ClientConfig{ClientVersion: version}, version) +} + +func TestDefaultClientVersion(t *testing.T) { + testClientVersion(t, &ClientConfig{}, packageVersion) +} diff --git a/vendor/golang.org/x/crypto/ssh/common.go b/vendor/golang.org/x/crypto/ssh/common.go new file mode 100644 index 0000000..2c72ab5 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/common.go @@ -0,0 +1,356 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "crypto" + "crypto/rand" + "fmt" + "io" + "sync" + + _ "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" +) + +// These are string constants in the SSH protocol. +const ( + compressionNone = "none" + serviceUserAuth = "ssh-userauth" + serviceSSH = "ssh-connection" +) + +// supportedCiphers specifies the supported ciphers in preference order. +var supportedCiphers = []string{ + "aes128-ctr", "aes192-ctr", "aes256-ctr", + "aes128-gcm@openssh.com", + "arcfour256", "arcfour128", +} + +// supportedKexAlgos specifies the supported key-exchange algorithms in +// preference order. +var supportedKexAlgos = []string{ + kexAlgoCurve25519SHA256, + // P384 and P521 are not constant-time yet, but since we don't + // reuse ephemeral keys, using them for ECDH should be OK. + kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, + kexAlgoDH14SHA1, kexAlgoDH1SHA1, +} + +// supportedKexAlgos specifies the supported host-key algorithms (i.e. methods +// of authenticating servers) in preference order. +var supportedHostKeyAlgos = []string{ + CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, + CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01, + + KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, + KeyAlgoRSA, KeyAlgoDSA, + + KeyAlgoED25519, +} + +// supportedMACs specifies a default set of MAC algorithms in preference order. +// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed +// because they have reached the end of their useful life. +var supportedMACs = []string{ + "hmac-sha2-256", "hmac-sha1", "hmac-sha1-96", +} + +var supportedCompressions = []string{compressionNone} + +// hashFuncs keeps the mapping of supported algorithms to their respective +// hashes needed for signature verification. +var hashFuncs = map[string]crypto.Hash{ + KeyAlgoRSA: crypto.SHA1, + KeyAlgoDSA: crypto.SHA1, + KeyAlgoECDSA256: crypto.SHA256, + KeyAlgoECDSA384: crypto.SHA384, + KeyAlgoECDSA521: crypto.SHA512, + CertAlgoRSAv01: crypto.SHA1, + CertAlgoDSAv01: crypto.SHA1, + CertAlgoECDSA256v01: crypto.SHA256, + CertAlgoECDSA384v01: crypto.SHA384, + CertAlgoECDSA521v01: crypto.SHA512, +} + +// unexpectedMessageError results when the SSH message that we received didn't +// match what we wanted. +func unexpectedMessageError(expected, got uint8) error { + return fmt.Errorf("ssh: unexpected message type %d (expected %d)", got, expected) +} + +// parseError results from a malformed SSH message. +func parseError(tag uint8) error { + return fmt.Errorf("ssh: parse error in message type %d", tag) +} + +func findCommon(what string, client []string, server []string) (common string, err error) { + for _, c := range client { + for _, s := range server { + if c == s { + return c, nil + } + } + } + return "", fmt.Errorf("ssh: no common algorithm for %s; client offered: %v, server offered: %v", what, client, server) +} + +type directionAlgorithms struct { + Cipher string + MAC string + Compression string +} + +type algorithms struct { + kex string + hostKey string + w directionAlgorithms + r directionAlgorithms +} + +func findAgreedAlgorithms(clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) { + result := &algorithms{} + + result.kex, err = findCommon("key exchange", clientKexInit.KexAlgos, serverKexInit.KexAlgos) + if err != nil { + return + } + + result.hostKey, err = findCommon("host key", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos) + if err != nil { + return + } + + result.w.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer) + if err != nil { + return + } + + result.r.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient) + if err != nil { + return + } + + result.w.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer) + if err != nil { + return + } + + result.r.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient) + if err != nil { + return + } + + result.w.Compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer) + if err != nil { + return + } + + result.r.Compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient) + if err != nil { + return + } + + return result, nil +} + +// If rekeythreshold is too small, we can't make any progress sending +// stuff. +const minRekeyThreshold uint64 = 256 + +// Config contains configuration data common to both ServerConfig and +// ClientConfig. +type Config struct { + // Rand provides the source of entropy for cryptographic + // primitives. If Rand is nil, the cryptographic random reader + // in package crypto/rand will be used. + Rand io.Reader + + // The maximum number of bytes sent or received after which a + // new key is negotiated. It must be at least 256. If + // unspecified, 1 gigabyte is used. + RekeyThreshold uint64 + + // The allowed key exchanges algorithms. If unspecified then a + // default set of algorithms is used. + KeyExchanges []string + + // The allowed cipher algorithms. If unspecified then a sensible + // default is used. + Ciphers []string + + // The allowed MAC algorithms. If unspecified then a sensible default + // is used. + MACs []string +} + +// SetDefaults sets sensible values for unset fields in config. This is +// exported for testing: Configs passed to SSH functions are copied and have +// default values set automatically. +func (c *Config) SetDefaults() { + if c.Rand == nil { + c.Rand = rand.Reader + } + if c.Ciphers == nil { + c.Ciphers = supportedCiphers + } + var ciphers []string + for _, c := range c.Ciphers { + if cipherModes[c] != nil { + // reject the cipher if we have no cipherModes definition + ciphers = append(ciphers, c) + } + } + c.Ciphers = ciphers + + if c.KeyExchanges == nil { + c.KeyExchanges = supportedKexAlgos + } + + if c.MACs == nil { + c.MACs = supportedMACs + } + + if c.RekeyThreshold == 0 { + // RFC 4253, section 9 suggests rekeying after 1G. + c.RekeyThreshold = 1 << 30 + } + if c.RekeyThreshold < minRekeyThreshold { + c.RekeyThreshold = minRekeyThreshold + } +} + +// buildDataSignedForAuth returns the data that is signed in order to prove +// possession of a private key. See RFC 4252, section 7. +func buildDataSignedForAuth(sessionId []byte, req userAuthRequestMsg, algo, pubKey []byte) []byte { + data := struct { + Session []byte + Type byte + User string + Service string + Method string + Sign bool + Algo []byte + PubKey []byte + }{ + sessionId, + msgUserAuthRequest, + req.User, + req.Service, + req.Method, + true, + algo, + pubKey, + } + return Marshal(data) +} + +func appendU16(buf []byte, n uint16) []byte { + return append(buf, byte(n>>8), byte(n)) +} + +func appendU32(buf []byte, n uint32) []byte { + return append(buf, byte(n>>24), byte(n>>16), byte(n>>8), byte(n)) +} + +func appendU64(buf []byte, n uint64) []byte { + return append(buf, + byte(n>>56), byte(n>>48), byte(n>>40), byte(n>>32), + byte(n>>24), byte(n>>16), byte(n>>8), byte(n)) +} + +func appendInt(buf []byte, n int) []byte { + return appendU32(buf, uint32(n)) +} + +func appendString(buf []byte, s string) []byte { + buf = appendU32(buf, uint32(len(s))) + buf = append(buf, s...) + return buf +} + +func appendBool(buf []byte, b bool) []byte { + if b { + return append(buf, 1) + } + return append(buf, 0) +} + +// newCond is a helper to hide the fact that there is no usable zero +// value for sync.Cond. +func newCond() *sync.Cond { return sync.NewCond(new(sync.Mutex)) } + +// window represents the buffer available to clients +// wishing to write to a channel. +type window struct { + *sync.Cond + win uint32 // RFC 4254 5.2 says the window size can grow to 2^32-1 + writeWaiters int + closed bool +} + +// add adds win to the amount of window available +// for consumers. +func (w *window) add(win uint32) bool { + // a zero sized window adjust is a noop. + if win == 0 { + return true + } + w.L.Lock() + if w.win+win < win { + w.L.Unlock() + return false + } + w.win += win + // It is unusual that multiple goroutines would be attempting to reserve + // window space, but not guaranteed. Use broadcast to notify all waiters + // that additional window is available. + w.Broadcast() + w.L.Unlock() + return true +} + +// close sets the window to closed, so all reservations fail +// immediately. +func (w *window) close() { + w.L.Lock() + w.closed = true + w.Broadcast() + w.L.Unlock() +} + +// reserve reserves win from the available window capacity. +// If no capacity remains, reserve will block. reserve may +// return less than requested. +func (w *window) reserve(win uint32) (uint32, error) { + var err error + w.L.Lock() + w.writeWaiters++ + w.Broadcast() + for w.win == 0 && !w.closed { + w.Wait() + } + w.writeWaiters-- + if w.win < win { + win = w.win + } + w.win -= win + if w.closed { + err = io.EOF + } + w.L.Unlock() + return win, err +} + +// waitWriterBlocked waits until some goroutine is blocked for further +// writes. It is used in tests only. +func (w *window) waitWriterBlocked() { + w.Cond.L.Lock() + for w.writeWaiters == 0 { + w.Cond.Wait() + } + w.Cond.L.Unlock() +} diff --git a/vendor/golang.org/x/crypto/ssh/connection.go b/vendor/golang.org/x/crypto/ssh/connection.go new file mode 100644 index 0000000..e786f2f --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/connection.go @@ -0,0 +1,143 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "fmt" + "net" +) + +// OpenChannelError is returned if the other side rejects an +// OpenChannel request. +type OpenChannelError struct { + Reason RejectionReason + Message string +} + +func (e *OpenChannelError) Error() string { + return fmt.Sprintf("ssh: rejected: %s (%s)", e.Reason, e.Message) +} + +// ConnMetadata holds metadata for the connection. +type ConnMetadata interface { + // User returns the user ID for this connection. + User() string + + // SessionID returns the sesson hash, also denoted by H. + SessionID() []byte + + // ClientVersion returns the client's version string as hashed + // into the session ID. + ClientVersion() []byte + + // ServerVersion returns the server's version string as hashed + // into the session ID. + ServerVersion() []byte + + // RemoteAddr returns the remote address for this connection. + RemoteAddr() net.Addr + + // LocalAddr returns the local address for this connection. + LocalAddr() net.Addr +} + +// Conn represents an SSH connection for both server and client roles. +// Conn is the basis for implementing an application layer, such +// as ClientConn, which implements the traditional shell access for +// clients. +type Conn interface { + ConnMetadata + + // SendRequest sends a global request, and returns the + // reply. If wantReply is true, it returns the response status + // and payload. See also RFC4254, section 4. + SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error) + + // OpenChannel tries to open an channel. If the request is + // rejected, it returns *OpenChannelError. On success it returns + // the SSH Channel and a Go channel for incoming, out-of-band + // requests. The Go channel must be serviced, or the + // connection will hang. + OpenChannel(name string, data []byte) (Channel, <-chan *Request, error) + + // Close closes the underlying network connection + Close() error + + // Wait blocks until the connection has shut down, and returns the + // error causing the shutdown. + Wait() error + + // TODO(hanwen): consider exposing: + // RequestKeyChange + // Disconnect +} + +// DiscardRequests consumes and rejects all requests from the +// passed-in channel. +func DiscardRequests(in <-chan *Request) { + for req := range in { + if req.WantReply { + req.Reply(false, nil) + } + } +} + +// A connection represents an incoming connection. +type connection struct { + transport *handshakeTransport + sshConn + + // The connection protocol. + *mux +} + +func (c *connection) Close() error { + return c.sshConn.conn.Close() +} + +// sshconn provides net.Conn metadata, but disallows direct reads and +// writes. +type sshConn struct { + conn net.Conn + + user string + sessionID []byte + clientVersion []byte + serverVersion []byte +} + +func dup(src []byte) []byte { + dst := make([]byte, len(src)) + copy(dst, src) + return dst +} + +func (c *sshConn) User() string { + return c.user +} + +func (c *sshConn) RemoteAddr() net.Addr { + return c.conn.RemoteAddr() +} + +func (c *sshConn) Close() error { + return c.conn.Close() +} + +func (c *sshConn) LocalAddr() net.Addr { + return c.conn.LocalAddr() +} + +func (c *sshConn) SessionID() []byte { + return dup(c.sessionID) +} + +func (c *sshConn) ClientVersion() []byte { + return dup(c.clientVersion) +} + +func (c *sshConn) ServerVersion() []byte { + return dup(c.serverVersion) +} diff --git a/vendor/golang.org/x/crypto/ssh/doc.go b/vendor/golang.org/x/crypto/ssh/doc.go new file mode 100644 index 0000000..d6be894 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/doc.go @@ -0,0 +1,18 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package ssh implements an SSH client and server. + +SSH is a transport security protocol, an authentication protocol and a +family of application protocols. The most typical application level +protocol is a remote shell and this is specifically implemented. However, +the multiplexed nature of SSH is exposed to users that wish to support +others. + +References: + [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD + [SSH-PARAMETERS]: http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1 +*/ +package ssh // import "golang.org/x/crypto/ssh" diff --git a/vendor/golang.org/x/crypto/ssh/example_test.go b/vendor/golang.org/x/crypto/ssh/example_test.go new file mode 100644 index 0000000..4d2eabd --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/example_test.go @@ -0,0 +1,262 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh_test + +import ( + "bytes" + "fmt" + "io/ioutil" + "log" + "net" + "net/http" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/terminal" +) + +func ExampleNewServerConn() { + // Public key authentication is done by comparing + // the public key of a received connection + // with the entries in the authorized_keys file. + authorizedKeysBytes, err := ioutil.ReadFile("authorized_keys") + if err != nil { + log.Fatalf("Failed to load authorized_keys, err: %v", err) + } + + authorizedKeysMap := map[string]bool{} + for len(authorizedKeysBytes) > 0 { + pubKey, _, _, rest, err := ssh.ParseAuthorizedKey(authorizedKeysBytes) + if err != nil { + log.Fatal(err) + } + + authorizedKeysMap[string(pubKey.Marshal())] = true + authorizedKeysBytes = rest + } + + // An SSH server is represented by a ServerConfig, which holds + // certificate details and handles authentication of ServerConns. + config := &ssh.ServerConfig{ + // Remove to disable password auth. + PasswordCallback: func(c ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) { + // Should use constant-time compare (or better, salt+hash) in + // a production setting. + if c.User() == "testuser" && string(pass) == "tiger" { + return nil, nil + } + return nil, fmt.Errorf("password rejected for %q", c.User()) + }, + + // Remove to disable public key auth. + PublicKeyCallback: func(c ssh.ConnMetadata, pubKey ssh.PublicKey) (*ssh.Permissions, error) { + if authorizedKeysMap[string(pubKey.Marshal())] { + return nil, nil + } + return nil, fmt.Errorf("unknown public key for %q", c.User()) + }, + } + + privateBytes, err := ioutil.ReadFile("id_rsa") + if err != nil { + log.Fatal("Failed to load private key: ", err) + } + + private, err := ssh.ParsePrivateKey(privateBytes) + if err != nil { + log.Fatal("Failed to parse private key: ", err) + } + + config.AddHostKey(private) + + // Once a ServerConfig has been configured, connections can be + // accepted. + listener, err := net.Listen("tcp", "0.0.0.0:2022") + if err != nil { + log.Fatal("failed to listen for connection: ", err) + } + nConn, err := listener.Accept() + if err != nil { + log.Fatal("failed to accept incoming connection: ", err) + } + + // Before use, a handshake must be performed on the incoming + // net.Conn. + _, chans, reqs, err := ssh.NewServerConn(nConn, config) + if err != nil { + log.Fatal("failed to handshake: ", err) + } + // The incoming Request channel must be serviced. + go ssh.DiscardRequests(reqs) + + // Service the incoming Channel channel. + + // Service the incoming Channel channel. + for newChannel := range chans { + // Channels have a type, depending on the application level + // protocol intended. In the case of a shell, the type is + // "session" and ServerShell may be used to present a simple + // terminal interface. + if newChannel.ChannelType() != "session" { + newChannel.Reject(ssh.UnknownChannelType, "unknown channel type") + continue + } + channel, requests, err := newChannel.Accept() + if err != nil { + log.Fatalf("Could not accept channel: %v", err) + } + + // Sessions have out-of-band requests such as "shell", + // "pty-req" and "env". Here we handle only the + // "shell" request. + go func(in <-chan *ssh.Request) { + for req := range in { + req.Reply(req.Type == "shell", nil) + } + }(requests) + + term := terminal.NewTerminal(channel, "> ") + + go func() { + defer channel.Close() + for { + line, err := term.ReadLine() + if err != nil { + break + } + fmt.Println(line) + } + }() + } +} + +func ExampleDial() { + // An SSH client is represented with a ClientConn. + // + // To authenticate with the remote server you must pass at least one + // implementation of AuthMethod via the Auth field in ClientConfig. + config := &ssh.ClientConfig{ + User: "username", + Auth: []ssh.AuthMethod{ + ssh.Password("yourpassword"), + }, + } + client, err := ssh.Dial("tcp", "yourserver.com:22", config) + if err != nil { + log.Fatal("Failed to dial: ", err) + } + + // Each ClientConn can support multiple interactive sessions, + // represented by a Session. + session, err := client.NewSession() + if err != nil { + log.Fatal("Failed to create session: ", err) + } + defer session.Close() + + // Once a Session is created, you can execute a single command on + // the remote side using the Run method. + var b bytes.Buffer + session.Stdout = &b + if err := session.Run("/usr/bin/whoami"); err != nil { + log.Fatal("Failed to run: " + err.Error()) + } + fmt.Println(b.String()) +} + +func ExamplePublicKeys() { + // A public key may be used to authenticate against the remote + // server by using an unencrypted PEM-encoded private key file. + // + // If you have an encrypted private key, the crypto/x509 package + // can be used to decrypt it. + key, err := ioutil.ReadFile("/home/user/.ssh/id_rsa") + if err != nil { + log.Fatalf("unable to read private key: %v", err) + } + + // Create the Signer for this private key. + signer, err := ssh.ParsePrivateKey(key) + if err != nil { + log.Fatalf("unable to parse private key: %v", err) + } + + config := &ssh.ClientConfig{ + User: "user", + Auth: []ssh.AuthMethod{ + // Use the PublicKeys method for remote authentication. + ssh.PublicKeys(signer), + }, + } + + // Connect to the remote server and perform the SSH handshake. + client, err := ssh.Dial("tcp", "host.com:22", config) + if err != nil { + log.Fatalf("unable to connect: %v", err) + } + defer client.Close() +} + +func ExampleClient_Listen() { + config := &ssh.ClientConfig{ + User: "username", + Auth: []ssh.AuthMethod{ + ssh.Password("password"), + }, + } + // Dial your ssh server. + conn, err := ssh.Dial("tcp", "localhost:22", config) + if err != nil { + log.Fatal("unable to connect: ", err) + } + defer conn.Close() + + // Request the remote side to open port 8080 on all interfaces. + l, err := conn.Listen("tcp", "0.0.0.0:8080") + if err != nil { + log.Fatal("unable to register tcp forward: ", err) + } + defer l.Close() + + // Serve HTTP with your SSH server acting as a reverse proxy. + http.Serve(l, http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) { + fmt.Fprintf(resp, "Hello world!\n") + })) +} + +func ExampleSession_RequestPty() { + // Create client config + config := &ssh.ClientConfig{ + User: "username", + Auth: []ssh.AuthMethod{ + ssh.Password("password"), + }, + } + // Connect to ssh server + conn, err := ssh.Dial("tcp", "localhost:22", config) + if err != nil { + log.Fatal("unable to connect: ", err) + } + defer conn.Close() + // Create a session + session, err := conn.NewSession() + if err != nil { + log.Fatal("unable to create session: ", err) + } + defer session.Close() + // Set up terminal modes + modes := ssh.TerminalModes{ + ssh.ECHO: 0, // disable echoing + ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud + ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud + } + // Request pseudo terminal + if err := session.RequestPty("xterm", 40, 80, modes); err != nil { + log.Fatal("request for pseudo terminal failed: ", err) + } + // Start remote shell + if err := session.Shell(); err != nil { + log.Fatal("failed to start shell: ", err) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go new file mode 100644 index 0000000..37d42e4 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/handshake.go @@ -0,0 +1,460 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "crypto/rand" + "errors" + "fmt" + "io" + "log" + "net" + "sync" +) + +// debugHandshake, if set, prints messages sent and received. Key +// exchange messages are printed as if DH were used, so the debug +// messages are wrong when using ECDH. +const debugHandshake = false + +// keyingTransport is a packet based transport that supports key +// changes. It need not be thread-safe. It should pass through +// msgNewKeys in both directions. +type keyingTransport interface { + packetConn + + // prepareKeyChange sets up a key change. The key change for a + // direction will be effected if a msgNewKeys message is sent + // or received. + prepareKeyChange(*algorithms, *kexResult) error +} + +// handshakeTransport implements rekeying on top of a keyingTransport +// and offers a thread-safe writePacket() interface. +type handshakeTransport struct { + conn keyingTransport + config *Config + + serverVersion []byte + clientVersion []byte + + // hostKeys is non-empty if we are the server. In that case, + // it contains all host keys that can be used to sign the + // connection. + hostKeys []Signer + + // hostKeyAlgorithms is non-empty if we are the client. In that case, + // we accept these key types from the server as host key. + hostKeyAlgorithms []string + + // On read error, incoming is closed, and readError is set. + incoming chan []byte + readError error + + // data for host key checking + hostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error + dialAddress string + remoteAddr net.Addr + + readSinceKex uint64 + + // Protects the writing side of the connection + mu sync.Mutex + cond *sync.Cond + sentInitPacket []byte + sentInitMsg *kexInitMsg + writtenSinceKex uint64 + writeError error + + // The session ID or nil if first kex did not complete yet. + sessionID []byte +} + +func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, serverVersion []byte) *handshakeTransport { + t := &handshakeTransport{ + conn: conn, + serverVersion: serverVersion, + clientVersion: clientVersion, + incoming: make(chan []byte, 16), + config: config, + } + t.cond = sync.NewCond(&t.mu) + return t +} + +func newClientTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ClientConfig, dialAddr string, addr net.Addr) *handshakeTransport { + t := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion) + t.dialAddress = dialAddr + t.remoteAddr = addr + t.hostKeyCallback = config.HostKeyCallback + if config.HostKeyAlgorithms != nil { + t.hostKeyAlgorithms = config.HostKeyAlgorithms + } else { + t.hostKeyAlgorithms = supportedHostKeyAlgos + } + go t.readLoop() + return t +} + +func newServerTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ServerConfig) *handshakeTransport { + t := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion) + t.hostKeys = config.hostKeys + go t.readLoop() + return t +} + +func (t *handshakeTransport) getSessionID() []byte { + return t.sessionID +} + +func (t *handshakeTransport) id() string { + if len(t.hostKeys) > 0 { + return "server" + } + return "client" +} + +func (t *handshakeTransport) readPacket() ([]byte, error) { + p, ok := <-t.incoming + if !ok { + return nil, t.readError + } + return p, nil +} + +func (t *handshakeTransport) readLoop() { + for { + p, err := t.readOnePacket() + if err != nil { + t.readError = err + close(t.incoming) + break + } + if p[0] == msgIgnore || p[0] == msgDebug { + continue + } + t.incoming <- p + } + + // If we can't read, declare the writing part dead too. + t.mu.Lock() + defer t.mu.Unlock() + if t.writeError == nil { + t.writeError = t.readError + } + t.cond.Broadcast() +} + +func (t *handshakeTransport) readOnePacket() ([]byte, error) { + if t.readSinceKex > t.config.RekeyThreshold { + if err := t.requestKeyChange(); err != nil { + return nil, err + } + } + + p, err := t.conn.readPacket() + if err != nil { + return nil, err + } + + t.readSinceKex += uint64(len(p)) + if debugHandshake { + if p[0] == msgChannelData || p[0] == msgChannelExtendedData { + log.Printf("%s got data (packet %d bytes)", t.id(), len(p)) + } else { + msg, err := decode(p) + log.Printf("%s got %T %v (%v)", t.id(), msg, msg, err) + } + } + if p[0] != msgKexInit { + return p, nil + } + + t.mu.Lock() + + firstKex := t.sessionID == nil + + err = t.enterKeyExchangeLocked(p) + if err != nil { + // drop connection + t.conn.Close() + t.writeError = err + } + + if debugHandshake { + log.Printf("%s exited key exchange (first %v), err %v", t.id(), firstKex, err) + } + + // Unblock writers. + t.sentInitMsg = nil + t.sentInitPacket = nil + t.cond.Broadcast() + t.writtenSinceKex = 0 + t.mu.Unlock() + + if err != nil { + return nil, err + } + + t.readSinceKex = 0 + + // By default, a key exchange is hidden from higher layers by + // translating it into msgIgnore. + successPacket := []byte{msgIgnore} + if firstKex { + // sendKexInit() for the first kex waits for + // msgNewKeys so the authentication process is + // guaranteed to happen over an encrypted transport. + successPacket = []byte{msgNewKeys} + } + + return successPacket, nil +} + +// keyChangeCategory describes whether a key exchange is the first on a +// connection, or a subsequent one. +type keyChangeCategory bool + +const ( + firstKeyExchange keyChangeCategory = true + subsequentKeyExchange keyChangeCategory = false +) + +// sendKexInit sends a key change message, and returns the message +// that was sent. After initiating the key change, all writes will be +// blocked until the change is done, and a failed key change will +// close the underlying transport. This function is safe for +// concurrent use by multiple goroutines. +func (t *handshakeTransport) sendKexInit(isFirst keyChangeCategory) error { + var err error + + t.mu.Lock() + // If this is the initial key change, but we already have a sessionID, + // then do nothing because the key exchange has already completed + // asynchronously. + if !isFirst || t.sessionID == nil { + _, _, err = t.sendKexInitLocked(isFirst) + } + t.mu.Unlock() + if err != nil { + return err + } + if isFirst { + if packet, err := t.readPacket(); err != nil { + return err + } else if packet[0] != msgNewKeys { + return unexpectedMessageError(msgNewKeys, packet[0]) + } + } + return nil +} + +func (t *handshakeTransport) requestInitialKeyChange() error { + return t.sendKexInit(firstKeyExchange) +} + +func (t *handshakeTransport) requestKeyChange() error { + return t.sendKexInit(subsequentKeyExchange) +} + +// sendKexInitLocked sends a key change message. t.mu must be locked +// while this happens. +func (t *handshakeTransport) sendKexInitLocked(isFirst keyChangeCategory) (*kexInitMsg, []byte, error) { + // kexInits may be sent either in response to the other side, + // or because our side wants to initiate a key change, so we + // may have already sent a kexInit. In that case, don't send a + // second kexInit. + if t.sentInitMsg != nil { + return t.sentInitMsg, t.sentInitPacket, nil + } + + msg := &kexInitMsg{ + KexAlgos: t.config.KeyExchanges, + CiphersClientServer: t.config.Ciphers, + CiphersServerClient: t.config.Ciphers, + MACsClientServer: t.config.MACs, + MACsServerClient: t.config.MACs, + CompressionClientServer: supportedCompressions, + CompressionServerClient: supportedCompressions, + } + io.ReadFull(rand.Reader, msg.Cookie[:]) + + if len(t.hostKeys) > 0 { + for _, k := range t.hostKeys { + msg.ServerHostKeyAlgos = append( + msg.ServerHostKeyAlgos, k.PublicKey().Type()) + } + } else { + msg.ServerHostKeyAlgos = t.hostKeyAlgorithms + } + packet := Marshal(msg) + + // writePacket destroys the contents, so save a copy. + packetCopy := make([]byte, len(packet)) + copy(packetCopy, packet) + + if err := t.conn.writePacket(packetCopy); err != nil { + return nil, nil, err + } + + t.sentInitMsg = msg + t.sentInitPacket = packet + return msg, packet, nil +} + +func (t *handshakeTransport) writePacket(p []byte) error { + t.mu.Lock() + defer t.mu.Unlock() + + if t.writtenSinceKex > t.config.RekeyThreshold { + t.sendKexInitLocked(subsequentKeyExchange) + } + for t.sentInitMsg != nil && t.writeError == nil { + t.cond.Wait() + } + if t.writeError != nil { + return t.writeError + } + t.writtenSinceKex += uint64(len(p)) + + switch p[0] { + case msgKexInit: + return errors.New("ssh: only handshakeTransport can send kexInit") + case msgNewKeys: + return errors.New("ssh: only handshakeTransport can send newKeys") + default: + return t.conn.writePacket(p) + } +} + +func (t *handshakeTransport) Close() error { + return t.conn.Close() +} + +// enterKeyExchange runs the key exchange. t.mu must be held while running this. +func (t *handshakeTransport) enterKeyExchangeLocked(otherInitPacket []byte) error { + if debugHandshake { + log.Printf("%s entered key exchange", t.id()) + } + myInit, myInitPacket, err := t.sendKexInitLocked(subsequentKeyExchange) + if err != nil { + return err + } + + otherInit := &kexInitMsg{} + if err := Unmarshal(otherInitPacket, otherInit); err != nil { + return err + } + + magics := handshakeMagics{ + clientVersion: t.clientVersion, + serverVersion: t.serverVersion, + clientKexInit: otherInitPacket, + serverKexInit: myInitPacket, + } + + clientInit := otherInit + serverInit := myInit + if len(t.hostKeys) == 0 { + clientInit = myInit + serverInit = otherInit + + magics.clientKexInit = myInitPacket + magics.serverKexInit = otherInitPacket + } + + algs, err := findAgreedAlgorithms(clientInit, serverInit) + if err != nil { + return err + } + + // We don't send FirstKexFollows, but we handle receiving it. + // + // RFC 4253 section 7 defines the kex and the agreement method for + // first_kex_packet_follows. It states that the guessed packet + // should be ignored if the "kex algorithm and/or the host + // key algorithm is guessed wrong (server and client have + // different preferred algorithm), or if any of the other + // algorithms cannot be agreed upon". The other algorithms have + // already been checked above so the kex algorithm and host key + // algorithm are checked here. + if otherInit.FirstKexFollows && (clientInit.KexAlgos[0] != serverInit.KexAlgos[0] || clientInit.ServerHostKeyAlgos[0] != serverInit.ServerHostKeyAlgos[0]) { + // other side sent a kex message for the wrong algorithm, + // which we have to ignore. + if _, err := t.conn.readPacket(); err != nil { + return err + } + } + + kex, ok := kexAlgoMap[algs.kex] + if !ok { + return fmt.Errorf("ssh: unexpected key exchange algorithm %v", algs.kex) + } + + var result *kexResult + if len(t.hostKeys) > 0 { + result, err = t.server(kex, algs, &magics) + } else { + result, err = t.client(kex, algs, &magics) + } + + if err != nil { + return err + } + + if t.sessionID == nil { + t.sessionID = result.H + } + result.SessionID = t.sessionID + + t.conn.prepareKeyChange(algs, result) + if err = t.conn.writePacket([]byte{msgNewKeys}); err != nil { + return err + } + if packet, err := t.conn.readPacket(); err != nil { + return err + } else if packet[0] != msgNewKeys { + return unexpectedMessageError(msgNewKeys, packet[0]) + } + + return nil +} + +func (t *handshakeTransport) server(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) { + var hostKey Signer + for _, k := range t.hostKeys { + if algs.hostKey == k.PublicKey().Type() { + hostKey = k + } + } + + r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey) + return r, err +} + +func (t *handshakeTransport) client(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) { + result, err := kex.Client(t.conn, t.config.Rand, magics) + if err != nil { + return nil, err + } + + hostKey, err := ParsePublicKey(result.HostKey) + if err != nil { + return nil, err + } + + if err := verifyHostKeySignature(hostKey, result); err != nil { + return nil, err + } + + if t.hostKeyCallback != nil { + err = t.hostKeyCallback(t.dialAddress, t.remoteAddr, hostKey) + if err != nil { + return nil, err + } + } + + return result, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/handshake_test.go b/vendor/golang.org/x/crypto/ssh/handshake_test.go new file mode 100644 index 0000000..da53d3a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/handshake_test.go @@ -0,0 +1,486 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/rand" + "errors" + "fmt" + "net" + "reflect" + "runtime" + "strings" + "sync" + "testing" +) + +type testChecker struct { + calls []string +} + +func (t *testChecker) Check(dialAddr string, addr net.Addr, key PublicKey) error { + if dialAddr == "bad" { + return fmt.Errorf("dialAddr is bad") + } + + if tcpAddr, ok := addr.(*net.TCPAddr); !ok || tcpAddr == nil { + return fmt.Errorf("testChecker: got %T want *net.TCPAddr", addr) + } + + t.calls = append(t.calls, fmt.Sprintf("%s %v %s %x", dialAddr, addr, key.Type(), key.Marshal())) + + return nil +} + +// netPipe is analogous to net.Pipe, but it uses a real net.Conn, and +// therefore is buffered (net.Pipe deadlocks if both sides start with +// a write.) +func netPipe() (net.Conn, net.Conn, error) { + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + return nil, nil, err + } + defer listener.Close() + c1, err := net.Dial("tcp", listener.Addr().String()) + if err != nil { + return nil, nil, err + } + + c2, err := listener.Accept() + if err != nil { + c1.Close() + return nil, nil, err + } + + return c1, c2, nil +} + +func handshakePair(clientConf *ClientConfig, addr string) (client *handshakeTransport, server *handshakeTransport, err error) { + a, b, err := netPipe() + if err != nil { + return nil, nil, err + } + + trC := newTransport(a, rand.Reader, true) + trS := newTransport(b, rand.Reader, false) + clientConf.SetDefaults() + + v := []byte("version") + client = newClientTransport(trC, v, v, clientConf, addr, a.RemoteAddr()) + + serverConf := &ServerConfig{} + serverConf.AddHostKey(testSigners["ecdsa"]) + serverConf.AddHostKey(testSigners["rsa"]) + serverConf.SetDefaults() + server = newServerTransport(trS, v, v, serverConf) + + return client, server, nil +} + +func TestHandshakeBasic(t *testing.T) { + if runtime.GOOS == "plan9" { + t.Skip("see golang.org/issue/7237") + } + checker := &testChecker{} + trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "addr") + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + + defer trC.Close() + defer trS.Close() + + go func() { + // Client writes a bunch of stuff, and does a key + // change in the middle. This should not confuse the + // handshake in progress + for i := 0; i < 10; i++ { + p := []byte{msgRequestSuccess, byte(i)} + if err := trC.writePacket(p); err != nil { + t.Fatalf("sendPacket: %v", err) + } + if i == 5 { + // halfway through, we request a key change. + err := trC.sendKexInit(subsequentKeyExchange) + if err != nil { + t.Fatalf("sendKexInit: %v", err) + } + } + } + trC.Close() + }() + + // Server checks that client messages come in cleanly + i := 0 + for { + p, err := trS.readPacket() + if err != nil { + break + } + if p[0] == msgNewKeys { + continue + } + want := []byte{msgRequestSuccess, byte(i)} + if bytes.Compare(p, want) != 0 { + t.Errorf("message %d: got %q, want %q", i, p, want) + } + i++ + } + if i != 10 { + t.Errorf("received %d messages, want 10.", i) + } + + // If all went well, we registered exactly 1 key change. + if len(checker.calls) != 1 { + t.Fatalf("got %d host key checks, want 1", len(checker.calls)) + } + + pub := testSigners["ecdsa"].PublicKey() + want := fmt.Sprintf("%s %v %s %x", "addr", trC.remoteAddr, pub.Type(), pub.Marshal()) + if want != checker.calls[0] { + t.Errorf("got %q want %q for host key check", checker.calls[0], want) + } +} + +func TestHandshakeError(t *testing.T) { + checker := &testChecker{} + trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "bad") + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + defer trC.Close() + defer trS.Close() + + // send a packet + packet := []byte{msgRequestSuccess, 42} + if err := trC.writePacket(packet); err != nil { + t.Errorf("writePacket: %v", err) + } + + // Now request a key change. + err = trC.sendKexInit(subsequentKeyExchange) + if err != nil { + t.Errorf("sendKexInit: %v", err) + } + + // the key change will fail, and afterwards we can't write. + if err := trC.writePacket([]byte{msgRequestSuccess, 43}); err == nil { + t.Errorf("writePacket after botched rekey succeeded.") + } + + readback, err := trS.readPacket() + if err != nil { + t.Fatalf("server closed too soon: %v", err) + } + if bytes.Compare(readback, packet) != 0 { + t.Errorf("got %q want %q", readback, packet) + } + readback, err = trS.readPacket() + if err == nil { + t.Errorf("got a message %q after failed key change", readback) + } +} + +func TestForceFirstKex(t *testing.T) { + checker := &testChecker{} + trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "addr") + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + + defer trC.Close() + defer trS.Close() + + trC.writePacket(Marshal(&serviceRequestMsg{serviceUserAuth})) + + // We setup the initial key exchange, but the remote side + // tries to send serviceRequestMsg in cleartext, which is + // disallowed. + + err = trS.sendKexInit(firstKeyExchange) + if err == nil { + t.Errorf("server first kex init should reject unexpected packet") + } +} + +func TestHandshakeTwice(t *testing.T) { + checker := &testChecker{} + trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "addr") + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + + defer trC.Close() + defer trS.Close() + + // Both sides should ask for the first key exchange first. + err = trS.sendKexInit(firstKeyExchange) + if err != nil { + t.Errorf("server sendKexInit: %v", err) + } + + err = trC.sendKexInit(firstKeyExchange) + if err != nil { + t.Errorf("client sendKexInit: %v", err) + } + + sent := 0 + // send a packet + packet := make([]byte, 5) + packet[0] = msgRequestSuccess + if err := trC.writePacket(packet); err != nil { + t.Errorf("writePacket: %v", err) + } + sent++ + + // Send another packet. Use a fresh one, since writePacket destroys. + packet = make([]byte, 5) + packet[0] = msgRequestSuccess + if err := trC.writePacket(packet); err != nil { + t.Errorf("writePacket: %v", err) + } + sent++ + + // 2nd key change. + err = trC.sendKexInit(subsequentKeyExchange) + if err != nil { + t.Errorf("sendKexInit: %v", err) + } + + packet = make([]byte, 5) + packet[0] = msgRequestSuccess + if err := trC.writePacket(packet); err != nil { + t.Errorf("writePacket: %v", err) + } + sent++ + + packet = make([]byte, 5) + packet[0] = msgRequestSuccess + for i := 0; i < sent; i++ { + msg, err := trS.readPacket() + if err != nil { + t.Fatalf("server closed too soon: %v", err) + } + + if bytes.Compare(msg, packet) != 0 { + t.Errorf("packet %d: got %q want %q", i, msg, packet) + } + } + if len(checker.calls) != 2 { + t.Errorf("got %d key changes, want 2", len(checker.calls)) + } +} + +func TestHandshakeAutoRekeyWrite(t *testing.T) { + checker := &testChecker{} + clientConf := &ClientConfig{HostKeyCallback: checker.Check} + clientConf.RekeyThreshold = 500 + trC, trS, err := handshakePair(clientConf, "addr") + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + defer trC.Close() + defer trS.Close() + + for i := 0; i < 5; i++ { + packet := make([]byte, 251) + packet[0] = msgRequestSuccess + if err := trC.writePacket(packet); err != nil { + t.Errorf("writePacket: %v", err) + } + } + + j := 0 + for ; j < 5; j++ { + _, err := trS.readPacket() + if err != nil { + break + } + } + + if j != 5 { + t.Errorf("got %d, want 5 messages", j) + } + + if len(checker.calls) != 2 { + t.Errorf("got %d key changes, wanted 2", len(checker.calls)) + } +} + +type syncChecker struct { + called chan int +} + +func (t *syncChecker) Check(dialAddr string, addr net.Addr, key PublicKey) error { + t.called <- 1 + return nil +} + +func TestHandshakeAutoRekeyRead(t *testing.T) { + sync := &syncChecker{make(chan int, 2)} + clientConf := &ClientConfig{ + HostKeyCallback: sync.Check, + } + clientConf.RekeyThreshold = 500 + + trC, trS, err := handshakePair(clientConf, "addr") + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + defer trC.Close() + defer trS.Close() + + packet := make([]byte, 501) + packet[0] = msgRequestSuccess + if err := trS.writePacket(packet); err != nil { + t.Fatalf("writePacket: %v", err) + } + // While we read out the packet, a key change will be + // initiated. + if _, err := trC.readPacket(); err != nil { + t.Fatalf("readPacket(client): %v", err) + } + + <-sync.called +} + +// errorKeyingTransport generates errors after a given number of +// read/write operations. +type errorKeyingTransport struct { + packetConn + readLeft, writeLeft int +} + +func (n *errorKeyingTransport) prepareKeyChange(*algorithms, *kexResult) error { + return nil +} +func (n *errorKeyingTransport) getSessionID() []byte { + return nil +} + +func (n *errorKeyingTransport) writePacket(packet []byte) error { + if n.writeLeft == 0 { + n.Close() + return errors.New("barf") + } + + n.writeLeft-- + return n.packetConn.writePacket(packet) +} + +func (n *errorKeyingTransport) readPacket() ([]byte, error) { + if n.readLeft == 0 { + n.Close() + return nil, errors.New("barf") + } + + n.readLeft-- + return n.packetConn.readPacket() +} + +func TestHandshakeErrorHandlingRead(t *testing.T) { + for i := 0; i < 20; i++ { + testHandshakeErrorHandlingN(t, i, -1) + } +} + +func TestHandshakeErrorHandlingWrite(t *testing.T) { + for i := 0; i < 20; i++ { + testHandshakeErrorHandlingN(t, -1, i) + } +} + +// testHandshakeErrorHandlingN runs handshakes, injecting errors. If +// handshakeTransport deadlocks, the go runtime will detect it and +// panic. +func testHandshakeErrorHandlingN(t *testing.T, readLimit, writeLimit int) { + msg := Marshal(&serviceRequestMsg{strings.Repeat("x", int(minRekeyThreshold)/4)}) + + a, b := memPipe() + defer a.Close() + defer b.Close() + + key := testSigners["ecdsa"] + serverConf := Config{RekeyThreshold: minRekeyThreshold} + serverConf.SetDefaults() + serverConn := newHandshakeTransport(&errorKeyingTransport{a, readLimit, writeLimit}, &serverConf, []byte{'a'}, []byte{'b'}) + serverConn.hostKeys = []Signer{key} + go serverConn.readLoop() + + clientConf := Config{RekeyThreshold: 10 * minRekeyThreshold} + clientConf.SetDefaults() + clientConn := newHandshakeTransport(&errorKeyingTransport{b, -1, -1}, &clientConf, []byte{'a'}, []byte{'b'}) + clientConn.hostKeyAlgorithms = []string{key.PublicKey().Type()} + go clientConn.readLoop() + + var wg sync.WaitGroup + wg.Add(4) + + for _, hs := range []packetConn{serverConn, clientConn} { + go func(c packetConn) { + for { + err := c.writePacket(msg) + if err != nil { + break + } + } + wg.Done() + }(hs) + go func(c packetConn) { + for { + _, err := c.readPacket() + if err != nil { + break + } + } + wg.Done() + }(hs) + } + + wg.Wait() +} + +func TestDisconnect(t *testing.T) { + if runtime.GOOS == "plan9" { + t.Skip("see golang.org/issue/7237") + } + checker := &testChecker{} + trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "addr") + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + + defer trC.Close() + defer trS.Close() + + trC.writePacket([]byte{msgRequestSuccess, 0, 0}) + errMsg := &disconnectMsg{ + Reason: 42, + Message: "such is life", + } + trC.writePacket(Marshal(errMsg)) + trC.writePacket([]byte{msgRequestSuccess, 0, 0}) + + packet, err := trS.readPacket() + if err != nil { + t.Fatalf("readPacket 1: %v", err) + } + if packet[0] != msgRequestSuccess { + t.Errorf("got packet %v, want packet type %d", packet, msgRequestSuccess) + } + + _, err = trS.readPacket() + if err == nil { + t.Errorf("readPacket 2 succeeded") + } else if !reflect.DeepEqual(err, errMsg) { + t.Errorf("got error %#v, want %#v", err, errMsg) + } + + _, err = trS.readPacket() + if err == nil { + t.Errorf("readPacket 3 succeeded") + } +} diff --git a/vendor/golang.org/x/crypto/ssh/kex.go b/vendor/golang.org/x/crypto/ssh/kex.go new file mode 100644 index 0000000..9285ee3 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/kex.go @@ -0,0 +1,526 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/subtle" + "errors" + "io" + "math/big" + + "golang.org/x/crypto/curve25519" +) + +const ( + kexAlgoDH1SHA1 = "diffie-hellman-group1-sha1" + kexAlgoDH14SHA1 = "diffie-hellman-group14-sha1" + kexAlgoECDH256 = "ecdh-sha2-nistp256" + kexAlgoECDH384 = "ecdh-sha2-nistp384" + kexAlgoECDH521 = "ecdh-sha2-nistp521" + kexAlgoCurve25519SHA256 = "curve25519-sha256@libssh.org" +) + +// kexResult captures the outcome of a key exchange. +type kexResult struct { + // Session hash. See also RFC 4253, section 8. + H []byte + + // Shared secret. See also RFC 4253, section 8. + K []byte + + // Host key as hashed into H. + HostKey []byte + + // Signature of H. + Signature []byte + + // A cryptographic hash function that matches the security + // level of the key exchange algorithm. It is used for + // calculating H, and for deriving keys from H and K. + Hash crypto.Hash + + // The session ID, which is the first H computed. This is used + // to derive key material inside the transport. + SessionID []byte +} + +// handshakeMagics contains data that is always included in the +// session hash. +type handshakeMagics struct { + clientVersion, serverVersion []byte + clientKexInit, serverKexInit []byte +} + +func (m *handshakeMagics) write(w io.Writer) { + writeString(w, m.clientVersion) + writeString(w, m.serverVersion) + writeString(w, m.clientKexInit) + writeString(w, m.serverKexInit) +} + +// kexAlgorithm abstracts different key exchange algorithms. +type kexAlgorithm interface { + // Server runs server-side key agreement, signing the result + // with a hostkey. + Server(p packetConn, rand io.Reader, magics *handshakeMagics, s Signer) (*kexResult, error) + + // Client runs the client-side key agreement. Caller is + // responsible for verifying the host key signature. + Client(p packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) +} + +// dhGroup is a multiplicative group suitable for implementing Diffie-Hellman key agreement. +type dhGroup struct { + g, p *big.Int +} + +func (group *dhGroup) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, error) { + if theirPublic.Sign() <= 0 || theirPublic.Cmp(group.p) >= 0 { + return nil, errors.New("ssh: DH parameter out of bounds") + } + return new(big.Int).Exp(theirPublic, myPrivate, group.p), nil +} + +func (group *dhGroup) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) { + hashFunc := crypto.SHA1 + + x, err := rand.Int(randSource, group.p) + if err != nil { + return nil, err + } + X := new(big.Int).Exp(group.g, x, group.p) + kexDHInit := kexDHInitMsg{ + X: X, + } + if err := c.writePacket(Marshal(&kexDHInit)); err != nil { + return nil, err + } + + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var kexDHReply kexDHReplyMsg + if err = Unmarshal(packet, &kexDHReply); err != nil { + return nil, err + } + + kInt, err := group.diffieHellman(kexDHReply.Y, x) + if err != nil { + return nil, err + } + + h := hashFunc.New() + magics.write(h) + writeString(h, kexDHReply.HostKey) + writeInt(h, X) + writeInt(h, kexDHReply.Y) + K := make([]byte, intLength(kInt)) + marshalInt(K, kInt) + h.Write(K) + + return &kexResult{ + H: h.Sum(nil), + K: K, + HostKey: kexDHReply.HostKey, + Signature: kexDHReply.Signature, + Hash: crypto.SHA1, + }, nil +} + +func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { + hashFunc := crypto.SHA1 + packet, err := c.readPacket() + if err != nil { + return + } + var kexDHInit kexDHInitMsg + if err = Unmarshal(packet, &kexDHInit); err != nil { + return + } + + y, err := rand.Int(randSource, group.p) + if err != nil { + return + } + + Y := new(big.Int).Exp(group.g, y, group.p) + kInt, err := group.diffieHellman(kexDHInit.X, y) + if err != nil { + return nil, err + } + + hostKeyBytes := priv.PublicKey().Marshal() + + h := hashFunc.New() + magics.write(h) + writeString(h, hostKeyBytes) + writeInt(h, kexDHInit.X) + writeInt(h, Y) + + K := make([]byte, intLength(kInt)) + marshalInt(K, kInt) + h.Write(K) + + H := h.Sum(nil) + + // H is already a hash, but the hostkey signing will apply its + // own key-specific hash algorithm. + sig, err := signAndMarshal(priv, randSource, H) + if err != nil { + return nil, err + } + + kexDHReply := kexDHReplyMsg{ + HostKey: hostKeyBytes, + Y: Y, + Signature: sig, + } + packet = Marshal(&kexDHReply) + + err = c.writePacket(packet) + return &kexResult{ + H: H, + K: K, + HostKey: hostKeyBytes, + Signature: sig, + Hash: crypto.SHA1, + }, nil +} + +// ecdh performs Elliptic Curve Diffie-Hellman key exchange as +// described in RFC 5656, section 4. +type ecdh struct { + curve elliptic.Curve +} + +func (kex *ecdh) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) { + ephKey, err := ecdsa.GenerateKey(kex.curve, rand) + if err != nil { + return nil, err + } + + kexInit := kexECDHInitMsg{ + ClientPubKey: elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y), + } + + serialized := Marshal(&kexInit) + if err := c.writePacket(serialized); err != nil { + return nil, err + } + + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var reply kexECDHReplyMsg + if err = Unmarshal(packet, &reply); err != nil { + return nil, err + } + + x, y, err := unmarshalECKey(kex.curve, reply.EphemeralPubKey) + if err != nil { + return nil, err + } + + // generate shared secret + secret, _ := kex.curve.ScalarMult(x, y, ephKey.D.Bytes()) + + h := ecHash(kex.curve).New() + magics.write(h) + writeString(h, reply.HostKey) + writeString(h, kexInit.ClientPubKey) + writeString(h, reply.EphemeralPubKey) + K := make([]byte, intLength(secret)) + marshalInt(K, secret) + h.Write(K) + + return &kexResult{ + H: h.Sum(nil), + K: K, + HostKey: reply.HostKey, + Signature: reply.Signature, + Hash: ecHash(kex.curve), + }, nil +} + +// unmarshalECKey parses and checks an EC key. +func unmarshalECKey(curve elliptic.Curve, pubkey []byte) (x, y *big.Int, err error) { + x, y = elliptic.Unmarshal(curve, pubkey) + if x == nil { + return nil, nil, errors.New("ssh: elliptic.Unmarshal failure") + } + if !validateECPublicKey(curve, x, y) { + return nil, nil, errors.New("ssh: public key not on curve") + } + return x, y, nil +} + +// validateECPublicKey checks that the point is a valid public key for +// the given curve. See [SEC1], 3.2.2 +func validateECPublicKey(curve elliptic.Curve, x, y *big.Int) bool { + if x.Sign() == 0 && y.Sign() == 0 { + return false + } + + if x.Cmp(curve.Params().P) >= 0 { + return false + } + + if y.Cmp(curve.Params().P) >= 0 { + return false + } + + if !curve.IsOnCurve(x, y) { + return false + } + + // We don't check if N * PubKey == 0, since + // + // - the NIST curves have cofactor = 1, so this is implicit. + // (We don't foresee an implementation that supports non NIST + // curves) + // + // - for ephemeral keys, we don't need to worry about small + // subgroup attacks. + return true +} + +func (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var kexECDHInit kexECDHInitMsg + if err = Unmarshal(packet, &kexECDHInit); err != nil { + return nil, err + } + + clientX, clientY, err := unmarshalECKey(kex.curve, kexECDHInit.ClientPubKey) + if err != nil { + return nil, err + } + + // We could cache this key across multiple users/multiple + // connection attempts, but the benefit is small. OpenSSH + // generates a new key for each incoming connection. + ephKey, err := ecdsa.GenerateKey(kex.curve, rand) + if err != nil { + return nil, err + } + + hostKeyBytes := priv.PublicKey().Marshal() + + serializedEphKey := elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y) + + // generate shared secret + secret, _ := kex.curve.ScalarMult(clientX, clientY, ephKey.D.Bytes()) + + h := ecHash(kex.curve).New() + magics.write(h) + writeString(h, hostKeyBytes) + writeString(h, kexECDHInit.ClientPubKey) + writeString(h, serializedEphKey) + + K := make([]byte, intLength(secret)) + marshalInt(K, secret) + h.Write(K) + + H := h.Sum(nil) + + // H is already a hash, but the hostkey signing will apply its + // own key-specific hash algorithm. + sig, err := signAndMarshal(priv, rand, H) + if err != nil { + return nil, err + } + + reply := kexECDHReplyMsg{ + EphemeralPubKey: serializedEphKey, + HostKey: hostKeyBytes, + Signature: sig, + } + + serialized := Marshal(&reply) + if err := c.writePacket(serialized); err != nil { + return nil, err + } + + return &kexResult{ + H: H, + K: K, + HostKey: reply.HostKey, + Signature: sig, + Hash: ecHash(kex.curve), + }, nil +} + +var kexAlgoMap = map[string]kexAlgorithm{} + +func init() { + // This is the group called diffie-hellman-group1-sha1 in RFC + // 4253 and Oakley Group 2 in RFC 2409. + p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF", 16) + kexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{ + g: new(big.Int).SetInt64(2), + p: p, + } + + // This is the group called diffie-hellman-group14-sha1 in RFC + // 4253 and Oakley Group 14 in RFC 3526. + p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16) + + kexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{ + g: new(big.Int).SetInt64(2), + p: p, + } + + kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()} + kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()} + kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()} + kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{} +} + +// curve25519sha256 implements the curve25519-sha256@libssh.org key +// agreement protocol, as described in +// https://git.libssh.org/projects/libssh.git/tree/doc/curve25519-sha256@libssh.org.txt +type curve25519sha256 struct{} + +type curve25519KeyPair struct { + priv [32]byte + pub [32]byte +} + +func (kp *curve25519KeyPair) generate(rand io.Reader) error { + if _, err := io.ReadFull(rand, kp.priv[:]); err != nil { + return err + } + curve25519.ScalarBaseMult(&kp.pub, &kp.priv) + return nil +} + +// curve25519Zeros is just an array of 32 zero bytes so that we have something +// convenient to compare against in order to reject curve25519 points with the +// wrong order. +var curve25519Zeros [32]byte + +func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) { + var kp curve25519KeyPair + if err := kp.generate(rand); err != nil { + return nil, err + } + if err := c.writePacket(Marshal(&kexECDHInitMsg{kp.pub[:]})); err != nil { + return nil, err + } + + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var reply kexECDHReplyMsg + if err = Unmarshal(packet, &reply); err != nil { + return nil, err + } + if len(reply.EphemeralPubKey) != 32 { + return nil, errors.New("ssh: peer's curve25519 public value has wrong length") + } + + var servPub, secret [32]byte + copy(servPub[:], reply.EphemeralPubKey) + curve25519.ScalarMult(&secret, &kp.priv, &servPub) + if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 { + return nil, errors.New("ssh: peer's curve25519 public value has wrong order") + } + + h := crypto.SHA256.New() + magics.write(h) + writeString(h, reply.HostKey) + writeString(h, kp.pub[:]) + writeString(h, reply.EphemeralPubKey) + + kInt := new(big.Int).SetBytes(secret[:]) + K := make([]byte, intLength(kInt)) + marshalInt(K, kInt) + h.Write(K) + + return &kexResult{ + H: h.Sum(nil), + K: K, + HostKey: reply.HostKey, + Signature: reply.Signature, + Hash: crypto.SHA256, + }, nil +} + +func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { + packet, err := c.readPacket() + if err != nil { + return + } + var kexInit kexECDHInitMsg + if err = Unmarshal(packet, &kexInit); err != nil { + return + } + + if len(kexInit.ClientPubKey) != 32 { + return nil, errors.New("ssh: peer's curve25519 public value has wrong length") + } + + var kp curve25519KeyPair + if err := kp.generate(rand); err != nil { + return nil, err + } + + var clientPub, secret [32]byte + copy(clientPub[:], kexInit.ClientPubKey) + curve25519.ScalarMult(&secret, &kp.priv, &clientPub) + if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 { + return nil, errors.New("ssh: peer's curve25519 public value has wrong order") + } + + hostKeyBytes := priv.PublicKey().Marshal() + + h := crypto.SHA256.New() + magics.write(h) + writeString(h, hostKeyBytes) + writeString(h, kexInit.ClientPubKey) + writeString(h, kp.pub[:]) + + kInt := new(big.Int).SetBytes(secret[:]) + K := make([]byte, intLength(kInt)) + marshalInt(K, kInt) + h.Write(K) + + H := h.Sum(nil) + + sig, err := signAndMarshal(priv, rand, H) + if err != nil { + return nil, err + } + + reply := kexECDHReplyMsg{ + EphemeralPubKey: kp.pub[:], + HostKey: hostKeyBytes, + Signature: sig, + } + if err := c.writePacket(Marshal(&reply)); err != nil { + return nil, err + } + return &kexResult{ + H: H, + K: K, + HostKey: hostKeyBytes, + Signature: sig, + Hash: crypto.SHA256, + }, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/kex_test.go b/vendor/golang.org/x/crypto/ssh/kex_test.go new file mode 100644 index 0000000..12ca0ac --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/kex_test.go @@ -0,0 +1,50 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +// Key exchange tests. + +import ( + "crypto/rand" + "reflect" + "testing" +) + +func TestKexes(t *testing.T) { + type kexResultErr struct { + result *kexResult + err error + } + + for name, kex := range kexAlgoMap { + a, b := memPipe() + + s := make(chan kexResultErr, 1) + c := make(chan kexResultErr, 1) + var magics handshakeMagics + go func() { + r, e := kex.Client(a, rand.Reader, &magics) + a.Close() + c <- kexResultErr{r, e} + }() + go func() { + r, e := kex.Server(b, rand.Reader, &magics, testSigners["ecdsa"]) + b.Close() + s <- kexResultErr{r, e} + }() + + clientRes := <-c + serverRes := <-s + if clientRes.err != nil { + t.Errorf("client: %v", clientRes.err) + } + if serverRes.err != nil { + t.Errorf("server: %v", serverRes.err) + } + if !reflect.DeepEqual(clientRes.result, serverRes.result) { + t.Errorf("kex %q: mismatch %#v, %#v", name, clientRes.result, serverRes.result) + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/keys.go b/vendor/golang.org/x/crypto/ssh/keys.go new file mode 100644 index 0000000..e13cf9c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/keys.go @@ -0,0 +1,880 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rsa" + "crypto/x509" + "encoding/asn1" + "encoding/base64" + "encoding/pem" + "errors" + "fmt" + "io" + "math/big" + "strings" + + "golang.org/x/crypto/ed25519" +) + +// These constants represent the algorithm names for key types supported by this +// package. +const ( + KeyAlgoRSA = "ssh-rsa" + KeyAlgoDSA = "ssh-dss" + KeyAlgoECDSA256 = "ecdsa-sha2-nistp256" + KeyAlgoECDSA384 = "ecdsa-sha2-nistp384" + KeyAlgoECDSA521 = "ecdsa-sha2-nistp521" + KeyAlgoED25519 = "ssh-ed25519" +) + +// parsePubKey parses a public key of the given algorithm. +// Use ParsePublicKey for keys with prepended algorithm. +func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err error) { + switch algo { + case KeyAlgoRSA: + return parseRSA(in) + case KeyAlgoDSA: + return parseDSA(in) + case KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521: + return parseECDSA(in) + case KeyAlgoED25519: + return parseED25519(in) + case CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01: + cert, err := parseCert(in, certToPrivAlgo(algo)) + if err != nil { + return nil, nil, err + } + return cert, nil, nil + } + return nil, nil, fmt.Errorf("ssh: unknown key algorithm: %v", algo) +} + +// parseAuthorizedKey parses a public key in OpenSSH authorized_keys format +// (see sshd(8) manual page) once the options and key type fields have been +// removed. +func parseAuthorizedKey(in []byte) (out PublicKey, comment string, err error) { + in = bytes.TrimSpace(in) + + i := bytes.IndexAny(in, " \t") + if i == -1 { + i = len(in) + } + base64Key := in[:i] + + key := make([]byte, base64.StdEncoding.DecodedLen(len(base64Key))) + n, err := base64.StdEncoding.Decode(key, base64Key) + if err != nil { + return nil, "", err + } + key = key[:n] + out, err = ParsePublicKey(key) + if err != nil { + return nil, "", err + } + comment = string(bytes.TrimSpace(in[i:])) + return out, comment, nil +} + +// ParseKnownHosts parses an entry in the format of the known_hosts file. +// +// The known_hosts format is documented in the sshd(8) manual page. This +// function will parse a single entry from in. On successful return, marker +// will contain the optional marker value (i.e. "cert-authority" or "revoked") +// or else be empty, hosts will contain the hosts that this entry matches, +// pubKey will contain the public key and comment will contain any trailing +// comment at the end of the line. See the sshd(8) manual page for the various +// forms that a host string can take. +// +// The unparsed remainder of the input will be returned in rest. This function +// can be called repeatedly to parse multiple entries. +// +// If no entries were found in the input then err will be io.EOF. Otherwise a +// non-nil err value indicates a parse error. +func ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey, comment string, rest []byte, err error) { + for len(in) > 0 { + end := bytes.IndexByte(in, '\n') + if end != -1 { + rest = in[end+1:] + in = in[:end] + } else { + rest = nil + } + + end = bytes.IndexByte(in, '\r') + if end != -1 { + in = in[:end] + } + + in = bytes.TrimSpace(in) + if len(in) == 0 || in[0] == '#' { + in = rest + continue + } + + i := bytes.IndexAny(in, " \t") + if i == -1 { + in = rest + continue + } + + // Strip out the beginning of the known_host key. + // This is either an optional marker or a (set of) hostname(s). + keyFields := bytes.Fields(in) + if len(keyFields) < 3 || len(keyFields) > 5 { + return "", nil, nil, "", nil, errors.New("ssh: invalid entry in known_hosts data") + } + + // keyFields[0] is either "@cert-authority", "@revoked" or a comma separated + // list of hosts + marker := "" + if keyFields[0][0] == '@' { + marker = string(keyFields[0][1:]) + keyFields = keyFields[1:] + } + + hosts := string(keyFields[0]) + // keyFields[1] contains the key type (e.g. “ssh-rsaâ€). + // However, that information is duplicated inside the + // base64-encoded key and so is ignored here. + + key := bytes.Join(keyFields[2:], []byte(" ")) + if pubKey, comment, err = parseAuthorizedKey(key); err != nil { + return "", nil, nil, "", nil, err + } + + return marker, strings.Split(hosts, ","), pubKey, comment, rest, nil + } + + return "", nil, nil, "", nil, io.EOF +} + +// ParseAuthorizedKeys parses a public key from an authorized_keys +// file used in OpenSSH according to the sshd(8) manual page. +func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []string, rest []byte, err error) { + for len(in) > 0 { + end := bytes.IndexByte(in, '\n') + if end != -1 { + rest = in[end+1:] + in = in[:end] + } else { + rest = nil + } + + end = bytes.IndexByte(in, '\r') + if end != -1 { + in = in[:end] + } + + in = bytes.TrimSpace(in) + if len(in) == 0 || in[0] == '#' { + in = rest + continue + } + + i := bytes.IndexAny(in, " \t") + if i == -1 { + in = rest + continue + } + + if out, comment, err = parseAuthorizedKey(in[i:]); err == nil { + return out, comment, options, rest, nil + } + + // No key type recognised. Maybe there's an options field at + // the beginning. + var b byte + inQuote := false + var candidateOptions []string + optionStart := 0 + for i, b = range in { + isEnd := !inQuote && (b == ' ' || b == '\t') + if (b == ',' && !inQuote) || isEnd { + if i-optionStart > 0 { + candidateOptions = append(candidateOptions, string(in[optionStart:i])) + } + optionStart = i + 1 + } + if isEnd { + break + } + if b == '"' && (i == 0 || (i > 0 && in[i-1] != '\\')) { + inQuote = !inQuote + } + } + for i < len(in) && (in[i] == ' ' || in[i] == '\t') { + i++ + } + if i == len(in) { + // Invalid line: unmatched quote + in = rest + continue + } + + in = in[i:] + i = bytes.IndexAny(in, " \t") + if i == -1 { + in = rest + continue + } + + if out, comment, err = parseAuthorizedKey(in[i:]); err == nil { + options = candidateOptions + return out, comment, options, rest, nil + } + + in = rest + continue + } + + return nil, "", nil, nil, errors.New("ssh: no key found") +} + +// ParsePublicKey parses an SSH public key formatted for use in +// the SSH wire protocol according to RFC 4253, section 6.6. +func ParsePublicKey(in []byte) (out PublicKey, err error) { + algo, in, ok := parseString(in) + if !ok { + return nil, errShortRead + } + var rest []byte + out, rest, err = parsePubKey(in, string(algo)) + if len(rest) > 0 { + return nil, errors.New("ssh: trailing junk in public key") + } + + return out, err +} + +// MarshalAuthorizedKey serializes key for inclusion in an OpenSSH +// authorized_keys file. The return value ends with newline. +func MarshalAuthorizedKey(key PublicKey) []byte { + b := &bytes.Buffer{} + b.WriteString(key.Type()) + b.WriteByte(' ') + e := base64.NewEncoder(base64.StdEncoding, b) + e.Write(key.Marshal()) + e.Close() + b.WriteByte('\n') + return b.Bytes() +} + +// PublicKey is an abstraction of different types of public keys. +type PublicKey interface { + // Type returns the key's type, e.g. "ssh-rsa". + Type() string + + // Marshal returns the serialized key data in SSH wire format, + // with the name prefix. + Marshal() []byte + + // Verify that sig is a signature on the given data using this + // key. This function will hash the data appropriately first. + Verify(data []byte, sig *Signature) error +} + +// CryptoPublicKey, if implemented by a PublicKey, +// returns the underlying crypto.PublicKey form of the key. +type CryptoPublicKey interface { + CryptoPublicKey() crypto.PublicKey +} + +// A Signer can create signatures that verify against a public key. +type Signer interface { + // PublicKey returns an associated PublicKey instance. + PublicKey() PublicKey + + // Sign returns raw signature for the given data. This method + // will apply the hash specified for the keytype to the data. + Sign(rand io.Reader, data []byte) (*Signature, error) +} + +type rsaPublicKey rsa.PublicKey + +func (r *rsaPublicKey) Type() string { + return "ssh-rsa" +} + +// parseRSA parses an RSA key according to RFC 4253, section 6.6. +func parseRSA(in []byte) (out PublicKey, rest []byte, err error) { + var w struct { + E *big.Int + N *big.Int + Rest []byte `ssh:"rest"` + } + if err := Unmarshal(in, &w); err != nil { + return nil, nil, err + } + + if w.E.BitLen() > 24 { + return nil, nil, errors.New("ssh: exponent too large") + } + e := w.E.Int64() + if e < 3 || e&1 == 0 { + return nil, nil, errors.New("ssh: incorrect exponent") + } + + var key rsa.PublicKey + key.E = int(e) + key.N = w.N + return (*rsaPublicKey)(&key), w.Rest, nil +} + +func (r *rsaPublicKey) Marshal() []byte { + e := new(big.Int).SetInt64(int64(r.E)) + // RSA publickey struct layout should match the struct used by + // parseRSACert in the x/crypto/ssh/agent package. + wirekey := struct { + Name string + E *big.Int + N *big.Int + }{ + KeyAlgoRSA, + e, + r.N, + } + return Marshal(&wirekey) +} + +func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error { + if sig.Format != r.Type() { + return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, r.Type()) + } + h := crypto.SHA1.New() + h.Write(data) + digest := h.Sum(nil) + return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), crypto.SHA1, digest, sig.Blob) +} + +func (r *rsaPublicKey) CryptoPublicKey() crypto.PublicKey { + return (*rsa.PublicKey)(r) +} + +type dsaPublicKey dsa.PublicKey + +func (r *dsaPublicKey) Type() string { + return "ssh-dss" +} + +// parseDSA parses an DSA key according to RFC 4253, section 6.6. +func parseDSA(in []byte) (out PublicKey, rest []byte, err error) { + var w struct { + P, Q, G, Y *big.Int + Rest []byte `ssh:"rest"` + } + if err := Unmarshal(in, &w); err != nil { + return nil, nil, err + } + + key := &dsaPublicKey{ + Parameters: dsa.Parameters{ + P: w.P, + Q: w.Q, + G: w.G, + }, + Y: w.Y, + } + return key, w.Rest, nil +} + +func (k *dsaPublicKey) Marshal() []byte { + // DSA publickey struct layout should match the struct used by + // parseDSACert in the x/crypto/ssh/agent package. + w := struct { + Name string + P, Q, G, Y *big.Int + }{ + k.Type(), + k.P, + k.Q, + k.G, + k.Y, + } + + return Marshal(&w) +} + +func (k *dsaPublicKey) Verify(data []byte, sig *Signature) error { + if sig.Format != k.Type() { + return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type()) + } + h := crypto.SHA1.New() + h.Write(data) + digest := h.Sum(nil) + + // Per RFC 4253, section 6.6, + // The value for 'dss_signature_blob' is encoded as a string containing + // r, followed by s (which are 160-bit integers, without lengths or + // padding, unsigned, and in network byte order). + // For DSS purposes, sig.Blob should be exactly 40 bytes in length. + if len(sig.Blob) != 40 { + return errors.New("ssh: DSA signature parse error") + } + r := new(big.Int).SetBytes(sig.Blob[:20]) + s := new(big.Int).SetBytes(sig.Blob[20:]) + if dsa.Verify((*dsa.PublicKey)(k), digest, r, s) { + return nil + } + return errors.New("ssh: signature did not verify") +} + +func (k *dsaPublicKey) CryptoPublicKey() crypto.PublicKey { + return (*dsa.PublicKey)(k) +} + +type dsaPrivateKey struct { + *dsa.PrivateKey +} + +func (k *dsaPrivateKey) PublicKey() PublicKey { + return (*dsaPublicKey)(&k.PrivateKey.PublicKey) +} + +func (k *dsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) { + h := crypto.SHA1.New() + h.Write(data) + digest := h.Sum(nil) + r, s, err := dsa.Sign(rand, k.PrivateKey, digest) + if err != nil { + return nil, err + } + + sig := make([]byte, 40) + rb := r.Bytes() + sb := s.Bytes() + + copy(sig[20-len(rb):20], rb) + copy(sig[40-len(sb):], sb) + + return &Signature{ + Format: k.PublicKey().Type(), + Blob: sig, + }, nil +} + +type ecdsaPublicKey ecdsa.PublicKey + +func (key *ecdsaPublicKey) Type() string { + return "ecdsa-sha2-" + key.nistID() +} + +func (key *ecdsaPublicKey) nistID() string { + switch key.Params().BitSize { + case 256: + return "nistp256" + case 384: + return "nistp384" + case 521: + return "nistp521" + } + panic("ssh: unsupported ecdsa key size") +} + +type ed25519PublicKey ed25519.PublicKey + +func (key ed25519PublicKey) Type() string { + return KeyAlgoED25519 +} + +func parseED25519(in []byte) (out PublicKey, rest []byte, err error) { + var w struct { + KeyBytes []byte + Rest []byte `ssh:"rest"` + } + + if err := Unmarshal(in, &w); err != nil { + return nil, nil, err + } + + key := ed25519.PublicKey(w.KeyBytes) + + return (ed25519PublicKey)(key), w.Rest, nil +} + +func (key ed25519PublicKey) Marshal() []byte { + w := struct { + Name string + KeyBytes []byte + }{ + KeyAlgoED25519, + []byte(key), + } + return Marshal(&w) +} + +func (key ed25519PublicKey) Verify(b []byte, sig *Signature) error { + if sig.Format != key.Type() { + return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, key.Type()) + } + + edKey := (ed25519.PublicKey)(key) + if ok := ed25519.Verify(edKey, b, sig.Blob); !ok { + return errors.New("ssh: signature did not verify") + } + + return nil +} + +func (k ed25519PublicKey) CryptoPublicKey() crypto.PublicKey { + return ed25519.PublicKey(k) +} + +func supportedEllipticCurve(curve elliptic.Curve) bool { + return curve == elliptic.P256() || curve == elliptic.P384() || curve == elliptic.P521() +} + +// ecHash returns the hash to match the given elliptic curve, see RFC +// 5656, section 6.2.1 +func ecHash(curve elliptic.Curve) crypto.Hash { + bitSize := curve.Params().BitSize + switch { + case bitSize <= 256: + return crypto.SHA256 + case bitSize <= 384: + return crypto.SHA384 + } + return crypto.SHA512 +} + +// parseECDSA parses an ECDSA key according to RFC 5656, section 3.1. +func parseECDSA(in []byte) (out PublicKey, rest []byte, err error) { + var w struct { + Curve string + KeyBytes []byte + Rest []byte `ssh:"rest"` + } + + if err := Unmarshal(in, &w); err != nil { + return nil, nil, err + } + + key := new(ecdsa.PublicKey) + + switch w.Curve { + case "nistp256": + key.Curve = elliptic.P256() + case "nistp384": + key.Curve = elliptic.P384() + case "nistp521": + key.Curve = elliptic.P521() + default: + return nil, nil, errors.New("ssh: unsupported curve") + } + + key.X, key.Y = elliptic.Unmarshal(key.Curve, w.KeyBytes) + if key.X == nil || key.Y == nil { + return nil, nil, errors.New("ssh: invalid curve point") + } + return (*ecdsaPublicKey)(key), w.Rest, nil +} + +func (key *ecdsaPublicKey) Marshal() []byte { + // See RFC 5656, section 3.1. + keyBytes := elliptic.Marshal(key.Curve, key.X, key.Y) + // ECDSA publickey struct layout should match the struct used by + // parseECDSACert in the x/crypto/ssh/agent package. + w := struct { + Name string + ID string + Key []byte + }{ + key.Type(), + key.nistID(), + keyBytes, + } + + return Marshal(&w) +} + +func (key *ecdsaPublicKey) Verify(data []byte, sig *Signature) error { + if sig.Format != key.Type() { + return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, key.Type()) + } + + h := ecHash(key.Curve).New() + h.Write(data) + digest := h.Sum(nil) + + // Per RFC 5656, section 3.1.2, + // The ecdsa_signature_blob value has the following specific encoding: + // mpint r + // mpint s + var ecSig struct { + R *big.Int + S *big.Int + } + + if err := Unmarshal(sig.Blob, &ecSig); err != nil { + return err + } + + if ecdsa.Verify((*ecdsa.PublicKey)(key), digest, ecSig.R, ecSig.S) { + return nil + } + return errors.New("ssh: signature did not verify") +} + +func (k *ecdsaPublicKey) CryptoPublicKey() crypto.PublicKey { + return (*ecdsa.PublicKey)(k) +} + +// NewSignerFromKey takes an *rsa.PrivateKey, *dsa.PrivateKey, +// *ecdsa.PrivateKey or any other crypto.Signer and returns a corresponding +// Signer instance. ECDSA keys must use P-256, P-384 or P-521. +func NewSignerFromKey(key interface{}) (Signer, error) { + switch key := key.(type) { + case crypto.Signer: + return NewSignerFromSigner(key) + case *dsa.PrivateKey: + return &dsaPrivateKey{key}, nil + default: + return nil, fmt.Errorf("ssh: unsupported key type %T", key) + } +} + +type wrappedSigner struct { + signer crypto.Signer + pubKey PublicKey +} + +// NewSignerFromSigner takes any crypto.Signer implementation and +// returns a corresponding Signer interface. This can be used, for +// example, with keys kept in hardware modules. +func NewSignerFromSigner(signer crypto.Signer) (Signer, error) { + pubKey, err := NewPublicKey(signer.Public()) + if err != nil { + return nil, err + } + + return &wrappedSigner{signer, pubKey}, nil +} + +func (s *wrappedSigner) PublicKey() PublicKey { + return s.pubKey +} + +func (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) { + var hashFunc crypto.Hash + + switch key := s.pubKey.(type) { + case *rsaPublicKey, *dsaPublicKey: + hashFunc = crypto.SHA1 + case *ecdsaPublicKey: + hashFunc = ecHash(key.Curve) + case ed25519PublicKey: + default: + return nil, fmt.Errorf("ssh: unsupported key type %T", key) + } + + var digest []byte + if hashFunc != 0 { + h := hashFunc.New() + h.Write(data) + digest = h.Sum(nil) + } else { + digest = data + } + + signature, err := s.signer.Sign(rand, digest, hashFunc) + if err != nil { + return nil, err + } + + // crypto.Signer.Sign is expected to return an ASN.1-encoded signature + // for ECDSA and DSA, but that's not the encoding expected by SSH, so + // re-encode. + switch s.pubKey.(type) { + case *ecdsaPublicKey, *dsaPublicKey: + type asn1Signature struct { + R, S *big.Int + } + asn1Sig := new(asn1Signature) + _, err := asn1.Unmarshal(signature, asn1Sig) + if err != nil { + return nil, err + } + + switch s.pubKey.(type) { + case *ecdsaPublicKey: + signature = Marshal(asn1Sig) + + case *dsaPublicKey: + signature = make([]byte, 40) + r := asn1Sig.R.Bytes() + s := asn1Sig.S.Bytes() + copy(signature[20-len(r):20], r) + copy(signature[40-len(s):40], s) + } + } + + return &Signature{ + Format: s.pubKey.Type(), + Blob: signature, + }, nil +} + +// NewPublicKey takes an *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey, +// ed25519.PublicKey, or any other crypto.Signer and returns a corresponding +// Signer instance. ECDSA keys must use P-256, P-384 or P-521. +func NewPublicKey(key interface{}) (PublicKey, error) { + switch key := key.(type) { + case *rsa.PublicKey: + return (*rsaPublicKey)(key), nil + case *ecdsa.PublicKey: + if !supportedEllipticCurve(key.Curve) { + return nil, errors.New("ssh: only P-256, P-384 and P-521 EC keys are supported.") + } + return (*ecdsaPublicKey)(key), nil + case *dsa.PublicKey: + return (*dsaPublicKey)(key), nil + case ed25519.PublicKey: + return (ed25519PublicKey)(key), nil + default: + return nil, fmt.Errorf("ssh: unsupported key type %T", key) + } +} + +// ParsePrivateKey returns a Signer from a PEM encoded private key. It supports +// the same keys as ParseRawPrivateKey. +func ParsePrivateKey(pemBytes []byte) (Signer, error) { + key, err := ParseRawPrivateKey(pemBytes) + if err != nil { + return nil, err + } + + return NewSignerFromKey(key) +} + +// encryptedBlock tells whether a private key is +// encrypted by examining its Proc-Type header +// for a mention of ENCRYPTED +// according to RFC 1421 Section 4.6.1.1. +func encryptedBlock(block *pem.Block) bool { + return strings.Contains(block.Headers["Proc-Type"], "ENCRYPTED") +} + +// ParseRawPrivateKey returns a private key from a PEM encoded private key. It +// supports RSA (PKCS#1), DSA (OpenSSL), and ECDSA private keys. +func ParseRawPrivateKey(pemBytes []byte) (interface{}, error) { + block, _ := pem.Decode(pemBytes) + if block == nil { + return nil, errors.New("ssh: no key found") + } + + if encryptedBlock(block) { + return nil, errors.New("ssh: cannot decode encrypted private keys") + } + + switch block.Type { + case "RSA PRIVATE KEY": + return x509.ParsePKCS1PrivateKey(block.Bytes) + case "EC PRIVATE KEY": + return x509.ParseECPrivateKey(block.Bytes) + case "DSA PRIVATE KEY": + return ParseDSAPrivateKey(block.Bytes) + case "OPENSSH PRIVATE KEY": + return parseOpenSSHPrivateKey(block.Bytes) + default: + return nil, fmt.Errorf("ssh: unsupported key type %q", block.Type) + } +} + +// ParseDSAPrivateKey returns a DSA private key from its ASN.1 DER encoding, as +// specified by the OpenSSL DSA man page. +func ParseDSAPrivateKey(der []byte) (*dsa.PrivateKey, error) { + var k struct { + Version int + P *big.Int + Q *big.Int + G *big.Int + Priv *big.Int + Pub *big.Int + } + rest, err := asn1.Unmarshal(der, &k) + if err != nil { + return nil, errors.New("ssh: failed to parse DSA key: " + err.Error()) + } + if len(rest) > 0 { + return nil, errors.New("ssh: garbage after DSA key") + } + + return &dsa.PrivateKey{ + PublicKey: dsa.PublicKey{ + Parameters: dsa.Parameters{ + P: k.P, + Q: k.Q, + G: k.G, + }, + Y: k.Priv, + }, + X: k.Pub, + }, nil +} + +// Implemented based on the documentation at +// https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key +func parseOpenSSHPrivateKey(key []byte) (*ed25519.PrivateKey, error) { + magic := append([]byte("openssh-key-v1"), 0) + if !bytes.Equal(magic, key[0:len(magic)]) { + return nil, errors.New("ssh: invalid openssh private key format") + } + remaining := key[len(magic):] + + var w struct { + CipherName string + KdfName string + KdfOpts string + NumKeys uint32 + PubKey []byte + PrivKeyBlock []byte + } + + if err := Unmarshal(remaining, &w); err != nil { + return nil, err + } + + pk1 := struct { + Check1 uint32 + Check2 uint32 + Keytype string + Pub []byte + Priv []byte + Comment string + Pad []byte `ssh:"rest"` + }{} + + if err := Unmarshal(w.PrivKeyBlock, &pk1); err != nil { + return nil, err + } + + if pk1.Check1 != pk1.Check2 { + return nil, errors.New("ssh: checkint mismatch") + } + + // we only handle ed25519 keys currently + if pk1.Keytype != KeyAlgoED25519 { + return nil, errors.New("ssh: unhandled key type") + } + + for i, b := range pk1.Pad { + if int(b) != i+1 { + return nil, errors.New("ssh: padding not as expected") + } + } + + if len(pk1.Priv) != ed25519.PrivateKeySize { + return nil, errors.New("ssh: private key unexpected length") + } + + pk := ed25519.PrivateKey(make([]byte, ed25519.PrivateKeySize)) + copy(pk, pk1.Priv) + return &pk, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/keys_test.go b/vendor/golang.org/x/crypto/ssh/keys_test.go new file mode 100644 index 0000000..0739c66 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/keys_test.go @@ -0,0 +1,456 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "encoding/base64" + "fmt" + "reflect" + "strings" + "testing" + + "golang.org/x/crypto/ed25519" + "golang.org/x/crypto/ssh/testdata" +) + +func rawKey(pub PublicKey) interface{} { + switch k := pub.(type) { + case *rsaPublicKey: + return (*rsa.PublicKey)(k) + case *dsaPublicKey: + return (*dsa.PublicKey)(k) + case *ecdsaPublicKey: + return (*ecdsa.PublicKey)(k) + case ed25519PublicKey: + return (ed25519.PublicKey)(k) + case *Certificate: + return k + } + panic("unknown key type") +} + +func TestKeyMarshalParse(t *testing.T) { + for _, priv := range testSigners { + pub := priv.PublicKey() + roundtrip, err := ParsePublicKey(pub.Marshal()) + if err != nil { + t.Errorf("ParsePublicKey(%T): %v", pub, err) + } + + k1 := rawKey(pub) + k2 := rawKey(roundtrip) + + if !reflect.DeepEqual(k1, k2) { + t.Errorf("got %#v in roundtrip, want %#v", k2, k1) + } + } +} + +func TestUnsupportedCurves(t *testing.T) { + raw, err := ecdsa.GenerateKey(elliptic.P224(), rand.Reader) + if err != nil { + t.Fatalf("GenerateKey: %v", err) + } + + if _, err = NewSignerFromKey(raw); err == nil || !strings.Contains(err.Error(), "only P-256") { + t.Fatalf("NewPrivateKey should not succeed with P-224, got: %v", err) + } + + if _, err = NewPublicKey(&raw.PublicKey); err == nil || !strings.Contains(err.Error(), "only P-256") { + t.Fatalf("NewPublicKey should not succeed with P-224, got: %v", err) + } +} + +func TestNewPublicKey(t *testing.T) { + for _, k := range testSigners { + raw := rawKey(k.PublicKey()) + // Skip certificates, as NewPublicKey does not support them. + if _, ok := raw.(*Certificate); ok { + continue + } + pub, err := NewPublicKey(raw) + if err != nil { + t.Errorf("NewPublicKey(%#v): %v", raw, err) + } + if !reflect.DeepEqual(k.PublicKey(), pub) { + t.Errorf("NewPublicKey(%#v) = %#v, want %#v", raw, pub, k.PublicKey()) + } + } +} + +func TestKeySignVerify(t *testing.T) { + for _, priv := range testSigners { + pub := priv.PublicKey() + + data := []byte("sign me") + sig, err := priv.Sign(rand.Reader, data) + if err != nil { + t.Fatalf("Sign(%T): %v", priv, err) + } + + if err := pub.Verify(data, sig); err != nil { + t.Errorf("publicKey.Verify(%T): %v", priv, err) + } + sig.Blob[5]++ + if err := pub.Verify(data, sig); err == nil { + t.Errorf("publicKey.Verify on broken sig did not fail") + } + } +} + +func TestParseRSAPrivateKey(t *testing.T) { + key := testPrivateKeys["rsa"] + + rsa, ok := key.(*rsa.PrivateKey) + if !ok { + t.Fatalf("got %T, want *rsa.PrivateKey", rsa) + } + + if err := rsa.Validate(); err != nil { + t.Errorf("Validate: %v", err) + } +} + +func TestParseECPrivateKey(t *testing.T) { + key := testPrivateKeys["ecdsa"] + + ecKey, ok := key.(*ecdsa.PrivateKey) + if !ok { + t.Fatalf("got %T, want *ecdsa.PrivateKey", ecKey) + } + + if !validateECPublicKey(ecKey.Curve, ecKey.X, ecKey.Y) { + t.Fatalf("public key does not validate.") + } +} + +// See Issue https://github.com/golang/go/issues/6650. +func TestParseEncryptedPrivateKeysFails(t *testing.T) { + const wantSubstring = "encrypted" + for i, tt := range testdata.PEMEncryptedKeys { + _, err := ParsePrivateKey(tt.PEMBytes) + if err == nil { + t.Errorf("#%d key %s: ParsePrivateKey successfully parsed, expected an error", i, tt.Name) + continue + } + + if !strings.Contains(err.Error(), wantSubstring) { + t.Errorf("#%d key %s: got error %q, want substring %q", i, tt.Name, err, wantSubstring) + } + } +} + +func TestParseDSA(t *testing.T) { + // We actually exercise the ParsePrivateKey codepath here, as opposed to + // using the ParseRawPrivateKey+NewSignerFromKey path that testdata_test.go + // uses. + s, err := ParsePrivateKey(testdata.PEMBytes["dsa"]) + if err != nil { + t.Fatalf("ParsePrivateKey returned error: %s", err) + } + + data := []byte("sign me") + sig, err := s.Sign(rand.Reader, data) + if err != nil { + t.Fatalf("dsa.Sign: %v", err) + } + + if err := s.PublicKey().Verify(data, sig); err != nil { + t.Errorf("Verify failed: %v", err) + } +} + +// Tests for authorized_keys parsing. + +// getTestKey returns a public key, and its base64 encoding. +func getTestKey() (PublicKey, string) { + k := testPublicKeys["rsa"] + + b := &bytes.Buffer{} + e := base64.NewEncoder(base64.StdEncoding, b) + e.Write(k.Marshal()) + e.Close() + + return k, b.String() +} + +func TestMarshalParsePublicKey(t *testing.T) { + pub, pubSerialized := getTestKey() + line := fmt.Sprintf("%s %s user@host", pub.Type(), pubSerialized) + + authKeys := MarshalAuthorizedKey(pub) + actualFields := strings.Fields(string(authKeys)) + if len(actualFields) == 0 { + t.Fatalf("failed authKeys: %v", authKeys) + } + + // drop the comment + expectedFields := strings.Fields(line)[0:2] + + if !reflect.DeepEqual(actualFields, expectedFields) { + t.Errorf("got %v, expected %v", actualFields, expectedFields) + } + + actPub, _, _, _, err := ParseAuthorizedKey([]byte(line)) + if err != nil { + t.Fatalf("cannot parse %v: %v", line, err) + } + if !reflect.DeepEqual(actPub, pub) { + t.Errorf("got %v, expected %v", actPub, pub) + } +} + +type authResult struct { + pubKey PublicKey + options []string + comments string + rest string + ok bool +} + +func testAuthorizedKeys(t *testing.T, authKeys []byte, expected []authResult) { + rest := authKeys + var values []authResult + for len(rest) > 0 { + var r authResult + var err error + r.pubKey, r.comments, r.options, rest, err = ParseAuthorizedKey(rest) + r.ok = (err == nil) + t.Log(err) + r.rest = string(rest) + values = append(values, r) + } + + if !reflect.DeepEqual(values, expected) { + t.Errorf("got %#v, expected %#v", values, expected) + } +} + +func TestAuthorizedKeyBasic(t *testing.T) { + pub, pubSerialized := getTestKey() + line := "ssh-rsa " + pubSerialized + " user@host" + testAuthorizedKeys(t, []byte(line), + []authResult{ + {pub, nil, "user@host", "", true}, + }) +} + +func TestAuth(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithOptions := []string{ + `# comments to ignore before any keys...`, + ``, + `env="HOME=/home/root",no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host`, + `# comments to ignore, along with a blank line`, + ``, + `env="HOME=/home/root2" ssh-rsa ` + pubSerialized + ` user2@host2`, + ``, + `# more comments, plus a invalid entry`, + `ssh-rsa data-that-will-not-parse user@host3`, + } + for _, eol := range []string{"\n", "\r\n"} { + authOptions := strings.Join(authWithOptions, eol) + rest2 := strings.Join(authWithOptions[3:], eol) + rest3 := strings.Join(authWithOptions[6:], eol) + testAuthorizedKeys(t, []byte(authOptions), []authResult{ + {pub, []string{`env="HOME=/home/root"`, "no-port-forwarding"}, "user@host", rest2, true}, + {pub, []string{`env="HOME=/home/root2"`}, "user2@host2", rest3, true}, + {nil, nil, "", "", false}, + }) + } +} + +func TestAuthWithQuotedSpaceInEnv(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithQuotedSpaceInEnv := []byte(`env="HOME=/home/root dir",no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host`) + testAuthorizedKeys(t, []byte(authWithQuotedSpaceInEnv), []authResult{ + {pub, []string{`env="HOME=/home/root dir"`, "no-port-forwarding"}, "user@host", "", true}, + }) +} + +func TestAuthWithQuotedCommaInEnv(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithQuotedCommaInEnv := []byte(`env="HOME=/home/root,dir",no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host`) + testAuthorizedKeys(t, []byte(authWithQuotedCommaInEnv), []authResult{ + {pub, []string{`env="HOME=/home/root,dir"`, "no-port-forwarding"}, "user@host", "", true}, + }) +} + +func TestAuthWithQuotedQuoteInEnv(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithQuotedQuoteInEnv := []byte(`env="HOME=/home/\"root dir",no-port-forwarding` + "\t" + `ssh-rsa` + "\t" + pubSerialized + ` user@host`) + authWithDoubleQuotedQuote := []byte(`no-port-forwarding,env="HOME=/home/ \"root dir\"" ssh-rsa ` + pubSerialized + "\t" + `user@host`) + testAuthorizedKeys(t, []byte(authWithQuotedQuoteInEnv), []authResult{ + {pub, []string{`env="HOME=/home/\"root dir"`, "no-port-forwarding"}, "user@host", "", true}, + }) + + testAuthorizedKeys(t, []byte(authWithDoubleQuotedQuote), []authResult{ + {pub, []string{"no-port-forwarding", `env="HOME=/home/ \"root dir\""`}, "user@host", "", true}, + }) +} + +func TestAuthWithInvalidSpace(t *testing.T) { + _, pubSerialized := getTestKey() + authWithInvalidSpace := []byte(`env="HOME=/home/root dir", no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host +#more to follow but still no valid keys`) + testAuthorizedKeys(t, []byte(authWithInvalidSpace), []authResult{ + {nil, nil, "", "", false}, + }) +} + +func TestAuthWithMissingQuote(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithMissingQuote := []byte(`env="HOME=/home/root,no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host +env="HOME=/home/root",shared-control ssh-rsa ` + pubSerialized + ` user@host`) + + testAuthorizedKeys(t, []byte(authWithMissingQuote), []authResult{ + {pub, []string{`env="HOME=/home/root"`, `shared-control`}, "user@host", "", true}, + }) +} + +func TestInvalidEntry(t *testing.T) { + authInvalid := []byte(`ssh-rsa`) + _, _, _, _, err := ParseAuthorizedKey(authInvalid) + if err == nil { + t.Errorf("got valid entry for %q", authInvalid) + } +} + +var knownHostsParseTests = []struct { + input string + err string + + marker string + comment string + hosts []string + rest string +}{ + { + "", + "EOF", + + "", "", nil, "", + }, + { + "# Just a comment", + "EOF", + + "", "", nil, "", + }, + { + " \t ", + "EOF", + + "", "", nil, "", + }, + { + "localhost ssh-rsa {RSAPUB}", + "", + + "", "", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}", + "", + + "", "", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}\tcomment comment", + "", + + "", "comment comment", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}\tcomment comment\n", + "", + + "", "comment comment", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}\tcomment comment\r\n", + "", + + "", "comment comment", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}\tcomment comment\r\nnext line", + "", + + "", "comment comment", []string{"localhost"}, "next line", + }, + { + "localhost,[host2:123]\tssh-rsa {RSAPUB}\tcomment comment", + "", + + "", "comment comment", []string{"localhost", "[host2:123]"}, "", + }, + { + "@marker \tlocalhost,[host2:123]\tssh-rsa {RSAPUB}", + "", + + "marker", "", []string{"localhost", "[host2:123]"}, "", + }, + { + "@marker \tlocalhost,[host2:123]\tssh-rsa aabbccdd", + "short read", + + "", "", nil, "", + }, +} + +func TestKnownHostsParsing(t *testing.T) { + rsaPub, rsaPubSerialized := getTestKey() + + for i, test := range knownHostsParseTests { + var expectedKey PublicKey + const rsaKeyToken = "{RSAPUB}" + + input := test.input + if strings.Contains(input, rsaKeyToken) { + expectedKey = rsaPub + input = strings.Replace(test.input, rsaKeyToken, rsaPubSerialized, -1) + } + + marker, hosts, pubKey, comment, rest, err := ParseKnownHosts([]byte(input)) + if err != nil { + if len(test.err) == 0 { + t.Errorf("#%d: unexpectedly failed with %q", i, err) + } else if !strings.Contains(err.Error(), test.err) { + t.Errorf("#%d: expected error containing %q, but got %q", i, test.err, err) + } + continue + } else if len(test.err) != 0 { + t.Errorf("#%d: succeeded but expected error including %q", i, test.err) + continue + } + + if !reflect.DeepEqual(expectedKey, pubKey) { + t.Errorf("#%d: expected key %#v, but got %#v", i, expectedKey, pubKey) + } + + if marker != test.marker { + t.Errorf("#%d: expected marker %q, but got %q", i, test.marker, marker) + } + + if comment != test.comment { + t.Errorf("#%d: expected comment %q, but got %q", i, test.comment, comment) + } + + if !reflect.DeepEqual(test.hosts, hosts) { + t.Errorf("#%d: expected hosts %#v, but got %#v", i, test.hosts, hosts) + } + + if rest := string(rest); rest != test.rest { + t.Errorf("#%d: expected remaining input to be %q, but got %q", i, test.rest, rest) + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/mac.go b/vendor/golang.org/x/crypto/ssh/mac.go new file mode 100644 index 0000000..07744ad --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mac.go @@ -0,0 +1,57 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +// Message authentication support + +import ( + "crypto/hmac" + "crypto/sha1" + "crypto/sha256" + "hash" +) + +type macMode struct { + keySize int + new func(key []byte) hash.Hash +} + +// truncatingMAC wraps around a hash.Hash and truncates the output digest to +// a given size. +type truncatingMAC struct { + length int + hmac hash.Hash +} + +func (t truncatingMAC) Write(data []byte) (int, error) { + return t.hmac.Write(data) +} + +func (t truncatingMAC) Sum(in []byte) []byte { + out := t.hmac.Sum(in) + return out[:len(in)+t.length] +} + +func (t truncatingMAC) Reset() { + t.hmac.Reset() +} + +func (t truncatingMAC) Size() int { + return t.length +} + +func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() } + +var macModes = map[string]*macMode{ + "hmac-sha2-256": {32, func(key []byte) hash.Hash { + return hmac.New(sha256.New, key) + }}, + "hmac-sha1": {20, func(key []byte) hash.Hash { + return hmac.New(sha1.New, key) + }}, + "hmac-sha1-96": {20, func(key []byte) hash.Hash { + return truncatingMAC{12, hmac.New(sha1.New, key)} + }}, +} diff --git a/vendor/golang.org/x/crypto/ssh/mempipe_test.go b/vendor/golang.org/x/crypto/ssh/mempipe_test.go new file mode 100644 index 0000000..8697cd6 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mempipe_test.go @@ -0,0 +1,110 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "io" + "sync" + "testing" +) + +// An in-memory packetConn. It is safe to call Close and writePacket +// from different goroutines. +type memTransport struct { + eof bool + pending [][]byte + write *memTransport + sync.Mutex + *sync.Cond +} + +func (t *memTransport) readPacket() ([]byte, error) { + t.Lock() + defer t.Unlock() + for { + if len(t.pending) > 0 { + r := t.pending[0] + t.pending = t.pending[1:] + return r, nil + } + if t.eof { + return nil, io.EOF + } + t.Cond.Wait() + } +} + +func (t *memTransport) closeSelf() error { + t.Lock() + defer t.Unlock() + if t.eof { + return io.EOF + } + t.eof = true + t.Cond.Broadcast() + return nil +} + +func (t *memTransport) Close() error { + err := t.write.closeSelf() + t.closeSelf() + return err +} + +func (t *memTransport) writePacket(p []byte) error { + t.write.Lock() + defer t.write.Unlock() + if t.write.eof { + return io.EOF + } + c := make([]byte, len(p)) + copy(c, p) + t.write.pending = append(t.write.pending, c) + t.write.Cond.Signal() + return nil +} + +func memPipe() (a, b packetConn) { + t1 := memTransport{} + t2 := memTransport{} + t1.write = &t2 + t2.write = &t1 + t1.Cond = sync.NewCond(&t1.Mutex) + t2.Cond = sync.NewCond(&t2.Mutex) + return &t1, &t2 +} + +func TestMemPipe(t *testing.T) { + a, b := memPipe() + if err := a.writePacket([]byte{42}); err != nil { + t.Fatalf("writePacket: %v", err) + } + if err := a.Close(); err != nil { + t.Fatal("Close: ", err) + } + p, err := b.readPacket() + if err != nil { + t.Fatal("readPacket: ", err) + } + if len(p) != 1 || p[0] != 42 { + t.Fatalf("got %v, want {42}", p) + } + p, err = b.readPacket() + if err != io.EOF { + t.Fatalf("got %v, %v, want EOF", p, err) + } +} + +func TestDoubleClose(t *testing.T) { + a, _ := memPipe() + err := a.Close() + if err != nil { + t.Errorf("Close: %v", err) + } + err = a.Close() + if err != io.EOF { + t.Errorf("expect EOF on double close.") + } +} diff --git a/vendor/golang.org/x/crypto/ssh/messages.go b/vendor/golang.org/x/crypto/ssh/messages.go new file mode 100644 index 0000000..e6ecd3a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/messages.go @@ -0,0 +1,758 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "io" + "math/big" + "reflect" + "strconv" + "strings" +) + +// These are SSH message type numbers. They are scattered around several +// documents but many were taken from [SSH-PARAMETERS]. +const ( + msgIgnore = 2 + msgUnimplemented = 3 + msgDebug = 4 + msgNewKeys = 21 + + // Standard authentication messages + msgUserAuthSuccess = 52 + msgUserAuthBanner = 53 +) + +// SSH messages: +// +// These structures mirror the wire format of the corresponding SSH messages. +// They are marshaled using reflection with the marshal and unmarshal functions +// in this file. The only wrinkle is that a final member of type []byte with a +// ssh tag of "rest" receives the remainder of a packet when unmarshaling. + +// See RFC 4253, section 11.1. +const msgDisconnect = 1 + +// disconnectMsg is the message that signals a disconnect. It is also +// the error type returned from mux.Wait() +type disconnectMsg struct { + Reason uint32 `sshtype:"1"` + Message string + Language string +} + +func (d *disconnectMsg) Error() string { + return fmt.Sprintf("ssh: disconnect, reason %d: %s", d.Reason, d.Message) +} + +// See RFC 4253, section 7.1. +const msgKexInit = 20 + +type kexInitMsg struct { + Cookie [16]byte `sshtype:"20"` + KexAlgos []string + ServerHostKeyAlgos []string + CiphersClientServer []string + CiphersServerClient []string + MACsClientServer []string + MACsServerClient []string + CompressionClientServer []string + CompressionServerClient []string + LanguagesClientServer []string + LanguagesServerClient []string + FirstKexFollows bool + Reserved uint32 +} + +// See RFC 4253, section 8. + +// Diffie-Helman +const msgKexDHInit = 30 + +type kexDHInitMsg struct { + X *big.Int `sshtype:"30"` +} + +const msgKexECDHInit = 30 + +type kexECDHInitMsg struct { + ClientPubKey []byte `sshtype:"30"` +} + +const msgKexECDHReply = 31 + +type kexECDHReplyMsg struct { + HostKey []byte `sshtype:"31"` + EphemeralPubKey []byte + Signature []byte +} + +const msgKexDHReply = 31 + +type kexDHReplyMsg struct { + HostKey []byte `sshtype:"31"` + Y *big.Int + Signature []byte +} + +// See RFC 4253, section 10. +const msgServiceRequest = 5 + +type serviceRequestMsg struct { + Service string `sshtype:"5"` +} + +// See RFC 4253, section 10. +const msgServiceAccept = 6 + +type serviceAcceptMsg struct { + Service string `sshtype:"6"` +} + +// See RFC 4252, section 5. +const msgUserAuthRequest = 50 + +type userAuthRequestMsg struct { + User string `sshtype:"50"` + Service string + Method string + Payload []byte `ssh:"rest"` +} + +// Used for debug printouts of packets. +type userAuthSuccessMsg struct { +} + +// See RFC 4252, section 5.1 +const msgUserAuthFailure = 51 + +type userAuthFailureMsg struct { + Methods []string `sshtype:"51"` + PartialSuccess bool +} + +// See RFC 4256, section 3.2 +const msgUserAuthInfoRequest = 60 +const msgUserAuthInfoResponse = 61 + +type userAuthInfoRequestMsg struct { + User string `sshtype:"60"` + Instruction string + DeprecatedLanguage string + NumPrompts uint32 + Prompts []byte `ssh:"rest"` +} + +// See RFC 4254, section 5.1. +const msgChannelOpen = 90 + +type channelOpenMsg struct { + ChanType string `sshtype:"90"` + PeersId uint32 + PeersWindow uint32 + MaxPacketSize uint32 + TypeSpecificData []byte `ssh:"rest"` +} + +const msgChannelExtendedData = 95 +const msgChannelData = 94 + +// Used for debug print outs of packets. +type channelDataMsg struct { + PeersId uint32 `sshtype:"94"` + Length uint32 + Rest []byte `ssh:"rest"` +} + +// See RFC 4254, section 5.1. +const msgChannelOpenConfirm = 91 + +type channelOpenConfirmMsg struct { + PeersId uint32 `sshtype:"91"` + MyId uint32 + MyWindow uint32 + MaxPacketSize uint32 + TypeSpecificData []byte `ssh:"rest"` +} + +// See RFC 4254, section 5.1. +const msgChannelOpenFailure = 92 + +type channelOpenFailureMsg struct { + PeersId uint32 `sshtype:"92"` + Reason RejectionReason + Message string + Language string +} + +const msgChannelRequest = 98 + +type channelRequestMsg struct { + PeersId uint32 `sshtype:"98"` + Request string + WantReply bool + RequestSpecificData []byte `ssh:"rest"` +} + +// See RFC 4254, section 5.4. +const msgChannelSuccess = 99 + +type channelRequestSuccessMsg struct { + PeersId uint32 `sshtype:"99"` +} + +// See RFC 4254, section 5.4. +const msgChannelFailure = 100 + +type channelRequestFailureMsg struct { + PeersId uint32 `sshtype:"100"` +} + +// See RFC 4254, section 5.3 +const msgChannelClose = 97 + +type channelCloseMsg struct { + PeersId uint32 `sshtype:"97"` +} + +// See RFC 4254, section 5.3 +const msgChannelEOF = 96 + +type channelEOFMsg struct { + PeersId uint32 `sshtype:"96"` +} + +// See RFC 4254, section 4 +const msgGlobalRequest = 80 + +type globalRequestMsg struct { + Type string `sshtype:"80"` + WantReply bool + Data []byte `ssh:"rest"` +} + +// See RFC 4254, section 4 +const msgRequestSuccess = 81 + +type globalRequestSuccessMsg struct { + Data []byte `ssh:"rest" sshtype:"81"` +} + +// See RFC 4254, section 4 +const msgRequestFailure = 82 + +type globalRequestFailureMsg struct { + Data []byte `ssh:"rest" sshtype:"82"` +} + +// See RFC 4254, section 5.2 +const msgChannelWindowAdjust = 93 + +type windowAdjustMsg struct { + PeersId uint32 `sshtype:"93"` + AdditionalBytes uint32 +} + +// See RFC 4252, section 7 +const msgUserAuthPubKeyOk = 60 + +type userAuthPubKeyOkMsg struct { + Algo string `sshtype:"60"` + PubKey []byte +} + +// typeTags returns the possible type bytes for the given reflect.Type, which +// should be a struct. The possible values are separated by a '|' character. +func typeTags(structType reflect.Type) (tags []byte) { + tagStr := structType.Field(0).Tag.Get("sshtype") + + for _, tag := range strings.Split(tagStr, "|") { + i, err := strconv.Atoi(tag) + if err == nil { + tags = append(tags, byte(i)) + } + } + + return tags +} + +func fieldError(t reflect.Type, field int, problem string) error { + if problem != "" { + problem = ": " + problem + } + return fmt.Errorf("ssh: unmarshal error for field %s of type %s%s", t.Field(field).Name, t.Name(), problem) +} + +var errShortRead = errors.New("ssh: short read") + +// Unmarshal parses data in SSH wire format into a structure. The out +// argument should be a pointer to struct. If the first member of the +// struct has the "sshtype" tag set to a '|'-separated set of numbers +// in decimal, the packet must start with one of those numbers. In +// case of error, Unmarshal returns a ParseError or +// UnexpectedMessageError. +func Unmarshal(data []byte, out interface{}) error { + v := reflect.ValueOf(out).Elem() + structType := v.Type() + expectedTypes := typeTags(structType) + + var expectedType byte + if len(expectedTypes) > 0 { + expectedType = expectedTypes[0] + } + + if len(data) == 0 { + return parseError(expectedType) + } + + if len(expectedTypes) > 0 { + goodType := false + for _, e := range expectedTypes { + if e > 0 && data[0] == e { + goodType = true + break + } + } + if !goodType { + return fmt.Errorf("ssh: unexpected message type %d (expected one of %v)", data[0], expectedTypes) + } + data = data[1:] + } + + var ok bool + for i := 0; i < v.NumField(); i++ { + field := v.Field(i) + t := field.Type() + switch t.Kind() { + case reflect.Bool: + if len(data) < 1 { + return errShortRead + } + field.SetBool(data[0] != 0) + data = data[1:] + case reflect.Array: + if t.Elem().Kind() != reflect.Uint8 { + return fieldError(structType, i, "array of unsupported type") + } + if len(data) < t.Len() { + return errShortRead + } + for j, n := 0, t.Len(); j < n; j++ { + field.Index(j).Set(reflect.ValueOf(data[j])) + } + data = data[t.Len():] + case reflect.Uint64: + var u64 uint64 + if u64, data, ok = parseUint64(data); !ok { + return errShortRead + } + field.SetUint(u64) + case reflect.Uint32: + var u32 uint32 + if u32, data, ok = parseUint32(data); !ok { + return errShortRead + } + field.SetUint(uint64(u32)) + case reflect.Uint8: + if len(data) < 1 { + return errShortRead + } + field.SetUint(uint64(data[0])) + data = data[1:] + case reflect.String: + var s []byte + if s, data, ok = parseString(data); !ok { + return fieldError(structType, i, "") + } + field.SetString(string(s)) + case reflect.Slice: + switch t.Elem().Kind() { + case reflect.Uint8: + if structType.Field(i).Tag.Get("ssh") == "rest" { + field.Set(reflect.ValueOf(data)) + data = nil + } else { + var s []byte + if s, data, ok = parseString(data); !ok { + return errShortRead + } + field.Set(reflect.ValueOf(s)) + } + case reflect.String: + var nl []string + if nl, data, ok = parseNameList(data); !ok { + return errShortRead + } + field.Set(reflect.ValueOf(nl)) + default: + return fieldError(structType, i, "slice of unsupported type") + } + case reflect.Ptr: + if t == bigIntType { + var n *big.Int + if n, data, ok = parseInt(data); !ok { + return errShortRead + } + field.Set(reflect.ValueOf(n)) + } else { + return fieldError(structType, i, "pointer to unsupported type") + } + default: + return fieldError(structType, i, fmt.Sprintf("unsupported type: %v", t)) + } + } + + if len(data) != 0 { + return parseError(expectedType) + } + + return nil +} + +// Marshal serializes the message in msg to SSH wire format. The msg +// argument should be a struct or pointer to struct. If the first +// member has the "sshtype" tag set to a number in decimal, that +// number is prepended to the result. If the last of member has the +// "ssh" tag set to "rest", its contents are appended to the output. +func Marshal(msg interface{}) []byte { + out := make([]byte, 0, 64) + return marshalStruct(out, msg) +} + +func marshalStruct(out []byte, msg interface{}) []byte { + v := reflect.Indirect(reflect.ValueOf(msg)) + msgTypes := typeTags(v.Type()) + if len(msgTypes) > 0 { + out = append(out, msgTypes[0]) + } + + for i, n := 0, v.NumField(); i < n; i++ { + field := v.Field(i) + switch t := field.Type(); t.Kind() { + case reflect.Bool: + var v uint8 + if field.Bool() { + v = 1 + } + out = append(out, v) + case reflect.Array: + if t.Elem().Kind() != reflect.Uint8 { + panic(fmt.Sprintf("array of non-uint8 in field %d: %T", i, field.Interface())) + } + for j, l := 0, t.Len(); j < l; j++ { + out = append(out, uint8(field.Index(j).Uint())) + } + case reflect.Uint32: + out = appendU32(out, uint32(field.Uint())) + case reflect.Uint64: + out = appendU64(out, uint64(field.Uint())) + case reflect.Uint8: + out = append(out, uint8(field.Uint())) + case reflect.String: + s := field.String() + out = appendInt(out, len(s)) + out = append(out, s...) + case reflect.Slice: + switch t.Elem().Kind() { + case reflect.Uint8: + if v.Type().Field(i).Tag.Get("ssh") != "rest" { + out = appendInt(out, field.Len()) + } + out = append(out, field.Bytes()...) + case reflect.String: + offset := len(out) + out = appendU32(out, 0) + if n := field.Len(); n > 0 { + for j := 0; j < n; j++ { + f := field.Index(j) + if j != 0 { + out = append(out, ',') + } + out = append(out, f.String()...) + } + // overwrite length value + binary.BigEndian.PutUint32(out[offset:], uint32(len(out)-offset-4)) + } + default: + panic(fmt.Sprintf("slice of unknown type in field %d: %T", i, field.Interface())) + } + case reflect.Ptr: + if t == bigIntType { + var n *big.Int + nValue := reflect.ValueOf(&n) + nValue.Elem().Set(field) + needed := intLength(n) + oldLength := len(out) + + if cap(out)-len(out) < needed { + newOut := make([]byte, len(out), 2*(len(out)+needed)) + copy(newOut, out) + out = newOut + } + out = out[:oldLength+needed] + marshalInt(out[oldLength:], n) + } else { + panic(fmt.Sprintf("pointer to unknown type in field %d: %T", i, field.Interface())) + } + } + } + + return out +} + +var bigOne = big.NewInt(1) + +func parseString(in []byte) (out, rest []byte, ok bool) { + if len(in) < 4 { + return + } + length := binary.BigEndian.Uint32(in) + in = in[4:] + if uint32(len(in)) < length { + return + } + out = in[:length] + rest = in[length:] + ok = true + return +} + +var ( + comma = []byte{','} + emptyNameList = []string{} +) + +func parseNameList(in []byte) (out []string, rest []byte, ok bool) { + contents, rest, ok := parseString(in) + if !ok { + return + } + if len(contents) == 0 { + out = emptyNameList + return + } + parts := bytes.Split(contents, comma) + out = make([]string, len(parts)) + for i, part := range parts { + out[i] = string(part) + } + return +} + +func parseInt(in []byte) (out *big.Int, rest []byte, ok bool) { + contents, rest, ok := parseString(in) + if !ok { + return + } + out = new(big.Int) + + if len(contents) > 0 && contents[0]&0x80 == 0x80 { + // This is a negative number + notBytes := make([]byte, len(contents)) + for i := range notBytes { + notBytes[i] = ^contents[i] + } + out.SetBytes(notBytes) + out.Add(out, bigOne) + out.Neg(out) + } else { + // Positive number + out.SetBytes(contents) + } + ok = true + return +} + +func parseUint32(in []byte) (uint32, []byte, bool) { + if len(in) < 4 { + return 0, nil, false + } + return binary.BigEndian.Uint32(in), in[4:], true +} + +func parseUint64(in []byte) (uint64, []byte, bool) { + if len(in) < 8 { + return 0, nil, false + } + return binary.BigEndian.Uint64(in), in[8:], true +} + +func intLength(n *big.Int) int { + length := 4 /* length bytes */ + if n.Sign() < 0 { + nMinus1 := new(big.Int).Neg(n) + nMinus1.Sub(nMinus1, bigOne) + bitLen := nMinus1.BitLen() + if bitLen%8 == 0 { + // The number will need 0xff padding + length++ + } + length += (bitLen + 7) / 8 + } else if n.Sign() == 0 { + // A zero is the zero length string + } else { + bitLen := n.BitLen() + if bitLen%8 == 0 { + // The number will need 0x00 padding + length++ + } + length += (bitLen + 7) / 8 + } + + return length +} + +func marshalUint32(to []byte, n uint32) []byte { + binary.BigEndian.PutUint32(to, n) + return to[4:] +} + +func marshalUint64(to []byte, n uint64) []byte { + binary.BigEndian.PutUint64(to, n) + return to[8:] +} + +func marshalInt(to []byte, n *big.Int) []byte { + lengthBytes := to + to = to[4:] + length := 0 + + if n.Sign() < 0 { + // A negative number has to be converted to two's-complement + // form. So we'll subtract 1 and invert. If the + // most-significant-bit isn't set then we'll need to pad the + // beginning with 0xff in order to keep the number negative. + nMinus1 := new(big.Int).Neg(n) + nMinus1.Sub(nMinus1, bigOne) + bytes := nMinus1.Bytes() + for i := range bytes { + bytes[i] ^= 0xff + } + if len(bytes) == 0 || bytes[0]&0x80 == 0 { + to[0] = 0xff + to = to[1:] + length++ + } + nBytes := copy(to, bytes) + to = to[nBytes:] + length += nBytes + } else if n.Sign() == 0 { + // A zero is the zero length string + } else { + bytes := n.Bytes() + if len(bytes) > 0 && bytes[0]&0x80 != 0 { + // We'll have to pad this with a 0x00 in order to + // stop it looking like a negative number. + to[0] = 0 + to = to[1:] + length++ + } + nBytes := copy(to, bytes) + to = to[nBytes:] + length += nBytes + } + + lengthBytes[0] = byte(length >> 24) + lengthBytes[1] = byte(length >> 16) + lengthBytes[2] = byte(length >> 8) + lengthBytes[3] = byte(length) + return to +} + +func writeInt(w io.Writer, n *big.Int) { + length := intLength(n) + buf := make([]byte, length) + marshalInt(buf, n) + w.Write(buf) +} + +func writeString(w io.Writer, s []byte) { + var lengthBytes [4]byte + lengthBytes[0] = byte(len(s) >> 24) + lengthBytes[1] = byte(len(s) >> 16) + lengthBytes[2] = byte(len(s) >> 8) + lengthBytes[3] = byte(len(s)) + w.Write(lengthBytes[:]) + w.Write(s) +} + +func stringLength(n int) int { + return 4 + n +} + +func marshalString(to []byte, s []byte) []byte { + to[0] = byte(len(s) >> 24) + to[1] = byte(len(s) >> 16) + to[2] = byte(len(s) >> 8) + to[3] = byte(len(s)) + to = to[4:] + copy(to, s) + return to[len(s):] +} + +var bigIntType = reflect.TypeOf((*big.Int)(nil)) + +// Decode a packet into its corresponding message. +func decode(packet []byte) (interface{}, error) { + var msg interface{} + switch packet[0] { + case msgDisconnect: + msg = new(disconnectMsg) + case msgServiceRequest: + msg = new(serviceRequestMsg) + case msgServiceAccept: + msg = new(serviceAcceptMsg) + case msgKexInit: + msg = new(kexInitMsg) + case msgKexDHInit: + msg = new(kexDHInitMsg) + case msgKexDHReply: + msg = new(kexDHReplyMsg) + case msgUserAuthRequest: + msg = new(userAuthRequestMsg) + case msgUserAuthSuccess: + return new(userAuthSuccessMsg), nil + case msgUserAuthFailure: + msg = new(userAuthFailureMsg) + case msgUserAuthPubKeyOk: + msg = new(userAuthPubKeyOkMsg) + case msgGlobalRequest: + msg = new(globalRequestMsg) + case msgRequestSuccess: + msg = new(globalRequestSuccessMsg) + case msgRequestFailure: + msg = new(globalRequestFailureMsg) + case msgChannelOpen: + msg = new(channelOpenMsg) + case msgChannelData: + msg = new(channelDataMsg) + case msgChannelOpenConfirm: + msg = new(channelOpenConfirmMsg) + case msgChannelOpenFailure: + msg = new(channelOpenFailureMsg) + case msgChannelWindowAdjust: + msg = new(windowAdjustMsg) + case msgChannelEOF: + msg = new(channelEOFMsg) + case msgChannelClose: + msg = new(channelCloseMsg) + case msgChannelRequest: + msg = new(channelRequestMsg) + case msgChannelSuccess: + msg = new(channelRequestSuccessMsg) + case msgChannelFailure: + msg = new(channelRequestFailureMsg) + default: + return nil, unexpectedMessageError(0, packet[0]) + } + if err := Unmarshal(packet, msg); err != nil { + return nil, err + } + return msg, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/messages_test.go b/vendor/golang.org/x/crypto/ssh/messages_test.go new file mode 100644 index 0000000..e790764 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/messages_test.go @@ -0,0 +1,288 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "math/big" + "math/rand" + "reflect" + "testing" + "testing/quick" +) + +var intLengthTests = []struct { + val, length int +}{ + {0, 4 + 0}, + {1, 4 + 1}, + {127, 4 + 1}, + {128, 4 + 2}, + {-1, 4 + 1}, +} + +func TestIntLength(t *testing.T) { + for _, test := range intLengthTests { + v := new(big.Int).SetInt64(int64(test.val)) + length := intLength(v) + if length != test.length { + t.Errorf("For %d, got length %d but expected %d", test.val, length, test.length) + } + } +} + +type msgAllTypes struct { + Bool bool `sshtype:"21"` + Array [16]byte + Uint64 uint64 + Uint32 uint32 + Uint8 uint8 + String string + Strings []string + Bytes []byte + Int *big.Int + Rest []byte `ssh:"rest"` +} + +func (t *msgAllTypes) Generate(rand *rand.Rand, size int) reflect.Value { + m := &msgAllTypes{} + m.Bool = rand.Intn(2) == 1 + randomBytes(m.Array[:], rand) + m.Uint64 = uint64(rand.Int63n(1<<63 - 1)) + m.Uint32 = uint32(rand.Intn((1 << 31) - 1)) + m.Uint8 = uint8(rand.Intn(1 << 8)) + m.String = string(m.Array[:]) + m.Strings = randomNameList(rand) + m.Bytes = m.Array[:] + m.Int = randomInt(rand) + m.Rest = m.Array[:] + return reflect.ValueOf(m) +} + +func TestMarshalUnmarshal(t *testing.T) { + rand := rand.New(rand.NewSource(0)) + iface := &msgAllTypes{} + ty := reflect.ValueOf(iface).Type() + + n := 100 + if testing.Short() { + n = 5 + } + for j := 0; j < n; j++ { + v, ok := quick.Value(ty, rand) + if !ok { + t.Errorf("failed to create value") + break + } + + m1 := v.Elem().Interface() + m2 := iface + + marshaled := Marshal(m1) + if err := Unmarshal(marshaled, m2); err != nil { + t.Errorf("Unmarshal %#v: %s", m1, err) + break + } + + if !reflect.DeepEqual(v.Interface(), m2) { + t.Errorf("got: %#v\nwant:%#v\n%x", m2, m1, marshaled) + break + } + } +} + +func TestUnmarshalEmptyPacket(t *testing.T) { + var b []byte + var m channelRequestSuccessMsg + if err := Unmarshal(b, &m); err == nil { + t.Fatalf("unmarshal of empty slice succeeded") + } +} + +func TestUnmarshalUnexpectedPacket(t *testing.T) { + type S struct { + I uint32 `sshtype:"43"` + S string + B bool + } + + s := S{11, "hello", true} + packet := Marshal(s) + packet[0] = 42 + roundtrip := S{} + err := Unmarshal(packet, &roundtrip) + if err == nil { + t.Fatal("expected error, not nil") + } +} + +func TestMarshalPtr(t *testing.T) { + s := struct { + S string + }{"hello"} + + m1 := Marshal(s) + m2 := Marshal(&s) + if !bytes.Equal(m1, m2) { + t.Errorf("got %q, want %q for marshaled pointer", m2, m1) + } +} + +func TestBareMarshalUnmarshal(t *testing.T) { + type S struct { + I uint32 + S string + B bool + } + + s := S{42, "hello", true} + packet := Marshal(s) + roundtrip := S{} + Unmarshal(packet, &roundtrip) + + if !reflect.DeepEqual(s, roundtrip) { + t.Errorf("got %#v, want %#v", roundtrip, s) + } +} + +func TestBareMarshal(t *testing.T) { + type S2 struct { + I uint32 + } + s := S2{42} + packet := Marshal(s) + i, rest, ok := parseUint32(packet) + if len(rest) > 0 || !ok { + t.Errorf("parseInt(%q): parse error", packet) + } + if i != s.I { + t.Errorf("got %d, want %d", i, s.I) + } +} + +func TestUnmarshalShortKexInitPacket(t *testing.T) { + // This used to panic. + // Issue 11348 + packet := []byte{0x14, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xff, 0xff, 0xff, 0xff} + kim := &kexInitMsg{} + if err := Unmarshal(packet, kim); err == nil { + t.Error("truncated packet unmarshaled without error") + } +} + +func TestMarshalMultiTag(t *testing.T) { + var res struct { + A uint32 `sshtype:"1|2"` + } + + good1 := struct { + A uint32 `sshtype:"1"` + }{ + 1, + } + good2 := struct { + A uint32 `sshtype:"2"` + }{ + 1, + } + + if e := Unmarshal(Marshal(good1), &res); e != nil { + t.Errorf("error unmarshaling multipart tag: %v", e) + } + + if e := Unmarshal(Marshal(good2), &res); e != nil { + t.Errorf("error unmarshaling multipart tag: %v", e) + } + + bad1 := struct { + A uint32 `sshtype:"3"` + }{ + 1, + } + if e := Unmarshal(Marshal(bad1), &res); e == nil { + t.Errorf("bad struct unmarshaled without error") + } +} + +func randomBytes(out []byte, rand *rand.Rand) { + for i := 0; i < len(out); i++ { + out[i] = byte(rand.Int31()) + } +} + +func randomNameList(rand *rand.Rand) []string { + ret := make([]string, rand.Int31()&15) + for i := range ret { + s := make([]byte, 1+(rand.Int31()&15)) + for j := range s { + s[j] = 'a' + uint8(rand.Int31()&15) + } + ret[i] = string(s) + } + return ret +} + +func randomInt(rand *rand.Rand) *big.Int { + return new(big.Int).SetInt64(int64(int32(rand.Uint32()))) +} + +func (*kexInitMsg) Generate(rand *rand.Rand, size int) reflect.Value { + ki := &kexInitMsg{} + randomBytes(ki.Cookie[:], rand) + ki.KexAlgos = randomNameList(rand) + ki.ServerHostKeyAlgos = randomNameList(rand) + ki.CiphersClientServer = randomNameList(rand) + ki.CiphersServerClient = randomNameList(rand) + ki.MACsClientServer = randomNameList(rand) + ki.MACsServerClient = randomNameList(rand) + ki.CompressionClientServer = randomNameList(rand) + ki.CompressionServerClient = randomNameList(rand) + ki.LanguagesClientServer = randomNameList(rand) + ki.LanguagesServerClient = randomNameList(rand) + if rand.Int31()&1 == 1 { + ki.FirstKexFollows = true + } + return reflect.ValueOf(ki) +} + +func (*kexDHInitMsg) Generate(rand *rand.Rand, size int) reflect.Value { + dhi := &kexDHInitMsg{} + dhi.X = randomInt(rand) + return reflect.ValueOf(dhi) +} + +var ( + _kexInitMsg = new(kexInitMsg).Generate(rand.New(rand.NewSource(0)), 10).Elem().Interface() + _kexDHInitMsg = new(kexDHInitMsg).Generate(rand.New(rand.NewSource(0)), 10).Elem().Interface() + + _kexInit = Marshal(_kexInitMsg) + _kexDHInit = Marshal(_kexDHInitMsg) +) + +func BenchmarkMarshalKexInitMsg(b *testing.B) { + for i := 0; i < b.N; i++ { + Marshal(_kexInitMsg) + } +} + +func BenchmarkUnmarshalKexInitMsg(b *testing.B) { + m := new(kexInitMsg) + for i := 0; i < b.N; i++ { + Unmarshal(_kexInit, m) + } +} + +func BenchmarkMarshalKexDHInitMsg(b *testing.B) { + for i := 0; i < b.N; i++ { + Marshal(_kexDHInitMsg) + } +} + +func BenchmarkUnmarshalKexDHInitMsg(b *testing.B) { + m := new(kexDHInitMsg) + for i := 0; i < b.N; i++ { + Unmarshal(_kexDHInit, m) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/mux.go b/vendor/golang.org/x/crypto/ssh/mux.go new file mode 100644 index 0000000..f3a3ddd --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mux.go @@ -0,0 +1,330 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "encoding/binary" + "fmt" + "io" + "log" + "sync" + "sync/atomic" +) + +// debugMux, if set, causes messages in the connection protocol to be +// logged. +const debugMux = false + +// chanList is a thread safe channel list. +type chanList struct { + // protects concurrent access to chans + sync.Mutex + + // chans are indexed by the local id of the channel, which the + // other side should send in the PeersId field. + chans []*channel + + // This is a debugging aid: it offsets all IDs by this + // amount. This helps distinguish otherwise identical + // server/client muxes + offset uint32 +} + +// Assigns a channel ID to the given channel. +func (c *chanList) add(ch *channel) uint32 { + c.Lock() + defer c.Unlock() + for i := range c.chans { + if c.chans[i] == nil { + c.chans[i] = ch + return uint32(i) + c.offset + } + } + c.chans = append(c.chans, ch) + return uint32(len(c.chans)-1) + c.offset +} + +// getChan returns the channel for the given ID. +func (c *chanList) getChan(id uint32) *channel { + id -= c.offset + + c.Lock() + defer c.Unlock() + if id < uint32(len(c.chans)) { + return c.chans[id] + } + return nil +} + +func (c *chanList) remove(id uint32) { + id -= c.offset + c.Lock() + if id < uint32(len(c.chans)) { + c.chans[id] = nil + } + c.Unlock() +} + +// dropAll forgets all channels it knows, returning them in a slice. +func (c *chanList) dropAll() []*channel { + c.Lock() + defer c.Unlock() + var r []*channel + + for _, ch := range c.chans { + if ch == nil { + continue + } + r = append(r, ch) + } + c.chans = nil + return r +} + +// mux represents the state for the SSH connection protocol, which +// multiplexes many channels onto a single packet transport. +type mux struct { + conn packetConn + chanList chanList + + incomingChannels chan NewChannel + + globalSentMu sync.Mutex + globalResponses chan interface{} + incomingRequests chan *Request + + errCond *sync.Cond + err error +} + +// When debugging, each new chanList instantiation has a different +// offset. +var globalOff uint32 + +func (m *mux) Wait() error { + m.errCond.L.Lock() + defer m.errCond.L.Unlock() + for m.err == nil { + m.errCond.Wait() + } + return m.err +} + +// newMux returns a mux that runs over the given connection. +func newMux(p packetConn) *mux { + m := &mux{ + conn: p, + incomingChannels: make(chan NewChannel, 16), + globalResponses: make(chan interface{}, 1), + incomingRequests: make(chan *Request, 16), + errCond: newCond(), + } + if debugMux { + m.chanList.offset = atomic.AddUint32(&globalOff, 1) + } + + go m.loop() + return m +} + +func (m *mux) sendMessage(msg interface{}) error { + p := Marshal(msg) + if debugMux { + log.Printf("send global(%d): %#v", m.chanList.offset, msg) + } + return m.conn.writePacket(p) +} + +func (m *mux) SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error) { + if wantReply { + m.globalSentMu.Lock() + defer m.globalSentMu.Unlock() + } + + if err := m.sendMessage(globalRequestMsg{ + Type: name, + WantReply: wantReply, + Data: payload, + }); err != nil { + return false, nil, err + } + + if !wantReply { + return false, nil, nil + } + + msg, ok := <-m.globalResponses + if !ok { + return false, nil, io.EOF + } + switch msg := msg.(type) { + case *globalRequestFailureMsg: + return false, msg.Data, nil + case *globalRequestSuccessMsg: + return true, msg.Data, nil + default: + return false, nil, fmt.Errorf("ssh: unexpected response to request: %#v", msg) + } +} + +// ackRequest must be called after processing a global request that +// has WantReply set. +func (m *mux) ackRequest(ok bool, data []byte) error { + if ok { + return m.sendMessage(globalRequestSuccessMsg{Data: data}) + } + return m.sendMessage(globalRequestFailureMsg{Data: data}) +} + +func (m *mux) Close() error { + return m.conn.Close() +} + +// loop runs the connection machine. It will process packets until an +// error is encountered. To synchronize on loop exit, use mux.Wait. +func (m *mux) loop() { + var err error + for err == nil { + err = m.onePacket() + } + + for _, ch := range m.chanList.dropAll() { + ch.close() + } + + close(m.incomingChannels) + close(m.incomingRequests) + close(m.globalResponses) + + m.conn.Close() + + m.errCond.L.Lock() + m.err = err + m.errCond.Broadcast() + m.errCond.L.Unlock() + + if debugMux { + log.Println("loop exit", err) + } +} + +// onePacket reads and processes one packet. +func (m *mux) onePacket() error { + packet, err := m.conn.readPacket() + if err != nil { + return err + } + + if debugMux { + if packet[0] == msgChannelData || packet[0] == msgChannelExtendedData { + log.Printf("decoding(%d): data packet - %d bytes", m.chanList.offset, len(packet)) + } else { + p, _ := decode(packet) + log.Printf("decoding(%d): %d %#v - %d bytes", m.chanList.offset, packet[0], p, len(packet)) + } + } + + switch packet[0] { + case msgChannelOpen: + return m.handleChannelOpen(packet) + case msgGlobalRequest, msgRequestSuccess, msgRequestFailure: + return m.handleGlobalPacket(packet) + } + + // assume a channel packet. + if len(packet) < 5 { + return parseError(packet[0]) + } + id := binary.BigEndian.Uint32(packet[1:]) + ch := m.chanList.getChan(id) + if ch == nil { + return fmt.Errorf("ssh: invalid channel %d", id) + } + + return ch.handlePacket(packet) +} + +func (m *mux) handleGlobalPacket(packet []byte) error { + msg, err := decode(packet) + if err != nil { + return err + } + + switch msg := msg.(type) { + case *globalRequestMsg: + m.incomingRequests <- &Request{ + Type: msg.Type, + WantReply: msg.WantReply, + Payload: msg.Data, + mux: m, + } + case *globalRequestSuccessMsg, *globalRequestFailureMsg: + m.globalResponses <- msg + default: + panic(fmt.Sprintf("not a global message %#v", msg)) + } + + return nil +} + +// handleChannelOpen schedules a channel to be Accept()ed. +func (m *mux) handleChannelOpen(packet []byte) error { + var msg channelOpenMsg + if err := Unmarshal(packet, &msg); err != nil { + return err + } + + if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 { + failMsg := channelOpenFailureMsg{ + PeersId: msg.PeersId, + Reason: ConnectionFailed, + Message: "invalid request", + Language: "en_US.UTF-8", + } + return m.sendMessage(failMsg) + } + + c := m.newChannel(msg.ChanType, channelInbound, msg.TypeSpecificData) + c.remoteId = msg.PeersId + c.maxRemotePayload = msg.MaxPacketSize + c.remoteWin.add(msg.PeersWindow) + m.incomingChannels <- c + return nil +} + +func (m *mux) OpenChannel(chanType string, extra []byte) (Channel, <-chan *Request, error) { + ch, err := m.openChannel(chanType, extra) + if err != nil { + return nil, nil, err + } + + return ch, ch.incomingRequests, nil +} + +func (m *mux) openChannel(chanType string, extra []byte) (*channel, error) { + ch := m.newChannel(chanType, channelOutbound, extra) + + ch.maxIncomingPayload = channelMaxPacket + + open := channelOpenMsg{ + ChanType: chanType, + PeersWindow: ch.myWindow, + MaxPacketSize: ch.maxIncomingPayload, + TypeSpecificData: extra, + PeersId: ch.localId, + } + if err := m.sendMessage(open); err != nil { + return nil, err + } + + switch msg := (<-ch.msg).(type) { + case *channelOpenConfirmMsg: + return ch, nil + case *channelOpenFailureMsg: + return nil, &OpenChannelError{msg.Reason, msg.Message} + default: + return nil, fmt.Errorf("ssh: unexpected packet in response to channel open: %T", msg) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/mux_test.go b/vendor/golang.org/x/crypto/ssh/mux_test.go new file mode 100644 index 0000000..591aae8 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mux_test.go @@ -0,0 +1,502 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "io" + "io/ioutil" + "sync" + "testing" +) + +func muxPair() (*mux, *mux) { + a, b := memPipe() + + s := newMux(a) + c := newMux(b) + + return s, c +} + +// Returns both ends of a channel, and the mux for the the 2nd +// channel. +func channelPair(t *testing.T) (*channel, *channel, *mux) { + c, s := muxPair() + + res := make(chan *channel, 1) + go func() { + newCh, ok := <-s.incomingChannels + if !ok { + t.Fatalf("No incoming channel") + } + if newCh.ChannelType() != "chan" { + t.Fatalf("got type %q want chan", newCh.ChannelType()) + } + ch, _, err := newCh.Accept() + if err != nil { + t.Fatalf("Accept %v", err) + } + res <- ch.(*channel) + }() + + ch, err := c.openChannel("chan", nil) + if err != nil { + t.Fatalf("OpenChannel: %v", err) + } + + return <-res, ch, c +} + +// Test that stderr and stdout can be addressed from different +// goroutines. This is intended for use with the race detector. +func TestMuxChannelExtendedThreadSafety(t *testing.T) { + writer, reader, mux := channelPair(t) + defer writer.Close() + defer reader.Close() + defer mux.Close() + + var wr, rd sync.WaitGroup + magic := "hello world" + + wr.Add(2) + go func() { + io.WriteString(writer, magic) + wr.Done() + }() + go func() { + io.WriteString(writer.Stderr(), magic) + wr.Done() + }() + + rd.Add(2) + go func() { + c, err := ioutil.ReadAll(reader) + if string(c) != magic { + t.Fatalf("stdout read got %q, want %q (error %s)", c, magic, err) + } + rd.Done() + }() + go func() { + c, err := ioutil.ReadAll(reader.Stderr()) + if string(c) != magic { + t.Fatalf("stderr read got %q, want %q (error %s)", c, magic, err) + } + rd.Done() + }() + + wr.Wait() + writer.CloseWrite() + rd.Wait() +} + +func TestMuxReadWrite(t *testing.T) { + s, c, mux := channelPair(t) + defer s.Close() + defer c.Close() + defer mux.Close() + + magic := "hello world" + magicExt := "hello stderr" + go func() { + _, err := s.Write([]byte(magic)) + if err != nil { + t.Fatalf("Write: %v", err) + } + _, err = s.Extended(1).Write([]byte(magicExt)) + if err != nil { + t.Fatalf("Write: %v", err) + } + err = s.Close() + if err != nil { + t.Fatalf("Close: %v", err) + } + }() + + var buf [1024]byte + n, err := c.Read(buf[:]) + if err != nil { + t.Fatalf("server Read: %v", err) + } + got := string(buf[:n]) + if got != magic { + t.Fatalf("server: got %q want %q", got, magic) + } + + n, err = c.Extended(1).Read(buf[:]) + if err != nil { + t.Fatalf("server Read: %v", err) + } + + got = string(buf[:n]) + if got != magicExt { + t.Fatalf("server: got %q want %q", got, magic) + } +} + +func TestMuxChannelOverflow(t *testing.T) { + reader, writer, mux := channelPair(t) + defer reader.Close() + defer writer.Close() + defer mux.Close() + + wDone := make(chan int, 1) + go func() { + if _, err := writer.Write(make([]byte, channelWindowSize)); err != nil { + t.Errorf("could not fill window: %v", err) + } + writer.Write(make([]byte, 1)) + wDone <- 1 + }() + writer.remoteWin.waitWriterBlocked() + + // Send 1 byte. + packet := make([]byte, 1+4+4+1) + packet[0] = msgChannelData + marshalUint32(packet[1:], writer.remoteId) + marshalUint32(packet[5:], uint32(1)) + packet[9] = 42 + + if err := writer.mux.conn.writePacket(packet); err != nil { + t.Errorf("could not send packet") + } + if _, err := reader.SendRequest("hello", true, nil); err == nil { + t.Errorf("SendRequest succeeded.") + } + <-wDone +} + +func TestMuxChannelCloseWriteUnblock(t *testing.T) { + reader, writer, mux := channelPair(t) + defer reader.Close() + defer writer.Close() + defer mux.Close() + + wDone := make(chan int, 1) + go func() { + if _, err := writer.Write(make([]byte, channelWindowSize)); err != nil { + t.Errorf("could not fill window: %v", err) + } + if _, err := writer.Write(make([]byte, 1)); err != io.EOF { + t.Errorf("got %v, want EOF for unblock write", err) + } + wDone <- 1 + }() + + writer.remoteWin.waitWriterBlocked() + reader.Close() + <-wDone +} + +func TestMuxConnectionCloseWriteUnblock(t *testing.T) { + reader, writer, mux := channelPair(t) + defer reader.Close() + defer writer.Close() + defer mux.Close() + + wDone := make(chan int, 1) + go func() { + if _, err := writer.Write(make([]byte, channelWindowSize)); err != nil { + t.Errorf("could not fill window: %v", err) + } + if _, err := writer.Write(make([]byte, 1)); err != io.EOF { + t.Errorf("got %v, want EOF for unblock write", err) + } + wDone <- 1 + }() + + writer.remoteWin.waitWriterBlocked() + mux.Close() + <-wDone +} + +func TestMuxReject(t *testing.T) { + client, server := muxPair() + defer server.Close() + defer client.Close() + + go func() { + ch, ok := <-server.incomingChannels + if !ok { + t.Fatalf("Accept") + } + if ch.ChannelType() != "ch" || string(ch.ExtraData()) != "extra" { + t.Fatalf("unexpected channel: %q, %q", ch.ChannelType(), ch.ExtraData()) + } + ch.Reject(RejectionReason(42), "message") + }() + + ch, err := client.openChannel("ch", []byte("extra")) + if ch != nil { + t.Fatal("openChannel not rejected") + } + + ocf, ok := err.(*OpenChannelError) + if !ok { + t.Errorf("got %#v want *OpenChannelError", err) + } else if ocf.Reason != 42 || ocf.Message != "message" { + t.Errorf("got %#v, want {Reason: 42, Message: %q}", ocf, "message") + } + + want := "ssh: rejected: unknown reason 42 (message)" + if err.Error() != want { + t.Errorf("got %q, want %q", err.Error(), want) + } +} + +func TestMuxChannelRequest(t *testing.T) { + client, server, mux := channelPair(t) + defer server.Close() + defer client.Close() + defer mux.Close() + + var received int + var wg sync.WaitGroup + wg.Add(1) + go func() { + for r := range server.incomingRequests { + received++ + r.Reply(r.Type == "yes", nil) + } + wg.Done() + }() + _, err := client.SendRequest("yes", false, nil) + if err != nil { + t.Fatalf("SendRequest: %v", err) + } + ok, err := client.SendRequest("yes", true, nil) + if err != nil { + t.Fatalf("SendRequest: %v", err) + } + + if !ok { + t.Errorf("SendRequest(yes): %v", ok) + + } + + ok, err = client.SendRequest("no", true, nil) + if err != nil { + t.Fatalf("SendRequest: %v", err) + } + if ok { + t.Errorf("SendRequest(no): %v", ok) + + } + + client.Close() + wg.Wait() + + if received != 3 { + t.Errorf("got %d requests, want %d", received, 3) + } +} + +func TestMuxGlobalRequest(t *testing.T) { + clientMux, serverMux := muxPair() + defer serverMux.Close() + defer clientMux.Close() + + var seen bool + go func() { + for r := range serverMux.incomingRequests { + seen = seen || r.Type == "peek" + if r.WantReply { + err := r.Reply(r.Type == "yes", + append([]byte(r.Type), r.Payload...)) + if err != nil { + t.Errorf("AckRequest: %v", err) + } + } + } + }() + + _, _, err := clientMux.SendRequest("peek", false, nil) + if err != nil { + t.Errorf("SendRequest: %v", err) + } + + ok, data, err := clientMux.SendRequest("yes", true, []byte("a")) + if !ok || string(data) != "yesa" || err != nil { + t.Errorf("SendRequest(\"yes\", true, \"a\"): %v %v %v", + ok, data, err) + } + if ok, data, err := clientMux.SendRequest("yes", true, []byte("a")); !ok || string(data) != "yesa" || err != nil { + t.Errorf("SendRequest(\"yes\", true, \"a\"): %v %v %v", + ok, data, err) + } + + if ok, data, err := clientMux.SendRequest("no", true, []byte("a")); ok || string(data) != "noa" || err != nil { + t.Errorf("SendRequest(\"no\", true, \"a\"): %v %v %v", + ok, data, err) + } + + if !seen { + t.Errorf("never saw 'peek' request") + } +} + +func TestMuxGlobalRequestUnblock(t *testing.T) { + clientMux, serverMux := muxPair() + defer serverMux.Close() + defer clientMux.Close() + + result := make(chan error, 1) + go func() { + _, _, err := clientMux.SendRequest("hello", true, nil) + result <- err + }() + + <-serverMux.incomingRequests + serverMux.conn.Close() + err := <-result + + if err != io.EOF { + t.Errorf("want EOF, got %v", io.EOF) + } +} + +func TestMuxChannelRequestUnblock(t *testing.T) { + a, b, connB := channelPair(t) + defer a.Close() + defer b.Close() + defer connB.Close() + + result := make(chan error, 1) + go func() { + _, err := a.SendRequest("hello", true, nil) + result <- err + }() + + <-b.incomingRequests + connB.conn.Close() + err := <-result + + if err != io.EOF { + t.Errorf("want EOF, got %v", err) + } +} + +func TestMuxCloseChannel(t *testing.T) { + r, w, mux := channelPair(t) + defer mux.Close() + defer r.Close() + defer w.Close() + + result := make(chan error, 1) + go func() { + var b [1024]byte + _, err := r.Read(b[:]) + result <- err + }() + if err := w.Close(); err != nil { + t.Errorf("w.Close: %v", err) + } + + if _, err := w.Write([]byte("hello")); err != io.EOF { + t.Errorf("got err %v, want io.EOF after Close", err) + } + + if err := <-result; err != io.EOF { + t.Errorf("got %v (%T), want io.EOF", err, err) + } +} + +func TestMuxCloseWriteChannel(t *testing.T) { + r, w, mux := channelPair(t) + defer mux.Close() + + result := make(chan error, 1) + go func() { + var b [1024]byte + _, err := r.Read(b[:]) + result <- err + }() + if err := w.CloseWrite(); err != nil { + t.Errorf("w.CloseWrite: %v", err) + } + + if _, err := w.Write([]byte("hello")); err != io.EOF { + t.Errorf("got err %v, want io.EOF after CloseWrite", err) + } + + if err := <-result; err != io.EOF { + t.Errorf("got %v (%T), want io.EOF", err, err) + } +} + +func TestMuxInvalidRecord(t *testing.T) { + a, b := muxPair() + defer a.Close() + defer b.Close() + + packet := make([]byte, 1+4+4+1) + packet[0] = msgChannelData + marshalUint32(packet[1:], 29348723 /* invalid channel id */) + marshalUint32(packet[5:], 1) + packet[9] = 42 + + a.conn.writePacket(packet) + go a.SendRequest("hello", false, nil) + // 'a' wrote an invalid packet, so 'b' has exited. + req, ok := <-b.incomingRequests + if ok { + t.Errorf("got request %#v after receiving invalid packet", req) + } +} + +func TestZeroWindowAdjust(t *testing.T) { + a, b, mux := channelPair(t) + defer a.Close() + defer b.Close() + defer mux.Close() + + go func() { + io.WriteString(a, "hello") + // bogus adjust. + a.sendMessage(windowAdjustMsg{}) + io.WriteString(a, "world") + a.Close() + }() + + want := "helloworld" + c, _ := ioutil.ReadAll(b) + if string(c) != want { + t.Errorf("got %q want %q", c, want) + } +} + +func TestMuxMaxPacketSize(t *testing.T) { + a, b, mux := channelPair(t) + defer a.Close() + defer b.Close() + defer mux.Close() + + large := make([]byte, a.maxRemotePayload+1) + packet := make([]byte, 1+4+4+1+len(large)) + packet[0] = msgChannelData + marshalUint32(packet[1:], a.remoteId) + marshalUint32(packet[5:], uint32(len(large))) + packet[9] = 42 + + if err := a.mux.conn.writePacket(packet); err != nil { + t.Errorf("could not send packet") + } + + go a.SendRequest("hello", false, nil) + + _, ok := <-b.incomingRequests + if ok { + t.Errorf("connection still alive after receiving large packet.") + } +} + +// Don't ship code with debug=true. +func TestDebug(t *testing.T) { + if debugMux { + t.Error("mux debug switched on") + } + if debugHandshake { + t.Error("handshake debug switched on") + } +} diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go new file mode 100644 index 0000000..37df1b3 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/server.go @@ -0,0 +1,488 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "errors" + "fmt" + "io" + "net" +) + +// The Permissions type holds fine-grained permissions that are +// specific to a user or a specific authentication method for a +// user. Permissions, except for "source-address", must be enforced in +// the server application layer, after successful authentication. The +// Permissions are passed on in ServerConn so a server implementation +// can honor them. +type Permissions struct { + // Critical options restrict default permissions. Common + // restrictions are "source-address" and "force-command". If + // the server cannot enforce the restriction, or does not + // recognize it, the user should not authenticate. + CriticalOptions map[string]string + + // Extensions are extra functionality that the server may + // offer on authenticated connections. Common extensions are + // "permit-agent-forwarding", "permit-X11-forwarding". Lack of + // support for an extension does not preclude authenticating a + // user. + Extensions map[string]string +} + +// ServerConfig holds server specific configuration data. +type ServerConfig struct { + // Config contains configuration shared between client and server. + Config + + hostKeys []Signer + + // NoClientAuth is true if clients are allowed to connect without + // authenticating. + NoClientAuth bool + + // PasswordCallback, if non-nil, is called when a user + // attempts to authenticate using a password. + PasswordCallback func(conn ConnMetadata, password []byte) (*Permissions, error) + + // PublicKeyCallback, if non-nil, is called when a client attempts public + // key authentication. It must return true if the given public key is + // valid for the given user. For example, see CertChecker.Authenticate. + PublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error) + + // KeyboardInteractiveCallback, if non-nil, is called when + // keyboard-interactive authentication is selected (RFC + // 4256). The client object's Challenge function should be + // used to query the user. The callback may offer multiple + // Challenge rounds. To avoid information leaks, the client + // should be presented a challenge even if the user is + // unknown. + KeyboardInteractiveCallback func(conn ConnMetadata, client KeyboardInteractiveChallenge) (*Permissions, error) + + // AuthLogCallback, if non-nil, is called to log all authentication + // attempts. + AuthLogCallback func(conn ConnMetadata, method string, err error) + + // ServerVersion is the version identification string to announce in + // the public handshake. + // If empty, a reasonable default is used. + // Note that RFC 4253 section 4.2 requires that this string start with + // "SSH-2.0-". + ServerVersion string +} + +// AddHostKey adds a private key as a host key. If an existing host +// key exists with the same algorithm, it is overwritten. Each server +// config must have at least one host key. +func (s *ServerConfig) AddHostKey(key Signer) { + for i, k := range s.hostKeys { + if k.PublicKey().Type() == key.PublicKey().Type() { + s.hostKeys[i] = key + return + } + } + + s.hostKeys = append(s.hostKeys, key) +} + +// cachedPubKey contains the results of querying whether a public key is +// acceptable for a user. +type cachedPubKey struct { + user string + pubKeyData []byte + result error + perms *Permissions +} + +const maxCachedPubKeys = 16 + +// pubKeyCache caches tests for public keys. Since SSH clients +// will query whether a public key is acceptable before attempting to +// authenticate with it, we end up with duplicate queries for public +// key validity. The cache only applies to a single ServerConn. +type pubKeyCache struct { + keys []cachedPubKey +} + +// get returns the result for a given user/algo/key tuple. +func (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) { + for _, k := range c.keys { + if k.user == user && bytes.Equal(k.pubKeyData, pubKeyData) { + return k, true + } + } + return cachedPubKey{}, false +} + +// add adds the given tuple to the cache. +func (c *pubKeyCache) add(candidate cachedPubKey) { + if len(c.keys) < maxCachedPubKeys { + c.keys = append(c.keys, candidate) + } +} + +// ServerConn is an authenticated SSH connection, as seen from the +// server +type ServerConn struct { + Conn + + // If the succeeding authentication callback returned a + // non-nil Permissions pointer, it is stored here. + Permissions *Permissions +} + +// NewServerConn starts a new SSH server with c as the underlying +// transport. It starts with a handshake and, if the handshake is +// unsuccessful, it closes the connection and returns an error. The +// Request and NewChannel channels must be serviced, or the connection +// will hang. +func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewChannel, <-chan *Request, error) { + fullConf := *config + fullConf.SetDefaults() + s := &connection{ + sshConn: sshConn{conn: c}, + } + perms, err := s.serverHandshake(&fullConf) + if err != nil { + c.Close() + return nil, nil, nil, err + } + return &ServerConn{s, perms}, s.mux.incomingChannels, s.mux.incomingRequests, nil +} + +// signAndMarshal signs the data with the appropriate algorithm, +// and serializes the result in SSH wire format. +func signAndMarshal(k Signer, rand io.Reader, data []byte) ([]byte, error) { + sig, err := k.Sign(rand, data) + if err != nil { + return nil, err + } + + return Marshal(sig), nil +} + +// handshake performs key exchange and user authentication. +func (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) { + if len(config.hostKeys) == 0 { + return nil, errors.New("ssh: server has no host keys") + } + + if !config.NoClientAuth && config.PasswordCallback == nil && config.PublicKeyCallback == nil && config.KeyboardInteractiveCallback == nil { + return nil, errors.New("ssh: no authentication methods configured but NoClientAuth is also false") + } + + if config.ServerVersion != "" { + s.serverVersion = []byte(config.ServerVersion) + } else { + s.serverVersion = []byte(packageVersion) + } + var err error + s.clientVersion, err = exchangeVersions(s.sshConn.conn, s.serverVersion) + if err != nil { + return nil, err + } + + tr := newTransport(s.sshConn.conn, config.Rand, false /* not client */) + s.transport = newServerTransport(tr, s.clientVersion, s.serverVersion, config) + + if err := s.transport.requestInitialKeyChange(); err != nil { + return nil, err + } + + // We just did the key change, so the session ID is established. + s.sessionID = s.transport.getSessionID() + + var packet []byte + if packet, err = s.transport.readPacket(); err != nil { + return nil, err + } + + var serviceRequest serviceRequestMsg + if err = Unmarshal(packet, &serviceRequest); err != nil { + return nil, err + } + if serviceRequest.Service != serviceUserAuth { + return nil, errors.New("ssh: requested service '" + serviceRequest.Service + "' before authenticating") + } + serviceAccept := serviceAcceptMsg{ + Service: serviceUserAuth, + } + if err := s.transport.writePacket(Marshal(&serviceAccept)); err != nil { + return nil, err + } + + perms, err := s.serverAuthenticate(config) + if err != nil { + return nil, err + } + s.mux = newMux(s.transport) + return perms, err +} + +func isAcceptableAlgo(algo string) bool { + switch algo { + case KeyAlgoRSA, KeyAlgoDSA, KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, KeyAlgoED25519, + CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01: + return true + } + return false +} + +func checkSourceAddress(addr net.Addr, sourceAddr string) error { + if addr == nil { + return errors.New("ssh: no address known for client, but source-address match required") + } + + tcpAddr, ok := addr.(*net.TCPAddr) + if !ok { + return fmt.Errorf("ssh: remote address %v is not an TCP address when checking source-address match", addr) + } + + if allowedIP := net.ParseIP(sourceAddr); allowedIP != nil { + if bytes.Equal(allowedIP, tcpAddr.IP) { + return nil + } + } else { + _, ipNet, err := net.ParseCIDR(sourceAddr) + if err != nil { + return fmt.Errorf("ssh: error parsing source-address restriction %q: %v", sourceAddr, err) + } + + if ipNet.Contains(tcpAddr.IP) { + return nil + } + } + + return fmt.Errorf("ssh: remote address %v is not allowed because of source-address restriction", addr) +} + +func (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, error) { + var err error + var cache pubKeyCache + var perms *Permissions + +userAuthLoop: + for { + var userAuthReq userAuthRequestMsg + if packet, err := s.transport.readPacket(); err != nil { + return nil, err + } else if err = Unmarshal(packet, &userAuthReq); err != nil { + return nil, err + } + + if userAuthReq.Service != serviceSSH { + return nil, errors.New("ssh: client attempted to negotiate for unknown service: " + userAuthReq.Service) + } + + s.user = userAuthReq.User + perms = nil + authErr := errors.New("no auth passed yet") + + switch userAuthReq.Method { + case "none": + if config.NoClientAuth { + authErr = nil + } + case "password": + if config.PasswordCallback == nil { + authErr = errors.New("ssh: password auth not configured") + break + } + payload := userAuthReq.Payload + if len(payload) < 1 || payload[0] != 0 { + return nil, parseError(msgUserAuthRequest) + } + payload = payload[1:] + password, payload, ok := parseString(payload) + if !ok || len(payload) > 0 { + return nil, parseError(msgUserAuthRequest) + } + + perms, authErr = config.PasswordCallback(s, password) + case "keyboard-interactive": + if config.KeyboardInteractiveCallback == nil { + authErr = errors.New("ssh: keyboard-interactive auth not configubred") + break + } + + prompter := &sshClientKeyboardInteractive{s} + perms, authErr = config.KeyboardInteractiveCallback(s, prompter.Challenge) + case "publickey": + if config.PublicKeyCallback == nil { + authErr = errors.New("ssh: publickey auth not configured") + break + } + payload := userAuthReq.Payload + if len(payload) < 1 { + return nil, parseError(msgUserAuthRequest) + } + isQuery := payload[0] == 0 + payload = payload[1:] + algoBytes, payload, ok := parseString(payload) + if !ok { + return nil, parseError(msgUserAuthRequest) + } + algo := string(algoBytes) + if !isAcceptableAlgo(algo) { + authErr = fmt.Errorf("ssh: algorithm %q not accepted", algo) + break + } + + pubKeyData, payload, ok := parseString(payload) + if !ok { + return nil, parseError(msgUserAuthRequest) + } + + pubKey, err := ParsePublicKey(pubKeyData) + if err != nil { + return nil, err + } + + candidate, ok := cache.get(s.user, pubKeyData) + if !ok { + candidate.user = s.user + candidate.pubKeyData = pubKeyData + candidate.perms, candidate.result = config.PublicKeyCallback(s, pubKey) + if candidate.result == nil && candidate.perms != nil && candidate.perms.CriticalOptions != nil && candidate.perms.CriticalOptions[sourceAddressCriticalOption] != "" { + candidate.result = checkSourceAddress( + s.RemoteAddr(), + candidate.perms.CriticalOptions[sourceAddressCriticalOption]) + } + cache.add(candidate) + } + + if isQuery { + // The client can query if the given public key + // would be okay. + if len(payload) > 0 { + return nil, parseError(msgUserAuthRequest) + } + + if candidate.result == nil { + okMsg := userAuthPubKeyOkMsg{ + Algo: algo, + PubKey: pubKeyData, + } + if err = s.transport.writePacket(Marshal(&okMsg)); err != nil { + return nil, err + } + continue userAuthLoop + } + authErr = candidate.result + } else { + sig, payload, ok := parseSignature(payload) + if !ok || len(payload) > 0 { + return nil, parseError(msgUserAuthRequest) + } + // Ensure the public key algo and signature algo + // are supported. Compare the private key + // algorithm name that corresponds to algo with + // sig.Format. This is usually the same, but + // for certs, the names differ. + if !isAcceptableAlgo(sig.Format) { + break + } + signedData := buildDataSignedForAuth(s.transport.getSessionID(), userAuthReq, algoBytes, pubKeyData) + + if err := pubKey.Verify(signedData, sig); err != nil { + return nil, err + } + + authErr = candidate.result + perms = candidate.perms + } + default: + authErr = fmt.Errorf("ssh: unknown method %q", userAuthReq.Method) + } + + if config.AuthLogCallback != nil { + config.AuthLogCallback(s, userAuthReq.Method, authErr) + } + + if authErr == nil { + break userAuthLoop + } + + var failureMsg userAuthFailureMsg + if config.PasswordCallback != nil { + failureMsg.Methods = append(failureMsg.Methods, "password") + } + if config.PublicKeyCallback != nil { + failureMsg.Methods = append(failureMsg.Methods, "publickey") + } + if config.KeyboardInteractiveCallback != nil { + failureMsg.Methods = append(failureMsg.Methods, "keyboard-interactive") + } + + if len(failureMsg.Methods) == 0 { + return nil, errors.New("ssh: no authentication methods configured but NoClientAuth is also false") + } + + if err = s.transport.writePacket(Marshal(&failureMsg)); err != nil { + return nil, err + } + } + + if err = s.transport.writePacket([]byte{msgUserAuthSuccess}); err != nil { + return nil, err + } + return perms, nil +} + +// sshClientKeyboardInteractive implements a ClientKeyboardInteractive by +// asking the client on the other side of a ServerConn. +type sshClientKeyboardInteractive struct { + *connection +} + +func (c *sshClientKeyboardInteractive) Challenge(user, instruction string, questions []string, echos []bool) (answers []string, err error) { + if len(questions) != len(echos) { + return nil, errors.New("ssh: echos and questions must have equal length") + } + + var prompts []byte + for i := range questions { + prompts = appendString(prompts, questions[i]) + prompts = appendBool(prompts, echos[i]) + } + + if err := c.transport.writePacket(Marshal(&userAuthInfoRequestMsg{ + Instruction: instruction, + NumPrompts: uint32(len(questions)), + Prompts: prompts, + })); err != nil { + return nil, err + } + + packet, err := c.transport.readPacket() + if err != nil { + return nil, err + } + if packet[0] != msgUserAuthInfoResponse { + return nil, unexpectedMessageError(msgUserAuthInfoResponse, packet[0]) + } + packet = packet[1:] + + n, packet, ok := parseUint32(packet) + if !ok || int(n) != len(questions) { + return nil, parseError(msgUserAuthInfoResponse) + } + + for i := uint32(0); i < n; i++ { + ans, rest, ok := parseString(packet) + if !ok { + return nil, parseError(msgUserAuthInfoResponse) + } + + answers = append(answers, string(ans)) + packet = rest + } + if len(packet) != 0 { + return nil, errors.New("ssh: junk at end of message") + } + + return answers, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/session.go b/vendor/golang.org/x/crypto/ssh/session.go new file mode 100644 index 0000000..17e2aa8 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/session.go @@ -0,0 +1,627 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +// Session implements an interactive session described in +// "RFC 4254, section 6". + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "io" + "io/ioutil" + "sync" +) + +type Signal string + +// POSIX signals as listed in RFC 4254 Section 6.10. +const ( + SIGABRT Signal = "ABRT" + SIGALRM Signal = "ALRM" + SIGFPE Signal = "FPE" + SIGHUP Signal = "HUP" + SIGILL Signal = "ILL" + SIGINT Signal = "INT" + SIGKILL Signal = "KILL" + SIGPIPE Signal = "PIPE" + SIGQUIT Signal = "QUIT" + SIGSEGV Signal = "SEGV" + SIGTERM Signal = "TERM" + SIGUSR1 Signal = "USR1" + SIGUSR2 Signal = "USR2" +) + +var signals = map[Signal]int{ + SIGABRT: 6, + SIGALRM: 14, + SIGFPE: 8, + SIGHUP: 1, + SIGILL: 4, + SIGINT: 2, + SIGKILL: 9, + SIGPIPE: 13, + SIGQUIT: 3, + SIGSEGV: 11, + SIGTERM: 15, +} + +type TerminalModes map[uint8]uint32 + +// POSIX terminal mode flags as listed in RFC 4254 Section 8. +const ( + tty_OP_END = 0 + VINTR = 1 + VQUIT = 2 + VERASE = 3 + VKILL = 4 + VEOF = 5 + VEOL = 6 + VEOL2 = 7 + VSTART = 8 + VSTOP = 9 + VSUSP = 10 + VDSUSP = 11 + VREPRINT = 12 + VWERASE = 13 + VLNEXT = 14 + VFLUSH = 15 + VSWTCH = 16 + VSTATUS = 17 + VDISCARD = 18 + IGNPAR = 30 + PARMRK = 31 + INPCK = 32 + ISTRIP = 33 + INLCR = 34 + IGNCR = 35 + ICRNL = 36 + IUCLC = 37 + IXON = 38 + IXANY = 39 + IXOFF = 40 + IMAXBEL = 41 + ISIG = 50 + ICANON = 51 + XCASE = 52 + ECHO = 53 + ECHOE = 54 + ECHOK = 55 + ECHONL = 56 + NOFLSH = 57 + TOSTOP = 58 + IEXTEN = 59 + ECHOCTL = 60 + ECHOKE = 61 + PENDIN = 62 + OPOST = 70 + OLCUC = 71 + ONLCR = 72 + OCRNL = 73 + ONOCR = 74 + ONLRET = 75 + CS7 = 90 + CS8 = 91 + PARENB = 92 + PARODD = 93 + TTY_OP_ISPEED = 128 + TTY_OP_OSPEED = 129 +) + +// A Session represents a connection to a remote command or shell. +type Session struct { + // Stdin specifies the remote process's standard input. + // If Stdin is nil, the remote process reads from an empty + // bytes.Buffer. + Stdin io.Reader + + // Stdout and Stderr specify the remote process's standard + // output and error. + // + // If either is nil, Run connects the corresponding file + // descriptor to an instance of ioutil.Discard. There is a + // fixed amount of buffering that is shared for the two streams. + // If either blocks it may eventually cause the remote + // command to block. + Stdout io.Writer + Stderr io.Writer + + ch Channel // the channel backing this session + started bool // true once Start, Run or Shell is invoked. + copyFuncs []func() error + errors chan error // one send per copyFunc + + // true if pipe method is active + stdinpipe, stdoutpipe, stderrpipe bool + + // stdinPipeWriter is non-nil if StdinPipe has not been called + // and Stdin was specified by the user; it is the write end of + // a pipe connecting Session.Stdin to the stdin channel. + stdinPipeWriter io.WriteCloser + + exitStatus chan error +} + +// SendRequest sends an out-of-band channel request on the SSH channel +// underlying the session. +func (s *Session) SendRequest(name string, wantReply bool, payload []byte) (bool, error) { + return s.ch.SendRequest(name, wantReply, payload) +} + +func (s *Session) Close() error { + return s.ch.Close() +} + +// RFC 4254 Section 6.4. +type setenvRequest struct { + Name string + Value string +} + +// Setenv sets an environment variable that will be applied to any +// command executed by Shell or Run. +func (s *Session) Setenv(name, value string) error { + msg := setenvRequest{ + Name: name, + Value: value, + } + ok, err := s.ch.SendRequest("env", true, Marshal(&msg)) + if err == nil && !ok { + err = errors.New("ssh: setenv failed") + } + return err +} + +// RFC 4254 Section 6.2. +type ptyRequestMsg struct { + Term string + Columns uint32 + Rows uint32 + Width uint32 + Height uint32 + Modelist string +} + +// RequestPty requests the association of a pty with the session on the remote host. +func (s *Session) RequestPty(term string, h, w int, termmodes TerminalModes) error { + var tm []byte + for k, v := range termmodes { + kv := struct { + Key byte + Val uint32 + }{k, v} + + tm = append(tm, Marshal(&kv)...) + } + tm = append(tm, tty_OP_END) + req := ptyRequestMsg{ + Term: term, + Columns: uint32(w), + Rows: uint32(h), + Width: uint32(w * 8), + Height: uint32(h * 8), + Modelist: string(tm), + } + ok, err := s.ch.SendRequest("pty-req", true, Marshal(&req)) + if err == nil && !ok { + err = errors.New("ssh: pty-req failed") + } + return err +} + +// RFC 4254 Section 6.5. +type subsystemRequestMsg struct { + Subsystem string +} + +// RequestSubsystem requests the association of a subsystem with the session on the remote host. +// A subsystem is a predefined command that runs in the background when the ssh session is initiated +func (s *Session) RequestSubsystem(subsystem string) error { + msg := subsystemRequestMsg{ + Subsystem: subsystem, + } + ok, err := s.ch.SendRequest("subsystem", true, Marshal(&msg)) + if err == nil && !ok { + err = errors.New("ssh: subsystem request failed") + } + return err +} + +// RFC 4254 Section 6.9. +type signalMsg struct { + Signal string +} + +// Signal sends the given signal to the remote process. +// sig is one of the SIG* constants. +func (s *Session) Signal(sig Signal) error { + msg := signalMsg{ + Signal: string(sig), + } + + _, err := s.ch.SendRequest("signal", false, Marshal(&msg)) + return err +} + +// RFC 4254 Section 6.5. +type execMsg struct { + Command string +} + +// Start runs cmd on the remote host. Typically, the remote +// server passes cmd to the shell for interpretation. +// A Session only accepts one call to Run, Start or Shell. +func (s *Session) Start(cmd string) error { + if s.started { + return errors.New("ssh: session already started") + } + req := execMsg{ + Command: cmd, + } + + ok, err := s.ch.SendRequest("exec", true, Marshal(&req)) + if err == nil && !ok { + err = fmt.Errorf("ssh: command %v failed", cmd) + } + if err != nil { + return err + } + return s.start() +} + +// Run runs cmd on the remote host. Typically, the remote +// server passes cmd to the shell for interpretation. +// A Session only accepts one call to Run, Start, Shell, Output, +// or CombinedOutput. +// +// The returned error is nil if the command runs, has no problems +// copying stdin, stdout, and stderr, and exits with a zero exit +// status. +// +// If the remote server does not send an exit status, an error of type +// *ExitMissingError is returned. If the command completes +// unsuccessfully or is interrupted by a signal, the error is of type +// *ExitError. Other error types may be returned for I/O problems. +func (s *Session) Run(cmd string) error { + err := s.Start(cmd) + if err != nil { + return err + } + return s.Wait() +} + +// Output runs cmd on the remote host and returns its standard output. +func (s *Session) Output(cmd string) ([]byte, error) { + if s.Stdout != nil { + return nil, errors.New("ssh: Stdout already set") + } + var b bytes.Buffer + s.Stdout = &b + err := s.Run(cmd) + return b.Bytes(), err +} + +type singleWriter struct { + b bytes.Buffer + mu sync.Mutex +} + +func (w *singleWriter) Write(p []byte) (int, error) { + w.mu.Lock() + defer w.mu.Unlock() + return w.b.Write(p) +} + +// CombinedOutput runs cmd on the remote host and returns its combined +// standard output and standard error. +func (s *Session) CombinedOutput(cmd string) ([]byte, error) { + if s.Stdout != nil { + return nil, errors.New("ssh: Stdout already set") + } + if s.Stderr != nil { + return nil, errors.New("ssh: Stderr already set") + } + var b singleWriter + s.Stdout = &b + s.Stderr = &b + err := s.Run(cmd) + return b.b.Bytes(), err +} + +// Shell starts a login shell on the remote host. A Session only +// accepts one call to Run, Start, Shell, Output, or CombinedOutput. +func (s *Session) Shell() error { + if s.started { + return errors.New("ssh: session already started") + } + + ok, err := s.ch.SendRequest("shell", true, nil) + if err == nil && !ok { + return errors.New("ssh: could not start shell") + } + if err != nil { + return err + } + return s.start() +} + +func (s *Session) start() error { + s.started = true + + type F func(*Session) + for _, setupFd := range []F{(*Session).stdin, (*Session).stdout, (*Session).stderr} { + setupFd(s) + } + + s.errors = make(chan error, len(s.copyFuncs)) + for _, fn := range s.copyFuncs { + go func(fn func() error) { + s.errors <- fn() + }(fn) + } + return nil +} + +// Wait waits for the remote command to exit. +// +// The returned error is nil if the command runs, has no problems +// copying stdin, stdout, and stderr, and exits with a zero exit +// status. +// +// If the remote server does not send an exit status, an error of type +// *ExitMissingError is returned. If the command completes +// unsuccessfully or is interrupted by a signal, the error is of type +// *ExitError. Other error types may be returned for I/O problems. +func (s *Session) Wait() error { + if !s.started { + return errors.New("ssh: session not started") + } + waitErr := <-s.exitStatus + + if s.stdinPipeWriter != nil { + s.stdinPipeWriter.Close() + } + var copyError error + for _ = range s.copyFuncs { + if err := <-s.errors; err != nil && copyError == nil { + copyError = err + } + } + if waitErr != nil { + return waitErr + } + return copyError +} + +func (s *Session) wait(reqs <-chan *Request) error { + wm := Waitmsg{status: -1} + // Wait for msg channel to be closed before returning. + for msg := range reqs { + switch msg.Type { + case "exit-status": + wm.status = int(binary.BigEndian.Uint32(msg.Payload)) + case "exit-signal": + var sigval struct { + Signal string + CoreDumped bool + Error string + Lang string + } + if err := Unmarshal(msg.Payload, &sigval); err != nil { + return err + } + + // Must sanitize strings? + wm.signal = sigval.Signal + wm.msg = sigval.Error + wm.lang = sigval.Lang + default: + // This handles keepalives and matches + // OpenSSH's behaviour. + if msg.WantReply { + msg.Reply(false, nil) + } + } + } + if wm.status == 0 { + return nil + } + if wm.status == -1 { + // exit-status was never sent from server + if wm.signal == "" { + // signal was not sent either. RFC 4254 + // section 6.10 recommends against this + // behavior, but it is allowed, so we let + // clients handle it. + return &ExitMissingError{} + } + wm.status = 128 + if _, ok := signals[Signal(wm.signal)]; ok { + wm.status += signals[Signal(wm.signal)] + } + } + + return &ExitError{wm} +} + +// ExitMissingError is returned if a session is torn down cleanly, but +// the server sends no confirmation of the exit status. +type ExitMissingError struct{} + +func (e *ExitMissingError) Error() string { + return "wait: remote command exited without exit status or exit signal" +} + +func (s *Session) stdin() { + if s.stdinpipe { + return + } + var stdin io.Reader + if s.Stdin == nil { + stdin = new(bytes.Buffer) + } else { + r, w := io.Pipe() + go func() { + _, err := io.Copy(w, s.Stdin) + w.CloseWithError(err) + }() + stdin, s.stdinPipeWriter = r, w + } + s.copyFuncs = append(s.copyFuncs, func() error { + _, err := io.Copy(s.ch, stdin) + if err1 := s.ch.CloseWrite(); err == nil && err1 != io.EOF { + err = err1 + } + return err + }) +} + +func (s *Session) stdout() { + if s.stdoutpipe { + return + } + if s.Stdout == nil { + s.Stdout = ioutil.Discard + } + s.copyFuncs = append(s.copyFuncs, func() error { + _, err := io.Copy(s.Stdout, s.ch) + return err + }) +} + +func (s *Session) stderr() { + if s.stderrpipe { + return + } + if s.Stderr == nil { + s.Stderr = ioutil.Discard + } + s.copyFuncs = append(s.copyFuncs, func() error { + _, err := io.Copy(s.Stderr, s.ch.Stderr()) + return err + }) +} + +// sessionStdin reroutes Close to CloseWrite. +type sessionStdin struct { + io.Writer + ch Channel +} + +func (s *sessionStdin) Close() error { + return s.ch.CloseWrite() +} + +// StdinPipe returns a pipe that will be connected to the +// remote command's standard input when the command starts. +func (s *Session) StdinPipe() (io.WriteCloser, error) { + if s.Stdin != nil { + return nil, errors.New("ssh: Stdin already set") + } + if s.started { + return nil, errors.New("ssh: StdinPipe after process started") + } + s.stdinpipe = true + return &sessionStdin{s.ch, s.ch}, nil +} + +// StdoutPipe returns a pipe that will be connected to the +// remote command's standard output when the command starts. +// There is a fixed amount of buffering that is shared between +// stdout and stderr streams. If the StdoutPipe reader is +// not serviced fast enough it may eventually cause the +// remote command to block. +func (s *Session) StdoutPipe() (io.Reader, error) { + if s.Stdout != nil { + return nil, errors.New("ssh: Stdout already set") + } + if s.started { + return nil, errors.New("ssh: StdoutPipe after process started") + } + s.stdoutpipe = true + return s.ch, nil +} + +// StderrPipe returns a pipe that will be connected to the +// remote command's standard error when the command starts. +// There is a fixed amount of buffering that is shared between +// stdout and stderr streams. If the StderrPipe reader is +// not serviced fast enough it may eventually cause the +// remote command to block. +func (s *Session) StderrPipe() (io.Reader, error) { + if s.Stderr != nil { + return nil, errors.New("ssh: Stderr already set") + } + if s.started { + return nil, errors.New("ssh: StderrPipe after process started") + } + s.stderrpipe = true + return s.ch.Stderr(), nil +} + +// newSession returns a new interactive session on the remote host. +func newSession(ch Channel, reqs <-chan *Request) (*Session, error) { + s := &Session{ + ch: ch, + } + s.exitStatus = make(chan error, 1) + go func() { + s.exitStatus <- s.wait(reqs) + }() + + return s, nil +} + +// An ExitError reports unsuccessful completion of a remote command. +type ExitError struct { + Waitmsg +} + +func (e *ExitError) Error() string { + return e.Waitmsg.String() +} + +// Waitmsg stores the information about an exited remote command +// as reported by Wait. +type Waitmsg struct { + status int + signal string + msg string + lang string +} + +// ExitStatus returns the exit status of the remote command. +func (w Waitmsg) ExitStatus() int { + return w.status +} + +// Signal returns the exit signal of the remote command if +// it was terminated violently. +func (w Waitmsg) Signal() string { + return w.signal +} + +// Msg returns the exit message given by the remote command +func (w Waitmsg) Msg() string { + return w.msg +} + +// Lang returns the language tag. See RFC 3066 +func (w Waitmsg) Lang() string { + return w.lang +} + +func (w Waitmsg) String() string { + str := fmt.Sprintf("Process exited with status %v", w.status) + if w.signal != "" { + str += fmt.Sprintf(" from signal %v", w.signal) + } + if w.msg != "" { + str += fmt.Sprintf(". Reason was: %v", w.msg) + } + return str +} diff --git a/vendor/golang.org/x/crypto/ssh/session_test.go b/vendor/golang.org/x/crypto/ssh/session_test.go new file mode 100644 index 0000000..f35a378 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/session_test.go @@ -0,0 +1,770 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +// Session tests. + +import ( + "bytes" + crypto_rand "crypto/rand" + "errors" + "io" + "io/ioutil" + "math/rand" + "net" + "testing" + + "golang.org/x/crypto/ssh/terminal" +) + +type serverType func(Channel, <-chan *Request, *testing.T) + +// dial constructs a new test server and returns a *ClientConn. +func dial(handler serverType, t *testing.T) *Client { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + + go func() { + defer c1.Close() + conf := ServerConfig{ + NoClientAuth: true, + } + conf.AddHostKey(testSigners["rsa"]) + + _, chans, reqs, err := NewServerConn(c1, &conf) + if err != nil { + t.Fatalf("Unable to handshake: %v", err) + } + go DiscardRequests(reqs) + + for newCh := range chans { + if newCh.ChannelType() != "session" { + newCh.Reject(UnknownChannelType, "unknown channel type") + continue + } + + ch, inReqs, err := newCh.Accept() + if err != nil { + t.Errorf("Accept: %v", err) + continue + } + go func() { + handler(ch, inReqs, t) + }() + } + }() + + config := &ClientConfig{ + User: "testuser", + } + + conn, chans, reqs, err := NewClientConn(c2, "", config) + if err != nil { + t.Fatalf("unable to dial remote side: %v", err) + } + + return NewClient(conn, chans, reqs) +} + +// Test a simple string is returned to session.Stdout. +func TestSessionShell(t *testing.T) { + conn := dial(shellHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + stdout := new(bytes.Buffer) + session.Stdout = stdout + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %s", err) + } + if err := session.Wait(); err != nil { + t.Fatalf("Remote command did not exit cleanly: %v", err) + } + actual := stdout.String() + if actual != "golang" { + t.Fatalf("Remote shell did not return expected string: expected=golang, actual=%s", actual) + } +} + +// TODO(dfc) add support for Std{in,err}Pipe when the Server supports it. + +// Test a simple string is returned via StdoutPipe. +func TestSessionStdoutPipe(t *testing.T) { + conn := dial(shellHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("Unable to request StdoutPipe(): %v", err) + } + var buf bytes.Buffer + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + done := make(chan bool, 1) + go func() { + if _, err := io.Copy(&buf, stdout); err != nil { + t.Errorf("Copy of stdout failed: %v", err) + } + done <- true + }() + if err := session.Wait(); err != nil { + t.Fatalf("Remote command did not exit cleanly: %v", err) + } + <-done + actual := buf.String() + if actual != "golang" { + t.Fatalf("Remote shell did not return expected string: expected=golang, actual=%s", actual) + } +} + +// Test that a simple string is returned via the Output helper, +// and that stderr is discarded. +func TestSessionOutput(t *testing.T) { + conn := dial(fixedOutputHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + + buf, err := session.Output("") // cmd is ignored by fixedOutputHandler + if err != nil { + t.Error("Remote command did not exit cleanly:", err) + } + w := "this-is-stdout." + g := string(buf) + if g != w { + t.Error("Remote command did not return expected string:") + t.Logf("want %q", w) + t.Logf("got %q", g) + } +} + +// Test that both stdout and stderr are returned +// via the CombinedOutput helper. +func TestSessionCombinedOutput(t *testing.T) { + conn := dial(fixedOutputHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + + buf, err := session.CombinedOutput("") // cmd is ignored by fixedOutputHandler + if err != nil { + t.Error("Remote command did not exit cleanly:", err) + } + const stdout = "this-is-stdout." + const stderr = "this-is-stderr." + g := string(buf) + if g != stdout+stderr && g != stderr+stdout { + t.Error("Remote command did not return expected string:") + t.Logf("want %q, or %q", stdout+stderr, stderr+stdout) + t.Logf("got %q", g) + } +} + +// Test non-0 exit status is returned correctly. +func TestExitStatusNonZero(t *testing.T) { + conn := dial(exitStatusNonZeroHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + e, ok := err.(*ExitError) + if !ok { + t.Fatalf("expected *ExitError but got %T", err) + } + if e.ExitStatus() != 15 { + t.Fatalf("expected command to exit with 15 but got %v", e.ExitStatus()) + } +} + +// Test 0 exit status is returned correctly. +func TestExitStatusZero(t *testing.T) { + conn := dial(exitStatusZeroHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err != nil { + t.Fatalf("expected nil but got %v", err) + } +} + +// Test exit signal and status are both returned correctly. +func TestExitSignalAndStatus(t *testing.T) { + conn := dial(exitSignalAndStatusHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + e, ok := err.(*ExitError) + if !ok { + t.Fatalf("expected *ExitError but got %T", err) + } + if e.Signal() != "TERM" || e.ExitStatus() != 15 { + t.Fatalf("expected command to exit with signal TERM and status 15 but got signal %s and status %v", e.Signal(), e.ExitStatus()) + } +} + +// Test exit signal and status are both returned correctly. +func TestKnownExitSignalOnly(t *testing.T) { + conn := dial(exitSignalHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + e, ok := err.(*ExitError) + if !ok { + t.Fatalf("expected *ExitError but got %T", err) + } + if e.Signal() != "TERM" || e.ExitStatus() != 143 { + t.Fatalf("expected command to exit with signal TERM and status 143 but got signal %s and status %v", e.Signal(), e.ExitStatus()) + } +} + +// Test exit signal and status are both returned correctly. +func TestUnknownExitSignal(t *testing.T) { + conn := dial(exitSignalUnknownHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + e, ok := err.(*ExitError) + if !ok { + t.Fatalf("expected *ExitError but got %T", err) + } + if e.Signal() != "SYS" || e.ExitStatus() != 128 { + t.Fatalf("expected command to exit with signal SYS and status 128 but got signal %s and status %v", e.Signal(), e.ExitStatus()) + } +} + +func TestExitWithoutStatusOrSignal(t *testing.T) { + conn := dial(exitWithoutSignalOrStatus, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + if _, ok := err.(*ExitMissingError); !ok { + t.Fatalf("got %T want *ExitMissingError", err) + } +} + +// windowTestBytes is the number of bytes that we'll send to the SSH server. +const windowTestBytes = 16000 * 200 + +// TestServerWindow writes random data to the server. The server is expected to echo +// the same data back, which is compared against the original. +func TestServerWindow(t *testing.T) { + origBuf := bytes.NewBuffer(make([]byte, 0, windowTestBytes)) + io.CopyN(origBuf, crypto_rand.Reader, windowTestBytes) + origBytes := origBuf.Bytes() + + conn := dial(echoHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatal(err) + } + defer session.Close() + result := make(chan []byte) + + go func() { + defer close(result) + echoedBuf := bytes.NewBuffer(make([]byte, 0, windowTestBytes)) + serverStdout, err := session.StdoutPipe() + if err != nil { + t.Errorf("StdoutPipe failed: %v", err) + return + } + n, err := copyNRandomly("stdout", echoedBuf, serverStdout, windowTestBytes) + if err != nil && err != io.EOF { + t.Errorf("Read only %d bytes from server, expected %d: %v", n, windowTestBytes, err) + } + result <- echoedBuf.Bytes() + }() + + serverStdin, err := session.StdinPipe() + if err != nil { + t.Fatalf("StdinPipe failed: %v", err) + } + written, err := copyNRandomly("stdin", serverStdin, origBuf, windowTestBytes) + if err != nil { + t.Fatalf("failed to copy origBuf to serverStdin: %v", err) + } + if written != windowTestBytes { + t.Fatalf("Wrote only %d of %d bytes to server", written, windowTestBytes) + } + + echoedBytes := <-result + + if !bytes.Equal(origBytes, echoedBytes) { + t.Fatalf("Echoed buffer differed from original, orig %d, echoed %d", len(origBytes), len(echoedBytes)) + } +} + +// Verify the client can handle a keepalive packet from the server. +func TestClientHandlesKeepalives(t *testing.T) { + conn := dial(channelKeepaliveSender, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatal(err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err != nil { + t.Fatalf("expected nil but got: %v", err) + } +} + +type exitStatusMsg struct { + Status uint32 +} + +type exitSignalMsg struct { + Signal string + CoreDumped bool + Errmsg string + Lang string +} + +func handleTerminalRequests(in <-chan *Request) { + for req := range in { + ok := false + switch req.Type { + case "shell": + ok = true + if len(req.Payload) > 0 { + // We don't accept any commands, only the default shell. + ok = false + } + case "env": + ok = true + } + req.Reply(ok, nil) + } +} + +func newServerShell(ch Channel, in <-chan *Request, prompt string) *terminal.Terminal { + term := terminal.NewTerminal(ch, prompt) + go handleTerminalRequests(in) + return term +} + +func exitStatusZeroHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + // this string is returned to stdout + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendStatus(0, ch, t) +} + +func exitStatusNonZeroHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendStatus(15, ch, t) +} + +func exitSignalAndStatusHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendStatus(15, ch, t) + sendSignal("TERM", ch, t) +} + +func exitSignalHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendSignal("TERM", ch, t) +} + +func exitSignalUnknownHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendSignal("SYS", ch, t) +} + +func exitWithoutSignalOrStatus(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) +} + +func shellHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + // this string is returned to stdout + shell := newServerShell(ch, in, "golang") + readLine(shell, t) + sendStatus(0, ch, t) +} + +// Ignores the command, writes fixed strings to stderr and stdout. +// Strings are "this-is-stdout." and "this-is-stderr.". +func fixedOutputHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + _, err := ch.Read(nil) + + req, ok := <-in + if !ok { + t.Fatalf("error: expected channel request, got: %#v", err) + return + } + + // ignore request, always send some text + req.Reply(true, nil) + + _, err = io.WriteString(ch, "this-is-stdout.") + if err != nil { + t.Fatalf("error writing on server: %v", err) + } + _, err = io.WriteString(ch.Stderr(), "this-is-stderr.") + if err != nil { + t.Fatalf("error writing on server: %v", err) + } + sendStatus(0, ch, t) +} + +func readLine(shell *terminal.Terminal, t *testing.T) { + if _, err := shell.ReadLine(); err != nil && err != io.EOF { + t.Errorf("unable to read line: %v", err) + } +} + +func sendStatus(status uint32, ch Channel, t *testing.T) { + msg := exitStatusMsg{ + Status: status, + } + if _, err := ch.SendRequest("exit-status", false, Marshal(&msg)); err != nil { + t.Errorf("unable to send status: %v", err) + } +} + +func sendSignal(signal string, ch Channel, t *testing.T) { + sig := exitSignalMsg{ + Signal: signal, + CoreDumped: false, + Errmsg: "Process terminated", + Lang: "en-GB-oed", + } + if _, err := ch.SendRequest("exit-signal", false, Marshal(&sig)); err != nil { + t.Errorf("unable to send signal: %v", err) + } +} + +func discardHandler(ch Channel, t *testing.T) { + defer ch.Close() + io.Copy(ioutil.Discard, ch) +} + +func echoHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + if n, err := copyNRandomly("echohandler", ch, ch, windowTestBytes); err != nil { + t.Errorf("short write, wrote %d, expected %d: %v ", n, windowTestBytes, err) + } +} + +// copyNRandomly copies n bytes from src to dst. It uses a variable, and random, +// buffer size to exercise more code paths. +func copyNRandomly(title string, dst io.Writer, src io.Reader, n int) (int, error) { + var ( + buf = make([]byte, 32*1024) + written int + remaining = n + ) + for remaining > 0 { + l := rand.Intn(1 << 15) + if remaining < l { + l = remaining + } + nr, er := src.Read(buf[:l]) + nw, ew := dst.Write(buf[:nr]) + remaining -= nw + written += nw + if ew != nil { + return written, ew + } + if nr != nw { + return written, io.ErrShortWrite + } + if er != nil && er != io.EOF { + return written, er + } + } + return written, nil +} + +func channelKeepaliveSender(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + if _, err := ch.SendRequest("keepalive@openssh.com", true, nil); err != nil { + t.Errorf("unable to send channel keepalive request: %v", err) + } + sendStatus(0, ch, t) +} + +func TestClientWriteEOF(t *testing.T) { + conn := dial(simpleEchoHandler, t) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatal(err) + } + defer session.Close() + stdin, err := session.StdinPipe() + if err != nil { + t.Fatalf("StdinPipe failed: %v", err) + } + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("StdoutPipe failed: %v", err) + } + + data := []byte(`0000`) + _, err = stdin.Write(data) + if err != nil { + t.Fatalf("Write failed: %v", err) + } + stdin.Close() + + res, err := ioutil.ReadAll(stdout) + if err != nil { + t.Fatalf("Read failed: %v", err) + } + + if !bytes.Equal(data, res) { + t.Fatalf("Read differed from write, wrote: %v, read: %v", data, res) + } +} + +func simpleEchoHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + data, err := ioutil.ReadAll(ch) + if err != nil { + t.Errorf("handler read error: %v", err) + } + _, err = ch.Write(data) + if err != nil { + t.Errorf("handler write error: %v", err) + } +} + +func TestSessionID(t *testing.T) { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + serverID := make(chan []byte, 1) + clientID := make(chan []byte, 1) + + serverConf := &ServerConfig{ + NoClientAuth: true, + } + serverConf.AddHostKey(testSigners["ecdsa"]) + clientConf := &ClientConfig{ + User: "user", + } + + go func() { + conn, chans, reqs, err := NewServerConn(c1, serverConf) + if err != nil { + t.Fatalf("server handshake: %v", err) + } + serverID <- conn.SessionID() + go DiscardRequests(reqs) + for ch := range chans { + ch.Reject(Prohibited, "") + } + }() + + go func() { + conn, chans, reqs, err := NewClientConn(c2, "", clientConf) + if err != nil { + t.Fatalf("client handshake: %v", err) + } + clientID <- conn.SessionID() + go DiscardRequests(reqs) + for ch := range chans { + ch.Reject(Prohibited, "") + } + }() + + s := <-serverID + c := <-clientID + if bytes.Compare(s, c) != 0 { + t.Errorf("server session ID (%x) != client session ID (%x)", s, c) + } else if len(s) == 0 { + t.Errorf("client and server SessionID were empty.") + } +} + +type noReadConn struct { + readSeen bool + net.Conn +} + +func (c *noReadConn) Close() error { + return nil +} + +func (c *noReadConn) Read(b []byte) (int, error) { + c.readSeen = true + return 0, errors.New("noReadConn error") +} + +func TestInvalidServerConfiguration(t *testing.T) { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + serveConn := noReadConn{Conn: c1} + serverConf := &ServerConfig{} + + NewServerConn(&serveConn, serverConf) + if serveConn.readSeen { + t.Fatalf("NewServerConn attempted to Read() from Conn while configuration is missing host key") + } + + serverConf.AddHostKey(testSigners["ecdsa"]) + + NewServerConn(&serveConn, serverConf) + if serveConn.readSeen { + t.Fatalf("NewServerConn attempted to Read() from Conn while configuration is missing authentication method") + } +} + +func TestHostKeyAlgorithms(t *testing.T) { + serverConf := &ServerConfig{ + NoClientAuth: true, + } + serverConf.AddHostKey(testSigners["rsa"]) + serverConf.AddHostKey(testSigners["ecdsa"]) + + connect := func(clientConf *ClientConfig, want string) { + var alg string + clientConf.HostKeyCallback = func(h string, a net.Addr, key PublicKey) error { + alg = key.Type() + return nil + } + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go NewServerConn(c1, serverConf) + _, _, _, err = NewClientConn(c2, "", clientConf) + if err != nil { + t.Fatalf("NewClientConn: %v", err) + } + if alg != want { + t.Errorf("selected key algorithm %s, want %s", alg, want) + } + } + + // By default, we get the preferred algorithm, which is ECDSA 256. + + clientConf := &ClientConfig{} + connect(clientConf, KeyAlgoECDSA256) + + // Client asks for RSA explicitly. + clientConf.HostKeyAlgorithms = []string{KeyAlgoRSA} + connect(clientConf, KeyAlgoRSA) + + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go NewServerConn(c1, serverConf) + clientConf.HostKeyAlgorithms = []string{"nonexistent-hostkey-algo"} + _, _, _, err = NewClientConn(c2, "", clientConf) + if err == nil { + t.Fatal("succeeded connecting with unknown hostkey algorithm") + } +} diff --git a/vendor/golang.org/x/crypto/ssh/tcpip.go b/vendor/golang.org/x/crypto/ssh/tcpip.go new file mode 100644 index 0000000..6151241 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/tcpip.go @@ -0,0 +1,407 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "errors" + "fmt" + "io" + "math/rand" + "net" + "strconv" + "strings" + "sync" + "time" +) + +// Listen requests the remote peer open a listening socket on +// addr. Incoming connections will be available by calling Accept on +// the returned net.Listener. The listener must be serviced, or the +// SSH connection may hang. +func (c *Client) Listen(n, addr string) (net.Listener, error) { + laddr, err := net.ResolveTCPAddr(n, addr) + if err != nil { + return nil, err + } + return c.ListenTCP(laddr) +} + +// Automatic port allocation is broken with OpenSSH before 6.0. See +// also https://bugzilla.mindrot.org/show_bug.cgi?id=2017. In +// particular, OpenSSH 5.9 sends a channelOpenMsg with port number 0, +// rather than the actual port number. This means you can never open +// two different listeners with auto allocated ports. We work around +// this by trying explicit ports until we succeed. + +const openSSHPrefix = "OpenSSH_" + +var portRandomizer = rand.New(rand.NewSource(time.Now().UnixNano())) + +// isBrokenOpenSSHVersion returns true if the given version string +// specifies a version of OpenSSH that is known to have a bug in port +// forwarding. +func isBrokenOpenSSHVersion(versionStr string) bool { + i := strings.Index(versionStr, openSSHPrefix) + if i < 0 { + return false + } + i += len(openSSHPrefix) + j := i + for ; j < len(versionStr); j++ { + if versionStr[j] < '0' || versionStr[j] > '9' { + break + } + } + version, _ := strconv.Atoi(versionStr[i:j]) + return version < 6 +} + +// autoPortListenWorkaround simulates automatic port allocation by +// trying random ports repeatedly. +func (c *Client) autoPortListenWorkaround(laddr *net.TCPAddr) (net.Listener, error) { + var sshListener net.Listener + var err error + const tries = 10 + for i := 0; i < tries; i++ { + addr := *laddr + addr.Port = 1024 + portRandomizer.Intn(60000) + sshListener, err = c.ListenTCP(&addr) + if err == nil { + laddr.Port = addr.Port + return sshListener, err + } + } + return nil, fmt.Errorf("ssh: listen on random port failed after %d tries: %v", tries, err) +} + +// RFC 4254 7.1 +type channelForwardMsg struct { + addr string + rport uint32 +} + +// ListenTCP requests the remote peer open a listening socket +// on laddr. Incoming connections will be available by calling +// Accept on the returned net.Listener. +func (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) { + if laddr.Port == 0 && isBrokenOpenSSHVersion(string(c.ServerVersion())) { + return c.autoPortListenWorkaround(laddr) + } + + m := channelForwardMsg{ + laddr.IP.String(), + uint32(laddr.Port), + } + // send message + ok, resp, err := c.SendRequest("tcpip-forward", true, Marshal(&m)) + if err != nil { + return nil, err + } + if !ok { + return nil, errors.New("ssh: tcpip-forward request denied by peer") + } + + // If the original port was 0, then the remote side will + // supply a real port number in the response. + if laddr.Port == 0 { + var p struct { + Port uint32 + } + if err := Unmarshal(resp, &p); err != nil { + return nil, err + } + laddr.Port = int(p.Port) + } + + // Register this forward, using the port number we obtained. + ch := c.forwards.add(*laddr) + + return &tcpListener{laddr, c, ch}, nil +} + +// forwardList stores a mapping between remote +// forward requests and the tcpListeners. +type forwardList struct { + sync.Mutex + entries []forwardEntry +} + +// forwardEntry represents an established mapping of a laddr on a +// remote ssh server to a channel connected to a tcpListener. +type forwardEntry struct { + laddr net.TCPAddr + c chan forward +} + +// forward represents an incoming forwarded tcpip connection. The +// arguments to add/remove/lookup should be address as specified in +// the original forward-request. +type forward struct { + newCh NewChannel // the ssh client channel underlying this forward + raddr *net.TCPAddr // the raddr of the incoming connection +} + +func (l *forwardList) add(addr net.TCPAddr) chan forward { + l.Lock() + defer l.Unlock() + f := forwardEntry{ + addr, + make(chan forward, 1), + } + l.entries = append(l.entries, f) + return f.c +} + +// See RFC 4254, section 7.2 +type forwardedTCPPayload struct { + Addr string + Port uint32 + OriginAddr string + OriginPort uint32 +} + +// parseTCPAddr parses the originating address from the remote into a *net.TCPAddr. +func parseTCPAddr(addr string, port uint32) (*net.TCPAddr, error) { + if port == 0 || port > 65535 { + return nil, fmt.Errorf("ssh: port number out of range: %d", port) + } + ip := net.ParseIP(string(addr)) + if ip == nil { + return nil, fmt.Errorf("ssh: cannot parse IP address %q", addr) + } + return &net.TCPAddr{IP: ip, Port: int(port)}, nil +} + +func (l *forwardList) handleChannels(in <-chan NewChannel) { + for ch := range in { + var payload forwardedTCPPayload + if err := Unmarshal(ch.ExtraData(), &payload); err != nil { + ch.Reject(ConnectionFailed, "could not parse forwarded-tcpip payload: "+err.Error()) + continue + } + + // RFC 4254 section 7.2 specifies that incoming + // addresses should list the address, in string + // format. It is implied that this should be an IP + // address, as it would be impossible to connect to it + // otherwise. + laddr, err := parseTCPAddr(payload.Addr, payload.Port) + if err != nil { + ch.Reject(ConnectionFailed, err.Error()) + continue + } + raddr, err := parseTCPAddr(payload.OriginAddr, payload.OriginPort) + if err != nil { + ch.Reject(ConnectionFailed, err.Error()) + continue + } + + if ok := l.forward(*laddr, *raddr, ch); !ok { + // Section 7.2, implementations MUST reject spurious incoming + // connections. + ch.Reject(Prohibited, "no forward for address") + continue + } + } +} + +// remove removes the forward entry, and the channel feeding its +// listener. +func (l *forwardList) remove(addr net.TCPAddr) { + l.Lock() + defer l.Unlock() + for i, f := range l.entries { + if addr.IP.Equal(f.laddr.IP) && addr.Port == f.laddr.Port { + l.entries = append(l.entries[:i], l.entries[i+1:]...) + close(f.c) + return + } + } +} + +// closeAll closes and clears all forwards. +func (l *forwardList) closeAll() { + l.Lock() + defer l.Unlock() + for _, f := range l.entries { + close(f.c) + } + l.entries = nil +} + +func (l *forwardList) forward(laddr, raddr net.TCPAddr, ch NewChannel) bool { + l.Lock() + defer l.Unlock() + for _, f := range l.entries { + if laddr.IP.Equal(f.laddr.IP) && laddr.Port == f.laddr.Port { + f.c <- forward{ch, &raddr} + return true + } + } + return false +} + +type tcpListener struct { + laddr *net.TCPAddr + + conn *Client + in <-chan forward +} + +// Accept waits for and returns the next connection to the listener. +func (l *tcpListener) Accept() (net.Conn, error) { + s, ok := <-l.in + if !ok { + return nil, io.EOF + } + ch, incoming, err := s.newCh.Accept() + if err != nil { + return nil, err + } + go DiscardRequests(incoming) + + return &tcpChanConn{ + Channel: ch, + laddr: l.laddr, + raddr: s.raddr, + }, nil +} + +// Close closes the listener. +func (l *tcpListener) Close() error { + m := channelForwardMsg{ + l.laddr.IP.String(), + uint32(l.laddr.Port), + } + + // this also closes the listener. + l.conn.forwards.remove(*l.laddr) + ok, _, err := l.conn.SendRequest("cancel-tcpip-forward", true, Marshal(&m)) + if err == nil && !ok { + err = errors.New("ssh: cancel-tcpip-forward failed") + } + return err +} + +// Addr returns the listener's network address. +func (l *tcpListener) Addr() net.Addr { + return l.laddr +} + +// Dial initiates a connection to the addr from the remote host. +// The resulting connection has a zero LocalAddr() and RemoteAddr(). +func (c *Client) Dial(n, addr string) (net.Conn, error) { + // Parse the address into host and numeric port. + host, portString, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + port, err := strconv.ParseUint(portString, 10, 16) + if err != nil { + return nil, err + } + // Use a zero address for local and remote address. + zeroAddr := &net.TCPAddr{ + IP: net.IPv4zero, + Port: 0, + } + ch, err := c.dial(net.IPv4zero.String(), 0, host, int(port)) + if err != nil { + return nil, err + } + return &tcpChanConn{ + Channel: ch, + laddr: zeroAddr, + raddr: zeroAddr, + }, nil +} + +// DialTCP connects to the remote address raddr on the network net, +// which must be "tcp", "tcp4", or "tcp6". If laddr is not nil, it is used +// as the local address for the connection. +func (c *Client) DialTCP(n string, laddr, raddr *net.TCPAddr) (net.Conn, error) { + if laddr == nil { + laddr = &net.TCPAddr{ + IP: net.IPv4zero, + Port: 0, + } + } + ch, err := c.dial(laddr.IP.String(), laddr.Port, raddr.IP.String(), raddr.Port) + if err != nil { + return nil, err + } + return &tcpChanConn{ + Channel: ch, + laddr: laddr, + raddr: raddr, + }, nil +} + +// RFC 4254 7.2 +type channelOpenDirectMsg struct { + raddr string + rport uint32 + laddr string + lport uint32 +} + +func (c *Client) dial(laddr string, lport int, raddr string, rport int) (Channel, error) { + msg := channelOpenDirectMsg{ + raddr: raddr, + rport: uint32(rport), + laddr: laddr, + lport: uint32(lport), + } + ch, in, err := c.OpenChannel("direct-tcpip", Marshal(&msg)) + if err != nil { + return nil, err + } + go DiscardRequests(in) + return ch, err +} + +type tcpChan struct { + Channel // the backing channel +} + +// tcpChanConn fulfills the net.Conn interface without +// the tcpChan having to hold laddr or raddr directly. +type tcpChanConn struct { + Channel + laddr, raddr net.Addr +} + +// LocalAddr returns the local network address. +func (t *tcpChanConn) LocalAddr() net.Addr { + return t.laddr +} + +// RemoteAddr returns the remote network address. +func (t *tcpChanConn) RemoteAddr() net.Addr { + return t.raddr +} + +// SetDeadline sets the read and write deadlines associated +// with the connection. +func (t *tcpChanConn) SetDeadline(deadline time.Time) error { + if err := t.SetReadDeadline(deadline); err != nil { + return err + } + return t.SetWriteDeadline(deadline) +} + +// SetReadDeadline sets the read deadline. +// A zero value for t means Read will not time out. +// After the deadline, the error from Read will implement net.Error +// with Timeout() == true. +func (t *tcpChanConn) SetReadDeadline(deadline time.Time) error { + return errors.New("ssh: tcpChan: deadline not supported") +} + +// SetWriteDeadline exists to satisfy the net.Conn interface +// but is not implemented by this type. It always returns an error. +func (t *tcpChanConn) SetWriteDeadline(deadline time.Time) error { + return errors.New("ssh: tcpChan: deadline not supported") +} diff --git a/vendor/golang.org/x/crypto/ssh/tcpip_test.go b/vendor/golang.org/x/crypto/ssh/tcpip_test.go new file mode 100644 index 0000000..f1265cb --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/tcpip_test.go @@ -0,0 +1,20 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "testing" +) + +func TestAutoPortListenBroken(t *testing.T) { + broken := "SSH-2.0-OpenSSH_5.9hh11" + works := "SSH-2.0-OpenSSH_6.1" + if !isBrokenOpenSSHVersion(broken) { + t.Errorf("version %q not marked as broken", broken) + } + if isBrokenOpenSSHVersion(works) { + t.Errorf("version %q marked as broken", works) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go new file mode 100644 index 0000000..741eeb1 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go @@ -0,0 +1,892 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package terminal + +import ( + "bytes" + "io" + "sync" + "unicode/utf8" +) + +// EscapeCodes contains escape sequences that can be written to the terminal in +// order to achieve different styles of text. +type EscapeCodes struct { + // Foreground colors + Black, Red, Green, Yellow, Blue, Magenta, Cyan, White []byte + + // Reset all attributes + Reset []byte +} + +var vt100EscapeCodes = EscapeCodes{ + Black: []byte{keyEscape, '[', '3', '0', 'm'}, + Red: []byte{keyEscape, '[', '3', '1', 'm'}, + Green: []byte{keyEscape, '[', '3', '2', 'm'}, + Yellow: []byte{keyEscape, '[', '3', '3', 'm'}, + Blue: []byte{keyEscape, '[', '3', '4', 'm'}, + Magenta: []byte{keyEscape, '[', '3', '5', 'm'}, + Cyan: []byte{keyEscape, '[', '3', '6', 'm'}, + White: []byte{keyEscape, '[', '3', '7', 'm'}, + + Reset: []byte{keyEscape, '[', '0', 'm'}, +} + +// Terminal contains the state for running a VT100 terminal that is capable of +// reading lines of input. +type Terminal struct { + // AutoCompleteCallback, if non-null, is called for each keypress with + // the full input line and the current position of the cursor (in + // bytes, as an index into |line|). If it returns ok=false, the key + // press is processed normally. Otherwise it returns a replacement line + // and the new cursor position. + AutoCompleteCallback func(line string, pos int, key rune) (newLine string, newPos int, ok bool) + + // Escape contains a pointer to the escape codes for this terminal. + // It's always a valid pointer, although the escape codes themselves + // may be empty if the terminal doesn't support them. + Escape *EscapeCodes + + // lock protects the terminal and the state in this object from + // concurrent processing of a key press and a Write() call. + lock sync.Mutex + + c io.ReadWriter + prompt []rune + + // line is the current line being entered. + line []rune + // pos is the logical position of the cursor in line + pos int + // echo is true if local echo is enabled + echo bool + // pasteActive is true iff there is a bracketed paste operation in + // progress. + pasteActive bool + + // cursorX contains the current X value of the cursor where the left + // edge is 0. cursorY contains the row number where the first row of + // the current line is 0. + cursorX, cursorY int + // maxLine is the greatest value of cursorY so far. + maxLine int + + termWidth, termHeight int + + // outBuf contains the terminal data to be sent. + outBuf []byte + // remainder contains the remainder of any partial key sequences after + // a read. It aliases into inBuf. + remainder []byte + inBuf [256]byte + + // history contains previously entered commands so that they can be + // accessed with the up and down keys. + history stRingBuffer + // historyIndex stores the currently accessed history entry, where zero + // means the immediately previous entry. + historyIndex int + // When navigating up and down the history it's possible to return to + // the incomplete, initial line. That value is stored in + // historyPending. + historyPending string +} + +// NewTerminal runs a VT100 terminal on the given ReadWriter. If the ReadWriter is +// a local terminal, that terminal must first have been put into raw mode. +// prompt is a string that is written at the start of each input line (i.e. +// "> "). +func NewTerminal(c io.ReadWriter, prompt string) *Terminal { + return &Terminal{ + Escape: &vt100EscapeCodes, + c: c, + prompt: []rune(prompt), + termWidth: 80, + termHeight: 24, + echo: true, + historyIndex: -1, + } +} + +const ( + keyCtrlD = 4 + keyCtrlU = 21 + keyEnter = '\r' + keyEscape = 27 + keyBackspace = 127 + keyUnknown = 0xd800 /* UTF-16 surrogate area */ + iota + keyUp + keyDown + keyLeft + keyRight + keyAltLeft + keyAltRight + keyHome + keyEnd + keyDeleteWord + keyDeleteLine + keyClearScreen + keyPasteStart + keyPasteEnd +) + +var pasteStart = []byte{keyEscape, '[', '2', '0', '0', '~'} +var pasteEnd = []byte{keyEscape, '[', '2', '0', '1', '~'} + +// bytesToKey tries to parse a key sequence from b. If successful, it returns +// the key and the remainder of the input. Otherwise it returns utf8.RuneError. +func bytesToKey(b []byte, pasteActive bool) (rune, []byte) { + if len(b) == 0 { + return utf8.RuneError, nil + } + + if !pasteActive { + switch b[0] { + case 1: // ^A + return keyHome, b[1:] + case 5: // ^E + return keyEnd, b[1:] + case 8: // ^H + return keyBackspace, b[1:] + case 11: // ^K + return keyDeleteLine, b[1:] + case 12: // ^L + return keyClearScreen, b[1:] + case 23: // ^W + return keyDeleteWord, b[1:] + } + } + + if b[0] != keyEscape { + if !utf8.FullRune(b) { + return utf8.RuneError, b + } + r, l := utf8.DecodeRune(b) + return r, b[l:] + } + + if !pasteActive && len(b) >= 3 && b[0] == keyEscape && b[1] == '[' { + switch b[2] { + case 'A': + return keyUp, b[3:] + case 'B': + return keyDown, b[3:] + case 'C': + return keyRight, b[3:] + case 'D': + return keyLeft, b[3:] + case 'H': + return keyHome, b[3:] + case 'F': + return keyEnd, b[3:] + } + } + + if !pasteActive && len(b) >= 6 && b[0] == keyEscape && b[1] == '[' && b[2] == '1' && b[3] == ';' && b[4] == '3' { + switch b[5] { + case 'C': + return keyAltRight, b[6:] + case 'D': + return keyAltLeft, b[6:] + } + } + + if !pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteStart) { + return keyPasteStart, b[6:] + } + + if pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteEnd) { + return keyPasteEnd, b[6:] + } + + // If we get here then we have a key that we don't recognise, or a + // partial sequence. It's not clear how one should find the end of a + // sequence without knowing them all, but it seems that [a-zA-Z~] only + // appears at the end of a sequence. + for i, c := range b[0:] { + if c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '~' { + return keyUnknown, b[i+1:] + } + } + + return utf8.RuneError, b +} + +// queue appends data to the end of t.outBuf +func (t *Terminal) queue(data []rune) { + t.outBuf = append(t.outBuf, []byte(string(data))...) +} + +var eraseUnderCursor = []rune{' ', keyEscape, '[', 'D'} +var space = []rune{' '} + +func isPrintable(key rune) bool { + isInSurrogateArea := key >= 0xd800 && key <= 0xdbff + return key >= 32 && !isInSurrogateArea +} + +// moveCursorToPos appends data to t.outBuf which will move the cursor to the +// given, logical position in the text. +func (t *Terminal) moveCursorToPos(pos int) { + if !t.echo { + return + } + + x := visualLength(t.prompt) + pos + y := x / t.termWidth + x = x % t.termWidth + + up := 0 + if y < t.cursorY { + up = t.cursorY - y + } + + down := 0 + if y > t.cursorY { + down = y - t.cursorY + } + + left := 0 + if x < t.cursorX { + left = t.cursorX - x + } + + right := 0 + if x > t.cursorX { + right = x - t.cursorX + } + + t.cursorX = x + t.cursorY = y + t.move(up, down, left, right) +} + +func (t *Terminal) move(up, down, left, right int) { + movement := make([]rune, 3*(up+down+left+right)) + m := movement + for i := 0; i < up; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'A' + m = m[3:] + } + for i := 0; i < down; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'B' + m = m[3:] + } + for i := 0; i < left; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'D' + m = m[3:] + } + for i := 0; i < right; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'C' + m = m[3:] + } + + t.queue(movement) +} + +func (t *Terminal) clearLineToRight() { + op := []rune{keyEscape, '[', 'K'} + t.queue(op) +} + +const maxLineLength = 4096 + +func (t *Terminal) setLine(newLine []rune, newPos int) { + if t.echo { + t.moveCursorToPos(0) + t.writeLine(newLine) + for i := len(newLine); i < len(t.line); i++ { + t.writeLine(space) + } + t.moveCursorToPos(newPos) + } + t.line = newLine + t.pos = newPos +} + +func (t *Terminal) advanceCursor(places int) { + t.cursorX += places + t.cursorY += t.cursorX / t.termWidth + if t.cursorY > t.maxLine { + t.maxLine = t.cursorY + } + t.cursorX = t.cursorX % t.termWidth + + if places > 0 && t.cursorX == 0 { + // Normally terminals will advance the current position + // when writing a character. But that doesn't happen + // for the last character in a line. However, when + // writing a character (except a new line) that causes + // a line wrap, the position will be advanced two + // places. + // + // So, if we are stopping at the end of a line, we + // need to write a newline so that our cursor can be + // advanced to the next line. + t.outBuf = append(t.outBuf, '\n') + } +} + +func (t *Terminal) eraseNPreviousChars(n int) { + if n == 0 { + return + } + + if t.pos < n { + n = t.pos + } + t.pos -= n + t.moveCursorToPos(t.pos) + + copy(t.line[t.pos:], t.line[n+t.pos:]) + t.line = t.line[:len(t.line)-n] + if t.echo { + t.writeLine(t.line[t.pos:]) + for i := 0; i < n; i++ { + t.queue(space) + } + t.advanceCursor(n) + t.moveCursorToPos(t.pos) + } +} + +// countToLeftWord returns then number of characters from the cursor to the +// start of the previous word. +func (t *Terminal) countToLeftWord() int { + if t.pos == 0 { + return 0 + } + + pos := t.pos - 1 + for pos > 0 { + if t.line[pos] != ' ' { + break + } + pos-- + } + for pos > 0 { + if t.line[pos] == ' ' { + pos++ + break + } + pos-- + } + + return t.pos - pos +} + +// countToRightWord returns then number of characters from the cursor to the +// start of the next word. +func (t *Terminal) countToRightWord() int { + pos := t.pos + for pos < len(t.line) { + if t.line[pos] == ' ' { + break + } + pos++ + } + for pos < len(t.line) { + if t.line[pos] != ' ' { + break + } + pos++ + } + return pos - t.pos +} + +// visualLength returns the number of visible glyphs in s. +func visualLength(runes []rune) int { + inEscapeSeq := false + length := 0 + + for _, r := range runes { + switch { + case inEscapeSeq: + if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') { + inEscapeSeq = false + } + case r == '\x1b': + inEscapeSeq = true + default: + length++ + } + } + + return length +} + +// handleKey processes the given key and, optionally, returns a line of text +// that the user has entered. +func (t *Terminal) handleKey(key rune) (line string, ok bool) { + if t.pasteActive && key != keyEnter { + t.addKeyToLine(key) + return + } + + switch key { + case keyBackspace: + if t.pos == 0 { + return + } + t.eraseNPreviousChars(1) + case keyAltLeft: + // move left by a word. + t.pos -= t.countToLeftWord() + t.moveCursorToPos(t.pos) + case keyAltRight: + // move right by a word. + t.pos += t.countToRightWord() + t.moveCursorToPos(t.pos) + case keyLeft: + if t.pos == 0 { + return + } + t.pos-- + t.moveCursorToPos(t.pos) + case keyRight: + if t.pos == len(t.line) { + return + } + t.pos++ + t.moveCursorToPos(t.pos) + case keyHome: + if t.pos == 0 { + return + } + t.pos = 0 + t.moveCursorToPos(t.pos) + case keyEnd: + if t.pos == len(t.line) { + return + } + t.pos = len(t.line) + t.moveCursorToPos(t.pos) + case keyUp: + entry, ok := t.history.NthPreviousEntry(t.historyIndex + 1) + if !ok { + return "", false + } + if t.historyIndex == -1 { + t.historyPending = string(t.line) + } + t.historyIndex++ + runes := []rune(entry) + t.setLine(runes, len(runes)) + case keyDown: + switch t.historyIndex { + case -1: + return + case 0: + runes := []rune(t.historyPending) + t.setLine(runes, len(runes)) + t.historyIndex-- + default: + entry, ok := t.history.NthPreviousEntry(t.historyIndex - 1) + if ok { + t.historyIndex-- + runes := []rune(entry) + t.setLine(runes, len(runes)) + } + } + case keyEnter: + t.moveCursorToPos(len(t.line)) + t.queue([]rune("\r\n")) + line = string(t.line) + ok = true + t.line = t.line[:0] + t.pos = 0 + t.cursorX = 0 + t.cursorY = 0 + t.maxLine = 0 + case keyDeleteWord: + // Delete zero or more spaces and then one or more characters. + t.eraseNPreviousChars(t.countToLeftWord()) + case keyDeleteLine: + // Delete everything from the current cursor position to the + // end of line. + for i := t.pos; i < len(t.line); i++ { + t.queue(space) + t.advanceCursor(1) + } + t.line = t.line[:t.pos] + t.moveCursorToPos(t.pos) + case keyCtrlD: + // Erase the character under the current position. + // The EOF case when the line is empty is handled in + // readLine(). + if t.pos < len(t.line) { + t.pos++ + t.eraseNPreviousChars(1) + } + case keyCtrlU: + t.eraseNPreviousChars(t.pos) + case keyClearScreen: + // Erases the screen and moves the cursor to the home position. + t.queue([]rune("\x1b[2J\x1b[H")) + t.queue(t.prompt) + t.cursorX, t.cursorY = 0, 0 + t.advanceCursor(visualLength(t.prompt)) + t.setLine(t.line, t.pos) + default: + if t.AutoCompleteCallback != nil { + prefix := string(t.line[:t.pos]) + suffix := string(t.line[t.pos:]) + + t.lock.Unlock() + newLine, newPos, completeOk := t.AutoCompleteCallback(prefix+suffix, len(prefix), key) + t.lock.Lock() + + if completeOk { + t.setLine([]rune(newLine), utf8.RuneCount([]byte(newLine)[:newPos])) + return + } + } + if !isPrintable(key) { + return + } + if len(t.line) == maxLineLength { + return + } + t.addKeyToLine(key) + } + return +} + +// addKeyToLine inserts the given key at the current position in the current +// line. +func (t *Terminal) addKeyToLine(key rune) { + if len(t.line) == cap(t.line) { + newLine := make([]rune, len(t.line), 2*(1+len(t.line))) + copy(newLine, t.line) + t.line = newLine + } + t.line = t.line[:len(t.line)+1] + copy(t.line[t.pos+1:], t.line[t.pos:]) + t.line[t.pos] = key + if t.echo { + t.writeLine(t.line[t.pos:]) + } + t.pos++ + t.moveCursorToPos(t.pos) +} + +func (t *Terminal) writeLine(line []rune) { + for len(line) != 0 { + remainingOnLine := t.termWidth - t.cursorX + todo := len(line) + if todo > remainingOnLine { + todo = remainingOnLine + } + t.queue(line[:todo]) + t.advanceCursor(visualLength(line[:todo])) + line = line[todo:] + } +} + +func (t *Terminal) Write(buf []byte) (n int, err error) { + t.lock.Lock() + defer t.lock.Unlock() + + if t.cursorX == 0 && t.cursorY == 0 { + // This is the easy case: there's nothing on the screen that we + // have to move out of the way. + return t.c.Write(buf) + } + + // We have a prompt and possibly user input on the screen. We + // have to clear it first. + t.move(0 /* up */, 0 /* down */, t.cursorX /* left */, 0 /* right */) + t.cursorX = 0 + t.clearLineToRight() + + for t.cursorY > 0 { + t.move(1 /* up */, 0, 0, 0) + t.cursorY-- + t.clearLineToRight() + } + + if _, err = t.c.Write(t.outBuf); err != nil { + return + } + t.outBuf = t.outBuf[:0] + + if n, err = t.c.Write(buf); err != nil { + return + } + + t.writeLine(t.prompt) + if t.echo { + t.writeLine(t.line) + } + + t.moveCursorToPos(t.pos) + + if _, err = t.c.Write(t.outBuf); err != nil { + return + } + t.outBuf = t.outBuf[:0] + return +} + +// ReadPassword temporarily changes the prompt and reads a password, without +// echo, from the terminal. +func (t *Terminal) ReadPassword(prompt string) (line string, err error) { + t.lock.Lock() + defer t.lock.Unlock() + + oldPrompt := t.prompt + t.prompt = []rune(prompt) + t.echo = false + + line, err = t.readLine() + + t.prompt = oldPrompt + t.echo = true + + return +} + +// ReadLine returns a line of input from the terminal. +func (t *Terminal) ReadLine() (line string, err error) { + t.lock.Lock() + defer t.lock.Unlock() + + return t.readLine() +} + +func (t *Terminal) readLine() (line string, err error) { + // t.lock must be held at this point + + if t.cursorX == 0 && t.cursorY == 0 { + t.writeLine(t.prompt) + t.c.Write(t.outBuf) + t.outBuf = t.outBuf[:0] + } + + lineIsPasted := t.pasteActive + + for { + rest := t.remainder + lineOk := false + for !lineOk { + var key rune + key, rest = bytesToKey(rest, t.pasteActive) + if key == utf8.RuneError { + break + } + if !t.pasteActive { + if key == keyCtrlD { + if len(t.line) == 0 { + return "", io.EOF + } + } + if key == keyPasteStart { + t.pasteActive = true + if len(t.line) == 0 { + lineIsPasted = true + } + continue + } + } else if key == keyPasteEnd { + t.pasteActive = false + continue + } + if !t.pasteActive { + lineIsPasted = false + } + line, lineOk = t.handleKey(key) + } + if len(rest) > 0 { + n := copy(t.inBuf[:], rest) + t.remainder = t.inBuf[:n] + } else { + t.remainder = nil + } + t.c.Write(t.outBuf) + t.outBuf = t.outBuf[:0] + if lineOk { + if t.echo { + t.historyIndex = -1 + t.history.Add(line) + } + if lineIsPasted { + err = ErrPasteIndicator + } + return + } + + // t.remainder is a slice at the beginning of t.inBuf + // containing a partial key sequence + readBuf := t.inBuf[len(t.remainder):] + var n int + + t.lock.Unlock() + n, err = t.c.Read(readBuf) + t.lock.Lock() + + if err != nil { + return + } + + t.remainder = t.inBuf[:n+len(t.remainder)] + } + + panic("unreachable") // for Go 1.0. +} + +// SetPrompt sets the prompt to be used when reading subsequent lines. +func (t *Terminal) SetPrompt(prompt string) { + t.lock.Lock() + defer t.lock.Unlock() + + t.prompt = []rune(prompt) +} + +func (t *Terminal) clearAndRepaintLinePlusNPrevious(numPrevLines int) { + // Move cursor to column zero at the start of the line. + t.move(t.cursorY, 0, t.cursorX, 0) + t.cursorX, t.cursorY = 0, 0 + t.clearLineToRight() + for t.cursorY < numPrevLines { + // Move down a line + t.move(0, 1, 0, 0) + t.cursorY++ + t.clearLineToRight() + } + // Move back to beginning. + t.move(t.cursorY, 0, 0, 0) + t.cursorX, t.cursorY = 0, 0 + + t.queue(t.prompt) + t.advanceCursor(visualLength(t.prompt)) + t.writeLine(t.line) + t.moveCursorToPos(t.pos) +} + +func (t *Terminal) SetSize(width, height int) error { + t.lock.Lock() + defer t.lock.Unlock() + + if width == 0 { + width = 1 + } + + oldWidth := t.termWidth + t.termWidth, t.termHeight = width, height + + switch { + case width == oldWidth: + // If the width didn't change then nothing else needs to be + // done. + return nil + case len(t.line) == 0 && t.cursorX == 0 && t.cursorY == 0: + // If there is nothing on current line and no prompt printed, + // just do nothing + return nil + case width < oldWidth: + // Some terminals (e.g. xterm) will truncate lines that were + // too long when shinking. Others, (e.g. gnome-terminal) will + // attempt to wrap them. For the former, repainting t.maxLine + // works great, but that behaviour goes badly wrong in the case + // of the latter because they have doubled every full line. + + // We assume that we are working on a terminal that wraps lines + // and adjust the cursor position based on every previous line + // wrapping and turning into two. This causes the prompt on + // xterms to move upwards, which isn't great, but it avoids a + // huge mess with gnome-terminal. + if t.cursorX >= t.termWidth { + t.cursorX = t.termWidth - 1 + } + t.cursorY *= 2 + t.clearAndRepaintLinePlusNPrevious(t.maxLine * 2) + case width > oldWidth: + // If the terminal expands then our position calculations will + // be wrong in the future because we think the cursor is + // |t.pos| chars into the string, but there will be a gap at + // the end of any wrapped line. + // + // But the position will actually be correct until we move, so + // we can move back to the beginning and repaint everything. + t.clearAndRepaintLinePlusNPrevious(t.maxLine) + } + + _, err := t.c.Write(t.outBuf) + t.outBuf = t.outBuf[:0] + return err +} + +type pasteIndicatorError struct{} + +func (pasteIndicatorError) Error() string { + return "terminal: ErrPasteIndicator not correctly handled" +} + +// ErrPasteIndicator may be returned from ReadLine as the error, in addition +// to valid line data. It indicates that bracketed paste mode is enabled and +// that the returned line consists only of pasted data. Programs may wish to +// interpret pasted data more literally than typed data. +var ErrPasteIndicator = pasteIndicatorError{} + +// SetBracketedPasteMode requests that the terminal bracket paste operations +// with markers. Not all terminals support this but, if it is supported, then +// enabling this mode will stop any autocomplete callback from running due to +// pastes. Additionally, any lines that are completely pasted will be returned +// from ReadLine with the error set to ErrPasteIndicator. +func (t *Terminal) SetBracketedPasteMode(on bool) { + if on { + io.WriteString(t.c, "\x1b[?2004h") + } else { + io.WriteString(t.c, "\x1b[?2004l") + } +} + +// stRingBuffer is a ring buffer of strings. +type stRingBuffer struct { + // entries contains max elements. + entries []string + max int + // head contains the index of the element most recently added to the ring. + head int + // size contains the number of elements in the ring. + size int +} + +func (s *stRingBuffer) Add(a string) { + if s.entries == nil { + const defaultNumEntries = 100 + s.entries = make([]string, defaultNumEntries) + s.max = defaultNumEntries + } + + s.head = (s.head + 1) % s.max + s.entries[s.head] = a + if s.size < s.max { + s.size++ + } +} + +// NthPreviousEntry returns the value passed to the nth previous call to Add. +// If n is zero then the immediately prior value is returned, if one, then the +// next most recent, and so on. If such an element doesn't exist then ok is +// false. +func (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) { + if n >= s.size { + return "", false + } + index := s.head - n + if index < 0 { + index += s.max + } + return s.entries[index], true +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go new file mode 100644 index 0000000..6bdefb4 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go @@ -0,0 +1,291 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package terminal + +import ( + "io" + "os" + "testing" +) + +type MockTerminal struct { + toSend []byte + bytesPerRead int + received []byte +} + +func (c *MockTerminal) Read(data []byte) (n int, err error) { + n = len(data) + if n == 0 { + return + } + if n > len(c.toSend) { + n = len(c.toSend) + } + if n == 0 { + return 0, io.EOF + } + if c.bytesPerRead > 0 && n > c.bytesPerRead { + n = c.bytesPerRead + } + copy(data, c.toSend[:n]) + c.toSend = c.toSend[n:] + return +} + +func (c *MockTerminal) Write(data []byte) (n int, err error) { + c.received = append(c.received, data...) + return len(data), nil +} + +func TestClose(t *testing.T) { + c := &MockTerminal{} + ss := NewTerminal(c, "> ") + line, err := ss.ReadLine() + if line != "" { + t.Errorf("Expected empty line but got: %s", line) + } + if err != io.EOF { + t.Errorf("Error should have been EOF but got: %s", err) + } +} + +var keyPressTests = []struct { + in string + line string + err error + throwAwayLines int +}{ + { + err: io.EOF, + }, + { + in: "\r", + line: "", + }, + { + in: "foo\r", + line: "foo", + }, + { + in: "a\x1b[Cb\r", // right + line: "ab", + }, + { + in: "a\x1b[Db\r", // left + line: "ba", + }, + { + in: "a\177b\r", // backspace + line: "b", + }, + { + in: "\x1b[A\r", // up + }, + { + in: "\x1b[B\r", // down + }, + { + in: "line\x1b[A\x1b[B\r", // up then down + line: "line", + }, + { + in: "line1\rline2\x1b[A\r", // recall previous line. + line: "line1", + throwAwayLines: 1, + }, + { + // recall two previous lines and append. + in: "line1\rline2\rline3\x1b[A\x1b[Axxx\r", + line: "line1xxx", + throwAwayLines: 2, + }, + { + // Ctrl-A to move to beginning of line followed by ^K to kill + // line. + in: "a b \001\013\r", + line: "", + }, + { + // Ctrl-A to move to beginning of line, Ctrl-E to move to end, + // finally ^K to kill nothing. + in: "a b \001\005\013\r", + line: "a b ", + }, + { + in: "\027\r", + line: "", + }, + { + in: "a\027\r", + line: "", + }, + { + in: "a \027\r", + line: "", + }, + { + in: "a b\027\r", + line: "a ", + }, + { + in: "a b \027\r", + line: "a ", + }, + { + in: "one two thr\x1b[D\027\r", + line: "one two r", + }, + { + in: "\013\r", + line: "", + }, + { + in: "a\013\r", + line: "a", + }, + { + in: "ab\x1b[D\013\r", + line: "a", + }, + { + in: "Ξεσκεπάζω\r", + line: "Ξεσκεπάζω", + }, + { + in: "£\r\x1b[A\177\r", // non-ASCII char, enter, up, backspace. + line: "", + throwAwayLines: 1, + }, + { + in: "£\r££\x1b[A\x1b[B\177\r", // non-ASCII char, enter, 2x non-ASCII, up, down, backspace, enter. + line: "£", + throwAwayLines: 1, + }, + { + // Ctrl-D at the end of the line should be ignored. + in: "a\004\r", + line: "a", + }, + { + // a, b, left, Ctrl-D should erase the b. + in: "ab\x1b[D\004\r", + line: "a", + }, + { + // a, b, c, d, left, left, ^U should erase to the beginning of + // the line. + in: "abcd\x1b[D\x1b[D\025\r", + line: "cd", + }, + { + // Bracketed paste mode: control sequences should be returned + // verbatim in paste mode. + in: "abc\x1b[200~de\177f\x1b[201~\177\r", + line: "abcde\177", + }, + { + // Enter in bracketed paste mode should still work. + in: "abc\x1b[200~d\refg\x1b[201~h\r", + line: "efgh", + throwAwayLines: 1, + }, + { + // Lines consisting entirely of pasted data should be indicated as such. + in: "\x1b[200~a\r", + line: "a", + err: ErrPasteIndicator, + }, +} + +func TestKeyPresses(t *testing.T) { + for i, test := range keyPressTests { + for j := 1; j < len(test.in); j++ { + c := &MockTerminal{ + toSend: []byte(test.in), + bytesPerRead: j, + } + ss := NewTerminal(c, "> ") + for k := 0; k < test.throwAwayLines; k++ { + _, err := ss.ReadLine() + if err != nil { + t.Errorf("Throwaway line %d from test %d resulted in error: %s", k, i, err) + } + } + line, err := ss.ReadLine() + if line != test.line { + t.Errorf("Line resulting from test %d (%d bytes per read) was '%s', expected '%s'", i, j, line, test.line) + break + } + if err != test.err { + t.Errorf("Error resulting from test %d (%d bytes per read) was '%v', expected '%v'", i, j, err, test.err) + break + } + } + } +} + +func TestPasswordNotSaved(t *testing.T) { + c := &MockTerminal{ + toSend: []byte("password\r\x1b[A\r"), + bytesPerRead: 1, + } + ss := NewTerminal(c, "> ") + pw, _ := ss.ReadPassword("> ") + if pw != "password" { + t.Fatalf("failed to read password, got %s", pw) + } + line, _ := ss.ReadLine() + if len(line) > 0 { + t.Fatalf("password was saved in history") + } +} + +var setSizeTests = []struct { + width, height int +}{ + {40, 13}, + {80, 24}, + {132, 43}, +} + +func TestTerminalSetSize(t *testing.T) { + for _, setSize := range setSizeTests { + c := &MockTerminal{ + toSend: []byte("password\r\x1b[A\r"), + bytesPerRead: 1, + } + ss := NewTerminal(c, "> ") + ss.SetSize(setSize.width, setSize.height) + pw, _ := ss.ReadPassword("Password: ") + if pw != "password" { + t.Fatalf("failed to read password, got %s", pw) + } + if string(c.received) != "Password: \r\n" { + t.Errorf("failed to set the temporary prompt expected %q, got %q", "Password: ", c.received) + } + } +} + +func TestMakeRawState(t *testing.T) { + fd := int(os.Stdout.Fd()) + if !IsTerminal(fd) { + t.Skip("stdout is not a terminal; skipping test") + } + + st, err := GetState(fd) + if err != nil { + t.Fatalf("failed to get terminal state from GetState: %s", err) + } + defer Restore(fd, st) + raw, err := MakeRaw(fd) + if err != nil { + t.Fatalf("failed to get terminal state from MakeRaw: %s", err) + } + + if *st != *raw { + t.Errorf("states do not match; was %v, expected %v", raw, st) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util.go b/vendor/golang.org/x/crypto/ssh/terminal/util.go new file mode 100644 index 0000000..c869213 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util.go @@ -0,0 +1,133 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd + +// Package terminal provides support functions for dealing with terminals, as +// commonly found on UNIX systems. +// +// Putting a terminal into raw mode is the most common requirement: +// +// oldState, err := terminal.MakeRaw(0) +// if err != nil { +// panic(err) +// } +// defer terminal.Restore(0, oldState) +package terminal // import "golang.org/x/crypto/ssh/terminal" + +import ( + "io" + "syscall" + "unsafe" +) + +// State contains the state of a terminal. +type State struct { + termios syscall.Termios +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + var termios syscall.Termios + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) + return err == 0 +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd int) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { + return nil, err + } + + newState := oldState.termios + // This attempts to replicate the behaviour documented for cfmakeraw in + // the termios(3) manpage. + newState.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON + newState.Oflag &^= syscall.OPOST + newState.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN + newState.Cflag &^= syscall.CSIZE | syscall.PARENB + newState.Cflag |= syscall.CS8 + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { + return nil, err + } + + return &oldState, nil +} + +// GetState returns the current state of a terminal which may be useful to +// restore the terminal after a signal. +func GetState(fd int) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { + return nil, err + } + + return &oldState, nil +} + +// Restore restores the terminal connected to the given file descriptor to a +// previous state. +func Restore(fd int, state *State) error { + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&state.termios)), 0, 0, 0) + return err +} + +// GetSize returns the dimensions of the given terminal. +func GetSize(fd int) (width, height int, err error) { + var dimensions [4]uint16 + + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0); err != 0 { + return -1, -1, err + } + return int(dimensions[1]), int(dimensions[0]), nil +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + var oldState syscall.Termios + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); err != 0 { + return nil, err + } + + newState := oldState + newState.Lflag &^= syscall.ECHO + newState.Lflag |= syscall.ICANON | syscall.ISIG + newState.Iflag |= syscall.ICRNL + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { + return nil, err + } + + defer func() { + syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0) + }() + + var buf [16]byte + var ret []byte + for { + n, err := syscall.Read(fd, buf[:]) + if err != nil { + return nil, err + } + if n == 0 { + if len(ret) == 0 { + return nil, io.EOF + } + break + } + if buf[n-1] == '\n' { + n-- + } + ret = append(ret, buf[:n]...) + if n < len(buf) { + break + } + } + + return ret, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go b/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go new file mode 100644 index 0000000..9c1ffd1 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go @@ -0,0 +1,12 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package terminal + +import "syscall" + +const ioctlReadTermios = syscall.TIOCGETA +const ioctlWriteTermios = syscall.TIOCSETA diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go b/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go new file mode 100644 index 0000000..5883b22 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package terminal + +// These constants are declared here, rather than importing +// them from the syscall package as some syscall packages, even +// on linux, for example gccgo, do not declare them. +const ioctlReadTermios = 0x5401 // syscall.TCGETS +const ioctlWriteTermios = 0x5402 // syscall.TCSETS diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go b/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go new file mode 100644 index 0000000..799f049 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go @@ -0,0 +1,58 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package terminal provides support functions for dealing with terminals, as +// commonly found on UNIX systems. +// +// Putting a terminal into raw mode is the most common requirement: +// +// oldState, err := terminal.MakeRaw(0) +// if err != nil { +// panic(err) +// } +// defer terminal.Restore(0, oldState) +package terminal + +import ( + "fmt" + "runtime" +) + +type State struct{} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + return false +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd int) (*State, error) { + return nil, fmt.Errorf("terminal: MakeRaw not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// GetState returns the current state of a terminal which may be useful to +// restore the terminal after a signal. +func GetState(fd int) (*State, error) { + return nil, fmt.Errorf("terminal: GetState not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// Restore restores the terminal connected to the given file descriptor to a +// previous state. +func Restore(fd int, state *State) error { + return fmt.Errorf("terminal: Restore not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// GetSize returns the dimensions of the given terminal. +func GetSize(fd int) (width, height int, err error) { + return 0, 0, fmt.Errorf("terminal: GetSize not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + return nil, fmt.Errorf("terminal: ReadPassword not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go b/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go new file mode 100644 index 0000000..07eb5ed --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go @@ -0,0 +1,73 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package terminal // import "golang.org/x/crypto/ssh/terminal" + +import ( + "golang.org/x/sys/unix" + "io" + "syscall" +) + +// State contains the state of a terminal. +type State struct { + termios syscall.Termios +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + // see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c + var termio unix.Termio + err := unix.IoctlSetTermio(fd, unix.TCGETA, &termio) + return err == nil +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + // see also: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libast/common/uwin/getpass.c + val, err := unix.IoctlGetTermios(fd, unix.TCGETS) + if err != nil { + return nil, err + } + oldState := *val + + newState := oldState + newState.Lflag &^= syscall.ECHO + newState.Lflag |= syscall.ICANON | syscall.ISIG + newState.Iflag |= syscall.ICRNL + err = unix.IoctlSetTermios(fd, unix.TCSETS, &newState) + if err != nil { + return nil, err + } + + defer unix.IoctlSetTermios(fd, unix.TCSETS, &oldState) + + var buf [16]byte + var ret []byte + for { + n, err := syscall.Read(fd, buf[:]) + if err != nil { + return nil, err + } + if n == 0 { + if len(ret) == 0 { + return nil, io.EOF + } + break + } + if buf[n-1] == '\n' { + n-- + } + ret = append(ret, buf[:n]...) + if n < len(buf) { + break + } + } + + return ret, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go b/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go new file mode 100644 index 0000000..ae9fa9e --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go @@ -0,0 +1,174 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package terminal provides support functions for dealing with terminals, as +// commonly found on UNIX systems. +// +// Putting a terminal into raw mode is the most common requirement: +// +// oldState, err := terminal.MakeRaw(0) +// if err != nil { +// panic(err) +// } +// defer terminal.Restore(0, oldState) +package terminal + +import ( + "io" + "syscall" + "unsafe" +) + +const ( + enableLineInput = 2 + enableEchoInput = 4 + enableProcessedInput = 1 + enableWindowInput = 8 + enableMouseInput = 16 + enableInsertMode = 32 + enableQuickEditMode = 64 + enableExtendedFlags = 128 + enableAutoPosition = 256 + enableProcessedOutput = 1 + enableWrapAtEolOutput = 2 +) + +var kernel32 = syscall.NewLazyDLL("kernel32.dll") + +var ( + procGetConsoleMode = kernel32.NewProc("GetConsoleMode") + procSetConsoleMode = kernel32.NewProc("SetConsoleMode") + procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") +) + +type ( + short int16 + word uint16 + + coord struct { + x short + y short + } + smallRect struct { + left short + top short + right short + bottom short + } + consoleScreenBufferInfo struct { + size coord + cursorPosition coord + attributes word + window smallRect + maximumWindowSize coord + } +) + +type State struct { + mode uint32 +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + var st uint32 + r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) + return r != 0 && e == 0 +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd int) (*State, error) { + var st uint32 + _, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) + if e != 0 { + return nil, error(e) + } + raw := st &^ (enableEchoInput | enableProcessedInput | enableLineInput | enableProcessedOutput) + _, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(raw), 0) + if e != 0 { + return nil, error(e) + } + return &State{st}, nil +} + +// GetState returns the current state of a terminal which may be useful to +// restore the terminal after a signal. +func GetState(fd int) (*State, error) { + var st uint32 + _, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) + if e != 0 { + return nil, error(e) + } + return &State{st}, nil +} + +// Restore restores the terminal connected to the given file descriptor to a +// previous state. +func Restore(fd int, state *State) error { + _, _, err := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(state.mode), 0) + return err +} + +// GetSize returns the dimensions of the given terminal. +func GetSize(fd int) (width, height int, err error) { + var info consoleScreenBufferInfo + _, _, e := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&info)), 0) + if e != 0 { + return 0, 0, error(e) + } + return int(info.size.x), int(info.size.y), nil +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + var st uint32 + _, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) + if e != 0 { + return nil, error(e) + } + old := st + + st &^= (enableEchoInput) + st |= (enableProcessedInput | enableLineInput | enableProcessedOutput) + _, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(st), 0) + if e != 0 { + return nil, error(e) + } + + defer func() { + syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(old), 0) + }() + + var buf [16]byte + var ret []byte + for { + n, err := syscall.Read(syscall.Handle(fd), buf[:]) + if err != nil { + return nil, err + } + if n == 0 { + if len(ret) == 0 { + return nil, io.EOF + } + break + } + if buf[n-1] == '\n' { + n-- + } + if n > 0 && buf[n-1] == '\r' { + n-- + } + ret = append(ret, buf[:n]...) + if n < len(buf) { + break + } + } + + return ret, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/test/agent_unix_test.go b/vendor/golang.org/x/crypto/ssh/test/agent_unix_test.go new file mode 100644 index 0000000..f481253 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/agent_unix_test.go @@ -0,0 +1,59 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package test + +import ( + "bytes" + "testing" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/agent" +) + +func TestAgentForward(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + keyring := agent.NewKeyring() + if err := keyring.Add(agent.AddedKey{PrivateKey: testPrivateKeys["dsa"]}); err != nil { + t.Fatalf("Error adding key: %s", err) + } + if err := keyring.Add(agent.AddedKey{ + PrivateKey: testPrivateKeys["dsa"], + ConfirmBeforeUse: true, + LifetimeSecs: 3600, + }); err != nil { + t.Fatalf("Error adding key with constraints: %s", err) + } + pub := testPublicKeys["dsa"] + + sess, err := conn.NewSession() + if err != nil { + t.Fatalf("NewSession: %v", err) + } + if err := agent.RequestAgentForwarding(sess); err != nil { + t.Fatalf("RequestAgentForwarding: %v", err) + } + + if err := agent.ForwardToAgent(conn, keyring); err != nil { + t.Fatalf("SetupForwardKeyring: %v", err) + } + out, err := sess.CombinedOutput("ssh-add -L") + if err != nil { + t.Fatalf("running ssh-add: %v, out %s", err, out) + } + key, _, _, _, err := ssh.ParseAuthorizedKey(out) + if err != nil { + t.Fatalf("ParseAuthorizedKey(%q): %v", out, err) + } + + if !bytes.Equal(key.Marshal(), pub.Marshal()) { + t.Fatalf("got key %s, want %s", ssh.MarshalAuthorizedKey(key), ssh.MarshalAuthorizedKey(pub)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/test/cert_test.go b/vendor/golang.org/x/crypto/ssh/test/cert_test.go new file mode 100644 index 0000000..364790f --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/cert_test.go @@ -0,0 +1,47 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package test + +import ( + "crypto/rand" + "testing" + + "golang.org/x/crypto/ssh" +) + +func TestCertLogin(t *testing.T) { + s := newServer(t) + defer s.Shutdown() + + // Use a key different from the default. + clientKey := testSigners["dsa"] + caAuthKey := testSigners["ecdsa"] + cert := &ssh.Certificate{ + Key: clientKey.PublicKey(), + ValidPrincipals: []string{username()}, + CertType: ssh.UserCert, + ValidBefore: ssh.CertTimeInfinity, + } + if err := cert.SignCert(rand.Reader, caAuthKey); err != nil { + t.Fatalf("SetSignature: %v", err) + } + + certSigner, err := ssh.NewCertSigner(cert, clientKey) + if err != nil { + t.Fatalf("NewCertSigner: %v", err) + } + + conf := &ssh.ClientConfig{ + User: username(), + } + conf.Auth = append(conf.Auth, ssh.PublicKeys(certSigner)) + client, err := s.TryDial(conf) + if err != nil { + t.Fatalf("TryDial: %v", err) + } + client.Close() +} diff --git a/vendor/golang.org/x/crypto/ssh/test/doc.go b/vendor/golang.org/x/crypto/ssh/test/doc.go new file mode 100644 index 0000000..3f9b334 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/doc.go @@ -0,0 +1,7 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This package contains integration tests for the +// golang.org/x/crypto/ssh package. +package test // import "golang.org/x/crypto/ssh/test" diff --git a/vendor/golang.org/x/crypto/ssh/test/forward_unix_test.go b/vendor/golang.org/x/crypto/ssh/test/forward_unix_test.go new file mode 100644 index 0000000..877a88c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/forward_unix_test.go @@ -0,0 +1,160 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package test + +import ( + "bytes" + "io" + "io/ioutil" + "math/rand" + "net" + "testing" + "time" +) + +func TestPortForward(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + sshListener, err := conn.Listen("tcp", "localhost:0") + if err != nil { + t.Fatal(err) + } + + go func() { + sshConn, err := sshListener.Accept() + if err != nil { + t.Fatalf("listen.Accept failed: %v", err) + } + + _, err = io.Copy(sshConn, sshConn) + if err != nil && err != io.EOF { + t.Fatalf("ssh client copy: %v", err) + } + sshConn.Close() + }() + + forwardedAddr := sshListener.Addr().String() + tcpConn, err := net.Dial("tcp", forwardedAddr) + if err != nil { + t.Fatalf("TCP dial failed: %v", err) + } + + readChan := make(chan []byte) + go func() { + data, _ := ioutil.ReadAll(tcpConn) + readChan <- data + }() + + // Invent some data. + data := make([]byte, 100*1000) + for i := range data { + data[i] = byte(i % 255) + } + + var sent []byte + for len(sent) < 1000*1000 { + // Send random sized chunks + m := rand.Intn(len(data)) + n, err := tcpConn.Write(data[:m]) + if err != nil { + break + } + sent = append(sent, data[:n]...) + } + if err := tcpConn.(*net.TCPConn).CloseWrite(); err != nil { + t.Errorf("tcpConn.CloseWrite: %v", err) + } + + read := <-readChan + + if len(sent) != len(read) { + t.Fatalf("got %d bytes, want %d", len(read), len(sent)) + } + if bytes.Compare(sent, read) != 0 { + t.Fatalf("read back data does not match") + } + + if err := sshListener.Close(); err != nil { + t.Fatalf("sshListener.Close: %v", err) + } + + // Check that the forward disappeared. + tcpConn, err = net.Dial("tcp", forwardedAddr) + if err == nil { + tcpConn.Close() + t.Errorf("still listening to %s after closing", forwardedAddr) + } +} + +func TestAcceptClose(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + + sshListener, err := conn.Listen("tcp", "localhost:0") + if err != nil { + t.Fatal(err) + } + + quit := make(chan error, 1) + go func() { + for { + c, err := sshListener.Accept() + if err != nil { + quit <- err + break + } + c.Close() + } + }() + sshListener.Close() + + select { + case <-time.After(1 * time.Second): + t.Errorf("timeout: listener did not close.") + case err := <-quit: + t.Logf("quit as expected (error %v)", err) + } +} + +// Check that listeners exit if the underlying client transport dies. +func TestPortForwardConnectionClose(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + + sshListener, err := conn.Listen("tcp", "localhost:0") + if err != nil { + t.Fatal(err) + } + + quit := make(chan error, 1) + go func() { + for { + c, err := sshListener.Accept() + if err != nil { + quit <- err + break + } + c.Close() + } + }() + + // It would be even nicer if we closed the server side, but it + // is more involved as the fd for that side is dup()ed. + server.clientConn.Close() + + select { + case <-time.After(1 * time.Second): + t.Errorf("timeout: listener did not close.") + case err := <-quit: + t.Logf("quit as expected (error %v)", err) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/test/session_test.go b/vendor/golang.org/x/crypto/ssh/test/session_test.go new file mode 100644 index 0000000..fc7e471 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/session_test.go @@ -0,0 +1,365 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !windows + +package test + +// Session functional tests. + +import ( + "bytes" + "errors" + "io" + "strings" + "testing" + + "golang.org/x/crypto/ssh" +) + +func TestRunCommandSuccess(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + err = session.Run("true") + if err != nil { + t.Fatalf("session failed: %v", err) + } +} + +func TestHostKeyCheck(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + + conf := clientConfig() + hostDB := hostKeyDB() + conf.HostKeyCallback = hostDB.Check + + // change the keys. + hostDB.keys[ssh.KeyAlgoRSA][25]++ + hostDB.keys[ssh.KeyAlgoDSA][25]++ + hostDB.keys[ssh.KeyAlgoECDSA256][25]++ + + conn, err := server.TryDial(conf) + if err == nil { + conn.Close() + t.Fatalf("dial should have failed.") + } else if !strings.Contains(err.Error(), "host key mismatch") { + t.Fatalf("'host key mismatch' not found in %v", err) + } +} + +func TestRunCommandStdin(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + + r, w := io.Pipe() + defer r.Close() + defer w.Close() + session.Stdin = r + + err = session.Run("true") + if err != nil { + t.Fatalf("session failed: %v", err) + } +} + +func TestRunCommandStdinError(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + + r, w := io.Pipe() + defer r.Close() + session.Stdin = r + pipeErr := errors.New("closing write end of pipe") + w.CloseWithError(pipeErr) + + err = session.Run("true") + if err != pipeErr { + t.Fatalf("expected %v, found %v", pipeErr, err) + } +} + +func TestRunCommandFailed(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + err = session.Run(`bash -c "kill -9 $$"`) + if err == nil { + t.Fatalf("session succeeded: %v", err) + } +} + +func TestRunCommandWeClosed(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + err = session.Shell() + if err != nil { + t.Fatalf("shell failed: %v", err) + } + err = session.Close() + if err != nil { + t.Fatalf("shell failed: %v", err) + } +} + +func TestFuncLargeRead(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("unable to create new session: %s", err) + } + + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("unable to acquire stdout pipe: %s", err) + } + + err = session.Start("dd if=/dev/urandom bs=2048 count=1024") + if err != nil { + t.Fatalf("unable to execute remote command: %s", err) + } + + buf := new(bytes.Buffer) + n, err := io.Copy(buf, stdout) + if err != nil { + t.Fatalf("error reading from remote stdout: %s", err) + } + + if n != 2048*1024 { + t.Fatalf("Expected %d bytes but read only %d from remote command", 2048, n) + } +} + +func TestKeyChange(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conf := clientConfig() + hostDB := hostKeyDB() + conf.HostKeyCallback = hostDB.Check + conf.RekeyThreshold = 1024 + conn := server.Dial(conf) + defer conn.Close() + + for i := 0; i < 4; i++ { + session, err := conn.NewSession() + if err != nil { + t.Fatalf("unable to create new session: %s", err) + } + + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("unable to acquire stdout pipe: %s", err) + } + + err = session.Start("dd if=/dev/urandom bs=1024 count=1") + if err != nil { + t.Fatalf("unable to execute remote command: %s", err) + } + buf := new(bytes.Buffer) + n, err := io.Copy(buf, stdout) + if err != nil { + t.Fatalf("error reading from remote stdout: %s", err) + } + + want := int64(1024) + if n != want { + t.Fatalf("Expected %d bytes but read only %d from remote command", want, n) + } + } + + if changes := hostDB.checkCount; changes < 4 { + t.Errorf("got %d key changes, want 4", changes) + } +} + +func TestInvalidTerminalMode(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + + if err = session.RequestPty("vt100", 80, 40, ssh.TerminalModes{255: 1984}); err == nil { + t.Fatalf("req-pty failed: successful request with invalid mode") + } +} + +func TestValidTerminalMode(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("unable to acquire stdout pipe: %s", err) + } + + stdin, err := session.StdinPipe() + if err != nil { + t.Fatalf("unable to acquire stdin pipe: %s", err) + } + + tm := ssh.TerminalModes{ssh.ECHO: 0} + if err = session.RequestPty("xterm", 80, 40, tm); err != nil { + t.Fatalf("req-pty failed: %s", err) + } + + err = session.Shell() + if err != nil { + t.Fatalf("session failed: %s", err) + } + + stdin.Write([]byte("stty -a && exit\n")) + + var buf bytes.Buffer + if _, err := io.Copy(&buf, stdout); err != nil { + t.Fatalf("reading failed: %s", err) + } + + if sttyOutput := buf.String(); !strings.Contains(sttyOutput, "-echo ") { + t.Fatalf("terminal mode failure: expected -echo in stty output, got %s", sttyOutput) + } +} + +func TestCiphers(t *testing.T) { + var config ssh.Config + config.SetDefaults() + cipherOrder := config.Ciphers + // These ciphers will not be tested when commented out in cipher.go it will + // fallback to the next available as per line 292. + cipherOrder = append(cipherOrder, "aes128-cbc", "3des-cbc") + + for _, ciph := range cipherOrder { + server := newServer(t) + defer server.Shutdown() + conf := clientConfig() + conf.Ciphers = []string{ciph} + // Don't fail if sshd doesn't have the cipher. + conf.Ciphers = append(conf.Ciphers, cipherOrder...) + conn, err := server.TryDial(conf) + if err == nil { + conn.Close() + } else { + t.Fatalf("failed for cipher %q", ciph) + } + } +} + +func TestMACs(t *testing.T) { + var config ssh.Config + config.SetDefaults() + macOrder := config.MACs + + for _, mac := range macOrder { + server := newServer(t) + defer server.Shutdown() + conf := clientConfig() + conf.MACs = []string{mac} + // Don't fail if sshd doesn't have the MAC. + conf.MACs = append(conf.MACs, macOrder...) + if conn, err := server.TryDial(conf); err == nil { + conn.Close() + } else { + t.Fatalf("failed for MAC %q", mac) + } + } +} + +func TestKeyExchanges(t *testing.T) { + var config ssh.Config + config.SetDefaults() + kexOrder := config.KeyExchanges + for _, kex := range kexOrder { + server := newServer(t) + defer server.Shutdown() + conf := clientConfig() + // Don't fail if sshd doesn't have the kex. + conf.KeyExchanges = append([]string{kex}, kexOrder...) + conn, err := server.TryDial(conf) + if err == nil { + conn.Close() + } else { + t.Errorf("failed for kex %q", kex) + } + } +} + +func TestClientAuthAlgorithms(t *testing.T) { + for _, key := range []string{ + "rsa", + "dsa", + "ecdsa", + "ed25519", + } { + server := newServer(t) + conf := clientConfig() + conf.SetDefaults() + conf.Auth = []ssh.AuthMethod{ + ssh.PublicKeys(testSigners[key]), + } + + conn, err := server.TryDial(conf) + if err == nil { + conn.Close() + } else { + t.Errorf("failed for key %q", key) + } + + server.Shutdown() + } +} diff --git a/vendor/golang.org/x/crypto/ssh/test/tcpip_test.go b/vendor/golang.org/x/crypto/ssh/test/tcpip_test.go new file mode 100644 index 0000000..a2eb935 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/tcpip_test.go @@ -0,0 +1,46 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !windows + +package test + +// direct-tcpip functional tests + +import ( + "io" + "net" + "testing" +) + +func TestDial(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + sshConn := server.Dial(clientConfig()) + defer sshConn.Close() + + l, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("Listen: %v", err) + } + defer l.Close() + + go func() { + for { + c, err := l.Accept() + if err != nil { + break + } + + io.WriteString(c, c.RemoteAddr().String()) + c.Close() + } + }() + + conn, err := sshConn.Dial("tcp", l.Addr().String()) + if err != nil { + t.Fatalf("Dial: %v", err) + } + defer conn.Close() +} diff --git a/vendor/golang.org/x/crypto/ssh/test/test_unix_test.go b/vendor/golang.org/x/crypto/ssh/test/test_unix_test.go new file mode 100644 index 0000000..3bfd881 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/test_unix_test.go @@ -0,0 +1,268 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd plan9 + +package test + +// functional test harness for unix. + +import ( + "bytes" + "fmt" + "io/ioutil" + "log" + "net" + "os" + "os/exec" + "os/user" + "path/filepath" + "testing" + "text/template" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/testdata" +) + +const sshd_config = ` +Protocol 2 +HostKey {{.Dir}}/id_rsa +HostKey {{.Dir}}/id_dsa +HostKey {{.Dir}}/id_ecdsa +Pidfile {{.Dir}}/sshd.pid +#UsePrivilegeSeparation no +KeyRegenerationInterval 3600 +ServerKeyBits 768 +SyslogFacility AUTH +LogLevel DEBUG2 +LoginGraceTime 120 +PermitRootLogin no +StrictModes no +RSAAuthentication yes +PubkeyAuthentication yes +AuthorizedKeysFile {{.Dir}}/authorized_keys +TrustedUserCAKeys {{.Dir}}/id_ecdsa.pub +IgnoreRhosts yes +RhostsRSAAuthentication no +HostbasedAuthentication no +PubkeyAcceptedKeyTypes=* +` + +var configTmpl = template.Must(template.New("").Parse(sshd_config)) + +type server struct { + t *testing.T + cleanup func() // executed during Shutdown + configfile string + cmd *exec.Cmd + output bytes.Buffer // holds stderr from sshd process + + // Client half of the network connection. + clientConn net.Conn +} + +func username() string { + var username string + if user, err := user.Current(); err == nil { + username = user.Username + } else { + // user.Current() currently requires cgo. If an error is + // returned attempt to get the username from the environment. + log.Printf("user.Current: %v; falling back on $USER", err) + username = os.Getenv("USER") + } + if username == "" { + panic("Unable to get username") + } + return username +} + +type storedHostKey struct { + // keys map from an algorithm string to binary key data. + keys map[string][]byte + + // checkCount counts the Check calls. Used for testing + // rekeying. + checkCount int +} + +func (k *storedHostKey) Add(key ssh.PublicKey) { + if k.keys == nil { + k.keys = map[string][]byte{} + } + k.keys[key.Type()] = key.Marshal() +} + +func (k *storedHostKey) Check(addr string, remote net.Addr, key ssh.PublicKey) error { + k.checkCount++ + algo := key.Type() + + if k.keys == nil || bytes.Compare(key.Marshal(), k.keys[algo]) != 0 { + return fmt.Errorf("host key mismatch. Got %q, want %q", key, k.keys[algo]) + } + return nil +} + +func hostKeyDB() *storedHostKey { + keyChecker := &storedHostKey{} + keyChecker.Add(testPublicKeys["ecdsa"]) + keyChecker.Add(testPublicKeys["rsa"]) + keyChecker.Add(testPublicKeys["dsa"]) + return keyChecker +} + +func clientConfig() *ssh.ClientConfig { + config := &ssh.ClientConfig{ + User: username(), + Auth: []ssh.AuthMethod{ + ssh.PublicKeys(testSigners["user"]), + }, + HostKeyCallback: hostKeyDB().Check, + } + return config +} + +// unixConnection creates two halves of a connected net.UnixConn. It +// is used for connecting the Go SSH client with sshd without opening +// ports. +func unixConnection() (*net.UnixConn, *net.UnixConn, error) { + dir, err := ioutil.TempDir("", "unixConnection") + if err != nil { + return nil, nil, err + } + defer os.Remove(dir) + + addr := filepath.Join(dir, "ssh") + listener, err := net.Listen("unix", addr) + if err != nil { + return nil, nil, err + } + defer listener.Close() + c1, err := net.Dial("unix", addr) + if err != nil { + return nil, nil, err + } + + c2, err := listener.Accept() + if err != nil { + c1.Close() + return nil, nil, err + } + + return c1.(*net.UnixConn), c2.(*net.UnixConn), nil +} + +func (s *server) TryDial(config *ssh.ClientConfig) (*ssh.Client, error) { + sshd, err := exec.LookPath("sshd") + if err != nil { + s.t.Skipf("skipping test: %v", err) + } + + c1, c2, err := unixConnection() + if err != nil { + s.t.Fatalf("unixConnection: %v", err) + } + + s.cmd = exec.Command(sshd, "-f", s.configfile, "-i", "-e") + f, err := c2.File() + if err != nil { + s.t.Fatalf("UnixConn.File: %v", err) + } + defer f.Close() + s.cmd.Stdin = f + s.cmd.Stdout = f + s.cmd.Stderr = &s.output + if err := s.cmd.Start(); err != nil { + s.t.Fail() + s.Shutdown() + s.t.Fatalf("s.cmd.Start: %v", err) + } + s.clientConn = c1 + conn, chans, reqs, err := ssh.NewClientConn(c1, "", config) + if err != nil { + return nil, err + } + return ssh.NewClient(conn, chans, reqs), nil +} + +func (s *server) Dial(config *ssh.ClientConfig) *ssh.Client { + conn, err := s.TryDial(config) + if err != nil { + s.t.Fail() + s.Shutdown() + s.t.Fatalf("ssh.Client: %v", err) + } + return conn +} + +func (s *server) Shutdown() { + if s.cmd != nil && s.cmd.Process != nil { + // Don't check for errors; if it fails it's most + // likely "os: process already finished", and we don't + // care about that. Use os.Interrupt, so child + // processes are killed too. + s.cmd.Process.Signal(os.Interrupt) + s.cmd.Wait() + } + if s.t.Failed() { + // log any output from sshd process + s.t.Logf("sshd: %s", s.output.String()) + } + s.cleanup() +} + +func writeFile(path string, contents []byte) { + f, err := os.OpenFile(path, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600) + if err != nil { + panic(err) + } + defer f.Close() + if _, err := f.Write(contents); err != nil { + panic(err) + } +} + +// newServer returns a new mock ssh server. +func newServer(t *testing.T) *server { + if testing.Short() { + t.Skip("skipping test due to -short") + } + dir, err := ioutil.TempDir("", "sshtest") + if err != nil { + t.Fatal(err) + } + f, err := os.Create(filepath.Join(dir, "sshd_config")) + if err != nil { + t.Fatal(err) + } + err = configTmpl.Execute(f, map[string]string{ + "Dir": dir, + }) + if err != nil { + t.Fatal(err) + } + f.Close() + + for k, v := range testdata.PEMBytes { + filename := "id_" + k + writeFile(filepath.Join(dir, filename), v) + writeFile(filepath.Join(dir, filename+".pub"), ssh.MarshalAuthorizedKey(testPublicKeys[k])) + } + + var authkeys bytes.Buffer + for k, _ := range testdata.PEMBytes { + authkeys.Write(ssh.MarshalAuthorizedKey(testPublicKeys[k])) + } + writeFile(filepath.Join(dir, "authorized_keys"), authkeys.Bytes()) + + return &server{ + t: t, + configfile: f.Name(), + cleanup: func() { + if err := os.RemoveAll(dir); err != nil { + t.Error(err) + } + }, + } +} diff --git a/vendor/golang.org/x/crypto/ssh/test/testdata_test.go b/vendor/golang.org/x/crypto/ssh/test/testdata_test.go new file mode 100644 index 0000000..a053f67 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/testdata_test.go @@ -0,0 +1,64 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// IMPLEMENTATION NOTE: To avoid a package loop, this file is in three places: +// ssh/, ssh/agent, and ssh/test/. It should be kept in sync across all three +// instances. + +package test + +import ( + "crypto/rand" + "fmt" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/testdata" +) + +var ( + testPrivateKeys map[string]interface{} + testSigners map[string]ssh.Signer + testPublicKeys map[string]ssh.PublicKey +) + +func init() { + var err error + + n := len(testdata.PEMBytes) + testPrivateKeys = make(map[string]interface{}, n) + testSigners = make(map[string]ssh.Signer, n) + testPublicKeys = make(map[string]ssh.PublicKey, n) + for t, k := range testdata.PEMBytes { + testPrivateKeys[t], err = ssh.ParseRawPrivateKey(k) + if err != nil { + panic(fmt.Sprintf("Unable to parse test key %s: %v", t, err)) + } + testSigners[t], err = ssh.NewSignerFromKey(testPrivateKeys[t]) + if err != nil { + panic(fmt.Sprintf("Unable to create signer for test key %s: %v", t, err)) + } + testPublicKeys[t] = testSigners[t].PublicKey() + } + + // Create a cert and sign it for use in tests. + testCert := &ssh.Certificate{ + Nonce: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + ValidPrincipals: []string{"gopher1", "gopher2"}, // increases test coverage + ValidAfter: 0, // unix epoch + ValidBefore: ssh.CertTimeInfinity, // The end of currently representable time. + Reserved: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + Key: testPublicKeys["ecdsa"], + SignatureKey: testPublicKeys["rsa"], + Permissions: ssh.Permissions{ + CriticalOptions: map[string]string{}, + Extensions: map[string]string{}, + }, + } + testCert.SignCert(rand.Reader, testSigners["rsa"]) + testPrivateKeys["cert"] = testPrivateKeys["ecdsa"] + testSigners["cert"], err = ssh.NewCertSigner(testCert, testSigners["ecdsa"]) + if err != nil { + panic(fmt.Sprintf("Unable to create certificate signer: %v", err)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/testdata/doc.go b/vendor/golang.org/x/crypto/ssh/testdata/doc.go new file mode 100644 index 0000000..fcae47c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/testdata/doc.go @@ -0,0 +1,8 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This package contains test data shared between the various subpackages of +// the golang.org/x/crypto/ssh package. Under no circumstance should +// this data be used for production code. +package testdata // import "golang.org/x/crypto/ssh/testdata" diff --git a/vendor/golang.org/x/crypto/ssh/testdata/keys.go b/vendor/golang.org/x/crypto/ssh/testdata/keys.go new file mode 100644 index 0000000..736dad9 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/testdata/keys.go @@ -0,0 +1,120 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testdata + +var PEMBytes = map[string][]byte{ + "dsa": []byte(`-----BEGIN DSA PRIVATE KEY----- +MIIBuwIBAAKBgQD6PDSEyXiI9jfNs97WuM46MSDCYlOqWw80ajN16AohtBncs1YB +lHk//dQOvCYOsYaE+gNix2jtoRjwXhDsc25/IqQbU1ahb7mB8/rsaILRGIbA5WH3 +EgFtJmXFovDz3if6F6TzvhFpHgJRmLYVR8cqsezL3hEZOvvs2iH7MorkxwIVAJHD +nD82+lxh2fb4PMsIiaXudAsBAoGAQRf7Q/iaPRn43ZquUhd6WwvirqUj+tkIu6eV +2nZWYmXLlqFQKEy4Tejl7Wkyzr2OSYvbXLzo7TNxLKoWor6ips0phYPPMyXld14r +juhT24CrhOzuLMhDduMDi032wDIZG4Y+K7ElU8Oufn8Sj5Wge8r6ANmmVgmFfynr +FhdYCngCgYEA3ucGJ93/Mx4q4eKRDxcWD3QzWyqpbRVRRV1Vmih9Ha/qC994nJFz +DQIdjxDIT2Rk2AGzMqFEB68Zc3O+Wcsmz5eWWzEwFxaTwOGWTyDqsDRLm3fD+QYj +nOwuxb0Kce+gWI8voWcqC9cyRm09jGzu2Ab3Bhtpg8JJ8L7gS3MRZK4CFEx4UAfY +Fmsr0W6fHB9nhS4/UXM8 +-----END DSA PRIVATE KEY----- +`), + "ecdsa": []byte(`-----BEGIN EC PRIVATE KEY----- +MHcCAQEEINGWx0zo6fhJ/0EAfrPzVFyFC9s18lBt3cRoEDhS3ARooAoGCCqGSM49 +AwEHoUQDQgAEi9Hdw6KvZcWxfg2IDhA7UkpDtzzt6ZqJXSsFdLd+Kx4S3Sx4cVO+ +6/ZOXRnPmNAlLUqjShUsUBBngG0u2fqEqA== +-----END EC PRIVATE KEY----- +`), + "rsa": []byte(`-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQC8A6FGHDiWCSREAXCq6yBfNVr0xCVG2CzvktFNRpue+RXrGs/2 +a6ySEJQb3IYquw7HlJgu6fg3WIWhOmHCjfpG0PrL4CRwbqQ2LaPPXhJErWYejcD8 +Di00cF3677+G10KMZk9RXbmHtuBFZT98wxg8j+ZsBMqGM1+7yrWUvynswQIDAQAB +AoGAJMCk5vqfSRzyXOTXLGIYCuR4Kj6pdsbNSeuuRGfYBeR1F2c/XdFAg7D/8s5R +38p/Ih52/Ty5S8BfJtwtvgVY9ecf/JlU/rl/QzhG8/8KC0NG7KsyXklbQ7gJT8UT +Ojmw5QpMk+rKv17ipDVkQQmPaj+gJXYNAHqImke5mm/K/h0CQQDciPmviQ+DOhOq +2ZBqUfH8oXHgFmp7/6pXw80DpMIxgV3CwkxxIVx6a8lVH9bT/AFySJ6vXq4zTuV9 +6QmZcZzDAkEA2j/UXJPIs1fQ8z/6sONOkU/BjtoePFIWJlRxdN35cZjXnBraX5UR +fFHkePv4YwqmXNqrBOvSu+w2WdSDci+IKwJAcsPRc/jWmsrJW1q3Ha0hSf/WG/Bu +X7MPuXaKpP/DkzGoUmb8ks7yqj6XWnYkPNLjCc8izU5vRwIiyWBRf4mxMwJBAILa +NDvRS0rjwt6lJGv7zPZoqDc65VfrK2aNyHx2PgFyzwrEOtuF57bu7pnvEIxpLTeM +z26i6XVMeYXAWZMTloMCQBbpGgEERQpeUknLBqUHhg/wXF6+lFA+vEGnkY+Dwab2 +KCXFGd+SQ5GdUcEMe9isUH6DYj/6/yCDoFrXXmpQb+M= +-----END RSA PRIVATE KEY----- +`), + "ed25519": []byte(`-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACA+3f7hS7g5UWwXOGVTrMfhmxyrjqz7Sxxbx7I1j8DvvwAAAJhAFfkOQBX5 +DgAAAAtzc2gtZWQyNTUxOQAAACA+3f7hS7g5UWwXOGVTrMfhmxyrjqz7Sxxbx7I1j8Dvvw +AAAEAaYmXltfW6nhRo3iWGglRB48lYq0z0Q3I3KyrdutEr6j7d/uFLuDlRbBc4ZVOsx+Gb +HKuOrPtLHFvHsjWPwO+/AAAAE2dhcnRvbm1AZ2FydG9ubS14cHMBAg== +-----END OPENSSH PRIVATE KEY----- +`), + "user": []byte(`-----BEGIN EC PRIVATE KEY----- +MHcCAQEEILYCAeq8f7V4vSSypRw7pxy8yz3V5W4qg8kSC3zJhqpQoAoGCCqGSM49 +AwEHoUQDQgAEYcO2xNKiRUYOLEHM7VYAp57HNyKbOdYtHD83Z4hzNPVC4tM5mdGD +PLL8IEwvYu2wq+lpXfGQnNMbzYf9gspG0w== +-----END EC PRIVATE KEY----- +`), +} + +var PEMEncryptedKeys = []struct { + Name string + EncryptionKey string + PEMBytes []byte +}{ + 0: { + Name: "rsa-encrypted", + EncryptionKey: "r54-G0pher_t3st$", + PEMBytes: []byte(`-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,3E1714DE130BC5E81327F36564B05462 + +MqW88sud4fnWk/Jk3fkjh7ydu51ZkHLN5qlQgA4SkAXORPPMj2XvqZOv1v2LOgUV +dUevUn8PZK7a9zbZg4QShUSzwE5k6wdB7XKPyBgI39mJ79GBd2U4W3h6KT6jIdWA +goQpluxkrzr2/X602IaxLEre97FT9mpKC6zxKCLvyFWVIP9n3OSFS47cTTXyFr+l +7PdRhe60nn6jSBgUNk/Q1lAvEQ9fufdPwDYY93F1wyJ6lOr0F1+mzRrMbH67NyKs +rG8J1Fa7cIIre7ueKIAXTIne7OAWqpU9UDgQatDtZTbvA7ciqGsSFgiwwW13N+Rr +hN8MkODKs9cjtONxSKi05s206A3NDU6STtZ3KuPDjFE1gMJODotOuqSM+cxKfyFq +wxpk/CHYCDdMAVBSwxb/vraOHamylL4uCHpJdBHypzf2HABt+lS8Su23uAmL87DR +yvyCS/lmpuNTndef6qHPRkoW2EV3xqD3ovosGf7kgwGJUk2ZpCLVteqmYehKlZDK +r/Jy+J26ooI2jIg9bjvD1PZq+Mv+2dQ1RlDrPG3PB+rEixw6vBaL9x3jatCd4ej7 +XG7lb3qO9xFpLsx89tkEcvpGR+broSpUJ6Mu5LBCVmrvqHjvnDhrZVz1brMiQtU9 +iMZbgXqDLXHd6ERWygk7OTU03u+l1gs+KGMfmS0h0ZYw6KGVLgMnsoxqd6cFSKNB +8Ohk9ZTZGCiovlXBUepyu8wKat1k8YlHSfIHoRUJRhhcd7DrmojC+bcbMIZBU22T +Pl2ftVRGtcQY23lYd0NNKfebF7ncjuLWQGy+vZW+7cgfI6wPIbfYfP6g7QAutk6W +KQx0AoX5woZ6cNxtpIrymaVjSMRRBkKQrJKmRp3pC/lul5E5P2cueMs1fj4OHTbJ +lAUv88ywr+R+mRgYQlFW/XQ653f6DT4t6+njfO9oBcPrQDASZel3LjXLpjjYG/N5 ++BWnVexuJX9ika8HJiFl55oqaKb+WknfNhk5cPY+x7SDV9ywQeMiDZpr0ffeYAEP +LlwwiWRDYpO+uwXHSFF3+JjWwjhs8m8g99iFb7U93yKgBB12dCEPPa2ZeH9wUHMJ +sreYhNuq6f4iWWSXpzN45inQqtTi8jrJhuNLTT543ErW7DtntBO2rWMhff3aiXbn +Uy3qzZM1nPbuCGuBmP9L2dJ3Z5ifDWB4JmOyWY4swTZGt9AVmUxMIKdZpRONx8vz +I9u9nbVPGZBcou50Pa0qTLbkWsSL94MNXrARBxzhHC9Zs6XNEtwN7mOuii7uMkVc +adrxgknBH1J1N+NX/eTKzUwJuPvDtA+Z5ILWNN9wpZT/7ed8zEnKHPNUexyeT5g3 +uw9z9jH7ffGxFYlx87oiVPHGOrCXYZYW5uoZE31SCBkbtNuffNRJRKIFeipmpJ3P +7bpAG+kGHMelQH6b+5K1Qgsv4tpuSyKeTKpPFH9Av5nN4P1ZBm9N80tzbNWqjSJm +S7rYdHnuNEVnUGnRmEUMmVuYZnNBEVN/fP2m2SEwXcP3Uh7TiYlcWw10ygaGmOr7 +MvMLGkYgQ4Utwnd98mtqa0jr0hK2TcOSFir3AqVvXN3XJj4cVULkrXe4Im1laWgp +-----END RSA PRIVATE KEY----- +`), + }, + + 1: { + Name: "dsa-encrypted", + EncryptionKey: "qG0pher-dsa_t3st$", + PEMBytes: []byte(`-----BEGIN DSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,7CE7A6E4A647DC01AF860210B15ADE3E + +hvnBpI99Hceq/55pYRdOzBLntIEis02JFNXuLEydWL+RJBFDn7tA+vXec0ERJd6J +G8JXlSOAhmC2H4uK3q2xR8/Y3yL95n6OIcjvCBiLsV+o3jj1MYJmErxP6zRtq4w3 +JjIjGHWmaYFSxPKQ6e8fs74HEqaeMV9ONUoTtB+aISmgaBL15Fcoayg245dkBvVl +h5Kqspe7yvOBmzA3zjRuxmSCqKJmasXM7mqs3vIrMxZE3XPo1/fWKcPuExgpVQoT +HkJZEoIEIIPnPMwT2uYbFJSGgPJVMDT84xz7yvjCdhLmqrsXgs5Qw7Pw0i0c0BUJ +b7fDJ2UhdiwSckWGmIhTLlJZzr8K+JpjCDlP+REYBI5meB7kosBnlvCEHdw2EJkH +0QDc/2F4xlVrHOLbPRFyu1Oi2Gvbeoo9EsM/DThpd1hKAlb0sF5Y0y0d+owv0PnE +R/4X3HWfIdOHsDUvJ8xVWZ4BZk9Zk9qol045DcFCehpr/3hslCrKSZHakLt9GI58 +vVQJ4L0aYp5nloLfzhViZtKJXRLkySMKdzYkIlNmW1oVGl7tce5UCNI8Nok4j6yn +IiHM7GBn+0nJoKTXsOGMIBe3ulKlKVxLjEuk9yivh/8= +-----END DSA PRIVATE KEY----- +`), + }, +} diff --git a/vendor/golang.org/x/crypto/ssh/testdata_test.go b/vendor/golang.org/x/crypto/ssh/testdata_test.go new file mode 100644 index 0000000..2da8c79 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/testdata_test.go @@ -0,0 +1,63 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// IMPLEMENTATION NOTE: To avoid a package loop, this file is in three places: +// ssh/, ssh/agent, and ssh/test/. It should be kept in sync across all three +// instances. + +package ssh + +import ( + "crypto/rand" + "fmt" + + "golang.org/x/crypto/ssh/testdata" +) + +var ( + testPrivateKeys map[string]interface{} + testSigners map[string]Signer + testPublicKeys map[string]PublicKey +) + +func init() { + var err error + + n := len(testdata.PEMBytes) + testPrivateKeys = make(map[string]interface{}, n) + testSigners = make(map[string]Signer, n) + testPublicKeys = make(map[string]PublicKey, n) + for t, k := range testdata.PEMBytes { + testPrivateKeys[t], err = ParseRawPrivateKey(k) + if err != nil { + panic(fmt.Sprintf("Unable to parse test key %s: %v", t, err)) + } + testSigners[t], err = NewSignerFromKey(testPrivateKeys[t]) + if err != nil { + panic(fmt.Sprintf("Unable to create signer for test key %s: %v", t, err)) + } + testPublicKeys[t] = testSigners[t].PublicKey() + } + + // Create a cert and sign it for use in tests. + testCert := &Certificate{ + Nonce: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + ValidPrincipals: []string{"gopher1", "gopher2"}, // increases test coverage + ValidAfter: 0, // unix epoch + ValidBefore: CertTimeInfinity, // The end of currently representable time. + Reserved: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + Key: testPublicKeys["ecdsa"], + SignatureKey: testPublicKeys["rsa"], + Permissions: Permissions{ + CriticalOptions: map[string]string{}, + Extensions: map[string]string{}, + }, + } + testCert.SignCert(rand.Reader, testSigners["rsa"]) + testPrivateKeys["cert"] = testPrivateKeys["ecdsa"] + testSigners["cert"], err = NewCertSigner(testCert, testSigners["ecdsa"]) + if err != nil { + panic(fmt.Sprintf("Unable to create certificate signer: %v", err)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/transport.go b/vendor/golang.org/x/crypto/ssh/transport.go new file mode 100644 index 0000000..62fba62 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/transport.go @@ -0,0 +1,333 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bufio" + "errors" + "io" +) + +const ( + gcmCipherID = "aes128-gcm@openssh.com" + aes128cbcID = "aes128-cbc" + tripledescbcID = "3des-cbc" +) + +// packetConn represents a transport that implements packet based +// operations. +type packetConn interface { + // Encrypt and send a packet of data to the remote peer. + writePacket(packet []byte) error + + // Read a packet from the connection + readPacket() ([]byte, error) + + // Close closes the write-side of the connection. + Close() error +} + +// transport is the keyingTransport that implements the SSH packet +// protocol. +type transport struct { + reader connectionState + writer connectionState + + bufReader *bufio.Reader + bufWriter *bufio.Writer + rand io.Reader + + io.Closer +} + +// packetCipher represents a combination of SSH encryption/MAC +// protocol. A single instance should be used for one direction only. +type packetCipher interface { + // writePacket encrypts the packet and writes it to w. The + // contents of the packet are generally scrambled. + writePacket(seqnum uint32, w io.Writer, rand io.Reader, packet []byte) error + + // readPacket reads and decrypts a packet of data. The + // returned packet may be overwritten by future calls of + // readPacket. + readPacket(seqnum uint32, r io.Reader) ([]byte, error) +} + +// connectionState represents one side (read or write) of the +// connection. This is necessary because each direction has its own +// keys, and can even have its own algorithms +type connectionState struct { + packetCipher + seqNum uint32 + dir direction + pendingKeyChange chan packetCipher +} + +// prepareKeyChange sets up key material for a keychange. The key changes in +// both directions are triggered by reading and writing a msgNewKey packet +// respectively. +func (t *transport) prepareKeyChange(algs *algorithms, kexResult *kexResult) error { + if ciph, err := newPacketCipher(t.reader.dir, algs.r, kexResult); err != nil { + return err + } else { + t.reader.pendingKeyChange <- ciph + } + + if ciph, err := newPacketCipher(t.writer.dir, algs.w, kexResult); err != nil { + return err + } else { + t.writer.pendingKeyChange <- ciph + } + + return nil +} + +// Read and decrypt next packet. +func (t *transport) readPacket() ([]byte, error) { + return t.reader.readPacket(t.bufReader) +} + +func (s *connectionState) readPacket(r *bufio.Reader) ([]byte, error) { + packet, err := s.packetCipher.readPacket(s.seqNum, r) + s.seqNum++ + if err == nil && len(packet) == 0 { + err = errors.New("ssh: zero length packet") + } + + if len(packet) > 0 { + switch packet[0] { + case msgNewKeys: + select { + case cipher := <-s.pendingKeyChange: + s.packetCipher = cipher + default: + return nil, errors.New("ssh: got bogus newkeys message.") + } + + case msgDisconnect: + // Transform a disconnect message into an + // error. Since this is lowest level at which + // we interpret message types, doing it here + // ensures that we don't have to handle it + // elsewhere. + var msg disconnectMsg + if err := Unmarshal(packet, &msg); err != nil { + return nil, err + } + return nil, &msg + } + } + + // The packet may point to an internal buffer, so copy the + // packet out here. + fresh := make([]byte, len(packet)) + copy(fresh, packet) + + return fresh, err +} + +func (t *transport) writePacket(packet []byte) error { + return t.writer.writePacket(t.bufWriter, t.rand, packet) +} + +func (s *connectionState) writePacket(w *bufio.Writer, rand io.Reader, packet []byte) error { + changeKeys := len(packet) > 0 && packet[0] == msgNewKeys + + err := s.packetCipher.writePacket(s.seqNum, w, rand, packet) + if err != nil { + return err + } + if err = w.Flush(); err != nil { + return err + } + s.seqNum++ + if changeKeys { + select { + case cipher := <-s.pendingKeyChange: + s.packetCipher = cipher + default: + panic("ssh: no key material for msgNewKeys") + } + } + return err +} + +func newTransport(rwc io.ReadWriteCloser, rand io.Reader, isClient bool) *transport { + t := &transport{ + bufReader: bufio.NewReader(rwc), + bufWriter: bufio.NewWriter(rwc), + rand: rand, + reader: connectionState{ + packetCipher: &streamPacketCipher{cipher: noneCipher{}}, + pendingKeyChange: make(chan packetCipher, 1), + }, + writer: connectionState{ + packetCipher: &streamPacketCipher{cipher: noneCipher{}}, + pendingKeyChange: make(chan packetCipher, 1), + }, + Closer: rwc, + } + if isClient { + t.reader.dir = serverKeys + t.writer.dir = clientKeys + } else { + t.reader.dir = clientKeys + t.writer.dir = serverKeys + } + + return t +} + +type direction struct { + ivTag []byte + keyTag []byte + macKeyTag []byte +} + +var ( + serverKeys = direction{[]byte{'B'}, []byte{'D'}, []byte{'F'}} + clientKeys = direction{[]byte{'A'}, []byte{'C'}, []byte{'E'}} +) + +// generateKeys generates key material for IV, MAC and encryption. +func generateKeys(d direction, algs directionAlgorithms, kex *kexResult) (iv, key, macKey []byte) { + cipherMode := cipherModes[algs.Cipher] + macMode := macModes[algs.MAC] + + iv = make([]byte, cipherMode.ivSize) + key = make([]byte, cipherMode.keySize) + macKey = make([]byte, macMode.keySize) + + generateKeyMaterial(iv, d.ivTag, kex) + generateKeyMaterial(key, d.keyTag, kex) + generateKeyMaterial(macKey, d.macKeyTag, kex) + return +} + +// setupKeys sets the cipher and MAC keys from kex.K, kex.H and sessionId, as +// described in RFC 4253, section 6.4. direction should either be serverKeys +// (to setup server->client keys) or clientKeys (for client->server keys). +func newPacketCipher(d direction, algs directionAlgorithms, kex *kexResult) (packetCipher, error) { + iv, key, macKey := generateKeys(d, algs, kex) + + if algs.Cipher == gcmCipherID { + return newGCMCipher(iv, key, macKey) + } + + if algs.Cipher == aes128cbcID { + return newAESCBCCipher(iv, key, macKey, algs) + } + + if algs.Cipher == tripledescbcID { + return newTripleDESCBCCipher(iv, key, macKey, algs) + } + + c := &streamPacketCipher{ + mac: macModes[algs.MAC].new(macKey), + } + c.macResult = make([]byte, c.mac.Size()) + + var err error + c.cipher, err = cipherModes[algs.Cipher].createStream(key, iv) + if err != nil { + return nil, err + } + + return c, nil +} + +// generateKeyMaterial fills out with key material generated from tag, K, H +// and sessionId, as specified in RFC 4253, section 7.2. +func generateKeyMaterial(out, tag []byte, r *kexResult) { + var digestsSoFar []byte + + h := r.Hash.New() + for len(out) > 0 { + h.Reset() + h.Write(r.K) + h.Write(r.H) + + if len(digestsSoFar) == 0 { + h.Write(tag) + h.Write(r.SessionID) + } else { + h.Write(digestsSoFar) + } + + digest := h.Sum(nil) + n := copy(out, digest) + out = out[n:] + if len(out) > 0 { + digestsSoFar = append(digestsSoFar, digest...) + } + } +} + +const packageVersion = "SSH-2.0-Go" + +// Sends and receives a version line. The versionLine string should +// be US ASCII, start with "SSH-2.0-", and should not include a +// newline. exchangeVersions returns the other side's version line. +func exchangeVersions(rw io.ReadWriter, versionLine []byte) (them []byte, err error) { + // Contrary to the RFC, we do not ignore lines that don't + // start with "SSH-2.0-" to make the library usable with + // nonconforming servers. + for _, c := range versionLine { + // The spec disallows non US-ASCII chars, and + // specifically forbids null chars. + if c < 32 { + return nil, errors.New("ssh: junk character in version line") + } + } + if _, err = rw.Write(append(versionLine, '\r', '\n')); err != nil { + return + } + + them, err = readVersion(rw) + return them, err +} + +// maxVersionStringBytes is the maximum number of bytes that we'll +// accept as a version string. RFC 4253 section 4.2 limits this at 255 +// chars +const maxVersionStringBytes = 255 + +// Read version string as specified by RFC 4253, section 4.2. +func readVersion(r io.Reader) ([]byte, error) { + versionString := make([]byte, 0, 64) + var ok bool + var buf [1]byte + + for len(versionString) < maxVersionStringBytes { + _, err := io.ReadFull(r, buf[:]) + if err != nil { + return nil, err + } + // The RFC says that the version should be terminated with \r\n + // but several SSH servers actually only send a \n. + if buf[0] == '\n' { + ok = true + break + } + + // non ASCII chars are disallowed, but we are lenient, + // since Go doesn't use null-terminated strings. + + // The RFC allows a comment after a space, however, + // all of it (version and comments) goes into the + // session hash. + versionString = append(versionString, buf[0]) + } + + if !ok { + return nil, errors.New("ssh: overflow reading version string") + } + + // There might be a '\r' on the end which we should remove. + if len(versionString) > 0 && versionString[len(versionString)-1] == '\r' { + versionString = versionString[:len(versionString)-1] + } + return versionString, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/transport_test.go b/vendor/golang.org/x/crypto/ssh/transport_test.go new file mode 100644 index 0000000..92d83ab --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/transport_test.go @@ -0,0 +1,109 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/rand" + "encoding/binary" + "strings" + "testing" +) + +func TestReadVersion(t *testing.T) { + longversion := strings.Repeat("SSH-2.0-bla", 50)[:253] + cases := map[string]string{ + "SSH-2.0-bla\r\n": "SSH-2.0-bla", + "SSH-2.0-bla\n": "SSH-2.0-bla", + longversion + "\r\n": longversion, + } + + for in, want := range cases { + result, err := readVersion(bytes.NewBufferString(in)) + if err != nil { + t.Errorf("readVersion(%q): %s", in, err) + } + got := string(result) + if got != want { + t.Errorf("got %q, want %q", got, want) + } + } +} + +func TestReadVersionError(t *testing.T) { + longversion := strings.Repeat("SSH-2.0-bla", 50)[:253] + cases := []string{ + longversion + "too-long\r\n", + } + for _, in := range cases { + if _, err := readVersion(bytes.NewBufferString(in)); err == nil { + t.Errorf("readVersion(%q) should have failed", in) + } + } +} + +func TestExchangeVersionsBasic(t *testing.T) { + v := "SSH-2.0-bla" + buf := bytes.NewBufferString(v + "\r\n") + them, err := exchangeVersions(buf, []byte("xyz")) + if err != nil { + t.Errorf("exchangeVersions: %v", err) + } + + if want := "SSH-2.0-bla"; string(them) != want { + t.Errorf("got %q want %q for our version", them, want) + } +} + +func TestExchangeVersions(t *testing.T) { + cases := []string{ + "not\x000allowed", + "not allowed\n", + } + for _, c := range cases { + buf := bytes.NewBufferString("SSH-2.0-bla\r\n") + if _, err := exchangeVersions(buf, []byte(c)); err == nil { + t.Errorf("exchangeVersions(%q): should have failed", c) + } + } +} + +type closerBuffer struct { + bytes.Buffer +} + +func (b *closerBuffer) Close() error { + return nil +} + +func TestTransportMaxPacketWrite(t *testing.T) { + buf := &closerBuffer{} + tr := newTransport(buf, rand.Reader, true) + huge := make([]byte, maxPacket+1) + err := tr.writePacket(huge) + if err == nil { + t.Errorf("transport accepted write for a huge packet.") + } +} + +func TestTransportMaxPacketReader(t *testing.T) { + var header [5]byte + huge := make([]byte, maxPacket+128) + binary.BigEndian.PutUint32(header[0:], uint32(len(huge))) + // padding. + header[4] = 0 + + buf := &closerBuffer{} + buf.Write(header[:]) + buf.Write(huge) + + tr := newTransport(buf, rand.Reader, true) + _, err := tr.readPacket() + if err == nil { + t.Errorf("transport succeeded reading huge packet.") + } else if !strings.Contains(err.Error(), "large") { + t.Errorf("got %q, should mention %q", err.Error(), "large") + } +} diff --git a/vendor/golang.org/x/crypto/tea/cipher.go b/vendor/golang.org/x/crypto/tea/cipher.go new file mode 100644 index 0000000..9c13d12 --- /dev/null +++ b/vendor/golang.org/x/crypto/tea/cipher.go @@ -0,0 +1,109 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tea implements the TEA algorithm, as defined in Needham and +// Wheeler's 1994 technical report, “TEA, a Tiny Encryption Algorithmâ€. See +// http://www.cix.co.uk/~klockstone/tea.pdf for details. + +package tea + +import ( + "crypto/cipher" + "encoding/binary" + "errors" +) + +const ( + // BlockSize is the size of a TEA block, in bytes. + BlockSize = 8 + + // KeySize is the size of a TEA key, in bytes. + KeySize = 16 + + // delta is the TEA key schedule constant. + delta = 0x9e3779b9 + + // numRounds is the standard number of rounds in TEA. + numRounds = 64 +) + +// tea is an instance of the TEA cipher with a particular key. +type tea struct { + key [16]byte + rounds int +} + +// NewCipher returns an instance of the TEA cipher with the standard number of +// rounds. The key argument must be 16 bytes long. +func NewCipher(key []byte) (cipher.Block, error) { + return NewCipherWithRounds(key, numRounds) +} + +// NewCipherWithRounds returns an instance of the TEA cipher with a given +// number of rounds, which must be even. The key argument must be 16 bytes +// long. +func NewCipherWithRounds(key []byte, rounds int) (cipher.Block, error) { + if len(key) != 16 { + return nil, errors.New("tea: incorrect key size") + } + + if rounds&1 != 0 { + return nil, errors.New("tea: odd number of rounds specified") + } + + c := &tea{ + rounds: rounds, + } + copy(c.key[:], key) + + return c, nil +} + +// BlockSize returns the TEA block size, which is eight bytes. It is necessary +// to satisfy the Block interface in the package "crypto/cipher". +func (*tea) BlockSize() int { + return BlockSize +} + +// Encrypt encrypts the 8 byte buffer src using the key in t and stores the +// result in dst. Note that for amounts of data larger than a block, it is not +// safe to just call Encrypt on successive blocks; instead, use an encryption +// mode like CBC (see crypto/cipher/cbc.go). +func (t *tea) Encrypt(dst, src []byte) { + e := binary.BigEndian + v0, v1 := e.Uint32(src), e.Uint32(src[4:]) + k0, k1, k2, k3 := e.Uint32(t.key[0:]), e.Uint32(t.key[4:]), e.Uint32(t.key[8:]), e.Uint32(t.key[12:]) + + sum := uint32(0) + delta := uint32(delta) + + for i := 0; i < t.rounds/2; i++ { + sum += delta + v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1) + v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3) + } + + e.PutUint32(dst, v0) + e.PutUint32(dst[4:], v1) +} + +// Decrypt decrypts the 8 byte buffer src using the key in t and stores the +// result in dst. +func (t *tea) Decrypt(dst, src []byte) { + e := binary.BigEndian + v0, v1 := e.Uint32(src), e.Uint32(src[4:]) + k0, k1, k2, k3 := e.Uint32(t.key[0:]), e.Uint32(t.key[4:]), e.Uint32(t.key[8:]), e.Uint32(t.key[12:]) + + delta := uint32(delta) + sum := delta * uint32(t.rounds/2) // in general, sum = delta * n + + for i := 0; i < t.rounds/2; i++ { + v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3) + v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1) + sum -= delta + } + + e.PutUint32(dst, v0) + e.PutUint32(dst[4:], v1) +} diff --git a/vendor/golang.org/x/crypto/tea/tea_test.go b/vendor/golang.org/x/crypto/tea/tea_test.go new file mode 100644 index 0000000..eb98d1e --- /dev/null +++ b/vendor/golang.org/x/crypto/tea/tea_test.go @@ -0,0 +1,93 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package tea + +import ( + "bytes" + "testing" +) + +// A sample test key for when we just want to initialize a cipher +var testKey = []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF} + +// Test that the block size for tea is correct +func TestBlocksize(t *testing.T) { + c, err := NewCipher(testKey) + if err != nil { + t.Fatalf("NewCipher returned error: %s", err) + } + + if result := c.BlockSize(); result != BlockSize { + t.Errorf("cipher.BlockSize returned %d, but expected %d", result, BlockSize) + } +} + +// Test that invalid key sizes return an error +func TestInvalidKeySize(t *testing.T) { + var key [KeySize + 1]byte + + if _, err := NewCipher(key[:]); err == nil { + t.Errorf("invalid key size %d didn't result in an error.", len(key)) + } + + if _, err := NewCipher(key[:KeySize-1]); err == nil { + t.Errorf("invalid key size %d didn't result in an error.", KeySize-1) + } +} + +// Test Vectors +type teaTest struct { + rounds int + key []byte + plaintext []byte + ciphertext []byte +} + +var teaTests = []teaTest{ + // These were sourced from https://github.com/froydnj/ironclad/blob/master/testing/test-vectors/tea.testvec + { + numRounds, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x41, 0xea, 0x3a, 0x0a, 0x94, 0xba, 0xa9, 0x40}, + }, + { + numRounds, + []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, + []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, + []byte{0x31, 0x9b, 0xbe, 0xfb, 0x01, 0x6a, 0xbd, 0xb2}, + }, + { + 16, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xed, 0x28, 0x5d, 0xa1, 0x45, 0x5b, 0x33, 0xc1}, + }, +} + +// Test encryption +func TestCipherEncrypt(t *testing.T) { + // Test encryption with standard 64 rounds + for i, test := range teaTests { + c, err := NewCipherWithRounds(test.key, test.rounds) + if err != nil { + t.Fatalf("#%d: NewCipher returned error: %s", i, err) + } + + var ciphertext [BlockSize]byte + c.Encrypt(ciphertext[:], test.plaintext) + + if !bytes.Equal(ciphertext[:], test.ciphertext) { + t.Errorf("#%d: incorrect ciphertext. Got %x, wanted %x", i, ciphertext, test.ciphertext) + } + + var plaintext2 [BlockSize]byte + c.Decrypt(plaintext2[:], ciphertext[:]) + + if !bytes.Equal(plaintext2[:], test.plaintext) { + t.Errorf("#%d: incorrect plaintext. Got %x, wanted %x", i, plaintext2, test.plaintext) + } + } +} diff --git a/vendor/golang.org/x/crypto/twofish/twofish.go b/vendor/golang.org/x/crypto/twofish/twofish.go new file mode 100644 index 0000000..376fa0e --- /dev/null +++ b/vendor/golang.org/x/crypto/twofish/twofish.go @@ -0,0 +1,342 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package twofish implements Bruce Schneier's Twofish encryption algorithm. +package twofish // import "golang.org/x/crypto/twofish" + +// Twofish is defined in http://www.schneier.com/paper-twofish-paper.pdf [TWOFISH] + +// This code is a port of the LibTom C implementation. +// See http://libtom.org/?page=features&newsitems=5&whatfile=crypt. +// LibTomCrypt is free for all purposes under the public domain. +// It was heavily inspired by the go blowfish package. + +import "strconv" + +// BlockSize is the constant block size of Twofish. +const BlockSize = 16 + +const mdsPolynomial = 0x169 // x^8 + x^6 + x^5 + x^3 + 1, see [TWOFISH] 4.2 +const rsPolynomial = 0x14d // x^8 + x^6 + x^3 + x^2 + 1, see [TWOFISH] 4.3 + +// A Cipher is an instance of Twofish encryption using a particular key. +type Cipher struct { + s [4][256]uint32 + k [40]uint32 +} + +type KeySizeError int + +func (k KeySizeError) Error() string { + return "crypto/twofish: invalid key size " + strconv.Itoa(int(k)) +} + +// NewCipher creates and returns a Cipher. +// The key argument should be the Twofish key, 16, 24 or 32 bytes. +func NewCipher(key []byte) (*Cipher, error) { + keylen := len(key) + + if keylen != 16 && keylen != 24 && keylen != 32 { + return nil, KeySizeError(keylen) + } + + // k is the number of 64 bit words in key + k := keylen / 8 + + // Create the S[..] words + var S [4 * 4]byte + for i := 0; i < k; i++ { + // Computes [y0 y1 y2 y3] = rs . [x0 x1 x2 x3 x4 x5 x6 x7] + for j, rsRow := range rs { + for k, rsVal := range rsRow { + S[4*i+j] ^= gfMult(key[8*i+k], rsVal, rsPolynomial) + } + } + } + + // Calculate subkeys + c := new(Cipher) + var tmp [4]byte + for i := byte(0); i < 20; i++ { + // A = h(p * 2x, Me) + for j := range tmp { + tmp[j] = 2 * i + } + A := h(tmp[:], key, 0) + + // B = rolc(h(p * (2x + 1), Mo), 8) + for j := range tmp { + tmp[j] = 2*i + 1 + } + B := h(tmp[:], key, 1) + B = rol(B, 8) + + c.k[2*i] = A + B + + // K[2i+1] = (A + 2B) <<< 9 + c.k[2*i+1] = rol(2*B+A, 9) + } + + // Calculate sboxes + switch k { + case 2: + for i := range c.s[0] { + c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][byte(i)]^S[0]]^S[4]], 0) + c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][byte(i)]^S[1]]^S[5]], 1) + c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][byte(i)]^S[2]]^S[6]], 2) + c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][byte(i)]^S[3]]^S[7]], 3) + } + case 3: + for i := range c.s[0] { + c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][sbox[1][byte(i)]^S[0]]^S[4]]^S[8]], 0) + c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][sbox[1][byte(i)]^S[1]]^S[5]]^S[9]], 1) + c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][sbox[0][byte(i)]^S[2]]^S[6]]^S[10]], 2) + c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][sbox[0][byte(i)]^S[3]]^S[7]]^S[11]], 3) + } + default: + for i := range c.s[0] { + c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][sbox[1][sbox[1][byte(i)]^S[0]]^S[4]]^S[8]]^S[12]], 0) + c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][sbox[1][sbox[0][byte(i)]^S[1]]^S[5]]^S[9]]^S[13]], 1) + c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][sbox[0][sbox[0][byte(i)]^S[2]]^S[6]]^S[10]]^S[14]], 2) + c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][sbox[0][sbox[1][byte(i)]^S[3]]^S[7]]^S[11]]^S[15]], 3) + } + } + + return c, nil +} + +// BlockSize returns the Twofish block size, 16 bytes. +func (c *Cipher) BlockSize() int { return BlockSize } + +// store32l stores src in dst in little-endian form. +func store32l(dst []byte, src uint32) { + dst[0] = byte(src) + dst[1] = byte(src >> 8) + dst[2] = byte(src >> 16) + dst[3] = byte(src >> 24) + return +} + +// load32l reads a little-endian uint32 from src. +func load32l(src []byte) uint32 { + return uint32(src[0]) | uint32(src[1])<<8 | uint32(src[2])<<16 | uint32(src[3])<<24 +} + +// rol returns x after a left circular rotation of y bits. +func rol(x, y uint32) uint32 { + return (x << (y & 31)) | (x >> (32 - (y & 31))) +} + +// ror returns x after a right circular rotation of y bits. +func ror(x, y uint32) uint32 { + return (x >> (y & 31)) | (x << (32 - (y & 31))) +} + +// The RS matrix. See [TWOFISH] 4.3 +var rs = [4][8]byte{ + {0x01, 0xA4, 0x55, 0x87, 0x5A, 0x58, 0xDB, 0x9E}, + {0xA4, 0x56, 0x82, 0xF3, 0x1E, 0xC6, 0x68, 0xE5}, + {0x02, 0xA1, 0xFC, 0xC1, 0x47, 0xAE, 0x3D, 0x19}, + {0xA4, 0x55, 0x87, 0x5A, 0x58, 0xDB, 0x9E, 0x03}, +} + +// sbox tables +var sbox = [2][256]byte{ + { + 0xa9, 0x67, 0xb3, 0xe8, 0x04, 0xfd, 0xa3, 0x76, 0x9a, 0x92, 0x80, 0x78, 0xe4, 0xdd, 0xd1, 0x38, + 0x0d, 0xc6, 0x35, 0x98, 0x18, 0xf7, 0xec, 0x6c, 0x43, 0x75, 0x37, 0x26, 0xfa, 0x13, 0x94, 0x48, + 0xf2, 0xd0, 0x8b, 0x30, 0x84, 0x54, 0xdf, 0x23, 0x19, 0x5b, 0x3d, 0x59, 0xf3, 0xae, 0xa2, 0x82, + 0x63, 0x01, 0x83, 0x2e, 0xd9, 0x51, 0x9b, 0x7c, 0xa6, 0xeb, 0xa5, 0xbe, 0x16, 0x0c, 0xe3, 0x61, + 0xc0, 0x8c, 0x3a, 0xf5, 0x73, 0x2c, 0x25, 0x0b, 0xbb, 0x4e, 0x89, 0x6b, 0x53, 0x6a, 0xb4, 0xf1, + 0xe1, 0xe6, 0xbd, 0x45, 0xe2, 0xf4, 0xb6, 0x66, 0xcc, 0x95, 0x03, 0x56, 0xd4, 0x1c, 0x1e, 0xd7, + 0xfb, 0xc3, 0x8e, 0xb5, 0xe9, 0xcf, 0xbf, 0xba, 0xea, 0x77, 0x39, 0xaf, 0x33, 0xc9, 0x62, 0x71, + 0x81, 0x79, 0x09, 0xad, 0x24, 0xcd, 0xf9, 0xd8, 0xe5, 0xc5, 0xb9, 0x4d, 0x44, 0x08, 0x86, 0xe7, + 0xa1, 0x1d, 0xaa, 0xed, 0x06, 0x70, 0xb2, 0xd2, 0x41, 0x7b, 0xa0, 0x11, 0x31, 0xc2, 0x27, 0x90, + 0x20, 0xf6, 0x60, 0xff, 0x96, 0x5c, 0xb1, 0xab, 0x9e, 0x9c, 0x52, 0x1b, 0x5f, 0x93, 0x0a, 0xef, + 0x91, 0x85, 0x49, 0xee, 0x2d, 0x4f, 0x8f, 0x3b, 0x47, 0x87, 0x6d, 0x46, 0xd6, 0x3e, 0x69, 0x64, + 0x2a, 0xce, 0xcb, 0x2f, 0xfc, 0x97, 0x05, 0x7a, 0xac, 0x7f, 0xd5, 0x1a, 0x4b, 0x0e, 0xa7, 0x5a, + 0x28, 0x14, 0x3f, 0x29, 0x88, 0x3c, 0x4c, 0x02, 0xb8, 0xda, 0xb0, 0x17, 0x55, 0x1f, 0x8a, 0x7d, + 0x57, 0xc7, 0x8d, 0x74, 0xb7, 0xc4, 0x9f, 0x72, 0x7e, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, + 0x6e, 0x50, 0xde, 0x68, 0x65, 0xbc, 0xdb, 0xf8, 0xc8, 0xa8, 0x2b, 0x40, 0xdc, 0xfe, 0x32, 0xa4, + 0xca, 0x10, 0x21, 0xf0, 0xd3, 0x5d, 0x0f, 0x00, 0x6f, 0x9d, 0x36, 0x42, 0x4a, 0x5e, 0xc1, 0xe0, + }, + { + 0x75, 0xf3, 0xc6, 0xf4, 0xdb, 0x7b, 0xfb, 0xc8, 0x4a, 0xd3, 0xe6, 0x6b, 0x45, 0x7d, 0xe8, 0x4b, + 0xd6, 0x32, 0xd8, 0xfd, 0x37, 0x71, 0xf1, 0xe1, 0x30, 0x0f, 0xf8, 0x1b, 0x87, 0xfa, 0x06, 0x3f, + 0x5e, 0xba, 0xae, 0x5b, 0x8a, 0x00, 0xbc, 0x9d, 0x6d, 0xc1, 0xb1, 0x0e, 0x80, 0x5d, 0xd2, 0xd5, + 0xa0, 0x84, 0x07, 0x14, 0xb5, 0x90, 0x2c, 0xa3, 0xb2, 0x73, 0x4c, 0x54, 0x92, 0x74, 0x36, 0x51, + 0x38, 0xb0, 0xbd, 0x5a, 0xfc, 0x60, 0x62, 0x96, 0x6c, 0x42, 0xf7, 0x10, 0x7c, 0x28, 0x27, 0x8c, + 0x13, 0x95, 0x9c, 0xc7, 0x24, 0x46, 0x3b, 0x70, 0xca, 0xe3, 0x85, 0xcb, 0x11, 0xd0, 0x93, 0xb8, + 0xa6, 0x83, 0x20, 0xff, 0x9f, 0x77, 0xc3, 0xcc, 0x03, 0x6f, 0x08, 0xbf, 0x40, 0xe7, 0x2b, 0xe2, + 0x79, 0x0c, 0xaa, 0x82, 0x41, 0x3a, 0xea, 0xb9, 0xe4, 0x9a, 0xa4, 0x97, 0x7e, 0xda, 0x7a, 0x17, + 0x66, 0x94, 0xa1, 0x1d, 0x3d, 0xf0, 0xde, 0xb3, 0x0b, 0x72, 0xa7, 0x1c, 0xef, 0xd1, 0x53, 0x3e, + 0x8f, 0x33, 0x26, 0x5f, 0xec, 0x76, 0x2a, 0x49, 0x81, 0x88, 0xee, 0x21, 0xc4, 0x1a, 0xeb, 0xd9, + 0xc5, 0x39, 0x99, 0xcd, 0xad, 0x31, 0x8b, 0x01, 0x18, 0x23, 0xdd, 0x1f, 0x4e, 0x2d, 0xf9, 0x48, + 0x4f, 0xf2, 0x65, 0x8e, 0x78, 0x5c, 0x58, 0x19, 0x8d, 0xe5, 0x98, 0x57, 0x67, 0x7f, 0x05, 0x64, + 0xaf, 0x63, 0xb6, 0xfe, 0xf5, 0xb7, 0x3c, 0xa5, 0xce, 0xe9, 0x68, 0x44, 0xe0, 0x4d, 0x43, 0x69, + 0x29, 0x2e, 0xac, 0x15, 0x59, 0xa8, 0x0a, 0x9e, 0x6e, 0x47, 0xdf, 0x34, 0x35, 0x6a, 0xcf, 0xdc, + 0x22, 0xc9, 0xc0, 0x9b, 0x89, 0xd4, 0xed, 0xab, 0x12, 0xa2, 0x0d, 0x52, 0xbb, 0x02, 0x2f, 0xa9, + 0xd7, 0x61, 0x1e, 0xb4, 0x50, 0x04, 0xf6, 0xc2, 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xbe, 0x91, + }, +} + +// gfMult returns a·b in GF(2^8)/p +func gfMult(a, b byte, p uint32) byte { + B := [2]uint32{0, uint32(b)} + P := [2]uint32{0, p} + var result uint32 + + // branchless GF multiplier + for i := 0; i < 7; i++ { + result ^= B[a&1] + a >>= 1 + B[1] = P[B[1]>>7] ^ (B[1] << 1) + } + result ^= B[a&1] + return byte(result) +} + +// mdsColumnMult calculates y{col} where [y0 y1 y2 y3] = MDS · [x0] +func mdsColumnMult(in byte, col int) uint32 { + mul01 := in + mul5B := gfMult(in, 0x5B, mdsPolynomial) + mulEF := gfMult(in, 0xEF, mdsPolynomial) + + switch col { + case 0: + return uint32(mul01) | uint32(mul5B)<<8 | uint32(mulEF)<<16 | uint32(mulEF)<<24 + case 1: + return uint32(mulEF) | uint32(mulEF)<<8 | uint32(mul5B)<<16 | uint32(mul01)<<24 + case 2: + return uint32(mul5B) | uint32(mulEF)<<8 | uint32(mul01)<<16 | uint32(mulEF)<<24 + case 3: + return uint32(mul5B) | uint32(mul01)<<8 | uint32(mulEF)<<16 | uint32(mul5B)<<24 + } + + panic("unreachable") +} + +// h implements the S-box generation function. See [TWOFISH] 4.3.5 +func h(in, key []byte, offset int) uint32 { + var y [4]byte + for x := range y { + y[x] = in[x] + } + switch len(key) / 8 { + case 4: + y[0] = sbox[1][y[0]] ^ key[4*(6+offset)+0] + y[1] = sbox[0][y[1]] ^ key[4*(6+offset)+1] + y[2] = sbox[0][y[2]] ^ key[4*(6+offset)+2] + y[3] = sbox[1][y[3]] ^ key[4*(6+offset)+3] + fallthrough + case 3: + y[0] = sbox[1][y[0]] ^ key[4*(4+offset)+0] + y[1] = sbox[1][y[1]] ^ key[4*(4+offset)+1] + y[2] = sbox[0][y[2]] ^ key[4*(4+offset)+2] + y[3] = sbox[0][y[3]] ^ key[4*(4+offset)+3] + fallthrough + case 2: + y[0] = sbox[1][sbox[0][sbox[0][y[0]]^key[4*(2+offset)+0]]^key[4*(0+offset)+0]] + y[1] = sbox[0][sbox[0][sbox[1][y[1]]^key[4*(2+offset)+1]]^key[4*(0+offset)+1]] + y[2] = sbox[1][sbox[1][sbox[0][y[2]]^key[4*(2+offset)+2]]^key[4*(0+offset)+2]] + y[3] = sbox[0][sbox[1][sbox[1][y[3]]^key[4*(2+offset)+3]]^key[4*(0+offset)+3]] + } + // [y0 y1 y2 y3] = MDS . [x0 x1 x2 x3] + var mdsMult uint32 + for i := range y { + mdsMult ^= mdsColumnMult(y[i], i) + } + return mdsMult +} + +// Encrypt encrypts a 16-byte block from src to dst, which may overlap. +// Note that for amounts of data larger than a block, +// it is not safe to just call Encrypt on successive blocks; +// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). +func (c *Cipher) Encrypt(dst, src []byte) { + S1 := c.s[0] + S2 := c.s[1] + S3 := c.s[2] + S4 := c.s[3] + + // Load input + ia := load32l(src[0:4]) + ib := load32l(src[4:8]) + ic := load32l(src[8:12]) + id := load32l(src[12:16]) + + // Pre-whitening + ia ^= c.k[0] + ib ^= c.k[1] + ic ^= c.k[2] + id ^= c.k[3] + + for i := 0; i < 8; i++ { + k := c.k[8+i*4 : 12+i*4] + t2 := S2[byte(ib)] ^ S3[byte(ib>>8)] ^ S4[byte(ib>>16)] ^ S1[byte(ib>>24)] + t1 := S1[byte(ia)] ^ S2[byte(ia>>8)] ^ S3[byte(ia>>16)] ^ S4[byte(ia>>24)] + t2 + ic = ror(ic^(t1+k[0]), 1) + id = rol(id, 1) ^ (t2 + t1 + k[1]) + + t2 = S2[byte(id)] ^ S3[byte(id>>8)] ^ S4[byte(id>>16)] ^ S1[byte(id>>24)] + t1 = S1[byte(ic)] ^ S2[byte(ic>>8)] ^ S3[byte(ic>>16)] ^ S4[byte(ic>>24)] + t2 + ia = ror(ia^(t1+k[2]), 1) + ib = rol(ib, 1) ^ (t2 + t1 + k[3]) + } + + // Output with "undo last swap" + ta := ic ^ c.k[4] + tb := id ^ c.k[5] + tc := ia ^ c.k[6] + td := ib ^ c.k[7] + + store32l(dst[0:4], ta) + store32l(dst[4:8], tb) + store32l(dst[8:12], tc) + store32l(dst[12:16], td) +} + +// Decrypt decrypts a 16-byte block from src to dst, which may overlap. +func (c *Cipher) Decrypt(dst, src []byte) { + S1 := c.s[0] + S2 := c.s[1] + S3 := c.s[2] + S4 := c.s[3] + + // Load input + ta := load32l(src[0:4]) + tb := load32l(src[4:8]) + tc := load32l(src[8:12]) + td := load32l(src[12:16]) + + // Undo undo final swap + ia := tc ^ c.k[6] + ib := td ^ c.k[7] + ic := ta ^ c.k[4] + id := tb ^ c.k[5] + + for i := 8; i > 0; i-- { + k := c.k[4+i*4 : 8+i*4] + t2 := S2[byte(id)] ^ S3[byte(id>>8)] ^ S4[byte(id>>16)] ^ S1[byte(id>>24)] + t1 := S1[byte(ic)] ^ S2[byte(ic>>8)] ^ S3[byte(ic>>16)] ^ S4[byte(ic>>24)] + t2 + ia = rol(ia, 1) ^ (t1 + k[2]) + ib = ror(ib^(t2+t1+k[3]), 1) + + t2 = S2[byte(ib)] ^ S3[byte(ib>>8)] ^ S4[byte(ib>>16)] ^ S1[byte(ib>>24)] + t1 = S1[byte(ia)] ^ S2[byte(ia>>8)] ^ S3[byte(ia>>16)] ^ S4[byte(ia>>24)] + t2 + ic = rol(ic, 1) ^ (t1 + k[0]) + id = ror(id^(t2+t1+k[1]), 1) + } + + // Undo pre-whitening + ia ^= c.k[0] + ib ^= c.k[1] + ic ^= c.k[2] + id ^= c.k[3] + + store32l(dst[0:4], ia) + store32l(dst[4:8], ib) + store32l(dst[8:12], ic) + store32l(dst[12:16], id) +} diff --git a/vendor/golang.org/x/crypto/twofish/twofish_test.go b/vendor/golang.org/x/crypto/twofish/twofish_test.go new file mode 100644 index 0000000..303081f --- /dev/null +++ b/vendor/golang.org/x/crypto/twofish/twofish_test.go @@ -0,0 +1,129 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package twofish + +import ( + "bytes" + "testing" +) + +var qbox = [2][4][16]byte{ + { + {0x8, 0x1, 0x7, 0xD, 0x6, 0xF, 0x3, 0x2, 0x0, 0xB, 0x5, 0x9, 0xE, 0xC, 0xA, 0x4}, + {0xE, 0xC, 0xB, 0x8, 0x1, 0x2, 0x3, 0x5, 0xF, 0x4, 0xA, 0x6, 0x7, 0x0, 0x9, 0xD}, + {0xB, 0xA, 0x5, 0xE, 0x6, 0xD, 0x9, 0x0, 0xC, 0x8, 0xF, 0x3, 0x2, 0x4, 0x7, 0x1}, + {0xD, 0x7, 0xF, 0x4, 0x1, 0x2, 0x6, 0xE, 0x9, 0xB, 0x3, 0x0, 0x8, 0x5, 0xC, 0xA}, + }, + { + {0x2, 0x8, 0xB, 0xD, 0xF, 0x7, 0x6, 0xE, 0x3, 0x1, 0x9, 0x4, 0x0, 0xA, 0xC, 0x5}, + {0x1, 0xE, 0x2, 0xB, 0x4, 0xC, 0x3, 0x7, 0x6, 0xD, 0xA, 0x5, 0xF, 0x9, 0x0, 0x8}, + {0x4, 0xC, 0x7, 0x5, 0x1, 0x6, 0x9, 0xA, 0x0, 0xE, 0xD, 0x8, 0x2, 0xB, 0x3, 0xF}, + {0xB, 0x9, 0x5, 0x1, 0xC, 0x3, 0xD, 0xE, 0x6, 0x4, 0x7, 0xF, 0x2, 0x0, 0x8, 0xA}, + }, +} + +// genSbox generates the variable sbox +func genSbox(qi int, x byte) byte { + a0, b0 := x/16, x%16 + for i := 0; i < 2; i++ { + a1 := a0 ^ b0 + b1 := (a0 ^ ((b0 << 3) | (b0 >> 1)) ^ (a0 << 3)) & 15 + a0 = qbox[qi][2*i][a1] + b0 = qbox[qi][2*i+1][b1] + } + return (b0 << 4) + a0 +} + +func TestSbox(t *testing.T) { + for n := range sbox { + for m := range sbox[n] { + if genSbox(n, byte(m)) != sbox[n][m] { + t.Errorf("#%d|%d: sbox value = %d want %d", n, m, sbox[n][m], genSbox(n, byte(m))) + } + } + } +} + +var testVectors = []struct { + key []byte + dec []byte + enc []byte +}{ + // These tests are extracted from LibTom + { + []byte{0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A}, + []byte{0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E, 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19}, + []byte{0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85, 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3}, + }, + { + []byte{0x88, 0xB2, 0xB2, 0x70, 0x6B, 0x10, 0x5E, 0x36, 0xB4, 0x46, 0xBB, 0x6D, 0x73, 0x1A, 0x1E, 0x88, + 0xEF, 0xA7, 0x1F, 0x78, 0x89, 0x65, 0xBD, 0x44}, + []byte{0x39, 0xDA, 0x69, 0xD6, 0xBA, 0x49, 0x97, 0xD5, 0x85, 0xB6, 0xDC, 0x07, 0x3C, 0xA3, 0x41, 0xB2}, + []byte{0x18, 0x2B, 0x02, 0xD8, 0x14, 0x97, 0xEA, 0x45, 0xF9, 0xDA, 0xAC, 0xDC, 0x29, 0x19, 0x3A, 0x65}, + }, + { + []byte{0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D, + 0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F}, + []byte{0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6}, + []byte{0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA}, + }, + // These test are derived from http://www.schneier.com/code/ecb_ival.txt + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A}, + }, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + }, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xCF, 0xD1, 0xD2, 0xE5, 0xA9, 0xBE, 0x9C, 0xDF, 0x50, 0x1F, 0x13, 0xB8, 0x92, 0xBD, 0x22, 0x48}, + }, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, + }, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x37, 0x52, 0x7B, 0xE0, 0x05, 0x23, 0x34, 0xB8, 0x9F, 0x0C, 0xFC, 0xCA, 0xE8, 0x7C, 0xFA, 0x20}, + }, +} + +func TestCipher(t *testing.T) { + for n, tt := range testVectors { + // Test if the plaintext (dec) is encrypts to the given + // ciphertext (enc) using the given key. Test also if enc can + // be decrypted again into dec. + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("#%d: NewCipher: %v", n, err) + return + } + + buf := make([]byte, 16) + c.Encrypt(buf, tt.dec) + if !bytes.Equal(buf, tt.enc) { + t.Errorf("#%d: encrypt = %x want %x", n, buf, tt.enc) + } + c.Decrypt(buf, tt.enc) + if !bytes.Equal(buf, tt.dec) { + t.Errorf("#%d: decrypt = %x want %x", n, buf, tt.dec) + } + + // Test that 16 zero bytes, encrypted 1000 times then decrypted + // 1000 times results in zero bytes again. + zero := make([]byte, 16) + buf = make([]byte, 16) + for i := 0; i < 1000; i++ { + c.Encrypt(buf, buf) + } + for i := 0; i < 1000; i++ { + c.Decrypt(buf, buf) + } + if !bytes.Equal(buf, zero) { + t.Errorf("#%d: encrypt/decrypt 1000: have %x want %x", n, buf, zero) + } + } +} diff --git a/vendor/golang.org/x/crypto/xtea/block.go b/vendor/golang.org/x/crypto/xtea/block.go new file mode 100644 index 0000000..bf5d245 --- /dev/null +++ b/vendor/golang.org/x/crypto/xtea/block.go @@ -0,0 +1,66 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* + Implementation adapted from Needham and Wheeler's paper: + http://www.cix.co.uk/~klockstone/xtea.pdf + + A precalculated look up table is used during encryption/decryption for values that are based purely on the key. +*/ + +package xtea + +// XTEA is based on 64 rounds. +const numRounds = 64 + +// blockToUint32 reads an 8 byte slice into two uint32s. +// The block is treated as big endian. +func blockToUint32(src []byte) (uint32, uint32) { + r0 := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r1 := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + return r0, r1 +} + +// uint32ToBlock writes two uint32s into an 8 byte data block. +// Values are written as big endian. +func uint32ToBlock(v0, v1 uint32, dst []byte) { + dst[0] = byte(v0 >> 24) + dst[1] = byte(v0 >> 16) + dst[2] = byte(v0 >> 8) + dst[3] = byte(v0) + dst[4] = byte(v1 >> 24) + dst[5] = byte(v1 >> 16) + dst[6] = byte(v1 >> 8) + dst[7] = byte(v1 >> 0) +} + +// encryptBlock encrypts a single 8 byte block using XTEA. +func encryptBlock(c *Cipher, dst, src []byte) { + v0, v1 := blockToUint32(src) + + // Two rounds of XTEA applied per loop + for i := 0; i < numRounds; { + v0 += ((v1<<4 ^ v1>>5) + v1) ^ c.table[i] + i++ + v1 += ((v0<<4 ^ v0>>5) + v0) ^ c.table[i] + i++ + } + + uint32ToBlock(v0, v1, dst) +} + +// decryptBlock decrypt a single 8 byte block using XTEA. +func decryptBlock(c *Cipher, dst, src []byte) { + v0, v1 := blockToUint32(src) + + // Two rounds of XTEA applied per loop + for i := numRounds; i > 0; { + i-- + v1 -= ((v0<<4 ^ v0>>5) + v0) ^ c.table[i] + i-- + v0 -= ((v1<<4 ^ v1>>5) + v1) ^ c.table[i] + } + + uint32ToBlock(v0, v1, dst) +} diff --git a/vendor/golang.org/x/crypto/xtea/cipher.go b/vendor/golang.org/x/crypto/xtea/cipher.go new file mode 100644 index 0000000..108b426 --- /dev/null +++ b/vendor/golang.org/x/crypto/xtea/cipher.go @@ -0,0 +1,82 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package xtea implements XTEA encryption, as defined in Needham and Wheeler's +// 1997 technical report, "Tea extensions." +package xtea // import "golang.org/x/crypto/xtea" + +// For details, see http://www.cix.co.uk/~klockstone/xtea.pdf + +import "strconv" + +// The XTEA block size in bytes. +const BlockSize = 8 + +// A Cipher is an instance of an XTEA cipher using a particular key. +// table contains a series of precalculated values that are used each round. +type Cipher struct { + table [64]uint32 +} + +type KeySizeError int + +func (k KeySizeError) Error() string { + return "crypto/xtea: invalid key size " + strconv.Itoa(int(k)) +} + +// NewCipher creates and returns a new Cipher. +// The key argument should be the XTEA key. +// XTEA only supports 128 bit (16 byte) keys. +func NewCipher(key []byte) (*Cipher, error) { + k := len(key) + switch k { + default: + return nil, KeySizeError(k) + case 16: + break + } + + c := new(Cipher) + initCipher(c, key) + + return c, nil +} + +// BlockSize returns the XTEA block size, 8 bytes. +// It is necessary to satisfy the Block interface in the +// package "crypto/cipher". +func (c *Cipher) BlockSize() int { return BlockSize } + +// Encrypt encrypts the 8 byte buffer src using the key and stores the result in dst. +// Note that for amounts of data larger than a block, +// it is not safe to just call Encrypt on successive blocks; +// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). +func (c *Cipher) Encrypt(dst, src []byte) { encryptBlock(c, dst, src) } + +// Decrypt decrypts the 8 byte buffer src using the key k and stores the result in dst. +func (c *Cipher) Decrypt(dst, src []byte) { decryptBlock(c, dst, src) } + +// initCipher initializes the cipher context by creating a look up table +// of precalculated values that are based on the key. +func initCipher(c *Cipher, key []byte) { + // Load the key into four uint32s + var k [4]uint32 + for i := 0; i < len(k); i++ { + j := i << 2 // Multiply by 4 + k[i] = uint32(key[j+0])<<24 | uint32(key[j+1])<<16 | uint32(key[j+2])<<8 | uint32(key[j+3]) + } + + // Precalculate the table + const delta = 0x9E3779B9 + var sum uint32 = 0 + + // Two rounds of XTEA applied per loop + for i := 0; i < numRounds; { + c.table[i] = sum + k[sum&3] + i++ + sum += delta + c.table[i] = sum + k[(sum>>11)&3] + i++ + } +} diff --git a/vendor/golang.org/x/crypto/xtea/xtea_test.go b/vendor/golang.org/x/crypto/xtea/xtea_test.go new file mode 100644 index 0000000..be711bf --- /dev/null +++ b/vendor/golang.org/x/crypto/xtea/xtea_test.go @@ -0,0 +1,229 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xtea + +import ( + "testing" +) + +// A sample test key for when we just want to initialize a cipher +var testKey = []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF} + +// Test that the block size for XTEA is correct +func TestBlocksize(t *testing.T) { + if BlockSize != 8 { + t.Errorf("BlockSize constant - expected 8, got %d", BlockSize) + return + } + + c, err := NewCipher(testKey) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(testKey), err) + return + } + + result := c.BlockSize() + if result != 8 { + t.Errorf("BlockSize function - expected 8, got %d", result) + return + } +} + +// A series of test values to confirm that the Cipher.table array was initialized correctly +var testTable = []uint32{ + 0x00112233, 0x6B1568B8, 0xE28CE030, 0xC5089E2D, 0xC5089E2D, 0x1EFBD3A2, 0xA7845C2A, 0x78EF0917, + 0x78EF0917, 0x172682D0, 0x5B6AC714, 0x822AC955, 0x3DE68511, 0xDC1DFECA, 0x2062430E, 0x3611343F, + 0xF1CCEFFB, 0x900469B4, 0xD448ADF8, 0x2E3BE36D, 0xB6C46BF5, 0x994029F2, 0x994029F2, 0xF3335F67, + 0x6AAAD6DF, 0x4D2694DC, 0x4D2694DC, 0xEB5E0E95, 0x2FA252D9, 0x4551440A, 0x121E10D6, 0xB0558A8F, + 0xE388BDC3, 0x0A48C004, 0xC6047BC0, 0x643BF579, 0xA88039BD, 0x02736F32, 0x8AFBF7BA, 0x5C66A4A7, + 0x5C66A4A7, 0xC76AEB2C, 0x3EE262A4, 0x215E20A1, 0x215E20A1, 0x7B515616, 0x03D9DE9E, 0x1988CFCF, + 0xD5448B8B, 0x737C0544, 0xB7C04988, 0xDE804BC9, 0x9A3C0785, 0x3873813E, 0x7CB7C582, 0xD6AAFAF7, + 0x4E22726F, 0x309E306C, 0x309E306C, 0x8A9165E1, 0x1319EE69, 0xF595AC66, 0xF595AC66, 0x4F88E1DB, +} + +// Test that the cipher context is initialized correctly +func TestCipherInit(t *testing.T) { + c, err := NewCipher(testKey) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(testKey), err) + return + } + + for i := 0; i < len(c.table); i++ { + if c.table[i] != testTable[i] { + t.Errorf("NewCipher() failed to initialize Cipher.table[%d] correctly. Expected %08X, got %08X", i, testTable[i], c.table[i]) + break + } + } +} + +// Test that invalid key sizes return an error +func TestInvalidKeySize(t *testing.T) { + // Test a long key + key := []byte{ + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, + } + + _, err := NewCipher(key) + if err == nil { + t.Errorf("Invalid key size %d didn't result in an error.", len(key)) + } + + // Test a short key + key = []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77} + + _, err = NewCipher(key) + if err == nil { + t.Errorf("Invalid key size %d didn't result in an error.", len(key)) + } +} + +// Test that we can correctly decode some bytes we have encoded +func TestEncodeDecode(t *testing.T) { + original := []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF} + input := original + output := make([]byte, BlockSize) + + c, err := NewCipher(testKey) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(testKey), err) + return + } + + // Encrypt the input block + c.Encrypt(output, input) + + // Check that the output does not match the input + differs := false + for i := 0; i < len(input); i++ { + if output[i] != input[i] { + differs = true + break + } + } + if differs == false { + t.Error("Cipher.Encrypt: Failed to encrypt the input block.") + return + } + + // Decrypt the block we just encrypted + input = output + output = make([]byte, BlockSize) + c.Decrypt(output, input) + + // Check that the output from decrypt matches our initial input + for i := 0; i < len(input); i++ { + if output[i] != original[i] { + t.Errorf("Decrypted byte %d differed. Expected %02X, got %02X\n", i, original[i], output[i]) + return + } + } +} + +// Test Vectors +type CryptTest struct { + key []byte + plainText []byte + cipherText []byte +} + +var CryptTests = []CryptTest{ + // These were sourced from http://www.freemedialibrary.com/index.php/XTEA_test_vectors + { + []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, + []byte{0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}, + []byte{0x49, 0x7d, 0xf3, 0xd0, 0x72, 0x61, 0x2c, 0xb5}, + }, + { + []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, + []byte{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41}, + []byte{0xe7, 0x8f, 0x2d, 0x13, 0x74, 0x43, 0x41, 0xd8}, + }, + { + []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, + []byte{0x5a, 0x5b, 0x6e, 0x27, 0x89, 0x48, 0xd7, 0x7f}, + []byte{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41}, + }, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}, + []byte{0xa0, 0x39, 0x05, 0x89, 0xf8, 0xb8, 0xef, 0xa5}, + }, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41}, + []byte{0xed, 0x23, 0x37, 0x5a, 0x82, 0x1a, 0x8c, 0x2d}, + }, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x70, 0xe1, 0x22, 0x5d, 0x6e, 0x4e, 0x76, 0x55}, + []byte{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41}, + }, + + // These vectors are from http://wiki.secondlife.com/wiki/XTEA_Strong_Encryption_Implementation#Bouncy_Castle_C.23_API + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xDE, 0xE9, 0xD4, 0xD8, 0xF7, 0x13, 0x1E, 0xD9}, + }, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}, + []byte{0x06, 0x5C, 0x1B, 0x89, 0x75, 0xC6, 0xA8, 0x16}, + }, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78, 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x1F, 0xF9, 0xA0, 0x26, 0x1A, 0xC6, 0x42, 0x64}, + }, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78, 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A}, + []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}, + []byte{0x8C, 0x67, 0x15, 0x5B, 0x2E, 0xF9, 0x1E, 0xAD}, + }, +} + +// Test encryption +func TestCipherEncrypt(t *testing.T) { + for i, tt := range CryptTests { + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("NewCipher(%d bytes), vector %d = %s", len(tt.key), i, err) + continue + } + + out := make([]byte, len(tt.plainText)) + c.Encrypt(out, tt.plainText) + + for j := 0; j < len(out); j++ { + if out[j] != tt.cipherText[j] { + t.Errorf("Cipher.Encrypt %d: out[%d] = %02X, expected %02X", i, j, out[j], tt.cipherText[j]) + break + } + } + } +} + +// Test decryption +func TestCipherDecrypt(t *testing.T) { + for i, tt := range CryptTests { + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("NewCipher(%d bytes), vector %d = %s", len(tt.key), i, err) + continue + } + + out := make([]byte, len(tt.cipherText)) + c.Decrypt(out, tt.cipherText) + + for j := 0; j < len(out); j++ { + if out[j] != tt.plainText[j] { + t.Errorf("Cipher.Decrypt %d: out[%d] = %02X, expected %02X", i, j, out[j], tt.plainText[j]) + break + } + } + } +} diff --git a/vendor/golang.org/x/crypto/xts/xts.go b/vendor/golang.org/x/crypto/xts/xts.go new file mode 100644 index 0000000..c9a283b --- /dev/null +++ b/vendor/golang.org/x/crypto/xts/xts.go @@ -0,0 +1,138 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package xts implements the XTS cipher mode as specified in IEEE P1619/D16. +// +// XTS mode is typically used for disk encryption, which presents a number of +// novel problems that make more common modes inapplicable. The disk is +// conceptually an array of sectors and we must be able to encrypt and decrypt +// a sector in isolation. However, an attacker must not be able to transpose +// two sectors of plaintext by transposing their ciphertext. +// +// XTS wraps a block cipher with Rogaway's XEX mode in order to build a +// tweakable block cipher. This allows each sector to have a unique tweak and +// effectively create a unique key for each sector. +// +// XTS does not provide any authentication. An attacker can manipulate the +// ciphertext and randomise a block (16 bytes) of the plaintext. +// +// (Note: this package does not implement ciphertext-stealing so sectors must +// be a multiple of 16 bytes.) +package xts // import "golang.org/x/crypto/xts" + +import ( + "crypto/cipher" + "errors" +) + +// Cipher contains an expanded key structure. It doesn't contain mutable state +// and therefore can be used concurrently. +type Cipher struct { + k1, k2 cipher.Block +} + +// blockSize is the block size that the underlying cipher must have. XTS is +// only defined for 16-byte ciphers. +const blockSize = 16 + +// NewCipher creates a Cipher given a function for creating the underlying +// block cipher (which must have a block size of 16 bytes). The key must be +// twice the length of the underlying cipher's key. +func NewCipher(cipherFunc func([]byte) (cipher.Block, error), key []byte) (c *Cipher, err error) { + c = new(Cipher) + if c.k1, err = cipherFunc(key[:len(key)/2]); err != nil { + return + } + c.k2, err = cipherFunc(key[len(key)/2:]) + + if c.k1.BlockSize() != blockSize { + err = errors.New("xts: cipher does not have a block size of 16") + } + + return +} + +// Encrypt encrypts a sector of plaintext and puts the result into ciphertext. +// Plaintext and ciphertext may be the same slice but should not overlap. +// Sectors must be a multiple of 16 bytes and less than 2²ⴠbytes. +func (c *Cipher) Encrypt(ciphertext, plaintext []byte, sectorNum uint64) { + if len(ciphertext) < len(plaintext) { + panic("xts: ciphertext is smaller than plaintext") + } + if len(plaintext)%blockSize != 0 { + panic("xts: plaintext is not a multiple of the block size") + } + + var tweak [blockSize]byte + for i := 0; i < 8; i++ { + tweak[i] = byte(sectorNum) + sectorNum >>= 8 + } + + c.k2.Encrypt(tweak[:], tweak[:]) + + for i := 0; i < len(plaintext); i += blockSize { + for j := 0; j < blockSize; j++ { + ciphertext[i+j] = plaintext[i+j] ^ tweak[j] + } + c.k1.Encrypt(ciphertext[i:], ciphertext[i:]) + for j := 0; j < blockSize; j++ { + ciphertext[i+j] ^= tweak[j] + } + + mul2(&tweak) + } +} + +// Decrypt decrypts a sector of ciphertext and puts the result into plaintext. +// Plaintext and ciphertext may be the same slice but should not overlap. +// Sectors must be a multiple of 16 bytes and less than 2²ⴠbytes. +func (c *Cipher) Decrypt(plaintext, ciphertext []byte, sectorNum uint64) { + if len(plaintext) < len(ciphertext) { + panic("xts: plaintext is smaller than ciphertext") + } + if len(ciphertext)%blockSize != 0 { + panic("xts: ciphertext is not a multiple of the block size") + } + + var tweak [blockSize]byte + for i := 0; i < 8; i++ { + tweak[i] = byte(sectorNum) + sectorNum >>= 8 + } + + c.k2.Encrypt(tweak[:], tweak[:]) + + for i := 0; i < len(plaintext); i += blockSize { + for j := 0; j < blockSize; j++ { + plaintext[i+j] = ciphertext[i+j] ^ tweak[j] + } + c.k1.Decrypt(plaintext[i:], plaintext[i:]) + for j := 0; j < blockSize; j++ { + plaintext[i+j] ^= tweak[j] + } + + mul2(&tweak) + } +} + +// mul2 multiplies tweak by 2 in GF(2¹²â¸) with an irreducible polynomial of +// x¹²⸠+ xâ· + x² + x + 1. +func mul2(tweak *[blockSize]byte) { + var carryIn byte + for j := range tweak { + carryOut := tweak[j] >> 7 + tweak[j] = (tweak[j] << 1) + carryIn + carryIn = carryOut + } + if carryIn != 0 { + // If we have a carry bit then we need to subtract a multiple + // of the irreducible polynomial (x¹²⸠+ xâ· + x² + x + 1). + // By dropping the carry bit, we're subtracting the x^128 term + // so all that remains is to subtract xâ· + x² + x + 1. + // Subtraction (and addition) in this representation is just + // XOR. + tweak[0] ^= 1<<7 | 1<<2 | 1<<1 | 1 + } +} diff --git a/vendor/golang.org/x/crypto/xts/xts_test.go b/vendor/golang.org/x/crypto/xts/xts_test.go new file mode 100644 index 0000000..7a5e9fa --- /dev/null +++ b/vendor/golang.org/x/crypto/xts/xts_test.go @@ -0,0 +1,85 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xts + +import ( + "bytes" + "crypto/aes" + "encoding/hex" + "testing" +) + +// These test vectors have been taken from IEEE P1619/D16, Annex B. +var xtsTestVectors = []struct { + key string + sector uint64 + plaintext string + ciphertext string +}{ + { + "0000000000000000000000000000000000000000000000000000000000000000", + 0, + "0000000000000000000000000000000000000000000000000000000000000000", + "917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e", + }, { + "1111111111111111111111111111111122222222222222222222222222222222", + 0x3333333333, + "4444444444444444444444444444444444444444444444444444444444444444", + "c454185e6a16936e39334038acef838bfb186fff7480adc4289382ecd6d394f0", + }, { + "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f022222222222222222222222222222222", + 0x3333333333, + "4444444444444444444444444444444444444444444444444444444444444444", + "af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89", + }, { + "2718281828459045235360287471352631415926535897932384626433832795", + 0, + "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", + "27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568", + }, { + "2718281828459045235360287471352631415926535897932384626433832795", + 1, + "27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568", + "264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd", + }, { + "27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592", + 0xff, + "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", + "1c3b3a102f770386e4836c99e370cf9bea00803f5e482357a4ae12d414a3e63b5d31e276f8fe4a8d66b317f9ac683f44680a86ac35adfc3345befecb4bb188fd5776926c49a3095eb108fd1098baec70aaa66999a72a82f27d848b21d4a741b0c5cd4d5fff9dac89aeba122961d03a757123e9870f8acf1000020887891429ca2a3e7a7d7df7b10355165c8b9a6d0a7de8b062c4500dc4cd120c0f7418dae3d0b5781c34803fa75421c790dfe1de1834f280d7667b327f6c8cd7557e12ac3a0f93ec05c52e0493ef31a12d3d9260f79a289d6a379bc70c50841473d1a8cc81ec583e9645e07b8d9670655ba5bbcfecc6dc3966380ad8fecb17b6ba02469a020a84e18e8f84252070c13e9f1f289be54fbc481457778f616015e1327a02b140f1505eb309326d68378f8374595c849d84f4c333ec4423885143cb47bd71c5edae9be69a2ffeceb1bec9de244fbe15992b11b77c040f12bd8f6a975a44a0f90c29a9abc3d4d893927284c58754cce294529f8614dcd2aba991925fedc4ae74ffac6e333b93eb4aff0479da9a410e4450e0dd7ae4c6e2910900575da401fc07059f645e8b7e9bfdef33943054ff84011493c27b3429eaedb4ed5376441a77ed43851ad77f16f541dfd269d50d6a5f14fb0aab1cbb4c1550be97f7ab4066193c4caa773dad38014bd2092fa755c824bb5e54c4f36ffda9fcea70b9c6e693e148c151", + }, +} + +func fromHex(s string) []byte { + ret, err := hex.DecodeString(s) + if err != nil { + panic("xts: invalid hex in test") + } + return ret +} + +func TestXTS(t *testing.T) { + for i, test := range xtsTestVectors { + c, err := NewCipher(aes.NewCipher, fromHex(test.key)) + if err != nil { + t.Errorf("#%d: failed to create cipher: %s", i, err) + continue + } + plaintext := fromHex(test.plaintext) + ciphertext := make([]byte, len(plaintext)) + c.Encrypt(ciphertext, plaintext, test.sector) + + expectedCiphertext := fromHex(test.ciphertext) + if !bytes.Equal(ciphertext, expectedCiphertext) { + t.Errorf("#%d: encrypted failed, got: %x, want: %x", i, ciphertext, expectedCiphertext) + continue + } + + decrypted := make([]byte, len(ciphertext)) + c.Decrypt(decrypted, ciphertext, test.sector) + if !bytes.Equal(decrypted, plaintext) { + t.Errorf("#%d: decryption failed, got: %x, want: %x", i, decrypted, plaintext) + } + } +} diff --git a/vendor/golang.org/x/sys/.gitattributes b/vendor/golang.org/x/sys/.gitattributes new file mode 100644 index 0000000..d2f212e --- /dev/null +++ b/vendor/golang.org/x/sys/.gitattributes @@ -0,0 +1,10 @@ +# Treat all files in this repo as binary, with no git magic updating +# line endings. Windows users contributing to Go will need to use a +# modern version of git and editors capable of LF line endings. +# +# We'll prevent accidental CRLF line endings from entering the repo +# via the git-review gofmt checks. +# +# See golang.org/issue/9281 + +* -text diff --git a/vendor/golang.org/x/sys/.gitignore b/vendor/golang.org/x/sys/.gitignore new file mode 100644 index 0000000..8339fd6 --- /dev/null +++ b/vendor/golang.org/x/sys/.gitignore @@ -0,0 +1,2 @@ +# Add no patterns to .hgignore except for files generated by the build. +last-change diff --git a/vendor/golang.org/x/sys/AUTHORS b/vendor/golang.org/x/sys/AUTHORS new file mode 100644 index 0000000..15167cd --- /dev/null +++ b/vendor/golang.org/x/sys/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/sys/CONTRIBUTING.md b/vendor/golang.org/x/sys/CONTRIBUTING.md new file mode 100644 index 0000000..88dff59 --- /dev/null +++ b/vendor/golang.org/x/sys/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Go + +Go is an open source project. + +It is the work of hundreds of contributors. We appreciate your help! + + +## Filing issues + +When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. +The gophers there will answer or ask you to file an issue if you've tripped over a bug. + +## Contributing code + +Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) +before sending patches. + +**We do not accept GitHub pull requests** +(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). + +Unless otherwise noted, the Go source files are distributed under +the BSD-style license found in the LICENSE file. + diff --git a/vendor/golang.org/x/sys/CONTRIBUTORS b/vendor/golang.org/x/sys/CONTRIBUTORS new file mode 100644 index 0000000..1c4577e --- /dev/null +++ b/vendor/golang.org/x/sys/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/sys/LICENSE b/vendor/golang.org/x/sys/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/sys/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/sys/PATENTS b/vendor/golang.org/x/sys/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/sys/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/sys/README b/vendor/golang.org/x/sys/README new file mode 100644 index 0000000..bd422b4 --- /dev/null +++ b/vendor/golang.org/x/sys/README @@ -0,0 +1,3 @@ +This repository holds supplemental Go packages for low-level interactions with the operating system. + +To submit changes to this repository, see http://golang.org/doc/contribute.html. diff --git a/vendor/golang.org/x/sys/codereview.cfg b/vendor/golang.org/x/sys/codereview.cfg new file mode 100644 index 0000000..3f8b14b --- /dev/null +++ b/vendor/golang.org/x/sys/codereview.cfg @@ -0,0 +1 @@ +issuerepo: golang/go diff --git a/vendor/golang.org/x/sys/plan9/asm.s b/vendor/golang.org/x/sys/plan9/asm.s new file mode 100644 index 0000000..d4ca868 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/asm.s @@ -0,0 +1,8 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·use(SB),NOSPLIT,$0 + RET diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_386.s b/vendor/golang.org/x/sys/plan9/asm_plan9_386.s new file mode 100644 index 0000000..bc5cab1 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/asm_plan9_386.s @@ -0,0 +1,30 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// +// System call support for 386, Plan 9 +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-32 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-44 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·seek(SB),NOSPLIT,$0-36 + JMP syscall·seek(SB) + +TEXT ·exit(SB),NOSPLIT,$4-4 + JMP syscall·exit(SB) diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s b/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s new file mode 100644 index 0000000..d3448e6 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s @@ -0,0 +1,30 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// +// System call support for amd64, Plan 9 +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-64 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-88 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·seek(SB),NOSPLIT,$0-56 + JMP syscall·seek(SB) + +TEXT ·exit(SB),NOSPLIT,$8-8 + JMP syscall·exit(SB) diff --git a/vendor/golang.org/x/sys/plan9/const_plan9.go b/vendor/golang.org/x/sys/plan9/const_plan9.go new file mode 100644 index 0000000..b4e85a3 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/const_plan9.go @@ -0,0 +1,70 @@ +package plan9 + +// Plan 9 Constants + +// Open modes +const ( + O_RDONLY = 0 + O_WRONLY = 1 + O_RDWR = 2 + O_TRUNC = 16 + O_CLOEXEC = 32 + O_EXCL = 0x1000 +) + +// Rfork flags +const ( + RFNAMEG = 1 << 0 + RFENVG = 1 << 1 + RFFDG = 1 << 2 + RFNOTEG = 1 << 3 + RFPROC = 1 << 4 + RFMEM = 1 << 5 + RFNOWAIT = 1 << 6 + RFCNAMEG = 1 << 10 + RFCENVG = 1 << 11 + RFCFDG = 1 << 12 + RFREND = 1 << 13 + RFNOMNT = 1 << 14 +) + +// Qid.Type bits +const ( + QTDIR = 0x80 + QTAPPEND = 0x40 + QTEXCL = 0x20 + QTMOUNT = 0x10 + QTAUTH = 0x08 + QTTMP = 0x04 + QTFILE = 0x00 +) + +// Dir.Mode bits +const ( + DMDIR = 0x80000000 + DMAPPEND = 0x40000000 + DMEXCL = 0x20000000 + DMMOUNT = 0x10000000 + DMAUTH = 0x08000000 + DMTMP = 0x04000000 + DMREAD = 0x4 + DMWRITE = 0x2 + DMEXEC = 0x1 +) + +const ( + STATMAX = 65535 + ERRMAX = 128 + STATFIXLEN = 49 +) + +// Mount and bind flags +const ( + MREPL = 0x0000 + MBEFORE = 0x0001 + MAFTER = 0x0002 + MORDER = 0x0003 + MCREATE = 0x0004 + MCACHE = 0x0010 + MMASK = 0x0017 +) diff --git a/vendor/golang.org/x/sys/plan9/dir_plan9.go b/vendor/golang.org/x/sys/plan9/dir_plan9.go new file mode 100644 index 0000000..0955e0c --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/dir_plan9.go @@ -0,0 +1,212 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Plan 9 directory marshalling. See intro(5). + +package plan9 + +import "errors" + +var ( + ErrShortStat = errors.New("stat buffer too short") + ErrBadStat = errors.New("malformed stat buffer") + ErrBadName = errors.New("bad character in file name") +) + +// A Qid represents a 9P server's unique identification for a file. +type Qid struct { + Path uint64 // the file server's unique identification for the file + Vers uint32 // version number for given Path + Type uint8 // the type of the file (plan9.QTDIR for example) +} + +// A Dir contains the metadata for a file. +type Dir struct { + // system-modified data + Type uint16 // server type + Dev uint32 // server subtype + + // file data + Qid Qid // unique id from server + Mode uint32 // permissions + Atime uint32 // last read time + Mtime uint32 // last write time + Length int64 // file length + Name string // last element of path + Uid string // owner name + Gid string // group name + Muid string // last modifier name +} + +var nullDir = Dir{ + Type: ^uint16(0), + Dev: ^uint32(0), + Qid: Qid{ + Path: ^uint64(0), + Vers: ^uint32(0), + Type: ^uint8(0), + }, + Mode: ^uint32(0), + Atime: ^uint32(0), + Mtime: ^uint32(0), + Length: ^int64(0), +} + +// Null assigns special "don't touch" values to members of d to +// avoid modifying them during plan9.Wstat. +func (d *Dir) Null() { *d = nullDir } + +// Marshal encodes a 9P stat message corresponding to d into b +// +// If there isn't enough space in b for a stat message, ErrShortStat is returned. +func (d *Dir) Marshal(b []byte) (n int, err error) { + n = STATFIXLEN + len(d.Name) + len(d.Uid) + len(d.Gid) + len(d.Muid) + if n > len(b) { + return n, ErrShortStat + } + + for _, c := range d.Name { + if c == '/' { + return n, ErrBadName + } + } + + b = pbit16(b, uint16(n)-2) + b = pbit16(b, d.Type) + b = pbit32(b, d.Dev) + b = pbit8(b, d.Qid.Type) + b = pbit32(b, d.Qid.Vers) + b = pbit64(b, d.Qid.Path) + b = pbit32(b, d.Mode) + b = pbit32(b, d.Atime) + b = pbit32(b, d.Mtime) + b = pbit64(b, uint64(d.Length)) + b = pstring(b, d.Name) + b = pstring(b, d.Uid) + b = pstring(b, d.Gid) + b = pstring(b, d.Muid) + + return n, nil +} + +// UnmarshalDir decodes a single 9P stat message from b and returns the resulting Dir. +// +// If b is too small to hold a valid stat message, ErrShortStat is returned. +// +// If the stat message itself is invalid, ErrBadStat is returned. +func UnmarshalDir(b []byte) (*Dir, error) { + if len(b) < STATFIXLEN { + return nil, ErrShortStat + } + size, buf := gbit16(b) + if len(b) != int(size)+2 { + return nil, ErrBadStat + } + b = buf + + var d Dir + d.Type, b = gbit16(b) + d.Dev, b = gbit32(b) + d.Qid.Type, b = gbit8(b) + d.Qid.Vers, b = gbit32(b) + d.Qid.Path, b = gbit64(b) + d.Mode, b = gbit32(b) + d.Atime, b = gbit32(b) + d.Mtime, b = gbit32(b) + + n, b := gbit64(b) + d.Length = int64(n) + + var ok bool + if d.Name, b, ok = gstring(b); !ok { + return nil, ErrBadStat + } + if d.Uid, b, ok = gstring(b); !ok { + return nil, ErrBadStat + } + if d.Gid, b, ok = gstring(b); !ok { + return nil, ErrBadStat + } + if d.Muid, b, ok = gstring(b); !ok { + return nil, ErrBadStat + } + + return &d, nil +} + +// pbit8 copies the 8-bit number v to b and returns the remaining slice of b. +func pbit8(b []byte, v uint8) []byte { + b[0] = byte(v) + return b[1:] +} + +// pbit16 copies the 16-bit number v to b in little-endian order and returns the remaining slice of b. +func pbit16(b []byte, v uint16) []byte { + b[0] = byte(v) + b[1] = byte(v >> 8) + return b[2:] +} + +// pbit32 copies the 32-bit number v to b in little-endian order and returns the remaining slice of b. +func pbit32(b []byte, v uint32) []byte { + b[0] = byte(v) + b[1] = byte(v >> 8) + b[2] = byte(v >> 16) + b[3] = byte(v >> 24) + return b[4:] +} + +// pbit64 copies the 64-bit number v to b in little-endian order and returns the remaining slice of b. +func pbit64(b []byte, v uint64) []byte { + b[0] = byte(v) + b[1] = byte(v >> 8) + b[2] = byte(v >> 16) + b[3] = byte(v >> 24) + b[4] = byte(v >> 32) + b[5] = byte(v >> 40) + b[6] = byte(v >> 48) + b[7] = byte(v >> 56) + return b[8:] +} + +// pstring copies the string s to b, prepending it with a 16-bit length in little-endian order, and +// returning the remaining slice of b.. +func pstring(b []byte, s string) []byte { + b = pbit16(b, uint16(len(s))) + n := copy(b, s) + return b[n:] +} + +// gbit8 reads an 8-bit number from b and returns it with the remaining slice of b. +func gbit8(b []byte) (uint8, []byte) { + return uint8(b[0]), b[1:] +} + +// gbit16 reads a 16-bit number in little-endian order from b and returns it with the remaining slice of b. +func gbit16(b []byte) (uint16, []byte) { + return uint16(b[0]) | uint16(b[1])<<8, b[2:] +} + +// gbit32 reads a 32-bit number in little-endian order from b and returns it with the remaining slice of b. +func gbit32(b []byte) (uint32, []byte) { + return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24, b[4:] +} + +// gbit64 reads a 64-bit number in little-endian order from b and returns it with the remaining slice of b. +func gbit64(b []byte) (uint64, []byte) { + lo := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + hi := uint32(b[4]) | uint32(b[5])<<8 | uint32(b[6])<<16 | uint32(b[7])<<24 + return uint64(lo) | uint64(hi)<<32, b[8:] +} + +// gstring reads a string from b, prefixed with a 16-bit length in little-endian order. +// It returns the string with the remaining slice of b and a boolean. If the length is +// greater than the number of bytes in b, the boolean will be false. +func gstring(b []byte) (string, []byte, bool) { + n, b := gbit16(b) + if int(n) > len(b) { + return "", b, false + } + return string(b[:n]), b[n:], true +} diff --git a/vendor/golang.org/x/sys/plan9/env_plan9.go b/vendor/golang.org/x/sys/plan9/env_plan9.go new file mode 100644 index 0000000..25a96e7 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/env_plan9.go @@ -0,0 +1,27 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Plan 9 environment variables. + +package plan9 + +import ( + "syscall" +) + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} diff --git a/vendor/golang.org/x/sys/plan9/env_unset.go b/vendor/golang.org/x/sys/plan9/env_unset.go new file mode 100644 index 0000000..c37fc26 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/env_unset.go @@ -0,0 +1,14 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.4 + +package plan9 + +import "syscall" + +func Unsetenv(key string) error { + // This was added in Go 1.4. + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/plan9/errors_plan9.go b/vendor/golang.org/x/sys/plan9/errors_plan9.go new file mode 100644 index 0000000..110cf6a --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/errors_plan9.go @@ -0,0 +1,50 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package plan9 + +import "syscall" + +// Constants +const ( + // Invented values to support what package os expects. + O_CREAT = 0x02000 + O_APPEND = 0x00400 + O_NOCTTY = 0x00000 + O_NONBLOCK = 0x00000 + O_SYNC = 0x00000 + O_ASYNC = 0x00000 + + S_IFMT = 0x1f000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 +) + +// Errors +var ( + EINVAL = syscall.NewError("bad arg in system call") + ENOTDIR = syscall.NewError("not a directory") + EISDIR = syscall.NewError("file is a directory") + ENOENT = syscall.NewError("file does not exist") + EEXIST = syscall.NewError("file already exists") + EMFILE = syscall.NewError("no free file descriptors") + EIO = syscall.NewError("i/o error") + ENAMETOOLONG = syscall.NewError("file name too long") + EINTR = syscall.NewError("interrupted") + EPERM = syscall.NewError("permission denied") + EBUSY = syscall.NewError("no free devices") + ETIMEDOUT = syscall.NewError("connection timed out") + EPLAN9 = syscall.NewError("not supported by plan 9") + + // The following errors do not correspond to any + // Plan 9 system messages. Invented to support + // what package os and others expect. + EACCES = syscall.NewError("access permission denied") + EAFNOSUPPORT = syscall.NewError("address family not supported by protocol") +) diff --git a/vendor/golang.org/x/sys/plan9/mkall.sh b/vendor/golang.org/x/sys/plan9/mkall.sh new file mode 100755 index 0000000..9f73c60 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/mkall.sh @@ -0,0 +1,138 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# The plan9 package provides access to the raw system call +# interface of the underlying operating system. Porting Go to +# a new architecture/operating system combination requires +# some manual effort, though there are tools that automate +# much of the process. The auto-generated files have names +# beginning with z. +# +# This script runs or (given -n) prints suggested commands to generate z files +# for the current system. Running those commands is not automatic. +# This script is documentation more than anything else. +# +# * asm_${GOOS}_${GOARCH}.s +# +# This hand-written assembly file implements system call dispatch. +# There are three entry points: +# +# func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr); +# func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); +# func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr); +# +# The first and second are the standard ones; they differ only in +# how many arguments can be passed to the kernel. +# The third is for low-level use by the ForkExec wrapper; +# unlike the first two, it does not call into the scheduler to +# let it know that a system call is running. +# +# * syscall_${GOOS}.go +# +# This hand-written Go file implements system calls that need +# special handling and lists "//sys" comments giving prototypes +# for ones that can be auto-generated. Mksyscall reads those +# comments to generate the stubs. +# +# * syscall_${GOOS}_${GOARCH}.go +# +# Same as syscall_${GOOS}.go except that it contains code specific +# to ${GOOS} on one particular architecture. +# +# * types_${GOOS}.c +# +# This hand-written C file includes standard C headers and then +# creates typedef or enum names beginning with a dollar sign +# (use of $ in variable names is a gcc extension). The hardest +# part about preparing this file is figuring out which headers to +# include and which symbols need to be #defined to get the +# actual data structures that pass through to the kernel system calls. +# Some C libraries present alternate versions for binary compatibility +# and translate them on the way in and out of system calls, but +# there is almost always a #define that can get the real ones. +# See types_darwin.c and types_linux.c for examples. +# +# * zerror_${GOOS}_${GOARCH}.go +# +# This machine-generated file defines the system's error numbers, +# error strings, and signal numbers. The generator is "mkerrors.sh". +# Usually no arguments are needed, but mkerrors.sh will pass its +# arguments on to godefs. +# +# * zsyscall_${GOOS}_${GOARCH}.go +# +# Generated by mksyscall.pl; see syscall_${GOOS}.go above. +# +# * zsysnum_${GOOS}_${GOARCH}.go +# +# Generated by mksysnum_${GOOS}. +# +# * ztypes_${GOOS}_${GOARCH}.go +# +# Generated by godefs; see types_${GOOS}.c above. + +GOOSARCH="${GOOS}_${GOARCH}" + +# defaults +mksyscall="./mksyscall.pl" +mkerrors="./mkerrors.sh" +zerrors="zerrors_$GOOSARCH.go" +mksysctl="" +zsysctl="zsysctl_$GOOSARCH.go" +mksysnum= +mktypes= +run="sh" + +case "$1" in +-syscalls) + for i in zsyscall*go + do + sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i + rm _$i + done + exit 0 + ;; +-n) + run="cat" + shift +esac + +case "$#" in +0) + ;; +*) + echo 'usage: mkall.sh [-n]' 1>&2 + exit 2 +esac + +case "$GOOSARCH" in +_* | *_ | _) + echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 + exit 1 + ;; +plan9_386) + mkerrors= + mksyscall="./mksyscall.pl -l32 -plan9" + mksysnum="./mksysnum_plan9.sh /n/sources/plan9/sys/src/libc/9syscall/sys.h" + mktypes="XXX" + ;; +*) + echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 + exit 1 + ;; +esac + +( + if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi + case "$GOOS" in + plan9) + syscall_goos="syscall_$GOOS.go" + if [ -n "$mksyscall" ]; then echo "$mksyscall $syscall_goos syscall_$GOOSARCH.go |gofmt >zsyscall_$GOOSARCH.go"; fi + ;; + esac + if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi + if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi + if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go |gofmt >ztypes_$GOOSARCH.go"; fi +) | $run diff --git a/vendor/golang.org/x/sys/plan9/mkerrors.sh b/vendor/golang.org/x/sys/plan9/mkerrors.sh new file mode 100755 index 0000000..052c86d --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/mkerrors.sh @@ -0,0 +1,246 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# Generate Go code listing errors and other #defined constant +# values (ENAMETOOLONG etc.), by asking the preprocessor +# about the definitions. + +unset LANG +export LC_ALL=C +export LC_CTYPE=C + +CC=${CC:-gcc} + +uname=$(uname) + +includes=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +ccflags="$@" + +# Write go tool cgo -godefs input. +( + echo package plan9 + echo + echo '/*' + indirect="includes_$(uname)" + echo "${!indirect} $includes" + echo '*/' + echo 'import "C"' + echo + echo 'const (' + + # The gcc command line prints all the #defines + # it encounters while processing the input + echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags | + awk ' + $1 != "#define" || $2 ~ /\(/ || $3 == "" {next} + + $2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers + $2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next} + $2 ~ /^(SCM_SRCRT)$/ {next} + $2 ~ /^(MAP_FAILED)$/ {next} + + $2 !~ /^ETH_/ && + $2 !~ /^EPROC_/ && + $2 !~ /^EQUIV_/ && + $2 !~ /^EXPR_/ && + $2 ~ /^E[A-Z0-9_]+$/ || + $2 ~ /^B[0-9_]+$/ || + $2 ~ /^V[A-Z0-9]+$/ || + $2 ~ /^CS[A-Z0-9]/ || + $2 ~ /^I(SIG|CANON|CRNL|EXTEN|MAXBEL|STRIP|UTF8)$/ || + $2 ~ /^IGN/ || + $2 ~ /^IX(ON|ANY|OFF)$/ || + $2 ~ /^IN(LCR|PCK)$/ || + $2 ~ /(^FLU?SH)|(FLU?SH$)/ || + $2 ~ /^C(LOCAL|READ)$/ || + $2 == "BRKINT" || + $2 == "HUPCL" || + $2 == "PENDIN" || + $2 == "TOSTOP" || + $2 ~ /^PAR/ || + $2 ~ /^SIG[^_]/ || + $2 ~ /^O[CNPFP][A-Z]+[^_][A-Z]+$/ || + $2 ~ /^IN_/ || + $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ || + $2 == "ICMPV6_FILTER" || + $2 == "SOMAXCONN" || + $2 == "NAME_MAX" || + $2 == "IFNAMSIZ" || + $2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ || + $2 ~ /^SYSCTL_VERS/ || + $2 ~ /^(MS|MNT)_/ || + $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || + $2 ~ /^(O|F|FD|NAME|S|PTRACE|PT)_/ || + $2 ~ /^LINUX_REBOOT_CMD_/ || + $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || + $2 !~ "NLA_TYPE_MASK" && + $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ || + $2 ~ /^SIOC/ || + $2 ~ /^TIOC/ || + $2 !~ "RTF_BITS" && + $2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || + $2 ~ /^BIOC/ || + $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || + $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|NOFILE|STACK)|RLIM_INFINITY/ || + $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || + $2 ~ /^CLONE_[A-Z_]+/ || + $2 !~ /^(BPF_TIMEVAL)$/ && + $2 ~ /^(BPF|DLT)_/ || + $2 !~ "WMESGLEN" && + $2 ~ /^W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^__WCOREFLAG$/ {next} + $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} + + {next} + ' | sort + + echo ')' +) >_const.go + +# Pull out the error names for later. +errors=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | + sort +) + +# Pull out the signal names for later. +signals=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort +) + +# Again, writing regexps to a file. +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' | + sort >_error.grep +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort >_signal.grep + +echo '// mkerrors.sh' "$@" +echo '// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT' +echo +go tool cgo -godefs -- "$@" _const.go >_error.out +cat _error.out | grep -vf _error.grep | grep -vf _signal.grep +echo +echo '// Errors' +echo 'const (' +cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= Errno(\1)/' +echo ')' + +echo +echo '// Signals' +echo 'const (' +cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= Signal(\1)/' +echo ')' + +# Run C program to print error and syscall strings. +( + echo -E " +#include +#include +#include +#include +#include +#include + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) + +enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below + +int errors[] = { +" + for i in $errors + do + echo -E ' '$i, + done + + echo -E " +}; + +int signals[] = { +" + for i in $signals + do + echo -E ' '$i, + done + + # Use -E because on some systems bash builtin interprets \n itself. + echo -E ' +}; + +static int +intcmp(const void *a, const void *b) +{ + return *(int*)a - *(int*)b; +} + +int +main(void) +{ + int i, j, e; + char buf[1024], *p; + + printf("\n\n// Error table\n"); + printf("var errors = [...]string {\n"); + qsort(errors, nelem(errors), sizeof errors[0], intcmp); + for(i=0; i 0 && errors[i-1] == e) + continue; + strcpy(buf, strerror(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + printf("\n\n// Signal table\n"); + printf("var signals = [...]string {\n"); + qsort(signals, nelem(signals), sizeof signals[0], intcmp); + for(i=0; i 0 && signals[i-1] == e) + continue; + strcpy(buf, strsignal(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + // cut trailing : number. + p = strrchr(buf, ":"[0]); + if(p) + *p = '\0'; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + return 0; +} + +' +) >_errors.c + +$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out diff --git a/vendor/golang.org/x/sys/plan9/mksyscall.pl b/vendor/golang.org/x/sys/plan9/mksyscall.pl new file mode 100755 index 0000000..ce8e1e4 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/mksyscall.pl @@ -0,0 +1,319 @@ +#!/usr/bin/env perl +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This program reads a file containing function prototypes +# (like syscall_plan9.go) and generates system call bodies. +# The prototypes are marked by lines beginning with "//sys" +# and read like func declarations if //sys is replaced by func, but: +# * The parameter lists must give a name for each argument. +# This includes return parameters. +# * The parameter lists must give a type for each argument: +# the (x, y, z int) shorthand is not allowed. +# * If the return parameter is an error number, it must be named errno. + +# A line beginning with //sysnb is like //sys, except that the +# goroutine will not be suspended during the execution of the system +# call. This must only be used for system calls which can never +# block, as otherwise the system call could cause all goroutines to +# hang. + +use strict; + +my $cmdline = "mksyscall.pl " . join(' ', @ARGV); +my $errors = 0; +my $_32bit = ""; +my $plan9 = 0; +my $openbsd = 0; +my $netbsd = 0; +my $dragonfly = 0; +my $nacl = 0; +my $arm = 0; # 64-bit value should use (even, odd)-pair + +if($ARGV[0] eq "-b32") { + $_32bit = "big-endian"; + shift; +} elsif($ARGV[0] eq "-l32") { + $_32bit = "little-endian"; + shift; +} +if($ARGV[0] eq "-plan9") { + $plan9 = 1; + shift; +} +if($ARGV[0] eq "-openbsd") { + $openbsd = 1; + shift; +} +if($ARGV[0] eq "-netbsd") { + $netbsd = 1; + shift; +} +if($ARGV[0] eq "-dragonfly") { + $dragonfly = 1; + shift; +} +if($ARGV[0] eq "-nacl") { + $nacl = 1; + shift; +} +if($ARGV[0] eq "-arm") { + $arm = 1; + shift; +} + +if($ARGV[0] =~ /^-/) { + print STDERR "usage: mksyscall.pl [-b32 | -l32] [file ...]\n"; + exit 1; +} + +sub parseparamlist($) { + my ($list) = @_; + $list =~ s/^\s*//; + $list =~ s/\s*$//; + if($list eq "") { + return (); + } + return split(/\s*,\s*/, $list); +} + +sub parseparam($) { + my ($p) = @_; + if($p !~ /^(\S*) (\S*)$/) { + print STDERR "$ARGV:$.: malformed parameter: $p\n"; + $errors = 1; + return ("xx", "int"); + } + return ($1, $2); +} + +my $text = ""; +while(<>) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, errno error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($func, $in, $out, $sysname) = ($2, $3, $4, $5); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # Try in vain to keep people from editing this file. + # The theory is that they jump into the middle of the file + # without reading the header. + $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + + # Go function header. + my $out_decl = @out ? sprintf(" (%s)", join(', ', @out)) : ""; + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out_decl; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my @uses = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, $errvar = BytePtrFromString($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, _ = BytePtrFromString($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass dummy pointer in that case. + # Used to pass nil, but some OSes or simulators reject write(fd, nil, 0). + $text .= "\tvar _p$n unsafe.Pointer\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = unsafe.Pointer(\&${name}[0])\n\t}"; + $text .= " else {\n\t\t_p$n = unsafe.Pointer(&_zero)\n\t}"; + $text .= "\n"; + push @args, "uintptr(_p$n)", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && ($openbsd || $netbsd)) { + push @args, "0"; + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $dragonfly) { + if ($func !~ /^extp(read|write)/i) { + push @args, "0"; + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $_32bit ne "") { + if(@args % 2 && $arm) { + # arm abi specifies 64-bit argument uses + # (even, odd) pair + push @args, "0" + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } + } else { + push @args, "uintptr($name)"; + } + } + + # Determine which form to use; pad args with zeros. + my $asm = "Syscall"; + if ($nonblock) { + $asm = "RawSyscall"; + } + if(@args <= 3) { + while(@args < 3) { + push @args, "0"; + } + } elsif(@args <= 6) { + $asm .= "6"; + while(@args < 6) { + push @args, "0"; + } + } elsif(@args <= 9) { + $asm .= "9"; + while(@args < 9) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # System call number. + if($sysname eq "") { + $sysname = "SYS_$func"; + $sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar + $sysname =~ y/a-z/A-Z/; + if($nacl) { + $sysname =~ y/A-Z/a-z/; + } + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm($sysname, $args)"; + + # Assign return values. + my $body = ""; + my @ret = ("_", "_", "_"); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err" && !$plan9) { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } elsif($name eq "err" && $plan9) { + $ret[0] = "r0"; + $ret[2] = "e1"; + next; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1" || $plan9) { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + foreach my $use (@uses) { + $text .= "\t$use\n"; + } + $text .= $body; + + if ($plan9 && $ret[2] eq "e1") { + $text .= "\tif int32(r0) == -1 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } elsif ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n\n"; +} + +chomp $text; +chomp $text; + +if($errors) { + exit 1; +} + +print <= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/golang.org/x/sys/plan9/syscall.go b/vendor/golang.org/x/sys/plan9/syscall.go new file mode 100644 index 0000000..df6f8c5 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/syscall.go @@ -0,0 +1,74 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build plan9 + +// Package plan9 contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display the OS-specific documentation for the current +// system. If you want godoc to display documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.ErrorString. +package plan9 // import "golang.org/x/sys/plan9" + +import "unsafe" + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, EINVAL + } + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mksyscall.pl. +var _zero uintptr + +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} + +// use is a no-op, but the compiler cannot see that it is. +// Calling use(p) ensures that p is kept live until that point. +//go:noescape +func use(p unsafe.Pointer) diff --git a/vendor/golang.org/x/sys/plan9/syscall_plan9.go b/vendor/golang.org/x/sys/plan9/syscall_plan9.go new file mode 100644 index 0000000..d39d07d --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/syscall_plan9.go @@ -0,0 +1,349 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Plan 9 system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and +// wrap it in our own nicer implementation. + +package plan9 + +import ( + "syscall" + "unsafe" +) + +// A Note is a string describing a process note. +// It implements the os.Signal interface. +type Note string + +func (n Note) Signal() {} + +func (n Note) String() string { + return string(n) +} + +var ( + Stdin = 0 + Stdout = 1 + Stderr = 2 +) + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.ErrorString) +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.ErrorString) +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) + +func atoi(b []byte) (n uint) { + n = 0 + for i := 0; i < len(b); i++ { + n = n*10 + uint(b[i]-'0') + } + return +} + +func cstring(s []byte) string { + for i := range s { + if s[i] == 0 { + return string(s[0:i]) + } + } + return string(s) +} + +func errstr() string { + var buf [ERRMAX]byte + + RawSyscall(SYS_ERRSTR, uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)), 0) + + buf[len(buf)-1] = 0 + return cstring(buf[:]) +} + +// Implemented in assembly to import from runtime. +func exit(code int) + +func Exit(code int) { exit(code) } + +func readnum(path string) (uint, error) { + var b [12]byte + + fd, e := Open(path, O_RDONLY) + if e != nil { + return 0, e + } + defer Close(fd) + + n, e := Pread(fd, b[:], 0) + + if e != nil { + return 0, e + } + + m := 0 + for ; m < n && b[m] == ' '; m++ { + } + + return atoi(b[m : n-1]), nil +} + +func Getpid() (pid int) { + n, _ := readnum("#c/pid") + return int(n) +} + +func Getppid() (ppid int) { + n, _ := readnum("#c/ppid") + return int(n) +} + +func Read(fd int, p []byte) (n int, err error) { + return Pread(fd, p, -1) +} + +func Write(fd int, p []byte) (n int, err error) { + return Pwrite(fd, p, -1) +} + +var ioSync int64 + +//sys fd2path(fd int, buf []byte) (err error) +func Fd2path(fd int) (path string, err error) { + var buf [512]byte + + e := fd2path(fd, buf[:]) + if e != nil { + return "", e + } + return cstring(buf[:]), nil +} + +//sys pipe(p *[2]int32) (err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return syscall.ErrorString("bad arg in system call") + } + var pp [2]int32 + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string) + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, e := seek(0, fd, offset, whence) + + if newoffset == -1 { + err = syscall.ErrorString(e) + } + return +} + +func Mkdir(path string, mode uint32) (err error) { + fd, err := Create(path, O_RDONLY, DMDIR|mode) + + if fd != -1 { + Close(fd) + } + + return +} + +type Waitmsg struct { + Pid int + Time [3]uint32 + Msg string +} + +func (w Waitmsg) Exited() bool { return true } +func (w Waitmsg) Signaled() bool { return false } + +func (w Waitmsg) ExitStatus() int { + if len(w.Msg) == 0 { + // a normal exit returns no message + return 0 + } + return 1 +} + +//sys await(s []byte) (n int, err error) +func Await(w *Waitmsg) (err error) { + var buf [512]byte + var f [5][]byte + + n, err := await(buf[:]) + + if err != nil || w == nil { + return + } + + nf := 0 + p := 0 + for i := 0; i < n && nf < len(f)-1; i++ { + if buf[i] == ' ' { + f[nf] = buf[p:i] + p = i + 1 + nf++ + } + } + f[nf] = buf[p:] + nf++ + + if nf != len(f) { + return syscall.ErrorString("invalid wait message") + } + w.Pid = int(atoi(f[0])) + w.Time[0] = uint32(atoi(f[1])) + w.Time[1] = uint32(atoi(f[2])) + w.Time[2] = uint32(atoi(f[3])) + w.Msg = cstring(f[4]) + if w.Msg == "''" { + // await() returns '' for no error + w.Msg = "" + } + return +} + +func Unmount(name, old string) (err error) { + fixwd() + oldp, err := BytePtrFromString(old) + if err != nil { + return err + } + oldptr := uintptr(unsafe.Pointer(oldp)) + + var r0 uintptr + var e syscall.ErrorString + + // bind(2) man page: If name is zero, everything bound or mounted upon old is unbound or unmounted. + if name == "" { + r0, _, e = Syscall(SYS_UNMOUNT, _zero, oldptr, 0) + } else { + namep, err := BytePtrFromString(name) + if err != nil { + return err + } + r0, _, e = Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(namep)), oldptr, 0) + } + + if int32(r0) == -1 { + err = e + } + return +} + +func Fchdir(fd int) (err error) { + path, err := Fd2path(fd) + + if err != nil { + return + } + + return Chdir(path) +} + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int32(nsec / 1e9) + return +} + +func nsec() int64 { + var scratch int64 + + r0, _, _ := Syscall(SYS_NSEC, uintptr(unsafe.Pointer(&scratch)), 0, 0) + // TODO(aram): remove hack after I fix _nsec in the pc64 kernel. + if r0 == 0 { + return scratch + } + return int64(r0) +} + +func Gettimeofday(tv *Timeval) error { + nsec := nsec() + *tv = NsecToTimeval(nsec) + return nil +} + +func Getpagesize() int { return 0x1000 } + +func Getegid() (egid int) { return -1 } +func Geteuid() (euid int) { return -1 } +func Getgid() (gid int) { return -1 } +func Getuid() (uid int) { return -1 } + +func Getgroups() (gids []int, err error) { + return make([]int, 0), nil +} + +//sys open(path string, mode int) (fd int, err error) +func Open(path string, mode int) (fd int, err error) { + fixwd() + return open(path, mode) +} + +//sys create(path string, mode int, perm uint32) (fd int, err error) +func Create(path string, mode int, perm uint32) (fd int, err error) { + fixwd() + return create(path, mode, perm) +} + +//sys remove(path string) (err error) +func Remove(path string) error { + fixwd() + return remove(path) +} + +//sys stat(path string, edir []byte) (n int, err error) +func Stat(path string, edir []byte) (n int, err error) { + fixwd() + return stat(path, edir) +} + +//sys bind(name string, old string, flag int) (err error) +func Bind(name string, old string, flag int) (err error) { + fixwd() + return bind(name, old, flag) +} + +//sys mount(fd int, afd int, old string, flag int, aname string) (err error) +func Mount(fd int, afd int, old string, flag int, aname string) (err error) { + fixwd() + return mount(fd, afd, old, flag, aname) +} + +//sys wstat(path string, edir []byte) (err error) +func Wstat(path string, edir []byte) (err error) { + fixwd() + return wstat(path, edir) +} + +//sys chdir(path string) (err error) +//sys Dup(oldfd int, newfd int) (fd int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys Close(fd int) (err error) +//sys Fstat(fd int, edir []byte) (n int, err error) +//sys Fwstat(fd int, edir []byte) (err error) diff --git a/vendor/golang.org/x/sys/plan9/syscall_test.go b/vendor/golang.org/x/sys/plan9/syscall_test.go new file mode 100644 index 0000000..8f829ba --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/syscall_test.go @@ -0,0 +1,33 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build plan9 + +package plan9_test + +import ( + "testing" + + "golang.org/x/sys/plan9" +) + +func testSetGetenv(t *testing.T, key, value string) { + err := plan9.Setenv(key, value) + if err != nil { + t.Fatalf("Setenv failed to set %q: %v", value, err) + } + newvalue, found := plan9.Getenv(key) + if !found { + t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) + } + if newvalue != value { + t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) + } +} + +func TestEnv(t *testing.T) { + testSetGetenv(t, "TESTENV", "AVALUE") + // make sure TESTENV gets set to "", not deleted + testSetGetenv(t, "TESTENV", "") +} diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go new file mode 100644 index 0000000..b35598a --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go @@ -0,0 +1,292 @@ +// mksyscall.pl -l32 -plan9 syscall_plan9.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +package plan9 + +import "unsafe" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fd2path(fd int, buf []byte) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]int32) (err error) { + r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func await(s []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(s) > 0 { + _p0 = unsafe.Pointer(&s[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func open(path string, mode int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func create(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func remove(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, edir []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(name string, old string, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(old) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(fd int, afd int, old string, flag int, aname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(old) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(aname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wstat(path string, edir []byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int, newfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, edir []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fwstat(fd int, edir []byte) (err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + if int32(r0) == -1 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go new file mode 100644 index 0000000..b35598a --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go @@ -0,0 +1,292 @@ +// mksyscall.pl -l32 -plan9 syscall_plan9.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +package plan9 + +import "unsafe" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fd2path(fd int, buf []byte) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]int32) (err error) { + r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func await(s []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(s) > 0 { + _p0 = unsafe.Pointer(&s[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func open(path string, mode int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func create(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func remove(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, edir []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(name string, old string, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(old) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(fd int, afd int, old string, flag int, aname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(old) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(aname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wstat(path string, edir []byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int, newfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, edir []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fwstat(fd int, edir []byte) (err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + if int32(r0) == -1 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go b/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go new file mode 100644 index 0000000..22e8abd --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go @@ -0,0 +1,49 @@ +// mksysnum_plan9.sh /opt/plan9/sys/src/libc/9syscall/sys.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +package plan9 + +const ( + SYS_SYSR1 = 0 + SYS_BIND = 2 + SYS_CHDIR = 3 + SYS_CLOSE = 4 + SYS_DUP = 5 + SYS_ALARM = 6 + SYS_EXEC = 7 + SYS_EXITS = 8 + SYS_FAUTH = 10 + SYS_SEGBRK = 12 + SYS_OPEN = 14 + SYS_OSEEK = 16 + SYS_SLEEP = 17 + SYS_RFORK = 19 + SYS_PIPE = 21 + SYS_CREATE = 22 + SYS_FD2PATH = 23 + SYS_BRK_ = 24 + SYS_REMOVE = 25 + SYS_NOTIFY = 28 + SYS_NOTED = 29 + SYS_SEGATTACH = 30 + SYS_SEGDETACH = 31 + SYS_SEGFREE = 32 + SYS_SEGFLUSH = 33 + SYS_RENDEZVOUS = 34 + SYS_UNMOUNT = 35 + SYS_SEMACQUIRE = 37 + SYS_SEMRELEASE = 38 + SYS_SEEK = 39 + SYS_FVERSION = 40 + SYS_ERRSTR = 41 + SYS_STAT = 42 + SYS_FSTAT = 43 + SYS_WSTAT = 44 + SYS_FWSTAT = 45 + SYS_MOUNT = 46 + SYS_AWAIT = 47 + SYS_PREAD = 50 + SYS_PWRITE = 51 + SYS_TSEMACQUIRE = 52 + SYS_NSEC = 53 +) diff --git a/vendor/golang.org/x/sys/unix/.gitignore b/vendor/golang.org/x/sys/unix/.gitignore new file mode 100644 index 0000000..e482715 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/.gitignore @@ -0,0 +1 @@ +_obj/ diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md new file mode 100644 index 0000000..bc6f603 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/README.md @@ -0,0 +1,173 @@ +# Building `sys/unix` + +The sys/unix package provides access to the raw system call interface of the +underlying operating system. See: https://godoc.org/golang.org/x/sys/unix + +Porting Go to a new architecture/OS combination or adding syscalls, types, or +constants to an existing architecture/OS pair requires some manual effort; +however, there are tools that automate much of the process. + +## Build Systems + +There are currently two ways we generate the necessary files. We are currently +migrating the build system to use containers so the builds are reproducible. +This is being done on an OS-by-OS basis. Please update this documentation as +components of the build system change. + +### Old Build System (currently for `GOOS != "Linux" || GOARCH == "sparc64"`) + +The old build system generates the Go files based on the C header files +present on your system. This means that files +for a given GOOS/GOARCH pair must be generated on a system with that OS and +architecture. This also means that the generated code can differ from system +to system, based on differences in the header files. + +To avoid this, if you are using the old build system, only generate the Go +files on an installation with unmodified header files. It is also important to +keep track of which version of the OS the files were generated from (ex. +Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes +and have each OS upgrade correspond to a single change. + +To build the files for your current OS and architecture, make sure GOOS and +GOARCH are set correctly and run `mkall.sh`. This will generate the files for +your specific system. Running `mkall.sh -n` shows the commands that will be run. + +Requirements: bash, perl, go + +### New Build System (currently for `GOOS == "Linux" && GOARCH != "sparc64"`) + +The new build system uses a Docker container to generate the go files directly +from source checkouts of the kernel and various system libraries. This means +that on any platform that supports Docker, all the files using the new build +system can be generated at once, and generated files will not change based on +what the person running the scripts has installed on their computer. + +The OS specific files for the new build system are located in the `${GOOS}` +directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When +the kernel or system library updates, modify the Dockerfile at +`${GOOS}/Dockerfile` to checkout the new release of the source. + +To build all the files under the new build system, you must be on an amd64/Linux +system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will +then generate all of the files for all of the GOOS/GOARCH pairs in the new build +system. Running `mkall.sh -n` shows the commands that will be run. + +Requirements: bash, perl, go, docker + +## Component files + +This section describes the various files used in the code generation process. +It also contains instructions on how to modify these files to add a new +architecture/OS or to add additional syscalls, types, or constants. Note that +if you are using the new build system, the scripts cannot be called normally. +They must be called from within the docker container. + +### asm files + +The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system +call dispatch. There are three entry points: +``` + func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) + func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) + func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) +``` +The first and second are the standard ones; they differ only in how many +arguments can be passed to the kernel. The third is for low-level use by the +ForkExec wrapper. Unlike the first two, it does not call into the scheduler to +let it know that a system call is running. + +When porting Go to an new architecture/OS, this file must be implemented for +each GOOS/GOARCH pair. + +### mksysnum + +Mksysnum is a script located at `${GOOS}/mksysnum.pl` (or `mksysnum_${GOOS}.pl` +for the old system). This script takes in a list of header files containing the +syscall number declarations and parses them to produce the corresponding list of +Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated +constants. + +Adding new syscall numbers is mostly done by running the build on a sufficiently +new installation of the target OS (or updating the source checkouts for the +new build system). However, depending on the OS, you make need to update the +parsing in mksysnum. + +### mksyscall.pl + +The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are +hand-written Go files which implement system calls (for unix, the specific OS, +or the specific OS/Architecture pair respectively) that need special handling +and list `//sys` comments giving prototypes for ones that can be generated. + +The mksyscall.pl script takes the `//sys` and `//sysnb` comments and converts +them into syscalls. This requires the name of the prototype in the comment to +match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function +prototype can be exported (capitalized) or not. + +Adding a new syscall often just requires adding a new `//sys` function prototype +with the desired arguments and a capitalized name so it is exported. However, if +you want the interface to the syscall to be different, often one will make an +unexported `//sys` prototype, an then write a custom wrapper in +`syscall_${GOOS}.go`. + +### types files + +For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or +`types_${GOOS}.go` on the old system). This file includes standard C headers and +creates Go type aliases to the corresponding C types. The file is then fed +through godef to get the Go compatible definitions. Finally, the generated code +is fed though mkpost.go to format the code correctly and remove any hidden or +private identifiers. This cleaned-up code is written to +`ztypes_${GOOS}_${GOARCH}.go`. + +The hardest part about preparing this file is figuring out which headers to +include and which symbols need to be `#define`d to get the actual data +structures that pass through to the kernel system calls. Some C libraries +preset alternate versions for binary compatibility and translate them on the +way in and out of system calls, but there is almost always a `#define` that can +get the real ones. +See `types_darwin.go` and `linux/types.go` for examples. + +To add a new type, add in the necessary include statement at the top of the +file (if it is not already there) and add in a type alias line. Note that if +your type is significantly different on different architectures, you may need +some `#if/#elif` macros in your include statements. + +### mkerrors.sh + +This script is used to generate the system's various constants. This doesn't +just include the error numbers and error strings, but also the signal numbers +an a wide variety of miscellaneous constants. The constants come from the list +of include files in the `includes_${uname}` variable. A regex then picks out +the desired `#define` statements, and generates the corresponding Go constants. +The error numbers and strings are generated from `#include `, and the +signal numbers and strings are generated from `#include `. All of +these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program, +`_errors.c`, which prints out all the constants. + +To add a constant, add the header that includes it to the appropriate variable. +Then, edit the regex (if necessary) to match the desired constant. Avoid making +the regex too broad to avoid matching unintended constants. + + +## Generated files + +### `zerror_${GOOS}_${GOARCH}.go` + +A file containing all of the system's generated error numbers, error strings, +signal numbers, and constants. Generated by `mkerrors.sh` (see above). + +### `zsyscall_${GOOS}_${GOARCH}.go` + +A file containing all the generated syscalls for a specific GOOS and GOARCH. +Generated by `mksyscall.pl` (see above). + +### `zsysnum_${GOOS}_${GOARCH}.go` + +A list of numeric constants for all the syscall number of the specific GOOS +and GOARCH. Generated by mksysnum (see above). + +### `ztypes_${GOOS}_${GOARCH}.go` + +A file containing Go types for passing into (or returning from) syscalls. +Generated by godefs and the types file (see above). diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_386.s b/vendor/golang.org/x/sys/unix/asm_darwin_386.s new file mode 100644 index 0000000..8a72783 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s b/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s new file mode 100644 index 0000000..6321421 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_arm.s b/vendor/golang.org/x/sys/unix/asm_darwin_arm.s new file mode 100644 index 0000000..333242d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_arm.s @@ -0,0 +1,30 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo +// +build arm,darwin + +#include "textflag.h" + +// +// System call support for ARM, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s b/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s new file mode 100644 index 0000000..97e0174 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s @@ -0,0 +1,30 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo +// +build arm64,darwin + +#include "textflag.h" + +// +// System call support for AMD64, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s b/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s new file mode 100644 index 0000000..d5ed672 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, DragonFly +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-64 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-88 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-112 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-64 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_386.s b/vendor/golang.org/x/sys/unix/asm_freebsd_386.s new file mode 100644 index 0000000..c9a0a26 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_freebsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s new file mode 100644 index 0000000..3517247 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s b/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s new file mode 100644 index 0000000..9227c87 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_386.s b/vendor/golang.org/x/sys/unix/asm_linux_386.s new file mode 100644 index 0000000..4db2909 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_386.s @@ -0,0 +1,35 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for 386, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·socketcall(SB),NOSPLIT,$0-36 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 + JMP syscall·rawsocketcall(SB) + +TEXT ·seek(SB),NOSPLIT,$0-28 + JMP syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s new file mode 100644 index 0000000..44e25c6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for AMD64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·gettimeofday(SB),NOSPLIT,$0-16 + JMP syscall·gettimeofday(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm.s b/vendor/golang.org/x/sys/unix/asm_linux_arm.s new file mode 100644 index 0000000..cf0b574 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for arm, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) + +TEXT ·seek(SB),NOSPLIT,$0-32 + B syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s new file mode 100644 index 0000000..4be9bfe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s @@ -0,0 +1,24 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build arm64 +// +build !gccgo + +#include "textflag.h" + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + B syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s new file mode 100644 index 0000000..724e580 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s @@ -0,0 +1,28 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips64 mips64le +// +build !gccgo + +#include "textflag.h" + +// +// System calls for mips64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s new file mode 100644 index 0000000..2ea4257 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s @@ -0,0 +1,31 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips mipsle +// +build !gccgo + +#include "textflag.h" + +// +// System calls for mips, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s new file mode 100644 index 0000000..8d231fe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s @@ -0,0 +1,28 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build ppc64 ppc64le +// +build !gccgo + +#include "textflag.h" + +// +// System calls for ppc64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + BR syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + BR syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + BR syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + BR syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s new file mode 100644 index 0000000..1188985 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s @@ -0,0 +1,28 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build s390x +// +build linux +// +build !gccgo + +#include "textflag.h" + +// +// System calls for s390x, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + BR syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + BR syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + BR syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + BR syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_netbsd_386.s b/vendor/golang.org/x/sys/unix/asm_netbsd_386.s new file mode 100644 index 0000000..48bdcd7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_netbsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s new file mode 100644 index 0000000..2ede05c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s b/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s new file mode 100644 index 0000000..e892857 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_386.s b/vendor/golang.org/x/sys/unix/asm_openbsd_386.s new file mode 100644 index 0000000..00576f3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_openbsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s new file mode 100644 index 0000000..790ef77 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s new file mode 100644 index 0000000..ded8260 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s @@ -0,0 +1,17 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go +// + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) + +TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSysvicall6(SB) diff --git a/vendor/golang.org/x/sys/unix/bluetooth_linux.go b/vendor/golang.org/x/sys/unix/bluetooth_linux.go new file mode 100644 index 0000000..6e32296 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/bluetooth_linux.go @@ -0,0 +1,35 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Bluetooth sockets and messages + +package unix + +// Bluetooth Protocols +const ( + BTPROTO_L2CAP = 0 + BTPROTO_HCI = 1 + BTPROTO_SCO = 2 + BTPROTO_RFCOMM = 3 + BTPROTO_BNEP = 4 + BTPROTO_CMTP = 5 + BTPROTO_HIDP = 6 + BTPROTO_AVDTP = 7 +) + +const ( + HCI_CHANNEL_RAW = 0 + HCI_CHANNEL_USER = 1 + HCI_CHANNEL_MONITOR = 2 + HCI_CHANNEL_CONTROL = 3 +) + +// Socketoption Level +const ( + SOL_BLUETOOTH = 0x112 + SOL_HCI = 0x0 + SOL_L2CAP = 0x6 + SOL_RFCOMM = 0x12 + SOL_SCO = 0x11 +) diff --git a/vendor/golang.org/x/sys/unix/cap_freebsd.go b/vendor/golang.org/x/sys/unix/cap_freebsd.go new file mode 100644 index 0000000..83b6bce --- /dev/null +++ b/vendor/golang.org/x/sys/unix/cap_freebsd.go @@ -0,0 +1,195 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd + +package unix + +import ( + errorspkg "errors" + "fmt" +) + +// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c + +const ( + // This is the version of CapRights this package understands. See C implementation for parallels. + capRightsGoVersion = CAP_RIGHTS_VERSION_00 + capArSizeMin = CAP_RIGHTS_VERSION_00 + 2 + capArSizeMax = capRightsGoVersion + 2 +) + +var ( + bit2idx = []int{ + -1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, + 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + } +) + +func capidxbit(right uint64) int { + return int((right >> 57) & 0x1f) +} + +func rightToIndex(right uint64) (int, error) { + idx := capidxbit(right) + if idx < 0 || idx >= len(bit2idx) { + return -2, fmt.Errorf("index for right 0x%x out of range", right) + } + return bit2idx[idx], nil +} + +func caprver(right uint64) int { + return int(right >> 62) +} + +func capver(rights *CapRights) int { + return caprver(rights.Rights[0]) +} + +func caparsize(rights *CapRights) int { + return capver(rights) + 2 +} + +// CapRightsSet sets the permissions in setrights in rights. +func CapRightsSet(rights *CapRights, setrights []uint64) error { + // This is essentially a copy of cap_rights_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errorspkg.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errorspkg.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errorspkg.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch") + } + rights.Rights[i] |= right + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsClear clears the permissions in clearrights from rights. +func CapRightsClear(rights *CapRights, clearrights []uint64) error { + // This is essentially a copy of cap_rights_vclear() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errorspkg.New("bad rights size") + } + + for _, right := range clearrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errorspkg.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errorspkg.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch") + } + rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF) + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsIsSet checks whether all the permissions in setrights are present in rights. +func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) { + // This is essentially a copy of cap_rights_is_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return false, fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return false, errorspkg.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return false, errorspkg.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return false, err + } + if i >= n { + return false, errorspkg.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return false, errorspkg.New("index mismatch") + } + if (rights.Rights[i] & right) != right { + return false, nil + } + } + + return true, nil +} + +func capright(idx uint64, bit uint64) uint64 { + return ((1 << (57 + idx)) | bit) +} + +// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights. +// See man cap_rights_init(3) and rights(4). +func CapRightsInit(rights []uint64) (*CapRights, error) { + var r CapRights + r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0) + r.Rights[1] = capright(1, 0) + + err := CapRightsSet(&r, rights) + if err != nil { + return nil, err + } + return &r, nil +} + +// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights. +// The capability rights on fd can never be increased by CapRightsLimit. +// See man cap_rights_limit(2) and rights(4). +func CapRightsLimit(fd uintptr, rights *CapRights) error { + return capRightsLimit(int(fd), rights) +} + +// CapRightsGet returns a CapRights structure containing the operations permitted on fd. +// See man cap_rights_get(3) and rights(4). +func CapRightsGet(fd uintptr) (*CapRights, error) { + r, err := CapRightsInit(nil) + if err != nil { + return nil, err + } + err = capRightsGet(capRightsGoVersion, int(fd), r) + if err != nil { + return nil, err + } + return r, nil +} diff --git a/vendor/golang.org/x/sys/unix/constants.go b/vendor/golang.org/x/sys/unix/constants.go new file mode 100644 index 0000000..a96f0eb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/constants.go @@ -0,0 +1,13 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +const ( + R_OK = 0x4 + W_OK = 0x2 + X_OK = 0x1 +) diff --git a/vendor/golang.org/x/sys/unix/creds_test.go b/vendor/golang.org/x/sys/unix/creds_test.go new file mode 100644 index 0000000..eaae7c3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/creds_test.go @@ -0,0 +1,121 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package unix_test + +import ( + "bytes" + "net" + "os" + "syscall" + "testing" + + "golang.org/x/sys/unix" +) + +// TestSCMCredentials tests the sending and receiving of credentials +// (PID, UID, GID) in an ancillary message between two UNIX +// sockets. The SO_PASSCRED socket option is enabled on the sending +// socket for this to work. +func TestSCMCredentials(t *testing.T) { + fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0) + if err != nil { + t.Fatalf("Socketpair: %v", err) + } + defer unix.Close(fds[0]) + defer unix.Close(fds[1]) + + err = unix.SetsockoptInt(fds[0], unix.SOL_SOCKET, unix.SO_PASSCRED, 1) + if err != nil { + t.Fatalf("SetsockoptInt: %v", err) + } + + srvFile := os.NewFile(uintptr(fds[0]), "server") + defer srvFile.Close() + srv, err := net.FileConn(srvFile) + if err != nil { + t.Errorf("FileConn: %v", err) + return + } + defer srv.Close() + + cliFile := os.NewFile(uintptr(fds[1]), "client") + defer cliFile.Close() + cli, err := net.FileConn(cliFile) + if err != nil { + t.Errorf("FileConn: %v", err) + return + } + defer cli.Close() + + var ucred unix.Ucred + if os.Getuid() != 0 { + ucred.Pid = int32(os.Getpid()) + ucred.Uid = 0 + ucred.Gid = 0 + oob := unix.UnixCredentials(&ucred) + _, _, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) + if op, ok := err.(*net.OpError); ok { + err = op.Err + } + if sys, ok := err.(*os.SyscallError); ok { + err = sys.Err + } + if err != syscall.EPERM { + t.Fatalf("WriteMsgUnix failed with %v, want EPERM", err) + } + } + + ucred.Pid = int32(os.Getpid()) + ucred.Uid = uint32(os.Getuid()) + ucred.Gid = uint32(os.Getgid()) + oob := unix.UnixCredentials(&ucred) + + // this is going to send a dummy byte + n, oobn, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) + if err != nil { + t.Fatalf("WriteMsgUnix: %v", err) + } + if n != 0 { + t.Fatalf("WriteMsgUnix n = %d, want 0", n) + } + if oobn != len(oob) { + t.Fatalf("WriteMsgUnix oobn = %d, want %d", oobn, len(oob)) + } + + oob2 := make([]byte, 10*len(oob)) + n, oobn2, flags, _, err := srv.(*net.UnixConn).ReadMsgUnix(nil, oob2) + if err != nil { + t.Fatalf("ReadMsgUnix: %v", err) + } + if flags != 0 { + t.Fatalf("ReadMsgUnix flags = 0x%x, want 0", flags) + } + if n != 1 { + t.Fatalf("ReadMsgUnix n = %d, want 1 (dummy byte)", n) + } + if oobn2 != oobn { + // without SO_PASSCRED set on the socket, ReadMsgUnix will + // return zero oob bytes + t.Fatalf("ReadMsgUnix oobn = %d, want %d", oobn2, oobn) + } + oob2 = oob2[:oobn2] + if !bytes.Equal(oob, oob2) { + t.Fatal("ReadMsgUnix oob bytes don't match") + } + + scm, err := unix.ParseSocketControlMessage(oob2) + if err != nil { + t.Fatalf("ParseSocketControlMessage: %v", err) + } + newUcred, err := unix.ParseUnixCredentials(&scm[0]) + if err != nil { + t.Fatalf("ParseUnixCredentials: %v", err) + } + if *newUcred != ucred { + t.Fatalf("ParseUnixCredentials = %+v, want %+v", newUcred, ucred) + } +} diff --git a/vendor/golang.org/x/sys/unix/dirent.go b/vendor/golang.org/x/sys/unix/dirent.go new file mode 100644 index 0000000..bd47581 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dirent.go @@ -0,0 +1,102 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris + +package unix + +import "unsafe" + +// readInt returns the size-bytes unsigned integer in native byte order at offset off. +func readInt(b []byte, off, size uintptr) (u uint64, ok bool) { + if len(b) < int(off+size) { + return 0, false + } + if isBigEndian { + return readIntBE(b[off:], size), true + } + return readIntLE(b[off:], size), true +} + +func readIntBE(b []byte, size uintptr) uint64 { + switch size { + case 1: + return uint64(b[0]) + case 2: + _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[1]) | uint64(b[0])<<8 + case 4: + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24 + case 8: + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | + uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 + default: + panic("syscall: readInt with unsupported size") + } +} + +func readIntLE(b []byte, size uintptr) uint64 { + switch size { + case 1: + return uint64(b[0]) + case 2: + _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 + case 4: + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 + case 8: + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + default: + panic("syscall: readInt with unsupported size") + } +} + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number of +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + count = 0 + for max != 0 && len(buf) > 0 { + reclen, ok := direntReclen(buf) + if !ok || reclen > uint64(len(buf)) { + return origlen, count, names + } + rec := buf[:reclen] + buf = buf[reclen:] + ino, ok := direntIno(rec) + if !ok { + break + } + if ino == 0 { // File absent in directory. + continue + } + const namoff = uint64(unsafe.Offsetof(Dirent{}.Name)) + namlen, ok := direntNamlen(rec) + if !ok || namoff+namlen > uint64(len(rec)) { + break + } + name := rec[namoff : namoff+namlen] + for i, c := range name { + if c == 0 { + name = name[:i] + break + } + } + // Check for useless names before allocating a string. + if string(name) == "." || string(name) == ".." { + continue + } + max-- + count++ + names = append(names, string(name)) + } + return origlen - len(buf), count, names +} diff --git a/vendor/golang.org/x/sys/unix/endian_big.go b/vendor/golang.org/x/sys/unix/endian_big.go new file mode 100644 index 0000000..5e92690 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/endian_big.go @@ -0,0 +1,9 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// +build ppc64 s390x mips mips64 + +package unix + +const isBigEndian = true diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go new file mode 100644 index 0000000..085df2d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/endian_little.go @@ -0,0 +1,9 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le + +package unix + +const isBigEndian = false diff --git a/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/golang.org/x/sys/unix/env_unix.go new file mode 100644 index 0000000..45e281a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/env_unix.go @@ -0,0 +1,27 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +// Unix environment variables. + +package unix + +import "syscall" + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} diff --git a/vendor/golang.org/x/sys/unix/env_unset.go b/vendor/golang.org/x/sys/unix/env_unset.go new file mode 100644 index 0000000..9222262 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/env_unset.go @@ -0,0 +1,14 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.4 + +package unix + +import "syscall" + +func Unsetenv(key string) error { + // This was added in Go 1.4. + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/unix/export_test.go b/vendor/golang.org/x/sys/unix/export_test.go new file mode 100644 index 0000000..b4fdd97 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/export_test.go @@ -0,0 +1,9 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +var Itoa = itoa diff --git a/vendor/golang.org/x/sys/unix/file_unix.go b/vendor/golang.org/x/sys/unix/file_unix.go new file mode 100644 index 0000000..47f6a83 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/file_unix.go @@ -0,0 +1,27 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +import ( + "os" + "syscall" +) + +// FIXME: unexported function from os +// syscallMode returns the syscall-specific mode bits from Go's portable mode bits. +func syscallMode(i os.FileMode) (o uint32) { + o |= uint32(i.Perm()) + if i&os.ModeSetuid != 0 { + o |= syscall.S_ISUID + } + if i&os.ModeSetgid != 0 { + o |= syscall.S_ISGID + } + if i&os.ModeSticky != 0 { + o |= syscall.S_ISVTX + } + // No mapping for Go's ModeTemporary (plan9 only). + return +} diff --git a/vendor/golang.org/x/sys/unix/flock.go b/vendor/golang.org/x/sys/unix/flock.go new file mode 100644 index 0000000..ce67a59 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/flock.go @@ -0,0 +1,24 @@ +// +build linux darwin freebsd openbsd netbsd dragonfly + +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package unix + +import "unsafe" + +// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux +// systems by flock_linux_32bit.go to be SYS_FCNTL64. +var fcntl64Syscall uintptr = SYS_FCNTL + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk))) + if errno == 0 { + return nil + } + return errno +} diff --git a/vendor/golang.org/x/sys/unix/flock_linux_32bit.go b/vendor/golang.org/x/sys/unix/flock_linux_32bit.go new file mode 100644 index 0000000..fc0e50e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/flock_linux_32bit.go @@ -0,0 +1,13 @@ +// +build linux,386 linux,arm linux,mips linux,mipsle + +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +func init() { + // On 32-bit Linux systems, the fcntl syscall that matches Go's + // Flock_t type is SYS_FCNTL64, not SYS_FCNTL. + fcntl64Syscall = SYS_FCNTL64 +} diff --git a/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/golang.org/x/sys/unix/gccgo.go new file mode 100644 index 0000000..94c8232 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo.go @@ -0,0 +1,46 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo + +package unix + +import "syscall" + +// We can't use the gc-syntax .s files for gccgo. On the plus side +// much of the functionality can be written directly in Go. + +//extern gccgoRealSyscall +func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr) + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} + +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c new file mode 100644 index 0000000..07f6be0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_c.c @@ -0,0 +1,41 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo + +#include +#include +#include + +#define _STRINGIFY2_(x) #x +#define _STRINGIFY_(x) _STRINGIFY2_(x) +#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__) + +// Call syscall from C code because the gccgo support for calling from +// Go to C does not support varargs functions. + +struct ret { + uintptr_t r; + uintptr_t err; +}; + +struct ret +gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) +{ + struct ret r; + + errno = 0; + r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); + r.err = errno; + return r; +} + +// Define the use function in C so that it is not inlined. + +extern void use(void *) __asm__ (GOSYM_PREFIX GOPKGPATH ".use") __attribute__((noinline)); + +void +use(void *p __attribute__ ((unused))) +{ +} diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go new file mode 100644 index 0000000..bffe1a7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go @@ -0,0 +1,20 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo,linux,amd64 + +package unix + +import "syscall" + +//extern gettimeofday +func realGettimeofday(*Timeval, *byte) int32 + +func gettimeofday(tv *Timeval) (err syscall.Errno) { + r := realGettimeofday(tv, nil) + if r < 0 { + return syscall.GetErrno() + } + return 0 +} diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go new file mode 100644 index 0000000..5633269 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go @@ -0,0 +1,20 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo,linux,sparc64 + +package unix + +import "syscall" + +//extern sysconf +func realSysconf(name int) int64 + +func sysconf(name int) (n int64, err syscall.Errno) { + r := realSysconf(name) + if r < 0 { + return 0, syscall.GetErrno() + } + return r, 0 +} diff --git a/vendor/golang.org/x/sys/unix/linux/Dockerfile b/vendor/golang.org/x/sys/unix/linux/Dockerfile new file mode 100644 index 0000000..4397143 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/linux/Dockerfile @@ -0,0 +1,48 @@ +FROM ubuntu:16.04 + +# Dependencies to get the git sources and go binaries +RUN apt-get update && apt-get install -y \ + curl \ + git \ + && rm -rf /var/lib/apt/lists/* + +# Get the git sources. If not cached, this takes O(5 minutes). +WORKDIR /git +RUN git config --global advice.detachedHead false +# Linux Kernel: Released 19 Feb 2017 +RUN git clone --branch v4.10 --depth 1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux +# GNU C library: Released 05 Feb 2017 (we should try to get a secure way to clone this) +RUN git clone --branch glibc-2.25 --depth 1 git://sourceware.org/git/glibc.git + +# Get Go 1.8 (https://github.com/docker-library/golang/blob/master/1.8/Dockerfile) +ENV GOLANG_VERSION 1.8 +ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz +ENV GOLANG_DOWNLOAD_SHA256 53ab94104ee3923e228a2cb2116e5e462ad3ebaeea06ff04463479d7f12d27ca + +RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \ + && echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - \ + && tar -C /usr/local -xzf golang.tar.gz \ + && rm golang.tar.gz + +ENV PATH /usr/local/go/bin:$PATH + +# Linux and Glibc build dependencies +RUN apt-get update && apt-get install -y \ + gawk make python \ + gcc gcc-multilib \ + gettext texinfo \ + && rm -rf /var/lib/apt/lists/* +# Emulator and cross compilers +RUN apt-get update && apt-get install -y \ + qemu \ + gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi \ + gcc-mips-linux-gnu gcc-mips64-linux-gnuabi64 \ + gcc-mips64el-linux-gnuabi64 gcc-mipsel-linux-gnu \ + gcc-powerpc64-linux-gnu gcc-powerpc64le-linux-gnu \ + gcc-s390x-linux-gnu gcc-sparc64-linux-gnu \ + && rm -rf /var/lib/apt/lists/* + +# Let the scripts know they are in the docker environment +ENV GOLANG_SYS_BUILD docker +WORKDIR /build +ENTRYPOINT ["go", "run", "linux/mkall.go", "/git/linux", "/git/glibc"] diff --git a/vendor/golang.org/x/sys/unix/linux/mkall.go b/vendor/golang.org/x/sys/unix/linux/mkall.go new file mode 100644 index 0000000..429754f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/linux/mkall.go @@ -0,0 +1,379 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// linux/mkall.go - Generates all Linux zsysnum, zsyscall, zerror, and ztype +// files for all 11 linux architectures supported by the go compiler. See +// README.md for more information about the build system. + +// To run it you must have a git checkout of the Linux kernel and glibc. Once +// the appropriate sources are ready, the program is run as: +// go run linux/mkall.go + +// +build ignore + +package main + +import ( + "fmt" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" +) + +// These will be paths to the appropriate source directories. +var LinuxDir string +var GlibcDir string + +const TempDir = "/tmp" +const IncludeDir = TempDir + "/include" // To hold our C headers +const BuildDir = TempDir + "/build" // To hold intermediate build files + +const GOOS = "linux" // Only for Linux targets +const BuildArch = "amd64" // Must be built on this architecture +const MinKernel = "2.6.23" // https://golang.org/doc/install#requirements + +type target struct { + GoArch string // Architecture name according to Go + LinuxArch string // Architecture name according to the Linux Kernel + GNUArch string // Architecture name according to GNU tools (https://wiki.debian.org/Multiarch/Tuples) + BigEndian bool // Default Little Endian + SignedChar bool // Is -fsigned-char needed (default no) + Bits int +} + +// List of the 11 Linux targets supported by the go compiler. sparc64 is not +// currently supported, though a port is in progress. +var targets = []target{ + { + GoArch: "386", + LinuxArch: "x86", + GNUArch: "i686-linux-gnu", // Note "i686" not "i386" + Bits: 32, + }, + { + GoArch: "amd64", + LinuxArch: "x86", + GNUArch: "x86_64-linux-gnu", + Bits: 64, + }, + { + GoArch: "arm64", + LinuxArch: "arm64", + GNUArch: "aarch64-linux-gnu", + SignedChar: true, + Bits: 64, + }, + { + GoArch: "arm", + LinuxArch: "arm", + GNUArch: "arm-linux-gnueabi", + Bits: 32, + }, + { + GoArch: "mips", + LinuxArch: "mips", + GNUArch: "mips-linux-gnu", + BigEndian: true, + Bits: 32, + }, + { + GoArch: "mipsle", + LinuxArch: "mips", + GNUArch: "mipsel-linux-gnu", + Bits: 32, + }, + { + GoArch: "mips64", + LinuxArch: "mips", + GNUArch: "mips64-linux-gnuabi64", + BigEndian: true, + Bits: 64, + }, + { + GoArch: "mips64le", + LinuxArch: "mips", + GNUArch: "mips64el-linux-gnuabi64", + Bits: 64, + }, + { + GoArch: "ppc64", + LinuxArch: "powerpc", + GNUArch: "powerpc64-linux-gnu", + BigEndian: true, + Bits: 64, + }, + { + GoArch: "ppc64le", + LinuxArch: "powerpc", + GNUArch: "powerpc64le-linux-gnu", + Bits: 64, + }, + { + GoArch: "s390x", + LinuxArch: "s390", + GNUArch: "s390x-linux-gnu", + BigEndian: true, + SignedChar: true, + Bits: 64, + }, + // { + // GoArch: "sparc64", + // LinuxArch: "sparc", + // GNUArch: "sparc64-linux-gnu", + // BigEndian: true, + // Bits: 64, + // }, +} + +func main() { + if runtime.GOOS != GOOS || runtime.GOARCH != BuildArch { + fmt.Printf("Build system has GOOS_GOARCH = %s_%s, need %s_%s\n", + runtime.GOOS, runtime.GOARCH, GOOS, BuildArch) + return + } + + // Check that we are using the new build system if we should + if os.Getenv("GOLANG_SYS_BUILD") != "docker" { + fmt.Println("In the new build system, mkall.go should not be called directly.") + fmt.Println("See README.md") + return + } + + // Parse the command line options + if len(os.Args) != 3 { + fmt.Println("USAGE: go run linux/mkall.go ") + return + } + LinuxDir = os.Args[1] + GlibcDir = os.Args[2] + + for _, t := range targets { + fmt.Printf("----- GENERATING: %s -----\n", t.GoArch) + if err := t.generateFiles(); err != nil { + fmt.Printf("%v\n***** FAILURE: %s *****\n\n", err, t.GoArch) + } else { + fmt.Printf("----- SUCCESS: %s -----\n\n", t.GoArch) + } + } +} + +// Makes an exec.Cmd with Stderr attached to os.Stderr +func makeCommand(name string, args ...string) *exec.Cmd { + cmd := exec.Command(name, args...) + cmd.Stderr = os.Stderr + return cmd +} + +// Runs the command, pipes output to a formatter, pipes that to an output file. +func (t *target) commandFormatOutput(formatter string, outputFile string, + name string, args ...string) (err error) { + mainCmd := makeCommand(name, args...) + + fmtCmd := makeCommand(formatter) + if formatter == "mkpost" { + fmtCmd = makeCommand("go", "run", "mkpost.go") + // Set GOARCH_TARGET so mkpost knows what GOARCH is.. + fmtCmd.Env = append(os.Environ(), "GOARCH_TARGET="+t.GoArch) + // Set GOARCH to host arch for mkpost, so it can run natively. + for i, s := range fmtCmd.Env { + if strings.HasPrefix(s, "GOARCH=") { + fmtCmd.Env[i] = "GOARCH=" + BuildArch + } + } + } + + // mainCmd | fmtCmd > outputFile + if fmtCmd.Stdin, err = mainCmd.StdoutPipe(); err != nil { + return + } + if fmtCmd.Stdout, err = os.Create(outputFile); err != nil { + return + } + + // Make sure the formatter eventually closes + if err = fmtCmd.Start(); err != nil { + return + } + defer func() { + fmtErr := fmtCmd.Wait() + if err == nil { + err = fmtErr + } + }() + + return mainCmd.Run() +} + +// Generates all the files for a Linux target +func (t *target) generateFiles() error { + // Setup environment variables + os.Setenv("GOOS", GOOS) + os.Setenv("GOARCH", t.GoArch) + + // Get appropriate compiler and emulator (unless on x86) + if t.LinuxArch != "x86" { + // Check/Setup cross compiler + compiler := t.GNUArch + "-gcc" + if _, err := exec.LookPath(compiler); err != nil { + return err + } + os.Setenv("CC", compiler) + + // Check/Setup emulator (usually first component of GNUArch) + qemuArchName := t.GNUArch[:strings.Index(t.GNUArch, "-")] + if t.LinuxArch == "powerpc" { + qemuArchName = t.GoArch + } + os.Setenv("GORUN", "qemu-"+qemuArchName) + } else { + os.Setenv("CC", "gcc") + } + + // Make the include directory and fill it with headers + if err := os.MkdirAll(IncludeDir, os.ModePerm); err != nil { + return err + } + defer os.RemoveAll(IncludeDir) + if err := t.makeHeaders(); err != nil { + return fmt.Errorf("could not make header files: %v", err) + } + fmt.Println("header files generated") + + // Make each of the four files + if err := t.makeZSysnumFile(); err != nil { + return fmt.Errorf("could not make zsysnum file: %v", err) + } + fmt.Println("zsysnum file generated") + + if err := t.makeZSyscallFile(); err != nil { + return fmt.Errorf("could not make zsyscall file: %v", err) + } + fmt.Println("zsyscall file generated") + + if err := t.makeZTypesFile(); err != nil { + return fmt.Errorf("could not make ztypes file: %v", err) + } + fmt.Println("ztypes file generated") + + if err := t.makeZErrorsFile(); err != nil { + return fmt.Errorf("could not make zerrors file: %v", err) + } + fmt.Println("zerrors file generated") + + return nil +} + +// Create the Linux and glibc headers in the include directory. +func (t *target) makeHeaders() error { + // Make the Linux headers we need for this architecture + linuxMake := makeCommand("make", "headers_install", "ARCH="+t.LinuxArch, "INSTALL_HDR_PATH="+TempDir) + linuxMake.Dir = LinuxDir + if err := linuxMake.Run(); err != nil { + return err + } + + // A Temporary build directory for glibc + if err := os.MkdirAll(BuildDir, os.ModePerm); err != nil { + return err + } + defer os.RemoveAll(BuildDir) + + // Make the glibc headers we need for this architecture + confScript := filepath.Join(GlibcDir, "configure") + glibcConf := makeCommand(confScript, "--prefix="+TempDir, "--host="+t.GNUArch, "--enable-kernel="+MinKernel) + glibcConf.Dir = BuildDir + if err := glibcConf.Run(); err != nil { + return err + } + glibcMake := makeCommand("make", "install-headers") + glibcMake.Dir = BuildDir + if err := glibcMake.Run(); err != nil { + return err + } + // We only need an empty stubs file + stubsFile := filepath.Join(IncludeDir, "gnu/stubs.h") + if file, err := os.Create(stubsFile); err != nil { + return err + } else { + file.Close() + } + + return nil +} + +// makes the zsysnum_linux_$GOARCH.go file +func (t *target) makeZSysnumFile() error { + zsysnumFile := fmt.Sprintf("zsysnum_linux_%s.go", t.GoArch) + unistdFile := filepath.Join(IncludeDir, "asm/unistd.h") + + args := append(t.cFlags(), unistdFile) + return t.commandFormatOutput("gofmt", zsysnumFile, "linux/mksysnum.pl", args...) +} + +// makes the zsyscall_linux_$GOARCH.go file +func (t *target) makeZSyscallFile() error { + zsyscallFile := fmt.Sprintf("zsyscall_linux_%s.go", t.GoArch) + // Find the correct architecture syscall file (might end with x.go) + archSyscallFile := fmt.Sprintf("syscall_linux_%s.go", t.GoArch) + if _, err := os.Stat(archSyscallFile); os.IsNotExist(err) { + shortArch := strings.TrimSuffix(t.GoArch, "le") + archSyscallFile = fmt.Sprintf("syscall_linux_%sx.go", shortArch) + } + + args := append(t.mksyscallFlags(), "-tags", "linux,"+t.GoArch, + "syscall_linux.go", archSyscallFile) + return t.commandFormatOutput("gofmt", zsyscallFile, "./mksyscall.pl", args...) +} + +// makes the zerrors_linux_$GOARCH.go file +func (t *target) makeZErrorsFile() error { + zerrorsFile := fmt.Sprintf("zerrors_linux_%s.go", t.GoArch) + + return t.commandFormatOutput("gofmt", zerrorsFile, "./mkerrors.sh", t.cFlags()...) +} + +// makes the ztypes_linux_$GOARCH.go file +func (t *target) makeZTypesFile() error { + ztypesFile := fmt.Sprintf("ztypes_linux_%s.go", t.GoArch) + + args := []string{"tool", "cgo", "-godefs", "--"} + args = append(args, t.cFlags()...) + args = append(args, "linux/types.go") + return t.commandFormatOutput("mkpost", ztypesFile, "go", args...) +} + +// Flags that should be given to gcc and cgo for this target +func (t *target) cFlags() []string { + // Compile statically to avoid cross-architecture dynamic linking. + flags := []string{"-Wall", "-Werror", "-static", "-I" + IncludeDir} + + // Architecture-specific flags + if t.SignedChar { + flags = append(flags, "-fsigned-char") + } + if t.LinuxArch == "x86" { + flags = append(flags, fmt.Sprintf("-m%d", t.Bits)) + } + + return flags +} + +// Flags that should be given to mksyscall for this target +func (t *target) mksyscallFlags() (flags []string) { + if t.Bits == 32 { + if t.BigEndian { + flags = append(flags, "-b32") + } else { + flags = append(flags, "-l32") + } + } + + // This flag menas a 64-bit value should use (even, odd)-pair. + if t.GoArch == "arm" || (t.LinuxArch == "mips" && t.Bits == 32) { + flags = append(flags, "-arm") + } + return +} diff --git a/vendor/golang.org/x/sys/unix/linux/mksysnum.pl b/vendor/golang.org/x/sys/unix/linux/mksysnum.pl new file mode 100755 index 0000000..63fd800 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/linux/mksysnum.pl @@ -0,0 +1,85 @@ +#!/usr/bin/env perl +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +use strict; + +if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") { + print STDERR "GOARCH or GOOS not defined in environment\n"; + exit 1; +} + +# Check that we are using the new build system if we should +if($ENV{'GOLANG_SYS_BUILD'} ne "docker") { + print STDERR "In the new build system, mksysnum should not be called directly.\n"; + print STDERR "See README.md\n"; + exit 1; +} + +my $command = "$0 ". join(' ', @ARGV); + +print < 999){ + # ignore deprecated syscalls that are no longer implemented + # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/asm-generic/unistd.h?id=refs/heads/master#n716 + return; + } + $name =~ y/a-z/A-Z/; + $num = $num + $offset; + print " SYS_$name = $num;\n"; +} + +my $prev; +open(CC, "$ENV{'CC'} -E -dD @ARGV |") || die "can't run $ENV{'CC'}"; +while(){ + if(/^#define __NR_Linux\s+([0-9]+)/){ + # mips/mips64: extract offset + $offset = $1; + } + elsif(/^#define __NR(\w*)_SYSCALL_BASE\s+([0-9]+)/){ + # arm: extract offset + $offset = $1; + } + elsif(/^#define __NR_syscalls\s+/) { + # ignore redefinitions of __NR_syscalls + } + elsif(/^#define __NR_(\w*)Linux_syscalls\s+/) { + # mips/mips64: ignore definitions about the number of syscalls + } + elsif(/^#define __NR_(\w+)\s+([0-9]+)/){ + $prev = $2; + fmt($1, $2); + } + elsif(/^#define __NR3264_(\w+)\s+([0-9]+)/){ + $prev = $2; + fmt($1, $2); + } + elsif(/^#define __NR_(\w+)\s+\(\w+\+\s*([0-9]+)\)/){ + fmt($1, $prev+$2) + } + elsif(/^#define __NR_(\w+)\s+\(__NR_Linux \+ ([0-9]+)/){ + fmt($1, $2); + } + elsif(/^#define __NR_(\w+)\s+\(__NR_SYSCALL_BASE \+ ([0-9]+)/){ + fmt($1, $2); + } +} + +print < +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// On mips64, the glibc stat and kernel stat do not agree +#if (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64) + +// Use the stat defined by the kernel with a few modifications. These are: +// * The time fields (like st_atime and st_atimensec) use the timespec +// struct (like st_atim) for consitancy with the glibc fields. +// * The padding fields get different names to not break compatibility. +// * st_blocks is signed, again for compatibility. +struct stat { + unsigned int st_dev; + unsigned int st_pad1[3]; // Reserved for st_dev expansion + + unsigned long st_ino; + + mode_t st_mode; + __u32 st_nlink; + + uid_t st_uid; + gid_t st_gid; + + unsigned int st_rdev; + unsigned int st_pad2[3]; // Reserved for st_rdev expansion + + off_t st_size; + + // These are declared as speperate fields in the kernel. Here we use + // the timespec struct for consistancy with the other stat structs. + struct timespec st_atim; + struct timespec st_mtim; + struct timespec st_ctim; + + unsigned int st_blksize; + unsigned int st_pad4; + + long st_blocks; +}; + +// These are needed because we do not include fcntl.h or sys/types.h +#include +#include + +#else + +// Use the stat defined by glibc +#include +#include + +#endif + +// Certain constants and structs are missing from the fs/crypto UAPI +#define FS_MAX_KEY_SIZE 64 +struct fscrypt_key { + __u32 mode; + __u8 raw[FS_MAX_KEY_SIZE]; + __u32 size; +}; + +#ifdef TCSETS2 +// On systems that have "struct termios2" use this as type Termios. +typedef struct termios2 termios_t; +#else +typedef struct termios termios_t; +#endif + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_ll s5; + struct sockaddr_nl s6; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +// copied from /usr/include/bluetooth/hci.h +struct sockaddr_hci { + sa_family_t hci_family; + unsigned short hci_dev; + unsigned short hci_channel; +};; + +// copied from /usr/include/linux/un.h +struct my_sockaddr_un { + sa_family_t sun_family; +#if defined(__ARM_EABI__) || defined(__powerpc64__) + // on ARM char is by default unsigned + signed char sun_path[108]; +#else + char sun_path[108]; +#endif +}; + +#ifdef __ARM_EABI__ +typedef struct user_regs PtraceRegs; +#elif defined(__aarch64__) +typedef struct user_pt_regs PtraceRegs; +#elif defined(__mips__) || defined(__powerpc64__) +typedef struct pt_regs PtraceRegs; +#elif defined(__s390x__) +typedef struct _user_regs_struct PtraceRegs; +#elif defined(__sparc__) +#include +typedef struct pt_regs PtraceRegs; +#else +typedef struct user_regs_struct PtraceRegs; +#endif + +#if defined(__s390x__) +typedef struct _user_psw_struct ptracePsw; +typedef struct _user_fpregs_struct ptraceFpregs; +typedef struct _user_per_struct ptracePer; +#else +typedef struct {} ptracePsw; +typedef struct {} ptraceFpregs; +typedef struct {} ptracePer; +#endif + +// The real epoll_event is a union, and godefs doesn't handle it well. +struct my_epoll_event { + uint32_t events; +#if defined(__ARM_EABI__) || defined(__aarch64__) || (defined(__mips__) && _MIPS_SIM == _ABIO32) + // padding is not specified in linux/eventpoll.h but added to conform to the + // alignment requirements of EABI + int32_t padFd; +#elif defined(__powerpc64__) || defined(__s390x__) || defined(__sparc__) + int32_t _padFd; +#endif + int32_t fd; + int32_t pad; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong + PathMax = C.PATH_MAX +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +type Timex C.struct_timex + +type Time_t C.time_t + +type Tms C.struct_tms + +type Utimbuf C.struct_utimbuf + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Dirent C.struct_dirent + +type Fsid C.fsid_t + +type Flock_t C.struct_flock + +// Filesystem Encryption + +type FscryptPolicy C.struct_fscrypt_policy + +type FscryptKey C.struct_fscrypt_key + +// Structure for Keyctl + +type KeyctlDHParams C.struct_keyctl_dh_params + +// Advice to Fadvise + +const ( + FADV_NORMAL = C.POSIX_FADV_NORMAL + FADV_RANDOM = C.POSIX_FADV_RANDOM + FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL + FADV_WILLNEED = C.POSIX_FADV_WILLNEED + FADV_DONTNEED = C.POSIX_FADV_DONTNEED + FADV_NOREUSE = C.POSIX_FADV_NOREUSE +) + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_my_sockaddr_un + +type RawSockaddrLinklayer C.struct_sockaddr_ll + +type RawSockaddrNetlink C.struct_sockaddr_nl + +type RawSockaddrHCI C.struct_sockaddr_hci + +type RawSockaddrCAN C.struct_sockaddr_can + +type RawSockaddrALG C.struct_sockaddr_alg + +type RawSockaddrVM C.struct_sockaddr_vm + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPMreqn C.struct_ip_mreqn + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet4Pktinfo C.struct_in_pktinfo + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +type Ucred C.struct_ucred + +type TCPInfo C.struct_tcp_info + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll + SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl + SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci + SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can + SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg + SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPMreqn = C.sizeof_struct_ip_mreqn + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter + SizeofUcred = C.sizeof_struct_ucred + SizeofTCPInfo = C.sizeof_struct_tcp_info +) + +// Netlink routing and interface messages + +const ( + IFA_UNSPEC = C.IFA_UNSPEC + IFA_ADDRESS = C.IFA_ADDRESS + IFA_LOCAL = C.IFA_LOCAL + IFA_LABEL = C.IFA_LABEL + IFA_BROADCAST = C.IFA_BROADCAST + IFA_ANYCAST = C.IFA_ANYCAST + IFA_CACHEINFO = C.IFA_CACHEINFO + IFA_MULTICAST = C.IFA_MULTICAST + IFLA_UNSPEC = C.IFLA_UNSPEC + IFLA_ADDRESS = C.IFLA_ADDRESS + IFLA_BROADCAST = C.IFLA_BROADCAST + IFLA_IFNAME = C.IFLA_IFNAME + IFLA_MTU = C.IFLA_MTU + IFLA_LINK = C.IFLA_LINK + IFLA_QDISC = C.IFLA_QDISC + IFLA_STATS = C.IFLA_STATS + IFLA_COST = C.IFLA_COST + IFLA_PRIORITY = C.IFLA_PRIORITY + IFLA_MASTER = C.IFLA_MASTER + IFLA_WIRELESS = C.IFLA_WIRELESS + IFLA_PROTINFO = C.IFLA_PROTINFO + IFLA_TXQLEN = C.IFLA_TXQLEN + IFLA_MAP = C.IFLA_MAP + IFLA_WEIGHT = C.IFLA_WEIGHT + IFLA_OPERSTATE = C.IFLA_OPERSTATE + IFLA_LINKMODE = C.IFLA_LINKMODE + IFLA_LINKINFO = C.IFLA_LINKINFO + IFLA_NET_NS_PID = C.IFLA_NET_NS_PID + IFLA_IFALIAS = C.IFLA_IFALIAS + IFLA_MAX = C.IFLA_MAX + RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE + RT_SCOPE_SITE = C.RT_SCOPE_SITE + RT_SCOPE_LINK = C.RT_SCOPE_LINK + RT_SCOPE_HOST = C.RT_SCOPE_HOST + RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE + RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC + RT_TABLE_COMPAT = C.RT_TABLE_COMPAT + RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT + RT_TABLE_MAIN = C.RT_TABLE_MAIN + RT_TABLE_LOCAL = C.RT_TABLE_LOCAL + RT_TABLE_MAX = C.RT_TABLE_MAX + RTA_UNSPEC = C.RTA_UNSPEC + RTA_DST = C.RTA_DST + RTA_SRC = C.RTA_SRC + RTA_IIF = C.RTA_IIF + RTA_OIF = C.RTA_OIF + RTA_GATEWAY = C.RTA_GATEWAY + RTA_PRIORITY = C.RTA_PRIORITY + RTA_PREFSRC = C.RTA_PREFSRC + RTA_METRICS = C.RTA_METRICS + RTA_MULTIPATH = C.RTA_MULTIPATH + RTA_FLOW = C.RTA_FLOW + RTA_CACHEINFO = C.RTA_CACHEINFO + RTA_TABLE = C.RTA_TABLE + RTN_UNSPEC = C.RTN_UNSPEC + RTN_UNICAST = C.RTN_UNICAST + RTN_LOCAL = C.RTN_LOCAL + RTN_BROADCAST = C.RTN_BROADCAST + RTN_ANYCAST = C.RTN_ANYCAST + RTN_MULTICAST = C.RTN_MULTICAST + RTN_BLACKHOLE = C.RTN_BLACKHOLE + RTN_UNREACHABLE = C.RTN_UNREACHABLE + RTN_PROHIBIT = C.RTN_PROHIBIT + RTN_THROW = C.RTN_THROW + RTN_NAT = C.RTN_NAT + RTN_XRESOLVE = C.RTN_XRESOLVE + RTNLGRP_NONE = C.RTNLGRP_NONE + RTNLGRP_LINK = C.RTNLGRP_LINK + RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY + RTNLGRP_NEIGH = C.RTNLGRP_NEIGH + RTNLGRP_TC = C.RTNLGRP_TC + RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR + RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE + RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE + RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE + RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR + RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE + RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE + RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO + RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX + RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE + RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT + SizeofNlMsghdr = C.sizeof_struct_nlmsghdr + SizeofNlMsgerr = C.sizeof_struct_nlmsgerr + SizeofRtGenmsg = C.sizeof_struct_rtgenmsg + SizeofNlAttr = C.sizeof_struct_nlattr + SizeofRtAttr = C.sizeof_struct_rtattr + SizeofIfInfomsg = C.sizeof_struct_ifinfomsg + SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg + SizeofRtMsg = C.sizeof_struct_rtmsg + SizeofRtNexthop = C.sizeof_struct_rtnexthop +) + +type NlMsghdr C.struct_nlmsghdr + +type NlMsgerr C.struct_nlmsgerr + +type RtGenmsg C.struct_rtgenmsg + +type NlAttr C.struct_nlattr + +type RtAttr C.struct_rtattr + +type IfInfomsg C.struct_ifinfomsg + +type IfAddrmsg C.struct_ifaddrmsg + +type RtMsg C.struct_rtmsg + +type RtNexthop C.struct_rtnexthop + +// Linux socket filter + +const ( + SizeofSockFilter = C.sizeof_struct_sock_filter + SizeofSockFprog = C.sizeof_struct_sock_fprog +) + +type SockFilter C.struct_sock_filter + +type SockFprog C.struct_sock_fprog + +// Inotify + +type InotifyEvent C.struct_inotify_event + +const SizeofInotifyEvent = C.sizeof_struct_inotify_event + +// Ptrace + +// Register structures +type PtraceRegs C.PtraceRegs + +// Structures contained in PtraceRegs on s390x (exported by mkpost.go) +type PtracePsw C.ptracePsw + +type PtraceFpregs C.ptraceFpregs + +type PtracePer C.ptracePer + +// Misc + +type FdSet C.fd_set + +type Sysinfo_t C.struct_sysinfo + +type Utsname C.struct_utsname + +type Ustat_t C.struct_ustat + +type EpollEvent C.struct_my_epoll_event + +const ( + AT_FDCWD = C.AT_FDCWD + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +type PollFd C.struct_pollfd + +const ( + POLLIN = C.POLLIN + POLLPRI = C.POLLPRI + POLLOUT = C.POLLOUT + POLLRDHUP = C.POLLRDHUP + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLNVAL = C.POLLNVAL +) + +type Sigset_t C.sigset_t + +const RNDGETENTCNT = C.RNDGETENTCNT + +const PERF_IOC_FLAG_GROUP = C.PERF_IOC_FLAG_GROUP + +// sysconf information + +const _SC_PAGESIZE = C._SC_PAGESIZE + +// Terminal handling + +type Termios C.termios_t + +type Winsize C.struct_winsize diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh new file mode 100755 index 0000000..f0d6566 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -0,0 +1,179 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This script runs or (given -n) prints suggested commands to generate files for +# the Architecture/OS specified by the GOARCH and GOOS environment variables. +# See README.md for more information about how the build system works. + +GOOSARCH="${GOOS}_${GOARCH}" + +# defaults +mksyscall="./mksyscall.pl" +mkerrors="./mkerrors.sh" +zerrors="zerrors_$GOOSARCH.go" +mksysctl="" +zsysctl="zsysctl_$GOOSARCH.go" +mksysnum= +mktypes= +run="sh" +cmd="" + +case "$1" in +-syscalls) + for i in zsyscall*go + do + # Run the command line that appears in the first line + # of the generated file to regenerate it. + sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i + rm _$i + done + exit 0 + ;; +-n) + run="cat" + cmd="echo" + shift +esac + +case "$#" in +0) + ;; +*) + echo 'usage: mkall.sh [-n]' 1>&2 + exit 2 +esac + +if [[ "$GOOS" = "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then + # Use then new build system + # Files generated through docker (use $cmd so you can Ctl-C the build or run) + $cmd docker build --tag generate:$GOOS $GOOS + $cmd docker run --interactive --tty --volume $(dirname "$(readlink -f "$0")"):/build generate:$GOOS + exit +fi + +GOOSARCH_in=syscall_$GOOSARCH.go +case "$GOOSARCH" in +_* | *_ | _) + echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 + exit 1 + ;; +darwin_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_amd64) + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_arm) + mkerrors="$mkerrors" + mksysnum="./mksysnum_darwin.pl /usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_arm64) + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +dragonfly_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -dragonfly" + mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +dragonfly_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -dragonfly" + mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_amd64) + mkerrors="$mkerrors -m64" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -arm" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across over platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +linux_sparc64) + GOOSARCH_in=syscall_linux_sparc64.go + unistd_h=/usr/include/sparc64-linux-gnu/asm/unistd.h + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_linux.pl $unistd_h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -netbsd" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -netbsd" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -openbsd" + mksysctl="./mksysctl_openbsd.pl" + zsysctl="zsysctl_openbsd.go" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -openbsd" + mksysctl="./mksysctl_openbsd.pl" + zsysctl="zsysctl_openbsd.go" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +solaris_amd64) + mksyscall="./mksyscall_solaris.pl" + mkerrors="$mkerrors -m64" + mksysnum= + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +*) + echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 + exit 1 + ;; +esac + +( + if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi + case "$GOOS" in + *) + syscall_goos="syscall_$GOOS.go" + case "$GOOS" in + darwin | dragonfly | freebsd | netbsd | openbsd) + syscall_goos="syscall_bsd.go $syscall_goos" + ;; + esac + if [ -n "$mksyscall" ]; then echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; fi + ;; + esac + if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi + if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi + if [ -n "$mktypes" ]; then + echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; + fi +) | $run diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh new file mode 100755 index 0000000..5fcd7a2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -0,0 +1,558 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# Generate Go code listing errors and other #defined constant +# values (ENAMETOOLONG etc.), by asking the preprocessor +# about the definitions. + +unset LANG +export LC_ALL=C +export LC_CTYPE=C + +if test -z "$GOARCH" -o -z "$GOOS"; then + echo 1>&2 "GOARCH or GOOS not defined in environment" + exit 1 +fi + +# Check that we are using the new build system if we should +if [[ "$GOOS" -eq "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then + if [[ "$GOLANG_SYS_BUILD" -ne "docker" ]]; then + echo 1>&2 "In the new build system, mkerrors should not be called directly." + echo 1>&2 "See README.md" + exit 1 + fi +fi + +CC=${CC:-cc} + +if [[ "$GOOS" -eq "solaris" ]]; then + # Assumes GNU versions of utilities in PATH. + export PATH=/usr/gnu/bin:$PATH +fi + +uname=$(uname) + +includes_Darwin=' +#define _DARWIN_C_SOURCE +#define KERNEL +#define _DARWIN_USE_64_BIT_INODE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +includes_DragonFly=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +includes_FreeBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __FreeBSD__ >= 10 +#define IFT_CARP 0xf8 // IFT_CARP is deprecated in FreeBSD 10 +#undef SIOCAIFADDR +#define SIOCAIFADDR _IOW(105, 26, struct oifaliasreq) // ifaliasreq contains if_data +#undef SIOCSIFPHYADDR +#define SIOCSIFPHYADDR _IOW(105, 70, struct oifaliasreq) // ifaliasreq contains if_data +#endif +' + +includes_Linux=' +#define _LARGEFILE_SOURCE +#define _LARGEFILE64_SOURCE +#ifndef __LP64__ +#define _FILE_OFFSET_BITS 64 +#endif +#define _GNU_SOURCE + +// is broken on powerpc64, as it fails to include definitions of +// these structures. We just include them copied from . +#if defined(__powerpc__) +struct sgttyb { + char sg_ispeed; + char sg_ospeed; + char sg_erase; + char sg_kill; + short sg_flags; +}; + +struct tchars { + char t_intrc; + char t_quitc; + char t_startc; + char t_stopc; + char t_eofc; + char t_brkc; +}; + +struct ltchars { + char t_suspc; + char t_dsuspc; + char t_rprntc; + char t_flushc; + char t_werasc; + char t_lnextc; +}; +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef MSG_FASTOPEN +#define MSG_FASTOPEN 0x20000000 +#endif + +#ifndef PTRACE_GETREGS +#define PTRACE_GETREGS 0xc +#endif + +#ifndef PTRACE_SETREGS +#define PTRACE_SETREGS 0xd +#endif + +#ifndef SOL_NETLINK +#define SOL_NETLINK 270 +#endif + +#ifdef SOL_BLUETOOTH +// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h +// but it is already in bluetooth_linux.go +#undef SOL_BLUETOOTH +#endif + +// Certain constants are missing from the fs/crypto UAPI +#define FS_KEY_DESC_PREFIX "fscrypt:" +#define FS_KEY_DESC_PREFIX_SIZE 8 +#define FS_MAX_KEY_SIZE 64 +' + +includes_NetBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Needed since refers to it... +#define schedppq 1 +' + +includes_OpenBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// We keep some constants not supported in OpenBSD 5.5 and beyond for +// the promise of compatibility. +#define EMUL_ENABLED 0x1 +#define EMUL_NATIVE 0x2 +#define IPV6_FAITH 0x1d +#define IPV6_OPTIONS 0x1 +#define IPV6_RTHDR_STRICT 0x1 +#define IPV6_SOCKOPT_RESERVED1 0x3 +#define SIOCGIFGENERIC 0xc020693a +#define SIOCSIFGENERIC 0x80206939 +#define WALTSIG 0x4 +' + +includes_SunOS=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + + +includes=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' +ccflags="$@" + +# Write go tool cgo -godefs input. +( + echo package unix + echo + echo '/*' + indirect="includes_$(uname)" + echo "${!indirect} $includes" + echo '*/' + echo 'import "C"' + echo 'import "syscall"' + echo + echo 'const (' + + # The gcc command line prints all the #defines + # it encounters while processing the input + echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags | + awk ' + $1 != "#define" || $2 ~ /\(/ || $3 == "" {next} + + $2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers + $2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next} + $2 ~ /^(SCM_SRCRT)$/ {next} + $2 ~ /^(MAP_FAILED)$/ {next} + $2 ~ /^ELF_.*$/ {next}# contains ELF_ARCH, etc. + + $2 ~ /^EXTATTR_NAMESPACE_NAMES/ || + $2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next} + + $2 !~ /^ETH_/ && + $2 !~ /^EPROC_/ && + $2 !~ /^EQUIV_/ && + $2 !~ /^EXPR_/ && + $2 ~ /^E[A-Z0-9_]+$/ || + $2 ~ /^B[0-9_]+$/ || + $2 == "BOTHER" || + $2 ~ /^CI?BAUD(EX)?$/ || + $2 == "IBSHIFT" || + $2 ~ /^V[A-Z0-9]+$/ || + $2 ~ /^CS[A-Z0-9]/ || + $2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ || + $2 ~ /^IGN/ || + $2 ~ /^IX(ON|ANY|OFF)$/ || + $2 ~ /^IN(LCR|PCK)$/ || + $2 ~ /(^FLU?SH)|(FLU?SH$)/ || + $2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ || + $2 == "BRKINT" || + $2 == "HUPCL" || + $2 == "PENDIN" || + $2 == "TOSTOP" || + $2 == "XCASE" || + $2 == "ALTWERASE" || + $2 == "NOKERNINFO" || + $2 ~ /^PAR/ || + $2 ~ /^SIG[^_]/ || + $2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ || + $2 ~ /^O?XTABS$/ || + $2 ~ /^TC[IO](ON|OFF)$/ || + $2 ~ /^IN_/ || + $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ || + $2 ~ /^FALLOC_/ || + $2 == "ICMPV6_FILTER" || + $2 == "SOMAXCONN" || + $2 == "NAME_MAX" || + $2 == "IFNAMSIZ" || + $2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ || + $2 ~ /^SYSCTL_VERS/ || + $2 ~ /^(MS|MNT|UMOUNT)_/ || + $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || + $2 ~ /^(O|F|E?FD|NAME|S|PTRACE|PT)_/ || + $2 ~ /^LINUX_REBOOT_CMD_/ || + $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || + $2 !~ "NLA_TYPE_MASK" && + $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ || + $2 ~ /^SIOC/ || + $2 ~ /^TIOC/ || + $2 ~ /^TCGET/ || + $2 ~ /^TCSET/ || + $2 ~ /^TC(FLSH|SBRKP?|XONC)$/ || + $2 !~ "RTF_BITS" && + $2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || + $2 ~ /^BIOC/ || + $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || + $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || + $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || + $2 ~ /^CLONE_[A-Z_]+/ || + $2 !~ /^(BPF_TIMEVAL)$/ && + $2 ~ /^(BPF|DLT)_/ || + $2 ~ /^CLOCK_/ || + $2 ~ /^CAN_/ || + $2 ~ /^CAP_/ || + $2 ~ /^ALG_/ || + $2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE|IOC_(GET|SET)_ENCRYPTION)/ || + $2 ~ /^GRND_/ || + $2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ || + $2 ~ /^KEYCTL_/ || + $2 ~ /^PERF_EVENT_IOC_/ || + $2 ~ /^SECCOMP_MODE_/ || + $2 ~ /^SPLICE_/ || + $2 ~ /^(VM|VMADDR)_/ || + $2 ~ /^XATTR_(CREATE|REPLACE)/ || + $2 !~ "WMESGLEN" && + $2 ~ /^W[A-Z0-9]+$/ || + $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^__WCOREFLAG$/ {next} + $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} + + {next} + ' | sort + + echo ')' +) >_const.go + +# Pull out the error names for later. +errors=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | + sort +) + +# Pull out the signal names for later. +signals=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort +) + +# Again, writing regexps to a file. +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' | + sort >_error.grep +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort >_signal.grep + +echo '// mkerrors.sh' "$@" +echo '// Code generated by the command above; see README.md. DO NOT EDIT.' +echo +echo "// +build ${GOARCH},${GOOS}" +echo +go tool cgo -godefs -- "$@" _const.go >_error.out +cat _error.out | grep -vf _error.grep | grep -vf _signal.grep +echo +echo '// Errors' +echo 'const (' +cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/' +echo ')' + +echo +echo '// Signals' +echo 'const (' +cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/' +echo ')' + +# Run C program to print error and syscall strings. +( + echo -E " +#include +#include +#include +#include +#include +#include + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) + +enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below + +int errors[] = { +" + for i in $errors + do + echo -E ' '$i, + done + + echo -E " +}; + +int signals[] = { +" + for i in $signals + do + echo -E ' '$i, + done + + # Use -E because on some systems bash builtin interprets \n itself. + echo -E ' +}; + +static int +intcmp(const void *a, const void *b) +{ + return *(int*)a - *(int*)b; +} + +int +main(void) +{ + int i, e; + char buf[1024], *p; + + printf("\n\n// Error table\n"); + printf("var errors = [...]string {\n"); + qsort(errors, nelem(errors), sizeof errors[0], intcmp); + for(i=0; i 0 && errors[i-1] == e) + continue; + strcpy(buf, strerror(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + printf("\n\n// Signal table\n"); + printf("var signals = [...]string {\n"); + qsort(signals, nelem(signals), sizeof signals[0], intcmp); + for(i=0; i 0 && signals[i-1] == e) + continue; + strcpy(buf, strsignal(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + // cut trailing : number. + p = strrchr(buf, ":"[0]); + if(p) + *p = '\0'; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + return 0; +} + +' +) >_errors.c + +$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out diff --git a/vendor/golang.org/x/sys/unix/mkpost.go b/vendor/golang.org/x/sys/unix/mkpost.go new file mode 100644 index 0000000..d3ff659 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkpost.go @@ -0,0 +1,88 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// mkpost processes the output of cgo -godefs to +// modify the generated types. It is used to clean up +// the sys API in an architecture specific manner. +// +// mkpost is run after cgo -godefs; see README.md. +package main + +import ( + "bytes" + "fmt" + "go/format" + "io/ioutil" + "log" + "os" + "regexp" +) + +func main() { + // Get the OS and architecture (using GOARCH_TARGET if it exists) + goos := os.Getenv("GOOS") + goarch := os.Getenv("GOARCH_TARGET") + if goarch == "" { + goarch = os.Getenv("GOARCH") + } + // Check that we are using the new build system if we should be. + if goos == "linux" && goarch != "sparc64" { + if os.Getenv("GOLANG_SYS_BUILD") != "docker" { + os.Stderr.WriteString("In the new build system, mkpost should not be called directly.\n") + os.Stderr.WriteString("See README.md\n") + os.Exit(1) + } + } + + b, err := ioutil.ReadAll(os.Stdin) + if err != nil { + log.Fatal(err) + } + + // If we have empty Ptrace structs, we should delete them. Only s390x emits + // nonempty Ptrace structs. + ptraceRexexp := regexp.MustCompile(`type Ptrace((Psw|Fpregs|Per) struct {\s*})`) + b = ptraceRexexp.ReplaceAll(b, nil) + + // Replace the control_regs union with a blank identifier for now. + controlRegsRegex := regexp.MustCompile(`(Control_regs)\s+\[0\]uint64`) + b = controlRegsRegex.ReplaceAll(b, []byte("_ [0]uint64")) + + // Remove fields that are added by glibc + // Note that this is unstable as the identifers are private. + removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`) + b = removeFieldsRegex.ReplaceAll(b, []byte("_")) + + // We refuse to export private fields on s390x + if goarch == "s390x" && goos == "linux" { + // Remove cgo padding fields + removeFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`) + b = removeFieldsRegex.ReplaceAll(b, []byte("_")) + + // Remove padding, hidden, or unused fields + removeFieldsRegex = regexp.MustCompile(`X_\S+`) + b = removeFieldsRegex.ReplaceAll(b, []byte("_")) + } + + // Remove the first line of warning from cgo + b = b[bytes.IndexByte(b, '\n')+1:] + // Modify the command in the header to include: + // mkpost, our own warning, and a build tag. + replacement := fmt.Sprintf(`$1 | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build %s,%s`, goarch, goos) + cgoCommandRegex := regexp.MustCompile(`(cgo -godefs .*)`) + b = cgoCommandRegex.ReplaceAll(b, []byte(replacement)) + + // gofmt + b, err = format.Source(b) + if err != nil { + log.Fatal(err) + } + + os.Stdout.Write(b) +} diff --git a/vendor/golang.org/x/sys/unix/mksyscall.pl b/vendor/golang.org/x/sys/unix/mksyscall.pl new file mode 100755 index 0000000..fb929b4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mksyscall.pl @@ -0,0 +1,328 @@ +#!/usr/bin/env perl +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This program reads a file containing function prototypes +# (like syscall_darwin.go) and generates system call bodies. +# The prototypes are marked by lines beginning with "//sys" +# and read like func declarations if //sys is replaced by func, but: +# * The parameter lists must give a name for each argument. +# This includes return parameters. +# * The parameter lists must give a type for each argument: +# the (x, y, z int) shorthand is not allowed. +# * If the return parameter is an error number, it must be named errno. + +# A line beginning with //sysnb is like //sys, except that the +# goroutine will not be suspended during the execution of the system +# call. This must only be used for system calls which can never +# block, as otherwise the system call could cause all goroutines to +# hang. + +use strict; + +my $cmdline = "mksyscall.pl " . join(' ', @ARGV); +my $errors = 0; +my $_32bit = ""; +my $plan9 = 0; +my $openbsd = 0; +my $netbsd = 0; +my $dragonfly = 0; +my $arm = 0; # 64-bit value should use (even, odd)-pair +my $tags = ""; # build tags + +if($ARGV[0] eq "-b32") { + $_32bit = "big-endian"; + shift; +} elsif($ARGV[0] eq "-l32") { + $_32bit = "little-endian"; + shift; +} +if($ARGV[0] eq "-plan9") { + $plan9 = 1; + shift; +} +if($ARGV[0] eq "-openbsd") { + $openbsd = 1; + shift; +} +if($ARGV[0] eq "-netbsd") { + $netbsd = 1; + shift; +} +if($ARGV[0] eq "-dragonfly") { + $dragonfly = 1; + shift; +} +if($ARGV[0] eq "-arm") { + $arm = 1; + shift; +} +if($ARGV[0] eq "-tags") { + shift; + $tags = $ARGV[0]; + shift; +} + +if($ARGV[0] =~ /^-/) { + print STDERR "usage: mksyscall.pl [-b32 | -l32] [-tags x,y] [file ...]\n"; + exit 1; +} + +# Check that we are using the new build system if we should +if($ENV{'GOOS'} eq "linux" && $ENV{'GOARCH'} ne "sparc64") { + if($ENV{'GOLANG_SYS_BUILD'} ne "docker") { + print STDERR "In the new build system, mksyscall should not be called directly.\n"; + print STDERR "See README.md\n"; + exit 1; + } +} + + +sub parseparamlist($) { + my ($list) = @_; + $list =~ s/^\s*//; + $list =~ s/\s*$//; + if($list eq "") { + return (); + } + return split(/\s*,\s*/, $list); +} + +sub parseparam($) { + my ($p) = @_; + if($p !~ /^(\S*) (\S*)$/) { + print STDERR "$ARGV:$.: malformed parameter: $p\n"; + $errors = 1; + return ("xx", "int"); + } + return ($1, $2); +} + +my $text = ""; +while(<>) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, errno error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($func, $in, $out, $sysname) = ($2, $3, $4, $5); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # Try in vain to keep people from editing this file. + # The theory is that they jump into the middle of the file + # without reading the header. + $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + + # Go function header. + my $out_decl = @out ? sprintf(" (%s)", join(', ', @out)) : ""; + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out_decl; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, $errvar = BytePtrFromString($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, _ = BytePtrFromString($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass dummy pointer in that case. + # Used to pass nil, but some OSes or simulators reject write(fd, nil, 0). + $text .= "\tvar _p$n unsafe.Pointer\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = unsafe.Pointer(\&${name}[0])\n\t}"; + $text .= " else {\n\t\t_p$n = unsafe.Pointer(&_zero)\n\t}"; + $text .= "\n"; + push @args, "uintptr(_p$n)", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && ($openbsd || $netbsd)) { + push @args, "0"; + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $dragonfly) { + if ($func !~ /^extp(read|write)/i) { + push @args, "0"; + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $_32bit ne "") { + if(@args % 2 && $arm) { + # arm abi specifies 64-bit argument uses + # (even, odd) pair + push @args, "0" + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } + } else { + push @args, "uintptr($name)"; + } + } + + # Determine which form to use; pad args with zeros. + my $asm = "Syscall"; + if ($nonblock) { + $asm = "RawSyscall"; + } + if(@args <= 3) { + while(@args < 3) { + push @args, "0"; + } + } elsif(@args <= 6) { + $asm .= "6"; + while(@args < 6) { + push @args, "0"; + } + } elsif(@args <= 9) { + $asm .= "9"; + while(@args < 9) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # System call number. + if($sysname eq "") { + $sysname = "SYS_$func"; + $sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar + $sysname =~ y/a-z/A-Z/; + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm($sysname, $args)"; + + # Assign return values. + my $body = ""; + my @ret = ("_", "_", "_"); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err" && !$plan9) { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } elsif($name eq "err" && $plan9) { + $ret[0] = "r0"; + $ret[2] = "e1"; + next; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1" || $plan9) { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + $text .= $body; + + if ($plan9 && $ret[2] eq "e1") { + $text .= "\tif int32(r0) == -1 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } elsif ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = errnoErr(e1)\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n\n"; +} + +chomp $text; +chomp $text; + +if($errors) { + exit 1; +} + +print <) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + $package = $1 if !$package && /^package (\S+)$/; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, err error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($nb, $func, $in, $out, $modname, $sysname) = ($1, $2, $3, $4, $5, $6); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # So file name. + if($modname eq "") { + $modname = "libc"; + } + + # System call name. + if($sysname eq "") { + $sysname = "$func"; + } + + # System call pointer variable name. + my $sysvarname = "proc$sysname"; + + my $strconvfunc = "BytePtrFromString"; + my $strconvtype = "*byte"; + + $sysname =~ y/A-Z/a-z/; # All libc functions are lowercase. + + # Runtime import of function to allow cross-platform builds. + $dynimports .= "//go:cgo_import_dynamic libc_${sysname} ${sysname} \"$modname.so\"\n"; + # Link symbol to proc address variable. + $linknames .= "//go:linkname ${sysvarname} libc_${sysname}\n"; + # Library proc address variable. + push @vars, $sysvarname; + + # Go function header. + $out = join(', ', @out); + if($out ne "") { + $out = " ($out)"; + } + if($text ne "") { + $text .= "\n" + } + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n $strconvtype\n"; + $text .= "\t_p$n, $errvar = $strconvfunc($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n $strconvtype\n"; + $text .= "\t_p$n, _ = $strconvfunc($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass nil in that case. + $text .= "\tvar _p$n *$1\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = \&$name\[0]\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && $_32bit ne "") { + if($_32bit eq "big-endian") { + push @args, "uintptr($name >> 32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name >> 32)"; + } + } elsif($type eq "bool") { + $text .= "\tvar _p$n uint32\n"; + $text .= "\tif $name {\n\t\t_p$n = 1\n\t} else {\n\t\t_p$n = 0\n\t}\n"; + push @args, "uintptr(_p$n)"; + $n++; + } else { + push @args, "uintptr($name)"; + } + } + my $nargs = @args; + + # Determine which form to use; pad args with zeros. + my $asm = "sysvicall6"; + if ($nonblock) { + $asm = "rawSysvicall6"; + } + if(@args <= 6) { + while(@args < 6) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm(uintptr(unsafe.Pointer(&$sysvarname)), $nargs, $args)"; + + # Assign return values. + my $body = ""; + my $failexpr = ""; + my @ret = ("_", "_", "_"); + my @pout= (); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err") { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1") { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + $text .= $body; + + if ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n"; +} + +if($errors) { + exit 1; +} + +print < "net.inet", + "net.inet.ipproto" => "net.inet", + "net.inet6.ipv6proto" => "net.inet6", + "net.inet6.ipv6" => "net.inet6.ip6", + "net.inet.icmpv6" => "net.inet6.icmp6", + "net.inet6.divert6" => "net.inet6.divert", + "net.inet6.tcp6" => "net.inet.tcp", + "net.inet6.udp6" => "net.inet.udp", + "mpls" => "net.mpls", + "swpenc" => "vm.swapencrypt" +); + +# Node mappings +my %node_map = ( + "net.inet.ip.ifq" => "net.ifq", + "net.inet.pfsync" => "net.pfsync", + "net.mpls.ifq" => "net.ifq" +); + +my $ctlname; +my %mib = (); +my %sysctl = (); +my $node; + +sub debug() { + print STDERR "$_[0]\n" if $debug; +} + +# Walk the MIB and build a sysctl name to OID mapping. +sub build_sysctl() { + my ($node, $name, $oid) = @_; + my %node = %{$node}; + my @oid = @{$oid}; + + foreach my $key (sort keys %node) { + my @node = @{$node{$key}}; + my $nodename = $name.($name ne '' ? '.' : '').$key; + my @nodeoid = (@oid, $node[0]); + if ($node[1] eq 'CTLTYPE_NODE') { + if (exists $node_map{$nodename}) { + $node = \%mib; + $ctlname = $node_map{$nodename}; + foreach my $part (split /\./, $ctlname) { + $node = \%{@{$$node{$part}}[2]}; + } + } else { + $node = $node[2]; + } + &build_sysctl($node, $nodename, \@nodeoid); + } elsif ($node[1] ne '') { + $sysctl{$nodename} = \@nodeoid; + } + } +} + +foreach my $ctl (@ctls) { + $ctls{$ctl} = $ctl; +} + +# Build MIB +foreach my $header (@headers) { + &debug("Processing $header..."); + open HEADER, "/usr/include/$header" || + print STDERR "Failed to open $header\n"; + while (

) { + if ($_ =~ /^#define\s+(CTL_NAMES)\s+{/ || + $_ =~ /^#define\s+(CTL_(.*)_NAMES)\s+{/ || + $_ =~ /^#define\s+((.*)CTL_NAMES)\s+{/) { + if ($1 eq 'CTL_NAMES') { + # Top level. + $node = \%mib; + } else { + # Node. + my $nodename = lc($2); + if ($header =~ /^netinet\//) { + $ctlname = "net.inet.$nodename"; + } elsif ($header =~ /^netinet6\//) { + $ctlname = "net.inet6.$nodename"; + } elsif ($header =~ /^net\//) { + $ctlname = "net.$nodename"; + } else { + $ctlname = "$nodename"; + $ctlname =~ s/^(fs|net|kern)_/$1\./; + } + if (exists $ctl_map{$ctlname}) { + $ctlname = $ctl_map{$ctlname}; + } + if (not exists $ctls{$ctlname}) { + &debug("Ignoring $ctlname..."); + next; + } + + # Walk down from the top of the MIB. + $node = \%mib; + foreach my $part (split /\./, $ctlname) { + if (not exists $$node{$part}) { + &debug("Missing node $part"); + $$node{$part} = [ 0, '', {} ]; + } + $node = \%{@{$$node{$part}}[2]}; + } + } + + # Populate current node with entries. + my $i = -1; + while (defined($_) && $_ !~ /^}/) { + $_ =
; + $i++ if $_ =~ /{.*}/; + next if $_ !~ /{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}/; + $$node{$1} = [ $i, $2, {} ]; + } + } + } + close HEADER; +} + +&build_sysctl(\%mib, "", []); + +print <){ + if(/^#define\s+SYS_(\w+)\s+([0-9]+)/){ + my $name = $1; + my $num = $2; + $name =~ y/a-z/A-Z/; + print " SYS_$name = $num;" + } +} + +print <){ + if(/^([0-9]+)\s+STD\s+({ \S+\s+(\w+).*)$/){ + my $num = $1; + my $proto = $2; + my $name = "SYS_$3"; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print <){ + if(/^([0-9]+)\s+\S+\s+STD\s+({ \S+\s+(\w+).*)$/){ + my $num = $1; + my $proto = $2; + my $name = "SYS_$3"; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print <){ + if($line =~ /^(.*)\\$/) { + # Handle continuation + $line = $1; + $_ =~ s/^\s+//; + $line .= $_; + } else { + # New line + $line = $_; + } + next if $line =~ /\\$/; + if($line =~ /^([0-9]+)\s+((STD)|(NOERR))\s+(RUMP\s+)?({\s+\S+\s*\*?\s*\|(\S+)\|(\S*)\|(\w+).*\s+})(\s+(\S+))?$/) { + my $num = $1; + my $proto = $6; + my $compat = $8; + my $name = "$7_$9"; + + $name = "$7_$11" if $11 ne ''; + $name =~ y/a-z/A-Z/; + + if($compat eq '' || $compat eq '30' || $compat eq '50') { + print " $name = $num; // $proto\n"; + } + } +} + +print <){ + if(/^([0-9]+)\s+STD\s+(NOLOCK\s+)?({ \S+\s+\*?(\w+).*)$/){ + my $num = $1; + my $proto = $3; + my $name = $4; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print < uint64(len(b)) { + return nil, nil, EINVAL + } + return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil +} + +// UnixRights encodes a set of open file descriptors into a socket +// control message for sending to another process. +func UnixRights(fds ...int) []byte { + datalen := len(fds) * 4 + b := make([]byte, CmsgSpace(datalen)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_SOCKET + h.Type = SCM_RIGHTS + h.SetLen(CmsgLen(datalen)) + data := cmsgData(h) + for _, fd := range fds { + *(*int32)(data) = int32(fd) + data = unsafe.Pointer(uintptr(data) + 4) + } + return b +} + +// ParseUnixRights decodes a socket control message that contains an +// integer array of open file descriptors from another process. +func ParseUnixRights(m *SocketControlMessage) ([]int, error) { + if m.Header.Level != SOL_SOCKET { + return nil, EINVAL + } + if m.Header.Type != SCM_RIGHTS { + return nil, EINVAL + } + fds := make([]int, len(m.Data)>>2) + for i, j := 0, 0; i < len(m.Data); i += 4 { + fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i]))) + j++ + } + return fds, nil +} diff --git a/vendor/golang.org/x/sys/unix/str.go b/vendor/golang.org/x/sys/unix/str.go new file mode 100644 index 0000000..35ed664 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/str.go @@ -0,0 +1,26 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +func itoa(val int) string { // do it here rather than with fmt to avoid dependency + if val < 0 { + return "-" + uitoa(uint(-val)) + } + return uitoa(uint(val)) +} + +func uitoa(val uint) string { + var buf [32]byte // big enough for int64 + i := len(buf) - 1 + for val >= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go new file mode 100644 index 0000000..85e3502 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall.go @@ -0,0 +1,69 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +// Package unix contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display OS-specific documentation for the current +// system. If you want godoc to display OS documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.Errno. +package unix // import "golang.org/x/sys/unix" + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, EINVAL + } + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mkunix.pl. +var _zero uintptr + +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} + +func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 } diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go new file mode 100644 index 0000000..ccb29c7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -0,0 +1,614 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +// BSD system call wrappers shared by *BSD based systems +// including OS X (Darwin) and FreeBSD. Like the other +// syscall_*.go files it is compiled as Go code but also +// used as input to mksyscall which parses the //sys +// lines and generates system call stubs. + +package unix + +import ( + "runtime" + "syscall" + "unsafe" +) + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 16 on BSD. + if n < 0 || n > 1000 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // 64 bits should be enough. (32 bits isn't even on 386). Since the + // actual system call is getdirentries64, 64 is a good guess. + // TODO(rsc): Can we use a single global basep for all calls? + var base = (*uintptr)(unsafe.Pointer(new(uint64))) + return Getdirentries(fd, buf, base) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys Shutdown(s int, how int) (err error) + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet4 + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet6 + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) || n == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Index == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = sa.Len + sa.raw.Family = AF_LINK + sa.raw.Index = sa.Index + sa.raw.Type = sa.Type + sa.raw.Nlen = sa.Nlen + sa.raw.Alen = sa.Alen + sa.raw.Slen = sa.Slen + for i := 0; i < len(sa.raw.Data); i++ { + sa.raw.Data[i] = sa.Data[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil +} + +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_LINK: + pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa)) + sa := new(SockaddrDatalink) + sa.Len = pp.Len + sa.Family = pp.Family + sa.Index = pp.Index + sa.Type = pp.Type + sa.Nlen = pp.Nlen + sa.Alen = pp.Alen + sa.Slen = pp.Slen + for i := 0; i < len(sa.Data); i++ { + sa.Data[i] = pp.Data[i] + } + return sa, nil + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + if pp.Len < 2 || pp.Len > SizeofSockaddrUnix { + return nil, EINVAL + } + sa := new(SockaddrUnix) + + // Some BSDs include the trailing NUL in the length, whereas + // others do not. Work around this by subtracting the leading + // family and len. The path is then scanned to see if a NUL + // terminator still exists within the length. + n := int(pp.Len) - 2 // subtract leading Family, Len + for i := 0; i < n; i++ { + if pp.Path[i] == 0 { + // found early NUL; assume Len included the NUL + // or was overestimating. + n = i + break + } + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + if runtime.GOOS == "darwin" && len == 0 { + // Accepted socket has no address. + // This is likely due to a bug in xnu kernels, + // where instead of ECONNABORTED error socket + // is accepted, but has no address. + Close(nfd) + return 0, nil, ECONNABORTED + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + // TODO(jsing): DragonFly has a "bug" (see issue 3349), which should be + // reported upstream. + if runtime.GOOS == "dragonfly" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 { + rsa.Addr.Family = AF_UNIX + rsa.Addr.Len = SizeofSockaddrUnix + } + return anyToSockaddr(&rsa) +} + +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) + +func GetsockoptByte(fd, level, opt int) (value byte, err error) { + var n byte + vallen := _Socklen(1) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return n, err +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { + var value IPv6MTUInfo + vallen := _Socklen(SizeofIPv6MTUInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { + var value ICMPv6Filter + vallen := _Socklen(SizeofICMPv6Filter) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) + +func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) { + var change, event unsafe.Pointer + if len(changes) > 0 { + change = unsafe.Pointer(&changes[0]) + } + if len(events) > 0 { + event = unsafe.Pointer(&events[0]) + } + return kevent(kq, change, len(changes), event, len(events), timeout) +} + +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL + +// sysctlmib translates name to mib number and appends any additional args. +func sysctlmib(name string, args ...int) ([]_C_int, error) { + // Translate name to mib number. + mib, err := nametomib(name) + if err != nil { + return nil, err + } + + for _, a := range args { + mib = append(mib, _C_int(a)) + } + + return mib, nil +} + +func Sysctl(name string) (string, error) { + return SysctlArgs(name) +} + +func SysctlArgs(name string, args ...int) (string, error) { + buf, err := SysctlRaw(name, args...) + if err != nil { + return "", err + } + n := len(buf) + + // Throw away terminating NUL. + if n > 0 && buf[n-1] == '\x00' { + n-- + } + return string(buf[0:n]), nil +} + +func SysctlUint32(name string) (uint32, error) { + return SysctlUint32Args(name) +} + +func SysctlUint32Args(name string, args ...int) (uint32, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(4) + buf := make([]byte, 4) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 4 { + return 0, EIO + } + return *(*uint32)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlUint64(name string, args ...int) (uint64, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(8) + buf := make([]byte, 8) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 8 { + return 0, EIO + } + return *(*uint64)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlRaw(name string, args ...int) ([]byte, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return nil, err + } + + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Read into buffer of that size. + buf := make([]byte, n) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return nil, err + } + + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n], nil +} + +//sys utimes(path string, timeval *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + return utimes(path, nil) + } + // TODO: The BSDs can do utimensat with SYS_UTIMENSAT but it + // isn't supported by darwin so this uses utimes instead + if len(ts) != 2 { + return EINVAL + } + // Not as efficient as it could be because Timespec and + // Timeval have different types in the different OSes + tv := [2]Timeval{ + NsecToTimeval(TimespecToNsec(ts[0])), + NsecToTimeval(TimespecToNsec(ts[1])), + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys futimes(fd int, timeval *[2]Timeval) (err error) + +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimes(fd, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +// TODO: wrap +// Acct(name nil-string) (err error) +// Gethostuuid(uuid *byte, timeout *Timespec) (err error) +// Madvise(addr *byte, len int, behav int) (err error) +// Mprotect(addr *byte, len int, prot int) (err error) +// Msync(addr *byte, len int, flags int) (err error) +// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd_test.go b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go new file mode 100644 index 0000000..d8085a0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go @@ -0,0 +1,62 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd openbsd + +package unix_test + +import ( + "os/exec" + "runtime" + "testing" + + "golang.org/x/sys/unix" +) + +const MNT_WAIT = 1 +const MNT_NOWAIT = 2 + +func TestGetfsstat(t *testing.T) { + const flags = MNT_NOWAIT // see golang.org/issue/16937 + n, err := unix.Getfsstat(nil, flags) + if err != nil { + t.Fatal(err) + } + + data := make([]unix.Statfs_t, n) + n2, err := unix.Getfsstat(data, flags) + if err != nil { + t.Fatal(err) + } + if n != n2 { + t.Errorf("Getfsstat(nil) = %d, but subsequent Getfsstat(slice) = %d", n, n2) + } + for i, stat := range data { + if stat == (unix.Statfs_t{}) { + t.Errorf("index %v is an empty Statfs_t struct", i) + } + } + if t.Failed() { + for i, stat := range data[:n2] { + t.Logf("data[%v] = %+v", i, stat) + } + mount, err := exec.Command("mount").CombinedOutput() + if err != nil { + t.Logf("mount: %v\n%s", err, mount) + } else { + t.Logf("mount: %s", mount) + } + } +} + +func TestSysctlRaw(t *testing.T) { + if runtime.GOOS == "openbsd" { + t.Skip("kern.proc.pid does not exist on OpenBSD") + } + + _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid()) + if err != nil { + t.Fatal(err) + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go new file mode 100644 index 0000000..7d91ac0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -0,0 +1,493 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Darwin system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + errorspkg "errors" + "syscall" + "unsafe" +) + +const ImplementsGetwd = true + +func Getwd() (string, error) { + buf := make([]byte, 2048) + attrs, err := getAttrList(".", attrList{CommonAttr: attrCmnFullpath}, buf, 0) + if err == nil && len(attrs) == 1 && len(attrs[0]) >= 2 { + wd := string(attrs[0]) + // Sanity check that it's an absolute path and ends + // in a null byte, which we then strip. + if wd[0] == '/' && wd[len(wd)-1] == 0 { + return wd[:len(wd)-1], nil + } + } + // If pkg/os/getwd.go gets ENOTSUP, it will fall back to the + // slow algorithm. + return "", ENOTSUP +} + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) +func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } +func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } + +const ( + attrBitMapCount = 5 + attrCmnFullpath = 0x08000000 +) + +type attrList struct { + bitmapCount uint16 + _ uint16 + CommonAttr uint32 + VolAttr uint32 + DirAttr uint32 + FileAttr uint32 + Forkattr uint32 +} + +func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (attrs [][]byte, err error) { + if len(attrBuf) < 4 { + return nil, errorspkg.New("attrBuf too small") + } + attrList.bitmapCount = attrBitMapCount + + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return nil, err + } + + _, _, e1 := Syscall6( + SYS_GETATTRLIST, + uintptr(unsafe.Pointer(_p0)), + uintptr(unsafe.Pointer(&attrList)), + uintptr(unsafe.Pointer(&attrBuf[0])), + uintptr(len(attrBuf)), + uintptr(options), + 0, + ) + if e1 != 0 { + return nil, e1 + } + size := *(*uint32)(unsafe.Pointer(&attrBuf[0])) + + // dat is the section of attrBuf that contains valid data, + // without the 4 byte length header. All attribute offsets + // are relative to dat. + dat := attrBuf + if int(size) < len(attrBuf) { + dat = dat[:size] + } + dat = dat[4:] // remove length prefix + + for i := uint32(0); int(i) < len(dat); { + header := dat[i:] + if len(header) < 8 { + return attrs, errorspkg.New("truncated attribute header") + } + datOff := *(*int32)(unsafe.Pointer(&header[0])) + attrLen := *(*uint32)(unsafe.Pointer(&header[4])) + if datOff < 0 || uint32(datOff)+attrLen > uint32(len(dat)) { + return attrs, errorspkg.New("truncated results; attrBuf too small") + } + end := uint32(datOff) + attrLen + attrs = append(attrs, dat[datOff:end]) + i = end + if r := i % 4; r != 0 { + i += (4 - r) + } + } + return +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +/* + * Wrapped + */ + +//sys kill(pid int, signum int, posix int) (err error) + +func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) } + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exchangedata(path1 string, path2 string, options int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64 +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Getuid() (uid int) +//sysnb Issetugid() (tainted bool) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sys Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setprivexec(flag int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Mmap +// Mlock +// Munlock +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Poll +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// Mlockall +// Munlockall +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// sendfile +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Msync_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go new file mode 100644 index 0000000..c172a3d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go @@ -0,0 +1,77 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int32(nsec / 1e9) + return +} + +//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = int32(sec) + tv.Usec = int32(usec) + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/386 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go new file mode 100644 index 0000000..fc1e5a4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go @@ -0,0 +1,79 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = sec + tv.Usec = usec + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/amd64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go new file mode 100644 index 0000000..d286cf4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go @@ -0,0 +1,71 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int32(nsec / 1e9) + return +} + +//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = int32(sec) + tv.Usec = int32(usec) + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go new file mode 100644 index 0000000..c33905c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go @@ -0,0 +1,77 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 16384 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = sec + tv.Usec = usec + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/arm64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go new file mode 100644 index 0000000..7e0210f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -0,0 +1,425 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// DragonFly BSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import "unsafe" + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + namlen, ok := direntNamlen(buf) + if !ok { + return 0, false + } + return (16 + namlen + 1 + 7) &^ 7, true +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) +func Pread(fd int, p []byte, offset int64) (n int, err error) { + return extpread(fd, p, 0, offset) +} + +//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + return extpwrite(fd, p, 0, offset) +} + +func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) + +/* + * Unimplemented + * TODO(jsing): Update this list for DragonFly. + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Mmap +// Mlock +// Munlock +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Poll +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// Mlockall +// Munlockall +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Msync_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go new file mode 100644 index 0000000..da7cb79 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go @@ -0,0 +1,61 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,dragonfly + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = nsec % 1e9 / 1e3 + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go new file mode 100644 index 0000000..83b4119 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -0,0 +1,670 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// FreeBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import "unsafe" + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, errno +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// Derive extattr namespace and attribute name + +func xattrnamespace(fullattr string) (ns int, attr string, err error) { + s := -1 + for idx, val := range fullattr { + if val == '.' { + s = idx + break + } + } + + if s == -1 { + return -1, "", ENOATTR + } + + namespace := fullattr[0:s] + attr = fullattr[s+1:] + + switch namespace { + case "user": + return EXTATTR_NAMESPACE_USER, attr, nil + case "system": + return EXTATTR_NAMESPACE_SYSTEM, attr, nil + default: + return -1, "", ENOATTR + } +} + +func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) { + if len(dest) > idx { + return unsafe.Pointer(&dest[idx]) + } else { + return unsafe.Pointer(_zero) + } +} + +// FreeBSD implements its own syscalls to handle extended attributes + +func Getxattr(file string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFile(file, nsid, a, uintptr(d), destsize) +} + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize) +} + +func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetLink(link, nsid, a, uintptr(d), destsize) +} + +// flags are unused on FreeBSD + +func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz) + return +} + +func Setxattr(file string, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz) + return +} + +func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz) + return +} + +func Removexattr(file string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFile(file, nsid, a) + return +} + +func Fremovexattr(fd int, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFd(fd, nsid, a) + return +} + +func Lremovexattr(link string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteLink(link, nsid, a) + return +} + +func Listxattr(file string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + // FreeBSD won't allow you to list xattrs from multiple namespaces + s := 0 + var e error + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) + + /* Errors accessing system attrs are ignored so that + * we can implement the Linux-like behavior of omitting errors that + * we don't have read permissions on + * + * Linux will still error if we ask for user attributes on a file that + * we don't have read permissions on, so don't ignore those errors + */ + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + e = nil + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, e +} + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + var e error + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + e = nil + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, e +} + +func Llistxattr(link string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + var e error + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + e = nil + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, e +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys CapEnter() (err error) +//sys capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET +//sys capRightsLimit(fd int, rightsp *CapRights) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) +//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) +//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) +//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Mmap +// Mlock +// Munlock +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Poll +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// Mlockall +// Munlockall +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Msync_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go new file mode 100644 index 0000000..6a0cd80 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go @@ -0,0 +1,61 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int32(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go new file mode 100644 index 0000000..e142540 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go @@ -0,0 +1,61 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = nsec % 1e9 / 1e3 + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go new file mode 100644 index 0000000..5504cb1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go @@ -0,0 +1,61 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return ts.Sec*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = nsec / 1e9 + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go new file mode 100644 index 0000000..4d57419 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go @@ -0,0 +1,290 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd + +package unix_test + +import ( + "flag" + "fmt" + "io/ioutil" + "os" + "os/exec" + "path" + "path/filepath" + "testing" + + "golang.org/x/sys/unix" +) + +func TestSysctlUint64(t *testing.T) { + _, err := unix.SysctlUint64("security.mac.labeled") + if err != nil { + t.Fatal(err) + } +} + +// FIXME: Infrastructure for launching tests in subprocesses stolen from openbsd_test.go - refactor? +// testCmd generates a proper command that, when executed, runs the test +// corresponding to the given key. + +type testProc struct { + fn func() // should always exit instead of returning + arg func(t *testing.T) string // generate argument for test + cleanup func(arg string) error // for instance, delete coredumps from testing pledge + success bool // whether zero-exit means success or failure +} + +var ( + testProcs = map[string]testProc{} + procName = "" + procArg = "" +) + +const ( + optName = "sys-unix-internal-procname" + optArg = "sys-unix-internal-arg" +) + +func init() { + flag.StringVar(&procName, optName, "", "internal use only") + flag.StringVar(&procArg, optArg, "", "internal use only") + +} + +func testCmd(procName string, procArg string) (*exec.Cmd, error) { + exe, err := filepath.Abs(os.Args[0]) + if err != nil { + return nil, err + } + cmd := exec.Command(exe, "-"+optName+"="+procName, "-"+optArg+"="+procArg) + cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr + return cmd, nil +} + +// ExitsCorrectly is a comprehensive, one-line-of-use wrapper for testing +// a testProc with a key. +func ExitsCorrectly(t *testing.T, procName string) { + s := testProcs[procName] + arg := "-" + if s.arg != nil { + arg = s.arg(t) + } + c, err := testCmd(procName, arg) + defer func(arg string) { + if err := s.cleanup(arg); err != nil { + t.Fatalf("Failed to run cleanup for %s %s %#v", procName, err, err) + } + }(arg) + if err != nil { + t.Fatalf("Failed to construct command for %s", procName) + } + if (c.Run() == nil) != s.success { + result := "succeed" + if !s.success { + result = "fail" + } + t.Fatalf("Process did not %s when it was supposed to", result) + } +} + +func TestMain(m *testing.M) { + flag.Parse() + if procName != "" { + t := testProcs[procName] + t.fn() + os.Stderr.WriteString("test function did not exit\n") + if t.success { + os.Exit(1) + } else { + os.Exit(0) + } + } + os.Exit(m.Run()) +} + +// end of infrastructure + +const testfile = "gocapmodetest" +const testfile2 = testfile + "2" + +func CapEnterTest() { + _, err := os.OpenFile(path.Join(procArg, testfile), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err != nil { + panic(fmt.Sprintf("OpenFile: %s", err)) + } + + err = unix.CapEnter() + if err != nil { + panic(fmt.Sprintf("CapEnter: %s", err)) + } + + _, err = os.OpenFile(path.Join(procArg, testfile2), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + panic("OpenFile works!") + } + if err.(*os.PathError).Err != unix.ECAPMODE { + panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) + } + os.Exit(0) +} + +func makeTempDir(t *testing.T) string { + d, err := ioutil.TempDir("", "go_openat_test") + if err != nil { + t.Fatalf("TempDir failed: %s", err) + } + return d +} + +func removeTempDir(arg string) error { + err := os.RemoveAll(arg) + if err != nil && err.(*os.PathError).Err == unix.ENOENT { + return nil + } + return err +} + +func init() { + testProcs["cap_enter"] = testProc{ + CapEnterTest, + makeTempDir, + removeTempDir, + true, + } +} + +func TestCapEnter(t *testing.T) { + ExitsCorrectly(t, "cap_enter") +} + +func OpenatTest() { + f, err := os.Open(procArg) + if err != nil { + panic(err) + } + + err = unix.CapEnter() + if err != nil { + panic(fmt.Sprintf("CapEnter: %s", err)) + } + + fxx, err := unix.Openat(int(f.Fd()), "xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err != nil { + panic(err) + } + unix.Close(fxx) + + // The right to open BASE/xx is not ambient + _, err = os.OpenFile(procArg+"/xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + panic("OpenFile succeeded") + } + if err.(*os.PathError).Err != unix.ECAPMODE { + panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) + } + + // Can't make a new directory either + err = os.Mkdir(procArg+"2", 0777) + if err == nil { + panic("MKdir succeeded") + } + if err.(*os.PathError).Err != unix.ECAPMODE { + panic(fmt.Sprintf("Mkdir failed wrong: %s %#v", err, err)) + } + + // Remove all caps except read and lookup. + r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_LOOKUP}) + if err != nil { + panic(fmt.Sprintf("CapRightsInit failed: %s %#v", err, err)) + } + err = unix.CapRightsLimit(f.Fd(), r) + if err != nil { + panic(fmt.Sprintf("CapRightsLimit failed: %s %#v", err, err)) + } + + // Check we can get the rights back again + r, err = unix.CapRightsGet(f.Fd()) + if err != nil { + panic(fmt.Sprintf("CapRightsGet failed: %s %#v", err, err)) + } + b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP}) + if err != nil { + panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) + } + if !b { + panic(fmt.Sprintf("Unexpected rights")) + } + b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP, unix.CAP_WRITE}) + if err != nil { + panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) + } + if b { + panic(fmt.Sprintf("Unexpected rights (2)")) + } + + // Can no longer create a file + _, err = unix.Openat(int(f.Fd()), "xx2", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + panic("Openat succeeded") + } + if err != unix.ENOTCAPABLE { + panic(fmt.Sprintf("OpenFileAt failed wrong: %s %#v", err, err)) + } + + // But can read an existing one + _, err = unix.Openat(int(f.Fd()), "xx", os.O_RDONLY, 0666) + if err != nil { + panic(fmt.Sprintf("Openat failed: %s %#v", err, err)) + } + + os.Exit(0) +} + +func init() { + testProcs["openat"] = testProc{ + OpenatTest, + makeTempDir, + removeTempDir, + true, + } +} + +func TestOpenat(t *testing.T) { + ExitsCorrectly(t, "openat") +} + +func TestCapRightsSetAndClear(t *testing.T) { + r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT}) + if err != nil { + t.Fatalf("CapRightsInit failed: %s", err) + } + + err = unix.CapRightsSet(r, []uint64{unix.CAP_EVENT, unix.CAP_LISTEN}) + if err != nil { + t.Fatalf("CapRightsSet failed: %s", err) + } + + b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT, unix.CAP_EVENT, unix.CAP_LISTEN}) + if err != nil { + t.Fatalf("CapRightsIsSet failed: %s", err) + } + if !b { + t.Fatalf("Wrong rights set") + } + + err = unix.CapRightsClear(r, []uint64{unix.CAP_READ, unix.CAP_PDWAIT}) + if err != nil { + t.Fatalf("CapRightsClear failed: %s", err) + } + + b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_WRITE, unix.CAP_EVENT, unix.CAP_LISTEN}) + if err != nil { + t.Fatalf("CapRightsIsSet failed: %s", err) + } + if !b { + t.Fatalf("Wrong rights set") + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go new file mode 100644 index 0000000..056f601 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -0,0 +1,1459 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Linux system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and +// wrap it in our own nicer implementation. + +package unix + +import ( + "syscall" + "unsafe" +) + +/* + * Wrapped + */ + +func Access(path string, mode uint32) (err error) { + return Faccessat(AT_FDCWD, path, mode, 0) +} + +func Chmod(path string, mode uint32) (err error) { + return Fchmodat(AT_FDCWD, path, mode, 0) +} + +func Chown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, 0) +} + +func Creat(path string, mode uint32) (fd int, err error) { + return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) +} + +//sys fchmodat(dirfd int, path string, mode uint32) (err error) + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + // Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior + // and check the flags. Otherwise the mode would be applied to the symlink + // destination which is not what the user expects. + if flags&^AT_SYMLINK_NOFOLLOW != 0 { + return EINVAL + } else if flags&AT_SYMLINK_NOFOLLOW != 0 { + return EOPNOTSUPP + } + return fchmodat(dirfd, path, mode) +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) + +func Link(oldpath string, newpath string) (err error) { + return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0) +} + +func Mkdir(path string, mode uint32) (err error) { + return Mkdirat(AT_FDCWD, path, mode) +} + +func Mknod(path string, mode uint32, dev int) (err error) { + return Mknodat(AT_FDCWD, path, mode, dev) +} + +func Open(path string, mode int, perm uint32) (fd int, err error) { + return openat(AT_FDCWD, path, mode|O_LARGEFILE, perm) +} + +//sys openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + return openat(dirfd, path, flags|O_LARGEFILE, mode) +} + +//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) + +func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + if len(fds) == 0 { + return ppoll(nil, 0, timeout, sigmask) + } + return ppoll(&fds[0], len(fds), timeout, sigmask) +} + +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) + +func Readlink(path string, buf []byte) (n int, err error) { + return Readlinkat(AT_FDCWD, path, buf) +} + +func Rename(oldpath string, newpath string) (err error) { + return Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath) +} + +func Rmdir(path string) error { + return Unlinkat(AT_FDCWD, path, AT_REMOVEDIR) +} + +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) + +func Symlink(oldpath string, newpath string) (err error) { + return Symlinkat(oldpath, AT_FDCWD, newpath) +} + +func Unlink(path string) error { + return Unlinkat(AT_FDCWD, path, 0) +} + +//sys Unlinkat(dirfd int, path string, flags int) (err error) + +//sys utimes(path string, times *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + var ts [2]Timespec + ts[0] = NsecToTimespec(TimevalToNsec(tv[0])) + ts[1] = NsecToTimespec(TimevalToNsec(tv[1])) + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(ts) != 2 { + return EINVAL + } + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + // If the utimensat syscall isn't available (utimensat was added to Linux + // in 2.6.22, Released, 8 July 2007) then fall back to utimes + var tv [2]Timeval + for i := 0; i < 2; i++ { + tv[i] = NsecToTimeval(TimespecToNsec(ts[i])) + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) + +func Futimesat(dirfd int, path string, tv []Timeval) error { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + if tv == nil { + return futimesat(dirfd, pathp, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func Futimes(fd int, tv []Timeval) (err error) { + // Believe it or not, this is the best we can do on Linux + // (and is what glibc does). + return Utimes("/proc/self/fd/"+itoa(fd), tv) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + n, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + // Getcwd returns the number of bytes written to buf, including the NUL. + if n < 1 || n > len(buf) || buf[n-1] != 0 { + return "", EINVAL + } + return string(buf[0 : n-1]), nil +} + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 1<<16 on Linux. + if n < 0 || n > 1<<20 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +type WaitStatus uint32 + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. At least that's the idea. +// There are various irregularities. For example, the +// "continued" status is 0xFFFF, distinguishing itself +// from stopped via the core dump bit. + +const ( + mask = 0x7F + core = 0x80 + exited = 0x00 + stopped = 0x7F + shift = 8 +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited } + +func (w WaitStatus) Stopped() bool { return w&0xFF == stopped } + +func (w WaitStatus) Continued() bool { return w == 0xFFFF } + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) ExitStatus() int { + if !w.Exited() { + return -1 + } + return int(w>>shift) & 0xFF +} + +func (w WaitStatus) Signal() syscall.Signal { + if !w.Signaled() { + return -1 + } + return syscall.Signal(w & mask) +} + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { + if w.StopSignal() != SIGTRAP { + return -1 + } + return int(w>>shift) >> 8 +} + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +func Mkfifo(path string, mode uint32) error { + return Mknod(path, mode|S_IFIFO, 0) +} + +func Mkfifoat(dirfd int, path string, mode uint32) error { + return Mknodat(dirfd, path, mode|S_IFIFO, 0) +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +type SockaddrLinklayer struct { + Protocol uint16 + Ifindex int + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]byte + raw RawSockaddrLinklayer +} + +func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_PACKET + sa.raw.Protocol = sa.Protocol + sa.raw.Ifindex = int32(sa.Ifindex) + sa.raw.Hatype = sa.Hatype + sa.raw.Pkttype = sa.Pkttype + sa.raw.Halen = sa.Halen + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil +} + +type SockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 + raw RawSockaddrNetlink +} + +func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_NETLINK + sa.raw.Pad = sa.Pad + sa.raw.Pid = sa.Pid + sa.raw.Groups = sa.Groups + return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil +} + +type SockaddrHCI struct { + Dev uint16 + Channel uint16 + raw RawSockaddrHCI +} + +func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + sa.raw.Dev = sa.Dev + sa.raw.Channel = sa.Channel + return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil +} + +// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets. +// The RxID and TxID fields are used for transport protocol addressing in +// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with +// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning. +// +// The SockaddrCAN struct must be bound to the socket file descriptor +// using Bind before the CAN socket can be used. +// +// // Read one raw CAN frame +// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) +// addr := &SockaddrCAN{Ifindex: index} +// Bind(fd, addr) +// frame := make([]byte, 16) +// Read(fd, frame) +// +// The full SocketCAN documentation can be found in the linux kernel +// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt +type SockaddrCAN struct { + Ifindex int + RxID uint32 + TxID uint32 + raw RawSockaddrCAN +} + +func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_CAN + sa.raw.Ifindex = int32(sa.Ifindex) + rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i] = rx[i] + } + tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i+4] = tx[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil +} + +// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets. +// SockaddrALG enables userspace access to the Linux kernel's cryptography +// subsystem. The Type and Name fields specify which type of hash or cipher +// should be used with a given socket. +// +// To create a file descriptor that provides access to a hash or cipher, both +// Bind and Accept must be used. Once the setup process is complete, input +// data can be written to the socket, processed by the kernel, and then read +// back as hash output or ciphertext. +// +// Here is an example of using an AF_ALG socket with SHA1 hashing. +// The initial socket setup process is as follows: +// +// // Open a socket to perform SHA1 hashing. +// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) +// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} +// unix.Bind(fd, addr) +// // Note: unix.Accept does not work at this time; must invoke accept() +// // manually using unix.Syscall. +// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) +// +// Once a file descriptor has been returned from Accept, it may be used to +// perform SHA1 hashing. The descriptor is not safe for concurrent use, but +// may be re-used repeatedly with subsequent Write and Read operations. +// +// When hashing a small byte slice or string, a single Write and Read may +// be used: +// +// // Assume hashfd is already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash an input string and read the results. Each Write discards +// // previous hash state. Read always reads the current state. +// b := make([]byte, 20) +// for i := 0; i < 2; i++ { +// io.WriteString(hash, "Hello, world.") +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// } +// // Output: +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// +// For hashing larger byte slices, or byte streams such as those read from +// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update +// the hash digest instead of creating a new one for a given chunk and finalizing it. +// +// // Assume hashfd and addr are already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash the contents of a file. +// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") +// b := make([]byte, 4096) +// for { +// n, err := f.Read(b) +// if err == io.EOF { +// break +// } +// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) +// } +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 +// +// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html. +type SockaddrALG struct { + Type string + Name string + Feature uint32 + Mask uint32 + raw RawSockaddrALG +} + +func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) { + // Leave room for NUL byte terminator. + if len(sa.Type) > 13 { + return nil, 0, EINVAL + } + if len(sa.Name) > 63 { + return nil, 0, EINVAL + } + + sa.raw.Family = AF_ALG + sa.raw.Feat = sa.Feature + sa.raw.Mask = sa.Mask + + typ, err := ByteSliceFromString(sa.Type) + if err != nil { + return nil, 0, err + } + name, err := ByteSliceFromString(sa.Name) + if err != nil { + return nil, 0, err + } + + copy(sa.raw.Type[:], typ) + copy(sa.raw.Name[:], name) + + return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil +} + +// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. +// SockaddrVM provides access to Linux VM sockets: a mechanism that enables +// bidirectional communication between a hypervisor and its guest virtual +// machines. +type SockaddrVM struct { + // CID and Port specify a context ID and port address for a VM socket. + // Guests have a unique CID, and hosts may have a well-known CID of: + // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. + // - VMADDR_CID_HOST: refers to other processes on the host. + CID uint32 + Port uint32 + raw RawSockaddrVM +} + +func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_VSOCK + sa.raw.Port = sa.Port + sa.raw.Cid = sa.CID + + return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil +} + +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_NETLINK: + pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa)) + sa := new(SockaddrNetlink) + sa.Family = pp.Family + sa.Pad = pp.Pad + sa.Pid = pp.Pid + sa.Groups = pp.Groups + return sa, nil + + case AF_PACKET: + pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa)) + sa := new(SockaddrLinklayer) + sa.Protocol = pp.Protocol + sa.Ifindex = int(pp.Ifindex) + sa.Hatype = pp.Hatype + sa.Pkttype = pp.Pkttype + sa.Halen = pp.Halen + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + if pp.Path[0] == 0 { + // "Abstract" Unix domain socket. + // Rewrite leading NUL as @ for textual display. + // (This is the standard convention.) + // Not friendly to overwrite in place, + // but the callers below don't care. + pp.Path[0] = '@' + } + + // Assume path ends at NUL. + // This is not technically the Linux semantics for + // abstract Unix domain sockets--they are supposed + // to be uninterpreted fixed-size binary blobs--but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_VSOCK: + pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) + sa := &SockaddrVM{ + CID: pp.Cid, + Port: pp.Port, + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(&rsa) +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { + var value IPv6MTUInfo + vallen := _Socklen(SizeofIPv6MTUInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { + var value ICMPv6Filter + vallen := _Socklen(SizeofICMPv6Filter) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptUcred(fd, level, opt int) (*Ucred, error) { + var value Ucred + vallen := _Socklen(SizeofUcred) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { + var value TCPInfo + vallen := _Socklen(SizeofTCPInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) + +// KeyctlInt calls keyctl commands in which each argument is an int. +// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK, +// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT, +// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT, +// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT. +//sys KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlBuffer calls keyctl commands in which the third and fourth +// arguments are a buffer and its length, respectively. +// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE. +//sys KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlString calls keyctl commands which return a string. +// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY. +func KeyctlString(cmd int, id int) (string, error) { + // We must loop as the string data may change in between the syscalls. + // We could allocate a large buffer here to reduce the chance that the + // syscall needs to be called twice; however, this is unnecessary as + // the performance loss is negligible. + var buffer []byte + for { + // Try to fill the buffer with data + length, err := KeyctlBuffer(cmd, id, buffer, 0) + if err != nil { + return "", err + } + + // Check if the data was written + if length <= len(buffer) { + // Exclude the null terminator + return string(buffer[:length-1]), nil + } + + // Make a bigger buffer if needed + buffer = make([]byte, length) + } +} + +// Keyctl commands with special signatures. + +// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html +func KeyctlGetKeyringID(id int, create bool) (ringid int, err error) { + createInt := 0 + if create { + createInt = 1 + } + return KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0) +} + +// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the +// key handle permission mask as described in the "keyctl setperm" section of +// http://man7.org/linux/man-pages/man1/keyctl.1.html. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html +func KeyctlSetperm(id int, perm uint32) error { + _, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0) + return err +} + +//sys keyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL + +// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html +func KeyctlJoinSessionKeyring(name string) (ringid int, err error) { + return keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name) +} + +//sys keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlSearch implements the KEYCTL_SEARCH command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_search.3.html +func KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) { + return keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid) +} + +//sys keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL + +// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This +// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice +// of Iovec (each of which represents a buffer) instead of a single buffer. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html +func KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error { + return keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid) +} + +//sys keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL + +// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command +// computes a Diffie-Hellman shared secret based on the provide params. The +// secret is written to the provided buffer and the returned size is the number +// of bytes written (returning an error if there is insufficient space in the +// buffer). If a nil buffer is passed in, this function returns the minimum +// buffer length needed to store the appropriate data. Note that this differs +// from KEYCTL_READ's behavior which always returns the requested payload size. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html +func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) { + return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer) +} + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + var err error + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +// BindToDevice binds the socket associated with fd to device. +func BindToDevice(fd int, device string) (err error) { + return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device) +} + +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) + +func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { + // The peek requests are machine-size oriented, so we wrap it + // to retrieve arbitrary-length data. + + // The ptrace syscall differs from glibc's ptrace. + // Peeks returns the word in *data, not as the return value. + + var buf [sizeofPtr]byte + + // Leading edge. PEEKTEXT/PEEKDATA don't require aligned + // access (PEEKUSER warns that it might), but if we don't + // align our reads, we might straddle an unmapped page + // boundary and not get the bytes leading up to the page + // boundary. + n := 0 + if addr%sizeofPtr != 0 { + err = ptrace(req, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(out, buf[addr%sizeofPtr:]) + out = out[n:] + } + + // Remainder. + for len(out) > 0 { + // We use an internal buffer to guarantee alignment. + // It's not documented if this is necessary, but we're paranoid. + err = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copied := copy(out, buf[0:]) + n += copied + out = out[copied:] + } + + return n, nil +} + +func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKTEXT, pid, addr, out) +} + +func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKDATA, pid, addr, out) +} + +func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKUSR, pid, addr, out) +} + +func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) { + // As for ptracePeek, we need to align our accesses to deal + // with the possibility of straddling an invalid page. + + // Leading edge. + n := 0 + if addr%sizeofPtr != 0 { + var buf [sizeofPtr]byte + err = ptrace(peekReq, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(buf[addr%sizeofPtr:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr-addr%sizeofPtr, word) + if err != nil { + return 0, err + } + data = data[n:] + } + + // Interior. + for len(data) > sizeofPtr { + word := *((*uintptr)(unsafe.Pointer(&data[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += sizeofPtr + data = data[sizeofPtr:] + } + + // Trailing edge. + if len(data) > 0 { + var buf [sizeofPtr]byte + err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copy(buf[0:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += len(data) + } + + return n, nil +} + +func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data) +} + +func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data) +} + +func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +func PtraceSetOptions(pid int, options int) (err error) { + return ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options)) +} + +func PtraceGetEventMsg(pid int) (msg uint, err error) { + var data _C_long + err = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data))) + msg = uint(data) + return +} + +func PtraceCont(pid int, signal int) (err error) { + return ptrace(PTRACE_CONT, pid, 0, uintptr(signal)) +} + +func PtraceSyscall(pid int, signal int) (err error) { + return ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal)) +} + +func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) } + +func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) } + +func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) } + +//sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) + +func Reboot(cmd int) (err error) { + return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "") +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + return Getdents(fd, buf) +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + reclen, ok := direntReclen(buf) + if !ok { + return 0, false + } + return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true +} + +//sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) + +func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { + // Certain file systems get rather angry and EINVAL if you give + // them an empty string of data, rather than NULL. + if data == "" { + return mount(source, target, fstype, flags, nil) + } + datap, err := BytePtrFromString(data) + if err != nil { + return err + } + return mount(source, target, fstype, flags, datap) +} + +// Sendto +// Recvfrom +// Socketpair + +/* + * Direct access + */ +//sys Acct(path string) (err error) +//sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) +//sys Adjtimex(buf *Timex) (state int, err error) +//sys Chdir(path string) (err error) +//sys Chroot(path string) (err error) +//sys ClockGettime(clockid int32, time *Timespec) (err error) +//sys Close(fd int) (err error) +//sys CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Dup(oldfd int) (fd int, err error) +//sys Dup3(oldfd int, newfd int, flags int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sysnb EpollCreate1(flag int) (fd int, err error) +//sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) +//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2 +//sys Exit(code int) = SYS_EXIT_GROUP +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys Fdatasync(fd int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fsync(fd int) (err error) +//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 +//sysnb Getpgid(pid int) (pgid int, err error) + +func Getpgrp() (pid int) { + pid, _ = Getpgid(0) + return +} + +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sys Getrandom(buf []byte, flags int) (n int, err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettid() (tid int) +//sys Getxattr(path string, attr string, dest []byte) (sz int, err error) +//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) +//sysnb InotifyInit1(flags int) (fd int, err error) +//sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) +//sysnb Kill(pid int, sig syscall.Signal) (err error) +//sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG +//sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error) +//sys Listxattr(path string, dest []byte) (sz int, err error) +//sys Llistxattr(path string, dest []byte) (sz int, err error) +//sys Lremovexattr(path string, attr string) (err error) +//sys Lsetxattr(path string, attr string, data []byte, flags int) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT +//sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 +//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Removexattr(path string, attr string) (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) +//sys Setdomainname(p []byte) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tv *Timeval) (err error) +//sys Setns(fd int, nstype int) (err error) + +// issue 1435. +// On linux Setuid and Setgid only affects the current thread, not the process. +// This does not match what most callers expect so we must return an error +// here rather than letting the caller think that the call succeeded. + +func Setuid(uid int) (err error) { + return EOPNOTSUPP +} + +func Setgid(uid int) (err error) { + return EOPNOTSUPP +} + +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setxattr(path string, attr string, data []byte, flags int) (err error) +//sys Sync() +//sysnb Sysinfo(info *Sysinfo_t) (err error) +//sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error) +//sysnb Tgkill(tgid int, tid int, sig syscall.Signal) (err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sysnb Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = SYS_UMOUNT2 +//sys Unshare(flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys exitThread(code int) (err error) = SYS_EXIT +//sys readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ +//sys writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE + +// mmap varies by architecture; see syscall_linux_*.go. +//sys munmap(addr uintptr, length uintptr) (err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, advice int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Mlock(b []byte) (err error) +//sys Munlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Munlockall() (err error) + +// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, +// using the specified flags. +func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { + n, _, errno := Syscall6( + SYS_VMSPLICE, + uintptr(fd), + uintptr(unsafe.Pointer(&iovs[0])), + uintptr(len(iovs)), + uintptr(flags), + 0, + 0, + ) + if errno != 0 { + return 0, syscall.Errno(errno) + } + + return int(n), nil +} + +/* + * Unimplemented + */ +// AfsSyscall +// Alarm +// ArchPrctl +// Brk +// Capget +// Capset +// ClockGetres +// ClockNanosleep +// ClockSettime +// Clone +// CreateModule +// DeleteModule +// EpollCtlOld +// EpollPwait +// EpollWaitOld +// Execve +// Fgetxattr +// Flistxattr +// Fork +// Fremovexattr +// Fsetxattr +// Futex +// GetKernelSyms +// GetMempolicy +// GetRobustList +// GetThreadArea +// Getitimer +// Getpmsg +// IoCancel +// IoDestroy +// IoGetevents +// IoSetup +// IoSubmit +// IoprioGet +// IoprioSet +// KexecLoad +// LookupDcookie +// Mbind +// MigratePages +// Mincore +// ModifyLdt +// Mount +// MovePages +// Mprotect +// MqGetsetattr +// MqNotify +// MqOpen +// MqTimedreceive +// MqTimedsend +// MqUnlink +// Mremap +// Msgctl +// Msgget +// Msgrcv +// Msgsnd +// Msync +// Newfstatat +// Nfsservctl +// Personality +// Pselect6 +// Ptrace +// Putpmsg +// QueryModule +// Quotactl +// Readahead +// Readv +// RemapFilePages +// RestartSyscall +// RtSigaction +// RtSigpending +// RtSigprocmask +// RtSigqueueinfo +// RtSigreturn +// RtSigsuspend +// RtSigtimedwait +// SchedGetPriorityMax +// SchedGetPriorityMin +// SchedGetaffinity +// SchedGetparam +// SchedGetscheduler +// SchedRrGetInterval +// SchedSetaffinity +// SchedSetparam +// SchedYield +// Security +// Semctl +// Semget +// Semop +// Semtimedop +// SetMempolicy +// SetRobustList +// SetThreadArea +// SetTidAddress +// Shmat +// Shmctl +// Shmdt +// Shmget +// Sigaltstack +// Signalfd +// Swapoff +// Swapon +// Sysfs +// TimerCreate +// TimerDelete +// TimerGetoverrun +// TimerGettime +// TimerSettime +// Timerfd +// Tkill (obsolete) +// Tuxcall +// Umount2 +// Uselib +// Utimensat +// Vfork +// Vhangup +// Vserver +// Waitid +// _Sysctl diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go new file mode 100644 index 0000000..2b881b9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -0,0 +1,399 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) +// so that go vet can check that they are correct. + +// +build 386,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = int32(nsec / 1e9) + tv.Usec = int32(nsec % 1e9 / 1e3) + return +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// 64-bit file system and 32-bit uid calls +// (386 default is 32-bit file system and 16-bit uid). +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64 +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32 +//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Pause() (err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +// Vsyscalls on amd64. +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) + +//sys Utime(path string, buf *Utimbuf) (err error) + +// On x86 Linux, all the socket calls go through an extra indirection, +// I think because the 5-register system call interface can't handle +// the 6-argument calls like sendto and recvfrom. Instead the +// arguments to the underlying system call are the number below +// and a pointer to an array of uintptr. We hide the pointer in the +// socketcall assembly to avoid allocation on every system call. + +const ( + // see linux/net.h + _SOCKET = 1 + _BIND = 2 + _CONNECT = 3 + _LISTEN = 4 + _ACCEPT = 5 + _GETSOCKNAME = 6 + _GETPEERNAME = 7 + _SOCKETPAIR = 8 + _SEND = 9 + _RECV = 10 + _SENDTO = 11 + _RECVFROM = 12 + _SHUTDOWN = 13 + _SETSOCKOPT = 14 + _GETSOCKOPT = 15 + _SENDMSG = 16 + _RECVMSG = 17 + _ACCEPT4 = 18 + _RECVMMSG = 19 + _SENDMMSG = 20 +) + +func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) +func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e != 0 { + err = e + } + return +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socket(domain int, typ int, proto int) (fd int, err error) { + fd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e != 0 { + err = e + } + return +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0) + if e != 0 { + err = e + } + return +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + n, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + if e != 0 { + err = e + } + return +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + _, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e != 0 { + err = e + } + return +} + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Listen(s int, n int) (err error) { + _, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Shutdown(s, how int) (err error) { + _, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go new file mode 100644 index 0000000..9516a3f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -0,0 +1,152 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,linux + +package unix + +//sys Dup2(oldfd int, newfd int) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Gettimeofday(tv *Timeval) (err error) { + errno := gettimeofday(tv) + if errno != 0 { + return errno + } + return nil +} + +func Getpagesize() int { return 4096 } + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + errno := gettimeofday(&tv) + if errno != 0 { + return 0, errno + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Rip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go new file mode 100644 index 0000000..21a4946 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go @@ -0,0 +1,13 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,linux +// +build !gccgo + +package unix + +import "syscall" + +//go:noescape +func gettimeofday(tv *Timeval) (err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go new file mode 100644 index 0000000..71d8702 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -0,0 +1,263 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = int32(nsec / 1e9) + tv.Usec = int32(nsec % 1e9 / 1e3) + return +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +// 64-bit file system and 32-bit uid calls +// (16-bit uid calls are not always supported in newer kernels) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32 +//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 + +// Vsyscalls on amd64. +//sysnb Gettimeofday(tv *Timeval) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Pause() (err error) + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go new file mode 100644 index 0000000..4a13639 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -0,0 +1,190 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64,linux + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Listen(s int, n int) (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, 0) +} + +func Lchown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) +} + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Getpagesize() int { return 65536 } + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Pc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func InotifyInit() (fd int, err error) { + return InotifyInit1(0) +} + +func Dup2(oldfd int, newfd int) (err error) { + return Dup3(oldfd, newfd, 0) +} + +func Pause() (err error) { + _, _, e1 := Syscall6(SYS_PPOLL, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// TODO(dfc): constants that should be in zsysnum_linux_arm64.go, remove +// these when the deprecated syscalls that the syscall package relies on +// are removed. +const ( + SYS_GETPGRP = 1060 + SYS_UTIMES = 1037 + SYS_FUTIMESAT = 1066 + SYS_PAUSE = 1061 + SYS_USTAT = 1070 + SYS_UTIME = 1063 + SYS_LCHOWN = 1032 + SYS_TIME = 1062 + SYS_EPOLL_CREATE = 1042 + SYS_EPOLL_WAIT = 1069 +) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + var ts *Timespec + if timeout >= 0 { + ts = new(Timespec) + *ts = NsecToTimespec(int64(timeout) * 1e6) + } + if len(fds) == 0 { + return ppoll(nil, 0, ts, nil) + } + return ppoll(&fds[0], len(fds), ts, nil) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go new file mode 100644 index 0000000..73318e5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -0,0 +1,209 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips64 mips64le + +package unix + +//sys Dup2(oldfd int, newfd int) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Getpagesize() int { return 65536 } + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +type stat_t struct { + Dev uint32 + Pad0 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad1 [3]uint32 + Size int64 + Atime uint32 + Atime_nsec uint32 + Mtime uint32 + Mtime_nsec uint32 + Ctime uint32 + Ctime_nsec uint32 + Blksize uint32 + Pad2 uint32 + Blocks int64 +} + +//sys fstat(fd int, st *stat_t) (err error) +//sys lstat(path string, st *stat_t) (err error) +//sys stat(path string, st *stat_t) (err error) + +func Fstat(fd int, s *Stat_t) (err error) { + st := &stat_t{} + err = fstat(fd, st) + fillStat_t(s, st) + return +} + +func Lstat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = lstat(path, st) + fillStat_t(s, st) + return +} + +func Stat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = stat(path, st) + fillStat_t(s, st) + return +} + +func fillStat_t(s *Stat_t, st *stat_t) { + s.Dev = st.Dev + s.Ino = st.Ino + s.Mode = st.Mode + s.Nlink = st.Nlink + s.Uid = st.Uid + s.Gid = st.Gid + s.Rdev = st.Rdev + s.Size = st.Size + s.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)} + s.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)} + s.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)} + s.Blksize = st.Blksize + s.Blocks = st.Blocks +} + +func (r *PtraceRegs) PC() uint64 { return r.Epc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go new file mode 100644 index 0000000..b83d93f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -0,0 +1,239 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips mipsle + +package unix + +import ( + "syscall" + "unsafe" +) + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) + +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) + +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Pause() (err error) + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = errnoErr(e) + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + p, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = errnoErr(e) + } + return +} + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + _, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0) + if e != 0 { + err = errnoErr(e) + } + return +} + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int32(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = int32(nsec / 1e9) + tv.Usec = int32(nsec % 1e9 / 1e3) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint64 { return r.Epc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +func Getpagesize() int { return 4096 } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go new file mode 100644 index 0000000..60770f6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -0,0 +1,135 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build ppc64 ppc64le + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) = SYS_SYNC_FILE_RANGE2 +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Getpagesize() int { return 65536 } + +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) + +//sys Utime(path string, buf *Utimbuf) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Nip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go new file mode 100644 index 0000000..1708a4b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -0,0 +1,328 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build s390x,linux + +package unix + +import ( + "unsafe" +) + +//sys Dup2(oldfd int, newfd int) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) + +func Getpagesize() int { return 4096 } + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = nsec % 1e9 / 1e3 + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) // pipe2 is the same as pipe when flags are set to 0. + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct. +// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in . +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + mmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)} + r0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// On s390x Linux, all the socket calls go through an extra indirection. +// The arguments to the underlying system call (SYS_SOCKETCALL) are the +// number below and a pointer to an array of uintptr. +const ( + // see linux/net.h + netSocket = 1 + netBind = 2 + netConnect = 3 + netListen = 4 + netAccept = 5 + netGetSockName = 6 + netGetPeerName = 7 + netSocketPair = 8 + netSend = 9 + netRecv = 10 + netSendTo = 11 + netRecvFrom = 12 + netShutdown = 13 + netSetSockOpt = 14 + netGetSockOpt = 15 + netSendMsg = 16 + netRecvMsg = 17 + netAccept4 = 18 + netRecvMMsg = 19 + netSendMMsg = 20 +) + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) { + args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) error { + args := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socket(domain int, typ int, proto int) (int, error) { + args := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)} + fd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error { + args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))} + _, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error { + args := [4]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val)} + _, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func Listen(s int, n int) error { + args := [2]uintptr{uintptr(s), uintptr(n)} + _, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func Shutdown(s, how int) error { + args := [2]uintptr{uintptr(s), uintptr(how)} + _, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go new file mode 100644 index 0000000..20b7454 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -0,0 +1,169 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build sparc64,linux + +package unix + +import ( + "sync/atomic" + "syscall" +) + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func sysconf(name int) (n int64, err syscall.Errno) + +// pageSize caches the value of Getpagesize, since it can't change +// once the system is booted. +var pageSize int64 // accessed atomically + +func Getpagesize() int { + n := atomic.LoadInt64(&pageSize) + if n == 0 { + n, _ = sysconf(_SC_PAGESIZE) + atomic.StoreInt64(&pageSize, n) + } + return int(n) +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Sec = nsec / 1e9 + tv.Usec = int32(nsec % 1e9 / 1e3) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Tpc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_test.go b/vendor/golang.org/x/sys/unix/syscall_linux_test.go new file mode 100644 index 0000000..3770231 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_test.go @@ -0,0 +1,227 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package unix_test + +import ( + "io/ioutil" + "os" + "testing" + "time" + + "golang.org/x/sys/unix" +) + +func TestFchmodat(t *testing.T) { + defer chtmpdir(t)() + + touch(t, "file1") + os.Symlink("file1", "symlink1") + + err := unix.Fchmodat(unix.AT_FDCWD, "symlink1", 0444, 0) + if err != nil { + t.Fatalf("Fchmodat: unexpected error: %v", err) + } + + fi, err := os.Stat("file1") + if err != nil { + t.Fatal(err) + } + + if fi.Mode() != 0444 { + t.Errorf("Fchmodat: failed to change mode: expected %v, got %v", 0444, fi.Mode()) + } + + err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", 0444, unix.AT_SYMLINK_NOFOLLOW) + if err != unix.EOPNOTSUPP { + t.Fatalf("Fchmodat: unexpected error: %v, expected EOPNOTSUPP", err) + } +} + +func TestIoctlGetInt(t *testing.T) { + f, err := os.Open("/dev/random") + if err != nil { + t.Fatalf("failed to open device: %v", err) + } + defer f.Close() + + v, err := unix.IoctlGetInt(int(f.Fd()), unix.RNDGETENTCNT) + if err != nil { + t.Fatalf("failed to perform ioctl: %v", err) + } + + t.Logf("%d bits of entropy available", v) +} + +func TestPoll(t *testing.T) { + f, cleanup := mktmpfifo(t) + defer cleanup() + + const timeout = 100 + + ok := make(chan bool, 1) + go func() { + select { + case <-time.After(10 * timeout * time.Millisecond): + t.Errorf("Poll: failed to timeout after %d milliseconds", 10*timeout) + case <-ok: + } + }() + + fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} + n, err := unix.Poll(fds, timeout) + ok <- true + if err != nil { + t.Errorf("Poll: unexpected error: %v", err) + return + } + if n != 0 { + t.Errorf("Poll: wrong number of events: got %v, expected %v", n, 0) + return + } +} + +func TestPpoll(t *testing.T) { + f, cleanup := mktmpfifo(t) + defer cleanup() + + const timeout = 100 * time.Millisecond + + ok := make(chan bool, 1) + go func() { + select { + case <-time.After(10 * timeout): + t.Errorf("Ppoll: failed to timeout after %d", 10*timeout) + case <-ok: + } + }() + + fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} + timeoutTs := unix.NsecToTimespec(int64(timeout)) + n, err := unix.Ppoll(fds, &timeoutTs, nil) + ok <- true + if err != nil { + t.Errorf("Ppoll: unexpected error: %v", err) + return + } + if n != 0 { + t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) + return + } +} + +// mktmpfifo creates a temporary FIFO and provides a cleanup function. +func mktmpfifo(t *testing.T) (*os.File, func()) { + err := unix.Mkfifo("fifo", 0666) + if err != nil { + t.Fatalf("mktmpfifo: failed to create FIFO: %v", err) + } + + f, err := os.OpenFile("fifo", os.O_RDWR, 0666) + if err != nil { + os.Remove("fifo") + t.Fatalf("mktmpfifo: failed to open FIFO: %v", err) + } + + return f, func() { + f.Close() + os.Remove("fifo") + } +} + +func TestTime(t *testing.T) { + var ut unix.Time_t + ut2, err := unix.Time(&ut) + if err != nil { + t.Fatalf("Time: %v", err) + } + if ut != ut2 { + t.Errorf("Time: return value %v should be equal to argument %v", ut2, ut) + } + + var now time.Time + + for i := 0; i < 10; i++ { + ut, err = unix.Time(nil) + if err != nil { + t.Fatalf("Time: %v", err) + } + + now = time.Now() + + if int64(ut) == now.Unix() { + return + } + } + + t.Errorf("Time: return value %v should be nearly equal to time.Now().Unix() %v", ut, now.Unix()) +} + +func TestUtime(t *testing.T) { + defer chtmpdir(t)() + + touch(t, "file1") + + buf := &unix.Utimbuf{ + Modtime: 12345, + } + + err := unix.Utime("file1", buf) + if err != nil { + t.Fatalf("Utime: %v", err) + } + + fi, err := os.Stat("file1") + if err != nil { + t.Fatal(err) + } + + if fi.ModTime().Unix() != 12345 { + t.Errorf("Utime: failed to change modtime: expected %v, got %v", 12345, fi.ModTime().Unix()) + } +} + +func TestGetrlimit(t *testing.T) { + var rlim unix.Rlimit + err := unix.Getrlimit(unix.RLIMIT_AS, &rlim) + if err != nil { + t.Fatalf("Getrlimit: %v", err) + } +} + +// utilities taken from os/os_test.go + +func touch(t *testing.T, name string) { + f, err := os.Create(name) + if err != nil { + t.Fatal(err) + } + if err := f.Close(); err != nil { + t.Fatal(err) + } +} + +// chtmpdir changes the working directory to a new temporary directory and +// provides a cleanup function. Used when PWD is read-only. +func chtmpdir(t *testing.T) func() { + oldwd, err := os.Getwd() + if err != nil { + t.Fatalf("chtmpdir: %v", err) + } + d, err := ioutil.TempDir("", "test") + if err != nil { + t.Fatalf("chtmpdir: %v", err) + } + if err := os.Chdir(d); err != nil { + t.Fatalf("chtmpdir: %v", err) + } + return func() { + if err := os.Chdir(oldwd); err != nil { + t.Fatalf("chtmpdir: %v", err) + } + os.RemoveAll(d) + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go new file mode 100644 index 0000000..01f6a48 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -0,0 +1,476 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// NetBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "syscall" + "unsafe" +) + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) { + var olen uintptr + + // Get a list of all sysctl nodes below the given MIB by performing + // a sysctl for the given MIB with CTL_QUERY appended. + mib = append(mib, CTL_QUERY) + qnode := Sysctlnode{Flags: SYSCTL_VERS_1} + qp := (*byte)(unsafe.Pointer(&qnode)) + sz := unsafe.Sizeof(qnode) + if err = sysctl(mib, nil, &olen, qp, sz); err != nil { + return nil, err + } + + // Now that we know the size, get the actual nodes. + nodes = make([]Sysctlnode, olen/sz) + np := (*byte)(unsafe.Pointer(&nodes[0])) + if err = sysctl(mib, np, &olen, qp, sz); err != nil { + return nil, err + } + + return nodes, nil +} + +func nametomib(name string) (mib []_C_int, err error) { + + // Split name into components. + var parts []string + last := 0 + for i := 0; i < len(name); i++ { + if name[i] == '.' { + parts = append(parts, name[last:i]) + last = i + 1 + } + } + parts = append(parts, name[last:]) + + // Discover the nodes and construct the MIB OID. + for partno, part := range parts { + nodes, err := sysctlNodes(mib) + if err != nil { + return nil, err + } + for _, node := range nodes { + n := make([]byte, 0) + for i := range node.Name { + if node.Name[i] != 0 { + n = append(n, byte(node.Name[i])) + } + } + if string(n) == part { + mib = append(mib, _C_int(node.Num)) + break + } + } + if len(mib) != partno+1 { + return nil, EINVAL + } + } + + return mib, nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sysnb pipe() (fd1 int, fd2 int, err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +//sys getdents(fd int, buf []byte) (n int, err error) +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + return getdents(fd, buf) +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + */ +// ____semctl13 +// __clone +// __fhopen40 +// __fhstat40 +// __fhstatvfs140 +// __fstat30 +// __getcwd +// __getfh30 +// __getlogin +// __lstat30 +// __mount50 +// __msgctl13 +// __msync13 +// __ntp_gettime30 +// __posix_chown +// __posix_fadvise50 +// __posix_fchown +// __posix_lchown +// __posix_rename +// __setlogin +// __shmctl13 +// __sigaction_sigtramp +// __sigaltstack14 +// __sigpending14 +// __sigprocmask14 +// __sigsuspend14 +// __sigtimedwait +// __stat30 +// __syscall +// __vfork14 +// _ksem_close +// _ksem_destroy +// _ksem_getvalue +// _ksem_init +// _ksem_open +// _ksem_post +// _ksem_trywait +// _ksem_unlink +// _ksem_wait +// _lwp_continue +// _lwp_create +// _lwp_ctl +// _lwp_detach +// _lwp_exit +// _lwp_getname +// _lwp_getprivate +// _lwp_kill +// _lwp_park +// _lwp_self +// _lwp_setname +// _lwp_setprivate +// _lwp_suspend +// _lwp_unpark +// _lwp_unpark_all +// _lwp_wait +// _lwp_wakeup +// _pset_bind +// _sched_getaffinity +// _sched_getparam +// _sched_setaffinity +// _sched_setparam +// acct +// aio_cancel +// aio_error +// aio_fsync +// aio_read +// aio_return +// aio_suspend +// aio_write +// break +// clock_getres +// clock_gettime +// clock_settime +// compat_09_ogetdomainname +// compat_09_osetdomainname +// compat_09_ouname +// compat_10_omsgsys +// compat_10_osemsys +// compat_10_oshmsys +// compat_12_fstat12 +// compat_12_getdirentries +// compat_12_lstat12 +// compat_12_msync +// compat_12_oreboot +// compat_12_oswapon +// compat_12_stat12 +// compat_13_sigaction13 +// compat_13_sigaltstack13 +// compat_13_sigpending13 +// compat_13_sigprocmask13 +// compat_13_sigreturn13 +// compat_13_sigsuspend13 +// compat_14___semctl +// compat_14_msgctl +// compat_14_shmctl +// compat_16___sigaction14 +// compat_16___sigreturn14 +// compat_20_fhstatfs +// compat_20_fstatfs +// compat_20_getfsstat +// compat_20_statfs +// compat_30___fhstat30 +// compat_30___fstat13 +// compat_30___lstat13 +// compat_30___stat13 +// compat_30_fhopen +// compat_30_fhstat +// compat_30_fhstatvfs1 +// compat_30_getdents +// compat_30_getfh +// compat_30_ntp_gettime +// compat_30_socket +// compat_40_mount +// compat_43_fstat43 +// compat_43_lstat43 +// compat_43_oaccept +// compat_43_ocreat +// compat_43_oftruncate +// compat_43_ogetdirentries +// compat_43_ogetdtablesize +// compat_43_ogethostid +// compat_43_ogethostname +// compat_43_ogetkerninfo +// compat_43_ogetpagesize +// compat_43_ogetpeername +// compat_43_ogetrlimit +// compat_43_ogetsockname +// compat_43_okillpg +// compat_43_olseek +// compat_43_ommap +// compat_43_oquota +// compat_43_orecv +// compat_43_orecvfrom +// compat_43_orecvmsg +// compat_43_osend +// compat_43_osendmsg +// compat_43_osethostid +// compat_43_osethostname +// compat_43_osetrlimit +// compat_43_osigblock +// compat_43_osigsetmask +// compat_43_osigstack +// compat_43_osigvec +// compat_43_otruncate +// compat_43_owait +// compat_43_stat43 +// execve +// extattr_delete_fd +// extattr_delete_file +// extattr_delete_link +// extattr_get_fd +// extattr_get_file +// extattr_get_link +// extattr_list_fd +// extattr_list_file +// extattr_list_link +// extattr_set_fd +// extattr_set_file +// extattr_set_link +// extattrctl +// fchroot +// fdatasync +// fgetxattr +// fktrace +// flistxattr +// fork +// fremovexattr +// fsetxattr +// fstatvfs1 +// fsync_range +// getcontext +// getitimer +// getvfsstat +// getxattr +// ioctl +// ktrace +// lchflags +// lchmod +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// lgetxattr +// lio_listio +// listxattr +// llistxattr +// lremovexattr +// lseek +// lsetxattr +// lutimes +// madvise +// mincore +// minherit +// modctl +// mq_close +// mq_getattr +// mq_notify +// mq_open +// mq_receive +// mq_send +// mq_setattr +// mq_timedreceive +// mq_timedsend +// mq_unlink +// mremap +// msgget +// msgrcv +// msgsnd +// nfssvc +// ntp_adjtime +// pmc_control +// pmc_get_info +// poll +// pollts +// preadv +// profil +// pselect +// pset_assign +// pset_create +// pset_destroy +// ptrace +// pwritev +// quotactl +// rasctl +// readv +// reboot +// removexattr +// sa_enable +// sa_preempt +// sa_register +// sa_setconcurrency +// sa_stacks +// sa_yield +// sbrk +// sched_yield +// semconfig +// semget +// semop +// setcontext +// setitimer +// setxattr +// shmat +// shmdt +// shmget +// sstk +// statvfs1 +// swapctl +// sysarch +// syscall +// timer_create +// timer_delete +// timer_getoverrun +// timer_gettime +// timer_settime +// undelete +// utrace +// uuidgen +// vadvise +// vfork +// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go new file mode 100644 index 0000000..afaca09 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go @@ -0,0 +1,42 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,netbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int64(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go new file mode 100644 index 0000000..a6ff04c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go @@ -0,0 +1,42 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,netbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int64(nsec / 1e9) + ts.Nsec = int64(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go new file mode 100644 index 0000000..68a6969 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go @@ -0,0 +1,42 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,netbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int64(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_no_getwd.go b/vendor/golang.org/x/sys/unix/syscall_no_getwd.go new file mode 100644 index 0000000..530792e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_no_getwd.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build dragonfly freebsd netbsd openbsd + +package unix + +const ImplementsGetwd = false + +func Getwd() (string, error) { return "", ENOTSUP } diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go new file mode 100644 index 0000000..c0d2b6c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -0,0 +1,287 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// OpenBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "syscall" + "unsafe" +) + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 + raw RawSockaddrDatalink +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func nametomib(name string) (mib []_C_int, err error) { + + // Perform lookup via a binary search + left := 0 + right := len(sysctlMib) - 1 + for { + idx := left + (right-left)/2 + switch { + case name == sysctlMib[idx].ctlname: + return sysctlMib[idx].ctloid, nil + case name > sysctlMib[idx].ctlname: + left = idx + 1 + default: + right = idx - 1 + } + if left > right { + break + } + } + return nil, EINVAL +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sysnb pipe(p *[2]_C_int) (err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys getdents(fd int, buf []byte) (n int, err error) +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + return getdents(fd, buf) +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + */ +// __getcwd +// __semctl +// __syscall +// __sysctl +// adjfreq +// break +// clock_getres +// clock_gettime +// clock_settime +// closefrom +// execve +// faccessat +// fchmodat +// fchownat +// fcntl +// fhopen +// fhstat +// fhstatfs +// fork +// fstatat +// futimens +// getfh +// getgid +// getitimer +// getlogin +// getresgid +// getresuid +// getrtable +// getthrid +// ioctl +// ktrace +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// linkat +// mincore +// minherit +// mkdirat +// mkfifoat +// mknodat +// mount +// mquery +// msgctl +// msgget +// msgrcv +// msgsnd +// nfssvc +// nnpfspioctl +// openat +// poll +// preadv +// profil +// pwritev +// quotactl +// readlinkat +// readv +// reboot +// renameat +// rfork +// sched_yield +// semget +// semop +// setgroups +// setitimer +// setrtable +// setsockopt +// shmat +// shmctl +// shmdt +// shmget +// sigaction +// sigaltstack +// sigpending +// sigprocmask +// sigreturn +// sigsuspend +// symlinkat +// sysarch +// syscall +// threxit +// thrsigdivert +// thrsleep +// thrwakeup +// unlinkat +// utimensat +// vfork +// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go new file mode 100644 index 0000000..a66ddc5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go @@ -0,0 +1,42 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,openbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = int64(nsec / 1e9) + ts.Nsec = int32(nsec % 1e9) + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int64(nsec / 1e9) + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go new file mode 100644 index 0000000..0776c1f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go @@ -0,0 +1,42 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,openbsd + +package unix + +func Getpagesize() int { return 4096 } + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = nsec % 1e9 / 1e3 + tv.Sec = nsec / 1e9 + return +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go new file mode 100644 index 0000000..4b8ddab --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -0,0 +1,715 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Solaris system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_solaris.go or syscall_unix.go. + +package unix + +import ( + "sync/atomic" + "syscall" + "unsafe" +) + +// Implemented in runtime/syscall_solaris.go. +type syscallFunc uintptr + +func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) + +type SockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 + raw RawSockaddrDatalink +} + +func clen(n []byte) int { + for i := 0; i < len(n); i++ { + if n[i] == 0 { + return i + } + } + return len(n) +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + reclen, ok := direntReclen(buf) + if !ok { + return 0, false + } + return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true +} + +//sysnb pipe(p *[2]_C_int) (n int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + n, err := pipe(&pp) + if n != 0 { + return err + } + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return nil +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(&rsa) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + // Getcwd will return an error if it failed for any reason. + _, err = Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + // Check for error and sanity check group count. Newer versions of + // Solaris allow up to 1024 (NGROUPS_MAX). + if n < 0 || n > 1024 { + if err != nil { + return nil, err + } + return nil, EINVAL + } else if n == 0 { + return nil, nil + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if n == -1 { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // TODO(rsc): Can we use a single global basep for all calls? + return Getdents(fd, buf, new(uintptr)) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) { + var status _C_int + rpid, err := wait4(int32(pid), &status, options, rusage) + wpid := int(rpid) + if wpid == -1 { + return wpid, err + } + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return wpid, nil +} + +//sys gethostname(buf []byte) (n int, err error) + +func Gethostname() (name string, err error) { + var buf [MaxHostNameLen]byte + n, err := gethostname(buf[:]) + if n != 0 { + return "", err + } + n = clen(buf[:]) + if n < 1 { + return "", EFAULT + } + return string(buf[:n]), nil +} + +//sys utimes(path string, times *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) (err error) { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0) + if e1 != 0 { + return e1 + } + return nil +} + +//sys futimesat(fildes int, path *byte, times *[2]Timeval) (err error) + +func Futimesat(dirfd int, path string, tv []Timeval) error { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + if tv == nil { + return futimesat(dirfd, pathp, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +// Solaris doesn't have an futimes function because it allows NULL to be +// specified as the path for futimesat. However, Go doesn't like +// NULL-style string interfaces, so this simple wrapper is provided. +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimesat(fd, nil, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + // Assume path ends at NUL. + // This is not technically the Solaris semantics for + // abstract Unix domain sockets -- they are supposed + // to be uninterpreted fixed-size binary blobs -- but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if nfd == -1 { + return + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrightslen = int32(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); n == -1 { + return + } + oobn = int(msg.Accrightslen) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrightslen = int32(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys acct(path *byte) (err error) + +func Acct(path string) (err error) { + if len(path) == 0 { + // Assume caller wants to disable accounting. + return acct(nil) + } + + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + return acct(pathp) +} + +/* + * Expose the ioctl function + */ + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +func IoctlSetInt(fd int, req uint, value int) (err error) { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermio(fd int, req uint, value *Termio) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermio(fd int, req uint) (*Termio, error) { + var value Termio + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Creat(path string, mode uint32) (fd int, err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Fdatasync(fd int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) +//sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) +//sysnb Getgid() (gid int) +//sysnb Getpid() (pid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgid int, err error) +//sys Geteuid() (euid int) +//sys Getegid() (egid int) +//sys Getppid() (ppid int) +//sys Getpriority(which int, who int) (n int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Madvise(b []byte, advice int) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Setuid(uid int) (err error) +//sys Shutdown(s int, how int) (err error) = libsocket.shutdown +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statvfs(path string, vfsstat *Statvfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sys Truncate(path string, length int64) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = libc.umount +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_bind +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto +//sys socket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair +//sys write(fd int, p []byte) (n int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.__xnet_getsockopt +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys sysconf(name int) (n int64, err error) + +// pageSize caches the value of Getpagesize, since it can't change +// once the system is booted. +var pageSize int64 // accessed atomically + +func Getpagesize() int { + n := atomic.LoadInt64(&pageSize) + if n == 0 { + n, _ = sysconf(_SC_PAGESIZE) + atomic.StoreInt64(&pageSize, n) + } + return int(n) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go new file mode 100644 index 0000000..5aff62c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go @@ -0,0 +1,35 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,solaris + +package unix + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = nsec % 1e9 / 1e3 + tv.Sec = int64(nsec / 1e9) + return +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + // TODO(aram): implement this, see issue 5847. + panic("unimplemented") +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_test.go b/vendor/golang.org/x/sys/unix/syscall_solaris_test.go new file mode 100644 index 0000000..d3e7d2b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris_test.go @@ -0,0 +1,34 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package unix_test + +import ( + "os/exec" + "testing" + + "golang.org/x/sys/unix" +) + +func TestStatvfs(t *testing.T) { + if err := unix.Statvfs("", nil); err == nil { + t.Fatal(`Statvfs("") expected failure`) + } + + statvfs := unix.Statvfs_t{} + if err := unix.Statvfs("/", &statvfs); err != nil { + t.Errorf(`Statvfs("/") failed: %v`, err) + } + + if t.Failed() { + mount, err := exec.Command("mount").CombinedOutput() + if err != nil { + t.Logf("mount: %v\n%s", err, mount) + } else { + t.Logf("mount: %s", mount) + } + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_test.go b/vendor/golang.org/x/sys/unix/syscall_test.go new file mode 100644 index 0000000..95eac92 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_test.go @@ -0,0 +1,50 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func testSetGetenv(t *testing.T, key, value string) { + err := unix.Setenv(key, value) + if err != nil { + t.Fatalf("Setenv failed to set %q: %v", value, err) + } + newvalue, found := unix.Getenv(key) + if !found { + t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) + } + if newvalue != value { + t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) + } +} + +func TestEnv(t *testing.T) { + testSetGetenv(t, "TESTENV", "AVALUE") + // make sure TESTENV gets set to "", not deleted + testSetGetenv(t, "TESTENV", "") +} + +func TestItoa(t *testing.T) { + // Make most negative integer: 0x8000... + i := 1 + for i<<1 != 0 { + i <<= 1 + } + if i >= 0 { + t.Fatal("bad math") + } + s := unix.Itoa(i) + f := fmt.Sprint(i) + if s != f { + t.Fatalf("itoa(%d) = %s, want %s", i, s, f) + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go new file mode 100644 index 0000000..3ed8a91 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -0,0 +1,293 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +import ( + "runtime" + "sync" + "syscall" + "unsafe" +) + +var ( + Stdin = 0 + Stdout = 1 + Stderr = 2 +) + +const ( + darwin64Bit = runtime.GOOS == "darwin" && sizeofPtr == 8 + dragonfly64Bit = runtime.GOOS == "dragonfly" && sizeofPtr == 8 + netbsd32Bit = runtime.GOOS == "netbsd" && sizeofPtr == 4 + solaris64Bit = runtime.GOOS == "solaris" && sizeofPtr == 8 +) + +// Do the interface allocations only once for common +// Errno values. +var ( + errEAGAIN error = syscall.EAGAIN + errEINVAL error = syscall.EINVAL + errENOENT error = syscall.ENOENT +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return nil + case EAGAIN: + return errEAGAIN + case EINVAL: + return errEINVAL + case ENOENT: + return errENOENT + } + return e +} + +// Mmap manager, for use by operating system-specific implementations. + +type mmapper struct { + sync.Mutex + active map[*byte][]byte // active mappings; key is last byte in mapping + mmap func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error) + munmap func(addr uintptr, length uintptr) error +} + +func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + if length <= 0 { + return nil, EINVAL + } + + // Map the requested memory. + addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset) + if errno != nil { + return nil, errno + } + + // Slice memory layout + var sl = struct { + addr uintptr + len int + cap int + }{addr, length, length} + + // Use unsafe to turn sl into a []byte. + b := *(*[]byte)(unsafe.Pointer(&sl)) + + // Register mapping in m and return it. + p := &b[cap(b)-1] + m.Lock() + defer m.Unlock() + m.active[p] = b + return b, nil +} + +func (m *mmapper) Munmap(data []byte) (err error) { + if len(data) == 0 || len(data) != cap(data) { + return EINVAL + } + + // Find the base of the mapping. + p := &data[cap(data)-1] + m.Lock() + defer m.Unlock() + b := m.active[p] + if b == nil || &b[0] != &data[0] { + return EINVAL + } + + // Unmap the memory and update m. + if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil { + return errno + } + delete(m.active, p) + return nil +} + +func Read(fd int, p []byte) (n int, err error) { + n, err = read(fd, p) + if raceenabled { + if n > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), n) + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } + } + return +} + +func Write(fd int, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = write(fd, p) + if raceenabled && n > 0 { + raceReadRange(unsafe.Pointer(&p[0]), n) + } + return +} + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs +} + +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +type SockaddrUnix struct { + Name string + raw RawSockaddrUnix +} + +func Bind(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func Getpeername(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getpeername(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(&rsa) +} + +func GetsockoptInt(fd, level, opt int) (value int, err error) { + var n int32 + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return int(n), err +} + +func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil { + return + } + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { + ptr, n, err := to.sockaddr() + if err != nil { + return err + } + return sendto(fd, p, flags, ptr, n) +} + +func SetsockoptByte(fd, level, opt int, value byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1) +} + +func SetsockoptInt(fd, level, opt int, value int) (err error) { + var n = int32(value) + return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4) +} + +func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4) +} + +func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq) +} + +func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq) +} + +func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error { + return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter) +} + +func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger) +} + +func SetsockoptString(fd, level, opt int, s string) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&[]byte(s)[0]), uintptr(len(s))) +} + +func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) +} + +func Socket(domain, typ, proto int) (fd int, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return -1, EAFNOSUPPORT + } + fd, err = socket(domain, typ, proto) + return +} + +func Socketpair(domain, typ, proto int) (fd [2]int, err error) { + var fdx [2]int32 + err = socketpair(domain, typ, proto, &fdx) + if err == nil { + fd[0] = int(fdx[0]) + fd[1] = int(fdx[1]) + } + return +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +var ioSync int64 + +func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) } + +func SetNonblock(fd int, nonblocking bool) (err error) { + flag, err := fcntl(fd, F_GETFL, 0) + if err != nil { + return err + } + if nonblocking { + flag |= O_NONBLOCK + } else { + flag &= ^O_NONBLOCK + } + _, err = fcntl(fd, F_SETFL, flag) + return err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go new file mode 100644 index 0000000..4cb8e8e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go @@ -0,0 +1,15 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris +// +build !gccgo + +package unix + +import "syscall" + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_test.go b/vendor/golang.org/x/sys/unix/syscall_unix_test.go new file mode 100644 index 0000000..394b350 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix_test.go @@ -0,0 +1,345 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix_test + +import ( + "flag" + "fmt" + "io/ioutil" + "net" + "os" + "os/exec" + "path/filepath" + "runtime" + "testing" + "time" + + "golang.org/x/sys/unix" +) + +// Tests that below functions, structures and constants are consistent +// on all Unix-like systems. +func _() { + // program scheduling priority functions and constants + var ( + _ func(int, int, int) error = unix.Setpriority + _ func(int, int) (int, error) = unix.Getpriority + ) + const ( + _ int = unix.PRIO_USER + _ int = unix.PRIO_PROCESS + _ int = unix.PRIO_PGRP + ) + + // termios constants + const ( + _ int = unix.TCIFLUSH + _ int = unix.TCIOFLUSH + _ int = unix.TCOFLUSH + ) + + // fcntl file locking structure and constants + var ( + _ = unix.Flock_t{ + Type: int16(0), + Whence: int16(0), + Start: int64(0), + Len: int64(0), + Pid: int32(0), + } + ) + const ( + _ = unix.F_GETLK + _ = unix.F_SETLK + _ = unix.F_SETLKW + ) +} + +// TestFcntlFlock tests whether the file locking structure matches +// the calling convention of each kernel. +func TestFcntlFlock(t *testing.T) { + name := filepath.Join(os.TempDir(), "TestFcntlFlock") + fd, err := unix.Open(name, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0) + if err != nil { + t.Fatalf("Open failed: %v", err) + } + defer unix.Unlink(name) + defer unix.Close(fd) + flock := unix.Flock_t{ + Type: unix.F_RDLCK, + Start: 0, Len: 0, Whence: 1, + } + if err := unix.FcntlFlock(uintptr(fd), unix.F_GETLK, &flock); err != nil { + t.Fatalf("FcntlFlock failed: %v", err) + } +} + +// TestPassFD tests passing a file descriptor over a Unix socket. +// +// This test involved both a parent and child process. The parent +// process is invoked as a normal test, with "go test", which then +// runs the child process by running the current test binary with args +// "-test.run=^TestPassFD$" and an environment variable used to signal +// that the test should become the child process instead. +func TestPassFD(t *testing.T) { + if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { + passFDChild() + return + } + + tempDir, err := ioutil.TempDir("", "TestPassFD") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tempDir) + + fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0) + if err != nil { + t.Fatalf("Socketpair: %v", err) + } + defer unix.Close(fds[0]) + defer unix.Close(fds[1]) + writeFile := os.NewFile(uintptr(fds[0]), "child-writes") + readFile := os.NewFile(uintptr(fds[1]), "parent-reads") + defer writeFile.Close() + defer readFile.Close() + + cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", tempDir) + cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"} + if lp := os.Getenv("LD_LIBRARY_PATH"); lp != "" { + cmd.Env = append(cmd.Env, "LD_LIBRARY_PATH="+lp) + } + cmd.ExtraFiles = []*os.File{writeFile} + + out, err := cmd.CombinedOutput() + if len(out) > 0 || err != nil { + t.Fatalf("child process: %q, %v", out, err) + } + + c, err := net.FileConn(readFile) + if err != nil { + t.Fatalf("FileConn: %v", err) + } + defer c.Close() + + uc, ok := c.(*net.UnixConn) + if !ok { + t.Fatalf("unexpected FileConn type; expected UnixConn, got %T", c) + } + + buf := make([]byte, 32) // expect 1 byte + oob := make([]byte, 32) // expect 24 bytes + closeUnix := time.AfterFunc(5*time.Second, func() { + t.Logf("timeout reading from unix socket") + uc.Close() + }) + _, oobn, _, _, err := uc.ReadMsgUnix(buf, oob) + closeUnix.Stop() + + scms, err := unix.ParseSocketControlMessage(oob[:oobn]) + if err != nil { + t.Fatalf("ParseSocketControlMessage: %v", err) + } + if len(scms) != 1 { + t.Fatalf("expected 1 SocketControlMessage; got scms = %#v", scms) + } + scm := scms[0] + gotFds, err := unix.ParseUnixRights(&scm) + if err != nil { + t.Fatalf("unix.ParseUnixRights: %v", err) + } + if len(gotFds) != 1 { + t.Fatalf("wanted 1 fd; got %#v", gotFds) + } + + f := os.NewFile(uintptr(gotFds[0]), "fd-from-child") + defer f.Close() + + got, err := ioutil.ReadAll(f) + want := "Hello from child process!\n" + if string(got) != want { + t.Errorf("child process ReadAll: %q, %v; want %q", got, err, want) + } +} + +// passFDChild is the child process used by TestPassFD. +func passFDChild() { + defer os.Exit(0) + + // Look for our fd. It should be fd 3, but we work around an fd leak + // bug here (http://golang.org/issue/2603) to let it be elsewhere. + var uc *net.UnixConn + for fd := uintptr(3); fd <= 10; fd++ { + f := os.NewFile(fd, "unix-conn") + var ok bool + netc, _ := net.FileConn(f) + uc, ok = netc.(*net.UnixConn) + if ok { + break + } + } + if uc == nil { + fmt.Println("failed to find unix fd") + return + } + + // Make a file f to send to our parent process on uc. + // We make it in tempDir, which our parent will clean up. + flag.Parse() + tempDir := flag.Arg(0) + f, err := ioutil.TempFile(tempDir, "") + if err != nil { + fmt.Printf("TempFile: %v", err) + return + } + + f.Write([]byte("Hello from child process!\n")) + f.Seek(0, 0) + + rights := unix.UnixRights(int(f.Fd())) + dummyByte := []byte("x") + n, oobn, err := uc.WriteMsgUnix(dummyByte, rights, nil) + if err != nil { + fmt.Printf("WriteMsgUnix: %v", err) + return + } + if n != 1 || oobn != len(rights) { + fmt.Printf("WriteMsgUnix = %d, %d; want 1, %d", n, oobn, len(rights)) + return + } +} + +// TestUnixRightsRoundtrip tests that UnixRights, ParseSocketControlMessage, +// and ParseUnixRights are able to successfully round-trip lists of file descriptors. +func TestUnixRightsRoundtrip(t *testing.T) { + testCases := [...][][]int{ + {{42}}, + {{1, 2}}, + {{3, 4, 5}}, + {{}}, + {{1, 2}, {3, 4, 5}, {}, {7}}, + } + for _, testCase := range testCases { + b := []byte{} + var n int + for _, fds := range testCase { + // Last assignment to n wins + n = len(b) + unix.CmsgLen(4*len(fds)) + b = append(b, unix.UnixRights(fds...)...) + } + // Truncate b + b = b[:n] + + scms, err := unix.ParseSocketControlMessage(b) + if err != nil { + t.Fatalf("ParseSocketControlMessage: %v", err) + } + if len(scms) != len(testCase) { + t.Fatalf("expected %v SocketControlMessage; got scms = %#v", len(testCase), scms) + } + for i, scm := range scms { + gotFds, err := unix.ParseUnixRights(&scm) + if err != nil { + t.Fatalf("ParseUnixRights: %v", err) + } + wantFds := testCase[i] + if len(gotFds) != len(wantFds) { + t.Fatalf("expected %v fds, got %#v", len(wantFds), gotFds) + } + for j, fd := range gotFds { + if fd != wantFds[j] { + t.Fatalf("expected fd %v, got %v", wantFds[j], fd) + } + } + } + } +} + +func TestRlimit(t *testing.T) { + var rlimit, zero unix.Rlimit + err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit) + if err != nil { + t.Fatalf("Getrlimit: save failed: %v", err) + } + if zero == rlimit { + t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit) + } + set := rlimit + set.Cur = set.Max - 1 + err = unix.Setrlimit(unix.RLIMIT_NOFILE, &set) + if err != nil { + t.Fatalf("Setrlimit: set failed: %#v %v", set, err) + } + var get unix.Rlimit + err = unix.Getrlimit(unix.RLIMIT_NOFILE, &get) + if err != nil { + t.Fatalf("Getrlimit: get failed: %v", err) + } + set = rlimit + set.Cur = set.Max - 1 + if set != get { + // Seems like Darwin requires some privilege to + // increase the soft limit of rlimit sandbox, though + // Setrlimit never reports an error. + switch runtime.GOOS { + case "darwin": + default: + t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get) + } + } + err = unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit) + if err != nil { + t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err) + } +} + +func TestSeekFailure(t *testing.T) { + _, err := unix.Seek(-1, 0, 0) + if err == nil { + t.Fatalf("Seek(-1, 0, 0) did not fail") + } + str := err.Error() // used to crash on Linux + t.Logf("Seek: %v", str) + if str == "" { + t.Fatalf("Seek(-1, 0, 0) return error with empty message") + } +} + +func TestDup(t *testing.T) { + file, err := ioutil.TempFile("", "TestDup") + if err != nil { + t.Fatalf("Tempfile failed: %v", err) + } + defer os.Remove(file.Name()) + defer file.Close() + f := int(file.Fd()) + + newFd, err := unix.Dup(f) + if err != nil { + t.Fatalf("Dup: %v", err) + } + + err = unix.Dup2(newFd, newFd+1) + if err != nil { + t.Fatalf("Dup2: %v", err) + } + + b1 := []byte("Test123") + b2 := make([]byte, 7) + _, err = unix.Write(newFd+1, b1) + if err != nil { + t.Fatalf("Write to dup2 fd failed: %v", err) + } + _, err = unix.Seek(f, 0, 0) + _, err = unix.Read(f, b2) + if err != nil { + t.Fatalf("Read back failed: %v", err) + } + if string(b1) != string(b2) { + t.Errorf("Dup: stdout write not in file, expected %v, got %v", string(b1), string(b2)) + } +} diff --git a/vendor/golang.org/x/sys/unix/types_darwin.go b/vendor/golang.org/x/sys/unix/types_darwin.go new file mode 100644 index 0000000..a350817 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_darwin.go @@ -0,0 +1,250 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define __DARWIN_UNIX03 0 +#define KERNEL +#define _DARWIN_USE_64_BIT_INODE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +type Timeval32 C.struct_timeval32 + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +type Stat_t C.struct_stat64 + +type Statfs_t C.struct_statfs64 + +type Flock_t C.struct_flock + +type Fstore_t C.struct_fstore + +type Radvisory_t C.struct_radvisory + +type Fbootstraptransfer_t C.struct_fbootstraptransfer + +type Log2phys_t C.struct_log2phys + +type Fsid C.struct_fsid + +type Dirent C.struct_dirent + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet4Pktinfo C.struct_in_pktinfo + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr + SizeofIfmaMsghdr2 = C.sizeof_struct_ifma_msghdr2 + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfmaMsghdr C.struct_ifma_msghdr + +type IfmaMsghdr2 C.struct_ifma_msghdr2 + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +// Terminal handling + +type Termios C.struct_termios + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) diff --git a/vendor/golang.org/x/sys/unix/types_dragonfly.go b/vendor/golang.org/x/sys/unix/types_dragonfly.go new file mode 100644 index 0000000..a818704 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_dragonfly.go @@ -0,0 +1,242 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.struct_fsid + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfmaMsghdr C.struct_ifma_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +// Terminal handling + +type Termios C.struct_termios diff --git a/vendor/golang.org/x/sys/unix/types_freebsd.go b/vendor/golang.org/x/sys/unix/types_freebsd.go new file mode 100644 index 0000000..f7478a3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_freebsd.go @@ -0,0 +1,361 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +// This structure is a duplicate of stat on FreeBSD 8-STABLE. +// See /usr/include/sys/stat.h. +struct stat8 { +#undef st_atimespec st_atim +#undef st_mtimespec st_mtim +#undef st_ctimespec st_ctim +#undef st_birthtimespec st_birthtim + __dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + __dev_t st_rdev; +#if __BSD_VISIBLE + struct timespec st_atimespec; + struct timespec st_mtimespec; + struct timespec st_ctimespec; +#else + time_t st_atime; + long __st_atimensec; + time_t st_mtime; + long __st_mtimensec; + time_t st_ctime; + long __st_ctimensec; +#endif + off_t st_size; + blkcnt_t st_blocks; + blksize_t st_blksize; + fflags_t st_flags; + __uint32_t st_gen; + __int32_t st_lspare; +#if __BSD_VISIBLE + struct timespec st_birthtimespec; + unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec)); + unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec)); +#else + time_t st_birthtime; + long st_birthtimensec; + unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec)); + unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec)); +#endif +}; + +// This structure is a duplicate of if_data on FreeBSD 8-STABLE. +// See /usr/include/net/if.h. +struct if_data8 { + u_char ifi_type; + u_char ifi_physical; + u_char ifi_addrlen; + u_char ifi_hdrlen; + u_char ifi_link_state; + u_char ifi_spare_char1; + u_char ifi_spare_char2; + u_char ifi_datalen; + u_long ifi_mtu; + u_long ifi_metric; + u_long ifi_baudrate; + u_long ifi_ipackets; + u_long ifi_ierrors; + u_long ifi_opackets; + u_long ifi_oerrors; + u_long ifi_collisions; + u_long ifi_ibytes; + u_long ifi_obytes; + u_long ifi_imcasts; + u_long ifi_omcasts; + u_long ifi_iqdrops; + u_long ifi_noproto; + u_long ifi_hwassist; +// FIXME: these are now unions, so maybe need to change definitions? +#undef ifi_epoch + time_t ifi_epoch; +#undef ifi_lastchange + struct timeval ifi_lastchange; +}; + +// This structure is a duplicate of if_msghdr on FreeBSD 8-STABLE. +// See /usr/include/net/if.h. +struct if_msghdr8 { + u_short ifm_msglen; + u_char ifm_version; + u_char ifm_type; + int ifm_addrs; + int ifm_flags; + u_short ifm_index; + struct if_data8 ifm_data; +}; +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat8 + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.struct_fsid + +// Advice to Fadvise + +const ( + FADV_NORMAL = C.POSIX_FADV_NORMAL + FADV_RANDOM = C.POSIX_FADV_RANDOM + FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL + FADV_WILLNEED = C.POSIX_FADV_WILLNEED + FADV_DONTNEED = C.POSIX_FADV_DONTNEED + FADV_NOREUSE = C.POSIX_FADV_NOREUSE +) + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPMreqn C.struct_ip_mreqn + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPMreqn = C.sizeof_struct_ip_mreqn + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + sizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfMsghdr = C.sizeof_struct_if_msghdr8 + sizeofIfData = C.sizeof_struct_if_data + SizeofIfData = C.sizeof_struct_if_data8 + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type ifMsghdr C.struct_if_msghdr + +type IfMsghdr C.struct_if_msghdr8 + +type ifData C.struct_if_data + +type IfData C.struct_if_data8 + +type IfaMsghdr C.struct_ifa_msghdr + +type IfmaMsghdr C.struct_ifma_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfZbuf = C.sizeof_struct_bpf_zbuf + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr + SizeofBpfZbufHeader = C.sizeof_struct_bpf_zbuf_header +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfZbuf C.struct_bpf_zbuf + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +type BpfZbufHeader C.struct_bpf_zbuf_header + +// Terminal handling + +type Termios C.struct_termios + +// Capabilities + +type CapRights C.struct_cap_rights diff --git a/vendor/golang.org/x/sys/unix/types_netbsd.go b/vendor/golang.org/x/sys/unix/types_netbsd.go new file mode 100644 index 0000000..7cfdb9c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_netbsd.go @@ -0,0 +1,232 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.fsid_t + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +type Mclpool C.struct_mclpool + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +type BpfTimeval C.struct_bpf_timeval + +// Terminal handling + +type Termios C.struct_termios + +// Sysctl + +type Sysctlnode C.struct_sysctlnode diff --git a/vendor/golang.org/x/sys/unix/types_openbsd.go b/vendor/golang.org/x/sys/unix/types_openbsd.go new file mode 100644 index 0000000..6c7c227 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_openbsd.go @@ -0,0 +1,244 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.fsid_t + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +type Mclpool C.struct_mclpool + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +type BpfTimeval C.struct_bpf_timeval + +// Terminal handling + +type Termios C.struct_termios diff --git a/vendor/golang.org/x/sys/unix/types_solaris.go b/vendor/golang.org/x/sys/unix/types_solaris.go new file mode 100644 index 0000000..393c7f0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_solaris.go @@ -0,0 +1,269 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +// These defines ensure that builds done on newer versions of Solaris are +// backwards-compatible with older versions of Solaris and +// OpenSolaris-based derivatives. +#define __USE_SUNOS_SOCKETS__ // msghdr +#define __USE_LEGACY_PROTOTYPES__ // iovec +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong + PathMax = C.PATH_MAX + MaxHostNameLen = C.MAXHOSTNAMELEN +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +type Timeval32 C.struct_timeval32 + +type Tms C.struct_tms + +type Utimbuf C.struct_utimbuf + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +// Filesystems + +type _Fsblkcnt_t C.fsblkcnt_t + +type Statvfs_t C.struct_statvfs + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Select + +type FdSet C.fd_set + +// Misc + +type Utsname C.struct_utsname + +type Ustat_t C.struct_ustat + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_EACCESS = C.AT_EACCESS +) + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfTimeval C.struct_bpf_timeval + +type BpfHdr C.struct_bpf_hdr + +// sysconf information + +const _SC_PAGESIZE = C._SC_PAGESIZE + +// Terminal handling + +type Termios C.struct_termios + +type Termio C.struct_termio + +type Winsize C.struct_winsize diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go new file mode 100644 index 0000000..8e63888 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go @@ -0,0 +1,1576 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x8008427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xe + EVFILT_THREADMARKER = 0xe + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_ADDFILESIGS = 0x3d + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NOFLSH = 0x80000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc0086924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6981 + SIOCRSLVMULTI = 0xc008693b + SIOCSDRVSPEC = 0x801c697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_ENABLE_ECN = 0x104 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40087458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x20 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go new file mode 100644 index 0000000..9594f93 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -0,0 +1,1576 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xe + EVFILT_THREADMARKER = 0xe + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_ADDFILESIGS = 0x3d + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NOFLSH = 0x80000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_ENABLE_ECN = 0x104 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go new file mode 100644 index 0000000..a410e88 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go @@ -0,0 +1,1293 @@ +// mkerrors.sh +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +// +build arm,darwin + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xc + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xe + EVFILT_THREADMARKER = 0xe + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_ADDFILESIGS = 0x3d + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NOFLSH = 0x80000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_ENABLE_ECN = 0x104 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go new file mode 100644 index 0000000..3189c6b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -0,0 +1,1576 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm64,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xe + EVFILT_THREADMARKER = 0xe + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_ADDFILESIGS = 0x3d + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NOFLSH = 0x80000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_ENABLE_ECN = 0x104 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go new file mode 100644 index 0000000..8f40598 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go @@ -0,0 +1,1568 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,dragonfly + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x21 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x23 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x22 + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DEFAULTBUFSIZE = 0x1000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MAX_CLONES = 0x80 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DBF = 0xf + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0x8 + EVFILT_FS = -0xa + EVFILT_MARKER = 0xf + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xa + EVFILT_TIMER = -0x7 + EVFILT_USER = -0x9 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_NODATA = 0x1000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTEXIT_LWP = 0x10000 + EXTEXIT_PROC = 0x0 + EXTEXIT_SETINT = 0x1 + EXTEXIT_SIMPLE = 0x0 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x118e72 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NPOLLING = 0x100000 + IFF_OACTIVE = 0x400 + IFF_OACTIVE_COMPAT = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_POLLING = 0x10000 + IFF_POLLING_COMPAT = 0x10000 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xf3 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SKIP = 0x39 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UNKNOWN = 0x102 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MINHLIM = 0x28 + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PKTOPTIONS = 0x34 + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_RESETLOG = 0x37 + IP_FW_X = 0x31 + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CONTROL_END = 0xb + MADV_CONTROL_START = 0xa + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_INVAL = 0xa + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SETMAP = 0xb + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_NOCORE = 0x20000 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_SIZEALIGN = 0x40000 + MAP_STACK = 0x400 + MAP_TRYFIXED = 0x10000 + MAP_VPAGETABLE = 0x2000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CMSG_CLOEXEC = 0x1000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FBLOCKING = 0x10000 + MSG_FMASK = 0xffff0000 + MSG_FNONBLOCKING = 0x20000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_SYNC = 0x800 + MSG_TRUNC = 0x10 + MSG_UNUSED09 = 0x200 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x20000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x8000000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FAPPEND = 0x100000 + O_FASYNCWRITE = 0x800000 + O_FBLOCKING = 0x40000 + O_FMASK = 0xfc0000 + O_FNONBLOCKING = 0x80000 + O_FOFFSET = 0x200000 + O_FSYNC = 0x80 + O_FSYNCWRITE = 0x400000 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0xb + RTAX_MPLS1 = 0x8 + RTAX_MPLS2 = 0x9 + RTAX_MPLS3 = 0xa + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_MPLS1 = 0x100 + RTA_MPLS2 = 0x200 + RTA_MPLS3 = 0x400 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPLSOPS = 0x1000000 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x6 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_IWCAPSEGS = 0x400 + RTV_IWMAXSEGS = 0x200 + RTV_MSL = 0x100 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCADDRT = 0x8040720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDELRT = 0x8040720b + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc0206926 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPOLLCPU = 0xc020697e + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFTSOLEN = 0xc0206980 + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFPOLLCPU = 0x8020697d + SIOCSIFTSOLEN = 0x8020697f + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_CPUHINT = 0x1030 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDSPACE = 0x100a + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_FASTKEEP = 0x80 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x20 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0x100 + TCP_MIN_WINSHIFT = 0x5 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_SIGNATURE_ENABLE = 0x10 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCISPTMASTER = 0x20007455 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VCHECKPT = 0x13 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_BCACHE_SIZE_MAX = 0x0 + VM_SWZONE_SIZE_MAX = 0x4000000000 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EASYNC = syscall.Errno(0x63) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x63) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEDIUM = syscall.Errno(0x5d) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUNUSED94 = syscall.Errno(0x5e) + EUNUSED95 = syscall.Errno(0x5f) + EUNUSED96 = syscall.Errno(0x60) + EUNUSED97 = syscall.Errno(0x61) + EUNUSED98 = syscall.Errno(0x62) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCKPT = syscall.Signal(0x21) + SIGCKPTEXIT = syscall.Signal(0x22) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "no medium found", + 94: "unknown error: 94", + 95: "unknown error: 95", + 96: "unknown error: 96", + 97: "unknown error: 97", + 98: "unknown error: 98", + 99: "unknown error: 99", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread Scheduler", + 33: "checkPoint", + 34: "checkPointExit", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go new file mode 100644 index 0000000..7b95751 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go @@ -0,0 +1,1743 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf6 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xb + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f72 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NET_RT_MAXID = 0x6 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_NORTREF = 0x2 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CONGESTION = 0x40 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "capabilities insufficient", + 94: "not permitted in capability mode", + 95: "state not recoverable", + 96: "previous owner died", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "unknown signal", + 33: "unknown signal", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go new file mode 100644 index 0000000..ac094f9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go @@ -0,0 +1,1707 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4008427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x40184280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x80104282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSETZBUF = 0x80184281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffffffffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x104 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80000 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc030698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "capabilities insufficient", + 94: "not permitted in capability mode", + 95: "state not recoverable", + 96: "previous owner died", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "unknown signal", + 33: "unknown signal", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go new file mode 100644 index 0000000..2afbe2d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go @@ -0,0 +1,1729 @@ +// mkerrors.sh +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf6 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xb + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f72 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NET_RT_MAXID = 0x6 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_NORTREF = 0x2 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CONGESTION = 0x40 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "capabilities insufficient", + 94: "not permitted in capability mode", + 95: "state not recoverable", + 96: "previous owner died", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "unknown signal", + 33: "unknown signal", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go new file mode 100644 index 0000000..a6b3b5f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -0,0 +1,2180 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80041270 + BLKBSZSET = 0x40041271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80041272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x8000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x800854db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go new file mode 100644 index 0000000..4ffc8d2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -0,0 +1,2181 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ARCH_PRCTL = 0x1e + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go new file mode 100644 index 0000000..f4b178e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -0,0 +1,2185 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80041270 + BLKBSZSET = 0x40041271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80041272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x20000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETCRUNCHREGS = 0x19 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETHBPREGS = 0x1d + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVFPREGS = 0x1b + PTRACE_GETWMMXREGS = 0x12 + PTRACE_GET_THREAD_AREA = 0x16 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETCRUNCHREGS = 0x1a + PTRACE_SETFPREGS = 0xf + PTRACE_SETHBPREGS = 0x1e + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVFPREGS = 0x1c + PTRACE_SETWMMXREGS = 0x13 + PTRACE_SET_SYSCALL = 0x17 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_DATA_ADDR = 0x10004 + PT_TEXT_ADDR = 0x10000 + PT_TEXT_END_ADDR = 0x10008 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x800854db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go new file mode 100644 index 0000000..495f13b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -0,0 +1,2170 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ESR_MAGIC = 0x45535201 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go new file mode 100644 index 0000000..59651e4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -0,0 +1,2189 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x40041270 + BLKBSZSET = 0x80041271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40041272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x21 + F_GETLK64 = 0x21 + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x22 + F_SETLK64 = 0x22 + F_SETLKW = 0x23 + F_SETLKW64 = 0x23 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x800854d5 + TUNDETACHFILTER = 0x800854d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x400854db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go new file mode 100644 index 0000000..a09bf9b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -0,0 +1,2189 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go new file mode 100644 index 0000000..72a0083 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -0,0 +1,2189 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64le,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go new file mode 100644 index 0000000..84c0e3c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -0,0 +1,2189 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mipsle,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x40041270 + BLKBSZSET = 0x80041271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40041272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x21 + F_GETLK64 = 0x21 + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x22 + F_SETLK64 = 0x22 + F_SETLKW = 0x23 + F_SETLKW64 = 0x23 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TUNATTACHFILTER = 0x800854d5 + TUNDETACHFILTER = 0x800854d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x400854db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go new file mode 100644 index 0000000..8e4606e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -0,0 +1,2243 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x17 + B110 = 0x3 + B115200 = 0x11 + B1152000 = 0x18 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x19 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x1a + B230400 = 0x12 + B2400 = 0xb + B2500000 = 0x1b + B300 = 0x7 + B3000000 = 0x1c + B3500000 = 0x1d + B38400 = 0xf + B4000000 = 0x1e + B460800 = 0x13 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x16 + B9600 = 0xd + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1f + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0xff + CBAUDEX = 0x0 + CFLUSH = 0xf + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIGNAL = 0xff + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x4000 + IBSHIFT = 0x10 + ICANON = 0x100 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x400 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x300 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x4 + ONLCR = 0x2 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x1000 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_SAO = 0x10 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x400000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x5 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4000 + XTABS = 0xc00 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 58: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go new file mode 100644 index 0000000..16ed193 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -0,0 +1,2243 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64le,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x17 + B110 = 0x3 + B115200 = 0x11 + B1152000 = 0x18 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x19 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x1a + B230400 = 0x12 + B2400 = 0xb + B2500000 = 0x1b + B300 = 0x7 + B3000000 = 0x1c + B3500000 = 0x1d + B38400 = 0xf + B4000000 = 0x1e + B460800 = 0x13 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x16 + B9600 = 0xd + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1f + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0xff + CBAUDEX = 0x0 + CFLUSH = 0xf + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIGNAL = 0xff + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x4000 + IBSHIFT = 0x10 + ICANON = 0x100 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x400 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x300 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x4 + ONLCR = 0x2 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x1000 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_SAO = 0x10 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x400000 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x5 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4000 + XTABS = 0xc00 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 58: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go new file mode 100644 index 0000000..bd385f8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -0,0 +1,2242 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build s390x,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2b + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_DISABLE_TE = 0x5010 + PTRACE_ENABLE_TE = 0x5009 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_LAST_BREAK = 0x5006 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_AREA = 0x5003 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_AREA = 0x5002 + PTRACE_PEEKUSR = 0x3 + PTRACE_PEEKUSR_AREA = 0x5000 + PTRACE_PEEK_SYSTEM_CALL = 0x5007 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_AREA = 0x5005 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_AREA = 0x5004 + PTRACE_POKEUSR = 0x6 + PTRACE_POKEUSR_AREA = 0x5001 + PTRACE_POKE_SYSTEM_CALL = 0x5008 + PTRACE_PROT = 0x15 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLEBLOCK = 0xc + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TE_ABORT_RAND = 0x5011 + PTRACE_TRACEME = 0x0 + PT_ACR0 = 0x90 + PT_ACR1 = 0x94 + PT_ACR10 = 0xb8 + PT_ACR11 = 0xbc + PT_ACR12 = 0xc0 + PT_ACR13 = 0xc4 + PT_ACR14 = 0xc8 + PT_ACR15 = 0xcc + PT_ACR2 = 0x98 + PT_ACR3 = 0x9c + PT_ACR4 = 0xa0 + PT_ACR5 = 0xa4 + PT_ACR6 = 0xa8 + PT_ACR7 = 0xac + PT_ACR8 = 0xb0 + PT_ACR9 = 0xb4 + PT_CR_10 = 0x168 + PT_CR_11 = 0x170 + PT_CR_9 = 0x160 + PT_ENDREGS = 0x1af + PT_FPC = 0xd8 + PT_FPR0 = 0xe0 + PT_FPR1 = 0xe8 + PT_FPR10 = 0x130 + PT_FPR11 = 0x138 + PT_FPR12 = 0x140 + PT_FPR13 = 0x148 + PT_FPR14 = 0x150 + PT_FPR15 = 0x158 + PT_FPR2 = 0xf0 + PT_FPR3 = 0xf8 + PT_FPR4 = 0x100 + PT_FPR5 = 0x108 + PT_FPR6 = 0x110 + PT_FPR7 = 0x118 + PT_FPR8 = 0x120 + PT_FPR9 = 0x128 + PT_GPR0 = 0x10 + PT_GPR1 = 0x18 + PT_GPR10 = 0x60 + PT_GPR11 = 0x68 + PT_GPR12 = 0x70 + PT_GPR13 = 0x78 + PT_GPR14 = 0x80 + PT_GPR15 = 0x88 + PT_GPR2 = 0x20 + PT_GPR3 = 0x28 + PT_GPR4 = 0x30 + PT_GPR5 = 0x38 + PT_GPR6 = 0x40 + PT_GPR7 = 0x48 + PT_GPR8 = 0x50 + PT_GPR9 = 0x58 + PT_IEEE_IP = 0x1a8 + PT_LASTOFF = 0x1a8 + PT_ORIGGPR2 = 0xd0 + PT_PSWADDR = 0x8 + PT_PSWMASK = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x19 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGUNUSED = syscall.Signal(0x1f) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go new file mode 100644 index 0000000..95de199 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -0,0 +1,2142 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build sparc64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + ASI_LEON_DFLUSH = 0x11 + ASI_LEON_IFLUSH = 0x10 + ASI_LEON_MMUFLUSH = 0x18 + B0 = 0x0 + B1000000 = 0x100c + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x100d + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100e + B153600 = 0x1006 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100f + B230400 = 0x1003 + B2400 = 0xb + B300 = 0x7 + B307200 = 0x1007 + B38400 = 0xf + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x100a + B57600 = 0x1001 + B576000 = 0x100b + B600 = 0x8 + B614400 = 0x1008 + B75 = 0x2 + B76800 = 0x1005 + B921600 = 0x1009 + B9600 = 0xd + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EMT_TAGOVF = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x400000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x7 + F_GETLK64 = 0x7 + F_GETOWN = 0x5 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x8 + F_SETLK64 = 0x8 + F_SETLKW = 0x9 + F_SETLKW64 = 0x9 + F_SETOWN = 0x6 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x3 + F_WRLCK = 0x2 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x400000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x4000 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x200 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x100 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x100000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x2000 + O_EXCL = 0x800 + O_FSYNC = 0x802000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x4004 + O_NOATIME = 0x200000 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x4000 + O_PATH = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x802000 + O_SYNC = 0x802000 + O_TMPFILE = 0x2010000 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPAREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPREGS64 = 0x19 + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_READDATA = 0x10 + PTRACE_READTEXT = 0x12 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPAREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPREGS64 = 0x1a + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLESTEP = 0x9 + PTRACE_SPARC_DETACH = 0xb + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PTRACE_WRITEDATA = 0x11 + PTRACE_WRITETEXT = 0x13 + PT_FP = 0x48 + PT_G0 = 0x10 + PT_G1 = 0x14 + PT_G2 = 0x18 + PT_G3 = 0x1c + PT_G4 = 0x20 + PT_G5 = 0x24 + PT_G6 = 0x28 + PT_G7 = 0x2c + PT_I0 = 0x30 + PT_I1 = 0x34 + PT_I2 = 0x38 + PT_I3 = 0x3c + PT_I4 = 0x40 + PT_I5 = 0x44 + PT_I6 = 0x48 + PT_I7 = 0x4c + PT_NPC = 0x8 + PT_PC = 0x4 + PT_PSR = 0x0 + PT_REGS_MAGIC = 0x57ac6c00 + PT_TNPC = 0x90 + PT_TPC = 0x88 + PT_TSTATE = 0x80 + PT_V9_FP = 0x70 + PT_V9_G0 = 0x0 + PT_V9_G1 = 0x8 + PT_V9_G2 = 0x10 + PT_V9_G3 = 0x18 + PT_V9_G4 = 0x20 + PT_V9_G5 = 0x28 + PT_V9_G6 = 0x30 + PT_V9_G7 = 0x38 + PT_V9_I0 = 0x40 + PT_V9_I1 = 0x48 + PT_V9_I2 = 0x50 + PT_V9_I3 = 0x58 + PT_V9_I4 = 0x60 + PT_V9_I5 = 0x68 + PT_V9_I6 = 0x70 + PT_V9_I7 = 0x78 + PT_V9_MAGIC = 0x9c + PT_V9_TNPC = 0x90 + PT_V9_TPC = 0x88 + PT_V9_TSTATE = 0x80 + PT_V9_Y = 0x98 + PT_WIM = 0x10 + PT_Y = 0xc + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x6 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x18 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x11 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x23 + SCM_TIMESTAMPNS = 0x21 + SCM_WIFI_STATUS = 0x25 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x400000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x4000 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x8000 + SO_ATTACH_BPF = 0x34 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x35 + SO_ATTACH_REUSEPORT_EBPF = 0x36 + SO_BINDTODEVICE = 0xd + SO_BPF_EXTENSIONS = 0x32 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0x400 + SO_BUSY_POLL = 0x30 + SO_CNX_ADVICE = 0x37 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x33 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x28 + SO_MARK = 0x22 + SO_MAX_PACING_RATE = 0x31 + SO_NOFCS = 0x27 + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x2 + SO_PASSSEC = 0x1f + SO_PEEK_OFF = 0x26 + SO_PEERCRED = 0x40 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x100b + SO_RCVLOWAT = 0x800 + SO_RCVTIMEO = 0x2000 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x24 + SO_SECURITY_AUTHENTICATION = 0x5001 + SO_SECURITY_ENCRYPTION_NETWORK = 0x5004 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002 + SO_SELECT_ERR_QUEUE = 0x29 + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x100a + SO_SNDLOWAT = 0x1000 + SO_SNDTIMEO = 0x4000 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x23 + SO_TIMESTAMPNS = 0x21 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x25 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x20005407 + TCGETA = 0x40125401 + TCGETS = 0x40245408 + TCGETS2 = 0x402c540c + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x20005405 + TCSBRKP = 0x5425 + TCSETA = 0x80125402 + TCSETAF = 0x80125404 + TCSETAW = 0x80125403 + TCSETS = 0x80245409 + TCSETS2 = 0x802c540d + TCSETSF = 0x8024540b + TCSETSF2 = 0x802c540f + TCSETSW = 0x8024540a + TCSETSW2 = 0x802c540e + TCXONC = 0x20005406 + TIOCCBRK = 0x2000747a + TIOCCONS = 0x20007424 + TIOCEXCL = 0x2000740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x40047400 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x40047483 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40047486 + TIOCGRS485 = 0x40205441 + TIOCGSERIAL = 0x541e + TIOCGSID = 0x40047485 + TIOCGSOFTCAR = 0x40047464 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMIWAIT = 0x545c + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007484 + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x80047401 + TIOCSIG = 0x80047488 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x80047482 + TIOCSPTLCK = 0x80047487 + TIOCSRS485 = 0xc0205442 + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x80047465 + TIOCSTART = 0x2000746e + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x20005437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + VDISCARD = 0xd + VDSUSP = 0xb + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WRAP = 0x20000 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4 + XTABS = 0x1800 + __TIOCFLUSH = 0x80047410 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EADV = syscall.Errno(0x53) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x25) + EBADE = syscall.Errno(0x66) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x5d) + EBADMSG = syscall.Errno(0x4c) + EBADR = syscall.Errno(0x67) + EBADRQC = syscall.Errno(0x6a) + EBADSLT = syscall.Errno(0x6b) + EBFONT = syscall.Errno(0x6d) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7f) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x5e) + ECOMM = syscall.Errno(0x55) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0x4e) + EDEADLOCK = syscall.Errno(0x6c) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EHWPOISON = syscall.Errno(0x87) + EIDRM = syscall.Errno(0x4d) + EILSEQ = syscall.Errno(0x7a) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x81) + EKEYREJECTED = syscall.Errno(0x83) + EKEYREVOKED = syscall.Errno(0x82) + EL2HLT = syscall.Errno(0x65) + EL2NSYNC = syscall.Errno(0x5f) + EL3HLT = syscall.Errno(0x60) + EL3RST = syscall.Errno(0x61) + ELIBACC = syscall.Errno(0x72) + ELIBBAD = syscall.Errno(0x70) + ELIBEXEC = syscall.Errno(0x6e) + ELIBMAX = syscall.Errno(0x7b) + ELIBSCN = syscall.Errno(0x7c) + ELNRNG = syscall.Errno(0x62) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x7e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x57) + ENAMETOOLONG = syscall.Errno(0x3f) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x69) + ENOBUFS = syscall.Errno(0x37) + ENOCSI = syscall.Errno(0x64) + ENODATA = syscall.Errno(0x6f) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x80) + ENOLCK = syscall.Errno(0x4f) + ENOLINK = syscall.Errno(0x52) + ENOMEDIUM = syscall.Errno(0x7d) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x4b) + ENONET = syscall.Errno(0x50) + ENOPKG = syscall.Errno(0x71) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x4a) + ENOSTR = syscall.Errno(0x48) + ENOSYS = syscall.Errno(0x5a) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x85) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x73) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x5c) + EOWNERDEAD = syscall.Errno(0x84) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROTO = syscall.Errno(0x56) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x59) + EREMOTE = syscall.Errno(0x47) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x74) + ERFKILL = syscall.Errno(0x86) + EROFS = syscall.Errno(0x1e) + ERREMOTE = syscall.Errno(0x51) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x54) + ESTALE = syscall.Errno(0x46) + ESTRPIPE = syscall.Errno(0x5b) + ETIME = syscall.Errno(0x49) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x63) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x68) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x1d) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x17) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1d) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol", + 48: "address already in use", + 49: "cannot assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "transport endpoint is already connected", + 57: "transport endpoint is not connected", + 58: "cannot send after transport endpoint shutdown", + 59: "too many references: cannot splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disk quota exceeded", + 70: "stale file handle", + 71: "object is remote", + 72: "device not a stream", + 73: "timer expired", + 74: "out of streams resources", + 75: "no message of desired type", + 76: "bad message", + 77: "identifier removed", + 78: "resource deadlock avoided", + 79: "no locks available", + 80: "machine is not on the network", + 81: "unknown error 81", + 82: "link has been severed", + 83: "advertise error", + 84: "srmount error", + 85: "communication error on send", + 86: "protocol error", + 87: "multihop attempted", + 88: "RFS specific error", + 89: "remote address changed", + 90: "function not implemented", + 91: "streams pipe error", + 92: "value too large for defined data type", + 93: "file descriptor in bad state", + 94: "channel number out of range", + 95: "level 2 not synchronized", + 96: "level 3 halted", + 97: "level 3 reset", + 98: "link number out of range", + 99: "protocol driver not attached", + 100: "no CSI structure available", + 101: "level 2 halted", + 102: "invalid exchange", + 103: "invalid request descriptor", + 104: "exchange full", + 105: "no anode", + 106: "invalid request code", + 107: "invalid slot", + 108: "file locking deadlock error", + 109: "bad font file format", + 110: "cannot exec a shared library directly", + 111: "no data available", + 112: "accessing a corrupted shared library", + 113: "package not installed", + 114: "can not access a needed shared library", + 115: "name not unique on network", + 116: "interrupted system call should be restarted", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "invalid or incomplete multibyte or wide character", + 123: "attempting to link in too many shared libraries", + 124: ".lib section in a.out corrupted", + 125: "no medium found", + 126: "wrong medium type", + 127: "operation canceled", + 128: "required key not available", + 129: "key has expired", + 130: "key has been revoked", + 131: "key was rejected by service", + 132: "owner died", + 133: "state not recoverable", + 134: "operation not possible due to RF-kill", + 135: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "resource lost", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go new file mode 100644 index 0000000..b4338d5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go @@ -0,0 +1,1712 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + EN_SW_CTL_INF = 0x1000 + EN_SW_CTL_PREC = 0x300 + EN_SW_CTL_ROUND = 0xc00 + EN_SW_DATACHAIN = 0x80 + EN_SW_DENORM = 0x2 + EN_SW_INVOP = 0x1 + EN_SW_OVERFLOW = 0x8 + EN_SW_PRECLOSS = 0x20 + EN_SW_UNDERFLOW = 0x10 + EN_SW_ZERODIV = 0x4 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large or too small", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol option not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "illegal byte sequence", + 86: "not supported", + 87: "operation Canceled", + 88: "bad or Corrupt message", + 89: "no message available", + 90: "no STREAM resources", + 91: "not a STREAM", + 92: "STREAM ioctl timeout", + 93: "attribute not found", + 94: "multihop attempted", + 95: "link has been severed", + 96: "protocol error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "power fail/restart", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go new file mode 100644 index 0000000..4994437 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go @@ -0,0 +1,1702 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x8010427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80104272 + BIOCSUDPF = 0x80104273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8038720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8038720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc028697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0986920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0106926 + SIOCGIFDATA = 0xc0986985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0306936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc0286987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc0106978 + SIOCINITIFADDR = 0xc0706984 + SIOCSDRVSPEC = 0x8028697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8098691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x80286988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0986986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80087445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80087444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large or too small", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol option not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "illegal byte sequence", + 86: "not supported", + 87: "operation Canceled", + 88: "bad or Corrupt message", + 89: "no message available", + 90: "no STREAM resources", + 91: "not a STREAM", + 92: "STREAM ioctl timeout", + 93: "attribute not found", + 94: "multihop attempted", + 95: "link has been severed", + 96: "protocol error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "power fail/restart", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go new file mode 100644 index 0000000..ac85ca6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go @@ -0,0 +1,1688 @@ +// mkerrors.sh -marm +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -marm _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PRI_IOFLUSH = 0x7c + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x48087446 + TIOCPTSNAME = 0x48087448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large or too small", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol option not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "illegal byte sequence", + 86: "not supported", + 87: "operation Canceled", + 88: "bad or Corrupt message", + 89: "no message available", + 90: "no STREAM resources", + 91: "not a STREAM", + 92: "STREAM ioctl timeout", + 93: "attribute not found", + 94: "multihop attempted", + 95: "link has been severed", + 96: "protocol error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "power fail/restart", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go new file mode 100644 index 0000000..3322e99 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go @@ -0,0 +1,1584 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,openbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc008427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x400c426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80084277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x800c426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_COPY = 0x4 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x1ff7 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_MASK = 0x3ff000 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x10f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_SOURCE = 0x20000 + RTF_STATIC = 0x800 + RTF_TUNNEL = 0x100000 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8054693c + SIOCBRDGADDS = 0x80546941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8054693d + SIOCBRDGDELS = 0x80546942 + SIOCBRDGFLUSH = 0x80546948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc054693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc03c6958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc028694f + SIOCBRDGGSIFS = 0xc054693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0546942 + SIOCBRDGRTS = 0xc0186943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80546955 + SIOCBRDGSIFFLGS = 0x8054693f + SIOCBRDGSIFPRIO = 0x80546954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0086924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc024698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8024698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x400c745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "IPsec processing failure", + 83: "attribute not found", + 84: "illegal byte sequence", + 85: "no medium found", + 86: "wrong medium type", + 87: "value too large to be stored in data type", + 88: "operation canceled", + 89: "identifier removed", + 90: "no message of desired type", + 91: "not supported", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread AST", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go new file mode 100644 index 0000000..1758ecc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go @@ -0,0 +1,1583 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,openbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc010427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80104277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x8010426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_COPY = 0x4 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x1ff7 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x10f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_SOURCE = 0x20000 + RTF_STATIC = 0x800 + RTF_TUNNEL = 0x100000 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8058693c + SIOCBRDGADDS = 0x80586941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8058693d + SIOCBRDGDELS = 0x80586942 + SIOCBRDGFLUSH = 0x80586948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc058693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc0406958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc030694f + SIOCBRDGGSIFS = 0xc058693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0586942 + SIOCBRDGRTS = 0xc0206943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80586955 + SIOCBRDGSIFFLGS = 0x8058693f + SIOCBRDGSIFPRIO = 0x80586954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc028698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0306936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8028698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x4010745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "IPsec processing failure", + 83: "attribute not found", + 84: "illegal byte sequence", + 85: "no medium found", + 86: "wrong medium type", + 87: "value too large to be stored in data type", + 88: "operation canceled", + 89: "identifier removed", + 90: "no message of desired type", + 91: "not supported", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread AST", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go new file mode 100644 index 0000000..81e83d7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go @@ -0,0 +1,1483 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,solaris + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_802 = 0x12 + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_ECMA = 0x8 + AF_FILE = 0x1 + AF_GOSIP = 0x16 + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1a + AF_INET_OFFLOAD = 0x1e + AF_IPX = 0x17 + AF_KEY = 0x1b + AF_LAT = 0xe + AF_LINK = 0x19 + AF_LOCAL = 0x1 + AF_MAX = 0x20 + AF_NBS = 0x7 + AF_NCA = 0x1c + AF_NIT = 0x11 + AF_NS = 0x6 + AF_OSI = 0x13 + AF_OSINET = 0x15 + AF_PACKET = 0x20 + AF_POLICY = 0x1d + AF_PUP = 0x4 + AF_ROUTE = 0x18 + AF_SNA = 0xb + AF_TRILL = 0x1f + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_X25 = 0x14 + ARPHRD_ARCNET = 0x7 + ARPHRD_ATM = 0x10 + ARPHRD_AX25 = 0x3 + ARPHRD_CHAOS = 0x5 + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_FC = 0x12 + ARPHRD_FRAME = 0xf + ARPHRD_HDLC = 0x11 + ARPHRD_IB = 0x20 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IPATM = 0x13 + ARPHRD_METRICOM = 0x17 + ARPHRD_TUNNEL = 0x1f + B0 = 0x0 + B110 = 0x3 + B115200 = 0x12 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B153600 = 0x13 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B230400 = 0x14 + B2400 = 0xb + B300 = 0x7 + B307200 = 0x15 + B38400 = 0xf + B460800 = 0x16 + B4800 = 0xc + B50 = 0x1 + B57600 = 0x10 + B600 = 0x8 + B75 = 0x2 + B76800 = 0x11 + B921600 = 0x17 + B9600 = 0xd + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = -0x3fefbd89 + BIOCGDLTLIST32 = -0x3ff7bd89 + BIOCGETIF = 0x4020426b + BIOCGETLIF = 0x4078426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGRTIMEOUT32 = 0x4008427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = -0x7ffbbd90 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = -0x3ffbbd9a + BIOCSDLT = -0x7ffbbd8a + BIOCSETF = -0x7fefbd99 + BIOCSETF32 = -0x7ff7bd99 + BIOCSETIF = -0x7fdfbd94 + BIOCSETLIF = -0x7f87bd94 + BIOCSHDRCMPLT = -0x7ffbbd8b + BIOCSRTIMEOUT = -0x7fefbd86 + BIOCSRTIMEOUT32 = -0x7ff7bd86 + BIOCSSEESENT = -0x7ffbbd87 + BIOCSTCPF = -0x7fefbd8e + BIOCSUDPF = -0x7fefbd8d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0xf + CFLUSH = 0xf + CIBAUD = 0xf0000 + CLOCAL = 0x800 + CLOCK_HIGHRES = 0x4 + CLOCK_LEVEL = 0xa + CLOCK_MONOTONIC = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x5 + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x3 + CLOCK_THREAD_CPUTIME_ID = 0x2 + CLOCK_VIRTUAL = 0x1 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + CSWTCH = 0x1a + DLT_AIRONET_HEADER = 0x78 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_BACNET_MS_TP = 0xa5 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FDDI = 0xa + DLT_FRELAY = 0x6b + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xa2 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_PPPD = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EMPTY_SET = 0x0 + EMT_CPCOVF = 0x1 + EQUALITY_CHECK = 0x0 + EXTA = 0xe + EXTB = 0xf + FD_CLOEXEC = 0x1 + FD_NFDBITS = 0x40 + FD_SETSIZE = 0x10000 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHALL = 0x1 + FLUSHDATA = 0x0 + FLUSHO = 0x2000 + F_ALLOCSP = 0xa + F_ALLOCSP64 = 0xa + F_BADFD = 0x2e + F_BLKSIZE = 0x13 + F_BLOCKS = 0x12 + F_CHKFL = 0x8 + F_COMPAT = 0x8 + F_DUP2FD = 0x9 + F_DUP2FD_CLOEXEC = 0x24 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x25 + F_FLOCK = 0x35 + F_FLOCK64 = 0x35 + F_FLOCKW = 0x36 + F_FLOCKW64 = 0x36 + F_FREESP = 0xb + F_FREESP64 = 0xb + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETXFL = 0x2d + F_HASREMOTELOCKS = 0x1a + F_ISSTREAM = 0xd + F_MANDDNY = 0x10 + F_MDACC = 0x20 + F_NODNY = 0x0 + F_NPRIV = 0x10 + F_OFD_GETLK = 0x2f + F_OFD_GETLK64 = 0x2f + F_OFD_SETLK = 0x30 + F_OFD_SETLK64 = 0x30 + F_OFD_SETLKW = 0x31 + F_OFD_SETLKW64 = 0x31 + F_PRIV = 0xf + F_QUOTACTL = 0x11 + F_RDACC = 0x1 + F_RDDNY = 0x1 + F_RDLCK = 0x1 + F_REVOKE = 0x19 + F_RMACC = 0x4 + F_RMDNY = 0x4 + F_RWACC = 0x3 + F_RWDNY = 0x3 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLK64_NBMAND = 0x2a + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETLK_NBMAND = 0x2a + F_SETOWN = 0x18 + F_SHARE = 0x28 + F_SHARE_NBMAND = 0x2b + F_UNLCK = 0x3 + F_UNLKSYS = 0x4 + F_UNSHARE = 0x29 + F_WRACC = 0x2 + F_WRDNY = 0x2 + F_WRLCK = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFF_ADDRCONF = 0x80000 + IFF_ALLMULTI = 0x200 + IFF_ANYCAST = 0x400000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x7f203003b5a + IFF_COS_ENABLED = 0x200000000 + IFF_DEBUG = 0x4 + IFF_DEPRECATED = 0x40000 + IFF_DHCPRUNNING = 0x4000 + IFF_DUPLICATE = 0x4000000000 + IFF_FAILED = 0x10000000 + IFF_FIXEDMTU = 0x1000000000 + IFF_INACTIVE = 0x40000000 + IFF_INTELLIGENT = 0x400 + IFF_IPMP = 0x8000000000 + IFF_IPMP_CANTCHANGE = 0x10000000 + IFF_IPMP_INVALID = 0x1ec200080 + IFF_IPV4 = 0x1000000 + IFF_IPV6 = 0x2000000 + IFF_L3PROTECT = 0x40000000000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x800 + IFF_MULTI_BCAST = 0x1000 + IFF_NOACCEPT = 0x4000000 + IFF_NOARP = 0x80 + IFF_NOFAILOVER = 0x8000000 + IFF_NOLINKLOCAL = 0x20000000000 + IFF_NOLOCAL = 0x20000 + IFF_NONUD = 0x200000 + IFF_NORTEXCH = 0x800000 + IFF_NOTRAILERS = 0x20 + IFF_NOXMIT = 0x10000 + IFF_OFFLINE = 0x80000000 + IFF_POINTOPOINT = 0x10 + IFF_PREFERRED = 0x400000000 + IFF_PRIVATE = 0x8000 + IFF_PROMISC = 0x100 + IFF_ROUTER = 0x100000 + IFF_RUNNING = 0x40 + IFF_STANDBY = 0x20000000 + IFF_TEMPORARY = 0x800000000 + IFF_UNNUMBERED = 0x2000 + IFF_UP = 0x1 + IFF_VIRTUAL = 0x2000000000 + IFF_VRRP = 0x10000000000 + IFF_XRESOLV = 0x100000000 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_6TO4 = 0xca + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IB = 0xc7 + IFT_IPV4 = 0xc8 + IFT_IPV6 = 0xc9 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_AUTOCONF_MASK = 0xffff0000 + IN_AUTOCONF_NET = 0xa9fe0000 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_CLASSE_NET = 0xffffffff + IN_LOOPBACKNET = 0x7f + IN_PRIVATE12_MASK = 0xfff00000 + IN_PRIVATE12_NET = 0xac100000 + IN_PRIVATE16_MASK = 0xffff0000 + IN_PRIVATE16_NET = 0xc0a80000 + IN_PRIVATE8_MASK = 0xff000000 + IN_PRIVATE8_NET = 0xa000000 + IPPROTO_AH = 0x33 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x4 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_HELLO = 0x3f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_ND = 0x4d + IPPROTO_NONE = 0x3b + IPPROTO_OSPF = 0x59 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_UDP = 0x11 + IPV6_ADD_MEMBERSHIP = 0x9 + IPV6_BOUND_IF = 0x41 + IPV6_CHECKSUM = 0x18 + IPV6_DONTFRAG = 0x21 + IPV6_DROP_MEMBERSHIP = 0xa + IPV6_DSTOPTS = 0xf + IPV6_FLOWINFO_FLOWLABEL = 0xffff0f00 + IPV6_FLOWINFO_TCLASS = 0xf00f + IPV6_HOPLIMIT = 0xc + IPV6_HOPOPTS = 0xe + IPV6_JOIN_GROUP = 0x9 + IPV6_LEAVE_GROUP = 0xa + IPV6_MULTICAST_HOPS = 0x7 + IPV6_MULTICAST_IF = 0x6 + IPV6_MULTICAST_LOOP = 0x8 + IPV6_NEXTHOP = 0xd + IPV6_PAD1_OPT = 0x0 + IPV6_PATHMTU = 0x25 + IPV6_PKTINFO = 0xb + IPV6_PREFER_SRC_CGA = 0x20 + IPV6_PREFER_SRC_CGADEFAULT = 0x10 + IPV6_PREFER_SRC_CGAMASK = 0x30 + IPV6_PREFER_SRC_COA = 0x2 + IPV6_PREFER_SRC_DEFAULT = 0x15 + IPV6_PREFER_SRC_HOME = 0x1 + IPV6_PREFER_SRC_MASK = 0x3f + IPV6_PREFER_SRC_MIPDEFAULT = 0x1 + IPV6_PREFER_SRC_MIPMASK = 0x3 + IPV6_PREFER_SRC_NONCGA = 0x10 + IPV6_PREFER_SRC_PUBLIC = 0x4 + IPV6_PREFER_SRC_TMP = 0x8 + IPV6_PREFER_SRC_TMPDEFAULT = 0x4 + IPV6_PREFER_SRC_TMPMASK = 0xc + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x13 + IPV6_RECVHOPOPTS = 0x14 + IPV6_RECVPATHMTU = 0x24 + IPV6_RECVPKTINFO = 0x12 + IPV6_RECVRTHDR = 0x16 + IPV6_RECVRTHDRDSTOPTS = 0x17 + IPV6_RECVTCLASS = 0x19 + IPV6_RTHDR = 0x10 + IPV6_RTHDRDSTOPTS = 0x11 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SEC_OPT = 0x22 + IPV6_SRC_PREFERENCES = 0x23 + IPV6_TCLASS = 0x26 + IPV6_UNICAST_HOPS = 0x5 + IPV6_UNSPEC_SRC = 0x42 + IPV6_USE_MIN_MTU = 0x20 + IPV6_V6ONLY = 0x27 + IP_ADD_MEMBERSHIP = 0x13 + IP_ADD_SOURCE_MEMBERSHIP = 0x17 + IP_BLOCK_SOURCE = 0x15 + IP_BOUND_IF = 0x41 + IP_BROADCAST = 0x106 + IP_BROADCAST_TTL = 0x43 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DHCPINIT_IF = 0x45 + IP_DONTFRAG = 0x1b + IP_DONTROUTE = 0x105 + IP_DROP_MEMBERSHIP = 0x14 + IP_DROP_SOURCE_MEMBERSHIP = 0x18 + IP_HDRINCL = 0x2 + IP_MAXPACKET = 0xffff + IP_MF = 0x2000 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x10 + IP_MULTICAST_LOOP = 0x12 + IP_MULTICAST_TTL = 0x11 + IP_NEXTHOP = 0x19 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x9 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVSLLA = 0xa + IP_RECVTTL = 0xb + IP_RETOPTS = 0x8 + IP_REUSEADDR = 0x104 + IP_SEC_OPT = 0x22 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x16 + IP_UNSPEC_SRC = 0x42 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_ACCESS_DEFAULT = 0x6 + MADV_ACCESS_LWP = 0x7 + MADV_ACCESS_MANY = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NORMAL = 0x0 + MADV_PURGE = 0x9 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80 + MAP_ALIGN = 0x200 + MAP_ANON = 0x100 + MAP_ANONYMOUS = 0x100 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_INITDATA = 0x800 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TEXT = 0x400 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x10 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_DUPCTRL = 0x800 + MSG_EOR = 0x8 + MSG_MAXIOVLEN = 0x10 + MSG_NOTIFICATION = 0x100 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x20 + MSG_WAITALL = 0x40 + MSG_XPG4_2 = 0x8000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_OLDSYNC = 0x0 + MS_SYNC = 0x4 + M_FLUSH = 0x86 + NL0 = 0x0 + NL1 = 0x100 + NLDLY = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENFAIL = -0x1 + OPOST = 0x1 + O_ACCMODE = 0x600003 + O_APPEND = 0x8 + O_CLOEXEC = 0x800000 + O_CREAT = 0x100 + O_DSYNC = 0x40 + O_EXCL = 0x400 + O_EXEC = 0x400000 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x4 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NOLINKS = 0x40000 + O_NONBLOCK = 0x80 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x8000 + O_SEARCH = 0x200000 + O_SIOCGIFCONF = -0x3ff796ec + O_SIOCGLIFCONF = -0x3fef9688 + O_SYNC = 0x10 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + O_XATTR = 0x4000 + PARENB = 0x100 + PAREXT = 0x100000 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x3 + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_NUMBITS = 0x9 + RTA_SRC = 0x100 + RTF_BLACKHOLE = 0x1000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INDIRECT = 0x40000 + RTF_KERNEL = 0x80000 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MULTIRT = 0x10000 + RTF_PRIVATE = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SETSRC = 0x20000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTF_ZONE = 0x100000 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0xf + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_FREEADDR = 0x10 + RTM_GET = 0x4 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_VERSION = 0x3 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_AWARE = 0x1 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_RIGHTS = 0x1010 + SCM_TIMESTAMP = 0x1013 + SCM_UCRED = 0x1012 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIG2STR_MAX = 0x20 + SIOCADDMULTI = -0x7fdf96cf + SIOCADDRT = -0x7fcf8df6 + SIOCATMARK = 0x40047307 + SIOCDARP = -0x7fdb96e0 + SIOCDELMULTI = -0x7fdf96ce + SIOCDELRT = -0x7fcf8df5 + SIOCDXARP = -0x7fff9658 + SIOCGARP = -0x3fdb96e1 + SIOCGDSTINFO = -0x3fff965c + SIOCGENADDR = -0x3fdf96ab + SIOCGENPSTATS = -0x3fdf96c7 + SIOCGETLSGCNT = -0x3fef8deb + SIOCGETNAME = 0x40107334 + SIOCGETPEER = 0x40107335 + SIOCGETPROP = -0x3fff8f44 + SIOCGETSGCNT = -0x3feb8deb + SIOCGETSYNC = -0x3fdf96d3 + SIOCGETVIFCNT = -0x3feb8dec + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = -0x3fdf96f3 + SIOCGIFBRDADDR = -0x3fdf96e9 + SIOCGIFCONF = -0x3ff796a4 + SIOCGIFDSTADDR = -0x3fdf96f1 + SIOCGIFFLAGS = -0x3fdf96ef + SIOCGIFHWADDR = -0x3fdf9647 + SIOCGIFINDEX = -0x3fdf96a6 + SIOCGIFMEM = -0x3fdf96ed + SIOCGIFMETRIC = -0x3fdf96e5 + SIOCGIFMTU = -0x3fdf96ea + SIOCGIFMUXID = -0x3fdf96a8 + SIOCGIFNETMASK = -0x3fdf96e7 + SIOCGIFNUM = 0x40046957 + SIOCGIP6ADDRPOLICY = -0x3fff965e + SIOCGIPMSFILTER = -0x3ffb964c + SIOCGLIFADDR = -0x3f87968f + SIOCGLIFBINDING = -0x3f879666 + SIOCGLIFBRDADDR = -0x3f879685 + SIOCGLIFCONF = -0x3fef965b + SIOCGLIFDADSTATE = -0x3f879642 + SIOCGLIFDSTADDR = -0x3f87968d + SIOCGLIFFLAGS = -0x3f87968b + SIOCGLIFGROUPINFO = -0x3f4b9663 + SIOCGLIFGROUPNAME = -0x3f879664 + SIOCGLIFHWADDR = -0x3f879640 + SIOCGLIFINDEX = -0x3f87967b + SIOCGLIFLNKINFO = -0x3f879674 + SIOCGLIFMETRIC = -0x3f879681 + SIOCGLIFMTU = -0x3f879686 + SIOCGLIFMUXID = -0x3f87967d + SIOCGLIFNETMASK = -0x3f879683 + SIOCGLIFNUM = -0x3ff3967e + SIOCGLIFSRCOF = -0x3fef964f + SIOCGLIFSUBNET = -0x3f879676 + SIOCGLIFTOKEN = -0x3f879678 + SIOCGLIFUSESRC = -0x3f879651 + SIOCGLIFZONE = -0x3f879656 + SIOCGLOWAT = 0x40047303 + SIOCGMSFILTER = -0x3ffb964e + SIOCGPGRP = 0x40047309 + SIOCGSTAMP = -0x3fef9646 + SIOCGXARP = -0x3fff9659 + SIOCIFDETACH = -0x7fdf96c8 + SIOCILB = -0x3ffb9645 + SIOCLIFADDIF = -0x3f879691 + SIOCLIFDELND = -0x7f879673 + SIOCLIFGETND = -0x3f879672 + SIOCLIFREMOVEIF = -0x7f879692 + SIOCLIFSETND = -0x7f879671 + SIOCLOWER = -0x7fdf96d7 + SIOCSARP = -0x7fdb96e2 + SIOCSCTPGOPT = -0x3fef9653 + SIOCSCTPPEELOFF = -0x3ffb9652 + SIOCSCTPSOPT = -0x7fef9654 + SIOCSENABLESDP = -0x3ffb9649 + SIOCSETPROP = -0x7ffb8f43 + SIOCSETSYNC = -0x7fdf96d4 + SIOCSHIWAT = -0x7ffb8d00 + SIOCSIFADDR = -0x7fdf96f4 + SIOCSIFBRDADDR = -0x7fdf96e8 + SIOCSIFDSTADDR = -0x7fdf96f2 + SIOCSIFFLAGS = -0x7fdf96f0 + SIOCSIFINDEX = -0x7fdf96a5 + SIOCSIFMEM = -0x7fdf96ee + SIOCSIFMETRIC = -0x7fdf96e4 + SIOCSIFMTU = -0x7fdf96eb + SIOCSIFMUXID = -0x7fdf96a7 + SIOCSIFNAME = -0x7fdf96b7 + SIOCSIFNETMASK = -0x7fdf96e6 + SIOCSIP6ADDRPOLICY = -0x7fff965d + SIOCSIPMSFILTER = -0x7ffb964b + SIOCSLGETREQ = -0x3fdf96b9 + SIOCSLIFADDR = -0x7f879690 + SIOCSLIFBRDADDR = -0x7f879684 + SIOCSLIFDSTADDR = -0x7f87968e + SIOCSLIFFLAGS = -0x7f87968c + SIOCSLIFGROUPNAME = -0x7f879665 + SIOCSLIFINDEX = -0x7f87967a + SIOCSLIFLNKINFO = -0x7f879675 + SIOCSLIFMETRIC = -0x7f879680 + SIOCSLIFMTU = -0x7f879687 + SIOCSLIFMUXID = -0x7f87967c + SIOCSLIFNAME = -0x3f87967f + SIOCSLIFNETMASK = -0x7f879682 + SIOCSLIFPREFIX = -0x3f879641 + SIOCSLIFSUBNET = -0x7f879677 + SIOCSLIFTOKEN = -0x7f879679 + SIOCSLIFUSESRC = -0x7f879650 + SIOCSLIFZONE = -0x7f879655 + SIOCSLOWAT = -0x7ffb8cfe + SIOCSLSTAT = -0x7fdf96b8 + SIOCSMSFILTER = -0x7ffb964d + SIOCSPGRP = -0x7ffb8cf8 + SIOCSPROMISC = -0x7ffb96d0 + SIOCSQPTR = -0x3ffb9648 + SIOCSSDSTATS = -0x3fdf96d2 + SIOCSSESTATS = -0x3fdf96d1 + SIOCSXARP = -0x7fff965a + SIOCTMYADDR = -0x3ff79670 + SIOCTMYSITE = -0x3ff7966e + SIOCTONLINK = -0x3ff7966f + SIOCUPPER = -0x7fdf96d8 + SIOCX25RCV = -0x3fdf96c4 + SIOCX25TBL = -0x3fdf96c3 + SIOCX25XMT = -0x3fdf96c5 + SIOCXPROTO = 0x20007337 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x1 + SOCK_NDELAY = 0x200000 + SOCK_NONBLOCK = 0x100000 + SOCK_RAW = 0x4 + SOCK_RDM = 0x5 + SOCK_SEQPACKET = 0x6 + SOCK_STREAM = 0x2 + SOCK_TYPE_MASK = 0xffff + SOL_FILTER = 0xfffc + SOL_PACKET = 0xfffd + SOL_ROUTE = 0xfffe + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ALL = 0x3f + SO_ALLZONES = 0x1014 + SO_ANON_MLP = 0x100a + SO_ATTACH_FILTER = 0x40000001 + SO_BAND = 0x4000 + SO_BROADCAST = 0x20 + SO_COPYOPT = 0x80000 + SO_DEBUG = 0x1 + SO_DELIM = 0x8000 + SO_DETACH_FILTER = 0x40000002 + SO_DGRAM_ERRIND = 0x200 + SO_DOMAIN = 0x100c + SO_DONTLINGER = -0x81 + SO_DONTROUTE = 0x10 + SO_ERROPT = 0x40000 + SO_ERROR = 0x1007 + SO_EXCLBIND = 0x1015 + SO_HIWAT = 0x10 + SO_ISNTTY = 0x800 + SO_ISTTY = 0x400 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOWAT = 0x20 + SO_MAC_EXEMPT = 0x100b + SO_MAC_IMPLICIT = 0x1016 + SO_MAXBLK = 0x100000 + SO_MAXPSZ = 0x8 + SO_MINPSZ = 0x4 + SO_MREADOFF = 0x80 + SO_MREADON = 0x40 + SO_NDELOFF = 0x200 + SO_NDELON = 0x100 + SO_NODELIM = 0x10000 + SO_OOBINLINE = 0x100 + SO_PROTOTYPE = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVPSH = 0x100d + SO_RCVTIMEO = 0x1006 + SO_READOPT = 0x1 + SO_RECVUCRED = 0x400 + SO_REUSEADDR = 0x4 + SO_SECATTR = 0x1011 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STRHOLD = 0x20000 + SO_TAIL = 0x200000 + SO_TIMESTAMP = 0x1013 + SO_TONSTOP = 0x2000 + SO_TOSTOP = 0x1000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_VRRP = 0x1017 + SO_WROFF = 0x2 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_ABORT_THRESHOLD = 0x11 + TCP_ANONPRIVBIND = 0x20 + TCP_CONN_ABORT_THRESHOLD = 0x13 + TCP_CONN_NOTIFY_THRESHOLD = 0x12 + TCP_CORK = 0x18 + TCP_EXCLBIND = 0x21 + TCP_INIT_CWND = 0x15 + TCP_KEEPALIVE = 0x8 + TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17 + TCP_KEEPALIVE_THRESHOLD = 0x16 + TCP_KEEPCNT = 0x23 + TCP_KEEPIDLE = 0x22 + TCP_KEEPINTVL = 0x24 + TCP_LINGER2 = 0x1c + TCP_MAXSEG = 0x2 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOTIFY_THRESHOLD = 0x10 + TCP_RECVDSTADDR = 0x14 + TCP_RTO_INITIAL = 0x19 + TCP_RTO_MAX = 0x1b + TCP_RTO_MIN = 0x1a + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETSF = 0x5410 + TCSETSW = 0x540f + TCXONC = 0x5406 + TIOC = 0x5400 + TIOCCBRK = 0x747a + TIOCCDTR = 0x7478 + TIOCCILOOP = 0x746c + TIOCEXCL = 0x740d + TIOCFLUSH = 0x7410 + TIOCGETC = 0x7412 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x7414 + TIOCGPPS = 0x547d + TIOCGPPSEV = 0x547f + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5469 + TIOCGWINSZ = 0x5468 + TIOCHPCL = 0x7402 + TIOCKBOF = 0x5409 + TIOCKBON = 0x5408 + TIOCLBIC = 0x747e + TIOCLBIS = 0x747f + TIOCLGET = 0x747c + TIOCLSET = 0x747d + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMSET = 0x741a + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x7471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7473 + TIOCREMOTE = 0x741e + TIOCSBRK = 0x747b + TIOCSCTTY = 0x7484 + TIOCSDTR = 0x7479 + TIOCSETC = 0x7411 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIGNAL = 0x741f + TIOCSILOOP = 0x746d + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x7415 + TIOCSPPS = 0x547e + TIOCSSOFTCAR = 0x546a + TIOCSTART = 0x746e + TIOCSTI = 0x7417 + TIOCSTOP = 0x746f + TIOCSWINSZ = 0x5467 + TOSTOP = 0x100 + VCEOF = 0x8 + VCEOL = 0x9 + VDISCARD = 0xd + VDSUSP = 0xb + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTATUS = 0x10 + VSTOP = 0x9 + VSUSP = 0xa + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WCONTFLG = 0xffff + WCONTINUED = 0x8 + WCOREFLG = 0x80 + WEXITED = 0x1 + WNOHANG = 0x40 + WNOWAIT = 0x80 + WOPTMASK = 0xcf + WRAP = 0x20000 + WSIGMASK = 0x7f + WSTOPFLG = 0x7f + WSTOPPED = 0x4 + WTRAPPED = 0x2 + WUNTRACED = 0x4 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x39) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x2f) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x31) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOCKUNMAPPED = syscall.Errno(0x48) + ELOOP = syscall.Errno(0x5a) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTACTIVE = syscall.Errno(0x49) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTRECOVERABLE = syscall.Errno(0x3b) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x30) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0x3a) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMOTE = syscall.Errno(0x42) + ERESTART = syscall.Errno(0x5b) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCANCEL = syscall.Signal(0x24) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGFREEZE = syscall.Signal(0x22) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x29) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGJVM1 = syscall.Signal(0x27) + SIGJVM2 = syscall.Signal(0x28) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x25) + SIGLWP = syscall.Signal(0x21) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHAW = syscall.Signal(0x23) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWAITING = syscall.Signal(0x20) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) + SIGXRES = syscall.Signal(0x26) +) + +// Error table +var errors = [...]string{ + 1: "not owner", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "I/O error", + 6: "no such device or address", + 7: "arg list too long", + 8: "exec format error", + 9: "bad file number", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "not enough space", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "file table overflow", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "argument out of domain", + 34: "result too large", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "deadlock situation detected/avoided", + 46: "no record locks available", + 47: "operation canceled", + 48: "operation not supported", + 49: "disc quota exceeded", + 50: "bad exchange descriptor", + 51: "bad request descriptor", + 52: "message tables full", + 53: "anode table overflow", + 54: "bad request code", + 55: "invalid slot", + 56: "file locking deadlock", + 57: "bad font file format", + 58: "owner of the lock died", + 59: "lock is not recoverable", + 60: "not a stream device", + 61: "no data available", + 62: "timer expired", + 63: "out of stream resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "locked lock was unmapped ", + 73: "facility is not active", + 74: "multihop attempted", + 77: "not a data message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in more shared libraries than system limit", + 87: "can not exec a shared library directly", + 88: "illegal byte sequence", + 89: "operation not applicable", + 90: "number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS", + 91: "error 91", + 92: "error 92", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "option not supported by protocol", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported on transport endpoint", + 123: "protocol family not supported", + 124: "address family not supported by protocol family", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection because of reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 143: "cannot send after socket shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale NFS file handle", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal Instruction", + 5: "trace/Breakpoint Trap", + 6: "abort", + 7: "emulation Trap", + 8: "arithmetic Exception", + 9: "killed", + 10: "bus Error", + 11: "segmentation Fault", + 12: "bad System Call", + 13: "broken Pipe", + 14: "alarm Clock", + 15: "terminated", + 16: "user Signal 1", + 17: "user Signal 2", + 18: "child Status Changed", + 19: "power-Fail/Restart", + 20: "window Size Change", + 21: "urgent Socket Condition", + 22: "pollable Event", + 23: "stopped (signal)", + 24: "stopped (user)", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual Timer Expired", + 29: "profiling Timer Expired", + 30: "cpu Limit Exceeded", + 31: "file Size Limit Exceeded", + 32: "no runnable lwp", + 33: "inter-lwp signal", + 34: "checkpoint Freeze", + 35: "checkpoint Thaw", + 36: "thread Cancellation", + 37: "resource Lost", + 38: "resource Control Exceeded", + 39: "reserved for JVM 1", + 40: "reserved for JVM 2", + 41: "information Request", +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go new file mode 100644 index 0000000..e48f4a5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go @@ -0,0 +1,1394 @@ +// mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build darwin,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int32(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go new file mode 100644 index 0000000..672ada0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -0,0 +1,1409 @@ +// mksyscall.pl -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build darwin,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int64(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go new file mode 100644 index 0000000..d516409 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go @@ -0,0 +1,1394 @@ +// mksyscall.pl -l32 -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build darwin,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int32(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go new file mode 100644 index 0000000..e97759c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -0,0 +1,1394 @@ +// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build darwin,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int64(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go new file mode 100644 index 0000000..eafceb8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go @@ -0,0 +1,1393 @@ +// mksyscall.pl -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build dragonfly,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpread(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go new file mode 100644 index 0000000..f53801c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -0,0 +1,1617 @@ +// mksyscall.pl -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build freebsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go new file mode 100644 index 0000000..a2a5895 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -0,0 +1,1663 @@ +// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build freebsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go new file mode 100644 index 0000000..0e9b42b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -0,0 +1,1617 @@ +// mksyscall.pl -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build freebsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go new file mode 100644 index 0000000..6c08450 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -0,0 +1,1927 @@ +// mksyscall.pl -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go new file mode 100644 index 0000000..f34418d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -0,0 +1,2120 @@ +// mksyscall.pl -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go new file mode 100644 index 0000000..92b4716 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -0,0 +1,2029 @@ +// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go new file mode 100644 index 0000000..ec55920 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -0,0 +1,2003 @@ +// mksyscall.pl -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go new file mode 100644 index 0000000..e6c2bf5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -0,0 +1,2085 @@ +// mksyscall.pl -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mips + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r0)<<32 | int64(r1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(int64(r0)<<32 | int64(r1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go new file mode 100644 index 0000000..f77f1d0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -0,0 +1,2079 @@ +// mksyscall.pl -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mips64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go new file mode 100644 index 0000000..d6ce861 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -0,0 +1,2079 @@ +// mksyscall.pl -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mips64le + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go new file mode 100644 index 0000000..c013406 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -0,0 +1,2085 @@ +// mksyscall.pl -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mipsle + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go new file mode 100644 index 0000000..6b7a291 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -0,0 +1,2131 @@ +// mksyscall.pl -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,ppc64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go new file mode 100644 index 0000000..7585277 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -0,0 +1,2131 @@ +// mksyscall.pl -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,ppc64le + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go new file mode 100644 index 0000000..987ce86 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -0,0 +1,1911 @@ +// mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,s390x + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go new file mode 100644 index 0000000..2dd9843 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -0,0 +1,1833 @@ +// mksyscall.pl -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,sparc64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go new file mode 100644 index 0000000..3182345 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -0,0 +1,1299 @@ +// mksyscall.pl -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build netbsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go new file mode 100644 index 0000000..74ba818 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -0,0 +1,1299 @@ +// mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build netbsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go new file mode 100644 index 0000000..1f346e2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -0,0 +1,1299 @@ +// mksyscall.pl -l32 -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build netbsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go new file mode 100644 index 0000000..ca3e813 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -0,0 +1,1357 @@ +// mksyscall.pl -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build openbsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go new file mode 100644 index 0000000..bf63d55 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -0,0 +1,1357 @@ +// mksyscall.pl -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build openbsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go new file mode 100644 index 0000000..d1ed021 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -0,0 +1,1589 @@ +// mksyscall_solaris.pl -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build solaris,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc_pipe pipe "libc.so" +//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so" +//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" +//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" +//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" +//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" +//go:cgo_import_dynamic libc_gethostname gethostname "libc.so" +//go:cgo_import_dynamic libc_utimes utimes "libc.so" +//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" +//go:cgo_import_dynamic libc_futimesat futimesat "libc.so" +//go:cgo_import_dynamic libc_accept accept "libsocket.so" +//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" +//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" +//go:cgo_import_dynamic libc_acct acct "libc.so" +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" +//go:cgo_import_dynamic libc_access access "libc.so" +//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" +//go:cgo_import_dynamic libc_chdir chdir "libc.so" +//go:cgo_import_dynamic libc_chmod chmod "libc.so" +//go:cgo_import_dynamic libc_chown chown "libc.so" +//go:cgo_import_dynamic libc_chroot chroot "libc.so" +//go:cgo_import_dynamic libc_close close "libc.so" +//go:cgo_import_dynamic libc_creat creat "libc.so" +//go:cgo_import_dynamic libc_dup dup "libc.so" +//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" +//go:cgo_import_dynamic libc_exit exit "libc.so" +//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" +//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" +//go:cgo_import_dynamic libc_fchown fchown "libc.so" +//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" +//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so" +//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" +//go:cgo_import_dynamic libc_fstat fstat "libc.so" +//go:cgo_import_dynamic libc_fstatvfs fstatvfs "libc.so" +//go:cgo_import_dynamic libc_getdents getdents "libc.so" +//go:cgo_import_dynamic libc_getgid getgid "libc.so" +//go:cgo_import_dynamic libc_getpid getpid "libc.so" +//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" +//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" +//go:cgo_import_dynamic libc_getegid getegid "libc.so" +//go:cgo_import_dynamic libc_getppid getppid "libc.so" +//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" +//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" +//go:cgo_import_dynamic libc_getuid getuid "libc.so" +//go:cgo_import_dynamic libc_kill kill "libc.so" +//go:cgo_import_dynamic libc_lchown lchown "libc.so" +//go:cgo_import_dynamic libc_link link "libc.so" +//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so" +//go:cgo_import_dynamic libc_lstat lstat "libc.so" +//go:cgo_import_dynamic libc_madvise madvise "libc.so" +//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" +//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" +//go:cgo_import_dynamic libc_mknod mknod "libc.so" +//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" +//go:cgo_import_dynamic libc_mlock mlock "libc.so" +//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" +//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" +//go:cgo_import_dynamic libc_munlock munlock "libc.so" +//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" +//go:cgo_import_dynamic libc_open open "libc.so" +//go:cgo_import_dynamic libc_openat openat "libc.so" +//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" +//go:cgo_import_dynamic libc_pause pause "libc.so" +//go:cgo_import_dynamic libc_pread pread "libc.so" +//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" +//go:cgo_import_dynamic libc_read read "libc.so" +//go:cgo_import_dynamic libc_readlink readlink "libc.so" +//go:cgo_import_dynamic libc_rename rename "libc.so" +//go:cgo_import_dynamic libc_renameat renameat "libc.so" +//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" +//go:cgo_import_dynamic libc_lseek lseek "libc.so" +//go:cgo_import_dynamic libc_setegid setegid "libc.so" +//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" +//go:cgo_import_dynamic libc_setgid setgid "libc.so" +//go:cgo_import_dynamic libc_sethostname sethostname "libc.so" +//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" +//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" +//go:cgo_import_dynamic libc_setregid setregid "libc.so" +//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" +//go:cgo_import_dynamic libc_setsid setsid "libc.so" +//go:cgo_import_dynamic libc_setuid setuid "libc.so" +//go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so" +//go:cgo_import_dynamic libc_stat stat "libc.so" +//go:cgo_import_dynamic libc_statvfs statvfs "libc.so" +//go:cgo_import_dynamic libc_symlink symlink "libc.so" +//go:cgo_import_dynamic libc_sync sync "libc.so" +//go:cgo_import_dynamic libc_times times "libc.so" +//go:cgo_import_dynamic libc_truncate truncate "libc.so" +//go:cgo_import_dynamic libc_fsync fsync "libc.so" +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" +//go:cgo_import_dynamic libc_umask umask "libc.so" +//go:cgo_import_dynamic libc_uname uname "libc.so" +//go:cgo_import_dynamic libc_umount umount "libc.so" +//go:cgo_import_dynamic libc_unlink unlink "libc.so" +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" +//go:cgo_import_dynamic libc_ustat ustat "libc.so" +//go:cgo_import_dynamic libc_utime utime "libc.so" +//go:cgo_import_dynamic libc___xnet_bind __xnet_bind "libsocket.so" +//go:cgo_import_dynamic libc___xnet_connect __xnet_connect "libsocket.so" +//go:cgo_import_dynamic libc_mmap mmap "libc.so" +//go:cgo_import_dynamic libc_munmap munmap "libc.so" +//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto "libsocket.so" +//go:cgo_import_dynamic libc___xnet_socket __xnet_socket "libsocket.so" +//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair "libsocket.so" +//go:cgo_import_dynamic libc_write write "libc.so" +//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" +//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" +//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" +//go:cgo_import_dynamic libc_sysconf sysconf "libc.so" + +//go:linkname procpipe libc_pipe +//go:linkname procgetsockname libc_getsockname +//go:linkname procGetcwd libc_getcwd +//go:linkname procgetgroups libc_getgroups +//go:linkname procsetgroups libc_setgroups +//go:linkname procwait4 libc_wait4 +//go:linkname procgethostname libc_gethostname +//go:linkname procutimes libc_utimes +//go:linkname procutimensat libc_utimensat +//go:linkname procfcntl libc_fcntl +//go:linkname procfutimesat libc_futimesat +//go:linkname procaccept libc_accept +//go:linkname proc__xnet_recvmsg libc___xnet_recvmsg +//go:linkname proc__xnet_sendmsg libc___xnet_sendmsg +//go:linkname procacct libc_acct +//go:linkname procioctl libc_ioctl +//go:linkname procAccess libc_access +//go:linkname procAdjtime libc_adjtime +//go:linkname procChdir libc_chdir +//go:linkname procChmod libc_chmod +//go:linkname procChown libc_chown +//go:linkname procChroot libc_chroot +//go:linkname procClose libc_close +//go:linkname procCreat libc_creat +//go:linkname procDup libc_dup +//go:linkname procDup2 libc_dup2 +//go:linkname procExit libc_exit +//go:linkname procFchdir libc_fchdir +//go:linkname procFchmod libc_fchmod +//go:linkname procFchmodat libc_fchmodat +//go:linkname procFchown libc_fchown +//go:linkname procFchownat libc_fchownat +//go:linkname procFdatasync libc_fdatasync +//go:linkname procFpathconf libc_fpathconf +//go:linkname procFstat libc_fstat +//go:linkname procFstatvfs libc_fstatvfs +//go:linkname procGetdents libc_getdents +//go:linkname procGetgid libc_getgid +//go:linkname procGetpid libc_getpid +//go:linkname procGetpgid libc_getpgid +//go:linkname procGetpgrp libc_getpgrp +//go:linkname procGeteuid libc_geteuid +//go:linkname procGetegid libc_getegid +//go:linkname procGetppid libc_getppid +//go:linkname procGetpriority libc_getpriority +//go:linkname procGetrlimit libc_getrlimit +//go:linkname procGetrusage libc_getrusage +//go:linkname procGettimeofday libc_gettimeofday +//go:linkname procGetuid libc_getuid +//go:linkname procKill libc_kill +//go:linkname procLchown libc_lchown +//go:linkname procLink libc_link +//go:linkname proc__xnet_llisten libc___xnet_llisten +//go:linkname procLstat libc_lstat +//go:linkname procMadvise libc_madvise +//go:linkname procMkdir libc_mkdir +//go:linkname procMkdirat libc_mkdirat +//go:linkname procMkfifo libc_mkfifo +//go:linkname procMkfifoat libc_mkfifoat +//go:linkname procMknod libc_mknod +//go:linkname procMknodat libc_mknodat +//go:linkname procMlock libc_mlock +//go:linkname procMlockall libc_mlockall +//go:linkname procMprotect libc_mprotect +//go:linkname procMunlock libc_munlock +//go:linkname procMunlockall libc_munlockall +//go:linkname procNanosleep libc_nanosleep +//go:linkname procOpen libc_open +//go:linkname procOpenat libc_openat +//go:linkname procPathconf libc_pathconf +//go:linkname procPause libc_pause +//go:linkname procPread libc_pread +//go:linkname procPwrite libc_pwrite +//go:linkname procread libc_read +//go:linkname procReadlink libc_readlink +//go:linkname procRename libc_rename +//go:linkname procRenameat libc_renameat +//go:linkname procRmdir libc_rmdir +//go:linkname proclseek libc_lseek +//go:linkname procSetegid libc_setegid +//go:linkname procSeteuid libc_seteuid +//go:linkname procSetgid libc_setgid +//go:linkname procSethostname libc_sethostname +//go:linkname procSetpgid libc_setpgid +//go:linkname procSetpriority libc_setpriority +//go:linkname procSetregid libc_setregid +//go:linkname procSetreuid libc_setreuid +//go:linkname procSetrlimit libc_setrlimit +//go:linkname procSetsid libc_setsid +//go:linkname procSetuid libc_setuid +//go:linkname procshutdown libc_shutdown +//go:linkname procStat libc_stat +//go:linkname procStatvfs libc_statvfs +//go:linkname procSymlink libc_symlink +//go:linkname procSync libc_sync +//go:linkname procTimes libc_times +//go:linkname procTruncate libc_truncate +//go:linkname procFsync libc_fsync +//go:linkname procFtruncate libc_ftruncate +//go:linkname procUmask libc_umask +//go:linkname procUname libc_uname +//go:linkname procumount libc_umount +//go:linkname procUnlink libc_unlink +//go:linkname procUnlinkat libc_unlinkat +//go:linkname procUstat libc_ustat +//go:linkname procUtime libc_utime +//go:linkname proc__xnet_bind libc___xnet_bind +//go:linkname proc__xnet_connect libc___xnet_connect +//go:linkname procmmap libc_mmap +//go:linkname procmunmap libc_munmap +//go:linkname proc__xnet_sendto libc___xnet_sendto +//go:linkname proc__xnet_socket libc___xnet_socket +//go:linkname proc__xnet_socketpair libc___xnet_socketpair +//go:linkname procwrite libc_write +//go:linkname proc__xnet_getsockopt libc___xnet_getsockopt +//go:linkname procgetpeername libc_getpeername +//go:linkname procsetsockopt libc_setsockopt +//go:linkname procrecvfrom libc_recvfrom +//go:linkname procsysconf libc_sysconf + +var ( + procpipe, + procgetsockname, + procGetcwd, + procgetgroups, + procsetgroups, + procwait4, + procgethostname, + procutimes, + procutimensat, + procfcntl, + procfutimesat, + procaccept, + proc__xnet_recvmsg, + proc__xnet_sendmsg, + procacct, + procioctl, + procAccess, + procAdjtime, + procChdir, + procChmod, + procChown, + procChroot, + procClose, + procCreat, + procDup, + procDup2, + procExit, + procFchdir, + procFchmod, + procFchmodat, + procFchown, + procFchownat, + procFdatasync, + procFpathconf, + procFstat, + procFstatvfs, + procGetdents, + procGetgid, + procGetpid, + procGetpgid, + procGetpgrp, + procGeteuid, + procGetegid, + procGetppid, + procGetpriority, + procGetrlimit, + procGetrusage, + procGettimeofday, + procGetuid, + procKill, + procLchown, + procLink, + proc__xnet_llisten, + procLstat, + procMadvise, + procMkdir, + procMkdirat, + procMkfifo, + procMkfifoat, + procMknod, + procMknodat, + procMlock, + procMlockall, + procMprotect, + procMunlock, + procMunlockall, + procNanosleep, + procOpen, + procOpenat, + procPathconf, + procPause, + procPread, + procPwrite, + procread, + procReadlink, + procRename, + procRenameat, + procRmdir, + proclseek, + procSetegid, + procSeteuid, + procSetgid, + procSethostname, + procSetpgid, + procSetpriority, + procSetregid, + procSetreuid, + procSetrlimit, + procSetsid, + procSetuid, + procshutdown, + procStat, + procStatvfs, + procSymlink, + procSync, + procTimes, + procTruncate, + procFsync, + procFtruncate, + procUmask, + procUname, + procumount, + procUnlink, + procUnlinkat, + procUstat, + procUtime, + proc__xnet_bind, + proc__xnet_connect, + procmmap, + procmunmap, + proc__xnet_sendto, + proc__xnet_socket, + proc__xnet_socketpair, + procwrite, + proc__xnet_getsockopt, + procgetpeername, + procsetsockopt, + procrecvfrom, + procsysconf syscallFunc +) + +func pipe(p *[2]_C_int) (n int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getcwd(buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int32(r0) + if e1 != 0 { + err = e1 + } + return +} + +func gethostname(buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func acct(path *byte) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Close(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Creat(path string, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0) + nfd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Exit(code int) { + sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0) + return +} + +func Fchdir(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fdatasync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Getgid() (gid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +func Getpid() (pid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + return +} + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Getpgrp() (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Geteuid() (euid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0) + euid = int(r0) + return +} + +func Getegid() (egid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0) + egid = int(r0) + return +} + +func Getppid() (ppid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0) + ppid = int(r0) + return +} + +func Getpriority(which int, who int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getuid() (uid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Listen(s int, backlog int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mlockall(flags int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mprotect(b []byte, prot int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Munlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Munlockall() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Pause() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func read(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + if len(buf) > 0 { + _p1 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Setegid(egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Seteuid(euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setgid(gid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Sethostname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setsid() (pid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Setuid(uid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Shutdown(s int, how int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Statvfs(path string, vfsstat *Statvfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Sync() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fsync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Umask(mask int) (oldmask int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0) + oldmask = int(r0) + return +} + +func Uname(buf *Utsname) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = e1 + } + return +} + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func write(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = e1 + } + return +} + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = e1 + } + return +} + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func sysconf(name int) (n int64, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsysconf)), 1, uintptr(name), 0, 0, 0, 0, 0) + n = int64(r0) + if e1 != 0 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go new file mode 100644 index 0000000..83bb935 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go new file mode 100644 index 0000000..2786773 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go @@ -0,0 +1,398 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAME_EXT = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_MAXSYSCALL = 490 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go new file mode 100644 index 0000000..09de240 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go @@ -0,0 +1,398 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAME_EXT = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_MAXSYSCALL = 490 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go new file mode 100644 index 0000000..b8c9aea --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go @@ -0,0 +1,358 @@ +// mksysnum_darwin.pl /usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS___SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_ATSOCKET = 206 + SYS_ATGETMSG = 207 + SYS_ATPUTMSG = 208 + SYS_ATPSNDREQ = 209 + SYS_ATPSNDRSP = 210 + SYS_ATPGETREQ = 211 + SYS_ATPGETRSP = 212 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SEM_GETVALUE = 274 + SYS_SEM_INIT = 275 + SYS_SEM_DESTROY = 276 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MAXSYSCALL = 440 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go new file mode 100644 index 0000000..26677eb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go @@ -0,0 +1,398 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm64,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAME_EXT = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_MAXSYSCALL = 490 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go new file mode 100644 index 0000000..b2c9ef8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go @@ -0,0 +1,315 @@ +// mksysnum_dragonfly.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,dragonfly + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void exit(int rval); } + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, \ + SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); } + SYS_ACCESS = 33 // { int access(char *path, int flags); } + SYS_CHFLAGS = 34 // { int chflags(char *path, int flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, int flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { int readlink(char *path, char *buf, int count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { pid_t vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(int from, int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_GETDOMAINNAME = 162 // { int getdomainname(char *domainname, int len); } + SYS_SETDOMAINNAME = 163 // { int setdomainname(char *domainname, int len); } + SYS_UNAME = 164 // { int uname(struct utsname *name); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, \ + SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, \ + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, \ + // SYS_NOSYS = 198; // { int nosys(void); } __syscall __syscall_args int + SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int truncate(char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, \ + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \ + SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, \ + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, \ + SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, \ + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, \ + SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,\ + SYS_FHSTATFS = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_AIO_READ = 318 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 319 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 320 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(u_char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, \ + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGRETURN = 344 // { int sigreturn(ucontext_t *sigcntxp); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,\ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,\ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, \ + SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } + SYS_LCHFLAGS = 391 // { int lchflags(char *path, int flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, \ + SYS_VARSYM_SET = 450 // { int varsym_set(int level, const char *name, const char *data); } + SYS_VARSYM_GET = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); } + SYS_VARSYM_LIST = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); } + SYS_EXEC_SYS_REGISTER = 465 // { int exec_sys_register(void *entry); } + SYS_EXEC_SYS_UNREGISTER = 466 // { int exec_sys_unregister(int id); } + SYS_SYS_CHECKPOINT = 467 // { int sys_checkpoint(int type, int fd, pid_t pid, int retval); } + SYS_MOUNTCTL = 468 // { int mountctl(const char *path, int op, int fd, const void *ctl, int ctllen, void *buf, int buflen); } + SYS_UMTX_SLEEP = 469 // { int umtx_sleep(volatile const int *ptr, int value, int timeout); } + SYS_UMTX_WAKEUP = 470 // { int umtx_wakeup(volatile const int *ptr, int count); } + SYS_JAIL_ATTACH = 471 // { int jail_attach(int jid); } + SYS_SET_TLS_AREA = 472 // { int set_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_GET_TLS_AREA = 473 // { int get_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_CLOSEFROM = 474 // { int closefrom(int fd); } + SYS_STAT = 475 // { int stat(const char *path, struct stat *ub); } + SYS_FSTAT = 476 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 477 // { int lstat(const char *path, struct stat *ub); } + SYS_FHSTAT = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, \ + SYS_GETDENTS = 480 // { int getdents(int fd, char *buf, size_t count); } + SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, \ + SYS_EXTACCEPT = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); } + SYS_EXTCONNECT = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); } + SYS_MCONTROL = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); } + SYS_VMSPACE_CREATE = 486 // { int vmspace_create(void *id, int type, void *data); } + SYS_VMSPACE_DESTROY = 487 // { int vmspace_destroy(void *id); } + SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, \ + SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, \ + SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, \ + SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, \ + SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, \ + SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, \ + SYS_EXTEXIT = 494 // { void extexit(int how, int status, void *addr); } + SYS_LWP_CREATE = 495 // { int lwp_create(struct lwp_params *params); } + SYS_LWP_GETTID = 496 // { lwpid_t lwp_gettid(void); } + SYS_LWP_KILL = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); } + SYS_LWP_RTPRIO = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); } + SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_STATVFS = 500 // { int statvfs(const char *path, struct statvfs *buf); } + SYS_FSTATVFS = 501 // { int fstatvfs(int fd, struct statvfs *buf); } + SYS_FHSTATVFS = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); } + SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, \ + SYS_OPENAT = 504 // { int openat(int fd, char *path, int flags, int mode); } + SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, \ + SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, \ + SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, \ + SYS_UNLINKAT = 508 // { int unlinkat(int fd, char *path, int flags); } + SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, \ + SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, \ + SYS_MQ_CLOSE = 511 // { int mq_close(mqd_t mqdes); } + SYS_MQ_UNLINK = 512 // { int mq_unlink(const char *name); } + SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, \ + SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, \ + SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, \ + SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, \ + SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, \ + SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, \ + SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, \ + SYS_IOPRIO_SET = 520 // { int ioprio_set(int which, int who, int prio); } + SYS_IOPRIO_GET = 521 // { int ioprio_get(int which, int who); } + SYS_CHROOT_KERNEL = 522 // { int chroot_kernel(char *path); } + SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_MKDIRAT = 524 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 525 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_SYMLINKAT = 528 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_SWAPOFF = 529 // { int swapoff(char *name); } + SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, \ + SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_EACCESS = 532 // { int eaccess(char *path, int flags); } + SYS_LPATHCONF = 533 // { int lpathconf(char *path, int name); } + SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); } + SYS_VMM_GUEST_SYNC_ADDR = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); } + SYS_PROCCTL = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); } + SYS_CHFLAGSAT = 537 // { int chflagsat(int fd, const char *path, int flags, int atflags);} + SYS_PIPE2 = 538 // { int pipe2(int *fildes, int flags); } + SYS_UTIMENSAT = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); } + SYS_FUTIMENS = 540 // { int futimens(int fd, const struct timespec *ts); } + SYS_ACCEPT4 = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); } + SYS_LWP_SETNAME = 542 // { int lwp_setname(lwpid_t tid, const char *name); } + SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_LWP_SETAFFINITY = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); } + SYS_LWP_GETAFFINITY = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); } + SYS_LWP_CREATE2 = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go new file mode 100644 index 0000000..262a845 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go @@ -0,0 +1,351 @@ +// mksysnum_freebsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); } + SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go new file mode 100644 index 0000000..81722ac --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go @@ -0,0 +1,353 @@ +// mksysnum_freebsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go new file mode 100644 index 0000000..206b9f6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go @@ -0,0 +1,351 @@ +// mksysnum_freebsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); } + SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go new file mode 100644 index 0000000..cef4fed --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -0,0 +1,388 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86OLD = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_VM86 = 166 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_SET_THREAD_AREA = 243 + SYS_GET_THREAD_AREA = 244 + SYS_IO_SETUP = 245 + SYS_IO_DESTROY = 246 + SYS_IO_GETEVENTS = 247 + SYS_IO_SUBMIT = 248 + SYS_IO_CANCEL = 249 + SYS_FADVISE64 = 250 + SYS_EXIT_GROUP = 252 + SYS_LOOKUP_DCOOKIE = 253 + SYS_EPOLL_CREATE = 254 + SYS_EPOLL_CTL = 255 + SYS_EPOLL_WAIT = 256 + SYS_REMAP_FILE_PAGES = 257 + SYS_SET_TID_ADDRESS = 258 + SYS_TIMER_CREATE = 259 + SYS_TIMER_SETTIME = 260 + SYS_TIMER_GETTIME = 261 + SYS_TIMER_GETOVERRUN = 262 + SYS_TIMER_DELETE = 263 + SYS_CLOCK_SETTIME = 264 + SYS_CLOCK_GETTIME = 265 + SYS_CLOCK_GETRES = 266 + SYS_CLOCK_NANOSLEEP = 267 + SYS_STATFS64 = 268 + SYS_FSTATFS64 = 269 + SYS_TGKILL = 270 + SYS_UTIMES = 271 + SYS_FADVISE64_64 = 272 + SYS_VSERVER = 273 + SYS_MBIND = 274 + SYS_GET_MEMPOLICY = 275 + SYS_SET_MEMPOLICY = 276 + SYS_MQ_OPEN = 277 + SYS_MQ_UNLINK = 278 + SYS_MQ_TIMEDSEND = 279 + SYS_MQ_TIMEDRECEIVE = 280 + SYS_MQ_NOTIFY = 281 + SYS_MQ_GETSETATTR = 282 + SYS_KEXEC_LOAD = 283 + SYS_WAITID = 284 + SYS_ADD_KEY = 286 + SYS_REQUEST_KEY = 287 + SYS_KEYCTL = 288 + SYS_IOPRIO_SET = 289 + SYS_IOPRIO_GET = 290 + SYS_INOTIFY_INIT = 291 + SYS_INOTIFY_ADD_WATCH = 292 + SYS_INOTIFY_RM_WATCH = 293 + SYS_MIGRATE_PAGES = 294 + SYS_OPENAT = 295 + SYS_MKDIRAT = 296 + SYS_MKNODAT = 297 + SYS_FCHOWNAT = 298 + SYS_FUTIMESAT = 299 + SYS_FSTATAT64 = 300 + SYS_UNLINKAT = 301 + SYS_RENAMEAT = 302 + SYS_LINKAT = 303 + SYS_SYMLINKAT = 304 + SYS_READLINKAT = 305 + SYS_FCHMODAT = 306 + SYS_FACCESSAT = 307 + SYS_PSELECT6 = 308 + SYS_PPOLL = 309 + SYS_UNSHARE = 310 + SYS_SET_ROBUST_LIST = 311 + SYS_GET_ROBUST_LIST = 312 + SYS_SPLICE = 313 + SYS_SYNC_FILE_RANGE = 314 + SYS_TEE = 315 + SYS_VMSPLICE = 316 + SYS_MOVE_PAGES = 317 + SYS_GETCPU = 318 + SYS_EPOLL_PWAIT = 319 + SYS_UTIMENSAT = 320 + SYS_SIGNALFD = 321 + SYS_TIMERFD_CREATE = 322 + SYS_EVENTFD = 323 + SYS_FALLOCATE = 324 + SYS_TIMERFD_SETTIME = 325 + SYS_TIMERFD_GETTIME = 326 + SYS_SIGNALFD4 = 327 + SYS_EVENTFD2 = 328 + SYS_EPOLL_CREATE1 = 329 + SYS_DUP3 = 330 + SYS_PIPE2 = 331 + SYS_INOTIFY_INIT1 = 332 + SYS_PREADV = 333 + SYS_PWRITEV = 334 + SYS_RT_TGSIGQUEUEINFO = 335 + SYS_PERF_EVENT_OPEN = 336 + SYS_RECVMMSG = 337 + SYS_FANOTIFY_INIT = 338 + SYS_FANOTIFY_MARK = 339 + SYS_PRLIMIT64 = 340 + SYS_NAME_TO_HANDLE_AT = 341 + SYS_OPEN_BY_HANDLE_AT = 342 + SYS_CLOCK_ADJTIME = 343 + SYS_SYNCFS = 344 + SYS_SENDMMSG = 345 + SYS_SETNS = 346 + SYS_PROCESS_VM_READV = 347 + SYS_PROCESS_VM_WRITEV = 348 + SYS_KCMP = 349 + SYS_FINIT_MODULE = 350 + SYS_SCHED_SETATTR = 351 + SYS_SCHED_GETATTR = 352 + SYS_RENAMEAT2 = 353 + SYS_SECCOMP = 354 + SYS_GETRANDOM = 355 + SYS_MEMFD_CREATE = 356 + SYS_BPF = 357 + SYS_EXECVEAT = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_USERFAULTFD = 374 + SYS_MEMBARRIER = 375 + SYS_MLOCK2 = 376 + SYS_COPY_FILE_RANGE = 377 + SYS_PREADV2 = 378 + SYS_PWRITEV2 = 379 + SYS_PKEY_MPROTECT = 380 + SYS_PKEY_ALLOC = 381 + SYS_PKEY_FREE = 382 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go new file mode 100644 index 0000000..49bfa12 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -0,0 +1,341 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,linux + +package unix + +const ( + SYS_READ = 0 + SYS_WRITE = 1 + SYS_OPEN = 2 + SYS_CLOSE = 3 + SYS_STAT = 4 + SYS_FSTAT = 5 + SYS_LSTAT = 6 + SYS_POLL = 7 + SYS_LSEEK = 8 + SYS_MMAP = 9 + SYS_MPROTECT = 10 + SYS_MUNMAP = 11 + SYS_BRK = 12 + SYS_RT_SIGACTION = 13 + SYS_RT_SIGPROCMASK = 14 + SYS_RT_SIGRETURN = 15 + SYS_IOCTL = 16 + SYS_PREAD64 = 17 + SYS_PWRITE64 = 18 + SYS_READV = 19 + SYS_WRITEV = 20 + SYS_ACCESS = 21 + SYS_PIPE = 22 + SYS_SELECT = 23 + SYS_SCHED_YIELD = 24 + SYS_MREMAP = 25 + SYS_MSYNC = 26 + SYS_MINCORE = 27 + SYS_MADVISE = 28 + SYS_SHMGET = 29 + SYS_SHMAT = 30 + SYS_SHMCTL = 31 + SYS_DUP = 32 + SYS_DUP2 = 33 + SYS_PAUSE = 34 + SYS_NANOSLEEP = 35 + SYS_GETITIMER = 36 + SYS_ALARM = 37 + SYS_SETITIMER = 38 + SYS_GETPID = 39 + SYS_SENDFILE = 40 + SYS_SOCKET = 41 + SYS_CONNECT = 42 + SYS_ACCEPT = 43 + SYS_SENDTO = 44 + SYS_RECVFROM = 45 + SYS_SENDMSG = 46 + SYS_RECVMSG = 47 + SYS_SHUTDOWN = 48 + SYS_BIND = 49 + SYS_LISTEN = 50 + SYS_GETSOCKNAME = 51 + SYS_GETPEERNAME = 52 + SYS_SOCKETPAIR = 53 + SYS_SETSOCKOPT = 54 + SYS_GETSOCKOPT = 55 + SYS_CLONE = 56 + SYS_FORK = 57 + SYS_VFORK = 58 + SYS_EXECVE = 59 + SYS_EXIT = 60 + SYS_WAIT4 = 61 + SYS_KILL = 62 + SYS_UNAME = 63 + SYS_SEMGET = 64 + SYS_SEMOP = 65 + SYS_SEMCTL = 66 + SYS_SHMDT = 67 + SYS_MSGGET = 68 + SYS_MSGSND = 69 + SYS_MSGRCV = 70 + SYS_MSGCTL = 71 + SYS_FCNTL = 72 + SYS_FLOCK = 73 + SYS_FSYNC = 74 + SYS_FDATASYNC = 75 + SYS_TRUNCATE = 76 + SYS_FTRUNCATE = 77 + SYS_GETDENTS = 78 + SYS_GETCWD = 79 + SYS_CHDIR = 80 + SYS_FCHDIR = 81 + SYS_RENAME = 82 + SYS_MKDIR = 83 + SYS_RMDIR = 84 + SYS_CREAT = 85 + SYS_LINK = 86 + SYS_UNLINK = 87 + SYS_SYMLINK = 88 + SYS_READLINK = 89 + SYS_CHMOD = 90 + SYS_FCHMOD = 91 + SYS_CHOWN = 92 + SYS_FCHOWN = 93 + SYS_LCHOWN = 94 + SYS_UMASK = 95 + SYS_GETTIMEOFDAY = 96 + SYS_GETRLIMIT = 97 + SYS_GETRUSAGE = 98 + SYS_SYSINFO = 99 + SYS_TIMES = 100 + SYS_PTRACE = 101 + SYS_GETUID = 102 + SYS_SYSLOG = 103 + SYS_GETGID = 104 + SYS_SETUID = 105 + SYS_SETGID = 106 + SYS_GETEUID = 107 + SYS_GETEGID = 108 + SYS_SETPGID = 109 + SYS_GETPPID = 110 + SYS_GETPGRP = 111 + SYS_SETSID = 112 + SYS_SETREUID = 113 + SYS_SETREGID = 114 + SYS_GETGROUPS = 115 + SYS_SETGROUPS = 116 + SYS_SETRESUID = 117 + SYS_GETRESUID = 118 + SYS_SETRESGID = 119 + SYS_GETRESGID = 120 + SYS_GETPGID = 121 + SYS_SETFSUID = 122 + SYS_SETFSGID = 123 + SYS_GETSID = 124 + SYS_CAPGET = 125 + SYS_CAPSET = 126 + SYS_RT_SIGPENDING = 127 + SYS_RT_SIGTIMEDWAIT = 128 + SYS_RT_SIGQUEUEINFO = 129 + SYS_RT_SIGSUSPEND = 130 + SYS_SIGALTSTACK = 131 + SYS_UTIME = 132 + SYS_MKNOD = 133 + SYS_USELIB = 134 + SYS_PERSONALITY = 135 + SYS_USTAT = 136 + SYS_STATFS = 137 + SYS_FSTATFS = 138 + SYS_SYSFS = 139 + SYS_GETPRIORITY = 140 + SYS_SETPRIORITY = 141 + SYS_SCHED_SETPARAM = 142 + SYS_SCHED_GETPARAM = 143 + SYS_SCHED_SETSCHEDULER = 144 + SYS_SCHED_GETSCHEDULER = 145 + SYS_SCHED_GET_PRIORITY_MAX = 146 + SYS_SCHED_GET_PRIORITY_MIN = 147 + SYS_SCHED_RR_GET_INTERVAL = 148 + SYS_MLOCK = 149 + SYS_MUNLOCK = 150 + SYS_MLOCKALL = 151 + SYS_MUNLOCKALL = 152 + SYS_VHANGUP = 153 + SYS_MODIFY_LDT = 154 + SYS_PIVOT_ROOT = 155 + SYS__SYSCTL = 156 + SYS_PRCTL = 157 + SYS_ARCH_PRCTL = 158 + SYS_ADJTIMEX = 159 + SYS_SETRLIMIT = 160 + SYS_CHROOT = 161 + SYS_SYNC = 162 + SYS_ACCT = 163 + SYS_SETTIMEOFDAY = 164 + SYS_MOUNT = 165 + SYS_UMOUNT2 = 166 + SYS_SWAPON = 167 + SYS_SWAPOFF = 168 + SYS_REBOOT = 169 + SYS_SETHOSTNAME = 170 + SYS_SETDOMAINNAME = 171 + SYS_IOPL = 172 + SYS_IOPERM = 173 + SYS_CREATE_MODULE = 174 + SYS_INIT_MODULE = 175 + SYS_DELETE_MODULE = 176 + SYS_GET_KERNEL_SYMS = 177 + SYS_QUERY_MODULE = 178 + SYS_QUOTACTL = 179 + SYS_NFSSERVCTL = 180 + SYS_GETPMSG = 181 + SYS_PUTPMSG = 182 + SYS_AFS_SYSCALL = 183 + SYS_TUXCALL = 184 + SYS_SECURITY = 185 + SYS_GETTID = 186 + SYS_READAHEAD = 187 + SYS_SETXATTR = 188 + SYS_LSETXATTR = 189 + SYS_FSETXATTR = 190 + SYS_GETXATTR = 191 + SYS_LGETXATTR = 192 + SYS_FGETXATTR = 193 + SYS_LISTXATTR = 194 + SYS_LLISTXATTR = 195 + SYS_FLISTXATTR = 196 + SYS_REMOVEXATTR = 197 + SYS_LREMOVEXATTR = 198 + SYS_FREMOVEXATTR = 199 + SYS_TKILL = 200 + SYS_TIME = 201 + SYS_FUTEX = 202 + SYS_SCHED_SETAFFINITY = 203 + SYS_SCHED_GETAFFINITY = 204 + SYS_SET_THREAD_AREA = 205 + SYS_IO_SETUP = 206 + SYS_IO_DESTROY = 207 + SYS_IO_GETEVENTS = 208 + SYS_IO_SUBMIT = 209 + SYS_IO_CANCEL = 210 + SYS_GET_THREAD_AREA = 211 + SYS_LOOKUP_DCOOKIE = 212 + SYS_EPOLL_CREATE = 213 + SYS_EPOLL_CTL_OLD = 214 + SYS_EPOLL_WAIT_OLD = 215 + SYS_REMAP_FILE_PAGES = 216 + SYS_GETDENTS64 = 217 + SYS_SET_TID_ADDRESS = 218 + SYS_RESTART_SYSCALL = 219 + SYS_SEMTIMEDOP = 220 + SYS_FADVISE64 = 221 + SYS_TIMER_CREATE = 222 + SYS_TIMER_SETTIME = 223 + SYS_TIMER_GETTIME = 224 + SYS_TIMER_GETOVERRUN = 225 + SYS_TIMER_DELETE = 226 + SYS_CLOCK_SETTIME = 227 + SYS_CLOCK_GETTIME = 228 + SYS_CLOCK_GETRES = 229 + SYS_CLOCK_NANOSLEEP = 230 + SYS_EXIT_GROUP = 231 + SYS_EPOLL_WAIT = 232 + SYS_EPOLL_CTL = 233 + SYS_TGKILL = 234 + SYS_UTIMES = 235 + SYS_VSERVER = 236 + SYS_MBIND = 237 + SYS_SET_MEMPOLICY = 238 + SYS_GET_MEMPOLICY = 239 + SYS_MQ_OPEN = 240 + SYS_MQ_UNLINK = 241 + SYS_MQ_TIMEDSEND = 242 + SYS_MQ_TIMEDRECEIVE = 243 + SYS_MQ_NOTIFY = 244 + SYS_MQ_GETSETATTR = 245 + SYS_KEXEC_LOAD = 246 + SYS_WAITID = 247 + SYS_ADD_KEY = 248 + SYS_REQUEST_KEY = 249 + SYS_KEYCTL = 250 + SYS_IOPRIO_SET = 251 + SYS_IOPRIO_GET = 252 + SYS_INOTIFY_INIT = 253 + SYS_INOTIFY_ADD_WATCH = 254 + SYS_INOTIFY_RM_WATCH = 255 + SYS_MIGRATE_PAGES = 256 + SYS_OPENAT = 257 + SYS_MKDIRAT = 258 + SYS_MKNODAT = 259 + SYS_FCHOWNAT = 260 + SYS_FUTIMESAT = 261 + SYS_NEWFSTATAT = 262 + SYS_UNLINKAT = 263 + SYS_RENAMEAT = 264 + SYS_LINKAT = 265 + SYS_SYMLINKAT = 266 + SYS_READLINKAT = 267 + SYS_FCHMODAT = 268 + SYS_FACCESSAT = 269 + SYS_PSELECT6 = 270 + SYS_PPOLL = 271 + SYS_UNSHARE = 272 + SYS_SET_ROBUST_LIST = 273 + SYS_GET_ROBUST_LIST = 274 + SYS_SPLICE = 275 + SYS_TEE = 276 + SYS_SYNC_FILE_RANGE = 277 + SYS_VMSPLICE = 278 + SYS_MOVE_PAGES = 279 + SYS_UTIMENSAT = 280 + SYS_EPOLL_PWAIT = 281 + SYS_SIGNALFD = 282 + SYS_TIMERFD_CREATE = 283 + SYS_EVENTFD = 284 + SYS_FALLOCATE = 285 + SYS_TIMERFD_SETTIME = 286 + SYS_TIMERFD_GETTIME = 287 + SYS_ACCEPT4 = 288 + SYS_SIGNALFD4 = 289 + SYS_EVENTFD2 = 290 + SYS_EPOLL_CREATE1 = 291 + SYS_DUP3 = 292 + SYS_PIPE2 = 293 + SYS_INOTIFY_INIT1 = 294 + SYS_PREADV = 295 + SYS_PWRITEV = 296 + SYS_RT_TGSIGQUEUEINFO = 297 + SYS_PERF_EVENT_OPEN = 298 + SYS_RECVMMSG = 299 + SYS_FANOTIFY_INIT = 300 + SYS_FANOTIFY_MARK = 301 + SYS_PRLIMIT64 = 302 + SYS_NAME_TO_HANDLE_AT = 303 + SYS_OPEN_BY_HANDLE_AT = 304 + SYS_CLOCK_ADJTIME = 305 + SYS_SYNCFS = 306 + SYS_SENDMMSG = 307 + SYS_SETNS = 308 + SYS_GETCPU = 309 + SYS_PROCESS_VM_READV = 310 + SYS_PROCESS_VM_WRITEV = 311 + SYS_KCMP = 312 + SYS_FINIT_MODULE = 313 + SYS_SCHED_SETATTR = 314 + SYS_SCHED_GETATTR = 315 + SYS_RENAMEAT2 = 316 + SYS_SECCOMP = 317 + SYS_GETRANDOM = 318 + SYS_MEMFD_CREATE = 319 + SYS_KEXEC_FILE_LOAD = 320 + SYS_BPF = 321 + SYS_EXECVEAT = 322 + SYS_USERFAULTFD = 323 + SYS_MEMBARRIER = 324 + SYS_MLOCK2 = 325 + SYS_COPY_FILE_RANGE = 326 + SYS_PREADV2 = 327 + SYS_PWRITEV2 = 328 + SYS_PKEY_MPROTECT = 329 + SYS_PKEY_ALLOC = 330 + SYS_PKEY_FREE = 331 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go new file mode 100644 index 0000000..97b182e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -0,0 +1,361 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_PTRACE = 26 + SYS_PAUSE = 29 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_VHANGUP = 111 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_GETDENTS64 = 217 + SYS_PIVOT_ROOT = 218 + SYS_MINCORE = 219 + SYS_MADVISE = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_LOOKUP_DCOOKIE = 249 + SYS_EPOLL_CREATE = 250 + SYS_EPOLL_CTL = 251 + SYS_EPOLL_WAIT = 252 + SYS_REMAP_FILE_PAGES = 253 + SYS_SET_TID_ADDRESS = 256 + SYS_TIMER_CREATE = 257 + SYS_TIMER_SETTIME = 258 + SYS_TIMER_GETTIME = 259 + SYS_TIMER_GETOVERRUN = 260 + SYS_TIMER_DELETE = 261 + SYS_CLOCK_SETTIME = 262 + SYS_CLOCK_GETTIME = 263 + SYS_CLOCK_GETRES = 264 + SYS_CLOCK_NANOSLEEP = 265 + SYS_STATFS64 = 266 + SYS_FSTATFS64 = 267 + SYS_TGKILL = 268 + SYS_UTIMES = 269 + SYS_ARM_FADVISE64_64 = 270 + SYS_PCICONFIG_IOBASE = 271 + SYS_PCICONFIG_READ = 272 + SYS_PCICONFIG_WRITE = 273 + SYS_MQ_OPEN = 274 + SYS_MQ_UNLINK = 275 + SYS_MQ_TIMEDSEND = 276 + SYS_MQ_TIMEDRECEIVE = 277 + SYS_MQ_NOTIFY = 278 + SYS_MQ_GETSETATTR = 279 + SYS_WAITID = 280 + SYS_SOCKET = 281 + SYS_BIND = 282 + SYS_CONNECT = 283 + SYS_LISTEN = 284 + SYS_ACCEPT = 285 + SYS_GETSOCKNAME = 286 + SYS_GETPEERNAME = 287 + SYS_SOCKETPAIR = 288 + SYS_SEND = 289 + SYS_SENDTO = 290 + SYS_RECV = 291 + SYS_RECVFROM = 292 + SYS_SHUTDOWN = 293 + SYS_SETSOCKOPT = 294 + SYS_GETSOCKOPT = 295 + SYS_SENDMSG = 296 + SYS_RECVMSG = 297 + SYS_SEMOP = 298 + SYS_SEMGET = 299 + SYS_SEMCTL = 300 + SYS_MSGSND = 301 + SYS_MSGRCV = 302 + SYS_MSGGET = 303 + SYS_MSGCTL = 304 + SYS_SHMAT = 305 + SYS_SHMDT = 306 + SYS_SHMGET = 307 + SYS_SHMCTL = 308 + SYS_ADD_KEY = 309 + SYS_REQUEST_KEY = 310 + SYS_KEYCTL = 311 + SYS_SEMTIMEDOP = 312 + SYS_VSERVER = 313 + SYS_IOPRIO_SET = 314 + SYS_IOPRIO_GET = 315 + SYS_INOTIFY_INIT = 316 + SYS_INOTIFY_ADD_WATCH = 317 + SYS_INOTIFY_RM_WATCH = 318 + SYS_MBIND = 319 + SYS_GET_MEMPOLICY = 320 + SYS_SET_MEMPOLICY = 321 + SYS_OPENAT = 322 + SYS_MKDIRAT = 323 + SYS_MKNODAT = 324 + SYS_FCHOWNAT = 325 + SYS_FUTIMESAT = 326 + SYS_FSTATAT64 = 327 + SYS_UNLINKAT = 328 + SYS_RENAMEAT = 329 + SYS_LINKAT = 330 + SYS_SYMLINKAT = 331 + SYS_READLINKAT = 332 + SYS_FCHMODAT = 333 + SYS_FACCESSAT = 334 + SYS_PSELECT6 = 335 + SYS_PPOLL = 336 + SYS_UNSHARE = 337 + SYS_SET_ROBUST_LIST = 338 + SYS_GET_ROBUST_LIST = 339 + SYS_SPLICE = 340 + SYS_ARM_SYNC_FILE_RANGE = 341 + SYS_TEE = 342 + SYS_VMSPLICE = 343 + SYS_MOVE_PAGES = 344 + SYS_GETCPU = 345 + SYS_EPOLL_PWAIT = 346 + SYS_KEXEC_LOAD = 347 + SYS_UTIMENSAT = 348 + SYS_SIGNALFD = 349 + SYS_TIMERFD_CREATE = 350 + SYS_EVENTFD = 351 + SYS_FALLOCATE = 352 + SYS_TIMERFD_SETTIME = 353 + SYS_TIMERFD_GETTIME = 354 + SYS_SIGNALFD4 = 355 + SYS_EVENTFD2 = 356 + SYS_EPOLL_CREATE1 = 357 + SYS_DUP3 = 358 + SYS_PIPE2 = 359 + SYS_INOTIFY_INIT1 = 360 + SYS_PREADV = 361 + SYS_PWRITEV = 362 + SYS_RT_TGSIGQUEUEINFO = 363 + SYS_PERF_EVENT_OPEN = 364 + SYS_RECVMMSG = 365 + SYS_ACCEPT4 = 366 + SYS_FANOTIFY_INIT = 367 + SYS_FANOTIFY_MARK = 368 + SYS_PRLIMIT64 = 369 + SYS_NAME_TO_HANDLE_AT = 370 + SYS_OPEN_BY_HANDLE_AT = 371 + SYS_CLOCK_ADJTIME = 372 + SYS_SYNCFS = 373 + SYS_SENDMMSG = 374 + SYS_SETNS = 375 + SYS_PROCESS_VM_READV = 376 + SYS_PROCESS_VM_WRITEV = 377 + SYS_KCMP = 378 + SYS_FINIT_MODULE = 379 + SYS_SCHED_SETATTR = 380 + SYS_SCHED_GETATTR = 381 + SYS_RENAMEAT2 = 382 + SYS_SECCOMP = 383 + SYS_GETRANDOM = 384 + SYS_MEMFD_CREATE = 385 + SYS_BPF = 386 + SYS_EXECVEAT = 387 + SYS_USERFAULTFD = 388 + SYS_MEMBARRIER = 389 + SYS_MLOCK2 = 390 + SYS_COPY_FILE_RANGE = 391 + SYS_PREADV2 = 392 + SYS_PWRITEV2 = 393 + SYS_PKEY_MPROTECT = 394 + SYS_PKEY_ALLOC = 395 + SYS_PKEY_FREE = 396 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go new file mode 100644 index 0000000..6407843 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -0,0 +1,285 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,linux + +package unix + +const ( + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_RENAMEAT = 38 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRLIMIT = 163 + SYS_SETRLIMIT = 164 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go new file mode 100644 index 0000000..939567c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -0,0 +1,374 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips,linux + +package unix + +const ( + SYS_SYSCALL = 4000 + SYS_EXIT = 4001 + SYS_FORK = 4002 + SYS_READ = 4003 + SYS_WRITE = 4004 + SYS_OPEN = 4005 + SYS_CLOSE = 4006 + SYS_WAITPID = 4007 + SYS_CREAT = 4008 + SYS_LINK = 4009 + SYS_UNLINK = 4010 + SYS_EXECVE = 4011 + SYS_CHDIR = 4012 + SYS_TIME = 4013 + SYS_MKNOD = 4014 + SYS_CHMOD = 4015 + SYS_LCHOWN = 4016 + SYS_BREAK = 4017 + SYS_UNUSED18 = 4018 + SYS_LSEEK = 4019 + SYS_GETPID = 4020 + SYS_MOUNT = 4021 + SYS_UMOUNT = 4022 + SYS_SETUID = 4023 + SYS_GETUID = 4024 + SYS_STIME = 4025 + SYS_PTRACE = 4026 + SYS_ALARM = 4027 + SYS_UNUSED28 = 4028 + SYS_PAUSE = 4029 + SYS_UTIME = 4030 + SYS_STTY = 4031 + SYS_GTTY = 4032 + SYS_ACCESS = 4033 + SYS_NICE = 4034 + SYS_FTIME = 4035 + SYS_SYNC = 4036 + SYS_KILL = 4037 + SYS_RENAME = 4038 + SYS_MKDIR = 4039 + SYS_RMDIR = 4040 + SYS_DUP = 4041 + SYS_PIPE = 4042 + SYS_TIMES = 4043 + SYS_PROF = 4044 + SYS_BRK = 4045 + SYS_SETGID = 4046 + SYS_GETGID = 4047 + SYS_SIGNAL = 4048 + SYS_GETEUID = 4049 + SYS_GETEGID = 4050 + SYS_ACCT = 4051 + SYS_UMOUNT2 = 4052 + SYS_LOCK = 4053 + SYS_IOCTL = 4054 + SYS_FCNTL = 4055 + SYS_MPX = 4056 + SYS_SETPGID = 4057 + SYS_ULIMIT = 4058 + SYS_UNUSED59 = 4059 + SYS_UMASK = 4060 + SYS_CHROOT = 4061 + SYS_USTAT = 4062 + SYS_DUP2 = 4063 + SYS_GETPPID = 4064 + SYS_GETPGRP = 4065 + SYS_SETSID = 4066 + SYS_SIGACTION = 4067 + SYS_SGETMASK = 4068 + SYS_SSETMASK = 4069 + SYS_SETREUID = 4070 + SYS_SETREGID = 4071 + SYS_SIGSUSPEND = 4072 + SYS_SIGPENDING = 4073 + SYS_SETHOSTNAME = 4074 + SYS_SETRLIMIT = 4075 + SYS_GETRLIMIT = 4076 + SYS_GETRUSAGE = 4077 + SYS_GETTIMEOFDAY = 4078 + SYS_SETTIMEOFDAY = 4079 + SYS_GETGROUPS = 4080 + SYS_SETGROUPS = 4081 + SYS_RESERVED82 = 4082 + SYS_SYMLINK = 4083 + SYS_UNUSED84 = 4084 + SYS_READLINK = 4085 + SYS_USELIB = 4086 + SYS_SWAPON = 4087 + SYS_REBOOT = 4088 + SYS_READDIR = 4089 + SYS_MMAP = 4090 + SYS_MUNMAP = 4091 + SYS_TRUNCATE = 4092 + SYS_FTRUNCATE = 4093 + SYS_FCHMOD = 4094 + SYS_FCHOWN = 4095 + SYS_GETPRIORITY = 4096 + SYS_SETPRIORITY = 4097 + SYS_PROFIL = 4098 + SYS_STATFS = 4099 + SYS_FSTATFS = 4100 + SYS_IOPERM = 4101 + SYS_SOCKETCALL = 4102 + SYS_SYSLOG = 4103 + SYS_SETITIMER = 4104 + SYS_GETITIMER = 4105 + SYS_STAT = 4106 + SYS_LSTAT = 4107 + SYS_FSTAT = 4108 + SYS_UNUSED109 = 4109 + SYS_IOPL = 4110 + SYS_VHANGUP = 4111 + SYS_IDLE = 4112 + SYS_VM86 = 4113 + SYS_WAIT4 = 4114 + SYS_SWAPOFF = 4115 + SYS_SYSINFO = 4116 + SYS_IPC = 4117 + SYS_FSYNC = 4118 + SYS_SIGRETURN = 4119 + SYS_CLONE = 4120 + SYS_SETDOMAINNAME = 4121 + SYS_UNAME = 4122 + SYS_MODIFY_LDT = 4123 + SYS_ADJTIMEX = 4124 + SYS_MPROTECT = 4125 + SYS_SIGPROCMASK = 4126 + SYS_CREATE_MODULE = 4127 + SYS_INIT_MODULE = 4128 + SYS_DELETE_MODULE = 4129 + SYS_GET_KERNEL_SYMS = 4130 + SYS_QUOTACTL = 4131 + SYS_GETPGID = 4132 + SYS_FCHDIR = 4133 + SYS_BDFLUSH = 4134 + SYS_SYSFS = 4135 + SYS_PERSONALITY = 4136 + SYS_AFS_SYSCALL = 4137 + SYS_SETFSUID = 4138 + SYS_SETFSGID = 4139 + SYS__LLSEEK = 4140 + SYS_GETDENTS = 4141 + SYS__NEWSELECT = 4142 + SYS_FLOCK = 4143 + SYS_MSYNC = 4144 + SYS_READV = 4145 + SYS_WRITEV = 4146 + SYS_CACHEFLUSH = 4147 + SYS_CACHECTL = 4148 + SYS_SYSMIPS = 4149 + SYS_UNUSED150 = 4150 + SYS_GETSID = 4151 + SYS_FDATASYNC = 4152 + SYS__SYSCTL = 4153 + SYS_MLOCK = 4154 + SYS_MUNLOCK = 4155 + SYS_MLOCKALL = 4156 + SYS_MUNLOCKALL = 4157 + SYS_SCHED_SETPARAM = 4158 + SYS_SCHED_GETPARAM = 4159 + SYS_SCHED_SETSCHEDULER = 4160 + SYS_SCHED_GETSCHEDULER = 4161 + SYS_SCHED_YIELD = 4162 + SYS_SCHED_GET_PRIORITY_MAX = 4163 + SYS_SCHED_GET_PRIORITY_MIN = 4164 + SYS_SCHED_RR_GET_INTERVAL = 4165 + SYS_NANOSLEEP = 4166 + SYS_MREMAP = 4167 + SYS_ACCEPT = 4168 + SYS_BIND = 4169 + SYS_CONNECT = 4170 + SYS_GETPEERNAME = 4171 + SYS_GETSOCKNAME = 4172 + SYS_GETSOCKOPT = 4173 + SYS_LISTEN = 4174 + SYS_RECV = 4175 + SYS_RECVFROM = 4176 + SYS_RECVMSG = 4177 + SYS_SEND = 4178 + SYS_SENDMSG = 4179 + SYS_SENDTO = 4180 + SYS_SETSOCKOPT = 4181 + SYS_SHUTDOWN = 4182 + SYS_SOCKET = 4183 + SYS_SOCKETPAIR = 4184 + SYS_SETRESUID = 4185 + SYS_GETRESUID = 4186 + SYS_QUERY_MODULE = 4187 + SYS_POLL = 4188 + SYS_NFSSERVCTL = 4189 + SYS_SETRESGID = 4190 + SYS_GETRESGID = 4191 + SYS_PRCTL = 4192 + SYS_RT_SIGRETURN = 4193 + SYS_RT_SIGACTION = 4194 + SYS_RT_SIGPROCMASK = 4195 + SYS_RT_SIGPENDING = 4196 + SYS_RT_SIGTIMEDWAIT = 4197 + SYS_RT_SIGQUEUEINFO = 4198 + SYS_RT_SIGSUSPEND = 4199 + SYS_PREAD64 = 4200 + SYS_PWRITE64 = 4201 + SYS_CHOWN = 4202 + SYS_GETCWD = 4203 + SYS_CAPGET = 4204 + SYS_CAPSET = 4205 + SYS_SIGALTSTACK = 4206 + SYS_SENDFILE = 4207 + SYS_GETPMSG = 4208 + SYS_PUTPMSG = 4209 + SYS_MMAP2 = 4210 + SYS_TRUNCATE64 = 4211 + SYS_FTRUNCATE64 = 4212 + SYS_STAT64 = 4213 + SYS_LSTAT64 = 4214 + SYS_FSTAT64 = 4215 + SYS_PIVOT_ROOT = 4216 + SYS_MINCORE = 4217 + SYS_MADVISE = 4218 + SYS_GETDENTS64 = 4219 + SYS_FCNTL64 = 4220 + SYS_RESERVED221 = 4221 + SYS_GETTID = 4222 + SYS_READAHEAD = 4223 + SYS_SETXATTR = 4224 + SYS_LSETXATTR = 4225 + SYS_FSETXATTR = 4226 + SYS_GETXATTR = 4227 + SYS_LGETXATTR = 4228 + SYS_FGETXATTR = 4229 + SYS_LISTXATTR = 4230 + SYS_LLISTXATTR = 4231 + SYS_FLISTXATTR = 4232 + SYS_REMOVEXATTR = 4233 + SYS_LREMOVEXATTR = 4234 + SYS_FREMOVEXATTR = 4235 + SYS_TKILL = 4236 + SYS_SENDFILE64 = 4237 + SYS_FUTEX = 4238 + SYS_SCHED_SETAFFINITY = 4239 + SYS_SCHED_GETAFFINITY = 4240 + SYS_IO_SETUP = 4241 + SYS_IO_DESTROY = 4242 + SYS_IO_GETEVENTS = 4243 + SYS_IO_SUBMIT = 4244 + SYS_IO_CANCEL = 4245 + SYS_EXIT_GROUP = 4246 + SYS_LOOKUP_DCOOKIE = 4247 + SYS_EPOLL_CREATE = 4248 + SYS_EPOLL_CTL = 4249 + SYS_EPOLL_WAIT = 4250 + SYS_REMAP_FILE_PAGES = 4251 + SYS_SET_TID_ADDRESS = 4252 + SYS_RESTART_SYSCALL = 4253 + SYS_FADVISE64 = 4254 + SYS_STATFS64 = 4255 + SYS_FSTATFS64 = 4256 + SYS_TIMER_CREATE = 4257 + SYS_TIMER_SETTIME = 4258 + SYS_TIMER_GETTIME = 4259 + SYS_TIMER_GETOVERRUN = 4260 + SYS_TIMER_DELETE = 4261 + SYS_CLOCK_SETTIME = 4262 + SYS_CLOCK_GETTIME = 4263 + SYS_CLOCK_GETRES = 4264 + SYS_CLOCK_NANOSLEEP = 4265 + SYS_TGKILL = 4266 + SYS_UTIMES = 4267 + SYS_MBIND = 4268 + SYS_GET_MEMPOLICY = 4269 + SYS_SET_MEMPOLICY = 4270 + SYS_MQ_OPEN = 4271 + SYS_MQ_UNLINK = 4272 + SYS_MQ_TIMEDSEND = 4273 + SYS_MQ_TIMEDRECEIVE = 4274 + SYS_MQ_NOTIFY = 4275 + SYS_MQ_GETSETATTR = 4276 + SYS_VSERVER = 4277 + SYS_WAITID = 4278 + SYS_ADD_KEY = 4280 + SYS_REQUEST_KEY = 4281 + SYS_KEYCTL = 4282 + SYS_SET_THREAD_AREA = 4283 + SYS_INOTIFY_INIT = 4284 + SYS_INOTIFY_ADD_WATCH = 4285 + SYS_INOTIFY_RM_WATCH = 4286 + SYS_MIGRATE_PAGES = 4287 + SYS_OPENAT = 4288 + SYS_MKDIRAT = 4289 + SYS_MKNODAT = 4290 + SYS_FCHOWNAT = 4291 + SYS_FUTIMESAT = 4292 + SYS_FSTATAT64 = 4293 + SYS_UNLINKAT = 4294 + SYS_RENAMEAT = 4295 + SYS_LINKAT = 4296 + SYS_SYMLINKAT = 4297 + SYS_READLINKAT = 4298 + SYS_FCHMODAT = 4299 + SYS_FACCESSAT = 4300 + SYS_PSELECT6 = 4301 + SYS_PPOLL = 4302 + SYS_UNSHARE = 4303 + SYS_SPLICE = 4304 + SYS_SYNC_FILE_RANGE = 4305 + SYS_TEE = 4306 + SYS_VMSPLICE = 4307 + SYS_MOVE_PAGES = 4308 + SYS_SET_ROBUST_LIST = 4309 + SYS_GET_ROBUST_LIST = 4310 + SYS_KEXEC_LOAD = 4311 + SYS_GETCPU = 4312 + SYS_EPOLL_PWAIT = 4313 + SYS_IOPRIO_SET = 4314 + SYS_IOPRIO_GET = 4315 + SYS_UTIMENSAT = 4316 + SYS_SIGNALFD = 4317 + SYS_TIMERFD = 4318 + SYS_EVENTFD = 4319 + SYS_FALLOCATE = 4320 + SYS_TIMERFD_CREATE = 4321 + SYS_TIMERFD_GETTIME = 4322 + SYS_TIMERFD_SETTIME = 4323 + SYS_SIGNALFD4 = 4324 + SYS_EVENTFD2 = 4325 + SYS_EPOLL_CREATE1 = 4326 + SYS_DUP3 = 4327 + SYS_PIPE2 = 4328 + SYS_INOTIFY_INIT1 = 4329 + SYS_PREADV = 4330 + SYS_PWRITEV = 4331 + SYS_RT_TGSIGQUEUEINFO = 4332 + SYS_PERF_EVENT_OPEN = 4333 + SYS_ACCEPT4 = 4334 + SYS_RECVMMSG = 4335 + SYS_FANOTIFY_INIT = 4336 + SYS_FANOTIFY_MARK = 4337 + SYS_PRLIMIT64 = 4338 + SYS_NAME_TO_HANDLE_AT = 4339 + SYS_OPEN_BY_HANDLE_AT = 4340 + SYS_CLOCK_ADJTIME = 4341 + SYS_SYNCFS = 4342 + SYS_SENDMMSG = 4343 + SYS_SETNS = 4344 + SYS_PROCESS_VM_READV = 4345 + SYS_PROCESS_VM_WRITEV = 4346 + SYS_KCMP = 4347 + SYS_FINIT_MODULE = 4348 + SYS_SCHED_SETATTR = 4349 + SYS_SCHED_GETATTR = 4350 + SYS_RENAMEAT2 = 4351 + SYS_SECCOMP = 4352 + SYS_GETRANDOM = 4353 + SYS_MEMFD_CREATE = 4354 + SYS_BPF = 4355 + SYS_EXECVEAT = 4356 + SYS_USERFAULTFD = 4357 + SYS_MEMBARRIER = 4358 + SYS_MLOCK2 = 4359 + SYS_COPY_FILE_RANGE = 4360 + SYS_PREADV2 = 4361 + SYS_PWRITEV2 = 4362 + SYS_PKEY_MPROTECT = 4363 + SYS_PKEY_ALLOC = 4364 + SYS_PKEY_FREE = 4365 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go new file mode 100644 index 0000000..09db959 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -0,0 +1,334 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go new file mode 100644 index 0000000..d1b872a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -0,0 +1,334 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64le,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go new file mode 100644 index 0000000..82ba20f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -0,0 +1,374 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mipsle,linux + +package unix + +const ( + SYS_SYSCALL = 4000 + SYS_EXIT = 4001 + SYS_FORK = 4002 + SYS_READ = 4003 + SYS_WRITE = 4004 + SYS_OPEN = 4005 + SYS_CLOSE = 4006 + SYS_WAITPID = 4007 + SYS_CREAT = 4008 + SYS_LINK = 4009 + SYS_UNLINK = 4010 + SYS_EXECVE = 4011 + SYS_CHDIR = 4012 + SYS_TIME = 4013 + SYS_MKNOD = 4014 + SYS_CHMOD = 4015 + SYS_LCHOWN = 4016 + SYS_BREAK = 4017 + SYS_UNUSED18 = 4018 + SYS_LSEEK = 4019 + SYS_GETPID = 4020 + SYS_MOUNT = 4021 + SYS_UMOUNT = 4022 + SYS_SETUID = 4023 + SYS_GETUID = 4024 + SYS_STIME = 4025 + SYS_PTRACE = 4026 + SYS_ALARM = 4027 + SYS_UNUSED28 = 4028 + SYS_PAUSE = 4029 + SYS_UTIME = 4030 + SYS_STTY = 4031 + SYS_GTTY = 4032 + SYS_ACCESS = 4033 + SYS_NICE = 4034 + SYS_FTIME = 4035 + SYS_SYNC = 4036 + SYS_KILL = 4037 + SYS_RENAME = 4038 + SYS_MKDIR = 4039 + SYS_RMDIR = 4040 + SYS_DUP = 4041 + SYS_PIPE = 4042 + SYS_TIMES = 4043 + SYS_PROF = 4044 + SYS_BRK = 4045 + SYS_SETGID = 4046 + SYS_GETGID = 4047 + SYS_SIGNAL = 4048 + SYS_GETEUID = 4049 + SYS_GETEGID = 4050 + SYS_ACCT = 4051 + SYS_UMOUNT2 = 4052 + SYS_LOCK = 4053 + SYS_IOCTL = 4054 + SYS_FCNTL = 4055 + SYS_MPX = 4056 + SYS_SETPGID = 4057 + SYS_ULIMIT = 4058 + SYS_UNUSED59 = 4059 + SYS_UMASK = 4060 + SYS_CHROOT = 4061 + SYS_USTAT = 4062 + SYS_DUP2 = 4063 + SYS_GETPPID = 4064 + SYS_GETPGRP = 4065 + SYS_SETSID = 4066 + SYS_SIGACTION = 4067 + SYS_SGETMASK = 4068 + SYS_SSETMASK = 4069 + SYS_SETREUID = 4070 + SYS_SETREGID = 4071 + SYS_SIGSUSPEND = 4072 + SYS_SIGPENDING = 4073 + SYS_SETHOSTNAME = 4074 + SYS_SETRLIMIT = 4075 + SYS_GETRLIMIT = 4076 + SYS_GETRUSAGE = 4077 + SYS_GETTIMEOFDAY = 4078 + SYS_SETTIMEOFDAY = 4079 + SYS_GETGROUPS = 4080 + SYS_SETGROUPS = 4081 + SYS_RESERVED82 = 4082 + SYS_SYMLINK = 4083 + SYS_UNUSED84 = 4084 + SYS_READLINK = 4085 + SYS_USELIB = 4086 + SYS_SWAPON = 4087 + SYS_REBOOT = 4088 + SYS_READDIR = 4089 + SYS_MMAP = 4090 + SYS_MUNMAP = 4091 + SYS_TRUNCATE = 4092 + SYS_FTRUNCATE = 4093 + SYS_FCHMOD = 4094 + SYS_FCHOWN = 4095 + SYS_GETPRIORITY = 4096 + SYS_SETPRIORITY = 4097 + SYS_PROFIL = 4098 + SYS_STATFS = 4099 + SYS_FSTATFS = 4100 + SYS_IOPERM = 4101 + SYS_SOCKETCALL = 4102 + SYS_SYSLOG = 4103 + SYS_SETITIMER = 4104 + SYS_GETITIMER = 4105 + SYS_STAT = 4106 + SYS_LSTAT = 4107 + SYS_FSTAT = 4108 + SYS_UNUSED109 = 4109 + SYS_IOPL = 4110 + SYS_VHANGUP = 4111 + SYS_IDLE = 4112 + SYS_VM86 = 4113 + SYS_WAIT4 = 4114 + SYS_SWAPOFF = 4115 + SYS_SYSINFO = 4116 + SYS_IPC = 4117 + SYS_FSYNC = 4118 + SYS_SIGRETURN = 4119 + SYS_CLONE = 4120 + SYS_SETDOMAINNAME = 4121 + SYS_UNAME = 4122 + SYS_MODIFY_LDT = 4123 + SYS_ADJTIMEX = 4124 + SYS_MPROTECT = 4125 + SYS_SIGPROCMASK = 4126 + SYS_CREATE_MODULE = 4127 + SYS_INIT_MODULE = 4128 + SYS_DELETE_MODULE = 4129 + SYS_GET_KERNEL_SYMS = 4130 + SYS_QUOTACTL = 4131 + SYS_GETPGID = 4132 + SYS_FCHDIR = 4133 + SYS_BDFLUSH = 4134 + SYS_SYSFS = 4135 + SYS_PERSONALITY = 4136 + SYS_AFS_SYSCALL = 4137 + SYS_SETFSUID = 4138 + SYS_SETFSGID = 4139 + SYS__LLSEEK = 4140 + SYS_GETDENTS = 4141 + SYS__NEWSELECT = 4142 + SYS_FLOCK = 4143 + SYS_MSYNC = 4144 + SYS_READV = 4145 + SYS_WRITEV = 4146 + SYS_CACHEFLUSH = 4147 + SYS_CACHECTL = 4148 + SYS_SYSMIPS = 4149 + SYS_UNUSED150 = 4150 + SYS_GETSID = 4151 + SYS_FDATASYNC = 4152 + SYS__SYSCTL = 4153 + SYS_MLOCK = 4154 + SYS_MUNLOCK = 4155 + SYS_MLOCKALL = 4156 + SYS_MUNLOCKALL = 4157 + SYS_SCHED_SETPARAM = 4158 + SYS_SCHED_GETPARAM = 4159 + SYS_SCHED_SETSCHEDULER = 4160 + SYS_SCHED_GETSCHEDULER = 4161 + SYS_SCHED_YIELD = 4162 + SYS_SCHED_GET_PRIORITY_MAX = 4163 + SYS_SCHED_GET_PRIORITY_MIN = 4164 + SYS_SCHED_RR_GET_INTERVAL = 4165 + SYS_NANOSLEEP = 4166 + SYS_MREMAP = 4167 + SYS_ACCEPT = 4168 + SYS_BIND = 4169 + SYS_CONNECT = 4170 + SYS_GETPEERNAME = 4171 + SYS_GETSOCKNAME = 4172 + SYS_GETSOCKOPT = 4173 + SYS_LISTEN = 4174 + SYS_RECV = 4175 + SYS_RECVFROM = 4176 + SYS_RECVMSG = 4177 + SYS_SEND = 4178 + SYS_SENDMSG = 4179 + SYS_SENDTO = 4180 + SYS_SETSOCKOPT = 4181 + SYS_SHUTDOWN = 4182 + SYS_SOCKET = 4183 + SYS_SOCKETPAIR = 4184 + SYS_SETRESUID = 4185 + SYS_GETRESUID = 4186 + SYS_QUERY_MODULE = 4187 + SYS_POLL = 4188 + SYS_NFSSERVCTL = 4189 + SYS_SETRESGID = 4190 + SYS_GETRESGID = 4191 + SYS_PRCTL = 4192 + SYS_RT_SIGRETURN = 4193 + SYS_RT_SIGACTION = 4194 + SYS_RT_SIGPROCMASK = 4195 + SYS_RT_SIGPENDING = 4196 + SYS_RT_SIGTIMEDWAIT = 4197 + SYS_RT_SIGQUEUEINFO = 4198 + SYS_RT_SIGSUSPEND = 4199 + SYS_PREAD64 = 4200 + SYS_PWRITE64 = 4201 + SYS_CHOWN = 4202 + SYS_GETCWD = 4203 + SYS_CAPGET = 4204 + SYS_CAPSET = 4205 + SYS_SIGALTSTACK = 4206 + SYS_SENDFILE = 4207 + SYS_GETPMSG = 4208 + SYS_PUTPMSG = 4209 + SYS_MMAP2 = 4210 + SYS_TRUNCATE64 = 4211 + SYS_FTRUNCATE64 = 4212 + SYS_STAT64 = 4213 + SYS_LSTAT64 = 4214 + SYS_FSTAT64 = 4215 + SYS_PIVOT_ROOT = 4216 + SYS_MINCORE = 4217 + SYS_MADVISE = 4218 + SYS_GETDENTS64 = 4219 + SYS_FCNTL64 = 4220 + SYS_RESERVED221 = 4221 + SYS_GETTID = 4222 + SYS_READAHEAD = 4223 + SYS_SETXATTR = 4224 + SYS_LSETXATTR = 4225 + SYS_FSETXATTR = 4226 + SYS_GETXATTR = 4227 + SYS_LGETXATTR = 4228 + SYS_FGETXATTR = 4229 + SYS_LISTXATTR = 4230 + SYS_LLISTXATTR = 4231 + SYS_FLISTXATTR = 4232 + SYS_REMOVEXATTR = 4233 + SYS_LREMOVEXATTR = 4234 + SYS_FREMOVEXATTR = 4235 + SYS_TKILL = 4236 + SYS_SENDFILE64 = 4237 + SYS_FUTEX = 4238 + SYS_SCHED_SETAFFINITY = 4239 + SYS_SCHED_GETAFFINITY = 4240 + SYS_IO_SETUP = 4241 + SYS_IO_DESTROY = 4242 + SYS_IO_GETEVENTS = 4243 + SYS_IO_SUBMIT = 4244 + SYS_IO_CANCEL = 4245 + SYS_EXIT_GROUP = 4246 + SYS_LOOKUP_DCOOKIE = 4247 + SYS_EPOLL_CREATE = 4248 + SYS_EPOLL_CTL = 4249 + SYS_EPOLL_WAIT = 4250 + SYS_REMAP_FILE_PAGES = 4251 + SYS_SET_TID_ADDRESS = 4252 + SYS_RESTART_SYSCALL = 4253 + SYS_FADVISE64 = 4254 + SYS_STATFS64 = 4255 + SYS_FSTATFS64 = 4256 + SYS_TIMER_CREATE = 4257 + SYS_TIMER_SETTIME = 4258 + SYS_TIMER_GETTIME = 4259 + SYS_TIMER_GETOVERRUN = 4260 + SYS_TIMER_DELETE = 4261 + SYS_CLOCK_SETTIME = 4262 + SYS_CLOCK_GETTIME = 4263 + SYS_CLOCK_GETRES = 4264 + SYS_CLOCK_NANOSLEEP = 4265 + SYS_TGKILL = 4266 + SYS_UTIMES = 4267 + SYS_MBIND = 4268 + SYS_GET_MEMPOLICY = 4269 + SYS_SET_MEMPOLICY = 4270 + SYS_MQ_OPEN = 4271 + SYS_MQ_UNLINK = 4272 + SYS_MQ_TIMEDSEND = 4273 + SYS_MQ_TIMEDRECEIVE = 4274 + SYS_MQ_NOTIFY = 4275 + SYS_MQ_GETSETATTR = 4276 + SYS_VSERVER = 4277 + SYS_WAITID = 4278 + SYS_ADD_KEY = 4280 + SYS_REQUEST_KEY = 4281 + SYS_KEYCTL = 4282 + SYS_SET_THREAD_AREA = 4283 + SYS_INOTIFY_INIT = 4284 + SYS_INOTIFY_ADD_WATCH = 4285 + SYS_INOTIFY_RM_WATCH = 4286 + SYS_MIGRATE_PAGES = 4287 + SYS_OPENAT = 4288 + SYS_MKDIRAT = 4289 + SYS_MKNODAT = 4290 + SYS_FCHOWNAT = 4291 + SYS_FUTIMESAT = 4292 + SYS_FSTATAT64 = 4293 + SYS_UNLINKAT = 4294 + SYS_RENAMEAT = 4295 + SYS_LINKAT = 4296 + SYS_SYMLINKAT = 4297 + SYS_READLINKAT = 4298 + SYS_FCHMODAT = 4299 + SYS_FACCESSAT = 4300 + SYS_PSELECT6 = 4301 + SYS_PPOLL = 4302 + SYS_UNSHARE = 4303 + SYS_SPLICE = 4304 + SYS_SYNC_FILE_RANGE = 4305 + SYS_TEE = 4306 + SYS_VMSPLICE = 4307 + SYS_MOVE_PAGES = 4308 + SYS_SET_ROBUST_LIST = 4309 + SYS_GET_ROBUST_LIST = 4310 + SYS_KEXEC_LOAD = 4311 + SYS_GETCPU = 4312 + SYS_EPOLL_PWAIT = 4313 + SYS_IOPRIO_SET = 4314 + SYS_IOPRIO_GET = 4315 + SYS_UTIMENSAT = 4316 + SYS_SIGNALFD = 4317 + SYS_TIMERFD = 4318 + SYS_EVENTFD = 4319 + SYS_FALLOCATE = 4320 + SYS_TIMERFD_CREATE = 4321 + SYS_TIMERFD_GETTIME = 4322 + SYS_TIMERFD_SETTIME = 4323 + SYS_SIGNALFD4 = 4324 + SYS_EVENTFD2 = 4325 + SYS_EPOLL_CREATE1 = 4326 + SYS_DUP3 = 4327 + SYS_PIPE2 = 4328 + SYS_INOTIFY_INIT1 = 4329 + SYS_PREADV = 4330 + SYS_PWRITEV = 4331 + SYS_RT_TGSIGQUEUEINFO = 4332 + SYS_PERF_EVENT_OPEN = 4333 + SYS_ACCEPT4 = 4334 + SYS_RECVMMSG = 4335 + SYS_FANOTIFY_INIT = 4336 + SYS_FANOTIFY_MARK = 4337 + SYS_PRLIMIT64 = 4338 + SYS_NAME_TO_HANDLE_AT = 4339 + SYS_OPEN_BY_HANDLE_AT = 4340 + SYS_CLOCK_ADJTIME = 4341 + SYS_SYNCFS = 4342 + SYS_SENDMMSG = 4343 + SYS_SETNS = 4344 + SYS_PROCESS_VM_READV = 4345 + SYS_PROCESS_VM_WRITEV = 4346 + SYS_KCMP = 4347 + SYS_FINIT_MODULE = 4348 + SYS_SCHED_SETATTR = 4349 + SYS_SCHED_GETATTR = 4350 + SYS_RENAMEAT2 = 4351 + SYS_SECCOMP = 4352 + SYS_GETRANDOM = 4353 + SYS_MEMFD_CREATE = 4354 + SYS_BPF = 4355 + SYS_EXECVEAT = 4356 + SYS_USERFAULTFD = 4357 + SYS_MEMBARRIER = 4358 + SYS_MLOCK2 = 4359 + SYS_COPY_FILE_RANGE = 4360 + SYS_PREADV2 = 4361 + SYS_PWRITEV2 = 4362 + SYS_PKEY_MPROTECT = 4363 + SYS_PKEY_ALLOC = 4364 + SYS_PKEY_FREE = 4365 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go new file mode 100644 index 0000000..8944448 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -0,0 +1,369 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go new file mode 100644 index 0000000..90a039b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -0,0 +1,369 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64le,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go new file mode 100644 index 0000000..aab0cdb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -0,0 +1,331 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build s390x,linux + +package unix + +const ( + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_RESTART_SYSCALL = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SIGNAL = 48 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_LOOKUP_DCOOKIE = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_GETDENTS = 141 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_READAHEAD = 222 + SYS_SETXATTR = 224 + SYS_LSETXATTR = 225 + SYS_FSETXATTR = 226 + SYS_GETXATTR = 227 + SYS_LGETXATTR = 228 + SYS_FGETXATTR = 229 + SYS_LISTXATTR = 230 + SYS_LLISTXATTR = 231 + SYS_FLISTXATTR = 232 + SYS_REMOVEXATTR = 233 + SYS_LREMOVEXATTR = 234 + SYS_FREMOVEXATTR = 235 + SYS_GETTID = 236 + SYS_TKILL = 237 + SYS_FUTEX = 238 + SYS_SCHED_SETAFFINITY = 239 + SYS_SCHED_GETAFFINITY = 240 + SYS_TGKILL = 241 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_EPOLL_CREATE = 249 + SYS_EPOLL_CTL = 250 + SYS_EPOLL_WAIT = 251 + SYS_SET_TID_ADDRESS = 252 + SYS_FADVISE64 = 253 + SYS_TIMER_CREATE = 254 + SYS_TIMER_SETTIME = 255 + SYS_TIMER_GETTIME = 256 + SYS_TIMER_GETOVERRUN = 257 + SYS_TIMER_DELETE = 258 + SYS_CLOCK_SETTIME = 259 + SYS_CLOCK_GETTIME = 260 + SYS_CLOCK_GETRES = 261 + SYS_CLOCK_NANOSLEEP = 262 + SYS_STATFS64 = 265 + SYS_FSTATFS64 = 266 + SYS_REMAP_FILE_PAGES = 267 + SYS_MBIND = 268 + SYS_GET_MEMPOLICY = 269 + SYS_SET_MEMPOLICY = 270 + SYS_MQ_OPEN = 271 + SYS_MQ_UNLINK = 272 + SYS_MQ_TIMEDSEND = 273 + SYS_MQ_TIMEDRECEIVE = 274 + SYS_MQ_NOTIFY = 275 + SYS_MQ_GETSETATTR = 276 + SYS_KEXEC_LOAD = 277 + SYS_ADD_KEY = 278 + SYS_REQUEST_KEY = 279 + SYS_KEYCTL = 280 + SYS_WAITID = 281 + SYS_IOPRIO_SET = 282 + SYS_IOPRIO_GET = 283 + SYS_INOTIFY_INIT = 284 + SYS_INOTIFY_ADD_WATCH = 285 + SYS_INOTIFY_RM_WATCH = 286 + SYS_MIGRATE_PAGES = 287 + SYS_OPENAT = 288 + SYS_MKDIRAT = 289 + SYS_MKNODAT = 290 + SYS_FCHOWNAT = 291 + SYS_FUTIMESAT = 292 + SYS_UNLINKAT = 294 + SYS_RENAMEAT = 295 + SYS_LINKAT = 296 + SYS_SYMLINKAT = 297 + SYS_READLINKAT = 298 + SYS_FCHMODAT = 299 + SYS_FACCESSAT = 300 + SYS_PSELECT6 = 301 + SYS_PPOLL = 302 + SYS_UNSHARE = 303 + SYS_SET_ROBUST_LIST = 304 + SYS_GET_ROBUST_LIST = 305 + SYS_SPLICE = 306 + SYS_SYNC_FILE_RANGE = 307 + SYS_TEE = 308 + SYS_VMSPLICE = 309 + SYS_MOVE_PAGES = 310 + SYS_GETCPU = 311 + SYS_EPOLL_PWAIT = 312 + SYS_UTIMES = 313 + SYS_FALLOCATE = 314 + SYS_UTIMENSAT = 315 + SYS_SIGNALFD = 316 + SYS_TIMERFD = 317 + SYS_EVENTFD = 318 + SYS_TIMERFD_CREATE = 319 + SYS_TIMERFD_SETTIME = 320 + SYS_TIMERFD_GETTIME = 321 + SYS_SIGNALFD4 = 322 + SYS_EVENTFD2 = 323 + SYS_INOTIFY_INIT1 = 324 + SYS_PIPE2 = 325 + SYS_DUP3 = 326 + SYS_EPOLL_CREATE1 = 327 + SYS_PREADV = 328 + SYS_PWRITEV = 329 + SYS_RT_TGSIGQUEUEINFO = 330 + SYS_PERF_EVENT_OPEN = 331 + SYS_FANOTIFY_INIT = 332 + SYS_FANOTIFY_MARK = 333 + SYS_PRLIMIT64 = 334 + SYS_NAME_TO_HANDLE_AT = 335 + SYS_OPEN_BY_HANDLE_AT = 336 + SYS_CLOCK_ADJTIME = 337 + SYS_SYNCFS = 338 + SYS_SETNS = 339 + SYS_PROCESS_VM_READV = 340 + SYS_PROCESS_VM_WRITEV = 341 + SYS_S390_RUNTIME_INSTR = 342 + SYS_KCMP = 343 + SYS_FINIT_MODULE = 344 + SYS_SCHED_SETATTR = 345 + SYS_SCHED_GETATTR = 346 + SYS_RENAMEAT2 = 347 + SYS_SECCOMP = 348 + SYS_GETRANDOM = 349 + SYS_MEMFD_CREATE = 350 + SYS_BPF = 351 + SYS_S390_PCI_MMIO_WRITE = 352 + SYS_S390_PCI_MMIO_READ = 353 + SYS_EXECVEAT = 354 + SYS_USERFAULTFD = 355 + SYS_MEMBARRIER = 356 + SYS_RECVMMSG = 357 + SYS_SENDMMSG = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_MLOCK2 = 374 + SYS_COPY_FILE_RANGE = 375 + SYS_PREADV2 = 376 + SYS_PWRITEV2 = 377 + SYS_SELECT = 142 + SYS_GETRLIMIT = 191 + SYS_LCHOWN = 198 + SYS_GETUID = 199 + SYS_GETGID = 200 + SYS_GETEUID = 201 + SYS_GETEGID = 202 + SYS_SETREUID = 203 + SYS_SETREGID = 204 + SYS_GETGROUPS = 205 + SYS_SETGROUPS = 206 + SYS_FCHOWN = 207 + SYS_SETRESUID = 208 + SYS_GETRESUID = 209 + SYS_SETRESGID = 210 + SYS_GETRESGID = 211 + SYS_CHOWN = 212 + SYS_SETUID = 213 + SYS_SETGID = 214 + SYS_SETFSUID = 215 + SYS_SETFSGID = 216 + SYS_NEWFSTATAT = 293 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go new file mode 100644 index 0000000..c9c129d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -0,0 +1,348 @@ +// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__arch64__ linux/usr/include/asm/unistd.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build sparc64,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECV = 11 + SYS_CHDIR = 12 + SYS_CHOWN = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BRK = 17 + SYS_PERFCTR = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_CAPGET = 21 + SYS_CAPSET = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_VMSPLICE = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_SIGALTSTACK = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_STAT = 38 + SYS_SENDFILE = 39 + SYS_LSTAT = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_UMOUNT2 = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_MEMORY_ORDERING = 52 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_FSTAT = 62 + SYS_FSTAT64 = 63 + SYS_GETPAGESIZE = 64 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_MMAP = 71 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_VHANGUP = 76 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_SETHOSTNAME = 88 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_ACCEPT = 99 + SYS_GETPRIORITY = 100 + SYS_RT_SIGRETURN = 101 + SYS_RT_SIGACTION = 102 + SYS_RT_SIGPROCMASK = 103 + SYS_RT_SIGPENDING = 104 + SYS_RT_SIGTIMEDWAIT = 105 + SYS_RT_SIGQUEUEINFO = 106 + SYS_RT_SIGSUSPEND = 107 + SYS_SETRESUID = 108 + SYS_GETRESUID = 109 + SYS_SETRESGID = 110 + SYS_GETRESGID = 111 + SYS_RECVMSG = 113 + SYS_SENDMSG = 114 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_GETCWD = 119 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_RECVFROM = 125 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_TRUNCATE = 129 + SYS_FTRUNCATE = 130 + SYS_FLOCK = 131 + SYS_LSTAT64 = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_STAT64 = 139 + SYS_SENDFILE64 = 140 + SYS_GETPEERNAME = 141 + SYS_FUTEX = 142 + SYS_GETTID = 143 + SYS_GETRLIMIT = 144 + SYS_SETRLIMIT = 145 + SYS_PIVOT_ROOT = 146 + SYS_PRCTL = 147 + SYS_PCICONFIG_READ = 148 + SYS_PCICONFIG_WRITE = 149 + SYS_GETSOCKNAME = 150 + SYS_INOTIFY_INIT = 151 + SYS_INOTIFY_ADD_WATCH = 152 + SYS_POLL = 153 + SYS_GETDENTS64 = 154 + SYS_INOTIFY_RM_WATCH = 156 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UMOUNT = 159 + SYS_SCHED_SET_AFFINITY = 160 + SYS_SCHED_GET_AFFINITY = 161 + SYS_GETDOMAINNAME = 162 + SYS_SETDOMAINNAME = 163 + SYS_UTRAP_INSTALL = 164 + SYS_QUOTACTL = 165 + SYS_SET_TID_ADDRESS = 166 + SYS_MOUNT = 167 + SYS_USTAT = 168 + SYS_SETXATTR = 169 + SYS_LSETXATTR = 170 + SYS_FSETXATTR = 171 + SYS_GETXATTR = 172 + SYS_LGETXATTR = 173 + SYS_GETDENTS = 174 + SYS_SETSID = 175 + SYS_FCHDIR = 176 + SYS_FGETXATTR = 177 + SYS_LISTXATTR = 178 + SYS_LLISTXATTR = 179 + SYS_FLISTXATTR = 180 + SYS_REMOVEXATTR = 181 + SYS_LREMOVEXATTR = 182 + SYS_SIGPENDING = 183 + SYS_QUERY_MODULE = 184 + SYS_SETPGID = 185 + SYS_FREMOVEXATTR = 186 + SYS_TKILL = 187 + SYS_EXIT_GROUP = 188 + SYS_UNAME = 189 + SYS_INIT_MODULE = 190 + SYS_PERSONALITY = 191 + SYS_REMAP_FILE_PAGES = 192 + SYS_EPOLL_CREATE = 193 + SYS_EPOLL_CTL = 194 + SYS_EPOLL_WAIT = 195 + SYS_IOPRIO_SET = 196 + SYS_GETPPID = 197 + SYS_SIGACTION = 198 + SYS_SGETMASK = 199 + SYS_SSETMASK = 200 + SYS_SIGSUSPEND = 201 + SYS_OLDLSTAT = 202 + SYS_USELIB = 203 + SYS_READDIR = 204 + SYS_READAHEAD = 205 + SYS_SOCKETCALL = 206 + SYS_SYSLOG = 207 + SYS_LOOKUP_DCOOKIE = 208 + SYS_FADVISE64 = 209 + SYS_FADVISE64_64 = 210 + SYS_TGKILL = 211 + SYS_WAITPID = 212 + SYS_SWAPOFF = 213 + SYS_SYSINFO = 214 + SYS_IPC = 215 + SYS_SIGRETURN = 216 + SYS_CLONE = 217 + SYS_IOPRIO_GET = 218 + SYS_ADJTIMEX = 219 + SYS_SIGPROCMASK = 220 + SYS_CREATE_MODULE = 221 + SYS_DELETE_MODULE = 222 + SYS_GET_KERNEL_SYMS = 223 + SYS_GETPGID = 224 + SYS_BDFLUSH = 225 + SYS_SYSFS = 226 + SYS_AFS_SYSCALL = 227 + SYS_SETFSUID = 228 + SYS_SETFSGID = 229 + SYS__NEWSELECT = 230 + SYS_SPLICE = 232 + SYS_STIME = 233 + SYS_STATFS64 = 234 + SYS_FSTATFS64 = 235 + SYS__LLSEEK = 236 + SYS_MLOCK = 237 + SYS_MUNLOCK = 238 + SYS_MLOCKALL = 239 + SYS_MUNLOCKALL = 240 + SYS_SCHED_SETPARAM = 241 + SYS_SCHED_GETPARAM = 242 + SYS_SCHED_SETSCHEDULER = 243 + SYS_SCHED_GETSCHEDULER = 244 + SYS_SCHED_YIELD = 245 + SYS_SCHED_GET_PRIORITY_MAX = 246 + SYS_SCHED_GET_PRIORITY_MIN = 247 + SYS_SCHED_RR_GET_INTERVAL = 248 + SYS_NANOSLEEP = 249 + SYS_MREMAP = 250 + SYS__SYSCTL = 251 + SYS_GETSID = 252 + SYS_FDATASYNC = 253 + SYS_NFSSERVCTL = 254 + SYS_SYNC_FILE_RANGE = 255 + SYS_CLOCK_SETTIME = 256 + SYS_CLOCK_GETTIME = 257 + SYS_CLOCK_GETRES = 258 + SYS_CLOCK_NANOSLEEP = 259 + SYS_SCHED_GETAFFINITY = 260 + SYS_SCHED_SETAFFINITY = 261 + SYS_TIMER_SETTIME = 262 + SYS_TIMER_GETTIME = 263 + SYS_TIMER_GETOVERRUN = 264 + SYS_TIMER_DELETE = 265 + SYS_TIMER_CREATE = 266 + SYS_IO_SETUP = 268 + SYS_IO_DESTROY = 269 + SYS_IO_SUBMIT = 270 + SYS_IO_CANCEL = 271 + SYS_IO_GETEVENTS = 272 + SYS_MQ_OPEN = 273 + SYS_MQ_UNLINK = 274 + SYS_MQ_TIMEDSEND = 275 + SYS_MQ_TIMEDRECEIVE = 276 + SYS_MQ_NOTIFY = 277 + SYS_MQ_GETSETATTR = 278 + SYS_WAITID = 279 + SYS_TEE = 280 + SYS_ADD_KEY = 281 + SYS_REQUEST_KEY = 282 + SYS_KEYCTL = 283 + SYS_OPENAT = 284 + SYS_MKDIRAT = 285 + SYS_MKNODAT = 286 + SYS_FCHOWNAT = 287 + SYS_FUTIMESAT = 288 + SYS_FSTATAT64 = 289 + SYS_UNLINKAT = 290 + SYS_RENAMEAT = 291 + SYS_LINKAT = 292 + SYS_SYMLINKAT = 293 + SYS_READLINKAT = 294 + SYS_FCHMODAT = 295 + SYS_FACCESSAT = 296 + SYS_PSELECT6 = 297 + SYS_PPOLL = 298 + SYS_UNSHARE = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_GET_ROBUST_LIST = 301 + SYS_MIGRATE_PAGES = 302 + SYS_MBIND = 303 + SYS_GET_MEMPOLICY = 304 + SYS_SET_MEMPOLICY = 305 + SYS_KEXEC_LOAD = 306 + SYS_MOVE_PAGES = 307 + SYS_GETCPU = 308 + SYS_EPOLL_PWAIT = 309 + SYS_UTIMENSAT = 310 + SYS_SIGNALFD = 311 + SYS_TIMERFD_CREATE = 312 + SYS_EVENTFD = 313 + SYS_FALLOCATE = 314 + SYS_TIMERFD_SETTIME = 315 + SYS_TIMERFD_GETTIME = 316 + SYS_SIGNALFD4 = 317 + SYS_EVENTFD2 = 318 + SYS_EPOLL_CREATE1 = 319 + SYS_DUP3 = 320 + SYS_PIPE2 = 321 + SYS_INOTIFY_INIT1 = 322 + SYS_ACCEPT4 = 323 + SYS_PREADV = 324 + SYS_PWRITEV = 325 + SYS_RT_TGSIGQUEUEINFO = 326 + SYS_PERF_EVENT_OPEN = 327 + SYS_RECVMMSG = 328 + SYS_FANOTIFY_INIT = 329 + SYS_FANOTIFY_MARK = 330 + SYS_PRLIMIT64 = 331 + SYS_NAME_TO_HANDLE_AT = 332 + SYS_OPEN_BY_HANDLE_AT = 333 + SYS_CLOCK_ADJTIME = 334 + SYS_SYNCFS = 335 + SYS_SENDMMSG = 336 + SYS_SETNS = 337 + SYS_PROCESS_VM_READV = 338 + SYS_PROCESS_VM_WRITEV = 339 + SYS_KERN_FEATURES = 340 + SYS_KCMP = 341 + SYS_FINIT_MODULE = 342 + SYS_SCHED_SETATTR = 343 + SYS_SCHED_GETATTR = 344 + SYS_RENAMEAT2 = 345 + SYS_SECCOMP = 346 + SYS_GETRANDOM = 347 + SYS_MEMFD_CREATE = 348 + SYS_BPF = 349 + SYS_EXECVEAT = 350 + SYS_MEMBARRIER = 351 + SYS_USERFAULTFD = 352 + SYS_BIND = 353 + SYS_LISTEN = 354 + SYS_SETSOCKOPT = 355 + SYS_MLOCK2 = 356 + SYS_COPY_FILE_RANGE = 357 + SYS_PREADV2 = 358 + SYS_PWRITEV2 = 359 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go new file mode 100644 index 0000000..f60d8f9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go @@ -0,0 +1,273 @@ +// mksysnum_netbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go new file mode 100644 index 0000000..48a91d4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go @@ -0,0 +1,273 @@ +// mksysnum_netbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go new file mode 100644 index 0000000..612ba66 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go @@ -0,0 +1,273 @@ +// mksysnum_netbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go new file mode 100644 index 0000000..3e8ce2a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go @@ -0,0 +1,207 @@ +// mksysnum_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_KILL = 37 // { int sys_kill(int pid, int signum); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { int sys_readlink(const char *path, char *buf, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, int pgid); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go new file mode 100644 index 0000000..bd28146 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go @@ -0,0 +1,207 @@ +// mksysnum_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_KILL = 37 // { int sys_kill(int pid, int signum); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { int sys_readlink(const char *path, char *buf, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, int pgid); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go new file mode 100644 index 0000000..c708659 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go @@ -0,0 +1,13 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,solaris + +package unix + +// TODO(aram): remove these before Go 1.3. +const ( + SYS_EXECVE = 59 + SYS_FCNTL = 62 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go new file mode 100644 index 0000000..2de1d44 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go @@ -0,0 +1,447 @@ +// +build 386,darwin +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 struct{} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint32 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Contigbytes int64 + Devoffset int64 +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go new file mode 100644 index 0000000..0446578 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -0,0 +1,462 @@ +// +build amd64,darwin +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Pad_cgo_0 [4]byte + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + Pad_cgo_0 [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Pad_cgo_0 [8]byte + Pad_cgo_1 [8]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + Pad_cgo_0 [4]byte + Ispeed uint64 + Ospeed uint64 +} + +const ( + AT_FDCWD = -0x2 + AT_SYMLINK_NOFOLLOW = 0x20 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go new file mode 100644 index 0000000..66df363 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go @@ -0,0 +1,449 @@ +// NOTE: cgo can't generate struct Stat_t and struct Statfs_t yet +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +// +build arm,darwin + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 [0]byte + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint32 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Contigbytes int64 + Devoffset int64 +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go new file mode 100644 index 0000000..85d56ea --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -0,0 +1,457 @@ +// +build arm64,darwin +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Pad_cgo_0 [4]byte + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + Pad_cgo_0 [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Pad_cgo_0 [8]byte + Pad_cgo_1 [8]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + Pad_cgo_0 [4]byte + Ispeed uint64 + Ospeed uint64 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go new file mode 100644 index 0000000..e585c89 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go @@ -0,0 +1,443 @@ +// cgo -godefs types_dragonfly.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,dragonfly + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Ino uint64 + Nlink uint32 + Dev uint32 + Mode uint16 + Padding1 uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare1 int64 + Qspare2 int64 +} + +type Statfs_t struct { + Spare2 int64 + Bsize int64 + Iosize int64 + Blocks int64 + Bfree int64 + Bavail int64 + Files int64 + Ffree int64 + Fsid Fsid + Owner uint32 + Type int32 + Flags int32 + Pad_cgo_0 [4]byte + Syncwrites int64 + Asyncwrites int64 + Fstypename [16]int8 + Mntonname [80]int8 + Syncreads int64 + Asyncreads int64 + Spares1 int16 + Mntfromname [80]int8 + Spares2 int16 + Pad_cgo_1 [4]byte + Spare [2]int64 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Namlen uint16 + Type uint8 + Unused1 uint8 + Unused2 uint32 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [16]uint64 +} + +const ( + SizeofIfMsghdr = 0xb0 + SizeofIfData = 0xa0 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Pad_cgo_0 [2]byte + Mtu uint64 + Metric uint64 + Link_state uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Oqdrops uint64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Pksent uint64 + Expire uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Recvpipe uint64 + Hopcount uint64 + Mssopt uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Msl uint64 + Iwmaxsegs uint64 + Iwcapsegs uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go new file mode 100644 index 0000000..8cf3094 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -0,0 +1,502 @@ +// +build 386,freebsd +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_freebsd.go + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtimespec Timespec + Pad_cgo_0 [8]byte +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 +} + +type Dirent struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + X__fds_bits [32]uint32 +} + +const ( + sizeofIfMsghdr = 0x64 + SizeofIfMsghdr = 0x60 + sizeofIfData = 0x54 + SizeofIfData = 0x50 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Baudrate_pf uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint64 + Epoch int32 + Lastchange Timeval +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + Epoch int32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + X_bzh_pad [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go new file mode 100644 index 0000000..091c10a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -0,0 +1,510 @@ +// cgo -godefs types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,freebsd + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtimespec Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + Pad_cgo_0 [4]byte +} + +type Dirent struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + X__fds_bits [16]uint64 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0xa8 + sizeofIfData = 0x98 + SizeofIfData = 0x98 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + X__ifi_epoch [8]byte + X__ifi_lastchange [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Expire uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Pksent uint64 + Weight uint64 + Filler [3]uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0x18 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + X_bzh_pad [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type CapRights struct { + Rights [2]uint64 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go new file mode 100644 index 0000000..5472b54 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -0,0 +1,497 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -fsigned-char types_freebsd.go + +// +build arm,freebsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + Pad_cgo_0 [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtimespec Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + Pad_cgo_0 [4]byte +} + +type Dirent struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + X__fds_bits [32]uint32 +} + +const ( + sizeofIfMsghdr = 0x70 + SizeofIfMsghdr = 0x70 + sizeofIfData = 0x60 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Baudrate_pf uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + Pad_cgo_0 [4]byte + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + X_bzh_pad [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go new file mode 100644 index 0000000..fe539a0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -0,0 +1,685 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,linux + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + X__pad1 uint16 + Pad_cgo_0 [2]byte + X__st_ino uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad2 uint16 + Pad_cgo_1 [2]byte + Size int64 + Blksize int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [1]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Ebx int32 + Ecx int32 + Edx int32 + Esi int32 + Edi int32 + Ebp int32 + Eax int32 + Xds int32 + Xes int32 + Xfs int32 + Xgs int32 + Orig_eax int32 + Eip int32 + Xcs int32 + Eflags int32 + Esp int32 + Xss int32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]int8 +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [32]uint32 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go new file mode 100644 index 0000000..e99cd79 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -0,0 +1,703 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + X__pad0 int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [3]int64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + R15 uint64 + R14 uint64 + R13 uint64 + R12 uint64 + Rbp uint64 + Rbx uint64 + R11 uint64 + R10 uint64 + R9 uint64 + R8 uint64 + Rax uint64 + Rcx uint64 + Rdx uint64 + Rsi uint64 + Rdi uint64 + Orig_rax uint64 + Rip uint64 + Cs uint64 + Eflags uint64 + Rsp uint64 + Ss uint64 + Fs_base uint64 + Gs_base uint64 + Ds uint64 + Es uint64 + Fs uint64 + Gs uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go new file mode 100644 index 0000000..0857aa6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -0,0 +1,674 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,linux + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + X__pad1 uint16 + Pad_cgo_0 [2]byte + X__st_ino uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad2 uint16 + Pad_cgo_1 [6]byte + Size int64 + Blksize int32 + Pad_cgo_2 [4]byte + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 + Pad_cgo_0 [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Uregs [18]uint32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]uint8 +} + +type Utsname struct { + Sysname [65]uint8 + Nodename [65]uint8 + Release [65]uint8 + Version [65]uint8 + Machine [65]uint8 + Domainname [65]uint8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]uint8 + Fpack [6]uint8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [32]uint32 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go new file mode 100644 index 0000000..fb1c90a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -0,0 +1,682 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad1 uint64 + Size int64 + Blksize int32 + X__pad2 int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [2]int32 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [31]uint64 + Sp uint64 + Pc uint64 + Pstate uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go new file mode 100644 index 0000000..d15c9f4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -0,0 +1,679 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips,linux + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]int32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad4 int32 + Blocks int64 + Pad5 [14]int32 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Frsize int32 + Pad_cgo_0 [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + Pad_cgo_1 [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]int8 +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [32]uint32 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go new file mode 100644 index 0000000..a39d362 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -0,0 +1,684 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]uint32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go new file mode 100644 index 0000000..a05f082 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -0,0 +1,684 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64le,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]uint32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go new file mode 100644 index 0000000..2ecdddc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -0,0 +1,679 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mipsle,linux + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]int32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad4 int32 + Blocks int64 + Pad5 [14]int32 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Frsize int32 + Pad_cgo_0 [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + Pad_cgo_1 [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]int8 +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [32]uint32 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go new file mode 100644 index 0000000..33b8e55 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -0,0 +1,692 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + X__pad2 int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint64 + _ uint64 + _ uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]uint8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]uint8 + Nodename [65]uint8 + Release [65]uint8 + Version [65]uint8 + Machine [65]uint8 + Domainname [65]uint8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + X_padFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go new file mode 100644 index 0000000..987d481 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -0,0 +1,692 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64le,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + X__pad2 int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint64 + _ uint64 + _ uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]uint8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]uint8 + Nodename [65]uint8 + Release [65]uint8 + Version [65]uint8 + Machine [65]uint8 + Domainname [65]uint8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + X_padFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go new file mode 100644 index 0000000..cf539ca --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -0,0 +1,709 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build s390x,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int64 + Blocks int64 + _ [3]int64 +} + +type Statfs_t struct { + Type uint32 + Bsize uint32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen uint32 + Frsize uint32 + Flags uint32 + Spare [4]uint32 + _ [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + _ [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x6 + FADV_NOREUSE = 0x7 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2b + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Psw PtracePsw + Gprs [16]uint64 + Acrs [16]uint32 + Orig_gpr2 uint64 + Fp_regs PtraceFpregs + Per_info PtracePer + Ieee_instruction_pointer uint64 +} + +type PtracePsw struct { + Mask uint64 + Addr uint64 +} + +type PtraceFpregs struct { + Fpc uint32 + _ [4]byte + Fprs [16]float64 +} + +type PtracePer struct { + _ [0]uint64 + _ [24]byte + _ [8]byte + Starting_addr uint64 + Ending_addr uint64 + Perc_atmid uint16 + _ [6]byte + Address uint64 + Access_id uint8 + _ [7]byte +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + _ [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go new file mode 100644 index 0000000..22bdab9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -0,0 +1,666 @@ +// +build sparc64,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go | go run mkpost.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + X__pad1 uint16 + Pad_cgo_0 [6]byte + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad2 uint16 + Pad_cgo_1 [6]byte + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + X__glibc_reserved4 uint64 + X__glibc_reserved5 uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + X__glibc_reserved int16 + Pad_cgo_1 [2]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2a + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [16]uint64 + Tstate uint64 + Tpc uint64 + Tnpc uint64 + Y uint32 + Magic uint32 +} + +type ptracePsw struct { +} + +type ptraceFpregs struct { +} + +type ptracePer struct { +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]int8 + Nodename [65]int8 + Release [65]int8 + Version [65]int8 + Machine [65]int8 + Domainname [65]int8 +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + X_padFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x800 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const _SC_PAGESIZE = 0x1e + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go new file mode 100644 index 0000000..caf755f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go @@ -0,0 +1,396 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_netbsd.go + +// +build 386,netbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x84 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData + Pad_cgo_1 [4]byte +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go new file mode 100644 index 0000000..91b4a53 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go @@ -0,0 +1,403 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_netbsd.go + +// +build amd64,netbsd + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Pad_cgo_0 [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Pad_cgo_1 [4]byte + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + Pad_cgo_2 [4]byte +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter uint32 + Flags uint32 + Fflags uint32 + Pad_cgo_0 [4]byte + Data int64 + Udata int64 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfTimeval struct { + Sec int64 + Usec int64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go new file mode 100644 index 0000000..c0758f9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -0,0 +1,401 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_netbsd.go + +// +build arm,netbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + Pad_cgo_0 [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Pad_cgo_0 [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Pad_cgo_1 [4]byte + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + Pad_cgo_2 [4]byte +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 + Pad_cgo_0 [4]byte +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go new file mode 100644 index 0000000..860a469 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -0,0 +1,441 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_openbsd.go + +// +build 386,openbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + Pad_cgo_0 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xec + SizeofIfData = 0xd4 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval + Mclpool [7]Mclpool +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct { + Grown int32 + Alive uint16 + Hwm uint16 + Cwm uint16 + Lwm uint16 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go new file mode 100644 index 0000000..23c5272 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -0,0 +1,448 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_openbsd.go + +// +build amd64,openbsd + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Pad_cgo_0 [4]byte + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + Pad_cgo_0 [4]byte + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + Pad_cgo_1 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xf8 + SizeofIfData = 0xe0 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Pad_cgo_0 [4]byte + Lastchange Timeval + Mclpool [7]Mclpool + Pad_cgo_1 [4]byte +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct { + Grown int32 + Alive uint16 + Hwm uint16 + Cwm uint16 + Lwm uint16 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go new file mode 100644 index 0000000..92336f9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go @@ -0,0 +1,442 @@ +// cgo -godefs types_solaris.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,solaris + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x400 + MaxHostNameLen = 0x100 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad_cgo_0 [4]byte + Blocks int64 + Fstype [16]int8 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Sysid int32 + Pid int32 + Pad [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Name [1]int8 + Pad_cgo_0 [5]byte +} + +type _Fsblkcnt_t uint64 + +type Statvfs_t struct { + Bsize uint64 + Frsize uint64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Favail uint64 + Fsid uint64 + Basetype [16]int8 + Flag uint64 + Namemax uint64 + Fstr [32]int8 +} + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + X__sin6_src_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [236]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *int8 + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Accrights *int8 + Accrightslen int32 + Pad_cgo_2 [4]byte +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + X__icmp6_filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x20 + SizeofSockaddrAny = 0xfc + SizeofSockaddrUnix = 0x6e + SizeofSockaddrDatalink = 0xfc + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x24 + SizeofICMPv6Filter = 0x20 +) + +type FdSet struct { + Bits [1024]int64 +} + +type Utsname struct { + Sysname [257]int8 + Nodename [257]int8 + Release [257]int8 + Version [257]int8 + Machine [257]int8 +} + +type Ustat_t struct { + Tfree int64 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_0 [4]byte +} + +const ( + AT_FDCWD = 0xffd19553 + AT_SYMLINK_NOFOLLOW = 0x1000 + AT_SYMLINK_FOLLOW = 0x2000 + AT_REMOVEDIR = 0x1 + AT_EACCESS = 0x4 +) + +const ( + SizeofIfMsghdr = 0x54 + SizeofIfData = 0x44 + SizeofIfaMsghdr = 0x14 + SizeofRtMsghdr = 0x4c + SizeofRtMetrics = 0x28 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Lastchange Timeval32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +const _SC_PAGESIZE = 0xb + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Pad_cgo_0 [1]byte +} + +type Termio struct { + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line int8 + Cc [8]uint8 + Pad_cgo_0 [1]byte +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} diff --git a/vendor/golang.org/x/sys/windows/asm_windows_386.s b/vendor/golang.org/x/sys/windows/asm_windows_386.s new file mode 100644 index 0000000..1c20dd2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/asm_windows_386.s @@ -0,0 +1,13 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +// System calls for 386, Windows are implemented in runtime/syscall_windows.goc +// + +TEXT ·getprocaddress(SB), 7, $0-8 + JMP syscall·getprocaddress(SB) + +TEXT ·loadlibrary(SB), 7, $0-4 + JMP syscall·loadlibrary(SB) diff --git a/vendor/golang.org/x/sys/windows/asm_windows_amd64.s b/vendor/golang.org/x/sys/windows/asm_windows_amd64.s new file mode 100644 index 0000000..4d025ab --- /dev/null +++ b/vendor/golang.org/x/sys/windows/asm_windows_amd64.s @@ -0,0 +1,13 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +// System calls for amd64, Windows are implemented in runtime/syscall_windows.goc +// + +TEXT ·getprocaddress(SB), 7, $0-32 + JMP syscall·getprocaddress(SB) + +TEXT ·loadlibrary(SB), 7, $0-8 + JMP syscall·loadlibrary(SB) diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go new file mode 100644 index 0000000..e77a370 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -0,0 +1,377 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "sync" + "sync/atomic" + "syscall" + "unsafe" +) + +// DLLError describes reasons for DLL load failures. +type DLLError struct { + Err error + ObjName string + Msg string +} + +func (e *DLLError) Error() string { return e.Msg } + +// Implemented in runtime/syscall_windows.goc; we provide jumps to them in our assembly file. +func loadlibrary(filename *uint16) (handle uintptr, err syscall.Errno) +func getprocaddress(handle uintptr, procname *uint8) (proc uintptr, err syscall.Errno) + +// A DLL implements access to a single DLL. +type DLL struct { + Name string + Handle Handle +} + +// LoadDLL loads DLL file into memory. +// +// Warning: using LoadDLL without an absolute path name is subject to +// DLL preloading attacks. To safely load a system DLL, use LazyDLL +// with System set to true, or use LoadLibraryEx directly. +func LoadDLL(name string) (dll *DLL, err error) { + namep, err := UTF16PtrFromString(name) + if err != nil { + return nil, err + } + h, e := loadlibrary(namep) + if e != 0 { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to load " + name + ": " + e.Error(), + } + } + d := &DLL{ + Name: name, + Handle: Handle(h), + } + return d, nil +} + +// MustLoadDLL is like LoadDLL but panics if load operation failes. +func MustLoadDLL(name string) *DLL { + d, e := LoadDLL(name) + if e != nil { + panic(e) + } + return d +} + +// FindProc searches DLL d for procedure named name and returns *Proc +// if found. It returns an error if search fails. +func (d *DLL) FindProc(name string) (proc *Proc, err error) { + namep, err := BytePtrFromString(name) + if err != nil { + return nil, err + } + a, e := getprocaddress(uintptr(d.Handle), namep) + if e != 0 { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(), + } + } + p := &Proc{ + Dll: d, + Name: name, + addr: a, + } + return p, nil +} + +// MustFindProc is like FindProc but panics if search fails. +func (d *DLL) MustFindProc(name string) *Proc { + p, e := d.FindProc(name) + if e != nil { + panic(e) + } + return p +} + +// Release unloads DLL d from memory. +func (d *DLL) Release() (err error) { + return FreeLibrary(d.Handle) +} + +// A Proc implements access to a procedure inside a DLL. +type Proc struct { + Dll *DLL + Name string + addr uintptr +} + +// Addr returns the address of the procedure represented by p. +// The return value can be passed to Syscall to run the procedure. +func (p *Proc) Addr() uintptr { + return p.addr +} + +//go:uintptrescapes + +// Call executes procedure p with arguments a. It will panic, if more then 15 arguments +// are supplied. +// +// The returned error is always non-nil, constructed from the result of GetLastError. +// Callers must inspect the primary return value to decide whether an error occurred +// (according to the semantics of the specific function being called) before consulting +// the error. The error will be guaranteed to contain windows.Errno. +func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { + switch len(a) { + case 0: + return syscall.Syscall(p.Addr(), uintptr(len(a)), 0, 0, 0) + case 1: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], 0, 0) + case 2: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], 0) + case 3: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], a[2]) + case 4: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], 0, 0) + case 5: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], 0) + case 6: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5]) + case 7: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0) + case 8: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0) + case 9: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]) + case 10: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0) + case 11: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0) + case 12: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11]) + case 13: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0) + case 14: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0) + case 15: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14]) + default: + panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".") + } +} + +// A LazyDLL implements access to a single DLL. +// It will delay the load of the DLL until the first +// call to its Handle method or to one of its +// LazyProc's Addr method. +type LazyDLL struct { + Name string + + // System determines whether the DLL must be loaded from the + // Windows System directory, bypassing the normal DLL search + // path. + System bool + + mu sync.Mutex + dll *DLL // non nil once DLL is loaded +} + +// Load loads DLL file d.Name into memory. It returns an error if fails. +// Load will not try to load DLL, if it is already loaded into memory. +func (d *LazyDLL) Load() error { + // Non-racy version of: + // if d.dll != nil { + if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll))) != nil { + return nil + } + d.mu.Lock() + defer d.mu.Unlock() + if d.dll != nil { + return nil + } + + // kernel32.dll is special, since it's where LoadLibraryEx comes from. + // The kernel already special-cases its name, so it's always + // loaded from system32. + var dll *DLL + var err error + if d.Name == "kernel32.dll" { + dll, err = LoadDLL(d.Name) + } else { + dll, err = loadLibraryEx(d.Name, d.System) + } + if err != nil { + return err + } + + // Non-racy version of: + // d.dll = dll + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll)), unsafe.Pointer(dll)) + return nil +} + +// mustLoad is like Load but panics if search fails. +func (d *LazyDLL) mustLoad() { + e := d.Load() + if e != nil { + panic(e) + } +} + +// Handle returns d's module handle. +func (d *LazyDLL) Handle() uintptr { + d.mustLoad() + return uintptr(d.dll.Handle) +} + +// NewProc returns a LazyProc for accessing the named procedure in the DLL d. +func (d *LazyDLL) NewProc(name string) *LazyProc { + return &LazyProc{l: d, Name: name} +} + +// NewLazyDLL creates new LazyDLL associated with DLL file. +func NewLazyDLL(name string) *LazyDLL { + return &LazyDLL{Name: name} +} + +// NewLazySystemDLL is like NewLazyDLL, but will only +// search Windows System directory for the DLL if name is +// a base name (like "advapi32.dll"). +func NewLazySystemDLL(name string) *LazyDLL { + return &LazyDLL{Name: name, System: true} +} + +// A LazyProc implements access to a procedure inside a LazyDLL. +// It delays the lookup until the Addr method is called. +type LazyProc struct { + Name string + + mu sync.Mutex + l *LazyDLL + proc *Proc +} + +// Find searches DLL for procedure named p.Name. It returns +// an error if search fails. Find will not search procedure, +// if it is already found and loaded into memory. +func (p *LazyProc) Find() error { + // Non-racy version of: + // if p.proc == nil { + if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc))) == nil { + p.mu.Lock() + defer p.mu.Unlock() + if p.proc == nil { + e := p.l.Load() + if e != nil { + return e + } + proc, e := p.l.dll.FindProc(p.Name) + if e != nil { + return e + } + // Non-racy version of: + // p.proc = proc + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc)), unsafe.Pointer(proc)) + } + } + return nil +} + +// mustFind is like Find but panics if search fails. +func (p *LazyProc) mustFind() { + e := p.Find() + if e != nil { + panic(e) + } +} + +// Addr returns the address of the procedure represented by p. +// The return value can be passed to Syscall to run the procedure. +func (p *LazyProc) Addr() uintptr { + p.mustFind() + return p.proc.Addr() +} + +//go:uintptrescapes + +// Call executes procedure p with arguments a. It will panic, if more then 15 arguments +// are supplied. +// +// The returned error is always non-nil, constructed from the result of GetLastError. +// Callers must inspect the primary return value to decide whether an error occurred +// (according to the semantics of the specific function being called) before consulting +// the error. The error will be guaranteed to contain windows.Errno. +func (p *LazyProc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { + p.mustFind() + return p.proc.Call(a...) +} + +var canDoSearchSystem32Once struct { + sync.Once + v bool +} + +func initCanDoSearchSystem32() { + // https://msdn.microsoft.com/en-us/library/ms684179(v=vs.85).aspx says: + // "Windows 7, Windows Server 2008 R2, Windows Vista, and Windows + // Server 2008: The LOAD_LIBRARY_SEARCH_* flags are available on + // systems that have KB2533623 installed. To determine whether the + // flags are available, use GetProcAddress to get the address of the + // AddDllDirectory, RemoveDllDirectory, or SetDefaultDllDirectories + // function. If GetProcAddress succeeds, the LOAD_LIBRARY_SEARCH_* + // flags can be used with LoadLibraryEx." + canDoSearchSystem32Once.v = (modkernel32.NewProc("AddDllDirectory").Find() == nil) +} + +func canDoSearchSystem32() bool { + canDoSearchSystem32Once.Do(initCanDoSearchSystem32) + return canDoSearchSystem32Once.v +} + +func isBaseName(name string) bool { + for _, c := range name { + if c == ':' || c == '/' || c == '\\' { + return false + } + } + return true +} + +// loadLibraryEx wraps the Windows LoadLibraryEx function. +// +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179(v=vs.85).aspx +// +// If name is not an absolute path, LoadLibraryEx searches for the DLL +// in a variety of automatic locations unless constrained by flags. +// See: https://msdn.microsoft.com/en-us/library/ff919712%28VS.85%29.aspx +func loadLibraryEx(name string, system bool) (*DLL, error) { + loadDLL := name + var flags uintptr + if system { + if canDoSearchSystem32() { + const LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800 + flags = LOAD_LIBRARY_SEARCH_SYSTEM32 + } else if isBaseName(name) { + // WindowsXP or unpatched Windows machine + // trying to load "foo.dll" out of the system + // folder, but LoadLibraryEx doesn't support + // that yet on their system, so emulate it. + windir, _ := Getenv("WINDIR") // old var; apparently works on XP + if windir == "" { + return nil, errString("%WINDIR% not defined") + } + loadDLL = windir + "\\System32\\" + name + } + } + h, err := LoadLibraryEx(loadDLL, 0, flags) + if err != nil { + return nil, err + } + return &DLL{Name: name, Handle: h}, nil +} + +type errString string + +func (s errString) Error() string { return string(s) } diff --git a/vendor/golang.org/x/sys/windows/env_unset.go b/vendor/golang.org/x/sys/windows/env_unset.go new file mode 100644 index 0000000..4ed03ae --- /dev/null +++ b/vendor/golang.org/x/sys/windows/env_unset.go @@ -0,0 +1,15 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows +// +build go1.4 + +package windows + +import "syscall" + +func Unsetenv(key string) error { + // This was added in Go 1.4. + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go new file mode 100644 index 0000000..a9d8ef4 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/env_windows.go @@ -0,0 +1,25 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Windows environment variables. + +package windows + +import "syscall" + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} diff --git a/vendor/golang.org/x/sys/windows/eventlog.go b/vendor/golang.org/x/sys/windows/eventlog.go new file mode 100644 index 0000000..40af946 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/eventlog.go @@ -0,0 +1,20 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package windows + +const ( + EVENTLOG_SUCCESS = 0 + EVENTLOG_ERROR_TYPE = 1 + EVENTLOG_WARNING_TYPE = 2 + EVENTLOG_INFORMATION_TYPE = 4 + EVENTLOG_AUDIT_SUCCESS = 8 + EVENTLOG_AUDIT_FAILURE = 16 +) + +//sys RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) [failretval==0] = advapi32.RegisterEventSourceW +//sys DeregisterEventSource(handle Handle) (err error) = advapi32.DeregisterEventSource +//sys ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) = advapi32.ReportEventW diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go new file mode 100644 index 0000000..3606c3a --- /dev/null +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -0,0 +1,97 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Fork, exec, wait, etc. + +package windows + +// EscapeArg rewrites command line argument s as prescribed +// in http://msdn.microsoft.com/en-us/library/ms880421. +// This function returns "" (2 double quotes) if s is empty. +// Alternatively, these transformations are done: +// - every back slash (\) is doubled, but only if immediately +// followed by double quote ("); +// - every double quote (") is escaped by back slash (\); +// - finally, s is wrapped with double quotes (arg -> "arg"), +// but only if there is space or tab inside s. +func EscapeArg(s string) string { + if len(s) == 0 { + return "\"\"" + } + n := len(s) + hasSpace := false + for i := 0; i < len(s); i++ { + switch s[i] { + case '"', '\\': + n++ + case ' ', '\t': + hasSpace = true + } + } + if hasSpace { + n += 2 + } + if n == len(s) { + return s + } + + qs := make([]byte, n) + j := 0 + if hasSpace { + qs[j] = '"' + j++ + } + slashes := 0 + for i := 0; i < len(s); i++ { + switch s[i] { + default: + slashes = 0 + qs[j] = s[i] + case '\\': + slashes++ + qs[j] = s[i] + case '"': + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '\\' + j++ + qs[j] = s[i] + } + j++ + } + if hasSpace { + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '"' + j++ + } + return string(qs[:j]) +} + +func CloseOnExec(fd Handle) { + SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0) +} + +// FullPath retrieves the full path of the specified file. +func FullPath(name string) (path string, err error) { + p, err := UTF16PtrFromString(name) + if err != nil { + return "", err + } + n := uint32(100) + for { + buf := make([]uint16, n) + n, err = GetFullPathName(p, uint32(len(buf)), &buf[0], nil) + if err != nil { + return "", err + } + if n <= uint32(len(buf)) { + return UTF16ToString(buf[:n]), nil + } + } +} diff --git a/vendor/golang.org/x/sys/windows/memory_windows.go b/vendor/golang.org/x/sys/windows/memory_windows.go new file mode 100644 index 0000000..f63e899 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/memory_windows.go @@ -0,0 +1,26 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +const ( + MEM_COMMIT = 0x00001000 + MEM_RESERVE = 0x00002000 + MEM_DECOMMIT = 0x00004000 + MEM_RELEASE = 0x00008000 + MEM_RESET = 0x00080000 + MEM_TOP_DOWN = 0x00100000 + MEM_WRITE_WATCH = 0x00200000 + MEM_PHYSICAL = 0x00400000 + MEM_RESET_UNDO = 0x01000000 + MEM_LARGE_PAGES = 0x20000000 + + PAGE_NOACCESS = 0x01 + PAGE_READONLY = 0x02 + PAGE_READWRITE = 0x04 + PAGE_WRITECOPY = 0x08 + PAGE_EXECUTE_READ = 0x20 + PAGE_EXECUTE_READWRITE = 0x40 + PAGE_EXECUTE_WRITECOPY = 0x80 +) diff --git a/vendor/golang.org/x/sys/windows/mksyscall.go b/vendor/golang.org/x/sys/windows/mksyscall.go new file mode 100644 index 0000000..e1c88c9 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/mksyscall.go @@ -0,0 +1,7 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go diff --git a/vendor/golang.org/x/sys/windows/race.go b/vendor/golang.org/x/sys/windows/race.go new file mode 100644 index 0000000..343e18a --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race.go @@ -0,0 +1,30 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows,race + +package windows + +import ( + "runtime" + "unsafe" +) + +const raceenabled = true + +func raceAcquire(addr unsafe.Pointer) { + runtime.RaceAcquire(addr) +} + +func raceReleaseMerge(addr unsafe.Pointer) { + runtime.RaceReleaseMerge(addr) +} + +func raceReadRange(addr unsafe.Pointer, len int) { + runtime.RaceReadRange(addr, len) +} + +func raceWriteRange(addr unsafe.Pointer, len int) { + runtime.RaceWriteRange(addr, len) +} diff --git a/vendor/golang.org/x/sys/windows/race0.go b/vendor/golang.org/x/sys/windows/race0.go new file mode 100644 index 0000000..17af843 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race0.go @@ -0,0 +1,25 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows,!race + +package windows + +import ( + "unsafe" +) + +const raceenabled = false + +func raceAcquire(addr unsafe.Pointer) { +} + +func raceReleaseMerge(addr unsafe.Pointer) { +} + +func raceReadRange(addr unsafe.Pointer, len int) { +} + +func raceWriteRange(addr unsafe.Pointer, len int) { +} diff --git a/vendor/golang.org/x/sys/windows/registry/export_test.go b/vendor/golang.org/x/sys/windows/registry/export_test.go new file mode 100644 index 0000000..8badf6f --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/export_test.go @@ -0,0 +1,11 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package registry + +func (k Key) SetValue(name string, valtype uint32, data []byte) error { + return k.setValue(name, valtype, data) +} diff --git a/vendor/golang.org/x/sys/windows/registry/key.go b/vendor/golang.org/x/sys/windows/registry/key.go new file mode 100644 index 0000000..d0beb19 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/key.go @@ -0,0 +1,200 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package registry provides access to the Windows registry. +// +// Here is a simple example, opening a registry key and reading a string value from it. +// +// k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) +// if err != nil { +// log.Fatal(err) +// } +// defer k.Close() +// +// s, _, err := k.GetStringValue("SystemRoot") +// if err != nil { +// log.Fatal(err) +// } +// fmt.Printf("Windows system root is %q\n", s) +// +package registry + +import ( + "io" + "syscall" + "time" +) + +const ( + // Registry key security and access rights. + // See https://msdn.microsoft.com/en-us/library/windows/desktop/ms724878.aspx + // for details. + ALL_ACCESS = 0xf003f + CREATE_LINK = 0x00020 + CREATE_SUB_KEY = 0x00004 + ENUMERATE_SUB_KEYS = 0x00008 + EXECUTE = 0x20019 + NOTIFY = 0x00010 + QUERY_VALUE = 0x00001 + READ = 0x20019 + SET_VALUE = 0x00002 + WOW64_32KEY = 0x00200 + WOW64_64KEY = 0x00100 + WRITE = 0x20006 +) + +// Key is a handle to an open Windows registry key. +// Keys can be obtained by calling OpenKey; there are +// also some predefined root keys such as CURRENT_USER. +// Keys can be used directly in the Windows API. +type Key syscall.Handle + +const ( + // Windows defines some predefined root keys that are always open. + // An application can use these keys as entry points to the registry. + // Normally these keys are used in OpenKey to open new keys, + // but they can also be used anywhere a Key is required. + CLASSES_ROOT = Key(syscall.HKEY_CLASSES_ROOT) + CURRENT_USER = Key(syscall.HKEY_CURRENT_USER) + LOCAL_MACHINE = Key(syscall.HKEY_LOCAL_MACHINE) + USERS = Key(syscall.HKEY_USERS) + CURRENT_CONFIG = Key(syscall.HKEY_CURRENT_CONFIG) + PERFORMANCE_DATA = Key(syscall.HKEY_PERFORMANCE_DATA) +) + +// Close closes open key k. +func (k Key) Close() error { + return syscall.RegCloseKey(syscall.Handle(k)) +} + +// OpenKey opens a new key with path name relative to key k. +// It accepts any open key, including CURRENT_USER and others, +// and returns the new key and an error. +// The access parameter specifies desired access rights to the +// key to be opened. +func OpenKey(k Key, path string, access uint32) (Key, error) { + p, err := syscall.UTF16PtrFromString(path) + if err != nil { + return 0, err + } + var subkey syscall.Handle + err = syscall.RegOpenKeyEx(syscall.Handle(k), p, 0, access, &subkey) + if err != nil { + return 0, err + } + return Key(subkey), nil +} + +// OpenRemoteKey opens a predefined registry key on another +// computer pcname. The key to be opened is specified by k, but +// can only be one of LOCAL_MACHINE, PERFORMANCE_DATA or USERS. +// If pcname is "", OpenRemoteKey returns local computer key. +func OpenRemoteKey(pcname string, k Key) (Key, error) { + var err error + var p *uint16 + if pcname != "" { + p, err = syscall.UTF16PtrFromString(`\\` + pcname) + if err != nil { + return 0, err + } + } + var remoteKey syscall.Handle + err = regConnectRegistry(p, syscall.Handle(k), &remoteKey) + if err != nil { + return 0, err + } + return Key(remoteKey), nil +} + +// ReadSubKeyNames returns the names of subkeys of key k. +// The parameter n controls the number of returned names, +// analogous to the way os.File.Readdirnames works. +func (k Key) ReadSubKeyNames(n int) ([]string, error) { + ki, err := k.Stat() + if err != nil { + return nil, err + } + names := make([]string, 0, ki.SubKeyCount) + buf := make([]uint16, ki.MaxSubKeyLen+1) // extra room for terminating zero byte +loopItems: + for i := uint32(0); ; i++ { + if n > 0 { + if len(names) == n { + return names, nil + } + } + l := uint32(len(buf)) + for { + err := syscall.RegEnumKeyEx(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil) + if err == nil { + break + } + if err == syscall.ERROR_MORE_DATA { + // Double buffer size and try again. + l = uint32(2 * len(buf)) + buf = make([]uint16, l) + continue + } + if err == _ERROR_NO_MORE_ITEMS { + break loopItems + } + return names, err + } + names = append(names, syscall.UTF16ToString(buf[:l])) + } + if n > len(names) { + return names, io.EOF + } + return names, nil +} + +// CreateKey creates a key named path under open key k. +// CreateKey returns the new key and a boolean flag that reports +// whether the key already existed. +// The access parameter specifies the access rights for the key +// to be created. +func CreateKey(k Key, path string, access uint32) (newk Key, openedExisting bool, err error) { + var h syscall.Handle + var d uint32 + err = regCreateKeyEx(syscall.Handle(k), syscall.StringToUTF16Ptr(path), + 0, nil, _REG_OPTION_NON_VOLATILE, access, nil, &h, &d) + if err != nil { + return 0, false, err + } + return Key(h), d == _REG_OPENED_EXISTING_KEY, nil +} + +// DeleteKey deletes the subkey path of key k and its values. +func DeleteKey(k Key, path string) error { + return regDeleteKey(syscall.Handle(k), syscall.StringToUTF16Ptr(path)) +} + +// A KeyInfo describes the statistics of a key. It is returned by Stat. +type KeyInfo struct { + SubKeyCount uint32 + MaxSubKeyLen uint32 // size of the key's subkey with the longest name, in Unicode characters, not including the terminating zero byte + ValueCount uint32 + MaxValueNameLen uint32 // size of the key's longest value name, in Unicode characters, not including the terminating zero byte + MaxValueLen uint32 // longest data component among the key's values, in bytes + lastWriteTime syscall.Filetime +} + +// ModTime returns the key's last write time. +func (ki *KeyInfo) ModTime() time.Time { + return time.Unix(0, ki.lastWriteTime.Nanoseconds()) +} + +// Stat retrieves information about the open key k. +func (k Key) Stat() (*KeyInfo, error) { + var ki KeyInfo + err := syscall.RegQueryInfoKey(syscall.Handle(k), nil, nil, nil, + &ki.SubKeyCount, &ki.MaxSubKeyLen, nil, &ki.ValueCount, + &ki.MaxValueNameLen, &ki.MaxValueLen, nil, &ki.lastWriteTime) + if err != nil { + return nil, err + } + return &ki, nil +} diff --git a/vendor/golang.org/x/sys/windows/registry/mksyscall.go b/vendor/golang.org/x/sys/windows/registry/mksyscall.go new file mode 100644 index 0000000..0ac95ff --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/mksyscall.go @@ -0,0 +1,7 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package registry + +//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go syscall.go diff --git a/vendor/golang.org/x/sys/windows/registry/registry_test.go b/vendor/golang.org/x/sys/windows/registry/registry_test.go new file mode 100644 index 0000000..3cb9771 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/registry_test.go @@ -0,0 +1,756 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package registry_test + +import ( + "bytes" + "crypto/rand" + "os" + "syscall" + "testing" + "time" + "unsafe" + + "golang.org/x/sys/windows/registry" +) + +func randKeyName(prefix string) string { + const numbers = "0123456789" + buf := make([]byte, 10) + rand.Read(buf) + for i, b := range buf { + buf[i] = numbers[b%byte(len(numbers))] + } + return prefix + string(buf) +} + +func TestReadSubKeyNames(t *testing.T) { + k, err := registry.OpenKey(registry.CLASSES_ROOT, "TypeLib", registry.ENUMERATE_SUB_KEYS|registry.QUERY_VALUE) + if err != nil { + t.Fatal(err) + } + defer k.Close() + + names, err := k.ReadSubKeyNames(-1) + if err != nil { + t.Fatal(err) + } + var foundStdOle bool + for _, name := range names { + // Every PC has "stdole 2.0 OLE Automation" library installed. + if name == "{00020430-0000-0000-C000-000000000046}" { + foundStdOle = true + } + } + if !foundStdOle { + t.Fatal("could not find stdole 2.0 OLE Automation") + } +} + +func TestCreateOpenDeleteKey(t *testing.T) { + k, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) + if err != nil { + t.Fatal(err) + } + defer k.Close() + + testKName := randKeyName("TestCreateOpenDeleteKey_") + + testK, exist, err := registry.CreateKey(k, testKName, registry.CREATE_SUB_KEY) + if err != nil { + t.Fatal(err) + } + defer testK.Close() + + if exist { + t.Fatalf("key %q already exists", testKName) + } + + testKAgain, exist, err := registry.CreateKey(k, testKName, registry.CREATE_SUB_KEY) + if err != nil { + t.Fatal(err) + } + defer testKAgain.Close() + + if !exist { + t.Fatalf("key %q should already exist", testKName) + } + + testKOpened, err := registry.OpenKey(k, testKName, registry.ENUMERATE_SUB_KEYS) + if err != nil { + t.Fatal(err) + } + defer testKOpened.Close() + + err = registry.DeleteKey(k, testKName) + if err != nil { + t.Fatal(err) + } + + testKOpenedAgain, err := registry.OpenKey(k, testKName, registry.ENUMERATE_SUB_KEYS) + if err == nil { + defer testKOpenedAgain.Close() + t.Fatalf("key %q should already been deleted", testKName) + } + if err != registry.ErrNotExist { + t.Fatalf(`unexpected error ("not exist" expected): %v`, err) + } +} + +func equalStringSlice(a, b []string) bool { + if len(a) != len(b) { + return false + } + if a == nil { + return true + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} + +type ValueTest struct { + Type uint32 + Name string + Value interface{} + WillFail bool +} + +var ValueTests = []ValueTest{ + {Type: registry.SZ, Name: "String1", Value: ""}, + {Type: registry.SZ, Name: "String2", Value: "\000", WillFail: true}, + {Type: registry.SZ, Name: "String3", Value: "Hello World"}, + {Type: registry.SZ, Name: "String4", Value: "Hello World\000", WillFail: true}, + {Type: registry.EXPAND_SZ, Name: "ExpString1", Value: ""}, + {Type: registry.EXPAND_SZ, Name: "ExpString2", Value: "\000", WillFail: true}, + {Type: registry.EXPAND_SZ, Name: "ExpString3", Value: "Hello World"}, + {Type: registry.EXPAND_SZ, Name: "ExpString4", Value: "Hello\000World", WillFail: true}, + {Type: registry.EXPAND_SZ, Name: "ExpString5", Value: "%PATH%"}, + {Type: registry.EXPAND_SZ, Name: "ExpString6", Value: "%NO_SUCH_VARIABLE%"}, + {Type: registry.EXPAND_SZ, Name: "ExpString7", Value: "%PATH%;."}, + {Type: registry.BINARY, Name: "Binary1", Value: []byte{}}, + {Type: registry.BINARY, Name: "Binary2", Value: []byte{1, 2, 3}}, + {Type: registry.BINARY, Name: "Binary3", Value: []byte{3, 2, 1, 0, 1, 2, 3}}, + {Type: registry.DWORD, Name: "Dword1", Value: uint64(0)}, + {Type: registry.DWORD, Name: "Dword2", Value: uint64(1)}, + {Type: registry.DWORD, Name: "Dword3", Value: uint64(0xff)}, + {Type: registry.DWORD, Name: "Dword4", Value: uint64(0xffff)}, + {Type: registry.QWORD, Name: "Qword1", Value: uint64(0)}, + {Type: registry.QWORD, Name: "Qword2", Value: uint64(1)}, + {Type: registry.QWORD, Name: "Qword3", Value: uint64(0xff)}, + {Type: registry.QWORD, Name: "Qword4", Value: uint64(0xffff)}, + {Type: registry.QWORD, Name: "Qword5", Value: uint64(0xffffff)}, + {Type: registry.QWORD, Name: "Qword6", Value: uint64(0xffffffff)}, + {Type: registry.MULTI_SZ, Name: "MultiString1", Value: []string{"a", "b", "c"}}, + {Type: registry.MULTI_SZ, Name: "MultiString2", Value: []string{"abc", "", "cba"}}, + {Type: registry.MULTI_SZ, Name: "MultiString3", Value: []string{""}}, + {Type: registry.MULTI_SZ, Name: "MultiString4", Value: []string{"abcdef"}}, + {Type: registry.MULTI_SZ, Name: "MultiString5", Value: []string{"\000"}, WillFail: true}, + {Type: registry.MULTI_SZ, Name: "MultiString6", Value: []string{"a\000b"}, WillFail: true}, + {Type: registry.MULTI_SZ, Name: "MultiString7", Value: []string{"ab", "\000", "cd"}, WillFail: true}, + {Type: registry.MULTI_SZ, Name: "MultiString8", Value: []string{"\000", "cd"}, WillFail: true}, + {Type: registry.MULTI_SZ, Name: "MultiString9", Value: []string{"ab", "\000"}, WillFail: true}, +} + +func setValues(t *testing.T, k registry.Key) { + for _, test := range ValueTests { + var err error + switch test.Type { + case registry.SZ: + err = k.SetStringValue(test.Name, test.Value.(string)) + case registry.EXPAND_SZ: + err = k.SetExpandStringValue(test.Name, test.Value.(string)) + case registry.MULTI_SZ: + err = k.SetStringsValue(test.Name, test.Value.([]string)) + case registry.BINARY: + err = k.SetBinaryValue(test.Name, test.Value.([]byte)) + case registry.DWORD: + err = k.SetDWordValue(test.Name, uint32(test.Value.(uint64))) + case registry.QWORD: + err = k.SetQWordValue(test.Name, test.Value.(uint64)) + default: + t.Fatalf("unsupported type %d for %s value", test.Type, test.Name) + } + if test.WillFail { + if err == nil { + t.Fatalf("setting %s value %q should fail, but succeeded", test.Name, test.Value) + } + } else { + if err != nil { + t.Fatal(err) + } + } + } +} + +func enumerateValues(t *testing.T, k registry.Key) { + names, err := k.ReadValueNames(-1) + if err != nil { + t.Error(err) + return + } + haveNames := make(map[string]bool) + for _, n := range names { + haveNames[n] = false + } + for _, test := range ValueTests { + wantFound := !test.WillFail + _, haveFound := haveNames[test.Name] + if wantFound && !haveFound { + t.Errorf("value %s is not found while enumerating", test.Name) + } + if haveFound && !wantFound { + t.Errorf("value %s is found while enumerating, but expected to fail", test.Name) + } + if haveFound { + delete(haveNames, test.Name) + } + } + for n, v := range haveNames { + t.Errorf("value %s (%v) is found while enumerating, but has not been cretaed", n, v) + } +} + +func testErrNotExist(t *testing.T, name string, err error) { + if err == nil { + t.Errorf("%s value should not exist", name) + return + } + if err != registry.ErrNotExist { + t.Errorf("reading %s value should return 'not exist' error, but got: %s", name, err) + return + } +} + +func testErrUnexpectedType(t *testing.T, test ValueTest, gottype uint32, err error) { + if err == nil { + t.Errorf("GetXValue(%q) should not succeed", test.Name) + return + } + if err != registry.ErrUnexpectedType { + t.Errorf("reading %s value should return 'unexpected key value type' error, but got: %s", test.Name, err) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } +} + +func testGetStringValue(t *testing.T, k registry.Key, test ValueTest) { + got, gottype, err := k.GetStringValue(test.Name) + if err != nil { + t.Errorf("GetStringValue(%s) failed: %v", test.Name, err) + return + } + if got != test.Value { + t.Errorf("want %s value %q, got %q", test.Name, test.Value, got) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } + if gottype == registry.EXPAND_SZ { + _, err = registry.ExpandString(got) + if err != nil { + t.Errorf("ExpandString(%s) failed: %v", got, err) + return + } + } +} + +func testGetIntegerValue(t *testing.T, k registry.Key, test ValueTest) { + got, gottype, err := k.GetIntegerValue(test.Name) + if err != nil { + t.Errorf("GetIntegerValue(%s) failed: %v", test.Name, err) + return + } + if got != test.Value.(uint64) { + t.Errorf("want %s value %v, got %v", test.Name, test.Value, got) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } +} + +func testGetBinaryValue(t *testing.T, k registry.Key, test ValueTest) { + got, gottype, err := k.GetBinaryValue(test.Name) + if err != nil { + t.Errorf("GetBinaryValue(%s) failed: %v", test.Name, err) + return + } + if !bytes.Equal(got, test.Value.([]byte)) { + t.Errorf("want %s value %v, got %v", test.Name, test.Value, got) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } +} + +func testGetStringsValue(t *testing.T, k registry.Key, test ValueTest) { + got, gottype, err := k.GetStringsValue(test.Name) + if err != nil { + t.Errorf("GetStringsValue(%s) failed: %v", test.Name, err) + return + } + if !equalStringSlice(got, test.Value.([]string)) { + t.Errorf("want %s value %#v, got %#v", test.Name, test.Value, got) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } +} + +func testGetValue(t *testing.T, k registry.Key, test ValueTest, size int) { + if size <= 0 { + return + } + // read data with no buffer + gotsize, gottype, err := k.GetValue(test.Name, nil) + if err != nil { + t.Errorf("GetValue(%s, [%d]byte) failed: %v", test.Name, size, err) + return + } + if gotsize != size { + t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } + // read data with short buffer + gotsize, gottype, err = k.GetValue(test.Name, make([]byte, size-1)) + if err == nil { + t.Errorf("GetValue(%s, [%d]byte) should fail, but succeeded", test.Name, size-1) + return + } + if err != registry.ErrShortBuffer { + t.Errorf("reading %s value should return 'short buffer' error, but got: %s", test.Name, err) + return + } + if gotsize != size { + t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } + // read full data + gotsize, gottype, err = k.GetValue(test.Name, make([]byte, size)) + if err != nil { + t.Errorf("GetValue(%s, [%d]byte) failed: %v", test.Name, size, err) + return + } + if gotsize != size { + t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } + // check GetValue returns ErrNotExist as required + _, _, err = k.GetValue(test.Name+"_not_there", make([]byte, size)) + if err == nil { + t.Errorf("GetValue(%q) should not succeed", test.Name) + return + } + if err != registry.ErrNotExist { + t.Errorf("GetValue(%q) should return 'not exist' error, but got: %s", test.Name, err) + return + } +} + +func testValues(t *testing.T, k registry.Key) { + for _, test := range ValueTests { + switch test.Type { + case registry.SZ, registry.EXPAND_SZ: + if test.WillFail { + _, _, err := k.GetStringValue(test.Name) + testErrNotExist(t, test.Name, err) + } else { + testGetStringValue(t, k, test) + _, gottype, err := k.GetIntegerValue(test.Name) + testErrUnexpectedType(t, test, gottype, err) + // Size of utf16 string in bytes is not perfect, + // but correct for current test values. + // Size also includes terminating 0. + testGetValue(t, k, test, (len(test.Value.(string))+1)*2) + } + _, _, err := k.GetStringValue(test.Name + "_string_not_created") + testErrNotExist(t, test.Name+"_string_not_created", err) + case registry.DWORD, registry.QWORD: + testGetIntegerValue(t, k, test) + _, gottype, err := k.GetBinaryValue(test.Name) + testErrUnexpectedType(t, test, gottype, err) + _, _, err = k.GetIntegerValue(test.Name + "_int_not_created") + testErrNotExist(t, test.Name+"_int_not_created", err) + size := 8 + if test.Type == registry.DWORD { + size = 4 + } + testGetValue(t, k, test, size) + case registry.BINARY: + testGetBinaryValue(t, k, test) + _, gottype, err := k.GetStringsValue(test.Name) + testErrUnexpectedType(t, test, gottype, err) + _, _, err = k.GetBinaryValue(test.Name + "_byte_not_created") + testErrNotExist(t, test.Name+"_byte_not_created", err) + testGetValue(t, k, test, len(test.Value.([]byte))) + case registry.MULTI_SZ: + if test.WillFail { + _, _, err := k.GetStringsValue(test.Name) + testErrNotExist(t, test.Name, err) + } else { + testGetStringsValue(t, k, test) + _, gottype, err := k.GetStringValue(test.Name) + testErrUnexpectedType(t, test, gottype, err) + size := 0 + for _, s := range test.Value.([]string) { + size += len(s) + 1 // nil terminated + } + size += 1 // extra nil at the end + size *= 2 // count bytes, not uint16 + testGetValue(t, k, test, size) + } + _, _, err := k.GetStringsValue(test.Name + "_strings_not_created") + testErrNotExist(t, test.Name+"_strings_not_created", err) + default: + t.Errorf("unsupported type %d for %s value", test.Type, test.Name) + continue + } + } +} + +func testStat(t *testing.T, k registry.Key) { + subk, _, err := registry.CreateKey(k, "subkey", registry.CREATE_SUB_KEY) + if err != nil { + t.Error(err) + return + } + defer subk.Close() + + defer registry.DeleteKey(k, "subkey") + + ki, err := k.Stat() + if err != nil { + t.Error(err) + return + } + if ki.SubKeyCount != 1 { + t.Error("key must have 1 subkey") + } + if ki.MaxSubKeyLen != 6 { + t.Error("key max subkey name length must be 6") + } + if ki.ValueCount != 24 { + t.Errorf("key must have 24 values, but is %d", ki.ValueCount) + } + if ki.MaxValueNameLen != 12 { + t.Errorf("key max value name length must be 10, but is %d", ki.MaxValueNameLen) + } + if ki.MaxValueLen != 38 { + t.Errorf("key max value length must be 38, but is %d", ki.MaxValueLen) + } + if mt, ct := ki.ModTime(), time.Now(); ct.Sub(mt) > 100*time.Millisecond { + t.Errorf("key mod time is not close to current time: mtime=%v current=%v delta=%v", mt, ct, ct.Sub(mt)) + } +} + +func deleteValues(t *testing.T, k registry.Key) { + for _, test := range ValueTests { + if test.WillFail { + continue + } + err := k.DeleteValue(test.Name) + if err != nil { + t.Error(err) + continue + } + } + names, err := k.ReadValueNames(-1) + if err != nil { + t.Error(err) + return + } + if len(names) != 0 { + t.Errorf("some values remain after deletion: %v", names) + } +} + +func TestValues(t *testing.T) { + softwareK, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) + if err != nil { + t.Fatal(err) + } + defer softwareK.Close() + + testKName := randKeyName("TestValues_") + + k, exist, err := registry.CreateKey(softwareK, testKName, registry.CREATE_SUB_KEY|registry.QUERY_VALUE|registry.SET_VALUE) + if err != nil { + t.Fatal(err) + } + defer k.Close() + + if exist { + t.Fatalf("key %q already exists", testKName) + } + + defer registry.DeleteKey(softwareK, testKName) + + setValues(t, k) + + enumerateValues(t, k) + + testValues(t, k) + + testStat(t, k) + + deleteValues(t, k) +} + +func walkKey(t *testing.T, k registry.Key, kname string) { + names, err := k.ReadValueNames(-1) + if err != nil { + t.Fatalf("reading value names of %s failed: %v", kname, err) + } + for _, name := range names { + _, valtype, err := k.GetValue(name, nil) + if err != nil { + t.Fatalf("reading value type of %s of %s failed: %v", name, kname, err) + } + switch valtype { + case registry.NONE: + case registry.SZ: + _, _, err := k.GetStringValue(name) + if err != nil { + t.Error(err) + } + case registry.EXPAND_SZ: + s, _, err := k.GetStringValue(name) + if err != nil { + t.Error(err) + } + _, err = registry.ExpandString(s) + if err != nil { + t.Error(err) + } + case registry.DWORD, registry.QWORD: + _, _, err := k.GetIntegerValue(name) + if err != nil { + t.Error(err) + } + case registry.BINARY: + _, _, err := k.GetBinaryValue(name) + if err != nil { + t.Error(err) + } + case registry.MULTI_SZ: + _, _, err := k.GetStringsValue(name) + if err != nil { + t.Error(err) + } + case registry.FULL_RESOURCE_DESCRIPTOR, registry.RESOURCE_LIST, registry.RESOURCE_REQUIREMENTS_LIST: + // TODO: not implemented + default: + t.Fatalf("value type %d of %s of %s failed: %v", valtype, name, kname, err) + } + } + + names, err = k.ReadSubKeyNames(-1) + if err != nil { + t.Fatalf("reading sub-keys of %s failed: %v", kname, err) + } + for _, name := range names { + func() { + subk, err := registry.OpenKey(k, name, registry.ENUMERATE_SUB_KEYS|registry.QUERY_VALUE) + if err != nil { + if err == syscall.ERROR_ACCESS_DENIED { + // ignore error, if we are not allowed to access this key + return + } + t.Fatalf("opening sub-keys %s of %s failed: %v", name, kname, err) + } + defer subk.Close() + + walkKey(t, subk, kname+`\`+name) + }() + } +} + +func TestWalkFullRegistry(t *testing.T) { + if testing.Short() { + t.Skip("skipping long running test in short mode") + } + walkKey(t, registry.CLASSES_ROOT, "CLASSES_ROOT") + walkKey(t, registry.CURRENT_USER, "CURRENT_USER") + walkKey(t, registry.LOCAL_MACHINE, "LOCAL_MACHINE") + walkKey(t, registry.USERS, "USERS") + walkKey(t, registry.CURRENT_CONFIG, "CURRENT_CONFIG") +} + +func TestExpandString(t *testing.T) { + got, err := registry.ExpandString("%PATH%") + if err != nil { + t.Fatal(err) + } + want := os.Getenv("PATH") + if got != want { + t.Errorf("want %q string expanded, got %q", want, got) + } +} + +func TestInvalidValues(t *testing.T) { + softwareK, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) + if err != nil { + t.Fatal(err) + } + defer softwareK.Close() + + testKName := randKeyName("TestInvalidValues_") + + k, exist, err := registry.CreateKey(softwareK, testKName, registry.CREATE_SUB_KEY|registry.QUERY_VALUE|registry.SET_VALUE) + if err != nil { + t.Fatal(err) + } + defer k.Close() + + if exist { + t.Fatalf("key %q already exists", testKName) + } + + defer registry.DeleteKey(softwareK, testKName) + + var tests = []struct { + Type uint32 + Name string + Data []byte + }{ + {registry.DWORD, "Dword1", nil}, + {registry.DWORD, "Dword2", []byte{1, 2, 3}}, + {registry.QWORD, "Qword1", nil}, + {registry.QWORD, "Qword2", []byte{1, 2, 3}}, + {registry.QWORD, "Qword3", []byte{1, 2, 3, 4, 5, 6, 7}}, + {registry.MULTI_SZ, "MultiString1", nil}, + {registry.MULTI_SZ, "MultiString2", []byte{0}}, + {registry.MULTI_SZ, "MultiString3", []byte{'a', 'b', 0}}, + {registry.MULTI_SZ, "MultiString4", []byte{'a', 0, 0, 'b', 0}}, + {registry.MULTI_SZ, "MultiString5", []byte{'a', 0, 0}}, + } + + for _, test := range tests { + err := k.SetValue(test.Name, test.Type, test.Data) + if err != nil { + t.Fatalf("SetValue for %q failed: %v", test.Name, err) + } + } + + for _, test := range tests { + switch test.Type { + case registry.DWORD, registry.QWORD: + value, valType, err := k.GetIntegerValue(test.Name) + if err == nil { + t.Errorf("GetIntegerValue(%q) succeeded. Returns type=%d value=%v", test.Name, valType, value) + } + case registry.MULTI_SZ: + value, valType, err := k.GetStringsValue(test.Name) + if err == nil { + if len(value) != 0 { + t.Errorf("GetStringsValue(%q) succeeded. Returns type=%d value=%v", test.Name, valType, value) + } + } + default: + t.Errorf("unsupported type %d for %s value", test.Type, test.Name) + } + } +} + +func TestGetMUIStringValue(t *testing.T) { + if err := registry.LoadRegLoadMUIString(); err != nil { + t.Skip("regLoadMUIString not supported; skipping") + } + if err := procGetDynamicTimeZoneInformation.Find(); err != nil { + t.Skipf("%s not supported; skipping", procGetDynamicTimeZoneInformation.Name) + } + var dtzi DynamicTimezoneinformation + if _, err := GetDynamicTimeZoneInformation(&dtzi); err != nil { + t.Fatal(err) + } + tzKeyName := syscall.UTF16ToString(dtzi.TimeZoneKeyName[:]) + timezoneK, err := registry.OpenKey(registry.LOCAL_MACHINE, + `SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\`+tzKeyName, registry.READ) + if err != nil { + t.Fatal(err) + } + defer timezoneK.Close() + + type testType struct { + name string + want string + } + var tests = []testType{ + {"MUI_Std", syscall.UTF16ToString(dtzi.StandardName[:])}, + } + if dtzi.DynamicDaylightTimeDisabled == 0 { + tests = append(tests, testType{"MUI_Dlt", syscall.UTF16ToString(dtzi.DaylightName[:])}) + } + + for _, test := range tests { + got, err := timezoneK.GetMUIStringValue(test.name) + if err != nil { + t.Error("GetMUIStringValue:", err) + } + + if got != test.want { + t.Errorf("GetMUIStringValue: %s: Got %q, want %q", test.name, got, test.want) + } + } +} + +type DynamicTimezoneinformation struct { + Bias int32 + StandardName [32]uint16 + StandardDate syscall.Systemtime + StandardBias int32 + DaylightName [32]uint16 + DaylightDate syscall.Systemtime + DaylightBias int32 + TimeZoneKeyName [128]uint16 + DynamicDaylightTimeDisabled uint8 +} + +var ( + kernel32DLL = syscall.NewLazyDLL("kernel32") + + procGetDynamicTimeZoneInformation = kernel32DLL.NewProc("GetDynamicTimeZoneInformation") +) + +func GetDynamicTimeZoneInformation(dtzi *DynamicTimezoneinformation) (rc uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetDynamicTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(dtzi)), 0, 0) + rc = uint32(r0) + if rc == 0xffffffff { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} diff --git a/vendor/golang.org/x/sys/windows/registry/syscall.go b/vendor/golang.org/x/sys/windows/registry/syscall.go new file mode 100644 index 0000000..e66643c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/syscall.go @@ -0,0 +1,32 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package registry + +import "syscall" + +const ( + _REG_OPTION_NON_VOLATILE = 0 + + _REG_CREATED_NEW_KEY = 1 + _REG_OPENED_EXISTING_KEY = 2 + + _ERROR_NO_MORE_ITEMS syscall.Errno = 259 +) + +func LoadRegLoadMUIString() error { + return procRegLoadMUIStringW.Find() +} + +//sys regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) = advapi32.RegCreateKeyExW +//sys regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) = advapi32.RegDeleteKeyW +//sys regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) = advapi32.RegSetValueExW +//sys regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegEnumValueW +//sys regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) = advapi32.RegDeleteValueW +//sys regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) = advapi32.RegLoadMUIStringW +//sys regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) = advapi32.RegConnectRegistryW + +//sys expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW diff --git a/vendor/golang.org/x/sys/windows/registry/value.go b/vendor/golang.org/x/sys/windows/registry/value.go new file mode 100644 index 0000000..71d4e15 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/value.go @@ -0,0 +1,384 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package registry + +import ( + "errors" + "io" + "syscall" + "unicode/utf16" + "unsafe" +) + +const ( + // Registry value types. + NONE = 0 + SZ = 1 + EXPAND_SZ = 2 + BINARY = 3 + DWORD = 4 + DWORD_BIG_ENDIAN = 5 + LINK = 6 + MULTI_SZ = 7 + RESOURCE_LIST = 8 + FULL_RESOURCE_DESCRIPTOR = 9 + RESOURCE_REQUIREMENTS_LIST = 10 + QWORD = 11 +) + +var ( + // ErrShortBuffer is returned when the buffer was too short for the operation. + ErrShortBuffer = syscall.ERROR_MORE_DATA + + // ErrNotExist is returned when a registry key or value does not exist. + ErrNotExist = syscall.ERROR_FILE_NOT_FOUND + + // ErrUnexpectedType is returned by Get*Value when the value's type was unexpected. + ErrUnexpectedType = errors.New("unexpected key value type") +) + +// GetValue retrieves the type and data for the specified value associated +// with an open key k. It fills up buffer buf and returns the retrieved +// byte count n. If buf is too small to fit the stored value it returns +// ErrShortBuffer error along with the required buffer size n. +// If no buffer is provided, it returns true and actual buffer size n. +// If no buffer is provided, GetValue returns the value's type only. +// If the value does not exist, the error returned is ErrNotExist. +// +// GetValue is a low level function. If value's type is known, use the appropriate +// Get*Value function instead. +func (k Key) GetValue(name string, buf []byte) (n int, valtype uint32, err error) { + pname, err := syscall.UTF16PtrFromString(name) + if err != nil { + return 0, 0, err + } + var pbuf *byte + if len(buf) > 0 { + pbuf = (*byte)(unsafe.Pointer(&buf[0])) + } + l := uint32(len(buf)) + err = syscall.RegQueryValueEx(syscall.Handle(k), pname, nil, &valtype, pbuf, &l) + if err != nil { + return int(l), valtype, err + } + return int(l), valtype, nil +} + +func (k Key) getValue(name string, buf []byte) (date []byte, valtype uint32, err error) { + p, err := syscall.UTF16PtrFromString(name) + if err != nil { + return nil, 0, err + } + var t uint32 + n := uint32(len(buf)) + for { + err = syscall.RegQueryValueEx(syscall.Handle(k), p, nil, &t, (*byte)(unsafe.Pointer(&buf[0])), &n) + if err == nil { + return buf[:n], t, nil + } + if err != syscall.ERROR_MORE_DATA { + return nil, 0, err + } + if n <= uint32(len(buf)) { + return nil, 0, err + } + buf = make([]byte, n) + } +} + +// GetStringValue retrieves the string value for the specified +// value name associated with an open key k. It also returns the value's type. +// If value does not exist, GetStringValue returns ErrNotExist. +// If value is not SZ or EXPAND_SZ, it will return the correct value +// type and ErrUnexpectedType. +func (k Key) GetStringValue(name string) (val string, valtype uint32, err error) { + data, typ, err2 := k.getValue(name, make([]byte, 64)) + if err2 != nil { + return "", typ, err2 + } + switch typ { + case SZ, EXPAND_SZ: + default: + return "", typ, ErrUnexpectedType + } + if len(data) == 0 { + return "", typ, nil + } + u := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:] + return syscall.UTF16ToString(u), typ, nil +} + +// GetMUIStringValue retrieves the localized string value for +// the specified value name associated with an open key k. +// If the value name doesn't exist or the localized string value +// can't be resolved, GetMUIStringValue returns ErrNotExist. +// GetMUIStringValue panics if the system doesn't support +// regLoadMUIString; use LoadRegLoadMUIString to check if +// regLoadMUIString is supported before calling this function. +func (k Key) GetMUIStringValue(name string) (string, error) { + pname, err := syscall.UTF16PtrFromString(name) + if err != nil { + return "", err + } + + buf := make([]uint16, 1024) + var buflen uint32 + var pdir *uint16 + + err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) + if err == syscall.ERROR_FILE_NOT_FOUND { // Try fallback path + + // Try to resolve the string value using the system directory as + // a DLL search path; this assumes the string value is of the form + // @[path]\dllname,-strID but with no path given, e.g. @tzres.dll,-320. + + // This approach works with tzres.dll but may have to be revised + // in the future to allow callers to provide custom search paths. + + var s string + s, err = ExpandString("%SystemRoot%\\system32\\") + if err != nil { + return "", err + } + pdir, err = syscall.UTF16PtrFromString(s) + if err != nil { + return "", err + } + + err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) + } + + for err == syscall.ERROR_MORE_DATA { // Grow buffer if needed + if buflen <= uint32(len(buf)) { + break // Buffer not growing, assume race; break + } + buf = make([]uint16, buflen) + err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) + } + + if err != nil { + return "", err + } + + return syscall.UTF16ToString(buf), nil +} + +// ExpandString expands environment-variable strings and replaces +// them with the values defined for the current user. +// Use ExpandString to expand EXPAND_SZ strings. +func ExpandString(value string) (string, error) { + if value == "" { + return "", nil + } + p, err := syscall.UTF16PtrFromString(value) + if err != nil { + return "", err + } + r := make([]uint16, 100) + for { + n, err := expandEnvironmentStrings(p, &r[0], uint32(len(r))) + if err != nil { + return "", err + } + if n <= uint32(len(r)) { + u := (*[1 << 29]uint16)(unsafe.Pointer(&r[0]))[:] + return syscall.UTF16ToString(u), nil + } + r = make([]uint16, n) + } +} + +// GetStringsValue retrieves the []string value for the specified +// value name associated with an open key k. It also returns the value's type. +// If value does not exist, GetStringsValue returns ErrNotExist. +// If value is not MULTI_SZ, it will return the correct value +// type and ErrUnexpectedType. +func (k Key) GetStringsValue(name string) (val []string, valtype uint32, err error) { + data, typ, err2 := k.getValue(name, make([]byte, 64)) + if err2 != nil { + return nil, typ, err2 + } + if typ != MULTI_SZ { + return nil, typ, ErrUnexpectedType + } + if len(data) == 0 { + return nil, typ, nil + } + p := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:len(data)/2] + if len(p) == 0 { + return nil, typ, nil + } + if p[len(p)-1] == 0 { + p = p[:len(p)-1] // remove terminating null + } + val = make([]string, 0, 5) + from := 0 + for i, c := range p { + if c == 0 { + val = append(val, string(utf16.Decode(p[from:i]))) + from = i + 1 + } + } + return val, typ, nil +} + +// GetIntegerValue retrieves the integer value for the specified +// value name associated with an open key k. It also returns the value's type. +// If value does not exist, GetIntegerValue returns ErrNotExist. +// If value is not DWORD or QWORD, it will return the correct value +// type and ErrUnexpectedType. +func (k Key) GetIntegerValue(name string) (val uint64, valtype uint32, err error) { + data, typ, err2 := k.getValue(name, make([]byte, 8)) + if err2 != nil { + return 0, typ, err2 + } + switch typ { + case DWORD: + if len(data) != 4 { + return 0, typ, errors.New("DWORD value is not 4 bytes long") + } + return uint64(*(*uint32)(unsafe.Pointer(&data[0]))), DWORD, nil + case QWORD: + if len(data) != 8 { + return 0, typ, errors.New("QWORD value is not 8 bytes long") + } + return uint64(*(*uint64)(unsafe.Pointer(&data[0]))), QWORD, nil + default: + return 0, typ, ErrUnexpectedType + } +} + +// GetBinaryValue retrieves the binary value for the specified +// value name associated with an open key k. It also returns the value's type. +// If value does not exist, GetBinaryValue returns ErrNotExist. +// If value is not BINARY, it will return the correct value +// type and ErrUnexpectedType. +func (k Key) GetBinaryValue(name string) (val []byte, valtype uint32, err error) { + data, typ, err2 := k.getValue(name, make([]byte, 64)) + if err2 != nil { + return nil, typ, err2 + } + if typ != BINARY { + return nil, typ, ErrUnexpectedType + } + return data, typ, nil +} + +func (k Key) setValue(name string, valtype uint32, data []byte) error { + p, err := syscall.UTF16PtrFromString(name) + if err != nil { + return err + } + if len(data) == 0 { + return regSetValueEx(syscall.Handle(k), p, 0, valtype, nil, 0) + } + return regSetValueEx(syscall.Handle(k), p, 0, valtype, &data[0], uint32(len(data))) +} + +// SetDWordValue sets the data and type of a name value +// under key k to value and DWORD. +func (k Key) SetDWordValue(name string, value uint32) error { + return k.setValue(name, DWORD, (*[4]byte)(unsafe.Pointer(&value))[:]) +} + +// SetQWordValue sets the data and type of a name value +// under key k to value and QWORD. +func (k Key) SetQWordValue(name string, value uint64) error { + return k.setValue(name, QWORD, (*[8]byte)(unsafe.Pointer(&value))[:]) +} + +func (k Key) setStringValue(name string, valtype uint32, value string) error { + v, err := syscall.UTF16FromString(value) + if err != nil { + return err + } + buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] + return k.setValue(name, valtype, buf) +} + +// SetStringValue sets the data and type of a name value +// under key k to value and SZ. The value must not contain a zero byte. +func (k Key) SetStringValue(name, value string) error { + return k.setStringValue(name, SZ, value) +} + +// SetExpandStringValue sets the data and type of a name value +// under key k to value and EXPAND_SZ. The value must not contain a zero byte. +func (k Key) SetExpandStringValue(name, value string) error { + return k.setStringValue(name, EXPAND_SZ, value) +} + +// SetStringsValue sets the data and type of a name value +// under key k to value and MULTI_SZ. The value strings +// must not contain a zero byte. +func (k Key) SetStringsValue(name string, value []string) error { + ss := "" + for _, s := range value { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return errors.New("string cannot have 0 inside") + } + } + ss += s + "\x00" + } + v := utf16.Encode([]rune(ss + "\x00")) + buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] + return k.setValue(name, MULTI_SZ, buf) +} + +// SetBinaryValue sets the data and type of a name value +// under key k to value and BINARY. +func (k Key) SetBinaryValue(name string, value []byte) error { + return k.setValue(name, BINARY, value) +} + +// DeleteValue removes a named value from the key k. +func (k Key) DeleteValue(name string) error { + return regDeleteValue(syscall.Handle(k), syscall.StringToUTF16Ptr(name)) +} + +// ReadValueNames returns the value names of key k. +// The parameter n controls the number of returned names, +// analogous to the way os.File.Readdirnames works. +func (k Key) ReadValueNames(n int) ([]string, error) { + ki, err := k.Stat() + if err != nil { + return nil, err + } + names := make([]string, 0, ki.ValueCount) + buf := make([]uint16, ki.MaxValueNameLen+1) // extra room for terminating null character +loopItems: + for i := uint32(0); ; i++ { + if n > 0 { + if len(names) == n { + return names, nil + } + } + l := uint32(len(buf)) + for { + err := regEnumValue(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil) + if err == nil { + break + } + if err == syscall.ERROR_MORE_DATA { + // Double buffer size and try again. + l = uint32(2 * len(buf)) + buf = make([]uint16, l) + continue + } + if err == _ERROR_NO_MORE_ITEMS { + break loopItems + } + return names, err + } + names = append(names, syscall.UTF16ToString(buf[:l])) + } + if n > len(names) { + return names, io.EOF + } + return names, nil +} diff --git a/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go new file mode 100644 index 0000000..ceebdd7 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go @@ -0,0 +1,120 @@ +// MACHINE GENERATED BY 'go generate' COMMAND; DO NOT EDIT + +package registry + +import ( + "syscall" + "unsafe" + + "golang.org/x/sys/windows" +) + +var _ unsafe.Pointer + +// Do the interface allocations only once for common +// Errno values. +const ( + errnoERROR_IO_PENDING = 997 +) + +var ( + errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return nil + case errnoERROR_IO_PENDING: + return errERROR_IO_PENDING + } + // TODO: add more here, after collecting data on the common + // error values see on Windows. (perhaps when running + // all.bat?) + return e +} + +var ( + modadvapi32 = windows.NewLazySystemDLL("advapi32.dll") + modkernel32 = windows.NewLazySystemDLL("kernel32.dll") + + procRegCreateKeyExW = modadvapi32.NewProc("RegCreateKeyExW") + procRegDeleteKeyW = modadvapi32.NewProc("RegDeleteKeyW") + procRegSetValueExW = modadvapi32.NewProc("RegSetValueExW") + procRegEnumValueW = modadvapi32.NewProc("RegEnumValueW") + procRegDeleteValueW = modadvapi32.NewProc("RegDeleteValueW") + procRegLoadMUIStringW = modadvapi32.NewProc("RegLoadMUIStringW") + procRegConnectRegistryW = modadvapi32.NewProc("RegConnectRegistryW") + procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW") +) + +func regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegCreateKeyExW.Addr(), 9, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(reserved), uintptr(unsafe.Pointer(class)), uintptr(options), uintptr(desired), uintptr(unsafe.Pointer(sa)), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegDeleteKeyW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(subkey)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegSetValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(valueName)), uintptr(reserved), uintptr(vtype), uintptr(unsafe.Pointer(buf)), uintptr(bufsize)) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegEnumValueW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegDeleteValueW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(name)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegLoadMUIStringW.Addr(), 7, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(unsafe.Pointer(buflenCopied)), uintptr(flags), uintptr(unsafe.Pointer(dir)), 0, 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegConnectRegistryW.Addr(), 3, uintptr(unsafe.Pointer(machinename)), uintptr(key), uintptr(unsafe.Pointer(result))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go new file mode 100644 index 0000000..ca09bdd --- /dev/null +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -0,0 +1,435 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "syscall" + "unsafe" +) + +const ( + STANDARD_RIGHTS_REQUIRED = 0xf0000 + STANDARD_RIGHTS_READ = 0x20000 + STANDARD_RIGHTS_WRITE = 0x20000 + STANDARD_RIGHTS_EXECUTE = 0x20000 + STANDARD_RIGHTS_ALL = 0x1F0000 +) + +const ( + NameUnknown = 0 + NameFullyQualifiedDN = 1 + NameSamCompatible = 2 + NameDisplay = 3 + NameUniqueId = 6 + NameCanonical = 7 + NameUserPrincipal = 8 + NameCanonicalEx = 9 + NameServicePrincipal = 10 + NameDnsDomain = 12 +) + +// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. +// http://blogs.msdn.com/b/drnick/archive/2007/12/19/windows-and-upn-format-credentials.aspx +//sys TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.TranslateNameW +//sys GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.GetUserNameExW + +// TranslateAccountName converts a directory service +// object name from one format to another. +func TranslateAccountName(username string, from, to uint32, initSize int) (string, error) { + u, e := UTF16PtrFromString(username) + if e != nil { + return "", e + } + n := uint32(50) + for { + b := make([]uint16, n) + e = TranslateName(u, from, to, &b[0], &n) + if e == nil { + return UTF16ToString(b[:n]), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", e + } + if n <= uint32(len(b)) { + return "", e + } + } +} + +const ( + // do not reorder + NetSetupUnknownStatus = iota + NetSetupUnjoined + NetSetupWorkgroupName + NetSetupDomainName +) + +type UserInfo10 struct { + Name *uint16 + Comment *uint16 + UsrComment *uint16 + FullName *uint16 +} + +//sys NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) = netapi32.NetUserGetInfo +//sys NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) = netapi32.NetGetJoinInformation +//sys NetApiBufferFree(buf *byte) (neterr error) = netapi32.NetApiBufferFree + +const ( + // do not reorder + SidTypeUser = 1 + iota + SidTypeGroup + SidTypeDomain + SidTypeAlias + SidTypeWellKnownGroup + SidTypeDeletedAccount + SidTypeInvalid + SidTypeUnknown + SidTypeComputer + SidTypeLabel +) + +type SidIdentifierAuthority struct { + Value [6]byte +} + +var ( + SECURITY_NULL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 0}} + SECURITY_WORLD_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 1}} + SECURITY_LOCAL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 2}} + SECURITY_CREATOR_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 3}} + SECURITY_NON_UNIQUE_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 4}} + SECURITY_NT_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 5}} + SECURITY_MANDATORY_LABEL_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 16}} +) + +const ( + SECURITY_NULL_RID = 0 + SECURITY_WORLD_RID = 0 + SECURITY_LOCAL_RID = 0 + SECURITY_CREATOR_OWNER_RID = 0 + SECURITY_CREATOR_GROUP_RID = 1 + SECURITY_DIALUP_RID = 1 + SECURITY_NETWORK_RID = 2 + SECURITY_BATCH_RID = 3 + SECURITY_INTERACTIVE_RID = 4 + SECURITY_LOGON_IDS_RID = 5 + SECURITY_SERVICE_RID = 6 + SECURITY_LOCAL_SYSTEM_RID = 18 + SECURITY_BUILTIN_DOMAIN_RID = 32 + SECURITY_PRINCIPAL_SELF_RID = 10 + SECURITY_CREATOR_OWNER_SERVER_RID = 0x2 + SECURITY_CREATOR_GROUP_SERVER_RID = 0x3 + SECURITY_LOGON_IDS_RID_COUNT = 0x3 + SECURITY_ANONYMOUS_LOGON_RID = 0x7 + SECURITY_PROXY_RID = 0x8 + SECURITY_ENTERPRISE_CONTROLLERS_RID = 0x9 + SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID + SECURITY_AUTHENTICATED_USER_RID = 0xb + SECURITY_RESTRICTED_CODE_RID = 0xc + SECURITY_NT_NON_UNIQUE_RID = 0x15 +) + +//sys LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountSidW +//sys LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountNameW +//sys ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) = advapi32.ConvertSidToStringSidW +//sys ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) = advapi32.ConvertStringSidToSidW +//sys GetLengthSid(sid *SID) (len uint32) = advapi32.GetLengthSid +//sys CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) = advapi32.CopySid +//sys AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) = advapi32.AllocateAndInitializeSid +//sys FreeSid(sid *SID) (err error) [failretval!=0] = advapi32.FreeSid +//sys EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) = advapi32.EqualSid + +// The security identifier (SID) structure is a variable-length +// structure used to uniquely identify users or groups. +type SID struct{} + +// StringToSid converts a string-format security identifier +// sid into a valid, functional sid. +func StringToSid(s string) (*SID, error) { + var sid *SID + p, e := UTF16PtrFromString(s) + if e != nil { + return nil, e + } + e = ConvertStringSidToSid(p, &sid) + if e != nil { + return nil, e + } + defer LocalFree((Handle)(unsafe.Pointer(sid))) + return sid.Copy() +} + +// LookupSID retrieves a security identifier sid for the account +// and the name of the domain on which the account was found. +// System specify target computer to search. +func LookupSID(system, account string) (sid *SID, domain string, accType uint32, err error) { + if len(account) == 0 { + return nil, "", 0, syscall.EINVAL + } + acc, e := UTF16PtrFromString(account) + if e != nil { + return nil, "", 0, e + } + var sys *uint16 + if len(system) > 0 { + sys, e = UTF16PtrFromString(system) + if e != nil { + return nil, "", 0, e + } + } + n := uint32(50) + dn := uint32(50) + for { + b := make([]byte, n) + db := make([]uint16, dn) + sid = (*SID)(unsafe.Pointer(&b[0])) + e = LookupAccountName(sys, acc, sid, &n, &db[0], &dn, &accType) + if e == nil { + return sid, UTF16ToString(db), accType, nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return nil, "", 0, e + } + if n <= uint32(len(b)) { + return nil, "", 0, e + } + } +} + +// String converts sid to a string format +// suitable for display, storage, or transmission. +func (sid *SID) String() (string, error) { + var s *uint16 + e := ConvertSidToStringSid(sid, &s) + if e != nil { + return "", e + } + defer LocalFree((Handle)(unsafe.Pointer(s))) + return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:]), nil +} + +// Len returns the length, in bytes, of a valid security identifier sid. +func (sid *SID) Len() int { + return int(GetLengthSid(sid)) +} + +// Copy creates a duplicate of security identifier sid. +func (sid *SID) Copy() (*SID, error) { + b := make([]byte, sid.Len()) + sid2 := (*SID)(unsafe.Pointer(&b[0])) + e := CopySid(uint32(len(b)), sid2, sid) + if e != nil { + return nil, e + } + return sid2, nil +} + +// LookupAccount retrieves the name of the account for this sid +// and the name of the first domain on which this sid is found. +// System specify target computer to search for. +func (sid *SID) LookupAccount(system string) (account, domain string, accType uint32, err error) { + var sys *uint16 + if len(system) > 0 { + sys, err = UTF16PtrFromString(system) + if err != nil { + return "", "", 0, err + } + } + n := uint32(50) + dn := uint32(50) + for { + b := make([]uint16, n) + db := make([]uint16, dn) + e := LookupAccountSid(sys, sid, &b[0], &n, &db[0], &dn, &accType) + if e == nil { + return UTF16ToString(b), UTF16ToString(db), accType, nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", "", 0, e + } + if n <= uint32(len(b)) { + return "", "", 0, e + } + } +} + +const ( + // do not reorder + TOKEN_ASSIGN_PRIMARY = 1 << iota + TOKEN_DUPLICATE + TOKEN_IMPERSONATE + TOKEN_QUERY + TOKEN_QUERY_SOURCE + TOKEN_ADJUST_PRIVILEGES + TOKEN_ADJUST_GROUPS + TOKEN_ADJUST_DEFAULT + + TOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | + TOKEN_ASSIGN_PRIMARY | + TOKEN_DUPLICATE | + TOKEN_IMPERSONATE | + TOKEN_QUERY | + TOKEN_QUERY_SOURCE | + TOKEN_ADJUST_PRIVILEGES | + TOKEN_ADJUST_GROUPS | + TOKEN_ADJUST_DEFAULT + TOKEN_READ = STANDARD_RIGHTS_READ | TOKEN_QUERY + TOKEN_WRITE = STANDARD_RIGHTS_WRITE | + TOKEN_ADJUST_PRIVILEGES | + TOKEN_ADJUST_GROUPS | + TOKEN_ADJUST_DEFAULT + TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE +) + +const ( + // do not reorder + TokenUser = 1 + iota + TokenGroups + TokenPrivileges + TokenOwner + TokenPrimaryGroup + TokenDefaultDacl + TokenSource + TokenType + TokenImpersonationLevel + TokenStatistics + TokenRestrictedSids + TokenSessionId + TokenGroupsAndPrivileges + TokenSessionReference + TokenSandBoxInert + TokenAuditPolicy + TokenOrigin + TokenElevationType + TokenLinkedToken + TokenElevation + TokenHasRestrictions + TokenAccessInformation + TokenVirtualizationAllowed + TokenVirtualizationEnabled + TokenIntegrityLevel + TokenUIAccess + TokenMandatoryPolicy + TokenLogonSid + MaxTokenInfoClass +) + +type SIDAndAttributes struct { + Sid *SID + Attributes uint32 +} + +type Tokenuser struct { + User SIDAndAttributes +} + +type Tokenprimarygroup struct { + PrimaryGroup *SID +} + +type Tokengroups struct { + GroupCount uint32 + Groups [1]SIDAndAttributes +} + +//sys OpenProcessToken(h Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken +//sys GetTokenInformation(t Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation +//sys GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW + +// An access token contains the security information for a logon session. +// The system creates an access token when a user logs on, and every +// process executed on behalf of the user has a copy of the token. +// The token identifies the user, the user's groups, and the user's +// privileges. The system uses the token to control access to securable +// objects and to control the ability of the user to perform various +// system-related operations on the local computer. +type Token Handle + +// OpenCurrentProcessToken opens the access token +// associated with current process. +func OpenCurrentProcessToken() (Token, error) { + p, e := GetCurrentProcess() + if e != nil { + return 0, e + } + var t Token + e = OpenProcessToken(p, TOKEN_QUERY, &t) + if e != nil { + return 0, e + } + return t, nil +} + +// Close releases access to access token. +func (t Token) Close() error { + return CloseHandle(Handle(t)) +} + +// getInfo retrieves a specified type of information about an access token. +func (t Token) getInfo(class uint32, initSize int) (unsafe.Pointer, error) { + n := uint32(initSize) + for { + b := make([]byte, n) + e := GetTokenInformation(t, class, &b[0], uint32(len(b)), &n) + if e == nil { + return unsafe.Pointer(&b[0]), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return nil, e + } + if n <= uint32(len(b)) { + return nil, e + } + } +} + +// GetTokenUser retrieves access token t user account information. +func (t Token) GetTokenUser() (*Tokenuser, error) { + i, e := t.getInfo(TokenUser, 50) + if e != nil { + return nil, e + } + return (*Tokenuser)(i), nil +} + +// GetTokenGroups retrieves group accounts associated with access token t. +func (t Token) GetTokenGroups() (*Tokengroups, error) { + i, e := t.getInfo(TokenGroups, 50) + if e != nil { + return nil, e + } + return (*Tokengroups)(i), nil +} + +// GetTokenPrimaryGroup retrieves access token t primary group information. +// A pointer to a SID structure representing a group that will become +// the primary group of any objects created by a process using this access token. +func (t Token) GetTokenPrimaryGroup() (*Tokenprimarygroup, error) { + i, e := t.getInfo(TokenPrimaryGroup, 50) + if e != nil { + return nil, e + } + return (*Tokenprimarygroup)(i), nil +} + +// GetUserProfileDirectory retrieves path to the +// root directory of the access token t user's profile. +func (t Token) GetUserProfileDirectory() (string, error) { + n := uint32(100) + for { + b := make([]uint16, n) + e := GetUserProfileDirectory(t, &b[0], &n) + if e == nil { + return UTF16ToString(b), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", e + } + if n <= uint32(len(b)) { + return "", e + } + } +} diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go new file mode 100644 index 0000000..a500dd7 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/service.go @@ -0,0 +1,164 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package windows + +const ( + SC_MANAGER_CONNECT = 1 + SC_MANAGER_CREATE_SERVICE = 2 + SC_MANAGER_ENUMERATE_SERVICE = 4 + SC_MANAGER_LOCK = 8 + SC_MANAGER_QUERY_LOCK_STATUS = 16 + SC_MANAGER_MODIFY_BOOT_CONFIG = 32 + SC_MANAGER_ALL_ACCESS = 0xf003f +) + +//sys OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW + +const ( + SERVICE_KERNEL_DRIVER = 1 + SERVICE_FILE_SYSTEM_DRIVER = 2 + SERVICE_ADAPTER = 4 + SERVICE_RECOGNIZER_DRIVER = 8 + SERVICE_WIN32_OWN_PROCESS = 16 + SERVICE_WIN32_SHARE_PROCESS = 32 + SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS + SERVICE_INTERACTIVE_PROCESS = 256 + SERVICE_DRIVER = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER + SERVICE_TYPE_ALL = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS + + SERVICE_BOOT_START = 0 + SERVICE_SYSTEM_START = 1 + SERVICE_AUTO_START = 2 + SERVICE_DEMAND_START = 3 + SERVICE_DISABLED = 4 + + SERVICE_ERROR_IGNORE = 0 + SERVICE_ERROR_NORMAL = 1 + SERVICE_ERROR_SEVERE = 2 + SERVICE_ERROR_CRITICAL = 3 + + SC_STATUS_PROCESS_INFO = 0 + + SERVICE_STOPPED = 1 + SERVICE_START_PENDING = 2 + SERVICE_STOP_PENDING = 3 + SERVICE_RUNNING = 4 + SERVICE_CONTINUE_PENDING = 5 + SERVICE_PAUSE_PENDING = 6 + SERVICE_PAUSED = 7 + SERVICE_NO_CHANGE = 0xffffffff + + SERVICE_ACCEPT_STOP = 1 + SERVICE_ACCEPT_PAUSE_CONTINUE = 2 + SERVICE_ACCEPT_SHUTDOWN = 4 + SERVICE_ACCEPT_PARAMCHANGE = 8 + SERVICE_ACCEPT_NETBINDCHANGE = 16 + SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32 + SERVICE_ACCEPT_POWEREVENT = 64 + SERVICE_ACCEPT_SESSIONCHANGE = 128 + + SERVICE_CONTROL_STOP = 1 + SERVICE_CONTROL_PAUSE = 2 + SERVICE_CONTROL_CONTINUE = 3 + SERVICE_CONTROL_INTERROGATE = 4 + SERVICE_CONTROL_SHUTDOWN = 5 + SERVICE_CONTROL_PARAMCHANGE = 6 + SERVICE_CONTROL_NETBINDADD = 7 + SERVICE_CONTROL_NETBINDREMOVE = 8 + SERVICE_CONTROL_NETBINDENABLE = 9 + SERVICE_CONTROL_NETBINDDISABLE = 10 + SERVICE_CONTROL_DEVICEEVENT = 11 + SERVICE_CONTROL_HARDWAREPROFILECHANGE = 12 + SERVICE_CONTROL_POWEREVENT = 13 + SERVICE_CONTROL_SESSIONCHANGE = 14 + + SERVICE_ACTIVE = 1 + SERVICE_INACTIVE = 2 + SERVICE_STATE_ALL = 3 + + SERVICE_QUERY_CONFIG = 1 + SERVICE_CHANGE_CONFIG = 2 + SERVICE_QUERY_STATUS = 4 + SERVICE_ENUMERATE_DEPENDENTS = 8 + SERVICE_START = 16 + SERVICE_STOP = 32 + SERVICE_PAUSE_CONTINUE = 64 + SERVICE_INTERROGATE = 128 + SERVICE_USER_DEFINED_CONTROL = 256 + SERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL + SERVICE_RUNS_IN_SYSTEM_PROCESS = 1 + SERVICE_CONFIG_DESCRIPTION = 1 + SERVICE_CONFIG_FAILURE_ACTIONS = 2 + + NO_ERROR = 0 + + SC_ENUM_PROCESS_INFO = 0 +) + +type SERVICE_STATUS struct { + ServiceType uint32 + CurrentState uint32 + ControlsAccepted uint32 + Win32ExitCode uint32 + ServiceSpecificExitCode uint32 + CheckPoint uint32 + WaitHint uint32 +} + +type SERVICE_TABLE_ENTRY struct { + ServiceName *uint16 + ServiceProc uintptr +} + +type QUERY_SERVICE_CONFIG struct { + ServiceType uint32 + StartType uint32 + ErrorControl uint32 + BinaryPathName *uint16 + LoadOrderGroup *uint16 + TagId uint32 + Dependencies *uint16 + ServiceStartName *uint16 + DisplayName *uint16 +} + +type SERVICE_DESCRIPTION struct { + Description *uint16 +} + +type SERVICE_STATUS_PROCESS struct { + ServiceType uint32 + CurrentState uint32 + ControlsAccepted uint32 + Win32ExitCode uint32 + ServiceSpecificExitCode uint32 + CheckPoint uint32 + WaitHint uint32 + ProcessId uint32 + ServiceFlags uint32 +} + +type ENUM_SERVICE_STATUS_PROCESS struct { + ServiceName *uint16 + DisplayName *uint16 + ServiceStatusProcess SERVICE_STATUS_PROCESS +} + +//sys CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle +//sys CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW +//sys OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW +//sys DeleteService(service Handle) (err error) = advapi32.DeleteService +//sys StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) = advapi32.StartServiceW +//sys QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) = advapi32.QueryServiceStatus +//sys ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) = advapi32.ControlService +//sys StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) = advapi32.StartServiceCtrlDispatcherW +//sys SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) = advapi32.SetServiceStatus +//sys ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) = advapi32.ChangeServiceConfigW +//sys QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfigW +//sys ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W +//sys QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W +//sys EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW diff --git a/vendor/golang.org/x/sys/windows/str.go b/vendor/golang.org/x/sys/windows/str.go new file mode 100644 index 0000000..917cc2a --- /dev/null +++ b/vendor/golang.org/x/sys/windows/str.go @@ -0,0 +1,22 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package windows + +func itoa(val int) string { // do it here rather than with fmt to avoid dependency + if val < 0 { + return "-" + itoa(-val) + } + var buf [32]byte // big enough for int64 + i := len(buf) - 1 + for val >= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/golang.org/x/sys/windows/svc/debug/log.go b/vendor/golang.org/x/sys/windows/svc/debug/log.go new file mode 100644 index 0000000..e51ab42 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/debug/log.go @@ -0,0 +1,56 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package debug + +import ( + "os" + "strconv" +) + +// Log interface allows different log implementations to be used. +type Log interface { + Close() error + Info(eid uint32, msg string) error + Warning(eid uint32, msg string) error + Error(eid uint32, msg string) error +} + +// ConsoleLog provides access to the console. +type ConsoleLog struct { + Name string +} + +// New creates new ConsoleLog. +func New(source string) *ConsoleLog { + return &ConsoleLog{Name: source} +} + +// Close closes console log l. +func (l *ConsoleLog) Close() error { + return nil +} + +func (l *ConsoleLog) report(kind string, eid uint32, msg string) error { + s := l.Name + "." + kind + "(" + strconv.Itoa(int(eid)) + "): " + msg + "\n" + _, err := os.Stdout.Write([]byte(s)) + return err +} + +// Info writes an information event msg with event id eid to the console l. +func (l *ConsoleLog) Info(eid uint32, msg string) error { + return l.report("info", eid, msg) +} + +// Warning writes an warning event msg with event id eid to the console l. +func (l *ConsoleLog) Warning(eid uint32, msg string) error { + return l.report("warn", eid, msg) +} + +// Error writes an error event msg with event id eid to the console l. +func (l *ConsoleLog) Error(eid uint32, msg string) error { + return l.report("error", eid, msg) +} diff --git a/vendor/golang.org/x/sys/windows/svc/debug/service.go b/vendor/golang.org/x/sys/windows/svc/debug/service.go new file mode 100644 index 0000000..123df98 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/debug/service.go @@ -0,0 +1,45 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package debug provides facilities to execute svc.Handler on console. +// +package debug + +import ( + "os" + "os/signal" + "syscall" + + "golang.org/x/sys/windows/svc" +) + +// Run executes service name by calling appropriate handler function. +// The process is running on console, unlike real service. Use Ctrl+C to +// send "Stop" command to your service. +func Run(name string, handler svc.Handler) error { + cmds := make(chan svc.ChangeRequest) + changes := make(chan svc.Status) + + sig := make(chan os.Signal) + signal.Notify(sig) + + go func() { + status := svc.Status{State: svc.Stopped} + for { + select { + case <-sig: + cmds <- svc.ChangeRequest{svc.Stop, 0, 0, status} + case status = <-changes: + } + } + }() + + _, errno := handler.Execute([]string{name}, cmds, changes) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/event.go b/vendor/golang.org/x/sys/windows/svc/event.go new file mode 100644 index 0000000..0508e22 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/event.go @@ -0,0 +1,48 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package svc + +import ( + "errors" + + "golang.org/x/sys/windows" +) + +// event represents auto-reset, initially non-signaled Windows event. +// It is used to communicate between go and asm parts of this package. +type event struct { + h windows.Handle +} + +func newEvent() (*event, error) { + h, err := windows.CreateEvent(nil, 0, 0, nil) + if err != nil { + return nil, err + } + return &event{h: h}, nil +} + +func (e *event) Close() error { + return windows.CloseHandle(e.h) +} + +func (e *event) Set() error { + return windows.SetEvent(e.h) +} + +func (e *event) Wait() error { + s, err := windows.WaitForSingleObject(e.h, windows.INFINITE) + switch s { + case windows.WAIT_OBJECT_0: + break + case windows.WAIT_FAILED: + return err + default: + return errors.New("unexpected result from WaitForSingleObject") + } + return nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/install.go b/vendor/golang.org/x/sys/windows/svc/eventlog/install.go new file mode 100644 index 0000000..c76a376 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/eventlog/install.go @@ -0,0 +1,80 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package eventlog + +import ( + "errors" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/registry" +) + +const ( + // Log levels. + Info = windows.EVENTLOG_INFORMATION_TYPE + Warning = windows.EVENTLOG_WARNING_TYPE + Error = windows.EVENTLOG_ERROR_TYPE +) + +const addKeyName = `SYSTEM\CurrentControlSet\Services\EventLog\Application` + +// Install modifies PC registry to allow logging with an event source src. +// It adds all required keys and values to the event log registry key. +// Install uses msgFile as the event message file. If useExpandKey is true, +// the event message file is installed as REG_EXPAND_SZ value, +// otherwise as REG_SZ. Use bitwise of log.Error, log.Warning and +// log.Info to specify events supported by the new event source. +func Install(src, msgFile string, useExpandKey bool, eventsSupported uint32) error { + appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.CREATE_SUB_KEY) + if err != nil { + return err + } + defer appkey.Close() + + sk, alreadyExist, err := registry.CreateKey(appkey, src, registry.SET_VALUE) + if err != nil { + return err + } + defer sk.Close() + if alreadyExist { + return errors.New(addKeyName + `\` + src + " registry key already exists") + } + + err = sk.SetDWordValue("CustomSource", 1) + if err != nil { + return err + } + if useExpandKey { + err = sk.SetExpandStringValue("EventMessageFile", msgFile) + } else { + err = sk.SetStringValue("EventMessageFile", msgFile) + } + if err != nil { + return err + } + err = sk.SetDWordValue("TypesSupported", eventsSupported) + if err != nil { + return err + } + return nil +} + +// InstallAsEventCreate is the same as Install, but uses +// %SystemRoot%\System32\EventCreate.exe as the event message file. +func InstallAsEventCreate(src string, eventsSupported uint32) error { + return Install(src, "%SystemRoot%\\System32\\EventCreate.exe", true, eventsSupported) +} + +// Remove deletes all registry elements installed by the correspondent Install. +func Remove(src string) error { + appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.SET_VALUE) + if err != nil { + return err + } + defer appkey.Close() + return registry.DeleteKey(appkey, src) +} diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/log.go b/vendor/golang.org/x/sys/windows/svc/eventlog/log.go new file mode 100644 index 0000000..46e5153 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/eventlog/log.go @@ -0,0 +1,70 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package eventlog implements access to Windows event log. +// +package eventlog + +import ( + "errors" + "syscall" + + "golang.org/x/sys/windows" +) + +// Log provides access to the system log. +type Log struct { + Handle windows.Handle +} + +// Open retrieves a handle to the specified event log. +func Open(source string) (*Log, error) { + return OpenRemote("", source) +} + +// OpenRemote does the same as Open, but on different computer host. +func OpenRemote(host, source string) (*Log, error) { + if source == "" { + return nil, errors.New("Specify event log source") + } + var s *uint16 + if host != "" { + s = syscall.StringToUTF16Ptr(host) + } + h, err := windows.RegisterEventSource(s, syscall.StringToUTF16Ptr(source)) + if err != nil { + return nil, err + } + return &Log{Handle: h}, nil +} + +// Close closes event log l. +func (l *Log) Close() error { + return windows.DeregisterEventSource(l.Handle) +} + +func (l *Log) report(etype uint16, eid uint32, msg string) error { + ss := []*uint16{syscall.StringToUTF16Ptr(msg)} + return windows.ReportEvent(l.Handle, etype, 0, eid, 0, 1, 0, &ss[0], nil) +} + +// Info writes an information event msg with event id eid to the end of event log l. +// When EventCreate.exe is used, eid must be between 1 and 1000. +func (l *Log) Info(eid uint32, msg string) error { + return l.report(windows.EVENTLOG_INFORMATION_TYPE, eid, msg) +} + +// Warning writes an warning event msg with event id eid to the end of event log l. +// When EventCreate.exe is used, eid must be between 1 and 1000. +func (l *Log) Warning(eid uint32, msg string) error { + return l.report(windows.EVENTLOG_WARNING_TYPE, eid, msg) +} + +// Error writes an error event msg with event id eid to the end of event log l. +// When EventCreate.exe is used, eid must be between 1 and 1000. +func (l *Log) Error(eid uint32, msg string) error { + return l.report(windows.EVENTLOG_ERROR_TYPE, eid, msg) +} diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go b/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go new file mode 100644 index 0000000..4dd8ad9 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go @@ -0,0 +1,51 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package eventlog_test + +import ( + "testing" + + "golang.org/x/sys/windows/svc/eventlog" +) + +func TestLog(t *testing.T) { + if testing.Short() { + t.Skip("skipping test in short mode - it modifies system logs") + } + + const name = "mylog" + const supports = eventlog.Error | eventlog.Warning | eventlog.Info + err := eventlog.InstallAsEventCreate(name, supports) + if err != nil { + t.Fatalf("Install failed: %s", err) + } + defer func() { + err = eventlog.Remove(name) + if err != nil { + t.Fatalf("Remove failed: %s", err) + } + }() + + l, err := eventlog.Open(name) + if err != nil { + t.Fatalf("Open failed: %s", err) + } + defer l.Close() + + err = l.Info(1, "info") + if err != nil { + t.Fatalf("Info failed: %s", err) + } + err = l.Warning(2, "warning") + if err != nil { + t.Fatalf("Warning failed: %s", err) + } + err = l.Error(3, "error") + if err != nil { + t.Fatalf("Error failed: %s", err) + } +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/beep.go b/vendor/golang.org/x/sys/windows/svc/example/beep.go new file mode 100644 index 0000000..dcf2340 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/beep.go @@ -0,0 +1,22 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package main + +import ( + "syscall" +) + +// BUG(brainman): MessageBeep Windows api is broken on Windows 7, +// so this example does not beep when runs as service on Windows 7. + +var ( + beepFunc = syscall.MustLoadDLL("user32.dll").MustFindProc("MessageBeep") +) + +func beep() { + beepFunc.Call(0xffffffff) +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/install.go b/vendor/golang.org/x/sys/windows/svc/example/install.go new file mode 100644 index 0000000..39cb00d --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/install.go @@ -0,0 +1,92 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package main + +import ( + "fmt" + "os" + "path/filepath" + + "golang.org/x/sys/windows/svc/eventlog" + "golang.org/x/sys/windows/svc/mgr" +) + +func exePath() (string, error) { + prog := os.Args[0] + p, err := filepath.Abs(prog) + if err != nil { + return "", err + } + fi, err := os.Stat(p) + if err == nil { + if !fi.Mode().IsDir() { + return p, nil + } + err = fmt.Errorf("%s is directory", p) + } + if filepath.Ext(p) == "" { + p += ".exe" + fi, err := os.Stat(p) + if err == nil { + if !fi.Mode().IsDir() { + return p, nil + } + err = fmt.Errorf("%s is directory", p) + } + } + return "", err +} + +func installService(name, desc string) error { + exepath, err := exePath() + if err != nil { + return err + } + m, err := mgr.Connect() + if err != nil { + return err + } + defer m.Disconnect() + s, err := m.OpenService(name) + if err == nil { + s.Close() + return fmt.Errorf("service %s already exists", name) + } + s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: desc}, "is", "auto-started") + if err != nil { + return err + } + defer s.Close() + err = eventlog.InstallAsEventCreate(name, eventlog.Error|eventlog.Warning|eventlog.Info) + if err != nil { + s.Delete() + return fmt.Errorf("SetupEventLogSource() failed: %s", err) + } + return nil +} + +func removeService(name string) error { + m, err := mgr.Connect() + if err != nil { + return err + } + defer m.Disconnect() + s, err := m.OpenService(name) + if err != nil { + return fmt.Errorf("service %s is not installed", name) + } + defer s.Close() + err = s.Delete() + if err != nil { + return err + } + err = eventlog.Remove(name) + if err != nil { + return fmt.Errorf("RemoveEventLogSource() failed: %s", err) + } + return nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/main.go b/vendor/golang.org/x/sys/windows/svc/example/main.go new file mode 100644 index 0000000..dc96c08 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/main.go @@ -0,0 +1,76 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Example service program that beeps. +// +// The program demonstrates how to create Windows service and +// install / remove it on a computer. It also shows how to +// stop / start / pause / continue any service, and how to +// write to event log. It also shows how to use debug +// facilities available in debug package. +// +package main + +import ( + "fmt" + "log" + "os" + "strings" + + "golang.org/x/sys/windows/svc" +) + +func usage(errmsg string) { + fmt.Fprintf(os.Stderr, + "%s\n\n"+ + "usage: %s \n"+ + " where is one of\n"+ + " install, remove, debug, start, stop, pause or continue.\n", + errmsg, os.Args[0]) + os.Exit(2) +} + +func main() { + const svcName = "myservice" + + isIntSess, err := svc.IsAnInteractiveSession() + if err != nil { + log.Fatalf("failed to determine if we are running in an interactive session: %v", err) + } + if !isIntSess { + runService(svcName, false) + return + } + + if len(os.Args) < 2 { + usage("no command specified") + } + + cmd := strings.ToLower(os.Args[1]) + switch cmd { + case "debug": + runService(svcName, true) + return + case "install": + err = installService(svcName, "my service") + case "remove": + err = removeService(svcName) + case "start": + err = startService(svcName) + case "stop": + err = controlService(svcName, svc.Stop, svc.Stopped) + case "pause": + err = controlService(svcName, svc.Pause, svc.Paused) + case "continue": + err = controlService(svcName, svc.Continue, svc.Running) + default: + usage(fmt.Sprintf("invalid command %s", cmd)) + } + if err != nil { + log.Fatalf("failed to %s %s: %v", cmd, svcName, err) + } + return +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/manage.go b/vendor/golang.org/x/sys/windows/svc/example/manage.go new file mode 100644 index 0000000..782dbd9 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/manage.go @@ -0,0 +1,62 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package main + +import ( + "fmt" + "time" + + "golang.org/x/sys/windows/svc" + "golang.org/x/sys/windows/svc/mgr" +) + +func startService(name string) error { + m, err := mgr.Connect() + if err != nil { + return err + } + defer m.Disconnect() + s, err := m.OpenService(name) + if err != nil { + return fmt.Errorf("could not access service: %v", err) + } + defer s.Close() + err = s.Start("is", "manual-started") + if err != nil { + return fmt.Errorf("could not start service: %v", err) + } + return nil +} + +func controlService(name string, c svc.Cmd, to svc.State) error { + m, err := mgr.Connect() + if err != nil { + return err + } + defer m.Disconnect() + s, err := m.OpenService(name) + if err != nil { + return fmt.Errorf("could not access service: %v", err) + } + defer s.Close() + status, err := s.Control(c) + if err != nil { + return fmt.Errorf("could not send control=%d: %v", c, err) + } + timeout := time.Now().Add(10 * time.Second) + for status.State != to { + if timeout.Before(time.Now()) { + return fmt.Errorf("timeout waiting for service to go to state=%d", to) + } + time.Sleep(300 * time.Millisecond) + status, err = s.Query() + if err != nil { + return fmt.Errorf("could not retrieve service status: %v", err) + } + } + return nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/service.go b/vendor/golang.org/x/sys/windows/svc/example/service.go new file mode 100644 index 0000000..237e809 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/service.go @@ -0,0 +1,82 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package main + +import ( + "fmt" + "time" + + "golang.org/x/sys/windows/svc" + "golang.org/x/sys/windows/svc/debug" + "golang.org/x/sys/windows/svc/eventlog" +) + +var elog debug.Log + +type myservice struct{} + +func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) { + const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown | svc.AcceptPauseAndContinue + changes <- svc.Status{State: svc.StartPending} + fasttick := time.Tick(500 * time.Millisecond) + slowtick := time.Tick(2 * time.Second) + tick := fasttick + changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} +loop: + for { + select { + case <-tick: + beep() + elog.Info(1, "beep") + case c := <-r: + switch c.Cmd { + case svc.Interrogate: + changes <- c.CurrentStatus + // Testing deadlock from https://code.google.com/p/winsvc/issues/detail?id=4 + time.Sleep(100 * time.Millisecond) + changes <- c.CurrentStatus + case svc.Stop, svc.Shutdown: + break loop + case svc.Pause: + changes <- svc.Status{State: svc.Paused, Accepts: cmdsAccepted} + tick = slowtick + case svc.Continue: + changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} + tick = fasttick + default: + elog.Error(1, fmt.Sprintf("unexpected control request #%d", c)) + } + } + } + changes <- svc.Status{State: svc.StopPending} + return +} + +func runService(name string, isDebug bool) { + var err error + if isDebug { + elog = debug.New(name) + } else { + elog, err = eventlog.Open(name) + if err != nil { + return + } + } + defer elog.Close() + + elog.Info(1, fmt.Sprintf("starting %s service", name)) + run := svc.Run + if isDebug { + run = debug.Run + } + err = run(name, &myservice{}) + if err != nil { + elog.Error(1, fmt.Sprintf("%s service failed: %v", name, err)) + return + } + elog.Info(1, fmt.Sprintf("%s service stopped", name)) +} diff --git a/vendor/golang.org/x/sys/windows/svc/go12.c b/vendor/golang.org/x/sys/windows/svc/go12.c new file mode 100644 index 0000000..6f1be1f --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/go12.c @@ -0,0 +1,24 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows +// +build !go1.3 + +// copied from pkg/runtime +typedef unsigned int uint32; +typedef unsigned long long int uint64; +#ifdef _64BIT +typedef uint64 uintptr; +#else +typedef uint32 uintptr; +#endif + +// from sys_386.s or sys_amd64.s +void ·servicemain(void); + +void +·getServiceMain(uintptr *r) +{ + *r = (uintptr)·servicemain; +} diff --git a/vendor/golang.org/x/sys/windows/svc/go12.go b/vendor/golang.org/x/sys/windows/svc/go12.go new file mode 100644 index 0000000..6f0a924 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/go12.go @@ -0,0 +1,11 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows +// +build !go1.3 + +package svc + +// from go12.c +func getServiceMain(r *uintptr) diff --git a/vendor/golang.org/x/sys/windows/svc/go13.go b/vendor/golang.org/x/sys/windows/svc/go13.go new file mode 100644 index 0000000..432a9e7 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/go13.go @@ -0,0 +1,31 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows +// +build go1.3 + +package svc + +import "unsafe" + +const ptrSize = 4 << (^uintptr(0) >> 63) // unsafe.Sizeof(uintptr(0)) but an ideal const + +// Should be a built-in for unsafe.Pointer? +func add(p unsafe.Pointer, x uintptr) unsafe.Pointer { + return unsafe.Pointer(uintptr(p) + x) +} + +// funcPC returns the entry PC of the function f. +// It assumes that f is a func value. Otherwise the behavior is undefined. +func funcPC(f interface{}) uintptr { + return **(**uintptr)(add(unsafe.Pointer(&f), ptrSize)) +} + +// from sys_386.s and sys_amd64.s +func servicectlhandler(ctl uint32) uintptr +func servicemain(argc uint32, argv **uint16) + +func getServiceMain(r *uintptr) { + *r = funcPC(servicemain) +} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/config.go b/vendor/golang.org/x/sys/windows/svc/mgr/config.go new file mode 100644 index 0000000..0a6edba --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/mgr/config.go @@ -0,0 +1,139 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package mgr + +import ( + "syscall" + "unicode/utf16" + "unsafe" + + "golang.org/x/sys/windows" +) + +const ( + // Service start types. + StartManual = windows.SERVICE_DEMAND_START // the service must be started manually + StartAutomatic = windows.SERVICE_AUTO_START // the service will start by itself whenever the computer reboots + StartDisabled = windows.SERVICE_DISABLED // the service cannot be started + + // The severity of the error, and action taken, + // if this service fails to start. + ErrorCritical = windows.SERVICE_ERROR_CRITICAL + ErrorIgnore = windows.SERVICE_ERROR_IGNORE + ErrorNormal = windows.SERVICE_ERROR_NORMAL + ErrorSevere = windows.SERVICE_ERROR_SEVERE +) + +// TODO(brainman): Password is not returned by windows.QueryServiceConfig, not sure how to get it. + +type Config struct { + ServiceType uint32 + StartType uint32 + ErrorControl uint32 + BinaryPathName string // fully qualified path to the service binary file, can also include arguments for an auto-start service + LoadOrderGroup string + TagId uint32 + Dependencies []string + ServiceStartName string // name of the account under which the service should run + DisplayName string + Password string + Description string +} + +func toString(p *uint16) string { + if p == nil { + return "" + } + return syscall.UTF16ToString((*[4096]uint16)(unsafe.Pointer(p))[:]) +} + +func toStringSlice(ps *uint16) []string { + if ps == nil { + return nil + } + r := make([]string, 0) + for from, i, p := 0, 0, (*[1 << 24]uint16)(unsafe.Pointer(ps)); true; i++ { + if p[i] == 0 { + // empty string marks the end + if i <= from { + break + } + r = append(r, string(utf16.Decode(p[from:i]))) + from = i + 1 + } + } + return r +} + +// Config retrieves service s configuration paramteres. +func (s *Service) Config() (Config, error) { + var p *windows.QUERY_SERVICE_CONFIG + n := uint32(1024) + for { + b := make([]byte, n) + p = (*windows.QUERY_SERVICE_CONFIG)(unsafe.Pointer(&b[0])) + err := windows.QueryServiceConfig(s.Handle, p, n, &n) + if err == nil { + break + } + if err.(syscall.Errno) != syscall.ERROR_INSUFFICIENT_BUFFER { + return Config{}, err + } + if n <= uint32(len(b)) { + return Config{}, err + } + } + + var p2 *windows.SERVICE_DESCRIPTION + n = uint32(1024) + for { + b := make([]byte, n) + p2 = (*windows.SERVICE_DESCRIPTION)(unsafe.Pointer(&b[0])) + err := windows.QueryServiceConfig2(s.Handle, + windows.SERVICE_CONFIG_DESCRIPTION, &b[0], n, &n) + if err == nil { + break + } + if err.(syscall.Errno) != syscall.ERROR_INSUFFICIENT_BUFFER { + return Config{}, err + } + if n <= uint32(len(b)) { + return Config{}, err + } + } + + return Config{ + ServiceType: p.ServiceType, + StartType: p.StartType, + ErrorControl: p.ErrorControl, + BinaryPathName: toString(p.BinaryPathName), + LoadOrderGroup: toString(p.LoadOrderGroup), + TagId: p.TagId, + Dependencies: toStringSlice(p.Dependencies), + ServiceStartName: toString(p.ServiceStartName), + DisplayName: toString(p.DisplayName), + Description: toString(p2.Description), + }, nil +} + +func updateDescription(handle windows.Handle, desc string) error { + d := windows.SERVICE_DESCRIPTION{toPtr(desc)} + return windows.ChangeServiceConfig2(handle, + windows.SERVICE_CONFIG_DESCRIPTION, (*byte)(unsafe.Pointer(&d))) +} + +// UpdateConfig updates service s configuration parameters. +func (s *Service) UpdateConfig(c Config) error { + err := windows.ChangeServiceConfig(s.Handle, c.ServiceType, c.StartType, + c.ErrorControl, toPtr(c.BinaryPathName), toPtr(c.LoadOrderGroup), + nil, toStringBlock(c.Dependencies), toPtr(c.ServiceStartName), + toPtr(c.Password), toPtr(c.DisplayName)) + if err != nil { + return err + } + return updateDescription(s.Handle, c.Description) +} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go b/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go new file mode 100644 index 0000000..76965b5 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go @@ -0,0 +1,162 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package mgr can be used to manage Windows service programs. +// It can be used to install and remove them. It can also start, +// stop and pause them. The package can query / change current +// service state and config parameters. +// +package mgr + +import ( + "syscall" + "unicode/utf16" + "unsafe" + + "golang.org/x/sys/windows" +) + +// Mgr is used to manage Windows service. +type Mgr struct { + Handle windows.Handle +} + +// Connect establishes a connection to the service control manager. +func Connect() (*Mgr, error) { + return ConnectRemote("") +} + +// ConnectRemote establishes a connection to the +// service control manager on computer named host. +func ConnectRemote(host string) (*Mgr, error) { + var s *uint16 + if host != "" { + s = syscall.StringToUTF16Ptr(host) + } + h, err := windows.OpenSCManager(s, nil, windows.SC_MANAGER_ALL_ACCESS) + if err != nil { + return nil, err + } + return &Mgr{Handle: h}, nil +} + +// Disconnect closes connection to the service control manager m. +func (m *Mgr) Disconnect() error { + return windows.CloseServiceHandle(m.Handle) +} + +func toPtr(s string) *uint16 { + if len(s) == 0 { + return nil + } + return syscall.StringToUTF16Ptr(s) +} + +// toStringBlock terminates strings in ss with 0, and then +// concatenates them together. It also adds extra 0 at the end. +func toStringBlock(ss []string) *uint16 { + if len(ss) == 0 { + return nil + } + t := "" + for _, s := range ss { + if s != "" { + t += s + "\x00" + } + } + if t == "" { + return nil + } + t += "\x00" + return &utf16.Encode([]rune(t))[0] +} + +// CreateService installs new service name on the system. +// The service will be executed by running exepath binary. +// Use config c to specify service parameters. +// Any args will be passed as command-line arguments when +// the service is started; these arguments are distinct from +// the arguments passed to Service.Start or via the "Start +// parameters" field in the service's Properties dialog box. +func (m *Mgr) CreateService(name, exepath string, c Config, args ...string) (*Service, error) { + if c.StartType == 0 { + c.StartType = StartManual + } + if c.ErrorControl == 0 { + c.ErrorControl = ErrorNormal + } + if c.ServiceType == 0 { + c.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS + } + s := syscall.EscapeArg(exepath) + for _, v := range args { + s += " " + syscall.EscapeArg(v) + } + h, err := windows.CreateService(m.Handle, toPtr(name), toPtr(c.DisplayName), + windows.SERVICE_ALL_ACCESS, c.ServiceType, + c.StartType, c.ErrorControl, toPtr(s), toPtr(c.LoadOrderGroup), + nil, toStringBlock(c.Dependencies), toPtr(c.ServiceStartName), toPtr(c.Password)) + if err != nil { + return nil, err + } + if c.Description != "" { + err = updateDescription(h, c.Description) + if err != nil { + return nil, err + } + } + return &Service{Name: name, Handle: h}, nil +} + +// OpenService retrieves access to service name, so it can +// be interrogated and controlled. +func (m *Mgr) OpenService(name string) (*Service, error) { + h, err := windows.OpenService(m.Handle, syscall.StringToUTF16Ptr(name), windows.SERVICE_ALL_ACCESS) + if err != nil { + return nil, err + } + return &Service{Name: name, Handle: h}, nil +} + +// ListServices enumerates services in the specified +// service control manager database m. +// If the caller does not have the SERVICE_QUERY_STATUS +// access right to a service, the service is silently +// omitted from the list of services returned. +func (m *Mgr) ListServices() ([]string, error) { + var err error + var bytesNeeded, servicesReturned uint32 + var buf []byte + for { + var p *byte + if len(buf) > 0 { + p = &buf[0] + } + err = windows.EnumServicesStatusEx(m.Handle, windows.SC_ENUM_PROCESS_INFO, + windows.SERVICE_WIN32, windows.SERVICE_STATE_ALL, + p, uint32(len(buf)), &bytesNeeded, &servicesReturned, nil, nil) + if err == nil { + break + } + if err != syscall.ERROR_MORE_DATA { + return nil, err + } + if bytesNeeded <= uint32(len(buf)) { + return nil, err + } + buf = make([]byte, bytesNeeded) + } + if servicesReturned == 0 { + return nil, nil + } + services := (*[1 << 20]windows.ENUM_SERVICE_STATUS_PROCESS)(unsafe.Pointer(&buf[0]))[:servicesReturned] + var names []string + for _, s := range services { + name := syscall.UTF16ToString((*[1 << 20]uint16)(unsafe.Pointer(s.ServiceName))[:]) + names = append(names, name) + } + return names, nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go b/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go new file mode 100644 index 0000000..e67407c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go @@ -0,0 +1,169 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package mgr_test + +import ( + "os" + "path/filepath" + "sort" + "strings" + "syscall" + "testing" + "time" + + "golang.org/x/sys/windows/svc/mgr" +) + +func TestOpenLanManServer(t *testing.T) { + m, err := mgr.Connect() + if err != nil { + if errno, ok := err.(syscall.Errno); ok && errno == syscall.ERROR_ACCESS_DENIED { + t.Skip("Skipping test: we don't have rights to manage services.") + } + t.Fatalf("SCM connection failed: %s", err) + } + defer m.Disconnect() + + s, err := m.OpenService("LanmanServer") + if err != nil { + t.Fatalf("OpenService(lanmanserver) failed: %s", err) + } + defer s.Close() + + _, err = s.Config() + if err != nil { + t.Fatalf("Config failed: %s", err) + } +} + +func install(t *testing.T, m *mgr.Mgr, name, exepath string, c mgr.Config) { + // Sometimes it takes a while for the service to get + // removed after previous test run. + for i := 0; ; i++ { + s, err := m.OpenService(name) + if err != nil { + break + } + s.Close() + + if i > 10 { + t.Fatalf("service %s already exists", name) + } + time.Sleep(300 * time.Millisecond) + } + + s, err := m.CreateService(name, exepath, c) + if err != nil { + t.Fatalf("CreateService(%s) failed: %v", name, err) + } + defer s.Close() +} + +func depString(d []string) string { + if len(d) == 0 { + return "" + } + for i := range d { + d[i] = strings.ToLower(d[i]) + } + ss := sort.StringSlice(d) + ss.Sort() + return strings.Join([]string(ss), " ") +} + +func testConfig(t *testing.T, s *mgr.Service, should mgr.Config) mgr.Config { + is, err := s.Config() + if err != nil { + t.Fatalf("Config failed: %s", err) + } + if should.DisplayName != is.DisplayName { + t.Fatalf("config mismatch: DisplayName is %q, but should have %q", is.DisplayName, should.DisplayName) + } + if should.StartType != is.StartType { + t.Fatalf("config mismatch: StartType is %v, but should have %v", is.StartType, should.StartType) + } + if should.Description != is.Description { + t.Fatalf("config mismatch: Description is %q, but should have %q", is.Description, should.Description) + } + if depString(should.Dependencies) != depString(is.Dependencies) { + t.Fatalf("config mismatch: Dependencies is %v, but should have %v", is.Dependencies, should.Dependencies) + } + return is +} + +func remove(t *testing.T, s *mgr.Service) { + err := s.Delete() + if err != nil { + t.Fatalf("Delete failed: %s", err) + } +} + +func TestMyService(t *testing.T) { + if testing.Short() { + t.Skip("skipping test in short mode - it modifies system services") + } + + const name = "myservice" + + m, err := mgr.Connect() + if err != nil { + if errno, ok := err.(syscall.Errno); ok && errno == syscall.ERROR_ACCESS_DENIED { + t.Skip("Skipping test: we don't have rights to manage services.") + } + t.Fatalf("SCM connection failed: %s", err) + } + defer m.Disconnect() + + c := mgr.Config{ + StartType: mgr.StartDisabled, + DisplayName: "my service", + Description: "my service is just a test", + Dependencies: []string{"LanmanServer", "W32Time"}, + } + + exename := os.Args[0] + exepath, err := filepath.Abs(exename) + if err != nil { + t.Fatalf("filepath.Abs(%s) failed: %s", exename, err) + } + + install(t, m, name, exepath, c) + + s, err := m.OpenService(name) + if err != nil { + t.Fatalf("service %s is not installed", name) + } + defer s.Close() + + c.BinaryPathName = exepath + c = testConfig(t, s, c) + + c.StartType = mgr.StartManual + err = s.UpdateConfig(c) + if err != nil { + t.Fatalf("UpdateConfig failed: %v", err) + } + + testConfig(t, s, c) + + svcnames, err := m.ListServices() + if err != nil { + t.Fatalf("ListServices failed: %v", err) + } + var myserviceIsInstalled bool + for _, sn := range svcnames { + if sn == name { + myserviceIsInstalled = true + break + } + } + if !myserviceIsInstalled { + t.Errorf("ListServices failed to find %q service", name) + } + + remove(t, s) +} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/service.go b/vendor/golang.org/x/sys/windows/svc/mgr/service.go new file mode 100644 index 0000000..fdc46af --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/mgr/service.go @@ -0,0 +1,72 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package mgr + +import ( + "syscall" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/svc" +) + +// TODO(brainman): Use EnumDependentServices to enumerate dependent services. + +// Service is used to access Windows service. +type Service struct { + Name string + Handle windows.Handle +} + +// Delete marks service s for deletion from the service control manager database. +func (s *Service) Delete() error { + return windows.DeleteService(s.Handle) +} + +// Close relinquish access to the service s. +func (s *Service) Close() error { + return windows.CloseServiceHandle(s.Handle) +} + +// Start starts service s. +// args will be passed to svc.Handler.Execute. +func (s *Service) Start(args ...string) error { + var p **uint16 + if len(args) > 0 { + vs := make([]*uint16, len(args)) + for i := range vs { + vs[i] = syscall.StringToUTF16Ptr(args[i]) + } + p = &vs[0] + } + return windows.StartService(s.Handle, uint32(len(args)), p) +} + +// Control sends state change request c to the servce s. +func (s *Service) Control(c svc.Cmd) (svc.Status, error) { + var t windows.SERVICE_STATUS + err := windows.ControlService(s.Handle, uint32(c), &t) + if err != nil { + return svc.Status{}, err + } + return svc.Status{ + State: svc.State(t.CurrentState), + Accepts: svc.Accepted(t.ControlsAccepted), + }, nil +} + +// Query returns current status of service s. +func (s *Service) Query() (svc.Status, error) { + var t windows.SERVICE_STATUS + err := windows.QueryServiceStatus(s.Handle, &t) + if err != nil { + return svc.Status{}, err + } + return svc.Status{ + State: svc.State(t.CurrentState), + Accepts: svc.Accepted(t.ControlsAccepted), + }, nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/security.go b/vendor/golang.org/x/sys/windows/svc/security.go new file mode 100644 index 0000000..6fbc923 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/security.go @@ -0,0 +1,62 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package svc + +import ( + "unsafe" + + "golang.org/x/sys/windows" +) + +func allocSid(subAuth0 uint32) (*windows.SID, error) { + var sid *windows.SID + err := windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY, + 1, subAuth0, 0, 0, 0, 0, 0, 0, 0, &sid) + if err != nil { + return nil, err + } + return sid, nil +} + +// IsAnInteractiveSession determines if calling process is running interactively. +// It queries the process token for membership in the Interactive group. +// http://stackoverflow.com/questions/2668851/how-do-i-detect-that-my-application-is-running-as-service-or-in-an-interactive-s +func IsAnInteractiveSession() (bool, error) { + interSid, err := allocSid(windows.SECURITY_INTERACTIVE_RID) + if err != nil { + return false, err + } + defer windows.FreeSid(interSid) + + serviceSid, err := allocSid(windows.SECURITY_SERVICE_RID) + if err != nil { + return false, err + } + defer windows.FreeSid(serviceSid) + + t, err := windows.OpenCurrentProcessToken() + if err != nil { + return false, err + } + defer t.Close() + + gs, err := t.GetTokenGroups() + if err != nil { + return false, err + } + p := unsafe.Pointer(&gs.Groups[0]) + groups := (*[2 << 20]windows.SIDAndAttributes)(p)[:gs.GroupCount] + for _, g := range groups { + if windows.EqualSid(g.Sid, interSid) { + return true, nil + } + if windows.EqualSid(g.Sid, serviceSid) { + return false, nil + } + } + return false, nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/service.go b/vendor/golang.org/x/sys/windows/svc/service.go new file mode 100644 index 0000000..903cba3 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/service.go @@ -0,0 +1,363 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package svc provides everything required to build Windows service. +// +package svc + +import ( + "errors" + "runtime" + "syscall" + "unsafe" + + "golang.org/x/sys/windows" +) + +// State describes service execution state (Stopped, Running and so on). +type State uint32 + +const ( + Stopped = State(windows.SERVICE_STOPPED) + StartPending = State(windows.SERVICE_START_PENDING) + StopPending = State(windows.SERVICE_STOP_PENDING) + Running = State(windows.SERVICE_RUNNING) + ContinuePending = State(windows.SERVICE_CONTINUE_PENDING) + PausePending = State(windows.SERVICE_PAUSE_PENDING) + Paused = State(windows.SERVICE_PAUSED) +) + +// Cmd represents service state change request. It is sent to a service +// by the service manager, and should be actioned upon by the service. +type Cmd uint32 + +const ( + Stop = Cmd(windows.SERVICE_CONTROL_STOP) + Pause = Cmd(windows.SERVICE_CONTROL_PAUSE) + Continue = Cmd(windows.SERVICE_CONTROL_CONTINUE) + Interrogate = Cmd(windows.SERVICE_CONTROL_INTERROGATE) + Shutdown = Cmd(windows.SERVICE_CONTROL_SHUTDOWN) + ParamChange = Cmd(windows.SERVICE_CONTROL_PARAMCHANGE) + NetBindAdd = Cmd(windows.SERVICE_CONTROL_NETBINDADD) + NetBindRemove = Cmd(windows.SERVICE_CONTROL_NETBINDREMOVE) + NetBindEnable = Cmd(windows.SERVICE_CONTROL_NETBINDENABLE) + NetBindDisable = Cmd(windows.SERVICE_CONTROL_NETBINDDISABLE) + DeviceEvent = Cmd(windows.SERVICE_CONTROL_DEVICEEVENT) + HardwareProfileChange = Cmd(windows.SERVICE_CONTROL_HARDWAREPROFILECHANGE) + PowerEvent = Cmd(windows.SERVICE_CONTROL_POWEREVENT) + SessionChange = Cmd(windows.SERVICE_CONTROL_SESSIONCHANGE) +) + +// Accepted is used to describe commands accepted by the service. +// Note that Interrogate is always accepted. +type Accepted uint32 + +const ( + AcceptStop = Accepted(windows.SERVICE_ACCEPT_STOP) + AcceptShutdown = Accepted(windows.SERVICE_ACCEPT_SHUTDOWN) + AcceptPauseAndContinue = Accepted(windows.SERVICE_ACCEPT_PAUSE_CONTINUE) + AcceptParamChange = Accepted(windows.SERVICE_ACCEPT_PARAMCHANGE) + AcceptNetBindChange = Accepted(windows.SERVICE_ACCEPT_NETBINDCHANGE) + AcceptHardwareProfileChange = Accepted(windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE) + AcceptPowerEvent = Accepted(windows.SERVICE_ACCEPT_POWEREVENT) + AcceptSessionChange = Accepted(windows.SERVICE_ACCEPT_SESSIONCHANGE) +) + +// Status combines State and Accepted commands to fully describe running service. +type Status struct { + State State + Accepts Accepted + CheckPoint uint32 // used to report progress during a lengthy operation + WaitHint uint32 // estimated time required for a pending operation, in milliseconds +} + +// ChangeRequest is sent to the service Handler to request service status change. +type ChangeRequest struct { + Cmd Cmd + EventType uint32 + EventData uintptr + CurrentStatus Status +} + +// Handler is the interface that must be implemented to build Windows service. +type Handler interface { + + // Execute will be called by the package code at the start of + // the service, and the service will exit once Execute completes. + // Inside Execute you must read service change requests from r and + // act accordingly. You must keep service control manager up to date + // about state of your service by writing into s as required. + // args contains service name followed by argument strings passed + // to the service. + // You can provide service exit code in exitCode return parameter, + // with 0 being "no error". You can also indicate if exit code, + // if any, is service specific or not by using svcSpecificEC + // parameter. + Execute(args []string, r <-chan ChangeRequest, s chan<- Status) (svcSpecificEC bool, exitCode uint32) +} + +var ( + // These are used by asm code. + goWaitsH uintptr + cWaitsH uintptr + ssHandle uintptr + sName *uint16 + sArgc uintptr + sArgv **uint16 + ctlHandlerExProc uintptr + cSetEvent uintptr + cWaitForSingleObject uintptr + cRegisterServiceCtrlHandlerExW uintptr +) + +func init() { + k := syscall.MustLoadDLL("kernel32.dll") + cSetEvent = k.MustFindProc("SetEvent").Addr() + cWaitForSingleObject = k.MustFindProc("WaitForSingleObject").Addr() + a := syscall.MustLoadDLL("advapi32.dll") + cRegisterServiceCtrlHandlerExW = a.MustFindProc("RegisterServiceCtrlHandlerExW").Addr() +} + +// The HandlerEx prototype also has a context pointer but since we don't use +// it at start-up time we don't have to pass it over either. +type ctlEvent struct { + cmd Cmd + eventType uint32 + eventData uintptr + errno uint32 +} + +// service provides access to windows service api. +type service struct { + name string + h windows.Handle + cWaits *event + goWaits *event + c chan ctlEvent + handler Handler +} + +func newService(name string, handler Handler) (*service, error) { + var s service + var err error + s.name = name + s.c = make(chan ctlEvent) + s.handler = handler + s.cWaits, err = newEvent() + if err != nil { + return nil, err + } + s.goWaits, err = newEvent() + if err != nil { + s.cWaits.Close() + return nil, err + } + return &s, nil +} + +func (s *service) close() error { + s.cWaits.Close() + s.goWaits.Close() + return nil +} + +type exitCode struct { + isSvcSpecific bool + errno uint32 +} + +func (s *service) updateStatus(status *Status, ec *exitCode) error { + if s.h == 0 { + return errors.New("updateStatus with no service status handle") + } + var t windows.SERVICE_STATUS + t.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS + t.CurrentState = uint32(status.State) + if status.Accepts&AcceptStop != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_STOP + } + if status.Accepts&AcceptShutdown != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_SHUTDOWN + } + if status.Accepts&AcceptPauseAndContinue != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_PAUSE_CONTINUE + } + if status.Accepts&AcceptParamChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_PARAMCHANGE + } + if status.Accepts&AcceptNetBindChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_NETBINDCHANGE + } + if status.Accepts&AcceptHardwareProfileChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE + } + if status.Accepts&AcceptPowerEvent != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_POWEREVENT + } + if status.Accepts&AcceptSessionChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_SESSIONCHANGE + } + if ec.errno == 0 { + t.Win32ExitCode = windows.NO_ERROR + t.ServiceSpecificExitCode = windows.NO_ERROR + } else if ec.isSvcSpecific { + t.Win32ExitCode = uint32(windows.ERROR_SERVICE_SPECIFIC_ERROR) + t.ServiceSpecificExitCode = ec.errno + } else { + t.Win32ExitCode = ec.errno + t.ServiceSpecificExitCode = windows.NO_ERROR + } + t.CheckPoint = status.CheckPoint + t.WaitHint = status.WaitHint + return windows.SetServiceStatus(s.h, &t) +} + +const ( + sysErrSetServiceStatusFailed = uint32(syscall.APPLICATION_ERROR) + iota + sysErrNewThreadInCallback +) + +func (s *service) run() { + s.goWaits.Wait() + s.h = windows.Handle(ssHandle) + argv := (*[100]*int16)(unsafe.Pointer(sArgv))[:sArgc] + args := make([]string, len(argv)) + for i, a := range argv { + args[i] = syscall.UTF16ToString((*[1 << 20]uint16)(unsafe.Pointer(a))[:]) + } + + cmdsToHandler := make(chan ChangeRequest) + changesFromHandler := make(chan Status) + exitFromHandler := make(chan exitCode) + + go func() { + ss, errno := s.handler.Execute(args, cmdsToHandler, changesFromHandler) + exitFromHandler <- exitCode{ss, errno} + }() + + status := Status{State: Stopped} + ec := exitCode{isSvcSpecific: true, errno: 0} + var outch chan ChangeRequest + inch := s.c + var cmd Cmd + var evtype uint32 + var evdata uintptr +loop: + for { + select { + case r := <-inch: + if r.errno != 0 { + ec.errno = r.errno + break loop + } + inch = nil + outch = cmdsToHandler + cmd = r.cmd + evtype = r.eventType + evdata = r.eventData + case outch <- ChangeRequest{cmd, evtype, evdata, status}: + inch = s.c + outch = nil + case c := <-changesFromHandler: + err := s.updateStatus(&c, &ec) + if err != nil { + // best suitable error number + ec.errno = sysErrSetServiceStatusFailed + if err2, ok := err.(syscall.Errno); ok { + ec.errno = uint32(err2) + } + break loop + } + status = c + case ec = <-exitFromHandler: + break loop + } + } + + s.updateStatus(&Status{State: Stopped}, &ec) + s.cWaits.Set() +} + +func newCallback(fn interface{}) (cb uintptr, err error) { + defer func() { + r := recover() + if r == nil { + return + } + cb = 0 + switch v := r.(type) { + case string: + err = errors.New(v) + case error: + err = v + default: + err = errors.New("unexpected panic in syscall.NewCallback") + } + }() + return syscall.NewCallback(fn), nil +} + +// BUG(brainman): There is no mechanism to run multiple services +// inside one single executable. Perhaps, it can be overcome by +// using RegisterServiceCtrlHandlerEx Windows api. + +// Run executes service name by calling appropriate handler function. +func Run(name string, handler Handler) error { + runtime.LockOSThread() + + tid := windows.GetCurrentThreadId() + + s, err := newService(name, handler) + if err != nil { + return err + } + + ctlHandler := func(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { + e := ctlEvent{cmd: Cmd(ctl), eventType: evtype, eventData: evdata} + // We assume that this callback function is running on + // the same thread as Run. Nowhere in MS documentation + // I could find statement to guarantee that. So putting + // check here to verify, otherwise things will go bad + // quickly, if ignored. + i := windows.GetCurrentThreadId() + if i != tid { + e.errno = sysErrNewThreadInCallback + } + s.c <- e + // Always return NO_ERROR (0) for now. + return 0 + } + + var svcmain uintptr + getServiceMain(&svcmain) + t := []windows.SERVICE_TABLE_ENTRY{ + {syscall.StringToUTF16Ptr(s.name), svcmain}, + {nil, 0}, + } + + goWaitsH = uintptr(s.goWaits.h) + cWaitsH = uintptr(s.cWaits.h) + sName = t[0].ServiceName + ctlHandlerExProc, err = newCallback(ctlHandler) + if err != nil { + return err + } + + go s.run() + + err = windows.StartServiceCtrlDispatcher(&t[0]) + if err != nil { + return err + } + return nil +} + +// StatusHandle returns service status handle. It is safe to call this function +// from inside the Handler.Execute because then it is guaranteed to be set. +// This code will have to change once multiple services are possible per process. +func StatusHandle() windows.Handle { + return windows.Handle(ssHandle) +} diff --git a/vendor/golang.org/x/sys/windows/svc/svc_test.go b/vendor/golang.org/x/sys/windows/svc/svc_test.go new file mode 100644 index 0000000..764da54 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/svc_test.go @@ -0,0 +1,118 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package svc_test + +import ( + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "testing" + "time" + + "golang.org/x/sys/windows/svc" + "golang.org/x/sys/windows/svc/mgr" +) + +func getState(t *testing.T, s *mgr.Service) svc.State { + status, err := s.Query() + if err != nil { + t.Fatalf("Query(%s) failed: %s", s.Name, err) + } + return status.State +} + +func testState(t *testing.T, s *mgr.Service, want svc.State) { + have := getState(t, s) + if have != want { + t.Fatalf("%s state is=%d want=%d", s.Name, have, want) + } +} + +func waitState(t *testing.T, s *mgr.Service, want svc.State) { + for i := 0; ; i++ { + have := getState(t, s) + if have == want { + return + } + if i > 10 { + t.Fatalf("%s state is=%d, waiting timeout", s.Name, have) + } + time.Sleep(300 * time.Millisecond) + } +} + +func TestExample(t *testing.T) { + if testing.Short() { + t.Skip("skipping test in short mode - it modifies system services") + } + + const name = "myservice" + + m, err := mgr.Connect() + if err != nil { + t.Fatalf("SCM connection failed: %s", err) + } + defer m.Disconnect() + + dir, err := ioutil.TempDir("", "svc") + if err != nil { + t.Fatalf("failed to create temp directory: %v", err) + } + defer os.RemoveAll(dir) + + exepath := filepath.Join(dir, "a.exe") + o, err := exec.Command("go", "build", "-o", exepath, "golang.org/x/sys/windows/svc/example").CombinedOutput() + if err != nil { + t.Fatalf("failed to build service program: %v\n%v", err, string(o)) + } + + s, err := m.OpenService(name) + if err == nil { + err = s.Delete() + if err != nil { + s.Close() + t.Fatalf("Delete failed: %s", err) + } + s.Close() + } + s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: "my service"}, "is", "auto-started") + if err != nil { + t.Fatalf("CreateService(%s) failed: %v", name, err) + } + defer s.Close() + + testState(t, s, svc.Stopped) + err = s.Start("is", "manual-started") + if err != nil { + t.Fatalf("Start(%s) failed: %s", s.Name, err) + } + waitState(t, s, svc.Running) + time.Sleep(1 * time.Second) + + // testing deadlock from issues 4. + _, err = s.Control(svc.Interrogate) + if err != nil { + t.Fatalf("Control(%s) failed: %s", s.Name, err) + } + _, err = s.Control(svc.Interrogate) + if err != nil { + t.Fatalf("Control(%s) failed: %s", s.Name, err) + } + time.Sleep(1 * time.Second) + + _, err = s.Control(svc.Stop) + if err != nil { + t.Fatalf("Control(%s) failed: %s", s.Name, err) + } + waitState(t, s, svc.Stopped) + + err = s.Delete() + if err != nil { + t.Fatalf("Delete failed: %s", err) + } +} diff --git a/vendor/golang.org/x/sys/windows/svc/sys_386.s b/vendor/golang.org/x/sys/windows/svc/sys_386.s new file mode 100644 index 0000000..2c82a9d --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/sys_386.s @@ -0,0 +1,68 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// func servicemain(argc uint32, argv **uint16) +TEXT ·servicemain(SB),7,$0 + MOVL argc+0(FP), AX + MOVL AX, ·sArgc(SB) + MOVL argv+4(FP), AX + MOVL AX, ·sArgv(SB) + + PUSHL BP + PUSHL BX + PUSHL SI + PUSHL DI + + SUBL $12, SP + + MOVL ·sName(SB), AX + MOVL AX, (SP) + MOVL $·servicectlhandler(SB), AX + MOVL AX, 4(SP) + MOVL $0, 8(SP) + MOVL ·cRegisterServiceCtrlHandlerExW(SB), AX + MOVL SP, BP + CALL AX + MOVL BP, SP + CMPL AX, $0 + JE exit + MOVL AX, ·ssHandle(SB) + + MOVL ·goWaitsH(SB), AX + MOVL AX, (SP) + MOVL ·cSetEvent(SB), AX + MOVL SP, BP + CALL AX + MOVL BP, SP + + MOVL ·cWaitsH(SB), AX + MOVL AX, (SP) + MOVL $-1, AX + MOVL AX, 4(SP) + MOVL ·cWaitForSingleObject(SB), AX + MOVL SP, BP + CALL AX + MOVL BP, SP + +exit: + ADDL $12, SP + + POPL DI + POPL SI + POPL BX + POPL BP + + MOVL 0(SP), CX + ADDL $12, SP + JMP CX + +// I do not know why, but this seems to be the only way to call +// ctlHandlerProc on Windows 7. + +// func servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { +TEXT ·servicectlhandler(SB),7,$0 + MOVL ·ctlHandlerExProc(SB), CX + JMP CX diff --git a/vendor/golang.org/x/sys/windows/svc/sys_amd64.s b/vendor/golang.org/x/sys/windows/svc/sys_amd64.s new file mode 100644 index 0000000..06b4259 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/sys_amd64.s @@ -0,0 +1,42 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// func servicemain(argc uint32, argv **uint16) +TEXT ·servicemain(SB),7,$0 + MOVL CX, ·sArgc(SB) + MOVL DX, ·sArgv(SB) + + SUBQ $32, SP // stack for the first 4 syscall params + + MOVQ ·sName(SB), CX + MOVQ $·servicectlhandler(SB), DX + // BUG(pastarmovj): Figure out a way to pass in context in R8. + MOVQ ·cRegisterServiceCtrlHandlerExW(SB), AX + CALL AX + CMPQ AX, $0 + JE exit + MOVQ AX, ·ssHandle(SB) + + MOVQ ·goWaitsH(SB), CX + MOVQ ·cSetEvent(SB), AX + CALL AX + + MOVQ ·cWaitsH(SB), CX + MOVQ $4294967295, DX + MOVQ ·cWaitForSingleObject(SB), AX + CALL AX + +exit: + ADDQ $32, SP + RET + +// I do not know why, but this seems to be the only way to call +// ctlHandlerProc on Windows 7. + +// func ·servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { +TEXT ·servicectlhandler(SB),7,$0 + MOVQ ·ctlHandlerExProc(SB), AX + JMP AX diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go new file mode 100644 index 0000000..4e2fbe8 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall.go @@ -0,0 +1,71 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package windows contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display the OS-specific documentation for the current +// system. If you want godoc to display syscall documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.Errno. +package windows // import "golang.org/x/sys/windows" + +import ( + "syscall" +) + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, syscall.EINVAL + } + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mksyscall.pl. +var _zero uintptr + +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} diff --git a/vendor/golang.org/x/sys/windows/syscall_test.go b/vendor/golang.org/x/sys/windows/syscall_test.go new file mode 100644 index 0000000..62588b9 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall_test.go @@ -0,0 +1,33 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package windows_test + +import ( + "testing" + + "golang.org/x/sys/windows" +) + +func testSetGetenv(t *testing.T, key, value string) { + err := windows.Setenv(key, value) + if err != nil { + t.Fatalf("Setenv failed to set %q: %v", value, err) + } + newvalue, found := windows.Getenv(key) + if !found { + t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) + } + if newvalue != value { + t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) + } +} + +func TestEnv(t *testing.T) { + testSetGetenv(t, "TESTENV", "AVALUE") + // make sure TESTENV gets set to "", not deleted + testSetGetenv(t, "TESTENV", "") +} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go new file mode 100644 index 0000000..518250e --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -0,0 +1,998 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Windows system calls. + +package windows + +import ( + errorspkg "errors" + "sync" + "syscall" + "unicode/utf16" + "unsafe" +) + +type Handle uintptr + +const InvalidHandle = ^Handle(0) + +// StringToUTF16 is deprecated. Use UTF16FromString instead. +// If s contains a NUL byte this function panics instead of +// returning an error. +func StringToUTF16(s string) []uint16 { + a, err := UTF16FromString(s) + if err != nil { + panic("windows: string with NUL passed to StringToUTF16") + } + return a +} + +// UTF16FromString returns the UTF-16 encoding of the UTF-8 string +// s, with a terminating NUL added. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func UTF16FromString(s string) ([]uint16, error) { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, syscall.EINVAL + } + } + return utf16.Encode([]rune(s + "\x00")), nil +} + +// UTF16ToString returns the UTF-8 encoding of the UTF-16 sequence s, +// with a terminating NUL removed. +func UTF16ToString(s []uint16) string { + for i, v := range s { + if v == 0 { + s = s[0:i] + break + } + } + return string(utf16.Decode(s)) +} + +// StringToUTF16Ptr is deprecated. Use UTF16PtrFromString instead. +// If s contains a NUL byte this function panics instead of +// returning an error. +func StringToUTF16Ptr(s string) *uint16 { return &StringToUTF16(s)[0] } + +// UTF16PtrFromString returns pointer to the UTF-16 encoding of +// the UTF-8 string s, with a terminating NUL added. If s +// contains a NUL byte at any location, it returns (nil, syscall.EINVAL). +func UTF16PtrFromString(s string) (*uint16, error) { + a, err := UTF16FromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +func Getpagesize() int { return 4096 } + +// Converts a Go function to a function pointer conforming +// to the stdcall or cdecl calling convention. This is useful when +// interoperating with Windows code requiring callbacks. +// Implemented in runtime/syscall_windows.goc +func NewCallback(fn interface{}) uintptr +func NewCallbackCDecl(fn interface{}) uintptr + +// windows api calls + +//sys GetLastError() (lasterr error) +//sys LoadLibrary(libname string) (handle Handle, err error) = LoadLibraryW +//sys LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) = LoadLibraryExW +//sys FreeLibrary(handle Handle) (err error) +//sys GetProcAddress(module Handle, procname string) (proc uintptr, err error) +//sys GetVersion() (ver uint32, err error) +//sys FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW +//sys ExitProcess(exitcode uint32) +//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW +//sys ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) +//sys WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) +//sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] +//sys CloseHandle(handle Handle) (err error) +//sys GetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle] +//sys SetStdHandle(stdhandle uint32, handle Handle) (err error) +//sys findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstFileW +//sys findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW +//sys FindClose(handle Handle) (err error) +//sys GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) +//sys GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW +//sys SetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW +//sys CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW +//sys RemoveDirectory(path *uint16) (err error) = RemoveDirectoryW +//sys DeleteFile(path *uint16) (err error) = DeleteFileW +//sys MoveFile(from *uint16, to *uint16) (err error) = MoveFileW +//sys MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW +//sys GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW +//sys GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW +//sys SetEndOfFile(handle Handle) (err error) +//sys GetSystemTimeAsFileTime(time *Filetime) +//sys GetSystemTimePreciseAsFileTime(time *Filetime) +//sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff] +//sys CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, threadcnt uint32) (handle Handle, err error) +//sys GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (err error) +//sys PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uint32, overlapped *Overlapped) (err error) +//sys CancelIo(s Handle) (err error) +//sys CancelIoEx(s Handle, o *Overlapped) (err error) +//sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW +//sys OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, err error) +//sys TerminateProcess(handle Handle, exitcode uint32) (err error) +//sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) +//sys GetStartupInfo(startupInfo *StartupInfo) (err error) = GetStartupInfoW +//sys GetCurrentProcess() (pseudoHandle Handle, err error) +//sys GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) +//sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) +//sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] +//sys GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) = GetTempPathW +//sys CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) +//sys GetFileType(filehandle Handle) (n uint32, err error) +//sys CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) = advapi32.CryptAcquireContextW +//sys CryptReleaseContext(provhandle Handle, flags uint32) (err error) = advapi32.CryptReleaseContext +//sys CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) = advapi32.CryptGenRandom +//sys GetEnvironmentStrings() (envs *uint16, err error) [failretval==nil] = kernel32.GetEnvironmentStringsW +//sys FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW +//sys GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW +//sys SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW +//sys SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) +//sys GetFileAttributes(name *uint16) (attrs uint32, err error) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW +//sys SetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW +//sys GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) = kernel32.GetFileAttributesExW +//sys GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW +//sys CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW +//sys LocalFree(hmem Handle) (handle Handle, err error) [failretval!=0] +//sys SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) +//sys FlushFileBuffers(handle Handle) (err error) +//sys GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) = kernel32.GetFullPathNameW +//sys GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) = kernel32.GetLongPathNameW +//sys GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) = kernel32.GetShortPathNameW +//sys CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) = kernel32.CreateFileMappingW +//sys MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) +//sys UnmapViewOfFile(addr uintptr) (err error) +//sys FlushViewOfFile(addr uintptr, length uintptr) (err error) +//sys VirtualLock(addr uintptr, length uintptr) (err error) +//sys VirtualUnlock(addr uintptr, length uintptr) (err error) +//sys VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc +//sys VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree +//sys VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect +//sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile +//sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW +//sys CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW +//sys CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) [failretval==InvalidHandle] = crypt32.CertOpenStore +//sys CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore +//sys CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore +//sys CertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore +//sys CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain +//sys CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain +//sys CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext +//sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext +//sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy +//sys RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW +//sys RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey +//sys RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW +//sys RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW +//sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW +//sys getCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId +//sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode +//sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW +//sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW +//sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot +//sys Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32FirstW +//sys Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32NextW +//sys DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) +// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. +//sys CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW +//sys CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW +//sys GetCurrentThreadId() (id uint32) +//sys CreateEvent(eventAttrs *syscall.SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) = kernel32.CreateEventW +//sys SetEvent(event Handle) (err error) = kernel32.SetEvent + +// syscall interface implementation for other packages + +func Exit(code int) { ExitProcess(uint32(code)) } + +func makeInheritSa() *SecurityAttributes { + var sa SecurityAttributes + sa.Length = uint32(unsafe.Sizeof(sa)) + sa.InheritHandle = 1 + return &sa +} + +func Open(path string, mode int, perm uint32) (fd Handle, err error) { + if len(path) == 0 { + return InvalidHandle, ERROR_FILE_NOT_FOUND + } + pathp, err := UTF16PtrFromString(path) + if err != nil { + return InvalidHandle, err + } + var access uint32 + switch mode & (O_RDONLY | O_WRONLY | O_RDWR) { + case O_RDONLY: + access = GENERIC_READ + case O_WRONLY: + access = GENERIC_WRITE + case O_RDWR: + access = GENERIC_READ | GENERIC_WRITE + } + if mode&O_CREAT != 0 { + access |= GENERIC_WRITE + } + if mode&O_APPEND != 0 { + access &^= GENERIC_WRITE + access |= FILE_APPEND_DATA + } + sharemode := uint32(FILE_SHARE_READ | FILE_SHARE_WRITE) + var sa *SecurityAttributes + if mode&O_CLOEXEC == 0 { + sa = makeInheritSa() + } + var createmode uint32 + switch { + case mode&(O_CREAT|O_EXCL) == (O_CREAT | O_EXCL): + createmode = CREATE_NEW + case mode&(O_CREAT|O_TRUNC) == (O_CREAT | O_TRUNC): + createmode = CREATE_ALWAYS + case mode&O_CREAT == O_CREAT: + createmode = OPEN_ALWAYS + case mode&O_TRUNC == O_TRUNC: + createmode = TRUNCATE_EXISTING + default: + createmode = OPEN_EXISTING + } + h, e := CreateFile(pathp, access, sharemode, sa, createmode, FILE_ATTRIBUTE_NORMAL, 0) + return h, e +} + +func Read(fd Handle, p []byte) (n int, err error) { + var done uint32 + e := ReadFile(fd, p, &done, nil) + if e != nil { + if e == ERROR_BROKEN_PIPE { + // NOTE(brainman): work around ERROR_BROKEN_PIPE is returned on reading EOF from stdin + return 0, nil + } + return 0, e + } + if raceenabled { + if done > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), int(done)) + } + raceAcquire(unsafe.Pointer(&ioSync)) + } + return int(done), nil +} + +func Write(fd Handle, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + var done uint32 + e := WriteFile(fd, p, &done, nil) + if e != nil { + return 0, e + } + if raceenabled && done > 0 { + raceReadRange(unsafe.Pointer(&p[0]), int(done)) + } + return int(done), nil +} + +var ioSync int64 + +func Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) { + var w uint32 + switch whence { + case 0: + w = FILE_BEGIN + case 1: + w = FILE_CURRENT + case 2: + w = FILE_END + } + hi := int32(offset >> 32) + lo := int32(offset) + // use GetFileType to check pipe, pipe can't do seek + ft, _ := GetFileType(fd) + if ft == FILE_TYPE_PIPE { + return 0, syscall.EPIPE + } + rlo, e := SetFilePointer(fd, lo, &hi, w) + if e != nil { + return 0, e + } + return int64(hi)<<32 + int64(rlo), nil +} + +func Close(fd Handle) (err error) { + return CloseHandle(fd) +} + +var ( + Stdin = getStdHandle(STD_INPUT_HANDLE) + Stdout = getStdHandle(STD_OUTPUT_HANDLE) + Stderr = getStdHandle(STD_ERROR_HANDLE) +) + +func getStdHandle(stdhandle uint32) (fd Handle) { + r, _ := GetStdHandle(stdhandle) + CloseOnExec(r) + return r +} + +const ImplementsGetwd = true + +func Getwd() (wd string, err error) { + b := make([]uint16, 300) + n, e := GetCurrentDirectory(uint32(len(b)), &b[0]) + if e != nil { + return "", e + } + return string(utf16.Decode(b[0:n])), nil +} + +func Chdir(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return SetCurrentDirectory(pathp) +} + +func Mkdir(path string, mode uint32) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return CreateDirectory(pathp, nil) +} + +func Rmdir(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return RemoveDirectory(pathp) +} + +func Unlink(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return DeleteFile(pathp) +} + +func Rename(oldpath, newpath string) (err error) { + from, err := UTF16PtrFromString(oldpath) + if err != nil { + return err + } + to, err := UTF16PtrFromString(newpath) + if err != nil { + return err + } + return MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING) +} + +func ComputerName() (name string, err error) { + var n uint32 = MAX_COMPUTERNAME_LENGTH + 1 + b := make([]uint16, n) + e := GetComputerName(&b[0], &n) + if e != nil { + return "", e + } + return string(utf16.Decode(b[0:n])), nil +} + +func Ftruncate(fd Handle, length int64) (err error) { + curoffset, e := Seek(fd, 0, 1) + if e != nil { + return e + } + defer Seek(fd, curoffset, 0) + _, e = Seek(fd, length, 0) + if e != nil { + return e + } + e = SetEndOfFile(fd) + if e != nil { + return e + } + return nil +} + +func Gettimeofday(tv *Timeval) (err error) { + var ft Filetime + GetSystemTimeAsFileTime(&ft) + *tv = NsecToTimeval(ft.Nanoseconds()) + return nil +} + +func Pipe(p []Handle) (err error) { + if len(p) != 2 { + return syscall.EINVAL + } + var r, w Handle + e := CreatePipe(&r, &w, makeInheritSa(), 0) + if e != nil { + return e + } + p[0] = r + p[1] = w + return nil +} + +func Utimes(path string, tv []Timeval) (err error) { + if len(tv) != 2 { + return syscall.EINVAL + } + pathp, e := UTF16PtrFromString(path) + if e != nil { + return e + } + h, e := CreateFile(pathp, + FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) + if e != nil { + return e + } + defer Close(h) + a := NsecToFiletime(tv[0].Nanoseconds()) + w := NsecToFiletime(tv[1].Nanoseconds()) + return SetFileTime(h, nil, &a, &w) +} + +func UtimesNano(path string, ts []Timespec) (err error) { + if len(ts) != 2 { + return syscall.EINVAL + } + pathp, e := UTF16PtrFromString(path) + if e != nil { + return e + } + h, e := CreateFile(pathp, + FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) + if e != nil { + return e + } + defer Close(h) + a := NsecToFiletime(TimespecToNsec(ts[0])) + w := NsecToFiletime(TimespecToNsec(ts[1])) + return SetFileTime(h, nil, &a, &w) +} + +func Fsync(fd Handle) (err error) { + return FlushFileBuffers(fd) +} + +func Chmod(path string, mode uint32) (err error) { + if mode == 0 { + return syscall.EINVAL + } + p, e := UTF16PtrFromString(path) + if e != nil { + return e + } + attrs, e := GetFileAttributes(p) + if e != nil { + return e + } + if mode&S_IWRITE != 0 { + attrs &^= FILE_ATTRIBUTE_READONLY + } else { + attrs |= FILE_ATTRIBUTE_READONLY + } + return SetFileAttributes(p, attrs) +} + +func LoadGetSystemTimePreciseAsFileTime() error { + return procGetSystemTimePreciseAsFileTime.Find() +} + +func LoadCancelIoEx() error { + return procCancelIoEx.Find() +} + +func LoadSetFileCompletionNotificationModes() error { + return procSetFileCompletionNotificationModes.Find() +} + +// net api calls + +const socket_error = uintptr(^uint32(0)) + +//sys WSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSAStartup +//sys WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup +//sys WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) [failretval==socket_error] = ws2_32.WSAIoctl +//sys socket(af int32, typ int32, protocol int32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.socket +//sys Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) [failretval==socket_error] = ws2_32.setsockopt +//sys Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockopt +//sys bind(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.bind +//sys connect(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.connect +//sys getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockname +//sys getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getpeername +//sys listen(s Handle, backlog int32) (err error) [failretval==socket_error] = ws2_32.listen +//sys shutdown(s Handle, how int32) (err error) [failretval==socket_error] = ws2_32.shutdown +//sys Closesocket(s Handle) (err error) [failretval==socket_error] = ws2_32.closesocket +//sys AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) = mswsock.AcceptEx +//sys GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = mswsock.GetAcceptExSockaddrs +//sys WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecv +//sys WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASend +//sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom +//sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo +//sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname +//sys GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname +//sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs +//sys GetProtoByName(name string) (p *Protoent, err error) [failretval==nil] = ws2_32.getprotobyname +//sys DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) = dnsapi.DnsQuery_W +//sys DnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordListFree +//sys DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) = dnsapi.DnsNameCompare_W +//sys GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) = ws2_32.GetAddrInfoW +//sys FreeAddrInfoW(addrinfo *AddrinfoW) = ws2_32.FreeAddrInfoW +//sys GetIfEntry(pIfRow *MibIfRow) (errcode error) = iphlpapi.GetIfEntry +//sys GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpapi.GetAdaptersInfo +//sys SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) = kernel32.SetFileCompletionNotificationModes +//sys WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) [failretval==-1] = ws2_32.WSAEnumProtocolsW +//sys GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses +//sys GetACP() (acp uint32) = kernel32.GetACP +//sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len int32, err error) // lowercase; only we can define Sockaddrs +} + +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +type SockaddrUnix struct { + Name string +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) { + // TODO(brainman): implement SockaddrUnix.sockaddr() + return nil, 0, syscall.EWINDOWS +} + +func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_UNIX: + return nil, syscall.EWINDOWS + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, syscall.EAFNOSUPPORT +} + +func Socket(domain, typ, proto int) (fd Handle, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return InvalidHandle, syscall.EAFNOSUPPORT + } + return socket(int32(domain), int32(typ), int32(proto)) +} + +func SetsockoptInt(fd Handle, level, opt int, value int) (err error) { + v := int32(value) + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), int32(unsafe.Sizeof(v))) +} + +func Bind(fd Handle, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd Handle, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func Getsockname(fd Handle) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + if err = getsockname(fd, &rsa, &l); err != nil { + return + } + return rsa.Sockaddr() +} + +func Getpeername(fd Handle) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + if err = getpeername(fd, &rsa, &l); err != nil { + return + } + return rsa.Sockaddr() +} + +func Listen(s Handle, n int) (err error) { + return listen(s, int32(n)) +} + +func Shutdown(fd Handle, how int) (err error) { + return shutdown(fd, int32(how)) +} + +func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) { + rsa, l, err := to.sockaddr() + if err != nil { + return err + } + return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.Pointer(rsa)), l, overlapped, croutine) +} + +func LoadGetAddrInfo() error { + return procGetAddrInfoW.Find() +} + +var connectExFunc struct { + once sync.Once + addr uintptr + err error +} + +func LoadConnectEx() error { + connectExFunc.once.Do(func() { + var s Handle + s, connectExFunc.err = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) + if connectExFunc.err != nil { + return + } + defer CloseHandle(s) + var n uint32 + connectExFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_CONNECTEX)), + uint32(unsafe.Sizeof(WSAID_CONNECTEX)), + (*byte)(unsafe.Pointer(&connectExFunc.addr)), + uint32(unsafe.Sizeof(connectExFunc.addr)), + &n, nil, 0) + }) + return connectExFunc.err +} + +func connectEx(s Handle, name unsafe.Pointer, namelen int32, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(connectExFunc.addr, 7, uintptr(s), uintptr(name), uintptr(namelen), uintptr(unsafe.Pointer(sendBuf)), uintptr(sendDataLen), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ConnectEx(fd Handle, sa Sockaddr, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) error { + err := LoadConnectEx() + if err != nil { + return errorspkg.New("failed to find ConnectEx: " + err.Error()) + } + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped) +} + +// Invented structures to support what package os expects. +type Rusage struct { + CreationTime Filetime + ExitTime Filetime + KernelTime Filetime + UserTime Filetime +} + +type WaitStatus struct { + ExitCode uint32 +} + +func (w WaitStatus) Exited() bool { return true } + +func (w WaitStatus) ExitStatus() int { return int(w.ExitCode) } + +func (w WaitStatus) Signal() Signal { return -1 } + +func (w WaitStatus) CoreDump() bool { return false } + +func (w WaitStatus) Stopped() bool { return false } + +func (w WaitStatus) Continued() bool { return false } + +func (w WaitStatus) StopSignal() Signal { return -1 } + +func (w WaitStatus) Signaled() bool { return false } + +func (w WaitStatus) TrapCause() int { return -1 } + +// Timespec is an invented structure on Windows, but here for +// consistency with the corresponding package for other operating systems. +type Timespec struct { + Sec int64 + Nsec int64 +} + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +// TODO(brainman): fix all needed for net + +func Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, syscall.EWINDOWS } +func Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error) { + return 0, nil, syscall.EWINDOWS +} +func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) { return syscall.EWINDOWS } +func SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { return syscall.EWINDOWS } + +// The Linger struct is wrong but we only noticed after Go 1. +// sysLinger is the real system call structure. + +// BUG(brainman): The definition of Linger is not appropriate for direct use +// with Setsockopt and Getsockopt. +// Use SetsockoptLinger instead. + +type Linger struct { + Onoff int32 + Linger int32 +} + +type sysLinger struct { + Onoff uint16 + Linger uint16 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +func GetsockoptInt(fd Handle, level, opt int) (int, error) { return -1, syscall.EWINDOWS } + +func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) { + sys := sysLinger{Onoff: uint16(l.Onoff), Linger: uint16(l.Linger)} + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&sys)), int32(unsafe.Sizeof(sys))) +} + +func SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) { + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4) +} +func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) { + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq))) +} +func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { + return syscall.EWINDOWS +} + +func Getpid() (pid int) { return int(getCurrentProcessId()) } + +func FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, err error) { + // NOTE(rsc): The Win32finddata struct is wrong for the system call: + // the two paths are each one uint16 short. Use the correct struct, + // a win32finddata1, and then copy the results out. + // There is no loss of expressivity here, because the final + // uint16, if it is used, is supposed to be a NUL, and Go doesn't need that. + // For Go 1.1, we might avoid the allocation of win32finddata1 here + // by adding a final Bug [2]uint16 field to the struct and then + // adjusting the fields in the result directly. + var data1 win32finddata1 + handle, err = findFirstFile1(name, &data1) + if err == nil { + copyFindData(data, &data1) + } + return +} + +func FindNextFile(handle Handle, data *Win32finddata) (err error) { + var data1 win32finddata1 + err = findNextFile1(handle, &data1) + if err == nil { + copyFindData(data, &data1) + } + return +} + +func getProcessEntry(pid int) (*ProcessEntry32, error) { + snapshot, err := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) + if err != nil { + return nil, err + } + defer CloseHandle(snapshot) + var procEntry ProcessEntry32 + procEntry.Size = uint32(unsafe.Sizeof(procEntry)) + if err = Process32First(snapshot, &procEntry); err != nil { + return nil, err + } + for { + if procEntry.ProcessID == uint32(pid) { + return &procEntry, nil + } + err = Process32Next(snapshot, &procEntry) + if err != nil { + return nil, err + } + } +} + +func Getppid() (ppid int) { + pe, err := getProcessEntry(Getpid()) + if err != nil { + return -1 + } + return int(pe.ParentProcessID) +} + +// TODO(brainman): fix all needed for os +func Fchdir(fd Handle) (err error) { return syscall.EWINDOWS } +func Link(oldpath, newpath string) (err error) { return syscall.EWINDOWS } +func Symlink(path, link string) (err error) { return syscall.EWINDOWS } + +func Fchmod(fd Handle, mode uint32) (err error) { return syscall.EWINDOWS } +func Chown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } +func Lchown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } +func Fchown(fd Handle, uid int, gid int) (err error) { return syscall.EWINDOWS } + +func Getuid() (uid int) { return -1 } +func Geteuid() (euid int) { return -1 } +func Getgid() (gid int) { return -1 } +func Getegid() (egid int) { return -1 } +func Getgroups() (gids []int, err error) { return nil, syscall.EWINDOWS } + +type Signal int + +func (s Signal) Signal() {} + +func (s Signal) String() string { + if 0 <= s && int(s) < len(signals) { + str := signals[s] + if str != "" { + return str + } + } + return "signal " + itoa(int(s)) +} + +func LoadCreateSymbolicLink() error { + return procCreateSymbolicLinkW.Find() +} + +// Readlink returns the destination of the named symbolic link. +func Readlink(path string, buf []byte) (n int, err error) { + fd, err := CreateFile(StringToUTF16Ptr(path), GENERIC_READ, 0, nil, OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT|FILE_FLAG_BACKUP_SEMANTICS, 0) + if err != nil { + return -1, err + } + defer CloseHandle(fd) + + rdbbuf := make([]byte, MAXIMUM_REPARSE_DATA_BUFFER_SIZE) + var bytesReturned uint32 + err = DeviceIoControl(fd, FSCTL_GET_REPARSE_POINT, nil, 0, &rdbbuf[0], uint32(len(rdbbuf)), &bytesReturned, nil) + if err != nil { + return -1, err + } + + rdb := (*reparseDataBuffer)(unsafe.Pointer(&rdbbuf[0])) + var s string + switch rdb.ReparseTag { + case IO_REPARSE_TAG_SYMLINK: + data := (*symbolicLinkReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) + p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) + s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) + case IO_REPARSE_TAG_MOUNT_POINT: + data := (*mountPointReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) + p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) + s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) + default: + // the path is not a symlink or junction but another type of reparse + // point + return -1, syscall.ENOENT + } + n = copy(buf, []byte(s)) + + return n, nil +} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows_test.go b/vendor/golang.org/x/sys/windows/syscall_windows_test.go new file mode 100644 index 0000000..0f73c11 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall_windows_test.go @@ -0,0 +1,107 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows_test + +import ( + "io/ioutil" + "os" + "path/filepath" + "syscall" + "testing" + "unsafe" + + "golang.org/x/sys/windows" +) + +func TestWin32finddata(t *testing.T) { + dir, err := ioutil.TempDir("", "go-build") + if err != nil { + t.Fatalf("failed to create temp directory: %v", err) + } + defer os.RemoveAll(dir) + + path := filepath.Join(dir, "long_name.and_extension") + f, err := os.Create(path) + if err != nil { + t.Fatalf("failed to create %v: %v", path, err) + } + f.Close() + + type X struct { + fd windows.Win32finddata + got byte + pad [10]byte // to protect ourselves + + } + var want byte = 2 // it is unlikely to have this character in the filename + x := X{got: want} + + pathp, _ := windows.UTF16PtrFromString(path) + h, err := windows.FindFirstFile(pathp, &(x.fd)) + if err != nil { + t.Fatalf("FindFirstFile failed: %v", err) + } + err = windows.FindClose(h) + if err != nil { + t.Fatalf("FindClose failed: %v", err) + } + + if x.got != want { + t.Fatalf("memory corruption: want=%d got=%d", want, x.got) + } +} + +func TestFormatMessage(t *testing.T) { + dll := windows.MustLoadDLL("pdh.dll") + + pdhOpenQuery := func(datasrc *uint16, userdata uint32, query *windows.Handle) (errno uintptr) { + r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhOpenQueryW").Addr(), 3, uintptr(unsafe.Pointer(datasrc)), uintptr(userdata), uintptr(unsafe.Pointer(query))) + return r0 + } + + pdhCloseQuery := func(query windows.Handle) (errno uintptr) { + r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhCloseQuery").Addr(), 1, uintptr(query), 0, 0) + return r0 + } + + var q windows.Handle + name, err := windows.UTF16PtrFromString("no_such_source") + if err != nil { + t.Fatal(err) + } + errno := pdhOpenQuery(name, 0, &q) + if errno == 0 { + pdhCloseQuery(q) + t.Fatal("PdhOpenQuery succeeded, but expected to fail.") + } + + const flags uint32 = syscall.FORMAT_MESSAGE_FROM_HMODULE | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS + buf := make([]uint16, 300) + _, err = windows.FormatMessage(flags, uintptr(dll.Handle), uint32(errno), 0, buf, nil) + if err != nil { + t.Fatal("FormatMessage for handle=%x and errno=%x failed: %v", dll.Handle, errno, err) + } +} + +func abort(funcname string, err error) { + panic(funcname + " failed: " + err.Error()) +} + +func ExampleLoadLibrary() { + h, err := windows.LoadLibrary("kernel32.dll") + if err != nil { + abort("LoadLibrary", err) + } + defer windows.FreeLibrary(h) + proc, err := windows.GetProcAddress(h, "GetVersion") + if err != nil { + abort("GetProcAddress", err) + } + r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0) + major := byte(r) + minor := uint8(r >> 8) + build := uint16(r >> 16) + print("windows version ", major, ".", minor, " (Build ", build, ")\n") +} diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go new file mode 100644 index 0000000..d588e1d --- /dev/null +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -0,0 +1,2342 @@ +// MACHINE GENERATED BY 'go generate' COMMAND; DO NOT EDIT + +package windows + +import ( + "syscall" + "unsafe" +) + +var _ unsafe.Pointer + +// Do the interface allocations only once for common +// Errno values. +const ( + errnoERROR_IO_PENDING = 997 +) + +var ( + errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return nil + case errnoERROR_IO_PENDING: + return errERROR_IO_PENDING + } + // TODO: add more here, after collecting data on the common + // error values see on Windows. (perhaps when running + // all.bat?) + return e +} + +var ( + modadvapi32 = NewLazySystemDLL("advapi32.dll") + modkernel32 = NewLazySystemDLL("kernel32.dll") + modshell32 = NewLazySystemDLL("shell32.dll") + modmswsock = NewLazySystemDLL("mswsock.dll") + modcrypt32 = NewLazySystemDLL("crypt32.dll") + modws2_32 = NewLazySystemDLL("ws2_32.dll") + moddnsapi = NewLazySystemDLL("dnsapi.dll") + modiphlpapi = NewLazySystemDLL("iphlpapi.dll") + modsecur32 = NewLazySystemDLL("secur32.dll") + modnetapi32 = NewLazySystemDLL("netapi32.dll") + moduserenv = NewLazySystemDLL("userenv.dll") + + procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW") + procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource") + procReportEventW = modadvapi32.NewProc("ReportEventW") + procOpenSCManagerW = modadvapi32.NewProc("OpenSCManagerW") + procCloseServiceHandle = modadvapi32.NewProc("CloseServiceHandle") + procCreateServiceW = modadvapi32.NewProc("CreateServiceW") + procOpenServiceW = modadvapi32.NewProc("OpenServiceW") + procDeleteService = modadvapi32.NewProc("DeleteService") + procStartServiceW = modadvapi32.NewProc("StartServiceW") + procQueryServiceStatus = modadvapi32.NewProc("QueryServiceStatus") + procControlService = modadvapi32.NewProc("ControlService") + procStartServiceCtrlDispatcherW = modadvapi32.NewProc("StartServiceCtrlDispatcherW") + procSetServiceStatus = modadvapi32.NewProc("SetServiceStatus") + procChangeServiceConfigW = modadvapi32.NewProc("ChangeServiceConfigW") + procQueryServiceConfigW = modadvapi32.NewProc("QueryServiceConfigW") + procChangeServiceConfig2W = modadvapi32.NewProc("ChangeServiceConfig2W") + procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W") + procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") + procGetLastError = modkernel32.NewProc("GetLastError") + procLoadLibraryW = modkernel32.NewProc("LoadLibraryW") + procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW") + procFreeLibrary = modkernel32.NewProc("FreeLibrary") + procGetProcAddress = modkernel32.NewProc("GetProcAddress") + procGetVersion = modkernel32.NewProc("GetVersion") + procFormatMessageW = modkernel32.NewProc("FormatMessageW") + procExitProcess = modkernel32.NewProc("ExitProcess") + procCreateFileW = modkernel32.NewProc("CreateFileW") + procReadFile = modkernel32.NewProc("ReadFile") + procWriteFile = modkernel32.NewProc("WriteFile") + procSetFilePointer = modkernel32.NewProc("SetFilePointer") + procCloseHandle = modkernel32.NewProc("CloseHandle") + procGetStdHandle = modkernel32.NewProc("GetStdHandle") + procSetStdHandle = modkernel32.NewProc("SetStdHandle") + procFindFirstFileW = modkernel32.NewProc("FindFirstFileW") + procFindNextFileW = modkernel32.NewProc("FindNextFileW") + procFindClose = modkernel32.NewProc("FindClose") + procGetFileInformationByHandle = modkernel32.NewProc("GetFileInformationByHandle") + procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") + procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") + procCreateDirectoryW = modkernel32.NewProc("CreateDirectoryW") + procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW") + procDeleteFileW = modkernel32.NewProc("DeleteFileW") + procMoveFileW = modkernel32.NewProc("MoveFileW") + procMoveFileExW = modkernel32.NewProc("MoveFileExW") + procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") + procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") + procSetEndOfFile = modkernel32.NewProc("SetEndOfFile") + procGetSystemTimeAsFileTime = modkernel32.NewProc("GetSystemTimeAsFileTime") + procGetSystemTimePreciseAsFileTime = modkernel32.NewProc("GetSystemTimePreciseAsFileTime") + procGetTimeZoneInformation = modkernel32.NewProc("GetTimeZoneInformation") + procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") + procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") + procPostQueuedCompletionStatus = modkernel32.NewProc("PostQueuedCompletionStatus") + procCancelIo = modkernel32.NewProc("CancelIo") + procCancelIoEx = modkernel32.NewProc("CancelIoEx") + procCreateProcessW = modkernel32.NewProc("CreateProcessW") + procOpenProcess = modkernel32.NewProc("OpenProcess") + procTerminateProcess = modkernel32.NewProc("TerminateProcess") + procGetExitCodeProcess = modkernel32.NewProc("GetExitCodeProcess") + procGetStartupInfoW = modkernel32.NewProc("GetStartupInfoW") + procGetCurrentProcess = modkernel32.NewProc("GetCurrentProcess") + procGetProcessTimes = modkernel32.NewProc("GetProcessTimes") + procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") + procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject") + procGetTempPathW = modkernel32.NewProc("GetTempPathW") + procCreatePipe = modkernel32.NewProc("CreatePipe") + procGetFileType = modkernel32.NewProc("GetFileType") + procCryptAcquireContextW = modadvapi32.NewProc("CryptAcquireContextW") + procCryptReleaseContext = modadvapi32.NewProc("CryptReleaseContext") + procCryptGenRandom = modadvapi32.NewProc("CryptGenRandom") + procGetEnvironmentStringsW = modkernel32.NewProc("GetEnvironmentStringsW") + procFreeEnvironmentStringsW = modkernel32.NewProc("FreeEnvironmentStringsW") + procGetEnvironmentVariableW = modkernel32.NewProc("GetEnvironmentVariableW") + procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW") + procSetFileTime = modkernel32.NewProc("SetFileTime") + procGetFileAttributesW = modkernel32.NewProc("GetFileAttributesW") + procSetFileAttributesW = modkernel32.NewProc("SetFileAttributesW") + procGetFileAttributesExW = modkernel32.NewProc("GetFileAttributesExW") + procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") + procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW") + procLocalFree = modkernel32.NewProc("LocalFree") + procSetHandleInformation = modkernel32.NewProc("SetHandleInformation") + procFlushFileBuffers = modkernel32.NewProc("FlushFileBuffers") + procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW") + procGetLongPathNameW = modkernel32.NewProc("GetLongPathNameW") + procGetShortPathNameW = modkernel32.NewProc("GetShortPathNameW") + procCreateFileMappingW = modkernel32.NewProc("CreateFileMappingW") + procMapViewOfFile = modkernel32.NewProc("MapViewOfFile") + procUnmapViewOfFile = modkernel32.NewProc("UnmapViewOfFile") + procFlushViewOfFile = modkernel32.NewProc("FlushViewOfFile") + procVirtualLock = modkernel32.NewProc("VirtualLock") + procVirtualUnlock = modkernel32.NewProc("VirtualUnlock") + procVirtualAlloc = modkernel32.NewProc("VirtualAlloc") + procVirtualFree = modkernel32.NewProc("VirtualFree") + procVirtualProtect = modkernel32.NewProc("VirtualProtect") + procTransmitFile = modmswsock.NewProc("TransmitFile") + procReadDirectoryChangesW = modkernel32.NewProc("ReadDirectoryChangesW") + procCertOpenSystemStoreW = modcrypt32.NewProc("CertOpenSystemStoreW") + procCertOpenStore = modcrypt32.NewProc("CertOpenStore") + procCertEnumCertificatesInStore = modcrypt32.NewProc("CertEnumCertificatesInStore") + procCertAddCertificateContextToStore = modcrypt32.NewProc("CertAddCertificateContextToStore") + procCertCloseStore = modcrypt32.NewProc("CertCloseStore") + procCertGetCertificateChain = modcrypt32.NewProc("CertGetCertificateChain") + procCertFreeCertificateChain = modcrypt32.NewProc("CertFreeCertificateChain") + procCertCreateCertificateContext = modcrypt32.NewProc("CertCreateCertificateContext") + procCertFreeCertificateContext = modcrypt32.NewProc("CertFreeCertificateContext") + procCertVerifyCertificateChainPolicy = modcrypt32.NewProc("CertVerifyCertificateChainPolicy") + procRegOpenKeyExW = modadvapi32.NewProc("RegOpenKeyExW") + procRegCloseKey = modadvapi32.NewProc("RegCloseKey") + procRegQueryInfoKeyW = modadvapi32.NewProc("RegQueryInfoKeyW") + procRegEnumKeyExW = modadvapi32.NewProc("RegEnumKeyExW") + procRegQueryValueExW = modadvapi32.NewProc("RegQueryValueExW") + procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") + procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + procWriteConsoleW = modkernel32.NewProc("WriteConsoleW") + procReadConsoleW = modkernel32.NewProc("ReadConsoleW") + procCreateToolhelp32Snapshot = modkernel32.NewProc("CreateToolhelp32Snapshot") + procProcess32FirstW = modkernel32.NewProc("Process32FirstW") + procProcess32NextW = modkernel32.NewProc("Process32NextW") + procDeviceIoControl = modkernel32.NewProc("DeviceIoControl") + procCreateSymbolicLinkW = modkernel32.NewProc("CreateSymbolicLinkW") + procCreateHardLinkW = modkernel32.NewProc("CreateHardLinkW") + procGetCurrentThreadId = modkernel32.NewProc("GetCurrentThreadId") + procCreateEventW = modkernel32.NewProc("CreateEventW") + procSetEvent = modkernel32.NewProc("SetEvent") + procWSAStartup = modws2_32.NewProc("WSAStartup") + procWSACleanup = modws2_32.NewProc("WSACleanup") + procWSAIoctl = modws2_32.NewProc("WSAIoctl") + procsocket = modws2_32.NewProc("socket") + procsetsockopt = modws2_32.NewProc("setsockopt") + procgetsockopt = modws2_32.NewProc("getsockopt") + procbind = modws2_32.NewProc("bind") + procconnect = modws2_32.NewProc("connect") + procgetsockname = modws2_32.NewProc("getsockname") + procgetpeername = modws2_32.NewProc("getpeername") + proclisten = modws2_32.NewProc("listen") + procshutdown = modws2_32.NewProc("shutdown") + procclosesocket = modws2_32.NewProc("closesocket") + procAcceptEx = modmswsock.NewProc("AcceptEx") + procGetAcceptExSockaddrs = modmswsock.NewProc("GetAcceptExSockaddrs") + procWSARecv = modws2_32.NewProc("WSARecv") + procWSASend = modws2_32.NewProc("WSASend") + procWSARecvFrom = modws2_32.NewProc("WSARecvFrom") + procWSASendTo = modws2_32.NewProc("WSASendTo") + procgethostbyname = modws2_32.NewProc("gethostbyname") + procgetservbyname = modws2_32.NewProc("getservbyname") + procntohs = modws2_32.NewProc("ntohs") + procgetprotobyname = modws2_32.NewProc("getprotobyname") + procDnsQuery_W = moddnsapi.NewProc("DnsQuery_W") + procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") + procDnsNameCompare_W = moddnsapi.NewProc("DnsNameCompare_W") + procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") + procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") + procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") + procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") + procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") + procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") + procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") + procGetACP = modkernel32.NewProc("GetACP") + procMultiByteToWideChar = modkernel32.NewProc("MultiByteToWideChar") + procTranslateNameW = modsecur32.NewProc("TranslateNameW") + procGetUserNameExW = modsecur32.NewProc("GetUserNameExW") + procNetUserGetInfo = modnetapi32.NewProc("NetUserGetInfo") + procNetGetJoinInformation = modnetapi32.NewProc("NetGetJoinInformation") + procNetApiBufferFree = modnetapi32.NewProc("NetApiBufferFree") + procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") + procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") + procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") + procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") + procGetLengthSid = modadvapi32.NewProc("GetLengthSid") + procCopySid = modadvapi32.NewProc("CopySid") + procAllocateAndInitializeSid = modadvapi32.NewProc("AllocateAndInitializeSid") + procFreeSid = modadvapi32.NewProc("FreeSid") + procEqualSid = modadvapi32.NewProc("EqualSid") + procOpenProcessToken = modadvapi32.NewProc("OpenProcessToken") + procGetTokenInformation = modadvapi32.NewProc("GetTokenInformation") + procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") +) + +func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procRegisterEventSourceW.Addr(), 2, uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName)), 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DeregisterEventSource(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procDeregisterEventSource.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procOpenSCManagerW.Addr(), 3, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access)) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CloseServiceHandle(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCloseServiceHandle.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall15(procCreateServiceW.Addr(), 13, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procOpenServiceW.Addr(), 3, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access)) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DeleteService(service Handle) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteService.Addr(), 1, uintptr(service), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) { + r1, _, e1 := syscall.Syscall(procStartServiceW.Addr(), 3, uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procQueryServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(status)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procControlService.Addr(), 3, uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) { + r1, _, e1 := syscall.Syscall(procStartServiceCtrlDispatcherW.Addr(), 1, uintptr(unsafe.Pointer(serviceTable)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procSetServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(serviceStatus)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) { + r1, _, e1 := syscall.Syscall12(procChangeServiceConfigW.Addr(), 11, uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceConfigW.Addr(), 4, uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) { + r1, _, e1 := syscall.Syscall(procChangeServiceConfig2W.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceConfig2W.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { + r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetLastError() (lasterr error) { + r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) + if r0 != 0 { + lasterr = syscall.Errno(r0) + } + return +} + +func LoadLibrary(libname string) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(libname) + if err != nil { + return + } + return _LoadLibrary(_p0) +} + +func _LoadLibrary(libname *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadLibraryW.Addr(), 1, uintptr(unsafe.Pointer(libname)), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(libname) + if err != nil { + return + } + return _LoadLibraryEx(_p0, zero, flags) +} + +func _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadLibraryExW.Addr(), 3, uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags)) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FreeLibrary(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFreeLibrary.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetProcAddress(module Handle, procname string) (proc uintptr, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(procname) + if err != nil { + return + } + return _GetProcAddress(module, _p0) +} + +func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) { + r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), uintptr(unsafe.Pointer(procname)), 0) + proc = uintptr(r0) + if proc == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetVersion() (ver uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0) + ver = uint32(r0) + if ver == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) { + var _p0 *uint16 + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := syscall.Syscall9(procFormatMessageW.Addr(), 7, uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args)), 0, 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ExitProcess(exitcode uint32) { + syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0) + return +} + +func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procReadFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procWriteFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) { + r0, _, e1 := syscall.Syscall6(procSetFilePointer.Addr(), 4, uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence), 0, 0) + newlowoffset = uint32(r0) + if newlowoffset == 0xffffffff { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CloseHandle(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetStdHandle(stdhandle uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procGetStdHandle.Addr(), 1, uintptr(stdhandle), 0, 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetStdHandle(stdhandle uint32, handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func findNextFile1(handle Handle, data *win32finddata1) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FindClose(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) { + r1, _, e1 := syscall.Syscall(procGetFileInformationByHandle.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetCurrentDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) { + r1, _, e1 := syscall.Syscall(procCreateDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func RemoveDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procRemoveDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DeleteFile(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteFileW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func MoveFile(from *uint16, to *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procMoveFileW.Addr(), 2, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetComputerName(buf *uint16, n *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetComputerNameW.Addr(), 2, uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetComputerNameExW.Addr(), 3, uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetEndOfFile(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetEndOfFile.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetSystemTimeAsFileTime(time *Filetime) { + syscall.Syscall(procGetSystemTimeAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + return +} + +func GetSystemTimePreciseAsFileTime(time *Filetime) { + syscall.Syscall(procGetSystemTimePreciseAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + return +} + +func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(tzi)), 0, 0) + rc = uint32(r0) + if rc == 0xffffffff { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, threadcnt uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall6(procPostQueuedCompletionStatus.Addr(), 4, uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CancelIo(s Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCancelIo.Addr(), 1, uintptr(s), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CancelIoEx(s Handle, o *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(s), uintptr(unsafe.Pointer(o)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) { + var _p0 uint32 + if inheritHandles { + _p0 = 1 + } else { + _p0 = 0 + } + r1, _, e1 := syscall.Syscall12(procCreateProcessW.Addr(), 10, uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } else { + _p0 = 0 + } + r0, _, e1 := syscall.Syscall(procOpenProcess.Addr(), 3, uintptr(da), uintptr(_p0), uintptr(pid)) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func TerminateProcess(handle Handle, exitcode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procTerminateProcess.Addr(), 2, uintptr(handle), uintptr(exitcode), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetExitCodeProcess.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(exitcode)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetStartupInfo(startupInfo *StartupInfo) (err error) { + r1, _, e1 := syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetCurrentProcess() (pseudoHandle Handle, err error) { + r0, _, e1 := syscall.Syscall(procGetCurrentProcess.Addr(), 0, 0, 0, 0) + pseudoHandle = Handle(r0) + if pseudoHandle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) { + r1, _, e1 := syscall.Syscall6(procGetProcessTimes.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) { + var _p0 uint32 + if bInheritHandle { + _p0 = 1 + } else { + _p0 = 0 + } + r1, _, e1 := syscall.Syscall9(procDuplicateHandle.Addr(), 7, uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) { + r0, _, e1 := syscall.Syscall(procWaitForSingleObject.Addr(), 2, uintptr(handle), uintptr(waitMilliseconds), 0) + event = uint32(r0) + if event == 0xffffffff { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetTempPathW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCreatePipe.Addr(), 4, uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFileType(filehandle Handle) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileType.Addr(), 1, uintptr(filehandle), 0, 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCryptAcquireContextW.Addr(), 5, uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CryptReleaseContext(provhandle Handle, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCryptReleaseContext.Addr(), 2, uintptr(provhandle), uintptr(flags), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) { + r1, _, e1 := syscall.Syscall(procCryptGenRandom.Addr(), 3, uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetEnvironmentStrings() (envs *uint16, err error) { + r0, _, e1 := syscall.Syscall(procGetEnvironmentStringsW.Addr(), 0, 0, 0, 0) + envs = (*uint16)(unsafe.Pointer(r0)) + if envs == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FreeEnvironmentStrings(envs *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procFreeEnvironmentStringsW.Addr(), 1, uintptr(unsafe.Pointer(envs)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetEnvironmentVariableW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size)) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetEnvironmentVariable(name *uint16, value *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { + r1, _, e1 := syscall.Syscall6(procSetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFileAttributes(name *uint16) (attrs uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileAttributesW.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + attrs = uint32(r0) + if attrs == INVALID_FILE_ATTRIBUTES { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetFileAttributes(name *uint16, attrs uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetFileAttributesW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(attrs), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) { + r1, _, e1 := syscall.Syscall(procGetFileAttributesExW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetCommandLine() (cmd *uint16) { + r0, _, _ := syscall.Syscall(procGetCommandLineW.Addr(), 0, 0, 0, 0) + cmd = (*uint16)(unsafe.Pointer(r0)) + return +} + +func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) { + r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) + argv = (*[8192]*[8192]uint16)(unsafe.Pointer(r0)) + if argv == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func LocalFree(hmem Handle) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLocalFree.Addr(), 1, uintptr(hmem), 0, 0) + handle = Handle(r0) + if handle != 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FlushFileBuffers(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFlushFileBuffers.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall6(procGetFullPathNameW.Addr(), 4, uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname)), 0, 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLongPathNameW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen)) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetShortPathNameW.Addr(), 3, uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen)) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateFileMappingW.Addr(), 6, uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) { + r0, _, e1 := syscall.Syscall6(procMapViewOfFile.Addr(), 5, uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length), 0) + addr = uintptr(r0) + if addr == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func UnmapViewOfFile(addr uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procUnmapViewOfFile.Addr(), 1, uintptr(addr), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FlushViewOfFile(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procFlushViewOfFile.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualLock(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualLock.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualUnlock(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) { + r0, _, e1 := syscall.Syscall6(procVirtualAlloc.Addr(), 4, uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect), 0, 0) + value = uintptr(r0) + if value == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualFree.Addr(), 3, uintptr(address), uintptr(size), uintptr(freetype)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualProtect.Addr(), 4, uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procTransmitFile.Addr(), 7, uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { + var _p0 uint32 + if watchSubTree { + _p0 = 1 + } else { + _p0 = 0 + } + r1, _, e1 := syscall.Syscall9(procReadDirectoryChangesW.Addr(), 8, uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) { + r0, _, e1 := syscall.Syscall(procCertOpenSystemStoreW.Addr(), 2, uintptr(hprov), uintptr(unsafe.Pointer(name)), 0) + store = Handle(r0) + if store == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) { + r0, _, e1 := syscall.Syscall(procCertEnumCertificatesInStore.Addr(), 2, uintptr(store), uintptr(unsafe.Pointer(prevContext)), 0) + context = (*CertContext)(unsafe.Pointer(r0)) + if context == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) { + r1, _, e1 := syscall.Syscall6(procCertAddCertificateContextToStore.Addr(), 4, uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertCloseStore(store Handle, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCertCloseStore.Addr(), 2, uintptr(store), uintptr(flags), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) { + r1, _, e1 := syscall.Syscall9(procCertGetCertificateChain.Addr(), 8, uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertFreeCertificateChain(ctx *CertChainContext) { + syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + return +} + +func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) { + r0, _, e1 := syscall.Syscall(procCertCreateCertificateContext.Addr(), 3, uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen)) + context = (*CertContext)(unsafe.Pointer(r0)) + if context == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertFreeCertificateContext(ctx *CertContext) (err error) { + r1, _, e1 := syscall.Syscall(procCertFreeCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) { + r1, _, e1 := syscall.Syscall6(procCertVerifyCertificateChainPolicy.Addr(), 4, uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegOpenKeyExW.Addr(), 5, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegCloseKey(key Handle) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegCloseKey.Addr(), 1, uintptr(key), 0, 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) { + r0, _, _ := syscall.Syscall12(procRegQueryInfoKeyW.Addr(), 12, uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegEnumKeyExW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegQueryValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func getCurrentProcessId() (pid uint32) { + r0, _, _ := syscall.Syscall(procGetCurrentProcessId.Addr(), 0, 0, 0, 0) + pid = uint32(r0) + return +} + +func GetConsoleMode(console Handle, mode *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) { + r1, _, e1 := syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) { + r1, _, e1 := syscall.Syscall6(procReadConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procCreateToolhelp32Snapshot.Addr(), 2, uintptr(flags), uintptr(processId), 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procProcess32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procProcess32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(procDeviceIoControl.Addr(), 8, uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCreateSymbolicLinkW.Addr(), 3, uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) + if r1&0xff == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procCreateHardLinkW.Addr(), 3, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved)) + if r1&0xff == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetCurrentThreadId() (id uint32) { + r0, _, _ := syscall.Syscall(procGetCurrentThreadId.Addr(), 0, 0, 0, 0) + id = uint32(r0) + return +} + +func CreateEvent(eventAttrs *syscall.SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { + r0, _, _ := syscall.Syscall(procWSAStartup.Addr(), 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0) + if r0 != 0 { + sockerr = syscall.Errno(r0) + } + return +} + +func WSACleanup() (err error) { + r1, _, e1 := syscall.Syscall(procWSACleanup.Addr(), 0, 0, 0, 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { + r1, _, e1 := syscall.Syscall9(procWSAIoctl.Addr(), 9, uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func socket(af int32, typ int32, protocol int32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procsocket.Addr(), 3, uintptr(af), uintptr(typ), uintptr(protocol)) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) { + r1, _, e1 := syscall.Syscall6(procsetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen), 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) { + r1, _, e1 := syscall.Syscall6(procgetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen)), 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) { + r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func connect(s Handle, name unsafe.Pointer, namelen int32) (err error) { + r1, _, e1 := syscall.Syscall(procconnect.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { + r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { + r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func listen(s Handle, backlog int32) (err error) { + r1, _, e1 := syscall.Syscall(proclisten.Addr(), 2, uintptr(s), uintptr(backlog), 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func shutdown(s Handle, how int32) (err error) { + r1, _, e1 := syscall.Syscall(procshutdown.Addr(), 2, uintptr(s), uintptr(how), 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Closesocket(s Handle) (err error) { + r1, _, e1 := syscall.Syscall(procclosesocket.Addr(), 1, uintptr(s), 0, 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) { + syscall.Syscall9(procGetAcceptExSockaddrs.Addr(), 8, uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen)), 0) + return +} + +func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSARecv.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSASend.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSARecvFrom.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSASendTo.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetHostByName(name string) (h *Hostent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + return _GetHostByName(_p0) +} + +func _GetHostByName(name *byte) (h *Hostent, err error) { + r0, _, e1 := syscall.Syscall(procgethostbyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + h = (*Hostent)(unsafe.Pointer(r0)) + if h == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetServByName(name string, proto string) (s *Servent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + var _p1 *byte + _p1, err = syscall.BytePtrFromString(proto) + if err != nil { + return + } + return _GetServByName(_p0, _p1) +} + +func _GetServByName(name *byte, proto *byte) (s *Servent, err error) { + r0, _, e1 := syscall.Syscall(procgetservbyname.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto)), 0) + s = (*Servent)(unsafe.Pointer(r0)) + if s == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Ntohs(netshort uint16) (u uint16) { + r0, _, _ := syscall.Syscall(procntohs.Addr(), 1, uintptr(netshort), 0, 0) + u = uint16(r0) + return +} + +func GetProtoByName(name string) (p *Protoent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + return _GetProtoByName(_p0) +} + +func _GetProtoByName(name *byte) (p *Protoent, err error) { + r0, _, e1 := syscall.Syscall(procgetprotobyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + p = (*Protoent)(unsafe.Pointer(r0)) + if p == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { + var _p0 *uint16 + _p0, status = syscall.UTF16PtrFromString(name) + if status != nil { + return + } + return _DnsQuery(_p0, qtype, options, extra, qrs, pr) +} + +func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { + r0, _, _ := syscall.Syscall6(procDnsQuery_W.Addr(), 6, uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr))) + if r0 != 0 { + status = syscall.Errno(r0) + } + return +} + +func DnsRecordListFree(rl *DNSRecord, freetype uint32) { + syscall.Syscall(procDnsRecordListFree.Addr(), 2, uintptr(unsafe.Pointer(rl)), uintptr(freetype), 0) + return +} + +func DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) { + r0, _, _ := syscall.Syscall(procDnsNameCompare_W.Addr(), 2, uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)), 0) + same = r0 != 0 + return +} + +func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) { + r0, _, _ := syscall.Syscall6(procGetAddrInfoW.Addr(), 4, uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result)), 0, 0) + if r0 != 0 { + sockerr = syscall.Errno(r0) + } + return +} + +func FreeAddrInfoW(addrinfo *AddrinfoW) { + syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0) + return +} + +func GetIfEntry(pIfRow *MibIfRow) (errcode error) { + r0, _, _ := syscall.Syscall(procGetIfEntry.Addr(), 1, uintptr(unsafe.Pointer(pIfRow)), 0, 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { + r0, _, _ := syscall.Syscall(procGetAdaptersInfo.Addr(), 2, uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) { + r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(handle), uintptr(flags), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) { + r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) + n = int32(r0) + if n == -1 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) { + r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetACP() (acp uint32) { + r0, _, _ := syscall.Syscall(procGetACP.Addr(), 0, 0, 0, 0) + acp = uint32(r0) + return +} + +func MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) { + r0, _, e1 := syscall.Syscall6(procMultiByteToWideChar.Addr(), 6, uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar)) + nwrite = int32(r0) + if nwrite == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procTranslateNameW.Addr(), 5, uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize)), 0) + if r1&0xff == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetUserNameExW.Addr(), 3, uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) + if r1&0xff == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) { + r0, _, _ := syscall.Syscall6(procNetUserGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)), 0, 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) { + r0, _, _ := syscall.Syscall(procNetGetJoinInformation.Addr(), 3, uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType))) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetApiBufferFree(buf *byte) (neterr error) { + r0, _, _ := syscall.Syscall(procNetApiBufferFree.Addr(), 1, uintptr(unsafe.Pointer(buf)), 0, 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) { + r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) { + r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetLengthSid(sid *SID) (len uint32) { + r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + len = uint32(r0) + return +} + +func CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) { + r1, _, e1 := syscall.Syscall(procCopySid.Addr(), 3, uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) { + r1, _, e1 := syscall.Syscall12(procAllocateAndInitializeSid.Addr(), 11, uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FreeSid(sid *SID) (err error) { + r1, _, e1 := syscall.Syscall(procFreeSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + if r1 != 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) { + r0, _, _ := syscall.Syscall(procEqualSid.Addr(), 2, uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2)), 0) + isEqual = r0 != 0 + return +} + +func OpenProcessToken(h Handle, access uint32, token *Token) (err error) { + r1, _, e1 := syscall.Syscall(procOpenProcessToken.Addr(), 3, uintptr(h), uintptr(access), uintptr(unsafe.Pointer(token))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetTokenInformation(t Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetTokenInformation.Addr(), 5, uintptr(t), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetUserProfileDirectoryW.Addr(), 3, uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} diff --git a/vendor/golang.org/x/sys/windows/ztypes_windows.go b/vendor/golang.org/x/sys/windows/ztypes_windows.go new file mode 100644 index 0000000..c99a3fe --- /dev/null +++ b/vendor/golang.org/x/sys/windows/ztypes_windows.go @@ -0,0 +1,1235 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import "syscall" + +const ( + // Windows errors. + ERROR_FILE_NOT_FOUND syscall.Errno = 2 + ERROR_PATH_NOT_FOUND syscall.Errno = 3 + ERROR_ACCESS_DENIED syscall.Errno = 5 + ERROR_NO_MORE_FILES syscall.Errno = 18 + ERROR_HANDLE_EOF syscall.Errno = 38 + ERROR_NETNAME_DELETED syscall.Errno = 64 + ERROR_FILE_EXISTS syscall.Errno = 80 + ERROR_BROKEN_PIPE syscall.Errno = 109 + ERROR_BUFFER_OVERFLOW syscall.Errno = 111 + ERROR_INSUFFICIENT_BUFFER syscall.Errno = 122 + ERROR_MOD_NOT_FOUND syscall.Errno = 126 + ERROR_PROC_NOT_FOUND syscall.Errno = 127 + ERROR_ALREADY_EXISTS syscall.Errno = 183 + ERROR_ENVVAR_NOT_FOUND syscall.Errno = 203 + ERROR_MORE_DATA syscall.Errno = 234 + ERROR_OPERATION_ABORTED syscall.Errno = 995 + ERROR_IO_PENDING syscall.Errno = 997 + ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 + ERROR_NOT_FOUND syscall.Errno = 1168 + ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314 + WSAEACCES syscall.Errno = 10013 + WSAECONNRESET syscall.Errno = 10054 +) + +const ( + // Invented values to support what package os expects. + O_RDONLY = 0x00000 + O_WRONLY = 0x00001 + O_RDWR = 0x00002 + O_CREAT = 0x00040 + O_EXCL = 0x00080 + O_NOCTTY = 0x00100 + O_TRUNC = 0x00200 + O_NONBLOCK = 0x00800 + O_APPEND = 0x00400 + O_SYNC = 0x01000 + O_ASYNC = 0x02000 + O_CLOEXEC = 0x80000 +) + +const ( + // More invented values for signals + SIGHUP = Signal(0x1) + SIGINT = Signal(0x2) + SIGQUIT = Signal(0x3) + SIGILL = Signal(0x4) + SIGTRAP = Signal(0x5) + SIGABRT = Signal(0x6) + SIGBUS = Signal(0x7) + SIGFPE = Signal(0x8) + SIGKILL = Signal(0x9) + SIGSEGV = Signal(0xb) + SIGPIPE = Signal(0xd) + SIGALRM = Signal(0xe) + SIGTERM = Signal(0xf) +) + +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", +} + +const ( + GENERIC_READ = 0x80000000 + GENERIC_WRITE = 0x40000000 + GENERIC_EXECUTE = 0x20000000 + GENERIC_ALL = 0x10000000 + + FILE_LIST_DIRECTORY = 0x00000001 + FILE_APPEND_DATA = 0x00000004 + FILE_WRITE_ATTRIBUTES = 0x00000100 + + FILE_SHARE_READ = 0x00000001 + FILE_SHARE_WRITE = 0x00000002 + FILE_SHARE_DELETE = 0x00000004 + FILE_ATTRIBUTE_READONLY = 0x00000001 + FILE_ATTRIBUTE_HIDDEN = 0x00000002 + FILE_ATTRIBUTE_SYSTEM = 0x00000004 + FILE_ATTRIBUTE_DIRECTORY = 0x00000010 + FILE_ATTRIBUTE_ARCHIVE = 0x00000020 + FILE_ATTRIBUTE_NORMAL = 0x00000080 + FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400 + + INVALID_FILE_ATTRIBUTES = 0xffffffff + + CREATE_NEW = 1 + CREATE_ALWAYS = 2 + OPEN_EXISTING = 3 + OPEN_ALWAYS = 4 + TRUNCATE_EXISTING = 5 + + FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 + FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 + FILE_FLAG_OVERLAPPED = 0x40000000 + + HANDLE_FLAG_INHERIT = 0x00000001 + STARTF_USESTDHANDLES = 0x00000100 + STARTF_USESHOWWINDOW = 0x00000001 + DUPLICATE_CLOSE_SOURCE = 0x00000001 + DUPLICATE_SAME_ACCESS = 0x00000002 + + STD_INPUT_HANDLE = -10 & (1<<32 - 1) + STD_OUTPUT_HANDLE = -11 & (1<<32 - 1) + STD_ERROR_HANDLE = -12 & (1<<32 - 1) + + FILE_BEGIN = 0 + FILE_CURRENT = 1 + FILE_END = 2 + + LANG_ENGLISH = 0x09 + SUBLANG_ENGLISH_US = 0x01 + + FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 + FORMAT_MESSAGE_IGNORE_INSERTS = 512 + FORMAT_MESSAGE_FROM_STRING = 1024 + FORMAT_MESSAGE_FROM_HMODULE = 2048 + FORMAT_MESSAGE_FROM_SYSTEM = 4096 + FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 + FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 + + MAX_PATH = 260 + MAX_LONG_PATH = 32768 + + MAX_COMPUTERNAME_LENGTH = 15 + + TIME_ZONE_ID_UNKNOWN = 0 + TIME_ZONE_ID_STANDARD = 1 + + TIME_ZONE_ID_DAYLIGHT = 2 + IGNORE = 0 + INFINITE = 0xffffffff + + WAIT_TIMEOUT = 258 + WAIT_ABANDONED = 0x00000080 + WAIT_OBJECT_0 = 0x00000000 + WAIT_FAILED = 0xFFFFFFFF + + CREATE_NEW_PROCESS_GROUP = 0x00000200 + CREATE_UNICODE_ENVIRONMENT = 0x00000400 + + PROCESS_TERMINATE = 1 + PROCESS_QUERY_INFORMATION = 0x00000400 + SYNCHRONIZE = 0x00100000 + + FILE_MAP_COPY = 0x01 + FILE_MAP_WRITE = 0x02 + FILE_MAP_READ = 0x04 + FILE_MAP_EXECUTE = 0x20 + + CTRL_C_EVENT = 0 + CTRL_BREAK_EVENT = 1 + + // Windows reserves errors >= 1<<29 for application use. + APPLICATION_ERROR = 1 << 29 +) + +const ( + // flags for CreateToolhelp32Snapshot + TH32CS_SNAPHEAPLIST = 0x01 + TH32CS_SNAPPROCESS = 0x02 + TH32CS_SNAPTHREAD = 0x04 + TH32CS_SNAPMODULE = 0x08 + TH32CS_SNAPMODULE32 = 0x10 + TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD + TH32CS_INHERIT = 0x80000000 +) + +const ( + // filters for ReadDirectoryChangesW + FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 + FILE_NOTIFY_CHANGE_DIR_NAME = 0x002 + FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004 + FILE_NOTIFY_CHANGE_SIZE = 0x008 + FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010 + FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020 + FILE_NOTIFY_CHANGE_CREATION = 0x040 + FILE_NOTIFY_CHANGE_SECURITY = 0x100 +) + +const ( + // do not reorder + FILE_ACTION_ADDED = iota + 1 + FILE_ACTION_REMOVED + FILE_ACTION_MODIFIED + FILE_ACTION_RENAMED_OLD_NAME + FILE_ACTION_RENAMED_NEW_NAME +) + +const ( + // wincrypt.h + PROV_RSA_FULL = 1 + PROV_RSA_SIG = 2 + PROV_DSS = 3 + PROV_FORTEZZA = 4 + PROV_MS_EXCHANGE = 5 + PROV_SSL = 6 + PROV_RSA_SCHANNEL = 12 + PROV_DSS_DH = 13 + PROV_EC_ECDSA_SIG = 14 + PROV_EC_ECNRA_SIG = 15 + PROV_EC_ECDSA_FULL = 16 + PROV_EC_ECNRA_FULL = 17 + PROV_DH_SCHANNEL = 18 + PROV_SPYRUS_LYNKS = 20 + PROV_RNG = 21 + PROV_INTEL_SEC = 22 + PROV_REPLACE_OWF = 23 + PROV_RSA_AES = 24 + CRYPT_VERIFYCONTEXT = 0xF0000000 + CRYPT_NEWKEYSET = 0x00000008 + CRYPT_DELETEKEYSET = 0x00000010 + CRYPT_MACHINE_KEYSET = 0x00000020 + CRYPT_SILENT = 0x00000040 + CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080 + + USAGE_MATCH_TYPE_AND = 0 + USAGE_MATCH_TYPE_OR = 1 + + X509_ASN_ENCODING = 0x00000001 + PKCS_7_ASN_ENCODING = 0x00010000 + + CERT_STORE_PROV_MEMORY = 2 + + CERT_STORE_ADD_ALWAYS = 4 + + CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004 + + CERT_TRUST_NO_ERROR = 0x00000000 + CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001 + CERT_TRUST_IS_REVOKED = 0x00000004 + CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008 + CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010 + CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020 + CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040 + CERT_TRUST_IS_CYCLIC = 0x00000080 + CERT_TRUST_INVALID_EXTENSION = 0x00000100 + CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200 + CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400 + CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800 + CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000 + CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000 + CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000 + CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000 + CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000 + CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000 + CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000 + CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000 + + CERT_CHAIN_POLICY_BASE = 1 + CERT_CHAIN_POLICY_AUTHENTICODE = 2 + CERT_CHAIN_POLICY_AUTHENTICODE_TS = 3 + CERT_CHAIN_POLICY_SSL = 4 + CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5 + CERT_CHAIN_POLICY_NT_AUTH = 6 + CERT_CHAIN_POLICY_MICROSOFT_ROOT = 7 + CERT_CHAIN_POLICY_EV = 8 + + CERT_E_EXPIRED = 0x800B0101 + CERT_E_ROLE = 0x800B0103 + CERT_E_PURPOSE = 0x800B0106 + CERT_E_UNTRUSTEDROOT = 0x800B0109 + CERT_E_CN_NO_MATCH = 0x800B010F + + AUTHTYPE_CLIENT = 1 + AUTHTYPE_SERVER = 2 +) + +var ( + OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00") + OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00") + OID_SGC_NETSCAPE = []byte("2.16.840.1.113730.4.1\x00") +) + +// Invented values to support what package os expects. +type Timeval struct { + Sec int32 + Usec int32 +} + +func (tv *Timeval) Nanoseconds() int64 { + return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3 +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + tv.Sec = int32(nsec / 1e9) + tv.Usec = int32(nsec % 1e9 / 1e3) + return +} + +type SecurityAttributes struct { + Length uint32 + SecurityDescriptor uintptr + InheritHandle uint32 +} + +type Overlapped struct { + Internal uintptr + InternalHigh uintptr + Offset uint32 + OffsetHigh uint32 + HEvent Handle +} + +type FileNotifyInformation struct { + NextEntryOffset uint32 + Action uint32 + FileNameLength uint32 + FileName uint16 +} + +type Filetime struct { + LowDateTime uint32 + HighDateTime uint32 +} + +// Nanoseconds returns Filetime ft in nanoseconds +// since Epoch (00:00:00 UTC, January 1, 1970). +func (ft *Filetime) Nanoseconds() int64 { + // 100-nanosecond intervals since January 1, 1601 + nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime) + // change starting time to the Epoch (00:00:00 UTC, January 1, 1970) + nsec -= 116444736000000000 + // convert into nanoseconds + nsec *= 100 + return nsec +} + +func NsecToFiletime(nsec int64) (ft Filetime) { + // convert into 100-nanosecond + nsec /= 100 + // change starting time to January 1, 1601 + nsec += 116444736000000000 + // split into high / low + ft.LowDateTime = uint32(nsec & 0xffffffff) + ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff) + return ft +} + +type Win32finddata struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH - 1]uint16 + AlternateFileName [13]uint16 +} + +// This is the actual system call structure. +// Win32finddata is what we committed to in Go 1. +type win32finddata1 struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH]uint16 + AlternateFileName [14]uint16 +} + +func copyFindData(dst *Win32finddata, src *win32finddata1) { + dst.FileAttributes = src.FileAttributes + dst.CreationTime = src.CreationTime + dst.LastAccessTime = src.LastAccessTime + dst.LastWriteTime = src.LastWriteTime + dst.FileSizeHigh = src.FileSizeHigh + dst.FileSizeLow = src.FileSizeLow + dst.Reserved0 = src.Reserved0 + dst.Reserved1 = src.Reserved1 + + // The src is 1 element bigger than dst, but it must be NUL. + copy(dst.FileName[:], src.FileName[:]) + copy(dst.AlternateFileName[:], src.AlternateFileName[:]) +} + +type ByHandleFileInformation struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + VolumeSerialNumber uint32 + FileSizeHigh uint32 + FileSizeLow uint32 + NumberOfLinks uint32 + FileIndexHigh uint32 + FileIndexLow uint32 +} + +const ( + GetFileExInfoStandard = 0 + GetFileExMaxInfoLevel = 1 +) + +type Win32FileAttributeData struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 +} + +// ShowWindow constants +const ( + // winuser.h + SW_HIDE = 0 + SW_NORMAL = 1 + SW_SHOWNORMAL = 1 + SW_SHOWMINIMIZED = 2 + SW_SHOWMAXIMIZED = 3 + SW_MAXIMIZE = 3 + SW_SHOWNOACTIVATE = 4 + SW_SHOW = 5 + SW_MINIMIZE = 6 + SW_SHOWMINNOACTIVE = 7 + SW_SHOWNA = 8 + SW_RESTORE = 9 + SW_SHOWDEFAULT = 10 + SW_FORCEMINIMIZE = 11 +) + +type StartupInfo struct { + Cb uint32 + _ *uint16 + Desktop *uint16 + Title *uint16 + X uint32 + Y uint32 + XSize uint32 + YSize uint32 + XCountChars uint32 + YCountChars uint32 + FillAttribute uint32 + Flags uint32 + ShowWindow uint16 + _ uint16 + _ *byte + StdInput Handle + StdOutput Handle + StdErr Handle +} + +type ProcessInformation struct { + Process Handle + Thread Handle + ProcessId uint32 + ThreadId uint32 +} + +type ProcessEntry32 struct { + Size uint32 + Usage uint32 + ProcessID uint32 + DefaultHeapID uintptr + ModuleID uint32 + Threads uint32 + ParentProcessID uint32 + PriClassBase int32 + Flags uint32 + ExeFile [MAX_PATH]uint16 +} + +type Systemtime struct { + Year uint16 + Month uint16 + DayOfWeek uint16 + Day uint16 + Hour uint16 + Minute uint16 + Second uint16 + Milliseconds uint16 +} + +type Timezoneinformation struct { + Bias int32 + StandardName [32]uint16 + StandardDate Systemtime + StandardBias int32 + DaylightName [32]uint16 + DaylightDate Systemtime + DaylightBias int32 +} + +// Socket related. + +const ( + AF_UNSPEC = 0 + AF_UNIX = 1 + AF_INET = 2 + AF_INET6 = 23 + AF_NETBIOS = 17 + + SOCK_STREAM = 1 + SOCK_DGRAM = 2 + SOCK_RAW = 3 + SOCK_SEQPACKET = 5 + + IPPROTO_IP = 0 + IPPROTO_IPV6 = 0x29 + IPPROTO_TCP = 6 + IPPROTO_UDP = 17 + + SOL_SOCKET = 0xffff + SO_REUSEADDR = 4 + SO_KEEPALIVE = 8 + SO_DONTROUTE = 16 + SO_BROADCAST = 32 + SO_LINGER = 128 + SO_RCVBUF = 0x1002 + SO_SNDBUF = 0x1001 + SO_UPDATE_ACCEPT_CONTEXT = 0x700b + SO_UPDATE_CONNECT_CONTEXT = 0x7010 + + IOC_OUT = 0x40000000 + IOC_IN = 0x80000000 + IOC_VENDOR = 0x18000000 + IOC_INOUT = IOC_IN | IOC_OUT + IOC_WS2 = 0x08000000 + SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 + SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 + SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + + // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 + + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_LOOP = 0xb + IP_ADD_MEMBERSHIP = 0xc + IP_DROP_MEMBERSHIP = 0xd + + IPV6_V6ONLY = 0x1b + IPV6_UNICAST_HOPS = 0x4 + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_LOOP = 0xb + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + + SOMAXCONN = 0x7fffffff + + TCP_NODELAY = 1 + + SHUT_RD = 0 + SHUT_WR = 1 + SHUT_RDWR = 2 + + WSADESCRIPTION_LEN = 256 + WSASYS_STATUS_LEN = 128 +) + +type WSABuf struct { + Len uint32 + Buf *byte +} + +// Invented values to support what package os expects. +const ( + S_IFMT = 0x1f000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +const ( + FILE_TYPE_CHAR = 0x0002 + FILE_TYPE_DISK = 0x0001 + FILE_TYPE_PIPE = 0x0003 + FILE_TYPE_REMOTE = 0x8000 + FILE_TYPE_UNKNOWN = 0x0000 +) + +type Hostent struct { + Name *byte + Aliases **byte + AddrType uint16 + Length uint16 + AddrList **byte +} + +type Protoent struct { + Name *byte + Aliases **byte + Proto uint16 +} + +const ( + DNS_TYPE_A = 0x0001 + DNS_TYPE_NS = 0x0002 + DNS_TYPE_MD = 0x0003 + DNS_TYPE_MF = 0x0004 + DNS_TYPE_CNAME = 0x0005 + DNS_TYPE_SOA = 0x0006 + DNS_TYPE_MB = 0x0007 + DNS_TYPE_MG = 0x0008 + DNS_TYPE_MR = 0x0009 + DNS_TYPE_NULL = 0x000a + DNS_TYPE_WKS = 0x000b + DNS_TYPE_PTR = 0x000c + DNS_TYPE_HINFO = 0x000d + DNS_TYPE_MINFO = 0x000e + DNS_TYPE_MX = 0x000f + DNS_TYPE_TEXT = 0x0010 + DNS_TYPE_RP = 0x0011 + DNS_TYPE_AFSDB = 0x0012 + DNS_TYPE_X25 = 0x0013 + DNS_TYPE_ISDN = 0x0014 + DNS_TYPE_RT = 0x0015 + DNS_TYPE_NSAP = 0x0016 + DNS_TYPE_NSAPPTR = 0x0017 + DNS_TYPE_SIG = 0x0018 + DNS_TYPE_KEY = 0x0019 + DNS_TYPE_PX = 0x001a + DNS_TYPE_GPOS = 0x001b + DNS_TYPE_AAAA = 0x001c + DNS_TYPE_LOC = 0x001d + DNS_TYPE_NXT = 0x001e + DNS_TYPE_EID = 0x001f + DNS_TYPE_NIMLOC = 0x0020 + DNS_TYPE_SRV = 0x0021 + DNS_TYPE_ATMA = 0x0022 + DNS_TYPE_NAPTR = 0x0023 + DNS_TYPE_KX = 0x0024 + DNS_TYPE_CERT = 0x0025 + DNS_TYPE_A6 = 0x0026 + DNS_TYPE_DNAME = 0x0027 + DNS_TYPE_SINK = 0x0028 + DNS_TYPE_OPT = 0x0029 + DNS_TYPE_DS = 0x002B + DNS_TYPE_RRSIG = 0x002E + DNS_TYPE_NSEC = 0x002F + DNS_TYPE_DNSKEY = 0x0030 + DNS_TYPE_DHCID = 0x0031 + DNS_TYPE_UINFO = 0x0064 + DNS_TYPE_UID = 0x0065 + DNS_TYPE_GID = 0x0066 + DNS_TYPE_UNSPEC = 0x0067 + DNS_TYPE_ADDRS = 0x00f8 + DNS_TYPE_TKEY = 0x00f9 + DNS_TYPE_TSIG = 0x00fa + DNS_TYPE_IXFR = 0x00fb + DNS_TYPE_AXFR = 0x00fc + DNS_TYPE_MAILB = 0x00fd + DNS_TYPE_MAILA = 0x00fe + DNS_TYPE_ALL = 0x00ff + DNS_TYPE_ANY = 0x00ff + DNS_TYPE_WINS = 0xff01 + DNS_TYPE_WINSR = 0xff02 + DNS_TYPE_NBSTAT = 0xff01 +) + +const ( + DNS_INFO_NO_RECORDS = 0x251D +) + +const ( + // flags inside DNSRecord.Dw + DnsSectionQuestion = 0x0000 + DnsSectionAnswer = 0x0001 + DnsSectionAuthority = 0x0002 + DnsSectionAdditional = 0x0003 +) + +type DNSSRVData struct { + Target *uint16 + Priority uint16 + Weight uint16 + Port uint16 + Pad uint16 +} + +type DNSPTRData struct { + Host *uint16 +} + +type DNSMXData struct { + NameExchange *uint16 + Preference uint16 + Pad uint16 +} + +type DNSTXTData struct { + StringCount uint16 + StringArray [1]*uint16 +} + +type DNSRecord struct { + Next *DNSRecord + Name *uint16 + Type uint16 + Length uint16 + Dw uint32 + Ttl uint32 + Reserved uint32 + Data [40]byte +} + +const ( + TF_DISCONNECT = 1 + TF_REUSE_SOCKET = 2 + TF_WRITE_BEHIND = 4 + TF_USE_DEFAULT_WORKER = 0 + TF_USE_SYSTEM_THREAD = 16 + TF_USE_KERNEL_APC = 32 +) + +type TransmitFileBuffers struct { + Head uintptr + HeadLength uint32 + Tail uintptr + TailLength uint32 +} + +const ( + IFF_UP = 1 + IFF_BROADCAST = 2 + IFF_LOOPBACK = 4 + IFF_POINTTOPOINT = 8 + IFF_MULTICAST = 16 +) + +const SIO_GET_INTERFACE_LIST = 0x4004747F + +// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old. +// will be fixed to change variable type as suitable. + +type SockaddrGen [24]byte + +type InterfaceInfo struct { + Flags uint32 + Address SockaddrGen + BroadcastAddress SockaddrGen + Netmask SockaddrGen +} + +type IpAddressString struct { + String [16]byte +} + +type IpMaskString IpAddressString + +type IpAddrString struct { + Next *IpAddrString + IpAddress IpAddressString + IpMask IpMaskString + Context uint32 +} + +const MAX_ADAPTER_NAME_LENGTH = 256 +const MAX_ADAPTER_DESCRIPTION_LENGTH = 128 +const MAX_ADAPTER_ADDRESS_LENGTH = 8 + +type IpAdapterInfo struct { + Next *IpAdapterInfo + ComboIndex uint32 + AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte + Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte + AddressLength uint32 + Address [MAX_ADAPTER_ADDRESS_LENGTH]byte + Index uint32 + Type uint32 + DhcpEnabled uint32 + CurrentIpAddress *IpAddrString + IpAddressList IpAddrString + GatewayList IpAddrString + DhcpServer IpAddrString + HaveWins bool + PrimaryWinsServer IpAddrString + SecondaryWinsServer IpAddrString + LeaseObtained int64 + LeaseExpires int64 +} + +const MAXLEN_PHYSADDR = 8 +const MAX_INTERFACE_NAME_LEN = 256 +const MAXLEN_IFDESCR = 256 + +type MibIfRow struct { + Name [MAX_INTERFACE_NAME_LEN]uint16 + Index uint32 + Type uint32 + Mtu uint32 + Speed uint32 + PhysAddrLen uint32 + PhysAddr [MAXLEN_PHYSADDR]byte + AdminStatus uint32 + OperStatus uint32 + LastChange uint32 + InOctets uint32 + InUcastPkts uint32 + InNUcastPkts uint32 + InDiscards uint32 + InErrors uint32 + InUnknownProtos uint32 + OutOctets uint32 + OutUcastPkts uint32 + OutNUcastPkts uint32 + OutDiscards uint32 + OutErrors uint32 + OutQLen uint32 + DescrLen uint32 + Descr [MAXLEN_IFDESCR]byte +} + +type CertContext struct { + EncodingType uint32 + EncodedCert *byte + Length uint32 + CertInfo uintptr + Store Handle +} + +type CertChainContext struct { + Size uint32 + TrustStatus CertTrustStatus + ChainCount uint32 + Chains **CertSimpleChain + LowerQualityChainCount uint32 + LowerQualityChains **CertChainContext + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertSimpleChain struct { + Size uint32 + TrustStatus CertTrustStatus + NumElements uint32 + Elements **CertChainElement + TrustListInfo uintptr + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertChainElement struct { + Size uint32 + CertContext *CertContext + TrustStatus CertTrustStatus + RevocationInfo *CertRevocationInfo + IssuanceUsage *CertEnhKeyUsage + ApplicationUsage *CertEnhKeyUsage + ExtendedErrorInfo *uint16 +} + +type CertRevocationInfo struct { + Size uint32 + RevocationResult uint32 + RevocationOid *byte + OidSpecificInfo uintptr + HasFreshnessTime uint32 + FreshnessTime uint32 + CrlInfo uintptr // *CertRevocationCrlInfo +} + +type CertTrustStatus struct { + ErrorStatus uint32 + InfoStatus uint32 +} + +type CertUsageMatch struct { + Type uint32 + Usage CertEnhKeyUsage +} + +type CertEnhKeyUsage struct { + Length uint32 + UsageIdentifiers **byte +} + +type CertChainPara struct { + Size uint32 + RequestedUsage CertUsageMatch + RequstedIssuancePolicy CertUsageMatch + URLRetrievalTimeout uint32 + CheckRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 + CacheResync *Filetime +} + +type CertChainPolicyPara struct { + Size uint32 + Flags uint32 + ExtraPolicyPara uintptr +} + +type SSLExtraCertChainPolicyPara struct { + Size uint32 + AuthType uint32 + Checks uint32 + ServerName *uint16 +} + +type CertChainPolicyStatus struct { + Size uint32 + Error uint32 + ChainIndex uint32 + ElementIndex uint32 + ExtraPolicyStatus uintptr +} + +const ( + // do not reorder + HKEY_CLASSES_ROOT = 0x80000000 + iota + HKEY_CURRENT_USER + HKEY_LOCAL_MACHINE + HKEY_USERS + HKEY_PERFORMANCE_DATA + HKEY_CURRENT_CONFIG + HKEY_DYN_DATA + + KEY_QUERY_VALUE = 1 + KEY_SET_VALUE = 2 + KEY_CREATE_SUB_KEY = 4 + KEY_ENUMERATE_SUB_KEYS = 8 + KEY_NOTIFY = 16 + KEY_CREATE_LINK = 32 + KEY_WRITE = 0x20006 + KEY_EXECUTE = 0x20019 + KEY_READ = 0x20019 + KEY_WOW64_64KEY = 0x0100 + KEY_WOW64_32KEY = 0x0200 + KEY_ALL_ACCESS = 0xf003f +) + +const ( + // do not reorder + REG_NONE = iota + REG_SZ + REG_EXPAND_SZ + REG_BINARY + REG_DWORD_LITTLE_ENDIAN + REG_DWORD_BIG_ENDIAN + REG_LINK + REG_MULTI_SZ + REG_RESOURCE_LIST + REG_FULL_RESOURCE_DESCRIPTOR + REG_RESOURCE_REQUIREMENTS_LIST + REG_QWORD_LITTLE_ENDIAN + REG_DWORD = REG_DWORD_LITTLE_ENDIAN + REG_QWORD = REG_QWORD_LITTLE_ENDIAN +) + +type AddrinfoW struct { + Flags int32 + Family int32 + Socktype int32 + Protocol int32 + Addrlen uintptr + Canonname *uint16 + Addr uintptr + Next *AddrinfoW +} + +const ( + AI_PASSIVE = 1 + AI_CANONNAME = 2 + AI_NUMERICHOST = 4 +) + +type GUID struct { + Data1 uint32 + Data2 uint16 + Data3 uint16 + Data4 [8]byte +} + +var WSAID_CONNECTEX = GUID{ + 0x25a207b9, + 0xddf3, + 0x4660, + [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}, +} + +const ( + FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1 + FILE_SKIP_SET_EVENT_ON_HANDLE = 2 +) + +const ( + WSAPROTOCOL_LEN = 255 + MAX_PROTOCOL_CHAIN = 7 + BASE_PROTOCOL = 1 + LAYERED_PROTOCOL = 0 + + XP1_CONNECTIONLESS = 0x00000001 + XP1_GUARANTEED_DELIVERY = 0x00000002 + XP1_GUARANTEED_ORDER = 0x00000004 + XP1_MESSAGE_ORIENTED = 0x00000008 + XP1_PSEUDO_STREAM = 0x00000010 + XP1_GRACEFUL_CLOSE = 0x00000020 + XP1_EXPEDITED_DATA = 0x00000040 + XP1_CONNECT_DATA = 0x00000080 + XP1_DISCONNECT_DATA = 0x00000100 + XP1_SUPPORT_BROADCAST = 0x00000200 + XP1_SUPPORT_MULTIPOINT = 0x00000400 + XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800 + XP1_MULTIPOINT_DATA_PLANE = 0x00001000 + XP1_QOS_SUPPORTED = 0x00002000 + XP1_UNI_SEND = 0x00008000 + XP1_UNI_RECV = 0x00010000 + XP1_IFS_HANDLES = 0x00020000 + XP1_PARTIAL_MESSAGE = 0x00040000 + XP1_SAN_SUPPORT_SDP = 0x00080000 + + PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001 + PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002 + PFL_HIDDEN = 0x00000004 + PFL_MATCHES_PROTOCOL_ZERO = 0x00000008 + PFL_NETWORKDIRECT_PROVIDER = 0x00000010 +) + +type WSAProtocolInfo struct { + ServiceFlags1 uint32 + ServiceFlags2 uint32 + ServiceFlags3 uint32 + ServiceFlags4 uint32 + ProviderFlags uint32 + ProviderId GUID + CatalogEntryId uint32 + ProtocolChain WSAProtocolChain + Version int32 + AddressFamily int32 + MaxSockAddr int32 + MinSockAddr int32 + SocketType int32 + Protocol int32 + ProtocolMaxOffset int32 + NetworkByteOrder int32 + SecurityScheme int32 + MessageSize uint32 + ProviderReserved uint32 + ProtocolName [WSAPROTOCOL_LEN + 1]uint16 +} + +type WSAProtocolChain struct { + ChainLen int32 + ChainEntries [MAX_PROTOCOL_CHAIN]uint32 +} + +type TCPKeepalive struct { + OnOff uint32 + Time uint32 + Interval uint32 +} + +type symbolicLinkReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + Flags uint32 + PathBuffer [1]uint16 +} + +type mountPointReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + PathBuffer [1]uint16 +} + +type reparseDataBuffer struct { + ReparseTag uint32 + ReparseDataLength uint16 + Reserved uint16 + + // GenericReparseBuffer + reparseBuffer byte +} + +const ( + FSCTL_GET_REPARSE_POINT = 0x900A8 + MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024 + IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 + IO_REPARSE_TAG_SYMLINK = 0xA000000C + SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 +) + +const ( + ComputerNameNetBIOS = 0 + ComputerNameDnsHostname = 1 + ComputerNameDnsDomain = 2 + ComputerNameDnsFullyQualified = 3 + ComputerNamePhysicalNetBIOS = 4 + ComputerNamePhysicalDnsHostname = 5 + ComputerNamePhysicalDnsDomain = 6 + ComputerNamePhysicalDnsFullyQualified = 7 + ComputerNameMax = 8 +) + +const ( + MOVEFILE_REPLACE_EXISTING = 0x1 + MOVEFILE_COPY_ALLOWED = 0x2 + MOVEFILE_DELAY_UNTIL_REBOOT = 0x4 + MOVEFILE_WRITE_THROUGH = 0x8 + MOVEFILE_CREATE_HARDLINK = 0x10 + MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 +) + +const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 + +const ( + IF_TYPE_OTHER = 1 + IF_TYPE_ETHERNET_CSMACD = 6 + IF_TYPE_ISO88025_TOKENRING = 9 + IF_TYPE_PPP = 23 + IF_TYPE_SOFTWARE_LOOPBACK = 24 + IF_TYPE_ATM = 37 + IF_TYPE_IEEE80211 = 71 + IF_TYPE_TUNNEL = 131 + IF_TYPE_IEEE1394 = 144 +) + +type SocketAddress struct { + Sockaddr *syscall.RawSockaddrAny + SockaddrLength int32 +} + +type IpAdapterUnicastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterUnicastAddress + Address SocketAddress + PrefixOrigin int32 + SuffixOrigin int32 + DadState int32 + ValidLifetime uint32 + PreferredLifetime uint32 + LeaseLifetime uint32 + OnLinkPrefixLength uint8 +} + +type IpAdapterAnycastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterAnycastAddress + Address SocketAddress +} + +type IpAdapterMulticastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterMulticastAddress + Address SocketAddress +} + +type IpAdapterDnsServerAdapter struct { + Length uint32 + Reserved uint32 + Next *IpAdapterDnsServerAdapter + Address SocketAddress +} + +type IpAdapterPrefix struct { + Length uint32 + Flags uint32 + Next *IpAdapterPrefix + Address SocketAddress + PrefixLength uint32 +} + +type IpAdapterAddresses struct { + Length uint32 + IfIndex uint32 + Next *IpAdapterAddresses + AdapterName *byte + FirstUnicastAddress *IpAdapterUnicastAddress + FirstAnycastAddress *IpAdapterAnycastAddress + FirstMulticastAddress *IpAdapterMulticastAddress + FirstDnsServerAddress *IpAdapterDnsServerAdapter + DnsSuffix *uint16 + Description *uint16 + FriendlyName *uint16 + PhysicalAddress [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte + PhysicalAddressLength uint32 + Flags uint32 + Mtu uint32 + IfType uint32 + OperStatus uint32 + Ipv6IfIndex uint32 + ZoneIndices [16]uint32 + FirstPrefix *IpAdapterPrefix + /* more fields might be present here. */ +} + +const ( + IfOperStatusUp = 1 + IfOperStatusDown = 2 + IfOperStatusTesting = 3 + IfOperStatusUnknown = 4 + IfOperStatusDormant = 5 + IfOperStatusNotPresent = 6 + IfOperStatusLowerLayerDown = 7 +) diff --git a/vendor/golang.org/x/sys/windows/ztypes_windows_386.go b/vendor/golang.org/x/sys/windows/ztypes_windows_386.go new file mode 100644 index 0000000..10f33be --- /dev/null +++ b/vendor/golang.org/x/sys/windows/ztypes_windows_386.go @@ -0,0 +1,22 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte +} + +type Servent struct { + Name *byte + Aliases **byte + Port uint16 + Proto *byte +} diff --git a/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go b/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go new file mode 100644 index 0000000..3f272c2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go @@ -0,0 +1,22 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte +} + +type Servent struct { + Name *byte + Aliases **byte + Proto *byte + Port uint16 +} diff --git a/vendor/gopkg.in/fsnotify.v1/.gitignore b/vendor/gopkg.in/fsnotify.v1/.gitignore new file mode 100644 index 0000000..4cd0cba --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/.gitignore @@ -0,0 +1,6 @@ +# Setup a Global .gitignore for OS and editor generated files: +# https://help.github.com/articles/ignoring-files +# git config --global core.excludesfile ~/.gitignore_global + +.vagrant +*.sublime-project diff --git a/vendor/gopkg.in/fsnotify.v1/.travis.yml b/vendor/gopkg.in/fsnotify.v1/.travis.yml new file mode 100644 index 0000000..1b5151f --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/.travis.yml @@ -0,0 +1,20 @@ +sudo: false +language: go + +go: + - 1.5.1 + +before_script: + - go get -u github.com/golang/lint/golint + +after_script: + - test -z "$(gofmt -s -l -w . | tee /dev/stderr)" + - test -z "$(golint ./... | tee /dev/stderr)" + - go vet ./... + +os: + - linux + - osx + +notifications: + email: false diff --git a/vendor/gopkg.in/fsnotify.v1/AUTHORS b/vendor/gopkg.in/fsnotify.v1/AUTHORS new file mode 100644 index 0000000..4e0e828 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/AUTHORS @@ -0,0 +1,34 @@ +# Names should be added to this file as +# Name or Organization +# The email address is not required for organizations. + +# You can update this list using the following command: +# +# $ git shortlog -se | awk '{print $2 " " $3 " " $4}' + +# Please keep the list sorted. + +Adrien Bustany +Caleb Spare +Case Nelson +Chris Howey +Christoffer Buchholz +Dave Cheney +Francisco Souza +Hari haran +John C Barstow +Kelvin Fo +Matt Layher +Nathan Youngman +Paul Hammond +Pieter Droogendijk +Pursuit92 +Rob Figueiredo +Soge Zhang +Tilak Sharma +Travis Cline +Tudor Golubenco +Yukang +bronze1man +debrando +henrikedwards diff --git a/vendor/gopkg.in/fsnotify.v1/CHANGELOG.md b/vendor/gopkg.in/fsnotify.v1/CHANGELOG.md new file mode 100644 index 0000000..b0bfea0 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/CHANGELOG.md @@ -0,0 +1,267 @@ +# Changelog + +## v1.2.1 / 2015-10-14 + +* kqueue: don't watch named pipes [#98](https://github.com/go-fsnotify/fsnotify/pull/98) (thanks @evanphx) + +## v1.2.0 / 2015-02-08 + +* inotify: use epoll to wake up readEvents [#66](https://github.com/go-fsnotify/fsnotify/pull/66) (thanks @PieterD) +* inotify: closing watcher should now always shut down goroutine [#63](https://github.com/go-fsnotify/fsnotify/pull/63) (thanks @PieterD) +* kqueue: close kqueue after removing watches, fixes [#59](https://github.com/go-fsnotify/fsnotify/issues/59) + +## v1.1.1 / 2015-02-05 + +* inotify: Retry read on EINTR [#61](https://github.com/go-fsnotify/fsnotify/issues/61) (thanks @PieterD) + +## v1.1.0 / 2014-12-12 + +* kqueue: rework internals [#43](https://github.com/go-fsnotify/fsnotify/pull/43) + * add low-level functions + * only need to store flags on directories + * less mutexes [#13](https://github.com/go-fsnotify/fsnotify/issues/13) + * done can be an unbuffered channel + * remove calls to os.NewSyscallError +* More efficient string concatenation for Event.String() [#52](https://github.com/go-fsnotify/fsnotify/pull/52) (thanks @mdlayher) +* kqueue: fix regression in rework causing subdirectories to be watched [#48](https://github.com/go-fsnotify/fsnotify/issues/48) +* kqueue: cleanup internal watch before sending remove event [#51](https://github.com/go-fsnotify/fsnotify/issues/51) + +## v1.0.4 / 2014-09-07 + +* kqueue: add dragonfly to the build tags. +* Rename source code files, rearrange code so exported APIs are at the top. +* Add done channel to example code. [#37](https://github.com/go-fsnotify/fsnotify/pull/37) (thanks @chenyukang) + +## v1.0.3 / 2014-08-19 + +* [Fix] Windows MOVED_TO now translates to Create like on BSD and Linux. [#36](https://github.com/go-fsnotify/fsnotify/issues/36) + +## v1.0.2 / 2014-08-17 + +* [Fix] Missing create events on OS X. [#14](https://github.com/go-fsnotify/fsnotify/issues/14) (thanks @zhsso) +* [Fix] Make ./path and path equivalent. (thanks @zhsso) + +## v1.0.0 / 2014-08-15 + +* [API] Remove AddWatch on Windows, use Add. +* Improve documentation for exported identifiers. [#30](https://github.com/go-fsnotify/fsnotify/issues/30) +* Minor updates based on feedback from golint. + +## dev / 2014-07-09 + +* Moved to [github.com/go-fsnotify/fsnotify](https://github.com/go-fsnotify/fsnotify). +* Use os.NewSyscallError instead of returning errno (thanks @hariharan-uno) + +## dev / 2014-07-04 + +* kqueue: fix incorrect mutex used in Close() +* Update example to demonstrate usage of Op. + +## dev / 2014-06-28 + +* [API] Don't set the Write Op for attribute notifications [#4](https://github.com/go-fsnotify/fsnotify/issues/4) +* Fix for String() method on Event (thanks Alex Brainman) +* Don't build on Plan 9 or Solaris (thanks @4ad) + +## dev / 2014-06-21 + +* Events channel of type Event rather than *Event. +* [internal] use syscall constants directly for inotify and kqueue. +* [internal] kqueue: rename events to kevents and fileEvent to event. + +## dev / 2014-06-19 + +* Go 1.3+ required on Windows (uses syscall.ERROR_MORE_DATA internally). +* [internal] remove cookie from Event struct (unused). +* [internal] Event struct has the same definition across every OS. +* [internal] remove internal watch and removeWatch methods. + +## dev / 2014-06-12 + +* [API] Renamed Watch() to Add() and RemoveWatch() to Remove(). +* [API] Pluralized channel names: Events and Errors. +* [API] Renamed FileEvent struct to Event. +* [API] Op constants replace methods like IsCreate(). + +## dev / 2014-06-12 + +* Fix data race on kevent buffer (thanks @tilaks) [#98](https://github.com/howeyc/fsnotify/pull/98) + +## dev / 2014-05-23 + +* [API] Remove current implementation of WatchFlags. + * current implementation doesn't take advantage of OS for efficiency + * provides little benefit over filtering events as they are received, but has extra bookkeeping and mutexes + * no tests for the current implementation + * not fully implemented on Windows [#93](https://github.com/howeyc/fsnotify/issues/93#issuecomment-39285195) + +## v0.9.3 / 2014-12-31 + +* kqueue: cleanup internal watch before sending remove event [#51](https://github.com/go-fsnotify/fsnotify/issues/51) + +## v0.9.2 / 2014-08-17 + +* [Backport] Fix missing create events on OS X. [#14](https://github.com/go-fsnotify/fsnotify/issues/14) (thanks @zhsso) + +## v0.9.1 / 2014-06-12 + +* Fix data race on kevent buffer (thanks @tilaks) [#98](https://github.com/howeyc/fsnotify/pull/98) + +## v0.9.0 / 2014-01-17 + +* IsAttrib() for events that only concern a file's metadata [#79][] (thanks @abustany) +* [Fix] kqueue: fix deadlock [#77][] (thanks @cespare) +* [NOTICE] Development has moved to `code.google.com/p/go.exp/fsnotify` in preparation for inclusion in the Go standard library. + +## v0.8.12 / 2013-11-13 + +* [API] Remove FD_SET and friends from Linux adapter + +## v0.8.11 / 2013-11-02 + +* [Doc] Add Changelog [#72][] (thanks @nathany) +* [Doc] Spotlight and double modify events on OS X [#62][] (reported by @paulhammond) + +## v0.8.10 / 2013-10-19 + +* [Fix] kqueue: remove file watches when parent directory is removed [#71][] (reported by @mdwhatcott) +* [Fix] kqueue: race between Close and readEvents [#70][] (reported by @bernerdschaefer) +* [Doc] specify OS-specific limits in README (thanks @debrando) + +## v0.8.9 / 2013-09-08 + +* [Doc] Contributing (thanks @nathany) +* [Doc] update package path in example code [#63][] (thanks @paulhammond) +* [Doc] GoCI badge in README (Linux only) [#60][] +* [Doc] Cross-platform testing with Vagrant [#59][] (thanks @nathany) + +## v0.8.8 / 2013-06-17 + +* [Fix] Windows: handle `ERROR_MORE_DATA` on Windows [#49][] (thanks @jbowtie) + +## v0.8.7 / 2013-06-03 + +* [API] Make syscall flags internal +* [Fix] inotify: ignore event changes +* [Fix] race in symlink test [#45][] (reported by @srid) +* [Fix] tests on Windows +* lower case error messages + +## v0.8.6 / 2013-05-23 + +* kqueue: Use EVT_ONLY flag on Darwin +* [Doc] Update README with full example + +## v0.8.5 / 2013-05-09 + +* [Fix] inotify: allow monitoring of "broken" symlinks (thanks @tsg) + +## v0.8.4 / 2013-04-07 + +* [Fix] kqueue: watch all file events [#40][] (thanks @ChrisBuchholz) + +## v0.8.3 / 2013-03-13 + +* [Fix] inoitfy/kqueue memory leak [#36][] (reported by @nbkolchin) +* [Fix] kqueue: use fsnFlags for watching a directory [#33][] (reported by @nbkolchin) + +## v0.8.2 / 2013-02-07 + +* [Doc] add Authors +* [Fix] fix data races for map access [#29][] (thanks @fsouza) + +## v0.8.1 / 2013-01-09 + +* [Fix] Windows path separators +* [Doc] BSD License + +## v0.8.0 / 2012-11-09 + +* kqueue: directory watching improvements (thanks @vmirage) +* inotify: add `IN_MOVED_TO` [#25][] (requested by @cpisto) +* [Fix] kqueue: deleting watched directory [#24][] (reported by @jakerr) + +## v0.7.4 / 2012-10-09 + +* [Fix] inotify: fixes from https://codereview.appspot.com/5418045/ (ugorji) +* [Fix] kqueue: preserve watch flags when watching for delete [#21][] (reported by @robfig) +* [Fix] kqueue: watch the directory even if it isn't a new watch (thanks @robfig) +* [Fix] kqueue: modify after recreation of file + +## v0.7.3 / 2012-09-27 + +* [Fix] kqueue: watch with an existing folder inside the watched folder (thanks @vmirage) +* [Fix] kqueue: no longer get duplicate CREATE events + +## v0.7.2 / 2012-09-01 + +* kqueue: events for created directories + +## v0.7.1 / 2012-07-14 + +* [Fix] for renaming files + +## v0.7.0 / 2012-07-02 + +* [Feature] FSNotify flags +* [Fix] inotify: Added file name back to event path + +## v0.6.0 / 2012-06-06 + +* kqueue: watch files after directory created (thanks @tmc) + +## v0.5.1 / 2012-05-22 + +* [Fix] inotify: remove all watches before Close() + +## v0.5.0 / 2012-05-03 + +* [API] kqueue: return errors during watch instead of sending over channel +* kqueue: match symlink behavior on Linux +* inotify: add `DELETE_SELF` (requested by @taralx) +* [Fix] kqueue: handle EINTR (reported by @robfig) +* [Doc] Godoc example [#1][] (thanks @davecheney) + +## v0.4.0 / 2012-03-30 + +* Go 1 released: build with go tool +* [Feature] Windows support using winfsnotify +* Windows does not have attribute change notifications +* Roll attribute notifications into IsModify + +## v0.3.0 / 2012-02-19 + +* kqueue: add files when watch directory + +## v0.2.0 / 2011-12-30 + +* update to latest Go weekly code + +## v0.1.0 / 2011-10-19 + +* kqueue: add watch on file creation to match inotify +* kqueue: create file event +* inotify: ignore `IN_IGNORED` events +* event String() +* linux: common FileEvent functions +* initial commit + +[#79]: https://github.com/howeyc/fsnotify/pull/79 +[#77]: https://github.com/howeyc/fsnotify/pull/77 +[#72]: https://github.com/howeyc/fsnotify/issues/72 +[#71]: https://github.com/howeyc/fsnotify/issues/71 +[#70]: https://github.com/howeyc/fsnotify/issues/70 +[#63]: https://github.com/howeyc/fsnotify/issues/63 +[#62]: https://github.com/howeyc/fsnotify/issues/62 +[#60]: https://github.com/howeyc/fsnotify/issues/60 +[#59]: https://github.com/howeyc/fsnotify/issues/59 +[#49]: https://github.com/howeyc/fsnotify/issues/49 +[#45]: https://github.com/howeyc/fsnotify/issues/45 +[#40]: https://github.com/howeyc/fsnotify/issues/40 +[#36]: https://github.com/howeyc/fsnotify/issues/36 +[#33]: https://github.com/howeyc/fsnotify/issues/33 +[#29]: https://github.com/howeyc/fsnotify/issues/29 +[#25]: https://github.com/howeyc/fsnotify/issues/25 +[#24]: https://github.com/howeyc/fsnotify/issues/24 +[#21]: https://github.com/howeyc/fsnotify/issues/21 + diff --git a/vendor/gopkg.in/fsnotify.v1/CONTRIBUTING.md b/vendor/gopkg.in/fsnotify.v1/CONTRIBUTING.md new file mode 100644 index 0000000..0f377f3 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/CONTRIBUTING.md @@ -0,0 +1,77 @@ +# Contributing + +## Issues + +* Request features and report bugs using the [GitHub Issue Tracker](https://github.com/go-fsnotify/fsnotify/issues). +* Please indicate the platform you are using fsnotify on. +* A code example to reproduce the problem is appreciated. + +## Pull Requests + +### Contributor License Agreement + +fsnotify is derived from code in the [golang.org/x/exp](https://godoc.org/golang.org/x/exp) package and it may be included [in the standard library](https://github.com/go-fsnotify/fsnotify/issues/1) in the future. Therefore fsnotify carries the same [LICENSE](https://github.com/go-fsnotify/fsnotify/blob/master/LICENSE) as Go. Contributors retain their copyright, so you need to fill out a short form before we can accept your contribution: [Google Individual Contributor License Agreement](https://developers.google.com/open-source/cla/individual). + +Please indicate that you have signed the CLA in your pull request. + +### How fsnotify is Developed + +* Development is done on feature branches. +* Tests are run on BSD, Linux, OS X and Windows. +* Pull requests are reviewed and [applied to master][am] using [hub][]. + * Maintainers may modify or squash commits rather than asking contributors to. +* To issue a new release, the maintainers will: + * Update the CHANGELOG + * Tag a version, which will become available through gopkg.in. + +### How to Fork + +For smooth sailing, always use the original import path. Installing with `go get` makes this easy. + +1. Install from GitHub (`go get -u github.com/go-fsnotify/fsnotify`) +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Ensure everything works and the tests pass (see below) +4. Commit your changes (`git commit -am 'Add some feature'`) + +Contribute upstream: + +1. Fork fsnotify on GitHub +2. Add your remote (`git remote add fork git@github.com:mycompany/repo.git`) +3. Push to the branch (`git push fork my-new-feature`) +4. Create a new Pull Request on GitHub + +This workflow is [thoroughly explained by Katrina Owen](https://blog.splice.com/contributing-open-source-git-repositories-go/). + +### Testing + +fsnotify uses build tags to compile different code on Linux, BSD, OS X, and Windows. + +Before doing a pull request, please do your best to test your changes on multiple platforms, and list which platforms you were able/unable to test on. + +To aid in cross-platform testing there is a Vagrantfile for Linux and BSD. + +* Install [Vagrant](http://www.vagrantup.com/) and [VirtualBox](https://www.virtualbox.org/) +* Setup [Vagrant Gopher](https://github.com/nathany/vagrant-gopher) in your `src` folder. +* Run `vagrant up` from the project folder. You can also setup just one box with `vagrant up linux` or `vagrant up bsd` (note: the BSD box doesn't support Windows hosts at this time, and NFS may prompt for your host OS password) +* Once setup, you can run the test suite on a given OS with a single command `vagrant ssh linux -c 'cd go-fsnotify/fsnotify; go test'`. +* When you're done, you will want to halt or destroy the Vagrant boxes. + +Notice: fsnotify file system events won't trigger in shared folders. The tests get around this limitation by using the /tmp directory. + +Right now there is no equivalent solution for Windows and OS X, but there are Windows VMs [freely available from Microsoft](http://www.modern.ie/en-us/virtualization-tools#downloads). + +### Maintainers + +Help maintaining fsnotify is welcome. To be a maintainer: + +* Submit a pull request and sign the CLA as above. +* You must be able to run the test suite on Mac, Windows, Linux and BSD. + +To keep master clean, the fsnotify project uses the "apply mail" workflow outlined in Nathaniel Talbott's post ["Merge pull request" Considered Harmful][am]. This requires installing [hub][]. + +All code changes should be internal pull requests. + +Releases are tagged using [Semantic Versioning](http://semver.org/). + +[hub]: https://github.com/github/hub +[am]: http://blog.spreedly.com/2014/06/24/merge-pull-request-considered-harmful/#.VGa5yZPF_Zs diff --git a/vendor/gopkg.in/fsnotify.v1/LICENSE b/vendor/gopkg.in/fsnotify.v1/LICENSE new file mode 100644 index 0000000..f21e540 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2012 The Go Authors. All rights reserved. +Copyright (c) 2012 fsnotify Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/gopkg.in/fsnotify.v1/README.md b/vendor/gopkg.in/fsnotify.v1/README.md new file mode 100644 index 0000000..736c0d2 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/README.md @@ -0,0 +1,64 @@ +# File system notifications for Go + +[![GoDoc](https://godoc.org/gopkg.in/fsnotify.v1?status.svg)](https://godoc.org/gopkg.in/fsnotify.v1) [![Coverage](http://gocover.io/_badge/github.com/go-fsnotify/fsnotify)](http://gocover.io/github.com/go-fsnotify/fsnotify) + +Go 1.3+ required. + +Cross platform: Windows, Linux, BSD and OS X. + +|Adapter |OS |Status | +|----------|----------|----------| +|inotify |Linux, Android\*|Supported [![Build Status](https://travis-ci.org/go-fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/go-fsnotify/fsnotify)| +|kqueue |BSD, OS X, iOS\*|Supported [![Build Status](https://travis-ci.org/go-fsnotify/fsnotify.svg?branch=master)](https://travis-ci.org/go-fsnotify/fsnotify)| +|ReadDirectoryChangesW|Windows|Supported [![Build status](https://ci.appveyor.com/api/projects/status/ivwjubaih4r0udeh/branch/master?svg=true)](https://ci.appveyor.com/project/NathanYoungman/fsnotify/branch/master)| +|FSEvents |OS X |[Planned](https://github.com/go-fsnotify/fsnotify/issues/11)| +|FEN |Solaris 11 |[Planned](https://github.com/go-fsnotify/fsnotify/issues/12)| +|fanotify |Linux 2.6.37+ | | +|USN Journals |Windows |[Maybe](https://github.com/go-fsnotify/fsnotify/issues/53)| +|Polling |*All* |[Maybe](https://github.com/go-fsnotify/fsnotify/issues/9)| + +\* Android and iOS are untested. + +Please see [the documentation](https://godoc.org/gopkg.in/fsnotify.v1) for usage. Consult the [Wiki](https://github.com/go-fsnotify/fsnotify/wiki) for the FAQ and further information. + +## API stability + +Two major versions of fsnotify exist. + +**[fsnotify.v0](https://gopkg.in/fsnotify.v0)** is API-compatible with [howeyc/fsnotify](https://godoc.org/github.com/howeyc/fsnotify). Bugfixes *may* be backported, but I recommend upgrading to v1. + +```go +import "gopkg.in/fsnotify.v0" +``` + +\* Refer to the package as fsnotify (without the .v0 suffix). + +**[fsnotify.v1](https://gopkg.in/fsnotify.v1)** provides [a new API](https://godoc.org/gopkg.in/fsnotify.v1) based on [this design document](http://goo.gl/MrYxyA). You can import v1 with: + +```go +import "gopkg.in/fsnotify.v1" +``` + +Further API changes are [planned](https://github.com/go-fsnotify/fsnotify/milestones), but a new major revision will be tagged, so you can depend on the v1 API. + +**Master** may have unreleased changes. Use it to test the very latest code or when [contributing][], but don't expect it to remain API-compatible: + +```go +import "github.com/go-fsnotify/fsnotify" +``` + +## Contributing + +Please refer to [CONTRIBUTING][] before opening an issue or pull request. + +## Example + +See [example_test.go](https://github.com/go-fsnotify/fsnotify/blob/master/example_test.go). + +[contributing]: https://github.com/go-fsnotify/fsnotify/blob/master/CONTRIBUTING.md + +## Related Projects + +* [notify](https://github.com/rjeczalik/notify) +* [fsevents](https://github.com/go-fsnotify/fsevents) + diff --git a/vendor/gopkg.in/fsnotify.v1/example_test.go b/vendor/gopkg.in/fsnotify.v1/example_test.go new file mode 100644 index 0000000..3063796 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/example_test.go @@ -0,0 +1,42 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !plan9,!solaris + +package fsnotify_test + +import ( + "log" + + "github.com/go-fsnotify/fsnotify" +) + +func ExampleNewWatcher() { + watcher, err := fsnotify.NewWatcher() + if err != nil { + log.Fatal(err) + } + defer watcher.Close() + + done := make(chan bool) + go func() { + for { + select { + case event := <-watcher.Events: + log.Println("event:", event) + if event.Op&fsnotify.Write == fsnotify.Write { + log.Println("modified file:", event.Name) + } + case err := <-watcher.Errors: + log.Println("error:", err) + } + } + }() + + err = watcher.Add("/tmp/foo") + if err != nil { + log.Fatal(err) + } + <-done +} diff --git a/vendor/gopkg.in/fsnotify.v1/fsnotify.go b/vendor/gopkg.in/fsnotify.v1/fsnotify.go new file mode 100644 index 0000000..c899ee0 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/fsnotify.go @@ -0,0 +1,62 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !plan9,!solaris + +// Package fsnotify provides a platform-independent interface for file system notifications. +package fsnotify + +import ( + "bytes" + "fmt" +) + +// Event represents a single file system notification. +type Event struct { + Name string // Relative path to the file or directory. + Op Op // File operation that triggered the event. +} + +// Op describes a set of file operations. +type Op uint32 + +// These are the generalized file operations that can trigger a notification. +const ( + Create Op = 1 << iota + Write + Remove + Rename + Chmod +) + +// String returns a string representation of the event in the form +// "file: REMOVE|WRITE|..." +func (e Event) String() string { + // Use a buffer for efficient string concatenation + var buffer bytes.Buffer + + if e.Op&Create == Create { + buffer.WriteString("|CREATE") + } + if e.Op&Remove == Remove { + buffer.WriteString("|REMOVE") + } + if e.Op&Write == Write { + buffer.WriteString("|WRITE") + } + if e.Op&Rename == Rename { + buffer.WriteString("|RENAME") + } + if e.Op&Chmod == Chmod { + buffer.WriteString("|CHMOD") + } + + // If buffer remains empty, return no event names + if buffer.Len() == 0 { + return fmt.Sprintf("%q: ", e.Name) + } + + // Return a list of event names, with leading pipe character stripped + return fmt.Sprintf("%q: %s", e.Name, buffer.String()[1:]) +} diff --git a/vendor/gopkg.in/fsnotify.v1/inotify.go b/vendor/gopkg.in/fsnotify.v1/inotify.go new file mode 100644 index 0000000..d7759ec --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/inotify.go @@ -0,0 +1,306 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package fsnotify + +import ( + "errors" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "sync" + "syscall" + "unsafe" +) + +// Watcher watches a set of files, delivering events to a channel. +type Watcher struct { + Events chan Event + Errors chan error + mu sync.Mutex // Map access + fd int + poller *fdPoller + watches map[string]*watch // Map of inotify watches (key: path) + paths map[int]string // Map of watched paths (key: watch descriptor) + done chan struct{} // Channel for sending a "quit message" to the reader goroutine + doneResp chan struct{} // Channel to respond to Close +} + +// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events. +func NewWatcher() (*Watcher, error) { + // Create inotify fd + fd, errno := syscall.InotifyInit() + if fd == -1 { + return nil, errno + } + // Create epoll + poller, err := newFdPoller(fd) + if err != nil { + syscall.Close(fd) + return nil, err + } + w := &Watcher{ + fd: fd, + poller: poller, + watches: make(map[string]*watch), + paths: make(map[int]string), + Events: make(chan Event), + Errors: make(chan error), + done: make(chan struct{}), + doneResp: make(chan struct{}), + } + + go w.readEvents() + return w, nil +} + +func (w *Watcher) isClosed() bool { + select { + case <-w.done: + return true + default: + return false + } +} + +// Close removes all watches and closes the events channel. +func (w *Watcher) Close() error { + if w.isClosed() { + return nil + } + + // Send 'close' signal to goroutine, and set the Watcher to closed. + close(w.done) + + // Wake up goroutine + w.poller.wake() + + // Wait for goroutine to close + <-w.doneResp + + return nil +} + +// Add starts watching the named file or directory (non-recursively). +func (w *Watcher) Add(name string) error { + name = filepath.Clean(name) + if w.isClosed() { + return errors.New("inotify instance already closed") + } + + const agnosticEvents = syscall.IN_MOVED_TO | syscall.IN_MOVED_FROM | + syscall.IN_CREATE | syscall.IN_ATTRIB | syscall.IN_MODIFY | + syscall.IN_MOVE_SELF | syscall.IN_DELETE | syscall.IN_DELETE_SELF + + var flags uint32 = agnosticEvents + + w.mu.Lock() + watchEntry, found := w.watches[name] + w.mu.Unlock() + if found { + watchEntry.flags |= flags + flags |= syscall.IN_MASK_ADD + } + wd, errno := syscall.InotifyAddWatch(w.fd, name, flags) + if wd == -1 { + return errno + } + + w.mu.Lock() + w.watches[name] = &watch{wd: uint32(wd), flags: flags} + w.paths[wd] = name + w.mu.Unlock() + + return nil +} + +// Remove stops watching the named file or directory (non-recursively). +func (w *Watcher) Remove(name string) error { + name = filepath.Clean(name) + + // Fetch the watch. + w.mu.Lock() + defer w.mu.Unlock() + watch, ok := w.watches[name] + + // Remove it from inotify. + if !ok { + return fmt.Errorf("can't remove non-existent inotify watch for: %s", name) + } + // inotify_rm_watch will return EINVAL if the file has been deleted; + // the inotify will already have been removed. + // That means we can safely delete it from our watches, whatever inotify_rm_watch does. + delete(w.watches, name) + success, errno := syscall.InotifyRmWatch(w.fd, watch.wd) + if success == -1 { + // TODO: Perhaps it's not helpful to return an error here in every case. + // the only two possible errors are: + // EBADF, which happens when w.fd is not a valid file descriptor of any kind. + // EINVAL, which is when fd is not an inotify descriptor or wd is not a valid watch descriptor. + // Watch descriptors are invalidated when they are removed explicitly or implicitly; + // explicitly by inotify_rm_watch, implicitly when the file they are watching is deleted. + return errno + } + return nil +} + +type watch struct { + wd uint32 // Watch descriptor (as returned by the inotify_add_watch() syscall) + flags uint32 // inotify flags of this watch (see inotify(7) for the list of valid flags) +} + +// readEvents reads from the inotify file descriptor, converts the +// received events into Event objects and sends them via the Events channel +func (w *Watcher) readEvents() { + var ( + buf [syscall.SizeofInotifyEvent * 4096]byte // Buffer for a maximum of 4096 raw events + n int // Number of bytes read with read() + errno error // Syscall errno + ok bool // For poller.wait + ) + + defer close(w.doneResp) + defer close(w.Errors) + defer close(w.Events) + defer syscall.Close(w.fd) + defer w.poller.close() + + for { + // See if we have been closed. + if w.isClosed() { + return + } + + ok, errno = w.poller.wait() + if errno != nil { + select { + case w.Errors <- errno: + case <-w.done: + return + } + continue + } + + if !ok { + continue + } + + n, errno = syscall.Read(w.fd, buf[:]) + // If a signal interrupted execution, see if we've been asked to close, and try again. + // http://man7.org/linux/man-pages/man7/signal.7.html : + // "Before Linux 3.8, reads from an inotify(7) file descriptor were not restartable" + if errno == syscall.EINTR { + continue + } + + // syscall.Read might have been woken up by Close. If so, we're done. + if w.isClosed() { + return + } + + if n < syscall.SizeofInotifyEvent { + var err error + if n == 0 { + // If EOF is received. This should really never happen. + err = io.EOF + } else if n < 0 { + // If an error occured while reading. + err = errno + } else { + // Read was too short. + err = errors.New("notify: short read in readEvents()") + } + select { + case w.Errors <- err: + case <-w.done: + return + } + continue + } + + var offset uint32 + // We don't know how many events we just read into the buffer + // While the offset points to at least one whole event... + for offset <= uint32(n-syscall.SizeofInotifyEvent) { + // Point "raw" to the event in the buffer + raw := (*syscall.InotifyEvent)(unsafe.Pointer(&buf[offset])) + + mask := uint32(raw.Mask) + nameLen := uint32(raw.Len) + // If the event happened to the watched directory or the watched file, the kernel + // doesn't append the filename to the event, but we would like to always fill the + // the "Name" field with a valid filename. We retrieve the path of the watch from + // the "paths" map. + w.mu.Lock() + name := w.paths[int(raw.Wd)] + w.mu.Unlock() + if nameLen > 0 { + // Point "bytes" at the first byte of the filename + bytes := (*[syscall.PathMax]byte)(unsafe.Pointer(&buf[offset+syscall.SizeofInotifyEvent])) + // The filename is padded with NULL bytes. TrimRight() gets rid of those. + name += "/" + strings.TrimRight(string(bytes[0:nameLen]), "\000") + } + + event := newEvent(name, mask) + + // Send the events that are not ignored on the events channel + if !event.ignoreLinux(mask) { + select { + case w.Events <- event: + case <-w.done: + return + } + } + + // Move to the next event in the buffer + offset += syscall.SizeofInotifyEvent + nameLen + } + } +} + +// Certain types of events can be "ignored" and not sent over the Events +// channel. Such as events marked ignore by the kernel, or MODIFY events +// against files that do not exist. +func (e *Event) ignoreLinux(mask uint32) bool { + // Ignore anything the inotify API says to ignore + if mask&syscall.IN_IGNORED == syscall.IN_IGNORED { + return true + } + + // If the event is not a DELETE or RENAME, the file must exist. + // Otherwise the event is ignored. + // *Note*: this was put in place because it was seen that a MODIFY + // event was sent after the DELETE. This ignores that MODIFY and + // assumes a DELETE will come or has come if the file doesn't exist. + if !(e.Op&Remove == Remove || e.Op&Rename == Rename) { + _, statErr := os.Lstat(e.Name) + return os.IsNotExist(statErr) + } + return false +} + +// newEvent returns an platform-independent Event based on an inotify mask. +func newEvent(name string, mask uint32) Event { + e := Event{Name: name} + if mask&syscall.IN_CREATE == syscall.IN_CREATE || mask&syscall.IN_MOVED_TO == syscall.IN_MOVED_TO { + e.Op |= Create + } + if mask&syscall.IN_DELETE_SELF == syscall.IN_DELETE_SELF || mask&syscall.IN_DELETE == syscall.IN_DELETE { + e.Op |= Remove + } + if mask&syscall.IN_MODIFY == syscall.IN_MODIFY { + e.Op |= Write + } + if mask&syscall.IN_MOVE_SELF == syscall.IN_MOVE_SELF || mask&syscall.IN_MOVED_FROM == syscall.IN_MOVED_FROM { + e.Op |= Rename + } + if mask&syscall.IN_ATTRIB == syscall.IN_ATTRIB { + e.Op |= Chmod + } + return e +} diff --git a/vendor/gopkg.in/fsnotify.v1/inotify_poller.go b/vendor/gopkg.in/fsnotify.v1/inotify_poller.go new file mode 100644 index 0000000..3b41784 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/inotify_poller.go @@ -0,0 +1,186 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package fsnotify + +import ( + "errors" + "syscall" +) + +type fdPoller struct { + fd int // File descriptor (as returned by the inotify_init() syscall) + epfd int // Epoll file descriptor + pipe [2]int // Pipe for waking up +} + +func emptyPoller(fd int) *fdPoller { + poller := new(fdPoller) + poller.fd = fd + poller.epfd = -1 + poller.pipe[0] = -1 + poller.pipe[1] = -1 + return poller +} + +// Create a new inotify poller. +// This creates an inotify handler, and an epoll handler. +func newFdPoller(fd int) (*fdPoller, error) { + var errno error + poller := emptyPoller(fd) + defer func() { + if errno != nil { + poller.close() + } + }() + poller.fd = fd + + // Create epoll fd + poller.epfd, errno = syscall.EpollCreate(1) + if poller.epfd == -1 { + return nil, errno + } + // Create pipe; pipe[0] is the read end, pipe[1] the write end. + errno = syscall.Pipe2(poller.pipe[:], syscall.O_NONBLOCK) + if errno != nil { + return nil, errno + } + + // Register inotify fd with epoll + event := syscall.EpollEvent{ + Fd: int32(poller.fd), + Events: syscall.EPOLLIN, + } + errno = syscall.EpollCtl(poller.epfd, syscall.EPOLL_CTL_ADD, poller.fd, &event) + if errno != nil { + return nil, errno + } + + // Register pipe fd with epoll + event = syscall.EpollEvent{ + Fd: int32(poller.pipe[0]), + Events: syscall.EPOLLIN, + } + errno = syscall.EpollCtl(poller.epfd, syscall.EPOLL_CTL_ADD, poller.pipe[0], &event) + if errno != nil { + return nil, errno + } + + return poller, nil +} + +// Wait using epoll. +// Returns true if something is ready to be read, +// false if there is not. +func (poller *fdPoller) wait() (bool, error) { + // 3 possible events per fd, and 2 fds, makes a maximum of 6 events. + // I don't know whether epoll_wait returns the number of events returned, + // or the total number of events ready. + // I decided to catch both by making the buffer one larger than the maximum. + events := make([]syscall.EpollEvent, 7) + for { + n, errno := syscall.EpollWait(poller.epfd, events, -1) + if n == -1 { + if errno == syscall.EINTR { + continue + } + return false, errno + } + if n == 0 { + // If there are no events, try again. + continue + } + if n > 6 { + // This should never happen. More events were returned than should be possible. + return false, errors.New("epoll_wait returned more events than I know what to do with") + } + ready := events[:n] + epollhup := false + epollerr := false + epollin := false + for _, event := range ready { + if event.Fd == int32(poller.fd) { + if event.Events&syscall.EPOLLHUP != 0 { + // This should not happen, but if it does, treat it as a wakeup. + epollhup = true + } + if event.Events&syscall.EPOLLERR != 0 { + // If an error is waiting on the file descriptor, we should pretend + // something is ready to read, and let syscall.Read pick up the error. + epollerr = true + } + if event.Events&syscall.EPOLLIN != 0 { + // There is data to read. + epollin = true + } + } + if event.Fd == int32(poller.pipe[0]) { + if event.Events&syscall.EPOLLHUP != 0 { + // Write pipe descriptor was closed, by us. This means we're closing down the + // watcher, and we should wake up. + } + if event.Events&syscall.EPOLLERR != 0 { + // If an error is waiting on the pipe file descriptor. + // This is an absolute mystery, and should never ever happen. + return false, errors.New("Error on the pipe descriptor.") + } + if event.Events&syscall.EPOLLIN != 0 { + // This is a regular wakeup, so we have to clear the buffer. + err := poller.clearWake() + if err != nil { + return false, err + } + } + } + } + + if epollhup || epollerr || epollin { + return true, nil + } + return false, nil + } +} + +// Close the write end of the poller. +func (poller *fdPoller) wake() error { + buf := make([]byte, 1) + n, errno := syscall.Write(poller.pipe[1], buf) + if n == -1 { + if errno == syscall.EAGAIN { + // Buffer is full, poller will wake. + return nil + } + return errno + } + return nil +} + +func (poller *fdPoller) clearWake() error { + // You have to be woken up a LOT in order to get to 100! + buf := make([]byte, 100) + n, errno := syscall.Read(poller.pipe[0], buf) + if n == -1 { + if errno == syscall.EAGAIN { + // Buffer is empty, someone else cleared our wake. + return nil + } + return errno + } + return nil +} + +// Close all poller file descriptors, but not the one passed to it. +func (poller *fdPoller) close() { + if poller.pipe[1] != -1 { + syscall.Close(poller.pipe[1]) + } + if poller.pipe[0] != -1 { + syscall.Close(poller.pipe[0]) + } + if poller.epfd != -1 { + syscall.Close(poller.epfd) + } +} diff --git a/vendor/gopkg.in/fsnotify.v1/inotify_poller_test.go b/vendor/gopkg.in/fsnotify.v1/inotify_poller_test.go new file mode 100644 index 0000000..af9f407 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/inotify_poller_test.go @@ -0,0 +1,228 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package fsnotify + +import ( + "syscall" + "testing" + "time" +) + +type testFd [2]int + +func makeTestFd(t *testing.T) testFd { + var tfd testFd + errno := syscall.Pipe(tfd[:]) + if errno != nil { + t.Fatalf("Failed to create pipe: %v", errno) + } + return tfd +} + +func (tfd testFd) fd() int { + return tfd[0] +} + +func (tfd testFd) closeWrite(t *testing.T) { + errno := syscall.Close(tfd[1]) + if errno != nil { + t.Fatalf("Failed to close write end of pipe: %v", errno) + } +} + +func (tfd testFd) put(t *testing.T) { + buf := make([]byte, 10) + _, errno := syscall.Write(tfd[1], buf) + if errno != nil { + t.Fatalf("Failed to write to pipe: %v", errno) + } +} + +func (tfd testFd) get(t *testing.T) { + buf := make([]byte, 10) + _, errno := syscall.Read(tfd[0], buf) + if errno != nil { + t.Fatalf("Failed to read from pipe: %v", errno) + } +} + +func (tfd testFd) close() { + syscall.Close(tfd[1]) + syscall.Close(tfd[0]) +} + +func makePoller(t *testing.T) (testFd, *fdPoller) { + tfd := makeTestFd(t) + poller, err := newFdPoller(tfd.fd()) + if err != nil { + t.Fatalf("Failed to create poller: %v", err) + } + return tfd, poller +} + +func TestPollerWithBadFd(t *testing.T) { + _, err := newFdPoller(-1) + if err != syscall.EBADF { + t.Fatalf("Expected EBADF, got: %v", err) + } +} + +func TestPollerWithData(t *testing.T) { + tfd, poller := makePoller(t) + defer tfd.close() + defer poller.close() + + tfd.put(t) + ok, err := poller.wait() + if err != nil { + t.Fatalf("poller failed: %v", err) + } + if !ok { + t.Fatalf("expected poller to return true") + } + tfd.get(t) +} + +func TestPollerWithWakeup(t *testing.T) { + tfd, poller := makePoller(t) + defer tfd.close() + defer poller.close() + + err := poller.wake() + if err != nil { + t.Fatalf("wake failed: %v", err) + } + ok, err := poller.wait() + if err != nil { + t.Fatalf("poller failed: %v", err) + } + if ok { + t.Fatalf("expected poller to return false") + } +} + +func TestPollerWithClose(t *testing.T) { + tfd, poller := makePoller(t) + defer tfd.close() + defer poller.close() + + tfd.closeWrite(t) + ok, err := poller.wait() + if err != nil { + t.Fatalf("poller failed: %v", err) + } + if !ok { + t.Fatalf("expected poller to return true") + } +} + +func TestPollerWithWakeupAndData(t *testing.T) { + tfd, poller := makePoller(t) + defer tfd.close() + defer poller.close() + + tfd.put(t) + err := poller.wake() + if err != nil { + t.Fatalf("wake failed: %v", err) + } + + // both data and wakeup + ok, err := poller.wait() + if err != nil { + t.Fatalf("poller failed: %v", err) + } + if !ok { + t.Fatalf("expected poller to return true") + } + + // data is still in the buffer, wakeup is cleared + ok, err = poller.wait() + if err != nil { + t.Fatalf("poller failed: %v", err) + } + if !ok { + t.Fatalf("expected poller to return true") + } + + tfd.get(t) + // data is gone, only wakeup now + err = poller.wake() + if err != nil { + t.Fatalf("wake failed: %v", err) + } + ok, err = poller.wait() + if err != nil { + t.Fatalf("poller failed: %v", err) + } + if ok { + t.Fatalf("expected poller to return false") + } +} + +func TestPollerConcurrent(t *testing.T) { + tfd, poller := makePoller(t) + defer tfd.close() + defer poller.close() + + oks := make(chan bool) + live := make(chan bool) + defer close(live) + go func() { + defer close(oks) + for { + ok, err := poller.wait() + if err != nil { + t.Fatalf("poller failed: %v", err) + } + oks <- ok + if !<-live { + return + } + } + }() + + // Try a write + select { + case <-time.After(50 * time.Millisecond): + case <-oks: + t.Fatalf("poller did not wait") + } + tfd.put(t) + if !<-oks { + t.Fatalf("expected true") + } + tfd.get(t) + live <- true + + // Try a wakeup + select { + case <-time.After(50 * time.Millisecond): + case <-oks: + t.Fatalf("poller did not wait") + } + err := poller.wake() + if err != nil { + t.Fatalf("wake failed: %v", err) + } + if <-oks { + t.Fatalf("expected false") + } + live <- true + + // Try a close + select { + case <-time.After(50 * time.Millisecond): + case <-oks: + t.Fatalf("poller did not wait") + } + tfd.closeWrite(t) + if !<-oks { + t.Fatalf("expected true") + } + tfd.get(t) +} diff --git a/vendor/gopkg.in/fsnotify.v1/inotify_test.go b/vendor/gopkg.in/fsnotify.v1/inotify_test.go new file mode 100644 index 0000000..035ee8f --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/inotify_test.go @@ -0,0 +1,292 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package fsnotify + +import ( + "os" + "path/filepath" + "syscall" + "testing" + "time" +) + +func TestInotifyCloseRightAway(t *testing.T) { + w, err := NewWatcher() + if err != nil { + t.Fatalf("Failed to create watcher") + } + + // Close immediately; it won't even reach the first syscall.Read. + w.Close() + + // Wait for the close to complete. + <-time.After(50 * time.Millisecond) + isWatcherReallyClosed(t, w) +} + +func TestInotifyCloseSlightlyLater(t *testing.T) { + w, err := NewWatcher() + if err != nil { + t.Fatalf("Failed to create watcher") + } + + // Wait until readEvents has reached syscall.Read, and Close. + <-time.After(50 * time.Millisecond) + w.Close() + + // Wait for the close to complete. + <-time.After(50 * time.Millisecond) + isWatcherReallyClosed(t, w) +} + +func TestInotifyCloseSlightlyLaterWithWatch(t *testing.T) { + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + w, err := NewWatcher() + if err != nil { + t.Fatalf("Failed to create watcher") + } + w.Add(testDir) + + // Wait until readEvents has reached syscall.Read, and Close. + <-time.After(50 * time.Millisecond) + w.Close() + + // Wait for the close to complete. + <-time.After(50 * time.Millisecond) + isWatcherReallyClosed(t, w) +} + +func TestInotifyCloseAfterRead(t *testing.T) { + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + w, err := NewWatcher() + if err != nil { + t.Fatalf("Failed to create watcher") + } + + err = w.Add(testDir) + if err != nil { + t.Fatalf("Failed to add .") + } + + // Generate an event. + os.Create(filepath.Join(testDir, "somethingSOMETHINGsomethingSOMETHING")) + + // Wait for readEvents to read the event, then close the watcher. + <-time.After(50 * time.Millisecond) + w.Close() + + // Wait for the close to complete. + <-time.After(50 * time.Millisecond) + isWatcherReallyClosed(t, w) +} + +func isWatcherReallyClosed(t *testing.T, w *Watcher) { + select { + case err, ok := <-w.Errors: + if ok { + t.Fatalf("w.Errors is not closed; readEvents is still alive after closing (error: %v)", err) + } + default: + t.Fatalf("w.Errors would have blocked; readEvents is still alive!") + } + + select { + case _, ok := <-w.Events: + if ok { + t.Fatalf("w.Events is not closed; readEvents is still alive after closing") + } + default: + t.Fatalf("w.Events would have blocked; readEvents is still alive!") + } +} + +func TestInotifyCloseCreate(t *testing.T) { + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + w, err := NewWatcher() + if err != nil { + t.Fatalf("Failed to create watcher: %v", err) + } + defer w.Close() + + err = w.Add(testDir) + if err != nil { + t.Fatalf("Failed to add testDir: %v", err) + } + h, err := os.Create(filepath.Join(testDir, "testfile")) + if err != nil { + t.Fatalf("Failed to create file in testdir: %v", err) + } + h.Close() + select { + case _ = <-w.Events: + case err := <-w.Errors: + t.Fatalf("Error from watcher: %v", err) + case <-time.After(50 * time.Millisecond): + t.Fatalf("Took too long to wait for event") + } + + // At this point, we've received one event, so the goroutine is ready. + // It's also blocking on syscall.Read. + // Now we try to swap the file descriptor under its nose. + w.Close() + w, err = NewWatcher() + defer w.Close() + if err != nil { + t.Fatalf("Failed to create second watcher: %v", err) + } + + <-time.After(50 * time.Millisecond) + err = w.Add(testDir) + if err != nil { + t.Fatalf("Error adding testDir again: %v", err) + } +} + +func TestInotifyStress(t *testing.T) { + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + testFile := filepath.Join(testDir, "testfile") + + w, err := NewWatcher() + if err != nil { + t.Fatalf("Failed to create watcher: %v", err) + } + defer w.Close() + + killchan := make(chan struct{}) + defer close(killchan) + + err = w.Add(testDir) + if err != nil { + t.Fatalf("Failed to add testDir: %v", err) + } + + proc, err := os.FindProcess(os.Getpid()) + if err != nil { + t.Fatalf("Error finding process: %v", err) + } + + go func() { + for { + select { + case <-time.After(5 * time.Millisecond): + err := proc.Signal(syscall.SIGUSR1) + if err != nil { + t.Fatalf("Signal failed: %v", err) + } + case <-killchan: + return + } + } + }() + + go func() { + for { + select { + case <-time.After(11 * time.Millisecond): + err := w.poller.wake() + if err != nil { + t.Fatalf("Wake failed: %v", err) + } + case <-killchan: + return + } + } + }() + + go func() { + for { + select { + case <-killchan: + return + default: + handle, err := os.Create(testFile) + if err != nil { + t.Fatalf("Create failed: %v", err) + } + handle.Close() + time.Sleep(time.Millisecond) + err = os.Remove(testFile) + if err != nil { + t.Fatalf("Remove failed: %v", err) + } + } + } + }() + + creates := 0 + removes := 0 + after := time.After(5 * time.Second) + for { + select { + case <-after: + if creates-removes > 1 || creates-removes < -1 { + t.Fatalf("Creates and removes should not be off by more than one: %d creates, %d removes", creates, removes) + } + if creates < 50 { + t.Fatalf("Expected at least 50 creates, got %d", creates) + } + return + case err := <-w.Errors: + t.Fatalf("Got an error from watcher: %v", err) + case evt := <-w.Events: + if evt.Name != testFile { + t.Fatalf("Got an event for an unknown file: %s", evt.Name) + } + if evt.Op == Create { + creates++ + } + if evt.Op == Remove { + removes++ + } + } + } +} + +func TestInotifyRemoveTwice(t *testing.T) { + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + testFile := filepath.Join(testDir, "testfile") + + handle, err := os.Create(testFile) + if err != nil { + t.Fatalf("Create failed: %v", err) + } + handle.Close() + + w, err := NewWatcher() + if err != nil { + t.Fatalf("Failed to create watcher: %v", err) + } + defer w.Close() + + err = w.Add(testFile) + if err != nil { + t.Fatalf("Failed to add testFile: %v", err) + } + + err = os.Remove(testFile) + if err != nil { + t.Fatalf("Failed to remove testFile: %v", err) + } + + err = w.Remove(testFile) + if err != syscall.EINVAL { + t.Fatalf("Expected EINVAL from Remove, got: %v", err) + } + + err = w.Remove(testFile) + if err == syscall.EINVAL { + t.Fatalf("Got EINVAL again, watch was not removed") + } +} diff --git a/vendor/gopkg.in/fsnotify.v1/integration_test.go b/vendor/gopkg.in/fsnotify.v1/integration_test.go new file mode 100644 index 0000000..59169c6 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/integration_test.go @@ -0,0 +1,1135 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !plan9,!solaris + +package fsnotify + +import ( + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "runtime" + "sync/atomic" + "testing" + "time" +) + +// An atomic counter +type counter struct { + val int32 +} + +func (c *counter) increment() { + atomic.AddInt32(&c.val, 1) +} + +func (c *counter) value() int32 { + return atomic.LoadInt32(&c.val) +} + +func (c *counter) reset() { + atomic.StoreInt32(&c.val, 0) +} + +// tempMkdir makes a temporary directory +func tempMkdir(t *testing.T) string { + dir, err := ioutil.TempDir("", "fsnotify") + if err != nil { + t.Fatalf("failed to create test directory: %s", err) + } + return dir +} + +// newWatcher initializes an fsnotify Watcher instance. +func newWatcher(t *testing.T) *Watcher { + watcher, err := NewWatcher() + if err != nil { + t.Fatalf("NewWatcher() failed: %s", err) + } + return watcher +} + +// addWatch adds a watch for a directory +func addWatch(t *testing.T, watcher *Watcher, dir string) { + if err := watcher.Add(dir); err != nil { + t.Fatalf("watcher.Add(%q) failed: %s", dir, err) + } +} + +func TestFsnotifyMultipleOperations(t *testing.T) { + watcher := newWatcher(t) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Errors { + t.Fatalf("error received: %s", err) + } + }() + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create directory that's not watched + testDirToMoveFiles := tempMkdir(t) + defer os.RemoveAll(testDirToMoveFiles) + + testFile := filepath.Join(testDir, "TestFsnotifySeq.testfile") + testFileRenamed := filepath.Join(testDirToMoveFiles, "TestFsnotifySeqRename.testfile") + + addWatch(t, watcher, testDir) + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Events + var createReceived, modifyReceived, deleteReceived, renameReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { + t.Logf("event received: %s", event) + if event.Op&Remove == Remove { + deleteReceived.increment() + } + if event.Op&Write == Write { + modifyReceived.increment() + } + if event.Op&Create == Create { + createReceived.increment() + } + if event.Op&Rename == Rename { + renameReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + if err := testRename(testFile, testFileRenamed); err != nil { + t.Fatalf("rename failed: %s", err) + } + + // Modify the file outside of the watched dir + f, err = os.Open(testFileRenamed) + if err != nil { + t.Fatalf("open test renamed file failed: %s", err) + } + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // Recreate the file that was moved + f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Close() + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + cReceived := createReceived.value() + if cReceived != 2 { + t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) + } + mReceived := modifyReceived.value() + if mReceived != 1 { + t.Fatalf("incorrect number of modify events received after 500 ms (%d vs %d)", mReceived, 1) + } + dReceived := deleteReceived.value() + rReceived := renameReceived.value() + if dReceived+rReceived != 1 { + t.Fatalf("incorrect number of rename+delete events received after 500 ms (%d vs %d)", rReceived+dReceived, 1) + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } +} + +func TestFsnotifyMultipleCreates(t *testing.T) { + watcher := newWatcher(t) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Errors { + t.Fatalf("error received: %s", err) + } + }() + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + testFile := filepath.Join(testDir, "TestFsnotifySeq.testfile") + + addWatch(t, watcher, testDir) + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Events + var createReceived, modifyReceived, deleteReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { + t.Logf("event received: %s", event) + if event.Op&Remove == Remove { + deleteReceived.increment() + } + if event.Op&Create == Create { + createReceived.increment() + } + if event.Op&Write == Write { + modifyReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + os.Remove(testFile) + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // Recreate the file + f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Close() + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // Modify + f, err = os.OpenFile(testFile, os.O_WRONLY, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // Modify + f, err = os.OpenFile(testFile, os.O_WRONLY, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + cReceived := createReceived.value() + if cReceived != 2 { + t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) + } + mReceived := modifyReceived.value() + if mReceived < 3 { + t.Fatalf("incorrect number of modify events received after 500 ms (%d vs atleast %d)", mReceived, 3) + } + dReceived := deleteReceived.value() + if dReceived != 1 { + t.Fatalf("incorrect number of rename+delete events received after 500 ms (%d vs %d)", dReceived, 1) + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } +} + +func TestFsnotifyDirOnly(t *testing.T) { + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create a file before watching directory + // This should NOT add any events to the fsnotify event queue + testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") + { + var f *os.File + f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + } + + addWatch(t, watcher, testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Errors { + t.Fatalf("error received: %s", err) + } + }() + + testFile := filepath.Join(testDir, "TestFsnotifyDirOnly.testfile") + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Events + var createReceived, modifyReceived, deleteReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileAlreadyExists) { + t.Logf("event received: %s", event) + if event.Op&Remove == Remove { + deleteReceived.increment() + } + if event.Op&Write == Write { + modifyReceived.increment() + } + if event.Op&Create == Create { + createReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + time.Sleep(time.Millisecond) + f.WriteString("data") + f.Sync() + f.Close() + + time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete + + os.Remove(testFile) + os.Remove(testFileAlreadyExists) + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + cReceived := createReceived.value() + if cReceived != 1 { + t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 1) + } + mReceived := modifyReceived.value() + if mReceived != 1 { + t.Fatalf("incorrect number of modify events received after 500 ms (%d vs %d)", mReceived, 1) + } + dReceived := deleteReceived.value() + if dReceived != 2 { + t.Fatalf("incorrect number of delete events received after 500 ms (%d vs %d)", dReceived, 2) + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } +} + +func TestFsnotifyDeleteWatchedDir(t *testing.T) { + watcher := newWatcher(t) + defer watcher.Close() + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create a file before watching directory + testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") + { + var f *os.File + f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + } + + addWatch(t, watcher, testDir) + + // Add a watch for testFile + addWatch(t, watcher, testFileAlreadyExists) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Errors { + t.Fatalf("error received: %s", err) + } + }() + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Events + var deleteReceived counter + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFileAlreadyExists) { + t.Logf("event received: %s", event) + if event.Op&Remove == Remove { + deleteReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + }() + + os.RemoveAll(testDir) + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + dReceived := deleteReceived.value() + if dReceived < 2 { + t.Fatalf("did not receive at least %d delete events, received %d after 500 ms", 2, dReceived) + } +} + +func TestFsnotifySubDir(t *testing.T) { + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + testFile1 := filepath.Join(testDir, "TestFsnotifyFile1.testfile") + testSubDir := filepath.Join(testDir, "sub") + testSubDirFile := filepath.Join(testDir, "sub/TestFsnotifyFile1.testfile") + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Errors { + t.Fatalf("error received: %s", err) + } + }() + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Events + var createReceived, deleteReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testSubDir) || event.Name == filepath.Clean(testFile1) { + t.Logf("event received: %s", event) + if event.Op&Create == Create { + createReceived.increment() + } + if event.Op&Remove == Remove { + deleteReceived.increment() + } + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + addWatch(t, watcher, testDir) + + // Create sub-directory + if err := os.Mkdir(testSubDir, 0777); err != nil { + t.Fatalf("failed to create test sub-directory: %s", err) + } + + // Create a file + var f *os.File + f, err := os.OpenFile(testFile1, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + + // Create a file (Should not see this! we are not watching subdir) + var fs *os.File + fs, err = os.OpenFile(testSubDirFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + fs.Sync() + fs.Close() + + time.Sleep(200 * time.Millisecond) + + // Make sure receive deletes for both file and sub-directory + os.RemoveAll(testSubDir) + os.Remove(testFile1) + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + cReceived := createReceived.value() + if cReceived != 2 { + t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) + } + dReceived := deleteReceived.value() + if dReceived != 2 { + t.Fatalf("incorrect number of delete events received after 500 ms (%d vs %d)", dReceived, 2) + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } +} + +func TestFsnotifyRename(t *testing.T) { + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + addWatch(t, watcher, testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Errors { + t.Fatalf("error received: %s", err) + } + }() + + testFile := filepath.Join(testDir, "TestFsnotifyEvents.testfile") + testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Events + var renameReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileRenamed) { + if event.Op&Rename == Rename { + renameReceived.increment() + } + t.Logf("event received: %s", event) + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + f.WriteString("data") + f.Sync() + f.Close() + + // Add a watch for testFile + addWatch(t, watcher, testFile) + + if err := testRename(testFile, testFileRenamed); err != nil { + t.Fatalf("rename failed: %s", err) + } + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + if renameReceived.value() == 0 { + t.Fatal("fsnotify rename events have not been received after 500 ms") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } + + os.Remove(testFileRenamed) +} + +func TestFsnotifyRenameToCreate(t *testing.T) { + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create directory to get file + testDirFrom := tempMkdir(t) + defer os.RemoveAll(testDirFrom) + + addWatch(t, watcher, testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Errors { + t.Fatalf("error received: %s", err) + } + }() + + testFile := filepath.Join(testDirFrom, "TestFsnotifyEvents.testfile") + testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Events + var createReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileRenamed) { + if event.Op&Create == Create { + createReceived.increment() + } + t.Logf("event received: %s", event) + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + + if err := testRename(testFile, testFileRenamed); err != nil { + t.Fatalf("rename failed: %s", err) + } + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + if createReceived.value() == 0 { + t.Fatal("fsnotify create events have not been received after 500 ms") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } + + os.Remove(testFileRenamed) +} + +func TestFsnotifyRenameToOverwrite(t *testing.T) { + switch runtime.GOOS { + case "plan9", "windows": + t.Skipf("skipping test on %q (os.Rename over existing file does not create event).", runtime.GOOS) + } + + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create directory to get file + testDirFrom := tempMkdir(t) + defer os.RemoveAll(testDirFrom) + + testFile := filepath.Join(testDirFrom, "TestFsnotifyEvents.testfile") + testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") + + // Create a file + var fr *os.File + fr, err := os.OpenFile(testFileRenamed, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + fr.Sync() + fr.Close() + + addWatch(t, watcher, testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Errors { + t.Fatalf("error received: %s", err) + } + }() + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Events + var eventReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testFileRenamed) { + eventReceived.increment() + t.Logf("event received: %s", event) + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + + if err := testRename(testFile, testFileRenamed); err != nil { + t.Fatalf("rename failed: %s", err) + } + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + if eventReceived.value() == 0 { + t.Fatal("fsnotify events have not been received after 500 ms") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(2 * time.Second): + t.Fatal("event stream was not closed after 2 seconds") + } + + os.Remove(testFileRenamed) +} + +func TestRemovalOfWatch(t *testing.T) { + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create a file before watching directory + testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") + { + var f *os.File + f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + } + + watcher := newWatcher(t) + defer watcher.Close() + + addWatch(t, watcher, testDir) + if err := watcher.Remove(testDir); err != nil { + t.Fatalf("Could not remove the watch: %v\n", err) + } + + go func() { + select { + case ev := <-watcher.Events: + t.Fatalf("We received event: %v\n", ev) + case <-time.After(500 * time.Millisecond): + t.Log("No event received, as expected.") + } + }() + + time.Sleep(200 * time.Millisecond) + // Modify the file outside of the watched dir + f, err := os.Open(testFileAlreadyExists) + if err != nil { + t.Fatalf("Open test file failed: %s", err) + } + f.WriteString("data") + f.Sync() + f.Close() + if err := os.Chmod(testFileAlreadyExists, 0700); err != nil { + t.Fatalf("chmod failed: %s", err) + } + time.Sleep(400 * time.Millisecond) +} + +func TestFsnotifyAttrib(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("attributes don't work on Windows.") + } + + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Receive errors on the error channel on a separate goroutine + go func() { + for err := range watcher.Errors { + t.Fatalf("error received: %s", err) + } + }() + + testFile := filepath.Join(testDir, "TestFsnotifyAttrib.testfile") + + // Receive events on the event channel on a separate goroutine + eventstream := watcher.Events + // The modifyReceived counter counts IsModify events that are not IsAttrib, + // and the attribReceived counts IsAttrib events (which are also IsModify as + // a consequence). + var modifyReceived counter + var attribReceived counter + done := make(chan bool) + go func() { + for event := range eventstream { + // Only count relevant events + if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { + if event.Op&Write == Write { + modifyReceived.increment() + } + if event.Op&Chmod == Chmod { + attribReceived.increment() + } + t.Logf("event received: %s", event) + } else { + t.Logf("unexpected event received: %s", event) + } + } + done <- true + }() + + // Create a file + // This should add at least one event to the fsnotify event queue + var f *os.File + f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + + f.WriteString("data") + f.Sync() + f.Close() + + // Add a watch for testFile + addWatch(t, watcher, testFile) + + if err := os.Chmod(testFile, 0700); err != nil { + t.Fatalf("chmod failed: %s", err) + } + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + // Creating/writing a file changes also the mtime, so IsAttrib should be set to true here + time.Sleep(500 * time.Millisecond) + if modifyReceived.value() != 0 { + t.Fatal("received an unexpected modify event when creating a test file") + } + if attribReceived.value() == 0 { + t.Fatal("fsnotify attribute events have not received after 500 ms") + } + + // Modifying the contents of the file does not set the attrib flag (although eg. the mtime + // might have been modified). + modifyReceived.reset() + attribReceived.reset() + + f, err = os.OpenFile(testFile, os.O_WRONLY, 0) + if err != nil { + t.Fatalf("reopening test file failed: %s", err) + } + + f.WriteString("more data") + f.Sync() + f.Close() + + time.Sleep(500 * time.Millisecond) + + if modifyReceived.value() != 1 { + t.Fatal("didn't receive a modify event after changing test file contents") + } + + if attribReceived.value() != 0 { + t.Fatal("did receive an unexpected attrib event after changing test file contents") + } + + modifyReceived.reset() + attribReceived.reset() + + // Doing a chmod on the file should trigger an event with the "attrib" flag set (the contents + // of the file are not changed though) + if err := os.Chmod(testFile, 0600); err != nil { + t.Fatalf("chmod failed: %s", err) + } + + time.Sleep(500 * time.Millisecond) + + if attribReceived.value() != 1 { + t.Fatal("didn't receive an attribute change after 500ms") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() + t.Log("waiting for the event channel to become closed...") + select { + case <-done: + t.Log("event channel closed") + case <-time.After(1e9): + t.Fatal("event stream was not closed after 1 second") + } + + os.Remove(testFile) +} + +func TestFsnotifyClose(t *testing.T) { + watcher := newWatcher(t) + watcher.Close() + + var done int32 + go func() { + watcher.Close() + atomic.StoreInt32(&done, 1) + }() + + time.Sleep(50e6) // 50 ms + if atomic.LoadInt32(&done) == 0 { + t.Fatal("double Close() test failed: second Close() call didn't return") + } + + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + if err := watcher.Add(testDir); err == nil { + t.Fatal("expected error on Watch() after Close(), got nil") + } +} + +func TestFsnotifyFakeSymlink(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("symlinks don't work on Windows.") + } + + watcher := newWatcher(t) + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + var errorsReceived counter + // Receive errors on the error channel on a separate goroutine + go func() { + for errors := range watcher.Errors { + t.Logf("Received error: %s", errors) + errorsReceived.increment() + } + }() + + // Count the CREATE events received + var createEventsReceived, otherEventsReceived counter + go func() { + for ev := range watcher.Events { + t.Logf("event received: %s", ev) + if ev.Op&Create == Create { + createEventsReceived.increment() + } else { + otherEventsReceived.increment() + } + } + }() + + addWatch(t, watcher, testDir) + + if err := os.Symlink(filepath.Join(testDir, "zzz"), filepath.Join(testDir, "zzznew")); err != nil { + t.Fatalf("Failed to create bogus symlink: %s", err) + } + t.Logf("Created bogus symlink") + + // We expect this event to be received almost immediately, but let's wait 500 ms to be sure + time.Sleep(500 * time.Millisecond) + + // Should not be error, just no events for broken links (watching nothing) + if errorsReceived.value() > 0 { + t.Fatal("fsnotify errors have been received.") + } + if otherEventsReceived.value() > 0 { + t.Fatal("fsnotify other events received on the broken link") + } + + // Except for 1 create event (for the link itself) + if createEventsReceived.value() == 0 { + t.Fatal("fsnotify create events were not received after 500 ms") + } + if createEventsReceived.value() > 1 { + t.Fatal("fsnotify more create events received than expected") + } + + // Try closing the fsnotify instance + t.Log("calling Close()") + watcher.Close() +} + +// TestConcurrentRemovalOfWatch tests that concurrent calls to RemoveWatch do not race. +// See https://codereview.appspot.com/103300045/ +// go test -test.run=TestConcurrentRemovalOfWatch -test.cpu=1,1,1,1,1 -race +func TestConcurrentRemovalOfWatch(t *testing.T) { + if runtime.GOOS != "darwin" { + t.Skip("regression test for race only present on darwin") + } + + // Create directory to watch + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + // Create a file before watching directory + testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") + { + var f *os.File + f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) + if err != nil { + t.Fatalf("creating test file failed: %s", err) + } + f.Sync() + f.Close() + } + + watcher := newWatcher(t) + defer watcher.Close() + + addWatch(t, watcher, testDir) + + // Test that RemoveWatch can be invoked concurrently, with no data races. + removed1 := make(chan struct{}) + go func() { + defer close(removed1) + watcher.Remove(testDir) + }() + removed2 := make(chan struct{}) + go func() { + close(removed2) + watcher.Remove(testDir) + }() + <-removed1 + <-removed2 +} + +func TestClose(t *testing.T) { + // Regression test for #59 bad file descriptor from Close + testDir := tempMkdir(t) + defer os.RemoveAll(testDir) + + watcher := newWatcher(t) + if err := watcher.Add(testDir); err != nil { + t.Fatalf("Expected no error on Add, got %v", err) + } + err := watcher.Close() + if err != nil { + t.Fatalf("Expected no error on Close, got %v.", err) + } +} + +func testRename(file1, file2 string) error { + switch runtime.GOOS { + case "windows", "plan9": + return os.Rename(file1, file2) + default: + cmd := exec.Command("mv", file1, file2) + return cmd.Run() + } +} diff --git a/vendor/gopkg.in/fsnotify.v1/kqueue.go b/vendor/gopkg.in/fsnotify.v1/kqueue.go new file mode 100644 index 0000000..f8a364d --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/kqueue.go @@ -0,0 +1,468 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd openbsd netbsd dragonfly darwin + +package fsnotify + +import ( + "errors" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "sync" + "syscall" + "time" +) + +// Watcher watches a set of files, delivering events to a channel. +type Watcher struct { + Events chan Event + Errors chan error + done chan bool // Channel for sending a "quit message" to the reader goroutine + + kq int // File descriptor (as returned by the kqueue() syscall). + + mu sync.Mutex // Protects access to watcher data + watches map[string]int // Map of watched file descriptors (key: path). + externalWatches map[string]bool // Map of watches added by user of the library. + dirFlags map[string]uint32 // Map of watched directories to fflags used in kqueue. + paths map[int]pathInfo // Map file descriptors to path names for processing kqueue events. + fileExists map[string]bool // Keep track of if we know this file exists (to stop duplicate create events). + isClosed bool // Set to true when Close() is first called +} + +type pathInfo struct { + name string + isDir bool +} + +// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events. +func NewWatcher() (*Watcher, error) { + kq, err := kqueue() + if err != nil { + return nil, err + } + + w := &Watcher{ + kq: kq, + watches: make(map[string]int), + dirFlags: make(map[string]uint32), + paths: make(map[int]pathInfo), + fileExists: make(map[string]bool), + externalWatches: make(map[string]bool), + Events: make(chan Event), + Errors: make(chan error), + done: make(chan bool), + } + + go w.readEvents() + return w, nil +} + +// Close removes all watches and closes the events channel. +func (w *Watcher) Close() error { + w.mu.Lock() + if w.isClosed { + w.mu.Unlock() + return nil + } + w.isClosed = true + w.mu.Unlock() + + w.mu.Lock() + ws := w.watches + w.mu.Unlock() + + var err error + for name := range ws { + if e := w.Remove(name); e != nil && err == nil { + err = e + } + } + + // Send "quit" message to the reader goroutine: + w.done <- true + + return nil +} + +// Add starts watching the named file or directory (non-recursively). +func (w *Watcher) Add(name string) error { + w.mu.Lock() + w.externalWatches[name] = true + w.mu.Unlock() + return w.addWatch(name, noteAllEvents) +} + +// Remove stops watching the the named file or directory (non-recursively). +func (w *Watcher) Remove(name string) error { + name = filepath.Clean(name) + w.mu.Lock() + watchfd, ok := w.watches[name] + w.mu.Unlock() + if !ok { + return fmt.Errorf("can't remove non-existent kevent watch for: %s", name) + } + + const registerRemove = syscall.EV_DELETE + if err := register(w.kq, []int{watchfd}, registerRemove, 0); err != nil { + return err + } + + syscall.Close(watchfd) + + w.mu.Lock() + isDir := w.paths[watchfd].isDir + delete(w.watches, name) + delete(w.paths, watchfd) + delete(w.dirFlags, name) + w.mu.Unlock() + + // Find all watched paths that are in this directory that are not external. + if isDir { + var pathsToRemove []string + w.mu.Lock() + for _, path := range w.paths { + wdir, _ := filepath.Split(path.name) + if filepath.Clean(wdir) == name { + if !w.externalWatches[path.name] { + pathsToRemove = append(pathsToRemove, path.name) + } + } + } + w.mu.Unlock() + for _, name := range pathsToRemove { + // Since these are internal, not much sense in propagating error + // to the user, as that will just confuse them with an error about + // a path they did not explicitly watch themselves. + w.Remove(name) + } + } + + return nil +} + +// Watch all events (except NOTE_EXTEND, NOTE_LINK, NOTE_REVOKE) +const noteAllEvents = syscall.NOTE_DELETE | syscall.NOTE_WRITE | syscall.NOTE_ATTRIB | syscall.NOTE_RENAME + +// keventWaitTime to block on each read from kevent +var keventWaitTime = durationToTimespec(100 * time.Millisecond) + +// addWatch adds name to the watched file set. +// The flags are interpreted as described in kevent(2). +func (w *Watcher) addWatch(name string, flags uint32) error { + var isDir bool + // Make ./name and name equivalent + name = filepath.Clean(name) + + w.mu.Lock() + if w.isClosed { + w.mu.Unlock() + return errors.New("kevent instance already closed") + } + watchfd, alreadyWatching := w.watches[name] + // We already have a watch, but we can still override flags. + if alreadyWatching { + isDir = w.paths[watchfd].isDir + } + w.mu.Unlock() + + if !alreadyWatching { + fi, err := os.Lstat(name) + if err != nil { + return err + } + + // Don't watch sockets. + if fi.Mode()&os.ModeSocket == os.ModeSocket { + return nil + } + + // Don't watch named pipes. + if fi.Mode()&os.ModeNamedPipe == os.ModeNamedPipe { + return nil + } + + // Follow Symlinks + // Unfortunately, Linux can add bogus symlinks to watch list without + // issue, and Windows can't do symlinks period (AFAIK). To maintain + // consistency, we will act like everything is fine. There will simply + // be no file events for broken symlinks. + // Hence the returns of nil on errors. + if fi.Mode()&os.ModeSymlink == os.ModeSymlink { + name, err = filepath.EvalSymlinks(name) + if err != nil { + return nil + } + + fi, err = os.Lstat(name) + if err != nil { + return nil + } + } + + watchfd, err = syscall.Open(name, openMode, 0700) + if watchfd == -1 { + return err + } + + isDir = fi.IsDir() + } + + const registerAdd = syscall.EV_ADD | syscall.EV_CLEAR | syscall.EV_ENABLE + if err := register(w.kq, []int{watchfd}, registerAdd, flags); err != nil { + syscall.Close(watchfd) + return err + } + + if !alreadyWatching { + w.mu.Lock() + w.watches[name] = watchfd + w.paths[watchfd] = pathInfo{name: name, isDir: isDir} + w.mu.Unlock() + } + + if isDir { + // Watch the directory if it has not been watched before, + // or if it was watched before, but perhaps only a NOTE_DELETE (watchDirectoryFiles) + w.mu.Lock() + watchDir := (flags&syscall.NOTE_WRITE) == syscall.NOTE_WRITE && + (!alreadyWatching || (w.dirFlags[name]&syscall.NOTE_WRITE) != syscall.NOTE_WRITE) + // Store flags so this watch can be updated later + w.dirFlags[name] = flags + w.mu.Unlock() + + if watchDir { + if err := w.watchDirectoryFiles(name); err != nil { + return err + } + } + } + return nil +} + +// readEvents reads from kqueue and converts the received kevents into +// Event values that it sends down the Events channel. +func (w *Watcher) readEvents() { + eventBuffer := make([]syscall.Kevent_t, 10) + + for { + // See if there is a message on the "done" channel + select { + case <-w.done: + err := syscall.Close(w.kq) + if err != nil { + w.Errors <- err + } + close(w.Events) + close(w.Errors) + return + default: + } + + // Get new events + kevents, err := read(w.kq, eventBuffer, &keventWaitTime) + // EINTR is okay, the syscall was interrupted before timeout expired. + if err != nil && err != syscall.EINTR { + w.Errors <- err + continue + } + + // Flush the events we received to the Events channel + for len(kevents) > 0 { + kevent := &kevents[0] + watchfd := int(kevent.Ident) + mask := uint32(kevent.Fflags) + w.mu.Lock() + path := w.paths[watchfd] + w.mu.Unlock() + event := newEvent(path.name, mask) + + if path.isDir && !(event.Op&Remove == Remove) { + // Double check to make sure the directory exists. This can happen when + // we do a rm -fr on a recursively watched folders and we receive a + // modification event first but the folder has been deleted and later + // receive the delete event + if _, err := os.Lstat(event.Name); os.IsNotExist(err) { + // mark is as delete event + event.Op |= Remove + } + } + + if event.Op&Rename == Rename || event.Op&Remove == Remove { + w.Remove(event.Name) + w.mu.Lock() + delete(w.fileExists, event.Name) + w.mu.Unlock() + } + + if path.isDir && event.Op&Write == Write && !(event.Op&Remove == Remove) { + w.sendDirectoryChangeEvents(event.Name) + } else { + // Send the event on the Events channel + w.Events <- event + } + + if event.Op&Remove == Remove { + // Look for a file that may have overwritten this. + // For example, mv f1 f2 will delete f2, then create f2. + fileDir, _ := filepath.Split(event.Name) + fileDir = filepath.Clean(fileDir) + w.mu.Lock() + _, found := w.watches[fileDir] + w.mu.Unlock() + if found { + // make sure the directory exists before we watch for changes. When we + // do a recursive watch and perform rm -fr, the parent directory might + // have gone missing, ignore the missing directory and let the + // upcoming delete event remove the watch from the parent directory. + if _, err := os.Lstat(fileDir); os.IsExist(err) { + w.sendDirectoryChangeEvents(fileDir) + // FIXME: should this be for events on files or just isDir? + } + } + } + + // Move to next event + kevents = kevents[1:] + } + } +} + +// newEvent returns an platform-independent Event based on kqueue Fflags. +func newEvent(name string, mask uint32) Event { + e := Event{Name: name} + if mask&syscall.NOTE_DELETE == syscall.NOTE_DELETE { + e.Op |= Remove + } + if mask&syscall.NOTE_WRITE == syscall.NOTE_WRITE { + e.Op |= Write + } + if mask&syscall.NOTE_RENAME == syscall.NOTE_RENAME { + e.Op |= Rename + } + if mask&syscall.NOTE_ATTRIB == syscall.NOTE_ATTRIB { + e.Op |= Chmod + } + return e +} + +func newCreateEvent(name string) Event { + return Event{Name: name, Op: Create} +} + +// watchDirectoryFiles to mimic inotify when adding a watch on a directory +func (w *Watcher) watchDirectoryFiles(dirPath string) error { + // Get all files + files, err := ioutil.ReadDir(dirPath) + if err != nil { + return err + } + + for _, fileInfo := range files { + filePath := filepath.Join(dirPath, fileInfo.Name()) + if err := w.internalWatch(filePath, fileInfo); err != nil { + return err + } + + w.mu.Lock() + w.fileExists[filePath] = true + w.mu.Unlock() + } + + return nil +} + +// sendDirectoryEvents searches the directory for newly created files +// and sends them over the event channel. This functionality is to have +// the BSD version of fsnotify match Linux inotify which provides a +// create event for files created in a watched directory. +func (w *Watcher) sendDirectoryChangeEvents(dirPath string) { + // Get all files + files, err := ioutil.ReadDir(dirPath) + if err != nil { + w.Errors <- err + } + + // Search for new files + for _, fileInfo := range files { + filePath := filepath.Join(dirPath, fileInfo.Name()) + w.mu.Lock() + _, doesExist := w.fileExists[filePath] + w.mu.Unlock() + if !doesExist { + // Send create event + w.Events <- newCreateEvent(filePath) + } + + // like watchDirectoryFiles (but without doing another ReadDir) + if err := w.internalWatch(filePath, fileInfo); err != nil { + return + } + + w.mu.Lock() + w.fileExists[filePath] = true + w.mu.Unlock() + } +} + +func (w *Watcher) internalWatch(name string, fileInfo os.FileInfo) error { + if fileInfo.IsDir() { + // mimic Linux providing delete events for subdirectories + // but preserve the flags used if currently watching subdirectory + w.mu.Lock() + flags := w.dirFlags[name] + w.mu.Unlock() + + flags |= syscall.NOTE_DELETE + return w.addWatch(name, flags) + } + + // watch file to mimic Linux inotify + return w.addWatch(name, noteAllEvents) +} + +// kqueue creates a new kernel event queue and returns a descriptor. +func kqueue() (kq int, err error) { + kq, err = syscall.Kqueue() + if kq == -1 { + return kq, err + } + return kq, nil +} + +// register events with the queue +func register(kq int, fds []int, flags int, fflags uint32) error { + changes := make([]syscall.Kevent_t, len(fds)) + + for i, fd := range fds { + // SetKevent converts int to the platform-specific types: + syscall.SetKevent(&changes[i], fd, syscall.EVFILT_VNODE, flags) + changes[i].Fflags = fflags + } + + // register the events + success, err := syscall.Kevent(kq, changes, nil, nil) + if success == -1 { + return err + } + return nil +} + +// read retrieves pending events, or waits until an event occurs. +// A timeout of nil blocks indefinitely, while 0 polls the queue. +func read(kq int, events []syscall.Kevent_t, timeout *syscall.Timespec) ([]syscall.Kevent_t, error) { + n, err := syscall.Kevent(kq, nil, events, timeout) + if err != nil { + return nil, err + } + return events[0:n], nil +} + +// durationToTimespec prepares a timeout value +func durationToTimespec(d time.Duration) syscall.Timespec { + return syscall.NsecToTimespec(d.Nanoseconds()) +} diff --git a/vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go b/vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go new file mode 100644 index 0000000..c57ccb4 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd openbsd netbsd dragonfly + +package fsnotify + +import "syscall" + +const openMode = syscall.O_NONBLOCK | syscall.O_RDONLY diff --git a/vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go b/vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go new file mode 100644 index 0000000..174b2c3 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go @@ -0,0 +1,12 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin + +package fsnotify + +import "syscall" + +// note: this constant is not defined on BSD +const openMode = syscall.O_EVTONLY diff --git a/vendor/gopkg.in/fsnotify.v1/windows.go b/vendor/gopkg.in/fsnotify.v1/windows.go new file mode 100644 index 0000000..8115852 --- /dev/null +++ b/vendor/gopkg.in/fsnotify.v1/windows.go @@ -0,0 +1,561 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package fsnotify + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "runtime" + "sync" + "syscall" + "unsafe" +) + +// Watcher watches a set of files, delivering events to a channel. +type Watcher struct { + Events chan Event + Errors chan error + isClosed bool // Set to true when Close() is first called + mu sync.Mutex // Map access + port syscall.Handle // Handle to completion port + watches watchMap // Map of watches (key: i-number) + input chan *input // Inputs to the reader are sent on this channel + quit chan chan<- error +} + +// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events. +func NewWatcher() (*Watcher, error) { + port, e := syscall.CreateIoCompletionPort(syscall.InvalidHandle, 0, 0, 0) + if e != nil { + return nil, os.NewSyscallError("CreateIoCompletionPort", e) + } + w := &Watcher{ + port: port, + watches: make(watchMap), + input: make(chan *input, 1), + Events: make(chan Event, 50), + Errors: make(chan error), + quit: make(chan chan<- error, 1), + } + go w.readEvents() + return w, nil +} + +// Close removes all watches and closes the events channel. +func (w *Watcher) Close() error { + if w.isClosed { + return nil + } + w.isClosed = true + + // Send "quit" message to the reader goroutine + ch := make(chan error) + w.quit <- ch + if err := w.wakeupReader(); err != nil { + return err + } + return <-ch +} + +// Add starts watching the named file or directory (non-recursively). +func (w *Watcher) Add(name string) error { + if w.isClosed { + return errors.New("watcher already closed") + } + in := &input{ + op: opAddWatch, + path: filepath.Clean(name), + flags: sys_FS_ALL_EVENTS, + reply: make(chan error), + } + w.input <- in + if err := w.wakeupReader(); err != nil { + return err + } + return <-in.reply +} + +// Remove stops watching the the named file or directory (non-recursively). +func (w *Watcher) Remove(name string) error { + in := &input{ + op: opRemoveWatch, + path: filepath.Clean(name), + reply: make(chan error), + } + w.input <- in + if err := w.wakeupReader(); err != nil { + return err + } + return <-in.reply +} + +const ( + // Options for AddWatch + sys_FS_ONESHOT = 0x80000000 + sys_FS_ONLYDIR = 0x1000000 + + // Events + sys_FS_ACCESS = 0x1 + sys_FS_ALL_EVENTS = 0xfff + sys_FS_ATTRIB = 0x4 + sys_FS_CLOSE = 0x18 + sys_FS_CREATE = 0x100 + sys_FS_DELETE = 0x200 + sys_FS_DELETE_SELF = 0x400 + sys_FS_MODIFY = 0x2 + sys_FS_MOVE = 0xc0 + sys_FS_MOVED_FROM = 0x40 + sys_FS_MOVED_TO = 0x80 + sys_FS_MOVE_SELF = 0x800 + + // Special events + sys_FS_IGNORED = 0x8000 + sys_FS_Q_OVERFLOW = 0x4000 +) + +func newEvent(name string, mask uint32) Event { + e := Event{Name: name} + if mask&sys_FS_CREATE == sys_FS_CREATE || mask&sys_FS_MOVED_TO == sys_FS_MOVED_TO { + e.Op |= Create + } + if mask&sys_FS_DELETE == sys_FS_DELETE || mask&sys_FS_DELETE_SELF == sys_FS_DELETE_SELF { + e.Op |= Remove + } + if mask&sys_FS_MODIFY == sys_FS_MODIFY { + e.Op |= Write + } + if mask&sys_FS_MOVE == sys_FS_MOVE || mask&sys_FS_MOVE_SELF == sys_FS_MOVE_SELF || mask&sys_FS_MOVED_FROM == sys_FS_MOVED_FROM { + e.Op |= Rename + } + if mask&sys_FS_ATTRIB == sys_FS_ATTRIB { + e.Op |= Chmod + } + return e +} + +const ( + opAddWatch = iota + opRemoveWatch +) + +const ( + provisional uint64 = 1 << (32 + iota) +) + +type input struct { + op int + path string + flags uint32 + reply chan error +} + +type inode struct { + handle syscall.Handle + volume uint32 + index uint64 +} + +type watch struct { + ov syscall.Overlapped + ino *inode // i-number + path string // Directory path + mask uint64 // Directory itself is being watched with these notify flags + names map[string]uint64 // Map of names being watched and their notify flags + rename string // Remembers the old name while renaming a file + buf [4096]byte +} + +type indexMap map[uint64]*watch +type watchMap map[uint32]indexMap + +func (w *Watcher) wakeupReader() error { + e := syscall.PostQueuedCompletionStatus(w.port, 0, 0, nil) + if e != nil { + return os.NewSyscallError("PostQueuedCompletionStatus", e) + } + return nil +} + +func getDir(pathname string) (dir string, err error) { + attr, e := syscall.GetFileAttributes(syscall.StringToUTF16Ptr(pathname)) + if e != nil { + return "", os.NewSyscallError("GetFileAttributes", e) + } + if attr&syscall.FILE_ATTRIBUTE_DIRECTORY != 0 { + dir = pathname + } else { + dir, _ = filepath.Split(pathname) + dir = filepath.Clean(dir) + } + return +} + +func getIno(path string) (ino *inode, err error) { + h, e := syscall.CreateFile(syscall.StringToUTF16Ptr(path), + syscall.FILE_LIST_DIRECTORY, + syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE, + nil, syscall.OPEN_EXISTING, + syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OVERLAPPED, 0) + if e != nil { + return nil, os.NewSyscallError("CreateFile", e) + } + var fi syscall.ByHandleFileInformation + if e = syscall.GetFileInformationByHandle(h, &fi); e != nil { + syscall.CloseHandle(h) + return nil, os.NewSyscallError("GetFileInformationByHandle", e) + } + ino = &inode{ + handle: h, + volume: fi.VolumeSerialNumber, + index: uint64(fi.FileIndexHigh)<<32 | uint64(fi.FileIndexLow), + } + return ino, nil +} + +// Must run within the I/O thread. +func (m watchMap) get(ino *inode) *watch { + if i := m[ino.volume]; i != nil { + return i[ino.index] + } + return nil +} + +// Must run within the I/O thread. +func (m watchMap) set(ino *inode, watch *watch) { + i := m[ino.volume] + if i == nil { + i = make(indexMap) + m[ino.volume] = i + } + i[ino.index] = watch +} + +// Must run within the I/O thread. +func (w *Watcher) addWatch(pathname string, flags uint64) error { + dir, err := getDir(pathname) + if err != nil { + return err + } + if flags&sys_FS_ONLYDIR != 0 && pathname != dir { + return nil + } + ino, err := getIno(dir) + if err != nil { + return err + } + w.mu.Lock() + watchEntry := w.watches.get(ino) + w.mu.Unlock() + if watchEntry == nil { + if _, e := syscall.CreateIoCompletionPort(ino.handle, w.port, 0, 0); e != nil { + syscall.CloseHandle(ino.handle) + return os.NewSyscallError("CreateIoCompletionPort", e) + } + watchEntry = &watch{ + ino: ino, + path: dir, + names: make(map[string]uint64), + } + w.mu.Lock() + w.watches.set(ino, watchEntry) + w.mu.Unlock() + flags |= provisional + } else { + syscall.CloseHandle(ino.handle) + } + if pathname == dir { + watchEntry.mask |= flags + } else { + watchEntry.names[filepath.Base(pathname)] |= flags + } + if err = w.startRead(watchEntry); err != nil { + return err + } + if pathname == dir { + watchEntry.mask &= ^provisional + } else { + watchEntry.names[filepath.Base(pathname)] &= ^provisional + } + return nil +} + +// Must run within the I/O thread. +func (w *Watcher) remWatch(pathname string) error { + dir, err := getDir(pathname) + if err != nil { + return err + } + ino, err := getIno(dir) + if err != nil { + return err + } + w.mu.Lock() + watch := w.watches.get(ino) + w.mu.Unlock() + if watch == nil { + return fmt.Errorf("can't remove non-existent watch for: %s", pathname) + } + if pathname == dir { + w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) + watch.mask = 0 + } else { + name := filepath.Base(pathname) + w.sendEvent(watch.path+"\\"+name, watch.names[name]&sys_FS_IGNORED) + delete(watch.names, name) + } + return w.startRead(watch) +} + +// Must run within the I/O thread. +func (w *Watcher) deleteWatch(watch *watch) { + for name, mask := range watch.names { + if mask&provisional == 0 { + w.sendEvent(watch.path+"\\"+name, mask&sys_FS_IGNORED) + } + delete(watch.names, name) + } + if watch.mask != 0 { + if watch.mask&provisional == 0 { + w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) + } + watch.mask = 0 + } +} + +// Must run within the I/O thread. +func (w *Watcher) startRead(watch *watch) error { + if e := syscall.CancelIo(watch.ino.handle); e != nil { + w.Errors <- os.NewSyscallError("CancelIo", e) + w.deleteWatch(watch) + } + mask := toWindowsFlags(watch.mask) + for _, m := range watch.names { + mask |= toWindowsFlags(m) + } + if mask == 0 { + if e := syscall.CloseHandle(watch.ino.handle); e != nil { + w.Errors <- os.NewSyscallError("CloseHandle", e) + } + w.mu.Lock() + delete(w.watches[watch.ino.volume], watch.ino.index) + w.mu.Unlock() + return nil + } + e := syscall.ReadDirectoryChanges(watch.ino.handle, &watch.buf[0], + uint32(unsafe.Sizeof(watch.buf)), false, mask, nil, &watch.ov, 0) + if e != nil { + err := os.NewSyscallError("ReadDirectoryChanges", e) + if e == syscall.ERROR_ACCESS_DENIED && watch.mask&provisional == 0 { + // Watched directory was probably removed + if w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) { + if watch.mask&sys_FS_ONESHOT != 0 { + watch.mask = 0 + } + } + err = nil + } + w.deleteWatch(watch) + w.startRead(watch) + return err + } + return nil +} + +// readEvents reads from the I/O completion port, converts the +// received events into Event objects and sends them via the Events channel. +// Entry point to the I/O thread. +func (w *Watcher) readEvents() { + var ( + n, key uint32 + ov *syscall.Overlapped + ) + runtime.LockOSThread() + + for { + e := syscall.GetQueuedCompletionStatus(w.port, &n, &key, &ov, syscall.INFINITE) + watch := (*watch)(unsafe.Pointer(ov)) + + if watch == nil { + select { + case ch := <-w.quit: + w.mu.Lock() + var indexes []indexMap + for _, index := range w.watches { + indexes = append(indexes, index) + } + w.mu.Unlock() + for _, index := range indexes { + for _, watch := range index { + w.deleteWatch(watch) + w.startRead(watch) + } + } + var err error + if e := syscall.CloseHandle(w.port); e != nil { + err = os.NewSyscallError("CloseHandle", e) + } + close(w.Events) + close(w.Errors) + ch <- err + return + case in := <-w.input: + switch in.op { + case opAddWatch: + in.reply <- w.addWatch(in.path, uint64(in.flags)) + case opRemoveWatch: + in.reply <- w.remWatch(in.path) + } + default: + } + continue + } + + switch e { + case syscall.ERROR_MORE_DATA: + if watch == nil { + w.Errors <- errors.New("ERROR_MORE_DATA has unexpectedly null lpOverlapped buffer") + } else { + // The i/o succeeded but the buffer is full. + // In theory we should be building up a full packet. + // In practice we can get away with just carrying on. + n = uint32(unsafe.Sizeof(watch.buf)) + } + case syscall.ERROR_ACCESS_DENIED: + // Watched directory was probably removed + w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) + w.deleteWatch(watch) + w.startRead(watch) + continue + case syscall.ERROR_OPERATION_ABORTED: + // CancelIo was called on this handle + continue + default: + w.Errors <- os.NewSyscallError("GetQueuedCompletionPort", e) + continue + case nil: + } + + var offset uint32 + for { + if n == 0 { + w.Events <- newEvent("", sys_FS_Q_OVERFLOW) + w.Errors <- errors.New("short read in readEvents()") + break + } + + // Point "raw" to the event in the buffer + raw := (*syscall.FileNotifyInformation)(unsafe.Pointer(&watch.buf[offset])) + buf := (*[syscall.MAX_PATH]uint16)(unsafe.Pointer(&raw.FileName)) + name := syscall.UTF16ToString(buf[:raw.FileNameLength/2]) + fullname := watch.path + "\\" + name + + var mask uint64 + switch raw.Action { + case syscall.FILE_ACTION_REMOVED: + mask = sys_FS_DELETE_SELF + case syscall.FILE_ACTION_MODIFIED: + mask = sys_FS_MODIFY + case syscall.FILE_ACTION_RENAMED_OLD_NAME: + watch.rename = name + case syscall.FILE_ACTION_RENAMED_NEW_NAME: + if watch.names[watch.rename] != 0 { + watch.names[name] |= watch.names[watch.rename] + delete(watch.names, watch.rename) + mask = sys_FS_MOVE_SELF + } + } + + sendNameEvent := func() { + if w.sendEvent(fullname, watch.names[name]&mask) { + if watch.names[name]&sys_FS_ONESHOT != 0 { + delete(watch.names, name) + } + } + } + if raw.Action != syscall.FILE_ACTION_RENAMED_NEW_NAME { + sendNameEvent() + } + if raw.Action == syscall.FILE_ACTION_REMOVED { + w.sendEvent(fullname, watch.names[name]&sys_FS_IGNORED) + delete(watch.names, name) + } + if w.sendEvent(fullname, watch.mask&toFSnotifyFlags(raw.Action)) { + if watch.mask&sys_FS_ONESHOT != 0 { + watch.mask = 0 + } + } + if raw.Action == syscall.FILE_ACTION_RENAMED_NEW_NAME { + fullname = watch.path + "\\" + watch.rename + sendNameEvent() + } + + // Move to the next event in the buffer + if raw.NextEntryOffset == 0 { + break + } + offset += raw.NextEntryOffset + + // Error! + if offset >= n { + w.Errors <- errors.New("Windows system assumed buffer larger than it is, events have likely been missed.") + break + } + } + + if err := w.startRead(watch); err != nil { + w.Errors <- err + } + } +} + +func (w *Watcher) sendEvent(name string, mask uint64) bool { + if mask == 0 { + return false + } + event := newEvent(name, uint32(mask)) + select { + case ch := <-w.quit: + w.quit <- ch + case w.Events <- event: + } + return true +} + +func toWindowsFlags(mask uint64) uint32 { + var m uint32 + if mask&sys_FS_ACCESS != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_LAST_ACCESS + } + if mask&sys_FS_MODIFY != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_LAST_WRITE + } + if mask&sys_FS_ATTRIB != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_ATTRIBUTES + } + if mask&(sys_FS_MOVE|sys_FS_CREATE|sys_FS_DELETE) != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_FILE_NAME | syscall.FILE_NOTIFY_CHANGE_DIR_NAME + } + return m +} + +func toFSnotifyFlags(action uint32) uint64 { + switch action { + case syscall.FILE_ACTION_ADDED: + return sys_FS_CREATE + case syscall.FILE_ACTION_REMOVED: + return sys_FS_DELETE + case syscall.FILE_ACTION_MODIFIED: + return sys_FS_MODIFY + case syscall.FILE_ACTION_RENAMED_OLD_NAME: + return sys_FS_MOVED_FROM + case syscall.FILE_ACTION_RENAMED_NEW_NAME: + return sys_FS_MOVED_TO + } + return 0 +} diff --git a/vendor/gopkg.in/tomb.v1/LICENSE b/vendor/gopkg.in/tomb.v1/LICENSE new file mode 100644 index 0000000..a4249bb --- /dev/null +++ b/vendor/gopkg.in/tomb.v1/LICENSE @@ -0,0 +1,29 @@ +tomb - support for clean goroutine termination in Go. + +Copyright (c) 2010-2011 - Gustavo Niemeyer + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/gopkg.in/tomb.v1/README.md b/vendor/gopkg.in/tomb.v1/README.md new file mode 100644 index 0000000..3ae8788 --- /dev/null +++ b/vendor/gopkg.in/tomb.v1/README.md @@ -0,0 +1,4 @@ +Installation and usage +---------------------- + +See [gopkg.in/tomb.v1](https://gopkg.in/tomb.v1) for documentation and usage details. diff --git a/vendor/gopkg.in/tomb.v1/tomb.go b/vendor/gopkg.in/tomb.v1/tomb.go new file mode 100644 index 0000000..5bcd5f8 --- /dev/null +++ b/vendor/gopkg.in/tomb.v1/tomb.go @@ -0,0 +1,176 @@ +// Copyright (c) 2011 - Gustavo Niemeyer +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The tomb package offers a conventional API for clean goroutine termination. +// +// A Tomb tracks the lifecycle of a goroutine as alive, dying or dead, +// and the reason for its death. +// +// The zero value of a Tomb assumes that a goroutine is about to be +// created or already alive. Once Kill or Killf is called with an +// argument that informs the reason for death, the goroutine is in +// a dying state and is expected to terminate soon. Right before the +// goroutine function or method returns, Done must be called to inform +// that the goroutine is indeed dead and about to stop running. +// +// A Tomb exposes Dying and Dead channels. These channels are closed +// when the Tomb state changes in the respective way. They enable +// explicit blocking until the state changes, and also to selectively +// unblock select statements accordingly. +// +// When the tomb state changes to dying and there's still logic going +// on within the goroutine, nested functions and methods may choose to +// return ErrDying as their error value, as this error won't alter the +// tomb state if provied to the Kill method. This is a convenient way to +// follow standard Go practices in the context of a dying tomb. +// +// For background and a detailed example, see the following blog post: +// +// http://blog.labix.org/2011/10/09/death-of-goroutines-under-control +// +// For a more complex code snippet demonstrating the use of multiple +// goroutines with a single Tomb, see: +// +// http://play.golang.org/p/Xh7qWsDPZP +// +package tomb + +import ( + "errors" + "fmt" + "sync" +) + +// A Tomb tracks the lifecycle of a goroutine as alive, dying or dead, +// and the reason for its death. +// +// See the package documentation for details. +type Tomb struct { + m sync.Mutex + dying chan struct{} + dead chan struct{} + reason error +} + +var ( + ErrStillAlive = errors.New("tomb: still alive") + ErrDying = errors.New("tomb: dying") +) + +func (t *Tomb) init() { + t.m.Lock() + if t.dead == nil { + t.dead = make(chan struct{}) + t.dying = make(chan struct{}) + t.reason = ErrStillAlive + } + t.m.Unlock() +} + +// Dead returns the channel that can be used to wait +// until t.Done has been called. +func (t *Tomb) Dead() <-chan struct{} { + t.init() + return t.dead +} + +// Dying returns the channel that can be used to wait +// until t.Kill or t.Done has been called. +func (t *Tomb) Dying() <-chan struct{} { + t.init() + return t.dying +} + +// Wait blocks until the goroutine is in a dead state and returns the +// reason for its death. +func (t *Tomb) Wait() error { + t.init() + <-t.dead + t.m.Lock() + reason := t.reason + t.m.Unlock() + return reason +} + +// Done flags the goroutine as dead, and should be called a single time +// right before the goroutine function or method returns. +// If the goroutine was not already in a dying state before Done is +// called, it will be flagged as dying and dead at once with no +// error. +func (t *Tomb) Done() { + t.Kill(nil) + close(t.dead) +} + +// Kill flags the goroutine as dying for the given reason. +// Kill may be called multiple times, but only the first +// non-nil error is recorded as the reason for termination. +// +// If reason is ErrDying, the previous reason isn't replaced +// even if it is nil. It's a runtime error to call Kill with +// ErrDying if t is not in a dying state. +func (t *Tomb) Kill(reason error) { + t.init() + t.m.Lock() + defer t.m.Unlock() + if reason == ErrDying { + if t.reason == ErrStillAlive { + panic("tomb: Kill with ErrDying while still alive") + } + return + } + if t.reason == nil || t.reason == ErrStillAlive { + t.reason = reason + } + // If the receive on t.dying succeeds, then + // it can only be because we have already closed it. + // If it blocks, then we know that it needs to be closed. + select { + case <-t.dying: + default: + close(t.dying) + } +} + +// Killf works like Kill, but builds the reason providing the received +// arguments to fmt.Errorf. The generated error is also returned. +func (t *Tomb) Killf(f string, a ...interface{}) error { + err := fmt.Errorf(f, a...) + t.Kill(err) + return err +} + +// Err returns the reason for the goroutine death provided via Kill +// or Killf, or ErrStillAlive when the goroutine is still alive. +func (t *Tomb) Err() (reason error) { + t.init() + t.m.Lock() + reason = t.reason + t.m.Unlock() + return +} diff --git a/vendor/gopkg.in/tomb.v1/tomb_test.go b/vendor/gopkg.in/tomb.v1/tomb_test.go new file mode 100644 index 0000000..71f11fa --- /dev/null +++ b/vendor/gopkg.in/tomb.v1/tomb_test.go @@ -0,0 +1,114 @@ +package tomb_test + +import ( + "errors" + "gopkg.in/tomb.v1" + "reflect" + "testing" +) + +func TestNewTomb(t *testing.T) { + tb := &tomb.Tomb{} + testState(t, tb, false, false, tomb.ErrStillAlive) + + tb.Done() + testState(t, tb, true, true, nil) +} + +func TestKill(t *testing.T) { + // a nil reason flags the goroutine as dying + tb := &tomb.Tomb{} + tb.Kill(nil) + testState(t, tb, true, false, nil) + + // a non-nil reason now will override Kill + err := errors.New("some error") + tb.Kill(err) + testState(t, tb, true, false, err) + + // another non-nil reason won't replace the first one + tb.Kill(errors.New("ignore me")) + testState(t, tb, true, false, err) + + tb.Done() + testState(t, tb, true, true, err) +} + +func TestKillf(t *testing.T) { + tb := &tomb.Tomb{} + + err := tb.Killf("BO%s", "OM") + if s := err.Error(); s != "BOOM" { + t.Fatalf(`Killf("BO%s", "OM"): want "BOOM", got %q`, s) + } + testState(t, tb, true, false, err) + + // another non-nil reason won't replace the first one + tb.Killf("ignore me") + testState(t, tb, true, false, err) + + tb.Done() + testState(t, tb, true, true, err) +} + +func TestErrDying(t *testing.T) { + // ErrDying being used properly, after a clean death. + tb := &tomb.Tomb{} + tb.Kill(nil) + tb.Kill(tomb.ErrDying) + testState(t, tb, true, false, nil) + + // ErrDying being used properly, after an errorful death. + err := errors.New("some error") + tb.Kill(err) + tb.Kill(tomb.ErrDying) + testState(t, tb, true, false, err) + + // ErrDying being used badly, with an alive tomb. + tb = &tomb.Tomb{} + defer func() { + err := recover() + if err != "tomb: Kill with ErrDying while still alive" { + t.Fatalf("Wrong panic on Kill(ErrDying): %v", err) + } + testState(t, tb, false, false, tomb.ErrStillAlive) + }() + tb.Kill(tomb.ErrDying) +} + +func testState(t *testing.T, tb *tomb.Tomb, wantDying, wantDead bool, wantErr error) { + select { + case <-tb.Dying(): + if !wantDying { + t.Error("<-Dying: should block") + } + default: + if wantDying { + t.Error("<-Dying: should not block") + } + } + seemsDead := false + select { + case <-tb.Dead(): + if !wantDead { + t.Error("<-Dead: should block") + } + seemsDead = true + default: + if wantDead { + t.Error("<-Dead: should not block") + } + } + if err := tb.Err(); err != wantErr { + t.Errorf("Err: want %#v, got %#v", wantErr, err) + } + if wantDead && seemsDead { + waitErr := tb.Wait() + switch { + case waitErr == tomb.ErrStillAlive: + t.Errorf("Wait should not return ErrStillAlive") + case !reflect.DeepEqual(waitErr, wantErr): + t.Errorf("Wait: want %#v, got %#v", wantErr, waitErr) + } + } +}